]> gcc.gnu.org Git - gcc.git/blame - gcc/cp/decl.c
Allow no-capture lambdas to convert to function pointer.
[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,
49f098f2 3 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
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
MS
35#include "tree.h"
36#include "rtl.h"
3bdf5ad1 37#include "expr.h"
8d08fdba
MS
38#include "flags.h"
39#include "cp-tree.h"
25af8512 40#include "tree-inline.h"
8d08fdba 41#include "decl.h"
49c249e1
JM
42#include "output.h"
43#include "except.h"
54f92bfb 44#include "toplev.h"
e2500fed 45#include "hashtab.h"
0e9295cf 46#include "tm_p.h"
672a6f42 47#include "target.h"
26f943fd 48#include "c-common.h"
ecb0eece 49#include "c-pragma.h"
7437519c 50#include "diagnostic.h"
e7c41c99 51#include "intl.h"
e2500fed 52#include "debug.h"
22ffcc6f 53#include "timevar.h"
6de9cd9a 54#include "tree-flow.h"
0d83bf5a 55#include "pointer-set.h"
68a607d8 56#include "plugin.h"
8d08fdba 57
b344d949 58static tree grokparms (tree parmlist, tree *);
11f6b451
NN
59static const char *redeclaration_error_message (tree, tree);
60
11f6b451 61static int decl_jump_unsafe (tree);
11f6b451
NN
62static void require_complete_types_for_parms (tree);
63static int ambi_op_p (enum tree_code);
64static int unary_op_p (enum tree_code);
11f6b451 65static void push_local_name (tree);
7e99327d 66static tree grok_reference_init (tree, tree, tree, tree *);
caf93cb0 67static tree grokvardecl (tree, tree, const cp_decl_specifier_seq *,
1ff3c076 68 int, int, tree);
11f6b451 69static void record_unknown_type (tree, const char *);
5779e713 70static tree builtin_function_1 (tree, tree, bool);
11f6b451
NN
71static tree build_library_fn_1 (tree, enum tree_code, tree);
72static int member_function_or_else (tree, tree, enum overload_flags);
73static void bad_specifiers (tree, const char *, int, int, int, int,
74 int);
11f6b451
NN
75static void check_for_uninitialized_const_var (tree);
76static hashval_t typename_hash (const void *);
77static int typename_compare (const void *, const void *);
11f6b451 78static tree local_variable_p_walkfn (tree *, int *, void *);
11f6b451 79static tree record_builtin_java_type (const char *, int);
461c6fce 80static const char *tag_name (enum tag_types);
29ef83de 81static tree lookup_and_check_tag (enum tag_types, tree, tag_scope, bool);
11f6b451 82static int walk_namespaces_r (tree, walk_namespaces_fn, void *);
11f6b451
NN
83static void maybe_deduce_size_from_array_init (tree, tree);
84static void layout_var_decl (tree);
7e99327d 85static tree check_initializer (tree, tree, int, tree *);
11f6b451
NN
86static void make_rtl_for_nonlocal_decl (tree, tree, const char *);
87static void save_function_data (tree);
88static void check_function_type (tree, tree);
11f6b451
NN
89static void finish_constructor_body (void);
90static void begin_destructor_body (void);
91static void finish_destructor_body (void);
92static tree create_array_type_for_decl (tree, tree, tree);
93static tree get_atexit_node (void);
94static tree get_dso_handle_node (void);
95static tree start_cleanup_fn (void);
96static void end_cleanup_fn (void);
c2255bc4 97static tree cp_make_fname_decl (location_t, tree, int);
11f6b451 98static void initialize_predefined_identifiers (void);
caf93cb0 99static tree check_special_function_return_type
11f6b451
NN
100 (special_function_kind, tree, tree);
101static tree push_cp_library_fn (enum tree_code, tree);
102static tree build_cp_library_fn (tree, enum tree_code, tree);
103static void store_parm_decls (tree);
8e3df2de
MM
104static void initialize_local_var (tree, tree);
105static void expand_static_init (tree, tree);
106static tree next_initializable_field (tree);
8d08fdba 107
7f4edbcb 108/* The following symbols are subsumed in the cp_global_trees array, and
68642fb6 109 listed here individually for documentation purposes.
8d08fdba 110
7f4edbcb
BS
111 C++ extensions
112 tree wchar_decl_node;
37c46b43 113
7f4edbcb
BS
114 tree vtable_entry_type;
115 tree delta_type_node;
7f4edbcb 116 tree __t_desc_type_node;
8d08fdba 117
9e62871e 118 tree class_type_node;
7f4edbcb 119 tree unknown_type_node;
8d08fdba 120
7f4edbcb 121 Array type `vtable_entry_type[]'
8d08fdba 122
7f4edbcb
BS
123 tree vtbl_type_node;
124 tree vtbl_ptr_type_node;
8d08fdba 125
2854d3c6 126 Namespaces,
8d08fdba 127
7f4edbcb 128 tree std_node;
2854d3c6 129 tree abi_node;
8d08fdba 130
7f4edbcb
BS
131 A FUNCTION_DECL which can call `abort'. Not necessarily the
132 one that the user will declare, but sufficient to be called
133 by routines that want to abort the program.
8d08fdba 134
7f4edbcb 135 tree abort_fndecl;
8d08fdba 136
7f4edbcb 137 The FUNCTION_DECL for the default `::operator delete'.
2986ae00 138
7f4edbcb 139 tree global_delete_fndecl;
8d08fdba 140
7f4edbcb 141 Used by RTTI
669ec2b4 142 tree type_info_type_node, tinfo_decl_id, tinfo_decl_type;
3db45ab5 143 tree tinfo_var_id; */
8d08fdba 144
7f4edbcb 145tree cp_global_trees[CPTI_MAX];
8d08fdba 146
2c73f9f5 147/* Indicates that there is a type value in some namespace, although
7f4edbcb 148 that is not necessarily in scope at the moment. */
2c73f9f5 149
00e8de68 150tree global_type_node;
2c73f9f5 151
82a2669e 152/* The node that holds the "name" of the global scope. */
00e8de68 153tree global_scope_name;
82a2669e 154
8e4ce833
JJ
155#define local_names cp_function_chain->x_local_names
156
8d08fdba
MS
157/* A list of objects which have constructors or destructors
158 which reside in the global scope. The decl is stored in
159 the TREE_VALUE slot and the initializer is stored
160 in the TREE_PURPOSE slot. */
161tree static_aggregates;
162
8d08fdba
MS
163/* -- end of C++ */
164
81b3411c 165/* A node for the integer constants 2, and 3. */
d11ad92e 166
81b3411c 167tree integer_two_node, integer_three_node;
8d08fdba 168
1799e5d5
RH
169/* Used only for jumps to as-yet undefined labels, since jumps to
170 defined labels can have their validity checked immediately. */
171
d1b38208 172struct GTY(()) named_label_use_entry {
1799e5d5
RH
173 struct named_label_use_entry *next;
174 /* The binding level to which this entry is *currently* attached.
175 This is initially the binding level in which the goto appeared,
176 but is modified as scopes are closed. */
177 struct cp_binding_level *binding_level;
178 /* The head of the names list that was current when the goto appeared,
179 or the inner scope popped. These are the decls that will *not* be
180 skipped when jumping to the label. */
181 tree names_in_scope;
182 /* The location of the goto, for error reporting. */
183 location_t o_goto_locus;
184 /* True if an OpenMP structured block scope has been closed since
185 the goto appeared. This means that the branch from the label will
186 illegally exit an OpenMP scope. */
187 bool in_omp_scope;
188};
189
6625cdb5
JM
190/* A list of all LABEL_DECLs in the function that have names. Here so
191 we can clear out their names' definitions at the end of the
192 function, and so we can check the validity of jumps to these labels. */
193
d1b38208 194struct GTY(()) named_label_entry {
1799e5d5
RH
195 /* The decl itself. */
196 tree label_decl;
197
198 /* The binding level to which the label is *currently* attached.
199 This is initially set to the binding level in which the label
200 is defined, but is modified as scopes are closed. */
e2500fed 201 struct cp_binding_level *binding_level;
3db45ab5 202 /* The head of the names list that was current when the label was
1799e5d5
RH
203 defined, or the inner scope popped. These are the decls that will
204 be skipped when jumping to the label. */
6625cdb5 205 tree names_in_scope;
1799e5d5
RH
206 /* A tree list of all decls from all binding levels that would be
207 crossed by a backward branch to the label. */
6625cdb5 208 tree bad_decls;
1799e5d5
RH
209
210 /* A list of uses of the label, before the label is defined. */
211 struct named_label_use_entry *uses;
212
213 /* The following bits are set after the label is defined, and are
214 updated as scopes are popped. They indicate that a backward jump
ddd0b831 215 to the label will illegally enter a scope of the given flavor. */
1799e5d5
RH
216 bool in_try_scope;
217 bool in_catch_scope;
218 bool in_omp_scope;
6625cdb5 219};
8d08fdba 220
4519c0a8 221#define named_labels cp_function_chain->x_named_labels
8d08fdba 222\f
b2244c65
MM
223/* The number of function bodies which we are currently processing.
224 (Zero if we are at namespace scope, one inside the body of a
225 function, two inside the body of a function in a local class, etc.) */
226int function_depth;
e23bd218 227
3368cdd3
JJ
228/* To avoid unwanted recursion, finish_function defers all mark_used calls
229 encountered during its execution until it finishes. */
230bool defer_mark_used_calls;
231VEC(tree, gc) *deferred_mark_used_calls;
232
e23bd218
IR
233/* States indicating how grokdeclarator() should handle declspecs marked
234 with __attribute__((deprecated)). An object declared as
235 __attribute__((deprecated)) suppresses warnings of uses of other
236 deprecated items. */
b344d949 237enum deprecated_states deprecated_state = DEPRECATED_NORMAL;
e23bd218 238
8d08fdba 239\f
0154eaa8
MM
240/* A TREE_LIST of VAR_DECLs. The TREE_PURPOSE is a RECORD_TYPE or
241 UNION_TYPE; the TREE_VALUE is a VAR_DECL with that type. At the
242 time the VAR_DECL was declared, the type was incomplete. */
243
e2500fed 244static GTY(()) tree incomplete_vars;
8d08fdba 245\f
74b846e0
MM
246/* Returns the kind of template specialization we are currently
247 processing, given that it's declaration contained N_CLASS_SCOPES
248 explicit scope qualifications. */
249
250tmpl_spec_kind
11f6b451 251current_tmpl_spec_kind (int n_class_scopes)
74b846e0
MM
252{
253 int n_template_parm_scopes = 0;
254 int seen_specialization_p = 0;
255 int innermost_specialization_p = 0;
e2500fed 256 struct cp_binding_level *b;
74b846e0
MM
257
258 /* Scan through the template parameter scopes. */
caf93cb0
EC
259 for (b = current_binding_level;
260 b->kind == sk_template_parms;
a7e8c268 261 b = b->level_chain)
74b846e0
MM
262 {
263 /* If we see a specialization scope inside a parameter scope,
264 then something is wrong. That corresponds to a declaration
265 like:
266
267 template <class T> template <> ...
268
0e339752 269 which is always invalid since [temp.expl.spec] forbids the
74b846e0
MM
270 specialization of a class member template if the enclosing
271 class templates are not explicitly specialized as well. */
a7e8c268 272 if (b->explicit_spec_p)
74b846e0
MM
273 {
274 if (n_template_parm_scopes == 0)
275 innermost_specialization_p = 1;
276 else
277 seen_specialization_p = 1;
278 }
279 else if (seen_specialization_p == 1)
280 return tsk_invalid_member_spec;
281
282 ++n_template_parm_scopes;
283 }
284
285 /* Handle explicit instantiations. */
286 if (processing_explicit_instantiation)
287 {
288 if (n_template_parm_scopes != 0)
289 /* We've seen a template parameter list during an explicit
290 instantiation. For example:
291
292 template <class T> template void f(int);
293
294 This is erroneous. */
295 return tsk_invalid_expl_inst;
296 else
297 return tsk_expl_inst;
298 }
299
300 if (n_template_parm_scopes < n_class_scopes)
301 /* We've not seen enough template headers to match all the
302 specialized classes present. For example:
303
0cbd7506 304 template <class T> void R<T>::S<T>::f(int);
74b846e0 305
0e339752 306 This is invalid; there needs to be one set of template
74b846e0
MM
307 parameters for each class. */
308 return tsk_insufficient_parms;
309 else if (n_template_parm_scopes == n_class_scopes)
310 /* We're processing a non-template declaration (even though it may
311 be a member of a template class.) For example:
312
0cbd7506 313 template <class T> void S<T>::f(int);
74b846e0 314
39a13be5 315 The `class T' matches the `S<T>', leaving no template headers
74b846e0
MM
316 corresponding to the `f'. */
317 return tsk_none;
318 else if (n_template_parm_scopes > n_class_scopes + 1)
319 /* We've got too many template headers. For example:
320
0cbd7506 321 template <> template <class T> void f (T);
74b846e0
MM
322
323 There need to be more enclosing classes. */
324 return tsk_excessive_parms;
325 else
326 /* This must be a template. It's of the form:
327
0cbd7506 328 template <class T> template <class U> void S<T>::f(U);
74b846e0
MM
329
330 This is a specialization if the innermost level was a
331 specialization; otherwise it's just a definition of the
332 template. */
333 return innermost_specialization_p ? tsk_expl_spec : tsk_template;
8d08fdba
MS
334}
335
74b846e0
MM
336/* Exit the current scope. */
337
338void
11f6b451 339finish_scope (void)
74b846e0
MM
340{
341 poplevel (0, 0, 0);
342}
343
acef433b
MM
344/* When a label goes out of scope, check to see if that label was used
345 in a valid manner, and issue any appropriate warnings or errors. */
346
347static void
11f6b451 348pop_label (tree label, tree old_value)
acef433b 349{
a7e8c268 350 if (!processing_template_decl)
acef433b 351 {
88848bde
MM
352 if (DECL_INITIAL (label) == NULL_TREE)
353 {
5b030314
NS
354 location_t location;
355
dee15844 356 error ("label %q+D used but not defined", label);
93409b8c 357 location = input_location; /* FIXME want (input_filename, (line)0) */
88848bde 358 /* Avoid crashing later. */
5b030314 359 define_label (location, DECL_NAME (label));
88848bde 360 }
c616e51b
MLI
361 else
362 warn_for_unused_label (label);
acef433b 363 }
acef433b 364
6625cdb5 365 SET_IDENTIFIER_LABEL_VALUE (DECL_NAME (label), old_value);
acef433b
MM
366}
367
0811ea8f 368/* At the end of a function, all labels declared within the function
68642fb6 369 go out of scope. BLOCK is the top-level block for the
acef433b
MM
370 function. */
371
1799e5d5
RH
372static int
373pop_labels_1 (void **slot, void *data)
374{
375 struct named_label_entry *ent = (struct named_label_entry *) *slot;
376 tree block = (tree) data;
377
378 pop_label (ent->label_decl, NULL_TREE);
379
380 /* Put the labels into the "variables" of the top-level block,
381 so debugger can see them. */
382 TREE_CHAIN (ent->label_decl) = BLOCK_VARS (block);
383 BLOCK_VARS (block) = ent->label_decl;
384
385 htab_clear_slot (named_labels, slot);
386
387 return 1;
388}
389
acef433b 390static void
11f6b451 391pop_labels (tree block)
acef433b 392{
1799e5d5 393 if (named_labels)
acef433b 394 {
1799e5d5
RH
395 htab_traverse (named_labels, pop_labels_1, block);
396 named_labels = NULL;
acef433b 397 }
1799e5d5
RH
398}
399
400/* At the end of a block with local labels, restore the outer definition. */
acef433b 401
1799e5d5
RH
402static void
403pop_local_label (tree label, tree old_value)
404{
405 struct named_label_entry dummy;
406 void **slot;
407
408 pop_label (label, old_value);
409
410 dummy.label_decl = label;
411 slot = htab_find_slot (named_labels, &dummy, NO_INSERT);
412 htab_clear_slot (named_labels, slot);
acef433b
MM
413}
414
80aa8340
ZL
415/* The following two routines are used to interface to Objective-C++.
416 The binding level is purposely treated as an opaque type. */
417
418void *
419objc_get_current_scope (void)
420{
421 return current_binding_level;
422}
423
424/* The following routine is used by the NeXT-style SJLJ exceptions;
425 variables get marked 'volatile' so as to not be clobbered by
f749f3c2
ZL
426 _setjmp()/_longjmp() calls. All variables in the current scope,
427 as well as parent scopes up to (but not including) ENCLOSING_BLK
428 shall be thusly marked. */
80aa8340
ZL
429
430void
431objc_mark_locals_volatile (void *enclosing_blk)
432{
433 struct cp_binding_level *scope;
434
435 for (scope = current_binding_level;
e58a9aa1 436 scope && scope != enclosing_blk;
80aa8340
ZL
437 scope = scope->level_chain)
438 {
439 tree decl;
440
441 for (decl = scope->names; decl; decl = TREE_CHAIN (decl))
660845bf 442 objc_volatilize_decl (decl);
e58a9aa1
ZL
443
444 /* Do not climb up past the current function. */
445 if (scope->kind == sk_function_parms)
446 break;
80aa8340
ZL
447 }
448}
449
1799e5d5
RH
450/* Update data for defined and undefined labels when leaving a scope. */
451
452static int
453poplevel_named_label_1 (void **slot, void *data)
454{
455 struct named_label_entry *ent = (struct named_label_entry *) *slot;
456 struct cp_binding_level *bl = (struct cp_binding_level *) data;
457 struct cp_binding_level *obl = bl->level_chain;
458
459 if (ent->binding_level == bl)
460 {
461 tree decl;
462
463 for (decl = ent->names_in_scope; decl; decl = TREE_CHAIN (decl))
464 if (decl_jump_unsafe (decl))
465 ent->bad_decls = tree_cons (NULL, decl, ent->bad_decls);
466
467 ent->binding_level = obl;
468 ent->names_in_scope = obl->names;
469 switch (bl->kind)
470 {
471 case sk_try:
472 ent->in_try_scope = true;
473 break;
474 case sk_catch:
475 ent->in_catch_scope = true;
476 break;
477 case sk_omp:
478 ent->in_omp_scope = true;
479 break;
480 default:
481 break;
482 }
483 }
484 else if (ent->uses)
485 {
486 struct named_label_use_entry *use;
487
488 for (use = ent->uses; use ; use = use->next)
489 if (use->binding_level == bl)
490 {
491 use->binding_level = obl;
492 use->names_in_scope = obl->names;
493 if (bl->kind == sk_omp)
494 use->in_omp_scope = true;
495 }
496 }
497
498 return 1;
499}
500
8d08fdba
MS
501/* Exit a binding level.
502 Pop the level off, and restore the state of the identifier-decl mappings
503 that were in effect when this level was entered.
504
505 If KEEP == 1, this level had explicit declarations, so
506 and create a "block" (a BLOCK node) for the level
507 to record its declarations and subblocks for symbol table output.
508
8d08fdba
MS
509 If FUNCTIONBODY is nonzero, this level is the body of a function,
510 so create a block as if KEEP were set and also clear out all
511 label names.
512
513 If REVERSE is nonzero, reverse the order of decls before putting
514 them into the BLOCK. */
515
516tree
11f6b451 517poplevel (int keep, int reverse, int functionbody)
8d08fdba 518{
926ce8bd 519 tree link;
8d08fdba
MS
520 /* The chain of decls was accumulated in reverse order.
521 Put it into forward order, just for cleanliness. */
522 tree decls;
523 int tmp = functionbody;
b35d4555 524 int real_functionbody;
b35d4555 525 tree subblocks;
325c3691 526 tree block;
8d08fdba 527 tree decl;
f181d4ae 528 int leaving_for_scope;
ac20c67a 529 scope_kind kind;
f181d4ae 530
22ffcc6f 531 timevar_push (TV_NAME_LOOKUP);
325c3691
RH
532 restart:
533
534 block = NULL_TREE;
b35d4555 535
50bc768d 536 gcc_assert (current_binding_level->kind != sk_class);
b74a0560 537
ac20c67a 538 real_functionbody = (current_binding_level->kind == sk_cleanup
b35d4555 539 ? ((functionbody = 0), tmp) : functionbody);
b35d4555
MM
540 subblocks = functionbody >= 0 ? current_binding_level->blocks : 0;
541
50bc768d
NS
542 gcc_assert (!VEC_length(cp_class_binding,
543 current_binding_level->class_shadowed));
8d08fdba 544
536333d4
MM
545 /* We used to use KEEP == 2 to indicate that the new block should go
546 at the beginning of the list of blocks at this binding level,
547 rather than the end. This hack is no longer used. */
50bc768d 548 gcc_assert (keep == 0 || keep == 1);
536333d4 549
ac20c67a 550 if (current_binding_level->keep)
8d08fdba
MS
551 keep = 1;
552
6625cdb5
JM
553 /* Any uses of undefined labels, and any defined labels, now operate
554 under constraints of next binding contour. */
1799e5d5
RH
555 if (cfun && !functionbody && named_labels)
556 htab_traverse (named_labels, poplevel_named_label_1,
557 current_binding_level);
6625cdb5 558
8d08fdba
MS
559 /* Get the decls in the order they were written.
560 Usually current_binding_level->names is in reverse order.
561 But parameter decls were previously put in forward order. */
562
563 if (reverse)
564 current_binding_level->names
565 = decls = nreverse (current_binding_level->names);
566 else
567 decls = current_binding_level->names;
568
8d08fdba
MS
569 /* If there were any declarations or structure tags in that level,
570 or if this level is a function body,
571 create a BLOCK to record them for the life of this function. */
8d08fdba 572 block = NULL_TREE;
f444e36b 573 if (keep == 1 || functionbody)
8d08fdba
MS
574 block = make_node (BLOCK);
575 if (block != NULL_TREE)
576 {
f444e36b
MM
577 BLOCK_VARS (block) = decls;
578 BLOCK_SUBBLOCKS (block) = subblocks;
8d08fdba
MS
579 }
580
581 /* In each subblock, record that this is its superior. */
8d08fdba 582 if (keep >= 0)
87caf699 583 for (link = subblocks; link; link = BLOCK_CHAIN (link))
8d08fdba
MS
584 BLOCK_SUPERCONTEXT (link) = block;
585
f181d4ae
MM
586 /* We still support the old for-scope rules, whereby the variables
587 in a for-init statement were in scope after the for-statement
92bc1323 588 ended. We only use the new rules if flag_new_for_scope is
f181d4ae 589 nonzero. */
68642fb6 590 leaving_for_scope
a7e8c268 591 = current_binding_level->kind == sk_for && flag_new_for_scope == 1;
f181d4ae 592
caf93cb0
EC
593 /* Before we remove the declarations first check for unused variables. */
594 if (warn_unused_variable
595 && !processing_template_decl)
596 for (decl = getdecls (); decl; decl = TREE_CHAIN (decl))
597 if (TREE_CODE (decl) == VAR_DECL
598 && ! TREE_USED (decl)
599 && ! DECL_IN_SYSTEM_HEADER (decl)
600 && DECL_NAME (decl) && ! DECL_ARTIFICIAL (decl))
b323323f 601 warning (OPT_Wunused_variable, "unused variable %q+D", decl);
caf93cb0 602
f181d4ae
MM
603 /* Remove declarations for all the DECLs in this level. */
604 for (link = decls; link; link = TREE_CHAIN (link))
605 {
c3783399 606 if (leaving_for_scope && TREE_CODE (link) == VAR_DECL
0cbd7506 607 && DECL_NAME (link))
f181d4ae 608 {
90ea9897
MM
609 tree name = DECL_NAME (link);
610 cxx_binding *ob;
f181d4ae
MM
611 tree ns_binding;
612
90ea9897
MM
613 ob = outer_binding (name,
614 IDENTIFIER_BINDING (name),
615 /*class_p=*/true);
616 if (!ob)
617 ns_binding = IDENTIFIER_NAMESPACE_VALUE (name);
c7dda1e3
MM
618 else
619 ns_binding = NULL_TREE;
620
90ea9897 621 if (ob && ob->scope == current_binding_level->level_chain)
f181d4ae 622 /* We have something like:
68642fb6 623
0cbd7506
MS
624 int i;
625 for (int i; ;);
68642fb6 626
f181d4ae
MM
627 and we are leaving the `for' scope. There's no reason to
628 keep the binding of the inner `i' in this case. */
90ea9897
MM
629 pop_binding (name, link);
630 else if ((ob && (TREE_CODE (ob->value) == TYPE_DECL))
147135cc 631 || (ns_binding && TREE_CODE (ns_binding) == TYPE_DECL))
f181d4ae
MM
632 /* Here, we have something like:
633
634 typedef int I;
635
636 void f () {
637 for (int I; ;);
638 }
639
640 We must pop the for-scope binding so we know what's a
641 type and what isn't. */
90ea9897 642 pop_binding (name, link);
e76a2646 643 else
e76a2646 644 {
f181d4ae
MM
645 /* Mark this VAR_DECL as dead so that we can tell we left it
646 there only for backward compatibility. */
647 DECL_DEAD_FOR_LOCAL (link) = 1;
68642fb6 648
517f3315 649 /* Keep track of what should have happened when we
f181d4ae 650 popped the binding. */
90ea9897 651 if (ob && ob->value)
820cc88f
DB
652 {
653 SET_DECL_SHADOWED_FOR_VAR (link, ob->value);
654 DECL_HAS_SHADOWED_FOR_VAR_P (link) = 1;
655 }
f181d4ae
MM
656
657 /* Add it to the list of dead variables in the next
658 outermost binding to that we can remove these when we
659 leave that binding. */
660 current_binding_level->level_chain->dead_vars_from_for
661 = tree_cons (NULL_TREE, link,
662 current_binding_level->level_chain->
663 dead_vars_from_for);
664
af6fd53f 665 /* Although we don't pop the cxx_binding, we do clear
147135cc 666 its SCOPE since the scope is going away now. */
caf93cb0 667 IDENTIFIER_BINDING (name)->scope
90ea9897 668 = current_binding_level->level_chain;
e76a2646 669 }
2ee887f2 670 }
68642fb6 671 else
8d6e462b 672 {
8dc2b103 673 tree name;
c8094d83 674
f181d4ae 675 /* Remove the binding. */
0034cf72 676 decl = link;
caf93cb0 677
0034cf72
JM
678 if (TREE_CODE (decl) == TREE_LIST)
679 decl = TREE_VALUE (decl);
8dc2b103 680 name = decl;
c8094d83 681
8dc2b103
NS
682 if (TREE_CODE (name) == OVERLOAD)
683 name = OVL_FUNCTION (name);
caf93cb0 684
8dc2b103
NS
685 gcc_assert (DECL_P (name));
686 pop_binding (DECL_NAME (name), decl);
8d08fdba 687 }
f181d4ae 688 }
8d08fdba 689
f181d4ae
MM
690 /* Remove declarations for any `for' variables from inner scopes
691 that we kept around. */
692 for (link = current_binding_level->dead_vars_from_for;
693 link; link = TREE_CHAIN (link))
d8f8dca1 694 pop_binding (DECL_NAME (TREE_VALUE (link)), TREE_VALUE (link));
2ee887f2 695
f181d4ae
MM
696 /* Restore the IDENTIFIER_TYPE_VALUEs. */
697 for (link = current_binding_level->type_shadowed;
698 link; link = TREE_CHAIN (link))
699 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (link), TREE_VALUE (link));
acef433b
MM
700
701 /* Restore the IDENTIFIER_LABEL_VALUEs for local labels. */
702 for (link = current_binding_level->shadowed_labels;
68642fb6 703 link;
acef433b 704 link = TREE_CHAIN (link))
1799e5d5 705 pop_local_label (TREE_VALUE (link), TREE_PURPOSE (link));
acef433b 706
f181d4ae
MM
707 /* There may be OVERLOADs (wrapped in TREE_LISTs) on the BLOCK_VARs
708 list if a `using' declaration put them there. The debugging
3b426391 709 back ends won't understand OVERLOAD, so we remove them here.
f181d4ae
MM
710 Because the BLOCK_VARS are (temporarily) shared with
711 CURRENT_BINDING_LEVEL->NAMES we must do this fixup after we have
712 popped all the bindings. */
713 if (block)
714 {
715 tree* d;
8d6e462b 716
a06d48ef
JM
717 for (d = &BLOCK_VARS (block); *d; )
718 {
719 if (TREE_CODE (*d) == TREE_LIST)
720 *d = TREE_CHAIN (*d);
721 else
722 d = &TREE_CHAIN (*d);
723 }
8d6e462b 724 }
8d08fdba
MS
725
726 /* If the level being exited is the top level of a function,
727 check over all the labels. */
8d08fdba
MS
728 if (functionbody)
729 {
acef433b
MM
730 /* Since this is the top level block of a function, the vars are
731 the function's parameters. Don't leave them in the BLOCK
732 because they are found in the FUNCTION_DECL instead. */
8d08fdba 733 BLOCK_VARS (block) = 0;
acef433b 734 pop_labels (block);
8d08fdba
MS
735 }
736
ac20c67a 737 kind = current_binding_level->kind;
325c3691
RH
738 if (kind == sk_cleanup)
739 {
740 tree stmt;
741
742 /* If this is a temporary binding created for a cleanup, then we'll
743 have pushed a statement list level. Pop that, create a new
744 BIND_EXPR for the block, and insert it into the stream. */
745 stmt = pop_stmt_list (current_binding_level->statement_list);
c2255bc4 746 stmt = c_build_bind_expr (input_location, block, stmt);
325c3691
RH
747 add_stmt (stmt);
748 }
8d08fdba 749
1a6daf15 750 leave_scope ();
8d08fdba 751 if (functionbody)
72c4a4ca
GK
752 {
753 /* The current function is being defined, so its DECL_INITIAL
754 should be error_mark_node. */
755 gcc_assert (DECL_INITIAL (current_function_decl) == error_mark_node);
756 DECL_INITIAL (current_function_decl) = block;
757 }
8d08fdba 758 else if (block)
f444e36b
MM
759 current_binding_level->blocks
760 = chainon (current_binding_level->blocks, block);
761
8d08fdba
MS
762 /* If we did not make a block for the level just exited,
763 any blocks made for inner levels
764 (since they cannot be recorded as subblocks in that level)
765 must be carried forward so they will later become subblocks
766 of something else. */
767 else if (subblocks)
536333d4
MM
768 current_binding_level->blocks
769 = chainon (current_binding_level->blocks, subblocks);
8d08fdba 770
d9b2d9da
MM
771 /* Each and every BLOCK node created here in `poplevel' is important
772 (e.g. for proper debugging information) so if we created one
773 earlier, mark it as "used". */
774 if (block)
775 TREE_USED (block) = 1;
776
325c3691 777 /* All temporary bindings created for cleanups are popped silently. */
ac20c67a 778 if (kind == sk_cleanup)
325c3691 779 goto restart;
8d08fdba 780
22ffcc6f 781 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, block);
8d08fdba
MS
782}
783
0aafb128
MM
784/* Walk all the namespaces contained NAMESPACE, including NAMESPACE
785 itself, calling F for each. The DATA is passed to F as well. */
786
00e8de68 787static int
be93747e 788walk_namespaces_r (tree name_space, walk_namespaces_fn f, void* data)
00e8de68
GDR
789{
790 int result = 0;
be93747e 791 tree current = NAMESPACE_LEVEL (name_space)->namespaces;
8d08fdba 792
be93747e 793 result |= (*f) (name_space, data);
8d08fdba 794
00e8de68
GDR
795 for (; current; current = TREE_CHAIN (current))
796 result |= walk_namespaces_r (current, f, data);
fc0e7bf5 797
00e8de68 798 return result;
5566b478
MS
799}
800
00e8de68
GDR
801/* Walk all the namespaces, calling F for each. The DATA is passed to
802 F as well. */
803
804int
805walk_namespaces (walk_namespaces_fn f, void* data)
5566b478 806{
00e8de68 807 return walk_namespaces_r (global_namespace, f, data);
8d08fdba
MS
808}
809
00e8de68
GDR
810/* Call wrapup_globals_declarations for the globals in NAMESPACE. If
811 DATA is non-NULL, this is the last time we will call
812 wrapup_global_declarations for this NAMESPACE. */
39c01e4c 813
00e8de68 814int
be93747e 815wrapup_globals_for_namespace (tree name_space, void* data)
39c01e4c 816{
be93747e 817 struct cp_binding_level *level = NAMESPACE_LEVEL (name_space);
9857866d
KH
818 VEC(tree,gc) *statics = level->static_decls;
819 tree *vec = VEC_address (tree, statics);
820 int len = VEC_length (tree, statics);
00e8de68 821 int last_time = (data != 0);
68642fb6 822
00e8de68 823 if (last_time)
39c01e4c 824 {
00e8de68 825 check_global_declarations (vec, len);
db5f8b93 826 emit_debug_global_declarations (vec, len);
00e8de68 827 return 0;
39c01e4c
MM
828 }
829
00e8de68
GDR
830 /* Write out any globals that need to be output. */
831 return wrapup_global_declarations (vec, len);
39c01e4c
MM
832}
833
00e8de68 834\f
9188c363
MM
835/* In C++, you don't have to write `struct S' to refer to `S'; you
836 can just use `S'. We accomplish this by creating a TYPE_DECL as
837 if the user had written `typedef struct S S'. Create and return
838 the TYPE_DECL for TYPE. */
839
840tree
11f6b451 841create_implicit_typedef (tree name, tree type)
9188c363
MM
842{
843 tree decl;
844
c2255bc4 845 decl = build_decl (input_location, TYPE_DECL, name, type);
c727aa5e 846 DECL_ARTIFICIAL (decl) = 1;
9188c363
MM
847 /* There are other implicit type declarations, like the one *within*
848 a class that allows you to write `S::S'. We must distinguish
849 amongst these. */
850 SET_DECL_IMPLICIT_TYPEDEF_P (decl);
851 TYPE_NAME (type) = decl;
852
853 return decl;
854}
855
8e4ce833
JJ
856/* Remember a local name for name-mangling purposes. */
857
858static void
11f6b451 859push_local_name (tree decl)
8e4ce833
JJ
860{
861 size_t i, nelts;
862 tree t, name;
863
22ffcc6f 864 timevar_push (TV_NAME_LOOKUP);
8e4ce833
JJ
865
866 name = DECL_NAME (decl);
867
9acaf84a 868 nelts = VEC_length (tree, local_names);
8e4ce833
JJ
869 for (i = 0; i < nelts; i++)
870 {
9acaf84a 871 t = VEC_index (tree, local_names, i);
8e4ce833
JJ
872 if (DECL_NAME (t) == name)
873 {
874 if (!DECL_LANG_SPECIFIC (decl))
875 retrofit_lang_decl (decl);
b97e8a14 876 DECL_LANG_SPECIFIC (decl)->u.base.u2sel = 1;
8e4ce833
JJ
877 if (DECL_LANG_SPECIFIC (t))
878 DECL_DISCRIMINATOR (decl) = DECL_DISCRIMINATOR (t) + 1;
879 else
880 DECL_DISCRIMINATOR (decl) = 1;
881
9acaf84a 882 VEC_replace (tree, local_names, i, decl);
de94b46c
KG
883 timevar_pop (TV_NAME_LOOKUP);
884 return;
8e4ce833
JJ
885 }
886 }
887
9acaf84a 888 VEC_safe_push (tree, gc, local_names, decl);
22ffcc6f 889 timevar_pop (TV_NAME_LOOKUP);
8e4ce833 890}
8d08fdba
MS
891\f
892/* Subroutine of duplicate_decls: return truthvalue of whether
893 or not types of these decls match.
894
895 For C++, we must compare the parameter list so that `int' can match
896 `int&' in a parameter position, but `int&' is not confused with
897 `const int&'. */
e92cc029 898
6060a796 899int
11f6b451 900decls_match (tree newdecl, tree olddecl)
8d08fdba
MS
901{
902 int types_match;
903
347d73d7
ML
904 if (newdecl == olddecl)
905 return 1;
906
6b4b3deb
MM
907 if (TREE_CODE (newdecl) != TREE_CODE (olddecl))
908 /* If the two DECLs are not even the same kind of thing, we're not
909 interested in their types. */
910 return 0;
911
912 if (TREE_CODE (newdecl) == FUNCTION_DECL)
8d08fdba
MS
913 {
914 tree f1 = TREE_TYPE (newdecl);
915 tree f2 = TREE_TYPE (olddecl);
916 tree p1 = TYPE_ARG_TYPES (f1);
917 tree p2 = TYPE_ARG_TYPES (f2);
918
c4bcc71f
JM
919 /* Specializations of different templates are different functions
920 even if they have the same type. */
921 tree t1 = (DECL_USE_TEMPLATE (newdecl)
922 ? DECL_TI_TEMPLATE (newdecl)
923 : NULL_TREE);
924 tree t2 = (DECL_USE_TEMPLATE (olddecl)
925 ? DECL_TI_TEMPLATE (olddecl)
926 : NULL_TREE);
927 if (t1 != t2)
928 return 0;
929
4f1c5b7d 930 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
eb68cb58
MM
931 && ! (DECL_EXTERN_C_P (newdecl)
932 && DECL_EXTERN_C_P (olddecl)))
c5a6fc45
JM
933 return 0;
934
8353dd9a
JM
935#ifdef NO_IMPLICIT_EXTERN_C
936 /* A new declaration doesn't match a built-in one unless it
937 is also extern "C". */
a0ff8620 938 if (DECL_IS_BUILTIN (olddecl)
8353dd9a
JM
939 && DECL_EXTERN_C_P (olddecl) && !DECL_EXTERN_C_P (newdecl))
940 return 0;
941#endif
942
8d08fdba 943 if (TREE_CODE (f1) != TREE_CODE (f2))
0cbd7506 944 return 0;
8d08fdba 945
3bfdc719 946 if (same_type_p (TREE_TYPE (f1), TREE_TYPE (f2)))
8926095f 947 {
8b27e9ef
NS
948 if (p2 == NULL_TREE && DECL_EXTERN_C_P (olddecl)
949 && (DECL_BUILT_IN (olddecl)
950#ifndef NO_IMPLICIT_EXTERN_C
0cbd7506
MS
951 || (DECL_IN_SYSTEM_HEADER (newdecl) && !DECL_CLASS_SCOPE_P (newdecl))
952 || (DECL_IN_SYSTEM_HEADER (olddecl) && !DECL_CLASS_SCOPE_P (olddecl))
8b27e9ef
NS
953#endif
954 ))
a28e3c7f
MS
955 {
956 types_match = self_promoting_args_p (p1);
957 if (p1 == void_list_node)
958 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
959 }
8b27e9ef
NS
960#ifndef NO_IMPLICIT_EXTERN_C
961 else if (p1 == NULL_TREE
962 && (DECL_EXTERN_C_P (olddecl)
0cbd7506
MS
963 && DECL_IN_SYSTEM_HEADER (olddecl)
964 && !DECL_CLASS_SCOPE_P (olddecl))
8b27e9ef 965 && (DECL_EXTERN_C_P (newdecl)
0cbd7506
MS
966 && DECL_IN_SYSTEM_HEADER (newdecl)
967 && !DECL_CLASS_SCOPE_P (newdecl)))
a28e3c7f
MS
968 {
969 types_match = self_promoting_args_p (p2);
970 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
971 }
8b27e9ef 972#endif
8926095f 973 else
91063b51 974 types_match = compparms (p1, p2);
8926095f 975 }
8d08fdba
MS
976 else
977 types_match = 0;
978 }
6b4b3deb 979 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
51c184be 980 {
2bb5d995
JM
981 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl))
982 != TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)))
983 return 0;
984
ee935db4
MM
985 if (!comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
986 DECL_TEMPLATE_PARMS (olddecl)))
987 return 0;
988
f84b4be9 989 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
ee935db4
MM
990 types_match = same_type_p (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl)),
991 TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl)));
f84b4be9
JM
992 else
993 types_match = decls_match (DECL_TEMPLATE_RESULT (olddecl),
994 DECL_TEMPLATE_RESULT (newdecl));
51c184be 995 }
8d08fdba
MS
996 else
997 {
91a5bc9f
KL
998 /* Need to check scope for variable declaration (VAR_DECL).
999 For typedef (TYPE_DECL), scope is ignored. */
1000 if (TREE_CODE (newdecl) == VAR_DECL
ace4831d
MM
1001 && CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
1002 /* [dcl.link]
1003 Two declarations for an object with C language linkage
1004 with the same name (ignoring the namespace that qualify
1005 it) that appear in different namespace scopes refer to
1006 the same object. */
1007 && !(DECL_EXTERN_C_P (olddecl) && DECL_EXTERN_C_P (newdecl)))
91a5bc9f
KL
1008 return 0;
1009
8d08fdba
MS
1010 if (TREE_TYPE (newdecl) == error_mark_node)
1011 types_match = TREE_TYPE (olddecl) == error_mark_node;
1012 else if (TREE_TYPE (olddecl) == NULL_TREE)
1013 types_match = TREE_TYPE (newdecl) == NULL_TREE;
a0a33927
MS
1014 else if (TREE_TYPE (newdecl) == NULL_TREE)
1015 types_match = 0;
8d08fdba 1016 else
96d84882
PB
1017 types_match = comptypes (TREE_TYPE (newdecl),
1018 TREE_TYPE (olddecl),
1019 COMPARE_REDECLARATION);
8d08fdba
MS
1020 }
1021
1022 return types_match;
1023}
1024
1025/* If NEWDECL is `static' and an `extern' was seen previously,
24f30ed4 1026 warn about it. OLDDECL is the previous declaration.
8d08fdba
MS
1027
1028 Note that this does not apply to the C++ case of declaring
1029 a variable `extern const' and then later `const'.
1030
8d08fdba
MS
1031 Don't complain about built-in functions, since they are beyond
1032 the user's control. */
1033
a5e6b29b 1034void
11f6b451 1035warn_extern_redeclared_static (tree newdecl, tree olddecl)
8d08fdba 1036{
24f30ed4
MM
1037 tree name;
1038
68642fb6 1039 if (TREE_CODE (newdecl) == TYPE_DECL
655dc6ee 1040 || TREE_CODE (newdecl) == TEMPLATE_DECL
a2a9e21c
GDR
1041 || TREE_CODE (newdecl) == CONST_DECL
1042 || TREE_CODE (newdecl) == NAMESPACE_DECL)
8d08fdba 1043 return;
68642fb6 1044
963d5758
MM
1045 /* Don't get confused by static member functions; that's a different
1046 use of `static'. */
1047 if (TREE_CODE (newdecl) == FUNCTION_DECL
1048 && DECL_STATIC_FUNCTION_P (newdecl))
1049 return;
8d08fdba 1050
24f30ed4
MM
1051 /* If the old declaration was `static', or the new one isn't, then
1052 then everything is OK. */
1053 if (DECL_THIS_STATIC (olddecl) || !DECL_THIS_STATIC (newdecl))
1054 return;
1055
1056 /* It's OK to declare a builtin function as `static'. */
1057 if (TREE_CODE (olddecl) == FUNCTION_DECL
1058 && DECL_ARTIFICIAL (olddecl))
1059 return;
1060
8d08fdba 1061 name = DECL_ASSEMBLER_NAME (newdecl);
cbe5f3b3
MLI
1062 permerror (input_location, "%qD was declared %<extern%> and later %<static%>", newdecl);
1063 permerror (input_location, "previous declaration of %q+D", olddecl);
8d08fdba
MS
1064}
1065
e1f0e7a6
MM
1066/* NEW_DECL is a redeclaration of OLD_DECL; both are functions or
1067 function templates. If their exception specifications do not
b9704fc5 1068 match, issue a diagnostic. */
e1f0e7a6
MM
1069
1070static void
1071check_redeclaration_exception_specification (tree new_decl,
1072 tree old_decl)
1073{
1074 tree new_type;
1075 tree old_type;
1076 tree new_exceptions;
1077 tree old_exceptions;
1078
1079 new_type = TREE_TYPE (new_decl);
1080 new_exceptions = TYPE_RAISES_EXCEPTIONS (new_type);
1081 old_type = TREE_TYPE (old_decl);
1082 old_exceptions = TYPE_RAISES_EXCEPTIONS (old_type);
1083
1084 /* [except.spec]
1085
1086 If any declaration of a function has an exception-specification,
1087 all declarations, including the definition and an explicit
1088 specialization, of that function shall have an
1089 exception-specification with the same set of type-ids. */
1090 if ((pedantic || ! DECL_IN_SYSTEM_HEADER (old_decl))
1091 && ! DECL_IS_BUILTIN (old_decl)
1092 && flag_exceptions
3db45ab5 1093 && !comp_except_specs (new_exceptions, old_exceptions,
e1f0e7a6
MM
1094 /*exact=*/true))
1095 {
1096 error ("declaration of %qF throws different exceptions", new_decl);
1097 error ("from previous declaration %q+F", old_decl);
1098 }
1099}
1100
3a47c4e4
AO
1101#define GNU_INLINE_P(fn) (DECL_DECLARED_INLINE_P (fn) \
1102 && lookup_attribute ("gnu_inline", \
1103 DECL_ATTRIBUTES (fn)))
1104
b1a19c7c
MM
1105/* If NEWDECL is a redeclaration of OLDDECL, merge the declarations.
1106 If the redeclaration is invalid, a diagnostic is issued, and the
1107 error_mark_node is returned. Otherwise, OLDDECL is returned.
8d08fdba 1108
b1a19c7c 1109 If NEWDECL is not a redeclaration of OLDDECL, NULL_TREE is
d63d5d0c
ILT
1110 returned.
1111
1112 NEWDECL_IS_FRIEND is true if NEWDECL was declared as a friend. */
8d08fdba 1113
b1a19c7c 1114tree
d63d5d0c 1115duplicate_decls (tree newdecl, tree olddecl, bool newdecl_is_friend)
8d08fdba 1116{
8d08fdba 1117 unsigned olddecl_uid = DECL_UID (olddecl);
d63d5d0c 1118 int olddecl_friend = 0, types_match = 0, hidden_friend = 0;
0b60dfe3 1119 int new_defines_function = 0;
2b110bfc 1120 tree new_template_info;
5566b478
MS
1121
1122 if (newdecl == olddecl)
b1a19c7c 1123 return olddecl;
8d08fdba 1124
8926095f 1125 types_match = decls_match (newdecl, olddecl);
8d08fdba 1126
8d08fdba
MS
1127 /* If either the type of the new decl or the type of the old decl is an
1128 error_mark_node, then that implies that we have already issued an
1129 error (earlier) for some bogus type specification, and in that case,
1130 it is rather pointless to harass the user with yet more error message
0b60dfe3 1131 about the same declaration, so just pretend the types match here. */
bd6dd845
MS
1132 if (TREE_TYPE (newdecl) == error_mark_node
1133 || TREE_TYPE (olddecl) == error_mark_node)
dc5395cc 1134 return error_mark_node;
68642fb6 1135
97055d5c
AO
1136 if (DECL_P (olddecl)
1137 && TREE_CODE (newdecl) == FUNCTION_DECL
1138 && TREE_CODE (olddecl) == FUNCTION_DECL
1139 && (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl)))
1140 {
1141 if (DECL_DECLARED_INLINE_P (newdecl)
1142 && DECL_UNINLINABLE (newdecl)
1143 && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
1144 /* Already warned elsewhere. */;
1145 else if (DECL_DECLARED_INLINE_P (olddecl)
1146 && DECL_UNINLINABLE (olddecl)
1147 && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
1148 /* Already warned. */;
1149 else if (DECL_DECLARED_INLINE_P (newdecl)
1150 && DECL_UNINLINABLE (olddecl)
1151 && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
1152 {
dee15844
JM
1153 warning (OPT_Wattributes, "function %q+D redeclared as inline",
1154 newdecl);
1155 warning (OPT_Wattributes, "previous declaration of %q+D "
1156 "with attribute noinline", olddecl);
97055d5c
AO
1157 }
1158 else if (DECL_DECLARED_INLINE_P (olddecl)
1159 && DECL_UNINLINABLE (newdecl)
1160 && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
1161 {
dee15844
JM
1162 warning (OPT_Wattributes, "function %q+D redeclared with "
1163 "attribute noinline", newdecl);
1164 warning (OPT_Wattributes, "previous declaration of %q+D was inline",
1165 olddecl);
97055d5c
AO
1166 }
1167 }
1168
a1c65f9f 1169 /* Check for redeclaration and other discrepancies. */
d22c8596 1170 if (TREE_CODE (olddecl) == FUNCTION_DECL
9f33663b
JM
1171 && DECL_ARTIFICIAL (olddecl))
1172 {
d63d5d0c 1173 gcc_assert (!DECL_HIDDEN_FRIEND_P (olddecl));
9f33663b
JM
1174 if (TREE_CODE (newdecl) != FUNCTION_DECL)
1175 {
d63d5d0c
ILT
1176 /* Avoid warnings redeclaring built-ins which have not been
1177 explicitly declared. */
0cbd7506
MS
1178 if (DECL_ANTICIPATED (olddecl))
1179 return NULL_TREE;
d52e4867 1180
9f33663b
JM
1181 /* If you declare a built-in or predefined function name as static,
1182 the old definition is overridden, but optionally warn this was a
1183 bad choice of name. */
1184 if (! TREE_PUBLIC (newdecl))
1185 {
b323323f
LM
1186 warning (OPT_Wshadow, "shadowing %s function %q#D",
1187 DECL_BUILT_IN (olddecl) ? "built-in" : "library",
1188 olddecl);
9f33663b 1189 /* Discard the old built-in function. */
b1a19c7c 1190 return NULL_TREE;
9f33663b
JM
1191 }
1192 /* If the built-in is not ansi, then programs can override
1193 it even globally without an error. */
1194 else if (! DECL_BUILT_IN (olddecl))
d4ee4d25 1195 warning (0, "library function %q#D redeclared as non-function %q#D",
0cbd7506 1196 olddecl, newdecl);
9f33663b
JM
1197 else
1198 {
2d01edd7
GDR
1199 error ("declaration of %q#D", newdecl);
1200 error ("conflicts with built-in declaration %q#D",
0cbd7506 1201 olddecl);
9f33663b 1202 }
b1a19c7c 1203 return NULL_TREE;
a4443a08 1204 }
9f33663b 1205 else if (!types_match)
8d08fdba 1206 {
d63d5d0c
ILT
1207 /* Avoid warnings redeclaring built-ins which have not been
1208 explicitly declared. */
0cbd7506 1209 if (DECL_ANTICIPATED (olddecl))
498c0f27
JJ
1210 {
1211 /* Deal with fileptr_type_node. FILE type is not known
1212 at the time we create the builtins. */
1213 tree t1, t2;
1214
1215 for (t1 = TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1216 t2 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1217 t1 || t2;
1218 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
1219 if (!t1 || !t2)
1220 break;
1221 else if (TREE_VALUE (t2) == fileptr_type_node)
1222 {
1223 tree t = TREE_VALUE (t1);
1224
1225 if (TREE_CODE (t) == POINTER_TYPE
1226 && TYPE_NAME (TREE_TYPE (t))
1227 && DECL_NAME (TYPE_NAME (TREE_TYPE (t)))
1228 == get_identifier ("FILE")
1229 && compparms (TREE_CHAIN (t1), TREE_CHAIN (t2)))
1230 {
1231 tree oldargs = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1232
1233 TYPE_ARG_TYPES (TREE_TYPE (olddecl))
1234 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
1235 types_match = decls_match (newdecl, olddecl);
1236 if (types_match)
d63d5d0c
ILT
1237 return duplicate_decls (newdecl, olddecl,
1238 newdecl_is_friend);
498c0f27
JJ
1239 TYPE_ARG_TYPES (TREE_TYPE (olddecl)) = oldargs;
1240 }
1241 }
1242 else if (! same_type_p (TREE_VALUE (t1), TREE_VALUE (t2)))
1243 break;
1244 }
d52e4867 1245 else if ((DECL_EXTERN_C_P (newdecl)
7e99327d
MM
1246 && DECL_EXTERN_C_P (olddecl))
1247 || compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1248 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
a4443a08 1249 {
9f33663b
JM
1250 /* A near match; override the builtin. */
1251
1252 if (TREE_PUBLIC (newdecl))
a4443a08 1253 {
d4ee4d25
DD
1254 warning (0, "new declaration %q#D", newdecl);
1255 warning (0, "ambiguates built-in declaration %q#D",
0cbd7506 1256 olddecl);
a4443a08 1257 }
b323323f
LM
1258 else
1259 warning (OPT_Wshadow, "shadowing %s function %q#D",
0cbd7506
MS
1260 DECL_BUILT_IN (olddecl) ? "built-in" : "library",
1261 olddecl);
a4443a08 1262 }
9f33663b
JM
1263 else
1264 /* Discard the old built-in function. */
b1a19c7c 1265 return NULL_TREE;
04a9d080
RS
1266
1267 /* Replace the old RTL to avoid problems with inlining. */
84b8b0e0 1268 COPY_DECL_RTL (newdecl, olddecl);
8d08fdba 1269 }
d63d5d0c
ILT
1270 /* Even if the types match, prefer the new declarations type for
1271 built-ins which have not been explicitly declared, for
1272 exception lists, etc... */
10326855 1273 else if (DECL_ANTICIPATED (olddecl))
7072018e 1274 {
74869a85
NS
1275 tree type = TREE_TYPE (newdecl);
1276 tree attribs = (*targetm.merge_type_attributes)
1277 (TREE_TYPE (olddecl), type);
1278
e9525111 1279 type = cp_build_type_attribute_variant (type, attribs);
74869a85 1280 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = type;
7072018e 1281 }
68642fb6 1282
62bedd31
JJ
1283 /* If a function is explicitly declared "throw ()", propagate that to
1284 the corresponding builtin. */
1285 if (DECL_BUILT_IN_CLASS (olddecl) == BUILT_IN_NORMAL
1286 && DECL_ANTICIPATED (olddecl)
1287 && TREE_NOTHROW (newdecl)
1288 && !TREE_NOTHROW (olddecl)
1289 && built_in_decls [DECL_FUNCTION_CODE (olddecl)] != NULL_TREE
1290 && built_in_decls [DECL_FUNCTION_CODE (olddecl)] != olddecl
1291 && types_match)
1292 TREE_NOTHROW (built_in_decls [DECL_FUNCTION_CODE (olddecl)]) = 1;
1293
7e99327d
MM
1294 /* Whether or not the builtin can throw exceptions has no
1295 bearing on this declarator. */
1296 TREE_NOTHROW (olddecl) = 0;
1297
24f30ed4
MM
1298 if (DECL_THIS_STATIC (newdecl) && !DECL_THIS_STATIC (olddecl))
1299 {
1300 /* If a builtin function is redeclared as `static', merge
1301 the declarations, but make the original one static. */
1302 DECL_THIS_STATIC (olddecl) = 1;
1303 TREE_PUBLIC (olddecl) = 0;
9bfadf57 1304
421844e7
MM
1305 /* Make the old declaration consistent with the new one so
1306 that all remnants of the builtin-ness of this function
1307 will be banished. */
5d2ed28c 1308 SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
84b8b0e0 1309 COPY_DECL_RTL (newdecl, olddecl);
24f30ed4 1310 }
39211cd5
MS
1311 }
1312 else if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
1313 {
6936461f
OW
1314 /* C++ Standard, 3.3, clause 4:
1315 "[Note: a namespace name or a class template name must be unique
1316 in its declarative region (7.3.2, clause 14). ]" */
1317 if (TREE_CODE (olddecl) != NAMESPACE_DECL
1318 && TREE_CODE (newdecl) != NAMESPACE_DECL
1319 && (TREE_CODE (olddecl) != TEMPLATE_DECL
1320 || TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) != TYPE_DECL)
1321 && (TREE_CODE (newdecl) != TEMPLATE_DECL
1322 || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != TYPE_DECL))
9ed182dc 1323 {
6936461f
OW
1324 if ((TREE_CODE (olddecl) == TYPE_DECL && DECL_ARTIFICIAL (olddecl)
1325 && TREE_CODE (newdecl) != TYPE_DECL)
1326 || (TREE_CODE (newdecl) == TYPE_DECL && DECL_ARTIFICIAL (newdecl)
1327 && TREE_CODE (olddecl) != TYPE_DECL))
1328 {
1329 /* We do nothing special here, because C++ does such nasty
1330 things with TYPE_DECLs. Instead, just let the TYPE_DECL
1331 get shadowed, and know that if we need to find a TYPE_DECL
1332 for a given name, we can look in the IDENTIFIER_TYPE_VALUE
1333 slot of the identifier. */
1334 return NULL_TREE;
1335 }
1336
1337 if ((TREE_CODE (newdecl) == FUNCTION_DECL
1338 && DECL_FUNCTION_TEMPLATE_P (olddecl))
1339 || (TREE_CODE (olddecl) == FUNCTION_DECL
1340 && DECL_FUNCTION_TEMPLATE_P (newdecl)))
1341 return NULL_TREE;
9ed182dc
JM
1342 }
1343
2d01edd7 1344 error ("%q#D redeclared as different kind of symbol", newdecl);
39211cd5
MS
1345 if (TREE_CODE (olddecl) == TREE_LIST)
1346 olddecl = TREE_VALUE (olddecl);
dee15844 1347 error ("previous declaration of %q+#D", olddecl);
39211cd5 1348
c0694c4b 1349 return error_mark_node;
8d08fdba 1350 }
8d08fdba
MS
1351 else if (!types_match)
1352 {
4f1c5b7d 1353 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl))
7bdbfa05
MM
1354 /* These are certainly not duplicate declarations; they're
1355 from different scopes. */
b1a19c7c 1356 return NULL_TREE;
7bdbfa05 1357
8926095f 1358 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
f0e01782
MS
1359 {
1360 /* The name of a class template may not be declared to refer to
1361 any other template, class, function, object, namespace, value,
e92cc029 1362 or type in the same scope. */
5566b478
MS
1363 if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == TYPE_DECL
1364 || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
f0e01782 1365 {
2d01edd7 1366 error ("declaration of template %q#D", newdecl);
dee15844 1367 error ("conflicts with previous declaration %q+#D", olddecl);
f0e01782 1368 }
ec255269
MS
1369 else if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == FUNCTION_DECL
1370 && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
1371 && compparms (TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl))),
91063b51 1372 TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl))))
75650646 1373 && comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
b9201622
NS
1374 DECL_TEMPLATE_PARMS (olddecl))
1375 /* Template functions can be disambiguated by
1376 return type. */
1377 && same_type_p (TREE_TYPE (TREE_TYPE (newdecl)),
1378 TREE_TYPE (TREE_TYPE (olddecl))))
ec255269 1379 {
2d01edd7 1380 error ("new declaration %q#D", newdecl);
dee15844 1381 error ("ambiguates old declaration %q+#D", olddecl);
ec255269 1382 }
b1a19c7c 1383 return NULL_TREE;
f0e01782 1384 }
8926095f
MS
1385 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1386 {
eb68cb58 1387 if (DECL_EXTERN_C_P (newdecl) && DECL_EXTERN_C_P (olddecl))
8926095f 1388 {
2d01edd7 1389 error ("declaration of C function %q#D conflicts with",
0cbd7506 1390 newdecl);
dee15844 1391 error ("previous declaration %q+#D here", olddecl);
8926095f 1392 }
00595019 1393 else if (compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
91063b51 1394 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
700f8a87 1395 {
2d01edd7 1396 error ("new declaration %q#D", newdecl);
dee15844 1397 error ("ambiguates old declaration %q+#D", olddecl);
492b73bd 1398 return error_mark_node;
700f8a87
MS
1399 }
1400 else
b1a19c7c 1401 return NULL_TREE;
8926095f 1402 }
58ec3cc5 1403 else
8d08fdba 1404 {
2d01edd7 1405 error ("conflicting declaration %q#D", newdecl);
dee15844 1406 error ("%q+D has a previous declaration as %q#D", olddecl, olddecl);
0cbd7506 1407 return error_mark_node;
8d08fdba
MS
1408 }
1409 }
68642fb6 1410 else if (TREE_CODE (newdecl) == FUNCTION_DECL
75650646
MM
1411 && ((DECL_TEMPLATE_SPECIALIZATION (olddecl)
1412 && (!DECL_TEMPLATE_INFO (newdecl)
68642fb6 1413 || (DECL_TI_TEMPLATE (newdecl)
75650646
MM
1414 != DECL_TI_TEMPLATE (olddecl))))
1415 || (DECL_TEMPLATE_SPECIALIZATION (newdecl)
1416 && (!DECL_TEMPLATE_INFO (olddecl)
68642fb6 1417 || (DECL_TI_TEMPLATE (olddecl)
75650646 1418 != DECL_TI_TEMPLATE (newdecl))))))
386b8a85
JM
1419 /* It's OK to have a template specialization and a non-template
1420 with the same type, or to have specializations of two
75650646
MM
1421 different templates with the same type. Note that if one is a
1422 specialization, and the other is an instantiation of the same
1423 template, that we do not exit at this point. That situation
1424 can occur if we instantiate a template class, and then
0e339752 1425 specialize one of its methods. This situation is valid, but
75650646 1426 the declarations must be merged in the usual way. */
b1a19c7c 1427 return NULL_TREE;
68642fb6
UD
1428 else if (TREE_CODE (newdecl) == FUNCTION_DECL
1429 && ((DECL_TEMPLATE_INSTANTIATION (olddecl)
75650646
MM
1430 && !DECL_USE_TEMPLATE (newdecl))
1431 || (DECL_TEMPLATE_INSTANTIATION (newdecl)
1432 && !DECL_USE_TEMPLATE (olddecl))))
1433 /* One of the declarations is a template instantiation, and the
1434 other is not a template at all. That's OK. */
b1a19c7c 1435 return NULL_TREE;
c30b4add
MM
1436 else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
1437 {
1438 /* In [namespace.alias] we have:
c8094d83 1439
0cbd7506 1440 In a declarative region, a namespace-alias-definition can be
c30b4add
MM
1441 used to redefine a namespace-alias declared in that declarative
1442 region to refer only to the namespace to which it already
1443 refers.
c8094d83 1444
c30b4add
MM
1445 Therefore, if we encounter a second alias directive for the same
1446 alias, we can just ignore the second directive. */
1447 if (DECL_NAMESPACE_ALIAS (newdecl)
c8094d83 1448 && (DECL_NAMESPACE_ALIAS (newdecl)
c30b4add
MM
1449 == DECL_NAMESPACE_ALIAS (olddecl)))
1450 return olddecl;
1451 /* [namespace.alias]
1452
0cbd7506 1453 A namespace-name or namespace-alias shall not be declared as
c30b4add
MM
1454 the name of any other entity in the same declarative region.
1455 A namespace-name defined at global scope shall not be
77880ae4 1456 declared as the name of any other entity in any global scope
c30b4add 1457 of the program. */
2d01edd7 1458 error ("declaration of namespace %qD conflicts with", newdecl);
dee15844 1459 error ("previous declaration of namespace %q+D here", olddecl);
c30b4add
MM
1460 return error_mark_node;
1461 }
8d08fdba
MS
1462 else
1463 {
d8e178a0 1464 const char *errmsg = redeclaration_error_message (newdecl, olddecl);
8251199e 1465 if (errmsg)
8d08fdba 1466 {
402b8cf6 1467 error_at (DECL_SOURCE_LOCATION (newdecl), errmsg, newdecl);
8d08fdba 1468 if (DECL_NAME (olddecl) != NULL_TREE)
dee15844
JM
1469 error ((DECL_INITIAL (olddecl) && namespace_bindings_p ())
1470 ? "%q+#D previously defined here"
1471 : "%q+#D previously declared here", olddecl);
b1a19c7c 1472 return error_mark_node;
8d08fdba
MS
1473 }
1474 else if (TREE_CODE (olddecl) == FUNCTION_DECL
1475 && DECL_INITIAL (olddecl) != NULL_TREE
1476 && TYPE_ARG_TYPES (TREE_TYPE (olddecl)) == NULL_TREE
1477 && TYPE_ARG_TYPES (TREE_TYPE (newdecl)) != NULL_TREE)
1478 {
1479 /* Prototype decl follows defn w/o prototype. */
c5d75364
MLI
1480 warning_at (input_location, 0, "prototype for %q+#D", newdecl);
1481 warning_at (DECL_SOURCE_LOCATION (olddecl), 0,
1482 "follows non-prototype definition here");
8d08fdba 1483 }
ace4831d
MM
1484 else if ((TREE_CODE (olddecl) == FUNCTION_DECL
1485 || TREE_CODE (olddecl) == VAR_DECL)
8d08fdba 1486 && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl))
8926095f 1487 {
ace4831d
MM
1488 /* [dcl.link]
1489 If two declarations of the same function or object
1490 specify different linkage-specifications ..., the program
1491 is ill-formed.... Except for functions with C++ linkage,
1492 a function declaration without a linkage specification
1493 shall not precede the first linkage specification for
1494 that function. A function can be declared without a
1495 linkage specification after an explicit linkage
1496 specification has been seen; the linkage explicitly
1497 specified in the earlier declaration is not affected by
1498 such a function declaration.
1499
1500 DR 563 raises the question why the restrictions on
1501 functions should not also apply to objects. Older
1502 versions of G++ silently ignore the linkage-specification
1503 for this example:
1504
1505 namespace N {
1506 extern int i;
1507 extern "C" int i;
1508 }
1509
1510 which is clearly wrong. Therefore, we now treat objects
1511 like functions. */
46ccf50a 1512 if (current_lang_depth () == 0)
ace4831d
MM
1513 {
1514 /* There is no explicit linkage-specification, so we use
1515 the linkage from the previous declaration. */
1516 if (!DECL_LANG_SPECIFIC (newdecl))
1517 retrofit_lang_decl (newdecl);
1518 SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
1519 }
8926095f
MS
1520 else
1521 {
dee15844
JM
1522 error ("previous declaration of %q+#D with %qL linkage",
1523 olddecl, DECL_LANGUAGE (olddecl));
2d01edd7 1524 error ("conflicts with new declaration with %qL linkage",
0cbd7506 1525 DECL_LANGUAGE (newdecl));
8926095f
MS
1526 }
1527 }
e1cd6e56 1528
a6f02587 1529 if (DECL_LANG_SPECIFIC (olddecl) && DECL_USE_TEMPLATE (olddecl))
c32381b1
JM
1530 ;
1531 else if (TREE_CODE (olddecl) == FUNCTION_DECL)
e1cd6e56
MS
1532 {
1533 tree t1 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1534 tree t2 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
1535 int i = 1;
1536
1537 if (TREE_CODE (TREE_TYPE (newdecl)) == METHOD_TYPE)
1538 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2);
68642fb6 1539
e1cd6e56
MS
1540 for (; t1 && t1 != void_list_node;
1541 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2), i++)
1542 if (TREE_PURPOSE (t1) && TREE_PURPOSE (t2))
1543 {
2507f3b5
RK
1544 if (1 == simple_cst_equal (TREE_PURPOSE (t1),
1545 TREE_PURPOSE (t2)))
e1cd6e56 1546 {
cbe5f3b3 1547 permerror (input_location, "default argument given for parameter %d of %q#D",
37ec60ed 1548 i, newdecl);
cbe5f3b3 1549 permerror (input_location, "after previous specification in %q+#D", olddecl);
e1cd6e56
MS
1550 }
1551 else
1552 {
2d01edd7 1553 error ("default argument given for parameter %d of %q#D",
0cbd7506 1554 i, newdecl);
dee15844 1555 error ("after previous specification in %q+#D",
e1cd6e56
MS
1556 olddecl);
1557 }
1558 }
1559 }
8d08fdba
MS
1560 }
1561
4782bd5b
RS
1562 /* Do not merge an implicit typedef with an explicit one. In:
1563
1564 class A;
1565 ...
1566 typedef class A A __attribute__ ((foo));
1567
1568 the attribute should apply only to the typedef. */
1569 if (TREE_CODE (olddecl) == TYPE_DECL
1570 && (DECL_IMPLICIT_TYPEDEF_P (olddecl)
1571 || DECL_IMPLICIT_TYPEDEF_P (newdecl)))
b1a19c7c 1572 return NULL_TREE;
4782bd5b 1573
8d08fdba
MS
1574 /* If new decl is `static' and an `extern' was seen previously,
1575 warn about it. */
1576 warn_extern_redeclared_static (newdecl, olddecl);
1577
e92cc029 1578 /* We have committed to returning 1 at this point. */
8d08fdba
MS
1579 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1580 {
1581 /* Now that functions must hold information normally held
1582 by field decls, there is extra work to do so that
1583 declaration information does not get destroyed during
1584 definition. */
1585 if (DECL_VINDEX (olddecl))
1586 DECL_VINDEX (newdecl) = DECL_VINDEX (olddecl);
1587 if (DECL_CONTEXT (olddecl))
1588 DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
e1cd6e56
MS
1589 DECL_STATIC_CONSTRUCTOR (newdecl) |= DECL_STATIC_CONSTRUCTOR (olddecl);
1590 DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
fee7654e 1591 DECL_PURE_VIRTUAL_P (newdecl) |= DECL_PURE_VIRTUAL_P (olddecl);
864b83b9 1592 DECL_VIRTUAL_P (newdecl) |= DECL_VIRTUAL_P (olddecl);
815951d8 1593 DECL_INVALID_OVERRIDER_P (newdecl) |= DECL_INVALID_OVERRIDER_P (olddecl);
963d5758 1594 DECL_THIS_STATIC (newdecl) |= DECL_THIS_STATIC (olddecl);
e0fff4b3
JM
1595 if (DECL_OVERLOADED_OPERATOR_P (olddecl) != ERROR_MARK)
1596 SET_OVERLOADED_OPERATOR_CODE
1597 (newdecl, DECL_OVERLOADED_OPERATOR_P (olddecl));
0b60dfe3 1598 new_defines_function = DECL_INITIAL (newdecl) != NULL_TREE;
68642fb6 1599
0b60dfe3 1600 /* Optionally warn about more than one declaration for the same
0cbd7506
MS
1601 name, but don't warn about a function declaration followed by a
1602 definition. */
0b60dfe3
BK
1603 if (warn_redundant_decls && ! DECL_ARTIFICIAL (olddecl)
1604 && !(new_defines_function && DECL_INITIAL (olddecl) == NULL_TREE)
a1c65f9f 1605 /* Don't warn about extern decl followed by definition. */
0b60dfe3 1606 && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl))
a1c65f9f 1607 /* Don't warn about friends, let add_friend take care of it. */
d63d5d0c 1608 && ! (newdecl_is_friend || DECL_FRIEND_P (olddecl)))
0b60dfe3 1609 {
b323323f
LM
1610 warning (OPT_Wredundant_decls, "redundant redeclaration of %qD in same scope", newdecl);
1611 warning (OPT_Wredundant_decls, "previous declaration of %q+D", olddecl);
0b60dfe3 1612 }
b87d79e6
JM
1613
1614 if (DECL_DELETED_FN (newdecl))
1615 {
1616 error ("deleted definition of %qD", newdecl);
1617 error ("after previous declaration %q+D", olddecl);
1618 }
8d08fdba
MS
1619 }
1620
1621 /* Deal with C++: must preserve virtual function table size. */
1622 if (TREE_CODE (olddecl) == TYPE_DECL)
1623 {
926ce8bd
KH
1624 tree newtype = TREE_TYPE (newdecl);
1625 tree oldtype = TREE_TYPE (olddecl);
8d08fdba
MS
1626
1627 if (newtype != error_mark_node && oldtype != error_mark_node
1628 && TYPE_LANG_SPECIFIC (newtype) && TYPE_LANG_SPECIFIC (oldtype))
e93ee644
MM
1629 CLASSTYPE_FRIEND_CLASSES (newtype)
1630 = CLASSTYPE_FRIEND_CLASSES (oldtype);
7df87825 1631
970d6386 1632 DECL_ORIGINAL_TYPE (newdecl) = DECL_ORIGINAL_TYPE (olddecl);
8d08fdba
MS
1633 }
1634
8d08fdba
MS
1635 /* Copy all the DECL_... slots specified in the new decl
1636 except for any that we copy here from the old type. */
91d231cb 1637 DECL_ATTRIBUTES (newdecl)
f6897b10 1638 = (*targetm.merge_decl_attributes) (olddecl, newdecl);
8d08fdba 1639
5566b478
MS
1640 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1641 {
e1f0e7a6
MM
1642 tree old_result;
1643 tree new_result;
1644 old_result = DECL_TEMPLATE_RESULT (olddecl);
1645 new_result = DECL_TEMPLATE_RESULT (newdecl);
1646 TREE_TYPE (olddecl) = TREE_TYPE (old_result);
68642fb6 1647 DECL_TEMPLATE_SPECIALIZATIONS (olddecl)
4d85e00e
MM
1648 = chainon (DECL_TEMPLATE_SPECIALIZATIONS (olddecl),
1649 DECL_TEMPLATE_SPECIALIZATIONS (newdecl));
68642fb6 1650
3a47c4e4
AO
1651 DECL_ATTRIBUTES (old_result)
1652 = (*targetm.merge_decl_attributes) (old_result, new_result);
1653
e1f0e7a6
MM
1654 if (DECL_FUNCTION_TEMPLATE_P (newdecl))
1655 {
3a47c4e4
AO
1656 if (GNU_INLINE_P (old_result) != GNU_INLINE_P (new_result)
1657 && DECL_INITIAL (new_result))
1658 {
1659 if (DECL_INITIAL (old_result))
99355518 1660 DECL_UNINLINABLE (old_result) = 1;
3a47c4e4 1661 else
99355518 1662 DECL_UNINLINABLE (old_result) = DECL_UNINLINABLE (new_result);
3a47c4e4
AO
1663 DECL_EXTERNAL (old_result) = DECL_EXTERNAL (new_result);
1664 DECL_NOT_REALLY_EXTERN (old_result)
1665 = DECL_NOT_REALLY_EXTERN (new_result);
1666 DECL_INTERFACE_KNOWN (old_result)
1667 = DECL_INTERFACE_KNOWN (new_result);
1668 DECL_DECLARED_INLINE_P (old_result)
1669 = DECL_DECLARED_INLINE_P (new_result);
1eea53df
AP
1670 DECL_DISREGARD_INLINE_LIMITS (old_result)
1671 |= DECL_DISREGARD_INLINE_LIMITS (new_result);
1672
3a47c4e4
AO
1673 }
1674 else
1675 {
3a47c4e4
AO
1676 DECL_DECLARED_INLINE_P (old_result)
1677 |= DECL_DECLARED_INLINE_P (new_result);
1eea53df
AP
1678 DECL_DISREGARD_INLINE_LIMITS (old_result)
1679 |= DECL_DISREGARD_INLINE_LIMITS (new_result);
3a47c4e4
AO
1680 check_redeclaration_exception_specification (newdecl, olddecl);
1681 }
e1f0e7a6
MM
1682 }
1683
daa8df65 1684 /* If the new declaration is a definition, update the file and
72c4a4ca
GK
1685 line information on the declaration, and also make
1686 the old declaration the same definition. */
3a47c4e4 1687 if (DECL_INITIAL (new_result) != NULL_TREE)
daa8df65 1688 {
caf93cb0 1689 DECL_SOURCE_LOCATION (olddecl)
e1f0e7a6 1690 = DECL_SOURCE_LOCATION (old_result)
f31686a3 1691 = DECL_SOURCE_LOCATION (newdecl);
72c4a4ca 1692 DECL_INITIAL (old_result) = DECL_INITIAL (new_result);
26bcf8fc 1693 if (DECL_FUNCTION_TEMPLATE_P (newdecl))
448545cb
JM
1694 {
1695 tree parm;
1696 DECL_ARGUMENTS (old_result)
1697 = DECL_ARGUMENTS (new_result);
1698 for (parm = DECL_ARGUMENTS (old_result); parm;
1699 parm = TREE_CHAIN (parm))
1700 DECL_CONTEXT (parm) = old_result;
1701 }
c11889ce
MM
1702 }
1703
b1a19c7c 1704 return olddecl;
5566b478 1705 }
68642fb6 1706
8d08fdba
MS
1707 if (types_match)
1708 {
1709 /* Automatically handles default parameters. */
1710 tree oldtype = TREE_TYPE (olddecl);
e1cd6e56 1711 tree newtype;
8d08fdba 1712
e1cd6e56 1713 /* Merge the data types specified in the two decls. */
6da794e8 1714 newtype = merge_types (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
e1cd6e56 1715
6da794e8 1716 /* If merge_types produces a non-typedef type, just use the old type. */
9076e292
JM
1717 if (TREE_CODE (newdecl) == TYPE_DECL
1718 && newtype == DECL_ORIGINAL_TYPE (newdecl))
1719 newtype = oldtype;
1720
8d08fdba 1721 if (TREE_CODE (newdecl) == VAR_DECL)
17bbb839
MM
1722 {
1723 DECL_THIS_EXTERN (newdecl) |= DECL_THIS_EXTERN (olddecl);
1724 DECL_INITIALIZED_P (newdecl) |= DECL_INITIALIZED_P (olddecl);
3db45ab5 1725 DECL_NONTRIVIALLY_INITIALIZED_P (newdecl)
6c06fbce 1726 |= DECL_NONTRIVIALLY_INITIALIZED_P (olddecl);
39703eb9
MM
1727 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (newdecl)
1728 |= DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (olddecl);
1799e5d5
RH
1729
1730 /* Merge the threadprivate attribute from OLDDECL into NEWDECL. */
1731 if (DECL_LANG_SPECIFIC (olddecl)
1732 && CP_DECL_THREADPRIVATE_P (olddecl))
1733 {
1734 /* Allocate a LANG_SPECIFIC structure for NEWDECL, if needed. */
1735 if (!DECL_LANG_SPECIFIC (newdecl))
1736 retrofit_lang_decl (newdecl);
1737
1738 DECL_TLS_MODEL (newdecl) = DECL_TLS_MODEL (olddecl);
1739 CP_DECL_THREADPRIVATE_P (newdecl) = 1;
1740 }
17bbb839
MM
1741 }
1742
6da794e8 1743 /* Do this after calling `merge_types' so that default
8d08fdba 1744 parameters don't confuse us. */
e1f0e7a6
MM
1745 else if (TREE_CODE (newdecl) == FUNCTION_DECL)
1746 check_redeclaration_exception_specification (newdecl, olddecl);
8d08fdba
MS
1747 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
1748
4a2f6dc0
VR
1749 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1750 check_default_args (newdecl);
1751
8d08fdba 1752 /* Lay the type out, unless already done. */
407f03b8 1753 if (! same_type_p (newtype, oldtype)
5566b478 1754 && TREE_TYPE (newdecl) != error_mark_node
5156628f 1755 && !(processing_template_decl && uses_template_parms (newdecl)))
b7484fbe
MS
1756 layout_type (TREE_TYPE (newdecl));
1757
5566b478
MS
1758 if ((TREE_CODE (newdecl) == VAR_DECL
1759 || TREE_CODE (newdecl) == PARM_DECL
1760 || TREE_CODE (newdecl) == RESULT_DECL
1761 || TREE_CODE (newdecl) == FIELD_DECL
1762 || TREE_CODE (newdecl) == TYPE_DECL)
5156628f 1763 && !(processing_template_decl && uses_template_parms (newdecl)))
b7484fbe 1764 layout_decl (newdecl, 0);
8d08fdba
MS
1765
1766 /* Merge the type qualifiers. */
1767 if (TREE_READONLY (newdecl))
1768 TREE_READONLY (olddecl) = 1;
1769 if (TREE_THIS_VOLATILE (newdecl))
1770 TREE_THIS_VOLATILE (olddecl) = 1;
5cefa0d9
JM
1771 if (TREE_NOTHROW (newdecl))
1772 TREE_NOTHROW (olddecl) = 1;
8d08fdba 1773
302a2cc5
JM
1774 /* Merge deprecatedness. */
1775 if (TREE_DEPRECATED (newdecl))
1776 TREE_DEPRECATED (olddecl) = 1;
1777
5779e713
MM
1778 /* Preserve function specific target and optimization options */
1779 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1780 {
1781 if (DECL_FUNCTION_SPECIFIC_TARGET (olddecl)
1782 && !DECL_FUNCTION_SPECIFIC_TARGET (newdecl))
1783 DECL_FUNCTION_SPECIFIC_TARGET (newdecl)
1784 = DECL_FUNCTION_SPECIFIC_TARGET (olddecl);
1785
1786 if (DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl)
1787 && !DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl))
1788 DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl)
1789 = DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl);
1790 }
1791
8d08fdba 1792 /* Merge the initialization information. */
8926095f
MS
1793 if (DECL_INITIAL (newdecl) == NULL_TREE
1794 && DECL_INITIAL (olddecl) != NULL_TREE)
1795 {
1796 DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
f31686a3 1797 DECL_SOURCE_LOCATION (newdecl) = DECL_SOURCE_LOCATION (olddecl);
b97e8a14 1798 if (TREE_CODE (newdecl) == FUNCTION_DECL)
69ee8086
RH
1799 {
1800 DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
1da326c3 1801 DECL_STRUCT_FUNCTION (newdecl) = DECL_STRUCT_FUNCTION (olddecl);
69ee8086 1802 }
8926095f 1803 }
39211cd5
MS
1804
1805 /* Merge the section attribute.
0cbd7506 1806 We want to issue an error if the sections conflict but that must be
39211cd5
MS
1807 done later in decl_attributes since we are called before attributes
1808 are assigned. */
1809 if (DECL_SECTION_NAME (newdecl) == NULL_TREE)
1810 DECL_SECTION_NAME (newdecl) = DECL_SECTION_NAME (olddecl);
1811
a157febd
GK
1812 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1813 {
1814 DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (newdecl)
1815 |= DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (olddecl);
1331d16f 1816 DECL_NO_LIMIT_STACK (newdecl) |= DECL_NO_LIMIT_STACK (olddecl);
220a35cc 1817 TREE_THIS_VOLATILE (newdecl) |= TREE_THIS_VOLATILE (olddecl);
220a35cc 1818 TREE_NOTHROW (newdecl) |= TREE_NOTHROW (olddecl);
1331d16f 1819 DECL_IS_MALLOC (newdecl) |= DECL_IS_MALLOC (olddecl);
1ea193c2 1820 DECL_IS_OPERATOR_NEW (newdecl) |= DECL_IS_OPERATOR_NEW (olddecl);
becfd6e5
KZ
1821 DECL_PURE_P (newdecl) |= DECL_PURE_P (olddecl);
1822 TREE_READONLY (newdecl) |= TREE_READONLY (olddecl);
1823 DECL_LOOPING_CONST_OR_PURE_P (newdecl)
1824 |= DECL_LOOPING_CONST_OR_PURE_P (olddecl);
c740732f
MM
1825 /* Keep the old RTL. */
1826 COPY_DECL_RTL (olddecl, newdecl);
1827 }
caf93cb0 1828 else if (TREE_CODE (newdecl) == VAR_DECL
c740732f
MM
1829 && (DECL_SIZE (olddecl) || !DECL_SIZE (newdecl)))
1830 {
1831 /* Keep the old RTL. We cannot keep the old RTL if the old
1832 declaration was for an incomplete object and the new
1833 declaration is not since many attributes of the RTL will
1834 change. */
1835 COPY_DECL_RTL (olddecl, newdecl);
a157febd 1836 }
8d08fdba
MS
1837 }
1838 /* If cannot merge, then use the new type and qualifiers,
1839 and don't preserve the old rtl. */
1840 else
1841 {
1842 /* Clean out any memory we had of the old declaration. */
1843 tree oldstatic = value_member (olddecl, static_aggregates);
1844 if (oldstatic)
1845 TREE_VALUE (oldstatic) = error_mark_node;
1846
1847 TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
1848 TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
1849 TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
1850 TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
1851 }
1852
1853 /* Merge the storage class information. */
45806a3f
FS
1854 merge_weak (newdecl, olddecl);
1855
fc26fae3
RAE
1856 if (DECL_ONE_ONLY (olddecl))
1857 DECL_COMDAT_GROUP (newdecl) = DECL_COMDAT_GROUP (olddecl);
1858
794d4a61 1859 DECL_DEFER_OUTPUT (newdecl) |= DECL_DEFER_OUTPUT (olddecl);
a9aedbc2
MS
1860 TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
1861 TREE_STATIC (olddecl) = TREE_STATIC (newdecl) |= TREE_STATIC (olddecl);
1862 if (! DECL_EXTERNAL (olddecl))
1863 DECL_EXTERNAL (newdecl) = 0;
68642fb6 1864
2b110bfc 1865 new_template_info = NULL_TREE;
0b60dfe3 1866 if (DECL_LANG_SPECIFIC (newdecl) && DECL_LANG_SPECIFIC (olddecl))
8d08fdba 1867 {
fea10e36
AO
1868 bool new_redefines_gnu_inline = false;
1869
1870 if (new_defines_function
1871 && ((DECL_INTERFACE_KNOWN (olddecl)
1872 && TREE_CODE (olddecl) == FUNCTION_DECL)
1873 || (TREE_CODE (olddecl) == TEMPLATE_DECL
1874 && (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl))
1875 == FUNCTION_DECL))))
3a47c4e4
AO
1876 {
1877 tree fn = olddecl;
1878
1879 if (TREE_CODE (fn) == TEMPLATE_DECL)
1880 fn = DECL_TEMPLATE_RESULT (olddecl);
1881
fea10e36 1882 new_redefines_gnu_inline = GNU_INLINE_P (fn) && DECL_INITIAL (fn);
3a47c4e4 1883 }
3a47c4e4 1884
fea10e36 1885 if (!new_redefines_gnu_inline)
3a47c4e4 1886 {
3a47c4e4
AO
1887 DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl);
1888 DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl);
1889 DECL_COMDAT (newdecl) |= DECL_COMDAT (olddecl);
1890 }
68642fb6 1891 DECL_TEMPLATE_INSTANTIATED (newdecl)
2b0a63a3 1892 |= DECL_TEMPLATE_INSTANTIATED (olddecl);
3146f36f 1893 DECL_ODR_USED (newdecl) |= DECL_ODR_USED (olddecl);
c8094d83 1894
58fb06b4
NS
1895 /* If the OLDDECL is an instantiation and/or specialization,
1896 then the NEWDECL must be too. But, it may not yet be marked
1897 as such if the caller has created NEWDECL, but has not yet
1898 figured out that it is a redeclaration. */
1899 if (!DECL_USE_TEMPLATE (newdecl))
1900 DECL_USE_TEMPLATE (newdecl) = DECL_USE_TEMPLATE (olddecl);
c8094d83 1901
0b60dfe3
BK
1902 /* Don't really know how much of the language-specific
1903 values we should copy from old to new. */
1904 DECL_IN_AGGR_P (newdecl) = DECL_IN_AGGR_P (olddecl);
4684cd27 1905 DECL_REPO_AVAILABLE_P (newdecl) = DECL_REPO_AVAILABLE_P (olddecl);
3febd123 1906 DECL_INITIALIZED_IN_CLASS_P (newdecl)
0cbd7506 1907 |= DECL_INITIALIZED_IN_CLASS_P (olddecl);
6a629cac 1908
b97e8a14
JM
1909 if (LANG_DECL_HAS_MIN (newdecl))
1910 {
1911 DECL_LANG_SPECIFIC (newdecl)->u.min.u2 =
1912 DECL_LANG_SPECIFIC (olddecl)->u.min.u2;
1913 if (DECL_TEMPLATE_INFO (newdecl))
1914 new_template_info = DECL_TEMPLATE_INFO (newdecl);
1915 DECL_TEMPLATE_INFO (newdecl) = DECL_TEMPLATE_INFO (olddecl);
1916 }
1917 /* Only functions have these fields. */
6a629cac
MM
1918 if (TREE_CODE (newdecl) == FUNCTION_DECL
1919 || DECL_FUNCTION_TEMPLATE_P (newdecl))
bb5e8a7f 1920 {
b97e8a14
JM
1921 DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl);
1922 olddecl_friend = DECL_FRIEND_P (olddecl);
1923 hidden_friend = (DECL_ANTICIPATED (olddecl)
1924 && DECL_HIDDEN_FRIEND_P (olddecl)
1925 && newdecl_is_friend);
bb5e8a7f
MM
1926 DECL_BEFRIENDING_CLASSES (newdecl)
1927 = chainon (DECL_BEFRIENDING_CLASSES (newdecl),
1928 DECL_BEFRIENDING_CLASSES (olddecl));
ca9e1382
KL
1929 /* DECL_THUNKS is only valid for virtual functions,
1930 otherwise it is a DECL_FRIEND_CONTEXT. */
1931 if (DECL_VIRTUAL_P (newdecl))
1932 DECL_THUNKS (newdecl) = DECL_THUNKS (olddecl);
bb5e8a7f 1933 }
8d08fdba
MS
1934 }
1935
8d08fdba
MS
1936 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1937 {
448545cb
JM
1938 tree parm;
1939
bb36cc75
DM
1940 /* Merge parameter attributes. */
1941 tree oldarg, newarg;
1942 for (oldarg = DECL_ARGUMENTS(olddecl),
1943 newarg = DECL_ARGUMENTS(newdecl);
1944 oldarg && newarg;
1945 oldarg = TREE_CHAIN(oldarg), newarg = TREE_CHAIN(newarg)) {
1946 DECL_ATTRIBUTES (newarg)
1947 = (*targetm.merge_decl_attributes) (oldarg, newarg);
1948 DECL_ATTRIBUTES (oldarg) = DECL_ATTRIBUTES (newarg);
1949 }
1950
68642fb6
UD
1951 if (DECL_TEMPLATE_INSTANTIATION (olddecl)
1952 && !DECL_TEMPLATE_INSTANTIATION (newdecl))
75650646
MM
1953 {
1954 /* If newdecl is not a specialization, then it is not a
1955 template-related function at all. And that means that we
bf7c02dd 1956 should have exited above, returning 0. */
50bc768d 1957 gcc_assert (DECL_TEMPLATE_SPECIALIZATION (newdecl));
75650646 1958
3146f36f 1959 if (DECL_ODR_USED (olddecl))
75650646 1960 /* From [temp.expl.spec]:
68642fb6 1961
75650646
MM
1962 If a template, a member template or the member of a class
1963 template is explicitly specialized then that
1964 specialization shall be declared before the first use of
1965 that specialization that would cause an implicit
1966 instantiation to take place, in every translation unit in
1967 which such a use occurs. */
9e637a26 1968 error ("explicit specialization of %qD after first use",
75650646
MM
1969 olddecl);
1970
1971 SET_DECL_TEMPLATE_SPECIALIZATION (olddecl);
d03d18e8 1972
b9e75696
JM
1973 /* Don't propagate visibility from the template to the
1974 specialization here. We'll do that in determine_visibility if
1975 appropriate. */
1976 DECL_VISIBILITY_SPECIFIED (olddecl) = 0;
1977
d03d18e8
KL
1978 /* [temp.expl.spec/14] We don't inline explicit specialization
1979 just because the primary template says so. */
75650646 1980 }
3a47c4e4
AO
1981 else if (new_defines_function && DECL_INITIAL (olddecl))
1982 {
7e8b322a
JH
1983 /* Never inline re-defined extern inline functions.
1984 FIXME: this could be better handled by keeping both
1985 function as separate declarations. */
3a47c4e4
AO
1986 DECL_UNINLINABLE (newdecl) = 1;
1987 }
d03d18e8
KL
1988 else
1989 {
1990 if (DECL_PENDING_INLINE_INFO (newdecl) == 0)
1991 DECL_PENDING_INLINE_INFO (newdecl) = DECL_PENDING_INLINE_INFO (olddecl);
faae18ab 1992
d03d18e8 1993 DECL_DECLARED_INLINE_P (newdecl) |= DECL_DECLARED_INLINE_P (olddecl);
faae18ab 1994
d03d18e8
KL
1995 DECL_UNINLINABLE (newdecl) = DECL_UNINLINABLE (olddecl)
1996 = (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl));
c536a6a7
RG
1997
1998 DECL_DISREGARD_INLINE_LIMITS (newdecl)
1999 = DECL_DISREGARD_INLINE_LIMITS (olddecl)
2000 = (DECL_DISREGARD_INLINE_LIMITS (newdecl)
2001 || DECL_DISREGARD_INLINE_LIMITS (olddecl));
d03d18e8 2002 }
97055d5c 2003
5daf7c0a
JM
2004 /* Preserve abstractness on cloned [cd]tors. */
2005 DECL_ABSTRACT (newdecl) = DECL_ABSTRACT (olddecl);
2006
448545cb
JM
2007 /* Update newdecl's parms to point at olddecl. */
2008 for (parm = DECL_ARGUMENTS (newdecl); parm;
2009 parm = TREE_CHAIN (parm))
2010 DECL_CONTEXT (parm) = olddecl;
2011
700f8a87
MS
2012 if (! types_match)
2013 {
5d2ed28c 2014 SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
92643fea 2015 COPY_DECL_ASSEMBLER_NAME (newdecl, olddecl);
84b8b0e0 2016 COPY_DECL_RTL (newdecl, olddecl);
5566b478
MS
2017 }
2018 if (! types_match || new_defines_function)
2019 {
6f1b4c42
JM
2020 /* These need to be copied so that the names are available.
2021 Note that if the types do match, we'll preserve inline
2022 info and other bits, but if not, we won't. */
700f8a87
MS
2023 DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
2024 DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
700f8a87 2025 }
8d08fdba
MS
2026 if (new_defines_function)
2027 /* If defining a function declared with other language
2028 linkage, use the previously declared language linkage. */
5d2ed28c 2029 SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
6f1b4c42 2030 else if (types_match)
8d08fdba
MS
2031 {
2032 /* If redeclaring a builtin function, and not a definition,
2033 it stays built in. */
2034 if (DECL_BUILT_IN (olddecl))
2035 {
26db82d8 2036 DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
39211cd5 2037 DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
8d08fdba
MS
2038 /* If we're keeping the built-in definition, keep the rtl,
2039 regardless of declaration matches. */
84b8b0e0 2040 COPY_DECL_RTL (olddecl, newdecl);
8d08fdba 2041 }
8d08fdba
MS
2042
2043 DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
448545cb
JM
2044 /* Don't clear out the arguments if we're just redeclaring a
2045 function. */
8d08fdba
MS
2046 if (DECL_ARGUMENTS (olddecl))
2047 DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
2048 }
2049 }
0b1161fc
MM
2050 else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
2051 NAMESPACE_LEVEL (newdecl) = NAMESPACE_LEVEL (olddecl);
a9aedbc2 2052
8d08fdba
MS
2053 /* Now preserve various other info from the definition. */
2054 TREE_ADDRESSABLE (newdecl) = TREE_ADDRESSABLE (olddecl);
2055 TREE_ASM_WRITTEN (newdecl) = TREE_ASM_WRITTEN (olddecl);
2056 DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
92643fea 2057 COPY_DECL_ASSEMBLER_NAME (olddecl, newdecl);
8d08fdba 2058
d7afec4b 2059 /* Warn about conflicting visibility specifications. */
c8094d83 2060 if (DECL_VISIBILITY_SPECIFIED (olddecl)
73a8adb6 2061 && DECL_VISIBILITY_SPECIFIED (newdecl)
d7afec4b
ND
2062 && DECL_VISIBILITY (newdecl) != DECL_VISIBILITY (olddecl))
2063 {
c5d75364
MLI
2064 warning_at (input_location, OPT_Wattributes,
2065 "%q+D: visibility attribute ignored because it", newdecl);
2066 warning_at (DECL_SOURCE_LOCATION (olddecl), OPT_Wattributes,
2067 "conflicts with previous declaration here");
d7afec4b
ND
2068 }
2069 /* Choose the declaration which specified visibility. */
2070 if (DECL_VISIBILITY_SPECIFIED (olddecl))
facef326 2071 {
facef326 2072 DECL_VISIBILITY (newdecl) = DECL_VISIBILITY (olddecl);
d7afec4b
ND
2073 DECL_VISIBILITY_SPECIFIED (newdecl) = 1;
2074 }
3db45ab5 2075 /* Init priority used to be merged from newdecl to olddecl by the memcpy,
820cc88f
DB
2076 so keep this behavior. */
2077 if (TREE_CODE (newdecl) == VAR_DECL && DECL_HAS_INIT_PRIORITY_P (newdecl))
2078 {
2079 SET_DECL_INIT_PRIORITY (olddecl, DECL_INIT_PRIORITY (newdecl));
2080 DECL_HAS_INIT_PRIORITY_P (olddecl) = 1;
2081 }
facef326 2082
1d786913
MM
2083 /* The DECL_LANG_SPECIFIC information in OLDDECL will be replaced
2084 with that from NEWDECL below. */
2085 if (DECL_LANG_SPECIFIC (olddecl))
2086 {
c8094d83 2087 gcc_assert (DECL_LANG_SPECIFIC (olddecl)
1d786913
MM
2088 != DECL_LANG_SPECIFIC (newdecl));
2089 ggc_free (DECL_LANG_SPECIFIC (olddecl));
2090 }
2091
39ac02d7
L
2092 /* Merge the USED information. */
2093 if (TREE_USED (olddecl))
2094 TREE_USED (newdecl) = 1;
2095 else if (TREE_USED (newdecl))
2096 TREE_USED (olddecl) = 1;
e27fb29c 2097
8d08fdba
MS
2098 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2099 {
2100 int function_size;
8d08fdba 2101
820cc88f 2102 function_size = sizeof (struct tree_decl_common);
8d08fdba 2103
730e1556
KG
2104 memcpy ((char *) olddecl + sizeof (struct tree_common),
2105 (char *) newdecl + sizeof (struct tree_common),
2106 function_size - sizeof (struct tree_common));
8d08fdba 2107
820cc88f
DB
2108 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2109 (char *) newdecl + sizeof (struct tree_decl_common),
2110 sizeof (struct tree_function_decl) - sizeof (struct tree_decl_common));
2b110bfc 2111 if (new_template_info)
b3445994
MM
2112 /* If newdecl is a template instantiation, it is possible that
2113 the following sequence of events has occurred:
2114
2115 o A friend function was declared in a class template. The
2116 class template was instantiated.
2117
2118 o The instantiation of the friend declaration was
2119 recorded on the instantiation list, and is newdecl.
2120
2121 o Later, however, instantiate_class_template called pushdecl
2122 on the newdecl to perform name injection. But, pushdecl in
2123 turn called duplicate_decls when it discovered that another
2124 declaration of a global function with the same name already
2125 existed.
2126
2127 o Here, in duplicate_decls, we decided to clobber newdecl.
2128
2129 If we're going to do that, we'd better make sure that
2130 olddecl, and not newdecl, is on the list of
2131 instantiations so that if we try to do the instantiation
2132 again we won't get the clobbered declaration. */
caf93cb0 2133 reregister_specialization (newdecl,
2b110bfc 2134 new_template_info,
b3445994 2135 olddecl);
8d08fdba
MS
2136 }
2137 else
2138 {
820cc88f 2139 size_t size = tree_code_size (TREE_CODE (olddecl));
730e1556
KG
2140 memcpy ((char *) olddecl + sizeof (struct tree_common),
2141 (char *) newdecl + sizeof (struct tree_common),
820cc88f 2142 sizeof (struct tree_decl_common) - sizeof (struct tree_common));
3db45ab5 2143 switch (TREE_CODE (olddecl))
820cc88f
DB
2144 {
2145 case LABEL_DECL:
2146 case VAR_DECL:
2147 case RESULT_DECL:
2148 case PARM_DECL:
2149 case FIELD_DECL:
2150 case TYPE_DECL:
2151 case CONST_DECL:
2152 {
2153 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2154 (char *) newdecl + sizeof (struct tree_decl_common),
2155 size - sizeof (struct tree_decl_common)
2156 + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
2157 }
2158 break;
2159 default:
2160 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2161 (char *) newdecl + sizeof (struct tree_decl_common),
2162 sizeof (struct tree_decl_non_common) - sizeof (struct tree_decl_common)
2163 + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
2164 break;
2165 }
8d08fdba 2166 }
8d08fdba
MS
2167 DECL_UID (olddecl) = olddecl_uid;
2168 if (olddecl_friend)
2169 DECL_FRIEND_P (olddecl) = 1;
d63d5d0c
ILT
2170 if (hidden_friend)
2171 {
2172 DECL_ANTICIPATED (olddecl) = 1;
2173 DECL_HIDDEN_FRIEND_P (olddecl) = 1;
2174 }
8d08fdba 2175
d9525bec
BK
2176 /* NEWDECL contains the merged attribute lists.
2177 Update OLDDECL to be the same. */
91d231cb 2178 DECL_ATTRIBUTES (olddecl) = DECL_ATTRIBUTES (newdecl);
d9525bec 2179
16e31964
DS
2180 /* If OLDDECL had its DECL_RTL instantiated, re-invoke make_decl_rtl
2181 so that encode_section_info has a chance to look at the new decl
2182 flags and attributes. */
caf93cb0 2183 if (DECL_RTL_SET_P (olddecl)
16e31964
DS
2184 && (TREE_CODE (olddecl) == FUNCTION_DECL
2185 || (TREE_CODE (olddecl) == VAR_DECL
2186 && TREE_STATIC (olddecl))))
0e6df31e 2187 make_decl_rtl (olddecl);
16e31964 2188
1d786913
MM
2189 /* The NEWDECL will no longer be needed. Because every out-of-class
2190 declaration of a member results in a call to duplicate_decls,
2191 freeing these nodes represents in a significant savings. */
2192 ggc_free (newdecl);
2193
b1a19c7c 2194 return olddecl;
8d08fdba 2195}
8d08fdba 2196\f
8251199e 2197/* Return zero if the declaration NEWDECL is valid
8d08fdba
MS
2198 when the declaration OLDDECL (assumed to be for the same name)
2199 has already been seen.
2200 Otherwise return an error message format string with a %s
2201 where the identifier should go. */
2202
d8e178a0 2203static const char *
11f6b451 2204redeclaration_error_message (tree newdecl, tree olddecl)
8d08fdba
MS
2205{
2206 if (TREE_CODE (newdecl) == TYPE_DECL)
2207 {
2208 /* Because C++ can put things into name space for free,
2209 constructs like "typedef struct foo { ... } foo"
2210 would look like an erroneous redeclaration. */
3bfdc719 2211 if (same_type_p (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
6aed477a 2212 return NULL;
8d08fdba 2213 else
2d01edd7 2214 return "redefinition of %q#D";
8d08fdba
MS
2215 }
2216 else if (TREE_CODE (newdecl) == FUNCTION_DECL)
2217 {
2218 /* If this is a pure function, its olddecl will actually be
2219 the original initialization to `0' (which we force to call
2220 abort()). Don't complain about redefinition in this case. */
d1fc3bbd
AO
2221 if (DECL_LANG_SPECIFIC (olddecl) && DECL_PURE_VIRTUAL_P (olddecl)
2222 && DECL_INITIAL (olddecl) == NULL_TREE)
6aed477a 2223 return NULL;
8d08fdba 2224
2c73f9f5 2225 /* If both functions come from different namespaces, this is not
a1c65f9f 2226 a redeclaration - this is a conflict with a used function. */
6eb3bb27 2227 if (DECL_NAMESPACE_SCOPE_P (olddecl)
713101a6
AO
2228 && DECL_CONTEXT (olddecl) != DECL_CONTEXT (newdecl)
2229 && ! decls_match (olddecl, newdecl))
2d01edd7 2230 return "%qD conflicts with used function";
2c73f9f5 2231
db5ae43f 2232 /* We'll complain about linkage mismatches in
0cbd7506 2233 warn_extern_redeclared_static. */
db5ae43f 2234
2c73f9f5 2235 /* Defining the same name twice is no good. */
8d08fdba 2236 if (DECL_INITIAL (olddecl) != NULL_TREE
faae18ab 2237 && DECL_INITIAL (newdecl) != NULL_TREE)
8d08fdba
MS
2238 {
2239 if (DECL_NAME (olddecl) == NULL_TREE)
2d01edd7 2240 return "%q#D not declared in class";
3a47c4e4
AO
2241 else if (!GNU_INLINE_P (olddecl)
2242 || GNU_INLINE_P (newdecl))
2d01edd7 2243 return "redefinition of %q#D";
8d08fdba 2244 }
3a47c4e4
AO
2245
2246 if (DECL_DECLARED_INLINE_P (olddecl) && DECL_DECLARED_INLINE_P (newdecl))
2247 {
2248 bool olda = GNU_INLINE_P (olddecl);
2249 bool newa = GNU_INLINE_P (newdecl);
2250
2251 if (olda != newa)
2252 {
2253 if (newa)
2254 return "%q+D redeclared inline with %<gnu_inline%> attribute";
2255 else
2256 return "%q+D redeclared inline without %<gnu_inline%> attribute";
2257 }
2258 }
2259
6aed477a 2260 return NULL;
8d08fdba 2261 }
51c184be
MS
2262 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
2263 {
5bd61841
MM
2264 tree nt, ot;
2265
2266 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
2267 {
2268 if (COMPLETE_TYPE_P (TREE_TYPE (newdecl))
2269 && COMPLETE_TYPE_P (TREE_TYPE (olddecl)))
2d01edd7 2270 return "redefinition of %q#D";
5bd61841
MM
2271 return NULL;
2272 }
2273
2274 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != FUNCTION_DECL
caf93cb0 2275 || (DECL_TEMPLATE_RESULT (newdecl)
5bd61841
MM
2276 == DECL_TEMPLATE_RESULT (olddecl)))
2277 return NULL;
2278
2279 nt = DECL_TEMPLATE_RESULT (newdecl);
2280 if (DECL_TEMPLATE_INFO (nt))
2281 nt = DECL_TEMPLATE_RESULT (template_for_substitution (nt));
2282 ot = DECL_TEMPLATE_RESULT (olddecl);
2283 if (DECL_TEMPLATE_INFO (ot))
2284 ot = DECL_TEMPLATE_RESULT (template_for_substitution (ot));
3a47c4e4
AO
2285 if (DECL_INITIAL (nt) && DECL_INITIAL (ot)
2286 && (!GNU_INLINE_P (ot) || GNU_INLINE_P (nt)))
2d01edd7 2287 return "redefinition of %q#D";
5bd61841 2288
3a47c4e4
AO
2289 if (DECL_DECLARED_INLINE_P (ot) && DECL_DECLARED_INLINE_P (nt))
2290 {
2291 bool olda = GNU_INLINE_P (ot);
2292 bool newa = GNU_INLINE_P (nt);
2293
2294 if (olda != newa)
2295 {
2296 if (newa)
2297 return "%q+D redeclared inline with %<gnu_inline%> attribute";
2298 else
2299 return "%q+D redeclared inline without %<gnu_inline%> attribute";
2300 }
2301 }
2302
9b7dd5e8
DG
2303 /* Core issue #226 (C++0x):
2304
2305 If a friend function template declaration specifies a
2306 default template-argument, that declaration shall be a
2307 definition and shall be the only declaration of the
2308 function template in the translation unit. */
c1ae8be5 2309 if ((cxx_dialect != cxx98)
9b7dd5e8
DG
2310 && TREE_CODE (ot) == FUNCTION_DECL && DECL_FRIEND_P (ot)
2311 && !check_default_tmpl_args (nt, DECL_TEMPLATE_PARMS (newdecl),
2312 /*is_primary=*/1, /*is_partial=*/0,
2313 /*is_friend_decl=*/2))
2314 return "redeclaration of friend %q#D may not have default template arguments";
2315
5bd61841 2316 return NULL;
51c184be 2317 }
31a79236 2318 else if (TREE_CODE (newdecl) == VAR_DECL
1799e5d5
RH
2319 && DECL_THREAD_LOCAL_P (newdecl) != DECL_THREAD_LOCAL_P (olddecl)
2320 && (! DECL_LANG_SPECIFIC (olddecl)
2321 || ! CP_DECL_THREADPRIVATE_P (olddecl)
2322 || DECL_THREAD_LOCAL_P (newdecl)))
31a79236
JJ
2323 {
2324 /* Only variables can be thread-local, and all declarations must
2325 agree on this property. */
2326 if (DECL_THREAD_LOCAL_P (newdecl))
2327 return "thread-local declaration of %q#D follows "
2328 "non-thread-local declaration";
2329 else
2330 return "non-thread-local declaration of %q#D follows "
2331 "thread-local declaration";
2332 }
1f51a992 2333 else if (toplevel_bindings_p () || DECL_NAMESPACE_SCOPE_P (newdecl))
8d08fdba 2334 {
555551c2
MM
2335 /* The objects have been declared at namespace scope. If either
2336 is a member of an anonymous union, then this is an invalid
2337 redeclaration. For example:
2338
2339 int i;
2340 union { int i; };
2341
2342 is invalid. */
aedfac0e
PC
2343 if ((TREE_CODE (newdecl) == VAR_DECL && DECL_ANON_UNION_VAR_P (newdecl))
2344 || (TREE_CODE (olddecl) == VAR_DECL && DECL_ANON_UNION_VAR_P (olddecl)))
555551c2
MM
2345 return "redeclaration of %q#D";
2346 /* If at least one declaration is a reference, there is no
2347 conflict. For example:
2348
2349 int i = 3;
2350 extern int i;
2351
2352 is valid. */
8d08fdba 2353 if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl))
6aed477a 2354 return NULL;
8926095f 2355 /* Reject two definitions. */
2d01edd7 2356 return "redefinition of %q#D";
8d08fdba
MS
2357 }
2358 else
2359 {
2360 /* Objects declared with block scope: */
2361 /* Reject two definitions, and reject a definition
2362 together with an external reference. */
2363 if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl)))
2d01edd7 2364 return "redeclaration of %q#D";
6aed477a 2365 return NULL;
8d08fdba
MS
2366 }
2367}
2368\f
1799e5d5
RH
2369/* Hash and equality functions for the named_label table. */
2370
2371static hashval_t
2372named_label_entry_hash (const void *data)
2373{
2374 const struct named_label_entry *ent = (const struct named_label_entry *) data;
2375 return DECL_UID (ent->label_decl);
2376}
2377
2378static int
2379named_label_entry_eq (const void *a, const void *b)
2380{
2381 const struct named_label_entry *ent_a = (const struct named_label_entry *) a;
2382 const struct named_label_entry *ent_b = (const struct named_label_entry *) b;
2383 return ent_a->label_decl == ent_b->label_decl;
2384}
2385
acef433b 2386/* Create a new label, named ID. */
8d08fdba 2387
acef433b 2388static tree
11f6b451 2389make_label_decl (tree id, int local_p)
8d08fdba 2390{
1799e5d5
RH
2391 struct named_label_entry *ent;
2392 void **slot;
acef433b 2393 tree decl;
8d08fdba 2394
c2255bc4 2395 decl = build_decl (input_location, LABEL_DECL, id, void_type_node);
acef433b
MM
2396
2397 DECL_CONTEXT (decl) = current_function_decl;
2398 DECL_MODE (decl) = VOIDmode;
2399 C_DECLARED_LABEL_FLAG (decl) = local_p;
8d08fdba 2400
acef433b
MM
2401 /* Say where one reference is to the label, for the sake of the
2402 error if it is not defined. */
f31686a3 2403 DECL_SOURCE_LOCATION (decl) = input_location;
acef433b
MM
2404
2405 /* Record the fact that this identifier is bound to this label. */
2406 SET_IDENTIFIER_LABEL_VALUE (id, decl);
2407
1799e5d5
RH
2408 /* Create the label htab for the function on demand. */
2409 if (!named_labels)
2410 named_labels = htab_create_ggc (13, named_label_entry_hash,
2411 named_label_entry_eq, NULL);
6625cdb5 2412
1799e5d5
RH
2413 /* Record this label on the list of labels used in this function.
2414 We do this before calling make_label_decl so that we get the
2415 IDENTIFIER_LABEL_VALUE before the new label is declared. */
2416 ent = GGC_CNEW (struct named_label_entry);
2417 ent->label_decl = decl;
6625cdb5 2418
1799e5d5
RH
2419 slot = htab_find_slot (named_labels, ent, INSERT);
2420 gcc_assert (*slot == NULL);
2421 *slot = ent;
2422
2423 return decl;
acef433b 2424}
8d08fdba 2425
acef433b
MM
2426/* Look for a label named ID in the current function. If one cannot
2427 be found, create one. (We keep track of used, but undefined,
2428 labels, and complain about them at the end of a function.) */
8d08fdba 2429
68642fb6 2430tree
11f6b451 2431lookup_label (tree id)
acef433b
MM
2432{
2433 tree decl;
8d08fdba 2434
22ffcc6f 2435 timevar_push (TV_NAME_LOOKUP);
acef433b
MM
2436 /* You can't use labels at global scope. */
2437 if (current_function_decl == NULL_TREE)
2438 {
2d01edd7 2439 error ("label %qE referenced outside of any function", id);
22ffcc6f 2440 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, NULL_TREE);
acef433b 2441 }
68642fb6 2442
acef433b
MM
2443 /* See if we've already got this label. */
2444 decl = IDENTIFIER_LABEL_VALUE (id);
2445 if (decl != NULL_TREE && DECL_CONTEXT (decl) == current_function_decl)
22ffcc6f 2446 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, decl);
8d08fdba 2447
acef433b 2448 decl = make_label_decl (id, /*local_p=*/0);
22ffcc6f 2449 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, decl);
8d08fdba
MS
2450}
2451
acef433b 2452/* Declare a local label named ID. */
8d08fdba
MS
2453
2454tree
11f6b451 2455declare_local_label (tree id)
8d08fdba 2456{
1799e5d5 2457 tree decl, shadow;
8d08fdba 2458
acef433b 2459 /* Add a new entry to the SHADOWED_LABELS list so that when we leave
1799e5d5
RH
2460 this scope we can restore the old value of IDENTIFIER_TYPE_VALUE. */
2461 shadow = tree_cons (IDENTIFIER_LABEL_VALUE (id), NULL_TREE,
2462 current_binding_level->shadowed_labels);
2463 current_binding_level->shadowed_labels = shadow;
2464
acef433b 2465 decl = make_label_decl (id, /*local_p=*/1);
1799e5d5 2466 TREE_VALUE (shadow) = decl;
68642fb6 2467
acef433b 2468 return decl;
8d08fdba
MS
2469}
2470
6625cdb5
JM
2471/* Returns nonzero if it is ill-formed to jump past the declaration of
2472 DECL. Returns 2 if it's also a real problem. */
2473
2474static int
11f6b451 2475decl_jump_unsafe (tree decl)
6625cdb5 2476{
c32097d8
JM
2477 /* [stmt.dcl]/3: A program that jumps from a point where a local variable
2478 with automatic storage duration is not in scope to a point where it is
2479 in scope is ill-formed unless the variable has scalar type, class type
2480 with a trivial default constructor and a trivial destructor, a
2481 cv-qualified version of one of these types, or an array of one of the
2482 preceding types and is declared without an initializer (8.5). */
2483 tree type = TREE_TYPE (decl);
2484
b88b7ced 2485 if (TREE_CODE (decl) != VAR_DECL || TREE_STATIC (decl)
c32097d8 2486 || type == error_mark_node)
6625cdb5
JM
2487 return 0;
2488
c32097d8
JM
2489 type = strip_array_types (type);
2490
2491 if (type_has_nontrivial_default_init (TREE_TYPE (decl))
6c06fbce
MM
2492 || DECL_NONTRIVIALLY_INITIALIZED_P (decl))
2493 return 2;
2494
c32097d8
JM
2495 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
2496 return 1;
6625cdb5 2497
c32097d8 2498 return 0;
6625cdb5
JM
2499}
2500
1799e5d5
RH
2501/* A subroutine of check_previous_goto_1 to identify a branch to the user. */
2502
2503static void
2504identify_goto (tree decl, const location_t *locus)
2505{
2506 if (decl)
cbe5f3b3 2507 permerror (input_location, "jump to label %qD", decl);
1799e5d5 2508 else
cbe5f3b3 2509 permerror (input_location, "jump to case label");
1799e5d5 2510 if (locus)
69bc6bff 2511 permerror (*locus, " from here");
1799e5d5
RH
2512}
2513
6625cdb5
JM
2514/* Check that a single previously seen jump to a newly defined label
2515 is OK. DECL is the LABEL_DECL or 0; LEVEL is the binding_level for
2516 the jump context; NAMES are the names in scope in LEVEL at the jump
3db45ab5 2517 context; LOCUS is the source position of the jump or 0. Returns
1799e5d5 2518 true if all is well. */
6625cdb5 2519
1799e5d5
RH
2520static bool
2521check_previous_goto_1 (tree decl, struct cp_binding_level* level, tree names,
2522 bool exited_omp, const location_t *locus)
2523{
2524 struct cp_binding_level *b;
2525 bool identified = false, saw_eh = false, saw_omp = false;
2526
2527 if (exited_omp)
2528 {
2529 identify_goto (decl, locus);
2530 error (" exits OpenMP structured block");
2531 identified = saw_omp = true;
2532 }
2533
2534 for (b = current_binding_level; b ; b = b->level_chain)
2535 {
2536 tree new_decls, old_decls = (b == level ? names : NULL_TREE);
2537
2538 for (new_decls = b->names; new_decls != old_decls;
6625cdb5
JM
2539 new_decls = TREE_CHAIN (new_decls))
2540 {
2541 int problem = decl_jump_unsafe (new_decls);
2542 if (! problem)
2543 continue;
2544
1799e5d5 2545 if (!identified)
6625cdb5 2546 {
1799e5d5
RH
2547 identify_goto (decl, locus);
2548 identified = true;
6625cdb5 2549 }
826840d9 2550 if (problem > 1)
dee15844 2551 error (" crosses initialization of %q+#D", new_decls);
6625cdb5 2552 else
c32097d8
JM
2553 permerror (input_location, " enters scope of %q+#D which has "
2554 "non-trivial destructor", new_decls);
6625cdb5
JM
2555 }
2556
2557 if (b == level)
2558 break;
1799e5d5 2559 if ((b->kind == sk_try || b->kind == sk_catch) && !saw_eh)
6625cdb5 2560 {
1799e5d5 2561 if (!identified)
6625cdb5 2562 {
1799e5d5
RH
2563 identify_goto (decl, locus);
2564 identified = true;
6625cdb5 2565 }
a7e8c268 2566 if (b->kind == sk_try)
826840d9
RH
2567 error (" enters try block");
2568 else
2569 error (" enters catch block");
1799e5d5
RH
2570 saw_eh = true;
2571 }
2572 if (b->kind == sk_omp && !saw_omp)
2573 {
2574 if (!identified)
2575 {
2576 identify_goto (decl, locus);
2577 identified = true;
2578 }
2579 error (" enters OpenMP structured block");
2580 saw_omp = true;
6625cdb5
JM
2581 }
2582 }
6625cdb5 2583
1799e5d5 2584 return !identified;
6625cdb5
JM
2585}
2586
2587static void
1799e5d5 2588check_previous_goto (tree decl, struct named_label_use_entry *use)
6625cdb5 2589{
1799e5d5
RH
2590 check_previous_goto_1 (decl, use->binding_level,
2591 use->names_in_scope, use->in_omp_scope,
2592 &use->o_goto_locus);
6625cdb5
JM
2593}
2594
1799e5d5
RH
2595static bool
2596check_switch_goto (struct cp_binding_level* level)
6625cdb5 2597{
1799e5d5 2598 return check_previous_goto_1 (NULL_TREE, level, level->names, false, NULL);
6625cdb5
JM
2599}
2600
2601/* Check that a new jump to a label DECL is OK. Called by
2602 finish_goto_stmt. */
2603
2604void
11f6b451 2605check_goto (tree decl)
6625cdb5 2606{
1799e5d5
RH
2607 struct named_label_entry *ent, dummy;
2608 bool saw_catch = false, identified = false;
6625cdb5 2609 tree bad;
6625cdb5 2610
1799e5d5
RH
2611 /* We can't know where a computed goto is jumping.
2612 So we assume that it's OK. */
2613 if (TREE_CODE (decl) != LABEL_DECL)
2614 return;
2615
2616 /* We didn't record any information about this label when we created it,
2617 and there's not much point since it's trivial to analyze as a return. */
2618 if (decl == cdtor_label)
e3cd9945
APB
2619 return;
2620
1799e5d5
RH
2621 dummy.label_decl = decl;
2622 ent = (struct named_label_entry *) htab_find (named_labels, &dummy);
2623 gcc_assert (ent != NULL);
2624
6625cdb5
JM
2625 /* If the label hasn't been defined yet, defer checking. */
2626 if (! DECL_INITIAL (decl))
2627 {
1799e5d5 2628 struct named_label_use_entry *new_use;
6625cdb5 2629
1799e5d5
RH
2630 /* Don't bother creating another use if the last goto had the
2631 same data, and will therefore create the same set of errors. */
2632 if (ent->uses
2633 && ent->uses->names_in_scope == current_binding_level->names)
2634 return;
6625cdb5 2635
1799e5d5
RH
2636 new_use = GGC_NEW (struct named_label_use_entry);
2637 new_use->binding_level = current_binding_level;
2638 new_use->names_in_scope = current_binding_level->names;
2639 new_use->o_goto_locus = input_location;
2640 new_use->in_omp_scope = false;
2641
2642 new_use->next = ent->uses;
2643 ent->uses = new_use;
2644 return;
2645 }
6625cdb5 2646
1799e5d5
RH
2647 if (ent->in_try_scope || ent->in_catch_scope
2648 || ent->in_omp_scope || ent->bad_decls)
6625cdb5 2649 {
cbe5f3b3
MLI
2650 permerror (input_location, "jump to label %q+D", decl);
2651 permerror (input_location, " from here");
1799e5d5 2652 identified = true;
6625cdb5
JM
2653 }
2654
1799e5d5 2655 for (bad = ent->bad_decls; bad; bad = TREE_CHAIN (bad))
6625cdb5
JM
2656 {
2657 tree b = TREE_VALUE (bad);
2658 int u = decl_jump_unsafe (b);
2659
2660 if (u > 1 && DECL_ARTIFICIAL (b))
1799e5d5
RH
2661 {
2662 /* Can't skip init of __exception_info. */
c5d75364 2663 error_at (DECL_SOURCE_LOCATION (b), " enters catch block");
1799e5d5
RH
2664 saw_catch = true;
2665 }
6625cdb5 2666 else if (u > 1)
dee15844 2667 error (" skips initialization of %q+#D", b);
6625cdb5 2668 else
c32097d8
JM
2669 permerror (input_location, " enters scope of %q+#D which has "
2670 "non-trivial destructor", b);
6625cdb5
JM
2671 }
2672
1799e5d5 2673 if (ent->in_try_scope)
6625cdb5 2674 error (" enters try block");
1799e5d5 2675 else if (ent->in_catch_scope && !saw_catch)
826840d9 2676 error (" enters catch block");
1799e5d5
RH
2677
2678 if (ent->in_omp_scope)
2679 error (" enters OpenMP structured block");
2680 else if (flag_openmp)
2681 {
2682 struct cp_binding_level *b;
2683 for (b = current_binding_level; b ; b = b->level_chain)
2684 {
2685 if (b == ent->binding_level)
2686 break;
2687 if (b->kind == sk_omp)
2688 {
2689 if (!identified)
2690 {
cbe5f3b3
MLI
2691 permerror (input_location, "jump to label %q+D", decl);
2692 permerror (input_location, " from here");
1799e5d5
RH
2693 identified = true;
2694 }
2695 error (" exits OpenMP structured block");
2696 break;
2697 }
2698 }
2699 }
2700}
2701
2702/* Check that a return is ok wrt OpenMP structured blocks.
2703 Called by finish_return_stmt. Returns true if all is well. */
2704
2705bool
2706check_omp_return (void)
2707{
2708 struct cp_binding_level *b;
2709 for (b = current_binding_level; b ; b = b->level_chain)
2710 if (b->kind == sk_omp)
2711 {
2712 error ("invalid exit from OpenMP structured block");
2713 return false;
2714 }
2715 return true;
6625cdb5
JM
2716}
2717
8d08fdba 2718/* Define a label, specifying the location in the source file.
b9c87401 2719 Return the LABEL_DECL node for the label. */
8d08fdba
MS
2720
2721tree
5b030314 2722define_label (location_t location, tree name)
8d08fdba 2723{
1799e5d5 2724 struct named_label_entry *ent, dummy;
926ce8bd 2725 struct cp_binding_level *p;
1799e5d5 2726 tree decl;
6625cdb5 2727
22ffcc6f 2728 timevar_push (TV_NAME_LOOKUP);
1799e5d5
RH
2729
2730 decl = lookup_label (name);
2731
2732 dummy.label_decl = decl;
2733 ent = (struct named_label_entry *) htab_find (named_labels, &dummy);
2734 gcc_assert (ent != NULL);
8d08fdba 2735
3dc9aec6 2736 /* After labels, make any new cleanups in the function go into their
8d08fdba 2737 own new (temporary) binding contour. */
caf93cb0
EC
2738 for (p = current_binding_level;
2739 p->kind != sk_function_parms;
a7e8c268 2740 p = p->level_chain)
3dc9aec6 2741 p->more_cleanups_ok = 0;
8d08fdba 2742
e1cd6e56 2743 if (name == get_identifier ("wchar_t"))
cbe5f3b3 2744 permerror (input_location, "label named wchar_t");
e1cd6e56 2745
8d08fdba 2746 if (DECL_INITIAL (decl) != NULL_TREE)
417fa55b
LM
2747 {
2748 error ("duplicate label %qD", decl);
2749 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
2750 }
8d08fdba
MS
2751 else
2752 {
1799e5d5
RH
2753 struct named_label_use_entry *use;
2754
8d08fdba
MS
2755 /* Mark label as having been defined. */
2756 DECL_INITIAL (decl) = error_mark_node;
2757 /* Say where in the source. */
f31686a3 2758 DECL_SOURCE_LOCATION (decl) = location;
1799e5d5
RH
2759
2760 ent->binding_level = current_binding_level;
2761 ent->names_in_scope = current_binding_level->names;
2762
2763 for (use = ent->uses; use ; use = use->next)
2764 check_previous_goto (decl, use);
2765 ent->uses = NULL;
8d08fdba 2766 }
b9c87401 2767
be99edf8 2768 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, decl);
8d08fdba
MS
2769}
2770
a5894242
MS
2771struct cp_switch
2772{
e2500fed 2773 struct cp_binding_level *level;
a5894242 2774 struct cp_switch *next;
56cb9733
MM
2775 /* The SWITCH_STMT being built. */
2776 tree switch_stmt;
2777 /* A splay-tree mapping the low element of a case range to the high
2778 element, or NULL_TREE if there is no high element. Used to
2779 determine whether or not a new case label duplicates an old case
2780 label. We need a tree, rather than simply a hash table, because
2781 of the GNU case range extension. */
2782 splay_tree cases;
a5894242
MS
2783};
2784
56cb9733
MM
2785/* A stack of the currently active switch statements. The innermost
2786 switch statement is on the top of the stack. There is no need to
2787 mark the stack for garbage collection because it is only active
2788 during the processing of the body of a function, and we never
2789 collect at that point. */
5362b086 2790
a5894242
MS
2791static struct cp_switch *switch_stack;
2792
56cb9733
MM
2793/* Called right after a switch-statement condition is parsed.
2794 SWITCH_STMT is the switch statement being parsed. */
2795
a5894242 2796void
11f6b451 2797push_switch (tree switch_stmt)
a5894242 2798{
0ac1b889 2799 struct cp_switch *p = XNEW (struct cp_switch);
a5894242
MS
2800 p->level = current_binding_level;
2801 p->next = switch_stack;
56cb9733
MM
2802 p->switch_stmt = switch_stmt;
2803 p->cases = splay_tree_new (case_compare, NULL, NULL);
a5894242
MS
2804 switch_stack = p;
2805}
2806
2807void
11f6b451 2808pop_switch (void)
a5894242 2809{
6de9cd9a 2810 struct cp_switch *cs = switch_stack;
fbc315db 2811 location_t switch_location;
6de9cd9a
DN
2812
2813 /* Emit warnings as needed. */
fbc315db
ILT
2814 if (EXPR_HAS_LOCATION (cs->switch_stmt))
2815 switch_location = EXPR_LOCATION (cs->switch_stmt);
2816 else
2817 switch_location = input_location;
dddf9a0a
AP
2818 if (!processing_template_decl)
2819 c_do_switch_warnings (cs->cases, switch_location,
2820 SWITCH_STMT_TYPE (cs->switch_stmt),
2821 SWITCH_STMT_COND (cs->switch_stmt));
5362b086 2822
56cb9733 2823 splay_tree_delete (cs->cases);
a5894242 2824 switch_stack = switch_stack->next;
bedda2da 2825 free (cs);
a5894242
MS
2826}
2827
b0a1da19
JM
2828/* Note that we've seen a definition of a case label, and complain if this
2829 is a bad place for one. */
e92cc029 2830
3e4d04a1 2831tree
c2255bc4 2832finish_case_label (location_t loc, tree low_value, tree high_value)
8d08fdba 2833{
3e4d04a1 2834 tree cond, r;
926ce8bd 2835 struct cp_binding_level *p;
a5894242 2836
56cb9733
MM
2837 if (processing_template_decl)
2838 {
8f17b5c5
MM
2839 tree label;
2840
56cb9733
MM
2841 /* For templates, just add the case label; we'll do semantic
2842 analysis at instantiation-time. */
c2255bc4
AH
2843 label = build_decl (loc, LABEL_DECL, NULL_TREE, NULL_TREE);
2844 return add_stmt (build_case_label (loc, low_value, high_value, label));
56cb9733
MM
2845 }
2846
2847 /* Find the condition on which this switch statement depends. */
ebaae582 2848 cond = SWITCH_STMT_COND (switch_stack->switch_stmt);
56cb9733
MM
2849 if (cond && TREE_CODE (cond) == TREE_LIST)
2850 cond = TREE_VALUE (cond);
56cb9733 2851
1799e5d5
RH
2852 if (!check_switch_goto (switch_stack->level))
2853 return error_mark_node;
2854
c2255bc4 2855 r = c_add_case_label (loc, switch_stack->cases, cond,
8c30a510 2856 SWITCH_STMT_TYPE (switch_stack->switch_stmt),
a6c0a76c 2857 low_value, high_value);
8d08fdba 2858
3dc9aec6 2859 /* After labels, make any new cleanups in the function go into their
8d08fdba 2860 own new (temporary) binding contour. */
caf93cb0
EC
2861 for (p = current_binding_level;
2862 p->kind != sk_function_parms;
a7e8c268 2863 p = p->level_chain)
3dc9aec6 2864 p->more_cleanups_ok = 0;
3e4d04a1
RH
2865
2866 return r;
8d08fdba
MS
2867}
2868\f
7ddedda4
MM
2869/* Hash a TYPENAME_TYPE. K is really of type `tree'. */
2870
e2500fed 2871static hashval_t
11f6b451 2872typename_hash (const void* k)
7ddedda4 2873{
e2500fed 2874 hashval_t hash;
741ac903 2875 const_tree const t = (const_tree) k;
7ddedda4 2876
7bdfd72e
KG
2877 hash = (htab_hash_pointer (TYPE_CONTEXT (t))
2878 ^ htab_hash_pointer (DECL_NAME (TYPE_NAME (t))));
7ddedda4
MM
2879
2880 return hash;
2881}
2882
fc6a28d7
MM
2883typedef struct typename_info {
2884 tree scope;
2885 tree name;
2886 tree template_id;
2887 bool enum_p;
2888 bool class_p;
2889} typename_info;
2890
06d40de8
DG
2891/* Compare two TYPENAME_TYPEs. K1 is really of type `tree', K2 is
2892 really of type `typename_info*' */
7ddedda4 2893
e2500fed 2894static int
11f6b451 2895typename_compare (const void * k1, const void * k2)
7ddedda4 2896{
741ac903
KG
2897 const_tree const t1 = (const_tree) k1;
2898 const typename_info *const t2 = (const typename_info *) k2;
fc6a28d7
MM
2899
2900 return (DECL_NAME (TYPE_NAME (t1)) == t2->name
2901 && TYPE_CONTEXT (t1) == t2->scope
2902 && TYPENAME_TYPE_FULLNAME (t1) == t2->template_id
2903 && TYPENAME_IS_ENUM_P (t1) == t2->enum_p
2904 && TYPENAME_IS_CLASS_P (t1) == t2->class_p);
7ddedda4
MM
2905}
2906
45869a6c 2907/* Build a TYPENAME_TYPE. If the type is `typename T::t', CONTEXT is
fc6a28d7 2908 the type of `T', NAME is the IDENTIFIER_NODE for `t'.
c8094d83 2909
45869a6c
MM
2910 Returns the new TYPENAME_TYPE. */
2911
e2500fed
GK
2912static GTY ((param_is (union tree_node))) htab_t typename_htab;
2913
8ce33230 2914static tree
fc6a28d7
MM
2915build_typename_type (tree context, tree name, tree fullname,
2916 enum tag_types tag_type)
45869a6c
MM
2917{
2918 tree t;
2919 tree d;
fc6a28d7 2920 typename_info ti;
fad205ff 2921 void **e;
fc6a28d7 2922 hashval_t hash;
45869a6c 2923
e2500fed 2924 if (typename_htab == NULL)
fc6a28d7
MM
2925 typename_htab = htab_create_ggc (61, &typename_hash,
2926 &typename_compare, NULL);
2927
c8094d83 2928 ti.scope = FROB_CONTEXT (context);
fc6a28d7
MM
2929 ti.name = name;
2930 ti.template_id = fullname;
2931 ti.enum_p = tag_type == enum_type;
2932 ti.class_p = (tag_type == class_type
2933 || tag_type == record_type
2934 || tag_type == union_type);
2935 hash = (htab_hash_pointer (ti.scope)
2936 ^ htab_hash_pointer (ti.name));
45869a6c 2937
7ddedda4 2938 /* See if we already have this type. */
fc6a28d7 2939 e = htab_find_slot_with_hash (typename_htab, &ti, hash, INSERT);
e2500fed
GK
2940 if (*e)
2941 t = (tree) *e;
7ddedda4 2942 else
fc6a28d7
MM
2943 {
2944 /* Build the TYPENAME_TYPE. */
9e1e64ec 2945 t = cxx_make_type (TYPENAME_TYPE);
fc6a28d7
MM
2946 TYPE_CONTEXT (t) = ti.scope;
2947 TYPENAME_TYPE_FULLNAME (t) = ti.template_id;
2948 TYPENAME_IS_ENUM_P (t) = ti.enum_p;
2949 TYPENAME_IS_CLASS_P (t) = ti.class_p;
c8094d83 2950
fc6a28d7 2951 /* Build the corresponding TYPE_DECL. */
c2255bc4 2952 d = build_decl (input_location, TYPE_DECL, name, t);
fc6a28d7
MM
2953 TYPE_NAME (TREE_TYPE (d)) = d;
2954 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
2955 DECL_CONTEXT (d) = FROB_CONTEXT (context);
2956 DECL_ARTIFICIAL (d) = 1;
2957
2958 /* Store it in the hash table. */
2959 *e = t;
06d40de8
DG
2960
2961 /* TYPENAME_TYPEs must always be compared structurally, because
2962 they may or may not resolve down to another type depending on
2963 the currently open classes. */
2964 SET_TYPE_STRUCTURAL_EQUALITY (t);
fc6a28d7 2965 }
c8094d83 2966
45869a6c
MM
2967 return t;
2968}
2969
fc6a28d7
MM
2970/* Resolve `typename CONTEXT::NAME'. TAG_TYPE indicates the tag
2971 provided to name the type. Returns an appropriate type, unless an
2972 error occurs, in which case error_mark_node is returned. If we
2973 locate a non-artificial TYPE_DECL and TF_KEEP_TYPE_DECL is set, we
2974 return that, rather than the _TYPE it corresponds to, in other
2975 cases we look through the type decl. If TF_ERROR is set, complain
2976 about errors, otherwise be quiet. */
3baa501d 2977
5566b478 2978tree
fc6a28d7
MM
2979make_typename_type (tree context, tree name, enum tag_types tag_type,
2980 tsubst_flags_t complain)
5566b478 2981{
b2b7d40a 2982 tree fullname;
7d3bec9d
NS
2983 tree t;
2984 bool want_template;
a80e4195 2985
5dc5d13c
KL
2986 if (name == error_mark_node
2987 || context == NULL_TREE
2988 || context == error_mark_node)
2989 return error_mark_node;
2990
2f939d94 2991 if (TYPE_P (name))
78638e24 2992 {
68642fb6
UD
2993 if (!(TYPE_LANG_SPECIFIC (name)
2994 && (CLASSTYPE_IS_TEMPLATE (name)
78638e24
MM
2995 || CLASSTYPE_USE_TEMPLATE (name))))
2996 name = TYPE_IDENTIFIER (name);
2997 else
2998 /* Create a TEMPLATE_ID_EXPR for the type. */
2999 name = build_nt (TEMPLATE_ID_EXPR,
3000 CLASSTYPE_TI_TEMPLATE (name),
3001 CLASSTYPE_TI_ARGS (name));
3002 }
653cc74a 3003 else if (TREE_CODE (name) == TYPE_DECL)
a80e4195 3004 name = DECL_NAME (name);
b2b7d40a
JM
3005
3006 fullname = name;
3007
3008 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
11686454
JM
3009 {
3010 name = TREE_OPERAND (name, 0);
3011 if (TREE_CODE (name) == TEMPLATE_DECL)
3012 name = TREE_OPERAND (fullname, 0) = DECL_NAME (name);
50ef2c18
MM
3013 else if (TREE_CODE (name) == OVERLOAD)
3014 {
3015 error ("%qD is not a type", name);
3016 return error_mark_node;
3017 }
11686454 3018 }
8a2b77e7
JM
3019 if (TREE_CODE (name) == TEMPLATE_DECL)
3020 {
2d01edd7 3021 error ("%qD used without template parameters", name);
8a2b77e7
JM
3022 return error_mark_node;
3023 }
50bc768d 3024 gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
0c88d886 3025 gcc_assert (TYPE_P (context));
04ddee1b 3026
9e1e64ec 3027 if (!MAYBE_CLASS_TYPE_P (context))
7d3bec9d
NS
3028 {
3029 if (complain & tf_error)
3030 error ("%q#T is not a class", context);
3031 return error_mark_node;
5566b478 3032 }
7d3bec9d 3033
1cb801bc
JM
3034 /* When the CONTEXT is a dependent type, NAME could refer to a
3035 dependent base class of CONTEXT. But look inside it anyway
3036 if CONTEXT is a currently open scope, in case it refers to a
3037 member of the current instantiation or a non-dependent base;
3038 lookup will stop when we hit a dependent base. */
3039 if (!dependent_scope_p (context))
3040 /* We should only set WANT_TYPE when we're a nested typename type.
3041 Then we can give better diagnostics if we find a non-type. */
3042 t = lookup_field (context, name, 0, /*want_type=*/true);
3043 else
3044 t = NULL_TREE;
3045
3046 if (!t && dependent_type_p (context))
3047 return build_typename_type (context, name, fullname, tag_type);
3048
7d3bec9d
NS
3049 want_template = TREE_CODE (fullname) == TEMPLATE_ID_EXPR;
3050
7d3bec9d 3051 if (!t)
11249cf0 3052 {
4f2b0fb2 3053 if (complain & tf_error)
7d3bec9d
NS
3054 error (want_template ? "no class template named %q#T in %q#T"
3055 : "no type named %q#T in %q#T", name, context);
11249cf0
MM
3056 return error_mark_node;
3057 }
7d3bec9d
NS
3058
3059 if (want_template && !DECL_CLASS_TEMPLATE_P (t))
3060 {
3061 if (complain & tf_error)
3062 error ("%<typename %T::%D%> names %q#T, which is not a class template",
3063 context, name, t);
3064 return error_mark_node;
3065 }
3066 if (!want_template && TREE_CODE (t) != TYPE_DECL)
3067 {
3068 if (complain & tf_error)
3069 error ("%<typename %T::%D%> names %q#T, which is not a type",
3070 context, name, t);
3071 return error_mark_node;
3072 }
3073
3074 if (complain & tf_error)
02022f3a 3075 perform_or_defer_access_check (TYPE_BINFO (context), t, t);
7d3bec9d
NS
3076
3077 if (want_template)
3078 return lookup_template_class (t, TREE_OPERAND (fullname, 1),
3079 NULL_TREE, context,
3080 /*entering_scope=*/0,
3081 tf_warning_or_error | tf_user);
3082
3083 if (DECL_ARTIFICIAL (t) || !(complain & tf_keep_type_decl))
3084 t = TREE_TYPE (t);
3085
3086 return t;
5566b478
MS
3087}
3088
b939a023 3089/* Resolve `CONTEXT::template NAME'. Returns a TEMPLATE_DECL if the name
c8094d83 3090 can be resolved or an UNBOUND_CLASS_TEMPLATE, unless an error occurs,
b939a023
KL
3091 in which case error_mark_node is returned.
3092
3093 If PARM_LIST is non-NULL, also make sure that the template parameter
3094 list of TEMPLATE_DECL matches.
3095
3096 If COMPLAIN zero, don't complain about any errors that occur. */
b8c6534b
KL
3097
3098tree
b939a023
KL
3099make_unbound_class_template (tree context, tree name, tree parm_list,
3100 tsubst_flags_t complain)
b8c6534b
KL
3101{
3102 tree t;
3103 tree d;
3104
3105 if (TYPE_P (name))
3106 name = TYPE_IDENTIFIER (name);
3107 else if (DECL_P (name))
3108 name = DECL_NAME (name);
8dc2b103 3109 gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
b8c6534b 3110
9579624e 3111 if (!dependent_type_p (context)
b8c6534b
KL
3112 || currently_open_class (context))
3113 {
3114 tree tmpl = NULL_TREE;
3115
9e1e64ec 3116 if (MAYBE_CLASS_TYPE_P (context))
86ac0575 3117 tmpl = lookup_field (context, name, 0, false);
b8c6534b
KL
3118
3119 if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
3120 {
4f09be91 3121 if (complain & tf_error)
2d01edd7 3122 error ("no class template named %q#T in %q#T", name, context);
b8c6534b
KL
3123 return error_mark_node;
3124 }
caf93cb0 3125
b939a023
KL
3126 if (parm_list
3127 && !comp_template_parms (DECL_TEMPLATE_PARMS (tmpl), parm_list))
3128 {
3129 if (complain & tf_error)
3130 {
3131 error ("template parameters do not match template");
dee15844 3132 error ("%q+D declared here", tmpl);
b939a023
KL
3133 }
3134 return error_mark_node;
3135 }
3136
2b59fc25 3137 if (complain & tf_error)
02022f3a 3138 perform_or_defer_access_check (TYPE_BINFO (context), tmpl, tmpl);
b8c6534b
KL
3139
3140 return tmpl;
3141 }
3142
3143 /* Build the UNBOUND_CLASS_TEMPLATE. */
9e1e64ec 3144 t = cxx_make_type (UNBOUND_CLASS_TEMPLATE);
b8c6534b
KL
3145 TYPE_CONTEXT (t) = FROB_CONTEXT (context);
3146 TREE_TYPE (t) = NULL_TREE;
06d40de8 3147 SET_TYPE_STRUCTURAL_EQUALITY (t);
b8c6534b
KL
3148
3149 /* Build the corresponding TEMPLATE_DECL. */
c2255bc4 3150 d = build_decl (input_location, TEMPLATE_DECL, name, t);
b8c6534b
KL
3151 TYPE_NAME (TREE_TYPE (d)) = d;
3152 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
3153 DECL_CONTEXT (d) = FROB_CONTEXT (context);
3154 DECL_ARTIFICIAL (d) = 1;
b939a023 3155 DECL_TEMPLATE_PARMS (d) = parm_list;
b8c6534b
KL
3156
3157 return t;
3158}
3159
8d08fdba 3160\f
47aa0df4 3161
8d08fdba 3162/* Push the declarations of builtin types into the namespace.
4b0d3cbe
MM
3163 RID_INDEX is the index of the builtin type in the array
3164 RID_POINTERS. NAME is the name used when looking up the builtin
3165 type. TYPE is the _TYPE node for the builtin type. */
8d08fdba 3166
eaa7c03f 3167void
caf93cb0 3168record_builtin_type (enum rid rid_index,
0cbd7506
MS
3169 const char* name,
3170 tree type)
8d08fdba
MS
3171{
3172 tree rname = NULL_TREE, tname = NULL_TREE;
a703fb38 3173 tree tdecl = NULL_TREE;
8d08fdba 3174
0e5921e8 3175 if ((int) rid_index < (int) RID_MAX)
8d08fdba
MS
3176 rname = ridpointers[(int) rid_index];
3177 if (name)
3178 tname = get_identifier (name);
3179
4b0d3cbe
MM
3180 /* The calls to SET_IDENTIFIER_GLOBAL_VALUE below should be
3181 eliminated. Built-in types should not be looked up name; their
3182 names are keywords that the parser can recognize. However, there
3183 is code in c-common.c that uses identifier_global_value to look
3184 up built-in types by name. */
8d08fdba
MS
3185 if (tname)
3186 {
c2255bc4 3187 tdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, tname, type);
4b0d3cbe 3188 DECL_ARTIFICIAL (tdecl) = 1;
a7e8c268 3189 SET_IDENTIFIER_GLOBAL_VALUE (tname, tdecl);
8d08fdba 3190 }
4b0d3cbe 3191 if (rname)
8d08fdba 3192 {
4b0d3cbe 3193 if (!tdecl)
8d08fdba 3194 {
c2255bc4 3195 tdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, rname, type);
4b0d3cbe 3196 DECL_ARTIFICIAL (tdecl) = 1;
8d08fdba 3197 }
4b0d3cbe 3198 SET_IDENTIFIER_GLOBAL_VALUE (rname, tdecl);
8d08fdba 3199 }
4b0d3cbe
MM
3200
3201 if (!TYPE_NAME (type))
3202 TYPE_NAME (type) = tdecl;
47aa0df4
MM
3203
3204 if (tdecl)
21d13d83 3205 debug_hooks->type_decl (tdecl, 0);
8d08fdba
MS
3206}
3207
eff71ab0 3208/* Record one of the standard Java types.
4d8a1dd6
MM
3209 * Declare it as having the given NAME.
3210 * If SIZE > 0, it is the size of one of the integral types;
3211 * otherwise it is the negative of the size of one of the other types. */
eff71ab0
PB
3212
3213static tree
11f6b451 3214record_builtin_java_type (const char* name, int size)
eff71ab0
PB
3215{
3216 tree type, decl;
3217 if (size > 0)
2dc6d666 3218 type = build_nonstandard_integer_type (size, 0);
eff71ab0 3219 else if (size > -32)
2dc6d666
AO
3220 {
3221 tree stype;
3222 /* "__java_char" or ""__java_boolean". */
3223 type = build_nonstandard_integer_type (-size, 1);
3224 /* Get the signed type cached and attached to the unsigned type,
3225 so it doesn't get garbage-collected at "random" times,
3226 causing potential codegen differences out of different UIDs
3227 and different alias set numbers. */
3228 stype = build_nonstandard_integer_type (-size, 0);
3229 TREE_CHAIN (type) = stype;
70fef63a 3230 /*if (size == -1) TREE_SET_CODE (type, BOOLEAN_TYPE);*/
eff71ab0
PB
3231 }
3232 else
a1c65f9f 3233 { /* "__java_float" or ""__java_double". */
ec6a6eb7 3234 type = make_node (REAL_TYPE);
eff71ab0
PB
3235 TYPE_PRECISION (type) = - size;
3236 layout_type (type);
3237 }
0e5921e8 3238 record_builtin_type (RID_MAX, name, type);
eff71ab0 3239 decl = TYPE_NAME (type);
e229f2cd
PB
3240
3241 /* Suppress generate debug symbol entries for these types,
3242 since for normal C++ they are just clutter.
a1c65f9f 3243 However, push_lang_context undoes this if extern "Java" is seen. */
eff71ab0 3244 DECL_IGNORED_P (decl) = 1;
e229f2cd 3245
eff71ab0
PB
3246 TYPE_FOR_JAVA (type) = 1;
3247 return type;
3248}
3249
3b426391 3250/* Push a type into the namespace so that the back ends ignore it. */
036407f7
ML
3251
3252static void
11f6b451 3253record_unknown_type (tree type, const char* name)
036407f7 3254{
c2255bc4
AH
3255 tree decl = pushdecl (build_decl (UNKNOWN_LOCATION,
3256 TYPE_DECL, get_identifier (name), type));
036407f7
ML
3257 /* Make sure the "unknown type" typedecl gets ignored for debug info. */
3258 DECL_IGNORED_P (decl) = 1;
3259 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
3260 TYPE_SIZE (type) = TYPE_SIZE (void_type_node);
3261 TYPE_ALIGN (type) = 1;
11cf4d18 3262 TYPE_USER_ALIGN (type) = 0;
179d2f74 3263 SET_TYPE_MODE (type, TYPE_MODE (void_type_node));
68642fb6 3264}
036407f7 3265
13a44ee0 3266/* A string for which we should create an IDENTIFIER_NODE at
d43829f9
MM
3267 startup. */
3268
3269typedef struct predefined_identifier
3270{
3271 /* The name of the identifier. */
8b60264b 3272 const char *const name;
d43829f9 3273 /* The place where the IDENTIFIER_NODE should be stored. */
8b60264b 3274 tree *const node;
838dfd8a 3275 /* Nonzero if this is the name of a constructor or destructor. */
8b60264b 3276 const int ctor_or_dtor_p;
d43829f9
MM
3277} predefined_identifier;
3278
3279/* Create all the predefined identifiers. */
3280
3281static void
11f6b451 3282initialize_predefined_identifiers (void)
d43829f9 3283{
8b60264b 3284 const predefined_identifier *pid;
d43829f9
MM
3285
3286 /* A table of identifiers to create at startup. */
8b60264b 3287 static const predefined_identifier predefined_identifiers[] = {
298d6f60
MM
3288 { "C++", &lang_name_cplusplus, 0 },
3289 { "C", &lang_name_c, 0 },
3290 { "Java", &lang_name_java, 0 },
d6eec208
MM
3291 /* Some of these names have a trailing space so that it is
3292 impossible for them to conflict with names written by users. */
3293 { "__ct ", &ctor_identifier, 1 },
3294 { "__base_ctor ", &base_ctor_identifier, 1 },
3295 { "__comp_ctor ", &complete_ctor_identifier, 1 },
3296 { "__dt ", &dtor_identifier, 1 },
3297 { "__comp_dtor ", &complete_dtor_identifier, 1 },
3298 { "__base_dtor ", &base_dtor_identifier, 1 },
3299 { "__deleting_dtor ", &deleting_dtor_identifier, 1 },
298d6f60 3300 { IN_CHARGE_NAME, &in_charge_identifier, 0 },
298d6f60
MM
3301 { "nelts", &nelts_identifier, 0 },
3302 { THIS_NAME, &this_identifier, 0 },
c4372ef4 3303 { VTABLE_DELTA_NAME, &delta_identifier, 0 },
298d6f60 3304 { VTABLE_PFN_NAME, &pfn_identifier, 0 },
298d6f60 3305 { "_vptr", &vptr_identifier, 0 },
3ec6bad3 3306 { "__vtt_parm", &vtt_parm_identifier, 0 },
82a2669e 3307 { "::", &global_scope_name, 0 },
1f6e1acc 3308 { "std", &std_identifier, 0 },
298d6f60 3309 { NULL, NULL, 0 }
d43829f9
MM
3310 };
3311
3312 for (pid = predefined_identifiers; pid->name; ++pid)
298d6f60
MM
3313 {
3314 *pid->node = get_identifier (pid->name);
3315 if (pid->ctor_or_dtor_p)
3316 IDENTIFIER_CTOR_OR_DTOR_P (*pid->node) = 1;
3317 }
d43829f9
MM
3318}
3319
8d08fdba
MS
3320/* Create the predefined scalar types of C,
3321 and some nodes representing standard constants (0, 1, (void *)0).
3322 Initialize the global binding level.
3323 Make definitions for built-in primitive functions. */
3324
3325void
11f6b451 3326cxx_init_decl_processing (void)
8d08fdba 3327{
10841285
MM
3328 tree void_ftype;
3329 tree void_ftype_ptr;
8d08fdba 3330
8c1d6d62 3331 build_common_tree_nodes (flag_signed_char, false);
6de66680 3332
d43829f9
MM
3333 /* Create all the identifiers we need. */
3334 initialize_predefined_identifiers ();
8d08fdba 3335
9cd64686
MM
3336 /* Create the global variables. */
3337 push_to_top_level ();
8012c983 3338
82a2669e 3339 current_function_decl = NULL_TREE;
1ec57cf0 3340 current_binding_level = NULL;
a1c65f9f 3341 /* Enter the global namespace. */
50bc768d 3342 gcc_assert (global_namespace == NULL_TREE);
82a2669e 3343 global_namespace = build_lang_decl (NAMESPACE_DECL, global_scope_name,
0cbd7506 3344 void_type_node);
b9e75696 3345 TREE_PUBLIC (global_namespace) = 1;
ac20c67a 3346 begin_scope (sk_namespace, global_namespace);
82a2669e 3347
30394414
JM
3348 current_lang_name = NULL_TREE;
3349
ddbfd28d
GK
3350 if (flag_visibility_ms_compat)
3351 default_visibility = VISIBILITY_HIDDEN;
3352
8d08fdba
MS
3353 /* Initially, C. */
3354 current_lang_name = lang_name_c;
3355
6bcedb4e 3356 /* Create the `std' namespace. */
1dbb6023
NS
3357 push_namespace (std_identifier);
3358 std_node = current_namespace;
3359 pop_namespace ();
5362b086 3360
eaa7c03f 3361 c_common_nodes_and_builtins ();
37c46b43 3362
4d8a1dd6
MM
3363 java_byte_type_node = record_builtin_java_type ("__java_byte", 8);
3364 java_short_type_node = record_builtin_java_type ("__java_short", 16);
3365 java_int_type_node = record_builtin_java_type ("__java_int", 32);
3366 java_long_type_node = record_builtin_java_type ("__java_long", 64);
3367 java_float_type_node = record_builtin_java_type ("__java_float", -32);
3368 java_double_type_node = record_builtin_java_type ("__java_double", -64);
3369 java_char_type_node = record_builtin_java_type ("__java_char", -16);
3370 java_boolean_type_node = record_builtin_java_type ("__java_boolean", -1);
eff71ab0 3371
7d60be94
NS
3372 integer_two_node = build_int_cst (NULL_TREE, 2);
3373 integer_three_node = build_int_cst (NULL_TREE, 3);
8d08fdba 3374
255512c1 3375 record_builtin_type (RID_BOOL, "bool", boolean_type_node);
de7df9eb
JM
3376 truthvalue_type_node = boolean_type_node;
3377 truthvalue_false_node = boolean_false_node;
3378 truthvalue_true_node = boolean_true_node;
2986ae00 3379
4cc1d462 3380 empty_except_spec = build_tree_list (NULL_TREE, NULL_TREE);
5fd8e536
JM
3381
3382#if 0
3e411c3f 3383 record_builtin_type (RID_MAX, NULL, string_type_node);
5fd8e536
JM
3384#endif
3385
1f84ec23
MM
3386 delta_type_node = ptrdiff_type_node;
3387 vtable_index_type = ptrdiff_type_node;
c7e266a6 3388
3ec6bad3 3389 vtt_parm_type = build_pointer_type (const_ptr_type_node);
10841285
MM
3390 void_ftype = build_function_type (void_type_node, void_list_node);
3391 void_ftype_ptr = build_function_type (void_type_node,
3392 tree_cons (NULL_TREE,
caf93cb0 3393 ptr_type_node,
10841285 3394 void_list_node));
824b9a4c 3395 void_ftype_ptr
4cc1d462 3396 = build_exception_variant (void_ftype_ptr, empty_except_spec);
8d08fdba 3397
8d08fdba
MS
3398 /* C++ extensions */
3399
ec6a6eb7 3400 unknown_type_node = make_node (UNKNOWN_TYPE);
036407f7
ML
3401 record_unknown_type (unknown_type_node, "unknown type");
3402
8d08fdba
MS
3403 /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node. */
3404 TREE_TYPE (unknown_type_node) = unknown_type_node;
a6967cc0 3405
a6967cc0
JM
3406 /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
3407 result. */
8d08fdba
MS
3408 TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
3409 TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
3410
ec6a6eb7 3411 init_list_type_node = make_node (UNKNOWN_TYPE);
09357846
JM
3412 record_unknown_type (init_list_type_node, "init list");
3413
c4372ef4
NS
3414 {
3415 /* Make sure we get a unique function type, so we can give
3416 its pointer type a name. (This wins for gdb.) */
ec6a6eb7 3417 tree vfunc_type = make_node (FUNCTION_TYPE);
c4372ef4
NS
3418 TREE_TYPE (vfunc_type) = integer_type_node;
3419 TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
3420 layout_type (vfunc_type);
3421
3422 vtable_entry_type = build_pointer_type (vfunc_type);
3423 }
0e5921e8 3424 record_builtin_type (RID_MAX, VTBL_PTR_TYPE, vtable_entry_type);
8d08fdba 3425
8d08fdba 3426 vtbl_type_node
52bf7d5d 3427 = build_cplus_array_type (vtable_entry_type, NULL_TREE);
8d08fdba 3428 layout_type (vtbl_type_node);
91063b51 3429 vtbl_type_node = build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
3e411c3f 3430 record_builtin_type (RID_MAX, NULL, vtbl_type_node);
849da744
MM
3431 vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
3432 layout_type (vtbl_ptr_type_node);
3e411c3f 3433 record_builtin_type (RID_MAX, NULL, vtbl_ptr_type_node);
8d08fdba 3434
1f84ec23
MM
3435 push_namespace (get_identifier ("__cxxabiv1"));
3436 abi_node = current_namespace;
3437 pop_namespace ();
6633d636 3438
ec6a6eb7 3439 global_type_node = make_node (LANG_TYPE);
036407f7 3440 record_unknown_type (global_type_node, "global type");
2c73f9f5 3441
db5ae43f
MS
3442 /* Now, C++. */
3443 current_lang_name = lang_name_cplusplus;
8d08fdba 3444
ced78d8b 3445 {
4b0d3cbe
MM
3446 tree bad_alloc_id;
3447 tree bad_alloc_type_node;
3448 tree bad_alloc_decl;
3449 tree newtype, deltype;
10841285
MM
3450 tree ptr_ftype_sizetype;
3451
1dbb6023 3452 push_namespace (std_identifier);
4b0d3cbe 3453 bad_alloc_id = get_identifier ("bad_alloc");
9e1e64ec 3454 bad_alloc_type_node = make_class_type (RECORD_TYPE);
4b0d3cbe 3455 TYPE_CONTEXT (bad_alloc_type_node) = current_namespace;
caf93cb0 3456 bad_alloc_decl
4b0d3cbe
MM
3457 = create_implicit_typedef (bad_alloc_id, bad_alloc_type_node);
3458 DECL_CONTEXT (bad_alloc_decl) = current_namespace;
3459 TYPE_STUB_DECL (bad_alloc_type_node) = bad_alloc_decl;
1dbb6023 3460 pop_namespace ();
caf93cb0
EC
3461
3462 ptr_ftype_sizetype
10841285
MM
3463 = build_function_type (ptr_type_node,
3464 tree_cons (NULL_TREE,
c9f8536c 3465 size_type_node,
10841285 3466 void_list_node));
2c73f9f5 3467 newtype = build_exception_variant
0ba8a114
NS
3468 (ptr_ftype_sizetype, add_exception_specifier
3469 (NULL_TREE, bad_alloc_type_node, -1));
4cc1d462 3470 deltype = build_exception_variant (void_ftype_ptr, empty_except_spec);
596ea4e5
AS
3471 push_cp_library_fn (NEW_EXPR, newtype);
3472 push_cp_library_fn (VEC_NEW_EXPR, newtype);
3473 global_delete_fndecl = push_cp_library_fn (DELETE_EXPR, deltype);
3474 push_cp_library_fn (VEC_DELETE_EXPR, deltype);
ced78d8b 3475 }
8d08fdba
MS
3476
3477 abort_fndecl
1f84ec23 3478 = build_library_fn_ptr ("__cxa_pure_virtual", void_ftype);
8d08fdba 3479
8d08fdba
MS
3480 /* Perform other language dependent initializations. */
3481 init_class_processing ();
db48b831 3482 init_rtti_processing ();
2b110bfc 3483 init_template_processing ();
8d08fdba 3484
6467930b 3485 if (flag_exceptions)
8d2733ca 3486 init_exception_processing ();
9e9ff709 3487
7fcdf4c2 3488 if (! supports_one_only ())
72b7eeff 3489 flag_weak = 0;
8d08fdba 3490
2ce07e2d 3491 make_fname_decl = cp_make_fname_decl;
0ba8a114 3492 start_fname_decls ();
8d08fdba 3493
e9a25f70 3494 /* Show we use EH for cleanups. */
6de9cd9a
DN
3495 if (flag_exceptions)
3496 using_eh_for_cleanups ();
62c154ed
JM
3497}
3498
0ba8a114 3499/* Generate an initializer for a function naming variable from
bb885938 3500 NAME. NAME may be NULL, to indicate a dependent name. TYPE_P is
f4f206f4 3501 filled in with the type of the init. */
0ba8a114
NS
3502
3503tree
bb885938 3504cp_fname_init (const char* name, tree *type_p)
0ba8a114
NS
3505{
3506 tree domain = NULL_TREE;
3507 tree type;
3508 tree init = NULL_TREE;
3509 size_t length = 0;
3510
3511 if (name)
3512 {
3513 length = strlen (name);
3514 domain = build_index_type (size_int (length));
3515 init = build_string (length + 1, name);
3516 }
caf93cb0 3517
0ba8a114
NS
3518 type = build_qualified_type (char_type_node, TYPE_QUAL_CONST);
3519 type = build_cplus_array_type (type, domain);
3520
bb885938 3521 *type_p = type;
caf93cb0 3522
0ba8a114
NS
3523 if (init)
3524 TREE_TYPE (init) = type;
3525 else
bb885938 3526 init = error_mark_node;
caf93cb0 3527
0ba8a114
NS
3528 return init;
3529}
3530
c2255bc4
AH
3531/* Create the VAR_DECL for __FUNCTION__ etc. ID is the name to give
3532 the decl, LOC is the location to give the decl, NAME is the
3533 initialization string and TYPE_DEP indicates whether NAME depended
3534 on the type of the function. We make use of that to detect
3535 __PRETTY_FUNCTION__ inside a template fn. This is being done lazily
3536 at the point of first use, so we mustn't push the decl now. */
2ce07e2d
NS
3537
3538static tree
c2255bc4 3539cp_make_fname_decl (location_t loc, tree id, int type_dep)
2ce07e2d 3540{
83182544 3541 const char *const name = (type_dep && processing_template_decl
e913996d 3542 ? NULL : fname_as_string (type_dep));
bb885938
NS
3543 tree type;
3544 tree init = cp_fname_init (name, &type);
c2255bc4 3545 tree decl = build_decl (loc, VAR_DECL, id, type);
2ce07e2d 3546
9e6f2e7d 3547 if (name)
b1d5455a 3548 free (CONST_CAST (char *, name));
9e6f2e7d 3549
6cce57b0 3550 /* As we're using pushdecl_with_scope, we must set the context. */
0ba8a114
NS
3551 DECL_CONTEXT (decl) = current_function_decl;
3552 DECL_PRETTY_FUNCTION_P (decl) = type_dep;
caf93cb0 3553
2ce07e2d
NS
3554 TREE_STATIC (decl) = 1;
3555 TREE_READONLY (decl) = 1;
2ce07e2d 3556 DECL_ARTIFICIAL (decl) = 1;
caf93cb0 3557
0ba8a114 3558 TREE_USED (decl) = 1;
5362b086 3559
6cce57b0
JM
3560 if (current_function_decl)
3561 {
3562 struct cp_binding_level *b = current_binding_level;
a7e8c268 3563 while (b->level_chain->kind != sk_function_parms)
6cce57b0 3564 b = b->level_chain;
d63d5d0c 3565 pushdecl_with_scope (decl, b, /*is_friend=*/false);
3db45ab5 3566 cp_finish_decl (decl, init, /*init_const_expr_p=*/false, NULL_TREE,
d174af6c 3567 LOOKUP_ONLYCONVERTING);
e913996d 3568 }
ad16ae7f
MM
3569 else
3570 pushdecl_top_level_and_finish (decl, init);
caf93cb0 3571
2ce07e2d
NS
3572 return decl;
3573}
3574
c79efc4d 3575static tree
5779e713 3576builtin_function_1 (tree decl, tree context, bool is_global)
c79efc4d
RÁE
3577{
3578 tree id = DECL_NAME (decl);
3579 const char *name = IDENTIFIER_POINTER (id);
8d08fdba 3580
c79efc4d 3581 retrofit_lang_decl (decl);
0c11ada6 3582
c79efc4d
RÁE
3583 DECL_ARTIFICIAL (decl) = 1;
3584 SET_OVERLOADED_OPERATOR_CODE (decl, ERROR_MARK);
3585 SET_DECL_LANGUAGE (decl, lang_c);
3586 /* Runtime library routines are, by definition, available in an
3587 external shared object. */
3588 DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
3589 DECL_VISIBILITY_SPECIFIED (decl) = 1;
8d08fdba 3590
d52e4867 3591 DECL_CONTEXT (decl) = context;
12a22e76 3592
5779e713
MM
3593 if (is_global)
3594 pushdecl_top_level (decl);
3595 else
3596 pushdecl (decl);
6bcedb4e 3597
d63d5d0c
ILT
3598 /* A function in the user's namespace should have an explicit
3599 declaration before it is used. Mark the built-in function as
3600 anticipated but not actually declared. */
935d1834
ZW
3601 if (name[0] != '_' || name[1] != '_')
3602 DECL_ANTICIPATED (decl) = 1;
012c4da9
JJ
3603 else if (strncmp (name + 2, "builtin_", strlen ("builtin_")) != 0)
3604 {
3605 size_t len = strlen (name);
3606
3607 /* Treat __*_chk fortification functions as anticipated as well,
3608 unless they are __builtin_*. */
3609 if (len > strlen ("___chk")
3610 && memcmp (name + len - strlen ("_chk"),
3611 "_chk", strlen ("_chk") + 1) == 0)
3612 DECL_ANTICIPATED (decl) = 1;
3613 }
935d1834 3614
8d08fdba
MS
3615 return decl;
3616}
7f4edbcb 3617
d52e4867 3618tree
c79efc4d 3619cxx_builtin_function (tree decl)
d52e4867 3620{
c79efc4d
RÁE
3621 tree id = DECL_NAME (decl);
3622 const char *name = IDENTIFIER_POINTER (id);
d52e4867
RS
3623 /* All builtins that don't begin with an '_' should additionally
3624 go in the 'std' namespace. */
3625 if (name[0] != '_')
3626 {
e5b44dfb 3627 tree decl2 = copy_node(decl);
d52e4867 3628 push_namespace (std_identifier);
5779e713
MM
3629 builtin_function_1 (decl2, std_node, false);
3630 pop_namespace ();
3631 }
3632
3633 return builtin_function_1 (decl, NULL_TREE, false);
3634}
3635
3636/* Like cxx_builtin_function, but guarantee the function is added to the global
3637 scope. This is to allow function specific options to add new machine
3638 dependent builtins when the target ISA changes via attribute((target(...)))
3639 which saves space on program startup if the program does not use non-generic
3640 ISAs. */
3641
3642tree
3643cxx_builtin_function_ext_scope (tree decl)
3644{
3645
3646 tree id = DECL_NAME (decl);
3647 const char *name = IDENTIFIER_POINTER (id);
3648 /* All builtins that don't begin with an '_' should additionally
3649 go in the 'std' namespace. */
3650 if (name[0] != '_')
3651 {
3652 tree decl2 = copy_node(decl);
3653 push_namespace (std_identifier);
3654 builtin_function_1 (decl2, std_node, true);
d52e4867
RS
3655 pop_namespace ();
3656 }
3657
5779e713 3658 return builtin_function_1 (decl, NULL_TREE, true);
d52e4867
RS
3659}
3660
0c11ada6
JM
3661/* Generate a FUNCTION_DECL with the typical flags for a runtime library
3662 function. Not called directly. */
3663
3664static tree
11f6b451 3665build_library_fn_1 (tree name, enum tree_code operator_code, tree type)
0c11ada6
JM
3666{
3667 tree fn = build_lang_decl (FUNCTION_DECL, name, type);
3668 DECL_EXTERNAL (fn) = 1;
3669 TREE_PUBLIC (fn) = 1;
3670 DECL_ARTIFICIAL (fn) = 1;
596ea4e5 3671 SET_OVERLOADED_OPERATOR_CODE (fn, operator_code);
5d2ed28c 3672 SET_DECL_LANGUAGE (fn, lang_c);
73a8adb6
MM
3673 /* Runtime library routines are, by definition, available in an
3674 external shared object. */
3675 DECL_VISIBILITY (fn) = VISIBILITY_DEFAULT;
3676 DECL_VISIBILITY_SPECIFIED (fn) = 1;
0c11ada6
JM
3677 return fn;
3678}
c2a37c55 3679
0c11ada6
JM
3680/* Returns the _DECL for a library function with C linkage.
3681 We assume that such functions never throw; if this is incorrect,
3682 callers should unset TREE_NOTHROW. */
c2a37c55 3683
448083e5 3684static tree
11f6b451 3685build_library_fn (tree name, tree type)
0c11ada6 3686{
f59d2aad
RH
3687 tree fn = build_library_fn_1 (name, ERROR_MARK, type);
3688 TREE_NOTHROW (fn) = 1;
3689 return fn;
0c11ada6
JM
3690}
3691
3692/* Returns the _DECL for a library function with C++ linkage. */
3693
596ea4e5 3694static tree
11f6b451 3695build_cp_library_fn (tree name, enum tree_code operator_code, tree type)
0c11ada6 3696{
596ea4e5 3697 tree fn = build_library_fn_1 (name, operator_code, type);
0c11ada6 3698 TREE_NOTHROW (fn) = TYPE_NOTHROW_P (type);
6bbf1598 3699 DECL_CONTEXT (fn) = FROB_CONTEXT (current_namespace);
5d2ed28c 3700 SET_DECL_LANGUAGE (fn, lang_cplusplus);
0c11ada6
JM
3701 return fn;
3702}
3703
3704/* Like build_library_fn, but takes a C string instead of an
3705 IDENTIFIER_NODE. */
3706
3707tree
11f6b451 3708build_library_fn_ptr (const char* name, tree type)
7f4edbcb 3709{
0c11ada6
JM
3710 return build_library_fn (get_identifier (name), type);
3711}
3712
3713/* Like build_cp_library_fn, but takes a C string instead of an
3714 IDENTIFIER_NODE. */
3715
3716tree
11f6b451 3717build_cp_library_fn_ptr (const char* name, tree type)
0c11ada6 3718{
596ea4e5 3719 return build_cp_library_fn (get_identifier (name), ERROR_MARK, type);
0c11ada6
JM
3720}
3721
3722/* Like build_library_fn, but also pushes the function so that we will
448083e5
PC
3723 be able to find it via IDENTIFIER_GLOBAL_VALUE. Also, the function
3724 may throw exceptions listed in RAISES. */
0c11ada6
JM
3725
3726tree
448083e5 3727push_library_fn (tree name, tree type, tree raises)
0c11ada6 3728{
448083e5
PC
3729 tree fn;
3730
3731 if (raises)
3732 type = build_exception_variant (type, raises);
3733
3734 fn = build_library_fn (name, type);
0c11ada6
JM
3735 pushdecl_top_level (fn);
3736 return fn;
3737}
3738
3739/* Like build_cp_library_fn, but also pushes the function so that it
3740 will be found by normal lookup. */
3741
596ea4e5 3742static tree
11f6b451 3743push_cp_library_fn (enum tree_code operator_code, tree type)
0c11ada6 3744{
5362b086 3745 tree fn = build_cp_library_fn (ansi_opname (operator_code),
596ea4e5
AS
3746 operator_code,
3747 type);
0c11ada6
JM
3748 pushdecl (fn);
3749 return fn;
3750}
3751
3752/* Like push_library_fn, but takes a TREE_LIST of parm types rather than
3753 a FUNCTION_TYPE. */
3754
3755tree
11f6b451 3756push_void_library_fn (tree name, tree parmtypes)
0c11ada6
JM
3757{
3758 tree type = build_function_type (void_type_node, parmtypes);
448083e5 3759 return push_library_fn (name, type, NULL_TREE);
0c11ada6
JM
3760}
3761
cf74fb86 3762/* Like push_library_fn, but also note that this function throws
0c11ada6
JM
3763 and does not return. Used for __throw_foo and the like. */
3764
3765tree
11f6b451 3766push_throw_library_fn (tree name, tree type)
0c11ada6 3767{
448083e5 3768 tree fn = push_library_fn (name, type, NULL_TREE);
0c11ada6
JM
3769 TREE_THIS_VOLATILE (fn) = 1;
3770 TREE_NOTHROW (fn) = 0;
3771 return fn;
7f4edbcb 3772}
8d08fdba 3773\f
61a127b3
MM
3774/* When we call finish_struct for an anonymous union, we create
3775 default copy constructors and such. But, an anonymous union
3776 shouldn't have such things; this function undoes the damage to the
3777 anonymous union type T.
3778
3779 (The reason that we create the synthesized methods is that we don't
3780 distinguish `union { int i; }' from `typedef union { int i; } U'.
3781 The first is an anonymous union; the second is just an ordinary
3782 union type.) */
3783
3784void
11f6b451 3785fixup_anonymous_aggr (tree t)
61a127b3
MM
3786{
3787 tree *q;
3788
f4f206f4 3789 /* Wipe out memory of synthesized methods. */
0fcedd9c 3790 TYPE_HAS_USER_CONSTRUCTOR (t) = 0;
61a127b3
MM
3791 TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
3792 TYPE_HAS_INIT_REF (t) = 0;
3793 TYPE_HAS_CONST_INIT_REF (t) = 0;
3794 TYPE_HAS_ASSIGN_REF (t) = 0;
61a127b3
MM
3795 TYPE_HAS_CONST_ASSIGN_REF (t) = 0;
3796
3797 /* Splice the implicitly generated functions out of the TYPE_METHODS
3798 list. */
3799 q = &TYPE_METHODS (t);
3800 while (*q)
3801 {
3802 if (DECL_ARTIFICIAL (*q))
3803 *q = TREE_CHAIN (*q);
3804 else
3805 q = &TREE_CHAIN (*q);
3806 }
3807
cab1f180 3808 /* ISO C++ 9.5.3. Anonymous unions may not have function members. */
61a127b3 3809 if (TYPE_METHODS (t))
24f58e74
PC
3810 {
3811 tree decl = TYPE_MAIN_DECL (t);
3812
3813 if (TREE_CODE (t) != UNION_TYPE)
c5d75364
MLI
3814 error_at (DECL_SOURCE_LOCATION (decl),
3815 "an anonymous struct cannot have function members");
24f58e74 3816 else
c5d75364
MLI
3817 error_at (DECL_SOURCE_LOCATION (decl),
3818 "an anonymous union cannot have function members");
24f58e74 3819 }
a1c2b86d
JJ
3820
3821 /* Anonymous aggregates cannot have fields with ctors, dtors or complex
3822 assignment operators (because they cannot have these methods themselves).
3823 For anonymous unions this is already checked because they are not allowed
3824 in any union, otherwise we have to check it. */
3825 if (TREE_CODE (t) != UNION_TYPE)
3826 {
3827 tree field, type;
3828
3829 for (field = TYPE_FIELDS (t); field; field = TREE_CHAIN (field))
3830 if (TREE_CODE (field) == FIELD_DECL)
3831 {
3832 type = TREE_TYPE (field);
3833 if (CLASS_TYPE_P (type))
3834 {
0cbd7506 3835 if (TYPE_NEEDS_CONSTRUCTING (type))
dee15844
JM
3836 error ("member %q+#D with constructor not allowed "
3837 "in anonymous aggregate", field);
a1c2b86d 3838 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
dee15844
JM
3839 error ("member %q+#D with destructor not allowed "
3840 "in anonymous aggregate", field);
a1c2b86d 3841 if (TYPE_HAS_COMPLEX_ASSIGN_REF (type))
dee15844
JM
3842 error ("member %q+#D with copy assignment operator "
3843 "not allowed in anonymous aggregate", field);
a1c2b86d
JJ
3844 }
3845 }
3846 }
61a127b3
MM
3847}
3848
72a93143 3849/* Make sure that a declaration with no declarator is well-formed, i.e.
a723baf1 3850 just declares a tagged type or anonymous union.
8d08fdba 3851
a723baf1 3852 Returns the type declared; or NULL_TREE if none. */
8d08fdba 3853
72a93143 3854tree
62d1db17 3855check_tag_decl (cp_decl_specifier_seq *declspecs)
8d08fdba 3856{
62d1db17
MM
3857 int saw_friend = declspecs->specs[(int)ds_friend] != 0;
3858 int saw_typedef = declspecs->specs[(int)ds_typedef] != 0;
a723baf1
MM
3859 /* If a class, struct, or enum type is declared by the DECLSPECS
3860 (i.e, if a class-specifier, enum-specifier, or non-typename
3861 elaborated-type-specifier appears in the DECLSPECS),
3862 DECLARED_TYPE is set to the corresponding type. */
3863 tree declared_type = NULL_TREE;
3864 bool error_p = false;
8d08fdba 3865
62d1db17 3866 if (declspecs->multiple_types_p)
72a93143 3867 error ("multiple types in one declaration");
62d1db17
MM
3868 else if (declspecs->redefined_builtin_type)
3869 {
3870 if (!in_system_header)
cbe5f3b3 3871 permerror (input_location, "redeclaration of C++ built-in type %qT",
37ec60ed 3872 declspecs->redefined_builtin_type);
62d1db17
MM
3873 return NULL_TREE;
3874 }
7e2067ca 3875
c827f22f
MM
3876 if (declspecs->type
3877 && TYPE_P (declspecs->type)
caf93cb0 3878 && ((TREE_CODE (declspecs->type) != TYPENAME_TYPE
9e1e64ec 3879 && MAYBE_CLASS_TYPE_P (declspecs->type))
62d1db17
MM
3880 || TREE_CODE (declspecs->type) == ENUMERAL_TYPE))
3881 declared_type = declspecs->type;
3882 else if (declspecs->type == error_mark_node)
3883 error_p = true;
a723baf1 3884 if (declared_type == NULL_TREE && ! saw_friend && !error_p)
cbe5f3b3 3885 permerror (input_location, "declaration does not declare anything");
1951a1b6 3886 /* Check for an anonymous union. */
9e1e64ec 3887 else if (declared_type && RECORD_OR_UNION_CODE_P (TREE_CODE (declared_type))
a723baf1 3888 && TYPE_ANONYMOUS_P (declared_type))
0dd3962d 3889 {
e8186ecf 3890 /* 7/3 In a simple-declaration, the optional init-declarator-list
0cbd7506
MS
3891 can be omitted only when declaring a class (clause 9) or
3892 enumeration (7.2), that is, when the decl-specifier-seq contains
3893 either a class-specifier, an elaborated-type-specifier with
3894 a class-key (9.1), or an enum-specifier. In these cases and
3895 whenever a class-specifier or enum-specifier is present in the
3896 decl-specifier-seq, the identifiers in these specifiers are among
3897 the names being declared by the declaration (as class-name,
3898 enum-names, or enumerators, depending on the syntax). In such
3899 cases, and except for the declaration of an unnamed bit-field (9.6),
3900 the decl-specifier-seq shall introduce one or more names into the
3901 program, or shall redeclare a name introduced by a previous
3902 declaration. [Example:
3903 enum { }; // ill-formed
3904 typedef class { }; // ill-formed
3905 --end example] */
e8186ecf 3906 if (saw_typedef)
0cbd7506
MS
3907 {
3908 error ("missing type-name in typedef-declaration");
3909 return NULL_TREE;
3910 }
0dd3962d 3911 /* Anonymous unions are objects, so they can have specifiers. */;
a723baf1 3912 SET_ANON_AGGR_TYPE_P (declared_type);
6bdb8141 3913
fcf73884 3914 if (TREE_CODE (declared_type) != UNION_TYPE && !in_system_header)
509c9d60 3915 pedwarn (input_location, OPT_pedantic, "ISO C++ prohibits anonymous structs");
0dd3962d
JM
3916 }
3917
62d1db17 3918 else
8d08fdba 3919 {
62d1db17
MM
3920 if (declspecs->specs[(int)ds_inline]
3921 || declspecs->specs[(int)ds_virtual])
2d01edd7 3922 error ("%qs can only be specified for functions",
caf93cb0 3923 declspecs->specs[(int)ds_inline]
62d1db17
MM
3924 ? "inline" : "virtual");
3925 else if (saw_friend
caf93cb0 3926 && (!current_class_type
62d1db17 3927 || current_scope () != current_class_type))
2d01edd7 3928 error ("%<friend%> can only be specified inside a class");
62d1db17 3929 else if (declspecs->specs[(int)ds_explicit])
2d01edd7 3930 error ("%<explicit%> can only be specified for constructors");
62d1db17
MM
3931 else if (declspecs->storage_class)
3932 error ("a storage class can only be specified for objects "
3933 "and functions");
3934 else if (declspecs->specs[(int)ds_const]
3935 || declspecs->specs[(int)ds_volatile]
3936 || declspecs->specs[(int)ds_restrict]
3937 || declspecs->specs[(int)ds_thread])
3938 error ("qualifiers can only be specified for objects "
3939 "and functions");
41dc91a8
SB
3940 else if (saw_typedef)
3941 warning (0, "%<typedef%> was ignored in this declaration");
7ecbca9d
GDR
3942 else if (declspecs->specs[(int) ds_constexpr])
3943 error ("%<constexpr> cannot be used for type declarations");
72a93143 3944 }
8d08fdba 3945
a723baf1 3946 return declared_type;
72a93143
JM
3947}
3948
3949/* Called when a declaration is seen that contains no names to declare.
3950 If its type is a reference to a structure, union or enum inherited
3951 from a containing scope, shadow that tag name for the current scope
3952 with a forward reference.
3953 If its type defines a new named structure or union
3954 or defines an enum, it is valid but we need not do anything here.
3955 Otherwise, it is an error.
3956
3957 C++: may have to grok the declspecs to learn about static,
caf93cb0 3958 complain for anonymous unions.
72a93143 3959
a723baf1
MM
3960 Returns the TYPE declared -- or NULL_TREE if none. */
3961
3962tree
62d1db17 3963shadow_tag (cp_decl_specifier_seq *declspecs)
72a93143
JM
3964{
3965 tree t = check_tag_decl (declspecs);
3966
a723baf1
MM
3967 if (!t)
3968 return NULL_TREE;
3969
3cabd8f9
MA
3970 if (declspecs->attributes)
3971 {
dee15844
JM
3972 warning (0, "attribute ignored in declaration of %q+#T", t);
3973 warning (0, "attribute for %q+#T must follow the %qs keyword",
3974 t, class_key_or_enum_as_string (t));
3cabd8f9
MA
3975
3976 }
3977
d2a8ac2c
LM
3978 if (maybe_process_partial_specialization (t) == error_mark_node)
3979 return NULL_TREE;
72a93143
JM
3980
3981 /* This is where the variables in an anonymous union are
3982 declared. An anonymous union declaration looks like:
3983 union { ... } ;
3984 because there is no declarator after the union, the parser
3985 sends that declaration here. */
a723baf1 3986 if (ANON_AGGR_TYPE_P (t))
72a93143 3987 {
6bdb8141 3988 fixup_anonymous_aggr (t);
72a93143
JM
3989
3990 if (TYPE_FIELDS (t))
3991 {
caf93cb0 3992 tree decl = grokdeclarator (/*declarator=*/NULL,
058b15c1 3993 declspecs, NORMAL, 0, NULL);
72a93143
JM
3994 finish_anon_union (decl);
3995 }
8d08fdba 3996 }
a723baf1
MM
3997
3998 return t;
8d08fdba
MS
3999}
4000\f
4001/* Decode a "typename", such as "int **", returning a ..._TYPE node. */
4002
4003tree
caf93cb0 4004groktypename (cp_decl_specifier_seq *type_specifiers,
0d9c0892
JM
4005 const cp_declarator *declarator,
4006 bool is_template_arg)
8d08fdba 4007{
62d1db17 4008 tree attrs;
98884b26 4009 tree type;
0d9c0892
JM
4010 enum decl_context context
4011 = is_template_arg ? TEMPLATE_TYPE_ARG : TYPENAME;
62d1db17
MM
4012 attrs = type_specifiers->attributes;
4013 type_specifiers->attributes = NULL_TREE;
0d9c0892 4014 type = grokdeclarator (declarator, type_specifiers, context, 0, &attrs);
ba19e12f 4015 if (attrs && type != error_mark_node)
c206a697
JM
4016 {
4017 if (CLASS_TYPE_P (type))
b2a7def5
JM
4018 warning (OPT_Wattributes, "ignoring attributes applied to class type %qT "
4019 "outside of definition", type);
9e1e64ec 4020 else if (MAYBE_CLASS_TYPE_P (type))
b2a7def5
JM
4021 /* A template type parameter or other dependent type. */
4022 warning (OPT_Wattributes, "ignoring attributes applied to dependent "
4023 "type %qT without an associated declaration", type);
c206a697
JM
4024 else
4025 cplus_decl_attributes (&type, attrs, 0);
4026 }
98884b26 4027 return type;
8d08fdba
MS
4028}
4029
15896502
MM
4030/* Process a DECLARATOR for a function-scope variable declaration,
4031 namespace-scope variable declaration, or function declaration.
4032 (Function definitions go through start_function; class member
4033 declarations appearing in the body of the class go through
4034 grokfield.) The DECL corresponding to the DECLARATOR is returned.
4035 If an error occurs, the error_mark_node is returned instead.
4036
4ad610c9
JM
4037 DECLSPECS are the decl-specifiers for the declaration. INITIALIZED is
4038 SD_INITIALIZED if an explicit initializer is present, or SD_DEFAULTED
4039 for an explicitly defaulted function, or SD_DELETED for an explicitly
4040 deleted function, but 0 (SD_UNINITIALIZED) if this is a variable
4041 implicitly initialized via a default constructor. ATTRIBUTES and
4042 PREFIX_ATTRIBUTES are GNU attributes associated with this declaration.
4043 *PUSHED_SCOPE_P is set to the scope entered in this function, if any; if
4044 set, the caller is responsible for calling pop_scope. */
8d08fdba 4045
8d08fdba 4046tree
caf93cb0 4047start_decl (const cp_declarator *declarator,
62d1db17 4048 cp_decl_specifier_seq *declspecs,
0cbd7506
MS
4049 int initialized,
4050 tree attributes,
4051 tree prefix_attributes,
4514aa8c 4052 tree *pushed_scope_p)
8d08fdba 4053{
59387d2e 4054 tree decl;
15896502 4055 tree type;
8d08fdba 4056 tree context;
c3b7031d 4057 bool was_public;
317c435f 4058 int flags;
8d08fdba 4059
4514aa8c 4060 *pushed_scope_p = NULL_TREE;
c8094d83 4061
e23bd218
IR
4062 /* An object declared as __attribute__((deprecated)) suppresses
4063 warnings of uses of other deprecated items. */
4064 if (lookup_attribute ("deprecated", attributes))
4065 deprecated_state = DEPRECATED_SUPPRESS;
4066
91d231cb 4067 attributes = chainon (attributes, prefix_attributes);
b17e2870 4068
c11b6f21 4069 decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
91d231cb 4070 &attributes);
68642fb6 4071
e23bd218
IR
4072 deprecated_state = DEPRECATED_NORMAL;
4073
2d00b4f2
AP
4074 if (decl == NULL_TREE || TREE_CODE (decl) == VOID_TYPE
4075 || decl == error_mark_node)
44370687 4076 return error_mark_node;
8d08fdba
MS
4077
4078 type = TREE_TYPE (decl);
4079
4f1c5b7d 4080 context = DECL_CONTEXT (decl);
8d08fdba 4081
73a8adb6 4082 if (context)
4514aa8c
NS
4083 {
4084 *pushed_scope_p = push_scope (context);
c8094d83 4085
4514aa8c
NS
4086 /* We are only interested in class contexts, later. */
4087 if (TREE_CODE (context) == NAMESPACE_DECL)
4088 context = NULL_TREE;
4089 }
2c73f9f5 4090
8d08fdba
MS
4091 if (initialized)
4092 /* Is it valid for this decl to have an initializer at all?
4093 If not, set INITIALIZED to zero, which will indirectly
82580166 4094 tell `cp_finish_decl' to ignore the initializer once it is parsed. */
8d08fdba
MS
4095 switch (TREE_CODE (decl))
4096 {
4097 case TYPE_DECL:
b87d79e6 4098 error ("typedef %qD is initialized (use decltype instead)", decl);
cc011e7f 4099 return error_mark_node;
8d08fdba
MS
4100
4101 case FUNCTION_DECL:
4ad610c9 4102 if (initialized == SD_DELETED)
b87d79e6
JM
4103 /* We'll handle the rest of the semantics later, but we need to
4104 set this now so it's visible to duplicate_decls. */
4105 DECL_DELETED_FN (decl) = 1;
4106 break;
8d08fdba
MS
4107
4108 default:
3e41d13b 4109 break;
8d08fdba
MS
4110 }
4111
8d08fdba
MS
4112 if (initialized)
4113 {
a9aedbc2 4114 if (! toplevel_bindings_p ()
8d08fdba 4115 && DECL_EXTERNAL (decl))
d4ee4d25 4116 warning (0, "declaration of %q#D has %<extern%> and is initialized",
0cbd7506 4117 decl);
8d08fdba 4118 DECL_EXTERNAL (decl) = 0;
5566b478 4119 if (toplevel_bindings_p ())
8d08fdba 4120 TREE_STATIC (decl) = 1;
8d08fdba
MS
4121 }
4122
317c435f
JM
4123 /* If this is a typedef that names the class for linkage purposes
4124 (7.1.3p8), apply any attributes directly to the type. */
4125 if (TREE_CODE (decl) == TYPE_DECL
4126 && TAGGED_TYPE_P (TREE_TYPE (decl))
4127 && decl == TYPE_NAME (TYPE_MAIN_VARIANT (TREE_TYPE (decl))))
4128 flags = ATTR_FLAG_TYPE_IN_PLACE;
4129 else
4130 flags = 0;
4131
fa20888b 4132 /* Set attributes here so if duplicate decl, will have proper attributes. */
317c435f 4133 cplus_decl_attributes (&decl, attributes, flags);
fa20888b 4134
4e2bb0a4
DS
4135 /* Dllimported symbols cannot be defined. Static data members (which
4136 can be initialized in-class and dllimported) go through grokfield,
4137 not here, so we don't need to exclude those decls when checking for
4138 a definition. */
4139 if (initialized && DECL_DLLIMPORT_P (decl))
4140 {
4141 error ("definition of %q#D is marked %<dllimport%>", decl);
4142 DECL_DLLIMPORT_P (decl) = 0;
4143 }
4144
ecb0eece 4145 /* If #pragma weak was used, mark the decl weak now. */
3693d46c 4146 maybe_apply_pragma_weak (decl);
ecb0eece 4147
97055d5c
AO
4148 if (TREE_CODE (decl) == FUNCTION_DECL
4149 && DECL_DECLARED_INLINE_P (decl)
4150 && DECL_UNINLINABLE (decl)
4151 && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl)))
dee15844 4152 warning (0, "inline function %q+D given attribute noinline", decl);
97055d5c 4153
d0f062fb 4154 if (context && COMPLETE_TYPE_P (complete_type (context)))
5b605f68
MS
4155 {
4156 if (TREE_CODE (decl) == VAR_DECL)
4157 {
86ac0575 4158 tree field = lookup_field (context, DECL_NAME (decl), 0, false);
5b605f68 4159 if (field == NULL_TREE || TREE_CODE (field) != VAR_DECL)
2d01edd7 4160 error ("%q#D is not a static member of %q#T", decl, context);
e349ee73
MS
4161 else
4162 {
4163 if (DECL_CONTEXT (field) != context)
f2d773a2 4164 {
a723baf1 4165 if (!same_type_p (DECL_CONTEXT (field), context))
cbe5f3b3 4166 permerror (input_location, "ISO C++ does not permit %<%T::%D%> "
37ec60ed
JW
4167 "to be defined as %<%T::%D%>",
4168 DECL_CONTEXT (field), DECL_NAME (decl),
4169 context, DECL_NAME (decl));
f2d773a2
JM
4170 DECL_CONTEXT (decl) = DECL_CONTEXT (field);
4171 }
91146169
GB
4172 if (processing_specialization
4173 && template_class_depth (context) == 0
4174 && CLASSTYPE_TEMPLATE_SPECIALIZATION (context))
4175 error ("template header not allowed in member definition "
4176 "of explicitly specialized class");
75650646
MM
4177 /* Static data member are tricky; an in-class initialization
4178 still doesn't provide a definition, so the in-class
4179 declaration will have DECL_EXTERNAL set, but will have an
4180 initialization. Thus, duplicate_decls won't warn
4181 about this situation, and so we check here. */
e92fb501 4182 if (initialized && DECL_INITIALIZED_IN_CLASS_P (field))
9e637a26 4183 error ("duplicate initialization of %qD", decl);
d63d5d0c 4184 if (duplicate_decls (decl, field, /*newdecl_is_friend=*/false))
e349ee73 4185 decl = field;
7ecbca9d
GDR
4186 if (declspecs->specs[(int) ds_constexpr]
4187 && !DECL_DECLARED_CONSTEXPR_P (field))
4188 error ("%qD declared %<constexpr%> outside its class", field);
e349ee73 4189 }
5b605f68 4190 }
f30432d7
MS
4191 else
4192 {
d43f603d 4193 tree field = check_classfn (context, decl,
44021471
GB
4194 (processing_template_decl
4195 > template_class_depth (context))
4196 ? current_template_parms
4197 : NULL_TREE);
f8c3b097
PC
4198 if (field && field != error_mark_node
4199 && duplicate_decls (decl, field,
4200 /*newdecl_is_friend=*/false))
f30432d7
MS
4201 decl = field;
4202 }
4203
4204 /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set. */
dff3e828 4205 DECL_IN_AGGR_P (decl) = 0;
9267ee62
NS
4206 /* Do not mark DECL as an explicit specialization if it was not
4207 already marked as an instantiation; a declaration should
4208 never be marked as a specialization unless we know what
c8094d83 4209 template is being specialized. */
9267ee62 4210 if (DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl))
84e6233f 4211 {
9267ee62 4212 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
c8094d83 4213
84e6233f
JM
4214 /* [temp.expl.spec] An explicit specialization of a static data
4215 member of a template is a definition if the declaration
4216 includes an initializer; otherwise, it is a declaration.
c8094d83 4217
84e6233f
JM
4218 We check for processing_specialization so this only applies
4219 to the new specialization syntax. */
e92fb501 4220 if (!initialized && processing_specialization)
84e6233f
JM
4221 DECL_EXTERNAL (decl) = 1;
4222 }
f30432d7 4223
b7698cf0 4224 if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl))
cbe5f3b3 4225 permerror (input_location, "declaration of %q#D outside of class is not definition",
37ec60ed 4226 decl);
7ecbca9d
GDR
4227
4228 if (!ensure_literal_type_for_constexpr_object (decl))
4229 return error_mark_node;
5b605f68
MS
4230 }
4231
c3b7031d
JM
4232 was_public = TREE_PUBLIC (decl);
4233
9188c363 4234 /* Enter this declaration into the symbol table. */
15896502 4235 decl = maybe_push_decl (decl);
2ee887f2 4236
5156628f 4237 if (processing_template_decl)
15896502
MM
4238 decl = push_template_decl (decl);
4239 if (decl == error_mark_node)
156fc2bb 4240 return error_mark_node;
5566b478 4241
3b426391 4242 /* Tell the back end to use or not use .common as appropriate. If we say
a50f0918
MS
4243 -fconserve-space, we want this to save .data space, at the expense of
4244 wrong semantics. If we say -fno-conserve-space, we want this to
4245 produce errors about redefs; to do this we force variables into the
4246 data segment. */
434aeebb 4247 if (flag_conserve_space
15896502
MM
4248 && TREE_CODE (decl) == VAR_DECL
4249 && TREE_PUBLIC (decl)
4250 && !DECL_THREAD_LOCAL_P (decl)
434aeebb 4251 && !have_global_bss_p ())
15896502 4252 DECL_COMMON (decl) = 1;
68642fb6 4253
15896502
MM
4254 if (TREE_CODE (decl) == VAR_DECL
4255 && DECL_NAMESPACE_SCOPE_P (decl) && !TREE_PUBLIC (decl) && !was_public
4256 && !DECL_THIS_STATIC (decl) && !DECL_ARTIFICIAL (decl))
c3b7031d
JM
4257 {
4258 /* This is a const variable with implicit 'static'. Set
4259 DECL_THIS_STATIC so we can tell it from variables that are
4260 !TREE_PUBLIC because of the anonymous namespace. */
15896502
MM
4261 gcc_assert (cp_type_readonly (TREE_TYPE (decl)));
4262 DECL_THIS_STATIC (decl) = 1;
c3b7031d
JM
4263 }
4264
15896502
MM
4265 if (!processing_template_decl && TREE_CODE (decl) == VAR_DECL)
4266 start_decl_1 (decl, initialized);
8d08fdba 4267
15896502 4268 return decl;
8d08fdba
MS
4269}
4270
15896502
MM
4271/* Process the declaration of a variable DECL. INITIALIZED is true
4272 iff DECL is explicitly initialized. (INITIALIZED is false if the
4273 variable is initialized via an implicitly-called constructor.)
4274 This function must be called for ordinary variables (including, for
4275 example, implicit instantiations of templates), but must not be
4276 called for template declarations. */
4277
5566b478 4278void
e92fb501 4279start_decl_1 (tree decl, bool initialized)
8d08fdba 4280{
e92fb501 4281 tree type;
15896502
MM
4282 bool complete_p;
4283 bool aggregate_definition_p;
8d08fdba 4284
e92fb501
MM
4285 gcc_assert (!processing_template_decl);
4286
4287 if (error_operand_p (decl))
44689c12
ML
4288 return;
4289
e92fb501 4290 gcc_assert (TREE_CODE (decl) == VAR_DECL);
15896502 4291
e92fb501 4292 type = TREE_TYPE (decl);
15896502 4293 complete_p = COMPLETE_TYPE_P (type);
9e1e64ec 4294 aggregate_definition_p = MAYBE_CLASS_TYPE_P (type) && !DECL_EXTERNAL (decl);
15896502
MM
4295
4296 /* If an explicit initializer is present, or if this is a definition
4297 of an aggregate, then we need a complete type at this point.
4298 (Scalars are always complete types, so there is nothing to
4299 check.) This code just sets COMPLETE_P; errors (if necessary)
4300 are issued below. */
4301 if ((initialized || aggregate_definition_p)
4302 && !complete_p
4303 && COMPLETE_TYPE_P (complete_type (type)))
4304 {
4305 complete_p = true;
4306 /* We will not yet have set TREE_READONLY on DECL if the type
4307 was "const", but incomplete, before this point. But, now, we
4308 have a complete type, so we can try again. */
4309 cp_apply_type_quals_to_decl (cp_type_quals (type), decl);
4310 }
e92fb501 4311
5566b478 4312 if (initialized)
15896502 4313 /* Is it valid for this decl to have an initializer at all? */
8d08fdba 4314 {
5566b478
MS
4315 /* Don't allow initializations for incomplete types except for
4316 arrays which might be completed by the initialization. */
15896502 4317 if (complete_p)
5566b478 4318 ; /* A complete type is ok. */
86a09a9e
JM
4319 else if (type_uses_auto (type))
4320 ; /* An auto type is ok. */
5566b478 4321 else if (TREE_CODE (type) != ARRAY_TYPE)
8d08fdba 4322 {
2d01edd7 4323 error ("variable %q#D has initializer but incomplete type", decl);
25eb19ff 4324 type = TREE_TYPE (decl) = error_mark_node;
5566b478 4325 }
d0f062fb 4326 else if (!COMPLETE_TYPE_P (complete_type (TREE_TYPE (type))))
5566b478
MS
4327 {
4328 if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
2d01edd7 4329 error ("elements of array %q#D have incomplete type", decl);
5566b478 4330 /* else we already gave an error in start_decl. */
8d08fdba 4331 }
8d08fdba 4332 }
15896502 4333 else if (aggregate_definition_p && !complete_p)
8d08fdba 4334 {
86a09a9e
JM
4335 if (type_uses_auto (type))
4336 error ("declaration of %q#D has no initializer", decl);
4337 else
4338 error ("aggregate %q#D has incomplete type and cannot be defined",
4339 decl);
15896502
MM
4340 /* Change the type so that assemble_variable will give
4341 DECL an rtl we can live with: (mem (const_int 0)). */
4342 type = TREE_TYPE (decl) = error_mark_node;
5566b478
MS
4343 }
4344
c6671cbb
MM
4345 /* Create a new scope to hold this declaration if necessary.
4346 Whether or not a new scope is necessary cannot be determined
4347 until after the type has been completed; if the type is a
4348 specialization of a class template it is not until after
4349 instantiation has occurred that TYPE_HAS_NONTRIVIAL_DESTRUCTOR
4350 will be set correctly. */
4351 maybe_push_cleanup_level (type);
5566b478
MS
4352}
4353
7e99327d
MM
4354/* Handle initialization of references. DECL, TYPE, and INIT have the
4355 same meaning as in cp_finish_decl. *CLEANUP must be NULL on entry,
4356 but will be set to a new CLEANUP_STMT if a temporary is created
cd0be382 4357 that must be destroyed subsequently.
7e99327d
MM
4358
4359 Returns an initializer expression to use to initialize DECL, or
4360 NULL if the initialization can be performed statically.
e92cc029
MS
4361
4362 Quotes on semantics can be found in ARM 8.4.3. */
4363
8e4ce833 4364static tree
7e99327d 4365grok_reference_init (tree decl, tree type, tree init, tree *cleanup)
5566b478
MS
4366{
4367 tree tmp;
4368
4369 if (init == NULL_TREE)
4370 {
4371 if ((DECL_LANG_SPECIFIC (decl) == 0
4372 || DECL_IN_AGGR_P (decl) == 0)
4373 && ! DECL_THIS_EXTERN (decl))
c4f73174 4374 error ("%qD declared as reference but not initialized", decl);
8e4ce833 4375 return NULL_TREE;
5566b478
MS
4376 }
4377
8d08fdba 4378 if (TREE_CODE (init) == TREE_LIST)
c7b62f14 4379 init = build_x_compound_expr_from_list (init, "initializer");
8d08fdba
MS
4380
4381 if (TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE
4382 && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
0a72704b
MM
4383 /* Note: default conversion is only called in very special cases. */
4384 init = decay_conversion (init);
68642fb6 4385
24bef158
MM
4386 /* Convert INIT to the reference type TYPE. This may involve the
4387 creation of a temporary, whose lifetime must be the same as that
350fae66
RK
4388 of the reference. If so, a DECL_EXPR for the temporary will be
4389 added just after the DECL_EXPR for DECL. That's why we don't set
24bef158
MM
4390 DECL_INITIAL for local references (instead assigning to them
4391 explicitly); we need to allow the temporary to be initialized
4392 first. */
7e99327d 4393 tmp = initialize_reference (type, init, decl, cleanup);
8d08fdba 4394
a3203465 4395 if (tmp == error_mark_node)
8e4ce833
JJ
4396 return NULL_TREE;
4397 else if (tmp == NULL_TREE)
8d08fdba 4398 {
2d01edd7 4399 error ("cannot initialize %qT from %qT", type, TREE_TYPE (init));
8e4ce833 4400 return NULL_TREE;
8d08fdba 4401 }
8d08fdba 4402
8e4ce833
JJ
4403 if (TREE_STATIC (decl) && !TREE_CONSTANT (tmp))
4404 return tmp;
4405
08ac397c 4406 DECL_INITIAL (decl) = tmp;
8e4ce833
JJ
4407
4408 return NULL_TREE;
8d08fdba
MS
4409}
4410
09357846
JM
4411/* Subroutine of check_initializer. We're initializing a DECL of
4412 std::initializer_list<T> TYPE from a braced-init-list INIT, and need to
4413 extend the lifetime of the underlying array to match that of the decl,
4414 just like for reference initialization. CLEANUP is as for
4415 grok_reference_init. */
4416
4417static tree
4418build_init_list_var_init (tree decl, tree type, tree init, tree *cleanup)
4419{
4420 tree aggr_init, array, arrtype;
4421 init = perform_implicit_conversion (type, init, tf_warning_or_error);
f8c6dba2
PC
4422 if (error_operand_p (init))
4423 return error_mark_node;
4424
09357846
JM
4425 aggr_init = TARGET_EXPR_INITIAL (init);
4426 init = build2 (INIT_EXPR, type, decl, init);
4427
4428 array = AGGR_INIT_EXPR_ARG (aggr_init, 1);
4429 arrtype = TREE_TYPE (array);
4430 STRIP_NOPS (array);
4431 gcc_assert (TREE_CODE (array) == ADDR_EXPR);
4432 array = TREE_OPERAND (array, 0);
4433 /* If the array is constant, finish_compound_literal already made it a
4434 static variable and we don't need to do anything here. */
4435 if (decl && TREE_CODE (array) == TARGET_EXPR)
4436 {
4437 tree subinit;
4438 tree var = set_up_extended_ref_temp (decl, array, cleanup, &subinit);
4439 var = build_address (var);
4440 var = convert (arrtype, var);
4441 AGGR_INIT_EXPR_ARG (aggr_init, 1) = var;
4442 init = build2 (COMPOUND_EXPR, TREE_TYPE (init), subinit, init);
4443 }
4444 return init;
4445}
4446
76239779
MM
4447/* Designated initializers in arrays are not supported in GNU C++.
4448 The parser cannot detect this error since it does not know whether
4449 a given brace-enclosed initializer is for a class type or for an
4450 array. This function checks that CE does not use a designated
4451 initializer. If it does, an error is issued. Returns true if CE
4452 is valid, i.e., does not have a designated initializer. */
4453
4454static bool
4455check_array_designated_initializer (const constructor_elt *ce)
4456{
48c9a7f0 4457 /* Designated initializers for array elements are not supported. */
76239779
MM
4458 if (ce->index)
4459 {
4460 /* The parser only allows identifiers as designated
39a13be5 4461 initializers. */
6a837908
SM
4462 if (ce->index == error_mark_node)
4463 error ("name used in a GNU-style designated "
4464 "initializer for an array");
4465 else
4466 {
4467 gcc_assert (TREE_CODE (ce->index) == IDENTIFIER_NODE);
4468 error ("name %qD used in a GNU-style designated "
4469 "initializer for an array", ce->index);
4470 }
76239779
MM
4471 return false;
4472 }
4473
4474 return true;
4475}
4476
27778b73
MM
4477/* When parsing `int a[] = {1, 2};' we don't know the size of the
4478 array until we finish parsing the initializer. If that's the
4479 situation we're in, update DECL accordingly. */
4480
4481static void
11f6b451 4482maybe_deduce_size_from_array_init (tree decl, tree init)
27778b73
MM
4483{
4484 tree type = TREE_TYPE (decl);
4485
4486 if (TREE_CODE (type) == ARRAY_TYPE
4487 && TYPE_DOMAIN (type) == NULL_TREE
4488 && TREE_CODE (decl) != TYPE_DECL)
4489 {
f2ae0c45
JM
4490 /* do_default is really a C-ism to deal with tentative definitions.
4491 But let's leave it here to ease the eventual merge. */
4492 int do_default = !DECL_EXTERNAL (decl);
27778b73 4493 tree initializer = init ? init : DECL_INITIAL (decl);
76239779 4494 int failure = 0;
27778b73 4495
76239779
MM
4496 /* Check that there are no designated initializers in INIT, as
4497 those are not supported in GNU C++, and as the middle-end
4498 will crash if presented with a non-numeric designated
4499 initializer. */
4500 if (initializer && TREE_CODE (initializer) == CONSTRUCTOR)
2b643eda 4501 {
76239779
MM
4502 VEC(constructor_elt,gc) *v = CONSTRUCTOR_ELTS (initializer);
4503 constructor_elt *ce;
4504 HOST_WIDE_INT i;
4505 for (i = 0;
4506 VEC_iterate (constructor_elt, v, i, ce);
49b5e2f6 4507 ++i)
76239779
MM
4508 if (!check_array_designated_initializer (ce))
4509 failure = 1;
2b643eda 4510 }
76239779
MM
4511
4512 if (!failure)
27778b73 4513 {
76239779
MM
4514 failure = cp_complete_array_type (&TREE_TYPE (decl), initializer,
4515 do_default);
4516 if (failure == 1)
2b643eda 4517 {
76239779
MM
4518 error ("initializer fails to determine size of %qD", decl);
4519 TREE_TYPE (decl) = error_mark_node;
4520 }
4521 else if (failure == 2)
4522 {
4523 if (do_default)
4524 {
4525 error ("array size missing in %qD", decl);
4526 TREE_TYPE (decl) = error_mark_node;
4527 }
4528 /* If a `static' var's size isn't known, make it extern as
4529 well as static, so it does not get allocated. If it's not
4530 `static', then don't mark it extern; finish_incomplete_decl
4531 will give it a default size and it will get allocated. */
4532 else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
4533 DECL_EXTERNAL (decl) = 1;
4534 }
4535 else if (failure == 3)
4536 {
4537 error ("zero-size array %qD", decl);
2b643eda
MM
4538 TREE_TYPE (decl) = error_mark_node;
4539 }
2b643eda 4540 }
27778b73 4541
f23b8501
JJ
4542 cp_apply_type_quals_to_decl (cp_type_quals (TREE_TYPE (decl)), decl);
4543
a3a7bf5f 4544 relayout_decl (decl);
27778b73
MM
4545 }
4546}
4547
4548/* Set DECL_SIZE, DECL_ALIGN, etc. for DECL (a VAR_DECL), and issue
57b52417 4549 any appropriate error messages regarding the layout. */
27778b73 4550
57b52417 4551static void
11f6b451 4552layout_var_decl (tree decl)
27778b73 4553{
2b643eda
MM
4554 tree type;
4555
2b643eda
MM
4556 type = TREE_TYPE (decl);
4557 if (type == error_mark_node)
4558 return;
57b52417
MM
4559
4560 /* If we haven't already layed out this declaration, do so now.
4561 Note that we must not call complete type for an external object
4562 because it's type might involve templates that we are not
34cd5ae7 4563 supposed to instantiate yet. (And it's perfectly valid to say
57b52417
MM
4564 `extern X x' for some incomplete type `X'.) */
4565 if (!DECL_EXTERNAL (decl))
4566 complete_type (type);
caf93cb0 4567 if (!DECL_SIZE (decl)
328de7c2 4568 && TREE_TYPE (decl) != error_mark_node
7de85f7e 4569 && (COMPLETE_TYPE_P (type)
caf93cb0 4570 || (TREE_CODE (type) == ARRAY_TYPE
7de85f7e
MM
4571 && !TYPE_DOMAIN (type)
4572 && COMPLETE_TYPE_P (TREE_TYPE (type)))))
27778b73
MM
4573 layout_decl (decl, 0);
4574
c82dbd95 4575 if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
27778b73
MM
4576 {
4577 /* An automatic variable with an incomplete type: that is an error.
4578 Don't talk about array types here, since we took care of that
4579 message in grokdeclarator. */
2d01edd7 4580 error ("storage size of %qD isn't known", decl);
27778b73
MM
4581 TREE_TYPE (decl) = error_mark_node;
4582 }
ae673f14
JM
4583#if 0
4584 /* Keep this code around in case we later want to control debug info
4585 based on whether a type is "used". (jason 1999-11-11) */
4586
9e1e64ec 4587 else if (!DECL_EXTERNAL (decl) && MAYBE_CLASS_TYPE_P (ttype))
27778b73
MM
4588 /* Let debugger know it should output info for this type. */
4589 note_debug_info_needed (ttype);
4590
4591 if (TREE_STATIC (decl) && DECL_CLASS_SCOPE_P (decl))
4592 note_debug_info_needed (DECL_CONTEXT (decl));
ae673f14 4593#endif
27778b73
MM
4594
4595 if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
4596 && DECL_SIZE (decl) != NULL_TREE
4597 && ! TREE_CONSTANT (DECL_SIZE (decl)))
4598 {
4599 if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
4600 constant_expression_warning (DECL_SIZE (decl));
4601 else
b97d8153
JJ
4602 {
4603 error ("storage size of %qD isn't constant", decl);
4604 TREE_TYPE (decl) = error_mark_node;
4605 }
27778b73
MM
4606 }
4607}
4608
27778b73
MM
4609/* If a local static variable is declared in an inline function, or if
4610 we have a weak definition, we must endeavor to create only one
4611 instance of the variable at link-time. */
4612
68017cb4 4613void
11f6b451 4614maybe_commonize_var (tree decl)
27778b73
MM
4615{
4616 /* Static data in a function with comdat linkage also has comdat
4617 linkage. */
4618 if (TREE_STATIC (decl)
4619 /* Don't mess with __FUNCTION__. */
cf74fb86 4620 && ! DECL_ARTIFICIAL (decl)
0b50d7f1 4621 && DECL_FUNCTION_SCOPE_P (decl)
ecc607fc 4622 && vague_linkage_fn_p (DECL_CONTEXT (decl)))
27778b73 4623 {
0dbc5cd3 4624 if (flag_weak)
27778b73 4625 {
0dbc5cd3
MM
4626 /* With weak symbols, we simply make the variable COMDAT;
4627 that will cause copies in multiple translations units to
4628 be merged. */
4629 comdat_linkage (decl);
4630 }
4631 else
4632 {
4633 if (DECL_INITIAL (decl) == NULL_TREE
4634 || DECL_INITIAL (decl) == error_mark_node)
27778b73 4635 {
0dbc5cd3
MM
4636 /* Without weak symbols, we can use COMMON to merge
4637 uninitialized variables. */
27778b73
MM
4638 TREE_PUBLIC (decl) = 1;
4639 DECL_COMMON (decl) = 1;
4640 }
0dbc5cd3 4641 else
27778b73 4642 {
0dbc5cd3
MM
4643 /* While for initialized variables, we must use internal
4644 linkage -- which means that multiple copies will not
4645 be merged. */
4646 TREE_PUBLIC (decl) = 0;
4647 DECL_COMMON (decl) = 0;
c5d75364
MLI
4648 warning_at (input_location, 0,
4649 "sorry: semantics of inline function static "
4650 "data %q+#D are wrong (you'll wind up "
4651 "with multiple copies)", decl);
4652 warning_at (DECL_SOURCE_LOCATION (decl), 0,
4653 " you can work around this by removing "
4654 "the initializer");
27778b73
MM
4655 }
4656 }
4657 }
4658 else if (DECL_LANG_SPECIFIC (decl) && DECL_COMDAT (decl))
4659 /* Set it up again; we might have set DECL_INITIAL since the last
4660 time. */
4661 comdat_linkage (decl);
4662}
4663
91063b51
MM
4664/* Issue an error message if DECL is an uninitialized const variable. */
4665
4666static void
11f6b451 4667check_for_uninitialized_const_var (tree decl)
91063b51
MM
4668{
4669 tree type = TREE_TYPE (decl);
4670
7ecbca9d
GDR
4671 if (TREE_CODE (decl) == VAR_DECL && DECL_DECLARED_CONSTEXPR_P (decl)
4672 && DECL_INITIAL (decl) == NULL)
4673 error ("missing initializer for constexpr %qD", decl);
4674
91063b51
MM
4675 /* ``Unless explicitly declared extern, a const object does not have
4676 external linkage and must be initialized. ($8.4; $12.1)'' ARM
4677 7.1.6 */
7ecbca9d 4678 else if (TREE_CODE (decl) == VAR_DECL
91063b51
MM
4679 && TREE_CODE (type) != REFERENCE_TYPE
4680 && CP_TYPE_CONST_P (type)
4681 && !TYPE_NEEDS_CONSTRUCTING (type)
4682 && !DECL_INITIAL (decl))
2d01edd7 4683 error ("uninitialized const %qD", decl);
91063b51
MM
4684}
4685
4038c495
GB
4686\f
4687/* Structure holding the current initializer being processed by reshape_init.
4688 CUR is a pointer to the current element being processed, END is a pointer
4689 after the last element present in the initializer. */
4690typedef struct reshape_iterator_t
4691{
4692 constructor_elt *cur;
4693 constructor_elt *end;
4694} reshape_iter;
4695
4696static tree reshape_init_r (tree, reshape_iter *, bool);
4697
8e3df2de
MM
4698/* FIELD is a FIELD_DECL or NULL. In the former case, the value
4699 returned is the next FIELD_DECL (possibly FIELD itself) that can be
4700 initialized. If there are no more such fields, the return value
4701 will be NULL. */
4702
4703static tree
4704next_initializable_field (tree field)
4705{
4706 while (field
4707 && (TREE_CODE (field) != FIELD_DECL
4708 || (DECL_C_BIT_FIELD (field) && !DECL_NAME (field))
4709 || DECL_ARTIFICIAL (field)))
4710 field = TREE_CHAIN (field);
4711
4712 return field;
4713}
4714
4038c495
GB
4715/* Subroutine of reshape_init_array and reshape_init_vector, which does
4716 the actual work. ELT_TYPE is the element type of the array. MAX_INDEX is an
4717 INTEGER_CST representing the size of the array minus one (the maximum index),
4718 or NULL_TREE if the array was declared without specifying the size. D is
4719 the iterator within the constructor. */
4720
4721static tree
4722reshape_init_array_1 (tree elt_type, tree max_index, reshape_iter *d)
3d142be2 4723{
4038c495 4724 tree new_init;
3d142be2 4725 bool sized_array_p = (max_index != NULL_TREE);
004c400a
JJ
4726 unsigned HOST_WIDE_INT max_index_cst = 0;
4727 unsigned HOST_WIDE_INT index;
3d142be2 4728
4038c495 4729 /* The initializer for an array is always a CONSTRUCTOR. */
09357846 4730 new_init = build_constructor (init_list_type_node, NULL);
4038c495 4731
3d142be2 4732 if (sized_array_p)
004c400a 4733 {
d7d93837
AH
4734 /* Minus 1 is used for zero sized arrays. */
4735 if (integer_all_onesp (max_index))
4736 return new_init;
4737
004c400a
JJ
4738 if (host_integerp (max_index, 1))
4739 max_index_cst = tree_low_cst (max_index, 1);
4740 /* sizetype is sign extended, not zero extended. */
4741 else
4742 max_index_cst = tree_low_cst (fold_convert (size_type_node, max_index),
4743 1);
4744 }
3d142be2
GB
4745
4746 /* Loop until there are no more initializers. */
4747 for (index = 0;
4038c495 4748 d->cur != d->end && (!sized_array_p || index <= max_index_cst);
3d142be2
GB
4749 ++index)
4750 {
4038c495
GB
4751 tree elt_init;
4752
76239779 4753 check_array_designated_initializer (d->cur);
4038c495 4754 elt_init = reshape_init_r (elt_type, d, /*first_initializer_p=*/false);
07471dfb
MM
4755 if (elt_init == error_mark_node)
4756 return error_mark_node;
4038c495 4757 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init), NULL_TREE, elt_init);
3d142be2
GB
4758 }
4759
4038c495 4760 return new_init;
3d142be2
GB
4761}
4762
4038c495
GB
4763/* Subroutine of reshape_init_r, processes the initializers for arrays.
4764 Parameters are the same of reshape_init_r. */
8e3df2de 4765
4038c495
GB
4766static tree
4767reshape_init_array (tree type, reshape_iter *d)
4768{
4769 tree max_index = NULL_TREE;
caf93cb0 4770
4038c495 4771 gcc_assert (TREE_CODE (type) == ARRAY_TYPE);
8e3df2de 4772
4038c495
GB
4773 if (TYPE_DOMAIN (type))
4774 max_index = array_type_nelts (type);
4775
4776 return reshape_init_array_1 (TREE_TYPE (type), max_index, d);
4777}
4778
4779/* Subroutine of reshape_init_r, processes the initializers for vectors.
4780 Parameters are the same of reshape_init_r. */
8e3df2de
MM
4781
4782static tree
4038c495 4783reshape_init_vector (tree type, reshape_iter *d)
8e3df2de 4784{
4038c495
GB
4785 tree max_index = NULL_TREE;
4786 tree rtype;
4787
4788 gcc_assert (TREE_CODE (type) == VECTOR_TYPE);
4789
3b2db49f 4790 if (COMPOUND_LITERAL_P (d->cur->value))
4038c495
GB
4791 {
4792 tree value = d->cur->value;
4793 if (!same_type_p (TREE_TYPE (value), type))
4794 {
4795 error ("invalid type %qT as initializer for a vector of type %qT",
4796 TREE_TYPE (d->cur->value), type);
3db45ab5 4797 value = error_mark_node;
4038c495
GB
4798 }
4799 ++d->cur;
4800 return value;
4801 }
4802
4803 /* For a vector, the representation type is a struct
4804 containing a single member which is an array of the
4805 appropriate size. */
4806 rtype = TYPE_DEBUG_REPRESENTATION_TYPE (type);
4807 if (rtype && TYPE_DOMAIN (TREE_TYPE (TYPE_FIELDS (rtype))))
4808 max_index = array_type_nelts (TREE_TYPE (TYPE_FIELDS (rtype)));
4809
4810 return reshape_init_array_1 (TREE_TYPE (type), max_index, d);
4811}
4812
4813/* Subroutine of reshape_init_r, processes the initializers for classes
4814 or union. Parameters are the same of reshape_init_r. */
4815
4816static tree
4817reshape_init_class (tree type, reshape_iter *d, bool first_initializer_p)
4818{
4819 tree field;
8e3df2de 4820 tree new_init;
8e3df2de 4821
4038c495 4822 gcc_assert (CLASS_TYPE_P (type));
8e3df2de 4823
4038c495 4824 /* The initializer for a class is always a CONSTRUCTOR. */
09357846 4825 new_init = build_constructor (init_list_type_node, NULL);
4038c495 4826 field = next_initializable_field (TYPE_FIELDS (type));
ee7ecb29 4827
4038c495 4828 if (!field)
8e3df2de 4829 {
4038c495
GB
4830 /* [dcl.init.aggr]
4831
4832 An initializer for an aggregate member that is an
4833 empty class shall have the form of an empty
4834 initializer-list {}. */
4835 if (!first_initializer_p)
4836 {
4837 error ("initializer for %qT must be brace-enclosed", type);
4838 return error_mark_node;
4839 }
4840 return new_init;
8e3df2de 4841 }
4038c495
GB
4842
4843 /* Loop through the initializable fields, gathering initializers. */
4844 while (d->cur != d->end)
8e3df2de 4845 {
4038c495
GB
4846 tree field_init;
4847
4848 /* Handle designated initializers, as an extension. */
4849 if (d->cur->index)
4850 {
4038c495
GB
4851 field = lookup_field_1 (type, d->cur->index, /*want_type=*/false);
4852
4853 if (!field || TREE_CODE (field) != FIELD_DECL)
77bffd4c
SE
4854 {
4855 error ("%qT has no non-static data member named %qD", type,
4856 d->cur->index);
4857 return error_mark_node;
4858 }
4038c495
GB
4859 }
4860
4861 /* If we processed all the member of the class, we are done. */
4862 if (!field)
4863 break;
4864
4865 field_init = reshape_init_r (TREE_TYPE (field), d,
4866 /*first_initializer_p=*/false);
4867 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init), field, field_init);
4868
4869 /* [dcl.init.aggr]
4870
4871 When a union is initialized with a brace-enclosed
4872 initializer, the braces shall only contain an
4873 initializer for the first member of the union. */
4874 if (TREE_CODE (type) == UNION_TYPE)
4875 break;
4876
4877 field = next_initializable_field (TREE_CHAIN (field));
8e3df2de
MM
4878 }
4879
4038c495
GB
4880 return new_init;
4881}
4882
4883/* Subroutine of reshape_init, which processes a single initializer (part of
4884 a CONSTRUCTOR). TYPE is the type of the variable being initialized, D is the
4885 iterator within the CONSTRUCTOR which points to the initializer to process.
4886 FIRST_INITIALIZER_P is true if this is the first initializer of the
40b125d7 4887 outermost CONSTRUCTOR node. */
4038c495
GB
4888
4889static tree
4890reshape_init_r (tree type, reshape_iter *d, bool first_initializer_p)
4891{
4892 tree init = d->cur->value;
4893
ffe79825
PC
4894 if (error_operand_p (init))
4895 return error_mark_node;
4896
8e3df2de
MM
4897 /* A non-aggregate type is always initialized with a single
4898 initializer. */
4899 if (!CP_AGGREGATE_TYPE_P (type))
4038c495
GB
4900 {
4901 /* It is invalid to initialize a non-aggregate type with a
b71836b0 4902 brace-enclosed initializer before C++0x.
4038c495
GB
4903 We need to check for BRACE_ENCLOSED_INITIALIZER_P here because
4904 of g++.old-deja/g++.mike/p7626.C: a pointer-to-member constant is
4905 a CONSTRUCTOR (with a record type). */
4906 if (TREE_CODE (init) == CONSTRUCTOR
4907 && BRACE_ENCLOSED_INITIALIZER_P (init)) /* p7626.C */
4908 {
b71836b0
JM
4909 if (SCALAR_TYPE_P (type))
4910 {
4911 error ("braces around scalar initializer for type %qT", type);
4912 init = error_mark_node;
4913 }
4914 else
4915 maybe_warn_cpp0x ("extended initializer lists");
4038c495 4916 }
3db45ab5 4917
4038c495
GB
4918 d->cur++;
4919 return init;
4920 }
8e3df2de
MM
4921
4922 /* [dcl.init.aggr]
4923
4924 All implicit type conversions (clause _conv_) are considered when
4925 initializing the aggregate member with an initializer from an
4926 initializer-list. If the initializer can initialize a member,
4927 the member is initialized. Otherwise, if the member is itself a
4928 non-empty subaggregate, brace elision is assumed and the
4929 initializer is considered for the initialization of the first
4930 member of the subaggregate. */
4038c495 4931 if (TREE_CODE (init) != CONSTRUCTOR
40b125d7
JM
4932 /* But don't try this for the first initializer, since that would be
4933 looking through the outermost braces; A a2 = { a1 }; is not a
4934 valid aggregate initialization. */
4935 && !first_initializer_p
d5f4eddd
JM
4936 && (same_type_ignoring_top_level_qualifiers_p (type, TREE_TYPE (init))
4937 || can_convert_arg (type, TREE_TYPE (init), init, LOOKUP_NORMAL)))
8e3df2de 4938 {
4038c495
GB
4939 d->cur++;
4940 return init;
8e3df2de
MM
4941 }
4942
4038c495
GB
4943 /* [dcl.init.string]
4944
4945 A char array (whether plain char, signed char, or unsigned char)
4946 can be initialized by a string-literal (optionally enclosed in
4947 braces); a wchar_t array can be initialized by a wide
4948 string-literal (optionally enclosed in braces). */
4949 if (TREE_CODE (type) == ARRAY_TYPE
42328048 4950 && char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (type))))
8e3df2de 4951 {
4038c495 4952 tree str_init = init;
8e3df2de 4953
4038c495 4954 /* Strip one level of braces if and only if they enclose a single
3db45ab5 4955 element (as allowed by [dcl.init.string]). */
4038c495
GB
4956 if (!first_initializer_p
4957 && TREE_CODE (str_init) == CONSTRUCTOR
4958 && VEC_length (constructor_elt, CONSTRUCTOR_ELTS (str_init)) == 1)
8e3df2de 4959 {
4038c495
GB
4960 str_init = VEC_index (constructor_elt,
4961 CONSTRUCTOR_ELTS (str_init), 0)->value;
4962 }
3db45ab5 4963
4038c495 4964 /* If it's a string literal, then it's the initializer for the array
3db45ab5 4965 as a whole. Otherwise, continue with normal initialization for
4038c495
GB
4966 array types (one value per array element). */
4967 if (TREE_CODE (str_init) == STRING_CST)
4968 {
4969 d->cur++;
4970 return str_init;
4971 }
4972 }
8e3df2de 4973
4038c495
GB
4974 /* The following cases are about aggregates. If we are not within a full
4975 initializer already, and there is not a CONSTRUCTOR, it means that there
4976 is a missing set of braces (that is, we are processing the case for
4977 which reshape_init exists). */
4978 if (!first_initializer_p)
4979 {
4980 if (TREE_CODE (init) == CONSTRUCTOR)
4981 {
70ec16f7
AP
4982 if (TREE_TYPE (init) && TYPE_PTRMEMFUNC_P (TREE_TYPE (init)))
4983 /* There is no need to reshape pointer-to-member function
4984 initializers, as they are always constructed correctly
4985 by the front end. */
4986 ;
4987 else if (COMPOUND_LITERAL_P (init))
4038c495
GB
4988 /* For a nested compound literal, there is no need to reshape since
4989 brace elision is not allowed. Even if we decided to allow it,
4990 we should add a call to reshape_init in finish_compound_literal,
4991 before calling digest_init, so changing this code would still
4992 not be necessary. */
70ec16f7
AP
4993 gcc_assert (!BRACE_ENCLOSED_INITIALIZER_P (init));
4994 else
8e3df2de 4995 {
4038c495
GB
4996 ++d->cur;
4997 gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
4998 return reshape_init (type, init);
8e3df2de 4999 }
8e3df2de 5000 }
f8e7a389 5001
4038c495
GB
5002 warning (OPT_Wmissing_braces, "missing braces around initializer for %qT",
5003 type);
5004 }
8e3df2de 5005
4038c495
GB
5006 /* Dispatch to specialized routines. */
5007 if (CLASS_TYPE_P (type))
5008 return reshape_init_class (type, d, first_initializer_p);
5009 else if (TREE_CODE (type) == ARRAY_TYPE)
5010 return reshape_init_array (type, d);
5011 else if (TREE_CODE (type) == VECTOR_TYPE)
5012 return reshape_init_vector (type, d);
5013 else
5014 gcc_unreachable();
5015}
8e3df2de 5016
4038c495
GB
5017/* Undo the brace-elision allowed by [dcl.init.aggr] in a
5018 brace-enclosed aggregate initializer.
8e3df2de 5019
4038c495
GB
5020 INIT is the CONSTRUCTOR containing the list of initializers describing
5021 a brace-enclosed initializer for an entity of the indicated aggregate TYPE.
5022 It may not presently match the shape of the TYPE; for example:
5023
5024 struct S { int a; int b; };
5025 struct S a[] = { 1, 2, 3, 4 };
5026
5027 Here INIT will hold a VEC of four elements, rather than a
5028 VEC of two elements, each itself a VEC of two elements. This
5029 routine transforms INIT from the former form into the latter. The
5030 revised CONSTRUCTOR node is returned. */
5031
3b2db49f 5032tree
4038c495
GB
5033reshape_init (tree type, tree init)
5034{
5035 VEC(constructor_elt, gc) *v;
5036 reshape_iter d;
5037 tree new_init;
5038
4038c495
GB
5039 gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
5040
5041 v = CONSTRUCTOR_ELTS (init);
5042
5043 /* An empty constructor does not need reshaping, and it is always a valid
5044 initializer. */
5045 if (VEC_empty (constructor_elt, v))
5046 return init;
5047
5048 /* Recurse on this CONSTRUCTOR. */
5049 d.cur = VEC_index (constructor_elt, v, 0);
5050 d.end = d.cur + VEC_length (constructor_elt, v);
5051
5052 new_init = reshape_init_r (type, &d, true);
07471dfb
MM
5053 if (new_init == error_mark_node)
5054 return error_mark_node;
4038c495
GB
5055
5056 /* Make sure all the element of the constructor were used. Otherwise,
5057 issue an error about exceeding initializers. */
5058 if (d.cur != d.end)
5059 error ("too many initializers for %qT", type);
8e3df2de
MM
5060
5061 return new_init;
5062}
5063
23bee8f4
JJ
5064/* Verify array initializer. Returns true if errors have been reported. */
5065
5066bool
5067check_array_initializer (tree decl, tree type, tree init)
5068{
5069 tree element_type = TREE_TYPE (type);
5070
5071 /* The array type itself need not be complete, because the
5072 initializer may tell us how many elements are in the array.
5073 But, the elements of the array must be complete. */
5074 if (!COMPLETE_TYPE_P (complete_type (element_type)))
5075 {
5076 if (decl)
5077 error ("elements of array %q#D have incomplete type", decl);
5078 else
5079 error ("elements of array %q#T have incomplete type", type);
5080 return true;
5081 }
5082 /* It is not valid to initialize a VLA. */
5083 if (init
5084 && ((COMPLETE_TYPE_P (type) && !TREE_CONSTANT (TYPE_SIZE (type)))
5085 || !TREE_CONSTANT (TYPE_SIZE (element_type))))
5086 {
5087 if (decl)
5088 error ("variable-sized object %qD may not be initialized", decl);
5089 else
5090 error ("variable-sized compound literal");
5091 return true;
5092 }
5093 return false;
5094}
5095
09357846
JM
5096/* Subroutine of check_initializer; args are passed down from that function.
5097 Set stmts_are_full_exprs_p to 1 across a call to build_aggr_init. */
5098
5099static tree
5100build_aggr_init_full_exprs (tree decl, tree init, int flags)
5101
5102{
5103 int saved_stmts_are_full_exprs_p = 0;
5104 if (building_stmt_tree ())
5105 {
5106 saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
5107 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
5108 }
5109 init = build_aggr_init (decl, init, flags, tf_warning_or_error);
5110 if (building_stmt_tree ())
5111 current_stmt_tree ()->stmts_are_full_exprs_p =
5112 saved_stmts_are_full_exprs_p;
5113 return init;
5114}
5115
c82dbd95 5116/* Verify INIT (the initializer for DECL), and record the
7e99327d
MM
5117 initialization in DECL_INITIAL, if appropriate. CLEANUP is as for
5118 grok_reference_init.
8e3df2de
MM
5119
5120 If the return value is non-NULL, it is an expression that must be
5121 evaluated dynamically to initialize DECL. */
27778b73 5122
c82dbd95 5123static tree
7e99327d 5124check_initializer (tree decl, tree init, int flags, tree *cleanup)
27778b73 5125{
17bbb839 5126 tree type = TREE_TYPE (decl);
25ebb82a 5127 tree init_code = NULL;
fc0e7bf5 5128
328de7c2
MM
5129 /* Things that are going to be initialized need to have complete
5130 type. */
5131 TREE_TYPE (decl) = type = complete_type (TREE_TYPE (decl));
c82dbd95 5132
328de7c2
MM
5133 if (type == error_mark_node)
5134 /* We will have already complained. */
f724eac4
MM
5135 return NULL_TREE;
5136
5137 if (TREE_CODE (type) == ARRAY_TYPE)
328de7c2 5138 {
23bee8f4
JJ
5139 if (check_array_initializer (decl, type, init))
5140 return NULL_TREE;
328de7c2 5141 }
f724eac4 5142 else if (!COMPLETE_TYPE_P (type))
328de7c2 5143 {
2d01edd7 5144 error ("%qD has incomplete type", decl);
328de7c2 5145 TREE_TYPE (decl) = error_mark_node;
f724eac4 5146 return NULL_TREE;
27778b73 5147 }
f724eac4
MM
5148 else
5149 /* There is no way to make a variable-sized class type in GNU C++. */
5150 gcc_assert (TREE_CONSTANT (TYPE_SIZE (type)));
c1ae8be5
SM
5151
5152 if (init && BRACE_ENCLOSED_INITIALIZER_P (init))
f47165c9 5153 {
c1ae8be5
SM
5154 int init_len = VEC_length (constructor_elt, CONSTRUCTOR_ELTS (init));
5155 if (SCALAR_TYPE_P (type))
5156 {
09357846
JM
5157 if (init_len == 0)
5158 {
5159 maybe_warn_cpp0x ("extended initializer lists");
5160 init = build_zero_init (type, NULL_TREE, false);
5161 }
5162 else if (init_len != 1)
c1ae8be5
SM
5163 {
5164 error ("scalar object %qD requires one element in initializer",
5165 decl);
5166 TREE_TYPE (decl) = error_mark_node;
5167 return NULL_TREE;
5168 }
5169 }
f47165c9 5170 }
27778b73
MM
5171
5172 if (TREE_CODE (decl) == CONST_DECL)
5173 {
7525db03 5174 gcc_assert (TREE_CODE (type) != REFERENCE_TYPE);
27778b73
MM
5175
5176 DECL_INITIAL (decl) = init;
5177
50bc768d 5178 gcc_assert (init != NULL_TREE);
27778b73
MM
5179 init = NULL_TREE;
5180 }
c82dbd95 5181 else if (!DECL_EXTERNAL (decl) && TREE_CODE (type) == REFERENCE_TYPE)
7e99327d 5182 init = grok_reference_init (decl, type, init, cleanup);
27778b73
MM
5183 else if (init)
5184 {
4038c495 5185 /* Do not reshape constructors of vectors (they don't need to be
3db45ab5 5186 reshaped. */
09357846 5187 if (BRACE_ENCLOSED_INITIALIZER_P (init))
a16f2357 5188 {
09357846
JM
5189 if (is_std_init_list (type))
5190 return build_init_list_var_init (decl, type, init, cleanup);
5191 else if (TYPE_NON_AGGREGATE_CLASS (type))
5192 {
5193 /* Don't reshape if the class has constructors. */
5194 if (cxx_dialect == cxx98)
5195 error ("in C++98 %qD must be initialized by constructor, "
5196 "not by %<{...}%>",
5197 decl);
5198 init = build_tree_list (NULL_TREE, init);
5199 }
b6fc2cdb 5200 else if (TREE_CODE (type) == VECTOR_TYPE && TYPE_VECTOR_OPAQUE (type))
6e1b3a7c
AH
5201 {
5202 error ("opaque vector types cannot be initialized");
5203 init = error_mark_node;
5204 }
09357846
JM
5205 else
5206 init = reshape_init (type, init);
a16f2357 5207 }
8e3df2de
MM
5208
5209 /* If DECL has an array type without a specific bound, deduce the
5210 array size from the initializer. */
5211 maybe_deduce_size_from_array_init (decl, init);
5212 type = TREE_TYPE (decl);
2b643eda
MM
5213 if (type == error_mark_node)
5214 return NULL_TREE;
8e3df2de 5215
09357846
JM
5216 if (TYPE_NEEDS_CONSTRUCTING (type)
5217 || (CLASS_TYPE_P (type)
5218 && !BRACE_ENCLOSED_INITIALIZER_P (init)))
5219 return build_aggr_init_full_exprs (decl, init, flags);
5220 else if (TREE_CODE (init) != TREE_VEC)
27778b73 5221 {
e57d93c6 5222 init_code = store_init_value (decl, init, flags);
09357846
JM
5223 if (pedantic && TREE_CODE (type) == ARRAY_TYPE
5224 && DECL_INITIAL (decl)
5225 && TREE_CODE (DECL_INITIAL (decl)) == STRING_CST
5226 && PAREN_STRING_LITERAL_P (DECL_INITIAL (decl)))
5227 warning (0, "array %qD initialized by parenthesized string literal %qE",
5228 decl, DECL_INITIAL (decl));
5229 init = NULL;
27778b73 5230 }
27778b73
MM
5231 }
5232 else if (DECL_EXTERNAL (decl))
5233 ;
8e3df2de 5234 else if (TYPE_P (type) && TYPE_NEEDS_CONSTRUCTING (type))
09357846 5235 return build_aggr_init_full_exprs (decl, init, flags);
9e1e64ec 5236 else if (MAYBE_CLASS_TYPE_P (type))
27778b73
MM
5237 {
5238 tree core_type = strip_array_types (type);
5239
8e3df2de 5240 if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type))
2d01edd7 5241 error ("structure %qD with uninitialized const members", decl);
8e3df2de 5242 if (CLASSTYPE_REF_FIELDS_NEED_INIT (core_type))
2d01edd7 5243 error ("structure %qD with uninitialized reference members", decl);
27778b73
MM
5244
5245 check_for_uninitialized_const_var (decl);
27778b73
MM
5246 }
5247 else
5248 check_for_uninitialized_const_var (decl);
68642fb6 5249
8e3df2de 5250 if (init && init != error_mark_node)
f293ce4b 5251 init_code = build2 (INIT_EXPR, type, decl, init);
8e3df2de 5252
25ebb82a 5253 return init_code;
27778b73
MM
5254}
5255
5256/* If DECL is not a local variable, give it RTL. */
5257
5258static void
11f6b451 5259make_rtl_for_nonlocal_decl (tree decl, tree init, const char* asmspec)
27778b73 5260{
95ee998c
MM
5261 int toplev = toplevel_bindings_p ();
5262 int defer_p;
9f12b095 5263 const char *filename;
27778b73 5264
0e6df31e
GK
5265 /* Set the DECL_ASSEMBLER_NAME for the object. */
5266 if (asmspec)
5267 {
5268 /* The `register' keyword, when used together with an
5269 asm-specification, indicates that the variable should be
5270 placed in a particular register. */
5271 if (TREE_CODE (decl) == VAR_DECL && DECL_REGISTER (decl))
5272 {
11e3f4b6 5273 set_user_assembler_name (decl, asmspec);
0e6df31e
GK
5274 DECL_HARD_REGISTER (decl) = 1;
5275 }
5276 else
b482789c
MA
5277 {
5278 if (TREE_CODE (decl) == FUNCTION_DECL
5279 && DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL)
5280 set_builtin_user_assembler_name (decl, asmspec);
5281 set_user_assembler_name (decl, asmspec);
5282 }
0e6df31e
GK
5283 }
5284
f39ee884
MM
5285 /* Handle non-variables up front. */
5286 if (TREE_CODE (decl) != VAR_DECL)
5287 {
0e6df31e 5288 rest_of_decl_compilation (decl, toplev, at_eof);
f39ee884
MM
5289 return;
5290 }
5291
95ee998c
MM
5292 /* If we see a class member here, it should be a static data
5293 member. */
5294 if (DECL_LANG_SPECIFIC (decl) && DECL_IN_AGGR_P (decl))
5295 {
50bc768d 5296 gcc_assert (TREE_STATIC (decl));
95ee998c
MM
5297 /* An in-class declaration of a static data member should be
5298 external; it is only a declaration, and not a definition. */
5299 if (init == NULL_TREE)
dc472c59 5300 gcc_assert (DECL_EXTERNAL (decl) || !TREE_PUBLIC (decl));
95ee998c
MM
5301 }
5302
95ee998c
MM
5303 /* We don't create any RTL for local variables. */
5304 if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
5305 return;
27778b73 5306
95ee998c 5307 /* We defer emission of local statics until the corresponding
350fae66 5308 DECL_EXPR is expanded. */
95ee998c
MM
5309 defer_p = DECL_FUNCTION_SCOPE_P (decl) || DECL_VIRTUAL_P (decl);
5310
b602511f
JM
5311 /* We try to defer namespace-scope static constants so that they are
5312 not emitted into the object file unnecessarily. */
9f12b095 5313 filename = input_filename;
b602511f
JM
5314 if (!DECL_VIRTUAL_P (decl)
5315 && TREE_READONLY (decl)
5316 && DECL_INITIAL (decl) != NULL_TREE
5317 && DECL_INITIAL (decl) != error_mark_node
9f12b095 5318 && filename != NULL
b602511f
JM
5319 && ! EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl))
5320 && toplev
5321 && !TREE_PUBLIC (decl))
5cc90635
JM
5322 {
5323 /* Fool with the linkage of static consts according to #pragma
5324 interface. */
c533e34d 5325 struct c_fileinfo *finfo = get_fileinfo (filename);
5d709b00 5326 if (!finfo->interface_unknown && !TREE_PUBLIC (decl))
27778b73 5327 {
95ee998c 5328 TREE_PUBLIC (decl) = 1;
5d709b00 5329 DECL_EXTERNAL (decl) = finfo->interface_only;
27778b73 5330 }
27778b73 5331
95ee998c 5332 defer_p = 1;
27778b73 5333 }
b602511f 5334 /* Likewise for template instantiations. */
4684cd27
MM
5335 else if (DECL_LANG_SPECIFIC (decl)
5336 && DECL_IMPLICIT_INSTANTIATION (decl))
b602511f 5337 defer_p = 1;
95ee998c 5338
95ee998c 5339 /* If we're not deferring, go ahead and assemble the variable. */
0e6df31e
GK
5340 if (!defer_p)
5341 rest_of_decl_compilation (decl, toplev, at_eof);
27778b73
MM
5342}
5343
a24549d4
JM
5344/* walk_tree helper for wrap_temporary_cleanups, below. */
5345
5346static tree
5347wrap_cleanups_r (tree *stmt_p, int *walk_subtrees, void *data)
5348{
5349 if (TYPE_P (*stmt_p))
5350 {
5351 *walk_subtrees = 0;
5352 return NULL_TREE;
5353 }
5354
5355 if (TREE_CODE (*stmt_p) == TARGET_EXPR)
5356 {
5357 tree guard = (tree)data;
5358 tree tcleanup = TARGET_EXPR_CLEANUP (*stmt_p);
5359
5360 tcleanup = build2 (TRY_CATCH_EXPR, void_type_node, tcleanup, guard);
33b45227
JM
5361 /* Tell honor_protect_cleanup_actions to handle this as a separate
5362 cleanup. */
5363 TRY_CATCH_IS_CLEANUP (tcleanup) = 1;
5364
a24549d4
JM
5365 TARGET_EXPR_CLEANUP (*stmt_p) = tcleanup;
5366 }
5367
5368 return NULL_TREE;
5369}
5370
5371/* We're initializing a local variable which has a cleanup GUARD. If there
5372 are any temporaries used in the initializer INIT of this variable, we
5373 need to wrap their cleanups with TRY_CATCH_EXPR (, GUARD) so that the
33b45227
JM
5374 variable will be cleaned up properly if one of them throws.
5375
5376 Unfortunately, there's no way to express this properly in terms of
5377 nesting, as the regions for the temporaries overlap the region for the
5378 variable itself; if there are two temporaries, the variable needs to be
5379 the first thing destroyed if either of them throws. However, we only
5380 want to run the variable's cleanup if it actually got constructed. So
5381 we need to guard the temporary cleanups with the variable's cleanup if
5382 they are run on the normal path, but not if they are run on the
5383 exceptional path. We implement this by telling
5384 honor_protect_cleanup_actions to strip the variable cleanup from the
5385 exceptional path. */
a24549d4
JM
5386
5387static void
5388wrap_temporary_cleanups (tree init, tree guard)
5389{
5390 cp_walk_tree_without_duplicates (&init, wrap_cleanups_r, (void *)guard);
5391}
5392
ed5511d9 5393/* Generate code to initialize DECL (a local variable). */
27778b73 5394
8e3df2de 5395static void
11f6b451 5396initialize_local_var (tree decl, tree init)
27778b73 5397{
9ed9e79a 5398 tree type = TREE_TYPE (decl);
170b020f 5399 tree cleanup;
a24549d4 5400 int already_used;
27778b73 5401
50bc768d
NS
5402 gcc_assert (TREE_CODE (decl) == VAR_DECL
5403 || TREE_CODE (decl) == RESULT_DECL);
5404 gcc_assert (!TREE_STATIC (decl));
b7b8bcd2 5405
8e3df2de 5406 if (DECL_SIZE (decl) == NULL_TREE)
b7b8bcd2
MM
5407 {
5408 /* If we used it already as memory, it must stay in memory. */
5409 DECL_INITIAL (decl) = NULL_TREE;
5410 TREE_ADDRESSABLE (decl) = TREE_USED (decl);
a24549d4 5411 return;
b7b8bcd2
MM
5412 }
5413
a24549d4
JM
5414 if (type == error_mark_node)
5415 return;
68642fb6 5416
a24549d4
JM
5417 /* Compute and store the initial value. */
5418 already_used = TREE_USED (decl) || TREE_USED (type);
27778b73 5419
a24549d4
JM
5420 /* Generate a cleanup, if necessary. */
5421 cleanup = cxx_maybe_build_cleanup (decl);
27778b73 5422
a24549d4
JM
5423 /* Perform the initialization. */
5424 if (init)
5425 {
5426 int saved_stmts_are_full_exprs_p;
5427
5428 /* If we're only initializing a single object, guard the destructors
5429 of any temporaries used in its initializer with its destructor.
5430 This isn't right for arrays because each element initialization is
5431 a full-expression. */
5432 if (cleanup && TREE_CODE (type) != ARRAY_TYPE)
5433 wrap_temporary_cleanups (init, cleanup);
5434
5435 gcc_assert (building_stmt_tree ());
5436 saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
5437 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
5438 finish_expr_stmt (init);
5439 current_stmt_tree ()->stmts_are_full_exprs_p =
5440 saved_stmts_are_full_exprs_p;
27778b73 5441 }
24bef158 5442
a24549d4
JM
5443 /* Set this to 0 so we can tell whether an aggregate which was
5444 initialized was ever used. Don't do this if it has a
5445 destructor, so we don't complain about the 'resource
5446 allocation is initialization' idiom. Now set
5447 attribute((unused)) on types so decls of that type will be
5448 marked used. (see TREE_USED, above.) */
5449 if (TYPE_NEEDS_CONSTRUCTING (type)
5450 && ! already_used
5451 && TYPE_HAS_TRIVIAL_DESTRUCTOR (type)
5452 && DECL_NAME (decl))
5453 TREE_USED (decl) = 0;
5454 else if (already_used)
5455 TREE_USED (decl) = 1;
5456
5457 if (cleanup)
170b020f 5458 finish_decl_cleanup (decl, cleanup);
24bef158
MM
5459}
5460
19c29b2f
MM
5461/* DECL is a VAR_DECL for a compiler-generated variable with static
5462 storage duration (like a virtual table) whose initializer is a
3b2db49f
MM
5463 compile-time constant. INIT must be either a TREE_LIST of values,
5464 or a CONSTRUCTOR. Initialize the variable and provide it to the
5465 back end. */
19c29b2f
MM
5466
5467void
5468initialize_artificial_var (tree decl, tree init)
5469{
d23f3d60 5470 gcc_assert (DECL_ARTIFICIAL (decl));
3b2db49f 5471 if (TREE_CODE (init) == TREE_LIST)
09357846 5472 init = build_constructor_from_list (TREE_TYPE (decl), init);
3b2db49f
MM
5473 gcc_assert (TREE_CODE (init) == CONSTRUCTOR);
5474 DECL_INITIAL (decl) = init;
19c29b2f
MM
5475 DECL_INITIALIZED_P (decl) = 1;
5476 determine_visibility (decl);
5477 layout_var_decl (decl);
5478 maybe_commonize_var (decl);
5479 make_rtl_for_nonlocal_decl (decl, init, /*asmspec=*/NULL);
5480}
5481
32a11c08
MM
5482/* INIT is the initializer for a variable, as represented by the
5483 parser. Returns true iff INIT is value-dependent. */
5484
5485static bool
5486value_dependent_init_p (tree init)
5487{
5488 if (TREE_CODE (init) == TREE_LIST)
5489 /* A parenthesized initializer, e.g.: int i (3, 2); ? */
5490 return any_value_dependent_elements_p (init);
5491 else if (TREE_CODE (init) == CONSTRUCTOR)
5492 /* A brace-enclosed initializer, e.g.: int i = { 3 }; ? */
5493 {
5494 VEC(constructor_elt, gc) *elts;
5495 size_t nelts;
5496 size_t i;
5497
5498 elts = CONSTRUCTOR_ELTS (init);
5499 nelts = VEC_length (constructor_elt, elts);
5500 for (i = 0; i < nelts; ++i)
5501 if (value_dependent_init_p (VEC_index (constructor_elt,
5502 elts, i)->value))
5503 return true;
5504 }
5505 else
5506 /* It must be a simple expression, e.g., int i = 3; */
5507 return value_dependent_expression_p (init);
5508
5509 return false;
5510}
5511
8d08fdba
MS
5512/* Finish processing of a declaration;
5513 install its line number and initial value.
5514 If the length of an array type is not known before,
5515 it must be determined now, from the initial value, or it is an error.
5516
d174af6c
MM
5517 INIT is the initializer (if any) for DECL. If INIT_CONST_EXPR_P is
5518 true, then INIT is an integral constant expression.
8d08fdba 5519
920f9474 5520 FLAGS is LOOKUP_ONLYCONVERTING if the = init syntax was used, else 0
f78c7bc6 5521 if the (init) syntax was used. */
8d08fdba
MS
5522
5523void
3db45ab5 5524cp_finish_decl (tree decl, tree init, bool init_const_expr_p,
d174af6c 5525 tree asmspec_tree, int flags)
8d08fdba 5526{
7e99327d 5527 tree type;
7e99327d 5528 tree cleanup;
9c0758dd 5529 const char *asmspec = NULL;
8d08fdba 5530 int was_readonly = 0;
745d26d9 5531 bool var_definition_p = false;
2b643eda 5532 int saved_processing_template_decl;
86a09a9e 5533 tree auto_node;
8d08fdba 5534
11325dcd
KL
5535 if (decl == error_mark_node)
5536 return;
5537 else if (! decl)
8d08fdba
MS
5538 {
5539 if (init)
8251199e 5540 error ("assignment (not initialization) in declaration");
8d08fdba
MS
5541 return;
5542 }
5543
50bc768d 5544 gcc_assert (TREE_CODE (decl) != RESULT_DECL);
2b643eda
MM
5545 /* Parameters are handled by store_parm_decls, not cp_finish_decl. */
5546 gcc_assert (TREE_CODE (decl) != PARM_DECL);
5547
5548 type = TREE_TYPE (decl);
5549 if (type == error_mark_node)
5550 return;
170b020f 5551
7e99327d
MM
5552 /* Assume no cleanup is required. */
5553 cleanup = NULL_TREE;
2b643eda 5554 saved_processing_template_decl = processing_template_decl;
7e99327d 5555
a4443a08 5556 /* If a name was specified, get the string. */
5f52c0e0 5557 if (global_scope_p (current_binding_level))
41c64394 5558 asmspec_tree = maybe_apply_renaming_pragma (decl, asmspec_tree);
4f543d15 5559 if (asmspec_tree && asmspec_tree != error_mark_node)
5cc90635 5560 asmspec = TREE_STRING_POINTER (asmspec_tree);
8d08fdba 5561
6ba89f8e 5562 if (current_class_type
4f1c5b7d 5563 && CP_DECL_CONTEXT (decl) == current_class_type
6ba89f8e
MM
5564 && TYPE_BEING_DEFINED (current_class_type)
5565 && (DECL_INITIAL (decl) || init))
3febd123 5566 DECL_INITIALIZED_IN_CLASS_P (decl) = 1;
6ba89f8e 5567
86a09a9e 5568 auto_node = type_uses_auto (type);
0a3098bb 5569 if (auto_node)
86a09a9e 5570 {
0a3098bb
JJ
5571 if (init == NULL_TREE)
5572 {
5573 error ("declaration of %q#D has no initializer", decl);
5574 TREE_TYPE (decl) = error_mark_node;
5575 return;
5576 }
ccafc19b
JM
5577 if (TREE_CODE (init) == TREE_LIST)
5578 init = build_x_compound_expr_from_list (init, "initializer");
5579 if (describable_type (init))
0a3098bb
JJ
5580 {
5581 type = TREE_TYPE (decl) = do_auto_deduction (type, init, auto_node);
5582 if (type == error_mark_node)
5583 return;
5584 }
86a09a9e
JM
5585 }
5586
3f6079dd
JM
5587 if (init && TREE_CODE (decl) == FUNCTION_DECL)
5588 {
2968d410 5589 tree clone;
3f6079dd
JM
5590 if (init == ridpointers[(int)RID_DELETE])
5591 {
5592 /* FIXME check this is 1st decl. */
5593 DECL_DELETED_FN (decl) = 1;
5594 DECL_DECLARED_INLINE_P (decl) = 1;
5595 DECL_INITIAL (decl) = error_mark_node;
2968d410
JM
5596 FOR_EACH_CLONE (clone, decl)
5597 {
5598 DECL_DELETED_FN (clone) = 1;
5599 DECL_DECLARED_INLINE_P (clone) = 1;
5600 DECL_INITIAL (clone) = error_mark_node;
5601 }
3f6079dd
JM
5602 init = NULL_TREE;
5603 }
5604 else if (init == ridpointers[(int)RID_DEFAULT])
5605 {
20f2653e
JM
5606 if (defaultable_fn_check (decl))
5607 DECL_DEFAULTED_FN (decl) = 1;
3f6079dd 5608 else
20f2653e 5609 DECL_INITIAL (decl) = NULL_TREE;
3f6079dd
JM
5610 }
5611 }
5612
5156628f 5613 if (processing_template_decl)
5566b478 5614 {
2b643eda
MM
5615 bool type_dependent_p;
5616
08ac397c 5617 /* Add this declaration to the statement-tree. */
170b020f 5618 if (at_function_scope_p ())
350fae66 5619 add_decl_expr (decl);
08ac397c 5620
2b643eda
MM
5621 type_dependent_p = dependent_type_p (type);
5622
7b3e2d46
DG
5623 if (check_for_bare_parameter_packs (init))
5624 {
5625 init = NULL_TREE;
5626 DECL_INITIAL (decl) = NULL_TREE;
5627 }
5628
3e03c959 5629 if (init && init_const_expr_p && TREE_CODE (decl) == VAR_DECL)
d174af6c 5630 {
2b643eda
MM
5631 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = 1;
5632 if (DECL_INTEGRAL_CONSTANT_VAR_P (decl))
5633 TREE_CONSTANT (decl) = 1;
d174af6c
MM
5634 }
5635
32a11c08
MM
5636 /* Generally, initializers in templates are expanded when the
5637 template is instantiated. But, if DECL is an integral
5638 constant static data member, then it can be used in future
5639 integral constant expressions, and its value must be
5640 available. */
5641 if (!(init
5642 && DECL_CLASS_SCOPE_P (decl)
5643 && DECL_INTEGRAL_CONSTANT_VAR_P (decl)
5644 && !type_dependent_p
5645 && !value_dependent_init_p (init)))
2b643eda
MM
5646 {
5647 if (init)
5648 DECL_INITIAL (decl) = init;
5649 if (TREE_CODE (decl) == VAR_DECL
5650 && !DECL_PRETTY_FUNCTION_P (decl)
5651 && !type_dependent_p)
5652 maybe_deduce_size_from_array_init (decl, init);
5653 goto finish_end;
5654 }
c8094d83 5655
a125de0c
PC
5656 if (TREE_CODE (init) == TREE_LIST)
5657 {
5658 /* If the parenthesized-initializer form was used (e.g.,
5659 "int A<N>::i(X)"), then INIT will be a TREE_LIST of initializer
5660 arguments. (There is generally only one.) We convert them
5661 individually. */
5662 tree list = init;
5663 for (; list; list = TREE_CHAIN (list))
5664 {
5665 tree elt = TREE_VALUE (list);
5666 TREE_VALUE (list) = fold_non_dependent_expr (elt);
5667 }
5668 }
5669 else
5670 init = fold_non_dependent_expr (init);
2b643eda 5671 processing_template_decl = 0;
5566b478 5672 }
3e41d13b 5673
8d08fdba
MS
5674 /* Take care of TYPE_DECLs up front. */
5675 if (TREE_CODE (decl) == TYPE_DECL)
5676 {
a0a33927 5677 if (type != error_mark_node
9e1e64ec 5678 && MAYBE_CLASS_TYPE_P (type) && DECL_NAME (decl))
8d08fdba
MS
5679 {
5680 if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
d4ee4d25 5681 warning (0, "shadowing previous type declaration of %q#D", decl);
4b0d3cbe 5682 set_identifier_type_value (DECL_NAME (decl), decl);
8d08fdba 5683 }
cffa8729
MS
5684
5685 /* If we have installed this as the canonical typedef for this
5686 type, and that type has not been defined yet, delay emitting
956d6950 5687 the debug information for it, as we will emit it later. */
d2e5ee5c 5688 if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
d0f062fb 5689 && !COMPLETE_TYPE_P (TREE_TYPE (decl)))
cffa8729
MS
5690 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
5691
0e6df31e
GK
5692 rest_of_decl_compilation (decl, DECL_CONTEXT (decl) == NULL_TREE,
5693 at_eof);
8d08fdba
MS
5694 goto finish_end;
5695 }
3e41d13b 5696
67935995 5697 /* A reference will be modified here, as it is initialized. */
c8094d83 5698 if (! DECL_EXTERNAL (decl)
67935995
MM
5699 && TREE_READONLY (decl)
5700 && TREE_CODE (type) == REFERENCE_TYPE)
8d08fdba 5701 {
8d08fdba 5702 was_readonly = 1;
67935995 5703 TREE_READONLY (decl) = 0;
8d08fdba
MS
5704 }
5705
437081d7 5706 if (TREE_CODE (decl) == VAR_DECL)
17bbb839 5707 {
c32097d8
JM
5708 /* Only variables with trivial initialization and destruction can
5709 have thread-local storage. */
5710 if (DECL_THREAD_LOCAL_P (decl)
5711 && (type_has_nontrivial_default_init (TREE_TYPE (decl))
5712 || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl))))
5713 error ("%qD cannot be thread-local because it has non-trivial "
5714 "type %qT", decl, TREE_TYPE (decl));
d23f3d60
MM
5715 /* If this is a local variable that will need a mangled name,
5716 register it now. We must do this before processing the
5717 initializer for the variable, since the initialization might
5718 require a guard variable, and since the mangled name of the
5719 guard variable will depend on the mangled name of this
5720 variable. */
b0eb6a8f 5721 if (DECL_FUNCTION_SCOPE_P (decl)
d23f3d60
MM
5722 && TREE_STATIC (decl)
5723 && !DECL_ARTIFICIAL (decl))
5724 push_local_name (decl);
17bbb839
MM
5725 /* Convert the initializer to the type of DECL, if we have not
5726 already initialized DECL. */
5727 if (!DECL_INITIALIZED_P (decl)
5728 /* If !DECL_EXTERNAL then DECL is being defined. In the
8e3df2de 5729 case of a static data member initialized inside the
17bbb839
MM
5730 class-specifier, there can be an initializer even if DECL
5731 is *not* defined. */
5732 && (!DECL_EXTERNAL (decl) || init))
5733 {
9e1e64ec 5734 if (TYPE_FOR_JAVA (type) && MAYBE_CLASS_TYPE_P (type))
360f866c
JJ
5735 {
5736 tree jclass
5737 = IDENTIFIER_GLOBAL_VALUE (get_identifier ("jclass"));
5738 /* Allow libjava/prims.cc define primitive classes. */
5739 if (init != NULL_TREE
5740 || jclass == NULL_TREE
5741 || TREE_CODE (jclass) != TYPE_DECL
5742 || !POINTER_TYPE_P (TREE_TYPE (jclass))
5743 || !same_type_ignoring_top_level_qualifiers_p
5744 (type, TREE_TYPE (TREE_TYPE (jclass))))
5745 error ("Java object %qD not allocated with %<new%>", decl);
5746 init = NULL_TREE;
5747 }
6c06fbce 5748 if (init)
d174af6c
MM
5749 {
5750 DECL_NONTRIVIALLY_INITIALIZED_P (decl) = 1;
5751 if (init_const_expr_p)
5752 {
5753 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = 1;
5754 if (DECL_INTEGRAL_CONSTANT_VAR_P (decl))
5755 TREE_CONSTANT (decl) = 1;
5756 }
5757 }
7e99327d 5758 init = check_initializer (decl, init, flags, &cleanup);
b4c20e52 5759 /* Thread-local storage cannot be dynamically initialized. */
c2f7fa15 5760 if (DECL_THREAD_LOCAL_P (decl) && init)
b4c20e52 5761 {
2d01edd7 5762 error ("%qD is thread-local and so cannot be dynamically "
b4c20e52
MM
5763 "initialized", decl);
5764 init = NULL_TREE;
5765 }
b794e321
MM
5766
5767 /* Check that the initializer for a static data member was a
1634705d 5768 constant. Although we check in the parser that the
b794e321
MM
5769 initializer is an integral constant expression, we do not
5770 simplify division-by-zero at the point at which it
5771 occurs. Therefore, in:
5772
5773 struct S { static const int i = 7 / 0; };
3db45ab5 5774
b794e321
MM
5775 we issue an error at this point. It would
5776 probably be better to forbid division by zero in
5777 integral constant expressions. */
8fe4d24b
NS
5778 if (DECL_EXTERNAL (decl) && init)
5779 {
8fe4d24b
NS
5780 error ("%qD cannot be initialized by a non-constant expression"
5781 " when being declared", decl);
5782 DECL_INITIALIZED_IN_CLASS_P (decl) = 0;
5783 init = NULL_TREE;
5784 }
c8094d83 5785
17bbb839 5786 /* Handle:
caf93cb0 5787
17bbb839 5788 [dcl.init]
caf93cb0 5789
17bbb839
MM
5790 The memory occupied by any object of static storage
5791 duration is zero-initialized at program startup before
5792 any other initialization takes place.
caf93cb0 5793
17bbb839
MM
5794 We cannot create an appropriate initializer until after
5795 the type of DECL is finalized. If DECL_INITIAL is set,
5796 then the DECL is statically initialized, and any
5797 necessary zero-initialization has already been performed. */
5798 if (TREE_STATIC (decl) && !DECL_INITIAL (decl))
5799 DECL_INITIAL (decl) = build_zero_init (TREE_TYPE (decl),
1cb8292f 5800 /*nelts=*/NULL_TREE,
17bbb839
MM
5801 /*static_storage_p=*/true);
5802 /* Remember that the initialization for this variable has
5803 taken place. */
5804 DECL_INITIALIZED_P (decl) = 1;
745d26d9
MM
5805 /* This declaration is the definition of this variable,
5806 unless we are initializing a static data member within
5807 the class specifier. */
5808 if (!DECL_EXTERNAL (decl))
5809 var_definition_p = true;
17bbb839 5810 }
d881ff25
MM
5811 /* If the variable has an array type, lay out the type, even if
5812 there is no initializer. It is valid to index through the
5813 array, and we must get TYPE_ALIGN set correctly on the array
5814 type. */
5815 else if (TREE_CODE (type) == ARRAY_TYPE)
5816 layout_type (type);
b646ba3f
DS
5817
5818 if (!processing_template_decl
5819 && TREE_STATIC (decl)
5820 && !at_function_scope_p ()
5821 && current_function_decl == NULL)
5822 /* So decl is a global variable or a static member of a
5823 non local class. Record the types it uses
5824 so that we can decide later to emit debug info for them. */
5825 record_types_used_by_current_var_decl (decl);
17bbb839 5826 }
360f866c 5827 else if (TREE_CODE (decl) == FIELD_DECL
9e1e64ec 5828 && TYPE_FOR_JAVA (type) && MAYBE_CLASS_TYPE_P (type))
360f866c 5829 error ("non-static data member %qD has Java class type", decl);
3e41d13b 5830
57cf57fb 5831 /* Add this declaration to the statement-tree. This needs to happen
350fae66
RK
5832 after the call to check_initializer so that the DECL_EXPR for a
5833 reference temp is added before the DECL_EXPR for the reference itself. */
170b020f 5834 if (at_function_scope_p ())
350fae66 5835 add_decl_expr (decl);
08ac397c 5836
da71e18c
MM
5837 /* Let the middle end know about variables and functions -- but not
5838 static data members in uninstantiated class templates. */
5839 if (!saved_processing_template_decl
5840 && (TREE_CODE (decl) == VAR_DECL
5841 || TREE_CODE (decl) == FUNCTION_DECL))
8d08fdba 5842 {
27778b73 5843 if (TREE_CODE (decl) == VAR_DECL)
da71e18c
MM
5844 {
5845 layout_var_decl (decl);
5846 maybe_commonize_var (decl);
5847 }
8d08fdba 5848
4c5bae34
RS
5849 /* This needs to happen after the linkage is set. */
5850 determine_visibility (decl);
5851
b0eb6a8f
JJ
5852 if (var_definition_p && TREE_STATIC (decl))
5853 {
5854 /* If a TREE_READONLY variable needs initialization
5855 at runtime, it is no longer readonly and we need to
5856 avoid MEM_READONLY_P being set on RTL created for it. */
5857 if (init)
5858 {
5859 if (TREE_READONLY (decl))
5860 TREE_READONLY (decl) = 0;
5861 was_readonly = 0;
5862 }
5863 else if (was_readonly)
5864 TREE_READONLY (decl) = 1;
5865 }
5866
27778b73 5867 make_rtl_for_nonlocal_decl (decl, init, asmspec);
8d08fdba 5868
7fb213d8
GB
5869 /* Check for abstractness of the type. Notice that there is no
5870 need to strip array types here since the check for those types
5871 is already done within create_array_type_for_decl. */
68642fb6 5872 if (TREE_CODE (type) == FUNCTION_TYPE
27778b73 5873 || TREE_CODE (type) == METHOD_TYPE)
7fb213d8 5874 abstract_virtuals_error (decl, TREE_TYPE (type));
68642fb6 5875 else
cfb91b67 5876 abstract_virtuals_error (decl, type);
8d08fdba 5877
b87d79e6 5878 if (TREE_TYPE (decl) == error_mark_node)
8e3df2de 5879 /* No initialization required. */
faae18ab 5880 ;
b87d79e6
JM
5881 else if (TREE_CODE (decl) == FUNCTION_DECL)
5882 {
5883 if (init)
5884 {
3f6079dd 5885 if (init == ridpointers[(int)RID_DEFAULT])
b87d79e6 5886 {
3f6079dd
JM
5887 /* An out-of-class default definition is defined at
5888 the point where it is explicitly defaulted. */
5889 if (DECL_INITIAL (decl) == error_mark_node)
5890 synthesize_method (decl);
b87d79e6
JM
5891 }
5892 else
5893 error ("function %q#D is initialized like a variable", decl);
5894 }
5895 /* else no initialization required. */
5896 }
67d743fe
MS
5897 else if (DECL_EXTERNAL (decl)
5898 && ! (DECL_LANG_SPECIFIC (decl)
5899 && DECL_NOT_REALLY_EXTERN (decl)))
5566b478
MS
5900 {
5901 if (init)
5902 DECL_INITIAL (decl) = init;
5903 }
b0eb6a8f
JJ
5904 /* A variable definition. */
5905 else if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
5906 /* Initialize the local variable. */
5907 initialize_local_var (decl, init);
5908
5909 /* If a variable is defined, and then a subsequent
5910 definition with external linkage is encountered, we will
5911 get here twice for the same variable. We want to avoid
5912 calling expand_static_init more than once. For variables
5913 that are not static data members, we can call
5914 expand_static_init only when we actually process the
5915 initializer. It is not legal to redeclare a static data
5916 member, so this issue does not arise in that case. */
5917 else if (var_definition_p && TREE_STATIC (decl))
5918 expand_static_init (decl, init);
8d08fdba
MS
5919 }
5920
7e99327d
MM
5921 /* If a CLEANUP_STMT was created to destroy a temporary bound to a
5922 reference, insert it in the statement-tree now. */
5923 if (cleanup)
325c3691 5924 push_cleanup (decl, cleanup, false);
7e99327d 5925
8d08fdba 5926 finish_end:
2b643eda 5927 processing_template_decl = saved_processing_template_decl;
8d08fdba 5928
8d08fdba
MS
5929 if (was_readonly)
5930 TREE_READONLY (decl) = 1;
d1bd0ded
GK
5931
5932 /* If this was marked 'used', be sure it will be output. */
5933 if (lookup_attribute ("used", DECL_ATTRIBUTES (decl)))
bb9a388d 5934 mark_decl_referenced (decl);
8d08fdba
MS
5935}
5936
db4283a0
MM
5937/* Returns a declaration for a VAR_DECL as if:
5938
5939 extern "C" TYPE NAME;
5940
5941 had been seen. Used to create compiler-generated global
5942 variables. */
5943
993acaec 5944static tree
11f6b451 5945declare_global_var (tree name, tree type)
db4283a0
MM
5946{
5947 tree decl;
5948
5949 push_to_top_level ();
c2255bc4 5950 decl = build_decl (input_location, VAR_DECL, name, type);
db4283a0
MM
5951 TREE_PUBLIC (decl) = 1;
5952 DECL_EXTERNAL (decl) = 1;
5953 DECL_ARTIFICIAL (decl) = 1;
de3fe73c
MM
5954 /* If the user has explicitly declared this variable (perhaps
5955 because the code we are compiling is part of a low-level runtime
5956 library), then it is possible that our declaration will be merged
5957 with theirs by pushdecl. */
5958 decl = pushdecl (decl);
3600f678 5959 cp_finish_decl (decl, NULL_TREE, false, NULL_TREE, 0);
db4283a0
MM
5960 pop_from_top_level ();
5961
5962 return decl;
5963}
5964
46a9e521
MM
5965/* Returns the type for the argument to "__cxa_atexit" (or "atexit",
5966 if "__cxa_atexit" is not being used) corresponding to the function
5967 to be called when the program exits. */
5968
5969static tree
5970get_atexit_fn_ptr_type (void)
5971{
5972 tree arg_types;
5973 tree fn_type;
5974
5975 if (!atexit_fn_ptr_type_node)
5976 {
5977 if (flag_use_cxa_atexit
5978 && !targetm.cxx.use_atexit_for_cxa_atexit ())
5979 /* The parameter to "__cxa_atexit" is "void (*)(void *)". */
5980 arg_types = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
5981 else
5982 /* The parameter to "atexit" is "void (*)(void)". */
5983 arg_types = void_list_node;
5984
5985 fn_type = build_function_type (void_type_node, arg_types);
5986 atexit_fn_ptr_type_node = build_pointer_type (fn_type);
5987 }
5988
5989 return atexit_fn_ptr_type_node;
5990}
5991
db4283a0 5992/* Returns a pointer to the `atexit' function. Note that if
838dfd8a 5993 FLAG_USE_CXA_ATEXIT is nonzero, then this will actually be the new
db4283a0
MM
5994 `__cxa_atexit' function specified in the IA64 C++ ABI. */
5995
5996static tree
11f6b451 5997get_atexit_node (void)
db4283a0
MM
5998{
5999 tree atexit_fndecl;
6000 tree arg_types;
6001 tree fn_type;
6002 tree fn_ptr_type;
6003 const char *name;
9f62c3e3 6004 bool use_aeabi_atexit;
db4283a0
MM
6005
6006 if (atexit_node)
6007 return atexit_node;
6008
97388150 6009 if (flag_use_cxa_atexit && !targetm.cxx.use_atexit_for_cxa_atexit ())
db4283a0
MM
6010 {
6011 /* The declaration for `__cxa_atexit' is:
6012
6013 int __cxa_atexit (void (*)(void *), void *, void *)
6014
6015 We build up the argument types and then then function type
6016 itself. */
68642fb6 6017
9f62c3e3 6018 use_aeabi_atexit = targetm.cxx.use_aeabi_atexit ();
db4283a0
MM
6019 /* First, build the pointer-to-function type for the first
6020 argument. */
46a9e521 6021 fn_ptr_type = get_atexit_fn_ptr_type ();
db4283a0
MM
6022 /* Then, build the rest of the argument types. */
6023 arg_types = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
9f62c3e3
PB
6024 if (use_aeabi_atexit)
6025 {
6026 arg_types = tree_cons (NULL_TREE, fn_ptr_type, arg_types);
6027 arg_types = tree_cons (NULL_TREE, ptr_type_node, arg_types);
6028 }
6029 else
6030 {
6031 arg_types = tree_cons (NULL_TREE, ptr_type_node, arg_types);
6032 arg_types = tree_cons (NULL_TREE, fn_ptr_type, arg_types);
6033 }
db4283a0
MM
6034 /* And the final __cxa_atexit type. */
6035 fn_type = build_function_type (integer_type_node, arg_types);
6036 fn_ptr_type = build_pointer_type (fn_type);
9f62c3e3
PB
6037 if (use_aeabi_atexit)
6038 name = "__aeabi_atexit";
6039 else
6040 name = "__cxa_atexit";
db4283a0
MM
6041 }
6042 else
6043 {
6044 /* The declaration for `atexit' is:
68642fb6 6045
0cbd7506 6046 int atexit (void (*)());
db4283a0
MM
6047
6048 We build up the argument types and then then function type
6049 itself. */
46a9e521 6050 fn_ptr_type = get_atexit_fn_ptr_type ();
db4283a0
MM
6051 arg_types = tree_cons (NULL_TREE, fn_ptr_type, void_list_node);
6052 /* Build the final atexit type. */
6053 fn_type = build_function_type (integer_type_node, arg_types);
6054 name = "atexit";
6055 }
6056
6057 /* Now, build the function declaration. */
6058 push_lang_context (lang_name_c);
0c11ada6 6059 atexit_fndecl = build_library_fn_ptr (name, fn_type);
db4283a0
MM
6060 mark_used (atexit_fndecl);
6061 pop_lang_context ();
0a72704b 6062 atexit_node = decay_conversion (atexit_fndecl);
db4283a0
MM
6063
6064 return atexit_node;
6065}
6066
6067/* Returns the __dso_handle VAR_DECL. */
6068
6069static tree
11f6b451 6070get_dso_handle_node (void)
db4283a0
MM
6071{
6072 if (dso_handle_node)
6073 return dso_handle_node;
6074
6075 /* Declare the variable. */
6076 dso_handle_node = declare_global_var (get_identifier ("__dso_handle"),
6077 ptr_type_node);
6078
6079 return dso_handle_node;
6080}
6081
6082/* Begin a new function with internal linkage whose job will be simply
6083 to destroy some particular variable. */
6084
d192828a
GK
6085static GTY(()) int start_cleanup_cnt;
6086
db4283a0 6087static tree
11f6b451 6088start_cleanup_fn (void)
db4283a0 6089{
db4283a0 6090 char name[32];
db4283a0
MM
6091 tree fntype;
6092 tree fndecl;
97388150
DS
6093 bool use_cxa_atexit = flag_use_cxa_atexit
6094 && !targetm.cxx.use_atexit_for_cxa_atexit ();
db4283a0
MM
6095
6096 push_to_top_level ();
6097
6098 /* No need to mangle this. */
6099 push_lang_context (lang_name_c);
6100
db4283a0 6101 /* Build the name of the function. */
d192828a 6102 sprintf (name, "__tcf_%d", start_cleanup_cnt++);
db4283a0 6103 /* Build the function declaration. */
46a9e521 6104 fntype = TREE_TYPE (get_atexit_fn_ptr_type ());
db4283a0
MM
6105 fndecl = build_lang_decl (FUNCTION_DECL, get_identifier (name), fntype);
6106 /* It's a function with internal linkage, generated by the
6107 compiler. */
6108 TREE_PUBLIC (fndecl) = 0;
6109 DECL_ARTIFICIAL (fndecl) = 1;
5a728aca
MM
6110 /* Make the function `inline' so that it is only emitted if it is
6111 actually needed. It is unlikely that it will be inlined, since
aba649ba 6112 it is only called via a function pointer, but we avoid unnecessary
5a728aca 6113 emissions this way. */
3b14bb39 6114 DECL_DECLARED_INLINE_P (fndecl) = 1;
d4d1ebc1 6115 DECL_INTERFACE_KNOWN (fndecl) = 1;
db4283a0 6116 /* Build the parameter. */
97388150 6117 if (use_cxa_atexit)
db4283a0
MM
6118 {
6119 tree parmdecl;
6120
8e51619a 6121 parmdecl = cp_build_parm_decl (NULL_TREE, ptr_type_node);
db4283a0 6122 DECL_CONTEXT (parmdecl) = fndecl;
db4283a0
MM
6123 TREE_USED (parmdecl) = 1;
6124 DECL_ARGUMENTS (fndecl) = parmdecl;
6125 }
6126
09ed39ad 6127 pushdecl (fndecl);
058b15c1 6128 start_preparsed_function (fndecl, NULL_TREE, SF_PRE_PARSED);
db4283a0 6129
db4283a0
MM
6130 pop_lang_context ();
6131
6132 return current_function_decl;
6133}
6134
6135/* Finish the cleanup function begun by start_cleanup_fn. */
6136
6137static void
11f6b451 6138end_cleanup_fn (void)
db4283a0 6139{
8cd2462c 6140 expand_or_defer_fn (finish_function (0));
db4283a0
MM
6141
6142 pop_from_top_level ();
6143}
6144
bf419747
MM
6145/* Generate code to handle the destruction of DECL, an object with
6146 static storage duration. */
f0105ed3 6147
40aac948 6148tree
11f6b451 6149register_dtor_fn (tree decl)
f0105ed3 6150{
db4283a0 6151 tree cleanup;
f0105ed3 6152 tree compound_stmt;
db4283a0
MM
6153 tree args;
6154 tree fcall;
46a9e521
MM
6155 tree type;
6156 bool use_dtor;
f0105ed3 6157
46a9e521
MM
6158 type = TREE_TYPE (decl);
6159 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
40aac948 6160 return void_zero_node;
bf419747 6161
46a9e521
MM
6162 /* If we're using "__cxa_atexit" (or "__aeabi_atexit"), and DECL is
6163 a class object, we can just pass the destructor to
6164 "__cxa_atexit"; we don't have to build a temporary function to do
6165 the cleanup. */
6166 use_dtor = (flag_use_cxa_atexit
6167 && !targetm.cxx.use_atexit_for_cxa_atexit ()
6168 && CLASS_TYPE_P (type));
6169 if (use_dtor)
6170 {
6171 int idx;
6172
6173 /* Find the destructor. */
6174 idx = lookup_fnfields_1 (type, complete_dtor_identifier);
6175 gcc_assert (idx >= 0);
6176 cleanup = VEC_index (tree, CLASSTYPE_METHOD_VEC (type), idx);
6177 /* Make sure it is accessible. */
6178 perform_or_defer_access_check (TYPE_BINFO (type), cleanup, cleanup);
6179 }
6180 else
6181 {
6182 /* Call build_cleanup before we enter the anonymous function so
6183 that any access checks will be done relative to the current
6184 scope, rather than the scope of the anonymous function. */
6185 build_cleanup (decl);
6186
6187 /* Now start the function. */
6188 cleanup = start_cleanup_fn ();
6189
6190 /* Now, recompute the cleanup. It may contain SAVE_EXPRs that refer
6191 to the original function, rather than the anonymous one. That
6192 will make the back end think that nested functions are in use,
6193 which causes confusion. */
6194 push_deferring_access_checks (dk_no_check);
6195 fcall = build_cleanup (decl);
6196 pop_deferring_access_checks ();
6197
6198 /* Create the body of the anonymous function. */
6199 compound_stmt = begin_compound_stmt (BCS_FN_BODY);
6200 finish_expr_stmt (fcall);
6201 finish_compound_stmt (compound_stmt);
6202 end_cleanup_fn ();
6203 }
f0105ed3
MM
6204
6205 /* Call atexit with the cleanup function. */
bb4f6e6b 6206 mark_used (cleanup);
46a9e521 6207 cleanup = build_address (cleanup);
97388150 6208 if (flag_use_cxa_atexit && !targetm.cxx.use_atexit_for_cxa_atexit ())
db4283a0 6209 {
46a9e521
MM
6210 tree addr;
6211
6212 if (use_dtor)
6213 {
6214 /* We must convert CLEANUP to the type that "__cxa_atexit"
6215 expects. */
6216 cleanup = build_nop (get_atexit_fn_ptr_type (), cleanup);
6217 /* "__cxa_atexit" will pass the address of DECL to the
6218 cleanup function. */
6219 mark_used (decl);
6220 addr = build_address (decl);
6221 /* The declared type of the parameter to "__cxa_atexit" is
6222 "void *". For plain "T*", we could just let the
5ade1ed2 6223 machinery in cp_build_function_call convert it -- but if the
46a9e521
MM
6224 type is "cv-qualified T *", then we need to convert it
6225 before passing it in, to avoid spurious errors. */
6226 addr = build_nop (ptr_type_node, addr);
6227 }
6228 else
6229 /* Since the cleanup functions we build ignore the address
6230 they're given, there's no reason to pass the actual address
6231 in, and, in general, it's cheaper to pass NULL than any
6232 other value. */
6233 addr = null_pointer_node;
caf93cb0 6234 args = tree_cons (NULL_TREE,
5ade1ed2
DG
6235 cp_build_unary_op (ADDR_EXPR, get_dso_handle_node (), 0,
6236 tf_warning_or_error),
0f268005 6237 NULL_TREE);
9f62c3e3
PB
6238 if (targetm.cxx.use_aeabi_atexit ())
6239 {
6240 args = tree_cons (NULL_TREE, cleanup, args);
46a9e521 6241 args = tree_cons (NULL_TREE, addr, args);
9f62c3e3
PB
6242 }
6243 else
6244 {
46a9e521 6245 args = tree_cons (NULL_TREE, addr, args);
9f62c3e3
PB
6246 args = tree_cons (NULL_TREE, cleanup, args);
6247 }
db4283a0
MM
6248 }
6249 else
6250 args = tree_cons (NULL_TREE, cleanup, NULL_TREE);
5ade1ed2
DG
6251 return cp_build_function_call (get_atexit_node (), args,
6252 tf_warning_or_error);
f0105ed3
MM
6253}
6254
8e3df2de
MM
6255/* DECL is a VAR_DECL with static storage duration. INIT, if present,
6256 is its initializer. Generate code to handle the construction
6257 and destruction of DECL. */
6258
6259static void
11f6b451 6260expand_static_init (tree decl, tree init)
8d08fdba 6261{
50bc768d
NS
6262 gcc_assert (TREE_CODE (decl) == VAR_DECL);
6263 gcc_assert (TREE_STATIC (decl));
8e3df2de
MM
6264
6265 /* Some variables require no initialization. */
caf93cb0 6266 if (!init
8e3df2de
MM
6267 && !TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))
6268 && TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
6269 return;
6270
eba6cfb6 6271 if (DECL_FUNCTION_SCOPE_P (decl))
8d08fdba
MS
6272 {
6273 /* Emit code to perform this initialization but once. */
445cf5eb
JM
6274 tree if_stmt = NULL_TREE, inner_if_stmt = NULL_TREE;
6275 tree then_clause = NULL_TREE, inner_then_clause = NULL_TREE;
94a0dd7b 6276 tree guard, guard_addr;
40aac948
JM
6277 tree acquire_fn, release_fn, abort_fn;
6278 tree flag, begin;
8d08fdba 6279
2036a15c
MM
6280 /* Emit code to perform this initialization but once. This code
6281 looks like:
6282
0cbd7506
MS
6283 static <type> guard;
6284 if (!guard.first_byte) {
40aac948
JM
6285 if (__cxa_guard_acquire (&guard)) {
6286 bool flag = false;
6287 try {
0cbd7506
MS
6288 // Do initialization.
6289 flag = true; __cxa_guard_release (&guard);
6290 // Register variable for destruction at end of program.
40aac948 6291 } catch {
0cbd7506 6292 if (!flag) __cxa_guard_abort (&guard);
40aac948 6293 }
2036a15c
MM
6294 }
6295
40aac948 6296 Note that the `flag' variable is only set to 1 *after* the
2036a15c
MM
6297 initialization is complete. This ensures that an exception,
6298 thrown during the construction, will cause the variable to
6299 reinitialized when we pass through this code again, as per:
68642fb6 6300
2036a15c
MM
6301 [stmt.dcl]
6302
c8094d83 6303 If the initialization exits by throwing an exception, the
2036a15c
MM
6304 initialization is not complete, so it will be tried again
6305 the next time control enters the declaration.
6306
0cbd7506 6307 This process should be thread-safe, too; multiple threads
40aac948
JM
6308 should not be able to initialize the variable more than
6309 once. */
c395453c
MM
6310
6311 /* Create the guard variable. */
6312 guard = get_guard (decl);
2036a15c 6313
445cf5eb
JM
6314 /* This optimization isn't safe on targets with relaxed memory
6315 consistency. On such targets we force synchronization in
6316 __cxa_guard_acquire. */
6317 if (!targetm.relaxed_ordering || !flag_threadsafe_statics)
6318 {
6319 /* Begin the conditional initialization. */
6320 if_stmt = begin_if_stmt ();
6321 finish_if_stmt_cond (get_guard_cond (guard), if_stmt);
6322 then_clause = begin_compound_stmt (BCS_NO_SCOPE);
6323 }
40aac948
JM
6324
6325 if (flag_threadsafe_statics)
6326 {
6327 guard_addr = build_address (guard);
40aac948
JM
6328
6329 acquire_fn = get_identifier ("__cxa_guard_acquire");
6330 release_fn = get_identifier ("__cxa_guard_release");
6331 abort_fn = get_identifier ("__cxa_guard_abort");
6332 if (!get_global_value_if_present (acquire_fn, &acquire_fn))
6333 {
6334 tree argtypes = tree_cons (NULL_TREE, TREE_TYPE (guard_addr),
6335 void_list_node);
6336 tree vfntype = build_function_type (void_type_node, argtypes);
6337 acquire_fn = push_library_fn
448083e5
PC
6338 (acquire_fn, build_function_type (integer_type_node, argtypes),
6339 NULL_TREE);
6340 release_fn = push_library_fn (release_fn, vfntype, NULL_TREE);
6341 abort_fn = push_library_fn (abort_fn, vfntype, NULL_TREE);
40aac948
JM
6342 }
6343 else
6344 {
6345 release_fn = identifier_global_value (release_fn);
6346 abort_fn = identifier_global_value (abort_fn);
6347 }
6348
6349 inner_if_stmt = begin_if_stmt ();
94a0dd7b 6350 finish_if_stmt_cond (build_call_n (acquire_fn, 1, guard_addr),
40aac948
JM
6351 inner_if_stmt);
6352
6353 inner_then_clause = begin_compound_stmt (BCS_NO_SCOPE);
6354 begin = get_target_expr (boolean_false_node);
6355 flag = TARGET_EXPR_SLOT (begin);
6356
6357 TARGET_EXPR_CLEANUP (begin)
81eba3a8
KH
6358 = build3 (COND_EXPR, void_type_node, flag,
6359 void_zero_node,
94a0dd7b 6360 build_call_n (abort_fn, 1, guard_addr));
40aac948
JM
6361 CLEANUP_EH_ONLY (begin) = 1;
6362
6363 /* Do the initialization itself. */
6364 init = add_stmt_to_compound (begin, init);
6365 init = add_stmt_to_compound
81eba3a8 6366 (init, build2 (MODIFY_EXPR, void_type_node, flag, boolean_true_node));
40aac948 6367 init = add_stmt_to_compound
94a0dd7b 6368 (init, build_call_n (release_fn, 1, guard_addr));
40aac948 6369 }
f1dedc31 6370 else
40aac948 6371 init = add_stmt_to_compound (init, set_guard (guard));
72b7eeff 6372
2036a15c
MM
6373 /* Use atexit to register a function for destroying this static
6374 variable. */
40aac948
JM
6375 init = add_stmt_to_compound (init, register_dtor_fn (decl));
6376
6377 finish_expr_stmt (init);
6378
6379 if (flag_threadsafe_statics)
6380 {
6381 finish_compound_stmt (inner_then_clause);
6382 finish_then_clause (inner_if_stmt);
6383 finish_if_stmt (inner_if_stmt);
6384 }
72b7eeff 6385
445cf5eb
JM
6386 if (!targetm.relaxed_ordering || !flag_threadsafe_statics)
6387 {
6388 finish_compound_stmt (then_clause);
6389 finish_then_clause (if_stmt);
6390 finish_if_stmt (if_stmt);
6391 }
8d08fdba
MS
6392 }
6393 else
bbd15aac 6394 static_aggregates = tree_cons (init, decl, static_aggregates);
8d08fdba 6395}
3c5c0849 6396
8d08fdba
MS
6397\f
6398/* Make TYPE a complete type based on INITIAL_VALUE.
6399 Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
07900878
PC
6400 2 if there was no information (in which case assume 0 if DO_DEFAULT),
6401 3 if the initializer list is empty (in pedantic mode). */
8d08fdba
MS
6402
6403int
aab038d5 6404cp_complete_array_type (tree *ptype, tree initial_value, bool do_default)
8d08fdba 6405{
aab038d5
RH
6406 int failure;
6407 tree type, elt_type;
68642fb6 6408
8d08fdba
MS
6409 if (initial_value)
6410 {
49b5e2f6
DG
6411 unsigned HOST_WIDE_INT i;
6412 tree value;
6413
7b019c19 6414 /* An array of character type can be initialized from a
4038c495
GB
6415 brace-enclosed string constant.
6416
6417 FIXME: this code is duplicated from reshape_init. Probably
6418 we should just call reshape_init here? */
aab038d5 6419 if (char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (*ptype)))
7b019c19 6420 && TREE_CODE (initial_value) == CONSTRUCTOR
4038c495
GB
6421 && !VEC_empty (constructor_elt, CONSTRUCTOR_ELTS (initial_value)))
6422 {
6423 VEC(constructor_elt,gc) *v = CONSTRUCTOR_ELTS (initial_value);
6424 tree value = VEC_index (constructor_elt, v, 0)->value;
6425
6426 if (TREE_CODE (value) == STRING_CST
6427 && VEC_length (constructor_elt, v) == 1)
6428 initial_value = value;
6429 }
49b5e2f6
DG
6430
6431 /* If any of the elements are parameter packs, we can't actually
6432 complete this type now because the array size is dependent. */
6433 if (TREE_CODE (initial_value) == CONSTRUCTOR)
6434 {
6435 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (initial_value),
6436 i, value)
6437 {
6438 if (PACK_EXPANSION_P (value))
6439 return 0;
6440 }
6441 }
8d08fdba
MS
6442 }
6443
aab038d5 6444 failure = complete_array_type (ptype, initial_value, do_default);
8d08fdba 6445
aab038d5
RH
6446 /* We can create the array before the element type is complete, which
6447 means that we didn't have these two bits set in the original type
6448 either. In completing the type, we are expected to propagate these
6449 bits. See also complete_type which does the same thing for arrays
6450 of fixed size. */
6451 type = *ptype;
6452 if (TYPE_DOMAIN (type))
8d08fdba 6453 {
81b4398d 6454 elt_type = TREE_TYPE (type);
aab038d5 6455 TYPE_NEEDS_CONSTRUCTING (type) = TYPE_NEEDS_CONSTRUCTING (elt_type);
81b4398d 6456 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
aab038d5 6457 = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (elt_type);
8d08fdba
MS
6458 }
6459
aab038d5 6460 return failure;
8d08fdba
MS
6461}
6462\f
6463/* Return zero if something is declared to be a member of type
6464 CTYPE when in the context of CUR_TYPE. STRING is the error
6465 message to print in that case. Otherwise, quietly return 1. */
e92cc029 6466
8d08fdba 6467static int
11f6b451 6468member_function_or_else (tree ctype, tree cur_type, enum overload_flags flags)
8d08fdba
MS
6469{
6470 if (ctype && ctype != cur_type)
6471 {
4dacf5bd 6472 if (flags == DTOR_FLAG)
2d01edd7 6473 error ("destructor for alien class %qT cannot be a member", ctype);
4dacf5bd 6474 else
2d01edd7 6475 error ("constructor for alien class %qT cannot be a member", ctype);
8d08fdba
MS
6476 return 0;
6477 }
6478 return 1;
6479}
6480\f
6481/* Subroutine of `grokdeclarator'. */
6482
6483/* Generate errors possibly applicable for a given set of specifiers.
6484 This is for ARM $7.1.2. */
e92cc029 6485
8d08fdba 6486static void
11f6b451 6487bad_specifiers (tree object,
0cbd7506
MS
6488 const char* type,
6489 int virtualp,
6490 int quals,
6491 int inlinep,
6492 int friendp,
6493 int raises)
8d08fdba
MS
6494{
6495 if (virtualp)
2d01edd7 6496 error ("%qD declared as a %<virtual%> %s", object, type);
8d08fdba 6497 if (inlinep)
2d01edd7 6498 error ("%qD declared as an %<inline%> %s", object, type);
8d08fdba 6499 if (quals)
2d01edd7 6500 error ("%<const%> and %<volatile%> function specifiers on "
0cbd7506
MS
6501 "%qD invalid in %s declaration",
6502 object, type);
8d08fdba 6503 if (friendp)
dee15844 6504 error ("%q+D declared as a friend", object);
e1be26f4
RS
6505 if (raises
6506 && (TREE_CODE (object) == TYPE_DECL
6507 || (!TYPE_PTRFN_P (TREE_TYPE (object))
742a37d5 6508 && !TYPE_REFFN_P (TREE_TYPE (object))
e1be26f4 6509 && !TYPE_PTRMEMFUNC_P (TREE_TYPE (object)))))
dee15844 6510 error ("%q+D declared with an exception specification", object);
8d08fdba
MS
6511}
6512
9c12301f
MM
6513/* DECL is a member function or static data member and is presently
6514 being defined. Check that the definition is taking place in a
6515 valid namespace. */
6516
6517static void
6518check_class_member_definition_namespace (tree decl)
6519{
6520 /* These checks only apply to member functions and static data
6521 members. */
6522 gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
6523 || TREE_CODE (decl) == VAR_DECL);
6524 /* We check for problems with specializations in pt.c in
6525 check_specialization_namespace, where we can issue better
6526 diagnostics. */
6527 if (processing_specialization)
6528 return;
6529 /* There are no restrictions on the placement of
6530 explicit instantiations. */
6531 if (processing_explicit_instantiation)
6532 return;
6533 /* [class.mfct]
6534
6535 A member function definition that appears outside of the
6536 class definition shall appear in a namespace scope enclosing
6537 the class definition.
6538
6539 [class.static.data]
6540
6541 The definition for a static data member shall appear in a
6542 namespace scope enclosing the member's class definition. */
6543 if (!is_ancestor (current_namespace, DECL_CONTEXT (decl)))
cbe5f3b3 6544 permerror (input_location, "definition of %qD is not in namespace enclosing %qT",
37ec60ed 6545 decl, DECL_CONTEXT (decl));
9c12301f
MM
6546}
6547
e2537f2c
MM
6548/* Build a PARM_DECL for the "this" parameter. TYPE is the
6549 METHOD_TYPE for a non-static member function; QUALS are the
6550 cv-qualifiers that apply to the function. */
3db45ab5 6551
e2537f2c
MM
6552tree
6553build_this_parm (tree type, cp_cv_quals quals)
6554{
6555 tree this_type;
6556 tree qual_type;
6557 tree parm;
6558 cp_cv_quals this_quals;
6559
6560 this_type = TREE_VALUE (TYPE_ARG_TYPES (type));
6561 /* The `this' parameter is implicitly `const'; it cannot be
6562 assigned to. */
6563 this_quals = (quals & TYPE_QUAL_RESTRICT) | TYPE_QUAL_CONST;
6564 qual_type = cp_build_qualified_type (this_type, this_quals);
6565 parm = build_artificial_parm (this_identifier, qual_type);
6566 cp_apply_type_quals_to_decl (this_quals, parm);
6567 return parm;
3db45ab5 6568}
e2537f2c 6569
8d08fdba
MS
6570/* CTYPE is class type, or null if non-class.
6571 TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
6572 or METHOD_TYPE.
6573 DECLARATOR is the function's name.
4546865e 6574 PARMS is a chain of PARM_DECLs for the function.
8d08fdba
MS
6575 VIRTUALP is truthvalue of whether the function is virtual or not.
6576 FLAGS are to be passed through to `grokclassfn'.
6577 QUALS are qualifiers indicating whether the function is `const'
6578 or `volatile'.
6579 RAISES is a list of exceptions that this function can raise.
6580 CHECK is 1 if we must find this method in CTYPE, 0 if we should
68642fb6 6581 not look, and -1 if we should not call `grokclassfn' at all.
3ddfb0e6 6582
27d6592c
MM
6583 SFK is the kind of special function (if any) for the new function.
6584
20496fa2 6585 Returns `NULL_TREE' if something goes wrong, after issuing
3ddfb0e6 6586 applicable error messages. */
e92cc029 6587
8d08fdba 6588static tree
caf93cb0 6589grokfndecl (tree ctype,
0cbd7506
MS
6590 tree type,
6591 tree declarator,
4546865e 6592 tree parms,
0cbd7506
MS
6593 tree orig_declarator,
6594 int virtualp,
6595 enum overload_flags flags,
3c01e5df 6596 cp_cv_quals quals,
0cbd7506
MS
6597 tree raises,
6598 int check,
6599 int friendp,
6600 int publicp,
6601 int inlinep,
27d6592c 6602 special_function_kind sfk,
357d956e 6603 bool funcdef_flag,
0cbd7506
MS
6604 int template_count,
6605 tree in_namespace,
402b8cf6
AH
6606 tree* attrlist,
6607 location_t location)
8d08fdba 6608{
1951a1b6 6609 tree decl;
8d08fdba 6610 int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
42976354 6611 tree t;
8d08fdba 6612
8d08fdba 6613 if (raises)
271e6f02 6614 type = build_exception_variant (type, raises);
c11b6f21 6615
8d08fdba 6616 decl = build_lang_decl (FUNCTION_DECL, declarator, type);
402b8cf6
AH
6617
6618 /* If we have an explicit location, use it, otherwise use whatever
6619 build_lang_decl used (probably input_location). */
6620 if (location != UNKNOWN_LOCATION)
6621 DECL_SOURCE_LOCATION (decl) = location;
6622
e2537f2c
MM
6623 if (TREE_CODE (type) == METHOD_TYPE)
6624 {
6625 tree parm;
6626 parm = build_this_parm (type, quals);
6627 TREE_CHAIN (parm) = parms;
6628 parms = parm;
6629 }
4546865e 6630 DECL_ARGUMENTS (decl) = parms;
448545cb
JM
6631 for (t = parms; t; t = TREE_CHAIN (t))
6632 DECL_CONTEXT (t) = decl;
a1c65f9f 6633 /* Propagate volatile out from type to decl. */
8d08fdba 6634 if (TYPE_VOLATILE (type))
893de33c 6635 TREE_THIS_VOLATILE (decl) = 1;
8d08fdba 6636
71aea5f2
SM
6637 /* Setup decl according to sfk. */
6638 switch (sfk)
6639 {
6640 case sfk_constructor:
6641 case sfk_copy_constructor:
d5f4eddd 6642 case sfk_move_constructor:
71aea5f2
SM
6643 DECL_CONSTRUCTOR_P (decl) = 1;
6644 break;
6645 case sfk_destructor:
6646 DECL_DESTRUCTOR_P (decl) = 1;
6647 break;
6648 default:
6649 break;
6650 }
6651
837edd5f
GK
6652 /* If pointers to member functions use the least significant bit to
6653 indicate whether a function is virtual, ensure a pointer
6654 to this function will have that bit clear. */
6655 if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_pfn
6656 && TREE_CODE (type) == METHOD_TYPE
6657 && DECL_ALIGN (decl) < 2 * BITS_PER_UNIT)
6658 DECL_ALIGN (decl) = 2 * BITS_PER_UNIT;
6659
abc088aa
MM
6660 if (friendp
6661 && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
6662 {
6663 if (funcdef_flag)
6664 error
6665 ("defining explicit specialization %qD in friend declaration",
6666 orig_declarator);
6667 else
6668 {
6669 tree fns = TREE_OPERAND (orig_declarator, 0);
6670 tree args = TREE_OPERAND (orig_declarator, 1);
6671
6672 if (PROCESSING_REAL_TEMPLATE_DECL_P ())
6673 {
6674 /* Something like `template <class T> friend void f<T>()'. */
6675 error ("invalid use of template-id %qD in declaration "
6676 "of primary template",
6677 orig_declarator);
6678 return NULL_TREE;
6679 }
6680
6681
6682 /* A friend declaration of the form friend void f<>(). Record
6683 the information in the TEMPLATE_ID_EXPR. */
6684 SET_DECL_IMPLICIT_INSTANTIATION (decl);
6685
6686 if (TREE_CODE (fns) == COMPONENT_REF)
6687 {
6688 /* Due to bison parser ickiness, we will have already looked
6689 up an operator_name or PFUNCNAME within the current class
6690 (see template_id in parse.y). If the current class contains
6691 such a name, we'll get a COMPONENT_REF here. Undo that. */
6692
6693 gcc_assert (TREE_TYPE (TREE_OPERAND (fns, 0))
6694 == current_class_type);
6695 fns = TREE_OPERAND (fns, 1);
6696 }
6697 gcc_assert (TREE_CODE (fns) == IDENTIFIER_NODE
6698 || TREE_CODE (fns) == OVERLOAD);
6699 DECL_TEMPLATE_INFO (decl) = tree_cons (fns, args, NULL_TREE);
6700
6701 for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
6702 if (TREE_PURPOSE (t)
6703 && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
6704 {
6705 error ("default arguments are not allowed in declaration "
6706 "of friend template specialization %qD",
6707 decl);
6708 return NULL_TREE;
6709 }
6710
6711 if (inlinep)
6712 {
6713 error ("%<inline%> is not allowed in declaration of friend "
6714 "template specialization %qD",
6715 decl);
6716 return NULL_TREE;
6717 }
6718 }
6719 }
6720
79c4d4b7 6721 /* If this decl has namespace scope, set that up. */
2c73f9f5 6722 if (in_namespace)
b262d64c 6723 set_decl_namespace (decl, in_namespace, friendp);
adae082f 6724 else if (!ctype)
79c4d4b7 6725 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
2c73f9f5 6726
0f8766b8
JM
6727 /* `main' and builtins have implicit 'C' linkage. */
6728 if ((MAIN_NAME_P (declarator)
6729 || (IDENTIFIER_LENGTH (declarator) > 10
6730 && IDENTIFIER_POINTER (declarator)[0] == '_'
6731 && IDENTIFIER_POINTER (declarator)[1] == '_'
6732 && strncmp (IDENTIFIER_POINTER (declarator)+2, "builtin_", 8) == 0))
6733 && current_lang_name == lang_name_cplusplus
94706a5c 6734 && ctype == NULL_TREE
79c4d4b7
JM
6735 /* NULL_TREE means global namespace. */
6736 && DECL_CONTEXT (decl) == NULL_TREE)
5d2ed28c 6737 SET_DECL_LANGUAGE (decl, lang_c);
0f8766b8 6738
8d08fdba
MS
6739 /* Should probably propagate const out from type to decl I bet (mrs). */
6740 if (staticp)
6741 {
6742 DECL_STATIC_FUNCTION_P (decl) = 1;
6743 DECL_CONTEXT (decl) = ctype;
8d08fdba
MS
6744 }
6745
e76a2646 6746 if (ctype)
9c12301f
MM
6747 {
6748 DECL_CONTEXT (decl) = ctype;
6749 if (funcdef_flag)
6750 check_class_member_definition_namespace (decl);
6751 }
e76a2646 6752
0f8766b8 6753 if (ctype == NULL_TREE && DECL_MAIN_P (decl))
faae18ab 6754 {
848b92e1 6755 if (processing_template_decl)
2d01edd7 6756 error ("cannot declare %<::main%> to be a template");
faae18ab 6757 if (inlinep)
2d01edd7 6758 error ("cannot declare %<::main%> to be inline");
f22967f3 6759 if (!publicp)
2d01edd7 6760 error ("cannot declare %<::main%> to be static");
faae18ab
MS
6761 inlinep = 0;
6762 publicp = 1;
6763 }
50a6dbd7 6764
59e76fc6 6765 /* Members of anonymous types and local classes have no linkage; make
9fc444cc 6766 them internal. If a typedef is made later, this will be changed. */
1951a1b6 6767 if (ctype && (TYPE_ANONYMOUS_P (ctype)
4f1c5b7d 6768 || decl_function_context (TYPE_MAIN_DECL (ctype))))
50a6dbd7
JM
6769 publicp = 0;
6770
893de33c 6771 TREE_PUBLIC (decl) = publicp;
faae18ab 6772 if (! publicp)
893de33c
JM
6773 {
6774 DECL_INTERFACE_KNOWN (decl) = 1;
6775 DECL_NOT_REALLY_EXTERN (decl) = 1;
6776 }
faae18ab 6777
acc72c37 6778 /* If the declaration was declared inline, mark it as such. */
faae18ab 6779 if (inlinep)
acc72c37 6780 DECL_DECLARED_INLINE_P (decl) = 1;
8d08fdba
MS
6781
6782 DECL_EXTERNAL (decl) = 1;
3c01e5df 6783 if (quals && TREE_CODE (type) == FUNCTION_TYPE)
8d08fdba 6784 {
e7c41c99
DM
6785 error (ctype
6786 ? G_("static member function %qD cannot have cv-qualifier")
32b1d579 6787 : G_("non-member function %qD cannot have cv-qualifier"),
e7c41c99 6788 decl);
3c01e5df 6789 quals = TYPE_UNQUALIFIED;
8d08fdba
MS
6790 }
6791
398cd199
VR
6792 if (IDENTIFIER_OPNAME_P (DECL_NAME (decl))
6793 && !grok_op_properties (decl, /*complain=*/true))
6794 return NULL_TREE;
8d08fdba 6795
1eb0072d
JM
6796 if (funcdef_flag)
6797 /* Make the init_value nonzero so pushdecl knows this is not
6798 tentative. error_mark_node is replaced later with the BLOCK. */
6799 DECL_INITIAL (decl) = error_mark_node;
6800
93ca4ba7 6801 if (TYPE_NOTHROW_P (type) || nothrow_libfn_p (decl))
1660cb3a
JM
6802 TREE_NOTHROW (decl) = 1;
6803
75650646 6804 /* Caller will do the rest of this. */
8d08fdba
MS
6805 if (check < 0)
6806 return decl;
6807
74b846e0 6808 if (ctype != NULL_TREE)
71aea5f2 6809 grokclassfn (ctype, decl, flags);
74b846e0
MM
6810
6811 decl = check_explicit_specialization (orig_declarator, decl,
6812 template_count,
357d956e 6813 2 * funcdef_flag +
74b846e0
MM
6814 4 * (friendp != 0));
6815 if (decl == error_mark_node)
6816 return NULL_TREE;
98c1c668 6817
037cc9c5
FJ
6818 if (attrlist)
6819 {
6820 cplus_decl_attributes (&decl, *attrlist, 0);
6821 *attrlist = NULL_TREE;
6822 }
6823
da337784
JJ
6824 /* Check main's type after attributes have been applied. */
6825 if (ctype == NULL_TREE && DECL_MAIN_P (decl))
6826 {
6827 if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
6828 integer_type_node))
6829 {
6830 tree oldtypeargs = TYPE_ARG_TYPES (TREE_TYPE (decl));
6831 tree newtype;
6832 error ("%<::main%> must return %<int%>");
6833 newtype = build_function_type (integer_type_node, oldtypeargs);
6834 TREE_TYPE (decl) = newtype;
6835 }
4003301d
MLI
6836 if (warn_main)
6837 check_main_parameter_types (decl);
da337784
JJ
6838 }
6839
74b846e0
MM
6840 if (ctype != NULL_TREE
6841 && (! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
6842 && check)
8d08fdba 6843 {
f8c3b097
PC
6844 tree old_decl = check_classfn (ctype, decl,
6845 (processing_template_decl
6846 > template_class_depth (ctype))
6847 ? current_template_parms
6848 : NULL_TREE);
6849
6850 if (old_decl == error_mark_node)
6851 return NULL_TREE;
8d08fdba 6852
74b846e0 6853 if (old_decl)
8d08fdba 6854 {
79ae853c 6855 tree ok;
4514aa8c 6856 tree pushed_scope;
316a2456 6857
357d956e
MM
6858 if (TREE_CODE (old_decl) == TEMPLATE_DECL)
6859 /* Because grokfndecl is always supposed to return a
6860 FUNCTION_DECL, we pull out the DECL_TEMPLATE_RESULT
6861 here. We depend on our callers to figure out that its
6862 really a template that's being returned. */
6863 old_decl = DECL_TEMPLATE_RESULT (old_decl);
6864
6865 if (DECL_STATIC_FUNCTION_P (old_decl)
6866 && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
6867 /* Remove the `this' parm added by grokclassfn.
6868 XXX Isn't this done in start_function, too? */
6869 revert_static_member_fn (decl);
6870 if (DECL_ARTIFICIAL (old_decl))
db160137
AP
6871 {
6872 error ("definition of implicitly-declared %qD", old_decl);
6873 return NULL_TREE;
6874 }
357d956e 6875
74b846e0
MM
6876 /* Since we've smashed OLD_DECL to its
6877 DECL_TEMPLATE_RESULT, we must do the same to DECL. */
6878 if (TREE_CODE (decl) == TEMPLATE_DECL)
6879 decl = DECL_TEMPLATE_RESULT (decl);
6880
6881 /* Attempt to merge the declarations. This can fail, in
0e339752 6882 the case of some invalid specialization declarations. */
4514aa8c 6883 pushed_scope = push_scope (ctype);
d63d5d0c 6884 ok = duplicate_decls (decl, old_decl, friendp);
4514aa8c
NS
6885 if (pushed_scope)
6886 pop_scope (pushed_scope);
316a2456
MM
6887 if (!ok)
6888 {
2d01edd7 6889 error ("no %q#D member function declared in class %qT",
316a2456
MM
6890 decl, ctype);
6891 return NULL_TREE;
6892 }
74b846e0 6893 return old_decl;
8d08fdba
MS
6894 }
6895 }
74b846e0
MM
6896
6897 if (DECL_CONSTRUCTOR_P (decl) && !grok_ctor_properties (ctype, decl))
6898 return NULL_TREE;
6899
6900 if (ctype == NULL_TREE || check)
6901 return decl;
6902
6903 if (virtualp)
cbb40945 6904 DECL_VIRTUAL_P (decl) = 1;
74b846e0 6905
8d08fdba
MS
6906 return decl;
6907}
6908
4684cd27
MM
6909/* DECL is a VAR_DECL for a static data member. Set flags to reflect
6910 the linkage that DECL will receive in the object file. */
6911
6912static void
6913set_linkage_for_static_data_member (tree decl)
6914{
6915 /* A static data member always has static storage duration and
6916 external linkage. Note that static data members are forbidden in
6917 local classes -- the only situation in which a class has
6918 non-external linkage. */
6919 TREE_PUBLIC (decl) = 1;
6920 TREE_STATIC (decl) = 1;
6921 /* For non-template classes, static data members are always put
6922 out in exactly those files where they are defined, just as
77880ae4 6923 with ordinary namespace-scope variables. */
4684cd27
MM
6924 if (!processing_template_decl)
6925 DECL_INTERFACE_KNOWN (decl) = 1;
6926}
6927
caf93cb0 6928/* Create a VAR_DECL named NAME with the indicated TYPE.
9e259dd1
MM
6929
6930 If SCOPE is non-NULL, it is the class type or namespace containing
6931 the variable. If SCOPE is NULL, the variable should is created in
6932 the innermost enclosings scope. */
6933
8d08fdba 6934static tree
11f6b451 6935grokvardecl (tree type,
0cbd7506 6936 tree name,
1ff3c076 6937 const cp_decl_specifier_seq *declspecs,
0cbd7506
MS
6938 int initialized,
6939 int constp,
6940 tree scope)
8d08fdba
MS
6941{
6942 tree decl;
5ae9ba3e 6943 tree explicit_scope;
f7da6097 6944
50bc768d 6945 gcc_assert (!name || TREE_CODE (name) == IDENTIFIER_NODE);
9e259dd1 6946
5ae9ba3e
MM
6947 /* Compute the scope in which to place the variable, but remember
6948 whether or not that scope was explicitly specified by the user. */
6949 explicit_scope = scope;
9e259dd1 6950 if (!scope)
8d08fdba 6951 {
9e259dd1
MM
6952 /* An explicit "extern" specifier indicates a namespace-scope
6953 variable. */
62d1db17 6954 if (declspecs->storage_class == sc_extern)
9e259dd1
MM
6955 scope = current_namespace;
6956 else if (!at_function_scope_p ())
a5201a91 6957 scope = current_scope ();
9e259dd1
MM
6958 }
6959
6960 if (scope
6961 && (/* If the variable is a namespace-scope variable declared in a
6962 template, we need DECL_LANG_SPECIFIC. */
6963 (TREE_CODE (scope) == NAMESPACE_DECL && processing_template_decl)
6964 /* Similarly for namespace-scope variables with language linkage
6965 other than C++. */
caf93cb0 6966 || (TREE_CODE (scope) == NAMESPACE_DECL
9e259dd1
MM
6967 && current_lang_name != lang_name_cplusplus)
6968 /* Similarly for static data members. */
6969 || TYPE_P (scope)))
6970 decl = build_lang_decl (VAR_DECL, name, type);
8d08fdba 6971 else
c2255bc4 6972 decl = build_decl (input_location, VAR_DECL, name, type);
79c4d4b7 6973
5ae9ba3e
MM
6974 if (explicit_scope && TREE_CODE (explicit_scope) == NAMESPACE_DECL)
6975 set_decl_namespace (decl, explicit_scope, 0);
9e259dd1 6976 else
74b0d490 6977 DECL_CONTEXT (decl) = FROB_CONTEXT (scope);
6060a796 6978
62d1db17 6979 if (declspecs->storage_class == sc_extern)
8d08fdba
MS
6980 {
6981 DECL_THIS_EXTERN (decl) = 1;
6982 DECL_EXTERNAL (decl) = !initialized;
6983 }
6984
2b9dc906 6985 if (DECL_CLASS_SCOPE_P (decl))
8d08fdba 6986 {
4684cd27
MM
6987 set_linkage_for_static_data_member (decl);
6988 /* This function is only called with out-of-class definitions. */
5b605f68 6989 DECL_EXTERNAL (decl) = 0;
9c12301f 6990 check_class_member_definition_namespace (decl);
8d08fdba
MS
6991 }
6992 /* At top level, either `static' or no s.c. makes a definition
6993 (perhaps tentative), and absence of `static' makes it public. */
a9aedbc2 6994 else if (toplevel_bindings_p ())
8d08fdba 6995 {
62d1db17 6996 TREE_PUBLIC (decl) = (declspecs->storage_class != sc_static
9fffd093 6997 && (DECL_THIS_EXTERN (decl) || ! constp));
8d08fdba
MS
6998 TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
6999 }
7000 /* Not at top level, only `static' makes a static definition. */
7001 else
7002 {
62d1db17 7003 TREE_STATIC (decl) = declspecs->storage_class == sc_static;
8d08fdba
MS
7004 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
7005 }
50a6dbd7 7006
62d1db17 7007 if (declspecs->specs[(int)ds_thread])
8893239d 7008 DECL_TLS_MODEL (decl) = decl_default_tls_model (decl);
7a1f3f5f 7009
50a6dbd7
JM
7010 if (TREE_PUBLIC (decl))
7011 {
e8f43da6
JM
7012 /* If the type of the decl has no linkage, make sure that we'll
7013 notice that in mark_used. */
7014 if (DECL_LANG_SPECIFIC (decl) == NULL
7015 && TREE_PUBLIC (decl)
7016 && !DECL_EXTERN_C_P (decl)
7017 && no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false))
7018 retrofit_lang_decl (decl);
50a6dbd7 7019 }
1ceb02be
MM
7020 else
7021 DECL_INTERFACE_KNOWN (decl) = 1;
50a6dbd7 7022
8d08fdba
MS
7023 return decl;
7024}
7025
d8f8dca1
MM
7026/* Create and return a canonical pointer to member function type, for
7027 TYPE, which is a POINTER_TYPE to a METHOD_TYPE. */
8d08fdba
MS
7028
7029tree
11f6b451 7030build_ptrmemfunc_type (tree type)
8d08fdba 7031{
4977bab6 7032 tree field, fields;
8d08fdba 7033 tree t;
46cbda4a 7034 tree unqualified_variant = NULL_TREE;
8d08fdba 7035
d48ebde1
NS
7036 if (type == error_mark_node)
7037 return type;
d363e7bf 7038
8d08fdba
MS
7039 /* If a canonical type already exists for this type, use it. We use
7040 this method instead of type_hash_canon, because it only does a
7041 simple equality check on the list of field members. */
7042
7043 if ((t = TYPE_GET_PTRMEMFUNC_TYPE (type)))
7044 return t;
7045
46cbda4a
MM
7046 /* Make sure that we always have the unqualified pointer-to-member
7047 type first. */
89d684bb 7048 if (cp_type_quals (type) != TYPE_UNQUALIFIED)
68642fb6 7049 unqualified_variant
46cbda4a
MM
7050 = build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type));
7051
9e1e64ec 7052 t = make_class_type (RECORD_TYPE);
cad7e87b 7053 xref_basetypes (t, NULL_TREE);
caf93cb0 7054
3b426391 7055 /* Let the front end know this is a pointer to member function... */
db5ae43f 7056 TYPE_PTRMEMFUNC_FLAG (t) = 1;
9e1e64ec
PC
7057 /* ... and not really a class type. */
7058 SET_CLASS_TYPE_P (t, 0);
8d08fdba 7059
c2255bc4 7060 field = build_decl (input_location, FIELD_DECL, pfn_identifier, type);
4977bab6 7061 fields = field;
caf93cb0 7062
c2255bc4
AH
7063 field = build_decl (input_location, FIELD_DECL, delta_identifier,
7064 delta_type_node);
4977bab6
ZW
7065 TREE_CHAIN (field) = fields;
7066 fields = field;
caf93cb0 7067
4977bab6 7068 finish_builtin_struct (t, "__ptrmemfunc_type", fields, ptr_type_node);
8d08fdba 7069
3b426391 7070 /* Zap out the name so that the back end will give us the debugging
8d08fdba
MS
7071 information for this anonymous RECORD_TYPE. */
7072 TYPE_NAME (t) = NULL_TREE;
7073
46cbda4a
MM
7074 /* If this is not the unqualified form of this pointer-to-member
7075 type, set the TYPE_MAIN_VARIANT for this type to be the
7076 unqualified type. Since they are actually RECORD_TYPEs that are
22521c89
RG
7077 not variants of each other, we must do this manually.
7078 As we just built a new type there is no need to do yet another copy. */
89d684bb 7079 if (cp_type_quals (type) != TYPE_UNQUALIFIED)
46cbda4a 7080 {
22521c89
RG
7081 int type_quals = cp_type_quals (type);
7082 TYPE_READONLY (t) = (type_quals & TYPE_QUAL_CONST) != 0;
7083 TYPE_VOLATILE (t) = (type_quals & TYPE_QUAL_VOLATILE) != 0;
7084 TYPE_RESTRICT (t) = (type_quals & TYPE_QUAL_RESTRICT) != 0;
46cbda4a
MM
7085 TYPE_MAIN_VARIANT (t) = unqualified_variant;
7086 TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (unqualified_variant);
7087 TYPE_NEXT_VARIANT (unqualified_variant) = t;
0f67bdf1 7088 TREE_TYPE (TYPE_BINFO (t)) = t;
46cbda4a
MM
7089 }
7090
7091 /* Cache this pointer-to-member type so that we can find it again
7092 later. */
8d08fdba
MS
7093 TYPE_SET_PTRMEMFUNC_TYPE (type, t);
7094
0f67bdf1
JM
7095 if (TYPE_STRUCTURAL_EQUALITY_P (type))
7096 SET_TYPE_STRUCTURAL_EQUALITY (t);
7097 else if (TYPE_CANONICAL (type) != type)
7098 TYPE_CANONICAL (t) = build_ptrmemfunc_type (TYPE_CANONICAL (type));
06d40de8 7099
8d08fdba
MS
7100 return t;
7101}
7102
9e259dd1
MM
7103/* Create and return a pointer to data member type. */
7104
7105tree
7106build_ptrmem_type (tree class_type, tree member_type)
7107{
a5ac359a
MM
7108 if (TREE_CODE (member_type) == METHOD_TYPE)
7109 {
7110 tree arg_types;
7111
7112 arg_types = TYPE_ARG_TYPES (member_type);
caf93cb0 7113 class_type = (cp_build_qualified_type
a5ac359a
MM
7114 (class_type,
7115 cp_type_quals (TREE_TYPE (TREE_VALUE (arg_types)))));
caf93cb0
EC
7116 member_type
7117 = build_method_type_directly (class_type,
43dc123f
MM
7118 TREE_TYPE (member_type),
7119 TREE_CHAIN (arg_types));
a5ac359a
MM
7120 return build_ptrmemfunc_type (build_pointer_type (member_type));
7121 }
7122 else
7123 {
50bc768d 7124 gcc_assert (TREE_CODE (member_type) != FUNCTION_TYPE);
a5ac359a
MM
7125 return build_offset_type (class_type, member_type);
7126 }
9e259dd1
MM
7127}
7128
b17e2870
JM
7129/* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
7130 Check to see that the definition is valid. Issue appropriate error
7131 messages. Return 1 if the definition is particularly bad, or 0
7132 otherwise. */
7133
7134int
11f6b451 7135check_static_variable_definition (tree decl, tree type)
b17e2870
JM
7136{
7137 /* Motion 10 at San Diego: If a static const integral data member is
7138 initialized with an integral constant expression, the initializer
7139 may appear either in the declaration (within the class), or in
7140 the definition, but not both. If it appears in the class, the
7141 member is a member constant. The file-scope definition is always
7142 required. */
dcba9b0f 7143 if (!ARITHMETIC_TYPE_P (type) && TREE_CODE (type) != ENUMERAL_TYPE)
b17e2870 7144 {
2d01edd7 7145 error ("invalid in-class initialization of static data member "
0cbd7506 7146 "of non-integral type %qT",
dcba9b0f 7147 type);
b17e2870 7148 /* If we just return the declaration, crashes will sometimes
852dcbdd 7149 occur. We therefore return void_type_node, as if this were a
b17e2870
JM
7150 friend declaration, to cause callers to completely ignore
7151 this declaration. */
7152 return 1;
7153 }
7154 else if (!CP_TYPE_CONST_P (type))
2d01edd7 7155 error ("ISO C++ forbids in-class initialization of non-const "
0cbd7506
MS
7156 "static member %qD",
7157 decl);
550a799d 7158 else if (!INTEGRAL_OR_ENUMERATION_TYPE_P (type))
509c9d60 7159 pedwarn (input_location, OPT_pedantic, "ISO C++ forbids initialization of member constant "
0cbd7506 7160 "%qD of non-integral type %qT", decl, type);
b17e2870
JM
7161
7162 return 0;
7163}
7164
2848ad0f
MM
7165/* Given the SIZE (i.e., number of elements) in an array, compute an
7166 appropriate index type for the array. If non-NULL, NAME is the
7167 name of the thing being declared. */
7168
c95cd22e 7169tree
11f6b451 7170compute_array_index_type (tree name, tree size)
2848ad0f 7171{
d174af6c 7172 tree type;
2848ad0f 7173 tree itype;
06d40de8 7174 tree abi_1_itype = NULL_TREE;
2848ad0f 7175
d174af6c
MM
7176 if (error_operand_p (size))
7177 return error_mark_node;
7178
7179 type = TREE_TYPE (size);
d63b5e9f 7180 /* The array bound must be an integer type. */
550a799d 7181 if (!dependent_type_p (type) && !INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
2848ad0f 7182 {
d63b5e9f 7183 if (name)
2d01edd7 7184 error ("size of array %qD has non-integral type %qT", name, type);
d63b5e9f 7185 else
2d01edd7 7186 error ("size of array has non-integral type %qT", type);
d63b5e9f
NS
7187 size = integer_one_node;
7188 type = TREE_TYPE (size);
2848ad0f
MM
7189 }
7190
c1165535
JM
7191 /* We can only call value_dependent_expression_p on integral constant
7192 expressions; the parser adds a dummy NOP_EXPR with TREE_SIDE_EFFECTS
7193 set if this isn't one. */
7194 if (processing_template_decl
7195 && (TREE_SIDE_EFFECTS (size) || value_dependent_expression_p (size)))
7196 {
7197 /* We cannot do any checking for a SIZE that isn't known to be
7198 constant. Just build the index type and mark that it requires
7199 structural equality checks. */
06d40de8
DG
7200 itype = build_index_type (build_min (MINUS_EXPR, sizetype,
7201 size, integer_one_node));
c1165535
JM
7202 if (!TREE_SIDE_EFFECTS (size))
7203 {
7204 TYPE_DEPENDENT_P (itype) = 1;
7205 TYPE_DEPENDENT_P_VALID (itype) = 1;
7206 }
06d40de8
DG
7207 SET_TYPE_STRUCTURAL_EQUALITY (itype);
7208 return itype;
7209 }
7210
7211 if (!abi_version_at_least (2) && processing_template_decl)
7212 /* For abi-1, we handled all instances in templates the same way,
39a13be5 7213 even when they were non-dependent. This affects the manglings
06d40de8
DG
7214 produced. So, we do the normal checking for non-dependent
7215 sizes, but at the end we'll return the same type that abi-1
7216 would have, but with TYPE_CANONICAL set to the "right"
7217 value that the current ABI would provide. */
7218 abi_1_itype = build_index_type (build_min (MINUS_EXPR, sizetype,
7219 size, integer_one_node));
d63b5e9f 7220
a1c65f9f 7221 /* The size might be the result of a cast. */
80f5bb34
MM
7222 STRIP_TYPE_NOPS (size);
7223
7224 /* It might be a const variable or enumeration constant. */
8a784e4a 7225 size = integral_constant_value (size);
80f5bb34 7226
2848ad0f 7227 /* Normally, the array-bound will be a constant. */
2bb5d995 7228 if (TREE_CODE (size) == INTEGER_CST)
2848ad0f
MM
7229 {
7230 /* Check to see if the array bound overflowed. Make that an
7231 error, no matter how generous we're being. */
393eda6a 7232 constant_expression_error (size);
2848ad0f
MM
7233
7234 /* An array must have a positive number of elements. */
7235 if (INT_CST_LT (size, integer_zero_node))
7236 {
d67cdbc3 7237 if (name)
2d01edd7 7238 error ("size of array %qD is negative", name);
d67cdbc3 7239 else
33bd39a2 7240 error ("size of array is negative");
2848ad0f
MM
7241 size = integer_one_node;
7242 }
a8e6c82a
MM
7243 /* As an extension we allow zero-sized arrays. We always allow
7244 them in system headers because glibc uses them. */
fcf73884 7245 else if (integer_zerop (size) && !in_system_header)
d67cdbc3
JM
7246 {
7247 if (name)
509c9d60 7248 pedwarn (input_location, OPT_pedantic, "ISO C++ forbids zero-size array %qD", name);
d67cdbc3 7249 else
509c9d60 7250 pedwarn (input_location, OPT_pedantic, "ISO C++ forbids zero-size array");
d67cdbc3 7251 }
2848ad0f 7252 }
2bb5d995
JM
7253 else if (TREE_CONSTANT (size))
7254 {
7255 /* `(int) &fn' is not a valid array bound. */
7256 if (name)
2d01edd7 7257 error ("size of array %qD is not an integral constant-expression",
0cbd7506 7258 name);
2bb5d995 7259 else
33bd39a2 7260 error ("size of array is not an integral constant-expression");
3aa2ddb8 7261 size = integer_one_node;
2bb5d995 7262 }
50d50fc7 7263 else if (pedantic && warn_vla != 0)
d63b5e9f
NS
7264 {
7265 if (name)
509c9d60 7266 pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array %qD", name);
d63b5e9f 7267 else
509c9d60 7268 pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array");
50d50fc7
SP
7269 }
7270 else if (warn_vla > 0)
7271 {
7272 if (name)
7273 warning (OPT_Wvla,
7274 "variable length array %qD is used", name);
7275 else
7276 warning (OPT_Wvla,
7277 "variable length array is used");
d63b5e9f 7278 }
2848ad0f 7279
d63b5e9f
NS
7280 if (processing_template_decl && !TREE_CONSTANT (size))
7281 /* A variable sized array. */
7282 itype = build_min (MINUS_EXPR, sizetype, size, integer_one_node);
7283 else
2848ad0f 7284 {
455f19cb
MM
7285 HOST_WIDE_INT saved_processing_template_decl;
7286
d63b5e9f 7287 /* Compute the index of the largest element in the array. It is
0cbd7506
MS
7288 one less than the number of elements in the array. We save
7289 and restore PROCESSING_TEMPLATE_DECL so that computations in
7290 cp_build_binary_op will be appropriately folded. */
455f19cb
MM
7291 saved_processing_template_decl = processing_template_decl;
7292 processing_template_decl = 0;
ba47d38d
AH
7293 itype = cp_build_binary_op (input_location,
7294 MINUS_EXPR,
455f19cb 7295 cp_convert (ssizetype, size),
5ade1ed2
DG
7296 cp_convert (ssizetype, integer_one_node),
7297 tf_warning_or_error);
455f19cb
MM
7298 itype = fold (itype);
7299 processing_template_decl = saved_processing_template_decl;
7300
d63b5e9f 7301 if (!TREE_CONSTANT (itype))
f4f206f4 7302 /* A variable sized array. */
d63b5e9f
NS
7303 itype = variable_size (itype);
7304 /* Make sure that there was no overflow when creating to a signed
0cbd7506
MS
7305 index type. (For example, on a 32-bit machine, an array with
7306 size 2^32 - 1 is too big.) */
9116d529
RS
7307 else if (TREE_CODE (itype) == INTEGER_CST
7308 && TREE_OVERFLOW (itype))
2848ad0f 7309 {
d63b5e9f
NS
7310 error ("overflow in array dimension");
7311 TREE_OVERFLOW (itype) = 0;
2848ad0f 7312 }
2848ad0f 7313 }
68642fb6 7314
2848ad0f 7315 /* Create and return the appropriate index type. */
06d40de8
DG
7316 if (abi_1_itype)
7317 {
7318 tree t = build_index_type (itype);
7319 TYPE_CANONICAL (abi_1_itype) = TYPE_CANONICAL (t);
7320 return abi_1_itype;
7321 }
7322 else
7323 return build_index_type (itype);
2848ad0f
MM
7324}
7325
a723baf1
MM
7326/* Returns the scope (if any) in which the entity declared by
7327 DECLARATOR will be located. If the entity was declared with an
7328 unqualified name, NULL_TREE is returned. */
7329
7330tree
058b15c1 7331get_scope_of_declarator (const cp_declarator *declarator)
a723baf1 7332{
058b15c1
MM
7333 while (declarator && declarator->kind != cdk_id)
7334 declarator = declarator->declarator;
7335
7336 /* If the declarator-id is a SCOPE_REF, the scope in which the
7337 declaration occurs is the first operand. */
7338 if (declarator
1d786913
MM
7339 && declarator->u.id.qualifying_scope)
7340 return declarator->u.id.qualifying_scope;
058b15c1 7341
77880ae4 7342 /* Otherwise, the declarator is not a qualified name; the entity will
058b15c1
MM
7343 be declared in the current scope. */
7344 return NULL_TREE;
a723baf1
MM
7345}
7346
2848ad0f
MM
7347/* Returns an ARRAY_TYPE for an array with SIZE elements of the
7348 indicated TYPE. If non-NULL, NAME is the NAME of the declaration
7349 with this type. */
7350
7351static tree
11f6b451 7352create_array_type_for_decl (tree name, tree type, tree size)
2848ad0f
MM
7353{
7354 tree itype = NULL_TREE;
7355 const char* error_msg;
7356
7357 /* If things have already gone awry, bail now. */
7358 if (type == error_mark_node || size == error_mark_node)
7359 return error_mark_node;
7360
7361 /* Assume that everything will go OK. */
7362 error_msg = NULL;
7363
7364 /* There are some types which cannot be array elements. */
7365 switch (TREE_CODE (type))
7366 {
7367 case VOID_TYPE:
7368 error_msg = "array of void";
7369 break;
7370
7371 case FUNCTION_TYPE:
7372 error_msg = "array of functions";
7373 break;
7374
7375 case REFERENCE_TYPE:
7376 error_msg = "array of references";
7377 break;
7378
2848ad0f
MM
7379 case METHOD_TYPE:
7380 error_msg = "array of function members";
7381 break;
7382
7383 default:
7384 break;
7385 }
7386
7387 /* If something went wrong, issue an error-message and return. */
7388 if (error_msg)
7389 {
7390 if (name)
2d01edd7 7391 error ("declaration of %qD as %s", name, error_msg);
2848ad0f 7392 else
33bd39a2 7393 error ("creating %s", error_msg);
2848ad0f
MM
7394
7395 return error_mark_node;
7396 }
7397
7398 /* [dcl.array]
68642fb6 7399
2848ad0f
MM
7400 The constant expressions that specify the bounds of the arrays
7401 can be omitted only for the first member of the sequence. */
7402 if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
7403 {
b3faacfd 7404 if (name)
2d01edd7 7405 error ("declaration of %qD as multidimensional array must "
0cbd7506
MS
7406 "have bounds for all dimensions except the first",
7407 name);
b3faacfd 7408 else
2d01edd7 7409 error ("multidimensional array must have bounds for all "
0cbd7506 7410 "dimensions except the first");
2848ad0f
MM
7411
7412 return error_mark_node;
7413 }
7414
7415 /* Figure out the index type for the array. */
7416 if (size)
7417 itype = compute_array_index_type (name, size);
7418
7fb213d8
GB
7419 /* [dcl.array]
7420 T is called the array element type; this type shall not be [...] an
7421 abstract class type. */
7422 abstract_virtuals_error (name, type);
7423
2848ad0f
MM
7424 return build_cplus_array_type (type, itype);
7425}
7426
3dbc07b6
MM
7427/* Check that it's OK to declare a function with the indicated TYPE.
7428 SFK indicates the kind of special function (if any) that this
1f84ec23 7429 function is. OPTYPE is the type given in a conversion operator
44d10c10
PB
7430 declaration, or the class type for a constructor/destructor.
7431 Returns the actual return type of the function; that
3dbc07b6
MM
7432 may be different than TYPE if an error occurs, or for certain
7433 special functions. */
7434
7435static tree
11f6b451 7436check_special_function_return_type (special_function_kind sfk,
0cbd7506
MS
7437 tree type,
7438 tree optype)
3dbc07b6
MM
7439{
7440 switch (sfk)
7441 {
7442 case sfk_constructor:
7443 if (type)
33bd39a2 7444 error ("return type specification for constructor invalid");
5362b086 7445
44d10c10
PB
7446 if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
7447 type = build_pointer_type (optype);
7448 else
7449 type = void_type_node;
3dbc07b6
MM
7450 break;
7451
7452 case sfk_destructor:
7453 if (type)
33bd39a2 7454 error ("return type specification for destructor invalid");
44d10c10 7455 /* We can't use the proper return type here because we run into
77880ae4 7456 problems with ambiguous bases and covariant returns.
44d10c10
PB
7457 Java classes are left unchanged because (void *) isn't a valid
7458 Java type, and we don't want to change the Java ABI. */
7459 if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
7460 type = build_pointer_type (void_type_node);
7461 else
7462 type = void_type_node;
3dbc07b6
MM
7463 break;
7464
7465 case sfk_conversion:
caba2081
PC
7466 if (type)
7467 error ("return type specified for %<operator %T%>", optype);
3dbc07b6
MM
7468 type = optype;
7469 break;
7470
7471 default:
8dc2b103 7472 gcc_unreachable ();
3dbc07b6
MM
7473 }
7474
7475 return type;
7476}
7477
62e19030
MM
7478/* A variable or data member (whose unqualified name is IDENTIFIER)
7479 has been declared with the indicated TYPE. If the TYPE is not
7480 acceptable, issue an error message and return a type to use for
03fd3f84 7481 error-recovery purposes. */
62e19030
MM
7482
7483tree
7484check_var_type (tree identifier, tree type)
7485{
7486 if (VOID_TYPE_P (type))
7487 {
7488 if (!identifier)
7489 error ("unnamed variable or field declared void");
7490 else if (TREE_CODE (identifier) == IDENTIFIER_NODE)
7491 {
7492 gcc_assert (!IDENTIFIER_OPNAME_P (identifier));
7493 error ("variable or field %qE declared void", identifier);
7494 }
7495 else
7496 error ("variable or field declared void");
650fcd07 7497 type = error_mark_node;
62e19030 7498 }
c8094d83 7499
62e19030
MM
7500 return type;
7501}
7502
a723baf1
MM
7503/* Given declspecs and a declarator (abstract or otherwise), determine
7504 the name and type of the object declared and construct a DECL node
7505 for it.
8d08fdba 7506
5e32a5cf
GDR
7507 DECLSPECS points to the representation of declaration-specifier
7508 sequence that precedes declarator.
8d08fdba
MS
7509
7510 DECL_CONTEXT says which syntactic context this declaration is in:
7511 NORMAL for most contexts. Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
7512 FUNCDEF for a function definition. Like NORMAL but a few different
7513 error messages in each case. Return value may be zero meaning
7514 this definition is too screwy to try to parse.
7515 MEMFUNCDEF for a function definition. Like FUNCDEF but prepares to
7516 handle member functions (which have FIELD context).
7517 Return value may be zero meaning this definition is too screwy to
7518 try to parse.
7519 PARM for a parameter declaration (either within a function prototype
7520 or before a function body). Make a PARM_DECL, or return void_type_node.
db5ae43f 7521 CATCHPARM for a parameter declaration before a catch clause.
8d08fdba
MS
7522 TYPENAME if for a typename (in a cast or sizeof).
7523 Don't make a DECL node; just return the ..._TYPE node.
7524 FIELD for a struct or union field; make a FIELD_DECL.
7525 BITFIELD for a field with specified width.
b87d79e6 7526 INITIALIZED is as for start_decl.
8d08fdba 7527
91d231cb
JM
7528 ATTRLIST is a pointer to the list of attributes, which may be NULL
7529 if there are none; *ATTRLIST may be modified if attributes from inside
7530 the declarator should be applied to the declaration.
b17e2870 7531
a723baf1
MM
7532 When this function is called, scoping variables (such as
7533 CURRENT_CLASS_TYPE) should reflect the scope in which the
7534 declaration occurs, not the scope in which the new declaration will
7535 be placed. For example, on:
8d08fdba 7536
a723baf1 7537 void S::f() { ... }
8d08fdba 7538
a723baf1 7539 when grokdeclarator is called for `S::f', the CURRENT_CLASS_TYPE
344f237b
LM
7540 should not be `S'.
7541
7542 Returns a DECL (if a declarator is present), a TYPE (if there is no
7543 declarator, in cases like "struct S;"), or the ERROR_MARK_NODE if an
7544 error occurs. */
8d08fdba 7545
8d08fdba 7546tree
058b15c1 7547grokdeclarator (const cp_declarator *declarator,
1ff3c076 7548 const cp_decl_specifier_seq *declspecs,
0cbd7506
MS
7549 enum decl_context decl_context,
7550 int initialized,
7551 tree* attrlist)
8d08fdba 7552{
8d08fdba
MS
7553 tree type = NULL_TREE;
7554 int longlong = 0;
db5ae43f 7555 int virtualp, explicitp, friendp, inlinep, staticp;
8d08fdba
MS
7556 int explicit_int = 0;
7557 int explicit_char = 0;
37c46b43 7558 int defaulted_int = 0;
d1c78882 7559 tree dependent_name = NULL_TREE;
caf93cb0 7560
8d08fdba 7561 tree typedef_decl = NULL_TREE;
058b15c1 7562 const char *name = NULL;
8d08fdba 7563 tree typedef_type = NULL_TREE;
357d956e
MM
7564 /* True if this declarator is a function definition. */
7565 bool funcdef_flag = false;
058b15c1 7566 cp_declarator_kind innermost_code = cdk_error;
8d08fdba 7567 int bitfield = 0;
6125f3be
DE
7568#if 0
7569 /* See the code below that used this. */
91d231cb 7570 tree decl_attr = NULL_TREE;
6125f3be 7571#endif
8d08fdba
MS
7572
7573 /* Keep track of what sort of function is being processed
7574 so that we can warn about default return values, or explicit
7575 return values which do not match prescribed defaults. */
3dbc07b6 7576 special_function_kind sfk = sfk_none;
8d08fdba
MS
7577
7578 tree dname = NULL_TREE;
8d08fdba
MS
7579 tree ctor_return_type = NULL_TREE;
7580 enum overload_flags flags = NO_SPECIAL;
e2537f2c
MM
7581 /* cv-qualifiers that apply to the declarator, for a declaration of
7582 a member function. */
7583 cp_cv_quals memfn_quals = TYPE_UNQUALIFIED;
7584 /* cv-qualifiers that apply to the type specified by the DECLSPECS. */
7585 int type_quals;
c11b6f21 7586 tree raises = NULL_TREE;
386b8a85 7587 int template_count = 0;
91d231cb 7588 tree returned_attrs = NULL_TREE;
4546865e 7589 tree parms = NULL_TREE;
058b15c1
MM
7590 const cp_declarator *id_declarator;
7591 /* The unqualified name of the declarator; either an
7592 IDENTIFIER_NODE, BIT_NOT_EXPR, or TEMPLATE_ID_EXPR. */
7593 tree unqualified_id;
7594 /* The class type, if any, in which this entity is located,
7595 or NULL_TREE if none. Note that this value may be different from
7596 the current class type; for example if an attempt is made to declare
7597 "A::f" inside "B", this value will be "A". */
7598 tree ctype = current_class_type;
7599 /* The NAMESPACE_DECL for the namespace in which this entity is
7600 located. If an unqualified name is used to declare the entity,
7601 this value will be NULL_TREE, even if the entity is located at
caf93cb0 7602 namespace scope. */
058b15c1 7603 tree in_namespace = NULL_TREE;
1ff3c076
MM
7604 cp_storage_class storage_class;
7605 bool unsigned_p, signed_p, short_p, long_p, thread_p;
2cfe82fe 7606 bool type_was_error_mark_node = false;
5d80a306 7607 bool parameter_pack_p = declarator? declarator->parameter_pack_p : false;
0d9c0892 7608 bool template_type_arg = false;
7ecbca9d 7609 bool constexpr_p = declspecs->specs[(int) ds_constexpr];
40449a90 7610 const char *errmsg;
1ff3c076
MM
7611
7612 signed_p = declspecs->specs[(int)ds_signed];
7613 unsigned_p = declspecs->specs[(int)ds_unsigned];
7614 short_p = declspecs->specs[(int)ds_short];
7615 long_p = declspecs->specs[(int)ds_long];
28c84d63 7616 longlong = declspecs->specs[(int)ds_long] >= 2;
1ff3c076 7617 thread_p = declspecs->specs[(int)ds_thread];
8d08fdba 7618
8d08fdba 7619 if (decl_context == FUNCDEF)
357d956e 7620 funcdef_flag = true, decl_context = NORMAL;
8d08fdba 7621 else if (decl_context == MEMFUNCDEF)
357d956e 7622 funcdef_flag = true, decl_context = FIELD;
8d08fdba
MS
7623 else if (decl_context == BITFIELD)
7624 bitfield = 1, decl_context = FIELD;
0d9c0892
JM
7625 else if (decl_context == TEMPLATE_TYPE_ARG)
7626 template_type_arg = true, decl_context = TYPENAME;
8d08fdba 7627
b87d79e6
JM
7628 if (initialized > 1)
7629 funcdef_flag = true;
7630
8d08fdba
MS
7631 /* Look inside a declarator for the name being declared
7632 and get it as a string, for an error message. */
caf93cb0
EC
7633 for (id_declarator = declarator;
7634 id_declarator;
058b15c1
MM
7635 id_declarator = id_declarator->declarator)
7636 {
7637 if (id_declarator->kind != cdk_id)
7638 innermost_code = id_declarator->kind;
8d08fdba 7639
058b15c1
MM
7640 switch (id_declarator->kind)
7641 {
7642 case cdk_function:
7643 if (id_declarator->declarator
7644 && id_declarator->declarator->kind == cdk_id)
8d08fdba 7645 {
058b15c1
MM
7646 sfk = id_declarator->declarator->u.id.sfk;
7647 if (sfk == sfk_destructor)
7648 flags = DTOR_FLAG;
51c184be 7649 }
058b15c1 7650 break;
be99da77 7651
058b15c1
MM
7652 case cdk_id:
7653 {
1d786913
MM
7654 tree qualifying_scope = id_declarator->u.id.qualifying_scope;
7655 tree decl = id_declarator->u.id.unqualified_name;
058b15c1
MM
7656 if (!decl)
7657 break;
1d786913 7658 if (qualifying_scope)
8d08fdba 7659 {
2884e22c
MM
7660 if (at_function_scope_p ())
7661 {
7662 /* [dcl.meaning]
7663
7664 A declarator-id shall not be qualified except
7665 for ...
7666
7667 None of the cases are permitted in block
7668 scope. */
7669 if (qualifying_scope == global_namespace)
7670 error ("invalid use of qualified-name %<::%D%>",
7671 decl);
7672 else if (TYPE_P (qualifying_scope))
7673 error ("invalid use of qualified-name %<%T::%D%>",
7674 qualifying_scope, decl);
7675 else
7676 error ("invalid use of qualified-name %<%D::%D%>",
7677 qualifying_scope, decl);
7678 return error_mark_node;
7679 }
7680 else if (TYPE_P (qualifying_scope))
058b15c1 7681 {
1d786913 7682 ctype = qualifying_scope;
058b15c1
MM
7683 if (innermost_code != cdk_function
7684 && current_class_type
caf93cb0 7685 && !UNIQUELY_DERIVED_FROM_P (ctype,
058b15c1
MM
7686 current_class_type))
7687 {
2d01edd7 7688 error ("type %qT is not derived from type %qT",
058b15c1 7689 ctype, current_class_type);
1d786913 7690 return error_mark_node;
058b15c1 7691 }
058b15c1
MM
7692 }
7693 else if (TREE_CODE (qualifying_scope) == NAMESPACE_DECL)
7694 in_namespace = qualifying_scope;
058b15c1 7695 }
058b15c1
MM
7696 switch (TREE_CODE (decl))
7697 {
7698 case BIT_NOT_EXPR:
be99da77 7699 {
88e95ee3
MM
7700 tree type;
7701
7702 if (innermost_code != cdk_function)
7703 {
7704 error ("declaration of %qD as non-function", decl);
7705 return error_mark_node;
7706 }
c8094d83 7707 else if (!qualifying_scope
88e95ee3
MM
7708 && !(current_class_type && at_class_scope_p ()))
7709 {
7710 error ("declaration of %qD as non-member", decl);
7711 return error_mark_node;
7712 }
c8094d83 7713
88e95ee3 7714 type = TREE_OPERAND (decl, 0);
bd967b22
JM
7715 if (TYPE_P (type))
7716 type = constructor_name (type);
f41c4af3 7717 name = identifier_to_locale (IDENTIFIER_POINTER (type));
af02935e 7718 dname = decl;
058b15c1
MM
7719 }
7720 break;
633221db 7721
058b15c1
MM
7722 case TEMPLATE_ID_EXPR:
7723 {
7724 tree fns = TREE_OPERAND (decl, 0);
633221db 7725
058b15c1 7726 dname = fns;
058b15c1 7727 if (TREE_CODE (dname) != IDENTIFIER_NODE)
be99da77 7728 {
50bc768d 7729 gcc_assert (is_overloaded_fn (dname));
058b15c1 7730 dname = DECL_NAME (get_first_fn (dname));
be99da77
MS
7731 }
7732 }
058b15c1 7733 /* Fall through. */
be99da77 7734
058b15c1
MM
7735 case IDENTIFIER_NODE:
7736 if (TREE_CODE (decl) == IDENTIFIER_NODE)
7737 dname = decl;
be99da77 7738
058b15c1
MM
7739 if (C_IS_RESERVED_WORD (dname))
7740 {
2d01edd7 7741 error ("declarator-id missing; using reserved word %qD",
058b15c1 7742 dname);
f41c4af3 7743 name = identifier_to_locale (IDENTIFIER_POINTER (dname));
058b15c1
MM
7744 }
7745 else if (!IDENTIFIER_TYPENAME_P (dname))
f41c4af3 7746 name = identifier_to_locale (IDENTIFIER_POINTER (dname));
058b15c1
MM
7747 else
7748 {
50bc768d 7749 gcc_assert (flags == NO_SPECIAL);
058b15c1
MM
7750 flags = TYPENAME_FLAG;
7751 ctor_return_type = TREE_TYPE (dname);
7752 sfk = sfk_conversion;
7753 if (is_typename_at_global_scope (dname))
f41c4af3 7754 name = identifier_to_locale (IDENTIFIER_POINTER (dname));
058b15c1
MM
7755 else
7756 name = "<invalid operator>";
7757 }
7758 break;
7759
058b15c1 7760 default:
8dc2b103 7761 gcc_unreachable ();
058b15c1 7762 }
45537677 7763 break;
b08f991d 7764 }
45537677 7765
b08f991d
SB
7766 case cdk_array:
7767 case cdk_pointer:
7768 case cdk_reference:
7769 case cdk_ptrmem:
7770 break;
2ee366b5 7771
b08f991d
SB
7772 case cdk_error:
7773 return error_mark_node;
058b15c1 7774
b08f991d
SB
7775 default:
7776 gcc_unreachable ();
058b15c1
MM
7777 }
7778 if (id_declarator->kind == cdk_id)
7779 break;
7780 }
8d08fdba 7781
fa6098f8 7782 /* [dcl.fct.edf]
3db45ab5 7783
fa6098f8
MM
7784 The declarator in a function-definition shall have the form
7785 D1 ( parameter-declaration-clause) ... */
058b15c1 7786 if (funcdef_flag && innermost_code != cdk_function)
fa6098f8
MM
7787 {
7788 error ("function definition does not declare parameters");
7789 return error_mark_node;
7790 }
8d08fdba 7791
e1cd6e56 7792 if (((dname && IDENTIFIER_OPNAME_P (dname)) || flags == TYPENAME_FLAG)
058b15c1 7793 && innermost_code != cdk_function
62d1db17 7794 && ! (ctype && !declspecs->any_specifiers_p))
e1cd6e56 7795 {
2d01edd7 7796 error ("declaration of %qD as non-function", dname);
943e3ede 7797 return error_mark_node;
e1cd6e56
MS
7798 }
7799
8d08fdba
MS
7800 /* Anything declared one level down from the top level
7801 must be one of the parameters of a function
7802 (because the body is at least two levels down). */
7803
7804 /* This heuristic cannot be applied to C++ nodes! Fixed, however,
7805 by not allowing C++ class definitions to specify their parameters
7806 with xdecls (must be spec.d in the parmlist).
7807
7808 Since we now wait to push a class scope until we are sure that
7809 we are in a legitimate method context, we must set oldcname
a9aedbc2
MS
7810 explicitly (since current_class_name is not yet alive).
7811
7812 We also want to avoid calling this a PARM if it is in a namespace. */
8d08fdba 7813
9188c363 7814 if (decl_context == NORMAL && !toplevel_bindings_p ())
a9aedbc2 7815 {
e2500fed 7816 struct cp_binding_level *b = current_binding_level;
ff955512 7817 current_binding_level = b->level_chain;
a9aedbc2
MS
7818 if (current_binding_level != 0 && toplevel_bindings_p ())
7819 decl_context = PARM;
ff955512 7820 current_binding_level = b;
a9aedbc2 7821 }
8d08fdba 7822
34fc957d
NS
7823 if (name == NULL)
7824 name = decl_context == PARM ? "parameter" : "type name";
68642fb6 7825
62d1db17
MM
7826 /* If there were multiple types specified in the decl-specifier-seq,
7827 issue an error message. */
7828 if (declspecs->multiple_types_p)
32273f9f
LM
7829 {
7830 error ("two or more data types in declaration of %qs", name);
7831 return error_mark_node;
7832 }
7833
9b70c6b0
PC
7834 if (declspecs->conflicting_specifiers_p)
7835 {
7836 error ("conflicting specifiers in declaration of %qs", name);
7837 return error_mark_node;
7838 }
7839
62d1db17
MM
7840 /* Extract the basic type from the decl-specifier-seq. */
7841 type = declspecs->type;
7842 if (type == error_mark_node)
2cfe82fe
ZW
7843 {
7844 type = NULL_TREE;
7845 type_was_error_mark_node = true;
7846 }
62d1db17
MM
7847 /* If the entire declaration is itself tagged as deprecated then
7848 suppress reports of deprecated items. */
7849 if (type && TREE_DEPRECATED (type)
7850 && deprecated_state != DEPRECATED_SUPPRESS)
9b86d6bb 7851 warn_deprecated_use (type, NULL_TREE);
62d1db17 7852 if (type && TREE_CODE (type) == TYPE_DECL)
8d08fdba 7853 {
62d1db17
MM
7854 typedef_decl = type;
7855 type = TREE_TYPE (typedef_decl);
823dd937
JM
7856 if (TREE_DEPRECATED (type)
7857 && DECL_ARTIFICIAL (typedef_decl)
7858 && deprecated_state != DEPRECATED_SUPPRESS)
9b86d6bb 7859 warn_deprecated_use (type, NULL_TREE);
62d1db17
MM
7860 }
7861 /* No type at all: default to `int', and set DEFAULTED_INT
7862 because it was not a user-defined typedef. */
1ff3c076 7863 if (type == NULL_TREE && (signed_p || unsigned_p || long_p || short_p))
62d1db17
MM
7864 {
7865 /* These imply 'int'. */
7866 type = integer_type_node;
7867 defaulted_int = 1;
7868 }
7869 /* Gather flags. */
7870 explicit_int = declspecs->explicit_int_p;
7871 explicit_char = declspecs->explicit_char_p;
7a1f3f5f 7872
8d6e459d
NS
7873#if 0
7874 /* See the code below that used this. */
7875 if (typedef_decl)
7876 decl_attr = DECL_ATTRIBUTES (typedef_decl);
7877#endif
8d08fdba
MS
7878 typedef_type = type;
7879
a3203465 7880
44d10c10
PB
7881 if (sfk != sfk_conversion)
7882 ctor_return_type = ctype;
7883
3dbc07b6
MM
7884 if (sfk != sfk_none)
7885 type = check_special_function_return_type (sfk, type,
3dbc07b6
MM
7886 ctor_return_type);
7887 else if (type == NULL_TREE)
8d08fdba 7888 {
3dbc07b6
MM
7889 int is_main;
7890
8d08fdba 7891 explicit_int = -1;
3dbc07b6 7892
0fd0b7ee
JM
7893 /* We handle `main' specially here, because 'main () { }' is so
7894 common. With no options, it is allowed. With -Wreturn-type,
7895 it is a warning. It is only an error with -pedantic-errors. */
3dbc07b6 7896 is_main = (funcdef_flag
7437519c 7897 && dname && MAIN_NAME_P (dname)
3dbc07b6
MM
7898 && ctype == NULL_TREE
7899 && in_namespace == NULL_TREE
7900 && current_namespace == global_namespace);
7901
2cfe82fe
ZW
7902 if (type_was_error_mark_node)
7903 /* We've already issued an error, don't complain more. */;
7904 else if (in_system_header || flag_ms_extensions)
3dbc07b6 7905 /* Allow it, sigh. */;
37ec60ed 7906 else if (! is_main)
cbe5f3b3 7907 permerror (input_location, "ISO C++ forbids declaration of %qs with no type", name);
37ec60ed 7908 else if (pedantic)
509c9d60 7909 pedwarn (input_location, OPT_pedantic,
fcf73884 7910 "ISO C++ forbids declaration of %qs with no type", name);
b10fc6f5
GDR
7911 else
7912 warning (OPT_Wreturn_type,
7913 "ISO C++ forbids declaration of %qs with no type", name);
41eff652 7914
3dbc07b6 7915 type = integer_type_node;
51c184be 7916 }
caf93cb0 7917
8d08fdba
MS
7918 ctype = NULL_TREE;
7919
7920 /* Now process the modifiers that were specified
7921 and check for invalid combinations. */
7922
7923 /* Long double is a special combination. */
3cc189f5 7924 if (long_p && !longlong && TYPE_MAIN_VARIANT (type) == double_type_node)
8d08fdba 7925 {
1ff3c076 7926 long_p = false;
68642fb6 7927 type = build_qualified_type (long_double_type_node,
89d684bb 7928 cp_type_quals (type));
8d08fdba
MS
7929 }
7930
7931 /* Check all other uses of type modifiers. */
7932
1ff3c076 7933 if (unsigned_p || signed_p || long_p || short_p)
8d08fdba
MS
7934 {
7935 int ok = 0;
7936
3cc189f5
VR
7937 if ((signed_p || unsigned_p) && TREE_CODE (type) != INTEGER_TYPE)
7938 error ("%<signed%> or %<unsigned%> invalid for %qs", name);
1ff3c076 7939 else if (signed_p && unsigned_p)
3cc189f5
VR
7940 error ("%<signed%> and %<unsigned%> specified together for %qs", name);
7941 else if (longlong && TREE_CODE (type) != INTEGER_TYPE)
7942 error ("%<long long%> invalid for %qs", name);
7943 else if (long_p && TREE_CODE (type) == REAL_TYPE)
7944 error ("%<long%> invalid for %qs", name);
7945 else if (short_p && TREE_CODE (type) == REAL_TYPE)
7946 error ("%<short%> invalid for %qs", name);
5d48268f
VR
7947 else if ((long_p || short_p) && TREE_CODE (type) != INTEGER_TYPE)
7948 error ("%<long%> or %<short%> invalid for %qs", name);
3cc189f5
VR
7949 else if ((long_p || short_p) && explicit_char)
7950 error ("%<long%> or %<short%> specified with char for %qs", name);
7951 else if (long_p && short_p)
7952 error ("%<long%> and %<short%> specified together for %qs", name);
b6baa67d
KVH
7953 else if (type == char16_type_node || type == char32_type_node)
7954 {
7955 if (signed_p || unsigned_p)
7956 error ("%<signed%> or %<unsigned%> invalid for %qs", name);
7957 else if (short_p || long_p)
7958 error ("%<short%> or %<long%> invalid for %qs", name);
7959 }
8d08fdba
MS
7960 else
7961 {
7962 ok = 1;
37c46b43 7963 if (!explicit_int && !defaulted_int && !explicit_char && pedantic)
8d08fdba 7964 {
509c9d60 7965 pedwarn (input_location, OPT_pedantic,
fcf73884 7966 "long, short, signed or unsigned used invalidly for %qs",
8d08fdba
MS
7967 name);
7968 if (flag_pedantic_errors)
7969 ok = 0;
7970 }
7971 }
7972
7973 /* Discard the type modifiers if they are invalid. */
7974 if (! ok)
7975 {
1ff3c076
MM
7976 unsigned_p = false;
7977 signed_p = false;
7978 long_p = false;
7979 short_p = false;
8d08fdba
MS
7980 longlong = 0;
7981 }
7982 }
7983
7984 /* Decide whether an integer type is signed or not.
7985 Optionally treat bitfields as signed by default. */
1ff3c076 7986 if (unsigned_p
b89c5a7b
MM
7987 /* [class.bit]
7988
7989 It is implementation-defined whether a plain (neither
7990 explicitly signed or unsigned) char, short, int, or long
7991 bit-field is signed or unsigned.
68642fb6 7992
b89c5a7b
MM
7993 Naturally, we extend this to long long as well. Note that
7994 this does not include wchar_t. */
7995 || (bitfield && !flag_signed_bitfields
1ff3c076 7996 && !signed_p
b89c5a7b
MM
7997 /* A typedef for plain `int' without `signed' can be
7998 controlled just like plain `int', but a typedef for
7999 `signed int' cannot be so controlled. */
68642fb6 8000 && !(typedef_decl
29bbeb1c 8001 && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
b38a05d0 8002 && TREE_CODE (type) == INTEGER_TYPE
29bbeb1c 8003 && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
8d08fdba
MS
8004 {
8005 if (longlong)
8006 type = long_long_unsigned_type_node;
1ff3c076 8007 else if (long_p)
8d08fdba 8008 type = long_unsigned_type_node;
1ff3c076 8009 else if (short_p)
8d08fdba
MS
8010 type = short_unsigned_type_node;
8011 else if (type == char_type_node)
8012 type = unsigned_char_type_node;
8013 else if (typedef_decl)
ca5ba2a3 8014 type = unsigned_type_for (type);
8d08fdba
MS
8015 else
8016 type = unsigned_type_node;
8017 }
1ff3c076 8018 else if (signed_p && type == char_type_node)
8d08fdba
MS
8019 type = signed_char_type_node;
8020 else if (longlong)
8021 type = long_long_integer_type_node;
1ff3c076 8022 else if (long_p)
8d08fdba 8023 type = long_integer_type_node;
1ff3c076 8024 else if (short_p)
8d08fdba
MS
8025 type = short_integer_type_node;
8026
62d1db17 8027 if (declspecs->specs[(int)ds_complex])
37c46b43 8028 {
1ff3c076 8029 if (TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
2d01edd7 8030 error ("complex invalid for %qs", name);
37c46b43
MS
8031 /* If we just have "complex", it is equivalent to
8032 "complex double", but if any modifiers at all are specified it is
8033 the complex form of TYPE. E.g, "complex short" is
8034 "complex short int". */
8035
1ff3c076
MM
8036 else if (defaulted_int && ! longlong
8037 && ! (long_p || short_p || signed_p || unsigned_p))
37c46b43
MS
8038 type = complex_double_type_node;
8039 else if (type == integer_type_node)
8040 type = complex_integer_type_node;
8041 else if (type == float_type_node)
8042 type = complex_float_type_node;
8043 else if (type == double_type_node)
8044 type = complex_double_type_node;
8045 else if (type == long_double_type_node)
8046 type = complex_long_double_type_node;
8047 else
8048 type = build_complex_type (type);
8049 }
8050
4f2b0fb2 8051 type_quals = TYPE_UNQUALIFIED;
62d1db17 8052 if (declspecs->specs[(int)ds_const])
4f2b0fb2 8053 type_quals |= TYPE_QUAL_CONST;
7ecbca9d
GDR
8054 /* A `constexpr' specifier used in an object declaration declares
8055 the object as `const'. */
8056 if (constexpr_p)
8057 {
8058 if (innermost_code == cdk_function)
8059 ;
8060 else if (declspecs->specs[(int)ds_const] != 0)
8061 error ("both %<const%> and %<constexpr%> cannot be used here");
8062 else
8063 type_quals |= TYPE_QUAL_CONST;
8064 }
62d1db17 8065 if (declspecs->specs[(int)ds_volatile])
4f2b0fb2 8066 type_quals |= TYPE_QUAL_VOLATILE;
62d1db17 8067 if (declspecs->specs[(int)ds_restrict])
4f2b0fb2
NS
8068 type_quals |= TYPE_QUAL_RESTRICT;
8069 if (sfk == sfk_conversion && type_quals != TYPE_UNQUALIFIED)
2d01edd7 8070 error ("qualifiers are not allowed on declaration of %<operator %T%>",
0cbd7506 8071 ctor_return_type);
3ac3d9ea 8072
c8094d83 8073 if (TREE_CODE (type) == FUNCTION_TYPE
9804209d
DG
8074 && type_quals != TYPE_UNQUALIFIED)
8075 {
8076 /* This was an error in C++98 (cv-qualifiers cannot be added to
0cbd7506
MS
8077 a function type), but DR 295 makes the code well-formed by
8078 dropping the extra qualifiers. */
9804209d 8079 if (pedantic)
0cbd7506
MS
8080 {
8081 tree bad_type = build_qualified_type (type, type_quals);
509c9d60 8082 pedwarn (input_location, OPT_pedantic,
fcf73884 8083 "ignoring %qV qualifiers added to function type %qT",
0cbd7506
MS
8084 bad_type, type);
8085 }
9804209d
DG
8086 type_quals = TYPE_UNQUALIFIED;
8087 }
4f2b0fb2
NS
8088 type_quals |= cp_type_quals (type);
8089 type = cp_build_qualified_type_real
8090 (type, type_quals, ((typedef_decl && !DECL_ARTIFICIAL (typedef_decl)
23fca1f5 8091 ? tf_ignore_bad_quals : 0) | tf_warning_or_error));
4f2b0fb2
NS
8092 /* We might have ignored or rejected some of the qualifiers. */
8093 type_quals = cp_type_quals (type);
caf93cb0 8094
8d08fdba 8095 staticp = 0;
62d1db17
MM
8096 inlinep = !! declspecs->specs[(int)ds_inline];
8097 virtualp = !! declspecs->specs[(int)ds_virtual];
8098 explicitp = !! declspecs->specs[(int)ds_explicit];
8d08fdba 8099
1ff3c076
MM
8100 storage_class = declspecs->storage_class;
8101 if (storage_class == sc_static)
8d08fdba
MS
8102 staticp = 1 + (decl_context == FIELD);
8103
8104 if (virtualp && staticp == 2)
8105 {
2d01edd7 8106 error ("member %qD cannot be declared both virtual and static", dname);
7e1e0765 8107 storage_class = sc_none;
8d08fdba
MS
8108 staticp = 0;
8109 }
62d1db17 8110 friendp = !! declspecs->specs[(int)ds_friend];
8d08fdba 8111
d1c78882 8112 if (dependent_name && !friendp)
d5614afb 8113 {
d1c78882 8114 error ("%<%T::%D%> is not a valid declarator", ctype, dependent_name);
13dbe691 8115 return error_mark_node;
d5614afb 8116 }
8d08fdba 8117
62d1db17
MM
8118 /* Issue errors about use of storage classes for parameters. */
8119 if (decl_context == PARM)
8d08fdba 8120 {
62d1db17 8121 if (declspecs->specs[(int)ds_typedef])
709f9dcf
VR
8122 {
8123 error ("typedef declaration invalid in parameter declaration");
8124 return error_mark_node;
8125 }
1ff3c076
MM
8126 else if (storage_class == sc_static
8127 || storage_class == sc_extern
8128 || thread_p)
8251199e 8129 error ("storage class specifiers invalid in parameter declarations");
3f50c846
JM
8130
8131 if (type_uses_auto (type))
8132 {
8133 error ("parameter declared %<auto%>");
8134 type = error_mark_node;
8135 }
7ecbca9d
GDR
8136
8137 /* Function parameters cannot be constexpr. If we saw one, moan
8138 and pretend it wasn't there. */
8139 if (constexpr_p)
8140 {
8141 error ("a parameter cannot be declared %<constexpr%>");
8142 constexpr_p = 0;
8143 }
8d08fdba
MS
8144 }
8145
8146 /* Give error if `virtual' is used outside of class declaration. */
b7484fbe
MS
8147 if (virtualp
8148 && (current_class_name == NULL_TREE || decl_context != FIELD))
8d08fdba 8149 {
bcac2b89 8150 error ("%<virtual%> outside class declaration");
8d08fdba
MS
8151 virtualp = 0;
8152 }
8d08fdba
MS
8153
8154 /* Static anonymous unions are dealt with here. */
8155 if (staticp && decl_context == TYPENAME
62d1db17
MM
8156 && declspecs->type
8157 && ANON_AGGR_TYPE_P (declspecs->type))
8d08fdba
MS
8158 decl_context = FIELD;
8159
8d08fdba
MS
8160 /* Warn about storage classes that are invalid for certain
8161 kinds of declarations (parameters, typenames, etc.). */
3e66d096
JJ
8162 if (thread_p
8163 && ((storage_class
8164 && storage_class != sc_extern
8165 && storage_class != sc_static)
8166 || declspecs->specs[(int)ds_typedef]))
8167 {
8168 error ("multiple storage classes in declaration of %qs", name);
8169 thread_p = false;
8170 }
9b70c6b0
PC
8171 if (decl_context != NORMAL
8172 && ((storage_class != sc_none
8173 && storage_class != sc_mutable)
8174 || thread_p))
8d08fdba 8175 {
db5ae43f 8176 if ((decl_context == PARM || decl_context == CATCHPARM)
1ff3c076
MM
8177 && (storage_class == sc_register
8178 || storage_class == sc_auto))
8d08fdba 8179 ;
62d1db17 8180 else if (declspecs->specs[(int)ds_typedef])
fc378698 8181 ;
8d08fdba 8182 else if (decl_context == FIELD
f4f206f4 8183 /* C++ allows static class elements. */
1ff3c076 8184 && storage_class == sc_static)
d363e7bf
AJ
8185 /* C++ also allows inlines and signed and unsigned elements,
8186 but in those cases we don't come in here. */
8d08fdba
MS
8187 ;
8188 else
8189 {
8190 if (decl_context == FIELD)
389c6c8b 8191 error ("storage class specified for %qs", name);
8d08fdba 8192 else
b9d12519
KG
8193 {
8194 if (decl_context == PARM || decl_context == CATCHPARM)
2d01edd7 8195 error ("storage class specified for parameter %qs", name);
b9d12519
KG
8196 else
8197 error ("storage class specified for typename");
8198 }
1ff3c076
MM
8199 if (storage_class == sc_register
8200 || storage_class == sc_auto
8201 || storage_class == sc_extern
8202 || thread_p)
8203 storage_class = sc_none;
8d08fdba
MS
8204 }
8205 }
1ff3c076 8206 else if (storage_class == sc_extern && funcdef_flag
a9aedbc2 8207 && ! toplevel_bindings_p ())
2d01edd7 8208 error ("nested function %qs declared %<extern%>", name);
a9aedbc2 8209 else if (toplevel_bindings_p ())
8d08fdba 8210 {
1ff3c076 8211 if (storage_class == sc_auto)
2d01edd7 8212 error ("top-level declaration of %qs specifies %<auto%>", name);
8d08fdba 8213 }
1ff3c076
MM
8214 else if (thread_p
8215 && storage_class != sc_extern
8216 && storage_class != sc_static)
7a1f3f5f 8217 {
2d01edd7 8218 error ("function-scope %qs implicitly auto and declared %<__thread%>",
7a1f3f5f 8219 name);
1ff3c076 8220 thread_p = false;
7a1f3f5f 8221 }
8d08fdba 8222
1ff3c076 8223 if (storage_class && friendp)
ff7437d0
SM
8224 {
8225 error ("storage class specifiers invalid in friend function declarations");
8226 storage_class = sc_none;
8227 staticp = 0;
8228 }
909e536a 8229
058b15c1
MM
8230 if (!id_declarator)
8231 unqualified_id = NULL_TREE;
8232 else
8d08fdba 8233 {
1d786913 8234 unqualified_id = id_declarator->u.id.unqualified_name;
058b15c1 8235 switch (TREE_CODE (unqualified_id))
8d08fdba 8236 {
058b15c1 8237 case BIT_NOT_EXPR:
bd967b22
JM
8238 unqualified_id = TREE_OPERAND (unqualified_id, 0);
8239 if (TYPE_P (unqualified_id))
8240 unqualified_id = constructor_name (unqualified_id);
058b15c1 8241 break;
caf93cb0 8242
058b15c1
MM
8243 case IDENTIFIER_NODE:
8244 case TEMPLATE_ID_EXPR:
52fbc847 8245 break;
caf93cb0 8246
058b15c1 8247 default:
8dc2b103 8248 gcc_unreachable ();
058b15c1
MM
8249 }
8250 }
52fbc847 8251
058b15c1
MM
8252 /* Determine the type of the entity declared by recurring on the
8253 declarator. */
f4f18103 8254 for (; declarator; declarator = declarator->declarator)
058b15c1
MM
8255 {
8256 const cp_declarator *inner_declarator;
8257 tree attrs;
8d08fdba 8258
058b15c1
MM
8259 if (type == error_mark_node)
8260 return error_mark_node;
c1b177ec 8261
058b15c1
MM
8262 attrs = declarator->attributes;
8263 if (attrs)
8264 {
8265 int attr_flags;
caf93cb0 8266
058b15c1
MM
8267 attr_flags = 0;
8268 if (declarator == NULL || declarator->kind == cdk_id)
8269 attr_flags |= (int) ATTR_FLAG_DECL_NEXT;
8270 if (declarator->kind == cdk_function)
8271 attr_flags |= (int) ATTR_FLAG_FUNCTION_NEXT;
8272 if (declarator->kind == cdk_array)
8273 attr_flags |= (int) ATTR_FLAG_ARRAY_NEXT;
8274 returned_attrs = decl_attributes (&type,
8275 chainon (returned_attrs, attrs),
8276 attr_flags);
8277 }
8278
f4f18103
MM
8279 if (declarator->kind == cdk_id)
8280 break;
8281
8282 inner_declarator = declarator->declarator;
8283
058b15c1
MM
8284 switch (declarator->kind)
8285 {
8286 case cdk_array:
caf93cb0 8287 type = create_array_type_for_decl (dname, type,
058b15c1 8288 declarator->u.array.bounds);
8d08fdba
MS
8289 break;
8290
058b15c1 8291 case cdk_function:
8d08fdba
MS
8292 {
8293 tree arg_types;
f376e137 8294 int funcdecl_p;
8d08fdba
MS
8295
8296 /* Declaring a function type.
8297 Make sure we have a valid type for the function to return. */
8d08fdba 8298
1891dec4
DM
8299 if (type_quals != TYPE_UNQUALIFIED)
8300 {
8301 if (SCALAR_TYPE_P (type) || VOID_TYPE_P (type))
5db2e9ca 8302 warning (OPT_Wignored_qualifiers,
1891dec4
DM
8303 "type qualifiers ignored on function return type");
8304 /* We now know that the TYPE_QUALS don't apply to the
8305 decl, but to its return type. */
8306 type_quals = TYPE_UNQUALIFIED;
1891dec4 8307 }
40449a90
SL
8308 errmsg = targetm.invalid_return_type (type);
8309 if (errmsg)
8310 {
8311 error (errmsg);
8312 type = integer_type_node;
8313 }
8d08fdba 8314
e3276457 8315 /* Error about some types functions can't return. */
8d08fdba
MS
8316
8317 if (TREE_CODE (type) == FUNCTION_TYPE)
8318 {
2d01edd7 8319 error ("%qs declared as function returning a function", name);
e3276457 8320 return error_mark_node;
8d08fdba
MS
8321 }
8322 if (TREE_CODE (type) == ARRAY_TYPE)
8323 {
2d01edd7 8324 error ("%qs declared as function returning an array", name);
e3276457 8325 return error_mark_node;
8d08fdba
MS
8326 }
8327
b7484fbe 8328 /* Pick up type qualifiers which should be applied to `this'. */
e2537f2c 8329 memfn_quals = declarator->u.function.qualifiers;
b7484fbe 8330
c11b6f21 8331 /* Pick up the exception specifications. */
058b15c1 8332 raises = declarator->u.function.exception_specification;
c11b6f21 8333
4f48b9c1
JJ
8334 /* Say it's a definition only for the CALL_EXPR
8335 closest to the identifier. */
8336 funcdecl_p = inner_declarator && inner_declarator->kind == cdk_id;
8337
f57ca1ea 8338 /* Handle a late-specified return type. */
4f48b9c1
JJ
8339 if (funcdecl_p)
8340 {
8341 if (type_uses_auto (type))
8342 {
64e12c68 8343 if (!declarator->u.function.late_return_type)
4f48b9c1 8344 {
3f50c846 8345 error ("%qs function uses %<auto%> type specifier without"
4f48b9c1
JJ
8346 " late return type", name);
8347 return error_mark_node;
8348 }
8349 else if (!is_auto (type))
8350 {
3f50c846
JM
8351 error ("%qs function with late return type has"
8352 " %qT as its type rather than plain %<auto%>",
8353 name, type);
4f48b9c1
JJ
8354 return error_mark_node;
8355 }
8356 }
8357 else if (declarator->u.function.late_return_type)
8358 {
8359 error ("%qs function with late return type not declared"
3f50c846 8360 " with %<auto%> type specifier", name);
4f48b9c1
JJ
8361 return error_mark_node;
8362 }
8363 }
f57ca1ea
JM
8364 type = splice_late_return_type
8365 (type, declarator->u.function.late_return_type);
8366 if (type == error_mark_node)
8367 return error_mark_node;
8368
8d08fdba
MS
8369 if (ctype == NULL_TREE
8370 && decl_context == FIELD
f376e137 8371 && funcdecl_p
8d08fdba
MS
8372 && (friendp == 0 || dname == current_class_name))
8373 ctype = current_class_type;
8374
058b15c1
MM
8375 if (ctype && (sfk == sfk_constructor
8376 || sfk == sfk_destructor))
8d08fdba
MS
8377 {
8378 /* We are within a class's scope. If our declarator name
8379 is the same as the class name, and we are defining
8380 a function, then it is a constructor/destructor, and
8381 therefore returns a void type. */
3db45ab5 8382
e2537f2c
MM
8383 /* ISO C++ 12.4/2. A destructor may not be declared
8384 const or volatile. A destructor may not be
8385 static.
3db45ab5 8386
e2537f2c
MM
8387 ISO C++ 12.1. A constructor may not be declared
8388 const or volatile. A constructor may not be
8389 virtual. A constructor may not be static. */
3db45ab5 8390 if (staticp == 2)
e2537f2c
MM
8391 error ((flags == DTOR_FLAG)
8392 ? "destructor cannot be static member function"
8393 : "constructor cannot be static member function");
8394 if (memfn_quals)
8d08fdba 8395 {
e2537f2c
MM
8396 error ((flags == DTOR_FLAG)
8397 ? "destructors may not be cv-qualified"
8398 : "constructors may not be cv-qualified");
8399 memfn_quals = TYPE_UNQUALIFIED;
8d08fdba 8400 }
e2537f2c
MM
8401
8402 if (decl_context == FIELD
8403 && !member_function_or_else (ctype,
8404 current_class_type,
8405 flags))
13dbe691 8406 return error_mark_node;
e2537f2c
MM
8407
8408 if (flags != DTOR_FLAG)
8d08fdba 8409 {
e2537f2c 8410 /* It's a constructor. */
db5ae43f
MS
8411 if (explicitp == 1)
8412 explicitp = 2;
8d08fdba
MS
8413 if (virtualp)
8414 {
cbe5f3b3 8415 permerror (input_location, "constructors cannot be declared virtual");
8d08fdba
MS
8416 virtualp = 0;
8417 }
7137605e
MM
8418 if (decl_context == FIELD
8419 && sfk != sfk_constructor)
13dbe691 8420 return error_mark_node;
8d08fdba
MS
8421 }
8422 if (decl_context == FIELD)
8423 staticp = 0;
8424 }
b7484fbe 8425 else if (friendp)
8d08fdba 8426 {
b7484fbe 8427 if (initialized)
2d01edd7 8428 error ("can't initialize friend function %qs", name);
b7484fbe
MS
8429 if (virtualp)
8430 {
8431 /* Cannot be both friend and virtual. */
8251199e 8432 error ("virtual functions cannot be friends");
b7484fbe
MS
8433 friendp = 0;
8434 }
28cbf42c 8435 if (decl_context == NORMAL)
8251199e 8436 error ("friend declaration not in class definition");
28cbf42c 8437 if (current_function_decl && funcdef_flag)
2d01edd7 8438 error ("can't define friend function %qs in a local "
0cbd7506
MS
8439 "class definition",
8440 name);
8d08fdba 8441 }
e57d93c6
JM
8442 else if (ctype && sfk == sfk_conversion)
8443 {
8444 if (explicitp == 1)
8445 {
8446 maybe_warn_cpp0x ("explicit conversion operators");
8447 explicitp = 2;
8448 }
8449 }
8d08fdba 8450
7ecbca9d
GDR
8451 /* It is not allowed to use `constexpr' in a function
8452 declaration that is not a definition.
8453 That is too strict, though. */
8454 if (constexpr_p && !funcdef_flag)
8455 {
8456 error ("the %<constexpr%> specifier cannot be used in "
8457 "a function declaration that is not a definition");
8458 constexpr_p = false;
8459 }
8460
8461 /* A constexpr non-static member function is implicitly const. */
8462 if (constexpr_p && decl_context == FIELD && staticp == 0
8463 && sfk != sfk_constructor && sfk != sfk_destructor)
8464 memfn_quals |= TYPE_QUAL_CONST;
8465
caf93cb0 8466 arg_types = grokparms (declarator->u.function.parameters,
058b15c1 8467 &parms);
8d08fdba 8468
058b15c1
MM
8469 if (inner_declarator
8470 && inner_declarator->kind == cdk_id
8471 && inner_declarator->u.id.sfk == sfk_destructor
8472 && arg_types != void_list_node)
8d08fdba 8473 {
058b15c1
MM
8474 error ("destructors may not have parameters");
8475 arg_types = void_list_node;
8476 parms = NULL_TREE;
8d08fdba 8477 }
caf93cb0 8478
d22c8596 8479 type = build_function_type (type, arg_types);
8d08fdba
MS
8480 }
8481 break;
8482
058b15c1
MM
8483 case cdk_pointer:
8484 case cdk_reference:
8485 case cdk_ptrmem:
8d08fdba
MS
8486 /* Filter out pointers-to-references and references-to-references.
8487 We can get these if a TYPE_DECL is used. */
8488
8489 if (TREE_CODE (type) == REFERENCE_TYPE)
8490 {
8af2fec4
RY
8491 if (declarator->kind != cdk_reference)
8492 {
8493 error ("cannot declare pointer to %q#T", type);
8494 type = TREE_TYPE (type);
8495 }
8496
8497 /* In C++0x, we allow reference to reference declarations
8498 that occur indirectly through typedefs [7.1.3/8 dcl.typedef]
8499 and template type arguments [14.3.1/4 temp.arg.type]. The
8500 check for direct reference to reference declarations, which
8501 are still forbidden, occurs below. Reasoning behind the change
8502 can be found in DR106, DR540, and the rvalue reference
8503 proposals. */
c1ae8be5 8504 else if (cxx_dialect == cxx98)
8af2fec4
RY
8505 {
8506 error ("cannot declare reference to %q#T", type);
8507 type = TREE_TYPE (type);
8508 }
a5894242 8509 }
058b15c1
MM
8510 else if (VOID_TYPE_P (type))
8511 {
8512 if (declarator->kind == cdk_reference)
2d01edd7 8513 error ("cannot declare reference to %q#T", type);
058b15c1 8514 else if (declarator->kind == cdk_ptrmem)
2d01edd7 8515 error ("cannot declare pointer to %q#T member", type);
058b15c1 8516 }
61a127b3 8517
91063b51
MM
8518 /* We now know that the TYPE_QUALS don't apply to the decl,
8519 but to the target of the pointer. */
8520 type_quals = TYPE_UNQUALIFIED;
8d08fdba 8521
058b15c1 8522 if (declarator->kind == cdk_ptrmem
1b021ff4
JJ
8523 && (TREE_CODE (type) == FUNCTION_TYPE
8524 || (memfn_quals && TREE_CODE (type) == METHOD_TYPE)))
058b15c1 8525 {
e2537f2c 8526 memfn_quals |= cp_type_quals (type);
3db45ab5 8527 type = build_memfn_type (type,
e2537f2c
MM
8528 declarator->u.pointer.class_type,
8529 memfn_quals);
8530 memfn_quals = TYPE_UNQUALIFIED;
058b15c1
MM
8531 }
8532
0d9c0892
JM
8533 if (TREE_CODE (type) == FUNCTION_TYPE
8534 && cp_type_quals (type) != TYPE_UNQUALIFIED)
8535 error ("cannot declare %s to qualified function type %qT",
8536 declarator->kind == cdk_reference ? "reference" : "pointer",
8537 type);
8538
058b15c1 8539 if (declarator->kind == cdk_reference)
8d08fdba 8540 {
8af2fec4
RY
8541 /* In C++0x, the type we are creating a reference to might be
8542 a typedef which is itself a reference type. In that case,
8543 we follow the reference collapsing rules in
8544 [7.1.3/8 dcl.typedef] to create the final reference type:
8545
8546 "If a typedef TD names a type that is a reference to a type
8547 T, an attempt to create the type 'lvalue reference to cv TD'
8548 creates the type 'lvalue reference to T,' while an attempt
8549 to create the type "rvalue reference to cv TD' creates the
8550 type TD."
8551 */
dd29188b 8552 if (!VOID_TYPE_P (type))
8af2fec4
RY
8553 type = cp_build_reference_type
8554 ((TREE_CODE (type) == REFERENCE_TYPE
8555 ? TREE_TYPE (type) : type),
8556 (declarator->u.reference.rvalue_ref
8557 && (TREE_CODE(type) != REFERENCE_TYPE
8558 || TYPE_REF_IS_RVALUE (type))));
8559
8560 /* In C++0x, we need this check for direct reference to
8561 reference declarations, which are forbidden by
8562 [8.3.2/5 dcl.ref]. Reference to reference declarations
8563 are only allowed indirectly through typedefs and template
8564 type arguments. Example:
8565
8566 void foo(int & &); // invalid ref-to-ref decl
8567
8568 typedef int & int_ref;
8569 void foo(int_ref &); // valid ref-to-ref decl
8570 */
8571 if (inner_declarator && inner_declarator->kind == cdk_reference)
8572 error ("cannot declare reference to %q#T, which is not "
8573 "a typedef or a template type argument", type);
8d08fdba
MS
8574 }
8575 else if (TREE_CODE (type) == METHOD_TYPE)
d8f8dca1 8576 type = build_ptrmemfunc_type (build_pointer_type (type));
058b15c1 8577 else if (declarator->kind == cdk_ptrmem)
f4ed7d21 8578 {
63c9a190
MM
8579 gcc_assert (TREE_CODE (declarator->u.pointer.class_type)
8580 != NAMESPACE_DECL);
8581 if (declarator->u.pointer.class_type == error_mark_node)
4230cec2
NS
8582 /* We will already have complained. */
8583 type = error_mark_node;
f4ed7d21
NS
8584 else
8585 type = build_ptrmem_type (declarator->u.pointer.class_type,
8586 type);
8587 }
8d08fdba
MS
8588 else
8589 type = build_pointer_type (type);
8590
8591 /* Process a list of type modifier keywords (such as
8592 const or volatile) that were given inside the `*' or `&'. */
8593
058b15c1 8594 if (declarator->u.pointer.qualifiers)
8d08fdba 8595 {
caf93cb0
EC
8596 type
8597 = cp_build_qualified_type (type,
3c01e5df 8598 declarator->u.pointer.qualifiers);
4f2b0fb2 8599 type_quals = cp_type_quals (type);
8d08fdba 8600 }
8d08fdba
MS
8601 ctype = NULL_TREE;
8602 break;
8603
058b15c1
MM
8604 case cdk_error:
8605 break;
8d08fdba 8606
058b15c1 8607 default:
8dc2b103 8608 gcc_unreachable ();
058b15c1
MM
8609 }
8610 }
caf93cb0 8611
058b15c1
MM
8612 if (unqualified_id && TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR
8613 && TREE_CODE (type) != FUNCTION_TYPE
8614 && TREE_CODE (type) != METHOD_TYPE)
8615 {
2d01edd7 8616 error ("template-id %qD used as a declarator",
058b15c1
MM
8617 unqualified_id);
8618 unqualified_id = dname;
8619 }
386b8a85 8620
9c12301f
MM
8621 /* If TYPE is a FUNCTION_TYPE, but the function name was explicitly
8622 qualified with a class-name, turn it into a METHOD_TYPE, unless
8623 we know that the function is static. We take advantage of this
8624 opportunity to do other processing that pertains to entities
8625 explicitly declared to be class members. Note that if DECLARATOR
8626 is non-NULL, we know it is a cdk_id declarator; otherwise, we
8627 would not have exited the loop above. */
caf93cb0 8628 if (declarator
1d786913
MM
8629 && declarator->u.id.qualifying_scope
8630 && TYPE_P (declarator->u.id.qualifying_scope))
058b15c1
MM
8631 {
8632 tree t;
8d08fdba 8633
1d786913
MM
8634 ctype = declarator->u.id.qualifying_scope;
8635 ctype = TYPE_MAIN_VARIANT (ctype);
058b15c1
MM
8636 t = ctype;
8637 while (t != NULL_TREE && CLASS_TYPE_P (t))
8638 {
8639 /* You're supposed to have one `template <...>' for every
8640 template class, but you don't need one for a full
8641 specialization. For example:
8d08fdba 8642
058b15c1
MM
8643 template <class T> struct S{};
8644 template <> struct S<int> { void f(); };
8645 void S<int>::f () {}
28cbf42c 8646
058b15c1
MM
8647 is correct; there shouldn't be a `template <>' for the
8648 definition of `S<int>::f'. */
f0d60e22
MM
8649 if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t)
8650 && !any_dependent_template_arguments_p (CLASSTYPE_TI_ARGS (t)))
8651 /* T is an explicit (not partial) specialization. All
8652 containing classes must therefore also be explicitly
8653 specialized. */
8654 break;
8655 if ((CLASSTYPE_USE_TEMPLATE (t) || CLASSTYPE_IS_TEMPLATE (t))
058b15c1
MM
8656 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t)))
8657 template_count += 1;
28cbf42c 8658
058b15c1
MM
8659 t = TYPE_MAIN_DECL (t);
8660 t = DECL_CONTEXT (t);
8661 }
8d08fdba 8662
058b15c1 8663 if (ctype == current_class_type)
59e7c84c
VR
8664 {
8665 if (friendp)
b46ce77f 8666 {
cbe5f3b3 8667 permerror (input_location, "member functions are implicitly friends of their class");
b46ce77f
SM
8668 friendp = 0;
8669 }
59e7c84c 8670 else
cbe5f3b3 8671 permerror (declarator->id_loc,
7e99f74b
MLI
8672 "extra qualification %<%T::%> on member %qs",
8673 ctype, name);
59e7c84c 8674 }
fa6098f8
MM
8675 else if (/* If the qualifying type is already complete, then we
8676 can skip the following checks. */
8677 !COMPLETE_TYPE_P (ctype)
cc328145
MM
8678 && (/* If the function is being defined, then
8679 qualifying type must certainly be complete. */
3db45ab5 8680 funcdef_flag
cc328145
MM
8681 /* A friend declaration of "T::f" is OK, even if
8682 "T" is a template parameter. But, if this
8683 function is not a friend, the qualifying type
8684 must be a class. */
8685 || (!friendp && !CLASS_TYPE_P (ctype))
8686 /* For a declaration, the type need not be
8687 complete, if either it is dependent (since there
8688 is no meaningful definition of complete in that
8689 case) or the qualifying class is currently being
8690 defined. */
fa6098f8
MM
8691 || !(dependent_type_p (ctype)
8692 || currently_open_class (ctype)))
9f9a713e 8693 /* Check that the qualifying type is complete. */
fa6098f8
MM
8694 && !complete_type_or_else (ctype, NULL_TREE))
8695 return error_mark_node;
058b15c1
MM
8696 else if (TREE_CODE (type) == FUNCTION_TYPE)
8697 {
1d786913 8698 tree sname = declarator->u.id.unqualified_name;
50ad9642 8699
357d956e
MM
8700 if (current_class_type
8701 && (!friendp || funcdef_flag))
8702 {
8703 error (funcdef_flag
8704 ? "cannot define member function %<%T::%s%> within %<%T%>"
8705 : "cannot declare member function %<%T::%s%> within %<%T%>",
8706 ctype, name, current_class_type);
8707 return error_mark_node;
8708 }
8709
7ecbca9d
GDR
8710 /* It is not permitted to define a member function outside ist
8711 membership class as `constexpr'. */
8712 if (constexpr_p)
8713 error ("a constexpr function cannot be defined "
8714 "outside of its class.");
8715
058b15c1
MM
8716 if (TREE_CODE (sname) == IDENTIFIER_NODE
8717 && NEW_DELETE_OPNAME_P (sname))
8718 /* Overloaded operator new and operator delete
8719 are always static functions. */
8720 ;
058b15c1 8721 else
e2537f2c 8722 type = build_memfn_type (type, ctype, memfn_quals);
058b15c1 8723 }
62d1db17 8724 else if (declspecs->specs[(int)ds_typedef]
fa6098f8 8725 && current_class_type)
058b15c1 8726 {
fa6098f8
MM
8727 error ("cannot declare member %<%T::%s%> within %qT",
8728 ctype, name, current_class_type);
058b15c1 8729 return error_mark_node;
8d08fdba
MS
8730 }
8731 }
8732
9c12301f
MM
8733 /* Now TYPE has the actual type. */
8734
91d231cb 8735 if (returned_attrs)
1eab9b56 8736 {
91d231cb
JM
8737 if (attrlist)
8738 *attrlist = chainon (returned_attrs, *attrlist);
1eab9b56 8739 else
91d231cb 8740 attrlist = &returned_attrs;
1eab9b56
JM
8741 }
8742
5d80a306
DG
8743 /* Handle parameter packs. */
8744 if (parameter_pack_p)
8745 {
8746 if (decl_context == PARM)
8747 /* Turn the type into a pack expansion.*/
8748 type = make_pack_expansion (type);
8749 else
8750 error ("non-parameter %qs cannot be a parameter pack", name);
8751 }
8752
55b3d665
JM
8753 /* Did array size calculations overflow? */
8754
8755 if (TREE_CODE (type) == ARRAY_TYPE
8756 && COMPLETE_TYPE_P (type)
96ce2ac9
JW
8757 && TREE_CODE (TYPE_SIZE_UNIT (type)) == INTEGER_CST
8758 && TREE_OVERFLOW (TYPE_SIZE_UNIT (type)))
55b3d665 8759 {
2d01edd7 8760 error ("size of array %qs is too large", name);
aba649ba 8761 /* If we proceed with the array type as it is, we'll eventually
55b3d665
JM
8762 crash in tree_low_cst(). */
8763 type = error_mark_node;
8764 }
8765
2fff6d71 8766 if ((decl_context == FIELD || decl_context == PARM)
caf93cb0 8767 && !processing_template_decl
5377d5ba 8768 && variably_modified_type_p (type, NULL_TREE))
dac45b5c 8769 {
2fff6d71 8770 if (decl_context == FIELD)
2d01edd7 8771 error ("data member may not have variably modified type %qT", type);
2fff6d71 8772 else
2d01edd7 8773 error ("parameter may not have variably modified type %qT", type);
dac45b5c
MM
8774 type = error_mark_node;
8775 }
8776
34fc957d 8777 if (explicitp == 1 || (explicitp && friendp))
db5ae43f 8778 {
34fc957d 8779 /* [dcl.fct.spec] The explicit specifier shall only be used in
0cbd7506 8780 declarations of constructors within a class definition. */
2d01edd7 8781 error ("only declarations of constructors can be %<explicit%>");
db5ae43f
MS
8782 explicitp = 0;
8783 }
8784
1ff3c076 8785 if (storage_class == sc_mutable)
f30432d7 8786 {
4223f82f 8787 if (decl_context != FIELD || friendp)
0cbd7506 8788 {
2d01edd7 8789 error ("non-member %qs cannot be declared %<mutable%>", name);
1ff3c076 8790 storage_class = sc_none;
0cbd7506 8791 }
62d1db17 8792 else if (decl_context == TYPENAME || declspecs->specs[(int)ds_typedef])
f30432d7 8793 {
2d01edd7 8794 error ("non-object member %qs cannot be declared %<mutable%>", name);
1ff3c076 8795 storage_class = sc_none;
f30432d7 8796 }
34fc957d 8797 else if (TREE_CODE (type) == FUNCTION_TYPE
0cbd7506
MS
8798 || TREE_CODE (type) == METHOD_TYPE)
8799 {
2d01edd7 8800 error ("function %qs cannot be declared %<mutable%>", name);
1ff3c076 8801 storage_class = sc_none;
0cbd7506 8802 }
f30432d7
MS
8803 else if (staticp)
8804 {
2d01edd7 8805 error ("static %qs cannot be declared %<mutable%>", name);
1ff3c076 8806 storage_class = sc_none;
f30432d7 8807 }
34fc957d
NS
8808 else if (type_quals & TYPE_QUAL_CONST)
8809 {
2d01edd7 8810 error ("const %qs cannot be declared %<mutable%>", name);
1ff3c076 8811 storage_class = sc_none;
34fc957d 8812 }
f30432d7
MS
8813 }
8814
419c6212 8815 /* If this is declaring a typedef name, return a TYPE_DECL. */
62d1db17 8816 if (declspecs->specs[(int)ds_typedef] && decl_context != TYPENAME)
8d08fdba
MS
8817 {
8818 tree decl;
8819
8820 /* Note that the grammar rejects storage classes
8821 in typenames, fields or parameters. */
eff71ab0
PB
8822 if (current_lang_name == lang_name_java)
8823 TYPE_FOR_JAVA (type) = 1;
3db45ab5 8824
e2537f2c
MM
8825 /* This declaration:
8826
3db45ab5 8827 typedef void f(int) const;
e2537f2c 8828
3db45ab5 8829 declares a function type which is not a member of any
e2537f2c 8830 particular class, but which is cv-qualified; for
3db45ab5 8831 example "f S::*" declares a pointer to a const-qualified
e2537f2c
MM
8832 member function of S. We record the cv-qualification in the
8833 function type. */
8834 if (memfn_quals && TREE_CODE (type) == FUNCTION_TYPE)
771026dd
DG
8835 {
8836 type = cp_build_qualified_type (type, memfn_quals);
8837
8838 /* We have now dealt with these qualifiers. */
8839 memfn_quals = TYPE_UNQUALIFIED;
8840 }
8d08fdba 8841
d2e5ee5c 8842 if (decl_context == FIELD)
e3016344 8843 decl = build_lang_decl (TYPE_DECL, unqualified_id, type);
d2e5ee5c 8844 else
c2255bc4 8845 decl = build_decl (input_location, TYPE_DECL, unqualified_id, type);
dcbdf612 8846 if (id_declarator && declarator->u.id.qualifying_scope) {
c5d75364
MLI
8847 error_at (DECL_SOURCE_LOCATION (decl),
8848 "typedef name may not be a nested-name-specifier");
dcbdf612
SM
8849 TREE_TYPE (decl) = error_mark_node;
8850 }
e3016344
MM
8851
8852 if (decl_context != FIELD)
6bda7a5e 8853 {
6bda7a5e
NS
8854 if (!current_function_decl)
8855 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
1dc82a99 8856 else if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (current_function_decl)
c8094d83 8857 || (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P
1dc82a99
MM
8858 (current_function_decl)))
8859 /* The TYPE_DECL is "abstract" because there will be
8860 clones of this constructor/destructor, and there will
8861 be copies of this TYPE_DECL generated in those
8862 clones. */
8863 DECL_ABSTRACT (decl) = 1;
6bda7a5e 8864 }
e3016344 8865 else if (constructor_name_p (unqualified_id, current_class_type))
cbe5f3b3 8866 permerror (input_location, "ISO C++ forbids nested type %qD with same name "
37ec60ed
JW
8867 "as enclosing class",
8868 unqualified_id);
caf93cb0 8869
9188c363
MM
8870 /* If the user declares "typedef struct {...} foo" then the
8871 struct will have an anonymous name. Fill that name in now.
8872 Nothing can refer to it, so nothing needs know about the name
8873 change. */
8d08fdba 8874 if (type != error_mark_node
058b15c1 8875 && unqualified_id
8d08fdba
MS
8876 && TYPE_NAME (type)
8877 && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
1951a1b6 8878 && TYPE_ANONYMOUS_P (type)
89d684bb 8879 && cp_type_quals (type) == TYPE_UNQUALIFIED)
8d08fdba 8880 {
dcd08efc
JM
8881 tree t;
8882
2c73f9f5 8883 /* Replace the anonymous name with the real name everywhere. */
dcd08efc 8884 for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
a417cdd9
CM
8885 {
8886 if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
8887 {
8888 debug_hooks->set_name (t, decl);
8889 TYPE_NAME (t) = decl;
8890 }
8891 }
8d08fdba
MS
8892
8893 if (TYPE_LANG_SPECIFIC (type))
8894 TYPE_WAS_ANONYMOUS (type) = 1;
8895
33964bf4
MM
8896 /* If this is a typedef within a template class, the nested
8897 type is a (non-primary) template. The name for the
8898 template needs updating as well. */
8899 if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
68642fb6 8900 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type))
33964bf4
MM
8901 = TYPE_IDENTIFIER (type);
8902
ecc607fc
JM
8903 /* Adjust linkage now that we aren't anonymous anymore. */
8904 set_linkage_according_to_type (type, TYPE_MAIN_DECL (type));
8905 determine_visibility (TYPE_MAIN_DECL (type));
8906
50a6dbd7
JM
8907 /* FIXME remangle member functions; member functions of a
8908 type with external linkage have external linkage. */
fc378698 8909 }
fc378698 8910
1ff3c076 8911 if (signed_p
8d08fdba
MS
8912 || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
8913 C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
8914
3db45ab5 8915 bad_specifiers (decl, "type", virtualp,
e2537f2c 8916 memfn_quals != TYPE_UNQUALIFIED,
c91a56d2
MS
8917 inlinep, friendp, raises != NULL_TREE);
8918
8d08fdba
MS
8919 return decl;
8920 }
8921
8922 /* Detect the case of an array type of unspecified size
8923 which came, as such, direct from a typedef name.
8d6e459d
NS
8924 We must copy the type, so that the array's domain can be
8925 individually set by the object's initializer. */
8d08fdba 8926
8d6e459d
NS
8927 if (type && typedef_type
8928 && TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type)
55b3d665 8929 && TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (typedef_type))
8d6e459d 8930 type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
8d08fdba 8931
969fd501 8932 /* Detect where we're using a typedef of function type to declare a
4546865e 8933 function. PARMS will not be set, so we must create it now. */
caf93cb0 8934
969fd501
NS
8935 if (type == typedef_type && TREE_CODE (type) == FUNCTION_TYPE)
8936 {
8937 tree decls = NULL_TREE;
8938 tree args;
8939
8940 for (args = TYPE_ARG_TYPES (type); args; args = TREE_CHAIN (args))
8941 {
8e51619a 8942 tree decl = cp_build_parm_decl (NULL_TREE, TREE_VALUE (args));
969fd501
NS
8943
8944 TREE_CHAIN (decl) = decls;
8945 decls = decl;
8946 }
caf93cb0 8947
4546865e 8948 parms = nreverse (decls);
9804209d
DG
8949
8950 if (decl_context != TYPENAME)
0cbd7506
MS
8951 {
8952 /* A cv-qualifier-seq shall only be part of the function type
8953 for a non-static member function. [8.3.5/4 dcl.fct] */
8954 if (cp_type_quals (type) != TYPE_UNQUALIFIED
8955 && (current_class_type == NULL_TREE || staticp) )
8956 {
ebbc3ce1 8957 error (staticp
f88d05c0
DM
8958 ? G_("qualified function types cannot be used to "
8959 "declare static member functions")
8960 : G_("qualified function types cannot be used to "
8961 "declare free functions"));
0cbd7506
MS
8962 type = TYPE_MAIN_VARIANT (type);
8963 }
8964
8965 /* The qualifiers on the function type become the qualifiers on
8966 the non-static member function. */
e2537f2c 8967 memfn_quals |= cp_type_quals (type);
0cbd7506 8968 }
969fd501
NS
8969 }
8970
8d08fdba
MS
8971 /* If this is a type name (such as, in a cast or sizeof),
8972 compute the type and return it now. */
8973
8974 if (decl_context == TYPENAME)
8975 {
8976 /* Note that the grammar rejects storage classes
8977 in typenames, fields or parameters. */
91063b51 8978 if (type_quals != TYPE_UNQUALIFIED)
6eabb241 8979 type_quals = TYPE_UNQUALIFIED;
8d08fdba
MS
8980
8981 /* Special case: "friend class foo" looks like a TYPENAME context. */
8982 if (friendp)
8983 {
91063b51 8984 if (type_quals != TYPE_UNQUALIFIED)
b7484fbe 8985 {
33bd39a2 8986 error ("type qualifiers specified for friend class declaration");
91063b51 8987 type_quals = TYPE_UNQUALIFIED;
b7484fbe
MS
8988 }
8989 if (inlinep)
8990 {
2d01edd7 8991 error ("%<inline%> specified for friend class declaration");
b7484fbe
MS
8992 inlinep = 0;
8993 }
f2ae0c45 8994
218e0eb6 8995 if (!current_aggr)
4b054b80 8996 {
218e0eb6 8997 /* Don't allow friend declaration without a class-key. */
4b054b80 8998 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
cbe5f3b3 8999 permerror (input_location, "template parameters cannot be friends");
f2ae0c45 9000 else if (TREE_CODE (type) == TYPENAME_TYPE)
cbe5f3b3 9001 permerror (input_location, "friend declaration requires class-key, "
37ec60ed
JW
9002 "i.e. %<friend class %T::%D%>",
9003 TYPE_CONTEXT (type), TYPENAME_TYPE_FULLNAME (type));
4b054b80 9004 else
cbe5f3b3 9005 permerror (input_location, "friend declaration requires class-key, "
37ec60ed
JW
9006 "i.e. %<friend %#T%>",
9007 type);
4b054b80 9008 }
b7484fbe
MS
9009
9010 /* Only try to do this stuff if we didn't already give up. */
9011 if (type != integer_type_node)
9012 {
9013 /* A friendly class? */
9014 if (current_class_type)
19db77ce
KL
9015 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type),
9016 /*complain=*/true);
b7484fbe 9017 else
2d01edd7 9018 error ("trying to make class %qT a friend of global scope",
0cbd7506 9019 type);
d363e7bf 9020
b7484fbe
MS
9021 type = void_type_node;
9022 }
8d08fdba 9023 }
e2537f2c 9024 else if (memfn_quals)
8d08fdba 9025 {
0d9c0892
JM
9026 if (ctype == NULL_TREE
9027 && TREE_CODE (type) == METHOD_TYPE)
9028 ctype = TYPE_METHOD_BASETYPE (type);
9029
41cbc04c 9030 if (ctype)
e2537f2c 9031 type = build_memfn_type (type, ctype, memfn_quals);
0d9c0892
JM
9032 /* Core issue #547: need to allow this in template type args. */
9033 else if (template_type_arg && TREE_CODE (type) == FUNCTION_TYPE)
9034 type = cp_build_qualified_type (type, memfn_quals);
9035 else
9036 error ("invalid qualifiers on non-member function type");
8d08fdba
MS
9037 }
9038
9039 return type;
9040 }
058b15c1 9041 else if (unqualified_id == NULL_TREE && decl_context != PARM
db5ae43f 9042 && decl_context != CATCHPARM
8d08fdba
MS
9043 && TREE_CODE (type) != UNION_TYPE
9044 && ! bitfield)
9045 {
2d01edd7 9046 error ("abstract declarator %qT used as declaration", type);
22ab714d 9047 return error_mark_node;
8d08fdba
MS
9048 }
9049
62e19030
MM
9050 /* Only functions may be declared using an operator-function-id. */
9051 if (unqualified_id
9052 && IDENTIFIER_OPNAME_P (unqualified_id)
9053 && TREE_CODE (type) != FUNCTION_TYPE
9054 && TREE_CODE (type) != METHOD_TYPE)
8d08fdba 9055 {
62e19030
MM
9056 error ("declaration of %qD as non-function", unqualified_id);
9057 return error_mark_node;
8d08fdba
MS
9058 }
9059
62e19030
MM
9060 /* We don't check parameter types here because we can emit a better
9061 error message later. */
9062 if (decl_context != PARM)
650fcd07
LM
9063 {
9064 type = check_var_type (unqualified_id, type);
9065 if (type == error_mark_node)
9066 return error_mark_node;
9067 }
62e19030 9068
8d08fdba
MS
9069 /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
9070 or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE. */
9071
14ae7e7d
JM
9072 if (decl_context == PARM || decl_context == CATCHPARM)
9073 {
9074 if (ctype || in_namespace)
2d01edd7 9075 error ("cannot use %<::%> in parameter declaration");
14ae7e7d
JM
9076
9077 /* A parameter declared as an array of T is really a pointer to T.
9078 One declared as a function is really a pointer to a function.
9079 One declared as a member is really a pointer to member. */
9080
9081 if (TREE_CODE (type) == ARRAY_TYPE)
9082 {
9083 /* Transfer const-ness of array into that of type pointed to. */
9084 type = build_pointer_type (TREE_TYPE (type));
91063b51 9085 type_quals = TYPE_UNQUALIFIED;
14ae7e7d
JM
9086 }
9087 else if (TREE_CODE (type) == FUNCTION_TYPE)
9088 type = build_pointer_type (type);
14ae7e7d 9089 }
68642fb6 9090
8d08fdba 9091 {
926ce8bd 9092 tree decl;
8d08fdba
MS
9093
9094 if (decl_context == PARM)
9095 {
058b15c1 9096 decl = cp_build_parm_decl (unqualified_id, type);
8d08fdba 9097
3db45ab5 9098 bad_specifiers (decl, "parameter", virtualp,
e2537f2c 9099 memfn_quals != TYPE_UNQUALIFIED,
8d08fdba 9100 inlinep, friendp, raises != NULL_TREE);
8d08fdba
MS
9101 }
9102 else if (decl_context == FIELD)
9103 {
01bf0f3e
JM
9104 /* The C99 flexible array extension. */
9105 if (!staticp && TREE_CODE (type) == ARRAY_TYPE
9106 && TYPE_DOMAIN (type) == NULL_TREE)
9107 {
9108 tree itype = compute_array_index_type (dname, integer_zero_node);
9109 type = build_cplus_array_type (TREE_TYPE (type), itype);
9110 }
9111
8d08fdba
MS
9112 if (type == error_mark_node)
9113 {
9114 /* Happens when declaring arrays of sizes which
9115 are error_mark_node, for example. */
9116 decl = NULL_TREE;
9117 }
997a088c 9118 else if (in_namespace && !friendp)
05008fb9
MM
9119 {
9120 /* Something like struct S { int N::j; }; */
2d01edd7 9121 error ("invalid use of %<::%>");
9a171ca4 9122 return error_mark_node;
05008fb9 9123 }
8d08fdba
MS
9124 else if (TREE_CODE (type) == FUNCTION_TYPE)
9125 {
9126 int publicp = 0;
e1467ff2 9127 tree function_context;
8d08fdba
MS
9128
9129 if (friendp == 0)
9130 {
9131 if (ctype == NULL_TREE)
9132 ctype = current_class_type;
9133
9134 if (ctype == NULL_TREE)
9135 {
2d01edd7 9136 error ("can't make %qD into a method -- not in a class",
058b15c1 9137 unqualified_id);
13dbe691 9138 return error_mark_node;
8d08fdba
MS
9139 }
9140
9141 /* ``A union may [ ... ] not [ have ] virtual functions.''
9142 ARM 9.5 */
9143 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
9144 {
2d01edd7 9145 error ("function %qD declared virtual inside a union",
058b15c1 9146 unqualified_id);
13dbe691 9147 return error_mark_node;
8d08fdba
MS
9148 }
9149
058b15c1 9150 if (NEW_DELETE_OPNAME_P (unqualified_id))
8d08fdba
MS
9151 {
9152 if (virtualp)
9153 {
2d01edd7 9154 error ("%qD cannot be declared virtual, since it "
0cbd7506 9155 "is always static",
058b15c1 9156 unqualified_id);
8d08fdba
MS
9157 virtualp = 0;
9158 }
9159 }
9160 else if (staticp < 2)
e2537f2c 9161 type = build_memfn_type (type, ctype, memfn_quals);
8d08fdba
MS
9162 }
9163
88e95ee3 9164 /* Check that the name used for a destructor makes sense. */
6d2989e1 9165 if (sfk == sfk_destructor)
88e95ee3 9166 {
bd967b22
JM
9167 tree uqname = id_declarator->u.id.unqualified_name;
9168
6d2989e1
VR
9169 if (!ctype)
9170 {
9171 gcc_assert (friendp);
9172 error ("expected qualified name in friend declaration "
bd967b22 9173 "for destructor %qD", uqname);
6d2989e1
VR
9174 return error_mark_node;
9175 }
9176
bd967b22 9177 if (!check_dtor_name (ctype, TREE_OPERAND (uqname, 0)))
6d2989e1
VR
9178 {
9179 error ("declaration of %qD as member of %qT",
bd967b22 9180 uqname, ctype);
6d2989e1
VR
9181 return error_mark_node;
9182 }
7ecbca9d
GDR
9183 if (constexpr_p)
9184 error ("a destructor cannot be %<constexpr%>");
88e95ee3 9185 }
ac3b1156
JJ
9186 else if (sfk == sfk_constructor && friendp)
9187 {
9188 error ("expected qualified name in friend declaration "
9189 "for constructor %qD",
9190 id_declarator->u.id.unqualified_name);
9191 return error_mark_node;
9192 }
88e95ee3 9193
8d08fdba 9194 /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node. */
68642fb6 9195 function_context = (ctype != NULL_TREE) ?
4f1c5b7d 9196 decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
e1467ff2
MM
9197 publicp = (! friendp || ! staticp)
9198 && function_context == NULL_TREE;
68642fb6 9199 decl = grokfndecl (ctype, type,
058b15c1
MM
9200 TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
9201 ? unqualified_id : dname,
4546865e 9202 parms,
058b15c1 9203 unqualified_id,
e2537f2c 9204 virtualp, flags, memfn_quals, raises,
7ecbca9d
GDR
9205 friendp ? -1 : 0, friendp, publicp,
9206 inlinep || constexpr_p,
27d6592c 9207 sfk,
402b8cf6
AH
9208 funcdef_flag, template_count, in_namespace,
9209 attrlist, declarator->id_loc);
20496fa2 9210 if (decl == NULL_TREE)
ba5719d9 9211 return error_mark_node;
6125f3be
DE
9212#if 0
9213 /* This clobbers the attrs stored in `decl' from `attrlist'. */
91d231cb
JM
9214 /* The decl and setting of decl_attr is also turned off. */
9215 decl = build_decl_attribute_variant (decl, decl_attr);
6125f3be 9216#endif
f0e01782 9217
cc804e51
MM
9218 /* [class.conv.ctor]
9219
9220 A constructor declared without the function-specifier
9221 explicit that can be called with a single parameter
9222 specifies a conversion from the type of its first
9223 parameter to the type of its class. Such a constructor
9224 is called a converting constructor. */
db5ae43f
MS
9225 if (explicitp == 2)
9226 DECL_NONCONVERTING_P (decl) = 1;
8d08fdba
MS
9227 }
9228 else if (TREE_CODE (type) == METHOD_TYPE)
9229 {
faae18ab
MS
9230 /* We only get here for friend declarations of
9231 members of other classes. */
8d08fdba
MS
9232 /* All method decls are public, so tell grokfndecl to set
9233 TREE_PUBLIC, also. */
866eb556 9234 decl = grokfndecl (ctype, type,
058b15c1
MM
9235 TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
9236 ? unqualified_id : dname,
4546865e 9237 parms,
058b15c1 9238 unqualified_id,
e2537f2c 9239 virtualp, flags, memfn_quals, raises,
27d6592c 9240 friendp ? -1 : 0, friendp, 1, 0, sfk,
c8094d83 9241 funcdef_flag, template_count, in_namespace,
402b8cf6
AH
9242 attrlist,
9243 declarator->id_loc);
f0e01782 9244 if (decl == NULL_TREE)
13dbe691 9245 return error_mark_node;
8d08fdba 9246 }
a9f46cbb 9247 else if (!staticp && !dependent_type_p (type)
d0f062fb 9248 && !COMPLETE_TYPE_P (complete_type (type))
8d08fdba
MS
9249 && (TREE_CODE (type) != ARRAY_TYPE || initialized == 0))
9250 {
058b15c1 9251 if (unqualified_id)
2d01edd7 9252 error ("field %qD has incomplete type", unqualified_id);
b7484fbe 9253 else
2d01edd7 9254 error ("name %qT has incomplete type", type);
8d08fdba
MS
9255
9256 /* If we're instantiating a template, tell them which
9257 instantiation made the field's type be incomplete. */
9258 if (current_class_type
9259 && TYPE_NAME (current_class_type)
d2e5ee5c 9260 && IDENTIFIER_TEMPLATE (TYPE_IDENTIFIER (current_class_type))
62d1db17
MM
9261 && declspecs->type
9262 && declspecs->type == type)
2d01edd7 9263 error (" in instantiation of template %qT",
0cbd7506 9264 current_class_type);
db5ae43f 9265
623c65f1 9266 return error_mark_node;
8d08fdba
MS
9267 }
9268 else
9269 {
9270 if (friendp)
9271 {
2d01edd7 9272 error ("%qE is neither function nor member function; "
0cbd7506 9273 "cannot be declared friend", unqualified_id);
8d08fdba
MS
9274 friendp = 0;
9275 }
9276 decl = NULL_TREE;
9277 }
9278
9279 if (friendp)
9280 {
9281 /* Friends are treated specially. */
9282 if (ctype == current_class_type)
37ec60ed 9283 ; /* We already issued a permerror. */
0cbd7506 9284 else if (decl && DECL_NAME (decl))
8db1028e
NS
9285 {
9286 if (template_class_depth (current_class_type) == 0)
9287 {
9288 decl = check_explicit_specialization
058b15c1 9289 (unqualified_id, decl, template_count,
357d956e 9290 2 * funcdef_flag + 4);
8db1028e
NS
9291 if (decl == error_mark_node)
9292 return error_mark_node;
9293 }
caf93cb0 9294
9a801c38 9295 DECL_DECLARED_CONSTEXPR_P (decl) = constexpr_p;
058b15c1 9296 decl = do_friend (ctype, unqualified_id, decl,
3db45ab5 9297 *attrlist, flags,
e2537f2c 9298 funcdef_flag);
8db1028e
NS
9299 return decl;
9300 }
9301 else
13dbe691 9302 return error_mark_node;
8d08fdba
MS
9303 }
9304
f4f206f4 9305 /* Structure field. It may not be a function, except for C++. */
8d08fdba
MS
9306
9307 if (decl == NULL_TREE)
9308 {
8d08fdba
MS
9309 if (initialized)
9310 {
3ac3d9ea
MM
9311 if (!staticp)
9312 {
9313 /* An attempt is being made to initialize a non-static
9314 member. But, from [class.mem]:
68642fb6 9315
3ac3d9ea
MM
9316 4 A member-declarator can contain a
9317 constant-initializer only if it declares a static
9318 member (_class.static_) of integral or enumeration
68642fb6 9319 type, see _class.static.data_.
3ac3d9ea
MM
9320
9321 This used to be relatively common practice, but
9322 the rest of the compiler does not correctly
9323 handle the initialization unless the member is
9324 static so we make it static below. */
cbe5f3b3 9325 permerror (input_location, "ISO C++ forbids initialization of member %qD",
37ec60ed 9326 unqualified_id);
cbe5f3b3 9327 permerror (input_location, "making %qD static", unqualified_id);
3ac3d9ea
MM
9328 staticp = 1;
9329 }
9330
6ba89f8e
MM
9331 if (uses_template_parms (type))
9332 /* We'll check at instantiation time. */
9333 ;
058b15c1 9334 else if (check_static_variable_definition (unqualified_id,
6ba89f8e
MM
9335 type))
9336 /* If we just return the declaration, crashes
9337 will sometimes occur. We therefore return
72a93143
JM
9338 void_type_node, as if this was a friend
9339 declaration, to cause callers to completely
9340 ignore this declaration. */
13dbe691 9341 return error_mark_node;
8d08fdba
MS
9342 }
9343
3ac3d9ea 9344 if (staticp)
8d08fdba 9345 {
f18a14bc
MM
9346 /* C++ allows static class members. All other work
9347 for this is done by grokfield. */
058b15c1 9348 decl = build_lang_decl (VAR_DECL, unqualified_id, type);
4684cd27
MM
9349 set_linkage_for_static_data_member (decl);
9350 /* Even if there is an in-class initialization, DECL
9351 is considered undefined until an out-of-class
9352 definition is provided. */
9353 DECL_EXTERNAL (decl) = 1;
31a79236
JJ
9354
9355 if (thread_p)
8893239d 9356 DECL_TLS_MODEL (decl) = decl_default_tls_model (decl);
8d08fdba
MS
9357 }
9358 else
9359 {
7ecbca9d
GDR
9360 if (constexpr_p)
9361 error ("non-static data member %qE declared %<constexpr%>",
9362 unqualified_id);
c2255bc4
AH
9363 decl = build_decl (input_location,
9364 FIELD_DECL, unqualified_id, type);
2bf105ab 9365 DECL_NONADDRESSABLE_P (decl) = bitfield;
ab53bae2
AO
9366 if (bitfield && !unqualified_id)
9367 TREE_NO_WARNING (decl) = 1;
9368
1ff3c076 9369 if (storage_class == sc_mutable)
8d08fdba
MS
9370 {
9371 DECL_MUTABLE_P (decl) = 1;
1ff3c076 9372 storage_class = sc_none;
8d08fdba
MS
9373 }
9374 }
9375
3db45ab5 9376 bad_specifiers (decl, "field", virtualp,
e2537f2c 9377 memfn_quals != TYPE_UNQUALIFIED,
8d08fdba
MS
9378 inlinep, friendp, raises != NULL_TREE);
9379 }
9380 }
fd9aef9d
NS
9381 else if (TREE_CODE (type) == FUNCTION_TYPE
9382 || TREE_CODE (type) == METHOD_TYPE)
8d08fdba 9383 {
386b8a85 9384 tree original_name;
8d08fdba
MS
9385 int publicp = 0;
9386
058b15c1 9387 if (!unqualified_id)
13dbe691 9388 return error_mark_node;
8d08fdba 9389
058b15c1 9390 if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
386b8a85
JM
9391 original_name = dname;
9392 else
058b15c1 9393 original_name = unqualified_id;
386b8a85 9394
1ff3c076 9395 if (storage_class == sc_auto)
2d01edd7 9396 error ("storage class %<auto%> invalid for function %qs", name);
1ff3c076 9397 else if (storage_class == sc_register)
2d01edd7 9398 error ("storage class %<register%> invalid for function %qs", name);
1ff3c076 9399 else if (thread_p)
2d01edd7 9400 error ("storage class %<__thread%> invalid for function %qs", name);
8d08fdba
MS
9401
9402 /* Function declaration not at top level.
9403 Storage classes other than `extern' are not allowed
9404 and `extern' makes no difference. */
a9aedbc2 9405 if (! toplevel_bindings_p ()
1ff3c076 9406 && (storage_class == sc_static
62d1db17 9407 || declspecs->specs[(int)ds_inline])
8d08fdba 9408 && pedantic)
8926095f 9409 {
1ff3c076 9410 if (storage_class == sc_static)
509c9d60 9411 pedwarn (input_location, OPT_pedantic,
fcf73884 9412 "%<static%> specified invalid for function %qs "
0cbd7506 9413 "declared out of global scope", name);
8926095f 9414 else
509c9d60 9415 pedwarn (input_location, OPT_pedantic,
fcf73884 9416 "%<inline%> specifier invalid for function %qs "
0cbd7506 9417 "declared out of global scope", name);
8926095f 9418 }
68642fb6 9419
a2712544
AP
9420 if (ctype != NULL_TREE
9421 && TREE_CODE (ctype) != NAMESPACE_DECL && !MAYBE_CLASS_TYPE_P (ctype))
9422 {
9423 error ("%q#T is not a class or a namespace", ctype);
9424 ctype = NULL_TREE;
9425 }
9426
8d08fdba
MS
9427 if (ctype == NULL_TREE)
9428 {
9429 if (virtualp)
9430 {
2d01edd7 9431 error ("virtual non-class function %qs", name);
8d08fdba
MS
9432 virtualp = 0;
9433 }
48b6cd9d
SM
9434 else if (sfk == sfk_constructor
9435 || sfk == sfk_destructor)
9436 {
9437 error (funcdef_flag
9438 ? "%qs defined in a non-class scope"
9439 : "%qs declared in a non-class scope", name);
9440 sfk = sfk_none;
9441 }
8d08fdba 9442 }
4546865e
MM
9443 else if (TREE_CODE (type) == FUNCTION_TYPE && staticp < 2
9444 && !NEW_DELETE_OPNAME_P (original_name))
caf93cb0 9445 type = build_method_type_directly (ctype,
43dc123f
MM
9446 TREE_TYPE (type),
9447 TYPE_ARG_TYPES (type));
8d08fdba 9448
eb66be0e 9449 /* Record presence of `static'. */
faae18ab 9450 publicp = (ctype != NULL_TREE
1ff3c076
MM
9451 || storage_class == sc_extern
9452 || storage_class != sc_static);
8d08fdba 9453
058b15c1 9454 decl = grokfndecl (ctype, type, original_name, parms, unqualified_id,
e2537f2c 9455 virtualp, flags, memfn_quals, raises,
75650646 9456 1, friendp,
7ecbca9d 9457 publicp, inlinep || constexpr_p, sfk, funcdef_flag,
402b8cf6
AH
9458 template_count, in_namespace, attrlist,
9459 declarator->id_loc);
f0e01782 9460 if (decl == NULL_TREE)
13dbe691 9461 return error_mark_node;
8d08fdba 9462
8d08fdba
MS
9463 if (staticp == 1)
9464 {
0e339752 9465 int invalid_static = 0;
8d08fdba
MS
9466
9467 /* Don't allow a static member function in a class, and forbid
9468 declaring main to be static. */
9469 if (TREE_CODE (type) == METHOD_TYPE)
9470 {
cbe5f3b3 9471 permerror (input_location, "cannot declare member function %qD to have "
37ec60ed 9472 "static linkage", decl);
0e339752 9473 invalid_static = 1;
8d08fdba 9474 }
8d08fdba
MS
9475 else if (current_function_decl)
9476 {
9477 /* FIXME need arm citation */
8251199e 9478 error ("cannot declare static function inside another function");
0e339752 9479 invalid_static = 1;
8d08fdba
MS
9480 }
9481
0e339752 9482 if (invalid_static)
8d08fdba
MS
9483 {
9484 staticp = 0;
1ff3c076 9485 storage_class = sc_none;
8d08fdba
MS
9486 }
9487 }
8d08fdba
MS
9488 }
9489 else
9490 {
9491 /* It's a variable. */
9492
9493 /* An uninitialized decl with `extern' is a reference. */
caf93cb0 9494 decl = grokvardecl (type, unqualified_id,
62d1db17 9495 declspecs,
68642fb6
UD
9496 initialized,
9497 (type_quals & TYPE_QUAL_CONST) != 0,
9e259dd1 9498 ctype ? ctype : in_namespace);
3db45ab5 9499 bad_specifiers (decl, "variable", virtualp,
e2537f2c 9500 memfn_quals != TYPE_UNQUALIFIED,
8d08fdba
MS
9501 inlinep, friendp, raises != NULL_TREE);
9502
9503 if (ctype)
9504 {
f0e01782 9505 DECL_CONTEXT (decl) = ctype;
8d08fdba
MS
9506 if (staticp == 1)
9507 {
cbe5f3b3 9508 permerror (input_location, "%<static%> may not be used when defining "
37ec60ed 9509 "(as opposed to declaring) a static data member");
0cbd7506 9510 staticp = 0;
1ff3c076 9511 storage_class = sc_none;
8d08fdba 9512 }
1ff3c076 9513 if (storage_class == sc_register && TREE_STATIC (decl))
b7484fbe 9514 {
2d01edd7 9515 error ("static member %qD declared %<register%>", decl);
1ff3c076 9516 storage_class = sc_none;
b7484fbe 9517 }
1ff3c076 9518 if (storage_class == sc_extern && pedantic)
8d08fdba 9519 {
509c9d60 9520 pedwarn (input_location, OPT_pedantic,
fcf73884
MLI
9521 "cannot explicitly declare member %q#D to have "
9522 "extern linkage", decl);
1ff3c076 9523 storage_class = sc_none;
8d08fdba
MS
9524 }
9525 }
9526 }
9527
94eeabbe
DS
9528 if (storage_class == sc_extern && initialized && !funcdef_flag)
9529 {
9530 if (toplevel_bindings_p ())
9531 {
9532 /* It's common practice (and completely valid) to have a const
9533 be initialized and declared extern. */
9534 if (!(type_quals & TYPE_QUAL_CONST))
9535 warning (0, "%qs initialized and declared %<extern%>", name);
9536 }
9537 else
0450a966
PC
9538 {
9539 error ("%qs has both %<extern%> and initializer", name);
9540 return error_mark_node;
9541 }
94eeabbe
DS
9542 }
9543
8d08fdba
MS
9544 /* Record `register' declaration for warnings on &
9545 and in case doing stupid register allocation. */
9546
1ff3c076 9547 if (storage_class == sc_register)
8d08fdba 9548 DECL_REGISTER (decl) = 1;
1ff3c076 9549 else if (storage_class == sc_extern)
8926095f 9550 DECL_THIS_EXTERN (decl) = 1;
1ff3c076 9551 else if (storage_class == sc_static)
faae18ab
MS
9552 DECL_THIS_STATIC (decl) = 1;
9553
7ecbca9d
GDR
9554 /* Don't forget constexprness. */
9555 if (VAR_OR_FUNCTION_DECL_P (decl))
9556 DECL_DECLARED_CONSTEXPR_P (decl) = constexpr_p;
9557
15896502
MM
9558 /* Record constancy and volatility on the DECL itself . There's
9559 no need to do this when processing a template; we'll do this
9560 for the instantiated declaration based on the type of DECL. */
adecb3f4 9561 if (!processing_template_decl)
9804209d 9562 cp_apply_type_quals_to_decl (type_quals, decl);
8d08fdba
MS
9563
9564 return decl;
9565 }
9566}
9567\f
f181d4ae
MM
9568/* Subroutine of start_function. Ensure that each of the parameter
9569 types (as listed in PARMS) is complete, as is required for a
9570 function definition. */
e92cc029 9571
8d08fdba 9572static void
11f6b451 9573require_complete_types_for_parms (tree parms)
8d08fdba 9574{
07c88314 9575 for (; parms; parms = TREE_CHAIN (parms))
8d08fdba 9576 {
c9387915
GB
9577 if (dependent_type_p (TREE_TYPE (parms)))
9578 continue;
dff1b563
VR
9579 if (!VOID_TYPE_P (TREE_TYPE (parms))
9580 && complete_type_or_else (TREE_TYPE (parms), parms))
753225c1 9581 {
7523dc31 9582 relayout_decl (parms);
753225c1
JM
9583 DECL_ARG_TYPE (parms) = type_passed_as (TREE_TYPE (parms));
9584 }
dff1b563
VR
9585 else
9586 /* grokparms or complete_type_or_else will have already issued
9587 an error. */
9588 TREE_TYPE (parms) = error_mark_node;
8d08fdba
MS
9589 }
9590}
9591
838dfd8a 9592/* Returns nonzero if T is a local variable. */
297e73d8 9593
46e8c075 9594int
ac7d7749 9595local_variable_p (const_tree t)
297e73d8 9596{
68642fb6 9597 if ((TREE_CODE (t) == VAR_DECL
297e73d8
MM
9598 /* A VAR_DECL with a context that is a _TYPE is a static data
9599 member. */
9600 && !TYPE_P (CP_DECL_CONTEXT (t))
9601 /* Any other non-local variable must be at namespace scope. */
46e8c075 9602 && !DECL_NAMESPACE_SCOPE_P (t))
297e73d8 9603 || (TREE_CODE (t) == PARM_DECL))
46e8c075 9604 return 1;
297e73d8 9605
46e8c075
MM
9606 return 0;
9607}
9608
46e8c075
MM
9609/* Like local_variable_p, but suitable for use as a tree-walking
9610 function. */
9611
9612static tree
44de5aeb
RK
9613local_variable_p_walkfn (tree *tp, int *walk_subtrees,
9614 void *data ATTRIBUTE_UNUSED)
46e8c075 9615{
44de5aeb
RK
9616 if (local_variable_p (*tp) && !DECL_ARTIFICIAL (*tp))
9617 return *tp;
9618 else if (TYPE_P (*tp))
9619 *walk_subtrees = 0;
9620
9621 return NULL_TREE;
297e73d8
MM
9622}
9623
44de5aeb 9624
297e73d8 9625/* Check that ARG, which is a default-argument expression for a
0e339752 9626 parameter DECL, is valid. Returns ARG, or ERROR_MARK_NODE, if
297e73d8
MM
9627 something goes wrong. DECL may also be a _TYPE node, rather than a
9628 DECL, if there is no DECL available. */
9629
9630tree
11f6b451 9631check_default_argument (tree decl, tree arg)
297e73d8
MM
9632{
9633 tree var;
9634 tree decl_type;
9635
9636 if (TREE_CODE (arg) == DEFAULT_ARG)
9637 /* We get a DEFAULT_ARG when looking at an in-class declaration
9638 with a default argument. Ignore the argument for now; we'll
9639 deal with it after the class is complete. */
9640 return arg;
9641
297e73d8
MM
9642 if (TYPE_P (decl))
9643 {
9644 decl_type = decl;
9645 decl = NULL_TREE;
9646 }
9647 else
9648 decl_type = TREE_TYPE (decl);
9649
68642fb6 9650 if (arg == error_mark_node
297e73d8
MM
9651 || decl == error_mark_node
9652 || TREE_TYPE (arg) == error_mark_node
9653 || decl_type == error_mark_node)
9654 /* Something already went wrong. There's no need to check
9655 further. */
9656 return error_mark_node;
9657
9658 /* [dcl.fct.default]
68642fb6 9659
297e73d8
MM
9660 A default argument expression is implicitly converted to the
9661 parameter type. */
9662 if (!TREE_TYPE (arg)
30f86ec3 9663 || !can_convert_arg (decl_type, TREE_TYPE (arg), arg, LOOKUP_NORMAL))
297e73d8
MM
9664 {
9665 if (decl)
2d01edd7 9666 error ("default argument for %q#D has type %qT",
0cbd7506 9667 decl, TREE_TYPE (arg));
297e73d8 9668 else
2d01edd7 9669 error ("default argument for parameter of type %qT has type %qT",
0cbd7506 9670 decl_type, TREE_TYPE (arg));
297e73d8
MM
9671
9672 return error_mark_node;
9673 }
9674
9675 /* [dcl.fct.default]
9676
9677 Local variables shall not be used in default argument
68642fb6 9678 expressions.
297e73d8
MM
9679
9680 The keyword `this' shall not be used in a default argument of a
9681 member function. */
14588106 9682 var = cp_walk_tree_without_duplicates (&arg, local_variable_p_walkfn, NULL);
297e73d8
MM
9683 if (var)
9684 {
2d01edd7 9685 error ("default argument %qE uses local variable %qD", arg, var);
297e73d8
MM
9686 return error_mark_node;
9687 }
9688
9689 /* All is well. */
9690 return arg;
9691}
9692
b344d949
JM
9693/* Returns a deprecated type used within TYPE, or NULL_TREE if none. */
9694
9695static tree
9696type_is_deprecated (tree type)
9697{
9698 enum tree_code code;
9699 if (TREE_DEPRECATED (type))
9700 return type;
9701 if (TYPE_NAME (type)
9702 && TREE_DEPRECATED (TYPE_NAME (type)))
9703 return type;
9704
9705 code = TREE_CODE (type);
9706
9707 if (code == POINTER_TYPE || code == REFERENCE_TYPE
9708 || code == OFFSET_TYPE || code == FUNCTION_TYPE
9709 || code == METHOD_TYPE || code == ARRAY_TYPE)
9710 return type_is_deprecated (TREE_TYPE (type));
9711
9712 if (TYPE_PTRMEMFUNC_P (type))
9713 return type_is_deprecated
9714 (TREE_TYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (type))));
9715
9716 return NULL_TREE;
9717}
9718
8d08fdba
MS
9719/* Decode the list of parameter types for a function type.
9720 Given the list of things declared inside the parens,
9721 return a list of types.
9722
058b15c1
MM
9723 If this parameter does not end with an ellipsis, we append
9724 void_list_node.
5cce22b6 9725
4546865e 9726 *PARMS is set to the chain of PARM_DECLs created. */
8d08fdba
MS
9727
9728static tree
b344d949 9729grokparms (tree parmlist, tree *parms)
8d08fdba
MS
9730{
9731 tree result = NULL_TREE;
9732 tree decls = NULL_TREE;
b344d949 9733 tree parm;
5cce22b6 9734 int any_error = 0;
8d08fdba 9735
b344d949 9736 for (parm = parmlist; parm != NULL_TREE; parm = TREE_CHAIN (parm))
8d08fdba 9737 {
0657c69c 9738 tree type = NULL_TREE;
b344d949
JM
9739 tree init = TREE_PURPOSE (parm);
9740 tree decl = TREE_VALUE (parm);
40449a90 9741 const char *errmsg;
8d08fdba 9742
b344d949 9743 if (parm == void_list_node)
0cbd7506 9744 break;
8d08fdba 9745
5cce22b6 9746 if (! decl || TREE_TYPE (decl) == error_mark_node)
0cbd7506 9747 continue;
d363e7bf 9748
5cce22b6
NS
9749 type = TREE_TYPE (decl);
9750 if (VOID_TYPE_P (type))
0cbd7506
MS
9751 {
9752 if (same_type_p (type, void_type_node)
e7e53192 9753 && DECL_SELF_REFERENCE_P (type)
b344d949 9754 && !DECL_NAME (decl) && !result && TREE_CHAIN (parm) == void_list_node)
0cbd7506
MS
9755 /* this is a parmlist of `(void)', which is ok. */
9756 break;
9757 cxx_incomplete_type_error (decl, type);
0657c69c
MM
9758 /* It's not a good idea to actually create parameters of
9759 type `void'; other parts of the compiler assume that a
9760 void type terminates the parameter list. */
04f3dc2b 9761 type = error_mark_node;
0657c69c 9762 TREE_TYPE (decl) = error_mark_node;
0cbd7506 9763 }
8d08fdba 9764
360f866c
JJ
9765 if (type != error_mark_node
9766 && TYPE_FOR_JAVA (type)
9e1e64ec 9767 && MAYBE_CLASS_TYPE_P (type))
360f866c
JJ
9768 {
9769 error ("parameter %qD has Java class type", decl);
9770 type = error_mark_node;
9771 TREE_TYPE (decl) = error_mark_node;
9772 init = NULL_TREE;
9773 }
9774
40449a90
SL
9775 if (type != error_mark_node
9776 && (errmsg = targetm.invalid_parameter_type (type)))
9777 {
9778 error (errmsg);
9779 type = error_mark_node;
9780 TREE_TYPE (decl) = error_mark_node;
9781 }
9782
d363e7bf 9783 if (type != error_mark_node)
04f3dc2b 9784 {
b344d949
JM
9785 if (deprecated_state != DEPRECATED_SUPPRESS)
9786 {
9787 tree deptype = type_is_deprecated (type);
9788 if (deptype)
9b86d6bb 9789 warn_deprecated_use (deptype, NULL_TREE);
b344d949
JM
9790 }
9791
04f3dc2b
MM
9792 /* Top-level qualifiers on the parameters are
9793 ignored for function types. */
79a1a736 9794 type = cp_build_qualified_type (type, 0);
04f3dc2b
MM
9795 if (TREE_CODE (type) == METHOD_TYPE)
9796 {
2d01edd7 9797 error ("parameter %qD invalidly declared method type", decl);
04f3dc2b
MM
9798 type = build_pointer_type (type);
9799 TREE_TYPE (decl) = type;
9800 }
04f3dc2b 9801 else if (abstract_virtuals_error (decl, type))
a1c65f9f 9802 any_error = 1; /* Seems like a good idea. */
04f3dc2b
MM
9803 else if (POINTER_TYPE_P (type))
9804 {
9805 /* [dcl.fct]/6, parameter types cannot contain pointers
9806 (references) to arrays of unknown bound. */
98979fe0
NS
9807 tree t = TREE_TYPE (type);
9808 int ptr = TYPE_PTR_P (type);
9809
0cbd7506
MS
9810 while (1)
9811 {
9812 if (TYPE_PTR_P (t))
9813 ptr = 1;
9814 else if (TREE_CODE (t) != ARRAY_TYPE)
9815 break;
9816 else if (!TYPE_DOMAIN (t))
9817 break;
9818 t = TREE_TYPE (t);
9819 }
04f3dc2b 9820 if (TREE_CODE (t) == ARRAY_TYPE)
2d01edd7 9821 error ("parameter %qD includes %s to array of unknown "
0cbd7506
MS
9822 "bound %qT",
9823 decl, ptr ? "pointer" : "reference", t);
04f3dc2b
MM
9824 }
9825
c3ee4651 9826 if (any_error)
04f3dc2b 9827 init = NULL_TREE;
c3ee4651
NS
9828 else if (init && !processing_template_decl)
9829 init = check_default_argument (decl, init);
04f3dc2b 9830 }
8d08fdba 9831
5d80a306
DG
9832 if (TREE_CODE (decl) == PARM_DECL
9833 && FUNCTION_PARAMETER_PACK_P (decl)
b344d949
JM
9834 && TREE_CHAIN (parm)
9835 && TREE_CHAIN (parm) != void_list_node)
5d80a306
DG
9836 error ("parameter packs must be at the end of the parameter list");
9837
5cce22b6
NS
9838 TREE_CHAIN (decl) = decls;
9839 decls = decl;
0657c69c 9840 result = tree_cons (init, type, result);
8d08fdba 9841 }
5cce22b6
NS
9842 decls = nreverse (decls);
9843 result = nreverse (result);
b344d949 9844 if (parm)
5cce22b6 9845 result = chainon (result, void_list_node);
4546865e 9846 *parms = decls;
8d08fdba 9847
8d08fdba
MS
9848 return result;
9849}
42976354 9850
8d08fdba 9851\f
271e6f02
NS
9852/* D is a constructor or overloaded `operator='.
9853
9854 Let T be the class in which D is declared. Then, this function
9855 returns:
9856
9857 -1 if D's is an ill-formed constructor or copy assignment operator
9858 whose first parameter is of type `T'.
9859 0 if D is not a copy constructor or copy assignment
9860 operator.
9861 1 if D is a copy constructor or copy assignment operator whose
271e6f02 9862 first parameter is a reference to non-const qualified T.
20f2653e
JM
9863 2 if D is a copy constructor or copy assignment operator whose
9864 first parameter is a reference to const qualified T.
271e6f02
NS
9865
9866 This function can be used as a predicate. Positive values indicate
838dfd8a 9867 a copy constructor and nonzero values indicate a copy assignment
4f1c5b7d
MM
9868 operator. */
9869
c11b6f21 9870int
58f9752a 9871copy_fn_p (const_tree d)
c11b6f21 9872{
271e6f02
NS
9873 tree args;
9874 tree arg_type;
9875 int result = 1;
caf93cb0 9876
398cd199 9877 gcc_assert (DECL_FUNCTION_MEMBER_P (d));
4f1c5b7d 9878
7137605e
MM
9879 if (TREE_CODE (d) == TEMPLATE_DECL
9880 || (DECL_TEMPLATE_INFO (d)
9881 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
271e6f02
NS
9882 /* Instantiations of template member functions are never copy
9883 functions. Note that member functions of templated classes are
9884 represented as template functions internally, and we must
9885 accept those as copy functions. */
9886 return 0;
caf93cb0 9887
271e6f02
NS
9888 args = FUNCTION_FIRST_USER_PARMTYPE (d);
9889 if (!args)
4f1c5b7d
MM
9890 return 0;
9891
271e6f02 9892 arg_type = TREE_VALUE (args);
139a78c7
VR
9893 if (arg_type == error_mark_node)
9894 return 0;
271e6f02
NS
9895
9896 if (TYPE_MAIN_VARIANT (arg_type) == DECL_CONTEXT (d))
9897 {
9898 /* Pass by value copy assignment operator. */
9899 result = -1;
9900 }
9901 else if (TREE_CODE (arg_type) == REFERENCE_TYPE
8af2fec4 9902 && !TYPE_REF_IS_RVALUE (arg_type)
271e6f02
NS
9903 && TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)) == DECL_CONTEXT (d))
9904 {
9905 if (CP_TYPE_CONST_P (TREE_TYPE (arg_type)))
9906 result = 2;
9907 }
9908 else
9909 return 0;
caf93cb0 9910
271e6f02
NS
9911 args = TREE_CHAIN (args);
9912
9913 if (args && args != void_list_node && !TREE_PURPOSE (args))
9914 /* There are more non-optional args. */
9915 return 0;
9916
9917 return result;
9918}
9919
8af2fec4
RY
9920/* D is a constructor or overloaded `operator='.
9921
9922 Let T be the class in which D is declared. Then, this function
9923 returns true when D is a move constructor or move assignment
9924 operator, false otherwise. */
9925
9926bool
58f9752a 9927move_fn_p (const_tree d)
8af2fec4
RY
9928{
9929 tree args;
9930 tree arg_type;
9931 bool result = false;
9932
9933 gcc_assert (DECL_FUNCTION_MEMBER_P (d));
9934
c1ae8be5
SM
9935 if (cxx_dialect == cxx98)
9936 /* There are no move constructors if we are in C++98 mode. */
8af2fec4
RY
9937 return false;
9938
9939 if (TREE_CODE (d) == TEMPLATE_DECL
9940 || (DECL_TEMPLATE_INFO (d)
9941 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
9942 /* Instantiations of template member functions are never copy
9943 functions. Note that member functions of templated classes are
9944 represented as template functions internally, and we must
9945 accept those as copy functions. */
9946 return 0;
9947
9948 args = FUNCTION_FIRST_USER_PARMTYPE (d);
9949 if (!args)
9950 return 0;
9951
9952 arg_type = TREE_VALUE (args);
9953 if (arg_type == error_mark_node)
9954 return 0;
9955
9956 if (TREE_CODE (arg_type) == REFERENCE_TYPE
9957 && TYPE_REF_IS_RVALUE (arg_type)
9958 && same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)),
9959 DECL_CONTEXT (d)))
9960 result = true;
9961
9962 args = TREE_CHAIN (args);
9963
9964 if (args && args != void_list_node && !TREE_PURPOSE (args))
9965 /* There are more non-optional args. */
9966 return false;
9967
9968 return result;
9969}
9970
271e6f02
NS
9971/* Remember any special properties of member function DECL. */
9972
0fcedd9c
JM
9973void
9974grok_special_member_properties (tree decl)
271e6f02 9975{
7137605e
MM
9976 tree class_type;
9977
6d69fe27 9978 if (!DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
7137605e
MM
9979 return;
9980
9981 class_type = DECL_CONTEXT (decl);
9982 if (DECL_CONSTRUCTOR_P (decl))
271e6f02
NS
9983 {
9984 int ctor = copy_fn_p (decl);
caf93cb0 9985
0fcedd9c
JM
9986 if (!DECL_ARTIFICIAL (decl))
9987 TYPE_HAS_USER_CONSTRUCTOR (class_type) = 1;
7137605e 9988
271e6f02
NS
9989 if (ctor > 0)
9990 {
9991 /* [class.copy]
caf93cb0 9992
0cbd7506
MS
9993 A non-template constructor for class X is a copy
9994 constructor if its first parameter is of type X&, const
9995 X&, volatile X& or const volatile X&, and either there
9996 are no other parameters or else all other parameters have
9997 default arguments. */
7137605e 9998 TYPE_HAS_INIT_REF (class_type) = 1;
20f2653e 9999 if (user_provided_p (decl))
b87d79e6 10000 TYPE_HAS_COMPLEX_INIT_REF (class_type) = 1;
271e6f02 10001 if (ctor > 1)
7137605e 10002 TYPE_HAS_CONST_INIT_REF (class_type) = 1;
271e6f02
NS
10003 }
10004 else if (sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (decl)))
f782c65c
JM
10005 {
10006 TYPE_HAS_DEFAULT_CONSTRUCTOR (class_type) = 1;
20f2653e 10007 if (user_provided_p (decl))
f782c65c
JM
10008 TYPE_HAS_COMPLEX_DFLT (class_type) = 1;
10009 }
09357846
JM
10010 else if (is_list_ctor (decl))
10011 TYPE_HAS_LIST_CTOR (class_type) = 1;
271e6f02
NS
10012 }
10013 else if (DECL_OVERLOADED_OPERATOR_P (decl) == NOP_EXPR)
10014 {
10015 /* [class.copy]
caf93cb0 10016
0cbd7506
MS
10017 A non-template assignment operator for class X is a copy
10018 assignment operator if its parameter is of type X, X&, const
10019 X&, volatile X& or const volatile X&. */
caf93cb0 10020
271e6f02 10021 int assop = copy_fn_p (decl);
caf93cb0 10022
271e6f02
NS
10023 if (assop)
10024 {
7137605e 10025 TYPE_HAS_ASSIGN_REF (class_type) = 1;
20f2653e 10026 if (user_provided_p (decl))
b87d79e6 10027 TYPE_HAS_COMPLEX_ASSIGN_REF (class_type) = 1;
271e6f02 10028 if (assop != 1)
7137605e 10029 TYPE_HAS_CONST_ASSIGN_REF (class_type) = 1;
271e6f02
NS
10030 }
10031 }
c11b6f21
MS
10032}
10033
271e6f02
NS
10034/* Check a constructor DECL has the correct form. Complains
10035 if the class has a constructor of the form X(X). */
e92cc029 10036
a0a33927 10037int
58f9752a 10038grok_ctor_properties (const_tree ctype, const_tree decl)
8d08fdba 10039{
271e6f02
NS
10040 int ctor_parm = copy_fn_p (decl);
10041
10042 if (ctor_parm < 0)
10043 {
10044 /* [class.copy]
caf93cb0 10045
0cbd7506
MS
10046 A declaration of a constructor for a class X is ill-formed if
10047 its first parameter is of type (optionally cv-qualified) X
10048 and either there are no other parameters or else all other
10049 parameters have default arguments.
10050
10051 We *don't* complain about member template instantiations that
10052 have this form, though; they can occur as we try to decide
10053 what constructor to use during overload resolution. Since
10054 overload resolution will never prefer such a constructor to
10055 the non-template copy constructor (which is either explicitly
10056 or implicitly defined), there's no need to worry about their
10057 existence. Theoretically, they should never even be
10058 instantiated, but that's hard to forestall. */
2d01edd7 10059 error ("invalid constructor; you probably meant %<%T (const %T&)%>",
0b41abe6 10060 ctype, ctype);
0b41abe6 10061 return 0;
8d08fdba 10062 }
caf93cb0 10063
a0a33927 10064 return 1;
8d08fdba
MS
10065}
10066
596ea4e5 10067/* An operator with this code is unary, but can also be binary. */
e92cc029 10068
a28e3c7f 10069static int
11f6b451 10070ambi_op_p (enum tree_code code)
8d08fdba 10071{
596ea4e5
AS
10072 return (code == INDIRECT_REF
10073 || code == ADDR_EXPR
392e3d51 10074 || code == UNARY_PLUS_EXPR
596ea4e5
AS
10075 || code == NEGATE_EXPR
10076 || code == PREINCREMENT_EXPR
10077 || code == PREDECREMENT_EXPR);
8d08fdba
MS
10078}
10079
10080/* An operator with this name can only be unary. */
e92cc029 10081
a28e3c7f 10082static int
11f6b451 10083unary_op_p (enum tree_code code)
8d08fdba 10084{
596ea4e5
AS
10085 return (code == TRUTH_NOT_EXPR
10086 || code == BIT_NOT_EXPR
10087 || code == COMPONENT_REF
10088 || code == TYPE_EXPR);
8d08fdba
MS
10089}
10090
f2a79152 10091/* DECL is a declaration for an overloaded operator. If COMPLAIN is true,
4b0d3cbe 10092 errors are issued for invalid declarations. */
e92cc029 10093
398cd199 10094bool
7e45bd18 10095grok_op_properties (tree decl, bool complain)
8d08fdba
MS
10096{
10097 tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
596ea4e5 10098 tree argtype;
8d08fdba
MS
10099 int methodp = (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE);
10100 tree name = DECL_NAME (decl);
596ea4e5
AS
10101 enum tree_code operator_code;
10102 int arity;
64844139 10103 bool ellipsis_p;
7e45bd18 10104 tree class_type;
596ea4e5 10105
64844139 10106 /* Count the number of arguments and check for ellipsis. */
596ea4e5
AS
10107 for (argtype = argtypes, arity = 0;
10108 argtype && argtype != void_list_node;
10109 argtype = TREE_CHAIN (argtype))
10110 ++arity;
64844139 10111 ellipsis_p = !argtype;
8d08fdba 10112
7e45bd18
MM
10113 class_type = DECL_CONTEXT (decl);
10114 if (class_type && !CLASS_TYPE_P (class_type))
10115 class_type = NULL_TREE;
8d08fdba 10116
596ea4e5
AS
10117 if (DECL_CONV_FN_P (decl))
10118 operator_code = TYPE_EXPR;
10119 else
10120 do
10121 {
0c918ce5
MM
10122#define DEF_OPERATOR(NAME, CODE, MANGLING, ARITY, ASSN_P) \
10123 if (ansi_opname (CODE) == name) \
10124 { \
75ac8dec 10125 operator_code = (CODE); \
0c918ce5
MM
10126 break; \
10127 } \
10128 else if (ansi_assopname (CODE) == name) \
10129 { \
75ac8dec 10130 operator_code = (CODE); \
0c918ce5
MM
10131 DECL_ASSIGNMENT_OPERATOR_P (decl) = 1; \
10132 break; \
596ea4e5
AS
10133 }
10134
10135#include "operators.def"
10136#undef DEF_OPERATOR
10137
8dc2b103 10138 gcc_unreachable ();
596ea4e5
AS
10139 }
10140 while (0);
c0ed0531 10141 gcc_assert (operator_code != MAX_TREE_CODES);
596ea4e5
AS
10142 SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
10143
7e45bd18
MM
10144 if (class_type)
10145 switch (operator_code)
10146 {
10147 case NEW_EXPR:
10148 TYPE_HAS_NEW_OPERATOR (class_type) = 1;
10149 break;
5362b086 10150
7e45bd18
MM
10151 case DELETE_EXPR:
10152 TYPE_GETS_DELETE (class_type) |= 1;
10153 break;
5362b086 10154
7e45bd18
MM
10155 case VEC_NEW_EXPR:
10156 TYPE_HAS_ARRAY_NEW_OPERATOR (class_type) = 1;
10157 break;
5362b086 10158
7e45bd18
MM
10159 case VEC_DELETE_EXPR:
10160 TYPE_GETS_DELETE (class_type) |= 2;
10161 break;
596ea4e5 10162
7e45bd18
MM
10163 default:
10164 break;
10165 }
596ea4e5 10166
3143d517
GB
10167 /* [basic.std.dynamic.allocation]/1:
10168
10169 A program is ill-formed if an allocation function is declared
10170 in a namespace scope other than global scope or declared static
10171 in global scope.
10172
10173 The same also holds true for deallocation functions. */
10174 if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR
10175 || operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
10176 {
10177 if (DECL_NAMESPACE_SCOPE_P (decl))
10178 {
10179 if (CP_DECL_CONTEXT (decl) != global_namespace)
398cd199
VR
10180 {
10181 error ("%qD may not be declared within a namespace", decl);
10182 return false;
10183 }
3143d517 10184 else if (!TREE_PUBLIC (decl))
398cd199
VR
10185 {
10186 error ("%qD may not be declared as static", decl);
10187 return false;
10188 }
3143d517
GB
10189 }
10190 }
10191
596ea4e5 10192 if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR)
1ea193c2
ILT
10193 {
10194 TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
10195 DECL_IS_OPERATOR_NEW (decl) = 1;
10196 }
596ea4e5 10197 else if (operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
4546865e 10198 TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
8d08fdba
MS
10199 else
10200 {
10201 /* An operator function must either be a non-static member function
10202 or have at least one parameter of a class, a reference to a class,
10203 an enumeration, or a reference to an enumeration. 13.4.0.6 */
700f8a87 10204 if (! methodp || DECL_STATIC_FUNCTION_P (decl))
8d08fdba 10205 {
596ea4e5
AS
10206 if (operator_code == TYPE_EXPR
10207 || operator_code == CALL_EXPR
10208 || operator_code == COMPONENT_REF
10209 || operator_code == ARRAY_REF
10210 || operator_code == NOP_EXPR)
f2a79152 10211 {
b77068f2
JM
10212 if (class_type && LAMBDA_TYPE_P (class_type))
10213 /* Lambdas can have static op() and conv ops. */;
10214 else
10215 {
10216 error ("%qD must be a nonstatic member function", decl);
10217 return false;
10218 }
f2a79152 10219 }
8d08fdba
MS
10220 else
10221 {
4b0d3cbe 10222 tree p;
8d08fdba 10223
700f8a87 10224 if (DECL_STATIC_FUNCTION_P (decl))
f2a79152
PC
10225 {
10226 error ("%qD must be either a non-static member "
10227 "function or a non-member function", decl);
398cd199 10228 return false;
f2a79152 10229 }
700f8a87 10230
4b0d3cbe
MM
10231 for (p = argtypes; p && p != void_list_node; p = TREE_CHAIN (p))
10232 {
10233 tree arg = non_reference (TREE_VALUE (p));
85990800 10234 if (arg == error_mark_node)
398cd199 10235 return false;
85990800 10236
9e1e64ec 10237 /* MAYBE_CLASS_TYPE_P, rather than CLASS_TYPE_P, is used
4b0d3cbe
MM
10238 because these checks are performed even on
10239 template functions. */
9e1e64ec
PC
10240 if (MAYBE_CLASS_TYPE_P (arg)
10241 || TREE_CODE (arg) == ENUMERAL_TYPE)
4b0d3cbe
MM
10242 break;
10243 }
10244
10245 if (!p || p == void_list_node)
10246 {
398cd199
VR
10247 if (complain)
10248 error ("%qD must have an argument of class or "
10249 "enumerated type", decl);
10250 return false;
4b0d3cbe 10251 }
8d08fdba
MS
10252 }
10253 }
68642fb6 10254
4b0d3cbe
MM
10255 /* There are no restrictions on the arguments to an overloaded
10256 "operator ()". */
596ea4e5 10257 if (operator_code == CALL_EXPR)
398cd199 10258 return true;
8d08fdba 10259
7e45bd18 10260 /* Warn about conversion operators that will never be used. */
c8094d83 10261 if (IDENTIFIER_TYPENAME_P (name)
7e45bd18
MM
10262 && ! DECL_TEMPLATE_INFO (decl)
10263 && warn_conversion
10264 /* Warn only declaring the function; there is no need to
10265 warn again about out-of-class definitions. */
10266 && class_type == current_class_type)
a0a33927
MS
10267 {
10268 tree t = TREE_TYPE (name);
7e45bd18
MM
10269 int ref = (TREE_CODE (t) == REFERENCE_TYPE);
10270 const char *what = 0;
5362b086 10271
7e45bd18
MM
10272 if (ref)
10273 t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
a0a33927 10274
7e45bd18
MM
10275 if (TREE_CODE (t) == VOID_TYPE)
10276 what = "void";
10277 else if (class_type)
10278 {
10279 if (t == class_type)
a0a33927 10280 what = "the same type";
9a3b49ac 10281 /* Don't force t to be complete here. */
9e1e64ec 10282 else if (MAYBE_CLASS_TYPE_P (t)
d0f062fb 10283 && COMPLETE_TYPE_P (t)
7e45bd18 10284 && DERIVED_FROM_P (t, class_type))
a0a33927 10285 what = "a base class";
a0a33927 10286 }
7e45bd18
MM
10287
10288 if (what)
b323323f 10289 warning (OPT_Wconversion, "conversion to %s%s will never use a type "
7e45bd18
MM
10290 "conversion operator",
10291 ref ? "a reference to " : "", what);
a0a33927 10292 }
64844139 10293
271e6f02 10294 if (operator_code == COND_EXPR)
8d08fdba
MS
10295 {
10296 /* 13.4.0.3 */
33bd39a2 10297 error ("ISO C++ prohibits overloading operator ?:");
398cd199 10298 return false;
68642fb6 10299 }
64844139 10300 else if (ellipsis_p)
398cd199
VR
10301 {
10302 error ("%qD must not have variable number of arguments", decl);
10303 return false;
10304 }
596ea4e5 10305 else if (ambi_op_p (operator_code))
8d08fdba 10306 {
596ea4e5
AS
10307 if (arity == 1)
10308 /* We pick the one-argument operator codes by default, so
10309 we don't have to change anything. */
10310 ;
10311 else if (arity == 2)
8d08fdba 10312 {
596ea4e5
AS
10313 /* If we thought this was a unary operator, we now know
10314 it to be a binary operator. */
10315 switch (operator_code)
10316 {
10317 case INDIRECT_REF:
10318 operator_code = MULT_EXPR;
10319 break;
10320
10321 case ADDR_EXPR:
10322 operator_code = BIT_AND_EXPR;
10323 break;
10324
392e3d51 10325 case UNARY_PLUS_EXPR:
596ea4e5
AS
10326 operator_code = PLUS_EXPR;
10327 break;
10328
10329 case NEGATE_EXPR:
10330 operator_code = MINUS_EXPR;
10331 break;
10332
10333 case PREINCREMENT_EXPR:
10334 operator_code = POSTINCREMENT_EXPR;
10335 break;
10336
10337 case PREDECREMENT_EXPR:
655dc6ee 10338 operator_code = POSTDECREMENT_EXPR;
596ea4e5
AS
10339 break;
10340
10341 default:
8dc2b103 10342 gcc_unreachable ();
596ea4e5
AS
10343 }
10344
10345 SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
10346
10347 if ((operator_code == POSTINCREMENT_EXPR
10348 || operator_code == POSTDECREMENT_EXPR)
5156628f 10349 && ! processing_template_decl
007e5fea 10350 && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)), integer_type_node))
8d08fdba
MS
10351 {
10352 if (methodp)
2d01edd7 10353 error ("postfix %qD must take %<int%> as its argument",
398cd199 10354 decl);
8d08fdba 10355 else
398cd199
VR
10356 error ("postfix %qD must take %<int%> as its second "
10357 "argument", decl);
10358 return false;
8d08fdba
MS
10359 }
10360 }
10361 else
10362 {
10363 if (methodp)
2d01edd7 10364 error ("%qD must take either zero or one argument", decl);
8d08fdba 10365 else
2d01edd7 10366 error ("%qD must take either one or two arguments", decl);
398cd199 10367 return false;
8d08fdba 10368 }
824b9a4c
MS
10369
10370 /* More Effective C++ rule 6. */
eb448459 10371 if (warn_ecpp
596ea4e5
AS
10372 && (operator_code == POSTINCREMENT_EXPR
10373 || operator_code == POSTDECREMENT_EXPR
10374 || operator_code == PREINCREMENT_EXPR
10375 || operator_code == PREDECREMENT_EXPR))
824b9a4c
MS
10376 {
10377 tree arg = TREE_VALUE (argtypes);
10378 tree ret = TREE_TYPE (TREE_TYPE (decl));
10379 if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
10380 arg = TREE_TYPE (arg);
10381 arg = TYPE_MAIN_VARIANT (arg);
596ea4e5
AS
10382 if (operator_code == PREINCREMENT_EXPR
10383 || operator_code == PREDECREMENT_EXPR)
824b9a4c
MS
10384 {
10385 if (TREE_CODE (ret) != REFERENCE_TYPE
3bfdc719
MM
10386 || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)),
10387 arg))
b323323f 10388 warning (OPT_Weffc__, "prefix %qD should return %qT", decl,
0cbd7506 10389 build_reference_type (arg));
824b9a4c
MS
10390 }
10391 else
10392 {
3bfdc719 10393 if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
b323323f 10394 warning (OPT_Weffc__, "postfix %qD should return %qT", decl, arg);
824b9a4c
MS
10395 }
10396 }
8d08fdba 10397 }
596ea4e5 10398 else if (unary_op_p (operator_code))
8d08fdba 10399 {
596ea4e5 10400 if (arity != 1)
8d08fdba
MS
10401 {
10402 if (methodp)
2d01edd7 10403 error ("%qD must take %<void%>", decl);
8d08fdba 10404 else
2d01edd7 10405 error ("%qD must take exactly one argument", decl);
398cd199 10406 return false;
8d08fdba
MS
10407 }
10408 }
596ea4e5 10409 else /* if (binary_op_p (operator_code)) */
8d08fdba 10410 {
596ea4e5 10411 if (arity != 2)
8d08fdba
MS
10412 {
10413 if (methodp)
2d01edd7 10414 error ("%qD must take exactly one argument", decl);
8d08fdba 10415 else
2d01edd7 10416 error ("%qD must take exactly two arguments", decl);
398cd199 10417 return false;
8d08fdba 10418 }
824b9a4c
MS
10419
10420 /* More Effective C++ rule 7. */
eb448459 10421 if (warn_ecpp
596ea4e5
AS
10422 && (operator_code == TRUTH_ANDIF_EXPR
10423 || operator_code == TRUTH_ORIF_EXPR
10424 || operator_code == COMPOUND_EXPR))
b323323f 10425 warning (OPT_Weffc__, "user-defined %qD always evaluates both arguments",
0cbd7506 10426 decl);
824b9a4c
MS
10427 }
10428
10429 /* Effective C++ rule 23. */
eb448459 10430 if (warn_ecpp
596ea4e5 10431 && arity == 2
4bd7c270 10432 && !DECL_ASSIGNMENT_OPERATOR_P (decl)
596ea4e5
AS
10433 && (operator_code == PLUS_EXPR
10434 || operator_code == MINUS_EXPR
10435 || operator_code == TRUNC_DIV_EXPR
4bd7c270
NS
10436 || operator_code == MULT_EXPR
10437 || operator_code == TRUNC_MOD_EXPR)
824b9a4c 10438 && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
b323323f 10439 warning (OPT_Weffc__, "%qD should return by value", decl);
8d08fdba 10440
271e6f02 10441 /* [over.oper]/8 */
34332678 10442 for (; argtypes && argtypes != void_list_node;
0cbd7506
MS
10443 argtypes = TREE_CHAIN (argtypes))
10444 if (TREE_PURPOSE (argtypes))
10445 {
10446 TREE_PURPOSE (argtypes) = NULL_TREE;
10447 if (operator_code == POSTINCREMENT_EXPR
596ea4e5 10448 || operator_code == POSTDECREMENT_EXPR)
0cbd7506 10449 {
509c9d60 10450 pedwarn (input_location, OPT_pedantic, "%qD cannot have default arguments",
fcf73884 10451 decl);
0cbd7506
MS
10452 }
10453 else
398cd199
VR
10454 {
10455 error ("%qD cannot have default arguments", decl);
10456 return false;
10457 }
0cbd7506 10458 }
8d08fdba 10459 }
398cd199 10460 return true;
8d08fdba
MS
10461}
10462\f
0c88d886
MM
10463/* Return a string giving the keyword associate with CODE. */
10464
d8e178a0 10465static const char *
11f6b451 10466tag_name (enum tag_types code)
094fe153
JM
10467{
10468 switch (code)
10469 {
10470 case record_type:
10471 return "struct";
10472 case class_type:
10473 return "class";
10474 case union_type:
0c88d886 10475 return "union";
094fe153
JM
10476 case enum_type:
10477 return "enum";
0c88d886
MM
10478 case typename_type:
10479 return "typename";
094fe153 10480 default:
8dc2b103 10481 gcc_unreachable ();
094fe153
JM
10482 }
10483}
10484
befcd99b 10485/* Name lookup in an elaborated-type-specifier (after the keyword
4b0d3cbe 10486 indicated by TAG_CODE) has found the TYPE_DECL DECL. If the
befcd99b 10487 elaborated-type-specifier is invalid, issue a diagnostic and return
4b0d3cbe 10488 error_mark_node; otherwise, return the *_TYPE to which it referred.
cbd63935 10489 If ALLOW_TEMPLATE_P is true, TYPE may be a class template. */
befcd99b 10490
560ad596 10491tree
befcd99b 10492check_elaborated_type_specifier (enum tag_types tag_code,
4b0d3cbe 10493 tree decl,
cbd63935 10494 bool allow_template_p)
befcd99b 10495{
4b0d3cbe 10496 tree type;
befcd99b 10497
4b0d3cbe
MM
10498 /* In the case of:
10499
10500 struct S { struct S *p; };
10501
10502 name lookup will find the TYPE_DECL for the implicit "S::S"
10503 typedef. Adjust for that here. */
10504 if (DECL_SELF_REFERENCE_P (decl))
10505 decl = TYPE_NAME (TREE_TYPE (decl));
10506
10507 type = TREE_TYPE (decl);
10508
461c6fce
KL
10509 /* Check TEMPLATE_TYPE_PARM first because DECL_IMPLICIT_TYPEDEF_P
10510 is false for this case as well. */
10511 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
10512 {
10513 error ("using template type parameter %qT after %qs",
10514 type, tag_name (tag_code));
10515 return error_mark_node;
10516 }
caf93cb0 10517 /* [dcl.type.elab]
4b0d3cbe
MM
10518
10519 If the identifier resolves to a typedef-name or a template
10520 type-parameter, the elaborated-type-specifier is ill-formed.
10521
10522 In other words, the only legitimate declaration to use in the
10523 elaborated type specifier is the implicit typedef created when
10524 the type is declared. */
0c88d886
MM
10525 else if (!DECL_IMPLICIT_TYPEDEF_P (decl)
10526 && tag_code != typename_type)
befcd99b 10527 {
2d01edd7 10528 error ("using typedef-name %qD after %qs", decl, tag_name (tag_code));
dee15844 10529 error ("%q+D has a previous declaration here", decl);
4b0d3cbe 10530 return error_mark_node;
befcd99b 10531 }
cbd63935
KL
10532 else if (TREE_CODE (type) != RECORD_TYPE
10533 && TREE_CODE (type) != UNION_TYPE
0c88d886
MM
10534 && tag_code != enum_type
10535 && tag_code != typename_type)
cbd63935 10536 {
2d01edd7 10537 error ("%qT referred to as %qs", type, tag_name (tag_code));
dee15844 10538 error ("%q+T has a previous declaration here", type);
4b0d3cbe 10539 return error_mark_node;
cbd63935
KL
10540 }
10541 else if (TREE_CODE (type) != ENUMERAL_TYPE
4fe8db68 10542 && tag_code == enum_type)
cbd63935 10543 {
2d01edd7 10544 error ("%qT referred to as enum", type);
dee15844 10545 error ("%q+T has a previous declaration here", type);
4b0d3cbe 10546 return error_mark_node;
cbd63935
KL
10547 }
10548 else if (!allow_template_p
10549 && TREE_CODE (type) == RECORD_TYPE
10550 && CLASSTYPE_IS_TEMPLATE (type))
10551 {
10552 /* If a class template appears as elaborated type specifier
10553 without a template header such as:
10554
10555 template <class T> class C {};
10556 void f(class C); // No template header here
10557
10558 then the required template argument is missing. */
2d01edd7 10559 error ("template argument required for %<%s %T%>",
cbd63935
KL
10560 tag_name (tag_code),
10561 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type)));
4b0d3cbe 10562 return error_mark_node;
cbd63935 10563 }
befcd99b 10564
4b0d3cbe 10565 return type;
befcd99b
MM
10566}
10567
461c6fce 10568/* Lookup NAME in elaborate type specifier in scope according to
29ef83de 10569 SCOPE and issue diagnostics if necessary.
461c6fce
KL
10570 Return *_TYPE node upon success, NULL_TREE when the NAME is not
10571 found, and ERROR_MARK_NODE for type error. */
10572
10573static tree
10574lookup_and_check_tag (enum tag_types tag_code, tree name,
29ef83de 10575 tag_scope scope, bool template_header_p)
461c6fce
KL
10576{
10577 tree t;
10578 tree decl;
29ef83de 10579 if (scope == ts_global)
bd3d082e
KL
10580 {
10581 /* First try ordinary name lookup, ignoring hidden class name
10582 injected via friend declaration. */
10e6657a 10583 decl = lookup_name_prefer_type (name, 2);
bd3d082e
KL
10584 /* If that fails, the name will be placed in the smallest
10585 non-class, non-function-prototype scope according to 3.3.1/5.
10586 We may already have a hidden name declared as friend in this
105d72c5 10587 scope. So lookup again but not ignoring hidden names.
bd3d082e
KL
10588 If we find one, that name will be made visible rather than
10589 creating a new tag. */
10590 if (!decl)
10591 decl = lookup_type_scope (name, ts_within_enclosing_non_class);
10592 }
461c6fce 10593 else
29ef83de 10594 decl = lookup_type_scope (name, scope);
461c6fce
KL
10595
10596 if (decl && DECL_CLASS_TEMPLATE_P (decl))
10597 decl = DECL_TEMPLATE_RESULT (decl);
10598
10599 if (decl && TREE_CODE (decl) == TYPE_DECL)
10600 {
4104f0f4
KL
10601 /* Look for invalid nested type:
10602 class C {
10603 class C {};
10604 }; */
10605 if (scope == ts_current && DECL_SELF_REFERENCE_P (decl))
10606 {
10607 error ("%qD has the same name as the class in which it is "
10608 "declared",
10609 decl);
10610 return error_mark_node;
10611 }
10612
461c6fce
KL
10613 /* Two cases we need to consider when deciding if a class
10614 template is allowed as an elaborated type specifier:
10615 1. It is a self reference to its own class.
10616 2. It comes with a template header.
10617
10618 For example:
10619
10620 template <class T> class C {
10621 class C *c1; // DECL_SELF_REFERENCE_P is true
10622 class D;
10623 };
10624 template <class U> class C; // template_header_p is true
10625 template <class T> class C<T>::D {
10626 class C *c2; // DECL_SELF_REFERENCE_P is true
10627 }; */
10628
10629 t = check_elaborated_type_specifier (tag_code,
10630 decl,
10631 template_header_p
10632 | DECL_SELF_REFERENCE_P (decl));
10633 return t;
10634 }
af92ab36
OW
10635 else if (decl && TREE_CODE (decl) == TREE_LIST)
10636 {
10637 error ("reference to %qD is ambiguous", name);
10638 print_candidates (decl);
10639 return error_mark_node;
10640 }
461c6fce
KL
10641 else
10642 return NULL_TREE;
10643}
10644
cbd63935 10645/* Get the struct, enum or union (TAG_CODE says which) with tag NAME.
8d08fdba
MS
10646 Define the tag as a forward-reference if it is not defined.
10647
cbd63935 10648 If a declaration is given, process it here, and report an error if
38b305d0 10649 multiple declarations are not identical.
8d08fdba 10650
29ef83de 10651 SCOPE is TS_CURRENT when this is also a definition. Only look in
8d08fdba 10652 the current frame for the name (since C++ allows new names in any
29ef83de
KL
10653 scope.) It is TS_WITHIN_ENCLOSING_NON_CLASS if this is a friend
10654 declaration. Only look beginning from the current scope outward up
10655 till the nearest non-class scope. Otherwise it is TS_GLOBAL.
cbd63935
KL
10656
10657 TEMPLATE_HEADER_P is true when this declaration is preceded by
10658 a set of template parameters. */
8d08fdba 10659
8d08fdba 10660tree
38b305d0 10661xref_tag (enum tag_types tag_code, tree name,
29ef83de 10662 tag_scope scope, bool template_header_p)
8d08fdba 10663{
8d08fdba 10664 enum tree_code code;
926ce8bd 10665 tree t;
25aab5d0 10666 tree context = NULL_TREE;
dc8263bc 10667
22ffcc6f 10668 timevar_push (TV_NAME_LOOKUP);
cbd63935 10669
50bc768d 10670 gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
cbd63935 10671
8d08fdba
MS
10672 switch (tag_code)
10673 {
10674 case record_type:
10675 case class_type:
8d08fdba 10676 code = RECORD_TYPE;
8d08fdba
MS
10677 break;
10678 case union_type:
10679 code = UNION_TYPE;
8d08fdba
MS
10680 break;
10681 case enum_type:
10682 code = ENUMERAL_TYPE;
10683 break;
10684 default:
8dc2b103 10685 gcc_unreachable ();
8d08fdba
MS
10686 }
10687
461c6fce
KL
10688 /* In case of anonymous name, xref_tag is only called to
10689 make type node and push name. Name lookup is not required. */
10690 if (ANON_AGGRNAME_P (name))
10691 t = NULL_TREE;
8d08fdba 10692 else
461c6fce 10693 t = lookup_and_check_tag (tag_code, name,
29ef83de 10694 scope, template_header_p);
cbd63935 10695
461c6fce
KL
10696 if (t == error_mark_node)
10697 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
68642fb6 10698
29ef83de 10699 if (scope != ts_current && t && current_class_type
461c6fce
KL
10700 && template_class_depth (current_class_type)
10701 && template_header_p)
10702 {
29ef83de 10703 /* Since SCOPE is not TS_CURRENT, we are not looking at a
461c6fce
KL
10704 definition of this tag. Since, in addition, we are currently
10705 processing a (member) template declaration of a template
10706 class, we must be very careful; consider:
25aab5d0 10707
461c6fce
KL
10708 template <class X>
10709 struct S1
25aab5d0 10710
461c6fce
KL
10711 template <class U>
10712 struct S2
10713 { template <class V>
10714 friend struct S1; };
25aab5d0 10715
461c6fce
KL
10716 Here, the S2::S1 declaration should not be confused with the
10717 outer declaration. In particular, the inner version should
10718 have a template parameter of level 2, not level 1. This
10719 would be particularly important if the member declaration
10720 were instead:
25aab5d0 10721
461c6fce 10722 template <class V = U> friend struct S1;
25aab5d0 10723
461c6fce
KL
10724 say, when we should tsubst into `U' when instantiating
10725 S2. On the other hand, when presented with:
25aab5d0 10726
461c6fce
KL
10727 template <class T>
10728 struct S1 {
10729 template <class U>
10730 struct S2 {};
10731 template <class U>
10732 friend struct S2;
10733 };
25aab5d0 10734
461c6fce
KL
10735 we must find the inner binding eventually. We
10736 accomplish this by making sure that the new type we
10737 create to represent this declaration has the right
10738 TYPE_CONTEXT. */
10739 context = TYPE_CONTEXT (t);
10740 t = NULL_TREE;
8d08fdba
MS
10741 }
10742
cbd63935 10743 if (! t)
8d08fdba
MS
10744 {
10745 /* If no such tag is yet defined, create a forward-reference node
10746 and record it as the "definition".
10747 When a real declaration of this type is found,
10748 the forward-reference will be altered into a real type. */
8d08fdba
MS
10749 if (code == ENUMERAL_TYPE)
10750 {
2d01edd7 10751 error ("use of enum %q#D without previous declaration", name);
30fc3df7 10752 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
8d08fdba 10753 }
8d08fdba
MS
10754 else
10755 {
9e1e64ec 10756 t = make_class_type (code);
cbd63935 10757 TYPE_CONTEXT (t) = context;
bd3d082e 10758 t = pushtag (name, t, scope);
8d08fdba
MS
10759 }
10760 }
10761 else
10762 {
9e1e64ec 10763 if (template_header_p && MAYBE_CLASS_TYPE_P (t))
60feef2c
LM
10764 {
10765 if (!redeclare_class_template (t, current_template_parms))
10766 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
10767 }
caf93cb0 10768 else if (!processing_template_decl
9ce1594a
MM
10769 && CLASS_TYPE_P (t)
10770 && CLASSTYPE_IS_TEMPLATE (t))
10771 {
2d01edd7 10772 error ("redeclaration of %qT as a non-template", t);
b646edb8
VR
10773 error ("previous declaration %q+D", t);
10774 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
9ce1594a 10775 }
bd3d082e
KL
10776
10777 /* Make injected friend class visible. */
10778 if (scope != ts_within_enclosing_non_class
10779 && hidden_name_p (TYPE_NAME (t)))
10780 {
10781 DECL_ANTICIPATED (TYPE_NAME (t)) = 0;
10782 DECL_FRIEND_P (TYPE_NAME (t)) = 0;
10783
10784 if (TYPE_TEMPLATE_INFO (t))
10785 {
10786 DECL_ANTICIPATED (TYPE_TI_TEMPLATE (t)) = 0;
10787 DECL_FRIEND_P (TYPE_TI_TEMPLATE (t)) = 0;
10788 }
0cbd7506 10789 }
8d08fdba
MS
10790 }
10791
cbd63935 10792 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
8d08fdba 10793}
8ccc31eb 10794
fc378698 10795tree
29ef83de 10796xref_tag_from_type (tree old, tree id, tag_scope scope)
fc378698 10797{
88e5899c 10798 enum tag_types tag_kind;
fc378698
MS
10799
10800 if (TREE_CODE (old) == RECORD_TYPE)
88e5899c 10801 tag_kind = (CLASSTYPE_DECLARED_CLASS (old) ? class_type : record_type);
fc378698 10802 else
88e5899c 10803 tag_kind = union_type;
fc378698
MS
10804
10805 if (id == NULL_TREE)
10806 id = TYPE_IDENTIFIER (old);
10807
29ef83de 10808 return xref_tag (tag_kind, id, scope, false);
fc378698
MS
10809}
10810
48b45647
NS
10811/* Create the binfo hierarchy for REF with (possibly NULL) base list
10812 BASE_LIST. For each element on BASE_LIST the TREE_PURPOSE is an
10813 access_* node, and the TREE_VALUE is the type of the base-class.
72f8fc59
LM
10814 Non-NULL TREE_TYPE indicates virtual inheritance.
10815
bd6f7848 10816 Returns true if the binfo hierarchy was successfully created,
72f8fc59 10817 false if an error was detected. */
3fd71a52 10818
72f8fc59 10819bool
dbbf88d1 10820xref_basetypes (tree ref, tree base_list)
8ccc31eb 10821{
8fbc5ae7 10822 tree *basep;
fa743e8c 10823 tree binfo, base_binfo;
03fd3f84 10824 unsigned max_vbases = 0; /* Maximum direct & indirect virtual bases. */
77880ae4 10825 unsigned max_bases = 0; /* Maximum direct bases. */
8fbc5ae7 10826 int i;
48b45647
NS
10827 tree default_access;
10828 tree igo_prev; /* Track Inheritance Graph Order. */
a5d7c4a3 10829
bef89e9e 10830 if (ref == error_mark_node)
72f8fc59 10831 return false;
bef89e9e 10832
48b45647
NS
10833 /* The base of a derived class is private by default, all others are
10834 public. */
10835 default_access = (TREE_CODE (ref) == RECORD_TYPE
10836 && CLASSTYPE_DECLARED_CLASS (ref)
10837 ? access_private_node : access_public_node);
da15dae6 10838
d6479fe7
MM
10839 /* First, make sure that any templates in base-classes are
10840 instantiated. This ensures that if we call ourselves recursively
10841 we do not get confused about which classes are marked and which
10842 are not. */
caf93cb0
EC
10843 basep = &base_list;
10844 while (*basep)
8fbc5ae7
MM
10845 {
10846 tree basetype = TREE_VALUE (*basep);
caf93cb0 10847
8fbc5ae7
MM
10848 if (!(processing_template_decl && uses_template_parms (basetype))
10849 && !complete_type_or_else (basetype, NULL))
dbbf88d1 10850 /* An incomplete type. Remove it from the list. */
8fbc5ae7
MM
10851 *basep = TREE_CHAIN (*basep);
10852 else
48b45647
NS
10853 {
10854 max_bases++;
10855 if (TREE_TYPE (*basep))
10856 max_vbases++;
10857 if (CLASS_TYPE_P (basetype))
10858 max_vbases += VEC_length (tree, CLASSTYPE_VBASECLASSES (basetype));
10859 basep = &TREE_CHAIN (*basep);
10860 }
8fbc5ae7 10861 }
d6479fe7 10862
3543e114 10863 TYPE_MARKED_P (ref) = 1;
48b45647 10864
cad7e87b
NS
10865 /* The binfo slot should be empty, unless this is an (ill-formed)
10866 redefinition. */
50bc768d
NS
10867 gcc_assert (!TYPE_BINFO (ref) || TYPE_SIZE (ref));
10868 gcc_assert (TYPE_MAIN_VARIANT (ref) == ref);
caf93cb0 10869
fa743e8c 10870 binfo = make_tree_binfo (max_bases);
caf93cb0 10871
48b45647
NS
10872 TYPE_BINFO (ref) = binfo;
10873 BINFO_OFFSET (binfo) = size_zero_node;
10874 BINFO_TYPE (binfo) = ref;
caf93cb0 10875
d0940d56
DS
10876 /* Apply base-class info set up to the variants of this type. */
10877 fixup_type_variants (ref);
10878
48b45647
NS
10879 if (max_bases)
10880 {
d4e6fecb 10881 BINFO_BASE_ACCESSES (binfo) = VEC_alloc (tree, gc, max_bases);
48b45647
NS
10882 /* An aggregate cannot have baseclasses. */
10883 CLASSTYPE_NON_AGGREGATE (ref) = 1;
caf93cb0 10884
48b45647 10885 if (TREE_CODE (ref) == UNION_TYPE)
72f8fc59
LM
10886 {
10887 error ("derived union %qT invalid", ref);
10888 return false;
10889 }
48b45647 10890 }
caf93cb0 10891
48b45647 10892 if (max_bases > 1)
dbbf88d1 10893 {
48b45647 10894 if (TYPE_FOR_JAVA (ref))
72f8fc59
LM
10895 {
10896 error ("Java class %qT cannot have multiple bases", ref);
10897 return false;
10898 }
48b45647 10899 }
caf93cb0 10900
48b45647
NS
10901 if (max_vbases)
10902 {
d4e6fecb 10903 CLASSTYPE_VBASECLASSES (ref) = VEC_alloc (tree, gc, max_vbases);
caf93cb0 10904
48b45647 10905 if (TYPE_FOR_JAVA (ref))
72f8fc59
LM
10906 {
10907 error ("Java class %qT cannot have virtual bases", ref);
10908 return false;
10909 }
48b45647 10910 }
cad7e87b 10911
48b45647
NS
10912 for (igo_prev = binfo; base_list; base_list = TREE_CHAIN (base_list))
10913 {
10914 tree access = TREE_PURPOSE (base_list);
10915 int via_virtual = TREE_TYPE (base_list) != NULL_TREE;
10916 tree basetype = TREE_VALUE (base_list);
caf93cb0 10917
48b45647
NS
10918 if (access == access_default_node)
10919 access = default_access;
caf93cb0 10920
5d80a306
DG
10921 if (PACK_EXPANSION_P (basetype))
10922 basetype = PACK_EXPANSION_PATTERN (basetype);
48b45647
NS
10923 if (TREE_CODE (basetype) == TYPE_DECL)
10924 basetype = TREE_TYPE (basetype);
76871f0f 10925 if (!MAYBE_CLASS_TYPE_P (basetype) || TREE_CODE (basetype) == UNION_TYPE)
48b45647 10926 {
2d01edd7 10927 error ("base type %qT fails to be a struct or class type",
48b45647 10928 basetype);
72f8fc59 10929 return false;
8ccc31eb 10930 }
caf93cb0 10931
48b45647
NS
10932 if (TYPE_FOR_JAVA (basetype) && (current_lang_depth () == 0))
10933 TYPE_FOR_JAVA (ref) = 1;
10934
fa743e8c 10935 base_binfo = NULL_TREE;
48b45647 10936 if (CLASS_TYPE_P (basetype) && !dependent_type_p (basetype))
dbbf88d1 10937 {
48b45647 10938 base_binfo = TYPE_BINFO (basetype);
77880ae4 10939 /* The original basetype could have been a typedef'd type. */
48b45647 10940 basetype = BINFO_TYPE (base_binfo);
caf93cb0 10941
48b45647
NS
10942 /* Inherit flags from the base. */
10943 TYPE_HAS_NEW_OPERATOR (ref)
10944 |= TYPE_HAS_NEW_OPERATOR (basetype);
10945 TYPE_HAS_ARRAY_NEW_OPERATOR (ref)
10946 |= TYPE_HAS_ARRAY_NEW_OPERATOR (basetype);
10947 TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
48b45647 10948 TYPE_HAS_CONVERSION (ref) |= TYPE_HAS_CONVERSION (basetype);
3543e114
NS
10949 CLASSTYPE_DIAMOND_SHAPED_P (ref)
10950 |= CLASSTYPE_DIAMOND_SHAPED_P (basetype);
10951 CLASSTYPE_REPEATED_BASE_P (ref)
10952 |= CLASSTYPE_REPEATED_BASE_P (basetype);
8fbc5ae7 10953 }
c8094d83 10954
98d6e9af
NS
10955 /* We must do this test after we've seen through a typedef
10956 type. */
10957 if (TYPE_MARKED_P (basetype))
10958 {
10959 if (basetype == ref)
2d01edd7 10960 error ("recursive type %qT undefined", basetype);
98d6e9af 10961 else
2d01edd7 10962 error ("duplicate base type %qT invalid", basetype);
72f8fc59 10963 return false;
98d6e9af 10964 }
5d80a306
DG
10965
10966 if (PACK_EXPANSION_P (TREE_VALUE (base_list)))
10967 /* Regenerate the pack expansion for the bases. */
10968 basetype = make_pack_expansion (basetype);
10969
98d6e9af 10970 TYPE_MARKED_P (basetype) = 1;
caf93cb0 10971
48b45647
NS
10972 base_binfo = copy_binfo (base_binfo, basetype, ref,
10973 &igo_prev, via_virtual);
10974 if (!BINFO_INHERITANCE_CHAIN (base_binfo))
10975 BINFO_INHERITANCE_CHAIN (base_binfo) = binfo;
f5c28a15 10976
fa743e8c 10977 BINFO_BASE_APPEND (binfo, base_binfo);
63d1c7b3 10978 BINFO_BASE_ACCESS_APPEND (binfo, access);
cad7e87b
NS
10979 }
10980
3543e114
NS
10981 if (VEC_space (tree, CLASSTYPE_VBASECLASSES (ref), 1))
10982 /* If we have space in the vbase vector, we must have shared at
10983 least one of them, and are therefore diamond shaped. */
10984 CLASSTYPE_DIAMOND_SHAPED_P (ref) = 1;
10985
dbbf88d1 10986 /* Unmark all the types. */
fa743e8c 10987 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
3543e114
NS
10988 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
10989 TYPE_MARKED_P (ref) = 0;
10990
10991 /* Now see if we have a repeated base type. */
10992 if (!CLASSTYPE_REPEATED_BASE_P (ref))
10993 {
10994 for (base_binfo = binfo; base_binfo;
10995 base_binfo = TREE_CHAIN (base_binfo))
10996 {
10997 if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
10998 {
10999 CLASSTYPE_REPEATED_BASE_P (ref) = 1;
11000 break;
11001 }
11002 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 1;
11003 }
11004 for (base_binfo = binfo; base_binfo;
11005 base_binfo = TREE_CHAIN (base_binfo))
11006 if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
11007 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
11008 else
11009 break;
11010 }
72f8fc59
LM
11011
11012 return true;
8ccc31eb 11013}
68642fb6 11014
8d08fdba 11015\f
8d08fdba 11016/* Begin compiling the definition of an enumeration type.
adf2edec
DG
11017 NAME is its name,
11018
11019 UNDERLYING_TYPE is the type that will be used as the storage for
11020 the enumeration type. This should be NULL_TREE if no storage type
11021 was specified.
11022
11023 SCOPED_ENUM_P is true if this is a scoped enumeration type.
11024
8d08fdba
MS
11025 Returns the type object, as yet incomplete.
11026 Also records info about it so that build_enumerator
11027 may be used to declare the individual values as they are read. */
11028
11029tree
adf2edec 11030start_enum (tree name, tree underlying_type, bool scoped_enum_p)
8d08fdba 11031{
29ef83de
KL
11032 tree enumtype;
11033
11034 gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
8d08fdba
MS
11035
11036 /* If this is the real definition for a previous forward reference,
11037 fill in the contents in the same object that used to be the
11038 forward reference. */
11039
29ef83de
KL
11040 enumtype = lookup_and_check_tag (enum_type, name,
11041 /*tag_scope=*/ts_current,
11042 /*template_header_p=*/false);
8d08fdba
MS
11043
11044 if (enumtype != NULL_TREE && TREE_CODE (enumtype) == ENUMERAL_TYPE)
30ff8252 11045 {
c5d75364
MLI
11046 error_at (input_location, "multiple definition of %q#T", enumtype);
11047 error_at (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
11048 "previous definition here");
58595203
MM
11049 /* Clear out TYPE_VALUES, and start again. */
11050 TYPE_VALUES (enumtype) = NULL_TREE;
30ff8252 11051 }
8d08fdba
MS
11052 else
11053 {
29ef83de
KL
11054 /* In case of error, make a dummy enum to allow parsing to
11055 continue. */
11056 if (enumtype == error_mark_node)
11057 name = make_anon_name ();
11058
7ecbca9d 11059 enumtype = cxx_make_type (ENUMERAL_TYPE);
bd3d082e 11060 enumtype = pushtag (name, enumtype, /*tag_scope=*/ts_current);
8d08fdba
MS
11061 }
11062
19bb3aa5
JJ
11063 if (enumtype == error_mark_node)
11064 return enumtype;
11065
adf2edec
DG
11066 if (scoped_enum_p)
11067 {
11068 SET_SCOPED_ENUM_P (enumtype, 1);
11069 begin_scope (sk_scoped_enum, enumtype);
11070
11071 /* [C++0x dcl.enum]p5:
11072
11073 If not explicitly specified, the underlying type of a scoped
11074 enumeration type is int. */
11075 if (!underlying_type)
11076 underlying_type = integer_type_node;
11077 }
11078
11079 if (underlying_type)
11080 {
11081 if (CP_INTEGRAL_TYPE_P (underlying_type))
11082 {
11083 TYPE_MIN_VALUE (enumtype) = TYPE_MIN_VALUE (underlying_type);
11084 TYPE_MAX_VALUE (enumtype) = TYPE_MAX_VALUE (underlying_type);
11085 TYPE_SIZE (enumtype) = TYPE_SIZE (underlying_type);
11086 TYPE_SIZE_UNIT (enumtype) = TYPE_SIZE_UNIT (underlying_type);
179d2f74 11087 SET_TYPE_MODE (enumtype, TYPE_MODE (underlying_type));
adf2edec
DG
11088 TYPE_PRECISION (enumtype) = TYPE_PRECISION (underlying_type);
11089 TYPE_ALIGN (enumtype) = TYPE_ALIGN (underlying_type);
11090 TYPE_USER_ALIGN (enumtype) = TYPE_USER_ALIGN (underlying_type);
11091 TYPE_UNSIGNED (enumtype) = TYPE_UNSIGNED (underlying_type);
11092 ENUM_UNDERLYING_TYPE (enumtype) = underlying_type;
11093 }
60662d5f 11094 else if (!dependent_type_p (underlying_type))
adf2edec
DG
11095 error ("underlying type %<%T%> of %<%T%> must be an integral type",
11096 underlying_type, enumtype);
11097 }
11098
8d08fdba
MS
11099 return enumtype;
11100}
11101
11102/* After processing and defining all the values of an enumeration type,
11103 install their decls in the enumeration type and finish it off.
968b956a 11104 ENUMTYPE is the type object and VALUES a list of name-value pairs. */
8d08fdba 11105
968b956a 11106void
11f6b451 11107finish_enum (tree enumtype)
8d08fdba 11108{
7b6d72fc
MM
11109 tree values;
11110 tree decl;
968b956a
MM
11111 tree minnode;
11112 tree maxnode;
adf2edec 11113 tree value;
968b956a
MM
11114 tree t;
11115 bool unsignedp;
f6af9a15 11116 bool use_short_enum;
968b956a 11117 int lowprec;
caf93cb0 11118 int highprec;
968b956a 11119 int precision;
09639a83 11120 unsigned int itk;
ad96995b 11121 tree underlying_type = NULL_TREE;
adf2edec
DG
11122 bool fixed_underlying_type_p
11123 = ENUM_UNDERLYING_TYPE (enumtype) != NULL_TREE;
968b956a
MM
11124
11125 /* We built up the VALUES in reverse order. */
11126 TYPE_VALUES (enumtype) = nreverse (TYPE_VALUES (enumtype));
11127
f5d70cc0
JM
11128 /* For an enum defined in a template, just set the type of the values;
11129 all further processing is postponed until the template is
11130 instantiated. We need to set the type so that tsubst of a CONST_DECL
11131 works. */
968b956a
MM
11132 if (processing_template_decl)
11133 {
caf93cb0
EC
11134 for (values = TYPE_VALUES (enumtype);
11135 values;
7b6d72fc
MM
11136 values = TREE_CHAIN (values))
11137 TREE_TYPE (TREE_VALUE (values)) = enumtype;
5f261ba9 11138 if (at_function_scope_p ())
968b956a 11139 add_stmt (build_min (TAG_DEFN, enumtype));
60662d5f
JM
11140 if (SCOPED_ENUM_P (enumtype))
11141 finish_scope ();
968b956a
MM
11142 return;
11143 }
11144
7b6d72fc 11145 /* Determine the minimum and maximum values of the enumerators. */
968b956a 11146 if (TYPE_VALUES (enumtype))
8d08fdba 11147 {
968b956a 11148 minnode = maxnode = NULL_TREE;
5566b478 11149
caf93cb0 11150 for (values = TYPE_VALUES (enumtype);
adf2edec
DG
11151 values;
11152 values = TREE_CHAIN (values))
11153 {
11154 decl = TREE_VALUE (values);
11155
11156 /* [dcl.enum]: Following the closing brace of an enum-specifier,
11157 each enumerator has the type of its enumeration. Prior to the
11158 closing brace, the type of each enumerator is the type of its
11159 initializing value. */
11160 TREE_TYPE (decl) = enumtype;
11161
11162 /* Update the minimum and maximum values, if appropriate. */
11163 value = DECL_INITIAL (decl);
11164 if (value == error_mark_node)
11165 value = integer_zero_node;
11166 /* Figure out what the minimum and maximum values of the
11167 enumerators are. */
11168 if (!minnode)
11169 minnode = maxnode = value;
11170 else if (tree_int_cst_lt (maxnode, value))
11171 maxnode = value;
11172 else if (tree_int_cst_lt (value, minnode))
11173 minnode = value;
11174 }
8d08fdba 11175 }
f376e137 11176 else
7b6d72fc 11177 /* [dcl.enum]
adf2edec 11178
7b6d72fc
MM
11179 If the enumerator-list is empty, the underlying type is as if
11180 the enumeration had a single enumerator with value 0. */
968b956a
MM
11181 minnode = maxnode = integer_zero_node;
11182
11183 /* Compute the number of bits require to represent all values of the
11184 enumeration. We must do this before the type of MINNODE and
cdd6a337
MLI
11185 MAXNODE are transformed, since tree_int_cst_min_precision relies
11186 on the TREE_TYPE of the value it is passed. */
968b956a 11187 unsignedp = tree_int_cst_sgn (minnode) >= 0;
cdd6a337
MLI
11188 lowprec = tree_int_cst_min_precision (minnode, unsignedp);
11189 highprec = tree_int_cst_min_precision (maxnode, unsignedp);
968b956a
MM
11190 precision = MAX (lowprec, highprec);
11191
adf2edec
DG
11192 if (!fixed_underlying_type_p)
11193 {
11194 /* Determine the underlying type of the enumeration.
7b6d72fc 11195
adf2edec 11196 [dcl.enum]
7b6d72fc 11197
adf2edec
DG
11198 The underlying type of an enumeration is an integral type that
11199 can represent all the enumerator values defined in the
11200 enumeration. It is implementation-defined which integral type is
11201 used as the underlying type for an enumeration except that the
11202 underlying type shall not be larger than int unless the value of
11203 an enumerator cannot fit in an int or unsigned int.
7b6d72fc 11204
adf2edec
DG
11205 We use "int" or an "unsigned int" as the underlying type, even if
11206 a smaller integral type would work, unless the user has
11207 explicitly requested that we use the smallest possible type. The
11208 user can request that for all enumerations with a command line
11209 flag, or for just one enumeration with an attribute. */
f6af9a15 11210
adf2edec
DG
11211 use_short_enum = flag_short_enums
11212 || lookup_attribute ("packed", TYPE_ATTRIBUTES (enumtype));
f6af9a15 11213
adf2edec
DG
11214 for (itk = (use_short_enum ? itk_char : itk_int);
11215 itk != itk_none;
11216 itk++)
11217 {
11218 underlying_type = integer_types[itk];
11219 if (TYPE_PRECISION (underlying_type) >= precision
11220 && TYPE_UNSIGNED (underlying_type) == unsignedp)
11221 break;
11222 }
11223 if (itk == itk_none)
11224 {
11225 /* DR 377
11226
11227 IF no integral type can represent all the enumerator values, the
11228 enumeration is ill-formed. */
11229 error ("no integral type can represent all of the enumerator values "
11230 "for %qT", enumtype);
11231 precision = TYPE_PRECISION (long_long_integer_type_node);
11232 underlying_type = integer_types[itk_unsigned_long_long];
11233 }
7b6d72fc 11234
adf2edec
DG
11235 /* [dcl.enum]
11236
11237 The value of sizeof() applied to an enumeration type, an object
11238 of an enumeration type, or an enumerator, is the value of sizeof()
11239 applied to the underlying type. */
11240 TYPE_SIZE (enumtype) = TYPE_SIZE (underlying_type);
11241 TYPE_SIZE_UNIT (enumtype) = TYPE_SIZE_UNIT (underlying_type);
179d2f74 11242 SET_TYPE_MODE (enumtype, TYPE_MODE (underlying_type));
adf2edec
DG
11243 TYPE_ALIGN (enumtype) = TYPE_ALIGN (underlying_type);
11244 TYPE_USER_ALIGN (enumtype) = TYPE_USER_ALIGN (underlying_type);
11245 TYPE_UNSIGNED (enumtype) = TYPE_UNSIGNED (underlying_type);
11246
11247 /* Set the underlying type of the enumeration type to the
11248 computed enumeration type, restricted to the enumerator
11249 values. */
22521c89
RG
11250 ENUM_UNDERLYING_TYPE (enumtype)
11251 = build_distinct_type_copy (underlying_type);
adf2edec
DG
11252 set_min_and_max_values_for_integral_type
11253 (ENUM_UNDERLYING_TYPE (enumtype), precision, unsignedp);
e455bc27 11254 }
adf2edec
DG
11255 else
11256 underlying_type = ENUM_UNDERLYING_TYPE (enumtype);
e455bc27 11257
39a13be5 11258 /* Compute the minimum and maximum values for the type.
8d08fdba 11259
7b6d72fc
MM
11260 [dcl.enum]
11261
11262 For an enumeration where emin is the smallest enumerator and emax
11263 is the largest, the values of the enumeration are the values of the
11264 underlying type in the range bmin to bmax, where bmin and bmax are,
11265 respectively, the smallest and largest values of the smallest bit-
11266 field that can store emin and emax. */
adf2edec 11267
d0c5c9b1
RS
11268 /* The middle-end currently assumes that types with TYPE_PRECISION
11269 narrower than their underlying type are suitably zero or sign
11270 extended to fill their mode. g++ doesn't make these guarantees.
11271 Until the middle-end can represent such paradoxical types, we
77880ae4 11272 set the TYPE_PRECISION to the width of the underlying type. */
d0c5c9b1 11273 TYPE_PRECISION (enumtype) = TYPE_PRECISION (underlying_type);
adf2edec 11274
7b6d72fc 11275 set_min_and_max_values_for_integral_type (enumtype, precision, unsignedp);
adf2edec 11276
7b6d72fc
MM
11277 /* Convert each of the enumerators to the type of the underlying
11278 type of the enumeration. */
11279 for (values = TYPE_VALUES (enumtype); values; values = TREE_CHAIN (values))
11280 {
3c955a04
MM
11281 location_t saved_location;
11282
7b6d72fc 11283 decl = TREE_VALUE (values);
3c955a04
MM
11284 saved_location = input_location;
11285 input_location = DECL_SOURCE_LOCATION (decl);
adf2edec
DG
11286 if (fixed_underlying_type_p)
11287 /* If the enumeration type has a fixed underlying type, we
11288 already checked all of the enumerator values. */
11289 value = DECL_INITIAL (decl);
11290 else
11291 value = perform_implicit_conversion (underlying_type,
11292 DECL_INITIAL (decl),
11293 tf_warning_or_error);
3c955a04 11294 input_location = saved_location;
89b0433e
NS
11295
11296 /* Do not clobber shared ints. */
11297 value = copy_node (value);
c8094d83 11298
7b6d72fc
MM
11299 TREE_TYPE (value) = enumtype;
11300 DECL_INITIAL (decl) = value;
e455bc27 11301 }
8d08fdba 11302
968b956a
MM
11303 /* Fix up all variant types of this enum type. */
11304 for (t = TYPE_MAIN_VARIANT (enumtype); t; t = TYPE_NEXT_VARIANT (t))
11305 {
11306 TYPE_VALUES (t) = TYPE_VALUES (enumtype);
11307 TYPE_MIN_VALUE (t) = TYPE_MIN_VALUE (enumtype);
11308 TYPE_MAX_VALUE (t) = TYPE_MAX_VALUE (enumtype);
11309 TYPE_SIZE (t) = TYPE_SIZE (enumtype);
11310 TYPE_SIZE_UNIT (t) = TYPE_SIZE_UNIT (enumtype);
179d2f74 11311 SET_TYPE_MODE (t, TYPE_MODE (enumtype));
968b956a
MM
11312 TYPE_PRECISION (t) = TYPE_PRECISION (enumtype);
11313 TYPE_ALIGN (t) = TYPE_ALIGN (enumtype);
11314 TYPE_USER_ALIGN (t) = TYPE_USER_ALIGN (enumtype);
8df83eae 11315 TYPE_UNSIGNED (t) = TYPE_UNSIGNED (enumtype);
adf2edec 11316 ENUM_UNDERLYING_TYPE (t) = ENUM_UNDERLYING_TYPE (enumtype);
cbf882af
MM
11317 }
11318
adf2edec
DG
11319 /* Finish up the scope of a scoped enumeration. */
11320 if (SCOPED_ENUM_P (enumtype))
11321 finish_scope ();
11322
968b956a
MM
11323 /* Finish debugging output for this type. */
11324 rest_of_type_compilation (enumtype, namespace_bindings_p ());
8d08fdba
MS
11325}
11326
079e1098 11327/* Build and install a CONST_DECL for an enumeration constant of the
58595203 11328 enumeration type ENUMTYPE whose NAME and VALUE (if any) are provided.
8d08fdba
MS
11329 Assignment of sequential values by default is handled here. */
11330
58595203 11331void
11f6b451 11332build_enumerator (tree name, tree value, tree enumtype)
8d08fdba 11333{
58595203 11334 tree decl;
e8bd800e 11335 tree context;
58595203 11336 tree type;
8d08fdba 11337
93678513
MM
11338 /* If the VALUE was erroneous, pretend it wasn't there; that will
11339 result in the enum being assigned the next value in sequence. */
11340 if (value == error_mark_node)
11341 value = NULL_TREE;
11342
8d08fdba
MS
11343 /* Remove no-op casts from the value. */
11344 if (value)
11345 STRIP_TYPE_NOPS (value);
11346
58595203
MM
11347 if (! processing_template_decl)
11348 {
11349 /* Validate and default VALUE. */
11350 if (value != NULL_TREE)
11351 {
8a784e4a 11352 value = integral_constant_value (value);
58595203
MM
11353
11354 if (TREE_CODE (value) == INTEGER_CST)
11355 {
0a72704b 11356 value = perform_integral_promotions (value);
58595203
MM
11357 constant_expression_warning (value);
11358 }
11359 else
11360 {
253e0d15 11361 error ("enumerator value for %qD is not an integer constant", name);
58595203
MM
11362 value = NULL_TREE;
11363 }
11364 }
11365
11366 /* Default based on previous value. */
6a540f3c 11367 if (value == NULL_TREE)
58595203 11368 {
58595203
MM
11369 if (TYPE_VALUES (enumtype))
11370 {
ff4eb0b5
ZW
11371 HOST_WIDE_INT hi;
11372 unsigned HOST_WIDE_INT lo;
11373 tree prev_value;
11374 bool overflowed;
11375
0f7a47dd 11376 /* The next value is the previous value plus one.
ff4eb0b5
ZW
11377 add_double doesn't know the type of the target expression,
11378 so we must check with int_fits_type_p as well. */
58595203 11379 prev_value = DECL_INITIAL (TREE_VALUE (TYPE_VALUES (enumtype)));
0f7a47dd
JJ
11380 if (error_operand_p (prev_value))
11381 value = error_mark_node;
11382 else
3c955a04 11383 {
0f7a47dd
JJ
11384 overflowed = add_double (TREE_INT_CST_LOW (prev_value),
11385 TREE_INT_CST_HIGH (prev_value),
11386 1, 0, &lo, &hi);
11387 value = build_int_cst_wide (TREE_TYPE (prev_value), lo, hi);
11388 overflowed
11389 |= !int_fits_type_p (value, TREE_TYPE (prev_value));
11390
11391 if (overflowed)
11392 {
11393 error ("overflow in enumeration values at %qD", name);
11394 value = error_mark_node;
11395 }
3c955a04 11396 }
58595203
MM
11397 }
11398 else
11399 value = integer_zero_node;
11400 }
11401
11402 /* Remove no-op casts from the value. */
f5d70cc0 11403 STRIP_TYPE_NOPS (value);
adf2edec
DG
11404
11405 /* If the underlying type of the enum is fixed, check whether
11406 the enumerator values fits in the underlying type. If it
11407 does not fit, the program is ill-formed [C++0x dcl.enum]. */
11408 if (ENUM_UNDERLYING_TYPE (enumtype)
11409 && value
11410 && TREE_CODE (value) == INTEGER_CST
11411 && !int_fits_type_p (value, ENUM_UNDERLYING_TYPE (enumtype)))
11412 {
11413 error ("enumerator value %E is too large for underlying type %<%T%>",
11414 value, ENUM_UNDERLYING_TYPE (enumtype));
11415
11416 /* Silently convert the value so that we can continue. */
11417 value = perform_implicit_conversion (ENUM_UNDERLYING_TYPE (enumtype),
11418 value, tf_none);
adf2edec 11419 }
58595203 11420 }
8d08fdba 11421
8d08fdba 11422 /* C++ associates enums with global, function, or class declarations. */
58595203
MM
11423 context = current_scope ();
11424
11425 /* Build the actual enumeration constant. Note that the enumeration
adf2edec
DG
11426 constants have the underlying type of the enum (if it is fixed)
11427 or the type of their initializer (if the underlying type of the
11428 enum is not fixed):
11429
11430 [ C++0x dcl.enum ]
11431
11432 If the underlying type is fixed, the type of each enumerator
11433 prior to the closing brace is the underlying type; if the
11434 initializing value of an enumerator cannot be represented by
11435 the underlying type, the program is ill-formed. If the
11436 underlying type is not fixed, the type of each enumerator is
11437 the type of its initializing value.
11438
11439 If the underlying type is not fixed, it will be computed by
11440 finish_enum and we will reset the type of this enumerator. Of
11441 course, if we're processing a template, there may be no value. */
58595203
MM
11442 type = value ? TREE_TYPE (value) : NULL_TREE;
11443
11444 if (context && context == current_class_type)
11445 /* This enum declaration is local to the class. We need the full
8f17b5c5 11446 lang_decl so that we can record DECL_CLASS_CONTEXT, for example. */
58595203
MM
11447 decl = build_lang_decl (CONST_DECL, name, type);
11448 else
11449 /* It's a global enum, or it's local to a function. (Note local to
e8bd800e 11450 a function could mean local to a class method. */
c2255bc4 11451 decl = build_decl (input_location, CONST_DECL, name, type);
e8bd800e 11452
58595203 11453 DECL_CONTEXT (decl) = FROB_CONTEXT (context);
6de9cd9a 11454 TREE_CONSTANT (decl) = 1;
6de9cd9a 11455 TREE_READONLY (decl) = 1;
58595203 11456 DECL_INITIAL (decl) = value;
e8bd800e 11457
60662d5f 11458 if (context && context == current_class_type && !SCOPED_ENUM_P (enumtype))
58595203 11459 /* In something like `struct S { enum E { i = 7 }; };' we put `i'
7b6d72fc
MM
11460 on the TYPE_FIELDS list for `S'. (That's so that you can say
11461 things like `S::i' later.) */
58595203
MM
11462 finish_member_declaration (decl);
11463 else
9780c24f 11464 pushdecl (decl);
58595203
MM
11465
11466 /* Add this enumeration constant to the list for this type. */
11467 TYPE_VALUES (enumtype) = tree_cons (name, decl, TYPE_VALUES (enumtype));
8d08fdba
MS
11468}
11469
adf2edec
DG
11470/* Look for an enumerator with the given NAME within the enumeration
11471 type ENUMTYPE. This routine is used primarily for qualified name
11472 lookup into an enumerator in C++0x, e.g.,
11473
11474 enum class Color { Red, Green, Blue };
11475
11476 Color color = Color::Red;
11477
11478 Returns the value corresponding to the enumerator, or
11479 NULL_TREE if no such enumerator was found. */
11480tree
11481lookup_enumerator (tree enumtype, tree name)
11482{
11483 tree e;
11484 gcc_assert (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE);
11485
11486 e = purpose_member (name, TYPE_VALUES (enumtype));
11487 return e? TREE_VALUE (e) : NULL_TREE;
11488}
11489
8d08fdba 11490\f
a8f73d4b
MM
11491/* We're defining DECL. Make sure that it's type is OK. */
11492
11493static void
11f6b451 11494check_function_type (tree decl, tree current_function_parms)
a8f73d4b
MM
11495{
11496 tree fntype = TREE_TYPE (decl);
d0f062fb 11497 tree return_type = complete_type (TREE_TYPE (fntype));
a8f73d4b
MM
11498
11499 /* In a function definition, arg types must be complete. */
11500 require_complete_types_for_parms (current_function_parms);
11501
7ecbca9d
GDR
11502 /* constexpr functions must have literal argument types and
11503 literal return type. */
11504 validate_constexpr_fundecl (decl);
11505
c9387915
GB
11506 if (dependent_type_p (return_type))
11507 return;
360f866c 11508 if (!COMPLETE_OR_VOID_TYPE_P (return_type)
9e1e64ec 11509 || (TYPE_FOR_JAVA (return_type) && MAYBE_CLASS_TYPE_P (return_type)))
a8f73d4b 11510 {
51b15ede 11511 tree args = TYPE_ARG_TYPES (fntype);
3db45ab5 11512
360f866c
JJ
11513 if (!COMPLETE_OR_VOID_TYPE_P (return_type))
11514 error ("return type %q#T is incomplete", return_type);
11515 else
11516 error ("return type has Java class type %q#T", return_type);
a8f73d4b 11517
51b15ede 11518 /* Make it return void instead. */
a8f73d4b 11519 if (TREE_CODE (fntype) == METHOD_TYPE)
51b15ede
NS
11520 fntype = build_method_type_directly (TREE_TYPE (TREE_VALUE (args)),
11521 void_type_node,
11522 TREE_CHAIN (args));
a8f73d4b 11523 else
51b15ede 11524 fntype = build_function_type (void_type_node, args);
68642fb6 11525 TREE_TYPE (decl)
a8f73d4b 11526 = build_exception_variant (fntype,
51b15ede 11527 TYPE_RAISES_EXCEPTIONS (TREE_TYPE (decl)));
a8f73d4b
MM
11528 }
11529 else
11530 abstract_virtuals_error (decl, TREE_TYPE (fntype));
11531}
11532
8d08fdba
MS
11533/* Create the FUNCTION_DECL for a function definition.
11534 DECLSPECS and DECLARATOR are the parts of the declaration;
11535 they describe the function's name and the type it returns,
11536 but twisted together in a fashion that parallels the syntax of C.
11537
a8f73d4b
MM
11538 FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
11539 DECLARATOR is really the DECL for the function we are about to
11540 process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
f444e36b 11541 indicating that the function is an inline defined in-class.
68642fb6 11542
8d08fdba
MS
11543 This function creates a binding context for the function body
11544 as well as setting up the FUNCTION_DECL in current_function_decl.
11545
8d08fdba
MS
11546 For C++, we must first check whether that datum makes any sense.
11547 For example, "class A local_a(1,2);" means that variable local_a
11548 is an aggregate of type A, which should have a constructor
72c4a4ca
GK
11549 applied to it with the argument list [1, 2].
11550
11551 On entry, DECL_INITIAL (decl1) should be NULL_TREE or error_mark_node,
11552 or may be a BLOCK if the function has been defined previously
11553 in this translation unit. On exit, DECL_INITIAL (decl1) will be
11554 error_mark_node if the function has never been defined, or
11555 a BLOCK if the function has been defined somewhere. */
8d08fdba 11556
058b15c1
MM
11557void
11558start_preparsed_function (tree decl1, tree attrs, int flags)
8d08fdba 11559{
8d08fdba
MS
11560 tree ctype = NULL_TREE;
11561 tree fntype;
11562 tree restype;
8d08fdba 11563 int doing_friend = 0;
e2500fed 11564 struct cp_binding_level *bl;
f444e36b 11565 tree current_function_parms;
3e3935a9 11566 struct c_fileinfo *finfo
c533e34d 11567 = get_fileinfo (LOCATION_FILE (DECL_SOURCE_LOCATION (decl1)));
1ef0df47 11568 bool honor_interface;
8d08fdba 11569
8d08fdba 11570 /* Sanity check. */
50bc768d
NS
11571 gcc_assert (TREE_CODE (TREE_VALUE (void_list_node)) == VOID_TYPE);
11572 gcc_assert (TREE_CHAIN (void_list_node) == NULL_TREE);
8d08fdba 11573
058b15c1
MM
11574 fntype = TREE_TYPE (decl1);
11575 if (TREE_CODE (fntype) == METHOD_TYPE)
11576 ctype = TYPE_METHOD_BASETYPE (fntype);
caf93cb0 11577
058b15c1
MM
11578 /* ISO C++ 11.4/5. A friend function defined in a class is in
11579 the (lexical) scope of the class in which it is defined. */
11580 if (!ctype && DECL_FRIEND_P (decl1))
8d08fdba 11581 {
058b15c1 11582 ctype = DECL_FRIEND_CONTEXT (decl1);
caf93cb0 11583
058b15c1
MM
11584 /* CTYPE could be null here if we're dealing with a template;
11585 for example, `inline friend float foo()' inside a template
11586 will have no CTYPE set. */
11587 if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
11588 ctype = NULL_TREE;
11589 else
11590 doing_friend = 1;
8d08fdba 11591 }
68642fb6 11592
97055d5c
AO
11593 if (DECL_DECLARED_INLINE_P (decl1)
11594 && lookup_attribute ("noinline", attrs))
dee15844 11595 warning (0, "inline function %q+D given attribute noinline", decl1);
97055d5c 11596
3a47c4e4
AO
11597 /* Handle gnu_inline attribute. */
11598 if (GNU_INLINE_P (decl1))
11599 {
11600 DECL_EXTERNAL (decl1) = 1;
11601 DECL_NOT_REALLY_EXTERN (decl1) = 0;
11602 DECL_INTERFACE_KNOWN (decl1) = 1;
12cdc4fa 11603 DECL_DISREGARD_INLINE_LIMITS (decl1) = 1;
3a47c4e4
AO
11604 }
11605
5f6eeeb3
NS
11606 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl1))
11607 /* This is a constructor, we must ensure that any default args
11608 introduced by this definition are propagated to the clones
11609 now. The clones are used directly in overload resolution. */
11610 adjust_clone_args (decl1);
11611
b35d4555
MM
11612 /* Sometimes we don't notice that a function is a static member, and
11613 build a METHOD_TYPE for it. Fix that up now. */
11614 if (ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1)
11615 && TREE_CODE (TREE_TYPE (decl1)) == METHOD_TYPE)
11616 {
3afb32a4 11617 revert_static_member_fn (decl1);
b35d4555
MM
11618 ctype = NULL_TREE;
11619 }
8d08fdba 11620
f181d4ae
MM
11621 /* Set up current_class_type, and enter the scope of the class, if
11622 appropriate. */
11623 if (ctype)
14d22dd6 11624 push_nested_class (ctype);
f181d4ae 11625 else if (DECL_STATIC_FUNCTION_P (decl1))
14d22dd6 11626 push_nested_class (DECL_CONTEXT (decl1));
f181d4ae
MM
11627
11628 /* Now that we have entered the scope of the class, we must restore
11629 the bindings for any template parameters surrounding DECL1, if it
11630 is an inline member template. (Order is important; consider the
11631 case where a template parameter has the same name as a field of
11632 the class.) It is not until after this point that
11633 PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly. */
a8f73d4b 11634 if (flags & SF_INCLASS_INLINE)
f181d4ae
MM
11635 maybe_begin_member_template_processing (decl1);
11636
56cb9733 11637 /* Effective C++ rule 15. */
9188c363 11638 if (warn_ecpp
596ea4e5 11639 && DECL_OVERLOADED_OPERATOR_P (decl1) == NOP_EXPR
9188c363 11640 && TREE_CODE (TREE_TYPE (fntype)) == VOID_TYPE)
b323323f 11641 warning (OPT_Weffc__, "%<operator=%> should return a reference to %<*this%>");
9188c363
MM
11642
11643 /* Make the init_value nonzero so pushdecl knows this is not tentative.
11644 error_mark_node is replaced below (in poplevel) with the BLOCK. */
b35d4555
MM
11645 if (!DECL_INITIAL (decl1))
11646 DECL_INITIAL (decl1) = error_mark_node;
9188c363 11647
9188c363
MM
11648 /* This function exists in static storage.
11649 (This does not mean `static' in the C sense!) */
11650 TREE_STATIC (decl1) = 1;
11651
11652 /* We must call push_template_decl after current_class_type is set
11653 up. (If we are processing inline definitions after exiting a
11654 class scope, current_class_type will be NULL_TREE until set above
11655 by push_nested_class.) */
11656 if (processing_template_decl)
11e97737
VR
11657 {
11658 /* FIXME: Handle error_mark_node more gracefully. */
11659 tree newdecl1 = push_template_decl (decl1);
11660 if (newdecl1 != error_mark_node)
0cbd7506 11661 decl1 = newdecl1;
11e97737 11662 }
9188c363 11663
f181d4ae 11664 /* We are now in the scope of the function being defined. */
8d08fdba 11665 current_function_decl = decl1;
f181d4ae 11666
5566b478
MS
11667 /* Save the parm names or decls from this function's declarator
11668 where store_parm_decls will find them. */
4546865e 11669 current_function_parms = DECL_ARGUMENTS (decl1);
8d08fdba 11670
a8f73d4b
MM
11671 /* Make sure the parameter and return types are reasonable. When
11672 you declare a function, these types can be incomplete, but they
11673 must be complete when you define the function. */
c9387915 11674 check_function_type (decl1, current_function_parms);
f181d4ae 11675
a8f73d4b
MM
11676 /* Build the return declaration for the function. */
11677 restype = TREE_TYPE (fntype);
e89a6075 11678 if (DECL_RESULT (decl1) == NULL_TREE)
a8f73d4b 11679 {
b785f485
RH
11680 tree resdecl;
11681
c2255bc4 11682 resdecl = build_decl (input_location, RESULT_DECL, 0, restype);
b785f485
RH
11683 DECL_ARTIFICIAL (resdecl) = 1;
11684 DECL_IGNORED_P (resdecl) = 1;
11685 DECL_RESULT (decl1) = resdecl;
11686
9804209d 11687 cp_apply_type_quals_to_decl (cp_type_quals (restype), resdecl);
5566b478 11688 }
a8f73d4b 11689
a8f73d4b 11690 /* Let the user know we're compiling this function. */
ea11ca7e 11691 announce_function (decl1);
b7484fbe 11692
878cd289
MS
11693 /* Record the decl so that the function name is defined.
11694 If we already have a decl for this name, and it is a FUNCTION_DECL,
11695 use the old decl. */
a8f73d4b 11696 if (!processing_template_decl && !(flags & SF_PRE_PARSED))
878cd289 11697 {
75650646 11698 /* A specialization is not used to guide overload resolution. */
18f5be99 11699 if (!DECL_FUNCTION_MEMBER_P (decl1)
caf93cb0 11700 && !(DECL_USE_TEMPLATE (decl1) &&
18f5be99 11701 PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl1))))
b1a19c7c
MM
11702 {
11703 tree olddecl = pushdecl (decl1);
11704
11705 if (olddecl == error_mark_node)
11706 /* If something went wrong when registering the declaration,
11707 use DECL1; we have to have a FUNCTION_DECL to use when
11708 parsing the body of the function. */
11709 ;
11710 else
dfdec7a7
ILT
11711 {
11712 /* Otherwise, OLDDECL is either a previous declaration
11713 of the same function or DECL1 itself. */
11714
11715 if (warn_missing_declarations
11716 && olddecl == decl1
11717 && !DECL_MAIN_P (decl1)
11718 && TREE_PUBLIC (decl1)
11719 && !DECL_DECLARED_INLINE_P (decl1))
11720 {
11721 tree context;
11722
11723 /* Check whether DECL1 is in an anonymous
11724 namespace. */
11725 for (context = DECL_CONTEXT (decl1);
11726 context;
11727 context = DECL_CONTEXT (context))
11728 {
11729 if (TREE_CODE (context) == NAMESPACE_DECL
11730 && DECL_NAME (context) == NULL_TREE)
11731 break;
11732 }
11733
11734 if (context == NULL)
11735 warning (OPT_Wmissing_declarations,
11736 "no previous declaration for %q+D", decl1);
11737 }
11738
11739 decl1 = olddecl;
11740 }
b1a19c7c 11741 }
2c73f9f5 11742 else
b7698cf0 11743 {
a1c65f9f 11744 /* We need to set the DECL_CONTEXT. */
b7698cf0
JM
11745 if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
11746 DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
b7698cf0 11747 }
878cd289 11748 fntype = TREE_TYPE (decl1);
2ef06beb
MM
11749
11750 /* If #pragma weak applies, mark the decl appropriately now.
11751 The pragma only applies to global functions. Because
11752 determining whether or not the #pragma applies involves
11753 computing the mangled name for the declaration, we cannot
11754 apply the pragma until after we have merged this declaration
11755 with any previous declarations; if the original declaration
11756 has a linkage specification, that specification applies to
11757 the definition as well, and may affect the mangled name. */
11758 if (!DECL_CONTEXT (decl1))
11759 maybe_apply_pragma_weak (decl1);
878cd289 11760 }
5566b478 11761
72c4a4ca 11762 /* Reset this in case the call to pushdecl changed it. */
5566b478 11763 current_function_decl = decl1;
72c4a4ca
GK
11764
11765 gcc_assert (DECL_INITIAL (decl1));
11766
11767 /* This function may already have been parsed, in which case just
11768 return; our caller will skip over the body without parsing. */
11769 if (DECL_INITIAL (decl1) != error_mark_node)
11770 return;
11771
11772 /* Initialize RTL machinery. We cannot do this until
11773 CURRENT_FUNCTION_DECL and DECL_RESULT are set up. We do this
11774 even when processing a template; this is how we get
11775 CFUN set up, and our per-function variables initialized.
11776 FIXME factor out the non-RTL stuff. */
11777 bl = current_binding_level;
182e0d71 11778 allocate_struct_function (decl1, processing_template_decl);
e8924938
PB
11779
11780 /* Initialize the language data structures. Whenever we start
11781 a new function, we destroy temporaries in the usual way. */
11782 cfun->language = GGC_CNEW (struct language_function);
11783 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
72c4a4ca
GK
11784 current_binding_level = bl;
11785
11786 /* Even though we're inside a function body, we still don't want to
11787 call expand_expr to calculate the size of a variable-sized array.
11788 We haven't necessarily assigned RTL to all variables yet, so it's
11789 not safe to try to expand expressions involving them. */
e3b5732b 11790 cfun->dont_save_pending_sizes_p = 1;
72c4a4ca
GK
11791
11792 /* Start the statement-tree, start the tree now. */
11793 DECL_SAVED_TREE (decl1) = push_stmt_list ();
878cd289 11794
78c120b5
MM
11795 /* If we are (erroneously) defining a function that we have already
11796 defined before, wipe out what we knew before. */
e2500fed
GK
11797 if (!DECL_PENDING_INLINE_P (decl1))
11798 DECL_SAVED_FUNCTION_DATA (decl1) = NULL;
b35d4555 11799
f444e36b 11800 if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1))
b35d4555
MM
11801 {
11802 /* We know that this was set up by `grokclassfn'. We do not
11803 wait until `store_parm_decls', since evil parse errors may
11804 never get us to that point. Here we keep the consistency
11805 between `current_class_type' and `current_class_ptr'. */
11806 tree t = DECL_ARGUMENTS (decl1);
68642fb6 11807
50bc768d
NS
11808 gcc_assert (t != NULL_TREE && TREE_CODE (t) == PARM_DECL);
11809 gcc_assert (TREE_CODE (TREE_TYPE (t)) == POINTER_TYPE);
68642fb6
UD
11810
11811 cp_function_chain->x_current_class_ref
5ade1ed2 11812 = cp_build_indirect_ref (t, NULL, tf_warning_or_error);
b35d4555
MM
11813 cp_function_chain->x_current_class_ptr = t;
11814
018fc244
MM
11815 /* Constructors and destructors need to know whether they're "in
11816 charge" of initializing virtual base classes. */
e0fff4b3 11817 t = TREE_CHAIN (t);
454fa7a7 11818 if (DECL_HAS_IN_CHARGE_PARM_P (decl1))
e0fff4b3
JM
11819 {
11820 current_in_charge_parm = t;
11821 t = TREE_CHAIN (t);
11822 }
11823 if (DECL_HAS_VTT_PARM_P (decl1))
11824 {
8dc2b103 11825 gcc_assert (DECL_NAME (t) == vtt_parm_identifier);
e0fff4b3
JM
11826 current_vtt_parm = t;
11827 }
b35d4555
MM
11828 }
11829
1ef0df47
MM
11830 honor_interface = (!DECL_TEMPLATE_INSTANTIATION (decl1)
11831 /* Implicitly-defined methods (like the
11832 destructor for a class in which no destructor
11833 is explicitly declared) must not be defined
11834 until their definition is needed. So, we
11835 ignore interface specifications for
11836 compiler-generated functions. */
11837 && !DECL_ARTIFICIAL (decl1));
3db45ab5 11838
db5ae43f 11839 if (DECL_INTERFACE_KNOWN (decl1))
faae18ab 11840 {
4f1c5b7d 11841 tree ctx = decl_function_context (decl1);
86052cc3 11842
faae18ab
MS
11843 if (DECL_NOT_REALLY_EXTERN (decl1))
11844 DECL_EXTERNAL (decl1) = 0;
86052cc3 11845
79065db2 11846 if (ctx != NULL_TREE && DECL_DECLARED_INLINE_P (ctx)
86052cc3
JM
11847 && TREE_PUBLIC (ctx))
11848 /* This is a function in a local class in an extern inline
11849 function. */
11850 comdat_linkage (decl1);
faae18ab 11851 }
8d08fdba
MS
11852 /* If this function belongs to an interface, it is public.
11853 If it belongs to someone else's interface, it is also external.
1f901793 11854 This only affects inlines and template instantiations. */
1ef0df47 11855 else if (!finfo->interface_unknown && honor_interface)
8d08fdba 11856 {
caf93cb0 11857 if (DECL_DECLARED_INLINE_P (decl1)
79065db2 11858 || DECL_TEMPLATE_INSTANTIATION (decl1)
5156628f 11859 || processing_template_decl)
1f901793
JM
11860 {
11861 DECL_EXTERNAL (decl1)
5d709b00 11862 = (finfo->interface_only
caf93cb0 11863 || (DECL_DECLARED_INLINE_P (decl1)
79065db2 11864 && ! flag_implement_inlines
9c73ec84 11865 && !DECL_VINDEX (decl1)));
1f901793
JM
11866
11867 /* For WIN32 we also want to put these in linkonce sections. */
11868 maybe_make_one_only (decl1);
11869 }
db5ae43f 11870 else
893de33c 11871 DECL_EXTERNAL (decl1) = 0;
db5ae43f 11872 DECL_INTERFACE_KNOWN (decl1) = 1;
4684cd27 11873 /* If this function is in an interface implemented in this file,
3b426391 11874 make sure that the back end knows to emit this function
4684cd27
MM
11875 here. */
11876 if (!DECL_EXTERNAL (decl1))
11877 mark_needed (decl1);
8d08fdba 11878 }
5d709b00 11879 else if (finfo->interface_unknown && finfo->interface_only
1ef0df47 11880 && honor_interface)
c16c47fb
JM
11881 {
11882 /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
5d709b00
ZW
11883 interface, we will have both finfo->interface_unknown and
11884 finfo->interface_only set. In that case, we don't want to
11885 use the normal heuristics because someone will supply a
11886 #pragma implementation elsewhere, and deducing it here would
11887 produce a conflict. */
c16c47fb
JM
11888 comdat_linkage (decl1);
11889 DECL_EXTERNAL (decl1) = 0;
11890 DECL_INTERFACE_KNOWN (decl1) = 1;
11891 DECL_DEFER_OUTPUT (decl1) = 1;
11892 }
8d08fdba 11893 else
a0a33927
MS
11894 {
11895 /* This is a definition, not a reference.
3a47c4e4
AO
11896 So clear DECL_EXTERNAL, unless this is a GNU extern inline. */
11897 if (!GNU_INLINE_P (decl1))
11898 DECL_EXTERNAL (decl1) = 0;
faae18ab 11899
caf93cb0 11900 if ((DECL_DECLARED_INLINE_P (decl1)
79065db2 11901 || DECL_TEMPLATE_INSTANTIATION (decl1))
5566b478
MS
11902 && ! DECL_INTERFACE_KNOWN (decl1)
11903 /* Don't try to defer nested functions for now. */
4f1c5b7d 11904 && ! decl_function_context (decl1))
878cd289
MS
11905 DECL_DEFER_OUTPUT (decl1) = 1;
11906 else
893de33c 11907 DECL_INTERFACE_KNOWN (decl1) = 1;
db5ae43f 11908 }
a9aedbc2 11909
0ed5edac
JM
11910 /* Determine the ELF visibility attribute for the function. We must not
11911 do this before calling "pushdecl", as we must allow "duplicate_decls"
11912 to merge any attributes appropriately. We also need to wait until
11913 linkage is set. */
11914 if (!DECL_CLONED_FUNCTION_P (decl1))
11915 determine_visibility (decl1);
11916
ac20c67a 11917 begin_scope (sk_function_parms, decl1);
8d08fdba 11918
5566b478
MS
11919 ++function_depth;
11920
44d10c10
PB
11921 if (DECL_DESTRUCTOR_P (decl1)
11922 || (DECL_CONSTRUCTOR_P (decl1)
11923 && targetm.cxx.cdtor_returns_this ()))
46e8c075 11924 {
c2255bc4
AH
11925 cdtor_label = build_decl (input_location,
11926 LABEL_DECL, NULL_TREE, NULL_TREE);
44d10c10 11927 DECL_CONTEXT (cdtor_label) = current_function_decl;
46e8c075 11928 }
8d08fdba 11929
0ba8a114 11930 start_fname_decls ();
caf93cb0 11931
f444e36b 11932 store_parm_decls (current_function_parms);
058b15c1
MM
11933}
11934
11935
11936/* Like start_preparsed_function, except that instead of a
11937 FUNCTION_DECL, this function takes DECLSPECS and DECLARATOR.
11938
11939 Returns 1 on success. If the DECLARATOR is not suitable for a function
11940 (it defines a datum instead), we return 0, which tells
11941 yyparse to report a parse error. */
11942
11943int
caf93cb0 11944start_function (cp_decl_specifier_seq *declspecs,
62d1db17 11945 const cp_declarator *declarator,
058b15c1
MM
11946 tree attrs)
11947{
11948 tree decl1;
11949
058b15c1 11950 decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, &attrs);
49f098f2
JJ
11951 if (decl1 == error_mark_node)
11952 return 0;
058b15c1
MM
11953 /* If the declarator is not suitable for a function definition,
11954 cause a syntax error. */
11955 if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL)
49f098f2
JJ
11956 {
11957 error ("invalid function declaration");
11958 return 0;
11959 }
caf93cb0 11960
058b15c1 11961 if (DECL_MAIN_P (decl1))
2cfe82fe
ZW
11962 /* main must return int. grokfndecl should have corrected it
11963 (and issued a diagnostic) if the user got it wrong. */
11964 gcc_assert (same_type_p (TREE_TYPE (TREE_TYPE (decl1)),
11965 integer_type_node));
058b15c1
MM
11966
11967 start_preparsed_function (decl1, attrs, /*flags=*/SF_DEFAULT);
f444e36b 11968
8d08fdba
MS
11969 return 1;
11970}
11971\f
68d04c67
MM
11972/* Returns true iff an EH_SPEC_BLOCK should be created in the body of
11973 FN. */
11974
11975static bool
11976use_eh_spec_block (tree fn)
11977{
11978 return (flag_exceptions && flag_enforce_eh_specs
11979 && !processing_template_decl
11980 && TYPE_RAISES_EXCEPTIONS (TREE_TYPE (fn))
11981 /* We insert the EH_SPEC_BLOCK only in the original
11982 function; then, it is copied automatically to the
11983 clones. */
11984 && !DECL_CLONED_FUNCTION_P (fn)
11985 /* Implicitly-generated constructors and destructors have
11986 exception specifications. However, those specifications
11987 are the union of the possible exceptions specified by the
11988 constructors/destructors for bases and members, so no
11989 unallowed exception will ever reach this function. By
11990 not creating the EH_SPEC_BLOCK we save a little memory,
11991 and we avoid spurious warnings about unreachable
11992 code. */
11993 && !DECL_ARTIFICIAL (fn));
11994}
11995
8d08fdba
MS
11996/* Store the parameter declarations into the current function declaration.
11997 This is called after parsing the parameter declarations, before
11998 digesting the body of the function.
11999
12000 Also install to binding contour return value identifier, if any. */
12001
f444e36b 12002static void
11f6b451 12003store_parm_decls (tree current_function_parms)
8d08fdba 12004{
926ce8bd
KH
12005 tree fndecl = current_function_decl;
12006 tree parm;
8d08fdba 12007
8d08fdba
MS
12008 /* This is a chain of any other decls that came in among the parm
12009 declarations. If a parm is declared with enum {foo, bar} x;
12010 then CONST_DECLs for foo and bar are put here. */
12011 tree nonparms = NULL_TREE;
12012
b35d4555 12013 if (current_function_parms)
8d08fdba
MS
12014 {
12015 /* This case is when the function was defined with an ANSI prototype.
12016 The parms already have decls, so we need not do anything here
12017 except record them as in effect
12018 and complain if any redundant old-style parm decls were written. */
12019
b35d4555
MM
12020 tree specparms = current_function_parms;
12021 tree next;
12022
f444e36b 12023 /* Must clear this because it might contain TYPE_DECLs declared
b35d4555 12024 at class level. */
00e8de68 12025 current_binding_level->names = NULL;
8d08fdba 12026
f444e36b 12027 /* If we're doing semantic analysis, then we'll call pushdecl
b35d4555
MM
12028 for each of these. We must do them in reverse order so that
12029 they end in the correct forward order. */
f444e36b 12030 specparms = nreverse (specparms);
5566b478 12031
b35d4555 12032 for (parm = specparms; parm; parm = next)
8d08fdba
MS
12033 {
12034 next = TREE_CHAIN (parm);
12035 if (TREE_CODE (parm) == PARM_DECL)
12036 {
f444e36b
MM
12037 if (DECL_NAME (parm) == NULL_TREE
12038 || TREE_CODE (parm) != VOID_TYPE)
12039 pushdecl (parm);
12040 else
2d01edd7 12041 error ("parameter %qD declared void", parm);
8d08fdba
MS
12042 }
12043 else
12044 {
12045 /* If we find an enum constant or a type tag,
12046 put it aside for the moment. */
12047 TREE_CHAIN (parm) = NULL_TREE;
12048 nonparms = chainon (nonparms, parm);
12049 }
12050 }
12051
f444e36b
MM
12052 /* Get the decls in their original chain order and record in the
12053 function. This is all and only the PARM_DECLs that were
12054 pushed into scope by the loop above. */
12055 DECL_ARGUMENTS (fndecl) = getdecls ();
8d08fdba
MS
12056 }
12057 else
12058 DECL_ARGUMENTS (fndecl) = NULL_TREE;
12059
12060 /* Now store the final chain of decls for the arguments
12061 as the decl-chain of the current lexical scope.
12062 Put the enumerators in as well, at the front so that
12063 DECL_ARGUMENTS is not modified. */
00e8de68 12064 current_binding_level->names = chainon (nonparms, DECL_ARGUMENTS (fndecl));
eb448459 12065
68d04c67
MM
12066 if (use_eh_spec_block (current_function_decl))
12067 current_eh_spec_block = begin_eh_spec_block ();
8d08fdba
MS
12068}
12069
8d08fdba 12070\f
59026e79
MM
12071/* We have finished doing semantic analysis on DECL, but have not yet
12072 generated RTL for its body. Save away our current state, so that
12073 when we want to generate RTL later we know what to do. */
12074
12075static void
11f6b451 12076save_function_data (tree decl)
59026e79 12077{
e2500fed 12078 struct language_function *f;
59026e79
MM
12079
12080 /* Save the language-specific per-function data so that we can
12081 get it back when we really expand this function. */
50bc768d 12082 gcc_assert (!DECL_PENDING_INLINE_P (decl));
68642fb6 12083
59026e79 12084 /* Make a copy. */
99dd239f 12085 f = GGC_NEW (struct language_function);
e2500fed 12086 memcpy (f, cp_function_chain, sizeof (struct language_function));
59026e79
MM
12087 DECL_SAVED_FUNCTION_DATA (decl) = f;
12088
12089 /* Clear out the bits we don't need. */
325c3691 12090 f->base.x_stmt_tree.x_cur_stmt_list = NULL_TREE;
59026e79 12091 f->bindings = NULL;
8e4ce833 12092 f->x_local_names = NULL;
59026e79
MM
12093}
12094
cdd2559c 12095
44d10c10 12096/* Set the return value of the constructor (if present). */
efee38a9
MM
12097
12098static void
11f6b451 12099finish_constructor_body (void)
efee38a9 12100{
44d10c10
PB
12101 tree val;
12102 tree exprstmt;
12103
298b7d2b
AH
12104 if (targetm.cxx.cdtor_returns_this ()
12105 && (! TYPE_FOR_JAVA (current_class_type)))
44d10c10
PB
12106 {
12107 /* Any return from a constructor will end up here. */
c2255bc4 12108 add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
44d10c10
PB
12109
12110 val = DECL_ARGUMENTS (current_function_decl);
f293ce4b
RS
12111 val = build2 (MODIFY_EXPR, TREE_TYPE (val),
12112 DECL_RESULT (current_function_decl), val);
44d10c10 12113 /* Return the address of the object. */
c2255bc4 12114 exprstmt = build_stmt (input_location, RETURN_EXPR, val);
44d10c10
PB
12115 add_stmt (exprstmt);
12116 }
efee38a9
MM
12117}
12118
cdd2559c
JM
12119/* Do all the processing for the beginning of a destructor; set up the
12120 vtable pointers and cleanups for bases and members. */
12121
12122static void
11f6b451 12123begin_destructor_body (void)
cdd2559c 12124{
cdd2559c
JM
12125 tree compound_stmt;
12126
0e686aa6
MM
12127 /* If the CURRENT_CLASS_TYPE is incomplete, we will have already
12128 issued an error message. We still want to try to process the
12129 body of the function, but initialize_vtbl_ptrs will crash if
12130 TYPE_BINFO is NULL. */
12131 if (COMPLETE_TYPE_P (current_class_type))
12132 {
12133 compound_stmt = begin_compound_stmt (0);
12134 /* Make all virtual function table pointers in non-virtual base
12135 classes point to CURRENT_CLASS_TYPE's virtual function
12136 tables. */
12137 initialize_vtbl_ptrs (current_class_ptr);
12138 finish_compound_stmt (compound_stmt);
3db45ab5 12139
0e686aa6
MM
12140 /* And insert cleanups for our bases and members so that they
12141 will be properly destroyed if we throw. */
12142 push_base_cleanups ();
12143 }
cdd2559c
JM
12144}
12145
ade3dc07
JM
12146/* At the end of every destructor we generate code to delete the object if
12147 necessary. Do that now. */
9bfadf57
MM
12148
12149static void
11f6b451 12150finish_destructor_body (void)
9bfadf57 12151{
9bfadf57
MM
12152 tree exprstmt;
12153
5633b37c
MM
12154 /* Any return from a destructor will end up here; that way all base
12155 and member cleanups will be run when the function returns. */
c2255bc4 12156 add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
5633b37c 12157
52682a1b
MM
12158 /* In a virtual destructor, we must call delete. */
12159 if (DECL_VIRTUAL_P (current_function_decl))
12160 {
12161 tree if_stmt;
fa72b064 12162 tree virtual_size = cxx_sizeof (current_class_type);
68642fb6 12163
52682a1b 12164 /* [class.dtor]
68642fb6 12165
ade3dc07
JM
12166 At the point of definition of a virtual destructor (including
12167 an implicit definition), non-placement operator delete shall
12168 be looked up in the scope of the destructor's class and if
12169 found shall be accessible and unambiguous. */
3db45ab5 12170 exprstmt = build_op_delete_call(DELETE_EXPR, current_class_ptr,
63c9a190 12171 virtual_size,
3db45ab5
MS
12172 /*global_p=*/false,
12173 /*placement=*/NULL_TREE,
63c9a190 12174 /*alloc_fn=*/NULL_TREE);
298d6f60 12175
52682a1b 12176 if_stmt = begin_if_stmt ();
f293ce4b
RS
12177 finish_if_stmt_cond (build2 (BIT_AND_EXPR, integer_type_node,
12178 current_in_charge_parm,
12179 integer_one_node),
52682a1b
MM
12180 if_stmt);
12181 finish_expr_stmt (exprstmt);
12182 finish_then_clause (if_stmt);
325c3691 12183 finish_if_stmt (if_stmt);
52682a1b 12184 }
44d10c10
PB
12185
12186 if (targetm.cxx.cdtor_returns_this ())
12187 {
12188 tree val;
12189
12190 val = DECL_ARGUMENTS (current_function_decl);
f293ce4b
RS
12191 val = build2 (MODIFY_EXPR, TREE_TYPE (val),
12192 DECL_RESULT (current_function_decl), val);
44d10c10 12193 /* Return the address of the object. */
c2255bc4 12194 exprstmt = build_stmt (input_location, RETURN_EXPR, val);
44d10c10
PB
12195 add_stmt (exprstmt);
12196 }
ade3dc07 12197}
9bfadf57 12198
ade3dc07
JM
12199/* Do the necessary processing for the beginning of a function body, which
12200 in this case includes member-initializers, but not the catch clauses of
12201 a function-try-block. Currently, this means opening a binding level
86ad3aa9 12202 for the member-initializers (in a ctor) and member cleanups (in a dtor). */
ade3dc07
JM
12203
12204tree
11f6b451 12205begin_function_body (void)
ade3dc07 12206{
cdd2559c
JM
12207 tree stmt;
12208
86ad3aa9
JM
12209 if (! FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
12210 return NULL_TREE;
12211
b5856475
JM
12212 if (processing_template_decl)
12213 /* Do nothing now. */;
12214 else
12215 /* Always keep the BLOCK node associated with the outermost pair of
12216 curly braces of a function. These are needed for correct
12217 operation of dwarfout.c. */
ac20c67a 12218 keep_next_level (true);
b5856475 12219
325c3691 12220 stmt = begin_compound_stmt (BCS_FN_BODY);
cdd2559c
JM
12221
12222 if (processing_template_decl)
12223 /* Do nothing now. */;
cdd2559c
JM
12224 else if (DECL_DESTRUCTOR_P (current_function_decl))
12225 begin_destructor_body ();
12226
ade3dc07 12227 return stmt;
9bfadf57
MM
12228}
12229
ade3dc07
JM
12230/* Do the processing for the end of a function body. Currently, this means
12231 closing out the cleanups for fully-constructed bases and members, and in
12232 the case of the destructor, deleting the object if desired. Again, this
12233 is only meaningful for [cd]tors, since they are the only functions where
12234 there is a significant distinction between the main body and any
12235 function catch clauses. Handling, say, main() return semantics here
12236 would be wrong, as flowing off the end of a function catch clause for
12237 main() would also need to return 0. */
12238
12239void
11f6b451 12240finish_function_body (tree compstmt)
ade3dc07 12241{
86ad3aa9
JM
12242 if (compstmt == NULL_TREE)
12243 return;
3db45ab5 12244
5633b37c 12245 /* Close the block. */
7a3397c7 12246 finish_compound_stmt (compstmt);
ade3dc07
JM
12247
12248 if (processing_template_decl)
12249 /* Do nothing now. */;
12250 else if (DECL_CONSTRUCTOR_P (current_function_decl))
12251 finish_constructor_body ();
12252 else if (DECL_DESTRUCTOR_P (current_function_decl))
12253 finish_destructor_body ();
caf93cb0 12254}
ade3dc07 12255
86ad3aa9
JM
12256/* Given a function, returns the BLOCK corresponding to the outermost level
12257 of curly braces, skipping the artificial block created for constructor
12258 initializers. */
12259
a68ab351 12260tree
86ad3aa9
JM
12261outer_curly_brace_block (tree fndecl)
12262{
12263 tree block = BLOCK_SUBBLOCKS (DECL_INITIAL (fndecl));
12264 if (FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
12265 /* Skip the artificial function body block. */
12266 block = BLOCK_SUBBLOCKS (block);
12267 return block;
12268}
12269
8d08fdba
MS
12270/* Finish up a function declaration and compile that function
12271 all the way to assembler language output. The free the storage
12272 for the function definition.
12273
68642fb6 12274 FLAGS is a bitwise or of the following values:
f181d4ae
MM
12275 2 - INCLASS_INLINE
12276 We just finished processing the body of an in-class inline
12277 function definition. (This processing will have taken place
87e3dbc9 12278 after the class definition is complete.) */
8d08fdba 12279
4d6abc1c 12280tree
11f6b451 12281finish_function (int flags)
8d08fdba 12282{
926ce8bd 12283 tree fndecl = current_function_decl;
8d08fdba 12284 tree fntype, ctype = NULL_TREE;
f181d4ae 12285 int inclass_inline = (flags & 2) != 0;
87e3dbc9 12286 int nested;
8d08fdba
MS
12287
12288 /* When we get some parse errors, we can end up without a
12289 current_function_decl, so cope. */
12290 if (fndecl == NULL_TREE)
4d6abc1c 12291 return error_mark_node;
8d08fdba 12292
3368cdd3
JJ
12293 gcc_assert (!defer_mark_used_calls);
12294 defer_mark_used_calls = true;
12295
9aad8f83
MA
12296 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fndecl)
12297 && DECL_VIRTUAL_P (fndecl)
12298 && !processing_template_decl)
12299 {
12300 tree fnclass = DECL_CONTEXT (fndecl);
12301 if (fndecl == CLASSTYPE_KEY_METHOD (fnclass))
12302 keyed_classes = tree_cons (NULL_TREE, fnclass, keyed_classes);
12303 }
12304
87e3dbc9 12305 nested = function_depth > 1;
8d08fdba
MS
12306 fntype = TREE_TYPE (fndecl);
12307
9bfadf57
MM
12308 /* TREE_READONLY (fndecl) = 1;
12309 This caused &foo to be of type ptr-to-const-function
12310 which then got a warning when stored in a ptr-to-function variable. */
8d08fdba 12311
50bc768d 12312 gcc_assert (building_stmt_tree ());
72c4a4ca
GK
12313 /* The current function is being defined, so its DECL_INITIAL should
12314 be set, and unless there's a multiple definition, it should be
12315 error_mark_node. */
12316 gcc_assert (DECL_INITIAL (fndecl) == error_mark_node);
caf93cb0 12317
db9b2174
MM
12318 /* For a cloned function, we've already got all the code we need;
12319 there's no need to add any extra bits. */
f444e36b 12320 if (!DECL_CLONED_FUNCTION_P (fndecl))
8d08fdba 12321 {
ade3dc07 12322 if (DECL_MAIN_P (current_function_decl))
efee38a9 12323 {
43e05e45
SB
12324 tree stmt;
12325
12326 /* Make it so that `main' always returns 0 by default (or
12327 1 for VMS). */
08c7ae5a 12328#if VMS_TARGET
43e05e45 12329 stmt = finish_return_stmt (integer_one_node);
efee38a9 12330#else
43e05e45 12331 stmt = finish_return_stmt (integer_zero_node);
efee38a9 12332#endif
43e05e45
SB
12333 /* Hack. We don't want the middle-end to warn that this
12334 return is unreachable, so put the statement on the
12335 special line 0. */
5ffeb913
TT
12336 {
12337 location_t linezero = linemap_line_start (line_table, 0, 1);
12338 SET_EXPR_LOCATION (stmt, linezero);
12339 }
efee38a9 12340 }
87e3dbc9 12341
68d04c67 12342 if (use_eh_spec_block (current_function_decl))
52a11cbf
RH
12343 finish_eh_spec_block (TYPE_RAISES_EXCEPTIONS
12344 (TREE_TYPE (current_function_decl)),
12345 current_eh_spec_block);
5566b478 12346 }
68642fb6 12347
558475f0 12348 /* If we're saving up tree structure, tie off the function now. */
325c3691
RH
12349 DECL_SAVED_TREE (fndecl) = pop_stmt_list (DECL_SAVED_TREE (fndecl));
12350
12351 finish_fname_decls ();
8d2733ca 12352
b2dd096b
MM
12353 /* If this function can't throw any exceptions, remember that. */
12354 if (!processing_template_decl
12355 && !cp_function_chain->can_throw
be0436d7 12356 && !flag_non_call_exceptions
56fd65c7 12357 && !DECL_REPLACEABLE_P (fndecl))
b2dd096b
MM
12358 TREE_NOTHROW (fndecl) = 1;
12359
8d08fdba
MS
12360 /* This must come after expand_function_end because cleanups might
12361 have declarations (from inline functions) that need to go into
12362 this function's blocks. */
caf93cb0 12363
7437519c
ZW
12364 /* If the current binding level isn't the outermost binding level
12365 for this function, either there is a bug, or we have experienced
12366 syntax errors and the statement tree is malformed. */
a7e8c268 12367 if (current_binding_level->kind != sk_function_parms)
7437519c
ZW
12368 {
12369 /* Make sure we have already experienced errors. */
8dc2b103 12370 gcc_assert (errorcount);
7437519c
ZW
12371
12372 /* Throw away the broken statement tree and extra binding
0cbd7506 12373 levels. */
5882f0f3 12374 DECL_SAVED_TREE (fndecl) = alloc_stmt_list ();
7437519c 12375
a7e8c268 12376 while (current_binding_level->kind != sk_function_parms)
7437519c 12377 {
a7e8c268 12378 if (current_binding_level->kind == sk_class)
7437519c
ZW
12379 pop_nested_class ();
12380 else
12381 poplevel (0, 0, 0);
12382 }
12383 }
f444e36b 12384 poplevel (1, 0, 1);
8d08fdba 12385
4985cde3
RH
12386 /* Statements should always be full-expressions at the outermost set
12387 of curly braces for a function. */
50bc768d 12388 gcc_assert (stmts_are_full_exprs_p ());
4985cde3 12389
6de9cd9a 12390 /* Set up the named return value optimization, if we can. Candidate
59fe9274 12391 variables are selected in check_return_expr. */
07b2f2fd
JM
12392 if (current_function_return_value)
12393 {
12394 tree r = current_function_return_value;
35e939ae
JM
12395 tree outer;
12396
07b2f2fd 12397 if (r != error_mark_node
35e939ae
JM
12398 /* This is only worth doing for fns that return in memory--and
12399 simpler, since we don't have to worry about promoted modes. */
61f71b34 12400 && aggregate_value_p (TREE_TYPE (TREE_TYPE (fndecl)), fndecl)
35e939ae
JM
12401 /* Only allow this for variables declared in the outer scope of
12402 the function so we know that their lifetime always ends with a
12403 return; see g++.dg/opt/nrv6.C. We could be more flexible if
12404 we were to do this optimization in tree-ssa. */
86ad3aa9 12405 && (outer = outer_curly_brace_block (fndecl))
325c3691 12406 && chain_member (r, BLOCK_VARS (outer)))
6de9cd9a
DN
12407 finalize_nrv (&DECL_SAVED_TREE (fndecl), r, DECL_RESULT (fndecl));
12408
12409 current_function_return_value = NULL_TREE;
07b2f2fd
JM
12410 }
12411
a8f73d4b 12412 /* Remember that we were in class scope. */
db5ae43f 12413 if (current_class_name)
a8f73d4b 12414 ctype = current_class_type;
db5ae43f 12415
1caa11d3
MM
12416 /* Must mark the RESULT_DECL as being in this function. */
12417 DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
12418
12419 /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
12420 to the FUNCTION_DECL node itself. */
12421 BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
12422
59026e79 12423 /* Save away current state, if appropriate. */
f444e36b 12424 if (!processing_template_decl)
59026e79
MM
12425 save_function_data (fndecl);
12426
efe49da0 12427 /* Complain if there's just no return statement. */
46cfb101 12428 if (warn_return_type
efe49da0 12429 && TREE_CODE (TREE_TYPE (fntype)) != VOID_TYPE
c1b83cc9 12430 && !dependent_type_p (TREE_TYPE (fntype))
57d5032b 12431 && !current_function_returns_value && !current_function_returns_null
efe49da0
JM
12432 /* Don't complain if we abort or throw. */
12433 && !current_function_returns_abnormally
55e99d52 12434 && !DECL_NAME (DECL_RESULT (fndecl))
4847609e 12435 && !TREE_NO_WARNING (fndecl)
44d10c10
PB
12436 /* Structor return values (if any) are set by the compiler. */
12437 && !DECL_CONSTRUCTOR_P (fndecl)
12438 && !DECL_DESTRUCTOR_P (fndecl))
4847609e
JH
12439 {
12440 warning (OPT_Wreturn_type,
12441 "no return statement in function returning non-void");
12442 TREE_NO_WARNING (fndecl) = 1;
12443 }
4985cde3 12444
6de9cd9a
DN
12445 /* Store the end of the function, so that we get good line number
12446 info for the epilogue. */
12447 cfun->function_end_locus = input_location;
12448
12449 /* Genericize before inlining. */
12450 if (!processing_template_decl)
12451 {
37e6d6fe 12452 struct language_function *f = DECL_SAVED_FUNCTION_DATA (fndecl);
68a607d8 12453 invoke_plugin_callbacks (PLUGIN_CXX_CP_PRE_GENERICIZE, fndecl);
5a508662 12454 cp_genericize (fndecl);
37e6d6fe
JH
12455 /* Clear out the bits we don't need. */
12456 f->x_current_class_ptr = NULL;
12457 f->x_current_class_ref = NULL;
12458 f->x_eh_spec_block = NULL;
12459 f->x_in_charge_parm = NULL;
12460 f->x_vtt_parm = NULL;
12461 f->x_return_value = NULL;
12462 f->bindings = NULL;
10827cd8 12463 f->extern_decl_map = NULL;
6de9cd9a 12464 }
37e6d6fe
JH
12465 /* Clear out the bits we don't need. */
12466 local_names = NULL;
6de9cd9a
DN
12467
12468 /* We're leaving the context of this function, so zap cfun. It's still in
12469 DECL_STRUCT_FUNCTION, and we'll restore it in tree_rest_of_compilation. */
db2960f4 12470 set_cfun (NULL);
c1f927e8 12471 current_function_decl = NULL;
a8f73d4b 12472
27631dae 12473 /* If this is an in-class inline definition, we may have to pop the
a8f73d4b
MM
12474 bindings for the template parameters that we added in
12475 maybe_begin_member_template_processing when start_function was
12476 called. */
12477 if (inclass_inline)
12478 maybe_end_member_template_processing ();
12479
12480 /* Leave the scope of the class. */
12481 if (ctype)
12482 pop_nested_class ();
5566b478
MS
12483
12484 --function_depth;
8d08fdba 12485
4d6abc1c 12486 /* Clean up. */
28cbf42c 12487 if (! nested)
1f8f4a0b
MM
12488 /* Let the error reporting routines know that we're outside a
12489 function. For a nested function, this value is used in
b03e38e1 12490 cxx_pop_function_context and then reset via pop_function_context. */
1f8f4a0b 12491 current_function_decl = NULL_TREE;
4d6abc1c 12492
3368cdd3
JJ
12493 defer_mark_used_calls = false;
12494 if (deferred_mark_used_calls)
12495 {
12496 unsigned int i;
12497 tree decl;
12498
12499 for (i = 0; VEC_iterate (tree, deferred_mark_used_calls, i, decl); i++)
12500 mark_used (decl);
12501 VEC_free (tree, gc, deferred_mark_used_calls);
12502 }
12503
4d6abc1c 12504 return fndecl;
8d08fdba
MS
12505}
12506\f
12507/* Create the FUNCTION_DECL for a function definition.
8d08fdba
MS
12508 DECLSPECS and DECLARATOR are the parts of the declaration;
12509 they describe the return type and the name of the function,
12510 but twisted together in a fashion that parallels the syntax of C.
12511
12512 This function creates a binding context for the function body
12513 as well as setting up the FUNCTION_DECL in current_function_decl.
12514
12515 Returns a FUNCTION_DECL on success.
12516
12517 If the DECLARATOR is not suitable for a function (it defines a datum
12518 instead), we return 0, which tells yyparse to report a parse error.
12519
12520 May return void_type_node indicating that this method is actually
12521 a friend. See grokfield for more details.
12522
12523 Came here with a `.pushlevel' .
12524
12525 DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
12526 CHANGES TO CODE IN `grokfield'. */
e92cc029 12527
8d08fdba 12528tree
02c5ff73
JM
12529grokmethod (cp_decl_specifier_seq *declspecs,
12530 const cp_declarator *declarator, tree attrlist)
8d08fdba 12531{
c11b6f21 12532 tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
91d231cb 12533 &attrlist);
8d08fdba 12534
a723baf1
MM
12535 if (fndecl == error_mark_node)
12536 return error_mark_node;
12537
12538 if (fndecl == NULL || TREE_CODE (fndecl) != FUNCTION_DECL)
12539 {
12540 error ("invalid member function declaration");
12541 return error_mark_node;
12542 }
8d08fdba 12543
195a5def
IR
12544 if (attrlist)
12545 cplus_decl_attributes (&fndecl, attrlist, 0);
12546
8d08fdba 12547 /* Pass friends other than inline friend functions back. */
a1774733 12548 if (fndecl == void_type_node)
8d08fdba
MS
12549 return fndecl;
12550
8d08fdba
MS
12551 if (DECL_IN_AGGR_P (fndecl))
12552 {
58ec3cc5 12553 if (DECL_CONTEXT (fndecl)
6d69fe27 12554 && TREE_CODE (DECL_CONTEXT (fndecl)) != NAMESPACE_DECL)
2d01edd7 12555 error ("%qD is already defined in class %qT", fndecl,
58ec3cc5 12556 DECL_CONTEXT (fndecl));
8ca4bf25 12557 return error_mark_node;
8d08fdba
MS
12558 }
12559
f3400fe2
JM
12560 check_template_shadow (fndecl);
12561
79065db2 12562 DECL_DECLARED_INLINE_P (fndecl) = 1;
0494626a 12563 DECL_NO_INLINE_WARNING_P (fndecl) = 1;
8d08fdba 12564
36a117a5
MM
12565 /* We process method specializations in finish_struct_1. */
12566 if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
4b0d3cbe
MM
12567 {
12568 fndecl = push_template_decl (fndecl);
12569 if (fndecl == error_mark_node)
12570 return fndecl;
12571 }
a0a33927 12572
8d08fdba
MS
12573 if (! DECL_FRIEND_P (fndecl))
12574 {
8d08fdba
MS
12575 if (TREE_CHAIN (fndecl))
12576 {
12577 fndecl = copy_node (fndecl);
12578 TREE_CHAIN (fndecl) = NULL_TREE;
12579 }
8d08fdba
MS
12580 }
12581
3600f678 12582 cp_finish_decl (fndecl, NULL_TREE, false, NULL_TREE, 0);
8d08fdba 12583
8d08fdba
MS
12584 DECL_IN_AGGR_P (fndecl) = 1;
12585 return fndecl;
12586}
8d08fdba 12587\f
0154eaa8
MM
12588
12589/* VAR is a VAR_DECL. If its type is incomplete, remember VAR so that
12590 we can lay it out later, when and if its type becomes complete. */
8d08fdba
MS
12591
12592void
11f6b451 12593maybe_register_incomplete_var (tree var)
8d08fdba 12594{
50bc768d 12595 gcc_assert (TREE_CODE (var) == VAR_DECL);
8d08fdba 12596
0154eaa8 12597 /* Keep track of variables with incomplete types. */
caf93cb0 12598 if (!processing_template_decl && TREE_TYPE (var) != error_mark_node
0154eaa8 12599 && DECL_EXTERNAL (var))
70adf8a9 12600 {
0154eaa8 12601 tree inner_type = TREE_TYPE (var);
caf93cb0 12602
0154eaa8
MM
12603 while (TREE_CODE (inner_type) == ARRAY_TYPE)
12604 inner_type = TREE_TYPE (inner_type);
12605 inner_type = TYPE_MAIN_VARIANT (inner_type);
caf93cb0 12606
0154eaa8
MM
12607 if ((!COMPLETE_TYPE_P (inner_type) && CLASS_TYPE_P (inner_type))
12608 /* RTTI TD entries are created while defining the type_info. */
12609 || (TYPE_LANG_SPECIFIC (inner_type)
12610 && TYPE_BEING_DEFINED (inner_type)))
12611 incomplete_vars = tree_cons (inner_type, var, incomplete_vars);
70adf8a9 12612 }
0154eaa8 12613}
70adf8a9 12614
0154eaa8 12615/* Called when a class type (given by TYPE) is defined. If there are
39a13be5 12616 any existing VAR_DECLs whose type has been completed by this
0154eaa8 12617 declaration, update them now. */
70adf8a9 12618
0154eaa8 12619void
11f6b451 12620complete_vars (tree type)
0154eaa8
MM
12621{
12622 tree *list = &incomplete_vars;
12623
50bc768d 12624 gcc_assert (CLASS_TYPE_P (type));
caf93cb0 12625 while (*list)
0154eaa8
MM
12626 {
12627 if (same_type_p (type, TREE_PURPOSE (*list)))
70adf8a9 12628 {
0154eaa8 12629 tree var = TREE_VALUE (*list);
67935995 12630 tree type = TREE_TYPE (var);
c740732f
MM
12631 /* Complete the type of the variable. The VAR_DECL itself
12632 will be laid out in expand_expr. */
67935995
MM
12633 complete_type (type);
12634 cp_apply_type_quals_to_decl (cp_type_quals (type), var);
0154eaa8
MM
12635 /* Remove this entry from the list. */
12636 *list = TREE_CHAIN (*list);
f30432d7
MS
12637 }
12638 else
0154eaa8 12639 list = &TREE_CHAIN (*list);
f30432d7 12640 }
7fb213d8
GB
12641
12642 /* Check for pending declarations which may have abstract type. */
12643 complete_type_check_abstract (type);
8d08fdba
MS
12644}
12645
5c113154
MM
12646/* If DECL is of a type which needs a cleanup, build and return an
12647 expression to perform that cleanup here. Return NULL_TREE if no
12648 cleanup need be done. */
e92cc029 12649
86f45d2c 12650tree
11f6b451 12651cxx_maybe_build_cleanup (tree decl)
8d08fdba 12652{
5c113154
MM
12653 tree type;
12654 tree attr;
12655 tree cleanup;
12656
12657 /* Assume no cleanup is required. */
12658 cleanup = NULL_TREE;
86f45d2c 12659
5c113154
MM
12660 if (error_operand_p (decl))
12661 return cleanup;
12662
12663 /* Handle "__attribute__((cleanup))". We run the cleanup function
12664 before the destructor since the destructor is what actually
12665 terminates the lifetime of the object. */
12666 attr = lookup_attribute ("cleanup", DECL_ATTRIBUTES (decl));
12667 if (attr)
12668 {
12669 tree id;
12670 tree fn;
12671 tree arg;
12672
12673 /* Get the name specified by the user for the cleanup function. */
12674 id = TREE_VALUE (TREE_VALUE (attr));
12675 /* Look up the name to find the cleanup function to call. It is
12676 important to use lookup_name here because that is what is
12677 used in c-common.c:handle_cleanup_attribute when performing
12678 initial checks on the attribute. Note that those checks
12679 include ensuring that the function found is not an overloaded
12680 function, or an object with an overloaded call operator,
39a13be5 12681 etc.; we can rely on the fact that the function found is an
5c113154
MM
12682 ordinary FUNCTION_DECL. */
12683 fn = lookup_name (id);
12684 arg = build_address (decl);
12685 mark_used (decl);
5ade1ed2
DG
12686 cleanup = cp_build_function_call (fn, build_tree_list (NULL_TREE,
12687 arg),
12688 tf_warning_or_error);
5c113154
MM
12689 }
12690 /* Handle ordinary C++ destructors. */
12691 type = TREE_TYPE (decl);
12692 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
8d08fdba 12693 {
80048418 12694 int flags = LOOKUP_NORMAL|LOOKUP_DESTRUCTOR;
5775a06a
NS
12695 bool has_vbases = (TREE_CODE (type) == RECORD_TYPE
12696 && CLASSTYPE_VBASECLASSES (type));
5c113154
MM
12697 tree addr;
12698 tree call;
8d08fdba 12699
8d08fdba 12700 if (TREE_CODE (type) == ARRAY_TYPE)
5c113154 12701 addr = decl;
8d08fdba 12702 else
5818c8e4 12703 addr = build_address (decl);
8d08fdba
MS
12704
12705 /* Optimize for space over speed here. */
5775a06a 12706 if (!has_vbases || flag_expensive_optimizations)
8d08fdba
MS
12707 flags |= LOOKUP_NONVIRTUAL;
12708
5c113154 12709 call = build_delete (TREE_TYPE (addr), addr,
86f45d2c 12710 sfk_complete_destructor, flags, 0);
5c113154 12711 if (cleanup)
c2255bc4 12712 cleanup = build_compound_expr (input_location, cleanup, call);
5c113154
MM
12713 else
12714 cleanup = call;
8d08fdba 12715 }
5c113154
MM
12716
12717 return cleanup;
8d08fdba
MS
12718}
12719\f
558475f0 12720/* When a stmt has been parsed, this function is called. */
8d08fdba
MS
12721
12722void
11f6b451 12723finish_stmt (void)
8d08fdba 12724{
8d08fdba
MS
12725}
12726
3afb32a4
MM
12727/* DECL was originally constructed as a non-static member function,
12728 but turned out to be static. Update it accordingly. */
700f8a87 12729
8857f91e 12730void
11f6b451 12731revert_static_member_fn (tree decl)
8d08fdba 12732{
700f8a87 12733 tree tmp;
3afb32a4
MM
12734 tree function = TREE_TYPE (decl);
12735 tree args = TYPE_ARG_TYPES (function);
8d08fdba 12736
89d684bb 12737 if (cp_type_quals (TREE_TYPE (TREE_VALUE (args)))
91063b51 12738 != TYPE_UNQUALIFIED)
c4f73174 12739 error ("static member function %q#D declared with type qualifiers", decl);
f30432d7 12740
700f8a87
MS
12741 args = TREE_CHAIN (args);
12742 tmp = build_function_type (TREE_TYPE (function), args);
89d684bb 12743 tmp = build_qualified_type (tmp, cp_type_quals (function));
f30432d7 12744 tmp = build_exception_variant (tmp,
8d08fdba 12745 TYPE_RAISES_EXCEPTIONS (function));
3afb32a4
MM
12746 TREE_TYPE (decl) = tmp;
12747 if (DECL_ARGUMENTS (decl))
12748 DECL_ARGUMENTS (decl) = TREE_CHAIN (DECL_ARGUMENTS (decl));
12749 DECL_STATIC_FUNCTION_P (decl) = 1;
8d08fdba 12750}
a4443a08 12751
e2500fed
GK
12752/* Return which tree structure is used by T, or TS_CP_GENERIC if T is
12753 one of the language-independent trees. */
4519c0a8 12754
e2500fed 12755enum cp_tree_node_structure_enum
11f6b451 12756cp_tree_node_structure (union lang_tree_node * t)
4519c0a8 12757{
e2500fed 12758 switch (TREE_CODE (&t->generic))
4519c0a8 12759 {
a723baf1 12760 case DEFAULT_ARG: return TS_CP_DEFAULT_ARG;
e2500fed 12761 case IDENTIFIER_NODE: return TS_CP_IDENTIFIER;
e2500fed
GK
12762 case OVERLOAD: return TS_CP_OVERLOAD;
12763 case TEMPLATE_PARM_INDEX: return TS_CP_TPI;
12764 case PTRMEM_CST: return TS_CP_PTRMEM;
0cbd7506 12765 case BASELINK: return TS_CP_BASELINK;
54e67af0 12766 case STATIC_ASSERT: return TS_CP_STATIC_ASSERT;
5d80a306 12767 case ARGUMENT_PACK_SELECT: return TS_CP_ARGUMENT_PACK_SELECT;
cb68ec50 12768 case TRAIT_EXPR: return TS_CP_TRAIT_EXPR;
d5f4eddd 12769 case LAMBDA_EXPR: return TS_CP_LAMBDA_EXPR;
e2500fed 12770 default: return TS_CP_GENERIC;
4519c0a8
MM
12771 }
12772}
5fd8e536 12773
eaa7c03f
JM
12774/* Build the void_list_node (void_type_node having been created). */
12775tree
11f6b451 12776build_void_list_node (void)
eaa7c03f
JM
12777{
12778 tree t = build_tree_list (NULL_TREE, void_type_node);
eaa7c03f
JM
12779 return t;
12780}
12781
6de9cd9a 12782bool
11f6b451 12783cp_missing_noreturn_ok_p (tree decl)
d363e7bf
AJ
12784{
12785 /* A missing noreturn is ok for the `main' function. */
92643fea 12786 return DECL_MAIN_P (decl);
d363e7bf 12787}
e2500fed 12788
c18a5b6c
MM
12789/* Return the COMDAT group into which DECL should be placed. */
12790
fc26fae3 12791tree
c18a5b6c
MM
12792cxx_comdat_group (tree decl)
12793{
12794 tree name;
12795
12796 /* Virtual tables, construction virtual tables, and virtual table
12797 tables all go in a single COMDAT group, named after the primary
12798 virtual table. */
12799 if (TREE_CODE (decl) == VAR_DECL && DECL_VTABLE_OR_VTT_P (decl))
12800 name = DECL_ASSEMBLER_NAME (CLASSTYPE_VTABLES (DECL_CONTEXT (decl)));
12801 /* For all other DECLs, the COMDAT group is the mangled name of the
12802 declaration itself. */
12803 else
5591e5f9
JJ
12804 {
12805 while (DECL_THUNK_P (decl))
12806 {
12807 /* If TARGET_USE_LOCAL_THUNK_ALIAS_P, use_thunk puts the thunk
12808 into the same section as the target function. In that case
12809 we must return target's name. */
12810 tree target = THUNK_TARGET (decl);
12811 if (TARGET_USE_LOCAL_THUNK_ALIAS_P (target)
12812 && DECL_SECTION_NAME (target) != NULL
12813 && DECL_ONE_ONLY (target))
12814 decl = target;
12815 else
12816 break;
12817 }
12818 name = DECL_ASSEMBLER_NAME (decl);
12819 }
c18a5b6c 12820
fc26fae3 12821 return name;
c18a5b6c
MM
12822}
12823
e2500fed 12824#include "gt-cp-decl.h"
This page took 8.596585 seconds and 5 git commands to generate.