re PR c++/6936 (member "using" binds wrong)
[gcc.git] / gcc / cp / decl.c
1 /* Process declarations and variables for C++ compiler.
2 Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
3 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
4 Free Software Foundation, Inc.
5 Contributed by Michael Tiemann (tiemann@cygnus.com)
6
7 This file is part of GCC.
8
9 GCC is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 3, or (at your option)
12 any later version.
13
14 GCC is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
18
19 You should have received a copy of the GNU General Public License
20 along with GCC; see the file COPYING3. If not see
21 <http://www.gnu.org/licenses/>. */
22
23
24 /* Process declarations and symbol lookup for C++ front end.
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
31 #include "config.h"
32 #include "system.h"
33 #include "coretypes.h"
34 #include "tm.h"
35 #include "tree.h"
36 #include "flags.h"
37 #include "cp-tree.h"
38 #include "tree-iterator.h"
39 #include "tree-inline.h"
40 #include "decl.h"
41 #include "intl.h"
42 #include "output.h"
43 #include "toplev.h"
44 #include "hashtab.h"
45 #include "tm_p.h"
46 #include "target.h"
47 #include "c-family/c-common.h"
48 #include "c-family/c-objc.h"
49 #include "c-family/c-pragma.h"
50 #include "diagnostic.h"
51 #include "intl.h"
52 #include "debug.h"
53 #include "timevar.h"
54 #include "pointer-set.h"
55 #include "splay-tree.h"
56 #include "plugin.h"
57
58 /* Possible cases of bad specifiers type used by bad_specifiers. */
59 enum bad_spec_place {
60 BSP_VAR, /* variable */
61 BSP_PARM, /* parameter */
62 BSP_TYPE, /* type */
63 BSP_FIELD /* field */
64 };
65
66 static tree grokparms (tree parmlist, tree *);
67 static const char *redeclaration_error_message (tree, tree);
68
69 static int decl_jump_unsafe (tree);
70 static void require_complete_types_for_parms (tree);
71 static int ambi_op_p (enum tree_code);
72 static int unary_op_p (enum tree_code);
73 static void push_local_name (tree);
74 static tree grok_reference_init (tree, tree, tree, int);
75 static tree grokvardecl (tree, tree, const cp_decl_specifier_seq *,
76 int, int, tree);
77 static int check_static_variable_definition (tree, tree);
78 static void record_unknown_type (tree, const char *);
79 static tree builtin_function_1 (tree, tree, bool);
80 static tree build_library_fn_1 (tree, enum tree_code, tree);
81 static int member_function_or_else (tree, tree, enum overload_flags);
82 static void bad_specifiers (tree, enum bad_spec_place, int, int, int, int,
83 int);
84 static void check_for_uninitialized_const_var (tree);
85 static hashval_t typename_hash (const void *);
86 static int typename_compare (const void *, const void *);
87 static tree local_variable_p_walkfn (tree *, int *, void *);
88 static tree record_builtin_java_type (const char *, int);
89 static const char *tag_name (enum tag_types);
90 static tree lookup_and_check_tag (enum tag_types, tree, tag_scope, bool);
91 static int walk_namespaces_r (tree, walk_namespaces_fn, void *);
92 static void maybe_deduce_size_from_array_init (tree, tree);
93 static void layout_var_decl (tree);
94 static tree check_initializer (tree, tree, int, VEC(tree,gc) **);
95 static void make_rtl_for_nonlocal_decl (tree, tree, const char *);
96 static void save_function_data (tree);
97 static void copy_type_enum (tree , tree);
98 static void check_function_type (tree, tree);
99 static void finish_constructor_body (void);
100 static void begin_destructor_body (void);
101 static void finish_destructor_body (void);
102 static void record_key_method_defined (tree);
103 static tree create_array_type_for_decl (tree, tree, tree);
104 static tree get_atexit_node (void);
105 static tree get_dso_handle_node (void);
106 static tree start_cleanup_fn (void);
107 static void end_cleanup_fn (void);
108 static tree cp_make_fname_decl (location_t, tree, int);
109 static void initialize_predefined_identifiers (void);
110 static tree check_special_function_return_type
111 (special_function_kind, tree, tree);
112 static tree push_cp_library_fn (enum tree_code, tree);
113 static tree build_cp_library_fn (tree, enum tree_code, tree);
114 static void store_parm_decls (tree);
115 static void initialize_local_var (tree, tree);
116 static void expand_static_init (tree, tree);
117
118 /* The following symbols are subsumed in the cp_global_trees array, and
119 listed here individually for documentation purposes.
120
121 C++ extensions
122 tree wchar_decl_node;
123
124 tree vtable_entry_type;
125 tree delta_type_node;
126 tree __t_desc_type_node;
127
128 tree class_type_node;
129 tree unknown_type_node;
130
131 Array type `vtable_entry_type[]'
132
133 tree vtbl_type_node;
134 tree vtbl_ptr_type_node;
135
136 Namespaces,
137
138 tree std_node;
139 tree abi_node;
140
141 A FUNCTION_DECL which can call `abort'. Not necessarily the
142 one that the user will declare, but sufficient to be called
143 by routines that want to abort the program.
144
145 tree abort_fndecl;
146
147 The FUNCTION_DECL for the default `::operator delete'.
148
149 tree global_delete_fndecl;
150
151 Used by RTTI
152 tree type_info_type_node, tinfo_decl_id, tinfo_decl_type;
153 tree tinfo_var_id; */
154
155 tree cp_global_trees[CPTI_MAX];
156
157 /* Indicates that there is a type value in some namespace, although
158 that is not necessarily in scope at the moment. */
159
160 tree global_type_node;
161
162 /* The node that holds the "name" of the global scope. */
163 tree global_scope_name;
164
165 #define local_names cp_function_chain->x_local_names
166
167 /* A list of objects which have constructors or destructors
168 which reside in the global scope. The decl is stored in
169 the TREE_VALUE slot and the initializer is stored
170 in the TREE_PURPOSE slot. */
171 tree static_aggregates;
172
173 /* -- end of C++ */
174
175 /* A node for the integer constant 2. */
176
177 tree integer_two_node;
178
179 /* Used only for jumps to as-yet undefined labels, since jumps to
180 defined labels can have their validity checked immediately. */
181
182 struct GTY((chain_next ("%h.next"))) named_label_use_entry {
183 struct named_label_use_entry *next;
184 /* The binding level to which this entry is *currently* attached.
185 This is initially the binding level in which the goto appeared,
186 but is modified as scopes are closed. */
187 cp_binding_level *binding_level;
188 /* The head of the names list that was current when the goto appeared,
189 or the inner scope popped. These are the decls that will *not* be
190 skipped when jumping to the label. */
191 tree names_in_scope;
192 /* The location of the goto, for error reporting. */
193 location_t o_goto_locus;
194 /* True if an OpenMP structured block scope has been closed since
195 the goto appeared. This means that the branch from the label will
196 illegally exit an OpenMP scope. */
197 bool in_omp_scope;
198 };
199
200 /* A list of all LABEL_DECLs in the function that have names. Here so
201 we can clear out their names' definitions at the end of the
202 function, and so we can check the validity of jumps to these labels. */
203
204 struct GTY(()) named_label_entry {
205 /* The decl itself. */
206 tree label_decl;
207
208 /* The binding level to which the label is *currently* attached.
209 This is initially set to the binding level in which the label
210 is defined, but is modified as scopes are closed. */
211 cp_binding_level *binding_level;
212 /* The head of the names list that was current when the label was
213 defined, or the inner scope popped. These are the decls that will
214 be skipped when jumping to the label. */
215 tree names_in_scope;
216 /* A vector of all decls from all binding levels that would be
217 crossed by a backward branch to the label. */
218 VEC(tree,gc) *bad_decls;
219
220 /* A list of uses of the label, before the label is defined. */
221 struct named_label_use_entry *uses;
222
223 /* The following bits are set after the label is defined, and are
224 updated as scopes are popped. They indicate that a backward jump
225 to the label will illegally enter a scope of the given flavor. */
226 bool in_try_scope;
227 bool in_catch_scope;
228 bool in_omp_scope;
229 };
230
231 #define named_labels cp_function_chain->x_named_labels
232 \f
233 /* The number of function bodies which we are currently processing.
234 (Zero if we are at namespace scope, one inside the body of a
235 function, two inside the body of a function in a local class, etc.) */
236 int function_depth;
237
238 /* To avoid unwanted recursion, finish_function defers all mark_used calls
239 encountered during its execution until it finishes. */
240 bool defer_mark_used_calls;
241 VEC(tree, gc) *deferred_mark_used_calls;
242
243 /* States indicating how grokdeclarator() should handle declspecs marked
244 with __attribute__((deprecated)). An object declared as
245 __attribute__((deprecated)) suppresses warnings of uses of other
246 deprecated items. */
247 enum deprecated_states deprecated_state = DEPRECATED_NORMAL;
248
249 \f
250 /* A list of VAR_DECLs whose type was incomplete at the time the
251 variable was declared. */
252
253 typedef struct GTY(()) incomplete_var_d {
254 tree decl;
255 tree incomplete_type;
256 } incomplete_var;
257
258 DEF_VEC_O(incomplete_var);
259 DEF_VEC_ALLOC_O(incomplete_var,gc);
260
261 static GTY(()) VEC(incomplete_var,gc) *incomplete_vars;
262 \f
263 /* Returns the kind of template specialization we are currently
264 processing, given that it's declaration contained N_CLASS_SCOPES
265 explicit scope qualifications. */
266
267 tmpl_spec_kind
268 current_tmpl_spec_kind (int n_class_scopes)
269 {
270 int n_template_parm_scopes = 0;
271 int seen_specialization_p = 0;
272 int innermost_specialization_p = 0;
273 cp_binding_level *b;
274
275 /* Scan through the template parameter scopes. */
276 for (b = current_binding_level;
277 b->kind == sk_template_parms;
278 b = b->level_chain)
279 {
280 /* If we see a specialization scope inside a parameter scope,
281 then something is wrong. That corresponds to a declaration
282 like:
283
284 template <class T> template <> ...
285
286 which is always invalid since [temp.expl.spec] forbids the
287 specialization of a class member template if the enclosing
288 class templates are not explicitly specialized as well. */
289 if (b->explicit_spec_p)
290 {
291 if (n_template_parm_scopes == 0)
292 innermost_specialization_p = 1;
293 else
294 seen_specialization_p = 1;
295 }
296 else if (seen_specialization_p == 1)
297 return tsk_invalid_member_spec;
298
299 ++n_template_parm_scopes;
300 }
301
302 /* Handle explicit instantiations. */
303 if (processing_explicit_instantiation)
304 {
305 if (n_template_parm_scopes != 0)
306 /* We've seen a template parameter list during an explicit
307 instantiation. For example:
308
309 template <class T> template void f(int);
310
311 This is erroneous. */
312 return tsk_invalid_expl_inst;
313 else
314 return tsk_expl_inst;
315 }
316
317 if (n_template_parm_scopes < n_class_scopes)
318 /* We've not seen enough template headers to match all the
319 specialized classes present. For example:
320
321 template <class T> void R<T>::S<T>::f(int);
322
323 This is invalid; there needs to be one set of template
324 parameters for each class. */
325 return tsk_insufficient_parms;
326 else if (n_template_parm_scopes == n_class_scopes)
327 /* We're processing a non-template declaration (even though it may
328 be a member of a template class.) For example:
329
330 template <class T> void S<T>::f(int);
331
332 The `class T' matches the `S<T>', leaving no template headers
333 corresponding to the `f'. */
334 return tsk_none;
335 else if (n_template_parm_scopes > n_class_scopes + 1)
336 /* We've got too many template headers. For example:
337
338 template <> template <class T> void f (T);
339
340 There need to be more enclosing classes. */
341 return tsk_excessive_parms;
342 else
343 /* This must be a template. It's of the form:
344
345 template <class T> template <class U> void S<T>::f(U);
346
347 This is a specialization if the innermost level was a
348 specialization; otherwise it's just a definition of the
349 template. */
350 return innermost_specialization_p ? tsk_expl_spec : tsk_template;
351 }
352
353 /* Exit the current scope. */
354
355 void
356 finish_scope (void)
357 {
358 poplevel (0, 0, 0);
359 }
360
361 /* When a label goes out of scope, check to see if that label was used
362 in a valid manner, and issue any appropriate warnings or errors. */
363
364 static void
365 pop_label (tree label, tree old_value)
366 {
367 if (!processing_template_decl)
368 {
369 if (DECL_INITIAL (label) == NULL_TREE)
370 {
371 location_t location;
372
373 error ("label %q+D used but not defined", label);
374 location = input_location; /* FIXME want (input_filename, (line)0) */
375 /* Avoid crashing later. */
376 define_label (location, DECL_NAME (label));
377 }
378 else
379 warn_for_unused_label (label);
380 }
381
382 SET_IDENTIFIER_LABEL_VALUE (DECL_NAME (label), old_value);
383 }
384
385 /* At the end of a function, all labels declared within the function
386 go out of scope. BLOCK is the top-level block for the
387 function. */
388
389 static int
390 pop_labels_1 (void **slot, void *data)
391 {
392 struct named_label_entry *ent = (struct named_label_entry *) *slot;
393 tree block = (tree) data;
394
395 pop_label (ent->label_decl, NULL_TREE);
396
397 /* Put the labels into the "variables" of the top-level block,
398 so debugger can see them. */
399 DECL_CHAIN (ent->label_decl) = BLOCK_VARS (block);
400 BLOCK_VARS (block) = ent->label_decl;
401
402 htab_clear_slot (named_labels, slot);
403
404 return 1;
405 }
406
407 static void
408 pop_labels (tree block)
409 {
410 if (named_labels)
411 {
412 htab_traverse (named_labels, pop_labels_1, block);
413 named_labels = NULL;
414 }
415 }
416
417 /* At the end of a block with local labels, restore the outer definition. */
418
419 static void
420 pop_local_label (tree label, tree old_value)
421 {
422 struct named_label_entry dummy;
423 void **slot;
424
425 pop_label (label, old_value);
426
427 dummy.label_decl = label;
428 slot = htab_find_slot (named_labels, &dummy, NO_INSERT);
429 htab_clear_slot (named_labels, slot);
430 }
431
432 /* The following two routines are used to interface to Objective-C++.
433 The binding level is purposely treated as an opaque type. */
434
435 void *
436 objc_get_current_scope (void)
437 {
438 return current_binding_level;
439 }
440
441 /* The following routine is used by the NeXT-style SJLJ exceptions;
442 variables get marked 'volatile' so as to not be clobbered by
443 _setjmp()/_longjmp() calls. All variables in the current scope,
444 as well as parent scopes up to (but not including) ENCLOSING_BLK
445 shall be thusly marked. */
446
447 void
448 objc_mark_locals_volatile (void *enclosing_blk)
449 {
450 cp_binding_level *scope;
451
452 for (scope = current_binding_level;
453 scope && scope != enclosing_blk;
454 scope = scope->level_chain)
455 {
456 tree decl;
457
458 for (decl = scope->names; decl; decl = TREE_CHAIN (decl))
459 objc_volatilize_decl (decl);
460
461 /* Do not climb up past the current function. */
462 if (scope->kind == sk_function_parms)
463 break;
464 }
465 }
466
467 /* Update data for defined and undefined labels when leaving a scope. */
468
469 static int
470 poplevel_named_label_1 (void **slot, void *data)
471 {
472 struct named_label_entry *ent = (struct named_label_entry *) *slot;
473 cp_binding_level *bl = (cp_binding_level *) data;
474 cp_binding_level *obl = bl->level_chain;
475
476 if (ent->binding_level == bl)
477 {
478 tree decl;
479
480 /* ENT->NAMES_IN_SCOPE may contain a mixture of DECLs and
481 TREE_LISTs representing OVERLOADs, so be careful. */
482 for (decl = ent->names_in_scope; decl; decl = (DECL_P (decl)
483 ? DECL_CHAIN (decl)
484 : TREE_CHAIN (decl)))
485 if (decl_jump_unsafe (decl))
486 VEC_safe_push (tree, gc, ent->bad_decls, decl);
487
488 ent->binding_level = obl;
489 ent->names_in_scope = obl->names;
490 switch (bl->kind)
491 {
492 case sk_try:
493 ent->in_try_scope = true;
494 break;
495 case sk_catch:
496 ent->in_catch_scope = true;
497 break;
498 case sk_omp:
499 ent->in_omp_scope = true;
500 break;
501 default:
502 break;
503 }
504 }
505 else if (ent->uses)
506 {
507 struct named_label_use_entry *use;
508
509 for (use = ent->uses; use ; use = use->next)
510 if (use->binding_level == bl)
511 {
512 use->binding_level = obl;
513 use->names_in_scope = obl->names;
514 if (bl->kind == sk_omp)
515 use->in_omp_scope = true;
516 }
517 }
518
519 return 1;
520 }
521
522 /* Saved errorcount to avoid -Wunused-but-set-{parameter,variable} warnings
523 when errors were reported, except for -Werror-unused-but-set-*. */
524 static int unused_but_set_errorcount;
525
526 /* Exit a binding level.
527 Pop the level off, and restore the state of the identifier-decl mappings
528 that were in effect when this level was entered.
529
530 If KEEP == 1, this level had explicit declarations, so
531 and create a "block" (a BLOCK node) for the level
532 to record its declarations and subblocks for symbol table output.
533
534 If FUNCTIONBODY is nonzero, this level is the body of a function,
535 so create a block as if KEEP were set and also clear out all
536 label names.
537
538 If REVERSE is nonzero, reverse the order of decls before putting
539 them into the BLOCK. */
540
541 tree
542 poplevel (int keep, int reverse, int functionbody)
543 {
544 tree link;
545 /* The chain of decls was accumulated in reverse order.
546 Put it into forward order, just for cleanliness. */
547 tree decls;
548 tree subblocks;
549 tree block;
550 tree decl;
551 int leaving_for_scope;
552 scope_kind kind;
553 unsigned ix;
554 cp_label_binding *label_bind;
555
556 timevar_start (TV_NAME_LOOKUP);
557 restart:
558
559 block = NULL_TREE;
560
561 gcc_assert (current_binding_level->kind != sk_class);
562
563 if (current_binding_level->kind == sk_cleanup)
564 functionbody = 0;
565 subblocks = functionbody >= 0 ? current_binding_level->blocks : 0;
566
567 gcc_assert (!VEC_length(cp_class_binding,
568 current_binding_level->class_shadowed));
569
570 /* We used to use KEEP == 2 to indicate that the new block should go
571 at the beginning of the list of blocks at this binding level,
572 rather than the end. This hack is no longer used. */
573 gcc_assert (keep == 0 || keep == 1);
574
575 if (current_binding_level->keep)
576 keep = 1;
577
578 /* Any uses of undefined labels, and any defined labels, now operate
579 under constraints of next binding contour. */
580 if (cfun && !functionbody && named_labels)
581 htab_traverse (named_labels, poplevel_named_label_1,
582 current_binding_level);
583
584 /* Get the decls in the order they were written.
585 Usually current_binding_level->names is in reverse order.
586 But parameter decls were previously put in forward order. */
587
588 if (reverse)
589 current_binding_level->names
590 = decls = nreverse (current_binding_level->names);
591 else
592 decls = current_binding_level->names;
593
594 /* If there were any declarations or structure tags in that level,
595 or if this level is a function body,
596 create a BLOCK to record them for the life of this function. */
597 block = NULL_TREE;
598 if (keep == 1 || functionbody)
599 block = make_node (BLOCK);
600 if (block != NULL_TREE)
601 {
602 BLOCK_VARS (block) = decls;
603 BLOCK_SUBBLOCKS (block) = subblocks;
604 }
605
606 /* In each subblock, record that this is its superior. */
607 if (keep >= 0)
608 for (link = subblocks; link; link = BLOCK_CHAIN (link))
609 BLOCK_SUPERCONTEXT (link) = block;
610
611 /* We still support the old for-scope rules, whereby the variables
612 in a for-init statement were in scope after the for-statement
613 ended. We only use the new rules if flag_new_for_scope is
614 nonzero. */
615 leaving_for_scope
616 = current_binding_level->kind == sk_for && flag_new_for_scope == 1;
617
618 /* Before we remove the declarations first check for unused variables. */
619 if ((warn_unused_variable || warn_unused_but_set_variable)
620 && !processing_template_decl)
621 for (decl = getdecls (); decl; decl = TREE_CHAIN (decl))
622 if (TREE_CODE (decl) == VAR_DECL
623 && (! TREE_USED (decl) || !DECL_READ_P (decl))
624 && ! DECL_IN_SYSTEM_HEADER (decl)
625 && DECL_NAME (decl) && ! DECL_ARTIFICIAL (decl))
626 {
627 if (! TREE_USED (decl))
628 warning (OPT_Wunused_variable, "unused variable %q+D", decl);
629 else if (DECL_CONTEXT (decl) == current_function_decl
630 && TREE_TYPE (decl) != error_mark_node
631 && TREE_CODE (TREE_TYPE (decl)) != REFERENCE_TYPE
632 && errorcount == unused_but_set_errorcount
633 && (!CLASS_TYPE_P (TREE_TYPE (decl))
634 || !TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl))))
635 {
636 warning (OPT_Wunused_but_set_variable,
637 "variable %q+D set but not used", decl);
638 unused_but_set_errorcount = errorcount;
639 }
640 }
641
642 /* Remove declarations for all the DECLs in this level. */
643 for (link = decls; link; link = TREE_CHAIN (link))
644 {
645 if (leaving_for_scope && TREE_CODE (link) == VAR_DECL
646 /* It's hard to make this ARM compatibility hack play nicely with
647 lambdas, and it really isn't necessary in C++11 mode. */
648 && cxx_dialect < cxx0x
649 && DECL_NAME (link))
650 {
651 tree name = DECL_NAME (link);
652 cxx_binding *ob;
653 tree ns_binding;
654
655 ob = outer_binding (name,
656 IDENTIFIER_BINDING (name),
657 /*class_p=*/true);
658 if (!ob)
659 ns_binding = IDENTIFIER_NAMESPACE_VALUE (name);
660 else
661 ns_binding = NULL_TREE;
662
663 if (ob && ob->scope == current_binding_level->level_chain)
664 /* We have something like:
665
666 int i;
667 for (int i; ;);
668
669 and we are leaving the `for' scope. There's no reason to
670 keep the binding of the inner `i' in this case. */
671 pop_binding (name, link);
672 else if ((ob && (TREE_CODE (ob->value) == TYPE_DECL))
673 || (ns_binding && TREE_CODE (ns_binding) == TYPE_DECL))
674 /* Here, we have something like:
675
676 typedef int I;
677
678 void f () {
679 for (int I; ;);
680 }
681
682 We must pop the for-scope binding so we know what's a
683 type and what isn't. */
684 pop_binding (name, link);
685 else
686 {
687 /* Mark this VAR_DECL as dead so that we can tell we left it
688 there only for backward compatibility. */
689 DECL_DEAD_FOR_LOCAL (link) = 1;
690
691 /* Keep track of what should have happened when we
692 popped the binding. */
693 if (ob && ob->value)
694 {
695 SET_DECL_SHADOWED_FOR_VAR (link, ob->value);
696 DECL_HAS_SHADOWED_FOR_VAR_P (link) = 1;
697 }
698
699 /* Add it to the list of dead variables in the next
700 outermost binding to that we can remove these when we
701 leave that binding. */
702 VEC_safe_push (tree, gc,
703 current_binding_level->level_chain->dead_vars_from_for,
704 link);
705
706 /* Although we don't pop the cxx_binding, we do clear
707 its SCOPE since the scope is going away now. */
708 IDENTIFIER_BINDING (name)->scope
709 = current_binding_level->level_chain;
710 }
711 }
712 else
713 {
714 tree name;
715
716 /* Remove the binding. */
717 decl = link;
718
719 if (TREE_CODE (decl) == TREE_LIST)
720 decl = TREE_VALUE (decl);
721 name = decl;
722
723 if (TREE_CODE (name) == OVERLOAD)
724 name = OVL_FUNCTION (name);
725
726 gcc_assert (DECL_P (name));
727 pop_binding (DECL_NAME (name), decl);
728 }
729 }
730
731 /* Remove declarations for any `for' variables from inner scopes
732 that we kept around. */
733 FOR_EACH_VEC_ELT_REVERSE (tree, current_binding_level->dead_vars_from_for,
734 ix, decl)
735 pop_binding (DECL_NAME (decl), decl);
736
737 /* Restore the IDENTIFIER_TYPE_VALUEs. */
738 for (link = current_binding_level->type_shadowed;
739 link; link = TREE_CHAIN (link))
740 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (link), TREE_VALUE (link));
741
742 /* Restore the IDENTIFIER_LABEL_VALUEs for local labels. */
743 FOR_EACH_VEC_ELT_REVERSE (cp_label_binding,
744 current_binding_level->shadowed_labels,
745 ix, label_bind)
746 pop_local_label (label_bind->label, label_bind->prev_value);
747
748 /* There may be OVERLOADs (wrapped in TREE_LISTs) on the BLOCK_VARs
749 list if a `using' declaration put them there. The debugging
750 back ends won't understand OVERLOAD, so we remove them here.
751 Because the BLOCK_VARS are (temporarily) shared with
752 CURRENT_BINDING_LEVEL->NAMES we must do this fixup after we have
753 popped all the bindings. */
754 if (block)
755 {
756 tree* d;
757
758 for (d = &BLOCK_VARS (block); *d; )
759 {
760 if (TREE_CODE (*d) == TREE_LIST)
761 *d = TREE_CHAIN (*d);
762 else
763 d = &DECL_CHAIN (*d);
764 }
765 }
766
767 /* If the level being exited is the top level of a function,
768 check over all the labels. */
769 if (functionbody)
770 {
771 /* Since this is the top level block of a function, the vars are
772 the function's parameters. Don't leave them in the BLOCK
773 because they are found in the FUNCTION_DECL instead. */
774 BLOCK_VARS (block) = 0;
775 pop_labels (block);
776 }
777
778 kind = current_binding_level->kind;
779 if (kind == sk_cleanup)
780 {
781 tree stmt;
782
783 /* If this is a temporary binding created for a cleanup, then we'll
784 have pushed a statement list level. Pop that, create a new
785 BIND_EXPR for the block, and insert it into the stream. */
786 stmt = pop_stmt_list (current_binding_level->statement_list);
787 stmt = c_build_bind_expr (input_location, block, stmt);
788 add_stmt (stmt);
789 }
790
791 leave_scope ();
792 if (functionbody)
793 {
794 /* The current function is being defined, so its DECL_INITIAL
795 should be error_mark_node. */
796 gcc_assert (DECL_INITIAL (current_function_decl) == error_mark_node);
797 DECL_INITIAL (current_function_decl) = block;
798 }
799 else if (block)
800 current_binding_level->blocks
801 = block_chainon (current_binding_level->blocks, block);
802
803 /* If we did not make a block for the level just exited,
804 any blocks made for inner levels
805 (since they cannot be recorded as subblocks in that level)
806 must be carried forward so they will later become subblocks
807 of something else. */
808 else if (subblocks)
809 current_binding_level->blocks
810 = block_chainon (current_binding_level->blocks, subblocks);
811
812 /* Each and every BLOCK node created here in `poplevel' is important
813 (e.g. for proper debugging information) so if we created one
814 earlier, mark it as "used". */
815 if (block)
816 TREE_USED (block) = 1;
817
818 /* All temporary bindings created for cleanups are popped silently. */
819 if (kind == sk_cleanup)
820 goto restart;
821
822 timevar_stop (TV_NAME_LOOKUP);
823 return block;
824 }
825
826 /* Walk all the namespaces contained NAMESPACE, including NAMESPACE
827 itself, calling F for each. The DATA is passed to F as well. */
828
829 static int
830 walk_namespaces_r (tree name_space, walk_namespaces_fn f, void* data)
831 {
832 int result = 0;
833 tree current = NAMESPACE_LEVEL (name_space)->namespaces;
834
835 result |= (*f) (name_space, data);
836
837 for (; current; current = DECL_CHAIN (current))
838 result |= walk_namespaces_r (current, f, data);
839
840 return result;
841 }
842
843 /* Walk all the namespaces, calling F for each. The DATA is passed to
844 F as well. */
845
846 int
847 walk_namespaces (walk_namespaces_fn f, void* data)
848 {
849 return walk_namespaces_r (global_namespace, f, data);
850 }
851
852 /* Call wrapup_globals_declarations for the globals in NAMESPACE. If
853 DATA is non-NULL, this is the last time we will call
854 wrapup_global_declarations for this NAMESPACE. */
855
856 int
857 wrapup_globals_for_namespace (tree name_space, void* data)
858 {
859 cp_binding_level *level = NAMESPACE_LEVEL (name_space);
860 VEC(tree,gc) *statics = level->static_decls;
861 tree *vec = VEC_address (tree, statics);
862 int len = VEC_length (tree, statics);
863 int last_time = (data != 0);
864
865 if (last_time)
866 {
867 check_global_declarations (vec, len);
868 emit_debug_global_declarations (vec, len);
869 return 0;
870 }
871
872 /* Write out any globals that need to be output. */
873 return wrapup_global_declarations (vec, len);
874 }
875
876 \f
877 /* In C++, you don't have to write `struct S' to refer to `S'; you
878 can just use `S'. We accomplish this by creating a TYPE_DECL as
879 if the user had written `typedef struct S S'. Create and return
880 the TYPE_DECL for TYPE. */
881
882 tree
883 create_implicit_typedef (tree name, tree type)
884 {
885 tree decl;
886
887 decl = build_decl (input_location, TYPE_DECL, name, type);
888 DECL_ARTIFICIAL (decl) = 1;
889 /* There are other implicit type declarations, like the one *within*
890 a class that allows you to write `S::S'. We must distinguish
891 amongst these. */
892 SET_DECL_IMPLICIT_TYPEDEF_P (decl);
893 TYPE_NAME (type) = decl;
894 TYPE_STUB_DECL (type) = decl;
895
896 return decl;
897 }
898
899 /* Remember a local name for name-mangling purposes. */
900
901 static void
902 push_local_name (tree decl)
903 {
904 size_t i, nelts;
905 tree t, name;
906
907 timevar_start (TV_NAME_LOOKUP);
908
909 name = DECL_NAME (decl);
910
911 nelts = VEC_length (tree, local_names);
912 for (i = 0; i < nelts; i++)
913 {
914 t = VEC_index (tree, local_names, i);
915 if (DECL_NAME (t) == name)
916 {
917 if (!DECL_LANG_SPECIFIC (decl))
918 retrofit_lang_decl (decl);
919 DECL_LANG_SPECIFIC (decl)->u.base.u2sel = 1;
920 if (DECL_LANG_SPECIFIC (t))
921 DECL_DISCRIMINATOR (decl) = DECL_DISCRIMINATOR (t) + 1;
922 else
923 DECL_DISCRIMINATOR (decl) = 1;
924
925 VEC_replace (tree, local_names, i, decl);
926 timevar_stop (TV_NAME_LOOKUP);
927 return;
928 }
929 }
930
931 VEC_safe_push (tree, gc, local_names, decl);
932 timevar_stop (TV_NAME_LOOKUP);
933 }
934 \f
935 /* Subroutine of duplicate_decls: return truthvalue of whether
936 or not types of these decls match.
937
938 For C++, we must compare the parameter list so that `int' can match
939 `int&' in a parameter position, but `int&' is not confused with
940 `const int&'. */
941
942 int
943 decls_match (tree newdecl, tree olddecl)
944 {
945 int types_match;
946
947 if (newdecl == olddecl)
948 return 1;
949
950 if (TREE_CODE (newdecl) != TREE_CODE (olddecl))
951 /* If the two DECLs are not even the same kind of thing, we're not
952 interested in their types. */
953 return 0;
954
955 if (TREE_CODE (newdecl) == FUNCTION_DECL)
956 {
957 tree f1 = TREE_TYPE (newdecl);
958 tree f2 = TREE_TYPE (olddecl);
959 tree p1 = TYPE_ARG_TYPES (f1);
960 tree p2 = TYPE_ARG_TYPES (f2);
961
962 /* Specializations of different templates are different functions
963 even if they have the same type. */
964 tree t1 = (DECL_USE_TEMPLATE (newdecl)
965 ? DECL_TI_TEMPLATE (newdecl)
966 : NULL_TREE);
967 tree t2 = (DECL_USE_TEMPLATE (olddecl)
968 ? DECL_TI_TEMPLATE (olddecl)
969 : NULL_TREE);
970 if (t1 != t2)
971 return 0;
972
973 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
974 && ! (DECL_EXTERN_C_P (newdecl)
975 && DECL_EXTERN_C_P (olddecl)))
976 return 0;
977
978 #ifdef NO_IMPLICIT_EXTERN_C
979 /* A new declaration doesn't match a built-in one unless it
980 is also extern "C". */
981 if (DECL_IS_BUILTIN (olddecl)
982 && DECL_EXTERN_C_P (olddecl) && !DECL_EXTERN_C_P (newdecl))
983 return 0;
984 #endif
985
986 if (TREE_CODE (f1) != TREE_CODE (f2))
987 return 0;
988
989 if (same_type_p (TREE_TYPE (f1), TREE_TYPE (f2)))
990 {
991 if (!prototype_p (f2) && DECL_EXTERN_C_P (olddecl)
992 && (DECL_BUILT_IN (olddecl)
993 #ifndef NO_IMPLICIT_EXTERN_C
994 || (DECL_IN_SYSTEM_HEADER (newdecl) && !DECL_CLASS_SCOPE_P (newdecl))
995 || (DECL_IN_SYSTEM_HEADER (olddecl) && !DECL_CLASS_SCOPE_P (olddecl))
996 #endif
997 ))
998 {
999 types_match = self_promoting_args_p (p1);
1000 if (p1 == void_list_node)
1001 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
1002 }
1003 #ifndef NO_IMPLICIT_EXTERN_C
1004 else if (!prototype_p (f1)
1005 && (DECL_EXTERN_C_P (olddecl)
1006 && DECL_IN_SYSTEM_HEADER (olddecl)
1007 && !DECL_CLASS_SCOPE_P (olddecl))
1008 && (DECL_EXTERN_C_P (newdecl)
1009 && DECL_IN_SYSTEM_HEADER (newdecl)
1010 && !DECL_CLASS_SCOPE_P (newdecl)))
1011 {
1012 types_match = self_promoting_args_p (p2);
1013 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
1014 }
1015 #endif
1016 else
1017 types_match =
1018 compparms (p1, p2)
1019 && (TYPE_ATTRIBUTES (TREE_TYPE (newdecl)) == NULL_TREE
1020 || comp_type_attributes (TREE_TYPE (newdecl),
1021 TREE_TYPE (olddecl)) != 0);
1022 }
1023 else
1024 types_match = 0;
1025 }
1026 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1027 {
1028 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl))
1029 != TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)))
1030 return 0;
1031
1032 if (!comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
1033 DECL_TEMPLATE_PARMS (olddecl)))
1034 return 0;
1035
1036 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
1037 types_match = same_type_p (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl)),
1038 TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl)));
1039 else
1040 types_match = decls_match (DECL_TEMPLATE_RESULT (olddecl),
1041 DECL_TEMPLATE_RESULT (newdecl));
1042 }
1043 else
1044 {
1045 /* Need to check scope for variable declaration (VAR_DECL).
1046 For typedef (TYPE_DECL), scope is ignored. */
1047 if (TREE_CODE (newdecl) == VAR_DECL
1048 && CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
1049 /* [dcl.link]
1050 Two declarations for an object with C language linkage
1051 with the same name (ignoring the namespace that qualify
1052 it) that appear in different namespace scopes refer to
1053 the same object. */
1054 && !(DECL_EXTERN_C_P (olddecl) && DECL_EXTERN_C_P (newdecl)))
1055 return 0;
1056
1057 if (TREE_TYPE (newdecl) == error_mark_node)
1058 types_match = TREE_TYPE (olddecl) == error_mark_node;
1059 else if (TREE_TYPE (olddecl) == NULL_TREE)
1060 types_match = TREE_TYPE (newdecl) == NULL_TREE;
1061 else if (TREE_TYPE (newdecl) == NULL_TREE)
1062 types_match = 0;
1063 else
1064 types_match = comptypes (TREE_TYPE (newdecl),
1065 TREE_TYPE (olddecl),
1066 COMPARE_REDECLARATION);
1067 }
1068
1069 return types_match;
1070 }
1071
1072 /* If NEWDECL is `static' and an `extern' was seen previously,
1073 warn about it. OLDDECL is the previous declaration.
1074
1075 Note that this does not apply to the C++ case of declaring
1076 a variable `extern const' and then later `const'.
1077
1078 Don't complain about built-in functions, since they are beyond
1079 the user's control. */
1080
1081 void
1082 warn_extern_redeclared_static (tree newdecl, tree olddecl)
1083 {
1084 if (TREE_CODE (newdecl) == TYPE_DECL
1085 || TREE_CODE (newdecl) == TEMPLATE_DECL
1086 || TREE_CODE (newdecl) == CONST_DECL
1087 || TREE_CODE (newdecl) == NAMESPACE_DECL)
1088 return;
1089
1090 /* Don't get confused by static member functions; that's a different
1091 use of `static'. */
1092 if (TREE_CODE (newdecl) == FUNCTION_DECL
1093 && DECL_STATIC_FUNCTION_P (newdecl))
1094 return;
1095
1096 /* If the old declaration was `static', or the new one isn't, then
1097 everything is OK. */
1098 if (DECL_THIS_STATIC (olddecl) || !DECL_THIS_STATIC (newdecl))
1099 return;
1100
1101 /* It's OK to declare a builtin function as `static'. */
1102 if (TREE_CODE (olddecl) == FUNCTION_DECL
1103 && DECL_ARTIFICIAL (olddecl))
1104 return;
1105
1106 permerror (input_location, "%qD was declared %<extern%> and later %<static%>", newdecl);
1107 permerror (input_location, "previous declaration of %q+D", olddecl);
1108 }
1109
1110 /* NEW_DECL is a redeclaration of OLD_DECL; both are functions or
1111 function templates. If their exception specifications do not
1112 match, issue a diagnostic. */
1113
1114 static void
1115 check_redeclaration_exception_specification (tree new_decl,
1116 tree old_decl)
1117 {
1118 tree new_type;
1119 tree old_type;
1120 tree new_exceptions;
1121 tree old_exceptions;
1122
1123 new_type = TREE_TYPE (new_decl);
1124 new_exceptions = TYPE_RAISES_EXCEPTIONS (new_type);
1125 old_type = TREE_TYPE (old_decl);
1126 old_exceptions = TYPE_RAISES_EXCEPTIONS (old_type);
1127
1128 /* [except.spec]
1129
1130 If any declaration of a function has an exception-specification,
1131 all declarations, including the definition and an explicit
1132 specialization, of that function shall have an
1133 exception-specification with the same set of type-ids. */
1134 if ((pedantic || ! DECL_IN_SYSTEM_HEADER (old_decl))
1135 && ! DECL_IS_BUILTIN (old_decl)
1136 && flag_exceptions
1137 && !comp_except_specs (new_exceptions, old_exceptions, ce_normal))
1138 {
1139 error ("declaration of %qF has a different exception specifier",
1140 new_decl);
1141 error ("from previous declaration %q+F", old_decl);
1142 }
1143 }
1144
1145 /* Return true if OLD_DECL and NEW_DECL agree on constexprness.
1146 Otherwise issue diagnostics. */
1147
1148 static bool
1149 validate_constexpr_redeclaration (tree old_decl, tree new_decl)
1150 {
1151 old_decl = STRIP_TEMPLATE (old_decl);
1152 new_decl = STRIP_TEMPLATE (new_decl);
1153 if (!VAR_OR_FUNCTION_DECL_P (old_decl)
1154 || !VAR_OR_FUNCTION_DECL_P (new_decl))
1155 return true;
1156 if (DECL_DECLARED_CONSTEXPR_P (old_decl)
1157 == DECL_DECLARED_CONSTEXPR_P (new_decl))
1158 return true;
1159 if (TREE_CODE (old_decl) == FUNCTION_DECL && DECL_BUILT_IN (old_decl))
1160 {
1161 /* Hide a built-in declaration. */
1162 DECL_DECLARED_CONSTEXPR_P (old_decl)
1163 = DECL_DECLARED_CONSTEXPR_P (new_decl);
1164 return true;
1165 }
1166 error ("redeclaration %qD differs in %<constexpr%>", new_decl);
1167 error ("from previous declaration %q+D", old_decl);
1168 return false;
1169 }
1170
1171 #define GNU_INLINE_P(fn) (DECL_DECLARED_INLINE_P (fn) \
1172 && lookup_attribute ("gnu_inline", \
1173 DECL_ATTRIBUTES (fn)))
1174
1175 /* If NEWDECL is a redeclaration of OLDDECL, merge the declarations.
1176 If the redeclaration is invalid, a diagnostic is issued, and the
1177 error_mark_node is returned. Otherwise, OLDDECL is returned.
1178
1179 If NEWDECL is not a redeclaration of OLDDECL, NULL_TREE is
1180 returned.
1181
1182 NEWDECL_IS_FRIEND is true if NEWDECL was declared as a friend. */
1183
1184 tree
1185 duplicate_decls (tree newdecl, tree olddecl, bool newdecl_is_friend)
1186 {
1187 unsigned olddecl_uid = DECL_UID (olddecl);
1188 int olddecl_friend = 0, types_match = 0, hidden_friend = 0;
1189 int new_defines_function = 0;
1190 tree new_template_info;
1191
1192 if (newdecl == olddecl)
1193 return olddecl;
1194
1195 types_match = decls_match (newdecl, olddecl);
1196
1197 /* If either the type of the new decl or the type of the old decl is an
1198 error_mark_node, then that implies that we have already issued an
1199 error (earlier) for some bogus type specification, and in that case,
1200 it is rather pointless to harass the user with yet more error message
1201 about the same declaration, so just pretend the types match here. */
1202 if (TREE_TYPE (newdecl) == error_mark_node
1203 || TREE_TYPE (olddecl) == error_mark_node)
1204 return error_mark_node;
1205
1206 if (UDLIT_OPER_P (DECL_NAME (newdecl))
1207 && UDLIT_OPER_P (DECL_NAME (olddecl)))
1208 {
1209 if (TREE_CODE (newdecl) == TEMPLATE_DECL
1210 && TREE_CODE (olddecl) != TEMPLATE_DECL
1211 && check_raw_literal_operator (olddecl))
1212 error ("literal operator template %q+D conflicts with"
1213 " raw literal operator %qD", newdecl, olddecl);
1214 else if (TREE_CODE (newdecl) != TEMPLATE_DECL
1215 && TREE_CODE (olddecl) == TEMPLATE_DECL
1216 && check_raw_literal_operator (newdecl))
1217 error ("raw literal operator %q+D conflicts with"
1218 " literal operator template %qD", newdecl, olddecl);
1219 }
1220
1221 if (DECL_P (olddecl)
1222 && TREE_CODE (newdecl) == FUNCTION_DECL
1223 && TREE_CODE (olddecl) == FUNCTION_DECL
1224 && (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl)))
1225 {
1226 if (DECL_DECLARED_INLINE_P (newdecl)
1227 && DECL_UNINLINABLE (newdecl)
1228 && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
1229 /* Already warned elsewhere. */;
1230 else if (DECL_DECLARED_INLINE_P (olddecl)
1231 && DECL_UNINLINABLE (olddecl)
1232 && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
1233 /* Already warned. */;
1234 else if (DECL_DECLARED_INLINE_P (newdecl)
1235 && DECL_UNINLINABLE (olddecl)
1236 && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
1237 {
1238 warning (OPT_Wattributes, "function %q+D redeclared as inline",
1239 newdecl);
1240 warning (OPT_Wattributes, "previous declaration of %q+D "
1241 "with attribute noinline", olddecl);
1242 }
1243 else if (DECL_DECLARED_INLINE_P (olddecl)
1244 && DECL_UNINLINABLE (newdecl)
1245 && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
1246 {
1247 warning (OPT_Wattributes, "function %q+D redeclared with "
1248 "attribute noinline", newdecl);
1249 warning (OPT_Wattributes, "previous declaration of %q+D was inline",
1250 olddecl);
1251 }
1252 }
1253
1254 /* Check for redeclaration and other discrepancies. */
1255 if (TREE_CODE (olddecl) == FUNCTION_DECL
1256 && DECL_ARTIFICIAL (olddecl))
1257 {
1258 gcc_assert (!DECL_HIDDEN_FRIEND_P (olddecl));
1259 if (TREE_CODE (newdecl) != FUNCTION_DECL)
1260 {
1261 /* Avoid warnings redeclaring built-ins which have not been
1262 explicitly declared. */
1263 if (DECL_ANTICIPATED (olddecl))
1264 return NULL_TREE;
1265
1266 /* If you declare a built-in or predefined function name as static,
1267 the old definition is overridden, but optionally warn this was a
1268 bad choice of name. */
1269 if (! TREE_PUBLIC (newdecl))
1270 {
1271 warning (OPT_Wshadow,
1272 DECL_BUILT_IN (olddecl)
1273 ? G_("shadowing built-in function %q#D")
1274 : G_("shadowing library function %q#D"), olddecl);
1275 /* Discard the old built-in function. */
1276 return NULL_TREE;
1277 }
1278 /* If the built-in is not ansi, then programs can override
1279 it even globally without an error. */
1280 else if (! DECL_BUILT_IN (olddecl))
1281 warning (0, "library function %q#D redeclared as non-function %q#D",
1282 olddecl, newdecl);
1283 else
1284 {
1285 error ("declaration of %q#D", newdecl);
1286 error ("conflicts with built-in declaration %q#D",
1287 olddecl);
1288 }
1289 return NULL_TREE;
1290 }
1291 else if (!types_match)
1292 {
1293 /* Avoid warnings redeclaring built-ins which have not been
1294 explicitly declared. */
1295 if (DECL_ANTICIPATED (olddecl))
1296 {
1297 /* Deal with fileptr_type_node. FILE type is not known
1298 at the time we create the builtins. */
1299 tree t1, t2;
1300
1301 for (t1 = TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1302 t2 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1303 t1 || t2;
1304 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
1305 if (!t1 || !t2)
1306 break;
1307 else if (TREE_VALUE (t2) == fileptr_type_node)
1308 {
1309 tree t = TREE_VALUE (t1);
1310
1311 if (TREE_CODE (t) == POINTER_TYPE
1312 && TYPE_NAME (TREE_TYPE (t))
1313 && DECL_NAME (TYPE_NAME (TREE_TYPE (t)))
1314 == get_identifier ("FILE")
1315 && compparms (TREE_CHAIN (t1), TREE_CHAIN (t2)))
1316 {
1317 tree oldargs = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1318
1319 TYPE_ARG_TYPES (TREE_TYPE (olddecl))
1320 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
1321 types_match = decls_match (newdecl, olddecl);
1322 if (types_match)
1323 return duplicate_decls (newdecl, olddecl,
1324 newdecl_is_friend);
1325 TYPE_ARG_TYPES (TREE_TYPE (olddecl)) = oldargs;
1326 }
1327 }
1328 else if (! same_type_p (TREE_VALUE (t1), TREE_VALUE (t2)))
1329 break;
1330 }
1331 else if ((DECL_EXTERN_C_P (newdecl)
1332 && DECL_EXTERN_C_P (olddecl))
1333 || compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1334 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
1335 {
1336 /* A near match; override the builtin. */
1337
1338 if (TREE_PUBLIC (newdecl))
1339 {
1340 warning (0, "new declaration %q#D", newdecl);
1341 warning (0, "ambiguates built-in declaration %q#D",
1342 olddecl);
1343 }
1344 else
1345 warning (OPT_Wshadow,
1346 DECL_BUILT_IN (olddecl)
1347 ? G_("shadowing built-in function %q#D")
1348 : G_("shadowing library function %q#D"), olddecl);
1349 }
1350 else
1351 /* Discard the old built-in function. */
1352 return NULL_TREE;
1353
1354 /* Replace the old RTL to avoid problems with inlining. */
1355 COPY_DECL_RTL (newdecl, olddecl);
1356 }
1357 /* Even if the types match, prefer the new declarations type for
1358 built-ins which have not been explicitly declared, for
1359 exception lists, etc... */
1360 else if (DECL_IS_BUILTIN (olddecl))
1361 {
1362 tree type = TREE_TYPE (newdecl);
1363 tree attribs = (*targetm.merge_type_attributes)
1364 (TREE_TYPE (olddecl), type);
1365
1366 type = cp_build_type_attribute_variant (type, attribs);
1367 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = type;
1368 }
1369
1370 /* If a function is explicitly declared "throw ()", propagate that to
1371 the corresponding builtin. */
1372 if (DECL_BUILT_IN_CLASS (olddecl) == BUILT_IN_NORMAL
1373 && DECL_ANTICIPATED (olddecl)
1374 && TREE_NOTHROW (newdecl)
1375 && !TREE_NOTHROW (olddecl))
1376 {
1377 enum built_in_function fncode = DECL_FUNCTION_CODE (olddecl);
1378 tree tmpdecl = builtin_decl_explicit (fncode);
1379 if (tmpdecl && tmpdecl != olddecl && types_match)
1380 TREE_NOTHROW (tmpdecl) = 1;
1381 }
1382
1383 /* Whether or not the builtin can throw exceptions has no
1384 bearing on this declarator. */
1385 TREE_NOTHROW (olddecl) = 0;
1386
1387 if (DECL_THIS_STATIC (newdecl) && !DECL_THIS_STATIC (olddecl))
1388 {
1389 /* If a builtin function is redeclared as `static', merge
1390 the declarations, but make the original one static. */
1391 DECL_THIS_STATIC (olddecl) = 1;
1392 TREE_PUBLIC (olddecl) = 0;
1393
1394 /* Make the old declaration consistent with the new one so
1395 that all remnants of the builtin-ness of this function
1396 will be banished. */
1397 SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
1398 COPY_DECL_RTL (newdecl, olddecl);
1399 }
1400 }
1401 else if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
1402 {
1403 /* C++ Standard, 3.3, clause 4:
1404 "[Note: a namespace name or a class template name must be unique
1405 in its declarative region (7.3.2, clause 14). ]" */
1406 if (TREE_CODE (olddecl) != NAMESPACE_DECL
1407 && TREE_CODE (newdecl) != NAMESPACE_DECL
1408 && (TREE_CODE (olddecl) != TEMPLATE_DECL
1409 || TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) != TYPE_DECL)
1410 && (TREE_CODE (newdecl) != TEMPLATE_DECL
1411 || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != TYPE_DECL))
1412 {
1413 if ((TREE_CODE (olddecl) == TYPE_DECL && DECL_ARTIFICIAL (olddecl)
1414 && TREE_CODE (newdecl) != TYPE_DECL)
1415 || (TREE_CODE (newdecl) == TYPE_DECL && DECL_ARTIFICIAL (newdecl)
1416 && TREE_CODE (olddecl) != TYPE_DECL))
1417 {
1418 /* We do nothing special here, because C++ does such nasty
1419 things with TYPE_DECLs. Instead, just let the TYPE_DECL
1420 get shadowed, and know that if we need to find a TYPE_DECL
1421 for a given name, we can look in the IDENTIFIER_TYPE_VALUE
1422 slot of the identifier. */
1423 return NULL_TREE;
1424 }
1425
1426 if ((TREE_CODE (newdecl) == FUNCTION_DECL
1427 && DECL_FUNCTION_TEMPLATE_P (olddecl))
1428 || (TREE_CODE (olddecl) == FUNCTION_DECL
1429 && DECL_FUNCTION_TEMPLATE_P (newdecl)))
1430 return NULL_TREE;
1431 }
1432
1433 error ("%q#D redeclared as different kind of symbol", newdecl);
1434 if (TREE_CODE (olddecl) == TREE_LIST)
1435 olddecl = TREE_VALUE (olddecl);
1436 error ("previous declaration of %q+#D", olddecl);
1437
1438 return error_mark_node;
1439 }
1440 else if (!types_match)
1441 {
1442 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl))
1443 /* These are certainly not duplicate declarations; they're
1444 from different scopes. */
1445 return NULL_TREE;
1446
1447 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1448 {
1449 /* The name of a class template may not be declared to refer to
1450 any other template, class, function, object, namespace, value,
1451 or type in the same scope. */
1452 if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == TYPE_DECL
1453 || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
1454 {
1455 error ("declaration of template %q#D", newdecl);
1456 error ("conflicts with previous declaration %q+#D", olddecl);
1457 }
1458 else if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == FUNCTION_DECL
1459 && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
1460 && compparms (TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl))),
1461 TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl))))
1462 && comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
1463 DECL_TEMPLATE_PARMS (olddecl))
1464 /* Template functions can be disambiguated by
1465 return type. */
1466 && same_type_p (TREE_TYPE (TREE_TYPE (newdecl)),
1467 TREE_TYPE (TREE_TYPE (olddecl))))
1468 {
1469 error ("new declaration %q#D", newdecl);
1470 error ("ambiguates old declaration %q+#D", olddecl);
1471 }
1472 return NULL_TREE;
1473 }
1474 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1475 {
1476 if (DECL_EXTERN_C_P (newdecl) && DECL_EXTERN_C_P (olddecl))
1477 {
1478 error ("declaration of C function %q#D conflicts with",
1479 newdecl);
1480 error ("previous declaration %q+#D here", olddecl);
1481 return NULL_TREE;
1482 }
1483 else if (compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1484 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
1485 {
1486 error ("new declaration %q#D", newdecl);
1487 error ("ambiguates old declaration %q+#D", olddecl);
1488 return error_mark_node;
1489 }
1490 else
1491 return NULL_TREE;
1492 }
1493 else
1494 {
1495 error ("conflicting declaration %q#D", newdecl);
1496 error ("%q+D has a previous declaration as %q#D", olddecl, olddecl);
1497 return error_mark_node;
1498 }
1499 }
1500 else if (TREE_CODE (newdecl) == FUNCTION_DECL
1501 && ((DECL_TEMPLATE_SPECIALIZATION (olddecl)
1502 && (!DECL_TEMPLATE_INFO (newdecl)
1503 || (DECL_TI_TEMPLATE (newdecl)
1504 != DECL_TI_TEMPLATE (olddecl))))
1505 || (DECL_TEMPLATE_SPECIALIZATION (newdecl)
1506 && (!DECL_TEMPLATE_INFO (olddecl)
1507 || (DECL_TI_TEMPLATE (olddecl)
1508 != DECL_TI_TEMPLATE (newdecl))))))
1509 /* It's OK to have a template specialization and a non-template
1510 with the same type, or to have specializations of two
1511 different templates with the same type. Note that if one is a
1512 specialization, and the other is an instantiation of the same
1513 template, that we do not exit at this point. That situation
1514 can occur if we instantiate a template class, and then
1515 specialize one of its methods. This situation is valid, but
1516 the declarations must be merged in the usual way. */
1517 return NULL_TREE;
1518 else if (TREE_CODE (newdecl) == FUNCTION_DECL
1519 && ((DECL_TEMPLATE_INSTANTIATION (olddecl)
1520 && !DECL_USE_TEMPLATE (newdecl))
1521 || (DECL_TEMPLATE_INSTANTIATION (newdecl)
1522 && !DECL_USE_TEMPLATE (olddecl))))
1523 /* One of the declarations is a template instantiation, and the
1524 other is not a template at all. That's OK. */
1525 return NULL_TREE;
1526 else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
1527 {
1528 /* In [namespace.alias] we have:
1529
1530 In a declarative region, a namespace-alias-definition can be
1531 used to redefine a namespace-alias declared in that declarative
1532 region to refer only to the namespace to which it already
1533 refers.
1534
1535 Therefore, if we encounter a second alias directive for the same
1536 alias, we can just ignore the second directive. */
1537 if (DECL_NAMESPACE_ALIAS (newdecl)
1538 && (DECL_NAMESPACE_ALIAS (newdecl)
1539 == DECL_NAMESPACE_ALIAS (olddecl)))
1540 return olddecl;
1541 /* [namespace.alias]
1542
1543 A namespace-name or namespace-alias shall not be declared as
1544 the name of any other entity in the same declarative region.
1545 A namespace-name defined at global scope shall not be
1546 declared as the name of any other entity in any global scope
1547 of the program. */
1548 error ("declaration of namespace %qD conflicts with", newdecl);
1549 error ("previous declaration of namespace %q+D here", olddecl);
1550 return error_mark_node;
1551 }
1552 else
1553 {
1554 const char *errmsg = redeclaration_error_message (newdecl, olddecl);
1555 if (errmsg)
1556 {
1557 error_at (DECL_SOURCE_LOCATION (newdecl), errmsg, newdecl);
1558 if (DECL_NAME (olddecl) != NULL_TREE)
1559 error ((DECL_INITIAL (olddecl) && namespace_bindings_p ())
1560 ? G_("%q+#D previously defined here")
1561 : G_("%q+#D previously declared here"), olddecl);
1562 return error_mark_node;
1563 }
1564 else if (TREE_CODE (olddecl) == FUNCTION_DECL
1565 && DECL_INITIAL (olddecl) != NULL_TREE
1566 && !prototype_p (TREE_TYPE (olddecl))
1567 && prototype_p (TREE_TYPE (newdecl)))
1568 {
1569 /* Prototype decl follows defn w/o prototype. */
1570 warning_at (input_location, 0, "prototype for %q+#D", newdecl);
1571 warning_at (DECL_SOURCE_LOCATION (olddecl), 0,
1572 "follows non-prototype definition here");
1573 }
1574 else if ((TREE_CODE (olddecl) == FUNCTION_DECL
1575 || TREE_CODE (olddecl) == VAR_DECL)
1576 && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl))
1577 {
1578 /* [dcl.link]
1579 If two declarations of the same function or object
1580 specify different linkage-specifications ..., the program
1581 is ill-formed.... Except for functions with C++ linkage,
1582 a function declaration without a linkage specification
1583 shall not precede the first linkage specification for
1584 that function. A function can be declared without a
1585 linkage specification after an explicit linkage
1586 specification has been seen; the linkage explicitly
1587 specified in the earlier declaration is not affected by
1588 such a function declaration.
1589
1590 DR 563 raises the question why the restrictions on
1591 functions should not also apply to objects. Older
1592 versions of G++ silently ignore the linkage-specification
1593 for this example:
1594
1595 namespace N {
1596 extern int i;
1597 extern "C" int i;
1598 }
1599
1600 which is clearly wrong. Therefore, we now treat objects
1601 like functions. */
1602 if (current_lang_depth () == 0)
1603 {
1604 /* There is no explicit linkage-specification, so we use
1605 the linkage from the previous declaration. */
1606 if (!DECL_LANG_SPECIFIC (newdecl))
1607 retrofit_lang_decl (newdecl);
1608 SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
1609 }
1610 else
1611 {
1612 error ("previous declaration of %q+#D with %qL linkage",
1613 olddecl, DECL_LANGUAGE (olddecl));
1614 error ("conflicts with new declaration with %qL linkage",
1615 DECL_LANGUAGE (newdecl));
1616 }
1617 }
1618
1619 if (DECL_LANG_SPECIFIC (olddecl) && DECL_USE_TEMPLATE (olddecl))
1620 ;
1621 else if (TREE_CODE (olddecl) == FUNCTION_DECL)
1622 {
1623 tree t1 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1624 tree t2 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
1625 int i = 1;
1626
1627 if (TREE_CODE (TREE_TYPE (newdecl)) == METHOD_TYPE)
1628 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2);
1629
1630 for (; t1 && t1 != void_list_node;
1631 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2), i++)
1632 if (TREE_PURPOSE (t1) && TREE_PURPOSE (t2))
1633 {
1634 if (1 == simple_cst_equal (TREE_PURPOSE (t1),
1635 TREE_PURPOSE (t2)))
1636 {
1637 permerror (input_location, "default argument given for parameter %d of %q#D",
1638 i, newdecl);
1639 permerror (input_location, "after previous specification in %q+#D", olddecl);
1640 }
1641 else
1642 {
1643 error ("default argument given for parameter %d of %q#D",
1644 i, newdecl);
1645 error ("after previous specification in %q+#D",
1646 olddecl);
1647 }
1648 }
1649 }
1650 }
1651
1652 /* Do not merge an implicit typedef with an explicit one. In:
1653
1654 class A;
1655 ...
1656 typedef class A A __attribute__ ((foo));
1657
1658 the attribute should apply only to the typedef. */
1659 if (TREE_CODE (olddecl) == TYPE_DECL
1660 && (DECL_IMPLICIT_TYPEDEF_P (olddecl)
1661 || DECL_IMPLICIT_TYPEDEF_P (newdecl)))
1662 return NULL_TREE;
1663
1664 /* If new decl is `static' and an `extern' was seen previously,
1665 warn about it. */
1666 warn_extern_redeclared_static (newdecl, olddecl);
1667
1668 if (!validate_constexpr_redeclaration (olddecl, newdecl))
1669 return error_mark_node;
1670
1671 /* We have committed to returning 1 at this point. */
1672 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1673 {
1674 /* Now that functions must hold information normally held
1675 by field decls, there is extra work to do so that
1676 declaration information does not get destroyed during
1677 definition. */
1678 if (DECL_VINDEX (olddecl))
1679 DECL_VINDEX (newdecl) = DECL_VINDEX (olddecl);
1680 if (DECL_CONTEXT (olddecl))
1681 DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
1682 DECL_STATIC_CONSTRUCTOR (newdecl) |= DECL_STATIC_CONSTRUCTOR (olddecl);
1683 DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
1684 DECL_PURE_VIRTUAL_P (newdecl) |= DECL_PURE_VIRTUAL_P (olddecl);
1685 DECL_VIRTUAL_P (newdecl) |= DECL_VIRTUAL_P (olddecl);
1686 DECL_INVALID_OVERRIDER_P (newdecl) |= DECL_INVALID_OVERRIDER_P (olddecl);
1687 DECL_THIS_STATIC (newdecl) |= DECL_THIS_STATIC (olddecl);
1688 if (DECL_OVERLOADED_OPERATOR_P (olddecl) != ERROR_MARK)
1689 SET_OVERLOADED_OPERATOR_CODE
1690 (newdecl, DECL_OVERLOADED_OPERATOR_P (olddecl));
1691 new_defines_function = DECL_INITIAL (newdecl) != NULL_TREE;
1692
1693 /* Optionally warn about more than one declaration for the same
1694 name, but don't warn about a function declaration followed by a
1695 definition. */
1696 if (warn_redundant_decls && ! DECL_ARTIFICIAL (olddecl)
1697 && !(new_defines_function && DECL_INITIAL (olddecl) == NULL_TREE)
1698 /* Don't warn about extern decl followed by definition. */
1699 && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl))
1700 /* Don't warn about friends, let add_friend take care of it. */
1701 && ! (newdecl_is_friend || DECL_FRIEND_P (olddecl)))
1702 {
1703 warning (OPT_Wredundant_decls, "redundant redeclaration of %qD in same scope", newdecl);
1704 warning (OPT_Wredundant_decls, "previous declaration of %q+D", olddecl);
1705 }
1706
1707 if (DECL_DELETED_FN (newdecl))
1708 {
1709 error ("deleted definition of %qD", newdecl);
1710 error ("after previous declaration %q+D", olddecl);
1711 }
1712 DECL_DELETED_FN (newdecl) |= DECL_DELETED_FN (olddecl);
1713 }
1714
1715 /* Deal with C++: must preserve virtual function table size. */
1716 if (TREE_CODE (olddecl) == TYPE_DECL)
1717 {
1718 tree newtype = TREE_TYPE (newdecl);
1719 tree oldtype = TREE_TYPE (olddecl);
1720
1721 if (newtype != error_mark_node && oldtype != error_mark_node
1722 && TYPE_LANG_SPECIFIC (newtype) && TYPE_LANG_SPECIFIC (oldtype))
1723 CLASSTYPE_FRIEND_CLASSES (newtype)
1724 = CLASSTYPE_FRIEND_CLASSES (oldtype);
1725
1726 DECL_ORIGINAL_TYPE (newdecl) = DECL_ORIGINAL_TYPE (olddecl);
1727 }
1728
1729 /* Copy all the DECL_... slots specified in the new decl
1730 except for any that we copy here from the old type. */
1731 DECL_ATTRIBUTES (newdecl)
1732 = (*targetm.merge_decl_attributes) (olddecl, newdecl);
1733
1734 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1735 {
1736 tree old_result;
1737 tree new_result;
1738 old_result = DECL_TEMPLATE_RESULT (olddecl);
1739 new_result = DECL_TEMPLATE_RESULT (newdecl);
1740 TREE_TYPE (olddecl) = TREE_TYPE (old_result);
1741 DECL_TEMPLATE_SPECIALIZATIONS (olddecl)
1742 = chainon (DECL_TEMPLATE_SPECIALIZATIONS (olddecl),
1743 DECL_TEMPLATE_SPECIALIZATIONS (newdecl));
1744
1745 DECL_ATTRIBUTES (old_result)
1746 = (*targetm.merge_decl_attributes) (old_result, new_result);
1747
1748 if (DECL_FUNCTION_TEMPLATE_P (newdecl))
1749 {
1750 if (GNU_INLINE_P (old_result) != GNU_INLINE_P (new_result)
1751 && DECL_INITIAL (new_result))
1752 {
1753 if (DECL_INITIAL (old_result))
1754 DECL_UNINLINABLE (old_result) = 1;
1755 else
1756 DECL_UNINLINABLE (old_result) = DECL_UNINLINABLE (new_result);
1757 DECL_EXTERNAL (old_result) = DECL_EXTERNAL (new_result);
1758 DECL_NOT_REALLY_EXTERN (old_result)
1759 = DECL_NOT_REALLY_EXTERN (new_result);
1760 DECL_INTERFACE_KNOWN (old_result)
1761 = DECL_INTERFACE_KNOWN (new_result);
1762 DECL_DECLARED_INLINE_P (old_result)
1763 = DECL_DECLARED_INLINE_P (new_result);
1764 DECL_DISREGARD_INLINE_LIMITS (old_result)
1765 |= DECL_DISREGARD_INLINE_LIMITS (new_result);
1766
1767 }
1768 else
1769 {
1770 DECL_DECLARED_INLINE_P (old_result)
1771 |= DECL_DECLARED_INLINE_P (new_result);
1772 DECL_DISREGARD_INLINE_LIMITS (old_result)
1773 |= DECL_DISREGARD_INLINE_LIMITS (new_result);
1774 check_redeclaration_exception_specification (newdecl, olddecl);
1775 }
1776 }
1777
1778 /* If the new declaration is a definition, update the file and
1779 line information on the declaration, and also make
1780 the old declaration the same definition. */
1781 if (DECL_INITIAL (new_result) != NULL_TREE)
1782 {
1783 DECL_SOURCE_LOCATION (olddecl)
1784 = DECL_SOURCE_LOCATION (old_result)
1785 = DECL_SOURCE_LOCATION (newdecl);
1786 DECL_INITIAL (old_result) = DECL_INITIAL (new_result);
1787 if (DECL_FUNCTION_TEMPLATE_P (newdecl))
1788 {
1789 tree parm;
1790 DECL_ARGUMENTS (old_result)
1791 = DECL_ARGUMENTS (new_result);
1792 for (parm = DECL_ARGUMENTS (old_result); parm;
1793 parm = DECL_CHAIN (parm))
1794 DECL_CONTEXT (parm) = old_result;
1795 }
1796 }
1797
1798 return olddecl;
1799 }
1800
1801 if (types_match)
1802 {
1803 /* Automatically handles default parameters. */
1804 tree oldtype = TREE_TYPE (olddecl);
1805 tree newtype;
1806
1807 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1808 maybe_instantiate_noexcept (olddecl);
1809
1810 /* Merge the data types specified in the two decls. */
1811 newtype = merge_types (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
1812
1813 /* If merge_types produces a non-typedef type, just use the old type. */
1814 if (TREE_CODE (newdecl) == TYPE_DECL
1815 && newtype == DECL_ORIGINAL_TYPE (newdecl))
1816 newtype = oldtype;
1817
1818 if (TREE_CODE (newdecl) == VAR_DECL)
1819 {
1820 DECL_THIS_EXTERN (newdecl) |= DECL_THIS_EXTERN (olddecl);
1821 DECL_INITIALIZED_P (newdecl) |= DECL_INITIALIZED_P (olddecl);
1822 DECL_NONTRIVIALLY_INITIALIZED_P (newdecl)
1823 |= DECL_NONTRIVIALLY_INITIALIZED_P (olddecl);
1824 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (newdecl)
1825 |= DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (olddecl);
1826
1827 /* Merge the threadprivate attribute from OLDDECL into NEWDECL. */
1828 if (DECL_LANG_SPECIFIC (olddecl)
1829 && CP_DECL_THREADPRIVATE_P (olddecl))
1830 {
1831 /* Allocate a LANG_SPECIFIC structure for NEWDECL, if needed. */
1832 if (!DECL_LANG_SPECIFIC (newdecl))
1833 retrofit_lang_decl (newdecl);
1834
1835 DECL_TLS_MODEL (newdecl) = DECL_TLS_MODEL (olddecl);
1836 CP_DECL_THREADPRIVATE_P (newdecl) = 1;
1837 }
1838 }
1839
1840 /* Do this after calling `merge_types' so that default
1841 parameters don't confuse us. */
1842 else if (TREE_CODE (newdecl) == FUNCTION_DECL)
1843 check_redeclaration_exception_specification (newdecl, olddecl);
1844 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
1845
1846 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1847 check_default_args (newdecl);
1848
1849 /* Lay the type out, unless already done. */
1850 if (! same_type_p (newtype, oldtype)
1851 && TREE_TYPE (newdecl) != error_mark_node
1852 && !(processing_template_decl && uses_template_parms (newdecl)))
1853 layout_type (TREE_TYPE (newdecl));
1854
1855 if ((TREE_CODE (newdecl) == VAR_DECL
1856 || TREE_CODE (newdecl) == PARM_DECL
1857 || TREE_CODE (newdecl) == RESULT_DECL
1858 || TREE_CODE (newdecl) == FIELD_DECL
1859 || TREE_CODE (newdecl) == TYPE_DECL)
1860 && !(processing_template_decl && uses_template_parms (newdecl)))
1861 layout_decl (newdecl, 0);
1862
1863 /* Merge the type qualifiers. */
1864 if (TREE_READONLY (newdecl))
1865 TREE_READONLY (olddecl) = 1;
1866 if (TREE_THIS_VOLATILE (newdecl))
1867 TREE_THIS_VOLATILE (olddecl) = 1;
1868 if (TREE_NOTHROW (newdecl))
1869 TREE_NOTHROW (olddecl) = 1;
1870
1871 /* Merge deprecatedness. */
1872 if (TREE_DEPRECATED (newdecl))
1873 TREE_DEPRECATED (olddecl) = 1;
1874
1875 /* Preserve function specific target and optimization options */
1876 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1877 {
1878 if (DECL_FUNCTION_SPECIFIC_TARGET (olddecl)
1879 && !DECL_FUNCTION_SPECIFIC_TARGET (newdecl))
1880 DECL_FUNCTION_SPECIFIC_TARGET (newdecl)
1881 = DECL_FUNCTION_SPECIFIC_TARGET (olddecl);
1882
1883 if (DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl)
1884 && !DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl))
1885 DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl)
1886 = DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl);
1887 }
1888
1889 /* Merge the initialization information. */
1890 if (DECL_INITIAL (newdecl) == NULL_TREE
1891 && DECL_INITIAL (olddecl) != NULL_TREE)
1892 {
1893 DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
1894 DECL_SOURCE_LOCATION (newdecl) = DECL_SOURCE_LOCATION (olddecl);
1895 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1896 {
1897 DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
1898 DECL_STRUCT_FUNCTION (newdecl) = DECL_STRUCT_FUNCTION (olddecl);
1899 }
1900 }
1901
1902 /* Merge the section attribute.
1903 We want to issue an error if the sections conflict but that must be
1904 done later in decl_attributes since we are called before attributes
1905 are assigned. */
1906 if (DECL_SECTION_NAME (newdecl) == NULL_TREE)
1907 DECL_SECTION_NAME (newdecl) = DECL_SECTION_NAME (olddecl);
1908
1909 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1910 {
1911 DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (newdecl)
1912 |= DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (olddecl);
1913 DECL_NO_LIMIT_STACK (newdecl) |= DECL_NO_LIMIT_STACK (olddecl);
1914 TREE_THIS_VOLATILE (newdecl) |= TREE_THIS_VOLATILE (olddecl);
1915 TREE_NOTHROW (newdecl) |= TREE_NOTHROW (olddecl);
1916 DECL_IS_MALLOC (newdecl) |= DECL_IS_MALLOC (olddecl);
1917 DECL_IS_OPERATOR_NEW (newdecl) |= DECL_IS_OPERATOR_NEW (olddecl);
1918 DECL_PURE_P (newdecl) |= DECL_PURE_P (olddecl);
1919 TREE_READONLY (newdecl) |= TREE_READONLY (olddecl);
1920 DECL_LOOPING_CONST_OR_PURE_P (newdecl)
1921 |= DECL_LOOPING_CONST_OR_PURE_P (olddecl);
1922 /* Keep the old RTL. */
1923 COPY_DECL_RTL (olddecl, newdecl);
1924 }
1925 else if (TREE_CODE (newdecl) == VAR_DECL
1926 && (DECL_SIZE (olddecl) || !DECL_SIZE (newdecl)))
1927 {
1928 /* Keep the old RTL. We cannot keep the old RTL if the old
1929 declaration was for an incomplete object and the new
1930 declaration is not since many attributes of the RTL will
1931 change. */
1932 COPY_DECL_RTL (olddecl, newdecl);
1933 }
1934 }
1935 /* If cannot merge, then use the new type and qualifiers,
1936 and don't preserve the old rtl. */
1937 else
1938 {
1939 /* Clean out any memory we had of the old declaration. */
1940 tree oldstatic = value_member (olddecl, static_aggregates);
1941 if (oldstatic)
1942 TREE_VALUE (oldstatic) = error_mark_node;
1943
1944 TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
1945 TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
1946 TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
1947 TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
1948 }
1949
1950 /* Merge the storage class information. */
1951 merge_weak (newdecl, olddecl);
1952
1953 if (DECL_ONE_ONLY (olddecl))
1954 DECL_COMDAT_GROUP (newdecl) = DECL_COMDAT_GROUP (olddecl);
1955
1956 DECL_DEFER_OUTPUT (newdecl) |= DECL_DEFER_OUTPUT (olddecl);
1957 TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
1958 TREE_STATIC (olddecl) = TREE_STATIC (newdecl) |= TREE_STATIC (olddecl);
1959 if (! DECL_EXTERNAL (olddecl))
1960 DECL_EXTERNAL (newdecl) = 0;
1961
1962 new_template_info = NULL_TREE;
1963 if (DECL_LANG_SPECIFIC (newdecl) && DECL_LANG_SPECIFIC (olddecl))
1964 {
1965 bool new_redefines_gnu_inline = false;
1966
1967 if (new_defines_function
1968 && ((DECL_INTERFACE_KNOWN (olddecl)
1969 && TREE_CODE (olddecl) == FUNCTION_DECL)
1970 || (TREE_CODE (olddecl) == TEMPLATE_DECL
1971 && (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl))
1972 == FUNCTION_DECL))))
1973 {
1974 tree fn = olddecl;
1975
1976 if (TREE_CODE (fn) == TEMPLATE_DECL)
1977 fn = DECL_TEMPLATE_RESULT (olddecl);
1978
1979 new_redefines_gnu_inline = GNU_INLINE_P (fn) && DECL_INITIAL (fn);
1980 }
1981
1982 if (!new_redefines_gnu_inline)
1983 {
1984 DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl);
1985 DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl);
1986 DECL_COMDAT (newdecl) |= DECL_COMDAT (olddecl);
1987 }
1988 DECL_TEMPLATE_INSTANTIATED (newdecl)
1989 |= DECL_TEMPLATE_INSTANTIATED (olddecl);
1990 DECL_ODR_USED (newdecl) |= DECL_ODR_USED (olddecl);
1991
1992 /* If the OLDDECL is an instantiation and/or specialization,
1993 then the NEWDECL must be too. But, it may not yet be marked
1994 as such if the caller has created NEWDECL, but has not yet
1995 figured out that it is a redeclaration. */
1996 if (!DECL_USE_TEMPLATE (newdecl))
1997 DECL_USE_TEMPLATE (newdecl) = DECL_USE_TEMPLATE (olddecl);
1998
1999 /* Don't really know how much of the language-specific
2000 values we should copy from old to new. */
2001 DECL_IN_AGGR_P (newdecl) = DECL_IN_AGGR_P (olddecl);
2002 DECL_REPO_AVAILABLE_P (newdecl) = DECL_REPO_AVAILABLE_P (olddecl);
2003 DECL_INITIALIZED_IN_CLASS_P (newdecl)
2004 |= DECL_INITIALIZED_IN_CLASS_P (olddecl);
2005
2006 if (LANG_DECL_HAS_MIN (newdecl))
2007 {
2008 DECL_LANG_SPECIFIC (newdecl)->u.min.u2 =
2009 DECL_LANG_SPECIFIC (olddecl)->u.min.u2;
2010 if (DECL_TEMPLATE_INFO (newdecl))
2011 new_template_info = DECL_TEMPLATE_INFO (newdecl);
2012 DECL_TEMPLATE_INFO (newdecl) = DECL_TEMPLATE_INFO (olddecl);
2013 }
2014 /* Only functions have these fields. */
2015 if (TREE_CODE (newdecl) == FUNCTION_DECL
2016 || DECL_FUNCTION_TEMPLATE_P (newdecl))
2017 {
2018 DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl);
2019 olddecl_friend = DECL_FRIEND_P (olddecl);
2020 hidden_friend = (DECL_ANTICIPATED (olddecl)
2021 && DECL_HIDDEN_FRIEND_P (olddecl)
2022 && newdecl_is_friend);
2023 DECL_BEFRIENDING_CLASSES (newdecl)
2024 = chainon (DECL_BEFRIENDING_CLASSES (newdecl),
2025 DECL_BEFRIENDING_CLASSES (olddecl));
2026 /* DECL_THUNKS is only valid for virtual functions,
2027 otherwise it is a DECL_FRIEND_CONTEXT. */
2028 if (DECL_VIRTUAL_P (newdecl))
2029 DECL_THUNKS (newdecl) = DECL_THUNKS (olddecl);
2030 }
2031 /* Only variables have this field. */
2032 else if (TREE_CODE (newdecl) == VAR_DECL
2033 && VAR_HAD_UNKNOWN_BOUND (olddecl))
2034 SET_VAR_HAD_UNKNOWN_BOUND (newdecl);
2035 }
2036
2037 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2038 {
2039 tree parm;
2040
2041 /* Merge parameter attributes. */
2042 tree oldarg, newarg;
2043 for (oldarg = DECL_ARGUMENTS(olddecl),
2044 newarg = DECL_ARGUMENTS(newdecl);
2045 oldarg && newarg;
2046 oldarg = DECL_CHAIN(oldarg), newarg = DECL_CHAIN(newarg)) {
2047 DECL_ATTRIBUTES (newarg)
2048 = (*targetm.merge_decl_attributes) (oldarg, newarg);
2049 DECL_ATTRIBUTES (oldarg) = DECL_ATTRIBUTES (newarg);
2050 }
2051
2052 if (DECL_TEMPLATE_INSTANTIATION (olddecl)
2053 && !DECL_TEMPLATE_INSTANTIATION (newdecl))
2054 {
2055 /* If newdecl is not a specialization, then it is not a
2056 template-related function at all. And that means that we
2057 should have exited above, returning 0. */
2058 gcc_assert (DECL_TEMPLATE_SPECIALIZATION (newdecl));
2059
2060 if (DECL_ODR_USED (olddecl))
2061 /* From [temp.expl.spec]:
2062
2063 If a template, a member template or the member of a class
2064 template is explicitly specialized then that
2065 specialization shall be declared before the first use of
2066 that specialization that would cause an implicit
2067 instantiation to take place, in every translation unit in
2068 which such a use occurs. */
2069 error ("explicit specialization of %qD after first use",
2070 olddecl);
2071
2072 SET_DECL_TEMPLATE_SPECIALIZATION (olddecl);
2073
2074 /* Don't propagate visibility from the template to the
2075 specialization here. We'll do that in determine_visibility if
2076 appropriate. */
2077 DECL_VISIBILITY_SPECIFIED (olddecl) = 0;
2078
2079 /* [temp.expl.spec/14] We don't inline explicit specialization
2080 just because the primary template says so. */
2081
2082 /* But still keep DECL_DISREGARD_INLINE_LIMITS in sync with
2083 the always_inline attribute. */
2084 if (DECL_DISREGARD_INLINE_LIMITS (olddecl)
2085 && !DECL_DISREGARD_INLINE_LIMITS (newdecl))
2086 {
2087 if (DECL_DECLARED_INLINE_P (newdecl))
2088 DECL_DISREGARD_INLINE_LIMITS (newdecl) = true;
2089 else
2090 DECL_ATTRIBUTES (newdecl)
2091 = remove_attribute ("always_inline",
2092 DECL_ATTRIBUTES (newdecl));
2093 }
2094 }
2095 else if (new_defines_function && DECL_INITIAL (olddecl))
2096 {
2097 /* Never inline re-defined extern inline functions.
2098 FIXME: this could be better handled by keeping both
2099 function as separate declarations. */
2100 DECL_UNINLINABLE (newdecl) = 1;
2101 }
2102 else
2103 {
2104 if (DECL_PENDING_INLINE_INFO (newdecl) == 0)
2105 DECL_PENDING_INLINE_INFO (newdecl) = DECL_PENDING_INLINE_INFO (olddecl);
2106
2107 DECL_DECLARED_INLINE_P (newdecl) |= DECL_DECLARED_INLINE_P (olddecl);
2108
2109 DECL_UNINLINABLE (newdecl) = DECL_UNINLINABLE (olddecl)
2110 = (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl));
2111
2112 DECL_DISREGARD_INLINE_LIMITS (newdecl)
2113 = DECL_DISREGARD_INLINE_LIMITS (olddecl)
2114 = (DECL_DISREGARD_INLINE_LIMITS (newdecl)
2115 || DECL_DISREGARD_INLINE_LIMITS (olddecl));
2116 }
2117
2118 /* Preserve abstractness on cloned [cd]tors. */
2119 DECL_ABSTRACT (newdecl) = DECL_ABSTRACT (olddecl);
2120
2121 /* Update newdecl's parms to point at olddecl. */
2122 for (parm = DECL_ARGUMENTS (newdecl); parm;
2123 parm = DECL_CHAIN (parm))
2124 DECL_CONTEXT (parm) = olddecl;
2125
2126 if (! types_match)
2127 {
2128 SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
2129 COPY_DECL_ASSEMBLER_NAME (newdecl, olddecl);
2130 COPY_DECL_RTL (newdecl, olddecl);
2131 }
2132 if (! types_match || new_defines_function)
2133 {
2134 /* These need to be copied so that the names are available.
2135 Note that if the types do match, we'll preserve inline
2136 info and other bits, but if not, we won't. */
2137 DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
2138 DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
2139 }
2140 if (new_defines_function)
2141 /* If defining a function declared with other language
2142 linkage, use the previously declared language linkage. */
2143 SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
2144 else if (types_match)
2145 {
2146 /* If redeclaring a builtin function, and not a definition,
2147 it stays built in. */
2148 if (DECL_BUILT_IN (olddecl))
2149 {
2150 DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
2151 DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
2152 /* If we're keeping the built-in definition, keep the rtl,
2153 regardless of declaration matches. */
2154 COPY_DECL_RTL (olddecl, newdecl);
2155 if (DECL_BUILT_IN_CLASS (newdecl) == BUILT_IN_NORMAL)
2156 {
2157 enum built_in_function fncode = DECL_FUNCTION_CODE (newdecl);
2158 switch (fncode)
2159 {
2160 /* If a compatible prototype of these builtin functions
2161 is seen, assume the runtime implements it with the
2162 expected semantics. */
2163 case BUILT_IN_STPCPY:
2164 if (builtin_decl_explicit_p (fncode))
2165 set_builtin_decl_implicit_p (fncode, true);
2166 break;
2167 default:
2168 break;
2169 }
2170 }
2171 }
2172
2173 DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
2174 /* Don't clear out the arguments if we're just redeclaring a
2175 function. */
2176 if (DECL_ARGUMENTS (olddecl))
2177 DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
2178 }
2179 }
2180 else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
2181 NAMESPACE_LEVEL (newdecl) = NAMESPACE_LEVEL (olddecl);
2182
2183 /* Now preserve various other info from the definition. */
2184 TREE_ADDRESSABLE (newdecl) = TREE_ADDRESSABLE (olddecl);
2185 TREE_ASM_WRITTEN (newdecl) = TREE_ASM_WRITTEN (olddecl);
2186 DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
2187 COPY_DECL_ASSEMBLER_NAME (olddecl, newdecl);
2188
2189 /* Warn about conflicting visibility specifications. */
2190 if (DECL_VISIBILITY_SPECIFIED (olddecl)
2191 && DECL_VISIBILITY_SPECIFIED (newdecl)
2192 && DECL_VISIBILITY (newdecl) != DECL_VISIBILITY (olddecl))
2193 {
2194 warning_at (input_location, OPT_Wattributes,
2195 "%q+D: visibility attribute ignored because it", newdecl);
2196 warning_at (DECL_SOURCE_LOCATION (olddecl), OPT_Wattributes,
2197 "conflicts with previous declaration here");
2198 }
2199 /* Choose the declaration which specified visibility. */
2200 if (DECL_VISIBILITY_SPECIFIED (olddecl))
2201 {
2202 DECL_VISIBILITY (newdecl) = DECL_VISIBILITY (olddecl);
2203 DECL_VISIBILITY_SPECIFIED (newdecl) = 1;
2204 }
2205 /* Init priority used to be merged from newdecl to olddecl by the memcpy,
2206 so keep this behavior. */
2207 if (TREE_CODE (newdecl) == VAR_DECL && DECL_HAS_INIT_PRIORITY_P (newdecl))
2208 {
2209 SET_DECL_INIT_PRIORITY (olddecl, DECL_INIT_PRIORITY (newdecl));
2210 DECL_HAS_INIT_PRIORITY_P (olddecl) = 1;
2211 }
2212 /* Likewise for DECL_USER_ALIGN and DECL_PACKED. */
2213 DECL_USER_ALIGN (olddecl) = DECL_USER_ALIGN (newdecl);
2214 if (TREE_CODE (newdecl) == FIELD_DECL)
2215 DECL_PACKED (olddecl) = DECL_PACKED (newdecl);
2216
2217 /* The DECL_LANG_SPECIFIC information in OLDDECL will be replaced
2218 with that from NEWDECL below. */
2219 if (DECL_LANG_SPECIFIC (olddecl))
2220 {
2221 gcc_assert (DECL_LANG_SPECIFIC (olddecl)
2222 != DECL_LANG_SPECIFIC (newdecl));
2223 ggc_free (DECL_LANG_SPECIFIC (olddecl));
2224 }
2225
2226 /* Merge the USED information. */
2227 if (TREE_USED (olddecl))
2228 TREE_USED (newdecl) = 1;
2229 else if (TREE_USED (newdecl))
2230 TREE_USED (olddecl) = 1;
2231 if (TREE_CODE (newdecl) == VAR_DECL)
2232 {
2233 if (DECL_READ_P (olddecl))
2234 DECL_READ_P (newdecl) = 1;
2235 else if (DECL_READ_P (newdecl))
2236 DECL_READ_P (olddecl) = 1;
2237 }
2238 if (DECL_PRESERVE_P (olddecl))
2239 DECL_PRESERVE_P (newdecl) = 1;
2240 else if (DECL_PRESERVE_P (newdecl))
2241 DECL_PRESERVE_P (olddecl) = 1;
2242
2243 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2244 {
2245 int function_size;
2246
2247 function_size = sizeof (struct tree_decl_common);
2248
2249 memcpy ((char *) olddecl + sizeof (struct tree_common),
2250 (char *) newdecl + sizeof (struct tree_common),
2251 function_size - sizeof (struct tree_common));
2252
2253 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2254 (char *) newdecl + sizeof (struct tree_decl_common),
2255 sizeof (struct tree_function_decl) - sizeof (struct tree_decl_common));
2256 if (new_template_info)
2257 /* If newdecl is a template instantiation, it is possible that
2258 the following sequence of events has occurred:
2259
2260 o A friend function was declared in a class template. The
2261 class template was instantiated.
2262
2263 o The instantiation of the friend declaration was
2264 recorded on the instantiation list, and is newdecl.
2265
2266 o Later, however, instantiate_class_template called pushdecl
2267 on the newdecl to perform name injection. But, pushdecl in
2268 turn called duplicate_decls when it discovered that another
2269 declaration of a global function with the same name already
2270 existed.
2271
2272 o Here, in duplicate_decls, we decided to clobber newdecl.
2273
2274 If we're going to do that, we'd better make sure that
2275 olddecl, and not newdecl, is on the list of
2276 instantiations so that if we try to do the instantiation
2277 again we won't get the clobbered declaration. */
2278 reregister_specialization (newdecl,
2279 new_template_info,
2280 olddecl);
2281 }
2282 else
2283 {
2284 size_t size = tree_code_size (TREE_CODE (olddecl));
2285 memcpy ((char *) olddecl + sizeof (struct tree_common),
2286 (char *) newdecl + sizeof (struct tree_common),
2287 sizeof (struct tree_decl_common) - sizeof (struct tree_common));
2288 switch (TREE_CODE (olddecl))
2289 {
2290 case LABEL_DECL:
2291 case VAR_DECL:
2292 case RESULT_DECL:
2293 case PARM_DECL:
2294 case FIELD_DECL:
2295 case TYPE_DECL:
2296 case CONST_DECL:
2297 {
2298 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2299 (char *) newdecl + sizeof (struct tree_decl_common),
2300 size - sizeof (struct tree_decl_common)
2301 + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
2302 }
2303 break;
2304 default:
2305 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2306 (char *) newdecl + sizeof (struct tree_decl_common),
2307 sizeof (struct tree_decl_non_common) - sizeof (struct tree_decl_common)
2308 + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
2309 break;
2310 }
2311 }
2312 DECL_UID (olddecl) = olddecl_uid;
2313 if (olddecl_friend)
2314 DECL_FRIEND_P (olddecl) = 1;
2315 if (hidden_friend)
2316 {
2317 DECL_ANTICIPATED (olddecl) = 1;
2318 DECL_HIDDEN_FRIEND_P (olddecl) = 1;
2319 }
2320
2321 /* NEWDECL contains the merged attribute lists.
2322 Update OLDDECL to be the same. */
2323 DECL_ATTRIBUTES (olddecl) = DECL_ATTRIBUTES (newdecl);
2324
2325 /* If OLDDECL had its DECL_RTL instantiated, re-invoke make_decl_rtl
2326 so that encode_section_info has a chance to look at the new decl
2327 flags and attributes. */
2328 if (DECL_RTL_SET_P (olddecl)
2329 && (TREE_CODE (olddecl) == FUNCTION_DECL
2330 || (TREE_CODE (olddecl) == VAR_DECL
2331 && TREE_STATIC (olddecl))))
2332 make_decl_rtl (olddecl);
2333
2334 /* The NEWDECL will no longer be needed. Because every out-of-class
2335 declaration of a member results in a call to duplicate_decls,
2336 freeing these nodes represents in a significant savings. */
2337 ggc_free (newdecl);
2338
2339 return olddecl;
2340 }
2341 \f
2342 /* Return zero if the declaration NEWDECL is valid
2343 when the declaration OLDDECL (assumed to be for the same name)
2344 has already been seen.
2345 Otherwise return an error message format string with a %s
2346 where the identifier should go. */
2347
2348 static const char *
2349 redeclaration_error_message (tree newdecl, tree olddecl)
2350 {
2351 if (TREE_CODE (newdecl) == TYPE_DECL)
2352 {
2353 /* Because C++ can put things into name space for free,
2354 constructs like "typedef struct foo { ... } foo"
2355 would look like an erroneous redeclaration. */
2356 if (same_type_p (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
2357 return NULL;
2358 else
2359 return G_("redefinition of %q#D");
2360 }
2361 else if (TREE_CODE (newdecl) == FUNCTION_DECL)
2362 {
2363 /* If this is a pure function, its olddecl will actually be
2364 the original initialization to `0' (which we force to call
2365 abort()). Don't complain about redefinition in this case. */
2366 if (DECL_LANG_SPECIFIC (olddecl) && DECL_PURE_VIRTUAL_P (olddecl)
2367 && DECL_INITIAL (olddecl) == NULL_TREE)
2368 return NULL;
2369
2370 /* If both functions come from different namespaces, this is not
2371 a redeclaration - this is a conflict with a used function. */
2372 if (DECL_NAMESPACE_SCOPE_P (olddecl)
2373 && DECL_CONTEXT (olddecl) != DECL_CONTEXT (newdecl)
2374 && ! decls_match (olddecl, newdecl))
2375 return G_("%qD conflicts with used function");
2376
2377 /* We'll complain about linkage mismatches in
2378 warn_extern_redeclared_static. */
2379
2380 /* Defining the same name twice is no good. */
2381 if (DECL_INITIAL (olddecl) != NULL_TREE
2382 && DECL_INITIAL (newdecl) != NULL_TREE)
2383 {
2384 if (DECL_NAME (olddecl) == NULL_TREE)
2385 return G_("%q#D not declared in class");
2386 else if (!GNU_INLINE_P (olddecl)
2387 || GNU_INLINE_P (newdecl))
2388 return G_("redefinition of %q#D");
2389 }
2390
2391 if (DECL_DECLARED_INLINE_P (olddecl) && DECL_DECLARED_INLINE_P (newdecl))
2392 {
2393 bool olda = GNU_INLINE_P (olddecl);
2394 bool newa = GNU_INLINE_P (newdecl);
2395
2396 if (olda != newa)
2397 {
2398 if (newa)
2399 return G_("%q+D redeclared inline with "
2400 "%<gnu_inline%> attribute");
2401 else
2402 return G_("%q+D redeclared inline without "
2403 "%<gnu_inline%> attribute");
2404 }
2405 }
2406
2407 return NULL;
2408 }
2409 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
2410 {
2411 tree nt, ot;
2412
2413 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
2414 {
2415 if (COMPLETE_TYPE_P (TREE_TYPE (newdecl))
2416 && COMPLETE_TYPE_P (TREE_TYPE (olddecl)))
2417 return G_("redefinition of %q#D");
2418 return NULL;
2419 }
2420
2421 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != FUNCTION_DECL
2422 || (DECL_TEMPLATE_RESULT (newdecl)
2423 == DECL_TEMPLATE_RESULT (olddecl)))
2424 return NULL;
2425
2426 nt = DECL_TEMPLATE_RESULT (newdecl);
2427 if (DECL_TEMPLATE_INFO (nt))
2428 nt = DECL_TEMPLATE_RESULT (template_for_substitution (nt));
2429 ot = DECL_TEMPLATE_RESULT (olddecl);
2430 if (DECL_TEMPLATE_INFO (ot))
2431 ot = DECL_TEMPLATE_RESULT (template_for_substitution (ot));
2432 if (DECL_INITIAL (nt) && DECL_INITIAL (ot)
2433 && (!GNU_INLINE_P (ot) || GNU_INLINE_P (nt)))
2434 return G_("redefinition of %q#D");
2435
2436 if (DECL_DECLARED_INLINE_P (ot) && DECL_DECLARED_INLINE_P (nt))
2437 {
2438 bool olda = GNU_INLINE_P (ot);
2439 bool newa = GNU_INLINE_P (nt);
2440
2441 if (olda != newa)
2442 {
2443 if (newa)
2444 return G_("%q+D redeclared inline with "
2445 "%<gnu_inline%> attribute");
2446 else
2447 return G_("%q+D redeclared inline without "
2448 "%<gnu_inline%> attribute");
2449 }
2450 }
2451
2452 /* Core issue #226 (C++0x):
2453
2454 If a friend function template declaration specifies a
2455 default template-argument, that declaration shall be a
2456 definition and shall be the only declaration of the
2457 function template in the translation unit. */
2458 if ((cxx_dialect != cxx98)
2459 && TREE_CODE (ot) == FUNCTION_DECL && DECL_FRIEND_P (ot)
2460 && !check_default_tmpl_args (nt, DECL_TEMPLATE_PARMS (newdecl),
2461 /*is_primary=*/1, /*is_partial=*/0,
2462 /*is_friend_decl=*/2))
2463 return G_("redeclaration of friend %q#D "
2464 "may not have default template arguments");
2465
2466 return NULL;
2467 }
2468 else if (TREE_CODE (newdecl) == VAR_DECL
2469 && DECL_THREAD_LOCAL_P (newdecl) != DECL_THREAD_LOCAL_P (olddecl)
2470 && (! DECL_LANG_SPECIFIC (olddecl)
2471 || ! CP_DECL_THREADPRIVATE_P (olddecl)
2472 || DECL_THREAD_LOCAL_P (newdecl)))
2473 {
2474 /* Only variables can be thread-local, and all declarations must
2475 agree on this property. */
2476 if (DECL_THREAD_LOCAL_P (newdecl))
2477 return G_("thread-local declaration of %q#D follows "
2478 "non-thread-local declaration");
2479 else
2480 return G_("non-thread-local declaration of %q#D follows "
2481 "thread-local declaration");
2482 }
2483 else if (toplevel_bindings_p () || DECL_NAMESPACE_SCOPE_P (newdecl))
2484 {
2485 /* The objects have been declared at namespace scope. If either
2486 is a member of an anonymous union, then this is an invalid
2487 redeclaration. For example:
2488
2489 int i;
2490 union { int i; };
2491
2492 is invalid. */
2493 if ((TREE_CODE (newdecl) == VAR_DECL && DECL_ANON_UNION_VAR_P (newdecl))
2494 || (TREE_CODE (olddecl) == VAR_DECL && DECL_ANON_UNION_VAR_P (olddecl)))
2495 return G_("redeclaration of %q#D");
2496 /* If at least one declaration is a reference, there is no
2497 conflict. For example:
2498
2499 int i = 3;
2500 extern int i;
2501
2502 is valid. */
2503 if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl))
2504 return NULL;
2505 /* Reject two definitions. */
2506 return G_("redefinition of %q#D");
2507 }
2508 else
2509 {
2510 /* Objects declared with block scope: */
2511 /* Reject two definitions, and reject a definition
2512 together with an external reference. */
2513 if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl)))
2514 return G_("redeclaration of %q#D");
2515 return NULL;
2516 }
2517 }
2518 \f
2519 /* Hash and equality functions for the named_label table. */
2520
2521 static hashval_t
2522 named_label_entry_hash (const void *data)
2523 {
2524 const struct named_label_entry *ent = (const struct named_label_entry *) data;
2525 return DECL_UID (ent->label_decl);
2526 }
2527
2528 static int
2529 named_label_entry_eq (const void *a, const void *b)
2530 {
2531 const struct named_label_entry *ent_a = (const struct named_label_entry *) a;
2532 const struct named_label_entry *ent_b = (const struct named_label_entry *) b;
2533 return ent_a->label_decl == ent_b->label_decl;
2534 }
2535
2536 /* Create a new label, named ID. */
2537
2538 static tree
2539 make_label_decl (tree id, int local_p)
2540 {
2541 struct named_label_entry *ent;
2542 void **slot;
2543 tree decl;
2544
2545 decl = build_decl (input_location, LABEL_DECL, id, void_type_node);
2546
2547 DECL_CONTEXT (decl) = current_function_decl;
2548 DECL_MODE (decl) = VOIDmode;
2549 C_DECLARED_LABEL_FLAG (decl) = local_p;
2550
2551 /* Say where one reference is to the label, for the sake of the
2552 error if it is not defined. */
2553 DECL_SOURCE_LOCATION (decl) = input_location;
2554
2555 /* Record the fact that this identifier is bound to this label. */
2556 SET_IDENTIFIER_LABEL_VALUE (id, decl);
2557
2558 /* Create the label htab for the function on demand. */
2559 if (!named_labels)
2560 named_labels = htab_create_ggc (13, named_label_entry_hash,
2561 named_label_entry_eq, NULL);
2562
2563 /* Record this label on the list of labels used in this function.
2564 We do this before calling make_label_decl so that we get the
2565 IDENTIFIER_LABEL_VALUE before the new label is declared. */
2566 ent = ggc_alloc_cleared_named_label_entry ();
2567 ent->label_decl = decl;
2568
2569 slot = htab_find_slot (named_labels, ent, INSERT);
2570 gcc_assert (*slot == NULL);
2571 *slot = ent;
2572
2573 return decl;
2574 }
2575
2576 /* Look for a label named ID in the current function. If one cannot
2577 be found, create one. (We keep track of used, but undefined,
2578 labels, and complain about them at the end of a function.) */
2579
2580 static tree
2581 lookup_label_1 (tree id)
2582 {
2583 tree decl;
2584
2585 /* You can't use labels at global scope. */
2586 if (current_function_decl == NULL_TREE)
2587 {
2588 error ("label %qE referenced outside of any function", id);
2589 return NULL_TREE;
2590 }
2591
2592 /* See if we've already got this label. */
2593 decl = IDENTIFIER_LABEL_VALUE (id);
2594 if (decl != NULL_TREE && DECL_CONTEXT (decl) == current_function_decl)
2595 return decl;
2596
2597 decl = make_label_decl (id, /*local_p=*/0);
2598 return decl;
2599 }
2600
2601 /* Wrapper for lookup_label_1. */
2602
2603 tree
2604 lookup_label (tree id)
2605 {
2606 tree ret;
2607 bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
2608 ret = lookup_label_1 (id);
2609 timevar_cond_stop (TV_NAME_LOOKUP, subtime);
2610 return ret;
2611 }
2612
2613 /* Declare a local label named ID. */
2614
2615 tree
2616 declare_local_label (tree id)
2617 {
2618 tree decl;
2619 cp_label_binding *bind;
2620
2621 /* Add a new entry to the SHADOWED_LABELS list so that when we leave
2622 this scope we can restore the old value of IDENTIFIER_TYPE_VALUE. */
2623 bind = VEC_safe_push (cp_label_binding, gc,
2624 current_binding_level->shadowed_labels, NULL);
2625 bind->prev_value = IDENTIFIER_LABEL_VALUE (id);
2626
2627 decl = make_label_decl (id, /*local_p=*/1);
2628 bind->label = decl;
2629
2630 return decl;
2631 }
2632
2633 /* Returns nonzero if it is ill-formed to jump past the declaration of
2634 DECL. Returns 2 if it's also a real problem. */
2635
2636 static int
2637 decl_jump_unsafe (tree decl)
2638 {
2639 /* [stmt.dcl]/3: A program that jumps from a point where a local variable
2640 with automatic storage duration is not in scope to a point where it is
2641 in scope is ill-formed unless the variable has scalar type, class type
2642 with a trivial default constructor and a trivial destructor, a
2643 cv-qualified version of one of these types, or an array of one of the
2644 preceding types and is declared without an initializer (8.5). */
2645 tree type = TREE_TYPE (decl);
2646
2647 if (TREE_CODE (decl) != VAR_DECL || TREE_STATIC (decl)
2648 || type == error_mark_node)
2649 return 0;
2650
2651 type = strip_array_types (type);
2652
2653 if (type_has_nontrivial_default_init (TREE_TYPE (decl))
2654 || DECL_NONTRIVIALLY_INITIALIZED_P (decl))
2655 return 2;
2656
2657 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
2658 return 1;
2659
2660 return 0;
2661 }
2662
2663 /* A subroutine of check_previous_goto_1 to identify a branch to the user. */
2664
2665 static void
2666 identify_goto (tree decl, const location_t *locus)
2667 {
2668 if (decl)
2669 permerror (input_location, "jump to label %qD", decl);
2670 else
2671 permerror (input_location, "jump to case label");
2672 if (locus)
2673 permerror (*locus, " from here");
2674 }
2675
2676 /* Check that a single previously seen jump to a newly defined label
2677 is OK. DECL is the LABEL_DECL or 0; LEVEL is the binding_level for
2678 the jump context; NAMES are the names in scope in LEVEL at the jump
2679 context; LOCUS is the source position of the jump or 0. Returns
2680 true if all is well. */
2681
2682 static bool
2683 check_previous_goto_1 (tree decl, cp_binding_level* level, tree names,
2684 bool exited_omp, const location_t *locus)
2685 {
2686 cp_binding_level *b;
2687 bool identified = false, saw_eh = false, saw_omp = false;
2688
2689 if (exited_omp)
2690 {
2691 identify_goto (decl, locus);
2692 error (" exits OpenMP structured block");
2693 identified = saw_omp = true;
2694 }
2695
2696 for (b = current_binding_level; b ; b = b->level_chain)
2697 {
2698 tree new_decls, old_decls = (b == level ? names : NULL_TREE);
2699
2700 for (new_decls = b->names; new_decls != old_decls;
2701 new_decls = (DECL_P (new_decls) ? DECL_CHAIN (new_decls)
2702 : TREE_CHAIN (new_decls)))
2703 {
2704 int problem = decl_jump_unsafe (new_decls);
2705 if (! problem)
2706 continue;
2707
2708 if (!identified)
2709 {
2710 identify_goto (decl, locus);
2711 identified = true;
2712 }
2713 if (problem > 1)
2714 error (" crosses initialization of %q+#D", new_decls);
2715 else
2716 permerror (input_location, " enters scope of %q+#D which has "
2717 "non-trivial destructor", new_decls);
2718 }
2719
2720 if (b == level)
2721 break;
2722 if ((b->kind == sk_try || b->kind == sk_catch) && !saw_eh)
2723 {
2724 if (!identified)
2725 {
2726 identify_goto (decl, locus);
2727 identified = true;
2728 }
2729 if (b->kind == sk_try)
2730 error (" enters try block");
2731 else
2732 error (" enters catch block");
2733 saw_eh = true;
2734 }
2735 if (b->kind == sk_omp && !saw_omp)
2736 {
2737 if (!identified)
2738 {
2739 identify_goto (decl, locus);
2740 identified = true;
2741 }
2742 error (" enters OpenMP structured block");
2743 saw_omp = true;
2744 }
2745 }
2746
2747 return !identified;
2748 }
2749
2750 static void
2751 check_previous_goto (tree decl, struct named_label_use_entry *use)
2752 {
2753 check_previous_goto_1 (decl, use->binding_level,
2754 use->names_in_scope, use->in_omp_scope,
2755 &use->o_goto_locus);
2756 }
2757
2758 static bool
2759 check_switch_goto (cp_binding_level* level)
2760 {
2761 return check_previous_goto_1 (NULL_TREE, level, level->names, false, NULL);
2762 }
2763
2764 /* Check that a new jump to a label DECL is OK. Called by
2765 finish_goto_stmt. */
2766
2767 void
2768 check_goto (tree decl)
2769 {
2770 struct named_label_entry *ent, dummy;
2771 bool saw_catch = false, identified = false;
2772 tree bad;
2773 unsigned ix;
2774
2775 /* We can't know where a computed goto is jumping.
2776 So we assume that it's OK. */
2777 if (TREE_CODE (decl) != LABEL_DECL)
2778 return;
2779
2780 /* We didn't record any information about this label when we created it,
2781 and there's not much point since it's trivial to analyze as a return. */
2782 if (decl == cdtor_label)
2783 return;
2784
2785 dummy.label_decl = decl;
2786 ent = (struct named_label_entry *) htab_find (named_labels, &dummy);
2787 gcc_assert (ent != NULL);
2788
2789 /* If the label hasn't been defined yet, defer checking. */
2790 if (! DECL_INITIAL (decl))
2791 {
2792 struct named_label_use_entry *new_use;
2793
2794 /* Don't bother creating another use if the last goto had the
2795 same data, and will therefore create the same set of errors. */
2796 if (ent->uses
2797 && ent->uses->names_in_scope == current_binding_level->names)
2798 return;
2799
2800 new_use = ggc_alloc_named_label_use_entry ();
2801 new_use->binding_level = current_binding_level;
2802 new_use->names_in_scope = current_binding_level->names;
2803 new_use->o_goto_locus = input_location;
2804 new_use->in_omp_scope = false;
2805
2806 new_use->next = ent->uses;
2807 ent->uses = new_use;
2808 return;
2809 }
2810
2811 if (ent->in_try_scope || ent->in_catch_scope
2812 || ent->in_omp_scope || !VEC_empty (tree, ent->bad_decls))
2813 {
2814 permerror (input_location, "jump to label %q+D", decl);
2815 permerror (input_location, " from here");
2816 identified = true;
2817 }
2818
2819 FOR_EACH_VEC_ELT (tree, ent->bad_decls, ix, bad)
2820 {
2821 int u = decl_jump_unsafe (bad);
2822
2823 if (u > 1 && DECL_ARTIFICIAL (bad))
2824 {
2825 /* Can't skip init of __exception_info. */
2826 error_at (DECL_SOURCE_LOCATION (bad), " enters catch block");
2827 saw_catch = true;
2828 }
2829 else if (u > 1)
2830 error (" skips initialization of %q+#D", bad);
2831 else
2832 permerror (input_location, " enters scope of %q+#D which has "
2833 "non-trivial destructor", bad);
2834 }
2835
2836 if (ent->in_try_scope)
2837 error (" enters try block");
2838 else if (ent->in_catch_scope && !saw_catch)
2839 error (" enters catch block");
2840
2841 if (ent->in_omp_scope)
2842 error (" enters OpenMP structured block");
2843 else if (flag_openmp)
2844 {
2845 cp_binding_level *b;
2846 for (b = current_binding_level; b ; b = b->level_chain)
2847 {
2848 if (b == ent->binding_level)
2849 break;
2850 if (b->kind == sk_omp)
2851 {
2852 if (!identified)
2853 {
2854 permerror (input_location, "jump to label %q+D", decl);
2855 permerror (input_location, " from here");
2856 identified = true;
2857 }
2858 error (" exits OpenMP structured block");
2859 break;
2860 }
2861 }
2862 }
2863 }
2864
2865 /* Check that a return is ok wrt OpenMP structured blocks.
2866 Called by finish_return_stmt. Returns true if all is well. */
2867
2868 bool
2869 check_omp_return (void)
2870 {
2871 cp_binding_level *b;
2872 for (b = current_binding_level; b ; b = b->level_chain)
2873 if (b->kind == sk_omp)
2874 {
2875 error ("invalid exit from OpenMP structured block");
2876 return false;
2877 }
2878 else if (b->kind == sk_function_parms)
2879 break;
2880 return true;
2881 }
2882
2883 /* Define a label, specifying the location in the source file.
2884 Return the LABEL_DECL node for the label. */
2885
2886 static tree
2887 define_label_1 (location_t location, tree name)
2888 {
2889 struct named_label_entry *ent, dummy;
2890 cp_binding_level *p;
2891 tree decl;
2892
2893 decl = lookup_label (name);
2894
2895 dummy.label_decl = decl;
2896 ent = (struct named_label_entry *) htab_find (named_labels, &dummy);
2897 gcc_assert (ent != NULL);
2898
2899 /* After labels, make any new cleanups in the function go into their
2900 own new (temporary) binding contour. */
2901 for (p = current_binding_level;
2902 p->kind != sk_function_parms;
2903 p = p->level_chain)
2904 p->more_cleanups_ok = 0;
2905
2906 if (name == get_identifier ("wchar_t"))
2907 permerror (input_location, "label named wchar_t");
2908
2909 if (DECL_INITIAL (decl) != NULL_TREE)
2910 {
2911 error ("duplicate label %qD", decl);
2912 return error_mark_node;
2913 }
2914 else
2915 {
2916 struct named_label_use_entry *use;
2917
2918 /* Mark label as having been defined. */
2919 DECL_INITIAL (decl) = error_mark_node;
2920 /* Say where in the source. */
2921 DECL_SOURCE_LOCATION (decl) = location;
2922
2923 ent->binding_level = current_binding_level;
2924 ent->names_in_scope = current_binding_level->names;
2925
2926 for (use = ent->uses; use ; use = use->next)
2927 check_previous_goto (decl, use);
2928 ent->uses = NULL;
2929 }
2930
2931 return decl;
2932 }
2933
2934 /* Wrapper for define_label_1. */
2935
2936 tree
2937 define_label (location_t location, tree name)
2938 {
2939 tree ret;
2940 timevar_start (TV_NAME_LOOKUP);
2941 ret = define_label_1 (location, name);
2942 timevar_stop (TV_NAME_LOOKUP);
2943 return ret;
2944 }
2945
2946
2947 struct cp_switch
2948 {
2949 cp_binding_level *level;
2950 struct cp_switch *next;
2951 /* The SWITCH_STMT being built. */
2952 tree switch_stmt;
2953 /* A splay-tree mapping the low element of a case range to the high
2954 element, or NULL_TREE if there is no high element. Used to
2955 determine whether or not a new case label duplicates an old case
2956 label. We need a tree, rather than simply a hash table, because
2957 of the GNU case range extension. */
2958 splay_tree cases;
2959 };
2960
2961 /* A stack of the currently active switch statements. The innermost
2962 switch statement is on the top of the stack. There is no need to
2963 mark the stack for garbage collection because it is only active
2964 during the processing of the body of a function, and we never
2965 collect at that point. */
2966
2967 static struct cp_switch *switch_stack;
2968
2969 /* Called right after a switch-statement condition is parsed.
2970 SWITCH_STMT is the switch statement being parsed. */
2971
2972 void
2973 push_switch (tree switch_stmt)
2974 {
2975 struct cp_switch *p = XNEW (struct cp_switch);
2976 p->level = current_binding_level;
2977 p->next = switch_stack;
2978 p->switch_stmt = switch_stmt;
2979 p->cases = splay_tree_new (case_compare, NULL, NULL);
2980 switch_stack = p;
2981 }
2982
2983 void
2984 pop_switch (void)
2985 {
2986 struct cp_switch *cs = switch_stack;
2987 location_t switch_location;
2988
2989 /* Emit warnings as needed. */
2990 switch_location = EXPR_LOC_OR_HERE (cs->switch_stmt);
2991 if (!processing_template_decl)
2992 c_do_switch_warnings (cs->cases, switch_location,
2993 SWITCH_STMT_TYPE (cs->switch_stmt),
2994 SWITCH_STMT_COND (cs->switch_stmt));
2995
2996 splay_tree_delete (cs->cases);
2997 switch_stack = switch_stack->next;
2998 free (cs);
2999 }
3000
3001 /* Convert a case constant VALUE in a switch to the type TYPE of the switch
3002 condition. Note that if TYPE and VALUE are already integral we don't
3003 really do the conversion because the language-independent
3004 warning/optimization code will work better that way. */
3005
3006 static tree
3007 case_conversion (tree type, tree value)
3008 {
3009 if (value == NULL_TREE)
3010 return value;
3011
3012 if (cxx_dialect >= cxx0x
3013 && (SCOPED_ENUM_P (type)
3014 || !INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (TREE_TYPE (value))))
3015 {
3016 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
3017 type = type_promotes_to (type);
3018 value = perform_implicit_conversion (type, value, tf_warning_or_error);
3019 }
3020 return cxx_constant_value (value);
3021 }
3022
3023 /* Note that we've seen a definition of a case label, and complain if this
3024 is a bad place for one. */
3025
3026 tree
3027 finish_case_label (location_t loc, tree low_value, tree high_value)
3028 {
3029 tree cond, r;
3030 cp_binding_level *p;
3031 tree type;
3032
3033 if (processing_template_decl)
3034 {
3035 tree label;
3036
3037 /* For templates, just add the case label; we'll do semantic
3038 analysis at instantiation-time. */
3039 label = build_decl (loc, LABEL_DECL, NULL_TREE, NULL_TREE);
3040 return add_stmt (build_case_label (low_value, high_value, label));
3041 }
3042
3043 /* Find the condition on which this switch statement depends. */
3044 cond = SWITCH_STMT_COND (switch_stack->switch_stmt);
3045 if (cond && TREE_CODE (cond) == TREE_LIST)
3046 cond = TREE_VALUE (cond);
3047
3048 if (!check_switch_goto (switch_stack->level))
3049 return error_mark_node;
3050
3051 type = SWITCH_STMT_TYPE (switch_stack->switch_stmt);
3052
3053 low_value = case_conversion (type, low_value);
3054 high_value = case_conversion (type, high_value);
3055
3056 r = c_add_case_label (loc, switch_stack->cases, cond, type,
3057 low_value, high_value);
3058
3059 /* After labels, make any new cleanups in the function go into their
3060 own new (temporary) binding contour. */
3061 for (p = current_binding_level;
3062 p->kind != sk_function_parms;
3063 p = p->level_chain)
3064 p->more_cleanups_ok = 0;
3065
3066 return r;
3067 }
3068 \f
3069 /* Hash a TYPENAME_TYPE. K is really of type `tree'. */
3070
3071 static hashval_t
3072 typename_hash (const void* k)
3073 {
3074 hashval_t hash;
3075 const_tree const t = (const_tree) k;
3076
3077 hash = (htab_hash_pointer (TYPE_CONTEXT (t))
3078 ^ htab_hash_pointer (DECL_NAME (TYPE_NAME (t))));
3079
3080 return hash;
3081 }
3082
3083 typedef struct typename_info {
3084 tree scope;
3085 tree name;
3086 tree template_id;
3087 bool enum_p;
3088 bool class_p;
3089 } typename_info;
3090
3091 /* Compare two TYPENAME_TYPEs. K1 is really of type `tree', K2 is
3092 really of type `typename_info*' */
3093
3094 static int
3095 typename_compare (const void * k1, const void * k2)
3096 {
3097 const_tree const t1 = (const_tree) k1;
3098 const typename_info *const t2 = (const typename_info *) k2;
3099
3100 return (DECL_NAME (TYPE_NAME (t1)) == t2->name
3101 && TYPE_CONTEXT (t1) == t2->scope
3102 && TYPENAME_TYPE_FULLNAME (t1) == t2->template_id
3103 && TYPENAME_IS_ENUM_P (t1) == t2->enum_p
3104 && TYPENAME_IS_CLASS_P (t1) == t2->class_p);
3105 }
3106
3107 /* Build a TYPENAME_TYPE. If the type is `typename T::t', CONTEXT is
3108 the type of `T', NAME is the IDENTIFIER_NODE for `t'.
3109
3110 Returns the new TYPENAME_TYPE. */
3111
3112 static GTY ((param_is (union tree_node))) htab_t typename_htab;
3113
3114 static tree
3115 build_typename_type (tree context, tree name, tree fullname,
3116 enum tag_types tag_type)
3117 {
3118 tree t;
3119 tree d;
3120 typename_info ti;
3121 void **e;
3122 hashval_t hash;
3123
3124 if (typename_htab == NULL)
3125 typename_htab = htab_create_ggc (61, &typename_hash,
3126 &typename_compare, NULL);
3127
3128 ti.scope = FROB_CONTEXT (context);
3129 ti.name = name;
3130 ti.template_id = fullname;
3131 ti.enum_p = tag_type == enum_type;
3132 ti.class_p = (tag_type == class_type
3133 || tag_type == record_type
3134 || tag_type == union_type);
3135 hash = (htab_hash_pointer (ti.scope)
3136 ^ htab_hash_pointer (ti.name));
3137
3138 /* See if we already have this type. */
3139 e = htab_find_slot_with_hash (typename_htab, &ti, hash, INSERT);
3140 if (*e)
3141 t = (tree) *e;
3142 else
3143 {
3144 /* Build the TYPENAME_TYPE. */
3145 t = cxx_make_type (TYPENAME_TYPE);
3146 TYPE_CONTEXT (t) = ti.scope;
3147 TYPENAME_TYPE_FULLNAME (t) = ti.template_id;
3148 TYPENAME_IS_ENUM_P (t) = ti.enum_p;
3149 TYPENAME_IS_CLASS_P (t) = ti.class_p;
3150
3151 /* Build the corresponding TYPE_DECL. */
3152 d = build_decl (input_location, TYPE_DECL, name, t);
3153 TYPE_NAME (TREE_TYPE (d)) = d;
3154 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
3155 DECL_CONTEXT (d) = FROB_CONTEXT (context);
3156 DECL_ARTIFICIAL (d) = 1;
3157
3158 /* Store it in the hash table. */
3159 *e = t;
3160
3161 /* TYPENAME_TYPEs must always be compared structurally, because
3162 they may or may not resolve down to another type depending on
3163 the currently open classes. */
3164 SET_TYPE_STRUCTURAL_EQUALITY (t);
3165 }
3166
3167 return t;
3168 }
3169
3170 /* Resolve `typename CONTEXT::NAME'. TAG_TYPE indicates the tag
3171 provided to name the type. Returns an appropriate type, unless an
3172 error occurs, in which case error_mark_node is returned. If we
3173 locate a non-artificial TYPE_DECL and TF_KEEP_TYPE_DECL is set, we
3174 return that, rather than the _TYPE it corresponds to, in other
3175 cases we look through the type decl. If TF_ERROR is set, complain
3176 about errors, otherwise be quiet. */
3177
3178 tree
3179 make_typename_type (tree context, tree name, enum tag_types tag_type,
3180 tsubst_flags_t complain)
3181 {
3182 tree fullname;
3183 tree t;
3184 bool want_template;
3185
3186 if (name == error_mark_node
3187 || context == NULL_TREE
3188 || context == error_mark_node)
3189 return error_mark_node;
3190
3191 if (TYPE_P (name))
3192 {
3193 if (!(TYPE_LANG_SPECIFIC (name)
3194 && (CLASSTYPE_IS_TEMPLATE (name)
3195 || CLASSTYPE_USE_TEMPLATE (name))))
3196 name = TYPE_IDENTIFIER (name);
3197 else
3198 /* Create a TEMPLATE_ID_EXPR for the type. */
3199 name = build_nt (TEMPLATE_ID_EXPR,
3200 CLASSTYPE_TI_TEMPLATE (name),
3201 CLASSTYPE_TI_ARGS (name));
3202 }
3203 else if (TREE_CODE (name) == TYPE_DECL)
3204 name = DECL_NAME (name);
3205
3206 fullname = name;
3207
3208 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
3209 {
3210 name = TREE_OPERAND (name, 0);
3211 if (TREE_CODE (name) == TEMPLATE_DECL)
3212 name = TREE_OPERAND (fullname, 0) = DECL_NAME (name);
3213 else if (TREE_CODE (name) == OVERLOAD)
3214 {
3215 error ("%qD is not a type", name);
3216 return error_mark_node;
3217 }
3218 }
3219 if (TREE_CODE (name) == TEMPLATE_DECL)
3220 {
3221 error ("%qD used without template parameters", name);
3222 return error_mark_node;
3223 }
3224 gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
3225 gcc_assert (TYPE_P (context));
3226
3227 if (!MAYBE_CLASS_TYPE_P (context))
3228 {
3229 if (complain & tf_error)
3230 error ("%q#T is not a class", context);
3231 return error_mark_node;
3232 }
3233
3234 /* When the CONTEXT is a dependent type, NAME could refer to a
3235 dependent base class of CONTEXT. But look inside it anyway
3236 if CONTEXT is a currently open scope, in case it refers to a
3237 member of the current instantiation or a non-dependent base;
3238 lookup will stop when we hit a dependent base. */
3239 if (!dependent_scope_p (context))
3240 /* We should only set WANT_TYPE when we're a nested typename type.
3241 Then we can give better diagnostics if we find a non-type. */
3242 t = lookup_field (context, name, 2, /*want_type=*/true);
3243 else
3244 t = NULL_TREE;
3245
3246 if ((!t || TREE_CODE (t) == TREE_LIST) && dependent_type_p (context))
3247 return build_typename_type (context, name, fullname, tag_type);
3248
3249 want_template = TREE_CODE (fullname) == TEMPLATE_ID_EXPR;
3250
3251 if (!t)
3252 {
3253 if (complain & tf_error)
3254 error (want_template ? G_("no class template named %q#T in %q#T")
3255 : G_("no type named %q#T in %q#T"), name, context);
3256 return error_mark_node;
3257 }
3258
3259 /* Pull out the template from an injected-class-name (or multiple). */
3260 if (want_template)
3261 t = maybe_get_template_decl_from_type_decl (t);
3262
3263 if (TREE_CODE (t) == TREE_LIST)
3264 {
3265 if (complain & tf_error)
3266 {
3267 error ("lookup of %qT in %qT is ambiguous", name, context);
3268 print_candidates (t);
3269 }
3270 return error_mark_node;
3271 }
3272
3273 if (want_template && !DECL_TYPE_TEMPLATE_P (t))
3274 {
3275 if (complain & tf_error)
3276 error ("%<typename %T::%D%> names %q#T, which is not a class template",
3277 context, name, t);
3278 return error_mark_node;
3279 }
3280 if (!want_template && TREE_CODE (t) != TYPE_DECL)
3281 {
3282 if (complain & tf_error)
3283 error ("%<typename %T::%D%> names %q#T, which is not a type",
3284 context, name, t);
3285 return error_mark_node;
3286 }
3287
3288 if (complain & tf_error)
3289 perform_or_defer_access_check (TYPE_BINFO (context), t, t);
3290
3291 /* If we are currently parsing a template and if T is a typedef accessed
3292 through CONTEXT then we need to remember and check access of T at
3293 template instantiation time. */
3294 add_typedef_to_current_template_for_access_check (t, context, input_location);
3295
3296 if (want_template)
3297 return lookup_template_class (t, TREE_OPERAND (fullname, 1),
3298 NULL_TREE, context,
3299 /*entering_scope=*/0,
3300 tf_warning_or_error | tf_user);
3301
3302 if (DECL_ARTIFICIAL (t) || !(complain & tf_keep_type_decl))
3303 t = TREE_TYPE (t);
3304
3305 return t;
3306 }
3307
3308 /* Resolve `CONTEXT::template NAME'. Returns a TEMPLATE_DECL if the name
3309 can be resolved or an UNBOUND_CLASS_TEMPLATE, unless an error occurs,
3310 in which case error_mark_node is returned.
3311
3312 If PARM_LIST is non-NULL, also make sure that the template parameter
3313 list of TEMPLATE_DECL matches.
3314
3315 If COMPLAIN zero, don't complain about any errors that occur. */
3316
3317 tree
3318 make_unbound_class_template (tree context, tree name, tree parm_list,
3319 tsubst_flags_t complain)
3320 {
3321 tree t;
3322 tree d;
3323
3324 if (TYPE_P (name))
3325 name = TYPE_IDENTIFIER (name);
3326 else if (DECL_P (name))
3327 name = DECL_NAME (name);
3328 gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
3329
3330 if (!dependent_type_p (context)
3331 || currently_open_class (context))
3332 {
3333 tree tmpl = NULL_TREE;
3334
3335 if (MAYBE_CLASS_TYPE_P (context))
3336 tmpl = lookup_field (context, name, 0, false);
3337
3338 if (tmpl && TREE_CODE (tmpl) == TYPE_DECL)
3339 tmpl = maybe_get_template_decl_from_type_decl (tmpl);
3340
3341 if (!tmpl || !DECL_TYPE_TEMPLATE_P (tmpl))
3342 {
3343 if (complain & tf_error)
3344 error ("no class template named %q#T in %q#T", name, context);
3345 return error_mark_node;
3346 }
3347
3348 if (parm_list
3349 && !comp_template_parms (DECL_TEMPLATE_PARMS (tmpl), parm_list))
3350 {
3351 if (complain & tf_error)
3352 {
3353 error ("template parameters do not match template");
3354 error ("%q+D declared here", tmpl);
3355 }
3356 return error_mark_node;
3357 }
3358
3359 if (complain & tf_error)
3360 perform_or_defer_access_check (TYPE_BINFO (context), tmpl, tmpl);
3361
3362 return tmpl;
3363 }
3364
3365 /* Build the UNBOUND_CLASS_TEMPLATE. */
3366 t = cxx_make_type (UNBOUND_CLASS_TEMPLATE);
3367 TYPE_CONTEXT (t) = FROB_CONTEXT (context);
3368 TREE_TYPE (t) = NULL_TREE;
3369 SET_TYPE_STRUCTURAL_EQUALITY (t);
3370
3371 /* Build the corresponding TEMPLATE_DECL. */
3372 d = build_decl (input_location, TEMPLATE_DECL, name, t);
3373 TYPE_NAME (TREE_TYPE (d)) = d;
3374 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
3375 DECL_CONTEXT (d) = FROB_CONTEXT (context);
3376 DECL_ARTIFICIAL (d) = 1;
3377 DECL_TEMPLATE_PARMS (d) = parm_list;
3378
3379 return t;
3380 }
3381
3382 \f
3383
3384 /* Push the declarations of builtin types into the namespace.
3385 RID_INDEX is the index of the builtin type in the array
3386 RID_POINTERS. NAME is the name used when looking up the builtin
3387 type. TYPE is the _TYPE node for the builtin type. */
3388
3389 void
3390 record_builtin_type (enum rid rid_index,
3391 const char* name,
3392 tree type)
3393 {
3394 tree rname = NULL_TREE, tname = NULL_TREE;
3395 tree tdecl = NULL_TREE;
3396
3397 if ((int) rid_index < (int) RID_MAX)
3398 rname = ridpointers[(int) rid_index];
3399 if (name)
3400 tname = get_identifier (name);
3401
3402 /* The calls to SET_IDENTIFIER_GLOBAL_VALUE below should be
3403 eliminated. Built-in types should not be looked up name; their
3404 names are keywords that the parser can recognize. However, there
3405 is code in c-common.c that uses identifier_global_value to look
3406 up built-in types by name. */
3407 if (tname)
3408 {
3409 tdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, tname, type);
3410 DECL_ARTIFICIAL (tdecl) = 1;
3411 SET_IDENTIFIER_GLOBAL_VALUE (tname, tdecl);
3412 }
3413 if (rname)
3414 {
3415 if (!tdecl)
3416 {
3417 tdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, rname, type);
3418 DECL_ARTIFICIAL (tdecl) = 1;
3419 }
3420 SET_IDENTIFIER_GLOBAL_VALUE (rname, tdecl);
3421 }
3422
3423 if (!TYPE_NAME (type))
3424 TYPE_NAME (type) = tdecl;
3425
3426 if (tdecl)
3427 debug_hooks->type_decl (tdecl, 0);
3428 }
3429
3430 /* Record one of the standard Java types.
3431 * Declare it as having the given NAME.
3432 * If SIZE > 0, it is the size of one of the integral types;
3433 * otherwise it is the negative of the size of one of the other types. */
3434
3435 static tree
3436 record_builtin_java_type (const char* name, int size)
3437 {
3438 tree type, decl;
3439 if (size > 0)
3440 {
3441 type = build_nonstandard_integer_type (size, 0);
3442 type = build_distinct_type_copy (type);
3443 }
3444 else if (size > -32)
3445 {
3446 tree stype;
3447 /* "__java_char" or ""__java_boolean". */
3448 type = build_nonstandard_integer_type (-size, 1);
3449 type = build_distinct_type_copy (type);
3450 /* Get the signed type cached and attached to the unsigned type,
3451 so it doesn't get garbage-collected at "random" times,
3452 causing potential codegen differences out of different UIDs
3453 and different alias set numbers. */
3454 stype = build_nonstandard_integer_type (-size, 0);
3455 stype = build_distinct_type_copy (stype);
3456 TREE_CHAIN (type) = stype;
3457 /*if (size == -1) TREE_SET_CODE (type, BOOLEAN_TYPE);*/
3458 }
3459 else
3460 { /* "__java_float" or ""__java_double". */
3461 type = make_node (REAL_TYPE);
3462 TYPE_PRECISION (type) = - size;
3463 layout_type (type);
3464 }
3465 record_builtin_type (RID_MAX, name, type);
3466 decl = TYPE_NAME (type);
3467
3468 /* Suppress generate debug symbol entries for these types,
3469 since for normal C++ they are just clutter.
3470 However, push_lang_context undoes this if extern "Java" is seen. */
3471 DECL_IGNORED_P (decl) = 1;
3472
3473 TYPE_FOR_JAVA (type) = 1;
3474 return type;
3475 }
3476
3477 /* Push a type into the namespace so that the back ends ignore it. */
3478
3479 static void
3480 record_unknown_type (tree type, const char* name)
3481 {
3482 tree decl = pushdecl (build_decl (UNKNOWN_LOCATION,
3483 TYPE_DECL, get_identifier (name), type));
3484 /* Make sure the "unknown type" typedecl gets ignored for debug info. */
3485 DECL_IGNORED_P (decl) = 1;
3486 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
3487 TYPE_SIZE (type) = TYPE_SIZE (void_type_node);
3488 TYPE_ALIGN (type) = 1;
3489 TYPE_USER_ALIGN (type) = 0;
3490 SET_TYPE_MODE (type, TYPE_MODE (void_type_node));
3491 }
3492
3493 /* A string for which we should create an IDENTIFIER_NODE at
3494 startup. */
3495
3496 typedef struct predefined_identifier
3497 {
3498 /* The name of the identifier. */
3499 const char *const name;
3500 /* The place where the IDENTIFIER_NODE should be stored. */
3501 tree *const node;
3502 /* Nonzero if this is the name of a constructor or destructor. */
3503 const int ctor_or_dtor_p;
3504 } predefined_identifier;
3505
3506 /* Create all the predefined identifiers. */
3507
3508 static void
3509 initialize_predefined_identifiers (void)
3510 {
3511 const predefined_identifier *pid;
3512
3513 /* A table of identifiers to create at startup. */
3514 static const predefined_identifier predefined_identifiers[] = {
3515 { "C++", &lang_name_cplusplus, 0 },
3516 { "C", &lang_name_c, 0 },
3517 { "Java", &lang_name_java, 0 },
3518 /* Some of these names have a trailing space so that it is
3519 impossible for them to conflict with names written by users. */
3520 { "__ct ", &ctor_identifier, 1 },
3521 { "__base_ctor ", &base_ctor_identifier, 1 },
3522 { "__comp_ctor ", &complete_ctor_identifier, 1 },
3523 { "__dt ", &dtor_identifier, 1 },
3524 { "__comp_dtor ", &complete_dtor_identifier, 1 },
3525 { "__base_dtor ", &base_dtor_identifier, 1 },
3526 { "__deleting_dtor ", &deleting_dtor_identifier, 1 },
3527 { IN_CHARGE_NAME, &in_charge_identifier, 0 },
3528 { "nelts", &nelts_identifier, 0 },
3529 { THIS_NAME, &this_identifier, 0 },
3530 { VTABLE_DELTA_NAME, &delta_identifier, 0 },
3531 { VTABLE_PFN_NAME, &pfn_identifier, 0 },
3532 { "_vptr", &vptr_identifier, 0 },
3533 { "__vtt_parm", &vtt_parm_identifier, 0 },
3534 { "::", &global_scope_name, 0 },
3535 { "std", &std_identifier, 0 },
3536 { NULL, NULL, 0 }
3537 };
3538
3539 for (pid = predefined_identifiers; pid->name; ++pid)
3540 {
3541 *pid->node = get_identifier (pid->name);
3542 if (pid->ctor_or_dtor_p)
3543 IDENTIFIER_CTOR_OR_DTOR_P (*pid->node) = 1;
3544 }
3545 }
3546
3547 /* Create the predefined scalar types of C,
3548 and some nodes representing standard constants (0, 1, (void *)0).
3549 Initialize the global binding level.
3550 Make definitions for built-in primitive functions. */
3551
3552 void
3553 cxx_init_decl_processing (void)
3554 {
3555 tree void_ftype;
3556 tree void_ftype_ptr;
3557
3558 /* Create all the identifiers we need. */
3559 initialize_predefined_identifiers ();
3560
3561 /* Create the global variables. */
3562 push_to_top_level ();
3563
3564 current_function_decl = NULL_TREE;
3565 current_binding_level = NULL;
3566 /* Enter the global namespace. */
3567 gcc_assert (global_namespace == NULL_TREE);
3568 global_namespace = build_lang_decl (NAMESPACE_DECL, global_scope_name,
3569 void_type_node);
3570 DECL_CONTEXT (global_namespace) = build_translation_unit_decl (NULL_TREE);
3571 TREE_PUBLIC (global_namespace) = 1;
3572 begin_scope (sk_namespace, global_namespace);
3573
3574 if (flag_visibility_ms_compat)
3575 default_visibility = VISIBILITY_HIDDEN;
3576
3577 /* Initially, C. */
3578 current_lang_name = lang_name_c;
3579
3580 /* Create the `std' namespace. */
3581 push_namespace (std_identifier);
3582 std_node = current_namespace;
3583 pop_namespace ();
3584
3585 c_common_nodes_and_builtins ();
3586
3587 java_byte_type_node = record_builtin_java_type ("__java_byte", 8);
3588 java_short_type_node = record_builtin_java_type ("__java_short", 16);
3589 java_int_type_node = record_builtin_java_type ("__java_int", 32);
3590 java_long_type_node = record_builtin_java_type ("__java_long", 64);
3591 java_float_type_node = record_builtin_java_type ("__java_float", -32);
3592 java_double_type_node = record_builtin_java_type ("__java_double", -64);
3593 java_char_type_node = record_builtin_java_type ("__java_char", -16);
3594 java_boolean_type_node = record_builtin_java_type ("__java_boolean", -1);
3595
3596 integer_two_node = build_int_cst (NULL_TREE, 2);
3597
3598 record_builtin_type (RID_BOOL, "bool", boolean_type_node);
3599 truthvalue_type_node = boolean_type_node;
3600 truthvalue_false_node = boolean_false_node;
3601 truthvalue_true_node = boolean_true_node;
3602
3603 empty_except_spec = build_tree_list (NULL_TREE, NULL_TREE);
3604 noexcept_true_spec = build_tree_list (boolean_true_node, NULL_TREE);
3605 noexcept_false_spec = build_tree_list (boolean_false_node, NULL_TREE);
3606
3607 #if 0
3608 record_builtin_type (RID_MAX, NULL, string_type_node);
3609 #endif
3610
3611 delta_type_node = ptrdiff_type_node;
3612 vtable_index_type = ptrdiff_type_node;
3613
3614 vtt_parm_type = build_pointer_type (const_ptr_type_node);
3615 void_ftype = build_function_type_list (void_type_node, NULL_TREE);
3616 void_ftype_ptr = build_function_type_list (void_type_node,
3617 ptr_type_node, NULL_TREE);
3618 void_ftype_ptr
3619 = build_exception_variant (void_ftype_ptr, empty_except_spec);
3620
3621 /* C++ extensions */
3622
3623 unknown_type_node = make_node (LANG_TYPE);
3624 record_unknown_type (unknown_type_node, "unknown type");
3625
3626 /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node. */
3627 TREE_TYPE (unknown_type_node) = unknown_type_node;
3628
3629 /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
3630 result. */
3631 TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
3632 TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
3633
3634 init_list_type_node = make_node (LANG_TYPE);
3635 record_unknown_type (init_list_type_node, "init list");
3636
3637 dependent_lambda_return_type_node = make_node (LANG_TYPE);
3638 record_unknown_type (dependent_lambda_return_type_node,
3639 "undeduced lambda return type");
3640
3641 {
3642 /* Make sure we get a unique function type, so we can give
3643 its pointer type a name. (This wins for gdb.) */
3644 tree vfunc_type = make_node (FUNCTION_TYPE);
3645 TREE_TYPE (vfunc_type) = integer_type_node;
3646 TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
3647 layout_type (vfunc_type);
3648
3649 vtable_entry_type = build_pointer_type (vfunc_type);
3650 }
3651 record_builtin_type (RID_MAX, VTBL_PTR_TYPE, vtable_entry_type);
3652
3653 vtbl_type_node
3654 = build_cplus_array_type (vtable_entry_type, NULL_TREE);
3655 layout_type (vtbl_type_node);
3656 vtbl_type_node = cp_build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
3657 record_builtin_type (RID_MAX, NULL, vtbl_type_node);
3658 vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
3659 layout_type (vtbl_ptr_type_node);
3660 record_builtin_type (RID_MAX, NULL, vtbl_ptr_type_node);
3661
3662 push_namespace (get_identifier ("__cxxabiv1"));
3663 abi_node = current_namespace;
3664 pop_namespace ();
3665
3666 global_type_node = make_node (LANG_TYPE);
3667 record_unknown_type (global_type_node, "global type");
3668
3669 /* Now, C++. */
3670 current_lang_name = lang_name_cplusplus;
3671
3672 {
3673 tree newattrs, extvisattr;
3674 tree newtype, deltype;
3675 tree ptr_ftype_sizetype;
3676 tree new_eh_spec;
3677
3678 ptr_ftype_sizetype
3679 = build_function_type_list (ptr_type_node, size_type_node, NULL_TREE);
3680 if (cxx_dialect == cxx98)
3681 {
3682 tree bad_alloc_id;
3683 tree bad_alloc_type_node;
3684 tree bad_alloc_decl;
3685
3686 push_namespace (std_identifier);
3687 bad_alloc_id = get_identifier ("bad_alloc");
3688 bad_alloc_type_node = make_class_type (RECORD_TYPE);
3689 TYPE_CONTEXT (bad_alloc_type_node) = current_namespace;
3690 bad_alloc_decl
3691 = create_implicit_typedef (bad_alloc_id, bad_alloc_type_node);
3692 DECL_CONTEXT (bad_alloc_decl) = current_namespace;
3693 pop_namespace ();
3694
3695 new_eh_spec
3696 = add_exception_specifier (NULL_TREE, bad_alloc_type_node, -1);
3697 }
3698 else
3699 new_eh_spec = noexcept_false_spec;
3700
3701 /* Ensure attribs.c is initialized. */
3702 init_attributes ();
3703 extvisattr = build_tree_list (get_identifier ("externally_visible"),
3704 NULL_TREE);
3705 newattrs = tree_cons (get_identifier ("alloc_size"),
3706 build_tree_list (NULL_TREE, integer_one_node),
3707 extvisattr);
3708 newtype = cp_build_type_attribute_variant (ptr_ftype_sizetype, newattrs);
3709 newtype = build_exception_variant (newtype, new_eh_spec);
3710 deltype = cp_build_type_attribute_variant (void_ftype_ptr, extvisattr);
3711 deltype = build_exception_variant (deltype, empty_except_spec);
3712 push_cp_library_fn (NEW_EXPR, newtype);
3713 push_cp_library_fn (VEC_NEW_EXPR, newtype);
3714 global_delete_fndecl = push_cp_library_fn (DELETE_EXPR, deltype);
3715 push_cp_library_fn (VEC_DELETE_EXPR, deltype);
3716
3717 nullptr_type_node = make_node (NULLPTR_TYPE);
3718 TYPE_SIZE (nullptr_type_node) = bitsize_int (GET_MODE_BITSIZE (ptr_mode));
3719 TYPE_SIZE_UNIT (nullptr_type_node) = size_int (GET_MODE_SIZE (ptr_mode));
3720 TYPE_UNSIGNED (nullptr_type_node) = 1;
3721 TYPE_PRECISION (nullptr_type_node) = GET_MODE_BITSIZE (ptr_mode);
3722 SET_TYPE_MODE (nullptr_type_node, ptr_mode);
3723 record_builtin_type (RID_MAX, "decltype(nullptr)", nullptr_type_node);
3724 nullptr_node = build_int_cst (nullptr_type_node, 0);
3725 }
3726
3727 abort_fndecl
3728 = build_library_fn_ptr ("__cxa_pure_virtual", void_ftype);
3729
3730 /* Perform other language dependent initializations. */
3731 init_class_processing ();
3732 init_rtti_processing ();
3733 init_template_processing ();
3734
3735 if (flag_exceptions)
3736 init_exception_processing ();
3737
3738 if (! supports_one_only ())
3739 flag_weak = 0;
3740
3741 make_fname_decl = cp_make_fname_decl;
3742 start_fname_decls ();
3743
3744 /* Show we use EH for cleanups. */
3745 if (flag_exceptions)
3746 using_eh_for_cleanups ();
3747 }
3748
3749 /* Generate an initializer for a function naming variable from
3750 NAME. NAME may be NULL, to indicate a dependent name. TYPE_P is
3751 filled in with the type of the init. */
3752
3753 tree
3754 cp_fname_init (const char* name, tree *type_p)
3755 {
3756 tree domain = NULL_TREE;
3757 tree type;
3758 tree init = NULL_TREE;
3759 size_t length = 0;
3760
3761 if (name)
3762 {
3763 length = strlen (name);
3764 domain = build_index_type (size_int (length));
3765 init = build_string (length + 1, name);
3766 }
3767
3768 type = cp_build_qualified_type (char_type_node, TYPE_QUAL_CONST);
3769 type = build_cplus_array_type (type, domain);
3770
3771 *type_p = type;
3772
3773 if (init)
3774 TREE_TYPE (init) = type;
3775 else
3776 init = error_mark_node;
3777
3778 return init;
3779 }
3780
3781 /* Create the VAR_DECL for __FUNCTION__ etc. ID is the name to give
3782 the decl, LOC is the location to give the decl, NAME is the
3783 initialization string and TYPE_DEP indicates whether NAME depended
3784 on the type of the function. We make use of that to detect
3785 __PRETTY_FUNCTION__ inside a template fn. This is being done lazily
3786 at the point of first use, so we mustn't push the decl now. */
3787
3788 static tree
3789 cp_make_fname_decl (location_t loc, tree id, int type_dep)
3790 {
3791 const char *const name = (type_dep && processing_template_decl
3792 ? NULL : fname_as_string (type_dep));
3793 tree type;
3794 tree init = cp_fname_init (name, &type);
3795 tree decl = build_decl (loc, VAR_DECL, id, type);
3796
3797 if (name)
3798 free (CONST_CAST (char *, name));
3799
3800 /* As we're using pushdecl_with_scope, we must set the context. */
3801 DECL_CONTEXT (decl) = current_function_decl;
3802 DECL_PRETTY_FUNCTION_P (decl) = type_dep;
3803
3804 TREE_STATIC (decl) = 1;
3805 TREE_READONLY (decl) = 1;
3806 DECL_ARTIFICIAL (decl) = 1;
3807
3808 TREE_USED (decl) = 1;
3809
3810 if (current_function_decl)
3811 {
3812 cp_binding_level *b = current_binding_level;
3813 if (b->kind == sk_function_parms)
3814 return error_mark_node;
3815 while (b->level_chain->kind != sk_function_parms)
3816 b = b->level_chain;
3817 pushdecl_with_scope (decl, b, /*is_friend=*/false);
3818 cp_finish_decl (decl, init, /*init_const_expr_p=*/false, NULL_TREE,
3819 LOOKUP_ONLYCONVERTING);
3820 }
3821 else
3822 {
3823 DECL_THIS_STATIC (decl) = true;
3824 pushdecl_top_level_and_finish (decl, init);
3825 }
3826
3827 return decl;
3828 }
3829
3830 static tree
3831 builtin_function_1 (tree decl, tree context, bool is_global)
3832 {
3833 tree id = DECL_NAME (decl);
3834 const char *name = IDENTIFIER_POINTER (id);
3835
3836 retrofit_lang_decl (decl);
3837
3838 DECL_ARTIFICIAL (decl) = 1;
3839 SET_OVERLOADED_OPERATOR_CODE (decl, ERROR_MARK);
3840 SET_DECL_LANGUAGE (decl, lang_c);
3841 /* Runtime library routines are, by definition, available in an
3842 external shared object. */
3843 DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
3844 DECL_VISIBILITY_SPECIFIED (decl) = 1;
3845
3846 DECL_CONTEXT (decl) = context;
3847
3848 if (is_global)
3849 pushdecl_top_level (decl);
3850 else
3851 pushdecl (decl);
3852
3853 /* A function in the user's namespace should have an explicit
3854 declaration before it is used. Mark the built-in function as
3855 anticipated but not actually declared. */
3856 if (name[0] != '_' || name[1] != '_')
3857 DECL_ANTICIPATED (decl) = 1;
3858 else if (strncmp (name + 2, "builtin_", strlen ("builtin_")) != 0)
3859 {
3860 size_t len = strlen (name);
3861
3862 /* Treat __*_chk fortification functions as anticipated as well,
3863 unless they are __builtin_*. */
3864 if (len > strlen ("___chk")
3865 && memcmp (name + len - strlen ("_chk"),
3866 "_chk", strlen ("_chk") + 1) == 0)
3867 DECL_ANTICIPATED (decl) = 1;
3868 }
3869
3870 return decl;
3871 }
3872
3873 tree
3874 cxx_builtin_function (tree decl)
3875 {
3876 tree id = DECL_NAME (decl);
3877 const char *name = IDENTIFIER_POINTER (id);
3878 /* All builtins that don't begin with an '_' should additionally
3879 go in the 'std' namespace. */
3880 if (name[0] != '_')
3881 {
3882 tree decl2 = copy_node(decl);
3883 push_namespace (std_identifier);
3884 builtin_function_1 (decl2, std_node, false);
3885 pop_namespace ();
3886 }
3887
3888 return builtin_function_1 (decl, NULL_TREE, false);
3889 }
3890
3891 /* Like cxx_builtin_function, but guarantee the function is added to the global
3892 scope. This is to allow function specific options to add new machine
3893 dependent builtins when the target ISA changes via attribute((target(...)))
3894 which saves space on program startup if the program does not use non-generic
3895 ISAs. */
3896
3897 tree
3898 cxx_builtin_function_ext_scope (tree decl)
3899 {
3900
3901 tree id = DECL_NAME (decl);
3902 const char *name = IDENTIFIER_POINTER (id);
3903 /* All builtins that don't begin with an '_' should additionally
3904 go in the 'std' namespace. */
3905 if (name[0] != '_')
3906 {
3907 tree decl2 = copy_node(decl);
3908 push_namespace (std_identifier);
3909 builtin_function_1 (decl2, std_node, true);
3910 pop_namespace ();
3911 }
3912
3913 return builtin_function_1 (decl, NULL_TREE, true);
3914 }
3915
3916 /* Generate a FUNCTION_DECL with the typical flags for a runtime library
3917 function. Not called directly. */
3918
3919 static tree
3920 build_library_fn_1 (tree name, enum tree_code operator_code, tree type)
3921 {
3922 tree fn = build_lang_decl (FUNCTION_DECL, name, type);
3923 DECL_EXTERNAL (fn) = 1;
3924 TREE_PUBLIC (fn) = 1;
3925 DECL_ARTIFICIAL (fn) = 1;
3926 SET_OVERLOADED_OPERATOR_CODE (fn, operator_code);
3927 SET_DECL_LANGUAGE (fn, lang_c);
3928 /* Runtime library routines are, by definition, available in an
3929 external shared object. */
3930 DECL_VISIBILITY (fn) = VISIBILITY_DEFAULT;
3931 DECL_VISIBILITY_SPECIFIED (fn) = 1;
3932 return fn;
3933 }
3934
3935 /* Returns the _DECL for a library function with C linkage.
3936 We assume that such functions never throw; if this is incorrect,
3937 callers should unset TREE_NOTHROW. */
3938
3939 static tree
3940 build_library_fn (tree name, tree type)
3941 {
3942 tree fn = build_library_fn_1 (name, ERROR_MARK, type);
3943 TREE_NOTHROW (fn) = 1;
3944 return fn;
3945 }
3946
3947 /* Returns the _DECL for a library function with C++ linkage. */
3948
3949 static tree
3950 build_cp_library_fn (tree name, enum tree_code operator_code, tree type)
3951 {
3952 tree fn = build_library_fn_1 (name, operator_code, type);
3953 TREE_NOTHROW (fn) = TYPE_NOTHROW_P (type);
3954 DECL_CONTEXT (fn) = FROB_CONTEXT (current_namespace);
3955 SET_DECL_LANGUAGE (fn, lang_cplusplus);
3956 return fn;
3957 }
3958
3959 /* Like build_library_fn, but takes a C string instead of an
3960 IDENTIFIER_NODE. */
3961
3962 tree
3963 build_library_fn_ptr (const char* name, tree type)
3964 {
3965 return build_library_fn (get_identifier (name), type);
3966 }
3967
3968 /* Like build_cp_library_fn, but takes a C string instead of an
3969 IDENTIFIER_NODE. */
3970
3971 tree
3972 build_cp_library_fn_ptr (const char* name, tree type)
3973 {
3974 return build_cp_library_fn (get_identifier (name), ERROR_MARK, type);
3975 }
3976
3977 /* Like build_library_fn, but also pushes the function so that we will
3978 be able to find it via IDENTIFIER_GLOBAL_VALUE. Also, the function
3979 may throw exceptions listed in RAISES. */
3980
3981 tree
3982 push_library_fn (tree name, tree type, tree raises)
3983 {
3984 tree fn;
3985
3986 if (raises)
3987 type = build_exception_variant (type, raises);
3988
3989 fn = build_library_fn (name, type);
3990 pushdecl_top_level (fn);
3991 return fn;
3992 }
3993
3994 /* Like build_cp_library_fn, but also pushes the function so that it
3995 will be found by normal lookup. */
3996
3997 static tree
3998 push_cp_library_fn (enum tree_code operator_code, tree type)
3999 {
4000 tree fn = build_cp_library_fn (ansi_opname (operator_code),
4001 operator_code,
4002 type);
4003 pushdecl (fn);
4004 if (flag_tm)
4005 apply_tm_attr (fn, get_identifier ("transaction_safe"));
4006 return fn;
4007 }
4008
4009 /* Like push_library_fn, but takes a TREE_LIST of parm types rather than
4010 a FUNCTION_TYPE. */
4011
4012 tree
4013 push_void_library_fn (tree name, tree parmtypes)
4014 {
4015 tree type = build_function_type (void_type_node, parmtypes);
4016 return push_library_fn (name, type, NULL_TREE);
4017 }
4018
4019 /* Like push_library_fn, but also note that this function throws
4020 and does not return. Used for __throw_foo and the like. */
4021
4022 tree
4023 push_throw_library_fn (tree name, tree type)
4024 {
4025 tree fn = push_library_fn (name, type, NULL_TREE);
4026 TREE_THIS_VOLATILE (fn) = 1;
4027 TREE_NOTHROW (fn) = 0;
4028 return fn;
4029 }
4030 \f
4031 /* When we call finish_struct for an anonymous union, we create
4032 default copy constructors and such. But, an anonymous union
4033 shouldn't have such things; this function undoes the damage to the
4034 anonymous union type T.
4035
4036 (The reason that we create the synthesized methods is that we don't
4037 distinguish `union { int i; }' from `typedef union { int i; } U'.
4038 The first is an anonymous union; the second is just an ordinary
4039 union type.) */
4040
4041 void
4042 fixup_anonymous_aggr (tree t)
4043 {
4044 tree *q;
4045
4046 /* Wipe out memory of synthesized methods. */
4047 TYPE_HAS_USER_CONSTRUCTOR (t) = 0;
4048 TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
4049 TYPE_HAS_COPY_CTOR (t) = 0;
4050 TYPE_HAS_CONST_COPY_CTOR (t) = 0;
4051 TYPE_HAS_COPY_ASSIGN (t) = 0;
4052 TYPE_HAS_CONST_COPY_ASSIGN (t) = 0;
4053
4054 /* Splice the implicitly generated functions out of the TYPE_METHODS
4055 list. */
4056 q = &TYPE_METHODS (t);
4057 while (*q)
4058 {
4059 if (DECL_ARTIFICIAL (*q))
4060 *q = TREE_CHAIN (*q);
4061 else
4062 q = &DECL_CHAIN (*q);
4063 }
4064
4065 /* ISO C++ 9.5.3. Anonymous unions may not have function members. */
4066 if (TYPE_METHODS (t))
4067 {
4068 tree decl = TYPE_MAIN_DECL (t);
4069
4070 if (TREE_CODE (t) != UNION_TYPE)
4071 error_at (DECL_SOURCE_LOCATION (decl),
4072 "an anonymous struct cannot have function members");
4073 else
4074 error_at (DECL_SOURCE_LOCATION (decl),
4075 "an anonymous union cannot have function members");
4076 }
4077
4078 /* Anonymous aggregates cannot have fields with ctors, dtors or complex
4079 assignment operators (because they cannot have these methods themselves).
4080 For anonymous unions this is already checked because they are not allowed
4081 in any union, otherwise we have to check it. */
4082 if (TREE_CODE (t) != UNION_TYPE)
4083 {
4084 tree field, type;
4085
4086 for (field = TYPE_FIELDS (t); field; field = DECL_CHAIN (field))
4087 if (TREE_CODE (field) == FIELD_DECL)
4088 {
4089 type = TREE_TYPE (field);
4090 if (CLASS_TYPE_P (type))
4091 {
4092 if (TYPE_NEEDS_CONSTRUCTING (type))
4093 error ("member %q+#D with constructor not allowed "
4094 "in anonymous aggregate", field);
4095 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
4096 error ("member %q+#D with destructor not allowed "
4097 "in anonymous aggregate", field);
4098 if (TYPE_HAS_COMPLEX_COPY_ASSIGN (type))
4099 error ("member %q+#D with copy assignment operator "
4100 "not allowed in anonymous aggregate", field);
4101 }
4102 }
4103 }
4104 }
4105
4106 /* Make sure that a declaration with no declarator is well-formed, i.e.
4107 just declares a tagged type or anonymous union.
4108
4109 Returns the type declared; or NULL_TREE if none. */
4110
4111 tree
4112 check_tag_decl (cp_decl_specifier_seq *declspecs)
4113 {
4114 int saw_friend = declspecs->specs[(int)ds_friend] != 0;
4115 int saw_typedef = declspecs->specs[(int)ds_typedef] != 0;
4116 /* If a class, struct, or enum type is declared by the DECLSPECS
4117 (i.e, if a class-specifier, enum-specifier, or non-typename
4118 elaborated-type-specifier appears in the DECLSPECS),
4119 DECLARED_TYPE is set to the corresponding type. */
4120 tree declared_type = NULL_TREE;
4121 bool error_p = false;
4122
4123 if (declspecs->multiple_types_p)
4124 error ("multiple types in one declaration");
4125 else if (declspecs->redefined_builtin_type)
4126 {
4127 if (!in_system_header)
4128 permerror (input_location, "redeclaration of C++ built-in type %qT",
4129 declspecs->redefined_builtin_type);
4130 return NULL_TREE;
4131 }
4132
4133 if (declspecs->type
4134 && TYPE_P (declspecs->type)
4135 && ((TREE_CODE (declspecs->type) != TYPENAME_TYPE
4136 && MAYBE_CLASS_TYPE_P (declspecs->type))
4137 || TREE_CODE (declspecs->type) == ENUMERAL_TYPE))
4138 declared_type = declspecs->type;
4139 else if (declspecs->type == error_mark_node)
4140 error_p = true;
4141 if (declared_type == NULL_TREE && ! saw_friend && !error_p)
4142 permerror (input_location, "declaration does not declare anything");
4143 /* Check for an anonymous union. */
4144 else if (declared_type && RECORD_OR_UNION_CODE_P (TREE_CODE (declared_type))
4145 && TYPE_ANONYMOUS_P (declared_type))
4146 {
4147 /* 7/3 In a simple-declaration, the optional init-declarator-list
4148 can be omitted only when declaring a class (clause 9) or
4149 enumeration (7.2), that is, when the decl-specifier-seq contains
4150 either a class-specifier, an elaborated-type-specifier with
4151 a class-key (9.1), or an enum-specifier. In these cases and
4152 whenever a class-specifier or enum-specifier is present in the
4153 decl-specifier-seq, the identifiers in these specifiers are among
4154 the names being declared by the declaration (as class-name,
4155 enum-names, or enumerators, depending on the syntax). In such
4156 cases, and except for the declaration of an unnamed bit-field (9.6),
4157 the decl-specifier-seq shall introduce one or more names into the
4158 program, or shall redeclare a name introduced by a previous
4159 declaration. [Example:
4160 enum { }; // ill-formed
4161 typedef class { }; // ill-formed
4162 --end example] */
4163 if (saw_typedef)
4164 {
4165 error ("missing type-name in typedef-declaration");
4166 return NULL_TREE;
4167 }
4168 /* Anonymous unions are objects, so they can have specifiers. */;
4169 SET_ANON_AGGR_TYPE_P (declared_type);
4170
4171 if (TREE_CODE (declared_type) != UNION_TYPE && !in_system_header)
4172 pedwarn (input_location, OPT_pedantic, "ISO C++ prohibits anonymous structs");
4173 }
4174
4175 else
4176 {
4177 if (declspecs->specs[(int)ds_inline]
4178 || declspecs->specs[(int)ds_virtual])
4179 error ("%qs can only be specified for functions",
4180 declspecs->specs[(int)ds_inline]
4181 ? "inline" : "virtual");
4182 else if (saw_friend
4183 && (!current_class_type
4184 || current_scope () != current_class_type))
4185 error ("%<friend%> can only be specified inside a class");
4186 else if (declspecs->specs[(int)ds_explicit])
4187 error ("%<explicit%> can only be specified for constructors");
4188 else if (declspecs->storage_class)
4189 error ("a storage class can only be specified for objects "
4190 "and functions");
4191 else if (declspecs->specs[(int)ds_const]
4192 || declspecs->specs[(int)ds_volatile]
4193 || declspecs->specs[(int)ds_restrict]
4194 || declspecs->specs[(int)ds_thread])
4195 error ("qualifiers can only be specified for objects "
4196 "and functions");
4197 else if (saw_typedef)
4198 warning (0, "%<typedef%> was ignored in this declaration");
4199 else if (declspecs->specs[(int) ds_constexpr])
4200 error ("%<constexpr%> cannot be used for type declarations");
4201 }
4202
4203 return declared_type;
4204 }
4205
4206 /* Called when a declaration is seen that contains no names to declare.
4207 If its type is a reference to a structure, union or enum inherited
4208 from a containing scope, shadow that tag name for the current scope
4209 with a forward reference.
4210 If its type defines a new named structure or union
4211 or defines an enum, it is valid but we need not do anything here.
4212 Otherwise, it is an error.
4213
4214 C++: may have to grok the declspecs to learn about static,
4215 complain for anonymous unions.
4216
4217 Returns the TYPE declared -- or NULL_TREE if none. */
4218
4219 tree
4220 shadow_tag (cp_decl_specifier_seq *declspecs)
4221 {
4222 tree t = check_tag_decl (declspecs);
4223
4224 if (!t)
4225 return NULL_TREE;
4226
4227 if (declspecs->attributes)
4228 {
4229 warning (0, "attribute ignored in declaration of %q+#T", t);
4230 warning (0, "attribute for %q+#T must follow the %qs keyword",
4231 t, class_key_or_enum_as_string (t));
4232
4233 }
4234
4235 if (maybe_process_partial_specialization (t) == error_mark_node)
4236 return NULL_TREE;
4237
4238 /* This is where the variables in an anonymous union are
4239 declared. An anonymous union declaration looks like:
4240 union { ... } ;
4241 because there is no declarator after the union, the parser
4242 sends that declaration here. */
4243 if (ANON_AGGR_TYPE_P (t))
4244 {
4245 fixup_anonymous_aggr (t);
4246
4247 if (TYPE_FIELDS (t))
4248 {
4249 tree decl = grokdeclarator (/*declarator=*/NULL,
4250 declspecs, NORMAL, 0, NULL);
4251 finish_anon_union (decl);
4252 }
4253 }
4254
4255 return t;
4256 }
4257 \f
4258 /* Decode a "typename", such as "int **", returning a ..._TYPE node. */
4259
4260 tree
4261 groktypename (cp_decl_specifier_seq *type_specifiers,
4262 const cp_declarator *declarator,
4263 bool is_template_arg)
4264 {
4265 tree attrs;
4266 tree type;
4267 enum decl_context context
4268 = is_template_arg ? TEMPLATE_TYPE_ARG : TYPENAME;
4269 attrs = type_specifiers->attributes;
4270 type_specifiers->attributes = NULL_TREE;
4271 type = grokdeclarator (declarator, type_specifiers, context, 0, &attrs);
4272 if (attrs && type != error_mark_node)
4273 {
4274 if (CLASS_TYPE_P (type))
4275 warning (OPT_Wattributes, "ignoring attributes applied to class type %qT "
4276 "outside of definition", type);
4277 else if (MAYBE_CLASS_TYPE_P (type))
4278 /* A template type parameter or other dependent type. */
4279 warning (OPT_Wattributes, "ignoring attributes applied to dependent "
4280 "type %qT without an associated declaration", type);
4281 else
4282 cplus_decl_attributes (&type, attrs, 0);
4283 }
4284 return type;
4285 }
4286
4287 /* Process a DECLARATOR for a function-scope variable declaration,
4288 namespace-scope variable declaration, or function declaration.
4289 (Function definitions go through start_function; class member
4290 declarations appearing in the body of the class go through
4291 grokfield.) The DECL corresponding to the DECLARATOR is returned.
4292 If an error occurs, the error_mark_node is returned instead.
4293
4294 DECLSPECS are the decl-specifiers for the declaration. INITIALIZED is
4295 SD_INITIALIZED if an explicit initializer is present, or SD_DEFAULTED
4296 for an explicitly defaulted function, or SD_DELETED for an explicitly
4297 deleted function, but 0 (SD_UNINITIALIZED) if this is a variable
4298 implicitly initialized via a default constructor. ATTRIBUTES and
4299 PREFIX_ATTRIBUTES are GNU attributes associated with this declaration.
4300
4301 The scope represented by the context of the returned DECL is pushed
4302 (if it is not the global namespace) and is assigned to
4303 *PUSHED_SCOPE_P. The caller is then responsible for calling
4304 pop_scope on *PUSHED_SCOPE_P if it is set. */
4305
4306 tree
4307 start_decl (const cp_declarator *declarator,
4308 cp_decl_specifier_seq *declspecs,
4309 int initialized,
4310 tree attributes,
4311 tree prefix_attributes,
4312 tree *pushed_scope_p)
4313 {
4314 tree decl;
4315 tree context;
4316 bool was_public;
4317 int flags;
4318 bool alias;
4319
4320 *pushed_scope_p = NULL_TREE;
4321
4322 /* An object declared as __attribute__((deprecated)) suppresses
4323 warnings of uses of other deprecated items. */
4324 if (lookup_attribute ("deprecated", attributes))
4325 deprecated_state = DEPRECATED_SUPPRESS;
4326
4327 attributes = chainon (attributes, prefix_attributes);
4328
4329 decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
4330 &attributes);
4331
4332 deprecated_state = DEPRECATED_NORMAL;
4333
4334 if (decl == NULL_TREE || TREE_CODE (decl) == VOID_TYPE
4335 || decl == error_mark_node)
4336 return error_mark_node;
4337
4338 context = CP_DECL_CONTEXT (decl);
4339 if (context != global_namespace)
4340 *pushed_scope_p = push_scope (context);
4341
4342 if (initialized)
4343 /* Is it valid for this decl to have an initializer at all?
4344 If not, set INITIALIZED to zero, which will indirectly
4345 tell `cp_finish_decl' to ignore the initializer once it is parsed. */
4346 switch (TREE_CODE (decl))
4347 {
4348 case TYPE_DECL:
4349 error ("typedef %qD is initialized (use decltype instead)", decl);
4350 return error_mark_node;
4351
4352 case FUNCTION_DECL:
4353 if (initialized == SD_DELETED)
4354 /* We'll handle the rest of the semantics later, but we need to
4355 set this now so it's visible to duplicate_decls. */
4356 DECL_DELETED_FN (decl) = 1;
4357 break;
4358
4359 default:
4360 break;
4361 }
4362
4363 if (initialized)
4364 {
4365 if (! toplevel_bindings_p ()
4366 && DECL_EXTERNAL (decl))
4367 warning (0, "declaration of %q#D has %<extern%> and is initialized",
4368 decl);
4369 DECL_EXTERNAL (decl) = 0;
4370 if (toplevel_bindings_p ())
4371 TREE_STATIC (decl) = 1;
4372 }
4373 alias = lookup_attribute ("alias", DECL_ATTRIBUTES (decl)) != 0;
4374
4375 if (alias && TREE_CODE (decl) == FUNCTION_DECL)
4376 record_key_method_defined (decl);
4377
4378 /* If this is a typedef that names the class for linkage purposes
4379 (7.1.3p8), apply any attributes directly to the type. */
4380 if (TREE_CODE (decl) == TYPE_DECL
4381 && TAGGED_TYPE_P (TREE_TYPE (decl))
4382 && decl == TYPE_NAME (TYPE_MAIN_VARIANT (TREE_TYPE (decl))))
4383 flags = ATTR_FLAG_TYPE_IN_PLACE;
4384 else
4385 flags = 0;
4386
4387 /* Set attributes here so if duplicate decl, will have proper attributes. */
4388 cplus_decl_attributes (&decl, attributes, flags);
4389
4390 /* Dllimported symbols cannot be defined. Static data members (which
4391 can be initialized in-class and dllimported) go through grokfield,
4392 not here, so we don't need to exclude those decls when checking for
4393 a definition. */
4394 if (initialized && DECL_DLLIMPORT_P (decl))
4395 {
4396 error ("definition of %q#D is marked %<dllimport%>", decl);
4397 DECL_DLLIMPORT_P (decl) = 0;
4398 }
4399
4400 /* If #pragma weak was used, mark the decl weak now. */
4401 maybe_apply_pragma_weak (decl);
4402
4403 if (TREE_CODE (decl) == FUNCTION_DECL
4404 && DECL_DECLARED_INLINE_P (decl)
4405 && DECL_UNINLINABLE (decl)
4406 && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl)))
4407 warning (0, "inline function %q+D given attribute noinline", decl);
4408
4409 if (TYPE_P (context) && COMPLETE_TYPE_P (complete_type (context)))
4410 {
4411 if (TREE_CODE (decl) == VAR_DECL)
4412 {
4413 tree field = lookup_field (context, DECL_NAME (decl), 0, false);
4414 if (field == NULL_TREE || TREE_CODE (field) != VAR_DECL)
4415 error ("%q#D is not a static member of %q#T", decl, context);
4416 else
4417 {
4418 if (DECL_CONTEXT (field) != context)
4419 {
4420 if (!same_type_p (DECL_CONTEXT (field), context))
4421 permerror (input_location, "ISO C++ does not permit %<%T::%D%> "
4422 "to be defined as %<%T::%D%>",
4423 DECL_CONTEXT (field), DECL_NAME (decl),
4424 context, DECL_NAME (decl));
4425 DECL_CONTEXT (decl) = DECL_CONTEXT (field);
4426 }
4427 if (processing_specialization
4428 && template_class_depth (context) == 0
4429 && CLASSTYPE_TEMPLATE_SPECIALIZATION (context))
4430 error ("template header not allowed in member definition "
4431 "of explicitly specialized class");
4432 /* Static data member are tricky; an in-class initialization
4433 still doesn't provide a definition, so the in-class
4434 declaration will have DECL_EXTERNAL set, but will have an
4435 initialization. Thus, duplicate_decls won't warn
4436 about this situation, and so we check here. */
4437 if (initialized && DECL_INITIALIZED_IN_CLASS_P (field))
4438 error ("duplicate initialization of %qD", decl);
4439 if (duplicate_decls (decl, field, /*newdecl_is_friend=*/false))
4440 decl = field;
4441 if (declspecs->specs[(int) ds_constexpr]
4442 && !DECL_DECLARED_CONSTEXPR_P (field))
4443 error ("%qD declared %<constexpr%> outside its class", field);
4444 }
4445 }
4446 else
4447 {
4448 tree field = check_classfn (context, decl,
4449 (processing_template_decl
4450 > template_class_depth (context))
4451 ? current_template_parms
4452 : NULL_TREE);
4453 if (field && field != error_mark_node
4454 && duplicate_decls (decl, field,
4455 /*newdecl_is_friend=*/false))
4456 decl = field;
4457 }
4458
4459 /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set. */
4460 DECL_IN_AGGR_P (decl) = 0;
4461 /* Do not mark DECL as an explicit specialization if it was not
4462 already marked as an instantiation; a declaration should
4463 never be marked as a specialization unless we know what
4464 template is being specialized. */
4465 if (DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl))
4466 {
4467 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
4468
4469 /* [temp.expl.spec] An explicit specialization of a static data
4470 member of a template is a definition if the declaration
4471 includes an initializer; otherwise, it is a declaration.
4472
4473 We check for processing_specialization so this only applies
4474 to the new specialization syntax. */
4475 if (!initialized && processing_specialization)
4476 DECL_EXTERNAL (decl) = 1;
4477 }
4478
4479 if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl)
4480 /* Aliases are definitions. */
4481 && !alias)
4482 permerror (input_location, "declaration of %q#D outside of class is not definition",
4483 decl);
4484 }
4485
4486 was_public = TREE_PUBLIC (decl);
4487
4488 /* Enter this declaration into the symbol table. */
4489 decl = maybe_push_decl (decl);
4490
4491 if (processing_template_decl)
4492 decl = push_template_decl (decl);
4493 if (decl == error_mark_node)
4494 return error_mark_node;
4495
4496 /* Tell the back end to use or not use .common as appropriate. If we say
4497 -fconserve-space, we want this to save .data space, at the expense of
4498 wrong semantics. If we say -fno-conserve-space, we want this to
4499 produce errors about redefs; to do this we force variables into the
4500 data segment. */
4501 if (flag_conserve_space
4502 && TREE_CODE (decl) == VAR_DECL
4503 && TREE_PUBLIC (decl)
4504 && !DECL_THREAD_LOCAL_P (decl)
4505 && !have_global_bss_p ())
4506 DECL_COMMON (decl) = 1;
4507
4508 if (TREE_CODE (decl) == VAR_DECL
4509 && DECL_NAMESPACE_SCOPE_P (decl) && !TREE_PUBLIC (decl) && !was_public
4510 && !DECL_THIS_STATIC (decl) && !DECL_ARTIFICIAL (decl))
4511 {
4512 /* This is a const variable with implicit 'static'. Set
4513 DECL_THIS_STATIC so we can tell it from variables that are
4514 !TREE_PUBLIC because of the anonymous namespace. */
4515 gcc_assert (CP_TYPE_CONST_P (TREE_TYPE (decl)) || errorcount);
4516 DECL_THIS_STATIC (decl) = 1;
4517 }
4518
4519 if (!processing_template_decl && TREE_CODE (decl) == VAR_DECL)
4520 start_decl_1 (decl, initialized);
4521
4522 return decl;
4523 }
4524
4525 /* Process the declaration of a variable DECL. INITIALIZED is true
4526 iff DECL is explicitly initialized. (INITIALIZED is false if the
4527 variable is initialized via an implicitly-called constructor.)
4528 This function must be called for ordinary variables (including, for
4529 example, implicit instantiations of templates), but must not be
4530 called for template declarations. */
4531
4532 void
4533 start_decl_1 (tree decl, bool initialized)
4534 {
4535 tree type;
4536 bool complete_p;
4537 bool aggregate_definition_p;
4538
4539 gcc_assert (!processing_template_decl);
4540
4541 if (error_operand_p (decl))
4542 return;
4543
4544 gcc_assert (TREE_CODE (decl) == VAR_DECL);
4545
4546 type = TREE_TYPE (decl);
4547 complete_p = COMPLETE_TYPE_P (type);
4548 aggregate_definition_p = MAYBE_CLASS_TYPE_P (type) && !DECL_EXTERNAL (decl);
4549
4550 /* If an explicit initializer is present, or if this is a definition
4551 of an aggregate, then we need a complete type at this point.
4552 (Scalars are always complete types, so there is nothing to
4553 check.) This code just sets COMPLETE_P; errors (if necessary)
4554 are issued below. */
4555 if ((initialized || aggregate_definition_p)
4556 && !complete_p
4557 && COMPLETE_TYPE_P (complete_type (type)))
4558 {
4559 complete_p = true;
4560 /* We will not yet have set TREE_READONLY on DECL if the type
4561 was "const", but incomplete, before this point. But, now, we
4562 have a complete type, so we can try again. */
4563 cp_apply_type_quals_to_decl (cp_type_quals (type), decl);
4564 }
4565
4566 if (initialized)
4567 /* Is it valid for this decl to have an initializer at all? */
4568 {
4569 /* Don't allow initializations for incomplete types except for
4570 arrays which might be completed by the initialization. */
4571 if (complete_p)
4572 ; /* A complete type is ok. */
4573 else if (type_uses_auto (type))
4574 ; /* An auto type is ok. */
4575 else if (TREE_CODE (type) != ARRAY_TYPE)
4576 {
4577 error ("variable %q#D has initializer but incomplete type", decl);
4578 type = TREE_TYPE (decl) = error_mark_node;
4579 }
4580 else if (!COMPLETE_TYPE_P (complete_type (TREE_TYPE (type))))
4581 {
4582 if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
4583 error ("elements of array %q#D have incomplete type", decl);
4584 /* else we already gave an error in start_decl. */
4585 }
4586 }
4587 else if (aggregate_definition_p && !complete_p)
4588 {
4589 if (type_uses_auto (type))
4590 error ("declaration of %q#D has no initializer", decl);
4591 else
4592 error ("aggregate %q#D has incomplete type and cannot be defined",
4593 decl);
4594 /* Change the type so that assemble_variable will give
4595 DECL an rtl we can live with: (mem (const_int 0)). */
4596 type = TREE_TYPE (decl) = error_mark_node;
4597 }
4598
4599 /* Create a new scope to hold this declaration if necessary.
4600 Whether or not a new scope is necessary cannot be determined
4601 until after the type has been completed; if the type is a
4602 specialization of a class template it is not until after
4603 instantiation has occurred that TYPE_HAS_NONTRIVIAL_DESTRUCTOR
4604 will be set correctly. */
4605 maybe_push_cleanup_level (type);
4606 }
4607
4608 /* Handle initialization of references. DECL, TYPE, and INIT have the
4609 same meaning as in cp_finish_decl. *CLEANUP must be NULL on entry,
4610 but will be set to a new CLEANUP_STMT if a temporary is created
4611 that must be destroyed subsequently.
4612
4613 Returns an initializer expression to use to initialize DECL, or
4614 NULL if the initialization can be performed statically.
4615
4616 Quotes on semantics can be found in ARM 8.4.3. */
4617
4618 static tree
4619 grok_reference_init (tree decl, tree type, tree init, int flags)
4620 {
4621 if (init == NULL_TREE)
4622 {
4623 if ((DECL_LANG_SPECIFIC (decl) == 0
4624 || DECL_IN_AGGR_P (decl) == 0)
4625 && ! DECL_THIS_EXTERN (decl))
4626 error ("%qD declared as reference but not initialized", decl);
4627 return NULL_TREE;
4628 }
4629
4630 if (TREE_CODE (init) == TREE_LIST)
4631 init = build_x_compound_expr_from_list (init, ELK_INIT,
4632 tf_warning_or_error);
4633
4634 if (TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE
4635 && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
4636 /* Note: default conversion is only called in very special cases. */
4637 init = decay_conversion (init);
4638
4639 /* Convert INIT to the reference type TYPE. This may involve the
4640 creation of a temporary, whose lifetime must be the same as that
4641 of the reference. If so, a DECL_EXPR for the temporary will be
4642 added just after the DECL_EXPR for DECL. That's why we don't set
4643 DECL_INITIAL for local references (instead assigning to them
4644 explicitly); we need to allow the temporary to be initialized
4645 first. */
4646 return initialize_reference (type, init, flags,
4647 tf_warning_or_error);
4648 }
4649
4650 /* Designated initializers in arrays are not supported in GNU C++.
4651 The parser cannot detect this error since it does not know whether
4652 a given brace-enclosed initializer is for a class type or for an
4653 array. This function checks that CE does not use a designated
4654 initializer. If it does, an error is issued. Returns true if CE
4655 is valid, i.e., does not have a designated initializer. */
4656
4657 static bool
4658 check_array_designated_initializer (const constructor_elt *ce,
4659 unsigned HOST_WIDE_INT index)
4660 {
4661 /* Designated initializers for array elements are not supported. */
4662 if (ce->index)
4663 {
4664 /* The parser only allows identifiers as designated
4665 initializers. */
4666 if (ce->index == error_mark_node)
4667 error ("name used in a GNU-style designated "
4668 "initializer for an array");
4669 else if (TREE_CODE (ce->index) == INTEGER_CST)
4670 {
4671 /* A C99 designator is OK if it matches the current index. */
4672 if (TREE_INT_CST_LOW (ce->index) == index)
4673 return true;
4674 else
4675 sorry ("non-trivial designated initializers not supported");
4676 }
4677 else
4678 {
4679 gcc_assert (TREE_CODE (ce->index) == IDENTIFIER_NODE);
4680 error ("name %qD used in a GNU-style designated "
4681 "initializer for an array", ce->index);
4682 }
4683 return false;
4684 }
4685
4686 return true;
4687 }
4688
4689 /* When parsing `int a[] = {1, 2};' we don't know the size of the
4690 array until we finish parsing the initializer. If that's the
4691 situation we're in, update DECL accordingly. */
4692
4693 static void
4694 maybe_deduce_size_from_array_init (tree decl, tree init)
4695 {
4696 tree type = TREE_TYPE (decl);
4697
4698 if (TREE_CODE (type) == ARRAY_TYPE
4699 && TYPE_DOMAIN (type) == NULL_TREE
4700 && TREE_CODE (decl) != TYPE_DECL)
4701 {
4702 /* do_default is really a C-ism to deal with tentative definitions.
4703 But let's leave it here to ease the eventual merge. */
4704 int do_default = !DECL_EXTERNAL (decl);
4705 tree initializer = init ? init : DECL_INITIAL (decl);
4706 int failure = 0;
4707
4708 /* Check that there are no designated initializers in INIT, as
4709 those are not supported in GNU C++, and as the middle-end
4710 will crash if presented with a non-numeric designated
4711 initializer. */
4712 if (initializer && TREE_CODE (initializer) == CONSTRUCTOR)
4713 {
4714 VEC(constructor_elt,gc) *v = CONSTRUCTOR_ELTS (initializer);
4715 constructor_elt *ce;
4716 HOST_WIDE_INT i;
4717 FOR_EACH_VEC_ELT (constructor_elt, v, i, ce)
4718 if (!check_array_designated_initializer (ce, i))
4719 failure = 1;
4720 }
4721
4722 if (!failure)
4723 {
4724 failure = cp_complete_array_type (&TREE_TYPE (decl), initializer,
4725 do_default);
4726 if (failure == 1)
4727 {
4728 error ("initializer fails to determine size of %qD", decl);
4729 TREE_TYPE (decl) = error_mark_node;
4730 }
4731 else if (failure == 2)
4732 {
4733 if (do_default)
4734 {
4735 error ("array size missing in %qD", decl);
4736 TREE_TYPE (decl) = error_mark_node;
4737 }
4738 /* If a `static' var's size isn't known, make it extern as
4739 well as static, so it does not get allocated. If it's not
4740 `static', then don't mark it extern; finish_incomplete_decl
4741 will give it a default size and it will get allocated. */
4742 else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
4743 DECL_EXTERNAL (decl) = 1;
4744 }
4745 else if (failure == 3)
4746 {
4747 error ("zero-size array %qD", decl);
4748 TREE_TYPE (decl) = error_mark_node;
4749 }
4750 }
4751
4752 cp_apply_type_quals_to_decl (cp_type_quals (TREE_TYPE (decl)), decl);
4753
4754 relayout_decl (decl);
4755 }
4756 }
4757
4758 /* Set DECL_SIZE, DECL_ALIGN, etc. for DECL (a VAR_DECL), and issue
4759 any appropriate error messages regarding the layout. */
4760
4761 static void
4762 layout_var_decl (tree decl)
4763 {
4764 tree type;
4765
4766 type = TREE_TYPE (decl);
4767 if (type == error_mark_node)
4768 return;
4769
4770 /* If we haven't already layed out this declaration, do so now.
4771 Note that we must not call complete type for an external object
4772 because it's type might involve templates that we are not
4773 supposed to instantiate yet. (And it's perfectly valid to say
4774 `extern X x' for some incomplete type `X'.) */
4775 if (!DECL_EXTERNAL (decl))
4776 complete_type (type);
4777 if (!DECL_SIZE (decl)
4778 && TREE_TYPE (decl) != error_mark_node
4779 && (COMPLETE_TYPE_P (type)
4780 || (TREE_CODE (type) == ARRAY_TYPE
4781 && !TYPE_DOMAIN (type)
4782 && COMPLETE_TYPE_P (TREE_TYPE (type)))))
4783 layout_decl (decl, 0);
4784
4785 if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
4786 {
4787 /* An automatic variable with an incomplete type: that is an error.
4788 Don't talk about array types here, since we took care of that
4789 message in grokdeclarator. */
4790 error ("storage size of %qD isn%'t known", decl);
4791 TREE_TYPE (decl) = error_mark_node;
4792 }
4793 #if 0
4794 /* Keep this code around in case we later want to control debug info
4795 based on whether a type is "used". (jason 1999-11-11) */
4796
4797 else if (!DECL_EXTERNAL (decl) && MAYBE_CLASS_TYPE_P (ttype))
4798 /* Let debugger know it should output info for this type. */
4799 note_debug_info_needed (ttype);
4800
4801 if (TREE_STATIC (decl) && DECL_CLASS_SCOPE_P (decl))
4802 note_debug_info_needed (DECL_CONTEXT (decl));
4803 #endif
4804
4805 if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
4806 && DECL_SIZE (decl) != NULL_TREE
4807 && ! TREE_CONSTANT (DECL_SIZE (decl)))
4808 {
4809 if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
4810 constant_expression_warning (DECL_SIZE (decl));
4811 else
4812 {
4813 error ("storage size of %qD isn%'t constant", decl);
4814 TREE_TYPE (decl) = error_mark_node;
4815 }
4816 }
4817 }
4818
4819 /* If a local static variable is declared in an inline function, or if
4820 we have a weak definition, we must endeavor to create only one
4821 instance of the variable at link-time. */
4822
4823 void
4824 maybe_commonize_var (tree decl)
4825 {
4826 /* Static data in a function with comdat linkage also has comdat
4827 linkage. */
4828 if (TREE_STATIC (decl)
4829 /* Don't mess with __FUNCTION__. */
4830 && ! DECL_ARTIFICIAL (decl)
4831 && DECL_FUNCTION_SCOPE_P (decl)
4832 && vague_linkage_p (DECL_CONTEXT (decl)))
4833 {
4834 if (flag_weak)
4835 {
4836 /* With weak symbols, we simply make the variable COMDAT;
4837 that will cause copies in multiple translations units to
4838 be merged. */
4839 comdat_linkage (decl);
4840 }
4841 else
4842 {
4843 if (DECL_INITIAL (decl) == NULL_TREE
4844 || DECL_INITIAL (decl) == error_mark_node)
4845 {
4846 /* Without weak symbols, we can use COMMON to merge
4847 uninitialized variables. */
4848 TREE_PUBLIC (decl) = 1;
4849 DECL_COMMON (decl) = 1;
4850 }
4851 else
4852 {
4853 /* While for initialized variables, we must use internal
4854 linkage -- which means that multiple copies will not
4855 be merged. */
4856 TREE_PUBLIC (decl) = 0;
4857 DECL_COMMON (decl) = 0;
4858 warning_at (input_location, 0,
4859 "sorry: semantics of inline function static "
4860 "data %q+#D are wrong (you%'ll wind up "
4861 "with multiple copies)", decl);
4862 warning_at (DECL_SOURCE_LOCATION (decl), 0,
4863 " you can work around this by removing "
4864 "the initializer");
4865 }
4866 }
4867 }
4868 else if (DECL_LANG_SPECIFIC (decl) && DECL_COMDAT (decl))
4869 /* Set it up again; we might have set DECL_INITIAL since the last
4870 time. */
4871 comdat_linkage (decl);
4872 }
4873
4874 /* Issue an error message if DECL is an uninitialized const variable. */
4875
4876 static void
4877 check_for_uninitialized_const_var (tree decl)
4878 {
4879 tree type = strip_array_types (TREE_TYPE (decl));
4880
4881 /* ``Unless explicitly declared extern, a const object does not have
4882 external linkage and must be initialized. ($8.4; $12.1)'' ARM
4883 7.1.6 */
4884 if (TREE_CODE (decl) == VAR_DECL
4885 && TREE_CODE (type) != REFERENCE_TYPE
4886 && CP_TYPE_CONST_P (type)
4887 && !DECL_INITIAL (decl))
4888 {
4889 tree field = default_init_uninitialized_part (type);
4890 if (!field)
4891 return;
4892
4893 permerror (DECL_SOURCE_LOCATION (decl),
4894 "uninitialized const %qD", decl);
4895
4896 if (CLASS_TYPE_P (type))
4897 {
4898 tree defaulted_ctor;
4899
4900 inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (type)),
4901 "%q#T has no user-provided default constructor", type);
4902 defaulted_ctor = in_class_defaulted_default_constructor (type);
4903 if (defaulted_ctor)
4904 inform (DECL_SOURCE_LOCATION (defaulted_ctor),
4905 "constructor is not user-provided because it is "
4906 "explicitly defaulted in the class body");
4907 inform (0, "and the implicitly-defined constructor does not "
4908 "initialize %q+#D", field);
4909 }
4910 }
4911 }
4912 \f
4913 /* Structure holding the current initializer being processed by reshape_init.
4914 CUR is a pointer to the current element being processed, END is a pointer
4915 after the last element present in the initializer. */
4916 typedef struct reshape_iterator_t
4917 {
4918 constructor_elt *cur;
4919 constructor_elt *end;
4920 } reshape_iter;
4921
4922 static tree reshape_init_r (tree, reshape_iter *, bool, tsubst_flags_t);
4923
4924 /* FIELD is a FIELD_DECL or NULL. In the former case, the value
4925 returned is the next FIELD_DECL (possibly FIELD itself) that can be
4926 initialized. If there are no more such fields, the return value
4927 will be NULL. */
4928
4929 tree
4930 next_initializable_field (tree field)
4931 {
4932 while (field
4933 && (TREE_CODE (field) != FIELD_DECL
4934 || (DECL_C_BIT_FIELD (field) && !DECL_NAME (field))
4935 || DECL_ARTIFICIAL (field)))
4936 field = DECL_CHAIN (field);
4937
4938 return field;
4939 }
4940
4941 /* Subroutine of reshape_init_array and reshape_init_vector, which does
4942 the actual work. ELT_TYPE is the element type of the array. MAX_INDEX is an
4943 INTEGER_CST representing the size of the array minus one (the maximum index),
4944 or NULL_TREE if the array was declared without specifying the size. D is
4945 the iterator within the constructor. */
4946
4947 static tree
4948 reshape_init_array_1 (tree elt_type, tree max_index, reshape_iter *d,
4949 tsubst_flags_t complain)
4950 {
4951 tree new_init;
4952 bool sized_array_p = (max_index != NULL_TREE);
4953 unsigned HOST_WIDE_INT max_index_cst = 0;
4954 unsigned HOST_WIDE_INT index;
4955
4956 /* The initializer for an array is always a CONSTRUCTOR. */
4957 new_init = build_constructor (init_list_type_node, NULL);
4958
4959 if (sized_array_p)
4960 {
4961 /* Minus 1 is used for zero sized arrays. */
4962 if (integer_all_onesp (max_index))
4963 return new_init;
4964
4965 if (host_integerp (max_index, 1))
4966 max_index_cst = tree_low_cst (max_index, 1);
4967 /* sizetype is sign extended, not zero extended. */
4968 else
4969 max_index_cst = tree_low_cst (fold_convert (size_type_node, max_index),
4970 1);
4971 }
4972
4973 /* Loop until there are no more initializers. */
4974 for (index = 0;
4975 d->cur != d->end && (!sized_array_p || index <= max_index_cst);
4976 ++index)
4977 {
4978 tree elt_init;
4979
4980 check_array_designated_initializer (d->cur, index);
4981 elt_init = reshape_init_r (elt_type, d, /*first_initializer_p=*/false,
4982 complain);
4983 if (elt_init == error_mark_node)
4984 return error_mark_node;
4985 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init),
4986 size_int (index), elt_init);
4987 if (!TREE_CONSTANT (elt_init))
4988 TREE_CONSTANT (new_init) = false;
4989 }
4990
4991 return new_init;
4992 }
4993
4994 /* Subroutine of reshape_init_r, processes the initializers for arrays.
4995 Parameters are the same of reshape_init_r. */
4996
4997 static tree
4998 reshape_init_array (tree type, reshape_iter *d, tsubst_flags_t complain)
4999 {
5000 tree max_index = NULL_TREE;
5001
5002 gcc_assert (TREE_CODE (type) == ARRAY_TYPE);
5003
5004 if (TYPE_DOMAIN (type))
5005 max_index = array_type_nelts (type);
5006
5007 return reshape_init_array_1 (TREE_TYPE (type), max_index, d, complain);
5008 }
5009
5010 /* Subroutine of reshape_init_r, processes the initializers for vectors.
5011 Parameters are the same of reshape_init_r. */
5012
5013 static tree
5014 reshape_init_vector (tree type, reshape_iter *d, tsubst_flags_t complain)
5015 {
5016 tree max_index = NULL_TREE;
5017
5018 gcc_assert (TREE_CODE (type) == VECTOR_TYPE);
5019
5020 if (COMPOUND_LITERAL_P (d->cur->value))
5021 {
5022 tree value = d->cur->value;
5023 if (!same_type_p (TREE_TYPE (value), type))
5024 {
5025 if (complain & tf_error)
5026 error ("invalid type %qT as initializer for a vector of type %qT",
5027 TREE_TYPE (d->cur->value), type);
5028 value = error_mark_node;
5029 }
5030 ++d->cur;
5031 return value;
5032 }
5033
5034 /* For a vector, we initialize it as an array of the appropriate size. */
5035 if (TREE_CODE (type) == VECTOR_TYPE)
5036 max_index = size_int (TYPE_VECTOR_SUBPARTS (type) - 1);
5037
5038 return reshape_init_array_1 (TREE_TYPE (type), max_index, d, complain);
5039 }
5040
5041 /* Subroutine of reshape_init_r, processes the initializers for classes
5042 or union. Parameters are the same of reshape_init_r. */
5043
5044 static tree
5045 reshape_init_class (tree type, reshape_iter *d, bool first_initializer_p,
5046 tsubst_flags_t complain)
5047 {
5048 tree field;
5049 tree new_init;
5050
5051 gcc_assert (CLASS_TYPE_P (type));
5052
5053 /* The initializer for a class is always a CONSTRUCTOR. */
5054 new_init = build_constructor (init_list_type_node, NULL);
5055 field = next_initializable_field (TYPE_FIELDS (type));
5056
5057 if (!field)
5058 {
5059 /* [dcl.init.aggr]
5060
5061 An initializer for an aggregate member that is an
5062 empty class shall have the form of an empty
5063 initializer-list {}. */
5064 if (!first_initializer_p)
5065 {
5066 if (complain & tf_error)
5067 error ("initializer for %qT must be brace-enclosed", type);
5068 return error_mark_node;
5069 }
5070 return new_init;
5071 }
5072
5073 /* Loop through the initializable fields, gathering initializers. */
5074 while (d->cur != d->end)
5075 {
5076 tree field_init;
5077
5078 /* Handle designated initializers, as an extension. */
5079 if (d->cur->index)
5080 {
5081 field = lookup_field_1 (type, d->cur->index, /*want_type=*/false);
5082
5083 if (!field || TREE_CODE (field) != FIELD_DECL)
5084 {
5085 if (complain & tf_error)
5086 error ("%qT has no non-static data member named %qD", type,
5087 d->cur->index);
5088 return error_mark_node;
5089 }
5090 }
5091
5092 /* If we processed all the member of the class, we are done. */
5093 if (!field)
5094 break;
5095
5096 field_init = reshape_init_r (TREE_TYPE (field), d,
5097 /*first_initializer_p=*/false, complain);
5098 if (field_init == error_mark_node)
5099 return error_mark_node;
5100
5101 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init), field, field_init);
5102
5103 /* [dcl.init.aggr]
5104
5105 When a union is initialized with a brace-enclosed
5106 initializer, the braces shall only contain an
5107 initializer for the first member of the union. */
5108 if (TREE_CODE (type) == UNION_TYPE)
5109 break;
5110
5111 field = next_initializable_field (DECL_CHAIN (field));
5112 }
5113
5114 return new_init;
5115 }
5116
5117 /* Subroutine of reshape_init, which processes a single initializer (part of
5118 a CONSTRUCTOR). TYPE is the type of the variable being initialized, D is the
5119 iterator within the CONSTRUCTOR which points to the initializer to process.
5120 FIRST_INITIALIZER_P is true if this is the first initializer of the
5121 outermost CONSTRUCTOR node. */
5122
5123 static tree
5124 reshape_init_r (tree type, reshape_iter *d, bool first_initializer_p,
5125 tsubst_flags_t complain)
5126 {
5127 tree init = d->cur->value;
5128
5129 if (error_operand_p (init))
5130 return error_mark_node;
5131
5132 if (TREE_CODE (type) == COMPLEX_TYPE)
5133 {
5134 /* A complex type can be initialized from one or two initializers,
5135 but braces are not elided. */
5136 d->cur++;
5137 if (BRACE_ENCLOSED_INITIALIZER_P (init))
5138 {
5139 if (CONSTRUCTOR_NELTS (init) > 2)
5140 {
5141 if (complain & tf_error)
5142 error ("too many initializers for %qT", type);
5143 else
5144 return error_mark_node;
5145 }
5146 }
5147 else if (first_initializer_p && d->cur != d->end)
5148 {
5149 VEC(constructor_elt, gc) *v = 0;
5150 CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, init);
5151 CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, d->cur->value);
5152 d->cur++;
5153 init = build_constructor (init_list_type_node, v);
5154 }
5155 return init;
5156 }
5157
5158 /* A non-aggregate type is always initialized with a single
5159 initializer. */
5160 if (!CP_AGGREGATE_TYPE_P (type))
5161 {
5162 /* It is invalid to initialize a non-aggregate type with a
5163 brace-enclosed initializer before C++0x.
5164 We need to check for BRACE_ENCLOSED_INITIALIZER_P here because
5165 of g++.old-deja/g++.mike/p7626.C: a pointer-to-member constant is
5166 a CONSTRUCTOR (with a record type). */
5167 if (TREE_CODE (init) == CONSTRUCTOR
5168 && BRACE_ENCLOSED_INITIALIZER_P (init)) /* p7626.C */
5169 {
5170 if (SCALAR_TYPE_P (type))
5171 {
5172 if (complain & tf_error)
5173 error ("braces around scalar initializer for type %qT", type);
5174 init = error_mark_node;
5175 }
5176 else
5177 maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
5178 }
5179
5180 d->cur++;
5181 return init;
5182 }
5183
5184 /* [dcl.init.aggr]
5185
5186 All implicit type conversions (clause _conv_) are considered when
5187 initializing the aggregate member with an initializer from an
5188 initializer-list. If the initializer can initialize a member,
5189 the member is initialized. Otherwise, if the member is itself a
5190 non-empty subaggregate, brace elision is assumed and the
5191 initializer is considered for the initialization of the first
5192 member of the subaggregate. */
5193 if (TREE_CODE (init) != CONSTRUCTOR
5194 /* But don't try this for the first initializer, since that would be
5195 looking through the outermost braces; A a2 = { a1 }; is not a
5196 valid aggregate initialization. */
5197 && !first_initializer_p
5198 && (same_type_ignoring_top_level_qualifiers_p (type, TREE_TYPE (init))
5199 || can_convert_arg (type, TREE_TYPE (init), init, LOOKUP_NORMAL)))
5200 {
5201 d->cur++;
5202 return init;
5203 }
5204
5205 /* [dcl.init.string]
5206
5207 A char array (whether plain char, signed char, or unsigned char)
5208 can be initialized by a string-literal (optionally enclosed in
5209 braces); a wchar_t array can be initialized by a wide
5210 string-literal (optionally enclosed in braces). */
5211 if (TREE_CODE (type) == ARRAY_TYPE
5212 && char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (type))))
5213 {
5214 tree str_init = init;
5215
5216 /* Strip one level of braces if and only if they enclose a single
5217 element (as allowed by [dcl.init.string]). */
5218 if (!first_initializer_p
5219 && TREE_CODE (str_init) == CONSTRUCTOR
5220 && VEC_length (constructor_elt, CONSTRUCTOR_ELTS (str_init)) == 1)
5221 {
5222 str_init = VEC_index (constructor_elt,
5223 CONSTRUCTOR_ELTS (str_init), 0)->value;
5224 }
5225
5226 /* If it's a string literal, then it's the initializer for the array
5227 as a whole. Otherwise, continue with normal initialization for
5228 array types (one value per array element). */
5229 if (TREE_CODE (str_init) == STRING_CST)
5230 {
5231 d->cur++;
5232 return str_init;
5233 }
5234 }
5235
5236 /* The following cases are about aggregates. If we are not within a full
5237 initializer already, and there is not a CONSTRUCTOR, it means that there
5238 is a missing set of braces (that is, we are processing the case for
5239 which reshape_init exists). */
5240 if (!first_initializer_p)
5241 {
5242 if (TREE_CODE (init) == CONSTRUCTOR)
5243 {
5244 if (TREE_TYPE (init) && TYPE_PTRMEMFUNC_P (TREE_TYPE (init)))
5245 /* There is no need to reshape pointer-to-member function
5246 initializers, as they are always constructed correctly
5247 by the front end. */
5248 ;
5249 else if (COMPOUND_LITERAL_P (init))
5250 /* For a nested compound literal, there is no need to reshape since
5251 brace elision is not allowed. Even if we decided to allow it,
5252 we should add a call to reshape_init in finish_compound_literal,
5253 before calling digest_init, so changing this code would still
5254 not be necessary. */
5255 gcc_assert (!BRACE_ENCLOSED_INITIALIZER_P (init));
5256 else
5257 {
5258 ++d->cur;
5259 gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
5260 return reshape_init (type, init, complain);
5261 }
5262 }
5263
5264 warning (OPT_Wmissing_braces, "missing braces around initializer for %qT",
5265 type);
5266 }
5267
5268 /* Dispatch to specialized routines. */
5269 if (CLASS_TYPE_P (type))
5270 return reshape_init_class (type, d, first_initializer_p, complain);
5271 else if (TREE_CODE (type) == ARRAY_TYPE)
5272 return reshape_init_array (type, d, complain);
5273 else if (TREE_CODE (type) == VECTOR_TYPE)
5274 return reshape_init_vector (type, d, complain);
5275 else
5276 gcc_unreachable();
5277 }
5278
5279 /* Undo the brace-elision allowed by [dcl.init.aggr] in a
5280 brace-enclosed aggregate initializer.
5281
5282 INIT is the CONSTRUCTOR containing the list of initializers describing
5283 a brace-enclosed initializer for an entity of the indicated aggregate TYPE.
5284 It may not presently match the shape of the TYPE; for example:
5285
5286 struct S { int a; int b; };
5287 struct S a[] = { 1, 2, 3, 4 };
5288
5289 Here INIT will hold a VEC of four elements, rather than a
5290 VEC of two elements, each itself a VEC of two elements. This
5291 routine transforms INIT from the former form into the latter. The
5292 revised CONSTRUCTOR node is returned. */
5293
5294 tree
5295 reshape_init (tree type, tree init, tsubst_flags_t complain)
5296 {
5297 VEC(constructor_elt, gc) *v;
5298 reshape_iter d;
5299 tree new_init;
5300
5301 gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
5302
5303 v = CONSTRUCTOR_ELTS (init);
5304
5305 /* An empty constructor does not need reshaping, and it is always a valid
5306 initializer. */
5307 if (VEC_empty (constructor_elt, v))
5308 return init;
5309
5310 /* Recurse on this CONSTRUCTOR. */
5311 d.cur = VEC_index (constructor_elt, v, 0);
5312 d.end = d.cur + VEC_length (constructor_elt, v);
5313
5314 new_init = reshape_init_r (type, &d, true, complain);
5315 if (new_init == error_mark_node)
5316 return error_mark_node;
5317
5318 /* Make sure all the element of the constructor were used. Otherwise,
5319 issue an error about exceeding initializers. */
5320 if (d.cur != d.end)
5321 {
5322 if (complain & tf_error)
5323 error ("too many initializers for %qT", type);
5324 else
5325 return error_mark_node;
5326 }
5327
5328 return new_init;
5329 }
5330
5331 /* Verify array initializer. Returns true if errors have been reported. */
5332
5333 bool
5334 check_array_initializer (tree decl, tree type, tree init)
5335 {
5336 tree element_type = TREE_TYPE (type);
5337
5338 /* The array type itself need not be complete, because the
5339 initializer may tell us how many elements are in the array.
5340 But, the elements of the array must be complete. */
5341 if (!COMPLETE_TYPE_P (complete_type (element_type)))
5342 {
5343 if (decl)
5344 error ("elements of array %q#D have incomplete type", decl);
5345 else
5346 error ("elements of array %q#T have incomplete type", type);
5347 return true;
5348 }
5349 /* It is not valid to initialize a VLA. */
5350 if (init
5351 && ((COMPLETE_TYPE_P (type) && !TREE_CONSTANT (TYPE_SIZE (type)))
5352 || !TREE_CONSTANT (TYPE_SIZE (element_type))))
5353 {
5354 if (decl)
5355 error ("variable-sized object %qD may not be initialized", decl);
5356 else
5357 error ("variable-sized compound literal");
5358 return true;
5359 }
5360 return false;
5361 }
5362
5363 /* Subroutine of check_initializer; args are passed down from that function.
5364 Set stmts_are_full_exprs_p to 1 across a call to build_aggr_init. */
5365
5366 static tree
5367 build_aggr_init_full_exprs (tree decl, tree init, int flags)
5368
5369 {
5370 int saved_stmts_are_full_exprs_p = 0;
5371 if (building_stmt_list_p ())
5372 {
5373 saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
5374 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
5375 }
5376 init = build_aggr_init (decl, init, flags, tf_warning_or_error);
5377 if (building_stmt_list_p ())
5378 current_stmt_tree ()->stmts_are_full_exprs_p =
5379 saved_stmts_are_full_exprs_p;
5380 return init;
5381 }
5382
5383 /* Verify INIT (the initializer for DECL), and record the
5384 initialization in DECL_INITIAL, if appropriate. CLEANUP is as for
5385 grok_reference_init.
5386
5387 If the return value is non-NULL, it is an expression that must be
5388 evaluated dynamically to initialize DECL. */
5389
5390 static tree
5391 check_initializer (tree decl, tree init, int flags, VEC(tree,gc) **cleanups)
5392 {
5393 tree type = TREE_TYPE (decl);
5394 tree init_code = NULL;
5395 tree extra_init = NULL_TREE;
5396 tree core_type;
5397
5398 /* Things that are going to be initialized need to have complete
5399 type. */
5400 TREE_TYPE (decl) = type = complete_type (TREE_TYPE (decl));
5401
5402 if (DECL_HAS_VALUE_EXPR_P (decl))
5403 {
5404 /* A variable with DECL_HAS_VALUE_EXPR_P set is just a placeholder,
5405 it doesn't have storage to be initialized. */
5406 gcc_assert (init == NULL_TREE);
5407 return NULL_TREE;
5408 }
5409
5410 if (type == error_mark_node)
5411 /* We will have already complained. */
5412 return NULL_TREE;
5413
5414 if (TREE_CODE (type) == ARRAY_TYPE)
5415 {
5416 if (check_array_initializer (decl, type, init))
5417 return NULL_TREE;
5418 }
5419 else if (!COMPLETE_TYPE_P (type))
5420 {
5421 error ("%qD has incomplete type", decl);
5422 TREE_TYPE (decl) = error_mark_node;
5423 return NULL_TREE;
5424 }
5425 else
5426 /* There is no way to make a variable-sized class type in GNU C++. */
5427 gcc_assert (TREE_CONSTANT (TYPE_SIZE (type)));
5428
5429 if (init && BRACE_ENCLOSED_INITIALIZER_P (init))
5430 {
5431 int init_len = VEC_length (constructor_elt, CONSTRUCTOR_ELTS (init));
5432 if (SCALAR_TYPE_P (type))
5433 {
5434 if (init_len == 0)
5435 {
5436 maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
5437 init = build_zero_init (type, NULL_TREE, false);
5438 }
5439 else if (init_len != 1 && TREE_CODE (type) != COMPLEX_TYPE)
5440 {
5441 error ("scalar object %qD requires one element in initializer",
5442 decl);
5443 TREE_TYPE (decl) = error_mark_node;
5444 return NULL_TREE;
5445 }
5446 }
5447 }
5448
5449 if (TREE_CODE (decl) == CONST_DECL)
5450 {
5451 gcc_assert (TREE_CODE (type) != REFERENCE_TYPE);
5452
5453 DECL_INITIAL (decl) = init;
5454
5455 gcc_assert (init != NULL_TREE);
5456 init = NULL_TREE;
5457 }
5458 else if (!init && DECL_REALLY_EXTERN (decl))
5459 ;
5460 else if (init || type_build_ctor_call (type)
5461 || TREE_CODE (type) == REFERENCE_TYPE)
5462 {
5463 if (TREE_CODE (type) == REFERENCE_TYPE)
5464 {
5465 init = grok_reference_init (decl, type, init, flags);
5466 flags |= LOOKUP_ALREADY_DIGESTED;
5467 }
5468 else if (!init)
5469 check_for_uninitialized_const_var (decl);
5470 /* Do not reshape constructors of vectors (they don't need to be
5471 reshaped. */
5472 else if (BRACE_ENCLOSED_INITIALIZER_P (init))
5473 {
5474 if (is_std_init_list (type))
5475 {
5476 init = perform_implicit_conversion (type, init,
5477 tf_warning_or_error);
5478 flags |= LOOKUP_ALREADY_DIGESTED;
5479 }
5480 else if (TYPE_NON_AGGREGATE_CLASS (type))
5481 {
5482 /* Don't reshape if the class has constructors. */
5483 if (cxx_dialect == cxx98)
5484 error ("in C++98 %qD must be initialized by constructor, "
5485 "not by %<{...}%>",
5486 decl);
5487 }
5488 else if (TREE_CODE (type) == VECTOR_TYPE && TYPE_VECTOR_OPAQUE (type))
5489 {
5490 error ("opaque vector types cannot be initialized");
5491 init = error_mark_node;
5492 }
5493 else
5494 {
5495 init = reshape_init (type, init, tf_warning_or_error);
5496 if (SCALAR_TYPE_P (type))
5497 check_narrowing (type, init);
5498 }
5499 }
5500
5501 /* If DECL has an array type without a specific bound, deduce the
5502 array size from the initializer. */
5503 maybe_deduce_size_from_array_init (decl, init);
5504 type = TREE_TYPE (decl);
5505 if (type == error_mark_node)
5506 return NULL_TREE;
5507
5508 if ((type_build_ctor_call (type) || CLASS_TYPE_P (type))
5509 && !(flags & LOOKUP_ALREADY_DIGESTED)
5510 && !(init && BRACE_ENCLOSED_INITIALIZER_P (init)
5511 && CP_AGGREGATE_TYPE_P (type)))
5512 {
5513 init_code = build_aggr_init_full_exprs (decl, init, flags);
5514
5515 /* If this is a constexpr initializer, expand_default_init will
5516 have returned an INIT_EXPR rather than a CALL_EXPR. In that
5517 case, pull the initializer back out and pass it down into
5518 store_init_value. */
5519 while (TREE_CODE (init_code) == EXPR_STMT
5520 || TREE_CODE (init_code) == CONVERT_EXPR)
5521 init_code = TREE_OPERAND (init_code, 0);
5522 if (TREE_CODE (init_code) == INIT_EXPR)
5523 {
5524 init = TREE_OPERAND (init_code, 1);
5525 init_code = NULL_TREE;
5526 /* Don't call digest_init; it's unnecessary and will complain
5527 about aggregate initialization of non-aggregate classes. */
5528 flags |= LOOKUP_ALREADY_DIGESTED;
5529 }
5530 else if (DECL_DECLARED_CONSTEXPR_P (decl))
5531 {
5532 /* Declared constexpr, but no suitable initializer; massage
5533 init appropriately so we can pass it into store_init_value
5534 for the error. */
5535 if (init && BRACE_ENCLOSED_INITIALIZER_P (init))
5536 init = finish_compound_literal (type, init,
5537 tf_warning_or_error);
5538 else if (CLASS_TYPE_P (type)
5539 && (!init || TREE_CODE (init) == TREE_LIST))
5540 {
5541 init = build_functional_cast (type, init, tf_none);
5542 if (init != error_mark_node)
5543 TARGET_EXPR_DIRECT_INIT_P (init) = true;
5544 }
5545 init_code = NULL_TREE;
5546 }
5547 else
5548 init = NULL_TREE;
5549 }
5550
5551 if (init && TREE_CODE (init) != TREE_VEC)
5552 {
5553 init_code = store_init_value (decl, init, cleanups, flags);
5554 if (pedantic && TREE_CODE (type) == ARRAY_TYPE
5555 && DECL_INITIAL (decl)
5556 && TREE_CODE (DECL_INITIAL (decl)) == STRING_CST
5557 && PAREN_STRING_LITERAL_P (DECL_INITIAL (decl)))
5558 warning (0, "array %qD initialized by parenthesized string literal %qE",
5559 decl, DECL_INITIAL (decl));
5560 init = NULL;
5561 }
5562 }
5563 else
5564 {
5565 if (CLASS_TYPE_P (core_type = strip_array_types (type))
5566 && (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type)
5567 || CLASSTYPE_REF_FIELDS_NEED_INIT (core_type)))
5568 diagnose_uninitialized_cst_or_ref_member (core_type, /*using_new=*/false,
5569 /*complain=*/true);
5570
5571 check_for_uninitialized_const_var (decl);
5572 }
5573
5574 if (init && init != error_mark_node)
5575 init_code = build2 (INIT_EXPR, type, decl, init);
5576
5577 if (extra_init)
5578 init_code = add_stmt_to_compound (extra_init, init_code);
5579
5580 if (init_code && DECL_IN_AGGR_P (decl))
5581 {
5582 static int explained = 0;
5583
5584 if (cxx_dialect < cxx0x)
5585 error ("initializer invalid for static member with constructor");
5586 else
5587 error ("non-constant in-class initialization invalid for static "
5588 "member %qD", decl);
5589 if (!explained)
5590 {
5591 error ("(an out of class initialization is required)");
5592 explained = 1;
5593 }
5594 }
5595
5596 return init_code;
5597 }
5598
5599 /* If DECL is not a local variable, give it RTL. */
5600
5601 static void
5602 make_rtl_for_nonlocal_decl (tree decl, tree init, const char* asmspec)
5603 {
5604 int toplev = toplevel_bindings_p ();
5605 int defer_p;
5606 const char *filename;
5607
5608 /* Set the DECL_ASSEMBLER_NAME for the object. */
5609 if (asmspec)
5610 {
5611 /* The `register' keyword, when used together with an
5612 asm-specification, indicates that the variable should be
5613 placed in a particular register. */
5614 if (TREE_CODE (decl) == VAR_DECL && DECL_REGISTER (decl))
5615 {
5616 set_user_assembler_name (decl, asmspec);
5617 DECL_HARD_REGISTER (decl) = 1;
5618 }
5619 else
5620 {
5621 if (TREE_CODE (decl) == FUNCTION_DECL
5622 && DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL)
5623 set_builtin_user_assembler_name (decl, asmspec);
5624 set_user_assembler_name (decl, asmspec);
5625 }
5626 }
5627
5628 /* Handle non-variables up front. */
5629 if (TREE_CODE (decl) != VAR_DECL)
5630 {
5631 rest_of_decl_compilation (decl, toplev, at_eof);
5632 return;
5633 }
5634
5635 /* If we see a class member here, it should be a static data
5636 member. */
5637 if (DECL_LANG_SPECIFIC (decl) && DECL_IN_AGGR_P (decl))
5638 {
5639 gcc_assert (TREE_STATIC (decl));
5640 /* An in-class declaration of a static data member should be
5641 external; it is only a declaration, and not a definition. */
5642 if (init == NULL_TREE)
5643 gcc_assert (DECL_EXTERNAL (decl) || !TREE_PUBLIC (decl));
5644 }
5645
5646 /* We don't create any RTL for local variables. */
5647 if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
5648 return;
5649
5650 /* We defer emission of local statics until the corresponding
5651 DECL_EXPR is expanded. */
5652 defer_p = DECL_FUNCTION_SCOPE_P (decl) || DECL_VIRTUAL_P (decl);
5653
5654 /* We try to defer namespace-scope static constants so that they are
5655 not emitted into the object file unnecessarily. */
5656 filename = input_filename;
5657 if (!DECL_VIRTUAL_P (decl)
5658 && TREE_READONLY (decl)
5659 && DECL_INITIAL (decl) != NULL_TREE
5660 && DECL_INITIAL (decl) != error_mark_node
5661 && filename != NULL
5662 && ! EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl))
5663 && toplev
5664 && !TREE_PUBLIC (decl))
5665 {
5666 /* Fool with the linkage of static consts according to #pragma
5667 interface. */
5668 struct c_fileinfo *finfo = get_fileinfo (filename);
5669 if (!finfo->interface_unknown && !TREE_PUBLIC (decl))
5670 {
5671 TREE_PUBLIC (decl) = 1;
5672 DECL_EXTERNAL (decl) = finfo->interface_only;
5673 }
5674
5675 defer_p = 1;
5676 }
5677 /* Likewise for template instantiations. */
5678 else if (DECL_LANG_SPECIFIC (decl)
5679 && DECL_IMPLICIT_INSTANTIATION (decl))
5680 defer_p = 1;
5681
5682 /* If we're not deferring, go ahead and assemble the variable. */
5683 if (!defer_p)
5684 rest_of_decl_compilation (decl, toplev, at_eof);
5685 }
5686
5687 /* walk_tree helper for wrap_temporary_cleanups, below. */
5688
5689 static tree
5690 wrap_cleanups_r (tree *stmt_p, int *walk_subtrees, void *data)
5691 {
5692 /* Stop at types or full-expression boundaries. */
5693 if (TYPE_P (*stmt_p)
5694 || TREE_CODE (*stmt_p) == CLEANUP_POINT_EXPR)
5695 {
5696 *walk_subtrees = 0;
5697 return NULL_TREE;
5698 }
5699
5700 if (TREE_CODE (*stmt_p) == TARGET_EXPR)
5701 {
5702 tree guard = (tree)data;
5703 tree tcleanup = TARGET_EXPR_CLEANUP (*stmt_p);
5704
5705 tcleanup = build2 (TRY_CATCH_EXPR, void_type_node, tcleanup, guard);
5706 /* Tell honor_protect_cleanup_actions to handle this as a separate
5707 cleanup. */
5708 TRY_CATCH_IS_CLEANUP (tcleanup) = 1;
5709
5710 TARGET_EXPR_CLEANUP (*stmt_p) = tcleanup;
5711 }
5712
5713 return NULL_TREE;
5714 }
5715
5716 /* We're initializing a local variable which has a cleanup GUARD. If there
5717 are any temporaries used in the initializer INIT of this variable, we
5718 need to wrap their cleanups with TRY_CATCH_EXPR (, GUARD) so that the
5719 variable will be cleaned up properly if one of them throws.
5720
5721 Unfortunately, there's no way to express this properly in terms of
5722 nesting, as the regions for the temporaries overlap the region for the
5723 variable itself; if there are two temporaries, the variable needs to be
5724 the first thing destroyed if either of them throws. However, we only
5725 want to run the variable's cleanup if it actually got constructed. So
5726 we need to guard the temporary cleanups with the variable's cleanup if
5727 they are run on the normal path, but not if they are run on the
5728 exceptional path. We implement this by telling
5729 honor_protect_cleanup_actions to strip the variable cleanup from the
5730 exceptional path. */
5731
5732 static void
5733 wrap_temporary_cleanups (tree init, tree guard)
5734 {
5735 cp_walk_tree_without_duplicates (&init, wrap_cleanups_r, (void *)guard);
5736 }
5737
5738 /* Generate code to initialize DECL (a local variable). */
5739
5740 static void
5741 initialize_local_var (tree decl, tree init)
5742 {
5743 tree type = TREE_TYPE (decl);
5744 tree cleanup;
5745 int already_used;
5746
5747 gcc_assert (TREE_CODE (decl) == VAR_DECL
5748 || TREE_CODE (decl) == RESULT_DECL);
5749 gcc_assert (!TREE_STATIC (decl));
5750
5751 if (DECL_SIZE (decl) == NULL_TREE)
5752 {
5753 /* If we used it already as memory, it must stay in memory. */
5754 DECL_INITIAL (decl) = NULL_TREE;
5755 TREE_ADDRESSABLE (decl) = TREE_USED (decl);
5756 return;
5757 }
5758
5759 if (type == error_mark_node)
5760 return;
5761
5762 /* Compute and store the initial value. */
5763 already_used = TREE_USED (decl) || TREE_USED (type);
5764 if (TREE_USED (type))
5765 DECL_READ_P (decl) = 1;
5766
5767 /* Generate a cleanup, if necessary. */
5768 cleanup = cxx_maybe_build_cleanup (decl, tf_warning_or_error);
5769
5770 /* Perform the initialization. */
5771 if (init)
5772 {
5773 if (TREE_CODE (init) == INIT_EXPR
5774 && !TREE_SIDE_EFFECTS (TREE_OPERAND (init, 1)))
5775 {
5776 /* Stick simple initializers in DECL_INITIAL so that
5777 -Wno-init-self works (c++/34772). */
5778 gcc_assert (TREE_OPERAND (init, 0) == decl);
5779 DECL_INITIAL (decl) = TREE_OPERAND (init, 1);
5780 }
5781 else
5782 {
5783 int saved_stmts_are_full_exprs_p;
5784
5785 /* If we're only initializing a single object, guard the
5786 destructors of any temporaries used in its initializer with
5787 its destructor. This isn't right for arrays because each
5788 element initialization is a full-expression. */
5789 if (cleanup && TREE_CODE (type) != ARRAY_TYPE)
5790 wrap_temporary_cleanups (init, cleanup);
5791
5792 gcc_assert (building_stmt_list_p ());
5793 saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
5794 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
5795 finish_expr_stmt (init);
5796 current_stmt_tree ()->stmts_are_full_exprs_p =
5797 saved_stmts_are_full_exprs_p;
5798 }
5799 }
5800
5801 /* Set this to 0 so we can tell whether an aggregate which was
5802 initialized was ever used. Don't do this if it has a
5803 destructor, so we don't complain about the 'resource
5804 allocation is initialization' idiom. Now set
5805 attribute((unused)) on types so decls of that type will be
5806 marked used. (see TREE_USED, above.) */
5807 if (TYPE_NEEDS_CONSTRUCTING (type)
5808 && ! already_used
5809 && TYPE_HAS_TRIVIAL_DESTRUCTOR (type)
5810 && DECL_NAME (decl))
5811 TREE_USED (decl) = 0;
5812 else if (already_used)
5813 TREE_USED (decl) = 1;
5814
5815 if (cleanup)
5816 finish_decl_cleanup (decl, cleanup);
5817 }
5818
5819 /* DECL is a VAR_DECL for a compiler-generated variable with static
5820 storage duration (like a virtual table) whose initializer is a
5821 compile-time constant. Initialize the variable and provide it to the
5822 back end. */
5823
5824 void
5825 initialize_artificial_var (tree decl, VEC(constructor_elt,gc) *v)
5826 {
5827 tree init;
5828 gcc_assert (DECL_ARTIFICIAL (decl));
5829 init = build_constructor (TREE_TYPE (decl), v);
5830 gcc_assert (TREE_CODE (init) == CONSTRUCTOR);
5831 DECL_INITIAL (decl) = init;
5832 DECL_INITIALIZED_P (decl) = 1;
5833 determine_visibility (decl);
5834 layout_var_decl (decl);
5835 maybe_commonize_var (decl);
5836 make_rtl_for_nonlocal_decl (decl, init, /*asmspec=*/NULL);
5837 }
5838
5839 /* INIT is the initializer for a variable, as represented by the
5840 parser. Returns true iff INIT is type-dependent. */
5841
5842 static bool
5843 type_dependent_init_p (tree init)
5844 {
5845 if (TREE_CODE (init) == TREE_LIST)
5846 /* A parenthesized initializer, e.g.: int i (3, 2); ? */
5847 return any_type_dependent_elements_p (init);
5848 else if (TREE_CODE (init) == CONSTRUCTOR)
5849 /* A brace-enclosed initializer, e.g.: int i = { 3 }; ? */
5850 {
5851 VEC(constructor_elt, gc) *elts;
5852 size_t nelts;
5853 size_t i;
5854
5855 elts = CONSTRUCTOR_ELTS (init);
5856 nelts = VEC_length (constructor_elt, elts);
5857 for (i = 0; i < nelts; ++i)
5858 if (type_dependent_init_p (VEC_index (constructor_elt,
5859 elts, i)->value))
5860 return true;
5861 }
5862 else
5863 /* It must be a simple expression, e.g., int i = 3; */
5864 return type_dependent_expression_p (init);
5865
5866 return false;
5867 }
5868
5869 /* INIT is the initializer for a variable, as represented by the
5870 parser. Returns true iff INIT is value-dependent. */
5871
5872 static bool
5873 value_dependent_init_p (tree init)
5874 {
5875 if (TREE_CODE (init) == TREE_LIST)
5876 /* A parenthesized initializer, e.g.: int i (3, 2); ? */
5877 return any_value_dependent_elements_p (init);
5878 else if (TREE_CODE (init) == CONSTRUCTOR)
5879 /* A brace-enclosed initializer, e.g.: int i = { 3 }; ? */
5880 {
5881 VEC(constructor_elt, gc) *elts;
5882 size_t nelts;
5883 size_t i;
5884
5885 elts = CONSTRUCTOR_ELTS (init);
5886 nelts = VEC_length (constructor_elt, elts);
5887 for (i = 0; i < nelts; ++i)
5888 if (value_dependent_init_p (VEC_index (constructor_elt,
5889 elts, i)->value))
5890 return true;
5891 }
5892 else
5893 /* It must be a simple expression, e.g., int i = 3; */
5894 return value_dependent_expression_p (init);
5895
5896 return false;
5897 }
5898
5899 /* Finish processing of a declaration;
5900 install its line number and initial value.
5901 If the length of an array type is not known before,
5902 it must be determined now, from the initial value, or it is an error.
5903
5904 INIT is the initializer (if any) for DECL. If INIT_CONST_EXPR_P is
5905 true, then INIT is an integral constant expression.
5906
5907 FLAGS is LOOKUP_ONLYCONVERTING if the = init syntax was used, else 0
5908 if the (init) syntax was used. */
5909
5910 void
5911 cp_finish_decl (tree decl, tree init, bool init_const_expr_p,
5912 tree asmspec_tree, int flags)
5913 {
5914 tree type;
5915 VEC(tree,gc) *cleanups = NULL;
5916 const char *asmspec = NULL;
5917 int was_readonly = 0;
5918 bool var_definition_p = false;
5919 tree auto_node;
5920
5921 if (decl == error_mark_node)
5922 return;
5923 else if (! decl)
5924 {
5925 if (init)
5926 error ("assignment (not initialization) in declaration");
5927 return;
5928 }
5929
5930 gcc_assert (TREE_CODE (decl) != RESULT_DECL);
5931 /* Parameters are handled by store_parm_decls, not cp_finish_decl. */
5932 gcc_assert (TREE_CODE (decl) != PARM_DECL);
5933
5934 type = TREE_TYPE (decl);
5935 if (type == error_mark_node)
5936 return;
5937
5938 /* If a name was specified, get the string. */
5939 if (at_namespace_scope_p ())
5940 asmspec_tree = maybe_apply_renaming_pragma (decl, asmspec_tree);
5941 if (asmspec_tree && asmspec_tree != error_mark_node)
5942 asmspec = TREE_STRING_POINTER (asmspec_tree);
5943
5944 if (current_class_type
5945 && CP_DECL_CONTEXT (decl) == current_class_type
5946 && TYPE_BEING_DEFINED (current_class_type)
5947 && !CLASSTYPE_TEMPLATE_INSTANTIATION (current_class_type)
5948 && (DECL_INITIAL (decl) || init))
5949 DECL_INITIALIZED_IN_CLASS_P (decl) = 1;
5950
5951 auto_node = type_uses_auto (type);
5952 if (auto_node)
5953 {
5954 tree d_init;
5955 if (init == NULL_TREE)
5956 {
5957 error ("declaration of %q#D has no initializer", decl);
5958 TREE_TYPE (decl) = error_mark_node;
5959 return;
5960 }
5961 d_init = init;
5962 if (TREE_CODE (d_init) == TREE_LIST)
5963 d_init = build_x_compound_expr_from_list (d_init, ELK_INIT,
5964 tf_warning_or_error);
5965 d_init = resolve_nondeduced_context (d_init);
5966 type = TREE_TYPE (decl) = do_auto_deduction (type, d_init,
5967 auto_node);
5968 if (type == error_mark_node)
5969 return;
5970 }
5971
5972 if (!ensure_literal_type_for_constexpr_object (decl))
5973 DECL_DECLARED_CONSTEXPR_P (decl) = 0;
5974
5975 if (TREE_CODE (decl) == VAR_DECL
5976 && DECL_CLASS_SCOPE_P (decl)
5977 && DECL_INITIALIZED_IN_CLASS_P (decl))
5978 check_static_variable_definition (decl, type);
5979
5980 if (init && TREE_CODE (decl) == FUNCTION_DECL)
5981 {
5982 tree clone;
5983 if (init == ridpointers[(int)RID_DELETE])
5984 {
5985 /* FIXME check this is 1st decl. */
5986 DECL_DELETED_FN (decl) = 1;
5987 DECL_DECLARED_INLINE_P (decl) = 1;
5988 DECL_INITIAL (decl) = error_mark_node;
5989 FOR_EACH_CLONE (clone, decl)
5990 {
5991 DECL_DELETED_FN (clone) = 1;
5992 DECL_DECLARED_INLINE_P (clone) = 1;
5993 DECL_INITIAL (clone) = error_mark_node;
5994 }
5995 init = NULL_TREE;
5996 }
5997 else if (init == ridpointers[(int)RID_DEFAULT])
5998 {
5999 if (defaultable_fn_check (decl))
6000 DECL_DEFAULTED_FN (decl) = 1;
6001 else
6002 DECL_INITIAL (decl) = NULL_TREE;
6003 }
6004 }
6005
6006 if (init && TREE_CODE (decl) == VAR_DECL)
6007 {
6008 DECL_NONTRIVIALLY_INITIALIZED_P (decl) = 1;
6009 /* If DECL is a reference, then we want to know whether init is a
6010 reference constant; init_const_expr_p as passed tells us whether
6011 it's an rvalue constant. */
6012 if (TREE_CODE (type) == REFERENCE_TYPE)
6013 init_const_expr_p = potential_constant_expression (init);
6014 if (init_const_expr_p)
6015 {
6016 /* Set these flags now for templates. We'll update the flags in
6017 store_init_value for instantiations. */
6018 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = 1;
6019 if (decl_maybe_constant_var_p (decl))
6020 TREE_CONSTANT (decl) = 1;
6021 }
6022 }
6023
6024 if (processing_template_decl)
6025 {
6026 bool type_dependent_p;
6027
6028 /* Add this declaration to the statement-tree. */
6029 if (at_function_scope_p ())
6030 add_decl_expr (decl);
6031
6032 type_dependent_p = dependent_type_p (type);
6033
6034 if (check_for_bare_parameter_packs (init))
6035 {
6036 init = NULL_TREE;
6037 DECL_INITIAL (decl) = NULL_TREE;
6038 }
6039
6040 /* Generally, initializers in templates are expanded when the
6041 template is instantiated. But, if DECL is a variable constant
6042 then it can be used in future constant expressions, so its value
6043 must be available. */
6044
6045 if (TREE_CODE (decl) != VAR_DECL || dependent_type_p (type))
6046 /* We can't do anything if the decl has dependent type. */;
6047 else if (init
6048 && init_const_expr_p
6049 && !type_dependent_p
6050 && decl_maybe_constant_var_p (decl)
6051 && !type_dependent_init_p (init)
6052 && !value_dependent_init_p (init))
6053 {
6054 /* This variable seems to be a non-dependent constant, so process
6055 its initializer. If check_initializer returns non-null the
6056 initialization wasn't constant after all. */
6057 tree init_code;
6058 cleanups = make_tree_vector ();
6059 init_code = check_initializer (decl, init, flags, &cleanups);
6060 if (init_code == NULL_TREE)
6061 init = NULL_TREE;
6062 release_tree_vector (cleanups);
6063 }
6064 else if (!DECL_PRETTY_FUNCTION_P (decl))
6065 /* Deduce array size even if the initializer is dependent. */
6066 maybe_deduce_size_from_array_init (decl, init);
6067
6068 if (init)
6069 DECL_INITIAL (decl) = init;
6070 return;
6071 }
6072
6073 /* Just store non-static data member initializers for later. */
6074 if (init && TREE_CODE (decl) == FIELD_DECL)
6075 DECL_INITIAL (decl) = init;
6076
6077 /* Take care of TYPE_DECLs up front. */
6078 if (TREE_CODE (decl) == TYPE_DECL)
6079 {
6080 if (type != error_mark_node
6081 && MAYBE_CLASS_TYPE_P (type) && DECL_NAME (decl))
6082 {
6083 if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
6084 warning (0, "shadowing previous type declaration of %q#D", decl);
6085 set_identifier_type_value (DECL_NAME (decl), decl);
6086 }
6087
6088 /* If we have installed this as the canonical typedef for this
6089 type, and that type has not been defined yet, delay emitting
6090 the debug information for it, as we will emit it later. */
6091 if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
6092 && !COMPLETE_TYPE_P (TREE_TYPE (decl)))
6093 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
6094
6095 rest_of_decl_compilation (decl, DECL_FILE_SCOPE_P (decl),
6096 at_eof);
6097 return;
6098 }
6099
6100 /* A reference will be modified here, as it is initialized. */
6101 if (! DECL_EXTERNAL (decl)
6102 && TREE_READONLY (decl)
6103 && TREE_CODE (type) == REFERENCE_TYPE)
6104 {
6105 was_readonly = 1;
6106 TREE_READONLY (decl) = 0;
6107 }
6108
6109 if (TREE_CODE (decl) == VAR_DECL)
6110 {
6111 /* Only variables with trivial initialization and destruction can
6112 have thread-local storage. */
6113 if (DECL_THREAD_LOCAL_P (decl)
6114 && (type_has_nontrivial_default_init (TREE_TYPE (decl))
6115 || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl))))
6116 error ("%qD cannot be thread-local because it has non-trivial "
6117 "type %qT", decl, TREE_TYPE (decl));
6118 /* If this is a local variable that will need a mangled name,
6119 register it now. We must do this before processing the
6120 initializer for the variable, since the initialization might
6121 require a guard variable, and since the mangled name of the
6122 guard variable will depend on the mangled name of this
6123 variable. */
6124 if (DECL_FUNCTION_SCOPE_P (decl)
6125 && TREE_STATIC (decl)
6126 && !DECL_ARTIFICIAL (decl))
6127 {
6128 push_local_name (decl);
6129 if (DECL_CONSTRUCTOR_P (current_function_decl)
6130 || DECL_DESTRUCTOR_P (current_function_decl))
6131 /* Normally local_decls is populated during GIMPLE lowering,
6132 but [cd]tors are never actually compiled directly. We need
6133 to put statics on the list so we can deal with the label
6134 address extension. */
6135 add_local_decl (cfun, decl);
6136 }
6137
6138 /* Convert the initializer to the type of DECL, if we have not
6139 already initialized DECL. */
6140 if (!DECL_INITIALIZED_P (decl)
6141 /* If !DECL_EXTERNAL then DECL is being defined. In the
6142 case of a static data member initialized inside the
6143 class-specifier, there can be an initializer even if DECL
6144 is *not* defined. */
6145 && (!DECL_EXTERNAL (decl) || init))
6146 {
6147 if (TYPE_FOR_JAVA (type) && MAYBE_CLASS_TYPE_P (type))
6148 {
6149 tree jclass
6150 = IDENTIFIER_GLOBAL_VALUE (get_identifier ("jclass"));
6151 /* Allow libjava/prims.cc define primitive classes. */
6152 if (init != NULL_TREE
6153 || jclass == NULL_TREE
6154 || TREE_CODE (jclass) != TYPE_DECL
6155 || !POINTER_TYPE_P (TREE_TYPE (jclass))
6156 || !same_type_ignoring_top_level_qualifiers_p
6157 (type, TREE_TYPE (TREE_TYPE (jclass))))
6158 error ("Java object %qD not allocated with %<new%>", decl);
6159 init = NULL_TREE;
6160 }
6161 cleanups = make_tree_vector ();
6162 init = check_initializer (decl, init, flags, &cleanups);
6163 /* Thread-local storage cannot be dynamically initialized. */
6164 if (DECL_THREAD_LOCAL_P (decl) && init)
6165 {
6166 error ("%qD is thread-local and so cannot be dynamically "
6167 "initialized", decl);
6168 init = NULL_TREE;
6169 }
6170
6171 /* Check that the initializer for a static data member was a
6172 constant. Although we check in the parser that the
6173 initializer is an integral constant expression, we do not
6174 simplify division-by-zero at the point at which it
6175 occurs. Therefore, in:
6176
6177 struct S { static const int i = 7 / 0; };
6178
6179 we issue an error at this point. It would
6180 probably be better to forbid division by zero in
6181 integral constant expressions. */
6182 if (DECL_EXTERNAL (decl) && init)
6183 {
6184 error ("%qD cannot be initialized by a non-constant expression"
6185 " when being declared", decl);
6186 DECL_INITIALIZED_IN_CLASS_P (decl) = 0;
6187 init = NULL_TREE;
6188 }
6189
6190 /* Handle:
6191
6192 [dcl.init]
6193
6194 The memory occupied by any object of static storage
6195 duration is zero-initialized at program startup before
6196 any other initialization takes place.
6197
6198 We cannot create an appropriate initializer until after
6199 the type of DECL is finalized. If DECL_INITIAL is set,
6200 then the DECL is statically initialized, and any
6201 necessary zero-initialization has already been performed. */
6202 if (TREE_STATIC (decl) && !DECL_INITIAL (decl))
6203 DECL_INITIAL (decl) = build_zero_init (TREE_TYPE (decl),
6204 /*nelts=*/NULL_TREE,
6205 /*static_storage_p=*/true);
6206 /* Remember that the initialization for this variable has
6207 taken place. */
6208 DECL_INITIALIZED_P (decl) = 1;
6209 /* This declaration is the definition of this variable,
6210 unless we are initializing a static data member within
6211 the class specifier. */
6212 if (!DECL_EXTERNAL (decl))
6213 var_definition_p = true;
6214 }
6215 /* If the variable has an array type, lay out the type, even if
6216 there is no initializer. It is valid to index through the
6217 array, and we must get TYPE_ALIGN set correctly on the array
6218 type. */
6219 else if (TREE_CODE (type) == ARRAY_TYPE)
6220 layout_type (type);
6221
6222 if (TREE_STATIC (decl)
6223 && !at_function_scope_p ()
6224 && current_function_decl == NULL)
6225 /* So decl is a global variable or a static member of a
6226 non local class. Record the types it uses
6227 so that we can decide later to emit debug info for them. */
6228 record_types_used_by_current_var_decl (decl);
6229 }
6230 else if (TREE_CODE (decl) == FIELD_DECL
6231 && TYPE_FOR_JAVA (type) && MAYBE_CLASS_TYPE_P (type))
6232 error ("non-static data member %qD has Java class type", decl);
6233
6234 /* Add this declaration to the statement-tree. This needs to happen
6235 after the call to check_initializer so that the DECL_EXPR for a
6236 reference temp is added before the DECL_EXPR for the reference itself. */
6237 if (DECL_FUNCTION_SCOPE_P (decl))
6238 add_decl_expr (decl);
6239
6240 /* Let the middle end know about variables and functions -- but not
6241 static data members in uninstantiated class templates. */
6242 if (TREE_CODE (decl) == VAR_DECL
6243 || TREE_CODE (decl) == FUNCTION_DECL)
6244 {
6245 if (TREE_CODE (decl) == VAR_DECL)
6246 {
6247 layout_var_decl (decl);
6248 maybe_commonize_var (decl);
6249 }
6250
6251 /* This needs to happen after the linkage is set. */
6252 determine_visibility (decl);
6253
6254 if (var_definition_p && TREE_STATIC (decl))
6255 {
6256 /* If a TREE_READONLY variable needs initialization
6257 at runtime, it is no longer readonly and we need to
6258 avoid MEM_READONLY_P being set on RTL created for it. */
6259 if (init)
6260 {
6261 if (TREE_READONLY (decl))
6262 TREE_READONLY (decl) = 0;
6263 was_readonly = 0;
6264 }
6265 else if (was_readonly)
6266 TREE_READONLY (decl) = 1;
6267 }
6268
6269 make_rtl_for_nonlocal_decl (decl, init, asmspec);
6270
6271 /* Check for abstractness of the type. Notice that there is no
6272 need to strip array types here since the check for those types
6273 is already done within create_array_type_for_decl. */
6274 if (TREE_CODE (type) == FUNCTION_TYPE
6275 || TREE_CODE (type) == METHOD_TYPE)
6276 abstract_virtuals_error (decl, TREE_TYPE (type));
6277 else
6278 abstract_virtuals_error (decl, type);
6279
6280 if (TREE_TYPE (decl) == error_mark_node)
6281 /* No initialization required. */
6282 ;
6283 else if (TREE_CODE (decl) == FUNCTION_DECL)
6284 {
6285 if (init)
6286 {
6287 if (init == ridpointers[(int)RID_DEFAULT])
6288 {
6289 /* An out-of-class default definition is defined at
6290 the point where it is explicitly defaulted. */
6291 if (DECL_DELETED_FN (decl))
6292 maybe_explain_implicit_delete (decl);
6293 else if (DECL_INITIAL (decl) == error_mark_node)
6294 synthesize_method (decl);
6295 }
6296 else
6297 error ("function %q#D is initialized like a variable", decl);
6298 }
6299 /* else no initialization required. */
6300 }
6301 else if (DECL_EXTERNAL (decl)
6302 && ! (DECL_LANG_SPECIFIC (decl)
6303 && DECL_NOT_REALLY_EXTERN (decl)))
6304 {
6305 if (init)
6306 DECL_INITIAL (decl) = init;
6307 }
6308 /* A variable definition. */
6309 else if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
6310 /* Initialize the local variable. */
6311 initialize_local_var (decl, init);
6312
6313 /* If a variable is defined, and then a subsequent
6314 definition with external linkage is encountered, we will
6315 get here twice for the same variable. We want to avoid
6316 calling expand_static_init more than once. For variables
6317 that are not static data members, we can call
6318 expand_static_init only when we actually process the
6319 initializer. It is not legal to redeclare a static data
6320 member, so this issue does not arise in that case. */
6321 else if (var_definition_p && TREE_STATIC (decl))
6322 expand_static_init (decl, init);
6323 }
6324
6325 /* If a CLEANUP_STMT was created to destroy a temporary bound to a
6326 reference, insert it in the statement-tree now. */
6327 if (cleanups)
6328 {
6329 unsigned i; tree t;
6330 FOR_EACH_VEC_ELT (tree, cleanups, i, t)
6331 push_cleanup (decl, t, false);
6332 release_tree_vector (cleanups);
6333 }
6334
6335 if (was_readonly)
6336 TREE_READONLY (decl) = 1;
6337
6338 invoke_plugin_callbacks (PLUGIN_FINISH_DECL, decl);
6339 }
6340
6341 /* Returns a declaration for a VAR_DECL as if:
6342
6343 extern "C" TYPE NAME;
6344
6345 had been seen. Used to create compiler-generated global
6346 variables. */
6347
6348 static tree
6349 declare_global_var (tree name, tree type)
6350 {
6351 tree decl;
6352
6353 push_to_top_level ();
6354 decl = build_decl (input_location, VAR_DECL, name, type);
6355 TREE_PUBLIC (decl) = 1;
6356 DECL_EXTERNAL (decl) = 1;
6357 DECL_ARTIFICIAL (decl) = 1;
6358 /* If the user has explicitly declared this variable (perhaps
6359 because the code we are compiling is part of a low-level runtime
6360 library), then it is possible that our declaration will be merged
6361 with theirs by pushdecl. */
6362 decl = pushdecl (decl);
6363 cp_finish_decl (decl, NULL_TREE, false, NULL_TREE, 0);
6364 pop_from_top_level ();
6365
6366 return decl;
6367 }
6368
6369 /* Returns the type for the argument to "__cxa_atexit" (or "atexit",
6370 if "__cxa_atexit" is not being used) corresponding to the function
6371 to be called when the program exits. */
6372
6373 static tree
6374 get_atexit_fn_ptr_type (void)
6375 {
6376 tree fn_type;
6377
6378 if (!atexit_fn_ptr_type_node)
6379 {
6380 tree arg_type;
6381 if (flag_use_cxa_atexit
6382 && !targetm.cxx.use_atexit_for_cxa_atexit ())
6383 /* The parameter to "__cxa_atexit" is "void (*)(void *)". */
6384 arg_type = ptr_type_node;
6385 else
6386 /* The parameter to "atexit" is "void (*)(void)". */
6387 arg_type = NULL_TREE;
6388
6389 fn_type = build_function_type_list (void_type_node,
6390 arg_type, NULL_TREE);
6391 atexit_fn_ptr_type_node = build_pointer_type (fn_type);
6392 }
6393
6394 return atexit_fn_ptr_type_node;
6395 }
6396
6397 /* Returns a pointer to the `atexit' function. Note that if
6398 FLAG_USE_CXA_ATEXIT is nonzero, then this will actually be the new
6399 `__cxa_atexit' function specified in the IA64 C++ ABI. */
6400
6401 static tree
6402 get_atexit_node (void)
6403 {
6404 tree atexit_fndecl;
6405 tree fn_type;
6406 tree fn_ptr_type;
6407 const char *name;
6408 bool use_aeabi_atexit;
6409
6410 if (atexit_node)
6411 return atexit_node;
6412
6413 if (flag_use_cxa_atexit && !targetm.cxx.use_atexit_for_cxa_atexit ())
6414 {
6415 /* The declaration for `__cxa_atexit' is:
6416
6417 int __cxa_atexit (void (*)(void *), void *, void *)
6418
6419 We build up the argument types and then the function type
6420 itself. */
6421 tree argtype0, argtype1, argtype2;
6422
6423 use_aeabi_atexit = targetm.cxx.use_aeabi_atexit ();
6424 /* First, build the pointer-to-function type for the first
6425 argument. */
6426 fn_ptr_type = get_atexit_fn_ptr_type ();
6427 /* Then, build the rest of the argument types. */
6428 argtype2 = ptr_type_node;
6429 if (use_aeabi_atexit)
6430 {
6431 argtype1 = fn_ptr_type;
6432 argtype0 = ptr_type_node;
6433 }
6434 else
6435 {
6436 argtype1 = ptr_type_node;
6437 argtype0 = fn_ptr_type;
6438 }
6439 /* And the final __cxa_atexit type. */
6440 fn_type = build_function_type_list (integer_type_node,
6441 argtype0, argtype1, argtype2,
6442 NULL_TREE);
6443 fn_ptr_type = build_pointer_type (fn_type);
6444 if (use_aeabi_atexit)
6445 name = "__aeabi_atexit";
6446 else
6447 name = "__cxa_atexit";
6448 }
6449 else
6450 {
6451 /* The declaration for `atexit' is:
6452
6453 int atexit (void (*)());
6454
6455 We build up the argument types and then the function type
6456 itself. */
6457 fn_ptr_type = get_atexit_fn_ptr_type ();
6458 /* Build the final atexit type. */
6459 fn_type = build_function_type_list (integer_type_node,
6460 fn_ptr_type, NULL_TREE);
6461 name = "atexit";
6462 }
6463
6464 /* Now, build the function declaration. */
6465 push_lang_context (lang_name_c);
6466 atexit_fndecl = build_library_fn_ptr (name, fn_type);
6467 mark_used (atexit_fndecl);
6468 pop_lang_context ();
6469 atexit_node = decay_conversion (atexit_fndecl);
6470
6471 return atexit_node;
6472 }
6473
6474 /* Returns the __dso_handle VAR_DECL. */
6475
6476 static tree
6477 get_dso_handle_node (void)
6478 {
6479 if (dso_handle_node)
6480 return dso_handle_node;
6481
6482 /* Declare the variable. */
6483 dso_handle_node = declare_global_var (get_identifier ("__dso_handle"),
6484 ptr_type_node);
6485
6486 #ifdef HAVE_GAS_HIDDEN
6487 DECL_VISIBILITY (dso_handle_node) = VISIBILITY_HIDDEN;
6488 DECL_VISIBILITY_SPECIFIED (dso_handle_node) = 1;
6489 #endif
6490
6491 return dso_handle_node;
6492 }
6493
6494 /* Begin a new function with internal linkage whose job will be simply
6495 to destroy some particular variable. */
6496
6497 static GTY(()) int start_cleanup_cnt;
6498
6499 static tree
6500 start_cleanup_fn (void)
6501 {
6502 char name[32];
6503 tree fntype;
6504 tree fndecl;
6505 bool use_cxa_atexit = flag_use_cxa_atexit
6506 && !targetm.cxx.use_atexit_for_cxa_atexit ();
6507
6508 push_to_top_level ();
6509
6510 /* No need to mangle this. */
6511 push_lang_context (lang_name_c);
6512
6513 /* Build the name of the function. */
6514 sprintf (name, "__tcf_%d", start_cleanup_cnt++);
6515 /* Build the function declaration. */
6516 fntype = TREE_TYPE (get_atexit_fn_ptr_type ());
6517 fndecl = build_lang_decl (FUNCTION_DECL, get_identifier (name), fntype);
6518 /* It's a function with internal linkage, generated by the
6519 compiler. */
6520 TREE_PUBLIC (fndecl) = 0;
6521 DECL_ARTIFICIAL (fndecl) = 1;
6522 /* Make the function `inline' so that it is only emitted if it is
6523 actually needed. It is unlikely that it will be inlined, since
6524 it is only called via a function pointer, but we avoid unnecessary
6525 emissions this way. */
6526 DECL_DECLARED_INLINE_P (fndecl) = 1;
6527 DECL_INTERFACE_KNOWN (fndecl) = 1;
6528 /* Build the parameter. */
6529 if (use_cxa_atexit)
6530 {
6531 tree parmdecl;
6532
6533 parmdecl = cp_build_parm_decl (NULL_TREE, ptr_type_node);
6534 DECL_CONTEXT (parmdecl) = fndecl;
6535 TREE_USED (parmdecl) = 1;
6536 DECL_READ_P (parmdecl) = 1;
6537 DECL_ARGUMENTS (fndecl) = parmdecl;
6538 }
6539
6540 pushdecl (fndecl);
6541 start_preparsed_function (fndecl, NULL_TREE, SF_PRE_PARSED);
6542
6543 pop_lang_context ();
6544
6545 return current_function_decl;
6546 }
6547
6548 /* Finish the cleanup function begun by start_cleanup_fn. */
6549
6550 static void
6551 end_cleanup_fn (void)
6552 {
6553 expand_or_defer_fn (finish_function (0));
6554
6555 pop_from_top_level ();
6556 }
6557
6558 /* Generate code to handle the destruction of DECL, an object with
6559 static storage duration. */
6560
6561 tree
6562 register_dtor_fn (tree decl)
6563 {
6564 tree cleanup;
6565 tree compound_stmt;
6566 tree fcall;
6567 tree type;
6568 bool use_dtor;
6569 tree arg0, arg1 = NULL_TREE, arg2 = NULL_TREE;
6570
6571 type = TREE_TYPE (decl);
6572 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
6573 return void_zero_node;
6574
6575 /* If we're using "__cxa_atexit" (or "__aeabi_atexit"), and DECL is
6576 a class object, we can just pass the destructor to
6577 "__cxa_atexit"; we don't have to build a temporary function to do
6578 the cleanup. */
6579 use_dtor = (flag_use_cxa_atexit
6580 && !targetm.cxx.use_atexit_for_cxa_atexit ()
6581 && CLASS_TYPE_P (type));
6582 if (use_dtor)
6583 {
6584 int idx;
6585
6586 /* Find the destructor. */
6587 idx = lookup_fnfields_1 (type, complete_dtor_identifier);
6588 gcc_assert (idx >= 0);
6589 cleanup = VEC_index (tree, CLASSTYPE_METHOD_VEC (type), idx);
6590 /* Make sure it is accessible. */
6591 perform_or_defer_access_check (TYPE_BINFO (type), cleanup, cleanup);
6592 }
6593 else
6594 {
6595 /* Call build_cleanup before we enter the anonymous function so
6596 that any access checks will be done relative to the current
6597 scope, rather than the scope of the anonymous function. */
6598 build_cleanup (decl);
6599
6600 /* Now start the function. */
6601 cleanup = start_cleanup_fn ();
6602
6603 /* Now, recompute the cleanup. It may contain SAVE_EXPRs that refer
6604 to the original function, rather than the anonymous one. That
6605 will make the back end think that nested functions are in use,
6606 which causes confusion. */
6607 push_deferring_access_checks (dk_no_check);
6608 fcall = build_cleanup (decl);
6609 pop_deferring_access_checks ();
6610
6611 /* Create the body of the anonymous function. */
6612 compound_stmt = begin_compound_stmt (BCS_FN_BODY);
6613 finish_expr_stmt (fcall);
6614 finish_compound_stmt (compound_stmt);
6615 end_cleanup_fn ();
6616 }
6617
6618 /* Call atexit with the cleanup function. */
6619 mark_used (cleanup);
6620 cleanup = build_address (cleanup);
6621 if (flag_use_cxa_atexit && !targetm.cxx.use_atexit_for_cxa_atexit ())
6622 {
6623 tree addr;
6624
6625 if (use_dtor)
6626 {
6627 /* We must convert CLEANUP to the type that "__cxa_atexit"
6628 expects. */
6629 cleanup = build_nop (get_atexit_fn_ptr_type (), cleanup);
6630 /* "__cxa_atexit" will pass the address of DECL to the
6631 cleanup function. */
6632 mark_used (decl);
6633 addr = build_address (decl);
6634 /* The declared type of the parameter to "__cxa_atexit" is
6635 "void *". For plain "T*", we could just let the
6636 machinery in cp_build_function_call convert it -- but if the
6637 type is "cv-qualified T *", then we need to convert it
6638 before passing it in, to avoid spurious errors. */
6639 addr = build_nop (ptr_type_node, addr);
6640 }
6641 else
6642 /* Since the cleanup functions we build ignore the address
6643 they're given, there's no reason to pass the actual address
6644 in, and, in general, it's cheaper to pass NULL than any
6645 other value. */
6646 addr = null_pointer_node;
6647 arg2 = cp_build_addr_expr (get_dso_handle_node (),
6648 tf_warning_or_error);
6649 if (targetm.cxx.use_aeabi_atexit ())
6650 {
6651 arg1 = cleanup;
6652 arg0 = addr;
6653 }
6654 else
6655 {
6656 arg1 = addr;
6657 arg0 = cleanup;
6658 }
6659 }
6660 else
6661 arg0 = cleanup;
6662 return cp_build_function_call_nary (get_atexit_node (), tf_warning_or_error,
6663 arg0, arg1, arg2, NULL_TREE);
6664 }
6665
6666 /* DECL is a VAR_DECL with static storage duration. INIT, if present,
6667 is its initializer. Generate code to handle the construction
6668 and destruction of DECL. */
6669
6670 static void
6671 expand_static_init (tree decl, tree init)
6672 {
6673 gcc_assert (TREE_CODE (decl) == VAR_DECL);
6674 gcc_assert (TREE_STATIC (decl));
6675
6676 /* Some variables require no dynamic initialization. */
6677 if (!init
6678 && TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
6679 return;
6680
6681 if (DECL_FUNCTION_SCOPE_P (decl))
6682 {
6683 /* Emit code to perform this initialization but once. */
6684 tree if_stmt = NULL_TREE, inner_if_stmt = NULL_TREE;
6685 tree then_clause = NULL_TREE, inner_then_clause = NULL_TREE;
6686 tree guard, guard_addr;
6687 tree flag, begin;
6688
6689 /* Emit code to perform this initialization but once. This code
6690 looks like:
6691
6692 static <type> guard;
6693 if (!guard.first_byte) {
6694 if (__cxa_guard_acquire (&guard)) {
6695 bool flag = false;
6696 try {
6697 // Do initialization.
6698 flag = true; __cxa_guard_release (&guard);
6699 // Register variable for destruction at end of program.
6700 } catch {
6701 if (!flag) __cxa_guard_abort (&guard);
6702 }
6703 }
6704
6705 Note that the `flag' variable is only set to 1 *after* the
6706 initialization is complete. This ensures that an exception,
6707 thrown during the construction, will cause the variable to
6708 reinitialized when we pass through this code again, as per:
6709
6710 [stmt.dcl]
6711
6712 If the initialization exits by throwing an exception, the
6713 initialization is not complete, so it will be tried again
6714 the next time control enters the declaration.
6715
6716 This process should be thread-safe, too; multiple threads
6717 should not be able to initialize the variable more than
6718 once. */
6719
6720 /* Create the guard variable. */
6721 guard = get_guard (decl);
6722
6723 /* This optimization isn't safe on targets with relaxed memory
6724 consistency. On such targets we force synchronization in
6725 __cxa_guard_acquire. */
6726 if (!targetm.relaxed_ordering || !flag_threadsafe_statics)
6727 {
6728 /* Begin the conditional initialization. */
6729 if_stmt = begin_if_stmt ();
6730 finish_if_stmt_cond (get_guard_cond (guard), if_stmt);
6731 then_clause = begin_compound_stmt (BCS_NO_SCOPE);
6732 }
6733
6734 if (flag_threadsafe_statics)
6735 {
6736 tree vfntype = NULL_TREE;
6737 tree acquire_name, release_name, abort_name;
6738 tree acquire_fn, release_fn, abort_fn;
6739 guard_addr = build_address (guard);
6740
6741 acquire_name = get_identifier ("__cxa_guard_acquire");
6742 release_name = get_identifier ("__cxa_guard_release");
6743 abort_name = get_identifier ("__cxa_guard_abort");
6744 acquire_fn = identifier_global_value (acquire_name);
6745 release_fn = identifier_global_value (release_name);
6746 abort_fn = identifier_global_value (abort_name);
6747 if (!acquire_fn)
6748 acquire_fn = push_library_fn
6749 (acquire_name, build_function_type_list (integer_type_node,
6750 TREE_TYPE (guard_addr),
6751 NULL_TREE),
6752 NULL_TREE);
6753 if (!release_fn || !abort_fn)
6754 vfntype = build_function_type_list (void_type_node,
6755 TREE_TYPE (guard_addr),
6756 NULL_TREE);
6757 if (!release_fn)
6758 release_fn = push_library_fn (release_name, vfntype, NULL_TREE);
6759 if (!abort_fn)
6760 abort_fn = push_library_fn (abort_name, vfntype, NULL_TREE);
6761
6762 inner_if_stmt = begin_if_stmt ();
6763 finish_if_stmt_cond (build_call_n (acquire_fn, 1, guard_addr),
6764 inner_if_stmt);
6765
6766 inner_then_clause = begin_compound_stmt (BCS_NO_SCOPE);
6767 begin = get_target_expr (boolean_false_node);
6768 flag = TARGET_EXPR_SLOT (begin);
6769
6770 TARGET_EXPR_CLEANUP (begin)
6771 = build3 (COND_EXPR, void_type_node, flag,
6772 void_zero_node,
6773 build_call_n (abort_fn, 1, guard_addr));
6774 CLEANUP_EH_ONLY (begin) = 1;
6775
6776 /* Do the initialization itself. */
6777 init = add_stmt_to_compound (begin, init);
6778 init = add_stmt_to_compound
6779 (init, build2 (MODIFY_EXPR, void_type_node, flag, boolean_true_node));
6780 init = add_stmt_to_compound
6781 (init, build_call_n (release_fn, 1, guard_addr));
6782 }
6783 else
6784 init = add_stmt_to_compound (init, set_guard (guard));
6785
6786 /* Use atexit to register a function for destroying this static
6787 variable. */
6788 init = add_stmt_to_compound (init, register_dtor_fn (decl));
6789
6790 finish_expr_stmt (init);
6791
6792 if (flag_threadsafe_statics)
6793 {
6794 finish_compound_stmt (inner_then_clause);
6795 finish_then_clause (inner_if_stmt);
6796 finish_if_stmt (inner_if_stmt);
6797 }
6798
6799 if (!targetm.relaxed_ordering || !flag_threadsafe_statics)
6800 {
6801 finish_compound_stmt (then_clause);
6802 finish_then_clause (if_stmt);
6803 finish_if_stmt (if_stmt);
6804 }
6805 }
6806 else
6807 static_aggregates = tree_cons (init, decl, static_aggregates);
6808 }
6809
6810 \f
6811 /* Make TYPE a complete type based on INITIAL_VALUE.
6812 Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
6813 2 if there was no information (in which case assume 0 if DO_DEFAULT),
6814 3 if the initializer list is empty (in pedantic mode). */
6815
6816 int
6817 cp_complete_array_type (tree *ptype, tree initial_value, bool do_default)
6818 {
6819 int failure;
6820 tree type, elt_type;
6821
6822 if (initial_value)
6823 {
6824 unsigned HOST_WIDE_INT i;
6825 tree value;
6826
6827 /* An array of character type can be initialized from a
6828 brace-enclosed string constant.
6829
6830 FIXME: this code is duplicated from reshape_init. Probably
6831 we should just call reshape_init here? */
6832 if (char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (*ptype)))
6833 && TREE_CODE (initial_value) == CONSTRUCTOR
6834 && !VEC_empty (constructor_elt, CONSTRUCTOR_ELTS (initial_value)))
6835 {
6836 VEC(constructor_elt,gc) *v = CONSTRUCTOR_ELTS (initial_value);
6837 tree value = VEC_index (constructor_elt, v, 0)->value;
6838
6839 if (TREE_CODE (value) == STRING_CST
6840 && VEC_length (constructor_elt, v) == 1)
6841 initial_value = value;
6842 }
6843
6844 /* If any of the elements are parameter packs, we can't actually
6845 complete this type now because the array size is dependent. */
6846 if (TREE_CODE (initial_value) == CONSTRUCTOR)
6847 {
6848 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (initial_value),
6849 i, value)
6850 {
6851 if (PACK_EXPANSION_P (value))
6852 return 0;
6853 }
6854 }
6855 }
6856
6857 failure = complete_array_type (ptype, initial_value, do_default);
6858
6859 /* We can create the array before the element type is complete, which
6860 means that we didn't have these two bits set in the original type
6861 either. In completing the type, we are expected to propagate these
6862 bits. See also complete_type which does the same thing for arrays
6863 of fixed size. */
6864 type = *ptype;
6865 if (TYPE_DOMAIN (type))
6866 {
6867 elt_type = TREE_TYPE (type);
6868 TYPE_NEEDS_CONSTRUCTING (type) = TYPE_NEEDS_CONSTRUCTING (elt_type);
6869 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
6870 = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (elt_type);
6871 }
6872
6873 return failure;
6874 }
6875
6876 /* As above, but either give an error or reject zero-size arrays, depending
6877 on COMPLAIN. */
6878
6879 int
6880 cp_complete_array_type_or_error (tree *ptype, tree initial_value,
6881 bool do_default, tsubst_flags_t complain)
6882 {
6883 int failure;
6884 bool sfinae = !(complain & tf_error);
6885 /* In SFINAE context we can't be lenient about zero-size arrays. */
6886 if (sfinae)
6887 ++pedantic;
6888 failure = cp_complete_array_type (ptype, initial_value, do_default);
6889 if (sfinae)
6890 --pedantic;
6891 if (failure)
6892 {
6893 if (sfinae)
6894 /* Not an error. */;
6895 else if (failure == 1)
6896 error ("initializer fails to determine size of %qT", *ptype);
6897 else if (failure == 2)
6898 {
6899 if (do_default)
6900 error ("array size missing in %qT", *ptype);
6901 }
6902 else if (failure == 3)
6903 error ("zero-size array %qT", *ptype);
6904 *ptype = error_mark_node;
6905 }
6906 return failure;
6907 }
6908 \f
6909 /* Return zero if something is declared to be a member of type
6910 CTYPE when in the context of CUR_TYPE. STRING is the error
6911 message to print in that case. Otherwise, quietly return 1. */
6912
6913 static int
6914 member_function_or_else (tree ctype, tree cur_type, enum overload_flags flags)
6915 {
6916 if (ctype && ctype != cur_type)
6917 {
6918 if (flags == DTOR_FLAG)
6919 error ("destructor for alien class %qT cannot be a member", ctype);
6920 else
6921 error ("constructor for alien class %qT cannot be a member", ctype);
6922 return 0;
6923 }
6924 return 1;
6925 }
6926 \f
6927 /* Subroutine of `grokdeclarator'. */
6928
6929 /* Generate errors possibly applicable for a given set of specifiers.
6930 This is for ARM $7.1.2. */
6931
6932 static void
6933 bad_specifiers (tree object,
6934 enum bad_spec_place type,
6935 int virtualp,
6936 int quals,
6937 int inlinep,
6938 int friendp,
6939 int raises)
6940 {
6941 switch (type)
6942 {
6943 case BSP_VAR:
6944 if (virtualp)
6945 error ("%qD declared as a %<virtual%> variable", object);
6946 if (inlinep)
6947 error ("%qD declared as an %<inline%> variable", object);
6948 if (quals)
6949 error ("%<const%> and %<volatile%> function specifiers on "
6950 "%qD invalid in variable declaration", object);
6951 break;
6952 case BSP_PARM:
6953 if (virtualp)
6954 error ("%qD declared as a %<virtual%> parameter", object);
6955 if (inlinep)
6956 error ("%qD declared as an %<inline%> parameter", object);
6957 if (quals)
6958 error ("%<const%> and %<volatile%> function specifiers on "
6959 "%qD invalid in parameter declaration", object);
6960 break;
6961 case BSP_TYPE:
6962 if (virtualp)
6963 error ("%qD declared as a %<virtual%> type", object);
6964 if (inlinep)
6965 error ("%qD declared as an %<inline%> type", object);
6966 if (quals)
6967 error ("%<const%> and %<volatile%> function specifiers on "
6968 "%qD invalid in type declaration", object);
6969 break;
6970 case BSP_FIELD:
6971 if (virtualp)
6972 error ("%qD declared as a %<virtual%> field", object);
6973 if (inlinep)
6974 error ("%qD declared as an %<inline%> field", object);
6975 if (quals)
6976 error ("%<const%> and %<volatile%> function specifiers on "
6977 "%qD invalid in field declaration", object);
6978 break;
6979 default:
6980 gcc_unreachable();
6981 }
6982 if (friendp)
6983 error ("%q+D declared as a friend", object);
6984 if (raises
6985 && (TREE_CODE (object) == TYPE_DECL
6986 || (!TYPE_PTRFN_P (TREE_TYPE (object))
6987 && !TYPE_REFFN_P (TREE_TYPE (object))
6988 && !TYPE_PTRMEMFUNC_P (TREE_TYPE (object)))))
6989 error ("%q+D declared with an exception specification", object);
6990 }
6991
6992 /* DECL is a member function or static data member and is presently
6993 being defined. Check that the definition is taking place in a
6994 valid namespace. */
6995
6996 static void
6997 check_class_member_definition_namespace (tree decl)
6998 {
6999 /* These checks only apply to member functions and static data
7000 members. */
7001 gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
7002 || TREE_CODE (decl) == VAR_DECL);
7003 /* We check for problems with specializations in pt.c in
7004 check_specialization_namespace, where we can issue better
7005 diagnostics. */
7006 if (processing_specialization)
7007 return;
7008 /* There are no restrictions on the placement of
7009 explicit instantiations. */
7010 if (processing_explicit_instantiation)
7011 return;
7012 /* [class.mfct]
7013
7014 A member function definition that appears outside of the
7015 class definition shall appear in a namespace scope enclosing
7016 the class definition.
7017
7018 [class.static.data]
7019
7020 The definition for a static data member shall appear in a
7021 namespace scope enclosing the member's class definition. */
7022 if (!is_ancestor (current_namespace, DECL_CONTEXT (decl)))
7023 permerror (input_location, "definition of %qD is not in namespace enclosing %qT",
7024 decl, DECL_CONTEXT (decl));
7025 }
7026
7027 /* Build a PARM_DECL for the "this" parameter. TYPE is the
7028 METHOD_TYPE for a non-static member function; QUALS are the
7029 cv-qualifiers that apply to the function. */
7030
7031 tree
7032 build_this_parm (tree type, cp_cv_quals quals)
7033 {
7034 tree this_type;
7035 tree qual_type;
7036 tree parm;
7037 cp_cv_quals this_quals;
7038
7039 if (CLASS_TYPE_P (type))
7040 {
7041 this_type
7042 = cp_build_qualified_type (type, quals & ~TYPE_QUAL_RESTRICT);
7043 this_type = build_pointer_type (this_type);
7044 }
7045 else
7046 this_type = type_of_this_parm (type);
7047 /* The `this' parameter is implicitly `const'; it cannot be
7048 assigned to. */
7049 this_quals = (quals & TYPE_QUAL_RESTRICT) | TYPE_QUAL_CONST;
7050 qual_type = cp_build_qualified_type (this_type, this_quals);
7051 parm = build_artificial_parm (this_identifier, qual_type);
7052 cp_apply_type_quals_to_decl (this_quals, parm);
7053 return parm;
7054 }
7055
7056 /* DECL is a static member function. Complain if it was declared
7057 with function-cv-quals. */
7058
7059 static void
7060 check_static_quals (tree decl, cp_cv_quals quals)
7061 {
7062 if (quals != TYPE_UNQUALIFIED)
7063 error ("static member function %q#D declared with type qualifiers",
7064 decl);
7065 }
7066
7067 /* CTYPE is class type, or null if non-class.
7068 TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
7069 or METHOD_TYPE.
7070 DECLARATOR is the function's name.
7071 PARMS is a chain of PARM_DECLs for the function.
7072 VIRTUALP is truthvalue of whether the function is virtual or not.
7073 FLAGS are to be passed through to `grokclassfn'.
7074 QUALS are qualifiers indicating whether the function is `const'
7075 or `volatile'.
7076 RAISES is a list of exceptions that this function can raise.
7077 CHECK is 1 if we must find this method in CTYPE, 0 if we should
7078 not look, and -1 if we should not call `grokclassfn' at all.
7079
7080 SFK is the kind of special function (if any) for the new function.
7081
7082 Returns `NULL_TREE' if something goes wrong, after issuing
7083 applicable error messages. */
7084
7085 static tree
7086 grokfndecl (tree ctype,
7087 tree type,
7088 tree declarator,
7089 tree parms,
7090 tree orig_declarator,
7091 int virtualp,
7092 enum overload_flags flags,
7093 cp_cv_quals quals,
7094 tree raises,
7095 int check,
7096 int friendp,
7097 int publicp,
7098 int inlinep,
7099 special_function_kind sfk,
7100 bool funcdef_flag,
7101 int template_count,
7102 tree in_namespace,
7103 tree* attrlist,
7104 location_t location)
7105 {
7106 tree decl;
7107 int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
7108 tree t;
7109
7110 if (raises)
7111 type = build_exception_variant (type, raises);
7112
7113 decl = build_lang_decl (FUNCTION_DECL, declarator, type);
7114
7115 /* If we have an explicit location, use it, otherwise use whatever
7116 build_lang_decl used (probably input_location). */
7117 if (location != UNKNOWN_LOCATION)
7118 DECL_SOURCE_LOCATION (decl) = location;
7119
7120 if (TREE_CODE (type) == METHOD_TYPE)
7121 {
7122 tree parm;
7123 parm = build_this_parm (type, quals);
7124 DECL_CHAIN (parm) = parms;
7125 parms = parm;
7126 }
7127 DECL_ARGUMENTS (decl) = parms;
7128 for (t = parms; t; t = DECL_CHAIN (t))
7129 DECL_CONTEXT (t) = decl;
7130 /* Propagate volatile out from type to decl. */
7131 if (TYPE_VOLATILE (type))
7132 TREE_THIS_VOLATILE (decl) = 1;
7133
7134 /* Setup decl according to sfk. */
7135 switch (sfk)
7136 {
7137 case sfk_constructor:
7138 case sfk_copy_constructor:
7139 case sfk_move_constructor:
7140 DECL_CONSTRUCTOR_P (decl) = 1;
7141 break;
7142 case sfk_destructor:
7143 DECL_DESTRUCTOR_P (decl) = 1;
7144 break;
7145 default:
7146 break;
7147 }
7148
7149 /* If pointers to member functions use the least significant bit to
7150 indicate whether a function is virtual, ensure a pointer
7151 to this function will have that bit clear. */
7152 if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_pfn
7153 && TREE_CODE (type) == METHOD_TYPE
7154 && DECL_ALIGN (decl) < 2 * BITS_PER_UNIT)
7155 DECL_ALIGN (decl) = 2 * BITS_PER_UNIT;
7156
7157 if (friendp
7158 && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
7159 {
7160 if (funcdef_flag)
7161 error
7162 ("defining explicit specialization %qD in friend declaration",
7163 orig_declarator);
7164 else
7165 {
7166 tree fns = TREE_OPERAND (orig_declarator, 0);
7167 tree args = TREE_OPERAND (orig_declarator, 1);
7168
7169 if (PROCESSING_REAL_TEMPLATE_DECL_P ())
7170 {
7171 /* Something like `template <class T> friend void f<T>()'. */
7172 error ("invalid use of template-id %qD in declaration "
7173 "of primary template",
7174 orig_declarator);
7175 return NULL_TREE;
7176 }
7177
7178
7179 /* A friend declaration of the form friend void f<>(). Record
7180 the information in the TEMPLATE_ID_EXPR. */
7181 SET_DECL_IMPLICIT_INSTANTIATION (decl);
7182
7183 if (TREE_CODE (fns) == COMPONENT_REF)
7184 {
7185 /* Due to bison parser ickiness, we will have already looked
7186 up an operator_name or PFUNCNAME within the current class
7187 (see template_id in parse.y). If the current class contains
7188 such a name, we'll get a COMPONENT_REF here. Undo that. */
7189
7190 gcc_assert (TREE_TYPE (TREE_OPERAND (fns, 0))
7191 == current_class_type);
7192 fns = TREE_OPERAND (fns, 1);
7193 }
7194 gcc_assert (TREE_CODE (fns) == IDENTIFIER_NODE
7195 || TREE_CODE (fns) == OVERLOAD);
7196 DECL_TEMPLATE_INFO (decl) = build_template_info (fns, args);
7197
7198 for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
7199 if (TREE_PURPOSE (t)
7200 && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
7201 {
7202 error ("default arguments are not allowed in declaration "
7203 "of friend template specialization %qD",
7204 decl);
7205 return NULL_TREE;
7206 }
7207
7208 if (inlinep)
7209 {
7210 error ("%<inline%> is not allowed in declaration of friend "
7211 "template specialization %qD",
7212 decl);
7213 return NULL_TREE;
7214 }
7215 }
7216 }
7217
7218 /* If this decl has namespace scope, set that up. */
7219 if (in_namespace)
7220 set_decl_namespace (decl, in_namespace, friendp);
7221 else if (!ctype)
7222 DECL_CONTEXT (decl) = FROB_CONTEXT (current_decl_namespace ());
7223
7224 /* `main' and builtins have implicit 'C' linkage. */
7225 if ((MAIN_NAME_P (declarator)
7226 || (IDENTIFIER_LENGTH (declarator) > 10
7227 && IDENTIFIER_POINTER (declarator)[0] == '_'
7228 && IDENTIFIER_POINTER (declarator)[1] == '_'
7229 && strncmp (IDENTIFIER_POINTER (declarator)+2, "builtin_", 8) == 0))
7230 && current_lang_name == lang_name_cplusplus
7231 && ctype == NULL_TREE
7232 && DECL_FILE_SCOPE_P (decl))
7233 SET_DECL_LANGUAGE (decl, lang_c);
7234
7235 /* Should probably propagate const out from type to decl I bet (mrs). */
7236 if (staticp)
7237 {
7238 DECL_STATIC_FUNCTION_P (decl) = 1;
7239 DECL_CONTEXT (decl) = ctype;
7240 }
7241
7242 if (ctype)
7243 {
7244 DECL_CONTEXT (decl) = ctype;
7245 if (funcdef_flag)
7246 check_class_member_definition_namespace (decl);
7247 }
7248
7249 if (ctype == NULL_TREE && DECL_MAIN_P (decl))
7250 {
7251 if (processing_template_decl)
7252 error ("cannot declare %<::main%> to be a template");
7253 if (inlinep)
7254 error ("cannot declare %<::main%> to be inline");
7255 if (!publicp)
7256 error ("cannot declare %<::main%> to be static");
7257 inlinep = 0;
7258 publicp = 1;
7259 }
7260
7261 /* Members of anonymous types and local classes have no linkage; make
7262 them internal. If a typedef is made later, this will be changed. */
7263 if (ctype && (TYPE_ANONYMOUS_P (ctype)
7264 || decl_function_context (TYPE_MAIN_DECL (ctype))))
7265 publicp = 0;
7266
7267 if (publicp && cxx_dialect == cxx98)
7268 {
7269 /* [basic.link]: A name with no linkage (notably, the name of a class
7270 or enumeration declared in a local scope) shall not be used to
7271 declare an entity with linkage.
7272
7273 DR 757 relaxes this restriction for C++0x. */
7274 t = no_linkage_check (TREE_TYPE (decl),
7275 /*relaxed_p=*/false);
7276 if (t)
7277 {
7278 if (TYPE_ANONYMOUS_P (t))
7279 {
7280 if (DECL_EXTERN_C_P (decl))
7281 /* Allow this; it's pretty common in C. */;
7282 else
7283 {
7284 permerror (input_location, "anonymous type with no linkage "
7285 "used to declare function %q#D with linkage",
7286 decl);
7287 if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
7288 permerror (input_location, "%q+#D does not refer to the unqualified "
7289 "type, so it is not used for linkage",
7290 TYPE_NAME (t));
7291 }
7292 }
7293 else
7294 permerror (input_location, "type %qT with no linkage used to "
7295 "declare function %q#D with linkage", t, decl);
7296 }
7297 }
7298
7299 TREE_PUBLIC (decl) = publicp;
7300 if (! publicp)
7301 {
7302 DECL_INTERFACE_KNOWN (decl) = 1;
7303 DECL_NOT_REALLY_EXTERN (decl) = 1;
7304 }
7305
7306 /* If the declaration was declared inline, mark it as such. */
7307 if (inlinep)
7308 DECL_DECLARED_INLINE_P (decl) = 1;
7309 if (inlinep & 2)
7310 DECL_DECLARED_CONSTEXPR_P (decl) = true;
7311
7312 DECL_EXTERNAL (decl) = 1;
7313 if (quals && TREE_CODE (type) == FUNCTION_TYPE)
7314 {
7315 error (ctype
7316 ? G_("static member function %qD cannot have cv-qualifier")
7317 : G_("non-member function %qD cannot have cv-qualifier"),
7318 decl);
7319 quals = TYPE_UNQUALIFIED;
7320 }
7321
7322 if (IDENTIFIER_OPNAME_P (DECL_NAME (decl))
7323 && !grok_op_properties (decl, /*complain=*/true))
7324 return NULL_TREE;
7325 else if (UDLIT_OPER_P (DECL_NAME (decl)))
7326 {
7327 bool long_long_unsigned_p;
7328 bool long_double_p;
7329 const char *suffix = NULL;
7330 /* [over.literal]/6: Literal operators shall not have C linkage. */
7331 if (DECL_LANGUAGE (decl) == lang_c)
7332 {
7333 error ("literal operator with C linkage");
7334 return NULL_TREE;
7335 }
7336
7337 if (DECL_NAMESPACE_SCOPE_P (decl))
7338 {
7339 if (!check_literal_operator_args (decl, &long_long_unsigned_p,
7340 &long_double_p))
7341 {
7342 error ("%qD has invalid argument list", decl);
7343 return NULL_TREE;
7344 }
7345
7346 suffix = UDLIT_OP_SUFFIX (DECL_NAME (decl));
7347 if (long_long_unsigned_p)
7348 {
7349 if (cpp_interpret_int_suffix (suffix, strlen (suffix)))
7350 warning (0, "integer suffix %<%s%>"
7351 " shadowed by implementation", suffix);
7352 }
7353 else if (long_double_p)
7354 {
7355 if (cpp_interpret_float_suffix (suffix, strlen (suffix)))
7356 warning (0, "floating point suffix %<%s%>"
7357 " shadowed by implementation", suffix);
7358 }
7359 }
7360 else
7361 {
7362 error ("%qD must be a non-member function", decl);
7363 return NULL_TREE;
7364 }
7365 }
7366
7367 if (funcdef_flag)
7368 /* Make the init_value nonzero so pushdecl knows this is not
7369 tentative. error_mark_node is replaced later with the BLOCK. */
7370 DECL_INITIAL (decl) = error_mark_node;
7371
7372 if (TYPE_NOTHROW_P (type) || nothrow_libfn_p (decl))
7373 TREE_NOTHROW (decl) = 1;
7374
7375 /* Caller will do the rest of this. */
7376 if (check < 0)
7377 return decl;
7378
7379 if (ctype != NULL_TREE)
7380 grokclassfn (ctype, decl, flags);
7381
7382 decl = check_explicit_specialization (orig_declarator, decl,
7383 template_count,
7384 2 * funcdef_flag +
7385 4 * (friendp != 0));
7386 if (decl == error_mark_node)
7387 return NULL_TREE;
7388
7389 if (DECL_STATIC_FUNCTION_P (decl))
7390 check_static_quals (decl, quals);
7391
7392 if (attrlist)
7393 {
7394 cplus_decl_attributes (&decl, *attrlist, 0);
7395 *attrlist = NULL_TREE;
7396 }
7397
7398 /* Check main's type after attributes have been applied. */
7399 if (ctype == NULL_TREE && DECL_MAIN_P (decl))
7400 {
7401 if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
7402 integer_type_node))
7403 {
7404 tree oldtypeargs = TYPE_ARG_TYPES (TREE_TYPE (decl));
7405 tree newtype;
7406 error ("%<::main%> must return %<int%>");
7407 newtype = build_function_type (integer_type_node, oldtypeargs);
7408 TREE_TYPE (decl) = newtype;
7409 }
7410 if (warn_main)
7411 check_main_parameter_types (decl);
7412 }
7413
7414 if (ctype != NULL_TREE
7415 && (! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
7416 && check)
7417 {
7418 tree old_decl = check_classfn (ctype, decl,
7419 (processing_template_decl
7420 > template_class_depth (ctype))
7421 ? current_template_parms
7422 : NULL_TREE);
7423
7424 if (old_decl == error_mark_node)
7425 return NULL_TREE;
7426
7427 if (old_decl)
7428 {
7429 tree ok;
7430 tree pushed_scope;
7431
7432 if (TREE_CODE (old_decl) == TEMPLATE_DECL)
7433 /* Because grokfndecl is always supposed to return a
7434 FUNCTION_DECL, we pull out the DECL_TEMPLATE_RESULT
7435 here. We depend on our callers to figure out that its
7436 really a template that's being returned. */
7437 old_decl = DECL_TEMPLATE_RESULT (old_decl);
7438
7439 if (DECL_STATIC_FUNCTION_P (old_decl)
7440 && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
7441 {
7442 /* Remove the `this' parm added by grokclassfn. */
7443 revert_static_member_fn (decl);
7444 check_static_quals (decl, quals);
7445 }
7446 if (DECL_ARTIFICIAL (old_decl))
7447 {
7448 error ("definition of implicitly-declared %qD", old_decl);
7449 return NULL_TREE;
7450 }
7451 else if (DECL_DEFAULTED_FN (old_decl))
7452 {
7453 error ("definition of explicitly-defaulted %q+D", decl);
7454 error ("%q+#D explicitly defaulted here", old_decl);
7455 return NULL_TREE;
7456 }
7457
7458 /* Since we've smashed OLD_DECL to its
7459 DECL_TEMPLATE_RESULT, we must do the same to DECL. */
7460 if (TREE_CODE (decl) == TEMPLATE_DECL)
7461 decl = DECL_TEMPLATE_RESULT (decl);
7462
7463 /* Attempt to merge the declarations. This can fail, in
7464 the case of some invalid specialization declarations. */
7465 pushed_scope = push_scope (ctype);
7466 ok = duplicate_decls (decl, old_decl, friendp);
7467 if (pushed_scope)
7468 pop_scope (pushed_scope);
7469 if (!ok)
7470 {
7471 error ("no %q#D member function declared in class %qT",
7472 decl, ctype);
7473 return NULL_TREE;
7474 }
7475 return old_decl;
7476 }
7477 }
7478
7479 if (DECL_CONSTRUCTOR_P (decl) && !grok_ctor_properties (ctype, decl))
7480 return NULL_TREE;
7481
7482 if (ctype == NULL_TREE || check)
7483 return decl;
7484
7485 if (virtualp)
7486 DECL_VIRTUAL_P (decl) = 1;
7487
7488 return decl;
7489 }
7490
7491 /* decl is a FUNCTION_DECL.
7492 specifiers are the parsed virt-specifiers.
7493
7494 Set flags to reflect the virt-specifiers.
7495
7496 Returns decl. */
7497
7498 static tree
7499 set_virt_specifiers (tree decl, cp_virt_specifiers specifiers)
7500 {
7501 if (decl == NULL_TREE)
7502 return decl;
7503 if (specifiers & VIRT_SPEC_OVERRIDE)
7504 DECL_OVERRIDE_P (decl) = 1;
7505 if (specifiers & VIRT_SPEC_FINAL)
7506 DECL_FINAL_P (decl) = 1;
7507 return decl;
7508 }
7509
7510 /* DECL is a VAR_DECL for a static data member. Set flags to reflect
7511 the linkage that DECL will receive in the object file. */
7512
7513 static void
7514 set_linkage_for_static_data_member (tree decl)
7515 {
7516 /* A static data member always has static storage duration and
7517 external linkage. Note that static data members are forbidden in
7518 local classes -- the only situation in which a class has
7519 non-external linkage. */
7520 TREE_PUBLIC (decl) = 1;
7521 TREE_STATIC (decl) = 1;
7522 /* For non-template classes, static data members are always put
7523 out in exactly those files where they are defined, just as
7524 with ordinary namespace-scope variables. */
7525 if (!processing_template_decl)
7526 DECL_INTERFACE_KNOWN (decl) = 1;
7527 }
7528
7529 /* Create a VAR_DECL named NAME with the indicated TYPE.
7530
7531 If SCOPE is non-NULL, it is the class type or namespace containing
7532 the variable. If SCOPE is NULL, the variable should is created in
7533 the innermost enclosings scope. */
7534
7535 static tree
7536 grokvardecl (tree type,
7537 tree name,
7538 const cp_decl_specifier_seq *declspecs,
7539 int initialized,
7540 int constp,
7541 tree scope)
7542 {
7543 tree decl;
7544 tree explicit_scope;
7545
7546 gcc_assert (!name || TREE_CODE (name) == IDENTIFIER_NODE);
7547
7548 /* Compute the scope in which to place the variable, but remember
7549 whether or not that scope was explicitly specified by the user. */
7550 explicit_scope = scope;
7551 if (!scope)
7552 {
7553 /* An explicit "extern" specifier indicates a namespace-scope
7554 variable. */
7555 if (declspecs->storage_class == sc_extern)
7556 scope = current_decl_namespace ();
7557 else if (!at_function_scope_p ())
7558 scope = current_scope ();
7559 }
7560
7561 if (scope
7562 && (/* If the variable is a namespace-scope variable declared in a
7563 template, we need DECL_LANG_SPECIFIC. */
7564 (TREE_CODE (scope) == NAMESPACE_DECL && processing_template_decl)
7565 /* Similarly for namespace-scope variables with language linkage
7566 other than C++. */
7567 || (TREE_CODE (scope) == NAMESPACE_DECL
7568 && current_lang_name != lang_name_cplusplus)
7569 /* Similarly for static data members. */
7570 || TYPE_P (scope)))
7571 decl = build_lang_decl (VAR_DECL, name, type);
7572 else
7573 decl = build_decl (input_location, VAR_DECL, name, type);
7574
7575 if (explicit_scope && TREE_CODE (explicit_scope) == NAMESPACE_DECL)
7576 set_decl_namespace (decl, explicit_scope, 0);
7577 else
7578 DECL_CONTEXT (decl) = FROB_CONTEXT (scope);
7579
7580 if (declspecs->storage_class == sc_extern)
7581 {
7582 DECL_THIS_EXTERN (decl) = 1;
7583 DECL_EXTERNAL (decl) = !initialized;
7584 }
7585
7586 if (DECL_CLASS_SCOPE_P (decl))
7587 {
7588 set_linkage_for_static_data_member (decl);
7589 /* This function is only called with out-of-class definitions. */
7590 DECL_EXTERNAL (decl) = 0;
7591 check_class_member_definition_namespace (decl);
7592 }
7593 /* At top level, either `static' or no s.c. makes a definition
7594 (perhaps tentative), and absence of `static' makes it public. */
7595 else if (toplevel_bindings_p ())
7596 {
7597 TREE_PUBLIC (decl) = (declspecs->storage_class != sc_static
7598 && (DECL_THIS_EXTERN (decl) || ! constp));
7599 TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
7600 }
7601 /* Not at top level, only `static' makes a static definition. */
7602 else
7603 {
7604 TREE_STATIC (decl) = declspecs->storage_class == sc_static;
7605 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
7606 }
7607
7608 if (declspecs->specs[(int)ds_thread])
7609 DECL_TLS_MODEL (decl) = decl_default_tls_model (decl);
7610
7611 /* If the type of the decl has no linkage, make sure that we'll
7612 notice that in mark_used. */
7613 if (cxx_dialect > cxx98
7614 && decl_linkage (decl) != lk_none
7615 && DECL_LANG_SPECIFIC (decl) == NULL
7616 && !DECL_EXTERN_C_P (decl)
7617 && no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false))
7618 retrofit_lang_decl (decl);
7619
7620 if (TREE_PUBLIC (decl))
7621 {
7622 /* [basic.link]: A name with no linkage (notably, the name of a class
7623 or enumeration declared in a local scope) shall not be used to
7624 declare an entity with linkage.
7625
7626 DR 757 relaxes this restriction for C++0x. */
7627 tree t = (cxx_dialect > cxx98 ? NULL_TREE
7628 : no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false));
7629 if (t)
7630 {
7631 if (TYPE_ANONYMOUS_P (t))
7632 {
7633 if (DECL_EXTERN_C_P (decl))
7634 /* Allow this; it's pretty common in C. */
7635 ;
7636 else
7637 {
7638 /* DRs 132, 319 and 389 seem to indicate types with
7639 no linkage can only be used to declare extern "C"
7640 entities. Since it's not always an error in the
7641 ISO C++ 90 Standard, we only issue a warning. */
7642 warning (0, "anonymous type with no linkage used to declare "
7643 "variable %q#D with linkage", decl);
7644 if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
7645 warning (0, "%q+#D does not refer to the unqualified "
7646 "type, so it is not used for linkage",
7647 TYPE_NAME (t));
7648 }
7649 }
7650 else
7651 warning (0, "type %qT with no linkage used to declare variable "
7652 "%q#D with linkage", t, decl);
7653 }
7654 }
7655 else
7656 DECL_INTERFACE_KNOWN (decl) = 1;
7657
7658 return decl;
7659 }
7660
7661 /* Create and return a canonical pointer to member function type, for
7662 TYPE, which is a POINTER_TYPE to a METHOD_TYPE. */
7663
7664 tree
7665 build_ptrmemfunc_type (tree type)
7666 {
7667 tree field, fields;
7668 tree t;
7669 tree unqualified_variant = NULL_TREE;
7670
7671 if (type == error_mark_node)
7672 return type;
7673
7674 /* If a canonical type already exists for this type, use it. We use
7675 this method instead of type_hash_canon, because it only does a
7676 simple equality check on the list of field members. */
7677
7678 if ((t = TYPE_GET_PTRMEMFUNC_TYPE (type)))
7679 return t;
7680
7681 /* Make sure that we always have the unqualified pointer-to-member
7682 type first. */
7683 if (cp_type_quals (type) != TYPE_UNQUALIFIED)
7684 unqualified_variant
7685 = build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type));
7686
7687 t = make_class_type (RECORD_TYPE);
7688 xref_basetypes (t, NULL_TREE);
7689
7690 /* Let the front end know this is a pointer to member function... */
7691 TYPE_PTRMEMFUNC_FLAG (t) = 1;
7692 /* ... and not really a class type. */
7693 SET_CLASS_TYPE_P (t, 0);
7694
7695 field = build_decl (input_location, FIELD_DECL, pfn_identifier, type);
7696 fields = field;
7697
7698 field = build_decl (input_location, FIELD_DECL, delta_identifier,
7699 delta_type_node);
7700 DECL_CHAIN (field) = fields;
7701 fields = field;
7702
7703 finish_builtin_struct (t, "__ptrmemfunc_type", fields, ptr_type_node);
7704
7705 /* Zap out the name so that the back end will give us the debugging
7706 information for this anonymous RECORD_TYPE. */
7707 TYPE_NAME (t) = NULL_TREE;
7708
7709 /* If this is not the unqualified form of this pointer-to-member
7710 type, set the TYPE_MAIN_VARIANT for this type to be the
7711 unqualified type. Since they are actually RECORD_TYPEs that are
7712 not variants of each other, we must do this manually.
7713 As we just built a new type there is no need to do yet another copy. */
7714 if (cp_type_quals (type) != TYPE_UNQUALIFIED)
7715 {
7716 int type_quals = cp_type_quals (type);
7717 TYPE_READONLY (t) = (type_quals & TYPE_QUAL_CONST) != 0;
7718 TYPE_VOLATILE (t) = (type_quals & TYPE_QUAL_VOLATILE) != 0;
7719 TYPE_RESTRICT (t) = (type_quals & TYPE_QUAL_RESTRICT) != 0;
7720 TYPE_MAIN_VARIANT (t) = unqualified_variant;
7721 TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (unqualified_variant);
7722 TYPE_NEXT_VARIANT (unqualified_variant) = t;
7723 TREE_TYPE (TYPE_BINFO (t)) = t;
7724 }
7725
7726 /* Cache this pointer-to-member type so that we can find it again
7727 later. */
7728 TYPE_SET_PTRMEMFUNC_TYPE (type, t);
7729
7730 if (TYPE_STRUCTURAL_EQUALITY_P (type))
7731 SET_TYPE_STRUCTURAL_EQUALITY (t);
7732 else if (TYPE_CANONICAL (type) != type)
7733 TYPE_CANONICAL (t) = build_ptrmemfunc_type (TYPE_CANONICAL (type));
7734
7735 return t;
7736 }
7737
7738 /* Create and return a pointer to data member type. */
7739
7740 tree
7741 build_ptrmem_type (tree class_type, tree member_type)
7742 {
7743 if (TREE_CODE (member_type) == METHOD_TYPE)
7744 {
7745 cp_cv_quals quals = type_memfn_quals (member_type);
7746 member_type = build_memfn_type (member_type, class_type, quals);
7747 return build_ptrmemfunc_type (build_pointer_type (member_type));
7748 }
7749 else
7750 {
7751 gcc_assert (TREE_CODE (member_type) != FUNCTION_TYPE);
7752 return build_offset_type (class_type, member_type);
7753 }
7754 }
7755
7756 /* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
7757 Check to see that the definition is valid. Issue appropriate error
7758 messages. Return 1 if the definition is particularly bad, or 0
7759 otherwise. */
7760
7761 static int
7762 check_static_variable_definition (tree decl, tree type)
7763 {
7764 /* Can't check yet if we don't know the type. */
7765 if (dependent_type_p (type))
7766 return 0;
7767 /* If DECL is declared constexpr, we'll do the appropriate checks
7768 in check_initializer. */
7769 if (DECL_P (decl) && DECL_DECLARED_CONSTEXPR_P (decl))
7770 return 0;
7771 else if (cxx_dialect >= cxx0x && !INTEGRAL_OR_ENUMERATION_TYPE_P (type))
7772 {
7773 if (literal_type_p (type))
7774 permerror (input_location,
7775 "%<constexpr%> needed for in-class initialization of "
7776 "static data member %q#D of non-integral type", decl);
7777 else
7778 error ("in-class initialization of static data member %q#D of "
7779 "non-literal type", decl);
7780 return 1;
7781 }
7782
7783 /* Motion 10 at San Diego: If a static const integral data member is
7784 initialized with an integral constant expression, the initializer
7785 may appear either in the declaration (within the class), or in
7786 the definition, but not both. If it appears in the class, the
7787 member is a member constant. The file-scope definition is always
7788 required. */
7789 if (!ARITHMETIC_TYPE_P (type) && TREE_CODE (type) != ENUMERAL_TYPE)
7790 {
7791 error ("invalid in-class initialization of static data member "
7792 "of non-integral type %qT",
7793 type);
7794 return 1;
7795 }
7796 else if (!CP_TYPE_CONST_P (type))
7797 error ("ISO C++ forbids in-class initialization of non-const "
7798 "static member %qD",
7799 decl);
7800 else if (!INTEGRAL_OR_ENUMERATION_TYPE_P (type))
7801 pedwarn (input_location, OPT_pedantic, "ISO C++ forbids initialization of member constant "
7802 "%qD of non-integral type %qT", decl, type);
7803
7804 return 0;
7805 }
7806
7807 /* *expr_p is part of the TYPE_SIZE of a variably-sized array. If any
7808 SAVE_EXPRs in *expr_p wrap expressions with side-effects, break those
7809 expressions out into temporary variables so that walk_tree doesn't
7810 step into them (c++/15764). */
7811
7812 static tree
7813 stabilize_save_expr_r (tree *expr_p, int *walk_subtrees, void *data)
7814 {
7815 struct pointer_set_t *pset = (struct pointer_set_t *)data;
7816 tree expr = *expr_p;
7817 if (TREE_CODE (expr) == SAVE_EXPR)
7818 {
7819 tree op = TREE_OPERAND (expr, 0);
7820 cp_walk_tree (&op, stabilize_save_expr_r, data, pset);
7821 if (TREE_SIDE_EFFECTS (op))
7822 TREE_OPERAND (expr, 0) = get_temp_regvar (TREE_TYPE (op), op);
7823 *walk_subtrees = 0;
7824 }
7825 else if (!EXPR_P (expr) || !TREE_SIDE_EFFECTS (expr))
7826 *walk_subtrees = 0;
7827 return NULL;
7828 }
7829
7830 /* Entry point for the above. */
7831
7832 static void
7833 stabilize_vla_size (tree size)
7834 {
7835 struct pointer_set_t *pset = pointer_set_create ();
7836 /* Break out any function calls into temporary variables. */
7837 cp_walk_tree (&size, stabilize_save_expr_r, pset, pset);
7838 }
7839
7840 /* Given the SIZE (i.e., number of elements) in an array, compute an
7841 appropriate index type for the array. If non-NULL, NAME is the
7842 name of the thing being declared. */
7843
7844 tree
7845 compute_array_index_type (tree name, tree size, tsubst_flags_t complain)
7846 {
7847 tree type;
7848 tree itype;
7849 tree osize = size;
7850 tree abi_1_itype = NULL_TREE;
7851
7852 if (error_operand_p (size))
7853 return error_mark_node;
7854
7855 type = TREE_TYPE (size);
7856 /* type_dependent_expression_p? */
7857 if (!dependent_type_p (type))
7858 {
7859 mark_rvalue_use (size);
7860
7861 if (cxx_dialect < cxx0x && TREE_CODE (size) == NOP_EXPR
7862 && TREE_SIDE_EFFECTS (size))
7863 /* In C++98, we mark a non-constant array bound with a magic
7864 NOP_EXPR with TREE_SIDE_EFFECTS; don't fold in that case. */;
7865 else
7866 {
7867 size = fold_non_dependent_expr (size);
7868
7869 if (CLASS_TYPE_P (type)
7870 && CLASSTYPE_LITERAL_P (type))
7871 {
7872 size = build_expr_type_conversion (WANT_INT, size, true);
7873 if (!size)
7874 {
7875 if (!(complain & tf_error))
7876 return error_mark_node;
7877 if (name)
7878 error ("size of array %qD has non-integral type %qT",
7879 name, type);
7880 else
7881 error ("size of array has non-integral type %qT", type);
7882 size = integer_one_node;
7883 }
7884 if (size == error_mark_node)
7885 return error_mark_node;
7886 type = TREE_TYPE (size);
7887 /* We didn't support this case in GCC 3.2, so don't bother
7888 trying to model it now in ABI v1. */
7889 abi_1_itype = error_mark_node;
7890 }
7891
7892 size = maybe_constant_value (size);
7893 if (!TREE_CONSTANT (size))
7894 size = osize;
7895 }
7896
7897 if (error_operand_p (size))
7898 return error_mark_node;
7899
7900 /* The array bound must be an integer type. */
7901 if (!INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
7902 {
7903 if (!(complain & tf_error))
7904 return error_mark_node;
7905 if (name)
7906 error ("size of array %qD has non-integral type %qT", name, type);
7907 else
7908 error ("size of array has non-integral type %qT", type);
7909 size = integer_one_node;
7910 type = TREE_TYPE (size);
7911 }
7912 }
7913
7914 /* A type is dependent if it is...an array type constructed from any
7915 dependent type or whose size is specified by a constant expression
7916 that is value-dependent. */
7917 /* We can only call value_dependent_expression_p on integral constant
7918 expressions; treat non-constant expressions as dependent, too. */
7919 if (processing_template_decl
7920 && (dependent_type_p (type)
7921 || !TREE_CONSTANT (size) || value_dependent_expression_p (size)))
7922 {
7923 /* We cannot do any checking for a SIZE that isn't known to be
7924 constant. Just build the index type and mark that it requires
7925 structural equality checks. */
7926 itype = build_index_type (build_min (MINUS_EXPR, sizetype,
7927 size, integer_one_node));
7928 TYPE_DEPENDENT_P (itype) = 1;
7929 TYPE_DEPENDENT_P_VALID (itype) = 1;
7930 SET_TYPE_STRUCTURAL_EQUALITY (itype);
7931 return itype;
7932 }
7933
7934 if (!abi_version_at_least (2) && processing_template_decl
7935 && abi_1_itype == NULL_TREE)
7936 /* For abi-1, we handled all instances in templates the same way,
7937 even when they were non-dependent. This affects the manglings
7938 produced. So, we do the normal checking for non-dependent
7939 sizes, but at the end we'll return the same type that abi-1
7940 would have, but with TYPE_CANONICAL set to the "right"
7941 value that the current ABI would provide. */
7942 abi_1_itype = build_index_type (build_min (MINUS_EXPR, sizetype,
7943 osize, integer_one_node));
7944
7945 /* Normally, the array-bound will be a constant. */
7946 if (TREE_CODE (size) == INTEGER_CST)
7947 {
7948 /* Check to see if the array bound overflowed. Make that an
7949 error, no matter how generous we're being. */
7950 constant_expression_error (size);
7951
7952 /* An array must have a positive number of elements. */
7953 if (INT_CST_LT (size, integer_zero_node))
7954 {
7955 if (!(complain & tf_error))
7956 return error_mark_node;
7957 if (name)
7958 error ("size of array %qD is negative", name);
7959 else
7960 error ("size of array is negative");
7961 size = integer_one_node;
7962 }
7963 /* As an extension we allow zero-sized arrays. */
7964 else if (integer_zerop (size))
7965 {
7966 if (!(complain & tf_error))
7967 /* We must fail if performing argument deduction (as
7968 indicated by the state of complain), so that
7969 another substitution can be found. */
7970 return error_mark_node;
7971 else if (in_system_header)
7972 /* Allow them in system headers because glibc uses them. */;
7973 else if (name)
7974 pedwarn (input_location, OPT_pedantic, "ISO C++ forbids zero-size array %qD", name);
7975 else
7976 pedwarn (input_location, OPT_pedantic, "ISO C++ forbids zero-size array");
7977 }
7978 }
7979 else if (TREE_CONSTANT (size)
7980 /* We don't allow VLAs at non-function scopes, or during
7981 tentative template substitution. */
7982 || !at_function_scope_p () || !(complain & tf_error))
7983 {
7984 if (!(complain & tf_error))
7985 return error_mark_node;
7986 /* `(int) &fn' is not a valid array bound. */
7987 if (name)
7988 error ("size of array %qD is not an integral constant-expression",
7989 name);
7990 else
7991 error ("size of array is not an integral constant-expression");
7992 size = integer_one_node;
7993 }
7994 else if (pedantic && warn_vla != 0)
7995 {
7996 if (name)
7997 pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array %qD", name);
7998 else
7999 pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array");
8000 }
8001 else if (warn_vla > 0)
8002 {
8003 if (name)
8004 warning (OPT_Wvla,
8005 "variable length array %qD is used", name);
8006 else
8007 warning (OPT_Wvla,
8008 "variable length array is used");
8009 }
8010
8011 if (processing_template_decl && !TREE_CONSTANT (size))
8012 /* A variable sized array. */
8013 itype = build_min (MINUS_EXPR, sizetype, size, integer_one_node);
8014 else
8015 {
8016 HOST_WIDE_INT saved_processing_template_decl;
8017
8018 /* Compute the index of the largest element in the array. It is
8019 one less than the number of elements in the array. We save
8020 and restore PROCESSING_TEMPLATE_DECL so that computations in
8021 cp_build_binary_op will be appropriately folded. */
8022 saved_processing_template_decl = processing_template_decl;
8023 processing_template_decl = 0;
8024 itype = cp_build_binary_op (input_location,
8025 MINUS_EXPR,
8026 cp_convert (ssizetype, size),
8027 cp_convert (ssizetype, integer_one_node),
8028 tf_warning_or_error);
8029 itype = fold (itype);
8030 processing_template_decl = saved_processing_template_decl;
8031
8032 if (!TREE_CONSTANT (itype))
8033 /* A variable sized array. */
8034 itype = variable_size (itype);
8035 /* Make sure that there was no overflow when creating to a signed
8036 index type. (For example, on a 32-bit machine, an array with
8037 size 2^32 - 1 is too big.) */
8038 else if (TREE_CODE (itype) == INTEGER_CST
8039 && TREE_OVERFLOW (itype))
8040 {
8041 if (!(complain & tf_error))
8042 return error_mark_node;
8043 error ("overflow in array dimension");
8044 TREE_OVERFLOW (itype) = 0;
8045 }
8046 }
8047
8048 /* Create and return the appropriate index type. */
8049 if (abi_1_itype && abi_1_itype != error_mark_node)
8050 {
8051 tree t = build_index_type (itype);
8052 TYPE_CANONICAL (abi_1_itype) = TYPE_CANONICAL (t);
8053 itype = abi_1_itype;
8054 }
8055 else
8056 itype = build_index_type (itype);
8057
8058 /* If the index type were dependent, we would have returned early, so
8059 remember that it isn't. */
8060 TYPE_DEPENDENT_P (itype) = 0;
8061 TYPE_DEPENDENT_P_VALID (itype) = 1;
8062 return itype;
8063 }
8064
8065 /* Returns the scope (if any) in which the entity declared by
8066 DECLARATOR will be located. If the entity was declared with an
8067 unqualified name, NULL_TREE is returned. */
8068
8069 tree
8070 get_scope_of_declarator (const cp_declarator *declarator)
8071 {
8072 while (declarator && declarator->kind != cdk_id)
8073 declarator = declarator->declarator;
8074
8075 /* If the declarator-id is a SCOPE_REF, the scope in which the
8076 declaration occurs is the first operand. */
8077 if (declarator
8078 && declarator->u.id.qualifying_scope)
8079 return declarator->u.id.qualifying_scope;
8080
8081 /* Otherwise, the declarator is not a qualified name; the entity will
8082 be declared in the current scope. */
8083 return NULL_TREE;
8084 }
8085
8086 /* Returns an ARRAY_TYPE for an array with SIZE elements of the
8087 indicated TYPE. If non-NULL, NAME is the NAME of the declaration
8088 with this type. */
8089
8090 static tree
8091 create_array_type_for_decl (tree name, tree type, tree size)
8092 {
8093 tree itype = NULL_TREE;
8094
8095 /* If things have already gone awry, bail now. */
8096 if (type == error_mark_node || size == error_mark_node)
8097 return error_mark_node;
8098
8099 /* 8.3.4/1: If the type of the identifier of D contains the auto
8100 type-specifier, the program is ill-formed. */
8101 if (pedantic && type_uses_auto (type))
8102 pedwarn (input_location, OPT_pedantic,
8103 "declaration of %qD as array of %<auto%>", name);
8104
8105 /* If there are some types which cannot be array elements,
8106 issue an error-message and return. */
8107 switch (TREE_CODE (type))
8108 {
8109 case VOID_TYPE:
8110 if (name)
8111 error ("declaration of %qD as array of void", name);
8112 else
8113 error ("creating array of void");
8114 return error_mark_node;
8115
8116 case FUNCTION_TYPE:
8117 if (name)
8118 error ("declaration of %qD as array of functions", name);
8119 else
8120 error ("creating array of functions");
8121 return error_mark_node;
8122
8123 case REFERENCE_TYPE:
8124 if (name)
8125 error ("declaration of %qD as array of references", name);
8126 else
8127 error ("creating array of references");
8128 return error_mark_node;
8129
8130 case METHOD_TYPE:
8131 if (name)
8132 error ("declaration of %qD as array of function members", name);
8133 else
8134 error ("creating array of function members");
8135 return error_mark_node;
8136
8137 default:
8138 break;
8139 }
8140
8141 /* [dcl.array]
8142
8143 The constant expressions that specify the bounds of the arrays
8144 can be omitted only for the first member of the sequence. */
8145 if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
8146 {
8147 if (name)
8148 error ("declaration of %qD as multidimensional array must "
8149 "have bounds for all dimensions except the first",
8150 name);
8151 else
8152 error ("multidimensional array must have bounds for all "
8153 "dimensions except the first");
8154
8155 return error_mark_node;
8156 }
8157
8158 /* Figure out the index type for the array. */
8159 if (size)
8160 itype = compute_array_index_type (name, size, tf_warning_or_error);
8161
8162 /* [dcl.array]
8163 T is called the array element type; this type shall not be [...] an
8164 abstract class type. */
8165 abstract_virtuals_error (name, type);
8166
8167 return build_cplus_array_type (type, itype);
8168 }
8169
8170 /* Check that it's OK to declare a function with the indicated TYPE.
8171 SFK indicates the kind of special function (if any) that this
8172 function is. OPTYPE is the type given in a conversion operator
8173 declaration, or the class type for a constructor/destructor.
8174 Returns the actual return type of the function; that
8175 may be different than TYPE if an error occurs, or for certain
8176 special functions. */
8177
8178 static tree
8179 check_special_function_return_type (special_function_kind sfk,
8180 tree type,
8181 tree optype)
8182 {
8183 switch (sfk)
8184 {
8185 case sfk_constructor:
8186 if (type)
8187 error ("return type specification for constructor invalid");
8188
8189 if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
8190 type = build_pointer_type (optype);
8191 else
8192 type = void_type_node;
8193 break;
8194
8195 case sfk_destructor:
8196 if (type)
8197 error ("return type specification for destructor invalid");
8198 /* We can't use the proper return type here because we run into
8199 problems with ambiguous bases and covariant returns.
8200 Java classes are left unchanged because (void *) isn't a valid
8201 Java type, and we don't want to change the Java ABI. */
8202 if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
8203 type = build_pointer_type (void_type_node);
8204 else
8205 type = void_type_node;
8206 break;
8207
8208 case sfk_conversion:
8209 if (type)
8210 error ("return type specified for %<operator %T%>", optype);
8211 type = optype;
8212 break;
8213
8214 default:
8215 gcc_unreachable ();
8216 }
8217
8218 return type;
8219 }
8220
8221 /* A variable or data member (whose unqualified name is IDENTIFIER)
8222 has been declared with the indicated TYPE. If the TYPE is not
8223 acceptable, issue an error message and return a type to use for
8224 error-recovery purposes. */
8225
8226 tree
8227 check_var_type (tree identifier, tree type)
8228 {
8229 if (VOID_TYPE_P (type))
8230 {
8231 if (!identifier)
8232 error ("unnamed variable or field declared void");
8233 else if (TREE_CODE (identifier) == IDENTIFIER_NODE)
8234 {
8235 gcc_assert (!IDENTIFIER_OPNAME_P (identifier));
8236 error ("variable or field %qE declared void", identifier);
8237 }
8238 else
8239 error ("variable or field declared void");
8240 type = error_mark_node;
8241 }
8242
8243 return type;
8244 }
8245
8246 /* Given declspecs and a declarator (abstract or otherwise), determine
8247 the name and type of the object declared and construct a DECL node
8248 for it.
8249
8250 DECLSPECS points to the representation of declaration-specifier
8251 sequence that precedes declarator.
8252
8253 DECL_CONTEXT says which syntactic context this declaration is in:
8254 NORMAL for most contexts. Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
8255 FUNCDEF for a function definition. Like NORMAL but a few different
8256 error messages in each case. Return value may be zero meaning
8257 this definition is too screwy to try to parse.
8258 MEMFUNCDEF for a function definition. Like FUNCDEF but prepares to
8259 handle member functions (which have FIELD context).
8260 Return value may be zero meaning this definition is too screwy to
8261 try to parse.
8262 PARM for a parameter declaration (either within a function prototype
8263 or before a function body). Make a PARM_DECL, or return void_type_node.
8264 TPARM for a template parameter declaration.
8265 CATCHPARM for a parameter declaration before a catch clause.
8266 TYPENAME if for a typename (in a cast or sizeof).
8267 Don't make a DECL node; just return the ..._TYPE node.
8268 FIELD for a struct or union field; make a FIELD_DECL.
8269 BITFIELD for a field with specified width.
8270
8271 INITIALIZED is as for start_decl.
8272
8273 ATTRLIST is a pointer to the list of attributes, which may be NULL
8274 if there are none; *ATTRLIST may be modified if attributes from inside
8275 the declarator should be applied to the declaration.
8276
8277 When this function is called, scoping variables (such as
8278 CURRENT_CLASS_TYPE) should reflect the scope in which the
8279 declaration occurs, not the scope in which the new declaration will
8280 be placed. For example, on:
8281
8282 void S::f() { ... }
8283
8284 when grokdeclarator is called for `S::f', the CURRENT_CLASS_TYPE
8285 should not be `S'.
8286
8287 Returns a DECL (if a declarator is present), a TYPE (if there is no
8288 declarator, in cases like "struct S;"), or the ERROR_MARK_NODE if an
8289 error occurs. */
8290
8291 tree
8292 grokdeclarator (const cp_declarator *declarator,
8293 const cp_decl_specifier_seq *declspecs,
8294 enum decl_context decl_context,
8295 int initialized,
8296 tree* attrlist)
8297 {
8298 tree type = NULL_TREE;
8299 int longlong = 0;
8300 int explicit_int128 = 0;
8301 int virtualp, explicitp, friendp, inlinep, staticp;
8302 int explicit_int = 0;
8303 int explicit_char = 0;
8304 int defaulted_int = 0;
8305 tree dependent_name = NULL_TREE;
8306
8307 tree typedef_decl = NULL_TREE;
8308 const char *name = NULL;
8309 tree typedef_type = NULL_TREE;
8310 /* True if this declarator is a function definition. */
8311 bool funcdef_flag = false;
8312 cp_declarator_kind innermost_code = cdk_error;
8313 int bitfield = 0;
8314 #if 0
8315 /* See the code below that used this. */
8316 tree decl_attr = NULL_TREE;
8317 #endif
8318
8319 /* Keep track of what sort of function is being processed
8320 so that we can warn about default return values, or explicit
8321 return values which do not match prescribed defaults. */
8322 special_function_kind sfk = sfk_none;
8323
8324 tree dname = NULL_TREE;
8325 tree ctor_return_type = NULL_TREE;
8326 enum overload_flags flags = NO_SPECIAL;
8327 /* cv-qualifiers that apply to the declarator, for a declaration of
8328 a member function. */
8329 cp_cv_quals memfn_quals = TYPE_UNQUALIFIED;
8330 /* virt-specifiers that apply to the declarator, for a declaration of
8331 a member function. */
8332 cp_virt_specifiers virt_specifiers = VIRT_SPEC_UNSPECIFIED;
8333 /* cv-qualifiers that apply to the type specified by the DECLSPECS. */
8334 int type_quals;
8335 tree raises = NULL_TREE;
8336 int template_count = 0;
8337 tree returned_attrs = NULL_TREE;
8338 tree parms = NULL_TREE;
8339 const cp_declarator *id_declarator;
8340 /* The unqualified name of the declarator; either an
8341 IDENTIFIER_NODE, BIT_NOT_EXPR, or TEMPLATE_ID_EXPR. */
8342 tree unqualified_id;
8343 /* The class type, if any, in which this entity is located,
8344 or NULL_TREE if none. Note that this value may be different from
8345 the current class type; for example if an attempt is made to declare
8346 "A::f" inside "B", this value will be "A". */
8347 tree ctype = current_class_type;
8348 /* The NAMESPACE_DECL for the namespace in which this entity is
8349 located. If an unqualified name is used to declare the entity,
8350 this value will be NULL_TREE, even if the entity is located at
8351 namespace scope. */
8352 tree in_namespace = NULL_TREE;
8353 cp_storage_class storage_class;
8354 bool unsigned_p, signed_p, short_p, long_p, thread_p;
8355 bool type_was_error_mark_node = false;
8356 bool parameter_pack_p = declarator? declarator->parameter_pack_p : false;
8357 bool template_type_arg = false;
8358 bool template_parm_flag = false;
8359 bool constexpr_p = declspecs->specs[(int) ds_constexpr];
8360 const char *errmsg;
8361
8362 signed_p = declspecs->specs[(int)ds_signed];
8363 unsigned_p = declspecs->specs[(int)ds_unsigned];
8364 short_p = declspecs->specs[(int)ds_short];
8365 long_p = declspecs->specs[(int)ds_long];
8366 longlong = declspecs->specs[(int)ds_long] >= 2;
8367 explicit_int128 = declspecs->explicit_int128_p;
8368 thread_p = declspecs->specs[(int)ds_thread];
8369
8370 if (decl_context == FUNCDEF)
8371 funcdef_flag = true, decl_context = NORMAL;
8372 else if (decl_context == MEMFUNCDEF)
8373 funcdef_flag = true, decl_context = FIELD;
8374 else if (decl_context == BITFIELD)
8375 bitfield = 1, decl_context = FIELD;
8376 else if (decl_context == TEMPLATE_TYPE_ARG)
8377 template_type_arg = true, decl_context = TYPENAME;
8378 else if (decl_context == TPARM)
8379 template_parm_flag = true, decl_context = PARM;
8380
8381 if (initialized > 1)
8382 funcdef_flag = true;
8383
8384 /* Look inside a declarator for the name being declared
8385 and get it as a string, for an error message. */
8386 for (id_declarator = declarator;
8387 id_declarator;
8388 id_declarator = id_declarator->declarator)
8389 {
8390 if (id_declarator->kind != cdk_id)
8391 innermost_code = id_declarator->kind;
8392
8393 switch (id_declarator->kind)
8394 {
8395 case cdk_function:
8396 if (id_declarator->declarator
8397 && id_declarator->declarator->kind == cdk_id)
8398 {
8399 sfk = id_declarator->declarator->u.id.sfk;
8400 if (sfk == sfk_destructor)
8401 flags = DTOR_FLAG;
8402 }
8403 break;
8404
8405 case cdk_id:
8406 {
8407 tree qualifying_scope = id_declarator->u.id.qualifying_scope;
8408 tree decl = id_declarator->u.id.unqualified_name;
8409 if (!decl)
8410 break;
8411 if (qualifying_scope)
8412 {
8413 if (at_function_scope_p ())
8414 {
8415 /* [dcl.meaning]
8416
8417 A declarator-id shall not be qualified except
8418 for ...
8419
8420 None of the cases are permitted in block
8421 scope. */
8422 if (qualifying_scope == global_namespace)
8423 error ("invalid use of qualified-name %<::%D%>",
8424 decl);
8425 else if (TYPE_P (qualifying_scope))
8426 error ("invalid use of qualified-name %<%T::%D%>",
8427 qualifying_scope, decl);
8428 else
8429 error ("invalid use of qualified-name %<%D::%D%>",
8430 qualifying_scope, decl);
8431 return error_mark_node;
8432 }
8433 else if (TYPE_P (qualifying_scope))
8434 {
8435 ctype = qualifying_scope;
8436 if (!MAYBE_CLASS_TYPE_P (ctype))
8437 {
8438 error ("%q#T is not a class or a namespace", ctype);
8439 ctype = NULL_TREE;
8440 }
8441 else if (innermost_code != cdk_function
8442 && current_class_type
8443 && !UNIQUELY_DERIVED_FROM_P (ctype,
8444 current_class_type))
8445 {
8446 error ("type %qT is not derived from type %qT",
8447 ctype, current_class_type);
8448 return error_mark_node;
8449 }
8450 }
8451 else if (TREE_CODE (qualifying_scope) == NAMESPACE_DECL)
8452 in_namespace = qualifying_scope;
8453 }
8454 switch (TREE_CODE (decl))
8455 {
8456 case BIT_NOT_EXPR:
8457 {
8458 tree type;
8459
8460 if (innermost_code != cdk_function)
8461 {
8462 error ("declaration of %qD as non-function", decl);
8463 return error_mark_node;
8464 }
8465 else if (!qualifying_scope
8466 && !(current_class_type && at_class_scope_p ()))
8467 {
8468 error ("declaration of %qD as non-member", decl);
8469 return error_mark_node;
8470 }
8471
8472 type = TREE_OPERAND (decl, 0);
8473 if (TYPE_P (type))
8474 type = constructor_name (type);
8475 name = identifier_to_locale (IDENTIFIER_POINTER (type));
8476 dname = decl;
8477 }
8478 break;
8479
8480 case TEMPLATE_ID_EXPR:
8481 {
8482 tree fns = TREE_OPERAND (decl, 0);
8483
8484 dname = fns;
8485 if (TREE_CODE (dname) != IDENTIFIER_NODE)
8486 {
8487 gcc_assert (is_overloaded_fn (dname));
8488 dname = DECL_NAME (get_first_fn (dname));
8489 }
8490 }
8491 /* Fall through. */
8492
8493 case IDENTIFIER_NODE:
8494 if (TREE_CODE (decl) == IDENTIFIER_NODE)
8495 dname = decl;
8496
8497 if (C_IS_RESERVED_WORD (dname))
8498 {
8499 error ("declarator-id missing; using reserved word %qD",
8500 dname);
8501 name = identifier_to_locale (IDENTIFIER_POINTER (dname));
8502 }
8503 else if (!IDENTIFIER_TYPENAME_P (dname))
8504 name = identifier_to_locale (IDENTIFIER_POINTER (dname));
8505 else
8506 {
8507 gcc_assert (flags == NO_SPECIAL);
8508 flags = TYPENAME_FLAG;
8509 ctor_return_type = TREE_TYPE (dname);
8510 sfk = sfk_conversion;
8511 if (is_typename_at_global_scope (dname))
8512 name = identifier_to_locale (IDENTIFIER_POINTER (dname));
8513 else
8514 name = "<invalid operator>";
8515 }
8516 break;
8517
8518 default:
8519 gcc_unreachable ();
8520 }
8521 break;
8522 }
8523
8524 case cdk_array:
8525 case cdk_pointer:
8526 case cdk_reference:
8527 case cdk_ptrmem:
8528 break;
8529
8530 case cdk_error:
8531 return error_mark_node;
8532
8533 default:
8534 gcc_unreachable ();
8535 }
8536 if (id_declarator->kind == cdk_id)
8537 break;
8538 }
8539
8540 /* [dcl.fct.edf]
8541
8542 The declarator in a function-definition shall have the form
8543 D1 ( parameter-declaration-clause) ... */
8544 if (funcdef_flag && innermost_code != cdk_function)
8545 {
8546 error ("function definition does not declare parameters");
8547 return error_mark_node;
8548 }
8549
8550 if (((dname && IDENTIFIER_OPNAME_P (dname)) || flags == TYPENAME_FLAG)
8551 && innermost_code != cdk_function
8552 && ! (ctype && !declspecs->any_specifiers_p))
8553 {
8554 error ("declaration of %qD as non-function", dname);
8555 return error_mark_node;
8556 }
8557
8558 if (dname
8559 && TREE_CODE (dname) == IDENTIFIER_NODE
8560 && UDLIT_OPER_P (dname)
8561 && innermost_code != cdk_function)
8562 {
8563 error ("declaration of %qD as non-function", dname);
8564 return error_mark_node;
8565 }
8566
8567 if (dname && IDENTIFIER_OPNAME_P (dname))
8568 {
8569 if (declspecs->specs[(int)ds_typedef])
8570 {
8571 error ("declaration of %qD as %<typedef%>", dname);
8572 return error_mark_node;
8573 }
8574 else if (decl_context == PARM || decl_context == CATCHPARM)
8575 {
8576 error ("declaration of %qD as parameter", dname);
8577 return error_mark_node;
8578 }
8579 }
8580
8581 /* Anything declared one level down from the top level
8582 must be one of the parameters of a function
8583 (because the body is at least two levels down). */
8584
8585 /* This heuristic cannot be applied to C++ nodes! Fixed, however,
8586 by not allowing C++ class definitions to specify their parameters
8587 with xdecls (must be spec.d in the parmlist).
8588
8589 Since we now wait to push a class scope until we are sure that
8590 we are in a legitimate method context, we must set oldcname
8591 explicitly (since current_class_name is not yet alive).
8592
8593 We also want to avoid calling this a PARM if it is in a namespace. */
8594
8595 if (decl_context == NORMAL && !toplevel_bindings_p ())
8596 {
8597 cp_binding_level *b = current_binding_level;
8598 current_binding_level = b->level_chain;
8599 if (current_binding_level != 0 && toplevel_bindings_p ())
8600 decl_context = PARM;
8601 current_binding_level = b;
8602 }
8603
8604 if (name == NULL)
8605 name = decl_context == PARM ? "parameter" : "type name";
8606
8607 if (constexpr_p && declspecs->specs[(int)ds_typedef])
8608 {
8609 error ("%<constexpr%> cannot appear in a typedef declaration");
8610 return error_mark_node;
8611 }
8612
8613 /* If there were multiple types specified in the decl-specifier-seq,
8614 issue an error message. */
8615 if (declspecs->multiple_types_p)
8616 {
8617 error ("two or more data types in declaration of %qs", name);
8618 return error_mark_node;
8619 }
8620
8621 if (declspecs->conflicting_specifiers_p)
8622 {
8623 error ("conflicting specifiers in declaration of %qs", name);
8624 return error_mark_node;
8625 }
8626
8627 /* Extract the basic type from the decl-specifier-seq. */
8628 type = declspecs->type;
8629 if (type == error_mark_node)
8630 {
8631 type = NULL_TREE;
8632 type_was_error_mark_node = true;
8633 }
8634 /* If the entire declaration is itself tagged as deprecated then
8635 suppress reports of deprecated items. */
8636 if (type && TREE_DEPRECATED (type)
8637 && deprecated_state != DEPRECATED_SUPPRESS)
8638 warn_deprecated_use (type, NULL_TREE);
8639 if (type && TREE_CODE (type) == TYPE_DECL)
8640 {
8641 typedef_decl = type;
8642 type = TREE_TYPE (typedef_decl);
8643 if (TREE_DEPRECATED (type)
8644 && DECL_ARTIFICIAL (typedef_decl)
8645 && deprecated_state != DEPRECATED_SUPPRESS)
8646 warn_deprecated_use (type, NULL_TREE);
8647 }
8648 /* No type at all: default to `int', and set DEFAULTED_INT
8649 because it was not a user-defined typedef. */
8650 if (type == NULL_TREE && (signed_p || unsigned_p || long_p || short_p))
8651 {
8652 /* These imply 'int'. */
8653 type = integer_type_node;
8654 defaulted_int = 1;
8655 }
8656 /* Gather flags. */
8657 explicit_int = declspecs->explicit_int_p;
8658 explicit_char = declspecs->explicit_char_p;
8659
8660 #if 0
8661 /* See the code below that used this. */
8662 if (typedef_decl)
8663 decl_attr = DECL_ATTRIBUTES (typedef_decl);
8664 #endif
8665 typedef_type = type;
8666
8667
8668 if (sfk != sfk_conversion)
8669 ctor_return_type = ctype;
8670
8671 if (sfk != sfk_none)
8672 type = check_special_function_return_type (sfk, type,
8673 ctor_return_type);
8674 else if (type == NULL_TREE)
8675 {
8676 int is_main;
8677
8678 explicit_int = -1;
8679
8680 /* We handle `main' specially here, because 'main () { }' is so
8681 common. With no options, it is allowed. With -Wreturn-type,
8682 it is a warning. It is only an error with -pedantic-errors. */
8683 is_main = (funcdef_flag
8684 && dname && TREE_CODE (dname) == IDENTIFIER_NODE
8685 && MAIN_NAME_P (dname)
8686 && ctype == NULL_TREE
8687 && in_namespace == NULL_TREE
8688 && current_namespace == global_namespace);
8689
8690 if (type_was_error_mark_node)
8691 /* We've already issued an error, don't complain more. */;
8692 else if (in_system_header || flag_ms_extensions)
8693 /* Allow it, sigh. */;
8694 else if (! is_main)
8695 permerror (input_location, "ISO C++ forbids declaration of %qs with no type", name);
8696 else if (pedantic)
8697 pedwarn (input_location, OPT_pedantic,
8698 "ISO C++ forbids declaration of %qs with no type", name);
8699 else
8700 warning (OPT_Wreturn_type,
8701 "ISO C++ forbids declaration of %qs with no type", name);
8702
8703 type = integer_type_node;
8704 }
8705
8706 ctype = NULL_TREE;
8707
8708 if (explicit_int128)
8709 {
8710 if (int128_integer_type_node == NULL_TREE)
8711 {
8712 error ("%<__int128%> is not supported by this target");
8713 explicit_int128 = false;
8714 }
8715 else if (pedantic && ! in_system_header)
8716 pedwarn (input_location, OPT_pedantic,
8717 "ISO C++ does not support %<__int128%> for %qs", name);
8718 }
8719
8720 /* Now process the modifiers that were specified
8721 and check for invalid combinations. */
8722
8723 /* Long double is a special combination. */
8724 if (long_p && !longlong && TYPE_MAIN_VARIANT (type) == double_type_node)
8725 {
8726 long_p = false;
8727 type = cp_build_qualified_type (long_double_type_node,
8728 cp_type_quals (type));
8729 }
8730
8731 /* Check all other uses of type modifiers. */
8732
8733 if (unsigned_p || signed_p || long_p || short_p)
8734 {
8735 int ok = 0;
8736
8737 if ((signed_p || unsigned_p) && TREE_CODE (type) != INTEGER_TYPE)
8738 error ("%<signed%> or %<unsigned%> invalid for %qs", name);
8739 else if (signed_p && unsigned_p)
8740 error ("%<signed%> and %<unsigned%> specified together for %qs", name);
8741 else if (longlong && TREE_CODE (type) != INTEGER_TYPE)
8742 error ("%<long long%> invalid for %qs", name);
8743 else if (long_p && TREE_CODE (type) == REAL_TYPE)
8744 error ("%<long%> invalid for %qs", name);
8745 else if (short_p && TREE_CODE (type) == REAL_TYPE)
8746 error ("%<short%> invalid for %qs", name);
8747 else if ((long_p || short_p) && TREE_CODE (type) != INTEGER_TYPE)
8748 error ("%<long%> or %<short%> invalid for %qs", name);
8749 else if ((long_p || short_p || explicit_char || explicit_int) && explicit_int128)
8750 error ("%<long%>, %<int%>, %<short%>, or %<char%> invalid for %qs", name);
8751 else if ((long_p || short_p) && explicit_char)
8752 error ("%<long%> or %<short%> specified with char for %qs", name);
8753 else if (long_p && short_p)
8754 error ("%<long%> and %<short%> specified together for %qs", name);
8755 else if (type == char16_type_node || type == char32_type_node)
8756 {
8757 if (signed_p || unsigned_p)
8758 error ("%<signed%> or %<unsigned%> invalid for %qs", name);
8759 else if (short_p || long_p)
8760 error ("%<short%> or %<long%> invalid for %qs", name);
8761 }
8762 else
8763 {
8764 ok = 1;
8765 if (!explicit_int && !defaulted_int && !explicit_char && !explicit_int128 && pedantic)
8766 {
8767 pedwarn (input_location, OPT_pedantic,
8768 "long, short, signed or unsigned used invalidly for %qs",
8769 name);
8770 if (flag_pedantic_errors)
8771 ok = 0;
8772 }
8773 }
8774
8775 /* Discard the type modifiers if they are invalid. */
8776 if (! ok)
8777 {
8778 unsigned_p = false;
8779 signed_p = false;
8780 long_p = false;
8781 short_p = false;
8782 longlong = 0;
8783 }
8784 }
8785
8786 /* Decide whether an integer type is signed or not.
8787 Optionally treat bitfields as signed by default. */
8788 if (unsigned_p
8789 /* [class.bit]
8790
8791 It is implementation-defined whether a plain (neither
8792 explicitly signed or unsigned) char, short, int, or long
8793 bit-field is signed or unsigned.
8794
8795 Naturally, we extend this to long long as well. Note that
8796 this does not include wchar_t. */
8797 || (bitfield && !flag_signed_bitfields
8798 && !signed_p
8799 /* A typedef for plain `int' without `signed' can be
8800 controlled just like plain `int', but a typedef for
8801 `signed int' cannot be so controlled. */
8802 && !(typedef_decl
8803 && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
8804 && TREE_CODE (type) == INTEGER_TYPE
8805 && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
8806 {
8807 if (explicit_int128)
8808 type = int128_unsigned_type_node;
8809 else if (longlong)
8810 type = long_long_unsigned_type_node;
8811 else if (long_p)
8812 type = long_unsigned_type_node;
8813 else if (short_p)
8814 type = short_unsigned_type_node;
8815 else if (type == char_type_node)
8816 type = unsigned_char_type_node;
8817 else if (typedef_decl)
8818 type = unsigned_type_for (type);
8819 else
8820 type = unsigned_type_node;
8821 }
8822 else if (signed_p && type == char_type_node)
8823 type = signed_char_type_node;
8824 else if (explicit_int128)
8825 type = int128_integer_type_node;
8826 else if (longlong)
8827 type = long_long_integer_type_node;
8828 else if (long_p)
8829 type = long_integer_type_node;
8830 else if (short_p)
8831 type = short_integer_type_node;
8832
8833 if (declspecs->specs[(int)ds_complex])
8834 {
8835 if (TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
8836 error ("complex invalid for %qs", name);
8837 /* If we just have "complex", it is equivalent to
8838 "complex double", but if any modifiers at all are specified it is
8839 the complex form of TYPE. E.g, "complex short" is
8840 "complex short int". */
8841 else if (defaulted_int && ! longlong && ! explicit_int128
8842 && ! (long_p || short_p || signed_p || unsigned_p))
8843 type = complex_double_type_node;
8844 else if (type == integer_type_node)
8845 type = complex_integer_type_node;
8846 else if (type == float_type_node)
8847 type = complex_float_type_node;
8848 else if (type == double_type_node)
8849 type = complex_double_type_node;
8850 else if (type == long_double_type_node)
8851 type = complex_long_double_type_node;
8852 else
8853 type = build_complex_type (type);
8854 }
8855
8856 type_quals = TYPE_UNQUALIFIED;
8857 if (declspecs->specs[(int)ds_const])
8858 type_quals |= TYPE_QUAL_CONST;
8859 if (declspecs->specs[(int)ds_volatile])
8860 type_quals |= TYPE_QUAL_VOLATILE;
8861 if (declspecs->specs[(int)ds_restrict])
8862 type_quals |= TYPE_QUAL_RESTRICT;
8863 if (sfk == sfk_conversion && type_quals != TYPE_UNQUALIFIED)
8864 error ("qualifiers are not allowed on declaration of %<operator %T%>",
8865 ctor_return_type);
8866
8867 type_quals |= cp_type_quals (type);
8868 type = cp_build_qualified_type_real
8869 (type, type_quals, ((typedef_decl && !DECL_ARTIFICIAL (typedef_decl)
8870 ? tf_ignore_bad_quals : 0) | tf_warning_or_error));
8871 /* We might have ignored or rejected some of the qualifiers. */
8872 type_quals = cp_type_quals (type);
8873
8874 staticp = 0;
8875 inlinep = !! declspecs->specs[(int)ds_inline];
8876 virtualp = !! declspecs->specs[(int)ds_virtual];
8877 explicitp = !! declspecs->specs[(int)ds_explicit];
8878
8879 storage_class = declspecs->storage_class;
8880 if (storage_class == sc_static)
8881 staticp = 1 + (decl_context == FIELD);
8882
8883 if (virtualp && staticp == 2)
8884 {
8885 error ("member %qD cannot be declared both virtual and static", dname);
8886 storage_class = sc_none;
8887 staticp = 0;
8888 }
8889 friendp = !! declspecs->specs[(int)ds_friend];
8890
8891 if (dependent_name && !friendp)
8892 {
8893 error ("%<%T::%D%> is not a valid declarator", ctype, dependent_name);
8894 return error_mark_node;
8895 }
8896
8897 /* Issue errors about use of storage classes for parameters. */
8898 if (decl_context == PARM)
8899 {
8900 if (declspecs->specs[(int)ds_typedef])
8901 {
8902 error ("typedef declaration invalid in parameter declaration");
8903 return error_mark_node;
8904 }
8905 else if (template_parm_flag && storage_class != sc_none)
8906 {
8907 error ("storage class specified for template parameter %qs", name);
8908 return error_mark_node;
8909 }
8910 else if (storage_class == sc_static
8911 || storage_class == sc_extern
8912 || thread_p)
8913 error ("storage class specifiers invalid in parameter declarations");
8914
8915 /* Function parameters cannot be constexpr. If we saw one, moan
8916 and pretend it wasn't there. */
8917 if (constexpr_p)
8918 {
8919 error ("a parameter cannot be declared %<constexpr%>");
8920 constexpr_p = 0;
8921 }
8922 }
8923
8924 /* Give error if `virtual' is used outside of class declaration. */
8925 if (virtualp
8926 && (current_class_name == NULL_TREE || decl_context != FIELD))
8927 {
8928 error ("%<virtual%> outside class declaration");
8929 virtualp = 0;
8930 }
8931
8932 /* Static anonymous unions are dealt with here. */
8933 if (staticp && decl_context == TYPENAME
8934 && declspecs->type
8935 && ANON_AGGR_TYPE_P (declspecs->type))
8936 decl_context = FIELD;
8937
8938 /* Warn about storage classes that are invalid for certain
8939 kinds of declarations (parameters, typenames, etc.). */
8940 if (thread_p
8941 && ((storage_class
8942 && storage_class != sc_extern
8943 && storage_class != sc_static)
8944 || declspecs->specs[(int)ds_typedef]))
8945 {
8946 error ("multiple storage classes in declaration of %qs", name);
8947 thread_p = false;
8948 }
8949 if (decl_context != NORMAL
8950 && ((storage_class != sc_none
8951 && storage_class != sc_mutable)
8952 || thread_p))
8953 {
8954 if ((decl_context == PARM || decl_context == CATCHPARM)
8955 && (storage_class == sc_register
8956 || storage_class == sc_auto))
8957 ;
8958 else if (declspecs->specs[(int)ds_typedef])
8959 ;
8960 else if (decl_context == FIELD
8961 /* C++ allows static class elements. */
8962 && storage_class == sc_static)
8963 /* C++ also allows inlines and signed and unsigned elements,
8964 but in those cases we don't come in here. */
8965 ;
8966 else
8967 {
8968 if (decl_context == FIELD)
8969 error ("storage class specified for %qs", name);
8970 else
8971 {
8972 if (decl_context == PARM || decl_context == CATCHPARM)
8973 error ("storage class specified for parameter %qs", name);
8974 else
8975 error ("storage class specified for typename");
8976 }
8977 if (storage_class == sc_register
8978 || storage_class == sc_auto
8979 || storage_class == sc_extern
8980 || thread_p)
8981 storage_class = sc_none;
8982 }
8983 }
8984 else if (storage_class == sc_extern && funcdef_flag
8985 && ! toplevel_bindings_p ())
8986 error ("nested function %qs declared %<extern%>", name);
8987 else if (toplevel_bindings_p ())
8988 {
8989 if (storage_class == sc_auto)
8990 error ("top-level declaration of %qs specifies %<auto%>", name);
8991 }
8992 else if (thread_p
8993 && storage_class != sc_extern
8994 && storage_class != sc_static)
8995 {
8996 error ("function-scope %qs implicitly auto and declared %<__thread%>",
8997 name);
8998 thread_p = false;
8999 }
9000
9001 if (storage_class && friendp)
9002 {
9003 error ("storage class specifiers invalid in friend function declarations");
9004 storage_class = sc_none;
9005 staticp = 0;
9006 }
9007
9008 if (!id_declarator)
9009 unqualified_id = NULL_TREE;
9010 else
9011 {
9012 unqualified_id = id_declarator->u.id.unqualified_name;
9013 switch (TREE_CODE (unqualified_id))
9014 {
9015 case BIT_NOT_EXPR:
9016 unqualified_id = TREE_OPERAND (unqualified_id, 0);
9017 if (TYPE_P (unqualified_id))
9018 unqualified_id = constructor_name (unqualified_id);
9019 break;
9020
9021 case IDENTIFIER_NODE:
9022 case TEMPLATE_ID_EXPR:
9023 break;
9024
9025 default:
9026 gcc_unreachable ();
9027 }
9028 }
9029
9030 /* Determine the type of the entity declared by recurring on the
9031 declarator. */
9032 for (; declarator; declarator = declarator->declarator)
9033 {
9034 const cp_declarator *inner_declarator;
9035 tree attrs;
9036
9037 if (type == error_mark_node)
9038 return error_mark_node;
9039
9040 attrs = declarator->attributes;
9041 if (attrs)
9042 {
9043 int attr_flags;
9044
9045 attr_flags = 0;
9046 if (declarator == NULL || declarator->kind == cdk_id)
9047 attr_flags |= (int) ATTR_FLAG_DECL_NEXT;
9048 if (declarator->kind == cdk_function)
9049 attr_flags |= (int) ATTR_FLAG_FUNCTION_NEXT;
9050 if (declarator->kind == cdk_array)
9051 attr_flags |= (int) ATTR_FLAG_ARRAY_NEXT;
9052 returned_attrs = decl_attributes (&type,
9053 chainon (returned_attrs, attrs),
9054 attr_flags);
9055 }
9056
9057 if (declarator->kind == cdk_id)
9058 break;
9059
9060 inner_declarator = declarator->declarator;
9061
9062 switch (declarator->kind)
9063 {
9064 case cdk_array:
9065 type = create_array_type_for_decl (dname, type,
9066 declarator->u.array.bounds);
9067 break;
9068
9069 case cdk_function:
9070 {
9071 tree arg_types;
9072 int funcdecl_p;
9073
9074 /* Declaring a function type.
9075 Make sure we have a valid type for the function to return. */
9076
9077 if (type_quals != TYPE_UNQUALIFIED)
9078 {
9079 if (SCALAR_TYPE_P (type) || VOID_TYPE_P (type))
9080 warning (OPT_Wignored_qualifiers,
9081 "type qualifiers ignored on function return type");
9082 /* We now know that the TYPE_QUALS don't apply to the
9083 decl, but to its return type. */
9084 type_quals = TYPE_UNQUALIFIED;
9085 }
9086 errmsg = targetm.invalid_return_type (type);
9087 if (errmsg)
9088 {
9089 error (errmsg);
9090 type = integer_type_node;
9091 }
9092
9093 /* Error about some types functions can't return. */
9094
9095 if (TREE_CODE (type) == FUNCTION_TYPE)
9096 {
9097 error ("%qs declared as function returning a function", name);
9098 return error_mark_node;
9099 }
9100 if (TREE_CODE (type) == ARRAY_TYPE)
9101 {
9102 error ("%qs declared as function returning an array", name);
9103 return error_mark_node;
9104 }
9105
9106 /* Pick up type qualifiers which should be applied to `this'. */
9107 memfn_quals = declarator->u.function.qualifiers;
9108 /* Pick up virt-specifiers. */
9109 virt_specifiers = declarator->u.function.virt_specifiers;
9110 /* Pick up the exception specifications. */
9111 raises = declarator->u.function.exception_specification;
9112 /* If the exception-specification is ill-formed, let's pretend
9113 there wasn't one. */
9114 if (raises == error_mark_node)
9115 raises = NULL_TREE;
9116
9117 /* Say it's a definition only for the CALL_EXPR
9118 closest to the identifier. */
9119 funcdecl_p = inner_declarator && inner_declarator->kind == cdk_id;
9120
9121 /* Handle a late-specified return type. */
9122 if (funcdecl_p)
9123 {
9124 if (type_uses_auto (type))
9125 {
9126 if (!declarator->u.function.late_return_type)
9127 {
9128 error ("%qs function uses %<auto%> type specifier without"
9129 " late return type", name);
9130 return error_mark_node;
9131 }
9132 else if (!is_auto (type))
9133 {
9134 error ("%qs function with late return type has"
9135 " %qT as its type rather than plain %<auto%>",
9136 name, type);
9137 return error_mark_node;
9138 }
9139 }
9140 else if (declarator->u.function.late_return_type)
9141 {
9142 error ("%qs function with late return type not declared"
9143 " with %<auto%> type specifier", name);
9144 return error_mark_node;
9145 }
9146 }
9147 type = splice_late_return_type
9148 (type, declarator->u.function.late_return_type);
9149 if (type == error_mark_node)
9150 return error_mark_node;
9151
9152 if (ctype == NULL_TREE
9153 && decl_context == FIELD
9154 && funcdecl_p
9155 && (friendp == 0 || dname == current_class_name))
9156 ctype = current_class_type;
9157
9158 if (ctype && (sfk == sfk_constructor
9159 || sfk == sfk_destructor))
9160 {
9161 /* We are within a class's scope. If our declarator name
9162 is the same as the class name, and we are defining
9163 a function, then it is a constructor/destructor, and
9164 therefore returns a void type. */
9165
9166 /* ISO C++ 12.4/2. A destructor may not be declared
9167 const or volatile. A destructor may not be
9168 static.
9169
9170 ISO C++ 12.1. A constructor may not be declared
9171 const or volatile. A constructor may not be
9172 virtual. A constructor may not be static. */
9173 if (staticp == 2)
9174 error ((flags == DTOR_FLAG)
9175 ? G_("destructor cannot be static member function")
9176 : G_("constructor cannot be static member function"));
9177 if (memfn_quals)
9178 {
9179 error ((flags == DTOR_FLAG)
9180 ? G_("destructors may not be cv-qualified")
9181 : G_("constructors may not be cv-qualified"));
9182 memfn_quals = TYPE_UNQUALIFIED;
9183 }
9184
9185 if (decl_context == FIELD
9186 && !member_function_or_else (ctype,
9187 current_class_type,
9188 flags))
9189 return error_mark_node;
9190
9191 if (flags != DTOR_FLAG)
9192 {
9193 /* It's a constructor. */
9194 if (explicitp == 1)
9195 explicitp = 2;
9196 if (virtualp)
9197 {
9198 permerror (input_location, "constructors cannot be declared virtual");
9199 virtualp = 0;
9200 }
9201 if (decl_context == FIELD
9202 && sfk != sfk_constructor)
9203 return error_mark_node;
9204 }
9205 if (decl_context == FIELD)
9206 staticp = 0;
9207 }
9208 else if (friendp)
9209 {
9210 if (initialized)
9211 error ("can%'t initialize friend function %qs", name);
9212 if (virtualp)
9213 {
9214 /* Cannot be both friend and virtual. */
9215 error ("virtual functions cannot be friends");
9216 friendp = 0;
9217 }
9218 if (decl_context == NORMAL)
9219 error ("friend declaration not in class definition");
9220 if (current_function_decl && funcdef_flag)
9221 error ("can%'t define friend function %qs in a local "
9222 "class definition",
9223 name);
9224 }
9225 else if (ctype && sfk == sfk_conversion)
9226 {
9227 if (explicitp == 1)
9228 {
9229 maybe_warn_cpp0x (CPP0X_EXPLICIT_CONVERSION);
9230 explicitp = 2;
9231 }
9232 }
9233
9234 arg_types = grokparms (declarator->u.function.parameters,
9235 &parms);
9236
9237 if (inner_declarator
9238 && inner_declarator->kind == cdk_id
9239 && inner_declarator->u.id.sfk == sfk_destructor
9240 && arg_types != void_list_node)
9241 {
9242 error ("destructors may not have parameters");
9243 arg_types = void_list_node;
9244 parms = NULL_TREE;
9245 }
9246
9247 type = build_function_type (type, arg_types);
9248 }
9249 break;
9250
9251 case cdk_pointer:
9252 case cdk_reference:
9253 case cdk_ptrmem:
9254 /* Filter out pointers-to-references and references-to-references.
9255 We can get these if a TYPE_DECL is used. */
9256
9257 if (TREE_CODE (type) == REFERENCE_TYPE)
9258 {
9259 if (declarator->kind != cdk_reference)
9260 {
9261 error ("cannot declare pointer to %q#T", type);
9262 type = TREE_TYPE (type);
9263 }
9264
9265 /* In C++0x, we allow reference to reference declarations
9266 that occur indirectly through typedefs [7.1.3/8 dcl.typedef]
9267 and template type arguments [14.3.1/4 temp.arg.type]. The
9268 check for direct reference to reference declarations, which
9269 are still forbidden, occurs below. Reasoning behind the change
9270 can be found in DR106, DR540, and the rvalue reference
9271 proposals. */
9272 else if (cxx_dialect == cxx98)
9273 {
9274 error ("cannot declare reference to %q#T", type);
9275 type = TREE_TYPE (type);
9276 }
9277 }
9278 else if (VOID_TYPE_P (type))
9279 {
9280 if (declarator->kind == cdk_reference)
9281 error ("cannot declare reference to %q#T", type);
9282 else if (declarator->kind == cdk_ptrmem)
9283 error ("cannot declare pointer to %q#T member", type);
9284 }
9285
9286 /* We now know that the TYPE_QUALS don't apply to the decl,
9287 but to the target of the pointer. */
9288 type_quals = TYPE_UNQUALIFIED;
9289
9290 if (declarator->kind == cdk_ptrmem
9291 && (TREE_CODE (type) == FUNCTION_TYPE
9292 || (memfn_quals && TREE_CODE (type) == METHOD_TYPE)))
9293 {
9294 memfn_quals |= type_memfn_quals (type);
9295 type = build_memfn_type (type,
9296 declarator->u.pointer.class_type,
9297 memfn_quals);
9298 if (type == error_mark_node)
9299 return error_mark_node;
9300 memfn_quals = TYPE_UNQUALIFIED;
9301 }
9302
9303 if (TREE_CODE (type) == FUNCTION_TYPE
9304 && type_memfn_quals (type) != TYPE_UNQUALIFIED)
9305 error (declarator->kind == cdk_reference
9306 ? G_("cannot declare reference to qualified function type %qT")
9307 : G_("cannot declare pointer to qualified function type %qT"),
9308 type);
9309
9310 /* When the pointed-to type involves components of variable size,
9311 care must be taken to ensure that the size evaluation code is
9312 emitted early enough to dominate all the possible later uses
9313 and late enough for the variables on which it depends to have
9314 been assigned.
9315
9316 This is expected to happen automatically when the pointed-to
9317 type has a name/declaration of it's own, but special attention
9318 is required if the type is anonymous.
9319
9320 We handle the NORMAL and FIELD contexts here by inserting a
9321 dummy statement that just evaluates the size at a safe point
9322 and ensures it is not deferred until e.g. within a deeper
9323 conditional context (c++/43555).
9324
9325 We expect nothing to be needed here for PARM or TYPENAME.
9326 Evaluating the size at this point for TYPENAME would
9327 actually be incorrect, as we might be in the middle of an
9328 expression with side effects on the pointed-to type size
9329 "arguments" prior to the pointer declaration point and the
9330 size evaluation could end up prior to the side effects. */
9331
9332 if (!TYPE_NAME (type)
9333 && (decl_context == NORMAL || decl_context == FIELD)
9334 && at_function_scope_p ()
9335 && variably_modified_type_p (type, NULL_TREE))
9336 {
9337 /* First break out any side-effects. */
9338 stabilize_vla_size (TYPE_SIZE (type));
9339 /* And then force evaluation of the SAVE_EXPR. */
9340 finish_expr_stmt (TYPE_SIZE (type));
9341 }
9342
9343 if (declarator->kind == cdk_reference)
9344 {
9345 /* In C++0x, the type we are creating a reference to might be
9346 a typedef which is itself a reference type. In that case,
9347 we follow the reference collapsing rules in
9348 [7.1.3/8 dcl.typedef] to create the final reference type:
9349
9350 "If a typedef TD names a type that is a reference to a type
9351 T, an attempt to create the type 'lvalue reference to cv TD'
9352 creates the type 'lvalue reference to T,' while an attempt
9353 to create the type "rvalue reference to cv TD' creates the
9354 type TD."
9355 */
9356 if (VOID_TYPE_P (type))
9357 /* We already gave an error. */;
9358 else if (TREE_CODE (type) == REFERENCE_TYPE)
9359 {
9360 if (declarator->u.reference.rvalue_ref)
9361 /* Leave type alone. */;
9362 else
9363 type = cp_build_reference_type (TREE_TYPE (type), false);
9364 }
9365 else
9366 type = cp_build_reference_type
9367 (type, declarator->u.reference.rvalue_ref);
9368
9369 /* In C++0x, we need this check for direct reference to
9370 reference declarations, which are forbidden by
9371 [8.3.2/5 dcl.ref]. Reference to reference declarations
9372 are only allowed indirectly through typedefs and template
9373 type arguments. Example:
9374
9375 void foo(int & &); // invalid ref-to-ref decl
9376
9377 typedef int & int_ref;
9378 void foo(int_ref &); // valid ref-to-ref decl
9379 */
9380 if (inner_declarator && inner_declarator->kind == cdk_reference)
9381 error ("cannot declare reference to %q#T, which is not "
9382 "a typedef or a template type argument", type);
9383 }
9384 else if (TREE_CODE (type) == METHOD_TYPE)
9385 type = build_ptrmemfunc_type (build_pointer_type (type));
9386 else if (declarator->kind == cdk_ptrmem)
9387 {
9388 gcc_assert (TREE_CODE (declarator->u.pointer.class_type)
9389 != NAMESPACE_DECL);
9390 if (declarator->u.pointer.class_type == error_mark_node)
9391 /* We will already have complained. */
9392 type = error_mark_node;
9393 else
9394 type = build_ptrmem_type (declarator->u.pointer.class_type,
9395 type);
9396 }
9397 else
9398 type = build_pointer_type (type);
9399
9400 /* Process a list of type modifier keywords (such as
9401 const or volatile) that were given inside the `*' or `&'. */
9402
9403 if (declarator->u.pointer.qualifiers)
9404 {
9405 type
9406 = cp_build_qualified_type (type,
9407 declarator->u.pointer.qualifiers);
9408 type_quals = cp_type_quals (type);
9409 }
9410 ctype = NULL_TREE;
9411 break;
9412
9413 case cdk_error:
9414 break;
9415
9416 default:
9417 gcc_unreachable ();
9418 }
9419 }
9420
9421 /* We need to stabilize side-effects in VLA sizes for regular array
9422 declarations too, not just pointers to arrays. */
9423 if (type != error_mark_node && !TYPE_NAME (type)
9424 && (decl_context == NORMAL || decl_context == FIELD)
9425 && at_function_scope_p ()
9426 && variably_modified_type_p (type, NULL_TREE))
9427 stabilize_vla_size (TYPE_SIZE (type));
9428
9429 /* A `constexpr' specifier used in an object declaration declares
9430 the object as `const'. */
9431 if (constexpr_p && innermost_code != cdk_function)
9432 {
9433 if (type_quals & TYPE_QUAL_CONST)
9434 error ("both %<const%> and %<constexpr%> cannot be used here");
9435 if (type_quals & TYPE_QUAL_VOLATILE)
9436 error ("both %<volatile%> and %<constexpr%> cannot be used here");
9437 if (TREE_CODE (type) != REFERENCE_TYPE)
9438 {
9439 type_quals |= TYPE_QUAL_CONST;
9440 type = cp_build_qualified_type (type, type_quals);
9441 }
9442 }
9443
9444 if (unqualified_id && TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR
9445 && TREE_CODE (type) != FUNCTION_TYPE
9446 && TREE_CODE (type) != METHOD_TYPE)
9447 {
9448 error ("template-id %qD used as a declarator",
9449 unqualified_id);
9450 unqualified_id = dname;
9451 }
9452
9453 /* If TYPE is a FUNCTION_TYPE, but the function name was explicitly
9454 qualified with a class-name, turn it into a METHOD_TYPE, unless
9455 we know that the function is static. We take advantage of this
9456 opportunity to do other processing that pertains to entities
9457 explicitly declared to be class members. Note that if DECLARATOR
9458 is non-NULL, we know it is a cdk_id declarator; otherwise, we
9459 would not have exited the loop above. */
9460 if (declarator
9461 && declarator->u.id.qualifying_scope
9462 && MAYBE_CLASS_TYPE_P (declarator->u.id.qualifying_scope))
9463 {
9464 tree t;
9465
9466 ctype = declarator->u.id.qualifying_scope;
9467 ctype = TYPE_MAIN_VARIANT (ctype);
9468 t = ctype;
9469 while (t != NULL_TREE && CLASS_TYPE_P (t))
9470 {
9471 /* You're supposed to have one `template <...>' for every
9472 template class, but you don't need one for a full
9473 specialization. For example:
9474
9475 template <class T> struct S{};
9476 template <> struct S<int> { void f(); };
9477 void S<int>::f () {}
9478
9479 is correct; there shouldn't be a `template <>' for the
9480 definition of `S<int>::f'. */
9481 if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t)
9482 && !any_dependent_template_arguments_p (CLASSTYPE_TI_ARGS (t)))
9483 /* T is an explicit (not partial) specialization. All
9484 containing classes must therefore also be explicitly
9485 specialized. */
9486 break;
9487 if ((CLASSTYPE_USE_TEMPLATE (t) || CLASSTYPE_IS_TEMPLATE (t))
9488 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t)))
9489 template_count += 1;
9490
9491 t = TYPE_MAIN_DECL (t);
9492 t = DECL_CONTEXT (t);
9493 }
9494
9495 if (ctype == current_class_type)
9496 {
9497 if (friendp)
9498 {
9499 permerror (input_location, "member functions are implicitly friends of their class");
9500 friendp = 0;
9501 }
9502 else
9503 permerror (declarator->id_loc,
9504 "extra qualification %<%T::%> on member %qs",
9505 ctype, name);
9506 }
9507 else if (/* If the qualifying type is already complete, then we
9508 can skip the following checks. */
9509 !COMPLETE_TYPE_P (ctype)
9510 && (/* If the function is being defined, then
9511 qualifying type must certainly be complete. */
9512 funcdef_flag
9513 /* A friend declaration of "T::f" is OK, even if
9514 "T" is a template parameter. But, if this
9515 function is not a friend, the qualifying type
9516 must be a class. */
9517 || (!friendp && !CLASS_TYPE_P (ctype))
9518 /* For a declaration, the type need not be
9519 complete, if either it is dependent (since there
9520 is no meaningful definition of complete in that
9521 case) or the qualifying class is currently being
9522 defined. */
9523 || !(dependent_type_p (ctype)
9524 || currently_open_class (ctype)))
9525 /* Check that the qualifying type is complete. */
9526 && !complete_type_or_else (ctype, NULL_TREE))
9527 return error_mark_node;
9528 else if (TREE_CODE (type) == FUNCTION_TYPE)
9529 {
9530 if (current_class_type
9531 && (!friendp || funcdef_flag))
9532 {
9533 error (funcdef_flag
9534 ? G_("cannot define member function %<%T::%s%> "
9535 "within %<%T%>")
9536 : G_("cannot declare member function %<%T::%s%> "
9537 "within %<%T%>"),
9538 ctype, name, current_class_type);
9539 return error_mark_node;
9540 }
9541 }
9542 else if (declspecs->specs[(int)ds_typedef]
9543 && current_class_type)
9544 {
9545 error ("cannot declare member %<%T::%s%> within %qT",
9546 ctype, name, current_class_type);
9547 return error_mark_node;
9548 }
9549 }
9550
9551 if (ctype == NULL_TREE && decl_context == FIELD && friendp == 0)
9552 ctype = current_class_type;
9553
9554 /* Now TYPE has the actual type. */
9555
9556 if (returned_attrs)
9557 {
9558 if (attrlist)
9559 *attrlist = chainon (returned_attrs, *attrlist);
9560 else
9561 attrlist = &returned_attrs;
9562 }
9563
9564 /* Handle parameter packs. */
9565 if (parameter_pack_p)
9566 {
9567 if (decl_context == PARM)
9568 /* Turn the type into a pack expansion.*/
9569 type = make_pack_expansion (type);
9570 else
9571 error ("non-parameter %qs cannot be a parameter pack", name);
9572 }
9573
9574 /* Did array size calculations overflow? */
9575
9576 if (TREE_CODE (type) == ARRAY_TYPE
9577 && COMPLETE_TYPE_P (type)
9578 && TREE_CODE (TYPE_SIZE_UNIT (type)) == INTEGER_CST
9579 && TREE_OVERFLOW (TYPE_SIZE_UNIT (type)))
9580 {
9581 error ("size of array %qs is too large", name);
9582 /* If we proceed with the array type as it is, we'll eventually
9583 crash in tree_low_cst(). */
9584 type = error_mark_node;
9585 }
9586
9587 if ((decl_context == FIELD || decl_context == PARM)
9588 && !processing_template_decl
9589 && variably_modified_type_p (type, NULL_TREE))
9590 {
9591 if (decl_context == FIELD)
9592 error ("data member may not have variably modified type %qT", type);
9593 else
9594 error ("parameter may not have variably modified type %qT", type);
9595 type = error_mark_node;
9596 }
9597
9598 if (explicitp == 1 || (explicitp && friendp))
9599 {
9600 /* [dcl.fct.spec] The explicit specifier shall only be used in
9601 declarations of constructors within a class definition. */
9602 error ("only declarations of constructors can be %<explicit%>");
9603 explicitp = 0;
9604 }
9605
9606 if (storage_class == sc_mutable)
9607 {
9608 if (decl_context != FIELD || friendp)
9609 {
9610 error ("non-member %qs cannot be declared %<mutable%>", name);
9611 storage_class = sc_none;
9612 }
9613 else if (decl_context == TYPENAME || declspecs->specs[(int)ds_typedef])
9614 {
9615 error ("non-object member %qs cannot be declared %<mutable%>", name);
9616 storage_class = sc_none;
9617 }
9618 else if (TREE_CODE (type) == FUNCTION_TYPE
9619 || TREE_CODE (type) == METHOD_TYPE)
9620 {
9621 error ("function %qs cannot be declared %<mutable%>", name);
9622 storage_class = sc_none;
9623 }
9624 else if (staticp)
9625 {
9626 error ("static %qs cannot be declared %<mutable%>", name);
9627 storage_class = sc_none;
9628 }
9629 else if (type_quals & TYPE_QUAL_CONST)
9630 {
9631 error ("const %qs cannot be declared %<mutable%>", name);
9632 storage_class = sc_none;
9633 }
9634 else if (TREE_CODE (type) == REFERENCE_TYPE)
9635 {
9636 permerror (input_location, "reference %qs cannot be declared "
9637 "%<mutable%>", name);
9638 storage_class = sc_none;
9639 }
9640 }
9641
9642 /* If this is declaring a typedef name, return a TYPE_DECL. */
9643 if (declspecs->specs[(int)ds_typedef] && decl_context != TYPENAME)
9644 {
9645 tree decl;
9646
9647 /* Note that the grammar rejects storage classes
9648 in typenames, fields or parameters. */
9649 if (current_lang_name == lang_name_java)
9650 TYPE_FOR_JAVA (type) = 1;
9651
9652 /* This declaration:
9653
9654 typedef void f(int) const;
9655
9656 declares a function type which is not a member of any
9657 particular class, but which is cv-qualified; for
9658 example "f S::*" declares a pointer to a const-qualified
9659 member function of S. We record the cv-qualification in the
9660 function type. */
9661 if (memfn_quals && TREE_CODE (type) == FUNCTION_TYPE)
9662 {
9663 type = apply_memfn_quals (type, memfn_quals);
9664
9665 /* We have now dealt with these qualifiers. */
9666 memfn_quals = TYPE_UNQUALIFIED;
9667 }
9668
9669 if (type_uses_auto (type))
9670 {
9671 error ("typedef declared %<auto%>");
9672 type = error_mark_node;
9673 }
9674
9675 if (decl_context == FIELD)
9676 decl = build_lang_decl (TYPE_DECL, unqualified_id, type);
9677 else
9678 decl = build_decl (input_location, TYPE_DECL, unqualified_id, type);
9679 if (id_declarator && declarator->u.id.qualifying_scope) {
9680 error_at (DECL_SOURCE_LOCATION (decl),
9681 "typedef name may not be a nested-name-specifier");
9682 TREE_TYPE (decl) = error_mark_node;
9683 }
9684
9685 if (decl_context != FIELD)
9686 {
9687 if (!current_function_decl)
9688 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
9689 else if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (current_function_decl)
9690 || (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P
9691 (current_function_decl)))
9692 /* The TYPE_DECL is "abstract" because there will be
9693 clones of this constructor/destructor, and there will
9694 be copies of this TYPE_DECL generated in those
9695 clones. */
9696 DECL_ABSTRACT (decl) = 1;
9697 }
9698 else if (constructor_name_p (unqualified_id, current_class_type))
9699 permerror (input_location, "ISO C++ forbids nested type %qD with same name "
9700 "as enclosing class",
9701 unqualified_id);
9702
9703 /* If the user declares "typedef struct {...} foo" then the
9704 struct will have an anonymous name. Fill that name in now.
9705 Nothing can refer to it, so nothing needs know about the name
9706 change. */
9707 if (type != error_mark_node
9708 && unqualified_id
9709 && TYPE_NAME (type)
9710 && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
9711 && TYPE_ANONYMOUS_P (type)
9712 && declspecs->type_definition_p
9713 && cp_type_quals (type) == TYPE_UNQUALIFIED)
9714 {
9715 tree t;
9716
9717 /* Replace the anonymous name with the real name everywhere. */
9718 for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
9719 {
9720 if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
9721 /* We do not rename the debug info representing the
9722 anonymous tagged type because the standard says in
9723 [dcl.typedef] that the naming applies only for
9724 linkage purposes. */
9725 /*debug_hooks->set_name (t, decl);*/
9726 TYPE_NAME (t) = decl;
9727 }
9728
9729 if (TYPE_LANG_SPECIFIC (type))
9730 TYPE_WAS_ANONYMOUS (type) = 1;
9731
9732 /* If this is a typedef within a template class, the nested
9733 type is a (non-primary) template. The name for the
9734 template needs updating as well. */
9735 if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
9736 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type))
9737 = TYPE_IDENTIFIER (type);
9738
9739 /* Adjust linkage now that we aren't anonymous anymore. */
9740 set_linkage_according_to_type (type, TYPE_MAIN_DECL (type));
9741 determine_visibility (TYPE_MAIN_DECL (type));
9742
9743 /* FIXME remangle member functions; member functions of a
9744 type with external linkage have external linkage. */
9745 }
9746
9747 if (signed_p
9748 || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
9749 C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
9750
9751 bad_specifiers (decl, BSP_TYPE, virtualp,
9752 memfn_quals != TYPE_UNQUALIFIED,
9753 inlinep, friendp, raises != NULL_TREE);
9754
9755 if (declspecs->specs[(int)ds_alias])
9756 /* Acknowledge that this was written:
9757 `using analias = atype;'. */
9758 TYPE_DECL_ALIAS_P (decl) = 1;
9759
9760 return decl;
9761 }
9762
9763 /* Detect the case of an array type of unspecified size
9764 which came, as such, direct from a typedef name.
9765 We must copy the type, so that the array's domain can be
9766 individually set by the object's initializer. */
9767
9768 if (type && typedef_type
9769 && TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type)
9770 && TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (typedef_type))
9771 type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
9772
9773 /* Detect where we're using a typedef of function type to declare a
9774 function. PARMS will not be set, so we must create it now. */
9775
9776 if (type == typedef_type && TREE_CODE (type) == FUNCTION_TYPE)
9777 {
9778 tree decls = NULL_TREE;
9779 tree args;
9780
9781 for (args = TYPE_ARG_TYPES (type);
9782 args && args != void_list_node;
9783 args = TREE_CHAIN (args))
9784 {
9785 tree decl = cp_build_parm_decl (NULL_TREE, TREE_VALUE (args));
9786
9787 DECL_CHAIN (decl) = decls;
9788 decls = decl;
9789 }
9790
9791 parms = nreverse (decls);
9792
9793 if (decl_context != TYPENAME)
9794 {
9795 /* A cv-qualifier-seq shall only be part of the function type
9796 for a non-static member function. [8.3.5/4 dcl.fct] */
9797 if (type_memfn_quals (type) != TYPE_UNQUALIFIED
9798 && (current_class_type == NULL_TREE || staticp) )
9799 {
9800 error (staticp
9801 ? G_("qualified function types cannot be used to "
9802 "declare static member functions")
9803 : G_("qualified function types cannot be used to "
9804 "declare free functions"));
9805 type = TYPE_MAIN_VARIANT (type);
9806 }
9807
9808 /* The qualifiers on the function type become the qualifiers on
9809 the non-static member function. */
9810 memfn_quals |= type_memfn_quals (type);
9811 type_quals = TYPE_UNQUALIFIED;
9812 }
9813 }
9814
9815 /* If this is a type name (such as, in a cast or sizeof),
9816 compute the type and return it now. */
9817
9818 if (decl_context == TYPENAME)
9819 {
9820 /* Note that the grammar rejects storage classes
9821 in typenames, fields or parameters. */
9822 if (type_quals != TYPE_UNQUALIFIED)
9823 type_quals = TYPE_UNQUALIFIED;
9824
9825 /* Special case: "friend class foo" looks like a TYPENAME context. */
9826 if (friendp)
9827 {
9828 if (type_quals != TYPE_UNQUALIFIED)
9829 {
9830 error ("type qualifiers specified for friend class declaration");
9831 type_quals = TYPE_UNQUALIFIED;
9832 }
9833 if (inlinep)
9834 {
9835 error ("%<inline%> specified for friend class declaration");
9836 inlinep = 0;
9837 }
9838
9839 if (!current_aggr)
9840 {
9841 /* Don't allow friend declaration without a class-key. */
9842 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
9843 permerror (input_location, "template parameters cannot be friends");
9844 else if (TREE_CODE (type) == TYPENAME_TYPE)
9845 permerror (input_location, "friend declaration requires class-key, "
9846 "i.e. %<friend class %T::%D%>",
9847 TYPE_CONTEXT (type), TYPENAME_TYPE_FULLNAME (type));
9848 else
9849 permerror (input_location, "friend declaration requires class-key, "
9850 "i.e. %<friend %#T%>",
9851 type);
9852 }
9853
9854 /* Only try to do this stuff if we didn't already give up. */
9855 if (type != integer_type_node)
9856 {
9857 /* A friendly class? */
9858 if (current_class_type)
9859 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type),
9860 /*complain=*/true);
9861 else
9862 error ("trying to make class %qT a friend of global scope",
9863 type);
9864
9865 type = void_type_node;
9866 }
9867 }
9868 else if (memfn_quals)
9869 {
9870 if (ctype == NULL_TREE
9871 && TREE_CODE (type) == METHOD_TYPE)
9872 ctype = TYPE_METHOD_BASETYPE (type);
9873
9874 if (ctype)
9875 type = build_memfn_type (type, ctype, memfn_quals);
9876 /* Core issue #547: need to allow this in template type args. */
9877 else if (template_type_arg && TREE_CODE (type) == FUNCTION_TYPE)
9878 type = apply_memfn_quals (type, memfn_quals);
9879 else
9880 error ("invalid qualifiers on non-member function type");
9881 }
9882
9883 return type;
9884 }
9885 else if (unqualified_id == NULL_TREE && decl_context != PARM
9886 && decl_context != CATCHPARM
9887 && TREE_CODE (type) != UNION_TYPE
9888 && ! bitfield)
9889 {
9890 error ("abstract declarator %qT used as declaration", type);
9891 return error_mark_node;
9892 }
9893
9894 /* Only functions may be declared using an operator-function-id. */
9895 if (unqualified_id
9896 && IDENTIFIER_OPNAME_P (unqualified_id)
9897 && TREE_CODE (type) != FUNCTION_TYPE
9898 && TREE_CODE (type) != METHOD_TYPE)
9899 {
9900 error ("declaration of %qD as non-function", unqualified_id);
9901 return error_mark_node;
9902 }
9903
9904 /* We don't check parameter types here because we can emit a better
9905 error message later. */
9906 if (decl_context != PARM)
9907 {
9908 type = check_var_type (unqualified_id, type);
9909 if (type == error_mark_node)
9910 return error_mark_node;
9911 }
9912
9913 /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
9914 or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE. */
9915
9916 if (decl_context == PARM || decl_context == CATCHPARM)
9917 {
9918 if (ctype || in_namespace)
9919 error ("cannot use %<::%> in parameter declaration");
9920
9921 if (type_uses_auto (type))
9922 {
9923 error ("parameter declared %<auto%>");
9924 type = error_mark_node;
9925 }
9926
9927 /* A parameter declared as an array of T is really a pointer to T.
9928 One declared as a function is really a pointer to a function.
9929 One declared as a member is really a pointer to member. */
9930
9931 if (TREE_CODE (type) == ARRAY_TYPE)
9932 {
9933 /* Transfer const-ness of array into that of type pointed to. */
9934 type = build_pointer_type (TREE_TYPE (type));
9935 type_quals = TYPE_UNQUALIFIED;
9936 }
9937 else if (TREE_CODE (type) == FUNCTION_TYPE)
9938 type = build_pointer_type (type);
9939 }
9940
9941 if (ctype && TREE_CODE (type) == FUNCTION_TYPE && staticp < 2
9942 && !NEW_DELETE_OPNAME_P (unqualified_id))
9943 {
9944 cp_cv_quals real_quals = memfn_quals;
9945 if (constexpr_p && sfk != sfk_constructor && sfk != sfk_destructor)
9946 real_quals |= TYPE_QUAL_CONST;
9947 type = build_memfn_type (type, ctype, real_quals);
9948 }
9949
9950 {
9951 tree decl;
9952
9953 if (decl_context == PARM)
9954 {
9955 decl = cp_build_parm_decl (unqualified_id, type);
9956
9957 bad_specifiers (decl, BSP_PARM, virtualp,
9958 memfn_quals != TYPE_UNQUALIFIED,
9959 inlinep, friendp, raises != NULL_TREE);
9960 }
9961 else if (decl_context == FIELD)
9962 {
9963 /* The C99 flexible array extension. */
9964 if (!staticp && TREE_CODE (type) == ARRAY_TYPE
9965 && TYPE_DOMAIN (type) == NULL_TREE)
9966 {
9967 tree itype = compute_array_index_type (dname, integer_zero_node,
9968 tf_warning_or_error);
9969 type = build_cplus_array_type (TREE_TYPE (type), itype);
9970 }
9971
9972 if (type == error_mark_node)
9973 {
9974 /* Happens when declaring arrays of sizes which
9975 are error_mark_node, for example. */
9976 decl = NULL_TREE;
9977 }
9978 else if (in_namespace && !friendp)
9979 {
9980 /* Something like struct S { int N::j; }; */
9981 error ("invalid use of %<::%>");
9982 return error_mark_node;
9983 }
9984 else if (TREE_CODE (type) == FUNCTION_TYPE
9985 || TREE_CODE (type) == METHOD_TYPE)
9986 {
9987 int publicp = 0;
9988 tree function_context;
9989
9990 if (friendp == 0)
9991 {
9992 /* This should never happen in pure C++ (the check
9993 could be an assert). It could happen in
9994 Objective-C++ if someone writes invalid code that
9995 uses a function declaration for an instance
9996 variable or property (instance variables and
9997 properties are parsed as FIELD_DECLs, but they are
9998 part of an Objective-C class, not a C++ class).
9999 That code is invalid and is caught by this
10000 check. */
10001 if (!ctype)
10002 {
10003 error ("declaration of function %qD in invalid context",
10004 unqualified_id);
10005 return error_mark_node;
10006 }
10007
10008 /* ``A union may [ ... ] not [ have ] virtual functions.''
10009 ARM 9.5 */
10010 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
10011 {
10012 error ("function %qD declared virtual inside a union",
10013 unqualified_id);
10014 return error_mark_node;
10015 }
10016
10017 if (NEW_DELETE_OPNAME_P (unqualified_id))
10018 {
10019 if (virtualp)
10020 {
10021 error ("%qD cannot be declared virtual, since it "
10022 "is always static",
10023 unqualified_id);
10024 virtualp = 0;
10025 }
10026 }
10027 }
10028
10029 /* Check that the name used for a destructor makes sense. */
10030 if (sfk == sfk_destructor)
10031 {
10032 tree uqname = id_declarator->u.id.unqualified_name;
10033
10034 if (!ctype)
10035 {
10036 gcc_assert (friendp);
10037 error ("expected qualified name in friend declaration "
10038 "for destructor %qD", uqname);
10039 return error_mark_node;
10040 }
10041
10042 if (!check_dtor_name (ctype, TREE_OPERAND (uqname, 0)))
10043 {
10044 error ("declaration of %qD as member of %qT",
10045 uqname, ctype);
10046 return error_mark_node;
10047 }
10048 if (constexpr_p)
10049 {
10050 error ("a destructor cannot be %<constexpr%>");
10051 return error_mark_node;
10052 }
10053 }
10054 else if (sfk == sfk_constructor && friendp && !ctype)
10055 {
10056 error ("expected qualified name in friend declaration "
10057 "for constructor %qD",
10058 id_declarator->u.id.unqualified_name);
10059 return error_mark_node;
10060 }
10061
10062 /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node. */
10063 function_context = (ctype != NULL_TREE) ?
10064 decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
10065 publicp = (! friendp || ! staticp)
10066 && function_context == NULL_TREE;
10067 decl = grokfndecl (ctype, type,
10068 TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
10069 ? unqualified_id : dname,
10070 parms,
10071 unqualified_id,
10072 virtualp, flags, memfn_quals, raises,
10073 friendp ? -1 : 0, friendp, publicp,
10074 inlinep | (2 * constexpr_p),
10075 sfk,
10076 funcdef_flag, template_count, in_namespace,
10077 attrlist, declarator->id_loc);
10078 decl = set_virt_specifiers (decl, virt_specifiers);
10079 if (decl == NULL_TREE)
10080 return error_mark_node;
10081 #if 0
10082 /* This clobbers the attrs stored in `decl' from `attrlist'. */
10083 /* The decl and setting of decl_attr is also turned off. */
10084 decl = build_decl_attribute_variant (decl, decl_attr);
10085 #endif
10086
10087 /* [class.conv.ctor]
10088
10089 A constructor declared without the function-specifier
10090 explicit that can be called with a single parameter
10091 specifies a conversion from the type of its first
10092 parameter to the type of its class. Such a constructor
10093 is called a converting constructor. */
10094 if (explicitp == 2)
10095 DECL_NONCONVERTING_P (decl) = 1;
10096 }
10097 else if (!staticp && !dependent_type_p (type)
10098 && !COMPLETE_TYPE_P (complete_type (type))
10099 && (TREE_CODE (type) != ARRAY_TYPE || initialized == 0))
10100 {
10101 if (unqualified_id)
10102 error ("field %qD has incomplete type", unqualified_id);
10103 else
10104 error ("name %qT has incomplete type", type);
10105
10106 /* If we're instantiating a template, tell them which
10107 instantiation made the field's type be incomplete. */
10108 if (current_class_type
10109 && TYPE_NAME (current_class_type)
10110 && IDENTIFIER_TEMPLATE (current_class_name)
10111 && declspecs->type
10112 && declspecs->type == type)
10113 error (" in instantiation of template %qT",
10114 current_class_type);
10115
10116 return error_mark_node;
10117 }
10118 else
10119 {
10120 if (friendp)
10121 {
10122 error ("%qE is neither function nor member function; "
10123 "cannot be declared friend", unqualified_id);
10124 friendp = 0;
10125 }
10126 decl = NULL_TREE;
10127 }
10128
10129 if (friendp)
10130 {
10131 /* Friends are treated specially. */
10132 if (ctype == current_class_type)
10133 ; /* We already issued a permerror. */
10134 else if (decl && DECL_NAME (decl))
10135 {
10136 if (template_class_depth (current_class_type) == 0)
10137 {
10138 decl = check_explicit_specialization
10139 (unqualified_id, decl, template_count,
10140 2 * funcdef_flag + 4);
10141 if (decl == error_mark_node)
10142 return error_mark_node;
10143 }
10144
10145 decl = do_friend (ctype, unqualified_id, decl,
10146 *attrlist, flags,
10147 funcdef_flag);
10148 return decl;
10149 }
10150 else
10151 return error_mark_node;
10152 }
10153
10154 /* Structure field. It may not be a function, except for C++. */
10155
10156 if (decl == NULL_TREE)
10157 {
10158 if (staticp)
10159 {
10160 /* C++ allows static class members. All other work
10161 for this is done by grokfield. */
10162 decl = build_lang_decl (VAR_DECL, unqualified_id, type);
10163 set_linkage_for_static_data_member (decl);
10164 /* Even if there is an in-class initialization, DECL
10165 is considered undefined until an out-of-class
10166 definition is provided. */
10167 DECL_EXTERNAL (decl) = 1;
10168
10169 if (thread_p)
10170 DECL_TLS_MODEL (decl) = decl_default_tls_model (decl);
10171
10172 if (constexpr_p && !initialized)
10173 {
10174 error ("constexpr static data member %qD must have an "
10175 "initializer", decl);
10176 constexpr_p = false;
10177 }
10178 }
10179 else
10180 {
10181 if (constexpr_p)
10182 {
10183 error ("non-static data member %qE declared %<constexpr%>",
10184 unqualified_id);
10185 constexpr_p = false;
10186 }
10187 decl = build_decl (input_location,
10188 FIELD_DECL, unqualified_id, type);
10189 DECL_NONADDRESSABLE_P (decl) = bitfield;
10190 if (bitfield && !unqualified_id)
10191 TREE_NO_WARNING (decl) = 1;
10192
10193 if (storage_class == sc_mutable)
10194 {
10195 DECL_MUTABLE_P (decl) = 1;
10196 storage_class = sc_none;
10197 }
10198
10199 if (initialized)
10200 /* An attempt is being made to initialize a non-static
10201 member. This is new in C++11. */
10202 maybe_warn_cpp0x (CPP0X_NSDMI);
10203 }
10204
10205 bad_specifiers (decl, BSP_FIELD, virtualp,
10206 memfn_quals != TYPE_UNQUALIFIED,
10207 inlinep, friendp, raises != NULL_TREE);
10208 }
10209 }
10210 else if (TREE_CODE (type) == FUNCTION_TYPE
10211 || TREE_CODE (type) == METHOD_TYPE)
10212 {
10213 tree original_name;
10214 int publicp = 0;
10215
10216 if (!unqualified_id)
10217 return error_mark_node;
10218
10219 if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
10220 original_name = dname;
10221 else
10222 original_name = unqualified_id;
10223
10224 if (storage_class == sc_auto)
10225 error ("storage class %<auto%> invalid for function %qs", name);
10226 else if (storage_class == sc_register)
10227 error ("storage class %<register%> invalid for function %qs", name);
10228 else if (thread_p)
10229 error ("storage class %<__thread%> invalid for function %qs", name);
10230
10231 if (virt_specifiers)
10232 error ("virt-specifiers in %qs not allowed outside a class definition", name);
10233 /* Function declaration not at top level.
10234 Storage classes other than `extern' are not allowed
10235 and `extern' makes no difference. */
10236 if (! toplevel_bindings_p ()
10237 && (storage_class == sc_static
10238 || declspecs->specs[(int)ds_inline])
10239 && pedantic)
10240 {
10241 if (storage_class == sc_static)
10242 pedwarn (input_location, OPT_pedantic,
10243 "%<static%> specified invalid for function %qs "
10244 "declared out of global scope", name);
10245 else
10246 pedwarn (input_location, OPT_pedantic,
10247 "%<inline%> specifier invalid for function %qs "
10248 "declared out of global scope", name);
10249 }
10250
10251 if (ctype == NULL_TREE)
10252 {
10253 if (virtualp)
10254 {
10255 error ("virtual non-class function %qs", name);
10256 virtualp = 0;
10257 }
10258 else if (sfk == sfk_constructor
10259 || sfk == sfk_destructor)
10260 {
10261 error (funcdef_flag
10262 ? G_("%qs defined in a non-class scope")
10263 : G_("%qs declared in a non-class scope"), name);
10264 sfk = sfk_none;
10265 }
10266 }
10267
10268 /* Record presence of `static'. */
10269 publicp = (ctype != NULL_TREE
10270 || storage_class == sc_extern
10271 || storage_class != sc_static);
10272
10273 decl = grokfndecl (ctype, type, original_name, parms, unqualified_id,
10274 virtualp, flags, memfn_quals, raises,
10275 1, friendp,
10276 publicp, inlinep | (2 * constexpr_p), sfk,
10277 funcdef_flag,
10278 template_count, in_namespace, attrlist,
10279 declarator->id_loc);
10280 if (decl == NULL_TREE)
10281 return error_mark_node;
10282
10283 if (staticp == 1)
10284 {
10285 int invalid_static = 0;
10286
10287 /* Don't allow a static member function in a class, and forbid
10288 declaring main to be static. */
10289 if (TREE_CODE (type) == METHOD_TYPE)
10290 {
10291 permerror (input_location, "cannot declare member function %qD to have "
10292 "static linkage", decl);
10293 invalid_static = 1;
10294 }
10295 else if (current_function_decl)
10296 {
10297 /* FIXME need arm citation */
10298 error ("cannot declare static function inside another function");
10299 invalid_static = 1;
10300 }
10301
10302 if (invalid_static)
10303 {
10304 staticp = 0;
10305 storage_class = sc_none;
10306 }
10307 }
10308 }
10309 else
10310 {
10311 /* It's a variable. */
10312
10313 /* An uninitialized decl with `extern' is a reference. */
10314 decl = grokvardecl (type, unqualified_id,
10315 declspecs,
10316 initialized,
10317 (type_quals & TYPE_QUAL_CONST) != 0,
10318 ctype ? ctype : in_namespace);
10319 bad_specifiers (decl, BSP_VAR, virtualp,
10320 memfn_quals != TYPE_UNQUALIFIED,
10321 inlinep, friendp, raises != NULL_TREE);
10322
10323 if (ctype)
10324 {
10325 DECL_CONTEXT (decl) = ctype;
10326 if (staticp == 1)
10327 {
10328 permerror (input_location, "%<static%> may not be used when defining "
10329 "(as opposed to declaring) a static data member");
10330 staticp = 0;
10331 storage_class = sc_none;
10332 }
10333 if (storage_class == sc_register && TREE_STATIC (decl))
10334 {
10335 error ("static member %qD declared %<register%>", decl);
10336 storage_class = sc_none;
10337 }
10338 if (storage_class == sc_extern && pedantic)
10339 {
10340 pedwarn (input_location, OPT_pedantic,
10341 "cannot explicitly declare member %q#D to have "
10342 "extern linkage", decl);
10343 storage_class = sc_none;
10344 }
10345 }
10346 else if (constexpr_p && DECL_EXTERNAL (decl))
10347 {
10348 error ("declaration of constexpr variable %qD is not a definition",
10349 decl);
10350 constexpr_p = false;
10351 }
10352 }
10353
10354 if (storage_class == sc_extern && initialized && !funcdef_flag)
10355 {
10356 if (toplevel_bindings_p ())
10357 {
10358 /* It's common practice (and completely valid) to have a const
10359 be initialized and declared extern. */
10360 if (!(type_quals & TYPE_QUAL_CONST))
10361 warning (0, "%qs initialized and declared %<extern%>", name);
10362 }
10363 else
10364 {
10365 error ("%qs has both %<extern%> and initializer", name);
10366 return error_mark_node;
10367 }
10368 }
10369
10370 /* Record `register' declaration for warnings on &
10371 and in case doing stupid register allocation. */
10372
10373 if (storage_class == sc_register)
10374 DECL_REGISTER (decl) = 1;
10375 else if (storage_class == sc_extern)
10376 DECL_THIS_EXTERN (decl) = 1;
10377 else if (storage_class == sc_static)
10378 DECL_THIS_STATIC (decl) = 1;
10379
10380 /* Set constexpr flag on vars (functions got it in grokfndecl). */
10381 if (constexpr_p && TREE_CODE (decl) == VAR_DECL)
10382 DECL_DECLARED_CONSTEXPR_P (decl) = true;
10383
10384 /* Record constancy and volatility on the DECL itself . There's
10385 no need to do this when processing a template; we'll do this
10386 for the instantiated declaration based on the type of DECL. */
10387 if (!processing_template_decl)
10388 cp_apply_type_quals_to_decl (type_quals, decl);
10389
10390 return decl;
10391 }
10392 }
10393 \f
10394 /* Subroutine of start_function. Ensure that each of the parameter
10395 types (as listed in PARMS) is complete, as is required for a
10396 function definition. */
10397
10398 static void
10399 require_complete_types_for_parms (tree parms)
10400 {
10401 for (; parms; parms = DECL_CHAIN (parms))
10402 {
10403 if (dependent_type_p (TREE_TYPE (parms)))
10404 continue;
10405 if (!VOID_TYPE_P (TREE_TYPE (parms))
10406 && complete_type_or_else (TREE_TYPE (parms), parms))
10407 {
10408 relayout_decl (parms);
10409 DECL_ARG_TYPE (parms) = type_passed_as (TREE_TYPE (parms));
10410 }
10411 else
10412 /* grokparms or complete_type_or_else will have already issued
10413 an error. */
10414 TREE_TYPE (parms) = error_mark_node;
10415 }
10416 }
10417
10418 /* Returns nonzero if T is a local variable. */
10419
10420 int
10421 local_variable_p (const_tree t)
10422 {
10423 if ((TREE_CODE (t) == VAR_DECL
10424 /* A VAR_DECL with a context that is a _TYPE is a static data
10425 member. */
10426 && !TYPE_P (CP_DECL_CONTEXT (t))
10427 /* Any other non-local variable must be at namespace scope. */
10428 && !DECL_NAMESPACE_SCOPE_P (t))
10429 || (TREE_CODE (t) == PARM_DECL))
10430 return 1;
10431
10432 return 0;
10433 }
10434
10435 /* Like local_variable_p, but suitable for use as a tree-walking
10436 function. */
10437
10438 static tree
10439 local_variable_p_walkfn (tree *tp, int *walk_subtrees,
10440 void *data ATTRIBUTE_UNUSED)
10441 {
10442 if (local_variable_p (*tp) && !DECL_ARTIFICIAL (*tp))
10443 return *tp;
10444 else if (TYPE_P (*tp))
10445 *walk_subtrees = 0;
10446
10447 return NULL_TREE;
10448 }
10449
10450
10451 /* Check that ARG, which is a default-argument expression for a
10452 parameter DECL, is valid. Returns ARG, or ERROR_MARK_NODE, if
10453 something goes wrong. DECL may also be a _TYPE node, rather than a
10454 DECL, if there is no DECL available. */
10455
10456 tree
10457 check_default_argument (tree decl, tree arg)
10458 {
10459 tree var;
10460 tree decl_type;
10461
10462 if (TREE_CODE (arg) == DEFAULT_ARG)
10463 /* We get a DEFAULT_ARG when looking at an in-class declaration
10464 with a default argument. Ignore the argument for now; we'll
10465 deal with it after the class is complete. */
10466 return arg;
10467
10468 if (TYPE_P (decl))
10469 {
10470 decl_type = decl;
10471 decl = NULL_TREE;
10472 }
10473 else
10474 decl_type = TREE_TYPE (decl);
10475
10476 if (arg == error_mark_node
10477 || decl == error_mark_node
10478 || TREE_TYPE (arg) == error_mark_node
10479 || decl_type == error_mark_node)
10480 /* Something already went wrong. There's no need to check
10481 further. */
10482 return error_mark_node;
10483
10484 /* [dcl.fct.default]
10485
10486 A default argument expression is implicitly converted to the
10487 parameter type. */
10488 if (!TREE_TYPE (arg)
10489 || !can_convert_arg (decl_type, TREE_TYPE (arg), arg, LOOKUP_NORMAL))
10490 {
10491 if (decl)
10492 error ("default argument for %q#D has type %qT",
10493 decl, TREE_TYPE (arg));
10494 else
10495 error ("default argument for parameter of type %qT has type %qT",
10496 decl_type, TREE_TYPE (arg));
10497
10498 return error_mark_node;
10499 }
10500
10501 /* [dcl.fct.default]
10502
10503 Local variables shall not be used in default argument
10504 expressions.
10505
10506 The keyword `this' shall not be used in a default argument of a
10507 member function. */
10508 var = cp_walk_tree_without_duplicates (&arg, local_variable_p_walkfn, NULL);
10509 if (var)
10510 {
10511 error ("default argument %qE uses local variable %qD", arg, var);
10512 return error_mark_node;
10513 }
10514
10515 /* All is well. */
10516 return arg;
10517 }
10518
10519 /* Returns a deprecated type used within TYPE, or NULL_TREE if none. */
10520
10521 static tree
10522 type_is_deprecated (tree type)
10523 {
10524 enum tree_code code;
10525 if (TREE_DEPRECATED (type))
10526 return type;
10527 if (TYPE_NAME (type)
10528 && TREE_DEPRECATED (TYPE_NAME (type)))
10529 return type;
10530
10531 /* Do warn about using typedefs to a deprecated class. */
10532 if (TAGGED_TYPE_P (type) && type != TYPE_MAIN_VARIANT (type))
10533 return type_is_deprecated (TYPE_MAIN_VARIANT (type));
10534
10535 code = TREE_CODE (type);
10536
10537 if (code == POINTER_TYPE || code == REFERENCE_TYPE
10538 || code == OFFSET_TYPE || code == FUNCTION_TYPE
10539 || code == METHOD_TYPE || code == ARRAY_TYPE)
10540 return type_is_deprecated (TREE_TYPE (type));
10541
10542 if (TYPE_PTRMEMFUNC_P (type))
10543 return type_is_deprecated
10544 (TREE_TYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (type))));
10545
10546 return NULL_TREE;
10547 }
10548
10549 /* Decode the list of parameter types for a function type.
10550 Given the list of things declared inside the parens,
10551 return a list of types.
10552
10553 If this parameter does not end with an ellipsis, we append
10554 void_list_node.
10555
10556 *PARMS is set to the chain of PARM_DECLs created. */
10557
10558 static tree
10559 grokparms (tree parmlist, tree *parms)
10560 {
10561 tree result = NULL_TREE;
10562 tree decls = NULL_TREE;
10563 tree parm;
10564 int any_error = 0;
10565
10566 for (parm = parmlist; parm != NULL_TREE; parm = TREE_CHAIN (parm))
10567 {
10568 tree type = NULL_TREE;
10569 tree init = TREE_PURPOSE (parm);
10570 tree decl = TREE_VALUE (parm);
10571 const char *errmsg;
10572
10573 if (parm == void_list_node)
10574 break;
10575
10576 if (! decl || TREE_TYPE (decl) == error_mark_node)
10577 continue;
10578
10579 type = TREE_TYPE (decl);
10580 if (VOID_TYPE_P (type))
10581 {
10582 if (same_type_p (type, void_type_node)
10583 && DECL_SELF_REFERENCE_P (type)
10584 && !DECL_NAME (decl) && !result && TREE_CHAIN (parm) == void_list_node)
10585 /* this is a parmlist of `(void)', which is ok. */
10586 break;
10587 cxx_incomplete_type_error (decl, type);
10588 /* It's not a good idea to actually create parameters of
10589 type `void'; other parts of the compiler assume that a
10590 void type terminates the parameter list. */
10591 type = error_mark_node;
10592 TREE_TYPE (decl) = error_mark_node;
10593 }
10594
10595 if (type != error_mark_node
10596 && TYPE_FOR_JAVA (type)
10597 && MAYBE_CLASS_TYPE_P (type))
10598 {
10599 error ("parameter %qD has Java class type", decl);
10600 type = error_mark_node;
10601 TREE_TYPE (decl) = error_mark_node;
10602 init = NULL_TREE;
10603 }
10604
10605 if (type != error_mark_node
10606 && (errmsg = targetm.invalid_parameter_type (type)))
10607 {
10608 error (errmsg);
10609 type = error_mark_node;
10610 TREE_TYPE (decl) = error_mark_node;
10611 }
10612
10613 if (type != error_mark_node)
10614 {
10615 if (deprecated_state != DEPRECATED_SUPPRESS)
10616 {
10617 tree deptype = type_is_deprecated (type);
10618 if (deptype)
10619 warn_deprecated_use (deptype, NULL_TREE);
10620 }
10621
10622 /* Top-level qualifiers on the parameters are
10623 ignored for function types. */
10624 type = cp_build_qualified_type (type, 0);
10625 if (TREE_CODE (type) == METHOD_TYPE)
10626 {
10627 error ("parameter %qD invalidly declared method type", decl);
10628 type = build_pointer_type (type);
10629 TREE_TYPE (decl) = type;
10630 }
10631 else if (abstract_virtuals_error (decl, type))
10632 any_error = 1; /* Seems like a good idea. */
10633 else if (POINTER_TYPE_P (type))
10634 {
10635 /* [dcl.fct]/6, parameter types cannot contain pointers
10636 (references) to arrays of unknown bound. */
10637 tree t = TREE_TYPE (type);
10638 int ptr = TYPE_PTR_P (type);
10639
10640 while (1)
10641 {
10642 if (TYPE_PTR_P (t))
10643 ptr = 1;
10644 else if (TREE_CODE (t) != ARRAY_TYPE)
10645 break;
10646 else if (!TYPE_DOMAIN (t))
10647 break;
10648 t = TREE_TYPE (t);
10649 }
10650 if (TREE_CODE (t) == ARRAY_TYPE)
10651 error (ptr
10652 ? G_("parameter %qD includes pointer to array of "
10653 "unknown bound %qT")
10654 : G_("parameter %qD includes reference to array of "
10655 "unknown bound %qT"),
10656 decl, t);
10657 }
10658
10659 if (any_error)
10660 init = NULL_TREE;
10661 else if (init && !processing_template_decl)
10662 init = check_default_argument (decl, init);
10663 }
10664
10665 DECL_CHAIN (decl) = decls;
10666 decls = decl;
10667 result = tree_cons (init, type, result);
10668 }
10669 decls = nreverse (decls);
10670 result = nreverse (result);
10671 if (parm)
10672 result = chainon (result, void_list_node);
10673 *parms = decls;
10674
10675 return result;
10676 }
10677
10678 \f
10679 /* D is a constructor or overloaded `operator='.
10680
10681 Let T be the class in which D is declared. Then, this function
10682 returns:
10683
10684 -1 if D's is an ill-formed constructor or copy assignment operator
10685 whose first parameter is of type `T'.
10686 0 if D is not a copy constructor or copy assignment
10687 operator.
10688 1 if D is a copy constructor or copy assignment operator whose
10689 first parameter is a reference to non-const qualified T.
10690 2 if D is a copy constructor or copy assignment operator whose
10691 first parameter is a reference to const qualified T.
10692
10693 This function can be used as a predicate. Positive values indicate
10694 a copy constructor and nonzero values indicate a copy assignment
10695 operator. */
10696
10697 int
10698 copy_fn_p (const_tree d)
10699 {
10700 tree args;
10701 tree arg_type;
10702 int result = 1;
10703
10704 gcc_assert (DECL_FUNCTION_MEMBER_P (d));
10705
10706 if (TREE_CODE (d) == TEMPLATE_DECL
10707 || (DECL_TEMPLATE_INFO (d)
10708 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
10709 /* Instantiations of template member functions are never copy
10710 functions. Note that member functions of templated classes are
10711 represented as template functions internally, and we must
10712 accept those as copy functions. */
10713 return 0;
10714
10715 args = FUNCTION_FIRST_USER_PARMTYPE (d);
10716 if (!args)
10717 return 0;
10718
10719 arg_type = TREE_VALUE (args);
10720 if (arg_type == error_mark_node)
10721 return 0;
10722
10723 if (TYPE_MAIN_VARIANT (arg_type) == DECL_CONTEXT (d))
10724 {
10725 /* Pass by value copy assignment operator. */
10726 result = -1;
10727 }
10728 else if (TREE_CODE (arg_type) == REFERENCE_TYPE
10729 && !TYPE_REF_IS_RVALUE (arg_type)
10730 && TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)) == DECL_CONTEXT (d))
10731 {
10732 if (CP_TYPE_CONST_P (TREE_TYPE (arg_type)))
10733 result = 2;
10734 }
10735 else
10736 return 0;
10737
10738 args = TREE_CHAIN (args);
10739
10740 if (args && args != void_list_node && !TREE_PURPOSE (args))
10741 /* There are more non-optional args. */
10742 return 0;
10743
10744 return result;
10745 }
10746
10747 /* D is a constructor or overloaded `operator='.
10748
10749 Let T be the class in which D is declared. Then, this function
10750 returns true when D is a move constructor or move assignment
10751 operator, false otherwise. */
10752
10753 bool
10754 move_fn_p (const_tree d)
10755 {
10756 tree args;
10757 tree arg_type;
10758 bool result = false;
10759
10760 gcc_assert (DECL_FUNCTION_MEMBER_P (d));
10761
10762 if (cxx_dialect == cxx98)
10763 /* There are no move constructors if we are in C++98 mode. */
10764 return false;
10765
10766 if (TREE_CODE (d) == TEMPLATE_DECL
10767 || (DECL_TEMPLATE_INFO (d)
10768 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
10769 /* Instantiations of template member functions are never copy
10770 functions. Note that member functions of templated classes are
10771 represented as template functions internally, and we must
10772 accept those as copy functions. */
10773 return 0;
10774
10775 args = FUNCTION_FIRST_USER_PARMTYPE (d);
10776 if (!args)
10777 return 0;
10778
10779 arg_type = TREE_VALUE (args);
10780 if (arg_type == error_mark_node)
10781 return 0;
10782
10783 if (TREE_CODE (arg_type) == REFERENCE_TYPE
10784 && TYPE_REF_IS_RVALUE (arg_type)
10785 && same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)),
10786 DECL_CONTEXT (d)))
10787 result = true;
10788
10789 args = TREE_CHAIN (args);
10790
10791 if (args && args != void_list_node && !TREE_PURPOSE (args))
10792 /* There are more non-optional args. */
10793 return false;
10794
10795 return result;
10796 }
10797
10798 /* Remember any special properties of member function DECL. */
10799
10800 void
10801 grok_special_member_properties (tree decl)
10802 {
10803 tree class_type;
10804
10805 if (!DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
10806 return;
10807
10808 class_type = DECL_CONTEXT (decl);
10809 if (DECL_CONSTRUCTOR_P (decl))
10810 {
10811 int ctor = copy_fn_p (decl);
10812
10813 if (!DECL_ARTIFICIAL (decl))
10814 TYPE_HAS_USER_CONSTRUCTOR (class_type) = 1;
10815
10816 if (ctor > 0)
10817 {
10818 /* [class.copy]
10819
10820 A non-template constructor for class X is a copy
10821 constructor if its first parameter is of type X&, const
10822 X&, volatile X& or const volatile X&, and either there
10823 are no other parameters or else all other parameters have
10824 default arguments. */
10825 TYPE_HAS_COPY_CTOR (class_type) = 1;
10826 if (user_provided_p (decl))
10827 TYPE_HAS_COMPLEX_COPY_CTOR (class_type) = 1;
10828 if (ctor > 1)
10829 TYPE_HAS_CONST_COPY_CTOR (class_type) = 1;
10830 }
10831 else if (sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (decl)))
10832 {
10833 TYPE_HAS_DEFAULT_CONSTRUCTOR (class_type) = 1;
10834 if (user_provided_p (decl))
10835 TYPE_HAS_COMPLEX_DFLT (class_type) = 1;
10836 }
10837 else if (move_fn_p (decl) && user_provided_p (decl))
10838 TYPE_HAS_COMPLEX_MOVE_CTOR (class_type) = 1;
10839 else if (is_list_ctor (decl))
10840 TYPE_HAS_LIST_CTOR (class_type) = 1;
10841
10842 if (DECL_DECLARED_CONSTEXPR_P (decl)
10843 && !copy_fn_p (decl) && !move_fn_p (decl))
10844 TYPE_HAS_CONSTEXPR_CTOR (class_type) = 1;
10845 }
10846 else if (DECL_OVERLOADED_OPERATOR_P (decl) == NOP_EXPR)
10847 {
10848 /* [class.copy]
10849
10850 A non-template assignment operator for class X is a copy
10851 assignment operator if its parameter is of type X, X&, const
10852 X&, volatile X& or const volatile X&. */
10853
10854 int assop = copy_fn_p (decl);
10855
10856 if (assop)
10857 {
10858 TYPE_HAS_COPY_ASSIGN (class_type) = 1;
10859 if (user_provided_p (decl))
10860 TYPE_HAS_COMPLEX_COPY_ASSIGN (class_type) = 1;
10861 if (assop != 1)
10862 TYPE_HAS_CONST_COPY_ASSIGN (class_type) = 1;
10863 }
10864 else if (move_fn_p (decl) && user_provided_p (decl))
10865 TYPE_HAS_COMPLEX_MOVE_ASSIGN (class_type) = 1;
10866 }
10867 /* Destructors are handled in check_methods. */
10868 }
10869
10870 /* Check a constructor DECL has the correct form. Complains
10871 if the class has a constructor of the form X(X). */
10872
10873 int
10874 grok_ctor_properties (const_tree ctype, const_tree decl)
10875 {
10876 int ctor_parm = copy_fn_p (decl);
10877
10878 if (ctor_parm < 0)
10879 {
10880 /* [class.copy]
10881
10882 A declaration of a constructor for a class X is ill-formed if
10883 its first parameter is of type (optionally cv-qualified) X
10884 and either there are no other parameters or else all other
10885 parameters have default arguments.
10886
10887 We *don't* complain about member template instantiations that
10888 have this form, though; they can occur as we try to decide
10889 what constructor to use during overload resolution. Since
10890 overload resolution will never prefer such a constructor to
10891 the non-template copy constructor (which is either explicitly
10892 or implicitly defined), there's no need to worry about their
10893 existence. Theoretically, they should never even be
10894 instantiated, but that's hard to forestall. */
10895 error ("invalid constructor; you probably meant %<%T (const %T&)%>",
10896 ctype, ctype);
10897 return 0;
10898 }
10899
10900 return 1;
10901 }
10902
10903 /* An operator with this code is unary, but can also be binary. */
10904
10905 static int
10906 ambi_op_p (enum tree_code code)
10907 {
10908 return (code == INDIRECT_REF
10909 || code == ADDR_EXPR
10910 || code == UNARY_PLUS_EXPR
10911 || code == NEGATE_EXPR
10912 || code == PREINCREMENT_EXPR
10913 || code == PREDECREMENT_EXPR);
10914 }
10915
10916 /* An operator with this name can only be unary. */
10917
10918 static int
10919 unary_op_p (enum tree_code code)
10920 {
10921 return (code == TRUTH_NOT_EXPR
10922 || code == BIT_NOT_EXPR
10923 || code == COMPONENT_REF
10924 || code == TYPE_EXPR);
10925 }
10926
10927 /* DECL is a declaration for an overloaded operator. If COMPLAIN is true,
10928 errors are issued for invalid declarations. */
10929
10930 bool
10931 grok_op_properties (tree decl, bool complain)
10932 {
10933 tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
10934 tree argtype;
10935 int methodp = (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE);
10936 tree name = DECL_NAME (decl);
10937 enum tree_code operator_code;
10938 int arity;
10939 bool ellipsis_p;
10940 tree class_type;
10941
10942 /* Count the number of arguments and check for ellipsis. */
10943 for (argtype = argtypes, arity = 0;
10944 argtype && argtype != void_list_node;
10945 argtype = TREE_CHAIN (argtype))
10946 ++arity;
10947 ellipsis_p = !argtype;
10948
10949 class_type = DECL_CONTEXT (decl);
10950 if (class_type && !CLASS_TYPE_P (class_type))
10951 class_type = NULL_TREE;
10952
10953 if (DECL_CONV_FN_P (decl))
10954 operator_code = TYPE_EXPR;
10955 else
10956 do
10957 {
10958 #define DEF_OPERATOR(NAME, CODE, MANGLING, ARITY, ASSN_P) \
10959 if (ansi_opname (CODE) == name) \
10960 { \
10961 operator_code = (CODE); \
10962 break; \
10963 } \
10964 else if (ansi_assopname (CODE) == name) \
10965 { \
10966 operator_code = (CODE); \
10967 DECL_ASSIGNMENT_OPERATOR_P (decl) = 1; \
10968 break; \
10969 }
10970
10971 #include "operators.def"
10972 #undef DEF_OPERATOR
10973
10974 gcc_unreachable ();
10975 }
10976 while (0);
10977 gcc_assert (operator_code != MAX_TREE_CODES);
10978 SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
10979
10980 if (class_type)
10981 switch (operator_code)
10982 {
10983 case NEW_EXPR:
10984 TYPE_HAS_NEW_OPERATOR (class_type) = 1;
10985 break;
10986
10987 case DELETE_EXPR:
10988 TYPE_GETS_DELETE (class_type) |= 1;
10989 break;
10990
10991 case VEC_NEW_EXPR:
10992 TYPE_HAS_ARRAY_NEW_OPERATOR (class_type) = 1;
10993 break;
10994
10995 case VEC_DELETE_EXPR:
10996 TYPE_GETS_DELETE (class_type) |= 2;
10997 break;
10998
10999 default:
11000 break;
11001 }
11002
11003 /* [basic.std.dynamic.allocation]/1:
11004
11005 A program is ill-formed if an allocation function is declared
11006 in a namespace scope other than global scope or declared static
11007 in global scope.
11008
11009 The same also holds true for deallocation functions. */
11010 if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR
11011 || operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
11012 {
11013 if (DECL_NAMESPACE_SCOPE_P (decl))
11014 {
11015 if (CP_DECL_CONTEXT (decl) != global_namespace)
11016 {
11017 error ("%qD may not be declared within a namespace", decl);
11018 return false;
11019 }
11020 else if (!TREE_PUBLIC (decl))
11021 {
11022 error ("%qD may not be declared as static", decl);
11023 return false;
11024 }
11025 }
11026 }
11027
11028 if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR)
11029 {
11030 TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
11031 DECL_IS_OPERATOR_NEW (decl) = 1;
11032 }
11033 else if (operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
11034 TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
11035 else
11036 {
11037 /* An operator function must either be a non-static member function
11038 or have at least one parameter of a class, a reference to a class,
11039 an enumeration, or a reference to an enumeration. 13.4.0.6 */
11040 if (! methodp || DECL_STATIC_FUNCTION_P (decl))
11041 {
11042 if (operator_code == TYPE_EXPR
11043 || operator_code == CALL_EXPR
11044 || operator_code == COMPONENT_REF
11045 || operator_code == ARRAY_REF
11046 || operator_code == NOP_EXPR)
11047 {
11048 error ("%qD must be a nonstatic member function", decl);
11049 return false;
11050 }
11051 else
11052 {
11053 tree p;
11054
11055 if (DECL_STATIC_FUNCTION_P (decl))
11056 {
11057 error ("%qD must be either a non-static member "
11058 "function or a non-member function", decl);
11059 return false;
11060 }
11061
11062 for (p = argtypes; p && p != void_list_node; p = TREE_CHAIN (p))
11063 {
11064 tree arg = non_reference (TREE_VALUE (p));
11065 if (arg == error_mark_node)
11066 return false;
11067
11068 /* MAYBE_CLASS_TYPE_P, rather than CLASS_TYPE_P, is used
11069 because these checks are performed even on
11070 template functions. */
11071 if (MAYBE_CLASS_TYPE_P (arg)
11072 || TREE_CODE (arg) == ENUMERAL_TYPE)
11073 break;
11074 }
11075
11076 if (!p || p == void_list_node)
11077 {
11078 if (complain)
11079 error ("%qD must have an argument of class or "
11080 "enumerated type", decl);
11081 return false;
11082 }
11083 }
11084 }
11085
11086 /* There are no restrictions on the arguments to an overloaded
11087 "operator ()". */
11088 if (operator_code == CALL_EXPR)
11089 return true;
11090
11091 /* Warn about conversion operators that will never be used. */
11092 if (IDENTIFIER_TYPENAME_P (name)
11093 && ! DECL_TEMPLATE_INFO (decl)
11094 && warn_conversion
11095 /* Warn only declaring the function; there is no need to
11096 warn again about out-of-class definitions. */
11097 && class_type == current_class_type)
11098 {
11099 tree t = TREE_TYPE (name);
11100 int ref = (TREE_CODE (t) == REFERENCE_TYPE);
11101
11102 if (ref)
11103 t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
11104
11105 if (TREE_CODE (t) == VOID_TYPE)
11106 warning (OPT_Wconversion,
11107 ref
11108 ? G_("conversion to a reference to void "
11109 "will never use a type conversion operator")
11110 : G_("conversion to void "
11111 "will never use a type conversion operator"));
11112 else if (class_type)
11113 {
11114 if (t == class_type)
11115 warning (OPT_Wconversion,
11116 ref
11117 ? G_("conversion to a reference to the same type "
11118 "will never use a type conversion operator")
11119 : G_("conversion to the same type "
11120 "will never use a type conversion operator"));
11121 /* Don't force t to be complete here. */
11122 else if (MAYBE_CLASS_TYPE_P (t)
11123 && COMPLETE_TYPE_P (t)
11124 && DERIVED_FROM_P (t, class_type))
11125 warning (OPT_Wconversion,
11126 ref
11127 ? G_("conversion to a reference to a base class "
11128 "will never use a type conversion operator")
11129 : G_("conversion to a base class "
11130 "will never use a type conversion operator"));
11131 }
11132
11133 }
11134
11135 if (operator_code == COND_EXPR)
11136 {
11137 /* 13.4.0.3 */
11138 error ("ISO C++ prohibits overloading operator ?:");
11139 return false;
11140 }
11141 else if (ellipsis_p)
11142 {
11143 error ("%qD must not have variable number of arguments", decl);
11144 return false;
11145 }
11146 else if (ambi_op_p (operator_code))
11147 {
11148 if (arity == 1)
11149 /* We pick the one-argument operator codes by default, so
11150 we don't have to change anything. */
11151 ;
11152 else if (arity == 2)
11153 {
11154 /* If we thought this was a unary operator, we now know
11155 it to be a binary operator. */
11156 switch (operator_code)
11157 {
11158 case INDIRECT_REF:
11159 operator_code = MULT_EXPR;
11160 break;
11161
11162 case ADDR_EXPR:
11163 operator_code = BIT_AND_EXPR;
11164 break;
11165
11166 case UNARY_PLUS_EXPR:
11167 operator_code = PLUS_EXPR;
11168 break;
11169
11170 case NEGATE_EXPR:
11171 operator_code = MINUS_EXPR;
11172 break;
11173
11174 case PREINCREMENT_EXPR:
11175 operator_code = POSTINCREMENT_EXPR;
11176 break;
11177
11178 case PREDECREMENT_EXPR:
11179 operator_code = POSTDECREMENT_EXPR;
11180 break;
11181
11182 default:
11183 gcc_unreachable ();
11184 }
11185
11186 SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
11187
11188 if ((operator_code == POSTINCREMENT_EXPR
11189 || operator_code == POSTDECREMENT_EXPR)
11190 && ! processing_template_decl
11191 && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)), integer_type_node))
11192 {
11193 if (methodp)
11194 error ("postfix %qD must take %<int%> as its argument",
11195 decl);
11196 else
11197 error ("postfix %qD must take %<int%> as its second "
11198 "argument", decl);
11199 return false;
11200 }
11201 }
11202 else
11203 {
11204 if (methodp)
11205 error ("%qD must take either zero or one argument", decl);
11206 else
11207 error ("%qD must take either one or two arguments", decl);
11208 return false;
11209 }
11210
11211 /* More Effective C++ rule 6. */
11212 if (warn_ecpp
11213 && (operator_code == POSTINCREMENT_EXPR
11214 || operator_code == POSTDECREMENT_EXPR
11215 || operator_code == PREINCREMENT_EXPR
11216 || operator_code == PREDECREMENT_EXPR))
11217 {
11218 tree arg = TREE_VALUE (argtypes);
11219 tree ret = TREE_TYPE (TREE_TYPE (decl));
11220 if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
11221 arg = TREE_TYPE (arg);
11222 arg = TYPE_MAIN_VARIANT (arg);
11223 if (operator_code == PREINCREMENT_EXPR
11224 || operator_code == PREDECREMENT_EXPR)
11225 {
11226 if (TREE_CODE (ret) != REFERENCE_TYPE
11227 || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)),
11228 arg))
11229 warning (OPT_Weffc__, "prefix %qD should return %qT", decl,
11230 build_reference_type (arg));
11231 }
11232 else
11233 {
11234 if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
11235 warning (OPT_Weffc__, "postfix %qD should return %qT", decl, arg);
11236 }
11237 }
11238 }
11239 else if (unary_op_p (operator_code))
11240 {
11241 if (arity != 1)
11242 {
11243 if (methodp)
11244 error ("%qD must take %<void%>", decl);
11245 else
11246 error ("%qD must take exactly one argument", decl);
11247 return false;
11248 }
11249 }
11250 else /* if (binary_op_p (operator_code)) */
11251 {
11252 if (arity != 2)
11253 {
11254 if (methodp)
11255 error ("%qD must take exactly one argument", decl);
11256 else
11257 error ("%qD must take exactly two arguments", decl);
11258 return false;
11259 }
11260
11261 /* More Effective C++ rule 7. */
11262 if (warn_ecpp
11263 && (operator_code == TRUTH_ANDIF_EXPR
11264 || operator_code == TRUTH_ORIF_EXPR
11265 || operator_code == COMPOUND_EXPR))
11266 warning (OPT_Weffc__, "user-defined %qD always evaluates both arguments",
11267 decl);
11268 }
11269
11270 /* Effective C++ rule 23. */
11271 if (warn_ecpp
11272 && arity == 2
11273 && !DECL_ASSIGNMENT_OPERATOR_P (decl)
11274 && (operator_code == PLUS_EXPR
11275 || operator_code == MINUS_EXPR
11276 || operator_code == TRUNC_DIV_EXPR
11277 || operator_code == MULT_EXPR
11278 || operator_code == TRUNC_MOD_EXPR)
11279 && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
11280 warning (OPT_Weffc__, "%qD should return by value", decl);
11281
11282 /* [over.oper]/8 */
11283 for (; argtypes && argtypes != void_list_node;
11284 argtypes = TREE_CHAIN (argtypes))
11285 if (TREE_PURPOSE (argtypes))
11286 {
11287 TREE_PURPOSE (argtypes) = NULL_TREE;
11288 if (operator_code == POSTINCREMENT_EXPR
11289 || operator_code == POSTDECREMENT_EXPR)
11290 {
11291 pedwarn (input_location, OPT_pedantic, "%qD cannot have default arguments",
11292 decl);
11293 }
11294 else
11295 {
11296 error ("%qD cannot have default arguments", decl);
11297 return false;
11298 }
11299 }
11300 }
11301 return true;
11302 }
11303 \f
11304 /* Return a string giving the keyword associate with CODE. */
11305
11306 static const char *
11307 tag_name (enum tag_types code)
11308 {
11309 switch (code)
11310 {
11311 case record_type:
11312 return "struct";
11313 case class_type:
11314 return "class";
11315 case union_type:
11316 return "union";
11317 case enum_type:
11318 return "enum";
11319 case typename_type:
11320 return "typename";
11321 default:
11322 gcc_unreachable ();
11323 }
11324 }
11325
11326 /* Name lookup in an elaborated-type-specifier (after the keyword
11327 indicated by TAG_CODE) has found the TYPE_DECL DECL. If the
11328 elaborated-type-specifier is invalid, issue a diagnostic and return
11329 error_mark_node; otherwise, return the *_TYPE to which it referred.
11330 If ALLOW_TEMPLATE_P is true, TYPE may be a class template. */
11331
11332 tree
11333 check_elaborated_type_specifier (enum tag_types tag_code,
11334 tree decl,
11335 bool allow_template_p)
11336 {
11337 tree type;
11338
11339 /* In the case of:
11340
11341 struct S { struct S *p; };
11342
11343 name lookup will find the TYPE_DECL for the implicit "S::S"
11344 typedef. Adjust for that here. */
11345 if (DECL_SELF_REFERENCE_P (decl))
11346 decl = TYPE_NAME (TREE_TYPE (decl));
11347
11348 type = TREE_TYPE (decl);
11349
11350 /* Check TEMPLATE_TYPE_PARM first because DECL_IMPLICIT_TYPEDEF_P
11351 is false for this case as well. */
11352 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
11353 {
11354 error ("using template type parameter %qT after %qs",
11355 type, tag_name (tag_code));
11356 return error_mark_node;
11357 }
11358 /* [dcl.type.elab]
11359
11360 If the identifier resolves to a typedef-name or a template
11361 type-parameter, the elaborated-type-specifier is ill-formed.
11362
11363 In other words, the only legitimate declaration to use in the
11364 elaborated type specifier is the implicit typedef created when
11365 the type is declared. */
11366 else if (!DECL_IMPLICIT_TYPEDEF_P (decl)
11367 && !DECL_SELF_REFERENCE_P (decl)
11368 && tag_code != typename_type)
11369 {
11370 error ("using typedef-name %qD after %qs", decl, tag_name (tag_code));
11371 error ("%q+D has a previous declaration here", decl);
11372 return error_mark_node;
11373 }
11374 else if (TREE_CODE (type) != RECORD_TYPE
11375 && TREE_CODE (type) != UNION_TYPE
11376 && tag_code != enum_type
11377 && tag_code != typename_type)
11378 {
11379 error ("%qT referred to as %qs", type, tag_name (tag_code));
11380 error ("%q+T has a previous declaration here", type);
11381 return error_mark_node;
11382 }
11383 else if (TREE_CODE (type) != ENUMERAL_TYPE
11384 && tag_code == enum_type)
11385 {
11386 error ("%qT referred to as enum", type);
11387 error ("%q+T has a previous declaration here", type);
11388 return error_mark_node;
11389 }
11390 else if (!allow_template_p
11391 && TREE_CODE (type) == RECORD_TYPE
11392 && CLASSTYPE_IS_TEMPLATE (type))
11393 {
11394 /* If a class template appears as elaborated type specifier
11395 without a template header such as:
11396
11397 template <class T> class C {};
11398 void f(class C); // No template header here
11399
11400 then the required template argument is missing. */
11401 error ("template argument required for %<%s %T%>",
11402 tag_name (tag_code),
11403 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type)));
11404 return error_mark_node;
11405 }
11406
11407 return type;
11408 }
11409
11410 /* Lookup NAME in elaborate type specifier in scope according to
11411 SCOPE and issue diagnostics if necessary.
11412 Return *_TYPE node upon success, NULL_TREE when the NAME is not
11413 found, and ERROR_MARK_NODE for type error. */
11414
11415 static tree
11416 lookup_and_check_tag (enum tag_types tag_code, tree name,
11417 tag_scope scope, bool template_header_p)
11418 {
11419 tree t;
11420 tree decl;
11421 if (scope == ts_global)
11422 {
11423 /* First try ordinary name lookup, ignoring hidden class name
11424 injected via friend declaration. */
11425 decl = lookup_name_prefer_type (name, 2);
11426 /* If that fails, the name will be placed in the smallest
11427 non-class, non-function-prototype scope according to 3.3.1/5.
11428 We may already have a hidden name declared as friend in this
11429 scope. So lookup again but not ignoring hidden names.
11430 If we find one, that name will be made visible rather than
11431 creating a new tag. */
11432 if (!decl)
11433 decl = lookup_type_scope (name, ts_within_enclosing_non_class);
11434 }
11435 else
11436 decl = lookup_type_scope (name, scope);
11437
11438 if (decl && DECL_CLASS_TEMPLATE_P (decl))
11439 decl = DECL_TEMPLATE_RESULT (decl);
11440
11441 if (decl && TREE_CODE (decl) == TYPE_DECL)
11442 {
11443 /* Look for invalid nested type:
11444 class C {
11445 class C {};
11446 }; */
11447 if (scope == ts_current && DECL_SELF_REFERENCE_P (decl))
11448 {
11449 error ("%qD has the same name as the class in which it is "
11450 "declared",
11451 decl);
11452 return error_mark_node;
11453 }
11454
11455 /* Two cases we need to consider when deciding if a class
11456 template is allowed as an elaborated type specifier:
11457 1. It is a self reference to its own class.
11458 2. It comes with a template header.
11459
11460 For example:
11461
11462 template <class T> class C {
11463 class C *c1; // DECL_SELF_REFERENCE_P is true
11464 class D;
11465 };
11466 template <class U> class C; // template_header_p is true
11467 template <class T> class C<T>::D {
11468 class C *c2; // DECL_SELF_REFERENCE_P is true
11469 }; */
11470
11471 t = check_elaborated_type_specifier (tag_code,
11472 decl,
11473 template_header_p
11474 | DECL_SELF_REFERENCE_P (decl));
11475 return t;
11476 }
11477 else if (decl && TREE_CODE (decl) == TREE_LIST)
11478 {
11479 error ("reference to %qD is ambiguous", name);
11480 print_candidates (decl);
11481 return error_mark_node;
11482 }
11483 else
11484 return NULL_TREE;
11485 }
11486
11487 /* Get the struct, enum or union (TAG_CODE says which) with tag NAME.
11488 Define the tag as a forward-reference if it is not defined.
11489
11490 If a declaration is given, process it here, and report an error if
11491 multiple declarations are not identical.
11492
11493 SCOPE is TS_CURRENT when this is also a definition. Only look in
11494 the current frame for the name (since C++ allows new names in any
11495 scope.) It is TS_WITHIN_ENCLOSING_NON_CLASS if this is a friend
11496 declaration. Only look beginning from the current scope outward up
11497 till the nearest non-class scope. Otherwise it is TS_GLOBAL.
11498
11499 TEMPLATE_HEADER_P is true when this declaration is preceded by
11500 a set of template parameters. */
11501
11502 static tree
11503 xref_tag_1 (enum tag_types tag_code, tree name,
11504 tag_scope scope, bool template_header_p)
11505 {
11506 enum tree_code code;
11507 tree t;
11508 tree context = NULL_TREE;
11509
11510 gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
11511
11512 switch (tag_code)
11513 {
11514 case record_type:
11515 case class_type:
11516 code = RECORD_TYPE;
11517 break;
11518 case union_type:
11519 code = UNION_TYPE;
11520 break;
11521 case enum_type:
11522 code = ENUMERAL_TYPE;
11523 break;
11524 default:
11525 gcc_unreachable ();
11526 }
11527
11528 /* In case of anonymous name, xref_tag is only called to
11529 make type node and push name. Name lookup is not required. */
11530 if (ANON_AGGRNAME_P (name))
11531 t = NULL_TREE;
11532 else
11533 t = lookup_and_check_tag (tag_code, name,
11534 scope, template_header_p);
11535
11536 if (t == error_mark_node)
11537 return error_mark_node;
11538
11539 if (scope != ts_current && t && current_class_type
11540 && template_class_depth (current_class_type)
11541 && template_header_p)
11542 {
11543 /* Since SCOPE is not TS_CURRENT, we are not looking at a
11544 definition of this tag. Since, in addition, we are currently
11545 processing a (member) template declaration of a template
11546 class, we must be very careful; consider:
11547
11548 template <class X>
11549 struct S1
11550
11551 template <class U>
11552 struct S2
11553 { template <class V>
11554 friend struct S1; };
11555
11556 Here, the S2::S1 declaration should not be confused with the
11557 outer declaration. In particular, the inner version should
11558 have a template parameter of level 2, not level 1. This
11559 would be particularly important if the member declaration
11560 were instead:
11561
11562 template <class V = U> friend struct S1;
11563
11564 say, when we should tsubst into `U' when instantiating
11565 S2. On the other hand, when presented with:
11566
11567 template <class T>
11568 struct S1 {
11569 template <class U>
11570 struct S2 {};
11571 template <class U>
11572 friend struct S2;
11573 };
11574
11575 we must find the inner binding eventually. We
11576 accomplish this by making sure that the new type we
11577 create to represent this declaration has the right
11578 TYPE_CONTEXT. */
11579 context = TYPE_CONTEXT (t);
11580 t = NULL_TREE;
11581 }
11582
11583 if (! t)
11584 {
11585 /* If no such tag is yet defined, create a forward-reference node
11586 and record it as the "definition".
11587 When a real declaration of this type is found,
11588 the forward-reference will be altered into a real type. */
11589 if (code == ENUMERAL_TYPE)
11590 {
11591 error ("use of enum %q#D without previous declaration", name);
11592 return error_mark_node;
11593 }
11594 else
11595 {
11596 t = make_class_type (code);
11597 TYPE_CONTEXT (t) = context;
11598 t = pushtag (name, t, scope);
11599 }
11600 }
11601 else
11602 {
11603 if (template_header_p && MAYBE_CLASS_TYPE_P (t))
11604 {
11605 if (!redeclare_class_template (t, current_template_parms))
11606 return error_mark_node;
11607 }
11608 else if (!processing_template_decl
11609 && CLASS_TYPE_P (t)
11610 && CLASSTYPE_IS_TEMPLATE (t))
11611 {
11612 error ("redeclaration of %qT as a non-template", t);
11613 error ("previous declaration %q+D", t);
11614 return error_mark_node;
11615 }
11616
11617 /* Make injected friend class visible. */
11618 if (scope != ts_within_enclosing_non_class
11619 && hidden_name_p (TYPE_NAME (t)))
11620 {
11621 DECL_ANTICIPATED (TYPE_NAME (t)) = 0;
11622 DECL_FRIEND_P (TYPE_NAME (t)) = 0;
11623
11624 if (TYPE_TEMPLATE_INFO (t))
11625 {
11626 DECL_ANTICIPATED (TYPE_TI_TEMPLATE (t)) = 0;
11627 DECL_FRIEND_P (TYPE_TI_TEMPLATE (t)) = 0;
11628 }
11629 }
11630 }
11631
11632 return t;
11633 }
11634
11635 /* Wrapper for xref_tag_1. */
11636
11637 tree
11638 xref_tag (enum tag_types tag_code, tree name,
11639 tag_scope scope, bool template_header_p)
11640 {
11641 tree ret;
11642 bool subtime;
11643 subtime = timevar_cond_start (TV_NAME_LOOKUP);
11644 ret = xref_tag_1 (tag_code, name, scope, template_header_p);
11645 timevar_cond_stop (TV_NAME_LOOKUP, subtime);
11646 return ret;
11647 }
11648
11649
11650 tree
11651 xref_tag_from_type (tree old, tree id, tag_scope scope)
11652 {
11653 enum tag_types tag_kind;
11654
11655 if (TREE_CODE (old) == RECORD_TYPE)
11656 tag_kind = (CLASSTYPE_DECLARED_CLASS (old) ? class_type : record_type);
11657 else
11658 tag_kind = union_type;
11659
11660 if (id == NULL_TREE)
11661 id = TYPE_IDENTIFIER (old);
11662
11663 return xref_tag (tag_kind, id, scope, false);
11664 }
11665
11666 /* Create the binfo hierarchy for REF with (possibly NULL) base list
11667 BASE_LIST. For each element on BASE_LIST the TREE_PURPOSE is an
11668 access_* node, and the TREE_VALUE is the type of the base-class.
11669 Non-NULL TREE_TYPE indicates virtual inheritance.
11670
11671 Returns true if the binfo hierarchy was successfully created,
11672 false if an error was detected. */
11673
11674 bool
11675 xref_basetypes (tree ref, tree base_list)
11676 {
11677 tree *basep;
11678 tree binfo, base_binfo;
11679 unsigned max_vbases = 0; /* Maximum direct & indirect virtual bases. */
11680 unsigned max_bases = 0; /* Maximum direct bases. */
11681 int i;
11682 tree default_access;
11683 tree igo_prev; /* Track Inheritance Graph Order. */
11684
11685 if (ref == error_mark_node)
11686 return false;
11687
11688 /* The base of a derived class is private by default, all others are
11689 public. */
11690 default_access = (TREE_CODE (ref) == RECORD_TYPE
11691 && CLASSTYPE_DECLARED_CLASS (ref)
11692 ? access_private_node : access_public_node);
11693
11694 /* First, make sure that any templates in base-classes are
11695 instantiated. This ensures that if we call ourselves recursively
11696 we do not get confused about which classes are marked and which
11697 are not. */
11698 basep = &base_list;
11699 while (*basep)
11700 {
11701 tree basetype = TREE_VALUE (*basep);
11702
11703 if (!(processing_template_decl && uses_template_parms (basetype))
11704 && !complete_type_or_else (basetype, NULL))
11705 /* An incomplete type. Remove it from the list. */
11706 *basep = TREE_CHAIN (*basep);
11707 else
11708 {
11709 max_bases++;
11710 if (TREE_TYPE (*basep))
11711 max_vbases++;
11712 if (CLASS_TYPE_P (basetype))
11713 max_vbases += VEC_length (tree, CLASSTYPE_VBASECLASSES (basetype));
11714 basep = &TREE_CHAIN (*basep);
11715 }
11716 }
11717
11718 TYPE_MARKED_P (ref) = 1;
11719
11720 /* The binfo slot should be empty, unless this is an (ill-formed)
11721 redefinition. */
11722 if (TYPE_BINFO (ref) && !TYPE_SIZE (ref))
11723 {
11724 error ("redefinition of %q#T", ref);
11725 return false;
11726 }
11727
11728 gcc_assert (TYPE_MAIN_VARIANT (ref) == ref);
11729
11730 binfo = make_tree_binfo (max_bases);
11731
11732 TYPE_BINFO (ref) = binfo;
11733 BINFO_OFFSET (binfo) = size_zero_node;
11734 BINFO_TYPE (binfo) = ref;
11735
11736 /* Apply base-class info set up to the variants of this type. */
11737 fixup_type_variants (ref);
11738
11739 if (max_bases)
11740 {
11741 BINFO_BASE_ACCESSES (binfo) = VEC_alloc (tree, gc, max_bases);
11742 /* An aggregate cannot have baseclasses. */
11743 CLASSTYPE_NON_AGGREGATE (ref) = 1;
11744
11745 if (TREE_CODE (ref) == UNION_TYPE)
11746 {
11747 error ("derived union %qT invalid", ref);
11748 return false;
11749 }
11750 }
11751
11752 if (max_bases > 1)
11753 {
11754 if (TYPE_FOR_JAVA (ref))
11755 {
11756 error ("Java class %qT cannot have multiple bases", ref);
11757 return false;
11758 }
11759 }
11760
11761 if (max_vbases)
11762 {
11763 CLASSTYPE_VBASECLASSES (ref) = VEC_alloc (tree, gc, max_vbases);
11764
11765 if (TYPE_FOR_JAVA (ref))
11766 {
11767 error ("Java class %qT cannot have virtual bases", ref);
11768 return false;
11769 }
11770 }
11771
11772 for (igo_prev = binfo; base_list; base_list = TREE_CHAIN (base_list))
11773 {
11774 tree access = TREE_PURPOSE (base_list);
11775 int via_virtual = TREE_TYPE (base_list) != NULL_TREE;
11776 tree basetype = TREE_VALUE (base_list);
11777
11778 if (access == access_default_node)
11779 access = default_access;
11780
11781 if (PACK_EXPANSION_P (basetype))
11782 basetype = PACK_EXPANSION_PATTERN (basetype);
11783 if (TREE_CODE (basetype) == TYPE_DECL)
11784 basetype = TREE_TYPE (basetype);
11785 if (!MAYBE_CLASS_TYPE_P (basetype) || TREE_CODE (basetype) == UNION_TYPE)
11786 {
11787 error ("base type %qT fails to be a struct or class type",
11788 basetype);
11789 return false;
11790 }
11791
11792 if (TYPE_FOR_JAVA (basetype) && (current_lang_depth () == 0))
11793 TYPE_FOR_JAVA (ref) = 1;
11794
11795 base_binfo = NULL_TREE;
11796 if (CLASS_TYPE_P (basetype) && !dependent_type_p (basetype))
11797 {
11798 base_binfo = TYPE_BINFO (basetype);
11799 /* The original basetype could have been a typedef'd type. */
11800 basetype = BINFO_TYPE (base_binfo);
11801
11802 /* Inherit flags from the base. */
11803 TYPE_HAS_NEW_OPERATOR (ref)
11804 |= TYPE_HAS_NEW_OPERATOR (basetype);
11805 TYPE_HAS_ARRAY_NEW_OPERATOR (ref)
11806 |= TYPE_HAS_ARRAY_NEW_OPERATOR (basetype);
11807 TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
11808 TYPE_HAS_CONVERSION (ref) |= TYPE_HAS_CONVERSION (basetype);
11809 CLASSTYPE_DIAMOND_SHAPED_P (ref)
11810 |= CLASSTYPE_DIAMOND_SHAPED_P (basetype);
11811 CLASSTYPE_REPEATED_BASE_P (ref)
11812 |= CLASSTYPE_REPEATED_BASE_P (basetype);
11813 }
11814
11815 /* We must do this test after we've seen through a typedef
11816 type. */
11817 if (TYPE_MARKED_P (basetype))
11818 {
11819 if (basetype == ref)
11820 error ("recursive type %qT undefined", basetype);
11821 else
11822 error ("duplicate base type %qT invalid", basetype);
11823 return false;
11824 }
11825
11826 if (PACK_EXPANSION_P (TREE_VALUE (base_list)))
11827 /* Regenerate the pack expansion for the bases. */
11828 basetype = make_pack_expansion (basetype);
11829
11830 TYPE_MARKED_P (basetype) = 1;
11831
11832 base_binfo = copy_binfo (base_binfo, basetype, ref,
11833 &igo_prev, via_virtual);
11834 if (!BINFO_INHERITANCE_CHAIN (base_binfo))
11835 BINFO_INHERITANCE_CHAIN (base_binfo) = binfo;
11836
11837 BINFO_BASE_APPEND (binfo, base_binfo);
11838 BINFO_BASE_ACCESS_APPEND (binfo, access);
11839 }
11840
11841 if (VEC_space (tree, CLASSTYPE_VBASECLASSES (ref), 1))
11842 /* If we have space in the vbase vector, we must have shared at
11843 least one of them, and are therefore diamond shaped. */
11844 CLASSTYPE_DIAMOND_SHAPED_P (ref) = 1;
11845
11846 /* Unmark all the types. */
11847 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
11848 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
11849 TYPE_MARKED_P (ref) = 0;
11850
11851 /* Now see if we have a repeated base type. */
11852 if (!CLASSTYPE_REPEATED_BASE_P (ref))
11853 {
11854 for (base_binfo = binfo; base_binfo;
11855 base_binfo = TREE_CHAIN (base_binfo))
11856 {
11857 if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
11858 {
11859 CLASSTYPE_REPEATED_BASE_P (ref) = 1;
11860 break;
11861 }
11862 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 1;
11863 }
11864 for (base_binfo = binfo; base_binfo;
11865 base_binfo = TREE_CHAIN (base_binfo))
11866 if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
11867 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
11868 else
11869 break;
11870 }
11871
11872 return true;
11873 }
11874
11875 \f
11876 /* Copies the enum-related properties from type SRC to type DST.
11877 Used with the underlying type of an enum and the enum itself. */
11878 static void
11879 copy_type_enum (tree dst, tree src)
11880 {
11881 TYPE_MIN_VALUE (dst) = TYPE_MIN_VALUE (src);
11882 TYPE_MAX_VALUE (dst) = TYPE_MAX_VALUE (src);
11883 TYPE_SIZE (dst) = TYPE_SIZE (src);
11884 TYPE_SIZE_UNIT (dst) = TYPE_SIZE_UNIT (src);
11885 SET_TYPE_MODE (dst, TYPE_MODE (src));
11886 TYPE_PRECISION (dst) = TYPE_PRECISION (src);
11887 TYPE_ALIGN (dst) = TYPE_ALIGN (src);
11888 TYPE_USER_ALIGN (dst) = TYPE_USER_ALIGN (src);
11889 TYPE_UNSIGNED (dst) = TYPE_UNSIGNED (src);
11890 }
11891
11892 /* Begin compiling the definition of an enumeration type.
11893 NAME is its name,
11894
11895 if ENUMTYPE is not NULL_TREE then the type has alredy been found.
11896
11897 UNDERLYING_TYPE is the type that will be used as the storage for
11898 the enumeration type. This should be NULL_TREE if no storage type
11899 was specified.
11900
11901 SCOPED_ENUM_P is true if this is a scoped enumeration type.
11902
11903 if IS_NEW is not NULL, gets TRUE iff a new type is created.
11904
11905 Returns the type object, as yet incomplete.
11906 Also records info about it so that build_enumerator
11907 may be used to declare the individual values as they are read. */
11908
11909 tree
11910 start_enum (tree name, tree enumtype, tree underlying_type,
11911 bool scoped_enum_p, bool *is_new)
11912 {
11913 tree prevtype = NULL_TREE;
11914 gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
11915
11916 if (is_new)
11917 *is_new = false;
11918 /* [C++0x dcl.enum]p5:
11919
11920 If not explicitly specified, the underlying type of a scoped
11921 enumeration type is int. */
11922 if (!underlying_type && scoped_enum_p)
11923 underlying_type = integer_type_node;
11924
11925 if (underlying_type)
11926 underlying_type = cv_unqualified (underlying_type);
11927
11928 /* If this is the real definition for a previous forward reference,
11929 fill in the contents in the same object that used to be the
11930 forward reference. */
11931 if (!enumtype)
11932 enumtype = lookup_and_check_tag (enum_type, name,
11933 /*tag_scope=*/ts_current,
11934 /*template_header_p=*/false);
11935
11936 /* In case of a template_decl, the only check that should be deferred
11937 to instantiation time is the comparison of underlying types. */
11938 if (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE)
11939 {
11940 if (scoped_enum_p != SCOPED_ENUM_P (enumtype))
11941 {
11942 error_at (input_location, "scoped/unscoped mismatch "
11943 "in enum %q#T", enumtype);
11944 error_at (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
11945 "previous definition here");
11946 enumtype = error_mark_node;
11947 }
11948 else if (ENUM_FIXED_UNDERLYING_TYPE_P (enumtype) != !! underlying_type)
11949 {
11950 error_at (input_location, "underlying type mismatch "
11951 "in enum %q#T", enumtype);
11952 error_at (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
11953 "previous definition here");
11954 enumtype = error_mark_node;
11955 }
11956 else if (underlying_type && ENUM_UNDERLYING_TYPE (enumtype)
11957 && !dependent_type_p (underlying_type)
11958 && !dependent_type_p (ENUM_UNDERLYING_TYPE (enumtype))
11959 && !same_type_p (underlying_type,
11960 ENUM_UNDERLYING_TYPE (enumtype)))
11961 {
11962 error_at (input_location, "different underlying type "
11963 "in enum %q#T", enumtype);
11964 error_at (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
11965 "previous definition here");
11966 underlying_type = NULL_TREE;
11967 }
11968 }
11969
11970 if (!enumtype || TREE_CODE (enumtype) != ENUMERAL_TYPE
11971 || processing_template_decl)
11972 {
11973 /* In case of error, make a dummy enum to allow parsing to
11974 continue. */
11975 if (enumtype == error_mark_node)
11976 {
11977 name = make_anon_name ();
11978 enumtype = NULL_TREE;
11979 }
11980
11981 /* enumtype may be an ENUMERAL_TYPE if this is a redefinition
11982 of an opaque enum, or an opaque enum of an already defined
11983 enumeration (C++0x only).
11984 In any other case, it'll be NULL_TREE. */
11985 if (!enumtype)
11986 {
11987 if (is_new)
11988 *is_new = true;
11989 }
11990 prevtype = enumtype;
11991
11992 /* Do not push the decl more than once, unless we need to
11993 compare underlying types at instantiation time */
11994 if (!enumtype
11995 || (underlying_type
11996 && dependent_type_p (underlying_type))
11997 || (ENUM_UNDERLYING_TYPE (enumtype)
11998 && dependent_type_p (ENUM_UNDERLYING_TYPE (enumtype))))
11999 {
12000 enumtype = cxx_make_type (ENUMERAL_TYPE);
12001 enumtype = pushtag (name, enumtype, /*tag_scope=*/ts_current);
12002 }
12003 else
12004 enumtype = xref_tag (enum_type, name, /*tag_scope=*/ts_current,
12005 false);
12006
12007 if (enumtype == error_mark_node)
12008 return error_mark_node;
12009
12010 /* The enum is considered opaque until the opening '{' of the
12011 enumerator list. */
12012 SET_OPAQUE_ENUM_P (enumtype, true);
12013 ENUM_FIXED_UNDERLYING_TYPE_P (enumtype) = !! underlying_type;
12014 }
12015
12016 SET_SCOPED_ENUM_P (enumtype, scoped_enum_p);
12017
12018 if (underlying_type)
12019 {
12020 if (CP_INTEGRAL_TYPE_P (underlying_type))
12021 {
12022 copy_type_enum (enumtype, underlying_type);
12023 ENUM_UNDERLYING_TYPE (enumtype) = underlying_type;
12024 }
12025 else if (dependent_type_p (underlying_type))
12026 ENUM_UNDERLYING_TYPE (enumtype) = underlying_type;
12027 else
12028 error ("underlying type %<%T%> of %<%T%> must be an integral type",
12029 underlying_type, enumtype);
12030 }
12031
12032 /* If into a template class, the returned enum is always the first
12033 declaration (opaque or not) seen. This way all the references to
12034 this type will be to the same declaration. The following ones are used
12035 only to check for definition errors. */
12036 if (prevtype && processing_template_decl)
12037 return prevtype;
12038 else
12039 return enumtype;
12040 }
12041
12042 /* After processing and defining all the values of an enumeration type,
12043 install their decls in the enumeration type.
12044 ENUMTYPE is the type object. */
12045
12046 void
12047 finish_enum_value_list (tree enumtype)
12048 {
12049 tree values;
12050 tree underlying_type;
12051 tree decl;
12052 tree value;
12053 tree minnode, maxnode;
12054 tree t;
12055
12056 bool fixed_underlying_type_p
12057 = ENUM_UNDERLYING_TYPE (enumtype) != NULL_TREE;
12058
12059 /* We built up the VALUES in reverse order. */
12060 TYPE_VALUES (enumtype) = nreverse (TYPE_VALUES (enumtype));
12061
12062 /* For an enum defined in a template, just set the type of the values;
12063 all further processing is postponed until the template is
12064 instantiated. We need to set the type so that tsubst of a CONST_DECL
12065 works. */
12066 if (processing_template_decl)
12067 {
12068 for (values = TYPE_VALUES (enumtype);
12069 values;
12070 values = TREE_CHAIN (values))
12071 TREE_TYPE (TREE_VALUE (values)) = enumtype;
12072 return;
12073 }
12074
12075 /* Determine the minimum and maximum values of the enumerators. */
12076 if (TYPE_VALUES (enumtype))
12077 {
12078 minnode = maxnode = NULL_TREE;
12079
12080 for (values = TYPE_VALUES (enumtype);
12081 values;
12082 values = TREE_CHAIN (values))
12083 {
12084 decl = TREE_VALUE (values);
12085
12086 /* [dcl.enum]: Following the closing brace of an enum-specifier,
12087 each enumerator has the type of its enumeration. Prior to the
12088 closing brace, the type of each enumerator is the type of its
12089 initializing value. */
12090 TREE_TYPE (decl) = enumtype;
12091
12092 /* Update the minimum and maximum values, if appropriate. */
12093 value = DECL_INITIAL (decl);
12094 if (value == error_mark_node)
12095 value = integer_zero_node;
12096 /* Figure out what the minimum and maximum values of the
12097 enumerators are. */
12098 if (!minnode)
12099 minnode = maxnode = value;
12100 else if (tree_int_cst_lt (maxnode, value))
12101 maxnode = value;
12102 else if (tree_int_cst_lt (value, minnode))
12103 minnode = value;
12104 }
12105 }
12106 else
12107 /* [dcl.enum]
12108
12109 If the enumerator-list is empty, the underlying type is as if
12110 the enumeration had a single enumerator with value 0. */
12111 minnode = maxnode = integer_zero_node;
12112
12113 if (!fixed_underlying_type_p)
12114 {
12115 /* Compute the number of bits require to represent all values of the
12116 enumeration. We must do this before the type of MINNODE and
12117 MAXNODE are transformed, since tree_int_cst_min_precision relies
12118 on the TREE_TYPE of the value it is passed. */
12119 bool unsignedp = tree_int_cst_sgn (minnode) >= 0;
12120 int lowprec = tree_int_cst_min_precision (minnode, unsignedp);
12121 int highprec = tree_int_cst_min_precision (maxnode, unsignedp);
12122 int precision = MAX (lowprec, highprec);
12123 unsigned int itk;
12124 bool use_short_enum;
12125
12126 /* Determine the underlying type of the enumeration.
12127
12128 [dcl.enum]
12129
12130 The underlying type of an enumeration is an integral type that
12131 can represent all the enumerator values defined in the
12132 enumeration. It is implementation-defined which integral type is
12133 used as the underlying type for an enumeration except that the
12134 underlying type shall not be larger than int unless the value of
12135 an enumerator cannot fit in an int or unsigned int.
12136
12137 We use "int" or an "unsigned int" as the underlying type, even if
12138 a smaller integral type would work, unless the user has
12139 explicitly requested that we use the smallest possible type. The
12140 user can request that for all enumerations with a command line
12141 flag, or for just one enumeration with an attribute. */
12142
12143 use_short_enum = flag_short_enums
12144 || lookup_attribute ("packed", TYPE_ATTRIBUTES (enumtype));
12145
12146 for (itk = (use_short_enum ? itk_char : itk_int);
12147 itk != itk_none;
12148 itk++)
12149 {
12150 underlying_type = integer_types[itk];
12151 if (underlying_type != NULL_TREE
12152 && TYPE_PRECISION (underlying_type) >= precision
12153 && TYPE_UNSIGNED (underlying_type) == unsignedp)
12154 break;
12155 }
12156 if (itk == itk_none)
12157 {
12158 /* DR 377
12159
12160 IF no integral type can represent all the enumerator values, the
12161 enumeration is ill-formed. */
12162 error ("no integral type can represent all of the enumerator values "
12163 "for %qT", enumtype);
12164 precision = TYPE_PRECISION (long_long_integer_type_node);
12165 underlying_type = integer_types[itk_unsigned_long_long];
12166 }
12167
12168 /* [dcl.enum]
12169
12170 The value of sizeof() applied to an enumeration type, an object
12171 of an enumeration type, or an enumerator, is the value of sizeof()
12172 applied to the underlying type. */
12173 copy_type_enum (enumtype, underlying_type);
12174
12175 /* Compute the minimum and maximum values for the type.
12176
12177 [dcl.enum]
12178
12179 For an enumeration where emin is the smallest enumerator and emax
12180 is the largest, the values of the enumeration are the values of the
12181 underlying type in the range bmin to bmax, where bmin and bmax are,
12182 respectively, the smallest and largest values of the smallest bit-
12183 field that can store emin and emax. */
12184
12185 /* The middle-end currently assumes that types with TYPE_PRECISION
12186 narrower than their underlying type are suitably zero or sign
12187 extended to fill their mode. Similarly, it assumes that the front
12188 end assures that a value of a particular type must be within
12189 TYPE_MIN_VALUE and TYPE_MAX_VALUE.
12190
12191 We used to set these fields based on bmin and bmax, but that led
12192 to invalid assumptions like optimizing away bounds checking. So
12193 now we just set the TYPE_PRECISION, TYPE_MIN_VALUE, and
12194 TYPE_MAX_VALUE to the values for the mode above and only restrict
12195 the ENUM_UNDERLYING_TYPE for the benefit of diagnostics. */
12196 ENUM_UNDERLYING_TYPE (enumtype)
12197 = build_distinct_type_copy (underlying_type);
12198 TYPE_PRECISION (ENUM_UNDERLYING_TYPE (enumtype)) = precision;
12199 set_min_and_max_values_for_integral_type
12200 (ENUM_UNDERLYING_TYPE (enumtype), precision, unsignedp);
12201
12202 /* If -fstrict-enums, still constrain TYPE_MIN/MAX_VALUE. */
12203 if (flag_strict_enums)
12204 set_min_and_max_values_for_integral_type (enumtype, precision,
12205 unsignedp);
12206 }
12207 else
12208 underlying_type = ENUM_UNDERLYING_TYPE (enumtype);
12209
12210 /* Convert each of the enumerators to the type of the underlying
12211 type of the enumeration. */
12212 for (values = TYPE_VALUES (enumtype); values; values = TREE_CHAIN (values))
12213 {
12214 location_t saved_location;
12215
12216 decl = TREE_VALUE (values);
12217 saved_location = input_location;
12218 input_location = DECL_SOURCE_LOCATION (decl);
12219 if (fixed_underlying_type_p)
12220 /* If the enumeration type has a fixed underlying type, we
12221 already checked all of the enumerator values. */
12222 value = DECL_INITIAL (decl);
12223 else
12224 value = perform_implicit_conversion (underlying_type,
12225 DECL_INITIAL (decl),
12226 tf_warning_or_error);
12227 input_location = saved_location;
12228
12229 /* Do not clobber shared ints. */
12230 value = copy_node (value);
12231
12232 TREE_TYPE (value) = enumtype;
12233 DECL_INITIAL (decl) = value;
12234 }
12235
12236 /* Fix up all variant types of this enum type. */
12237 for (t = TYPE_MAIN_VARIANT (enumtype); t; t = TYPE_NEXT_VARIANT (t))
12238 TYPE_VALUES (t) = TYPE_VALUES (enumtype);
12239
12240 /* Finish debugging output for this type. */
12241 rest_of_type_compilation (enumtype, namespace_bindings_p ());
12242 }
12243
12244 /* Finishes the enum type. This is called only the first time an
12245 enumeration is seen, be it opaque or odinary.
12246 ENUMTYPE is the type object. */
12247
12248 void
12249 finish_enum (tree enumtype)
12250 {
12251 if (processing_template_decl)
12252 {
12253 if (at_function_scope_p ())
12254 add_stmt (build_min (TAG_DEFN, enumtype));
12255 return;
12256 }
12257
12258 /* Here there should not be any variants of this type. */
12259 gcc_assert (enumtype == TYPE_MAIN_VARIANT (enumtype)
12260 && !TYPE_NEXT_VARIANT (enumtype));
12261 }
12262
12263 /* Build and install a CONST_DECL for an enumeration constant of the
12264 enumeration type ENUMTYPE whose NAME and VALUE (if any) are provided.
12265 LOC is the location of NAME.
12266 Assignment of sequential values by default is handled here. */
12267
12268 void
12269 build_enumerator (tree name, tree value, tree enumtype, location_t loc)
12270 {
12271 tree decl;
12272 tree context;
12273 tree type;
12274
12275 /* If the VALUE was erroneous, pretend it wasn't there; that will
12276 result in the enum being assigned the next value in sequence. */
12277 if (value == error_mark_node)
12278 value = NULL_TREE;
12279
12280 /* Remove no-op casts from the value. */
12281 if (value)
12282 STRIP_TYPE_NOPS (value);
12283
12284 if (! processing_template_decl)
12285 {
12286 /* Validate and default VALUE. */
12287 if (value != NULL_TREE)
12288 {
12289 value = cxx_constant_value (value);
12290
12291 if (TREE_CODE (value) == INTEGER_CST
12292 && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (value)))
12293 {
12294 value = perform_integral_promotions (value);
12295 }
12296 else
12297 {
12298 error ("enumerator value for %qD is not an integer constant", name);
12299 value = NULL_TREE;
12300 }
12301 }
12302
12303 /* Default based on previous value. */
12304 if (value == NULL_TREE)
12305 {
12306 if (TYPE_VALUES (enumtype))
12307 {
12308 HOST_WIDE_INT hi;
12309 unsigned HOST_WIDE_INT lo;
12310 tree prev_value;
12311 bool overflowed;
12312
12313 /* C++03 7.2/4: If no initializer is specified for the first
12314 enumerator, the type is an unspecified integral
12315 type. Otherwise the type is the same as the type of the
12316 initializing value of the preceding enumerator unless the
12317 incremented value is not representable in that type, in
12318 which case the type is an unspecified integral type
12319 sufficient to contain the incremented value. */
12320 prev_value = DECL_INITIAL (TREE_VALUE (TYPE_VALUES (enumtype)));
12321 if (error_operand_p (prev_value))
12322 value = error_mark_node;
12323 else
12324 {
12325 overflowed = add_double (TREE_INT_CST_LOW (prev_value),
12326 TREE_INT_CST_HIGH (prev_value),
12327 1, 0, &lo, &hi);
12328 if (!overflowed)
12329 {
12330 double_int di;
12331 tree type = TREE_TYPE (prev_value);
12332 bool pos = (TYPE_UNSIGNED (type) || hi >= 0);
12333 di.low = lo; di.high = hi;
12334 if (!double_int_fits_to_tree_p (type, di))
12335 {
12336 unsigned int itk;
12337 for (itk = itk_int; itk != itk_none; itk++)
12338 {
12339 type = integer_types[itk];
12340 if (type != NULL_TREE
12341 && (pos || !TYPE_UNSIGNED (type))
12342 && double_int_fits_to_tree_p (type, di))
12343 break;
12344 }
12345 if (type && cxx_dialect < cxx0x
12346 && itk > itk_unsigned_long)
12347 pedwarn (input_location, OPT_Wlong_long, pos ? "\
12348 incremented enumerator value is too large for %<unsigned long%>" : "\
12349 incremented enumerator value is too large for %<long%>");
12350 }
12351 if (type == NULL_TREE)
12352 overflowed = true;
12353 else
12354 value = double_int_to_tree (type, di);
12355 }
12356
12357 if (overflowed)
12358 {
12359 error ("overflow in enumeration values at %qD", name);
12360 value = error_mark_node;
12361 }
12362 }
12363 }
12364 else
12365 value = integer_zero_node;
12366 }
12367
12368 /* Remove no-op casts from the value. */
12369 STRIP_TYPE_NOPS (value);
12370
12371 /* If the underlying type of the enum is fixed, check whether
12372 the enumerator values fits in the underlying type. If it
12373 does not fit, the program is ill-formed [C++0x dcl.enum]. */
12374 if (ENUM_UNDERLYING_TYPE (enumtype)
12375 && value
12376 && TREE_CODE (value) == INTEGER_CST
12377 && !int_fits_type_p (value, ENUM_UNDERLYING_TYPE (enumtype)))
12378 {
12379 error ("enumerator value %E is too large for underlying type %<%T%>",
12380 value, ENUM_UNDERLYING_TYPE (enumtype));
12381
12382 /* Silently convert the value so that we can continue. */
12383 value = perform_implicit_conversion (ENUM_UNDERLYING_TYPE (enumtype),
12384 value, tf_none);
12385 }
12386 }
12387
12388 /* C++ associates enums with global, function, or class declarations. */
12389 context = current_scope ();
12390
12391 /* Build the actual enumeration constant. Note that the enumeration
12392 constants have the underlying type of the enum (if it is fixed)
12393 or the type of their initializer (if the underlying type of the
12394 enum is not fixed):
12395
12396 [ C++0x dcl.enum ]
12397
12398 If the underlying type is fixed, the type of each enumerator
12399 prior to the closing brace is the underlying type; if the
12400 initializing value of an enumerator cannot be represented by
12401 the underlying type, the program is ill-formed. If the
12402 underlying type is not fixed, the type of each enumerator is
12403 the type of its initializing value.
12404
12405 If the underlying type is not fixed, it will be computed by
12406 finish_enum and we will reset the type of this enumerator. Of
12407 course, if we're processing a template, there may be no value. */
12408 type = value ? TREE_TYPE (value) : NULL_TREE;
12409
12410 if (context && context == current_class_type)
12411 /* This enum declaration is local to the class. We need the full
12412 lang_decl so that we can record DECL_CLASS_CONTEXT, for example. */
12413 decl = build_lang_decl_loc (loc, CONST_DECL, name, type);
12414 else
12415 /* It's a global enum, or it's local to a function. (Note local to
12416 a function could mean local to a class method. */
12417 decl = build_decl (loc, CONST_DECL, name, type);
12418
12419 DECL_CONTEXT (decl) = FROB_CONTEXT (context);
12420 TREE_CONSTANT (decl) = 1;
12421 TREE_READONLY (decl) = 1;
12422 DECL_INITIAL (decl) = value;
12423
12424 if (context && context == current_class_type && !SCOPED_ENUM_P (enumtype))
12425 /* In something like `struct S { enum E { i = 7 }; };' we put `i'
12426 on the TYPE_FIELDS list for `S'. (That's so that you can say
12427 things like `S::i' later.) */
12428 finish_member_declaration (decl);
12429 else
12430 pushdecl (decl);
12431
12432 /* Add this enumeration constant to the list for this type. */
12433 TYPE_VALUES (enumtype) = tree_cons (name, decl, TYPE_VALUES (enumtype));
12434 }
12435
12436 /* Look for an enumerator with the given NAME within the enumeration
12437 type ENUMTYPE. This routine is used primarily for qualified name
12438 lookup into an enumerator in C++0x, e.g.,
12439
12440 enum class Color { Red, Green, Blue };
12441
12442 Color color = Color::Red;
12443
12444 Returns the value corresponding to the enumerator, or
12445 NULL_TREE if no such enumerator was found. */
12446 tree
12447 lookup_enumerator (tree enumtype, tree name)
12448 {
12449 tree e;
12450 gcc_assert (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE);
12451
12452 e = purpose_member (name, TYPE_VALUES (enumtype));
12453 return e? TREE_VALUE (e) : NULL_TREE;
12454 }
12455
12456 \f
12457 /* We're defining DECL. Make sure that its type is OK. */
12458
12459 static void
12460 check_function_type (tree decl, tree current_function_parms)
12461 {
12462 tree fntype = TREE_TYPE (decl);
12463 tree return_type = complete_type (TREE_TYPE (fntype));
12464
12465 /* In a function definition, arg types must be complete. */
12466 require_complete_types_for_parms (current_function_parms);
12467
12468 if (dependent_type_p (return_type))
12469 return;
12470 if (!COMPLETE_OR_VOID_TYPE_P (return_type)
12471 || (TYPE_FOR_JAVA (return_type) && MAYBE_CLASS_TYPE_P (return_type)))
12472 {
12473 tree args = TYPE_ARG_TYPES (fntype);
12474
12475 if (!COMPLETE_OR_VOID_TYPE_P (return_type))
12476 error ("return type %q#T is incomplete", return_type);
12477 else
12478 error ("return type has Java class type %q#T", return_type);
12479
12480 /* Make it return void instead. */
12481 if (TREE_CODE (fntype) == METHOD_TYPE)
12482 fntype = build_method_type_directly (TREE_TYPE (TREE_VALUE (args)),
12483 void_type_node,
12484 TREE_CHAIN (args));
12485 else
12486 fntype = build_function_type (void_type_node, args);
12487 fntype
12488 = build_exception_variant (fntype,
12489 TYPE_RAISES_EXCEPTIONS (TREE_TYPE (decl)));
12490 fntype = (cp_build_type_attribute_variant
12491 (fntype, TYPE_ATTRIBUTES (TREE_TYPE (decl))));
12492 TREE_TYPE (decl) = fntype;
12493 }
12494 else
12495 abstract_virtuals_error (decl, TREE_TYPE (fntype));
12496 }
12497
12498 /* Create the FUNCTION_DECL for a function definition.
12499 DECLSPECS and DECLARATOR are the parts of the declaration;
12500 they describe the function's name and the type it returns,
12501 but twisted together in a fashion that parallels the syntax of C.
12502
12503 FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
12504 DECLARATOR is really the DECL for the function we are about to
12505 process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
12506 indicating that the function is an inline defined in-class.
12507
12508 This function creates a binding context for the function body
12509 as well as setting up the FUNCTION_DECL in current_function_decl.
12510
12511 For C++, we must first check whether that datum makes any sense.
12512 For example, "class A local_a(1,2);" means that variable local_a
12513 is an aggregate of type A, which should have a constructor
12514 applied to it with the argument list [1, 2].
12515
12516 On entry, DECL_INITIAL (decl1) should be NULL_TREE or error_mark_node,
12517 or may be a BLOCK if the function has been defined previously
12518 in this translation unit. On exit, DECL_INITIAL (decl1) will be
12519 error_mark_node if the function has never been defined, or
12520 a BLOCK if the function has been defined somewhere. */
12521
12522 void
12523 start_preparsed_function (tree decl1, tree attrs, int flags)
12524 {
12525 tree ctype = NULL_TREE;
12526 tree fntype;
12527 tree restype;
12528 int doing_friend = 0;
12529 cp_binding_level *bl;
12530 tree current_function_parms;
12531 struct c_fileinfo *finfo
12532 = get_fileinfo (LOCATION_FILE (DECL_SOURCE_LOCATION (decl1)));
12533 bool honor_interface;
12534
12535 /* Sanity check. */
12536 gcc_assert (TREE_CODE (TREE_VALUE (void_list_node)) == VOID_TYPE);
12537 gcc_assert (TREE_CHAIN (void_list_node) == NULL_TREE);
12538
12539 fntype = TREE_TYPE (decl1);
12540 if (TREE_CODE (fntype) == METHOD_TYPE)
12541 ctype = TYPE_METHOD_BASETYPE (fntype);
12542
12543 /* ISO C++ 11.4/5. A friend function defined in a class is in
12544 the (lexical) scope of the class in which it is defined. */
12545 if (!ctype && DECL_FRIEND_P (decl1))
12546 {
12547 ctype = DECL_FRIEND_CONTEXT (decl1);
12548
12549 /* CTYPE could be null here if we're dealing with a template;
12550 for example, `inline friend float foo()' inside a template
12551 will have no CTYPE set. */
12552 if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
12553 ctype = NULL_TREE;
12554 else
12555 doing_friend = 1;
12556 }
12557
12558 if (DECL_DECLARED_INLINE_P (decl1)
12559 && lookup_attribute ("noinline", attrs))
12560 warning (0, "inline function %q+D given attribute noinline", decl1);
12561
12562 /* Handle gnu_inline attribute. */
12563 if (GNU_INLINE_P (decl1))
12564 {
12565 DECL_EXTERNAL (decl1) = 1;
12566 DECL_NOT_REALLY_EXTERN (decl1) = 0;
12567 DECL_INTERFACE_KNOWN (decl1) = 1;
12568 DECL_DISREGARD_INLINE_LIMITS (decl1) = 1;
12569 }
12570
12571 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl1))
12572 /* This is a constructor, we must ensure that any default args
12573 introduced by this definition are propagated to the clones
12574 now. The clones are used directly in overload resolution. */
12575 adjust_clone_args (decl1);
12576
12577 /* Sometimes we don't notice that a function is a static member, and
12578 build a METHOD_TYPE for it. Fix that up now. */
12579 gcc_assert (!(ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1)
12580 && TREE_CODE (TREE_TYPE (decl1)) == METHOD_TYPE));
12581
12582 /* Set up current_class_type, and enter the scope of the class, if
12583 appropriate. */
12584 if (ctype)
12585 push_nested_class (ctype);
12586 else if (DECL_STATIC_FUNCTION_P (decl1))
12587 push_nested_class (DECL_CONTEXT (decl1));
12588
12589 /* Now that we have entered the scope of the class, we must restore
12590 the bindings for any template parameters surrounding DECL1, if it
12591 is an inline member template. (Order is important; consider the
12592 case where a template parameter has the same name as a field of
12593 the class.) It is not until after this point that
12594 PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly. */
12595 if (flags & SF_INCLASS_INLINE)
12596 maybe_begin_member_template_processing (decl1);
12597
12598 /* Effective C++ rule 15. */
12599 if (warn_ecpp
12600 && DECL_OVERLOADED_OPERATOR_P (decl1) == NOP_EXPR
12601 && TREE_CODE (TREE_TYPE (fntype)) == VOID_TYPE)
12602 warning (OPT_Weffc__, "%<operator=%> should return a reference to %<*this%>");
12603
12604 /* Make the init_value nonzero so pushdecl knows this is not tentative.
12605 error_mark_node is replaced below (in poplevel) with the BLOCK. */
12606 if (!DECL_INITIAL (decl1))
12607 DECL_INITIAL (decl1) = error_mark_node;
12608
12609 /* This function exists in static storage.
12610 (This does not mean `static' in the C sense!) */
12611 TREE_STATIC (decl1) = 1;
12612
12613 /* We must call push_template_decl after current_class_type is set
12614 up. (If we are processing inline definitions after exiting a
12615 class scope, current_class_type will be NULL_TREE until set above
12616 by push_nested_class.) */
12617 if (processing_template_decl)
12618 {
12619 /* FIXME: Handle error_mark_node more gracefully. */
12620 tree newdecl1 = push_template_decl (decl1);
12621 if (newdecl1 != error_mark_node)
12622 decl1 = newdecl1;
12623 }
12624
12625 /* We are now in the scope of the function being defined. */
12626 current_function_decl = decl1;
12627
12628 /* Save the parm names or decls from this function's declarator
12629 where store_parm_decls will find them. */
12630 current_function_parms = DECL_ARGUMENTS (decl1);
12631
12632 /* Make sure the parameter and return types are reasonable. When
12633 you declare a function, these types can be incomplete, but they
12634 must be complete when you define the function. */
12635 check_function_type (decl1, current_function_parms);
12636
12637 /* Build the return declaration for the function. */
12638 restype = TREE_TYPE (fntype);
12639 if (DECL_RESULT (decl1) == NULL_TREE)
12640 {
12641 tree resdecl;
12642
12643 resdecl = build_decl (input_location, RESULT_DECL, 0, restype);
12644 DECL_ARTIFICIAL (resdecl) = 1;
12645 DECL_IGNORED_P (resdecl) = 1;
12646 DECL_RESULT (decl1) = resdecl;
12647
12648 cp_apply_type_quals_to_decl (cp_type_quals (restype), resdecl);
12649 }
12650
12651 /* Let the user know we're compiling this function. */
12652 announce_function (decl1);
12653
12654 /* Record the decl so that the function name is defined.
12655 If we already have a decl for this name, and it is a FUNCTION_DECL,
12656 use the old decl. */
12657 if (!processing_template_decl && !(flags & SF_PRE_PARSED))
12658 {
12659 /* A specialization is not used to guide overload resolution. */
12660 if (!DECL_FUNCTION_MEMBER_P (decl1)
12661 && !(DECL_USE_TEMPLATE (decl1) &&
12662 PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl1))))
12663 {
12664 tree olddecl = pushdecl (decl1);
12665
12666 if (olddecl == error_mark_node)
12667 /* If something went wrong when registering the declaration,
12668 use DECL1; we have to have a FUNCTION_DECL to use when
12669 parsing the body of the function. */
12670 ;
12671 else
12672 {
12673 /* Otherwise, OLDDECL is either a previous declaration
12674 of the same function or DECL1 itself. */
12675
12676 if (warn_missing_declarations
12677 && olddecl == decl1
12678 && !DECL_MAIN_P (decl1)
12679 && TREE_PUBLIC (decl1)
12680 && !DECL_DECLARED_INLINE_P (decl1))
12681 {
12682 tree context;
12683
12684 /* Check whether DECL1 is in an anonymous
12685 namespace. */
12686 for (context = DECL_CONTEXT (decl1);
12687 context;
12688 context = DECL_CONTEXT (context))
12689 {
12690 if (TREE_CODE (context) == NAMESPACE_DECL
12691 && DECL_NAME (context) == NULL_TREE)
12692 break;
12693 }
12694
12695 if (context == NULL)
12696 warning (OPT_Wmissing_declarations,
12697 "no previous declaration for %q+D", decl1);
12698 }
12699
12700 decl1 = olddecl;
12701 }
12702 }
12703 else
12704 {
12705 /* We need to set the DECL_CONTEXT. */
12706 if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
12707 DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
12708 }
12709 fntype = TREE_TYPE (decl1);
12710
12711 /* If #pragma weak applies, mark the decl appropriately now.
12712 The pragma only applies to global functions. Because
12713 determining whether or not the #pragma applies involves
12714 computing the mangled name for the declaration, we cannot
12715 apply the pragma until after we have merged this declaration
12716 with any previous declarations; if the original declaration
12717 has a linkage specification, that specification applies to
12718 the definition as well, and may affect the mangled name. */
12719 if (DECL_FILE_SCOPE_P (decl1))
12720 maybe_apply_pragma_weak (decl1);
12721 }
12722
12723 /* Reset this in case the call to pushdecl changed it. */
12724 current_function_decl = decl1;
12725
12726 gcc_assert (DECL_INITIAL (decl1));
12727
12728 /* This function may already have been parsed, in which case just
12729 return; our caller will skip over the body without parsing. */
12730 if (DECL_INITIAL (decl1) != error_mark_node)
12731 return;
12732
12733 /* Initialize RTL machinery. We cannot do this until
12734 CURRENT_FUNCTION_DECL and DECL_RESULT are set up. We do this
12735 even when processing a template; this is how we get
12736 CFUN set up, and our per-function variables initialized.
12737 FIXME factor out the non-RTL stuff. */
12738 bl = current_binding_level;
12739 allocate_struct_function (decl1, processing_template_decl);
12740
12741 /* Initialize the language data structures. Whenever we start
12742 a new function, we destroy temporaries in the usual way. */
12743 cfun->language = ggc_alloc_cleared_language_function ();
12744 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
12745 current_binding_level = bl;
12746
12747 /* Start the statement-tree, start the tree now. */
12748 DECL_SAVED_TREE (decl1) = push_stmt_list ();
12749
12750 /* If we are (erroneously) defining a function that we have already
12751 defined before, wipe out what we knew before. */
12752 if (!DECL_PENDING_INLINE_P (decl1))
12753 DECL_SAVED_FUNCTION_DATA (decl1) = NULL;
12754
12755 if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1))
12756 {
12757 /* We know that this was set up by `grokclassfn'. We do not
12758 wait until `store_parm_decls', since evil parse errors may
12759 never get us to that point. Here we keep the consistency
12760 between `current_class_type' and `current_class_ptr'. */
12761 tree t = DECL_ARGUMENTS (decl1);
12762
12763 gcc_assert (t != NULL_TREE && TREE_CODE (t) == PARM_DECL);
12764 gcc_assert (TREE_CODE (TREE_TYPE (t)) == POINTER_TYPE);
12765
12766 cp_function_chain->x_current_class_ref
12767 = cp_build_indirect_ref (t, RO_NULL, tf_warning_or_error);
12768 /* Set this second to avoid shortcut in cp_build_indirect_ref. */
12769 cp_function_chain->x_current_class_ptr = t;
12770
12771 /* Constructors and destructors need to know whether they're "in
12772 charge" of initializing virtual base classes. */
12773 t = DECL_CHAIN (t);
12774 if (DECL_HAS_IN_CHARGE_PARM_P (decl1))
12775 {
12776 current_in_charge_parm = t;
12777 t = DECL_CHAIN (t);
12778 }
12779 if (DECL_HAS_VTT_PARM_P (decl1))
12780 {
12781 gcc_assert (DECL_NAME (t) == vtt_parm_identifier);
12782 current_vtt_parm = t;
12783 }
12784 }
12785
12786 honor_interface = (!DECL_TEMPLATE_INSTANTIATION (decl1)
12787 /* Implicitly-defined methods (like the
12788 destructor for a class in which no destructor
12789 is explicitly declared) must not be defined
12790 until their definition is needed. So, we
12791 ignore interface specifications for
12792 compiler-generated functions. */
12793 && !DECL_ARTIFICIAL (decl1));
12794
12795 if (processing_template_decl)
12796 /* Don't mess with interface flags. */;
12797 else if (DECL_INTERFACE_KNOWN (decl1))
12798 {
12799 tree ctx = decl_function_context (decl1);
12800
12801 if (DECL_NOT_REALLY_EXTERN (decl1))
12802 DECL_EXTERNAL (decl1) = 0;
12803
12804 if (ctx != NULL_TREE && DECL_DECLARED_INLINE_P (ctx)
12805 && TREE_PUBLIC (ctx))
12806 /* This is a function in a local class in an extern inline
12807 function. */
12808 comdat_linkage (decl1);
12809 }
12810 /* If this function belongs to an interface, it is public.
12811 If it belongs to someone else's interface, it is also external.
12812 This only affects inlines and template instantiations. */
12813 else if (!finfo->interface_unknown && honor_interface)
12814 {
12815 if (DECL_DECLARED_INLINE_P (decl1)
12816 || DECL_TEMPLATE_INSTANTIATION (decl1))
12817 {
12818 DECL_EXTERNAL (decl1)
12819 = (finfo->interface_only
12820 || (DECL_DECLARED_INLINE_P (decl1)
12821 && ! flag_implement_inlines
12822 && !DECL_VINDEX (decl1)));
12823
12824 /* For WIN32 we also want to put these in linkonce sections. */
12825 maybe_make_one_only (decl1);
12826 }
12827 else
12828 DECL_EXTERNAL (decl1) = 0;
12829 DECL_INTERFACE_KNOWN (decl1) = 1;
12830 /* If this function is in an interface implemented in this file,
12831 make sure that the back end knows to emit this function
12832 here. */
12833 if (!DECL_EXTERNAL (decl1))
12834 mark_needed (decl1);
12835 }
12836 else if (finfo->interface_unknown && finfo->interface_only
12837 && honor_interface)
12838 {
12839 /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
12840 interface, we will have both finfo->interface_unknown and
12841 finfo->interface_only set. In that case, we don't want to
12842 use the normal heuristics because someone will supply a
12843 #pragma implementation elsewhere, and deducing it here would
12844 produce a conflict. */
12845 comdat_linkage (decl1);
12846 DECL_EXTERNAL (decl1) = 0;
12847 DECL_INTERFACE_KNOWN (decl1) = 1;
12848 DECL_DEFER_OUTPUT (decl1) = 1;
12849 }
12850 else
12851 {
12852 /* This is a definition, not a reference.
12853 So clear DECL_EXTERNAL, unless this is a GNU extern inline. */
12854 if (!GNU_INLINE_P (decl1))
12855 DECL_EXTERNAL (decl1) = 0;
12856
12857 if ((DECL_DECLARED_INLINE_P (decl1)
12858 || DECL_TEMPLATE_INSTANTIATION (decl1))
12859 && ! DECL_INTERFACE_KNOWN (decl1))
12860 DECL_DEFER_OUTPUT (decl1) = 1;
12861 else
12862 DECL_INTERFACE_KNOWN (decl1) = 1;
12863 }
12864
12865 /* Determine the ELF visibility attribute for the function. We must not
12866 do this before calling "pushdecl", as we must allow "duplicate_decls"
12867 to merge any attributes appropriately. We also need to wait until
12868 linkage is set. */
12869 if (!DECL_CLONED_FUNCTION_P (decl1))
12870 determine_visibility (decl1);
12871
12872 begin_scope (sk_function_parms, decl1);
12873
12874 ++function_depth;
12875
12876 if (DECL_DESTRUCTOR_P (decl1)
12877 || (DECL_CONSTRUCTOR_P (decl1)
12878 && targetm.cxx.cdtor_returns_this ()))
12879 {
12880 cdtor_label = build_decl (input_location,
12881 LABEL_DECL, NULL_TREE, NULL_TREE);
12882 DECL_CONTEXT (cdtor_label) = current_function_decl;
12883 }
12884
12885 start_fname_decls ();
12886
12887 store_parm_decls (current_function_parms);
12888 }
12889
12890
12891 /* Like start_preparsed_function, except that instead of a
12892 FUNCTION_DECL, this function takes DECLSPECS and DECLARATOR.
12893
12894 Returns 1 on success. If the DECLARATOR is not suitable for a function
12895 (it defines a datum instead), we return 0, which tells
12896 yyparse to report a parse error. */
12897
12898 int
12899 start_function (cp_decl_specifier_seq *declspecs,
12900 const cp_declarator *declarator,
12901 tree attrs)
12902 {
12903 tree decl1;
12904
12905 decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, &attrs);
12906 if (decl1 == error_mark_node)
12907 return 0;
12908 /* If the declarator is not suitable for a function definition,
12909 cause a syntax error. */
12910 if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL)
12911 {
12912 error ("invalid function declaration");
12913 return 0;
12914 }
12915
12916 if (DECL_MAIN_P (decl1))
12917 /* main must return int. grokfndecl should have corrected it
12918 (and issued a diagnostic) if the user got it wrong. */
12919 gcc_assert (same_type_p (TREE_TYPE (TREE_TYPE (decl1)),
12920 integer_type_node));
12921
12922 start_preparsed_function (decl1, attrs, /*flags=*/SF_DEFAULT);
12923
12924 return 1;
12925 }
12926 \f
12927 /* Returns true iff an EH_SPEC_BLOCK should be created in the body of
12928 FN. */
12929
12930 static bool
12931 use_eh_spec_block (tree fn)
12932 {
12933 return (flag_exceptions && flag_enforce_eh_specs
12934 && !processing_template_decl
12935 && !type_throw_all_p (TREE_TYPE (fn))
12936 /* We insert the EH_SPEC_BLOCK only in the original
12937 function; then, it is copied automatically to the
12938 clones. */
12939 && !DECL_CLONED_FUNCTION_P (fn)
12940 /* Implicitly-generated constructors and destructors have
12941 exception specifications. However, those specifications
12942 are the union of the possible exceptions specified by the
12943 constructors/destructors for bases and members, so no
12944 unallowed exception will ever reach this function. By
12945 not creating the EH_SPEC_BLOCK we save a little memory,
12946 and we avoid spurious warnings about unreachable
12947 code. */
12948 && !DECL_DEFAULTED_FN (fn));
12949 }
12950
12951 /* Store the parameter declarations into the current function declaration.
12952 This is called after parsing the parameter declarations, before
12953 digesting the body of the function.
12954
12955 Also install to binding contour return value identifier, if any. */
12956
12957 static void
12958 store_parm_decls (tree current_function_parms)
12959 {
12960 tree fndecl = current_function_decl;
12961 tree parm;
12962
12963 /* This is a chain of any other decls that came in among the parm
12964 declarations. If a parm is declared with enum {foo, bar} x;
12965 then CONST_DECLs for foo and bar are put here. */
12966 tree nonparms = NULL_TREE;
12967
12968 if (current_function_parms)
12969 {
12970 /* This case is when the function was defined with an ANSI prototype.
12971 The parms already have decls, so we need not do anything here
12972 except record them as in effect
12973 and complain if any redundant old-style parm decls were written. */
12974
12975 tree specparms = current_function_parms;
12976 tree next;
12977
12978 /* Must clear this because it might contain TYPE_DECLs declared
12979 at class level. */
12980 current_binding_level->names = NULL;
12981
12982 /* If we're doing semantic analysis, then we'll call pushdecl
12983 for each of these. We must do them in reverse order so that
12984 they end in the correct forward order. */
12985 specparms = nreverse (specparms);
12986
12987 for (parm = specparms; parm; parm = next)
12988 {
12989 next = DECL_CHAIN (parm);
12990 if (TREE_CODE (parm) == PARM_DECL)
12991 {
12992 if (DECL_NAME (parm) == NULL_TREE
12993 || TREE_CODE (parm) != VOID_TYPE)
12994 pushdecl (parm);
12995 else
12996 error ("parameter %qD declared void", parm);
12997 }
12998 else
12999 {
13000 /* If we find an enum constant or a type tag,
13001 put it aside for the moment. */
13002 TREE_CHAIN (parm) = NULL_TREE;
13003 nonparms = chainon (nonparms, parm);
13004 }
13005 }
13006
13007 /* Get the decls in their original chain order and record in the
13008 function. This is all and only the PARM_DECLs that were
13009 pushed into scope by the loop above. */
13010 DECL_ARGUMENTS (fndecl) = getdecls ();
13011 }
13012 else
13013 DECL_ARGUMENTS (fndecl) = NULL_TREE;
13014
13015 /* Now store the final chain of decls for the arguments
13016 as the decl-chain of the current lexical scope.
13017 Put the enumerators in as well, at the front so that
13018 DECL_ARGUMENTS is not modified. */
13019 current_binding_level->names = chainon (nonparms, DECL_ARGUMENTS (fndecl));
13020
13021 if (use_eh_spec_block (current_function_decl))
13022 current_eh_spec_block = begin_eh_spec_block ();
13023 }
13024
13025 \f
13026 /* We have finished doing semantic analysis on DECL, but have not yet
13027 generated RTL for its body. Save away our current state, so that
13028 when we want to generate RTL later we know what to do. */
13029
13030 static void
13031 save_function_data (tree decl)
13032 {
13033 struct language_function *f;
13034
13035 /* Save the language-specific per-function data so that we can
13036 get it back when we really expand this function. */
13037 gcc_assert (!DECL_PENDING_INLINE_P (decl));
13038
13039 /* Make a copy. */
13040 f = ggc_alloc_language_function ();
13041 memcpy (f, cp_function_chain, sizeof (struct language_function));
13042 DECL_SAVED_FUNCTION_DATA (decl) = f;
13043
13044 /* Clear out the bits we don't need. */
13045 f->base.x_stmt_tree.x_cur_stmt_list = NULL;
13046 f->bindings = NULL;
13047 f->x_local_names = NULL;
13048 f->base.local_typedefs = NULL;
13049 }
13050
13051
13052 /* Set the return value of the constructor (if present). */
13053
13054 static void
13055 finish_constructor_body (void)
13056 {
13057 tree val;
13058 tree exprstmt;
13059
13060 if (targetm.cxx.cdtor_returns_this ()
13061 && (! TYPE_FOR_JAVA (current_class_type)))
13062 {
13063 /* Any return from a constructor will end up here. */
13064 add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
13065
13066 val = DECL_ARGUMENTS (current_function_decl);
13067 val = build2 (MODIFY_EXPR, TREE_TYPE (val),
13068 DECL_RESULT (current_function_decl), val);
13069 /* Return the address of the object. */
13070 exprstmt = build_stmt (input_location, RETURN_EXPR, val);
13071 add_stmt (exprstmt);
13072 }
13073 }
13074
13075 /* Do all the processing for the beginning of a destructor; set up the
13076 vtable pointers and cleanups for bases and members. */
13077
13078 static void
13079 begin_destructor_body (void)
13080 {
13081 tree compound_stmt;
13082
13083 /* If the CURRENT_CLASS_TYPE is incomplete, we will have already
13084 issued an error message. We still want to try to process the
13085 body of the function, but initialize_vtbl_ptrs will crash if
13086 TYPE_BINFO is NULL. */
13087 if (COMPLETE_TYPE_P (current_class_type))
13088 {
13089 compound_stmt = begin_compound_stmt (0);
13090 /* Make all virtual function table pointers in non-virtual base
13091 classes point to CURRENT_CLASS_TYPE's virtual function
13092 tables. */
13093 initialize_vtbl_ptrs (current_class_ptr);
13094 finish_compound_stmt (compound_stmt);
13095
13096 /* And insert cleanups for our bases and members so that they
13097 will be properly destroyed if we throw. */
13098 push_base_cleanups ();
13099 }
13100 }
13101
13102 /* At the end of every destructor we generate code to delete the object if
13103 necessary. Do that now. */
13104
13105 static void
13106 finish_destructor_body (void)
13107 {
13108 tree exprstmt;
13109
13110 /* Any return from a destructor will end up here; that way all base
13111 and member cleanups will be run when the function returns. */
13112 add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
13113
13114 /* In a virtual destructor, we must call delete. */
13115 if (DECL_VIRTUAL_P (current_function_decl))
13116 {
13117 tree if_stmt;
13118 tree virtual_size = cxx_sizeof (current_class_type);
13119
13120 /* [class.dtor]
13121
13122 At the point of definition of a virtual destructor (including
13123 an implicit definition), non-placement operator delete shall
13124 be looked up in the scope of the destructor's class and if
13125 found shall be accessible and unambiguous. */
13126 exprstmt = build_op_delete_call(DELETE_EXPR, current_class_ptr,
13127 virtual_size,
13128 /*global_p=*/false,
13129 /*placement=*/NULL_TREE,
13130 /*alloc_fn=*/NULL_TREE);
13131
13132 if_stmt = begin_if_stmt ();
13133 finish_if_stmt_cond (build2 (BIT_AND_EXPR, integer_type_node,
13134 current_in_charge_parm,
13135 integer_one_node),
13136 if_stmt);
13137 finish_expr_stmt (exprstmt);
13138 finish_then_clause (if_stmt);
13139 finish_if_stmt (if_stmt);
13140 }
13141
13142 if (targetm.cxx.cdtor_returns_this ())
13143 {
13144 tree val;
13145
13146 val = DECL_ARGUMENTS (current_function_decl);
13147 val = build2 (MODIFY_EXPR, TREE_TYPE (val),
13148 DECL_RESULT (current_function_decl), val);
13149 /* Return the address of the object. */
13150 exprstmt = build_stmt (input_location, RETURN_EXPR, val);
13151 add_stmt (exprstmt);
13152 }
13153 }
13154
13155 /* Do the necessary processing for the beginning of a function body, which
13156 in this case includes member-initializers, but not the catch clauses of
13157 a function-try-block. Currently, this means opening a binding level
13158 for the member-initializers (in a ctor), member cleanups (in a dtor),
13159 and capture proxies (in a lambda operator()). */
13160
13161 tree
13162 begin_function_body (void)
13163 {
13164 tree stmt;
13165
13166 if (! FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
13167 return NULL_TREE;
13168
13169 if (processing_template_decl)
13170 /* Do nothing now. */;
13171 else
13172 /* Always keep the BLOCK node associated with the outermost pair of
13173 curly braces of a function. These are needed for correct
13174 operation of dwarfout.c. */
13175 keep_next_level (true);
13176
13177 stmt = begin_compound_stmt (BCS_FN_BODY);
13178
13179 if (processing_template_decl)
13180 /* Do nothing now. */;
13181 else if (DECL_DESTRUCTOR_P (current_function_decl))
13182 begin_destructor_body ();
13183
13184 return stmt;
13185 }
13186
13187 /* Do the processing for the end of a function body. Currently, this means
13188 closing out the cleanups for fully-constructed bases and members, and in
13189 the case of the destructor, deleting the object if desired. Again, this
13190 is only meaningful for [cd]tors, since they are the only functions where
13191 there is a significant distinction between the main body and any
13192 function catch clauses. Handling, say, main() return semantics here
13193 would be wrong, as flowing off the end of a function catch clause for
13194 main() would also need to return 0. */
13195
13196 void
13197 finish_function_body (tree compstmt)
13198 {
13199 if (compstmt == NULL_TREE)
13200 return;
13201
13202 /* Close the block. */
13203 finish_compound_stmt (compstmt);
13204
13205 if (processing_template_decl)
13206 /* Do nothing now. */;
13207 else if (DECL_CONSTRUCTOR_P (current_function_decl))
13208 finish_constructor_body ();
13209 else if (DECL_DESTRUCTOR_P (current_function_decl))
13210 finish_destructor_body ();
13211 }
13212
13213 /* Given a function, returns the BLOCK corresponding to the outermost level
13214 of curly braces, skipping the artificial block created for constructor
13215 initializers. */
13216
13217 tree
13218 outer_curly_brace_block (tree fndecl)
13219 {
13220 tree block = BLOCK_SUBBLOCKS (DECL_INITIAL (fndecl));
13221 if (FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
13222 /* Skip the artificial function body block. */
13223 block = BLOCK_SUBBLOCKS (block);
13224 return block;
13225 }
13226
13227 /* If FNDECL is a class's key method, add the class to the list of
13228 keyed classes that should be emitted. */
13229
13230 static void
13231 record_key_method_defined (tree fndecl)
13232 {
13233 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fndecl)
13234 && DECL_VIRTUAL_P (fndecl)
13235 && !processing_template_decl)
13236 {
13237 tree fnclass = DECL_CONTEXT (fndecl);
13238 if (fndecl == CLASSTYPE_KEY_METHOD (fnclass))
13239 keyed_classes = tree_cons (NULL_TREE, fnclass, keyed_classes);
13240 }
13241 }
13242
13243 /* Subroutine of finish_function.
13244 Save the body of constexpr functions for possible
13245 future compile time evaluation. */
13246
13247 static void
13248 maybe_save_function_definition (tree fun)
13249 {
13250 if (!processing_template_decl
13251 && DECL_DECLARED_CONSTEXPR_P (fun)
13252 && !DECL_CLONED_FUNCTION_P (fun))
13253 register_constexpr_fundef (fun, DECL_SAVED_TREE (fun));
13254 }
13255
13256 /* Finish up a function declaration and compile that function
13257 all the way to assembler language output. The free the storage
13258 for the function definition.
13259
13260 FLAGS is a bitwise or of the following values:
13261 2 - INCLASS_INLINE
13262 We just finished processing the body of an in-class inline
13263 function definition. (This processing will have taken place
13264 after the class definition is complete.) */
13265
13266 tree
13267 finish_function (int flags)
13268 {
13269 tree fndecl = current_function_decl;
13270 tree fntype, ctype = NULL_TREE;
13271 int inclass_inline = (flags & 2) != 0;
13272
13273 /* When we get some parse errors, we can end up without a
13274 current_function_decl, so cope. */
13275 if (fndecl == NULL_TREE)
13276 return error_mark_node;
13277
13278 if (c_dialect_objc ())
13279 objc_finish_function ();
13280
13281 gcc_assert (!defer_mark_used_calls);
13282 defer_mark_used_calls = true;
13283
13284 record_key_method_defined (fndecl);
13285
13286 fntype = TREE_TYPE (fndecl);
13287
13288 /* TREE_READONLY (fndecl) = 1;
13289 This caused &foo to be of type ptr-to-const-function
13290 which then got a warning when stored in a ptr-to-function variable. */
13291
13292 gcc_assert (building_stmt_list_p ());
13293 /* The current function is being defined, so its DECL_INITIAL should
13294 be set, and unless there's a multiple definition, it should be
13295 error_mark_node. */
13296 gcc_assert (DECL_INITIAL (fndecl) == error_mark_node);
13297
13298 /* For a cloned function, we've already got all the code we need;
13299 there's no need to add any extra bits. */
13300 if (!DECL_CLONED_FUNCTION_P (fndecl))
13301 {
13302 if (DECL_MAIN_P (current_function_decl))
13303 {
13304 /* Make it so that `main' always returns 0 by default (or
13305 1 for VMS). */
13306 #if VMS_TARGET
13307 finish_return_stmt (integer_one_node);
13308 #else
13309 finish_return_stmt (integer_zero_node);
13310 #endif
13311 }
13312
13313 if (use_eh_spec_block (current_function_decl))
13314 finish_eh_spec_block (TYPE_RAISES_EXCEPTIONS
13315 (TREE_TYPE (current_function_decl)),
13316 current_eh_spec_block);
13317 }
13318
13319 /* If we're saving up tree structure, tie off the function now. */
13320 DECL_SAVED_TREE (fndecl) = pop_stmt_list (DECL_SAVED_TREE (fndecl));
13321
13322 finish_fname_decls ();
13323
13324 /* If this function can't throw any exceptions, remember that. */
13325 if (!processing_template_decl
13326 && !cp_function_chain->can_throw
13327 && !flag_non_call_exceptions
13328 && !decl_replaceable_p (fndecl))
13329 TREE_NOTHROW (fndecl) = 1;
13330
13331 /* This must come after expand_function_end because cleanups might
13332 have declarations (from inline functions) that need to go into
13333 this function's blocks. */
13334
13335 /* If the current binding level isn't the outermost binding level
13336 for this function, either there is a bug, or we have experienced
13337 syntax errors and the statement tree is malformed. */
13338 if (current_binding_level->kind != sk_function_parms)
13339 {
13340 /* Make sure we have already experienced errors. */
13341 gcc_assert (errorcount);
13342
13343 /* Throw away the broken statement tree and extra binding
13344 levels. */
13345 DECL_SAVED_TREE (fndecl) = alloc_stmt_list ();
13346
13347 while (current_binding_level->kind != sk_function_parms)
13348 {
13349 if (current_binding_level->kind == sk_class)
13350 pop_nested_class ();
13351 else
13352 poplevel (0, 0, 0);
13353 }
13354 }
13355 poplevel (1, 0, 1);
13356
13357 /* Statements should always be full-expressions at the outermost set
13358 of curly braces for a function. */
13359 gcc_assert (stmts_are_full_exprs_p ());
13360
13361 /* Save constexpr function body before it gets munged by
13362 the NRV transformation. */
13363 maybe_save_function_definition (fndecl);
13364
13365 /* Set up the named return value optimization, if we can. Candidate
13366 variables are selected in check_return_expr. */
13367 if (current_function_return_value)
13368 {
13369 tree r = current_function_return_value;
13370 tree outer;
13371
13372 if (r != error_mark_node
13373 /* This is only worth doing for fns that return in memory--and
13374 simpler, since we don't have to worry about promoted modes. */
13375 && aggregate_value_p (TREE_TYPE (TREE_TYPE (fndecl)), fndecl)
13376 /* Only allow this for variables declared in the outer scope of
13377 the function so we know that their lifetime always ends with a
13378 return; see g++.dg/opt/nrv6.C. We could be more flexible if
13379 we were to do this optimization in tree-ssa. */
13380 && (outer = outer_curly_brace_block (fndecl))
13381 && chain_member (r, BLOCK_VARS (outer)))
13382 finalize_nrv (&DECL_SAVED_TREE (fndecl), r, DECL_RESULT (fndecl));
13383
13384 current_function_return_value = NULL_TREE;
13385 }
13386
13387 /* Remember that we were in class scope. */
13388 if (current_class_name)
13389 ctype = current_class_type;
13390
13391 /* Must mark the RESULT_DECL as being in this function. */
13392 DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
13393
13394 /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
13395 to the FUNCTION_DECL node itself. */
13396 BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
13397
13398 /* Save away current state, if appropriate. */
13399 if (!processing_template_decl)
13400 save_function_data (fndecl);
13401
13402 /* Complain if there's just no return statement. */
13403 if (warn_return_type
13404 && TREE_CODE (TREE_TYPE (fntype)) != VOID_TYPE
13405 && !dependent_type_p (TREE_TYPE (fntype))
13406 && !current_function_returns_value && !current_function_returns_null
13407 /* Don't complain if we abort or throw. */
13408 && !current_function_returns_abnormally
13409 /* Don't complain if we are declared noreturn. */
13410 && !TREE_THIS_VOLATILE (fndecl)
13411 && !DECL_NAME (DECL_RESULT (fndecl))
13412 && !TREE_NO_WARNING (fndecl)
13413 /* Structor return values (if any) are set by the compiler. */
13414 && !DECL_CONSTRUCTOR_P (fndecl)
13415 && !DECL_DESTRUCTOR_P (fndecl))
13416 {
13417 warning (OPT_Wreturn_type,
13418 "no return statement in function returning non-void");
13419 TREE_NO_WARNING (fndecl) = 1;
13420 }
13421
13422 /* Store the end of the function, so that we get good line number
13423 info for the epilogue. */
13424 cfun->function_end_locus = input_location;
13425
13426 /* Complain about parameters that are only set, but never otherwise used. */
13427 if (warn_unused_but_set_parameter
13428 && !processing_template_decl
13429 && errorcount == unused_but_set_errorcount
13430 && !DECL_CLONED_FUNCTION_P (fndecl))
13431 {
13432 tree decl;
13433
13434 for (decl = DECL_ARGUMENTS (fndecl);
13435 decl;
13436 decl = DECL_CHAIN (decl))
13437 if (TREE_USED (decl)
13438 && TREE_CODE (decl) == PARM_DECL
13439 && !DECL_READ_P (decl)
13440 && DECL_NAME (decl)
13441 && !DECL_ARTIFICIAL (decl)
13442 && !TREE_NO_WARNING (decl)
13443 && !DECL_IN_SYSTEM_HEADER (decl)
13444 && TREE_TYPE (decl) != error_mark_node
13445 && TREE_CODE (TREE_TYPE (decl)) != REFERENCE_TYPE
13446 && (!CLASS_TYPE_P (TREE_TYPE (decl))
13447 || !TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl))))
13448 warning (OPT_Wunused_but_set_parameter,
13449 "parameter %q+D set but not used", decl);
13450 unused_but_set_errorcount = errorcount;
13451 }
13452
13453 /* Complain about locally defined typedefs that are not used in this
13454 function. */
13455 maybe_warn_unused_local_typedefs ();
13456
13457 /* Genericize before inlining. */
13458 if (!processing_template_decl)
13459 {
13460 struct language_function *f = DECL_SAVED_FUNCTION_DATA (fndecl);
13461 invoke_plugin_callbacks (PLUGIN_PRE_GENERICIZE, fndecl);
13462 cp_genericize (fndecl);
13463 /* Clear out the bits we don't need. */
13464 f->x_current_class_ptr = NULL;
13465 f->x_current_class_ref = NULL;
13466 f->x_eh_spec_block = NULL;
13467 f->x_in_charge_parm = NULL;
13468 f->x_vtt_parm = NULL;
13469 f->x_return_value = NULL;
13470 f->bindings = NULL;
13471 f->extern_decl_map = NULL;
13472 }
13473 /* Clear out the bits we don't need. */
13474 local_names = NULL;
13475
13476 /* We're leaving the context of this function, so zap cfun. It's still in
13477 DECL_STRUCT_FUNCTION, and we'll restore it in tree_rest_of_compilation. */
13478 set_cfun (NULL);
13479 current_function_decl = NULL;
13480
13481 /* If this is an in-class inline definition, we may have to pop the
13482 bindings for the template parameters that we added in
13483 maybe_begin_member_template_processing when start_function was
13484 called. */
13485 if (inclass_inline)
13486 maybe_end_member_template_processing ();
13487
13488 /* Leave the scope of the class. */
13489 if (ctype)
13490 pop_nested_class ();
13491
13492 --function_depth;
13493
13494 /* Clean up. */
13495 current_function_decl = NULL_TREE;
13496
13497 defer_mark_used_calls = false;
13498 if (deferred_mark_used_calls)
13499 {
13500 unsigned int i;
13501 tree decl;
13502
13503 FOR_EACH_VEC_ELT (tree, deferred_mark_used_calls, i, decl)
13504 mark_used (decl);
13505 VEC_free (tree, gc, deferred_mark_used_calls);
13506 }
13507
13508 return fndecl;
13509 }
13510 \f
13511 /* Create the FUNCTION_DECL for a function definition.
13512 DECLSPECS and DECLARATOR are the parts of the declaration;
13513 they describe the return type and the name of the function,
13514 but twisted together in a fashion that parallels the syntax of C.
13515
13516 This function creates a binding context for the function body
13517 as well as setting up the FUNCTION_DECL in current_function_decl.
13518
13519 Returns a FUNCTION_DECL on success.
13520
13521 If the DECLARATOR is not suitable for a function (it defines a datum
13522 instead), we return 0, which tells yyparse to report a parse error.
13523
13524 May return void_type_node indicating that this method is actually
13525 a friend. See grokfield for more details.
13526
13527 Came here with a `.pushlevel' .
13528
13529 DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
13530 CHANGES TO CODE IN `grokfield'. */
13531
13532 tree
13533 grokmethod (cp_decl_specifier_seq *declspecs,
13534 const cp_declarator *declarator, tree attrlist)
13535 {
13536 tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
13537 &attrlist);
13538
13539 if (fndecl == error_mark_node)
13540 return error_mark_node;
13541
13542 if (fndecl == NULL || TREE_CODE (fndecl) != FUNCTION_DECL)
13543 {
13544 error ("invalid member function declaration");
13545 return error_mark_node;
13546 }
13547
13548 if (attrlist)
13549 cplus_decl_attributes (&fndecl, attrlist, 0);
13550
13551 /* Pass friends other than inline friend functions back. */
13552 if (fndecl == void_type_node)
13553 return fndecl;
13554
13555 if (DECL_IN_AGGR_P (fndecl))
13556 {
13557 if (DECL_CLASS_SCOPE_P (fndecl))
13558 error ("%qD is already defined in class %qT", fndecl,
13559 DECL_CONTEXT (fndecl));
13560 return error_mark_node;
13561 }
13562
13563 check_template_shadow (fndecl);
13564
13565 DECL_DECLARED_INLINE_P (fndecl) = 1;
13566 DECL_NO_INLINE_WARNING_P (fndecl) = 1;
13567
13568 /* We process method specializations in finish_struct_1. */
13569 if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
13570 {
13571 fndecl = push_template_decl (fndecl);
13572 if (fndecl == error_mark_node)
13573 return fndecl;
13574 }
13575
13576 if (! DECL_FRIEND_P (fndecl))
13577 {
13578 if (DECL_CHAIN (fndecl))
13579 {
13580 fndecl = copy_node (fndecl);
13581 TREE_CHAIN (fndecl) = NULL_TREE;
13582 }
13583 }
13584
13585 cp_finish_decl (fndecl, NULL_TREE, false, NULL_TREE, 0);
13586
13587 DECL_IN_AGGR_P (fndecl) = 1;
13588 return fndecl;
13589 }
13590 \f
13591
13592 /* VAR is a VAR_DECL. If its type is incomplete, remember VAR so that
13593 we can lay it out later, when and if its type becomes complete. */
13594
13595 void
13596 maybe_register_incomplete_var (tree var)
13597 {
13598 gcc_assert (TREE_CODE (var) == VAR_DECL);
13599
13600 /* Keep track of variables with incomplete types. */
13601 if (!processing_template_decl && TREE_TYPE (var) != error_mark_node
13602 && DECL_EXTERNAL (var))
13603 {
13604 tree inner_type = TREE_TYPE (var);
13605
13606 while (TREE_CODE (inner_type) == ARRAY_TYPE)
13607 inner_type = TREE_TYPE (inner_type);
13608 inner_type = TYPE_MAIN_VARIANT (inner_type);
13609
13610 if ((!COMPLETE_TYPE_P (inner_type) && CLASS_TYPE_P (inner_type))
13611 /* RTTI TD entries are created while defining the type_info. */
13612 || (TYPE_LANG_SPECIFIC (inner_type)
13613 && TYPE_BEING_DEFINED (inner_type)))
13614 {
13615 incomplete_var *iv
13616 = VEC_safe_push (incomplete_var, gc, incomplete_vars, NULL);
13617 iv->decl = var;
13618 iv->incomplete_type = inner_type;
13619 }
13620 }
13621 }
13622
13623 /* Called when a class type (given by TYPE) is defined. If there are
13624 any existing VAR_DECLs whose type has been completed by this
13625 declaration, update them now. */
13626
13627 void
13628 complete_vars (tree type)
13629 {
13630 unsigned ix;
13631 incomplete_var *iv;
13632
13633 for (ix = 0; VEC_iterate (incomplete_var, incomplete_vars, ix, iv); )
13634 {
13635 if (same_type_p (type, iv->incomplete_type))
13636 {
13637 tree var = iv->decl;
13638 tree type = TREE_TYPE (var);
13639 /* Complete the type of the variable. The VAR_DECL itself
13640 will be laid out in expand_expr. */
13641 complete_type (type);
13642 cp_apply_type_quals_to_decl (cp_type_quals (type), var);
13643 /* Remove this entry from the list. */
13644 VEC_unordered_remove (incomplete_var, incomplete_vars, ix);
13645 }
13646 else
13647 ix++;
13648 }
13649
13650 /* Check for pending declarations which may have abstract type. */
13651 complete_type_check_abstract (type);
13652 }
13653
13654 /* If DECL is of a type which needs a cleanup, build and return an
13655 expression to perform that cleanup here. Return NULL_TREE if no
13656 cleanup need be done. */
13657
13658 tree
13659 cxx_maybe_build_cleanup (tree decl, tsubst_flags_t complain)
13660 {
13661 tree type;
13662 tree attr;
13663 tree cleanup;
13664
13665 /* Assume no cleanup is required. */
13666 cleanup = NULL_TREE;
13667
13668 if (error_operand_p (decl))
13669 return cleanup;
13670
13671 /* Handle "__attribute__((cleanup))". We run the cleanup function
13672 before the destructor since the destructor is what actually
13673 terminates the lifetime of the object. */
13674 attr = lookup_attribute ("cleanup", DECL_ATTRIBUTES (decl));
13675 if (attr)
13676 {
13677 tree id;
13678 tree fn;
13679 tree arg;
13680
13681 /* Get the name specified by the user for the cleanup function. */
13682 id = TREE_VALUE (TREE_VALUE (attr));
13683 /* Look up the name to find the cleanup function to call. It is
13684 important to use lookup_name here because that is what is
13685 used in c-common.c:handle_cleanup_attribute when performing
13686 initial checks on the attribute. Note that those checks
13687 include ensuring that the function found is not an overloaded
13688 function, or an object with an overloaded call operator,
13689 etc.; we can rely on the fact that the function found is an
13690 ordinary FUNCTION_DECL. */
13691 fn = lookup_name (id);
13692 arg = build_address (decl);
13693 mark_used (decl);
13694 cleanup = cp_build_function_call_nary (fn, complain, arg, NULL_TREE);
13695 if (cleanup == error_mark_node)
13696 return error_mark_node;
13697 }
13698 /* Handle ordinary C++ destructors. */
13699 type = TREE_TYPE (decl);
13700 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
13701 {
13702 int flags = LOOKUP_NORMAL|LOOKUP_DESTRUCTOR;
13703 bool has_vbases = (TREE_CODE (type) == RECORD_TYPE
13704 && CLASSTYPE_VBASECLASSES (type));
13705 tree addr;
13706 tree call;
13707
13708 if (TREE_CODE (type) == ARRAY_TYPE)
13709 addr = decl;
13710 else
13711 addr = build_address (decl);
13712
13713 /* Optimize for space over speed here. */
13714 if (!has_vbases || flag_expensive_optimizations)
13715 flags |= LOOKUP_NONVIRTUAL;
13716
13717 call = build_delete (TREE_TYPE (addr), addr,
13718 sfk_complete_destructor, flags, 0, complain);
13719 if (call == error_mark_node)
13720 cleanup = error_mark_node;
13721 else if (cleanup)
13722 cleanup = cp_build_compound_expr (cleanup, call, complain);
13723 else
13724 cleanup = call;
13725 }
13726
13727 return cleanup;
13728 }
13729 \f
13730 /* When a stmt has been parsed, this function is called. */
13731
13732 void
13733 finish_stmt (void)
13734 {
13735 }
13736
13737 /* Return the FUNCTION_TYPE that corresponds to MEMFNTYPE, which can be a
13738 FUNCTION_DECL, METHOD_TYPE, FUNCTION_TYPE, pointer or reference to
13739 METHOD_TYPE or FUNCTION_TYPE, or pointer to member function. */
13740
13741 tree
13742 static_fn_type (tree memfntype)
13743 {
13744 tree fntype;
13745 tree args;
13746
13747 if (TYPE_PTRMEMFUNC_P (memfntype))
13748 memfntype = TYPE_PTRMEMFUNC_FN_TYPE (memfntype);
13749 if (POINTER_TYPE_P (memfntype)
13750 || TREE_CODE (memfntype) == FUNCTION_DECL)
13751 memfntype = TREE_TYPE (memfntype);
13752 if (TREE_CODE (memfntype) == FUNCTION_TYPE)
13753 return memfntype;
13754 gcc_assert (TREE_CODE (memfntype) == METHOD_TYPE);
13755 args = TYPE_ARG_TYPES (memfntype);
13756 fntype = build_function_type (TREE_TYPE (memfntype), TREE_CHAIN (args));
13757 fntype = apply_memfn_quals (fntype, type_memfn_quals (memfntype));
13758 fntype = (cp_build_type_attribute_variant
13759 (fntype, TYPE_ATTRIBUTES (memfntype)));
13760 fntype = (build_exception_variant
13761 (fntype, TYPE_RAISES_EXCEPTIONS (memfntype)));
13762 return fntype;
13763 }
13764
13765 /* DECL was originally constructed as a non-static member function,
13766 but turned out to be static. Update it accordingly. */
13767
13768 void
13769 revert_static_member_fn (tree decl)
13770 {
13771 tree stype = static_fn_type (decl);
13772 cp_cv_quals quals = type_memfn_quals (stype);
13773
13774 if (quals != TYPE_UNQUALIFIED)
13775 stype = apply_memfn_quals (stype, TYPE_UNQUALIFIED);
13776
13777 TREE_TYPE (decl) = stype;
13778
13779 if (DECL_ARGUMENTS (decl))
13780 DECL_ARGUMENTS (decl) = DECL_CHAIN (DECL_ARGUMENTS (decl));
13781 DECL_STATIC_FUNCTION_P (decl) = 1;
13782 }
13783
13784 /* Return which tree structure is used by T, or TS_CP_GENERIC if T is
13785 one of the language-independent trees. */
13786
13787 enum cp_tree_node_structure_enum
13788 cp_tree_node_structure (union lang_tree_node * t)
13789 {
13790 switch (TREE_CODE (&t->generic))
13791 {
13792 case DEFAULT_ARG: return TS_CP_DEFAULT_ARG;
13793 case DEFERRED_NOEXCEPT: return TS_CP_DEFERRED_NOEXCEPT;
13794 case IDENTIFIER_NODE: return TS_CP_IDENTIFIER;
13795 case OVERLOAD: return TS_CP_OVERLOAD;
13796 case TEMPLATE_PARM_INDEX: return TS_CP_TPI;
13797 case PTRMEM_CST: return TS_CP_PTRMEM;
13798 case BASELINK: return TS_CP_BASELINK;
13799 case STATIC_ASSERT: return TS_CP_STATIC_ASSERT;
13800 case ARGUMENT_PACK_SELECT: return TS_CP_ARGUMENT_PACK_SELECT;
13801 case TRAIT_EXPR: return TS_CP_TRAIT_EXPR;
13802 case LAMBDA_EXPR: return TS_CP_LAMBDA_EXPR;
13803 case TEMPLATE_INFO: return TS_CP_TEMPLATE_INFO;
13804 case USERDEF_LITERAL: return TS_CP_USERDEF_LITERAL;
13805 default: return TS_CP_GENERIC;
13806 }
13807 }
13808
13809 /* Build the void_list_node (void_type_node having been created). */
13810 tree
13811 build_void_list_node (void)
13812 {
13813 tree t = build_tree_list (NULL_TREE, void_type_node);
13814 return t;
13815 }
13816
13817 bool
13818 cp_missing_noreturn_ok_p (tree decl)
13819 {
13820 /* A missing noreturn is ok for the `main' function. */
13821 return DECL_MAIN_P (decl);
13822 }
13823
13824 /* Return the COMDAT group into which DECL should be placed. */
13825
13826 tree
13827 cxx_comdat_group (tree decl)
13828 {
13829 tree name;
13830
13831 /* Virtual tables, construction virtual tables, and virtual table
13832 tables all go in a single COMDAT group, named after the primary
13833 virtual table. */
13834 if (TREE_CODE (decl) == VAR_DECL && DECL_VTABLE_OR_VTT_P (decl))
13835 name = DECL_ASSEMBLER_NAME (CLASSTYPE_VTABLES (DECL_CONTEXT (decl)));
13836 /* For all other DECLs, the COMDAT group is the mangled name of the
13837 declaration itself. */
13838 else
13839 {
13840 while (DECL_THUNK_P (decl))
13841 {
13842 /* If TARGET_USE_LOCAL_THUNK_ALIAS_P, use_thunk puts the thunk
13843 into the same section as the target function. In that case
13844 we must return target's name. */
13845 tree target = THUNK_TARGET (decl);
13846 if (TARGET_USE_LOCAL_THUNK_ALIAS_P (target)
13847 && DECL_SECTION_NAME (target) != NULL
13848 && DECL_ONE_ONLY (target))
13849 decl = target;
13850 else
13851 break;
13852 }
13853 name = DECL_ASSEMBLER_NAME (decl);
13854 }
13855
13856 return name;
13857 }
13858
13859 #include "gt-cp-decl.h"