re PR c++/51930 (Explicitly instantiated template gets hidden visibility)
[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, 2012
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 gcc_assert (DECL_P (newdecl));
956
957 if (TREE_CODE (newdecl) == FUNCTION_DECL)
958 {
959 tree f1 = TREE_TYPE (newdecl);
960 tree f2 = TREE_TYPE (olddecl);
961 tree p1 = TYPE_ARG_TYPES (f1);
962 tree p2 = TYPE_ARG_TYPES (f2);
963
964 /* Specializations of different templates are different functions
965 even if they have the same type. */
966 tree t1 = (DECL_USE_TEMPLATE (newdecl)
967 ? DECL_TI_TEMPLATE (newdecl)
968 : NULL_TREE);
969 tree t2 = (DECL_USE_TEMPLATE (olddecl)
970 ? DECL_TI_TEMPLATE (olddecl)
971 : NULL_TREE);
972 if (t1 != t2)
973 return 0;
974
975 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
976 && ! (DECL_EXTERN_C_P (newdecl)
977 && DECL_EXTERN_C_P (olddecl)))
978 return 0;
979
980 #ifdef NO_IMPLICIT_EXTERN_C
981 /* A new declaration doesn't match a built-in one unless it
982 is also extern "C". */
983 if (DECL_IS_BUILTIN (olddecl)
984 && DECL_EXTERN_C_P (olddecl) && !DECL_EXTERN_C_P (newdecl))
985 return 0;
986 #endif
987
988 if (TREE_CODE (f1) != TREE_CODE (f2))
989 return 0;
990
991 if (same_type_p (TREE_TYPE (f1), TREE_TYPE (f2)))
992 {
993 if (!prototype_p (f2) && DECL_EXTERN_C_P (olddecl)
994 && (DECL_BUILT_IN (olddecl)
995 #ifndef NO_IMPLICIT_EXTERN_C
996 || (DECL_IN_SYSTEM_HEADER (newdecl) && !DECL_CLASS_SCOPE_P (newdecl))
997 || (DECL_IN_SYSTEM_HEADER (olddecl) && !DECL_CLASS_SCOPE_P (olddecl))
998 #endif
999 ))
1000 {
1001 types_match = self_promoting_args_p (p1);
1002 if (p1 == void_list_node)
1003 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
1004 }
1005 #ifndef NO_IMPLICIT_EXTERN_C
1006 else if (!prototype_p (f1)
1007 && (DECL_EXTERN_C_P (olddecl)
1008 && DECL_IN_SYSTEM_HEADER (olddecl)
1009 && !DECL_CLASS_SCOPE_P (olddecl))
1010 && (DECL_EXTERN_C_P (newdecl)
1011 && DECL_IN_SYSTEM_HEADER (newdecl)
1012 && !DECL_CLASS_SCOPE_P (newdecl)))
1013 {
1014 types_match = self_promoting_args_p (p2);
1015 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
1016 }
1017 #endif
1018 else
1019 types_match =
1020 compparms (p1, p2)
1021 && (TYPE_ATTRIBUTES (TREE_TYPE (newdecl)) == NULL_TREE
1022 || comp_type_attributes (TREE_TYPE (newdecl),
1023 TREE_TYPE (olddecl)) != 0);
1024 }
1025 else
1026 types_match = 0;
1027 }
1028 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1029 {
1030 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl))
1031 != TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)))
1032 return 0;
1033
1034 if (!comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
1035 DECL_TEMPLATE_PARMS (olddecl)))
1036 return 0;
1037
1038 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
1039 types_match = same_type_p (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl)),
1040 TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl)));
1041 else
1042 types_match = decls_match (DECL_TEMPLATE_RESULT (olddecl),
1043 DECL_TEMPLATE_RESULT (newdecl));
1044 }
1045 else
1046 {
1047 /* Need to check scope for variable declaration (VAR_DECL).
1048 For typedef (TYPE_DECL), scope is ignored. */
1049 if (TREE_CODE (newdecl) == VAR_DECL
1050 && CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
1051 /* [dcl.link]
1052 Two declarations for an object with C language linkage
1053 with the same name (ignoring the namespace that qualify
1054 it) that appear in different namespace scopes refer to
1055 the same object. */
1056 && !(DECL_EXTERN_C_P (olddecl) && DECL_EXTERN_C_P (newdecl)))
1057 return 0;
1058
1059 if (TREE_TYPE (newdecl) == error_mark_node)
1060 types_match = TREE_TYPE (olddecl) == error_mark_node;
1061 else if (TREE_TYPE (olddecl) == NULL_TREE)
1062 types_match = TREE_TYPE (newdecl) == NULL_TREE;
1063 else if (TREE_TYPE (newdecl) == NULL_TREE)
1064 types_match = 0;
1065 else
1066 types_match = comptypes (TREE_TYPE (newdecl),
1067 TREE_TYPE (olddecl),
1068 COMPARE_REDECLARATION);
1069 }
1070
1071 return types_match;
1072 }
1073
1074 /* If NEWDECL is `static' and an `extern' was seen previously,
1075 warn about it. OLDDECL is the previous declaration.
1076
1077 Note that this does not apply to the C++ case of declaring
1078 a variable `extern const' and then later `const'.
1079
1080 Don't complain about built-in functions, since they are beyond
1081 the user's control. */
1082
1083 void
1084 warn_extern_redeclared_static (tree newdecl, tree olddecl)
1085 {
1086 if (TREE_CODE (newdecl) == TYPE_DECL
1087 || TREE_CODE (newdecl) == TEMPLATE_DECL
1088 || TREE_CODE (newdecl) == CONST_DECL
1089 || TREE_CODE (newdecl) == NAMESPACE_DECL)
1090 return;
1091
1092 /* Don't get confused by static member functions; that's a different
1093 use of `static'. */
1094 if (TREE_CODE (newdecl) == FUNCTION_DECL
1095 && DECL_STATIC_FUNCTION_P (newdecl))
1096 return;
1097
1098 /* If the old declaration was `static', or the new one isn't, then
1099 everything is OK. */
1100 if (DECL_THIS_STATIC (olddecl) || !DECL_THIS_STATIC (newdecl))
1101 return;
1102
1103 /* It's OK to declare a builtin function as `static'. */
1104 if (TREE_CODE (olddecl) == FUNCTION_DECL
1105 && DECL_ARTIFICIAL (olddecl))
1106 return;
1107
1108 permerror (input_location, "%qD was declared %<extern%> and later %<static%>", newdecl);
1109 permerror (input_location, "previous declaration of %q+D", olddecl);
1110 }
1111
1112 /* NEW_DECL is a redeclaration of OLD_DECL; both are functions or
1113 function templates. If their exception specifications do not
1114 match, issue a diagnostic. */
1115
1116 static void
1117 check_redeclaration_exception_specification (tree new_decl,
1118 tree old_decl)
1119 {
1120 tree new_type;
1121 tree old_type;
1122 tree new_exceptions;
1123 tree old_exceptions;
1124
1125 new_type = TREE_TYPE (new_decl);
1126 new_exceptions = TYPE_RAISES_EXCEPTIONS (new_type);
1127 old_type = TREE_TYPE (old_decl);
1128 old_exceptions = TYPE_RAISES_EXCEPTIONS (old_type);
1129
1130 /* [except.spec]
1131
1132 If any declaration of a function has an exception-specification,
1133 all declarations, including the definition and an explicit
1134 specialization, of that function shall have an
1135 exception-specification with the same set of type-ids. */
1136 if ((pedantic || ! DECL_IN_SYSTEM_HEADER (old_decl))
1137 && ! DECL_IS_BUILTIN (old_decl)
1138 && flag_exceptions
1139 && !comp_except_specs (new_exceptions, old_exceptions, ce_normal))
1140 {
1141 error ("declaration of %qF has a different exception specifier",
1142 new_decl);
1143 error ("from previous declaration %q+F", old_decl);
1144 }
1145 }
1146
1147 /* Return true if OLD_DECL and NEW_DECL agree on constexprness.
1148 Otherwise issue diagnostics. */
1149
1150 static bool
1151 validate_constexpr_redeclaration (tree old_decl, tree new_decl)
1152 {
1153 old_decl = STRIP_TEMPLATE (old_decl);
1154 new_decl = STRIP_TEMPLATE (new_decl);
1155 if (!VAR_OR_FUNCTION_DECL_P (old_decl)
1156 || !VAR_OR_FUNCTION_DECL_P (new_decl))
1157 return true;
1158 if (DECL_DECLARED_CONSTEXPR_P (old_decl)
1159 == DECL_DECLARED_CONSTEXPR_P (new_decl))
1160 return true;
1161 if (TREE_CODE (old_decl) == FUNCTION_DECL && DECL_BUILT_IN (old_decl))
1162 {
1163 /* Hide a built-in declaration. */
1164 DECL_DECLARED_CONSTEXPR_P (old_decl)
1165 = DECL_DECLARED_CONSTEXPR_P (new_decl);
1166 return true;
1167 }
1168 error ("redeclaration %qD differs in %<constexpr%>", new_decl);
1169 error ("from previous declaration %q+D", old_decl);
1170 return false;
1171 }
1172
1173 #define GNU_INLINE_P(fn) (DECL_DECLARED_INLINE_P (fn) \
1174 && lookup_attribute ("gnu_inline", \
1175 DECL_ATTRIBUTES (fn)))
1176
1177 /* If NEWDECL is a redeclaration of OLDDECL, merge the declarations.
1178 If the redeclaration is invalid, a diagnostic is issued, and the
1179 error_mark_node is returned. Otherwise, OLDDECL is returned.
1180
1181 If NEWDECL is not a redeclaration of OLDDECL, NULL_TREE is
1182 returned.
1183
1184 NEWDECL_IS_FRIEND is true if NEWDECL was declared as a friend. */
1185
1186 tree
1187 duplicate_decls (tree newdecl, tree olddecl, bool newdecl_is_friend)
1188 {
1189 unsigned olddecl_uid = DECL_UID (olddecl);
1190 int olddecl_friend = 0, types_match = 0, hidden_friend = 0;
1191 int new_defines_function = 0;
1192 tree new_template_info;
1193
1194 if (newdecl == olddecl)
1195 return olddecl;
1196
1197 types_match = decls_match (newdecl, olddecl);
1198
1199 /* If either the type of the new decl or the type of the old decl is an
1200 error_mark_node, then that implies that we have already issued an
1201 error (earlier) for some bogus type specification, and in that case,
1202 it is rather pointless to harass the user with yet more error message
1203 about the same declaration, so just pretend the types match here. */
1204 if (TREE_TYPE (newdecl) == error_mark_node
1205 || TREE_TYPE (olddecl) == error_mark_node)
1206 return error_mark_node;
1207
1208 if (UDLIT_OPER_P (DECL_NAME (newdecl))
1209 && UDLIT_OPER_P (DECL_NAME (olddecl)))
1210 {
1211 if (TREE_CODE (newdecl) == TEMPLATE_DECL
1212 && TREE_CODE (olddecl) != TEMPLATE_DECL
1213 && check_raw_literal_operator (olddecl))
1214 error ("literal operator template %q+D conflicts with"
1215 " raw literal operator %qD", newdecl, olddecl);
1216 else if (TREE_CODE (newdecl) != TEMPLATE_DECL
1217 && TREE_CODE (olddecl) == TEMPLATE_DECL
1218 && check_raw_literal_operator (newdecl))
1219 error ("raw literal operator %q+D conflicts with"
1220 " literal operator template %qD", newdecl, olddecl);
1221 }
1222
1223 if (DECL_P (olddecl)
1224 && TREE_CODE (newdecl) == FUNCTION_DECL
1225 && TREE_CODE (olddecl) == FUNCTION_DECL
1226 && (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl)))
1227 {
1228 if (DECL_DECLARED_INLINE_P (newdecl)
1229 && DECL_UNINLINABLE (newdecl)
1230 && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
1231 /* Already warned elsewhere. */;
1232 else if (DECL_DECLARED_INLINE_P (olddecl)
1233 && DECL_UNINLINABLE (olddecl)
1234 && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
1235 /* Already warned. */;
1236 else if (DECL_DECLARED_INLINE_P (newdecl)
1237 && DECL_UNINLINABLE (olddecl)
1238 && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
1239 {
1240 warning (OPT_Wattributes, "function %q+D redeclared as inline",
1241 newdecl);
1242 warning (OPT_Wattributes, "previous declaration of %q+D "
1243 "with attribute noinline", olddecl);
1244 }
1245 else if (DECL_DECLARED_INLINE_P (olddecl)
1246 && DECL_UNINLINABLE (newdecl)
1247 && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
1248 {
1249 warning (OPT_Wattributes, "function %q+D redeclared with "
1250 "attribute noinline", newdecl);
1251 warning (OPT_Wattributes, "previous declaration of %q+D was inline",
1252 olddecl);
1253 }
1254 }
1255
1256 /* Check for redeclaration and other discrepancies. */
1257 if (TREE_CODE (olddecl) == FUNCTION_DECL
1258 && DECL_ARTIFICIAL (olddecl))
1259 {
1260 gcc_assert (!DECL_HIDDEN_FRIEND_P (olddecl));
1261 if (TREE_CODE (newdecl) != FUNCTION_DECL)
1262 {
1263 /* Avoid warnings redeclaring built-ins which have not been
1264 explicitly declared. */
1265 if (DECL_ANTICIPATED (olddecl))
1266 return NULL_TREE;
1267
1268 /* If you declare a built-in or predefined function name as static,
1269 the old definition is overridden, but optionally warn this was a
1270 bad choice of name. */
1271 if (! TREE_PUBLIC (newdecl))
1272 {
1273 warning (OPT_Wshadow,
1274 DECL_BUILT_IN (olddecl)
1275 ? G_("shadowing built-in function %q#D")
1276 : G_("shadowing library function %q#D"), olddecl);
1277 /* Discard the old built-in function. */
1278 return NULL_TREE;
1279 }
1280 /* If the built-in is not ansi, then programs can override
1281 it even globally without an error. */
1282 else if (! DECL_BUILT_IN (olddecl))
1283 warning (0, "library function %q#D redeclared as non-function %q#D",
1284 olddecl, newdecl);
1285 else
1286 {
1287 error ("declaration of %q#D", newdecl);
1288 error ("conflicts with built-in declaration %q#D",
1289 olddecl);
1290 }
1291 return NULL_TREE;
1292 }
1293 else if (!types_match)
1294 {
1295 /* Avoid warnings redeclaring built-ins which have not been
1296 explicitly declared. */
1297 if (DECL_ANTICIPATED (olddecl))
1298 {
1299 /* Deal with fileptr_type_node. FILE type is not known
1300 at the time we create the builtins. */
1301 tree t1, t2;
1302
1303 for (t1 = TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1304 t2 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1305 t1 || t2;
1306 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
1307 if (!t1 || !t2)
1308 break;
1309 else if (TREE_VALUE (t2) == fileptr_type_node)
1310 {
1311 tree t = TREE_VALUE (t1);
1312
1313 if (TREE_CODE (t) == POINTER_TYPE
1314 && TYPE_NAME (TREE_TYPE (t))
1315 && DECL_NAME (TYPE_NAME (TREE_TYPE (t)))
1316 == get_identifier ("FILE")
1317 && compparms (TREE_CHAIN (t1), TREE_CHAIN (t2)))
1318 {
1319 tree oldargs = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1320
1321 TYPE_ARG_TYPES (TREE_TYPE (olddecl))
1322 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
1323 types_match = decls_match (newdecl, olddecl);
1324 if (types_match)
1325 return duplicate_decls (newdecl, olddecl,
1326 newdecl_is_friend);
1327 TYPE_ARG_TYPES (TREE_TYPE (olddecl)) = oldargs;
1328 }
1329 }
1330 else if (! same_type_p (TREE_VALUE (t1), TREE_VALUE (t2)))
1331 break;
1332 }
1333 else if ((DECL_EXTERN_C_P (newdecl)
1334 && DECL_EXTERN_C_P (olddecl))
1335 || compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1336 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
1337 {
1338 /* A near match; override the builtin. */
1339
1340 if (TREE_PUBLIC (newdecl))
1341 {
1342 warning (0, "new declaration %q#D", newdecl);
1343 warning (0, "ambiguates built-in declaration %q#D",
1344 olddecl);
1345 }
1346 else
1347 warning (OPT_Wshadow,
1348 DECL_BUILT_IN (olddecl)
1349 ? G_("shadowing built-in function %q#D")
1350 : G_("shadowing library function %q#D"), olddecl);
1351 }
1352 else
1353 /* Discard the old built-in function. */
1354 return NULL_TREE;
1355
1356 /* Replace the old RTL to avoid problems with inlining. */
1357 COPY_DECL_RTL (newdecl, olddecl);
1358 }
1359 /* Even if the types match, prefer the new declarations type for
1360 built-ins which have not been explicitly declared, for
1361 exception lists, etc... */
1362 else if (DECL_IS_BUILTIN (olddecl))
1363 {
1364 tree type = TREE_TYPE (newdecl);
1365 tree attribs = (*targetm.merge_type_attributes)
1366 (TREE_TYPE (olddecl), type);
1367
1368 type = cp_build_type_attribute_variant (type, attribs);
1369 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = type;
1370 }
1371
1372 /* If a function is explicitly declared "throw ()", propagate that to
1373 the corresponding builtin. */
1374 if (DECL_BUILT_IN_CLASS (olddecl) == BUILT_IN_NORMAL
1375 && DECL_ANTICIPATED (olddecl)
1376 && TREE_NOTHROW (newdecl)
1377 && !TREE_NOTHROW (olddecl))
1378 {
1379 enum built_in_function fncode = DECL_FUNCTION_CODE (olddecl);
1380 tree tmpdecl = builtin_decl_explicit (fncode);
1381 if (tmpdecl && tmpdecl != olddecl && types_match)
1382 TREE_NOTHROW (tmpdecl) = 1;
1383 }
1384
1385 /* Whether or not the builtin can throw exceptions has no
1386 bearing on this declarator. */
1387 TREE_NOTHROW (olddecl) = 0;
1388
1389 if (DECL_THIS_STATIC (newdecl) && !DECL_THIS_STATIC (olddecl))
1390 {
1391 /* If a builtin function is redeclared as `static', merge
1392 the declarations, but make the original one static. */
1393 DECL_THIS_STATIC (olddecl) = 1;
1394 TREE_PUBLIC (olddecl) = 0;
1395
1396 /* Make the old declaration consistent with the new one so
1397 that all remnants of the builtin-ness of this function
1398 will be banished. */
1399 SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
1400 COPY_DECL_RTL (newdecl, olddecl);
1401 }
1402 }
1403 else if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
1404 {
1405 /* C++ Standard, 3.3, clause 4:
1406 "[Note: a namespace name or a class template name must be unique
1407 in its declarative region (7.3.2, clause 14). ]" */
1408 if (TREE_CODE (olddecl) != NAMESPACE_DECL
1409 && TREE_CODE (newdecl) != NAMESPACE_DECL
1410 && (TREE_CODE (olddecl) != TEMPLATE_DECL
1411 || TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) != TYPE_DECL)
1412 && (TREE_CODE (newdecl) != TEMPLATE_DECL
1413 || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != TYPE_DECL))
1414 {
1415 if ((TREE_CODE (olddecl) == TYPE_DECL && DECL_ARTIFICIAL (olddecl)
1416 && TREE_CODE (newdecl) != TYPE_DECL)
1417 || (TREE_CODE (newdecl) == TYPE_DECL && DECL_ARTIFICIAL (newdecl)
1418 && TREE_CODE (olddecl) != TYPE_DECL))
1419 {
1420 /* We do nothing special here, because C++ does such nasty
1421 things with TYPE_DECLs. Instead, just let the TYPE_DECL
1422 get shadowed, and know that if we need to find a TYPE_DECL
1423 for a given name, we can look in the IDENTIFIER_TYPE_VALUE
1424 slot of the identifier. */
1425 return NULL_TREE;
1426 }
1427
1428 if ((TREE_CODE (newdecl) == FUNCTION_DECL
1429 && DECL_FUNCTION_TEMPLATE_P (olddecl))
1430 || (TREE_CODE (olddecl) == FUNCTION_DECL
1431 && DECL_FUNCTION_TEMPLATE_P (newdecl)))
1432 return NULL_TREE;
1433 }
1434
1435 error ("%q#D redeclared as different kind of symbol", newdecl);
1436 if (TREE_CODE (olddecl) == TREE_LIST)
1437 olddecl = TREE_VALUE (olddecl);
1438 error ("previous declaration of %q+#D", olddecl);
1439
1440 return error_mark_node;
1441 }
1442 else if (!types_match)
1443 {
1444 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl))
1445 /* These are certainly not duplicate declarations; they're
1446 from different scopes. */
1447 return NULL_TREE;
1448
1449 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1450 {
1451 /* The name of a class template may not be declared to refer to
1452 any other template, class, function, object, namespace, value,
1453 or type in the same scope. */
1454 if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == TYPE_DECL
1455 || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
1456 {
1457 error ("declaration of template %q#D", newdecl);
1458 error ("conflicts with previous declaration %q+#D", olddecl);
1459 }
1460 else if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == FUNCTION_DECL
1461 && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
1462 && compparms (TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl))),
1463 TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl))))
1464 && comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
1465 DECL_TEMPLATE_PARMS (olddecl))
1466 /* Template functions can be disambiguated by
1467 return type. */
1468 && same_type_p (TREE_TYPE (TREE_TYPE (newdecl)),
1469 TREE_TYPE (TREE_TYPE (olddecl))))
1470 {
1471 error ("new declaration %q#D", newdecl);
1472 error ("ambiguates old declaration %q+#D", olddecl);
1473 }
1474 return NULL_TREE;
1475 }
1476 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1477 {
1478 if (DECL_EXTERN_C_P (newdecl) && DECL_EXTERN_C_P (olddecl))
1479 {
1480 error ("declaration of C function %q#D conflicts with",
1481 newdecl);
1482 error ("previous declaration %q+#D here", olddecl);
1483 return NULL_TREE;
1484 }
1485 else if (compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1486 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
1487 {
1488 error ("new declaration %q#D", newdecl);
1489 error ("ambiguates old declaration %q+#D", olddecl);
1490 return error_mark_node;
1491 }
1492 else
1493 return NULL_TREE;
1494 }
1495 else
1496 {
1497 error ("conflicting declaration %q#D", newdecl);
1498 error ("%q+D has a previous declaration as %q#D", olddecl, olddecl);
1499 return error_mark_node;
1500 }
1501 }
1502 else if (TREE_CODE (newdecl) == FUNCTION_DECL
1503 && ((DECL_TEMPLATE_SPECIALIZATION (olddecl)
1504 && (!DECL_TEMPLATE_INFO (newdecl)
1505 || (DECL_TI_TEMPLATE (newdecl)
1506 != DECL_TI_TEMPLATE (olddecl))))
1507 || (DECL_TEMPLATE_SPECIALIZATION (newdecl)
1508 && (!DECL_TEMPLATE_INFO (olddecl)
1509 || (DECL_TI_TEMPLATE (olddecl)
1510 != DECL_TI_TEMPLATE (newdecl))))))
1511 /* It's OK to have a template specialization and a non-template
1512 with the same type, or to have specializations of two
1513 different templates with the same type. Note that if one is a
1514 specialization, and the other is an instantiation of the same
1515 template, that we do not exit at this point. That situation
1516 can occur if we instantiate a template class, and then
1517 specialize one of its methods. This situation is valid, but
1518 the declarations must be merged in the usual way. */
1519 return NULL_TREE;
1520 else if (TREE_CODE (newdecl) == FUNCTION_DECL
1521 && ((DECL_TEMPLATE_INSTANTIATION (olddecl)
1522 && !DECL_USE_TEMPLATE (newdecl))
1523 || (DECL_TEMPLATE_INSTANTIATION (newdecl)
1524 && !DECL_USE_TEMPLATE (olddecl))))
1525 /* One of the declarations is a template instantiation, and the
1526 other is not a template at all. That's OK. */
1527 return NULL_TREE;
1528 else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
1529 {
1530 /* In [namespace.alias] we have:
1531
1532 In a declarative region, a namespace-alias-definition can be
1533 used to redefine a namespace-alias declared in that declarative
1534 region to refer only to the namespace to which it already
1535 refers.
1536
1537 Therefore, if we encounter a second alias directive for the same
1538 alias, we can just ignore the second directive. */
1539 if (DECL_NAMESPACE_ALIAS (newdecl)
1540 && (DECL_NAMESPACE_ALIAS (newdecl)
1541 == DECL_NAMESPACE_ALIAS (olddecl)))
1542 return olddecl;
1543 /* [namespace.alias]
1544
1545 A namespace-name or namespace-alias shall not be declared as
1546 the name of any other entity in the same declarative region.
1547 A namespace-name defined at global scope shall not be
1548 declared as the name of any other entity in any global scope
1549 of the program. */
1550 error ("declaration of namespace %qD conflicts with", newdecl);
1551 error ("previous declaration of namespace %q+D here", olddecl);
1552 return error_mark_node;
1553 }
1554 else
1555 {
1556 const char *errmsg = redeclaration_error_message (newdecl, olddecl);
1557 if (errmsg)
1558 {
1559 error_at (DECL_SOURCE_LOCATION (newdecl), errmsg, newdecl);
1560 if (DECL_NAME (olddecl) != NULL_TREE)
1561 error ((DECL_INITIAL (olddecl) && namespace_bindings_p ())
1562 ? G_("%q+#D previously defined here")
1563 : G_("%q+#D previously declared here"), olddecl);
1564 return error_mark_node;
1565 }
1566 else if (TREE_CODE (olddecl) == FUNCTION_DECL
1567 && DECL_INITIAL (olddecl) != NULL_TREE
1568 && !prototype_p (TREE_TYPE (olddecl))
1569 && prototype_p (TREE_TYPE (newdecl)))
1570 {
1571 /* Prototype decl follows defn w/o prototype. */
1572 warning_at (input_location, 0, "prototype for %q+#D", newdecl);
1573 warning_at (DECL_SOURCE_LOCATION (olddecl), 0,
1574 "follows non-prototype definition here");
1575 }
1576 else if ((TREE_CODE (olddecl) == FUNCTION_DECL
1577 || TREE_CODE (olddecl) == VAR_DECL)
1578 && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl))
1579 {
1580 /* [dcl.link]
1581 If two declarations of the same function or object
1582 specify different linkage-specifications ..., the program
1583 is ill-formed.... Except for functions with C++ linkage,
1584 a function declaration without a linkage specification
1585 shall not precede the first linkage specification for
1586 that function. A function can be declared without a
1587 linkage specification after an explicit linkage
1588 specification has been seen; the linkage explicitly
1589 specified in the earlier declaration is not affected by
1590 such a function declaration.
1591
1592 DR 563 raises the question why the restrictions on
1593 functions should not also apply to objects. Older
1594 versions of G++ silently ignore the linkage-specification
1595 for this example:
1596
1597 namespace N {
1598 extern int i;
1599 extern "C" int i;
1600 }
1601
1602 which is clearly wrong. Therefore, we now treat objects
1603 like functions. */
1604 if (current_lang_depth () == 0)
1605 {
1606 /* There is no explicit linkage-specification, so we use
1607 the linkage from the previous declaration. */
1608 if (!DECL_LANG_SPECIFIC (newdecl))
1609 retrofit_lang_decl (newdecl);
1610 SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
1611 }
1612 else
1613 {
1614 error ("previous declaration of %q+#D with %qL linkage",
1615 olddecl, DECL_LANGUAGE (olddecl));
1616 error ("conflicts with new declaration with %qL linkage",
1617 DECL_LANGUAGE (newdecl));
1618 }
1619 }
1620
1621 if (DECL_LANG_SPECIFIC (olddecl) && DECL_USE_TEMPLATE (olddecl))
1622 ;
1623 else if (TREE_CODE (olddecl) == FUNCTION_DECL)
1624 {
1625 tree t1 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1626 tree t2 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
1627 int i = 1;
1628
1629 if (TREE_CODE (TREE_TYPE (newdecl)) == METHOD_TYPE)
1630 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2);
1631
1632 for (; t1 && t1 != void_list_node;
1633 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2), i++)
1634 if (TREE_PURPOSE (t1) && TREE_PURPOSE (t2))
1635 {
1636 if (1 == simple_cst_equal (TREE_PURPOSE (t1),
1637 TREE_PURPOSE (t2)))
1638 {
1639 permerror (input_location, "default argument given for parameter %d of %q#D",
1640 i, newdecl);
1641 permerror (input_location, "after previous specification in %q+#D", olddecl);
1642 }
1643 else
1644 {
1645 error ("default argument given for parameter %d of %q#D",
1646 i, newdecl);
1647 error ("after previous specification in %q+#D",
1648 olddecl);
1649 }
1650 }
1651 }
1652 }
1653
1654 /* Do not merge an implicit typedef with an explicit one. In:
1655
1656 class A;
1657 ...
1658 typedef class A A __attribute__ ((foo));
1659
1660 the attribute should apply only to the typedef. */
1661 if (TREE_CODE (olddecl) == TYPE_DECL
1662 && (DECL_IMPLICIT_TYPEDEF_P (olddecl)
1663 || DECL_IMPLICIT_TYPEDEF_P (newdecl)))
1664 return NULL_TREE;
1665
1666 /* If new decl is `static' and an `extern' was seen previously,
1667 warn about it. */
1668 warn_extern_redeclared_static (newdecl, olddecl);
1669
1670 if (!validate_constexpr_redeclaration (olddecl, newdecl))
1671 return error_mark_node;
1672
1673 /* We have committed to returning 1 at this point. */
1674 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1675 {
1676 /* Now that functions must hold information normally held
1677 by field decls, there is extra work to do so that
1678 declaration information does not get destroyed during
1679 definition. */
1680 if (DECL_VINDEX (olddecl))
1681 DECL_VINDEX (newdecl) = DECL_VINDEX (olddecl);
1682 if (DECL_CONTEXT (olddecl))
1683 DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
1684 DECL_STATIC_CONSTRUCTOR (newdecl) |= DECL_STATIC_CONSTRUCTOR (olddecl);
1685 DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
1686 DECL_PURE_VIRTUAL_P (newdecl) |= DECL_PURE_VIRTUAL_P (olddecl);
1687 DECL_VIRTUAL_P (newdecl) |= DECL_VIRTUAL_P (olddecl);
1688 DECL_INVALID_OVERRIDER_P (newdecl) |= DECL_INVALID_OVERRIDER_P (olddecl);
1689 DECL_THIS_STATIC (newdecl) |= DECL_THIS_STATIC (olddecl);
1690 if (DECL_OVERLOADED_OPERATOR_P (olddecl) != ERROR_MARK)
1691 SET_OVERLOADED_OPERATOR_CODE
1692 (newdecl, DECL_OVERLOADED_OPERATOR_P (olddecl));
1693 new_defines_function = DECL_INITIAL (newdecl) != NULL_TREE;
1694
1695 /* Optionally warn about more than one declaration for the same
1696 name, but don't warn about a function declaration followed by a
1697 definition. */
1698 if (warn_redundant_decls && ! DECL_ARTIFICIAL (olddecl)
1699 && !(new_defines_function && DECL_INITIAL (olddecl) == NULL_TREE)
1700 /* Don't warn about extern decl followed by definition. */
1701 && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl))
1702 /* Don't warn about friends, let add_friend take care of it. */
1703 && ! (newdecl_is_friend || DECL_FRIEND_P (olddecl))
1704 /* Don't warn about declaration followed by specialization. */
1705 && (! DECL_TEMPLATE_SPECIALIZATION (newdecl)
1706 || DECL_TEMPLATE_SPECIALIZATION (olddecl)))
1707 {
1708 warning (OPT_Wredundant_decls, "redundant redeclaration of %qD in same scope", newdecl);
1709 warning (OPT_Wredundant_decls, "previous declaration of %q+D", olddecl);
1710 }
1711
1712 if (DECL_DELETED_FN (newdecl))
1713 {
1714 error ("deleted definition of %qD", newdecl);
1715 error ("after previous declaration %q+D", olddecl);
1716 }
1717 DECL_DELETED_FN (newdecl) |= DECL_DELETED_FN (olddecl);
1718 }
1719
1720 /* Deal with C++: must preserve virtual function table size. */
1721 if (TREE_CODE (olddecl) == TYPE_DECL)
1722 {
1723 tree newtype = TREE_TYPE (newdecl);
1724 tree oldtype = TREE_TYPE (olddecl);
1725
1726 if (newtype != error_mark_node && oldtype != error_mark_node
1727 && TYPE_LANG_SPECIFIC (newtype) && TYPE_LANG_SPECIFIC (oldtype))
1728 CLASSTYPE_FRIEND_CLASSES (newtype)
1729 = CLASSTYPE_FRIEND_CLASSES (oldtype);
1730
1731 DECL_ORIGINAL_TYPE (newdecl) = DECL_ORIGINAL_TYPE (olddecl);
1732 }
1733
1734 /* Copy all the DECL_... slots specified in the new decl
1735 except for any that we copy here from the old type. */
1736 DECL_ATTRIBUTES (newdecl)
1737 = (*targetm.merge_decl_attributes) (olddecl, newdecl);
1738
1739 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1740 {
1741 tree old_result;
1742 tree new_result;
1743 old_result = DECL_TEMPLATE_RESULT (olddecl);
1744 new_result = DECL_TEMPLATE_RESULT (newdecl);
1745 TREE_TYPE (olddecl) = TREE_TYPE (old_result);
1746 DECL_TEMPLATE_SPECIALIZATIONS (olddecl)
1747 = chainon (DECL_TEMPLATE_SPECIALIZATIONS (olddecl),
1748 DECL_TEMPLATE_SPECIALIZATIONS (newdecl));
1749
1750 DECL_ATTRIBUTES (old_result)
1751 = (*targetm.merge_decl_attributes) (old_result, new_result);
1752
1753 if (DECL_FUNCTION_TEMPLATE_P (newdecl))
1754 {
1755 if (GNU_INLINE_P (old_result) != GNU_INLINE_P (new_result)
1756 && DECL_INITIAL (new_result))
1757 {
1758 if (DECL_INITIAL (old_result))
1759 DECL_UNINLINABLE (old_result) = 1;
1760 else
1761 DECL_UNINLINABLE (old_result) = DECL_UNINLINABLE (new_result);
1762 DECL_EXTERNAL (old_result) = DECL_EXTERNAL (new_result);
1763 DECL_NOT_REALLY_EXTERN (old_result)
1764 = DECL_NOT_REALLY_EXTERN (new_result);
1765 DECL_INTERFACE_KNOWN (old_result)
1766 = DECL_INTERFACE_KNOWN (new_result);
1767 DECL_DECLARED_INLINE_P (old_result)
1768 = DECL_DECLARED_INLINE_P (new_result);
1769 DECL_DISREGARD_INLINE_LIMITS (old_result)
1770 |= DECL_DISREGARD_INLINE_LIMITS (new_result);
1771
1772 }
1773 else
1774 {
1775 DECL_DECLARED_INLINE_P (old_result)
1776 |= DECL_DECLARED_INLINE_P (new_result);
1777 DECL_DISREGARD_INLINE_LIMITS (old_result)
1778 |= DECL_DISREGARD_INLINE_LIMITS (new_result);
1779 check_redeclaration_exception_specification (newdecl, olddecl);
1780 }
1781 }
1782
1783 /* If the new declaration is a definition, update the file and
1784 line information on the declaration, and also make
1785 the old declaration the same definition. */
1786 if (DECL_INITIAL (new_result) != NULL_TREE)
1787 {
1788 DECL_SOURCE_LOCATION (olddecl)
1789 = DECL_SOURCE_LOCATION (old_result)
1790 = DECL_SOURCE_LOCATION (newdecl);
1791 DECL_INITIAL (old_result) = DECL_INITIAL (new_result);
1792 if (DECL_FUNCTION_TEMPLATE_P (newdecl))
1793 {
1794 tree parm;
1795 DECL_ARGUMENTS (old_result)
1796 = DECL_ARGUMENTS (new_result);
1797 for (parm = DECL_ARGUMENTS (old_result); parm;
1798 parm = DECL_CHAIN (parm))
1799 DECL_CONTEXT (parm) = old_result;
1800 }
1801 }
1802
1803 return olddecl;
1804 }
1805
1806 if (types_match)
1807 {
1808 /* Automatically handles default parameters. */
1809 tree oldtype = TREE_TYPE (olddecl);
1810 tree newtype;
1811
1812 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1813 maybe_instantiate_noexcept (olddecl);
1814
1815 /* Merge the data types specified in the two decls. */
1816 newtype = merge_types (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
1817
1818 /* If merge_types produces a non-typedef type, just use the old type. */
1819 if (TREE_CODE (newdecl) == TYPE_DECL
1820 && newtype == DECL_ORIGINAL_TYPE (newdecl))
1821 newtype = oldtype;
1822
1823 if (TREE_CODE (newdecl) == VAR_DECL)
1824 {
1825 DECL_THIS_EXTERN (newdecl) |= DECL_THIS_EXTERN (olddecl);
1826 DECL_INITIALIZED_P (newdecl) |= DECL_INITIALIZED_P (olddecl);
1827 DECL_NONTRIVIALLY_INITIALIZED_P (newdecl)
1828 |= DECL_NONTRIVIALLY_INITIALIZED_P (olddecl);
1829 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (newdecl)
1830 |= DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (olddecl);
1831
1832 /* Merge the threadprivate attribute from OLDDECL into NEWDECL. */
1833 if (DECL_LANG_SPECIFIC (olddecl)
1834 && CP_DECL_THREADPRIVATE_P (olddecl))
1835 {
1836 /* Allocate a LANG_SPECIFIC structure for NEWDECL, if needed. */
1837 if (!DECL_LANG_SPECIFIC (newdecl))
1838 retrofit_lang_decl (newdecl);
1839
1840 DECL_TLS_MODEL (newdecl) = DECL_TLS_MODEL (olddecl);
1841 CP_DECL_THREADPRIVATE_P (newdecl) = 1;
1842 }
1843 }
1844
1845 /* Do this after calling `merge_types' so that default
1846 parameters don't confuse us. */
1847 else if (TREE_CODE (newdecl) == FUNCTION_DECL)
1848 check_redeclaration_exception_specification (newdecl, olddecl);
1849 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
1850
1851 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1852 check_default_args (newdecl);
1853
1854 /* Lay the type out, unless already done. */
1855 if (! same_type_p (newtype, oldtype)
1856 && TREE_TYPE (newdecl) != error_mark_node
1857 && !(processing_template_decl && uses_template_parms (newdecl)))
1858 layout_type (TREE_TYPE (newdecl));
1859
1860 if ((TREE_CODE (newdecl) == VAR_DECL
1861 || TREE_CODE (newdecl) == PARM_DECL
1862 || TREE_CODE (newdecl) == RESULT_DECL
1863 || TREE_CODE (newdecl) == FIELD_DECL
1864 || TREE_CODE (newdecl) == TYPE_DECL)
1865 && !(processing_template_decl && uses_template_parms (newdecl)))
1866 layout_decl (newdecl, 0);
1867
1868 /* Merge the type qualifiers. */
1869 if (TREE_READONLY (newdecl))
1870 TREE_READONLY (olddecl) = 1;
1871 if (TREE_THIS_VOLATILE (newdecl))
1872 TREE_THIS_VOLATILE (olddecl) = 1;
1873 if (TREE_NOTHROW (newdecl))
1874 TREE_NOTHROW (olddecl) = 1;
1875
1876 /* Merge deprecatedness. */
1877 if (TREE_DEPRECATED (newdecl))
1878 TREE_DEPRECATED (olddecl) = 1;
1879
1880 /* Preserve function specific target and optimization options */
1881 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1882 {
1883 if (DECL_FUNCTION_SPECIFIC_TARGET (olddecl)
1884 && !DECL_FUNCTION_SPECIFIC_TARGET (newdecl))
1885 DECL_FUNCTION_SPECIFIC_TARGET (newdecl)
1886 = DECL_FUNCTION_SPECIFIC_TARGET (olddecl);
1887
1888 if (DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl)
1889 && !DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl))
1890 DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl)
1891 = DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl);
1892 }
1893
1894 /* Merge the initialization information. */
1895 if (DECL_INITIAL (newdecl) == NULL_TREE
1896 && DECL_INITIAL (olddecl) != NULL_TREE)
1897 {
1898 DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
1899 DECL_SOURCE_LOCATION (newdecl) = DECL_SOURCE_LOCATION (olddecl);
1900 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1901 {
1902 DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
1903 DECL_STRUCT_FUNCTION (newdecl) = DECL_STRUCT_FUNCTION (olddecl);
1904 }
1905 }
1906
1907 /* Merge the section attribute.
1908 We want to issue an error if the sections conflict but that must be
1909 done later in decl_attributes since we are called before attributes
1910 are assigned. */
1911 if (DECL_SECTION_NAME (newdecl) == NULL_TREE)
1912 DECL_SECTION_NAME (newdecl) = DECL_SECTION_NAME (olddecl);
1913
1914 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1915 {
1916 DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (newdecl)
1917 |= DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (olddecl);
1918 DECL_NO_LIMIT_STACK (newdecl) |= DECL_NO_LIMIT_STACK (olddecl);
1919 TREE_THIS_VOLATILE (newdecl) |= TREE_THIS_VOLATILE (olddecl);
1920 TREE_NOTHROW (newdecl) |= TREE_NOTHROW (olddecl);
1921 DECL_IS_MALLOC (newdecl) |= DECL_IS_MALLOC (olddecl);
1922 DECL_IS_OPERATOR_NEW (newdecl) |= DECL_IS_OPERATOR_NEW (olddecl);
1923 DECL_PURE_P (newdecl) |= DECL_PURE_P (olddecl);
1924 TREE_READONLY (newdecl) |= TREE_READONLY (olddecl);
1925 DECL_LOOPING_CONST_OR_PURE_P (newdecl)
1926 |= DECL_LOOPING_CONST_OR_PURE_P (olddecl);
1927 /* Keep the old RTL. */
1928 COPY_DECL_RTL (olddecl, newdecl);
1929 }
1930 else if (TREE_CODE (newdecl) == VAR_DECL
1931 && (DECL_SIZE (olddecl) || !DECL_SIZE (newdecl)))
1932 {
1933 /* Keep the old RTL. We cannot keep the old RTL if the old
1934 declaration was for an incomplete object and the new
1935 declaration is not since many attributes of the RTL will
1936 change. */
1937 COPY_DECL_RTL (olddecl, newdecl);
1938 }
1939 }
1940 /* If cannot merge, then use the new type and qualifiers,
1941 and don't preserve the old rtl. */
1942 else
1943 {
1944 /* Clean out any memory we had of the old declaration. */
1945 tree oldstatic = value_member (olddecl, static_aggregates);
1946 if (oldstatic)
1947 TREE_VALUE (oldstatic) = error_mark_node;
1948
1949 TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
1950 TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
1951 TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
1952 TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
1953 }
1954
1955 /* Merge the storage class information. */
1956 merge_weak (newdecl, olddecl);
1957
1958 if (DECL_ONE_ONLY (olddecl))
1959 DECL_COMDAT_GROUP (newdecl) = DECL_COMDAT_GROUP (olddecl);
1960
1961 DECL_DEFER_OUTPUT (newdecl) |= DECL_DEFER_OUTPUT (olddecl);
1962 TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
1963 TREE_STATIC (olddecl) = TREE_STATIC (newdecl) |= TREE_STATIC (olddecl);
1964 if (! DECL_EXTERNAL (olddecl))
1965 DECL_EXTERNAL (newdecl) = 0;
1966
1967 new_template_info = NULL_TREE;
1968 if (DECL_LANG_SPECIFIC (newdecl) && DECL_LANG_SPECIFIC (olddecl))
1969 {
1970 bool new_redefines_gnu_inline = false;
1971
1972 if (new_defines_function
1973 && ((DECL_INTERFACE_KNOWN (olddecl)
1974 && TREE_CODE (olddecl) == FUNCTION_DECL)
1975 || (TREE_CODE (olddecl) == TEMPLATE_DECL
1976 && (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl))
1977 == FUNCTION_DECL))))
1978 {
1979 tree fn = olddecl;
1980
1981 if (TREE_CODE (fn) == TEMPLATE_DECL)
1982 fn = DECL_TEMPLATE_RESULT (olddecl);
1983
1984 new_redefines_gnu_inline = GNU_INLINE_P (fn) && DECL_INITIAL (fn);
1985 }
1986
1987 if (!new_redefines_gnu_inline)
1988 {
1989 DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl);
1990 DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl);
1991 DECL_COMDAT (newdecl) |= DECL_COMDAT (olddecl);
1992 }
1993 DECL_TEMPLATE_INSTANTIATED (newdecl)
1994 |= DECL_TEMPLATE_INSTANTIATED (olddecl);
1995 DECL_ODR_USED (newdecl) |= DECL_ODR_USED (olddecl);
1996
1997 /* If the OLDDECL is an instantiation and/or specialization,
1998 then the NEWDECL must be too. But, it may not yet be marked
1999 as such if the caller has created NEWDECL, but has not yet
2000 figured out that it is a redeclaration. */
2001 if (!DECL_USE_TEMPLATE (newdecl))
2002 DECL_USE_TEMPLATE (newdecl) = DECL_USE_TEMPLATE (olddecl);
2003
2004 /* Don't really know how much of the language-specific
2005 values we should copy from old to new. */
2006 DECL_IN_AGGR_P (newdecl) = DECL_IN_AGGR_P (olddecl);
2007 DECL_REPO_AVAILABLE_P (newdecl) = DECL_REPO_AVAILABLE_P (olddecl);
2008 DECL_INITIALIZED_IN_CLASS_P (newdecl)
2009 |= DECL_INITIALIZED_IN_CLASS_P (olddecl);
2010
2011 if (LANG_DECL_HAS_MIN (newdecl))
2012 {
2013 DECL_LANG_SPECIFIC (newdecl)->u.min.u2 =
2014 DECL_LANG_SPECIFIC (olddecl)->u.min.u2;
2015 if (DECL_TEMPLATE_INFO (newdecl))
2016 new_template_info = DECL_TEMPLATE_INFO (newdecl);
2017 DECL_TEMPLATE_INFO (newdecl) = DECL_TEMPLATE_INFO (olddecl);
2018 }
2019 /* Only functions have these fields. */
2020 if (TREE_CODE (newdecl) == FUNCTION_DECL
2021 || DECL_FUNCTION_TEMPLATE_P (newdecl))
2022 {
2023 DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl);
2024 olddecl_friend = DECL_FRIEND_P (olddecl);
2025 hidden_friend = (DECL_ANTICIPATED (olddecl)
2026 && DECL_HIDDEN_FRIEND_P (olddecl)
2027 && newdecl_is_friend);
2028 DECL_BEFRIENDING_CLASSES (newdecl)
2029 = chainon (DECL_BEFRIENDING_CLASSES (newdecl),
2030 DECL_BEFRIENDING_CLASSES (olddecl));
2031 /* DECL_THUNKS is only valid for virtual functions,
2032 otherwise it is a DECL_FRIEND_CONTEXT. */
2033 if (DECL_VIRTUAL_P (newdecl))
2034 DECL_THUNKS (newdecl) = DECL_THUNKS (olddecl);
2035 }
2036 /* Only variables have this field. */
2037 else if (TREE_CODE (newdecl) == VAR_DECL
2038 && VAR_HAD_UNKNOWN_BOUND (olddecl))
2039 SET_VAR_HAD_UNKNOWN_BOUND (newdecl);
2040 }
2041
2042 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2043 {
2044 tree parm;
2045
2046 /* Merge parameter attributes. */
2047 tree oldarg, newarg;
2048 for (oldarg = DECL_ARGUMENTS(olddecl),
2049 newarg = DECL_ARGUMENTS(newdecl);
2050 oldarg && newarg;
2051 oldarg = DECL_CHAIN(oldarg), newarg = DECL_CHAIN(newarg)) {
2052 DECL_ATTRIBUTES (newarg)
2053 = (*targetm.merge_decl_attributes) (oldarg, newarg);
2054 DECL_ATTRIBUTES (oldarg) = DECL_ATTRIBUTES (newarg);
2055 }
2056
2057 if (DECL_TEMPLATE_INSTANTIATION (olddecl)
2058 && !DECL_TEMPLATE_INSTANTIATION (newdecl))
2059 {
2060 /* If newdecl is not a specialization, then it is not a
2061 template-related function at all. And that means that we
2062 should have exited above, returning 0. */
2063 gcc_assert (DECL_TEMPLATE_SPECIALIZATION (newdecl));
2064
2065 if (DECL_ODR_USED (olddecl))
2066 /* From [temp.expl.spec]:
2067
2068 If a template, a member template or the member of a class
2069 template is explicitly specialized then that
2070 specialization shall be declared before the first use of
2071 that specialization that would cause an implicit
2072 instantiation to take place, in every translation unit in
2073 which such a use occurs. */
2074 error ("explicit specialization of %qD after first use",
2075 olddecl);
2076
2077 SET_DECL_TEMPLATE_SPECIALIZATION (olddecl);
2078
2079 /* Don't propagate visibility from the template to the
2080 specialization here. We'll do that in determine_visibility if
2081 appropriate. */
2082 DECL_VISIBILITY_SPECIFIED (olddecl) = 0;
2083
2084 /* [temp.expl.spec/14] We don't inline explicit specialization
2085 just because the primary template says so. */
2086
2087 /* But still keep DECL_DISREGARD_INLINE_LIMITS in sync with
2088 the always_inline attribute. */
2089 if (DECL_DISREGARD_INLINE_LIMITS (olddecl)
2090 && !DECL_DISREGARD_INLINE_LIMITS (newdecl))
2091 {
2092 if (DECL_DECLARED_INLINE_P (newdecl))
2093 DECL_DISREGARD_INLINE_LIMITS (newdecl) = true;
2094 else
2095 DECL_ATTRIBUTES (newdecl)
2096 = remove_attribute ("always_inline",
2097 DECL_ATTRIBUTES (newdecl));
2098 }
2099 }
2100 else if (new_defines_function && DECL_INITIAL (olddecl))
2101 {
2102 /* Never inline re-defined extern inline functions.
2103 FIXME: this could be better handled by keeping both
2104 function as separate declarations. */
2105 DECL_UNINLINABLE (newdecl) = 1;
2106 }
2107 else
2108 {
2109 if (DECL_PENDING_INLINE_INFO (newdecl) == 0)
2110 DECL_PENDING_INLINE_INFO (newdecl) = DECL_PENDING_INLINE_INFO (olddecl);
2111
2112 DECL_DECLARED_INLINE_P (newdecl) |= DECL_DECLARED_INLINE_P (olddecl);
2113
2114 DECL_UNINLINABLE (newdecl) = DECL_UNINLINABLE (olddecl)
2115 = (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl));
2116
2117 DECL_DISREGARD_INLINE_LIMITS (newdecl)
2118 = DECL_DISREGARD_INLINE_LIMITS (olddecl)
2119 = (DECL_DISREGARD_INLINE_LIMITS (newdecl)
2120 || DECL_DISREGARD_INLINE_LIMITS (olddecl));
2121 }
2122
2123 /* Preserve abstractness on cloned [cd]tors. */
2124 DECL_ABSTRACT (newdecl) = DECL_ABSTRACT (olddecl);
2125
2126 /* Update newdecl's parms to point at olddecl. */
2127 for (parm = DECL_ARGUMENTS (newdecl); parm;
2128 parm = DECL_CHAIN (parm))
2129 DECL_CONTEXT (parm) = olddecl;
2130
2131 if (! types_match)
2132 {
2133 SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
2134 COPY_DECL_ASSEMBLER_NAME (newdecl, olddecl);
2135 COPY_DECL_RTL (newdecl, olddecl);
2136 }
2137 if (! types_match || new_defines_function)
2138 {
2139 /* These need to be copied so that the names are available.
2140 Note that if the types do match, we'll preserve inline
2141 info and other bits, but if not, we won't. */
2142 DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
2143 DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
2144 }
2145 if (new_defines_function)
2146 /* If defining a function declared with other language
2147 linkage, use the previously declared language linkage. */
2148 SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
2149 else if (types_match)
2150 {
2151 /* If redeclaring a builtin function, and not a definition,
2152 it stays built in. */
2153 if (DECL_BUILT_IN (olddecl))
2154 {
2155 DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
2156 DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
2157 /* If we're keeping the built-in definition, keep the rtl,
2158 regardless of declaration matches. */
2159 COPY_DECL_RTL (olddecl, newdecl);
2160 if (DECL_BUILT_IN_CLASS (newdecl) == BUILT_IN_NORMAL)
2161 {
2162 enum built_in_function fncode = DECL_FUNCTION_CODE (newdecl);
2163 switch (fncode)
2164 {
2165 /* If a compatible prototype of these builtin functions
2166 is seen, assume the runtime implements it with the
2167 expected semantics. */
2168 case BUILT_IN_STPCPY:
2169 if (builtin_decl_explicit_p (fncode))
2170 set_builtin_decl_implicit_p (fncode, true);
2171 break;
2172 default:
2173 break;
2174 }
2175 }
2176 }
2177
2178 DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
2179 /* Don't clear out the arguments if we're just redeclaring a
2180 function. */
2181 if (DECL_ARGUMENTS (olddecl))
2182 DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
2183 }
2184 }
2185 else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
2186 NAMESPACE_LEVEL (newdecl) = NAMESPACE_LEVEL (olddecl);
2187
2188 /* Now preserve various other info from the definition. */
2189 TREE_ADDRESSABLE (newdecl) = TREE_ADDRESSABLE (olddecl);
2190 TREE_ASM_WRITTEN (newdecl) = TREE_ASM_WRITTEN (olddecl);
2191 DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
2192 COPY_DECL_ASSEMBLER_NAME (olddecl, newdecl);
2193
2194 /* Warn about conflicting visibility specifications. */
2195 if (DECL_VISIBILITY_SPECIFIED (olddecl)
2196 && DECL_VISIBILITY_SPECIFIED (newdecl)
2197 && DECL_VISIBILITY (newdecl) != DECL_VISIBILITY (olddecl))
2198 {
2199 warning_at (input_location, OPT_Wattributes,
2200 "%q+D: visibility attribute ignored because it", newdecl);
2201 warning_at (DECL_SOURCE_LOCATION (olddecl), OPT_Wattributes,
2202 "conflicts with previous declaration here");
2203 }
2204 /* Choose the declaration which specified visibility. */
2205 if (DECL_VISIBILITY_SPECIFIED (olddecl))
2206 {
2207 DECL_VISIBILITY (newdecl) = DECL_VISIBILITY (olddecl);
2208 DECL_VISIBILITY_SPECIFIED (newdecl) = 1;
2209 }
2210 /* Init priority used to be merged from newdecl to olddecl by the memcpy,
2211 so keep this behavior. */
2212 if (TREE_CODE (newdecl) == VAR_DECL && DECL_HAS_INIT_PRIORITY_P (newdecl))
2213 {
2214 SET_DECL_INIT_PRIORITY (olddecl, DECL_INIT_PRIORITY (newdecl));
2215 DECL_HAS_INIT_PRIORITY_P (olddecl) = 1;
2216 }
2217 /* Likewise for DECL_ALIGN, DECL_USER_ALIGN and DECL_PACKED. */
2218 if (DECL_ALIGN (olddecl) > DECL_ALIGN (newdecl))
2219 {
2220 DECL_ALIGN (newdecl) = DECL_ALIGN (olddecl);
2221 DECL_USER_ALIGN (newdecl) |= DECL_USER_ALIGN (olddecl);
2222 }
2223 DECL_USER_ALIGN (olddecl) = DECL_USER_ALIGN (newdecl);
2224 if (TREE_CODE (newdecl) == FIELD_DECL)
2225 DECL_PACKED (olddecl) = DECL_PACKED (newdecl);
2226
2227 /* The DECL_LANG_SPECIFIC information in OLDDECL will be replaced
2228 with that from NEWDECL below. */
2229 if (DECL_LANG_SPECIFIC (olddecl))
2230 {
2231 gcc_assert (DECL_LANG_SPECIFIC (olddecl)
2232 != DECL_LANG_SPECIFIC (newdecl));
2233 ggc_free (DECL_LANG_SPECIFIC (olddecl));
2234 }
2235
2236 /* Merge the USED information. */
2237 if (TREE_USED (olddecl))
2238 TREE_USED (newdecl) = 1;
2239 else if (TREE_USED (newdecl))
2240 TREE_USED (olddecl) = 1;
2241 if (TREE_CODE (newdecl) == VAR_DECL)
2242 {
2243 if (DECL_READ_P (olddecl))
2244 DECL_READ_P (newdecl) = 1;
2245 else if (DECL_READ_P (newdecl))
2246 DECL_READ_P (olddecl) = 1;
2247 }
2248 if (DECL_PRESERVE_P (olddecl))
2249 DECL_PRESERVE_P (newdecl) = 1;
2250 else if (DECL_PRESERVE_P (newdecl))
2251 DECL_PRESERVE_P (olddecl) = 1;
2252
2253 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2254 {
2255 int function_size;
2256
2257 function_size = sizeof (struct tree_decl_common);
2258
2259 memcpy ((char *) olddecl + sizeof (struct tree_common),
2260 (char *) newdecl + sizeof (struct tree_common),
2261 function_size - sizeof (struct tree_common));
2262
2263 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2264 (char *) newdecl + sizeof (struct tree_decl_common),
2265 sizeof (struct tree_function_decl) - sizeof (struct tree_decl_common));
2266 if (new_template_info)
2267 /* If newdecl is a template instantiation, it is possible that
2268 the following sequence of events has occurred:
2269
2270 o A friend function was declared in a class template. The
2271 class template was instantiated.
2272
2273 o The instantiation of the friend declaration was
2274 recorded on the instantiation list, and is newdecl.
2275
2276 o Later, however, instantiate_class_template called pushdecl
2277 on the newdecl to perform name injection. But, pushdecl in
2278 turn called duplicate_decls when it discovered that another
2279 declaration of a global function with the same name already
2280 existed.
2281
2282 o Here, in duplicate_decls, we decided to clobber newdecl.
2283
2284 If we're going to do that, we'd better make sure that
2285 olddecl, and not newdecl, is on the list of
2286 instantiations so that if we try to do the instantiation
2287 again we won't get the clobbered declaration. */
2288 reregister_specialization (newdecl,
2289 new_template_info,
2290 olddecl);
2291 }
2292 else
2293 {
2294 size_t size = tree_code_size (TREE_CODE (olddecl));
2295 memcpy ((char *) olddecl + sizeof (struct tree_common),
2296 (char *) newdecl + sizeof (struct tree_common),
2297 sizeof (struct tree_decl_common) - sizeof (struct tree_common));
2298 switch (TREE_CODE (olddecl))
2299 {
2300 case LABEL_DECL:
2301 case VAR_DECL:
2302 case RESULT_DECL:
2303 case PARM_DECL:
2304 case FIELD_DECL:
2305 case TYPE_DECL:
2306 case CONST_DECL:
2307 {
2308 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2309 (char *) newdecl + sizeof (struct tree_decl_common),
2310 size - sizeof (struct tree_decl_common)
2311 + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
2312 }
2313 break;
2314 default:
2315 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2316 (char *) newdecl + sizeof (struct tree_decl_common),
2317 sizeof (struct tree_decl_non_common) - sizeof (struct tree_decl_common)
2318 + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
2319 break;
2320 }
2321 }
2322 DECL_UID (olddecl) = olddecl_uid;
2323 if (olddecl_friend)
2324 DECL_FRIEND_P (olddecl) = 1;
2325 if (hidden_friend)
2326 {
2327 DECL_ANTICIPATED (olddecl) = 1;
2328 DECL_HIDDEN_FRIEND_P (olddecl) = 1;
2329 }
2330
2331 /* NEWDECL contains the merged attribute lists.
2332 Update OLDDECL to be the same. */
2333 DECL_ATTRIBUTES (olddecl) = DECL_ATTRIBUTES (newdecl);
2334
2335 /* If OLDDECL had its DECL_RTL instantiated, re-invoke make_decl_rtl
2336 so that encode_section_info has a chance to look at the new decl
2337 flags and attributes. */
2338 if (DECL_RTL_SET_P (olddecl)
2339 && (TREE_CODE (olddecl) == FUNCTION_DECL
2340 || (TREE_CODE (olddecl) == VAR_DECL
2341 && TREE_STATIC (olddecl))))
2342 make_decl_rtl (olddecl);
2343
2344 /* The NEWDECL will no longer be needed. Because every out-of-class
2345 declaration of a member results in a call to duplicate_decls,
2346 freeing these nodes represents in a significant savings. */
2347 ggc_free (newdecl);
2348
2349 return olddecl;
2350 }
2351 \f
2352 /* Return zero if the declaration NEWDECL is valid
2353 when the declaration OLDDECL (assumed to be for the same name)
2354 has already been seen.
2355 Otherwise return an error message format string with a %s
2356 where the identifier should go. */
2357
2358 static const char *
2359 redeclaration_error_message (tree newdecl, tree olddecl)
2360 {
2361 if (TREE_CODE (newdecl) == TYPE_DECL)
2362 {
2363 /* Because C++ can put things into name space for free,
2364 constructs like "typedef struct foo { ... } foo"
2365 would look like an erroneous redeclaration. */
2366 if (same_type_p (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
2367 return NULL;
2368 else
2369 return G_("redefinition of %q#D");
2370 }
2371 else if (TREE_CODE (newdecl) == FUNCTION_DECL)
2372 {
2373 /* If this is a pure function, its olddecl will actually be
2374 the original initialization to `0' (which we force to call
2375 abort()). Don't complain about redefinition in this case. */
2376 if (DECL_LANG_SPECIFIC (olddecl) && DECL_PURE_VIRTUAL_P (olddecl)
2377 && DECL_INITIAL (olddecl) == NULL_TREE)
2378 return NULL;
2379
2380 /* If both functions come from different namespaces, this is not
2381 a redeclaration - this is a conflict with a used function. */
2382 if (DECL_NAMESPACE_SCOPE_P (olddecl)
2383 && DECL_CONTEXT (olddecl) != DECL_CONTEXT (newdecl)
2384 && ! decls_match (olddecl, newdecl))
2385 return G_("%qD conflicts with used function");
2386
2387 /* We'll complain about linkage mismatches in
2388 warn_extern_redeclared_static. */
2389
2390 /* Defining the same name twice is no good. */
2391 if (DECL_INITIAL (olddecl) != NULL_TREE
2392 && DECL_INITIAL (newdecl) != NULL_TREE)
2393 {
2394 if (DECL_NAME (olddecl) == NULL_TREE)
2395 return G_("%q#D not declared in class");
2396 else if (!GNU_INLINE_P (olddecl)
2397 || GNU_INLINE_P (newdecl))
2398 return G_("redefinition of %q#D");
2399 }
2400
2401 if (DECL_DECLARED_INLINE_P (olddecl) && DECL_DECLARED_INLINE_P (newdecl))
2402 {
2403 bool olda = GNU_INLINE_P (olddecl);
2404 bool newa = GNU_INLINE_P (newdecl);
2405
2406 if (olda != newa)
2407 {
2408 if (newa)
2409 return G_("%q+D redeclared inline with "
2410 "%<gnu_inline%> attribute");
2411 else
2412 return G_("%q+D redeclared inline without "
2413 "%<gnu_inline%> attribute");
2414 }
2415 }
2416
2417 return NULL;
2418 }
2419 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
2420 {
2421 tree nt, ot;
2422
2423 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
2424 {
2425 if (COMPLETE_TYPE_P (TREE_TYPE (newdecl))
2426 && COMPLETE_TYPE_P (TREE_TYPE (olddecl)))
2427 return G_("redefinition of %q#D");
2428 return NULL;
2429 }
2430
2431 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != FUNCTION_DECL
2432 || (DECL_TEMPLATE_RESULT (newdecl)
2433 == DECL_TEMPLATE_RESULT (olddecl)))
2434 return NULL;
2435
2436 nt = DECL_TEMPLATE_RESULT (newdecl);
2437 if (DECL_TEMPLATE_INFO (nt))
2438 nt = DECL_TEMPLATE_RESULT (template_for_substitution (nt));
2439 ot = DECL_TEMPLATE_RESULT (olddecl);
2440 if (DECL_TEMPLATE_INFO (ot))
2441 ot = DECL_TEMPLATE_RESULT (template_for_substitution (ot));
2442 if (DECL_INITIAL (nt) && DECL_INITIAL (ot)
2443 && (!GNU_INLINE_P (ot) || GNU_INLINE_P (nt)))
2444 return G_("redefinition of %q#D");
2445
2446 if (DECL_DECLARED_INLINE_P (ot) && DECL_DECLARED_INLINE_P (nt))
2447 {
2448 bool olda = GNU_INLINE_P (ot);
2449 bool newa = GNU_INLINE_P (nt);
2450
2451 if (olda != newa)
2452 {
2453 if (newa)
2454 return G_("%q+D redeclared inline with "
2455 "%<gnu_inline%> attribute");
2456 else
2457 return G_("%q+D redeclared inline without "
2458 "%<gnu_inline%> attribute");
2459 }
2460 }
2461
2462 /* Core issue #226 (C++0x):
2463
2464 If a friend function template declaration specifies a
2465 default template-argument, that declaration shall be a
2466 definition and shall be the only declaration of the
2467 function template in the translation unit. */
2468 if ((cxx_dialect != cxx98)
2469 && TREE_CODE (ot) == FUNCTION_DECL && DECL_FRIEND_P (ot)
2470 && !check_default_tmpl_args (nt, DECL_TEMPLATE_PARMS (newdecl),
2471 /*is_primary=*/1, /*is_partial=*/0,
2472 /*is_friend_decl=*/2))
2473 return G_("redeclaration of friend %q#D "
2474 "may not have default template arguments");
2475
2476 return NULL;
2477 }
2478 else if (TREE_CODE (newdecl) == VAR_DECL
2479 && DECL_THREAD_LOCAL_P (newdecl) != DECL_THREAD_LOCAL_P (olddecl)
2480 && (! DECL_LANG_SPECIFIC (olddecl)
2481 || ! CP_DECL_THREADPRIVATE_P (olddecl)
2482 || DECL_THREAD_LOCAL_P (newdecl)))
2483 {
2484 /* Only variables can be thread-local, and all declarations must
2485 agree on this property. */
2486 if (DECL_THREAD_LOCAL_P (newdecl))
2487 return G_("thread-local declaration of %q#D follows "
2488 "non-thread-local declaration");
2489 else
2490 return G_("non-thread-local declaration of %q#D follows "
2491 "thread-local declaration");
2492 }
2493 else if (toplevel_bindings_p () || DECL_NAMESPACE_SCOPE_P (newdecl))
2494 {
2495 /* The objects have been declared at namespace scope. If either
2496 is a member of an anonymous union, then this is an invalid
2497 redeclaration. For example:
2498
2499 int i;
2500 union { int i; };
2501
2502 is invalid. */
2503 if ((TREE_CODE (newdecl) == VAR_DECL && DECL_ANON_UNION_VAR_P (newdecl))
2504 || (TREE_CODE (olddecl) == VAR_DECL && DECL_ANON_UNION_VAR_P (olddecl)))
2505 return G_("redeclaration of %q#D");
2506 /* If at least one declaration is a reference, there is no
2507 conflict. For example:
2508
2509 int i = 3;
2510 extern int i;
2511
2512 is valid. */
2513 if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl))
2514 return NULL;
2515 /* Reject two definitions. */
2516 return G_("redefinition of %q#D");
2517 }
2518 else
2519 {
2520 /* Objects declared with block scope: */
2521 /* Reject two definitions, and reject a definition
2522 together with an external reference. */
2523 if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl)))
2524 return G_("redeclaration of %q#D");
2525 return NULL;
2526 }
2527 }
2528 \f
2529 /* Hash and equality functions for the named_label table. */
2530
2531 static hashval_t
2532 named_label_entry_hash (const void *data)
2533 {
2534 const struct named_label_entry *ent = (const struct named_label_entry *) data;
2535 return DECL_UID (ent->label_decl);
2536 }
2537
2538 static int
2539 named_label_entry_eq (const void *a, const void *b)
2540 {
2541 const struct named_label_entry *ent_a = (const struct named_label_entry *) a;
2542 const struct named_label_entry *ent_b = (const struct named_label_entry *) b;
2543 return ent_a->label_decl == ent_b->label_decl;
2544 }
2545
2546 /* Create a new label, named ID. */
2547
2548 static tree
2549 make_label_decl (tree id, int local_p)
2550 {
2551 struct named_label_entry *ent;
2552 void **slot;
2553 tree decl;
2554
2555 decl = build_decl (input_location, LABEL_DECL, id, void_type_node);
2556
2557 DECL_CONTEXT (decl) = current_function_decl;
2558 DECL_MODE (decl) = VOIDmode;
2559 C_DECLARED_LABEL_FLAG (decl) = local_p;
2560
2561 /* Say where one reference is to the label, for the sake of the
2562 error if it is not defined. */
2563 DECL_SOURCE_LOCATION (decl) = input_location;
2564
2565 /* Record the fact that this identifier is bound to this label. */
2566 SET_IDENTIFIER_LABEL_VALUE (id, decl);
2567
2568 /* Create the label htab for the function on demand. */
2569 if (!named_labels)
2570 named_labels = htab_create_ggc (13, named_label_entry_hash,
2571 named_label_entry_eq, NULL);
2572
2573 /* Record this label on the list of labels used in this function.
2574 We do this before calling make_label_decl so that we get the
2575 IDENTIFIER_LABEL_VALUE before the new label is declared. */
2576 ent = ggc_alloc_cleared_named_label_entry ();
2577 ent->label_decl = decl;
2578
2579 slot = htab_find_slot (named_labels, ent, INSERT);
2580 gcc_assert (*slot == NULL);
2581 *slot = ent;
2582
2583 return decl;
2584 }
2585
2586 /* Look for a label named ID in the current function. If one cannot
2587 be found, create one. (We keep track of used, but undefined,
2588 labels, and complain about them at the end of a function.) */
2589
2590 static tree
2591 lookup_label_1 (tree id)
2592 {
2593 tree decl;
2594
2595 /* You can't use labels at global scope. */
2596 if (current_function_decl == NULL_TREE)
2597 {
2598 error ("label %qE referenced outside of any function", id);
2599 return NULL_TREE;
2600 }
2601
2602 /* See if we've already got this label. */
2603 decl = IDENTIFIER_LABEL_VALUE (id);
2604 if (decl != NULL_TREE && DECL_CONTEXT (decl) == current_function_decl)
2605 return decl;
2606
2607 decl = make_label_decl (id, /*local_p=*/0);
2608 return decl;
2609 }
2610
2611 /* Wrapper for lookup_label_1. */
2612
2613 tree
2614 lookup_label (tree id)
2615 {
2616 tree ret;
2617 bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
2618 ret = lookup_label_1 (id);
2619 timevar_cond_stop (TV_NAME_LOOKUP, subtime);
2620 return ret;
2621 }
2622
2623 /* Declare a local label named ID. */
2624
2625 tree
2626 declare_local_label (tree id)
2627 {
2628 tree decl;
2629 cp_label_binding *bind;
2630
2631 /* Add a new entry to the SHADOWED_LABELS list so that when we leave
2632 this scope we can restore the old value of IDENTIFIER_TYPE_VALUE. */
2633 bind = VEC_safe_push (cp_label_binding, gc,
2634 current_binding_level->shadowed_labels, NULL);
2635 bind->prev_value = IDENTIFIER_LABEL_VALUE (id);
2636
2637 decl = make_label_decl (id, /*local_p=*/1);
2638 bind->label = decl;
2639
2640 return decl;
2641 }
2642
2643 /* Returns nonzero if it is ill-formed to jump past the declaration of
2644 DECL. Returns 2 if it's also a real problem. */
2645
2646 static int
2647 decl_jump_unsafe (tree decl)
2648 {
2649 /* [stmt.dcl]/3: A program that jumps from a point where a local variable
2650 with automatic storage duration is not in scope to a point where it is
2651 in scope is ill-formed unless the variable has scalar type, class type
2652 with a trivial default constructor and a trivial destructor, a
2653 cv-qualified version of one of these types, or an array of one of the
2654 preceding types and is declared without an initializer (8.5). */
2655 tree type = TREE_TYPE (decl);
2656
2657 if (TREE_CODE (decl) != VAR_DECL || TREE_STATIC (decl)
2658 || type == error_mark_node)
2659 return 0;
2660
2661 type = strip_array_types (type);
2662
2663 if (type_has_nontrivial_default_init (TREE_TYPE (decl))
2664 || DECL_NONTRIVIALLY_INITIALIZED_P (decl))
2665 return 2;
2666
2667 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
2668 return 1;
2669
2670 return 0;
2671 }
2672
2673 /* A subroutine of check_previous_goto_1 to identify a branch to the user. */
2674
2675 static void
2676 identify_goto (tree decl, const location_t *locus)
2677 {
2678 if (decl)
2679 permerror (input_location, "jump to label %qD", decl);
2680 else
2681 permerror (input_location, "jump to case label");
2682 if (locus)
2683 permerror (*locus, " from here");
2684 }
2685
2686 /* Check that a single previously seen jump to a newly defined label
2687 is OK. DECL is the LABEL_DECL or 0; LEVEL is the binding_level for
2688 the jump context; NAMES are the names in scope in LEVEL at the jump
2689 context; LOCUS is the source position of the jump or 0. Returns
2690 true if all is well. */
2691
2692 static bool
2693 check_previous_goto_1 (tree decl, cp_binding_level* level, tree names,
2694 bool exited_omp, const location_t *locus)
2695 {
2696 cp_binding_level *b;
2697 bool identified = false, saw_eh = false, saw_omp = false;
2698
2699 if (exited_omp)
2700 {
2701 identify_goto (decl, locus);
2702 error (" exits OpenMP structured block");
2703 identified = saw_omp = true;
2704 }
2705
2706 for (b = current_binding_level; b ; b = b->level_chain)
2707 {
2708 tree new_decls, old_decls = (b == level ? names : NULL_TREE);
2709
2710 for (new_decls = b->names; new_decls != old_decls;
2711 new_decls = (DECL_P (new_decls) ? DECL_CHAIN (new_decls)
2712 : TREE_CHAIN (new_decls)))
2713 {
2714 int problem = decl_jump_unsafe (new_decls);
2715 if (! problem)
2716 continue;
2717
2718 if (!identified)
2719 {
2720 identify_goto (decl, locus);
2721 identified = true;
2722 }
2723 if (problem > 1)
2724 error (" crosses initialization of %q+#D", new_decls);
2725 else
2726 permerror (input_location, " enters scope of %q+#D which has "
2727 "non-trivial destructor", new_decls);
2728 }
2729
2730 if (b == level)
2731 break;
2732 if ((b->kind == sk_try || b->kind == sk_catch) && !saw_eh)
2733 {
2734 if (!identified)
2735 {
2736 identify_goto (decl, locus);
2737 identified = true;
2738 }
2739 if (b->kind == sk_try)
2740 error (" enters try block");
2741 else
2742 error (" enters catch block");
2743 saw_eh = true;
2744 }
2745 if (b->kind == sk_omp && !saw_omp)
2746 {
2747 if (!identified)
2748 {
2749 identify_goto (decl, locus);
2750 identified = true;
2751 }
2752 error (" enters OpenMP structured block");
2753 saw_omp = true;
2754 }
2755 }
2756
2757 return !identified;
2758 }
2759
2760 static void
2761 check_previous_goto (tree decl, struct named_label_use_entry *use)
2762 {
2763 check_previous_goto_1 (decl, use->binding_level,
2764 use->names_in_scope, use->in_omp_scope,
2765 &use->o_goto_locus);
2766 }
2767
2768 static bool
2769 check_switch_goto (cp_binding_level* level)
2770 {
2771 return check_previous_goto_1 (NULL_TREE, level, level->names, false, NULL);
2772 }
2773
2774 /* Check that a new jump to a label DECL is OK. Called by
2775 finish_goto_stmt. */
2776
2777 void
2778 check_goto (tree decl)
2779 {
2780 struct named_label_entry *ent, dummy;
2781 bool saw_catch = false, identified = false;
2782 tree bad;
2783 unsigned ix;
2784
2785 /* We can't know where a computed goto is jumping.
2786 So we assume that it's OK. */
2787 if (TREE_CODE (decl) != LABEL_DECL)
2788 return;
2789
2790 /* We didn't record any information about this label when we created it,
2791 and there's not much point since it's trivial to analyze as a return. */
2792 if (decl == cdtor_label)
2793 return;
2794
2795 dummy.label_decl = decl;
2796 ent = (struct named_label_entry *) htab_find (named_labels, &dummy);
2797 gcc_assert (ent != NULL);
2798
2799 /* If the label hasn't been defined yet, defer checking. */
2800 if (! DECL_INITIAL (decl))
2801 {
2802 struct named_label_use_entry *new_use;
2803
2804 /* Don't bother creating another use if the last goto had the
2805 same data, and will therefore create the same set of errors. */
2806 if (ent->uses
2807 && ent->uses->names_in_scope == current_binding_level->names)
2808 return;
2809
2810 new_use = ggc_alloc_named_label_use_entry ();
2811 new_use->binding_level = current_binding_level;
2812 new_use->names_in_scope = current_binding_level->names;
2813 new_use->o_goto_locus = input_location;
2814 new_use->in_omp_scope = false;
2815
2816 new_use->next = ent->uses;
2817 ent->uses = new_use;
2818 return;
2819 }
2820
2821 if (ent->in_try_scope || ent->in_catch_scope
2822 || ent->in_omp_scope || !VEC_empty (tree, ent->bad_decls))
2823 {
2824 permerror (input_location, "jump to label %q+D", decl);
2825 permerror (input_location, " from here");
2826 identified = true;
2827 }
2828
2829 FOR_EACH_VEC_ELT (tree, ent->bad_decls, ix, bad)
2830 {
2831 int u = decl_jump_unsafe (bad);
2832
2833 if (u > 1 && DECL_ARTIFICIAL (bad))
2834 {
2835 /* Can't skip init of __exception_info. */
2836 error_at (DECL_SOURCE_LOCATION (bad), " enters catch block");
2837 saw_catch = true;
2838 }
2839 else if (u > 1)
2840 error (" skips initialization of %q+#D", bad);
2841 else
2842 permerror (input_location, " enters scope of %q+#D which has "
2843 "non-trivial destructor", bad);
2844 }
2845
2846 if (ent->in_try_scope)
2847 error (" enters try block");
2848 else if (ent->in_catch_scope && !saw_catch)
2849 error (" enters catch block");
2850
2851 if (ent->in_omp_scope)
2852 error (" enters OpenMP structured block");
2853 else if (flag_openmp)
2854 {
2855 cp_binding_level *b;
2856 for (b = current_binding_level; b ; b = b->level_chain)
2857 {
2858 if (b == ent->binding_level)
2859 break;
2860 if (b->kind == sk_omp)
2861 {
2862 if (!identified)
2863 {
2864 permerror (input_location, "jump to label %q+D", decl);
2865 permerror (input_location, " from here");
2866 identified = true;
2867 }
2868 error (" exits OpenMP structured block");
2869 break;
2870 }
2871 }
2872 }
2873 }
2874
2875 /* Check that a return is ok wrt OpenMP structured blocks.
2876 Called by finish_return_stmt. Returns true if all is well. */
2877
2878 bool
2879 check_omp_return (void)
2880 {
2881 cp_binding_level *b;
2882 for (b = current_binding_level; b ; b = b->level_chain)
2883 if (b->kind == sk_omp)
2884 {
2885 error ("invalid exit from OpenMP structured block");
2886 return false;
2887 }
2888 else if (b->kind == sk_function_parms)
2889 break;
2890 return true;
2891 }
2892
2893 /* Define a label, specifying the location in the source file.
2894 Return the LABEL_DECL node for the label. */
2895
2896 static tree
2897 define_label_1 (location_t location, tree name)
2898 {
2899 struct named_label_entry *ent, dummy;
2900 cp_binding_level *p;
2901 tree decl;
2902
2903 decl = lookup_label (name);
2904
2905 dummy.label_decl = decl;
2906 ent = (struct named_label_entry *) htab_find (named_labels, &dummy);
2907 gcc_assert (ent != NULL);
2908
2909 /* After labels, make any new cleanups in the function go into their
2910 own new (temporary) binding contour. */
2911 for (p = current_binding_level;
2912 p->kind != sk_function_parms;
2913 p = p->level_chain)
2914 p->more_cleanups_ok = 0;
2915
2916 if (name == get_identifier ("wchar_t"))
2917 permerror (input_location, "label named wchar_t");
2918
2919 if (DECL_INITIAL (decl) != NULL_TREE)
2920 {
2921 error ("duplicate label %qD", decl);
2922 return error_mark_node;
2923 }
2924 else
2925 {
2926 struct named_label_use_entry *use;
2927
2928 /* Mark label as having been defined. */
2929 DECL_INITIAL (decl) = error_mark_node;
2930 /* Say where in the source. */
2931 DECL_SOURCE_LOCATION (decl) = location;
2932
2933 ent->binding_level = current_binding_level;
2934 ent->names_in_scope = current_binding_level->names;
2935
2936 for (use = ent->uses; use ; use = use->next)
2937 check_previous_goto (decl, use);
2938 ent->uses = NULL;
2939 }
2940
2941 return decl;
2942 }
2943
2944 /* Wrapper for define_label_1. */
2945
2946 tree
2947 define_label (location_t location, tree name)
2948 {
2949 tree ret;
2950 bool running = timevar_cond_start (TV_NAME_LOOKUP);
2951 ret = define_label_1 (location, name);
2952 timevar_cond_stop (TV_NAME_LOOKUP, running);
2953 return ret;
2954 }
2955
2956
2957 struct cp_switch
2958 {
2959 cp_binding_level *level;
2960 struct cp_switch *next;
2961 /* The SWITCH_STMT being built. */
2962 tree switch_stmt;
2963 /* A splay-tree mapping the low element of a case range to the high
2964 element, or NULL_TREE if there is no high element. Used to
2965 determine whether or not a new case label duplicates an old case
2966 label. We need a tree, rather than simply a hash table, because
2967 of the GNU case range extension. */
2968 splay_tree cases;
2969 };
2970
2971 /* A stack of the currently active switch statements. The innermost
2972 switch statement is on the top of the stack. There is no need to
2973 mark the stack for garbage collection because it is only active
2974 during the processing of the body of a function, and we never
2975 collect at that point. */
2976
2977 static struct cp_switch *switch_stack;
2978
2979 /* Called right after a switch-statement condition is parsed.
2980 SWITCH_STMT is the switch statement being parsed. */
2981
2982 void
2983 push_switch (tree switch_stmt)
2984 {
2985 struct cp_switch *p = XNEW (struct cp_switch);
2986 p->level = current_binding_level;
2987 p->next = switch_stack;
2988 p->switch_stmt = switch_stmt;
2989 p->cases = splay_tree_new (case_compare, NULL, NULL);
2990 switch_stack = p;
2991 }
2992
2993 void
2994 pop_switch (void)
2995 {
2996 struct cp_switch *cs = switch_stack;
2997 location_t switch_location;
2998
2999 /* Emit warnings as needed. */
3000 switch_location = EXPR_LOC_OR_HERE (cs->switch_stmt);
3001 if (!processing_template_decl)
3002 c_do_switch_warnings (cs->cases, switch_location,
3003 SWITCH_STMT_TYPE (cs->switch_stmt),
3004 SWITCH_STMT_COND (cs->switch_stmt));
3005
3006 splay_tree_delete (cs->cases);
3007 switch_stack = switch_stack->next;
3008 free (cs);
3009 }
3010
3011 /* Convert a case constant VALUE in a switch to the type TYPE of the switch
3012 condition. Note that if TYPE and VALUE are already integral we don't
3013 really do the conversion because the language-independent
3014 warning/optimization code will work better that way. */
3015
3016 static tree
3017 case_conversion (tree type, tree value)
3018 {
3019 if (value == NULL_TREE)
3020 return value;
3021
3022 if (cxx_dialect >= cxx0x
3023 && (SCOPED_ENUM_P (type)
3024 || !INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (TREE_TYPE (value))))
3025 {
3026 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
3027 type = type_promotes_to (type);
3028 value = perform_implicit_conversion (type, value, tf_warning_or_error);
3029 }
3030 return cxx_constant_value (value);
3031 }
3032
3033 /* Note that we've seen a definition of a case label, and complain if this
3034 is a bad place for one. */
3035
3036 tree
3037 finish_case_label (location_t loc, tree low_value, tree high_value)
3038 {
3039 tree cond, r;
3040 cp_binding_level *p;
3041 tree type;
3042
3043 if (processing_template_decl)
3044 {
3045 tree label;
3046
3047 /* For templates, just add the case label; we'll do semantic
3048 analysis at instantiation-time. */
3049 label = build_decl (loc, LABEL_DECL, NULL_TREE, NULL_TREE);
3050 return add_stmt (build_case_label (low_value, high_value, label));
3051 }
3052
3053 /* Find the condition on which this switch statement depends. */
3054 cond = SWITCH_STMT_COND (switch_stack->switch_stmt);
3055 if (cond && TREE_CODE (cond) == TREE_LIST)
3056 cond = TREE_VALUE (cond);
3057
3058 if (!check_switch_goto (switch_stack->level))
3059 return error_mark_node;
3060
3061 type = SWITCH_STMT_TYPE (switch_stack->switch_stmt);
3062
3063 low_value = case_conversion (type, low_value);
3064 high_value = case_conversion (type, high_value);
3065
3066 r = c_add_case_label (loc, switch_stack->cases, cond, type,
3067 low_value, high_value);
3068
3069 /* After labels, make any new cleanups in the function go into their
3070 own new (temporary) binding contour. */
3071 for (p = current_binding_level;
3072 p->kind != sk_function_parms;
3073 p = p->level_chain)
3074 p->more_cleanups_ok = 0;
3075
3076 return r;
3077 }
3078 \f
3079 /* Hash a TYPENAME_TYPE. K is really of type `tree'. */
3080
3081 static hashval_t
3082 typename_hash (const void* k)
3083 {
3084 hashval_t hash;
3085 const_tree const t = (const_tree) k;
3086
3087 hash = (htab_hash_pointer (TYPE_CONTEXT (t))
3088 ^ htab_hash_pointer (DECL_NAME (TYPE_NAME (t))));
3089
3090 return hash;
3091 }
3092
3093 typedef struct typename_info {
3094 tree scope;
3095 tree name;
3096 tree template_id;
3097 bool enum_p;
3098 bool class_p;
3099 } typename_info;
3100
3101 /* Compare two TYPENAME_TYPEs. K1 is really of type `tree', K2 is
3102 really of type `typename_info*' */
3103
3104 static int
3105 typename_compare (const void * k1, const void * k2)
3106 {
3107 const_tree const t1 = (const_tree) k1;
3108 const typename_info *const t2 = (const typename_info *) k2;
3109
3110 return (DECL_NAME (TYPE_NAME (t1)) == t2->name
3111 && TYPE_CONTEXT (t1) == t2->scope
3112 && TYPENAME_TYPE_FULLNAME (t1) == t2->template_id
3113 && TYPENAME_IS_ENUM_P (t1) == t2->enum_p
3114 && TYPENAME_IS_CLASS_P (t1) == t2->class_p);
3115 }
3116
3117 /* Build a TYPENAME_TYPE. If the type is `typename T::t', CONTEXT is
3118 the type of `T', NAME is the IDENTIFIER_NODE for `t'.
3119
3120 Returns the new TYPENAME_TYPE. */
3121
3122 static GTY ((param_is (union tree_node))) htab_t typename_htab;
3123
3124 static tree
3125 build_typename_type (tree context, tree name, tree fullname,
3126 enum tag_types tag_type)
3127 {
3128 tree t;
3129 tree d;
3130 typename_info ti;
3131 void **e;
3132 hashval_t hash;
3133
3134 if (typename_htab == NULL)
3135 typename_htab = htab_create_ggc (61, &typename_hash,
3136 &typename_compare, NULL);
3137
3138 ti.scope = FROB_CONTEXT (context);
3139 ti.name = name;
3140 ti.template_id = fullname;
3141 ti.enum_p = tag_type == enum_type;
3142 ti.class_p = (tag_type == class_type
3143 || tag_type == record_type
3144 || tag_type == union_type);
3145 hash = (htab_hash_pointer (ti.scope)
3146 ^ htab_hash_pointer (ti.name));
3147
3148 /* See if we already have this type. */
3149 e = htab_find_slot_with_hash (typename_htab, &ti, hash, INSERT);
3150 if (*e)
3151 t = (tree) *e;
3152 else
3153 {
3154 /* Build the TYPENAME_TYPE. */
3155 t = cxx_make_type (TYPENAME_TYPE);
3156 TYPE_CONTEXT (t) = ti.scope;
3157 TYPENAME_TYPE_FULLNAME (t) = ti.template_id;
3158 TYPENAME_IS_ENUM_P (t) = ti.enum_p;
3159 TYPENAME_IS_CLASS_P (t) = ti.class_p;
3160
3161 /* Build the corresponding TYPE_DECL. */
3162 d = build_decl (input_location, TYPE_DECL, name, t);
3163 TYPE_NAME (TREE_TYPE (d)) = d;
3164 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
3165 DECL_CONTEXT (d) = FROB_CONTEXT (context);
3166 DECL_ARTIFICIAL (d) = 1;
3167
3168 /* Store it in the hash table. */
3169 *e = t;
3170
3171 /* TYPENAME_TYPEs must always be compared structurally, because
3172 they may or may not resolve down to another type depending on
3173 the currently open classes. */
3174 SET_TYPE_STRUCTURAL_EQUALITY (t);
3175 }
3176
3177 return t;
3178 }
3179
3180 /* Resolve `typename CONTEXT::NAME'. TAG_TYPE indicates the tag
3181 provided to name the type. Returns an appropriate type, unless an
3182 error occurs, in which case error_mark_node is returned. If we
3183 locate a non-artificial TYPE_DECL and TF_KEEP_TYPE_DECL is set, we
3184 return that, rather than the _TYPE it corresponds to, in other
3185 cases we look through the type decl. If TF_ERROR is set, complain
3186 about errors, otherwise be quiet. */
3187
3188 tree
3189 make_typename_type (tree context, tree name, enum tag_types tag_type,
3190 tsubst_flags_t complain)
3191 {
3192 tree fullname;
3193 tree t;
3194 bool want_template;
3195
3196 if (name == error_mark_node
3197 || context == NULL_TREE
3198 || context == error_mark_node)
3199 return error_mark_node;
3200
3201 if (TYPE_P (name))
3202 {
3203 if (!(TYPE_LANG_SPECIFIC (name)
3204 && (CLASSTYPE_IS_TEMPLATE (name)
3205 || CLASSTYPE_USE_TEMPLATE (name))))
3206 name = TYPE_IDENTIFIER (name);
3207 else
3208 /* Create a TEMPLATE_ID_EXPR for the type. */
3209 name = build_nt (TEMPLATE_ID_EXPR,
3210 CLASSTYPE_TI_TEMPLATE (name),
3211 CLASSTYPE_TI_ARGS (name));
3212 }
3213 else if (TREE_CODE (name) == TYPE_DECL)
3214 name = DECL_NAME (name);
3215
3216 fullname = name;
3217
3218 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
3219 {
3220 name = TREE_OPERAND (name, 0);
3221 if (TREE_CODE (name) == TEMPLATE_DECL)
3222 name = TREE_OPERAND (fullname, 0) = DECL_NAME (name);
3223 else if (TREE_CODE (name) == OVERLOAD)
3224 {
3225 error ("%qD is not a type", name);
3226 return error_mark_node;
3227 }
3228 }
3229 if (TREE_CODE (name) == TEMPLATE_DECL)
3230 {
3231 error ("%qD used without template parameters", name);
3232 return error_mark_node;
3233 }
3234 gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
3235 gcc_assert (TYPE_P (context));
3236
3237 if (!MAYBE_CLASS_TYPE_P (context))
3238 {
3239 if (complain & tf_error)
3240 error ("%q#T is not a class", context);
3241 return error_mark_node;
3242 }
3243
3244 /* When the CONTEXT is a dependent type, NAME could refer to a
3245 dependent base class of CONTEXT. But look inside it anyway
3246 if CONTEXT is a currently open scope, in case it refers to a
3247 member of the current instantiation or a non-dependent base;
3248 lookup will stop when we hit a dependent base. */
3249 if (!dependent_scope_p (context))
3250 /* We should only set WANT_TYPE when we're a nested typename type.
3251 Then we can give better diagnostics if we find a non-type. */
3252 t = lookup_field (context, name, 2, /*want_type=*/true);
3253 else
3254 t = NULL_TREE;
3255
3256 if ((!t || TREE_CODE (t) == TREE_LIST) && dependent_type_p (context))
3257 return build_typename_type (context, name, fullname, tag_type);
3258
3259 want_template = TREE_CODE (fullname) == TEMPLATE_ID_EXPR;
3260
3261 if (!t)
3262 {
3263 if (complain & tf_error)
3264 error (want_template ? G_("no class template named %q#T in %q#T")
3265 : G_("no type named %q#T in %q#T"), name, context);
3266 return error_mark_node;
3267 }
3268
3269 /* Pull out the template from an injected-class-name (or multiple). */
3270 if (want_template)
3271 t = maybe_get_template_decl_from_type_decl (t);
3272
3273 if (TREE_CODE (t) == TREE_LIST)
3274 {
3275 if (complain & tf_error)
3276 {
3277 error ("lookup of %qT in %qT is ambiguous", name, context);
3278 print_candidates (t);
3279 }
3280 return error_mark_node;
3281 }
3282
3283 if (want_template && !DECL_TYPE_TEMPLATE_P (t))
3284 {
3285 if (complain & tf_error)
3286 error ("%<typename %T::%D%> names %q#T, which is not a class template",
3287 context, name, t);
3288 return error_mark_node;
3289 }
3290 if (!want_template && TREE_CODE (t) != TYPE_DECL)
3291 {
3292 if (complain & tf_error)
3293 error ("%<typename %T::%D%> names %q#T, which is not a type",
3294 context, name, t);
3295 return error_mark_node;
3296 }
3297
3298 if (complain & tf_error)
3299 perform_or_defer_access_check (TYPE_BINFO (context), t, t);
3300
3301 /* If we are currently parsing a template and if T is a typedef accessed
3302 through CONTEXT then we need to remember and check access of T at
3303 template instantiation time. */
3304 add_typedef_to_current_template_for_access_check (t, context, input_location);
3305
3306 if (want_template)
3307 return lookup_template_class (t, TREE_OPERAND (fullname, 1),
3308 NULL_TREE, context,
3309 /*entering_scope=*/0,
3310 tf_warning_or_error | tf_user);
3311
3312 if (DECL_ARTIFICIAL (t) || !(complain & tf_keep_type_decl))
3313 t = TREE_TYPE (t);
3314
3315 return t;
3316 }
3317
3318 /* Resolve `CONTEXT::template NAME'. Returns a TEMPLATE_DECL if the name
3319 can be resolved or an UNBOUND_CLASS_TEMPLATE, unless an error occurs,
3320 in which case error_mark_node is returned.
3321
3322 If PARM_LIST is non-NULL, also make sure that the template parameter
3323 list of TEMPLATE_DECL matches.
3324
3325 If COMPLAIN zero, don't complain about any errors that occur. */
3326
3327 tree
3328 make_unbound_class_template (tree context, tree name, tree parm_list,
3329 tsubst_flags_t complain)
3330 {
3331 tree t;
3332 tree d;
3333
3334 if (TYPE_P (name))
3335 name = TYPE_IDENTIFIER (name);
3336 else if (DECL_P (name))
3337 name = DECL_NAME (name);
3338 gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
3339
3340 if (!dependent_type_p (context)
3341 || currently_open_class (context))
3342 {
3343 tree tmpl = NULL_TREE;
3344
3345 if (MAYBE_CLASS_TYPE_P (context))
3346 tmpl = lookup_field (context, name, 0, false);
3347
3348 if (tmpl && TREE_CODE (tmpl) == TYPE_DECL)
3349 tmpl = maybe_get_template_decl_from_type_decl (tmpl);
3350
3351 if (!tmpl || !DECL_TYPE_TEMPLATE_P (tmpl))
3352 {
3353 if (complain & tf_error)
3354 error ("no class template named %q#T in %q#T", name, context);
3355 return error_mark_node;
3356 }
3357
3358 if (parm_list
3359 && !comp_template_parms (DECL_TEMPLATE_PARMS (tmpl), parm_list))
3360 {
3361 if (complain & tf_error)
3362 {
3363 error ("template parameters do not match template");
3364 error ("%q+D declared here", tmpl);
3365 }
3366 return error_mark_node;
3367 }
3368
3369 if (complain & tf_error)
3370 perform_or_defer_access_check (TYPE_BINFO (context), tmpl, tmpl);
3371
3372 return tmpl;
3373 }
3374
3375 /* Build the UNBOUND_CLASS_TEMPLATE. */
3376 t = cxx_make_type (UNBOUND_CLASS_TEMPLATE);
3377 TYPE_CONTEXT (t) = FROB_CONTEXT (context);
3378 TREE_TYPE (t) = NULL_TREE;
3379 SET_TYPE_STRUCTURAL_EQUALITY (t);
3380
3381 /* Build the corresponding TEMPLATE_DECL. */
3382 d = build_decl (input_location, TEMPLATE_DECL, name, t);
3383 TYPE_NAME (TREE_TYPE (d)) = d;
3384 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
3385 DECL_CONTEXT (d) = FROB_CONTEXT (context);
3386 DECL_ARTIFICIAL (d) = 1;
3387 DECL_TEMPLATE_PARMS (d) = parm_list;
3388
3389 return t;
3390 }
3391
3392 \f
3393
3394 /* Push the declarations of builtin types into the namespace.
3395 RID_INDEX is the index of the builtin type in the array
3396 RID_POINTERS. NAME is the name used when looking up the builtin
3397 type. TYPE is the _TYPE node for the builtin type. */
3398
3399 void
3400 record_builtin_type (enum rid rid_index,
3401 const char* name,
3402 tree type)
3403 {
3404 tree rname = NULL_TREE, tname = NULL_TREE;
3405 tree tdecl = NULL_TREE;
3406
3407 if ((int) rid_index < (int) RID_MAX)
3408 rname = ridpointers[(int) rid_index];
3409 if (name)
3410 tname = get_identifier (name);
3411
3412 /* The calls to SET_IDENTIFIER_GLOBAL_VALUE below should be
3413 eliminated. Built-in types should not be looked up name; their
3414 names are keywords that the parser can recognize. However, there
3415 is code in c-common.c that uses identifier_global_value to look
3416 up built-in types by name. */
3417 if (tname)
3418 {
3419 tdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, tname, type);
3420 DECL_ARTIFICIAL (tdecl) = 1;
3421 SET_IDENTIFIER_GLOBAL_VALUE (tname, tdecl);
3422 }
3423 if (rname)
3424 {
3425 if (!tdecl)
3426 {
3427 tdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, rname, type);
3428 DECL_ARTIFICIAL (tdecl) = 1;
3429 }
3430 SET_IDENTIFIER_GLOBAL_VALUE (rname, tdecl);
3431 }
3432
3433 if (!TYPE_NAME (type))
3434 TYPE_NAME (type) = tdecl;
3435
3436 if (tdecl)
3437 debug_hooks->type_decl (tdecl, 0);
3438 }
3439
3440 /* Record one of the standard Java types.
3441 * Declare it as having the given NAME.
3442 * If SIZE > 0, it is the size of one of the integral types;
3443 * otherwise it is the negative of the size of one of the other types. */
3444
3445 static tree
3446 record_builtin_java_type (const char* name, int size)
3447 {
3448 tree type, decl;
3449 if (size > 0)
3450 {
3451 type = build_nonstandard_integer_type (size, 0);
3452 type = build_distinct_type_copy (type);
3453 }
3454 else if (size > -32)
3455 {
3456 tree stype;
3457 /* "__java_char" or ""__java_boolean". */
3458 type = build_nonstandard_integer_type (-size, 1);
3459 type = build_distinct_type_copy (type);
3460 /* Get the signed type cached and attached to the unsigned type,
3461 so it doesn't get garbage-collected at "random" times,
3462 causing potential codegen differences out of different UIDs
3463 and different alias set numbers. */
3464 stype = build_nonstandard_integer_type (-size, 0);
3465 stype = build_distinct_type_copy (stype);
3466 TREE_CHAIN (type) = stype;
3467 /*if (size == -1) TREE_SET_CODE (type, BOOLEAN_TYPE);*/
3468 }
3469 else
3470 { /* "__java_float" or ""__java_double". */
3471 type = make_node (REAL_TYPE);
3472 TYPE_PRECISION (type) = - size;
3473 layout_type (type);
3474 }
3475 record_builtin_type (RID_MAX, name, type);
3476 decl = TYPE_NAME (type);
3477
3478 /* Suppress generate debug symbol entries for these types,
3479 since for normal C++ they are just clutter.
3480 However, push_lang_context undoes this if extern "Java" is seen. */
3481 DECL_IGNORED_P (decl) = 1;
3482
3483 TYPE_FOR_JAVA (type) = 1;
3484 return type;
3485 }
3486
3487 /* Push a type into the namespace so that the back ends ignore it. */
3488
3489 static void
3490 record_unknown_type (tree type, const char* name)
3491 {
3492 tree decl = pushdecl (build_decl (UNKNOWN_LOCATION,
3493 TYPE_DECL, get_identifier (name), type));
3494 /* Make sure the "unknown type" typedecl gets ignored for debug info. */
3495 DECL_IGNORED_P (decl) = 1;
3496 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
3497 TYPE_SIZE (type) = TYPE_SIZE (void_type_node);
3498 TYPE_ALIGN (type) = 1;
3499 TYPE_USER_ALIGN (type) = 0;
3500 SET_TYPE_MODE (type, TYPE_MODE (void_type_node));
3501 }
3502
3503 /* A string for which we should create an IDENTIFIER_NODE at
3504 startup. */
3505
3506 typedef struct predefined_identifier
3507 {
3508 /* The name of the identifier. */
3509 const char *const name;
3510 /* The place where the IDENTIFIER_NODE should be stored. */
3511 tree *const node;
3512 /* Nonzero if this is the name of a constructor or destructor. */
3513 const int ctor_or_dtor_p;
3514 } predefined_identifier;
3515
3516 /* Create all the predefined identifiers. */
3517
3518 static void
3519 initialize_predefined_identifiers (void)
3520 {
3521 const predefined_identifier *pid;
3522
3523 /* A table of identifiers to create at startup. */
3524 static const predefined_identifier predefined_identifiers[] = {
3525 { "C++", &lang_name_cplusplus, 0 },
3526 { "C", &lang_name_c, 0 },
3527 { "Java", &lang_name_java, 0 },
3528 /* Some of these names have a trailing space so that it is
3529 impossible for them to conflict with names written by users. */
3530 { "__ct ", &ctor_identifier, 1 },
3531 { "__base_ctor ", &base_ctor_identifier, 1 },
3532 { "__comp_ctor ", &complete_ctor_identifier, 1 },
3533 { "__dt ", &dtor_identifier, 1 },
3534 { "__comp_dtor ", &complete_dtor_identifier, 1 },
3535 { "__base_dtor ", &base_dtor_identifier, 1 },
3536 { "__deleting_dtor ", &deleting_dtor_identifier, 1 },
3537 { IN_CHARGE_NAME, &in_charge_identifier, 0 },
3538 { "nelts", &nelts_identifier, 0 },
3539 { THIS_NAME, &this_identifier, 0 },
3540 { VTABLE_DELTA_NAME, &delta_identifier, 0 },
3541 { VTABLE_PFN_NAME, &pfn_identifier, 0 },
3542 { "_vptr", &vptr_identifier, 0 },
3543 { "__vtt_parm", &vtt_parm_identifier, 0 },
3544 { "::", &global_scope_name, 0 },
3545 { "std", &std_identifier, 0 },
3546 { NULL, NULL, 0 }
3547 };
3548
3549 for (pid = predefined_identifiers; pid->name; ++pid)
3550 {
3551 *pid->node = get_identifier (pid->name);
3552 if (pid->ctor_or_dtor_p)
3553 IDENTIFIER_CTOR_OR_DTOR_P (*pid->node) = 1;
3554 }
3555 }
3556
3557 /* Create the predefined scalar types of C,
3558 and some nodes representing standard constants (0, 1, (void *)0).
3559 Initialize the global binding level.
3560 Make definitions for built-in primitive functions. */
3561
3562 void
3563 cxx_init_decl_processing (void)
3564 {
3565 tree void_ftype;
3566 tree void_ftype_ptr;
3567
3568 /* Create all the identifiers we need. */
3569 initialize_predefined_identifiers ();
3570
3571 /* Create the global variables. */
3572 push_to_top_level ();
3573
3574 current_function_decl = NULL_TREE;
3575 current_binding_level = NULL;
3576 /* Enter the global namespace. */
3577 gcc_assert (global_namespace == NULL_TREE);
3578 global_namespace = build_lang_decl (NAMESPACE_DECL, global_scope_name,
3579 void_type_node);
3580 DECL_CONTEXT (global_namespace) = build_translation_unit_decl (NULL_TREE);
3581 TREE_PUBLIC (global_namespace) = 1;
3582 begin_scope (sk_namespace, global_namespace);
3583
3584 if (flag_visibility_ms_compat)
3585 default_visibility = VISIBILITY_HIDDEN;
3586
3587 /* Initially, C. */
3588 current_lang_name = lang_name_c;
3589
3590 /* Create the `std' namespace. */
3591 push_namespace (std_identifier);
3592 std_node = current_namespace;
3593 pop_namespace ();
3594
3595 c_common_nodes_and_builtins ();
3596
3597 java_byte_type_node = record_builtin_java_type ("__java_byte", 8);
3598 java_short_type_node = record_builtin_java_type ("__java_short", 16);
3599 java_int_type_node = record_builtin_java_type ("__java_int", 32);
3600 java_long_type_node = record_builtin_java_type ("__java_long", 64);
3601 java_float_type_node = record_builtin_java_type ("__java_float", -32);
3602 java_double_type_node = record_builtin_java_type ("__java_double", -64);
3603 java_char_type_node = record_builtin_java_type ("__java_char", -16);
3604 java_boolean_type_node = record_builtin_java_type ("__java_boolean", -1);
3605
3606 integer_two_node = build_int_cst (NULL_TREE, 2);
3607
3608 record_builtin_type (RID_BOOL, "bool", boolean_type_node);
3609 truthvalue_type_node = boolean_type_node;
3610 truthvalue_false_node = boolean_false_node;
3611 truthvalue_true_node = boolean_true_node;
3612
3613 empty_except_spec = build_tree_list (NULL_TREE, NULL_TREE);
3614 noexcept_true_spec = build_tree_list (boolean_true_node, NULL_TREE);
3615 noexcept_false_spec = build_tree_list (boolean_false_node, NULL_TREE);
3616
3617 #if 0
3618 record_builtin_type (RID_MAX, NULL, string_type_node);
3619 #endif
3620
3621 delta_type_node = ptrdiff_type_node;
3622 vtable_index_type = ptrdiff_type_node;
3623
3624 vtt_parm_type = build_pointer_type (const_ptr_type_node);
3625 void_ftype = build_function_type_list (void_type_node, NULL_TREE);
3626 void_ftype_ptr = build_function_type_list (void_type_node,
3627 ptr_type_node, NULL_TREE);
3628 void_ftype_ptr
3629 = build_exception_variant (void_ftype_ptr, empty_except_spec);
3630
3631 /* C++ extensions */
3632
3633 unknown_type_node = make_node (LANG_TYPE);
3634 record_unknown_type (unknown_type_node, "unknown type");
3635
3636 /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node. */
3637 TREE_TYPE (unknown_type_node) = unknown_type_node;
3638
3639 /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
3640 result. */
3641 TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
3642 TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
3643
3644 init_list_type_node = make_node (LANG_TYPE);
3645 record_unknown_type (init_list_type_node, "init list");
3646
3647 dependent_lambda_return_type_node = make_node (LANG_TYPE);
3648 record_unknown_type (dependent_lambda_return_type_node,
3649 "undeduced lambda return type");
3650
3651 {
3652 /* Make sure we get a unique function type, so we can give
3653 its pointer type a name. (This wins for gdb.) */
3654 tree vfunc_type = make_node (FUNCTION_TYPE);
3655 TREE_TYPE (vfunc_type) = integer_type_node;
3656 TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
3657 layout_type (vfunc_type);
3658
3659 vtable_entry_type = build_pointer_type (vfunc_type);
3660 }
3661 record_builtin_type (RID_MAX, VTBL_PTR_TYPE, vtable_entry_type);
3662
3663 vtbl_type_node
3664 = build_cplus_array_type (vtable_entry_type, NULL_TREE);
3665 layout_type (vtbl_type_node);
3666 vtbl_type_node = cp_build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
3667 record_builtin_type (RID_MAX, NULL, vtbl_type_node);
3668 vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
3669 layout_type (vtbl_ptr_type_node);
3670 record_builtin_type (RID_MAX, NULL, vtbl_ptr_type_node);
3671
3672 push_namespace (get_identifier ("__cxxabiv1"));
3673 abi_node = current_namespace;
3674 pop_namespace ();
3675
3676 global_type_node = make_node (LANG_TYPE);
3677 record_unknown_type (global_type_node, "global type");
3678
3679 /* Now, C++. */
3680 current_lang_name = lang_name_cplusplus;
3681
3682 {
3683 tree newattrs, extvisattr;
3684 tree newtype, deltype;
3685 tree ptr_ftype_sizetype;
3686 tree new_eh_spec;
3687
3688 ptr_ftype_sizetype
3689 = build_function_type_list (ptr_type_node, size_type_node, NULL_TREE);
3690 if (cxx_dialect == cxx98)
3691 {
3692 tree bad_alloc_id;
3693 tree bad_alloc_type_node;
3694 tree bad_alloc_decl;
3695
3696 push_namespace (std_identifier);
3697 bad_alloc_id = get_identifier ("bad_alloc");
3698 bad_alloc_type_node = make_class_type (RECORD_TYPE);
3699 TYPE_CONTEXT (bad_alloc_type_node) = current_namespace;
3700 bad_alloc_decl
3701 = create_implicit_typedef (bad_alloc_id, bad_alloc_type_node);
3702 DECL_CONTEXT (bad_alloc_decl) = current_namespace;
3703 pop_namespace ();
3704
3705 new_eh_spec
3706 = add_exception_specifier (NULL_TREE, bad_alloc_type_node, -1);
3707 }
3708 else
3709 new_eh_spec = noexcept_false_spec;
3710
3711 /* Ensure attribs.c is initialized. */
3712 init_attributes ();
3713 extvisattr = build_tree_list (get_identifier ("externally_visible"),
3714 NULL_TREE);
3715 newattrs = tree_cons (get_identifier ("alloc_size"),
3716 build_tree_list (NULL_TREE, integer_one_node),
3717 extvisattr);
3718 newtype = cp_build_type_attribute_variant (ptr_ftype_sizetype, newattrs);
3719 newtype = build_exception_variant (newtype, new_eh_spec);
3720 deltype = cp_build_type_attribute_variant (void_ftype_ptr, extvisattr);
3721 deltype = build_exception_variant (deltype, empty_except_spec);
3722 push_cp_library_fn (NEW_EXPR, newtype);
3723 push_cp_library_fn (VEC_NEW_EXPR, newtype);
3724 global_delete_fndecl = push_cp_library_fn (DELETE_EXPR, deltype);
3725 push_cp_library_fn (VEC_DELETE_EXPR, deltype);
3726
3727 nullptr_type_node = make_node (NULLPTR_TYPE);
3728 TYPE_SIZE (nullptr_type_node) = bitsize_int (GET_MODE_BITSIZE (ptr_mode));
3729 TYPE_SIZE_UNIT (nullptr_type_node) = size_int (GET_MODE_SIZE (ptr_mode));
3730 TYPE_UNSIGNED (nullptr_type_node) = 1;
3731 TYPE_PRECISION (nullptr_type_node) = GET_MODE_BITSIZE (ptr_mode);
3732 SET_TYPE_MODE (nullptr_type_node, ptr_mode);
3733 record_builtin_type (RID_MAX, "decltype(nullptr)", nullptr_type_node);
3734 nullptr_node = build_int_cst (nullptr_type_node, 0);
3735 }
3736
3737 abort_fndecl
3738 = build_library_fn_ptr ("__cxa_pure_virtual", void_ftype);
3739
3740 /* Perform other language dependent initializations. */
3741 init_class_processing ();
3742 init_rtti_processing ();
3743 init_template_processing ();
3744
3745 if (flag_exceptions)
3746 init_exception_processing ();
3747
3748 if (! supports_one_only ())
3749 flag_weak = 0;
3750
3751 make_fname_decl = cp_make_fname_decl;
3752 start_fname_decls ();
3753
3754 /* Show we use EH for cleanups. */
3755 if (flag_exceptions)
3756 using_eh_for_cleanups ();
3757 }
3758
3759 /* Generate an initializer for a function naming variable from
3760 NAME. NAME may be NULL, to indicate a dependent name. TYPE_P is
3761 filled in with the type of the init. */
3762
3763 tree
3764 cp_fname_init (const char* name, tree *type_p)
3765 {
3766 tree domain = NULL_TREE;
3767 tree type;
3768 tree init = NULL_TREE;
3769 size_t length = 0;
3770
3771 if (name)
3772 {
3773 length = strlen (name);
3774 domain = build_index_type (size_int (length));
3775 init = build_string (length + 1, name);
3776 }
3777
3778 type = cp_build_qualified_type (char_type_node, TYPE_QUAL_CONST);
3779 type = build_cplus_array_type (type, domain);
3780
3781 *type_p = type;
3782
3783 if (init)
3784 TREE_TYPE (init) = type;
3785 else
3786 init = error_mark_node;
3787
3788 return init;
3789 }
3790
3791 /* Create the VAR_DECL for __FUNCTION__ etc. ID is the name to give
3792 the decl, LOC is the location to give the decl, NAME is the
3793 initialization string and TYPE_DEP indicates whether NAME depended
3794 on the type of the function. We make use of that to detect
3795 __PRETTY_FUNCTION__ inside a template fn. This is being done lazily
3796 at the point of first use, so we mustn't push the decl now. */
3797
3798 static tree
3799 cp_make_fname_decl (location_t loc, tree id, int type_dep)
3800 {
3801 const char *const name = (type_dep && processing_template_decl
3802 ? NULL : fname_as_string (type_dep));
3803 tree type;
3804 tree init = cp_fname_init (name, &type);
3805 tree decl = build_decl (loc, VAR_DECL, id, type);
3806
3807 if (name)
3808 free (CONST_CAST (char *, name));
3809
3810 /* As we're using pushdecl_with_scope, we must set the context. */
3811 DECL_CONTEXT (decl) = current_function_decl;
3812 DECL_PRETTY_FUNCTION_P (decl) = type_dep;
3813
3814 TREE_STATIC (decl) = 1;
3815 TREE_READONLY (decl) = 1;
3816 DECL_ARTIFICIAL (decl) = 1;
3817
3818 TREE_USED (decl) = 1;
3819
3820 if (current_function_decl)
3821 {
3822 cp_binding_level *b = current_binding_level;
3823 if (b->kind == sk_function_parms)
3824 return error_mark_node;
3825 while (b->level_chain->kind != sk_function_parms)
3826 b = b->level_chain;
3827 pushdecl_with_scope (decl, b, /*is_friend=*/false);
3828 cp_finish_decl (decl, init, /*init_const_expr_p=*/false, NULL_TREE,
3829 LOOKUP_ONLYCONVERTING);
3830 }
3831 else
3832 {
3833 DECL_THIS_STATIC (decl) = true;
3834 pushdecl_top_level_and_finish (decl, init);
3835 }
3836
3837 return decl;
3838 }
3839
3840 static tree
3841 builtin_function_1 (tree decl, tree context, bool is_global)
3842 {
3843 tree id = DECL_NAME (decl);
3844 const char *name = IDENTIFIER_POINTER (id);
3845
3846 retrofit_lang_decl (decl);
3847
3848 DECL_ARTIFICIAL (decl) = 1;
3849 SET_OVERLOADED_OPERATOR_CODE (decl, ERROR_MARK);
3850 SET_DECL_LANGUAGE (decl, lang_c);
3851 /* Runtime library routines are, by definition, available in an
3852 external shared object. */
3853 DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
3854 DECL_VISIBILITY_SPECIFIED (decl) = 1;
3855
3856 DECL_CONTEXT (decl) = context;
3857
3858 if (is_global)
3859 pushdecl_top_level (decl);
3860 else
3861 pushdecl (decl);
3862
3863 /* A function in the user's namespace should have an explicit
3864 declaration before it is used. Mark the built-in function as
3865 anticipated but not actually declared. */
3866 if (name[0] != '_' || name[1] != '_')
3867 DECL_ANTICIPATED (decl) = 1;
3868 else if (strncmp (name + 2, "builtin_", strlen ("builtin_")) != 0)
3869 {
3870 size_t len = strlen (name);
3871
3872 /* Treat __*_chk fortification functions as anticipated as well,
3873 unless they are __builtin_*. */
3874 if (len > strlen ("___chk")
3875 && memcmp (name + len - strlen ("_chk"),
3876 "_chk", strlen ("_chk") + 1) == 0)
3877 DECL_ANTICIPATED (decl) = 1;
3878 }
3879
3880 return decl;
3881 }
3882
3883 tree
3884 cxx_builtin_function (tree decl)
3885 {
3886 tree id = DECL_NAME (decl);
3887 const char *name = IDENTIFIER_POINTER (id);
3888 /* All builtins that don't begin with an '_' should additionally
3889 go in the 'std' namespace. */
3890 if (name[0] != '_')
3891 {
3892 tree decl2 = copy_node(decl);
3893 push_namespace (std_identifier);
3894 builtin_function_1 (decl2, std_node, false);
3895 pop_namespace ();
3896 }
3897
3898 return builtin_function_1 (decl, NULL_TREE, false);
3899 }
3900
3901 /* Like cxx_builtin_function, but guarantee the function is added to the global
3902 scope. This is to allow function specific options to add new machine
3903 dependent builtins when the target ISA changes via attribute((target(...)))
3904 which saves space on program startup if the program does not use non-generic
3905 ISAs. */
3906
3907 tree
3908 cxx_builtin_function_ext_scope (tree decl)
3909 {
3910
3911 tree id = DECL_NAME (decl);
3912 const char *name = IDENTIFIER_POINTER (id);
3913 /* All builtins that don't begin with an '_' should additionally
3914 go in the 'std' namespace. */
3915 if (name[0] != '_')
3916 {
3917 tree decl2 = copy_node(decl);
3918 push_namespace (std_identifier);
3919 builtin_function_1 (decl2, std_node, true);
3920 pop_namespace ();
3921 }
3922
3923 return builtin_function_1 (decl, NULL_TREE, true);
3924 }
3925
3926 /* Generate a FUNCTION_DECL with the typical flags for a runtime library
3927 function. Not called directly. */
3928
3929 static tree
3930 build_library_fn_1 (tree name, enum tree_code operator_code, tree type)
3931 {
3932 tree fn = build_lang_decl (FUNCTION_DECL, name, type);
3933 DECL_EXTERNAL (fn) = 1;
3934 TREE_PUBLIC (fn) = 1;
3935 DECL_ARTIFICIAL (fn) = 1;
3936 SET_OVERLOADED_OPERATOR_CODE (fn, operator_code);
3937 SET_DECL_LANGUAGE (fn, lang_c);
3938 /* Runtime library routines are, by definition, available in an
3939 external shared object. */
3940 DECL_VISIBILITY (fn) = VISIBILITY_DEFAULT;
3941 DECL_VISIBILITY_SPECIFIED (fn) = 1;
3942 return fn;
3943 }
3944
3945 /* Returns the _DECL for a library function with C linkage.
3946 We assume that such functions never throw; if this is incorrect,
3947 callers should unset TREE_NOTHROW. */
3948
3949 static tree
3950 build_library_fn (tree name, tree type)
3951 {
3952 tree fn = build_library_fn_1 (name, ERROR_MARK, type);
3953 TREE_NOTHROW (fn) = 1;
3954 return fn;
3955 }
3956
3957 /* Returns the _DECL for a library function with C++ linkage. */
3958
3959 static tree
3960 build_cp_library_fn (tree name, enum tree_code operator_code, tree type)
3961 {
3962 tree fn = build_library_fn_1 (name, operator_code, type);
3963 TREE_NOTHROW (fn) = TYPE_NOTHROW_P (type);
3964 DECL_CONTEXT (fn) = FROB_CONTEXT (current_namespace);
3965 SET_DECL_LANGUAGE (fn, lang_cplusplus);
3966 return fn;
3967 }
3968
3969 /* Like build_library_fn, but takes a C string instead of an
3970 IDENTIFIER_NODE. */
3971
3972 tree
3973 build_library_fn_ptr (const char* name, tree type)
3974 {
3975 return build_library_fn (get_identifier (name), type);
3976 }
3977
3978 /* Like build_cp_library_fn, but takes a C string instead of an
3979 IDENTIFIER_NODE. */
3980
3981 tree
3982 build_cp_library_fn_ptr (const char* name, tree type)
3983 {
3984 return build_cp_library_fn (get_identifier (name), ERROR_MARK, type);
3985 }
3986
3987 /* Like build_library_fn, but also pushes the function so that we will
3988 be able to find it via IDENTIFIER_GLOBAL_VALUE. Also, the function
3989 may throw exceptions listed in RAISES. */
3990
3991 tree
3992 push_library_fn (tree name, tree type, tree raises)
3993 {
3994 tree fn;
3995
3996 if (raises)
3997 type = build_exception_variant (type, raises);
3998
3999 fn = build_library_fn (name, type);
4000 pushdecl_top_level (fn);
4001 return fn;
4002 }
4003
4004 /* Like build_cp_library_fn, but also pushes the function so that it
4005 will be found by normal lookup. */
4006
4007 static tree
4008 push_cp_library_fn (enum tree_code operator_code, tree type)
4009 {
4010 tree fn = build_cp_library_fn (ansi_opname (operator_code),
4011 operator_code,
4012 type);
4013 pushdecl (fn);
4014 if (flag_tm)
4015 apply_tm_attr (fn, get_identifier ("transaction_safe"));
4016 return fn;
4017 }
4018
4019 /* Like push_library_fn, but takes a TREE_LIST of parm types rather than
4020 a FUNCTION_TYPE. */
4021
4022 tree
4023 push_void_library_fn (tree name, tree parmtypes)
4024 {
4025 tree type = build_function_type (void_type_node, parmtypes);
4026 return push_library_fn (name, type, NULL_TREE);
4027 }
4028
4029 /* Like push_library_fn, but also note that this function throws
4030 and does not return. Used for __throw_foo and the like. */
4031
4032 tree
4033 push_throw_library_fn (tree name, tree type)
4034 {
4035 tree fn = push_library_fn (name, type, NULL_TREE);
4036 TREE_THIS_VOLATILE (fn) = 1;
4037 TREE_NOTHROW (fn) = 0;
4038 return fn;
4039 }
4040 \f
4041 /* When we call finish_struct for an anonymous union, we create
4042 default copy constructors and such. But, an anonymous union
4043 shouldn't have such things; this function undoes the damage to the
4044 anonymous union type T.
4045
4046 (The reason that we create the synthesized methods is that we don't
4047 distinguish `union { int i; }' from `typedef union { int i; } U'.
4048 The first is an anonymous union; the second is just an ordinary
4049 union type.) */
4050
4051 void
4052 fixup_anonymous_aggr (tree t)
4053 {
4054 tree *q;
4055
4056 /* Wipe out memory of synthesized methods. */
4057 TYPE_HAS_USER_CONSTRUCTOR (t) = 0;
4058 TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
4059 TYPE_HAS_COPY_CTOR (t) = 0;
4060 TYPE_HAS_CONST_COPY_CTOR (t) = 0;
4061 TYPE_HAS_COPY_ASSIGN (t) = 0;
4062 TYPE_HAS_CONST_COPY_ASSIGN (t) = 0;
4063
4064 /* Splice the implicitly generated functions out of the TYPE_METHODS
4065 list. */
4066 q = &TYPE_METHODS (t);
4067 while (*q)
4068 {
4069 if (DECL_ARTIFICIAL (*q))
4070 *q = TREE_CHAIN (*q);
4071 else
4072 q = &DECL_CHAIN (*q);
4073 }
4074
4075 /* ISO C++ 9.5.3. Anonymous unions may not have function members. */
4076 if (TYPE_METHODS (t))
4077 {
4078 tree decl = TYPE_MAIN_DECL (t);
4079
4080 if (TREE_CODE (t) != UNION_TYPE)
4081 error_at (DECL_SOURCE_LOCATION (decl),
4082 "an anonymous struct cannot have function members");
4083 else
4084 error_at (DECL_SOURCE_LOCATION (decl),
4085 "an anonymous union cannot have function members");
4086 }
4087
4088 /* Anonymous aggregates cannot have fields with ctors, dtors or complex
4089 assignment operators (because they cannot have these methods themselves).
4090 For anonymous unions this is already checked because they are not allowed
4091 in any union, otherwise we have to check it. */
4092 if (TREE_CODE (t) != UNION_TYPE)
4093 {
4094 tree field, type;
4095
4096 for (field = TYPE_FIELDS (t); field; field = DECL_CHAIN (field))
4097 if (TREE_CODE (field) == FIELD_DECL)
4098 {
4099 type = TREE_TYPE (field);
4100 if (CLASS_TYPE_P (type))
4101 {
4102 if (TYPE_NEEDS_CONSTRUCTING (type))
4103 error ("member %q+#D with constructor not allowed "
4104 "in anonymous aggregate", field);
4105 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
4106 error ("member %q+#D with destructor not allowed "
4107 "in anonymous aggregate", field);
4108 if (TYPE_HAS_COMPLEX_COPY_ASSIGN (type))
4109 error ("member %q+#D with copy assignment operator "
4110 "not allowed in anonymous aggregate", field);
4111 }
4112 }
4113 }
4114 }
4115
4116 /* Make sure that a declaration with no declarator is well-formed, i.e.
4117 just declares a tagged type or anonymous union.
4118
4119 Returns the type declared; or NULL_TREE if none. */
4120
4121 tree
4122 check_tag_decl (cp_decl_specifier_seq *declspecs)
4123 {
4124 int saw_friend = declspecs->specs[(int)ds_friend] != 0;
4125 int saw_typedef = declspecs->specs[(int)ds_typedef] != 0;
4126 /* If a class, struct, or enum type is declared by the DECLSPECS
4127 (i.e, if a class-specifier, enum-specifier, or non-typename
4128 elaborated-type-specifier appears in the DECLSPECS),
4129 DECLARED_TYPE is set to the corresponding type. */
4130 tree declared_type = NULL_TREE;
4131 bool error_p = false;
4132
4133 if (declspecs->multiple_types_p)
4134 error ("multiple types in one declaration");
4135 else if (declspecs->redefined_builtin_type)
4136 {
4137 if (!in_system_header)
4138 permerror (input_location, "redeclaration of C++ built-in type %qT",
4139 declspecs->redefined_builtin_type);
4140 return NULL_TREE;
4141 }
4142
4143 if (declspecs->type
4144 && TYPE_P (declspecs->type)
4145 && ((TREE_CODE (declspecs->type) != TYPENAME_TYPE
4146 && MAYBE_CLASS_TYPE_P (declspecs->type))
4147 || TREE_CODE (declspecs->type) == ENUMERAL_TYPE))
4148 declared_type = declspecs->type;
4149 else if (declspecs->type == error_mark_node)
4150 error_p = true;
4151 if (declared_type == NULL_TREE && ! saw_friend && !error_p)
4152 permerror (input_location, "declaration does not declare anything");
4153 else if (declared_type != NULL_TREE && type_uses_auto (declared_type))
4154 {
4155 error ("%<auto%> can only be specified for variables "
4156 "or function declarations");
4157 return error_mark_node;
4158 }
4159 /* Check for an anonymous union. */
4160 else if (declared_type && RECORD_OR_UNION_CODE_P (TREE_CODE (declared_type))
4161 && TYPE_ANONYMOUS_P (declared_type))
4162 {
4163 /* 7/3 In a simple-declaration, the optional init-declarator-list
4164 can be omitted only when declaring a class (clause 9) or
4165 enumeration (7.2), that is, when the decl-specifier-seq contains
4166 either a class-specifier, an elaborated-type-specifier with
4167 a class-key (9.1), or an enum-specifier. In these cases and
4168 whenever a class-specifier or enum-specifier is present in the
4169 decl-specifier-seq, the identifiers in these specifiers are among
4170 the names being declared by the declaration (as class-name,
4171 enum-names, or enumerators, depending on the syntax). In such
4172 cases, and except for the declaration of an unnamed bit-field (9.6),
4173 the decl-specifier-seq shall introduce one or more names into the
4174 program, or shall redeclare a name introduced by a previous
4175 declaration. [Example:
4176 enum { }; // ill-formed
4177 typedef class { }; // ill-formed
4178 --end example] */
4179 if (saw_typedef)
4180 {
4181 error ("missing type-name in typedef-declaration");
4182 return NULL_TREE;
4183 }
4184 /* Anonymous unions are objects, so they can have specifiers. */;
4185 SET_ANON_AGGR_TYPE_P (declared_type);
4186
4187 if (TREE_CODE (declared_type) != UNION_TYPE && !in_system_header)
4188 pedwarn (input_location, OPT_pedantic, "ISO C++ prohibits anonymous structs");
4189 }
4190
4191 else
4192 {
4193 if (declspecs->specs[(int)ds_inline]
4194 || declspecs->specs[(int)ds_virtual])
4195 error ("%qs can only be specified for functions",
4196 declspecs->specs[(int)ds_inline]
4197 ? "inline" : "virtual");
4198 else if (saw_friend
4199 && (!current_class_type
4200 || current_scope () != current_class_type))
4201 error ("%<friend%> can only be specified inside a class");
4202 else if (declspecs->specs[(int)ds_explicit])
4203 error ("%<explicit%> can only be specified for constructors");
4204 else if (declspecs->storage_class)
4205 error ("a storage class can only be specified for objects "
4206 "and functions");
4207 else if (declspecs->specs[(int)ds_const]
4208 || declspecs->specs[(int)ds_volatile]
4209 || declspecs->specs[(int)ds_restrict]
4210 || declspecs->specs[(int)ds_thread])
4211 error ("qualifiers can only be specified for objects "
4212 "and functions");
4213 else if (saw_typedef)
4214 warning (0, "%<typedef%> was ignored in this declaration");
4215 else if (declspecs->specs[(int) ds_constexpr])
4216 error ("%<constexpr%> cannot be used for type declarations");
4217 }
4218
4219 if (declspecs->attributes)
4220 {
4221 location_t loc = input_location;
4222 if (!CLASSTYPE_TEMPLATE_INSTANTIATION (declared_type))
4223 /* For a non-template class, use the name location; for a template
4224 class (an explicit instantiation), use the current location. */
4225 input_location = location_of (declared_type);
4226 warning (0, "attribute ignored in declaration of %q#T", declared_type);
4227 warning (0, "attribute for %q#T must follow the %qs keyword",
4228 declared_type, class_key_or_enum_as_string (declared_type));
4229 input_location = loc;
4230 }
4231
4232 return declared_type;
4233 }
4234
4235 /* Called when a declaration is seen that contains no names to declare.
4236 If its type is a reference to a structure, union or enum inherited
4237 from a containing scope, shadow that tag name for the current scope
4238 with a forward reference.
4239 If its type defines a new named structure or union
4240 or defines an enum, it is valid but we need not do anything here.
4241 Otherwise, it is an error.
4242
4243 C++: may have to grok the declspecs to learn about static,
4244 complain for anonymous unions.
4245
4246 Returns the TYPE declared -- or NULL_TREE if none. */
4247
4248 tree
4249 shadow_tag (cp_decl_specifier_seq *declspecs)
4250 {
4251 tree t = check_tag_decl (declspecs);
4252
4253 if (!t)
4254 return NULL_TREE;
4255
4256 if (maybe_process_partial_specialization (t) == error_mark_node)
4257 return NULL_TREE;
4258
4259 /* This is where the variables in an anonymous union are
4260 declared. An anonymous union declaration looks like:
4261 union { ... } ;
4262 because there is no declarator after the union, the parser
4263 sends that declaration here. */
4264 if (ANON_AGGR_TYPE_P (t))
4265 {
4266 fixup_anonymous_aggr (t);
4267
4268 if (TYPE_FIELDS (t))
4269 {
4270 tree decl = grokdeclarator (/*declarator=*/NULL,
4271 declspecs, NORMAL, 0, NULL);
4272 finish_anon_union (decl);
4273 }
4274 }
4275
4276 return t;
4277 }
4278 \f
4279 /* Decode a "typename", such as "int **", returning a ..._TYPE node. */
4280
4281 tree
4282 groktypename (cp_decl_specifier_seq *type_specifiers,
4283 const cp_declarator *declarator,
4284 bool is_template_arg)
4285 {
4286 tree attrs;
4287 tree type;
4288 enum decl_context context
4289 = is_template_arg ? TEMPLATE_TYPE_ARG : TYPENAME;
4290 attrs = type_specifiers->attributes;
4291 type_specifiers->attributes = NULL_TREE;
4292 type = grokdeclarator (declarator, type_specifiers, context, 0, &attrs);
4293 if (attrs && type != error_mark_node)
4294 {
4295 if (CLASS_TYPE_P (type))
4296 warning (OPT_Wattributes, "ignoring attributes applied to class type %qT "
4297 "outside of definition", type);
4298 else if (MAYBE_CLASS_TYPE_P (type))
4299 /* A template type parameter or other dependent type. */
4300 warning (OPT_Wattributes, "ignoring attributes applied to dependent "
4301 "type %qT without an associated declaration", type);
4302 else
4303 cplus_decl_attributes (&type, attrs, 0);
4304 }
4305 return type;
4306 }
4307
4308 /* Process a DECLARATOR for a function-scope variable declaration,
4309 namespace-scope variable declaration, or function declaration.
4310 (Function definitions go through start_function; class member
4311 declarations appearing in the body of the class go through
4312 grokfield.) The DECL corresponding to the DECLARATOR is returned.
4313 If an error occurs, the error_mark_node is returned instead.
4314
4315 DECLSPECS are the decl-specifiers for the declaration. INITIALIZED is
4316 SD_INITIALIZED if an explicit initializer is present, or SD_DEFAULTED
4317 for an explicitly defaulted function, or SD_DELETED for an explicitly
4318 deleted function, but 0 (SD_UNINITIALIZED) if this is a variable
4319 implicitly initialized via a default constructor. ATTRIBUTES and
4320 PREFIX_ATTRIBUTES are GNU attributes associated with this declaration.
4321
4322 The scope represented by the context of the returned DECL is pushed
4323 (if it is not the global namespace) and is assigned to
4324 *PUSHED_SCOPE_P. The caller is then responsible for calling
4325 pop_scope on *PUSHED_SCOPE_P if it is set. */
4326
4327 tree
4328 start_decl (const cp_declarator *declarator,
4329 cp_decl_specifier_seq *declspecs,
4330 int initialized,
4331 tree attributes,
4332 tree prefix_attributes,
4333 tree *pushed_scope_p)
4334 {
4335 tree decl;
4336 tree context;
4337 bool was_public;
4338 int flags;
4339 bool alias;
4340
4341 *pushed_scope_p = NULL_TREE;
4342
4343 /* An object declared as __attribute__((deprecated)) suppresses
4344 warnings of uses of other deprecated items. */
4345 if (lookup_attribute ("deprecated", attributes))
4346 deprecated_state = DEPRECATED_SUPPRESS;
4347
4348 attributes = chainon (attributes, prefix_attributes);
4349
4350 decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
4351 &attributes);
4352
4353 deprecated_state = DEPRECATED_NORMAL;
4354
4355 if (decl == NULL_TREE || TREE_CODE (decl) == VOID_TYPE
4356 || decl == error_mark_node)
4357 return error_mark_node;
4358
4359 context = CP_DECL_CONTEXT (decl);
4360 if (context != global_namespace)
4361 *pushed_scope_p = push_scope (context);
4362
4363 if (initialized)
4364 /* Is it valid for this decl to have an initializer at all?
4365 If not, set INITIALIZED to zero, which will indirectly
4366 tell `cp_finish_decl' to ignore the initializer once it is parsed. */
4367 switch (TREE_CODE (decl))
4368 {
4369 case TYPE_DECL:
4370 error ("typedef %qD is initialized (use decltype instead)", decl);
4371 return error_mark_node;
4372
4373 case FUNCTION_DECL:
4374 if (initialized == SD_DELETED)
4375 /* We'll handle the rest of the semantics later, but we need to
4376 set this now so it's visible to duplicate_decls. */
4377 DECL_DELETED_FN (decl) = 1;
4378 break;
4379
4380 default:
4381 break;
4382 }
4383
4384 if (initialized)
4385 {
4386 if (! toplevel_bindings_p ()
4387 && DECL_EXTERNAL (decl))
4388 warning (0, "declaration of %q#D has %<extern%> and is initialized",
4389 decl);
4390 DECL_EXTERNAL (decl) = 0;
4391 if (toplevel_bindings_p ())
4392 TREE_STATIC (decl) = 1;
4393 }
4394 alias = lookup_attribute ("alias", DECL_ATTRIBUTES (decl)) != 0;
4395
4396 if (alias && TREE_CODE (decl) == FUNCTION_DECL)
4397 record_key_method_defined (decl);
4398
4399 /* If this is a typedef that names the class for linkage purposes
4400 (7.1.3p8), apply any attributes directly to the type. */
4401 if (TREE_CODE (decl) == TYPE_DECL
4402 && TAGGED_TYPE_P (TREE_TYPE (decl))
4403 && decl == TYPE_NAME (TYPE_MAIN_VARIANT (TREE_TYPE (decl))))
4404 flags = ATTR_FLAG_TYPE_IN_PLACE;
4405 else
4406 flags = 0;
4407
4408 /* Set attributes here so if duplicate decl, will have proper attributes. */
4409 cplus_decl_attributes (&decl, attributes, flags);
4410
4411 /* Dllimported symbols cannot be defined. Static data members (which
4412 can be initialized in-class and dllimported) go through grokfield,
4413 not here, so we don't need to exclude those decls when checking for
4414 a definition. */
4415 if (initialized && DECL_DLLIMPORT_P (decl))
4416 {
4417 error ("definition of %q#D is marked %<dllimport%>", decl);
4418 DECL_DLLIMPORT_P (decl) = 0;
4419 }
4420
4421 /* If #pragma weak was used, mark the decl weak now. */
4422 maybe_apply_pragma_weak (decl);
4423
4424 if (TREE_CODE (decl) == FUNCTION_DECL
4425 && DECL_DECLARED_INLINE_P (decl)
4426 && DECL_UNINLINABLE (decl)
4427 && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl)))
4428 warning (0, "inline function %q+D given attribute noinline", decl);
4429
4430 if (TYPE_P (context) && COMPLETE_TYPE_P (complete_type (context)))
4431 {
4432 if (TREE_CODE (decl) == VAR_DECL)
4433 {
4434 tree field = lookup_field (context, DECL_NAME (decl), 0, false);
4435 if (field == NULL_TREE || TREE_CODE (field) != VAR_DECL)
4436 error ("%q#D is not a static member of %q#T", decl, context);
4437 else
4438 {
4439 if (DECL_CONTEXT (field) != context)
4440 {
4441 if (!same_type_p (DECL_CONTEXT (field), context))
4442 permerror (input_location, "ISO C++ does not permit %<%T::%D%> "
4443 "to be defined as %<%T::%D%>",
4444 DECL_CONTEXT (field), DECL_NAME (decl),
4445 context, DECL_NAME (decl));
4446 DECL_CONTEXT (decl) = DECL_CONTEXT (field);
4447 }
4448 if (processing_specialization
4449 && template_class_depth (context) == 0
4450 && CLASSTYPE_TEMPLATE_SPECIALIZATION (context))
4451 error ("template header not allowed in member definition "
4452 "of explicitly specialized class");
4453 /* Static data member are tricky; an in-class initialization
4454 still doesn't provide a definition, so the in-class
4455 declaration will have DECL_EXTERNAL set, but will have an
4456 initialization. Thus, duplicate_decls won't warn
4457 about this situation, and so we check here. */
4458 if (initialized && DECL_INITIALIZED_IN_CLASS_P (field))
4459 error ("duplicate initialization of %qD", decl);
4460 if (duplicate_decls (decl, field, /*newdecl_is_friend=*/false))
4461 decl = field;
4462 if (declspecs->specs[(int) ds_constexpr]
4463 && !DECL_DECLARED_CONSTEXPR_P (field))
4464 error ("%qD declared %<constexpr%> outside its class", field);
4465 }
4466 }
4467 else
4468 {
4469 tree field = check_classfn (context, decl,
4470 (processing_template_decl
4471 > template_class_depth (context))
4472 ? current_template_parms
4473 : NULL_TREE);
4474 if (field && field != error_mark_node
4475 && duplicate_decls (decl, field,
4476 /*newdecl_is_friend=*/false))
4477 decl = field;
4478 }
4479
4480 /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set. */
4481 DECL_IN_AGGR_P (decl) = 0;
4482 /* Do not mark DECL as an explicit specialization if it was not
4483 already marked as an instantiation; a declaration should
4484 never be marked as a specialization unless we know what
4485 template is being specialized. */
4486 if (DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl))
4487 {
4488 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
4489
4490 /* [temp.expl.spec] An explicit specialization of a static data
4491 member of a template is a definition if the declaration
4492 includes an initializer; otherwise, it is a declaration.
4493
4494 We check for processing_specialization so this only applies
4495 to the new specialization syntax. */
4496 if (!initialized && processing_specialization)
4497 DECL_EXTERNAL (decl) = 1;
4498 }
4499
4500 if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl)
4501 /* Aliases are definitions. */
4502 && !alias)
4503 permerror (input_location, "declaration of %q#D outside of class is not definition",
4504 decl);
4505 }
4506
4507 was_public = TREE_PUBLIC (decl);
4508
4509 /* Enter this declaration into the symbol table. */
4510 decl = maybe_push_decl (decl);
4511
4512 if (processing_template_decl)
4513 decl = push_template_decl (decl);
4514 if (decl == error_mark_node)
4515 return error_mark_node;
4516
4517 /* Tell the back end to use or not use .common as appropriate. If we say
4518 -fconserve-space, we want this to save .data space, at the expense of
4519 wrong semantics. If we say -fno-conserve-space, we want this to
4520 produce errors about redefs; to do this we force variables into the
4521 data segment. */
4522 if (flag_conserve_space
4523 && TREE_CODE (decl) == VAR_DECL
4524 && TREE_PUBLIC (decl)
4525 && !DECL_THREAD_LOCAL_P (decl)
4526 && !have_global_bss_p ())
4527 DECL_COMMON (decl) = 1;
4528
4529 if (TREE_CODE (decl) == VAR_DECL
4530 && DECL_NAMESPACE_SCOPE_P (decl) && !TREE_PUBLIC (decl) && !was_public
4531 && !DECL_THIS_STATIC (decl) && !DECL_ARTIFICIAL (decl))
4532 {
4533 /* This is a const variable with implicit 'static'. Set
4534 DECL_THIS_STATIC so we can tell it from variables that are
4535 !TREE_PUBLIC because of the anonymous namespace. */
4536 gcc_assert (CP_TYPE_CONST_P (TREE_TYPE (decl)) || errorcount);
4537 DECL_THIS_STATIC (decl) = 1;
4538 }
4539
4540 if (!processing_template_decl && TREE_CODE (decl) == VAR_DECL)
4541 start_decl_1 (decl, initialized);
4542
4543 return decl;
4544 }
4545
4546 /* Process the declaration of a variable DECL. INITIALIZED is true
4547 iff DECL is explicitly initialized. (INITIALIZED is false if the
4548 variable is initialized via an implicitly-called constructor.)
4549 This function must be called for ordinary variables (including, for
4550 example, implicit instantiations of templates), but must not be
4551 called for template declarations. */
4552
4553 void
4554 start_decl_1 (tree decl, bool initialized)
4555 {
4556 tree type;
4557 bool complete_p;
4558 bool aggregate_definition_p;
4559
4560 gcc_assert (!processing_template_decl);
4561
4562 if (error_operand_p (decl))
4563 return;
4564
4565 gcc_assert (TREE_CODE (decl) == VAR_DECL);
4566
4567 type = TREE_TYPE (decl);
4568 complete_p = COMPLETE_TYPE_P (type);
4569 aggregate_definition_p = MAYBE_CLASS_TYPE_P (type) && !DECL_EXTERNAL (decl);
4570
4571 /* If an explicit initializer is present, or if this is a definition
4572 of an aggregate, then we need a complete type at this point.
4573 (Scalars are always complete types, so there is nothing to
4574 check.) This code just sets COMPLETE_P; errors (if necessary)
4575 are issued below. */
4576 if ((initialized || aggregate_definition_p)
4577 && !complete_p
4578 && COMPLETE_TYPE_P (complete_type (type)))
4579 {
4580 complete_p = true;
4581 /* We will not yet have set TREE_READONLY on DECL if the type
4582 was "const", but incomplete, before this point. But, now, we
4583 have a complete type, so we can try again. */
4584 cp_apply_type_quals_to_decl (cp_type_quals (type), decl);
4585 }
4586
4587 if (initialized)
4588 /* Is it valid for this decl to have an initializer at all? */
4589 {
4590 /* Don't allow initializations for incomplete types except for
4591 arrays which might be completed by the initialization. */
4592 if (complete_p)
4593 ; /* A complete type is ok. */
4594 else if (type_uses_auto (type))
4595 ; /* An auto type is ok. */
4596 else if (TREE_CODE (type) != ARRAY_TYPE)
4597 {
4598 error ("variable %q#D has initializer but incomplete type", decl);
4599 type = TREE_TYPE (decl) = error_mark_node;
4600 }
4601 else if (!COMPLETE_TYPE_P (complete_type (TREE_TYPE (type))))
4602 {
4603 if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
4604 error ("elements of array %q#D have incomplete type", decl);
4605 /* else we already gave an error in start_decl. */
4606 }
4607 }
4608 else if (aggregate_definition_p && !complete_p)
4609 {
4610 if (type_uses_auto (type))
4611 error ("declaration of %q#D has no initializer", decl);
4612 else
4613 error ("aggregate %q#D has incomplete type and cannot be defined",
4614 decl);
4615 /* Change the type so that assemble_variable will give
4616 DECL an rtl we can live with: (mem (const_int 0)). */
4617 type = TREE_TYPE (decl) = error_mark_node;
4618 }
4619
4620 /* Create a new scope to hold this declaration if necessary.
4621 Whether or not a new scope is necessary cannot be determined
4622 until after the type has been completed; if the type is a
4623 specialization of a class template it is not until after
4624 instantiation has occurred that TYPE_HAS_NONTRIVIAL_DESTRUCTOR
4625 will be set correctly. */
4626 maybe_push_cleanup_level (type);
4627 }
4628
4629 /* Handle initialization of references. DECL, TYPE, and INIT have the
4630 same meaning as in cp_finish_decl. *CLEANUP must be NULL on entry,
4631 but will be set to a new CLEANUP_STMT if a temporary is created
4632 that must be destroyed subsequently.
4633
4634 Returns an initializer expression to use to initialize DECL, or
4635 NULL if the initialization can be performed statically.
4636
4637 Quotes on semantics can be found in ARM 8.4.3. */
4638
4639 static tree
4640 grok_reference_init (tree decl, tree type, tree init, int flags)
4641 {
4642 if (init == NULL_TREE)
4643 {
4644 if ((DECL_LANG_SPECIFIC (decl) == 0
4645 || DECL_IN_AGGR_P (decl) == 0)
4646 && ! DECL_THIS_EXTERN (decl))
4647 error ("%qD declared as reference but not initialized", decl);
4648 return NULL_TREE;
4649 }
4650
4651 if (TREE_CODE (init) == TREE_LIST)
4652 init = build_x_compound_expr_from_list (init, ELK_INIT,
4653 tf_warning_or_error);
4654
4655 if (TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE
4656 && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
4657 /* Note: default conversion is only called in very special cases. */
4658 init = decay_conversion (init);
4659
4660 /* Convert INIT to the reference type TYPE. This may involve the
4661 creation of a temporary, whose lifetime must be the same as that
4662 of the reference. If so, a DECL_EXPR for the temporary will be
4663 added just after the DECL_EXPR for DECL. That's why we don't set
4664 DECL_INITIAL for local references (instead assigning to them
4665 explicitly); we need to allow the temporary to be initialized
4666 first. */
4667 return initialize_reference (type, init, flags,
4668 tf_warning_or_error);
4669 }
4670
4671 /* Designated initializers in arrays are not supported in GNU C++.
4672 The parser cannot detect this error since it does not know whether
4673 a given brace-enclosed initializer is for a class type or for an
4674 array. This function checks that CE does not use a designated
4675 initializer. If it does, an error is issued. Returns true if CE
4676 is valid, i.e., does not have a designated initializer. */
4677
4678 static bool
4679 check_array_designated_initializer (const constructor_elt *ce,
4680 unsigned HOST_WIDE_INT index)
4681 {
4682 /* Designated initializers for array elements are not supported. */
4683 if (ce->index)
4684 {
4685 /* The parser only allows identifiers as designated
4686 initializers. */
4687 if (ce->index == error_mark_node)
4688 error ("name used in a GNU-style designated "
4689 "initializer for an array");
4690 else if (TREE_CODE (ce->index) == INTEGER_CST)
4691 {
4692 /* A C99 designator is OK if it matches the current index. */
4693 if (TREE_INT_CST_LOW (ce->index) == index)
4694 return true;
4695 else
4696 sorry ("non-trivial designated initializers not supported");
4697 }
4698 else
4699 {
4700 gcc_assert (TREE_CODE (ce->index) == IDENTIFIER_NODE);
4701 error ("name %qD used in a GNU-style designated "
4702 "initializer for an array", ce->index);
4703 }
4704 return false;
4705 }
4706
4707 return true;
4708 }
4709
4710 /* When parsing `int a[] = {1, 2};' we don't know the size of the
4711 array until we finish parsing the initializer. If that's the
4712 situation we're in, update DECL accordingly. */
4713
4714 static void
4715 maybe_deduce_size_from_array_init (tree decl, tree init)
4716 {
4717 tree type = TREE_TYPE (decl);
4718
4719 if (TREE_CODE (type) == ARRAY_TYPE
4720 && TYPE_DOMAIN (type) == NULL_TREE
4721 && TREE_CODE (decl) != TYPE_DECL)
4722 {
4723 /* do_default is really a C-ism to deal with tentative definitions.
4724 But let's leave it here to ease the eventual merge. */
4725 int do_default = !DECL_EXTERNAL (decl);
4726 tree initializer = init ? init : DECL_INITIAL (decl);
4727 int failure = 0;
4728
4729 /* Check that there are no designated initializers in INIT, as
4730 those are not supported in GNU C++, and as the middle-end
4731 will crash if presented with a non-numeric designated
4732 initializer. */
4733 if (initializer && TREE_CODE (initializer) == CONSTRUCTOR)
4734 {
4735 VEC(constructor_elt,gc) *v = CONSTRUCTOR_ELTS (initializer);
4736 constructor_elt *ce;
4737 HOST_WIDE_INT i;
4738 FOR_EACH_VEC_ELT (constructor_elt, v, i, ce)
4739 if (!check_array_designated_initializer (ce, i))
4740 failure = 1;
4741 }
4742
4743 if (!failure)
4744 {
4745 failure = cp_complete_array_type (&TREE_TYPE (decl), initializer,
4746 do_default);
4747 if (failure == 1)
4748 {
4749 error ("initializer fails to determine size of %qD", decl);
4750 TREE_TYPE (decl) = error_mark_node;
4751 }
4752 else if (failure == 2)
4753 {
4754 if (do_default)
4755 {
4756 error ("array size missing in %qD", decl);
4757 TREE_TYPE (decl) = error_mark_node;
4758 }
4759 /* If a `static' var's size isn't known, make it extern as
4760 well as static, so it does not get allocated. If it's not
4761 `static', then don't mark it extern; finish_incomplete_decl
4762 will give it a default size and it will get allocated. */
4763 else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
4764 DECL_EXTERNAL (decl) = 1;
4765 }
4766 else if (failure == 3)
4767 {
4768 error ("zero-size array %qD", decl);
4769 TREE_TYPE (decl) = error_mark_node;
4770 }
4771 }
4772
4773 cp_apply_type_quals_to_decl (cp_type_quals (TREE_TYPE (decl)), decl);
4774
4775 relayout_decl (decl);
4776 }
4777 }
4778
4779 /* Set DECL_SIZE, DECL_ALIGN, etc. for DECL (a VAR_DECL), and issue
4780 any appropriate error messages regarding the layout. */
4781
4782 static void
4783 layout_var_decl (tree decl)
4784 {
4785 tree type;
4786
4787 type = TREE_TYPE (decl);
4788 if (type == error_mark_node)
4789 return;
4790
4791 /* If we haven't already layed out this declaration, do so now.
4792 Note that we must not call complete type for an external object
4793 because it's type might involve templates that we are not
4794 supposed to instantiate yet. (And it's perfectly valid to say
4795 `extern X x' for some incomplete type `X'.) */
4796 if (!DECL_EXTERNAL (decl))
4797 complete_type (type);
4798 if (!DECL_SIZE (decl)
4799 && TREE_TYPE (decl) != error_mark_node
4800 && (COMPLETE_TYPE_P (type)
4801 || (TREE_CODE (type) == ARRAY_TYPE
4802 && !TYPE_DOMAIN (type)
4803 && COMPLETE_TYPE_P (TREE_TYPE (type)))))
4804 layout_decl (decl, 0);
4805
4806 if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
4807 {
4808 /* An automatic variable with an incomplete type: that is an error.
4809 Don't talk about array types here, since we took care of that
4810 message in grokdeclarator. */
4811 error ("storage size of %qD isn%'t known", decl);
4812 TREE_TYPE (decl) = error_mark_node;
4813 }
4814 #if 0
4815 /* Keep this code around in case we later want to control debug info
4816 based on whether a type is "used". (jason 1999-11-11) */
4817
4818 else if (!DECL_EXTERNAL (decl) && MAYBE_CLASS_TYPE_P (ttype))
4819 /* Let debugger know it should output info for this type. */
4820 note_debug_info_needed (ttype);
4821
4822 if (TREE_STATIC (decl) && DECL_CLASS_SCOPE_P (decl))
4823 note_debug_info_needed (DECL_CONTEXT (decl));
4824 #endif
4825
4826 if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
4827 && DECL_SIZE (decl) != NULL_TREE
4828 && ! TREE_CONSTANT (DECL_SIZE (decl)))
4829 {
4830 if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
4831 constant_expression_warning (DECL_SIZE (decl));
4832 else
4833 {
4834 error ("storage size of %qD isn%'t constant", decl);
4835 TREE_TYPE (decl) = error_mark_node;
4836 }
4837 }
4838 }
4839
4840 /* If a local static variable is declared in an inline function, or if
4841 we have a weak definition, we must endeavor to create only one
4842 instance of the variable at link-time. */
4843
4844 void
4845 maybe_commonize_var (tree decl)
4846 {
4847 /* Static data in a function with comdat linkage also has comdat
4848 linkage. */
4849 if (TREE_STATIC (decl)
4850 /* Don't mess with __FUNCTION__. */
4851 && ! DECL_ARTIFICIAL (decl)
4852 && DECL_FUNCTION_SCOPE_P (decl)
4853 && vague_linkage_p (DECL_CONTEXT (decl)))
4854 {
4855 if (flag_weak)
4856 {
4857 /* With weak symbols, we simply make the variable COMDAT;
4858 that will cause copies in multiple translations units to
4859 be merged. */
4860 comdat_linkage (decl);
4861 }
4862 else
4863 {
4864 if (DECL_INITIAL (decl) == NULL_TREE
4865 || DECL_INITIAL (decl) == error_mark_node)
4866 {
4867 /* Without weak symbols, we can use COMMON to merge
4868 uninitialized variables. */
4869 TREE_PUBLIC (decl) = 1;
4870 DECL_COMMON (decl) = 1;
4871 }
4872 else
4873 {
4874 /* While for initialized variables, we must use internal
4875 linkage -- which means that multiple copies will not
4876 be merged. */
4877 TREE_PUBLIC (decl) = 0;
4878 DECL_COMMON (decl) = 0;
4879 warning_at (input_location, 0,
4880 "sorry: semantics of inline function static "
4881 "data %q+#D are wrong (you%'ll wind up "
4882 "with multiple copies)", decl);
4883 warning_at (DECL_SOURCE_LOCATION (decl), 0,
4884 " you can work around this by removing "
4885 "the initializer");
4886 }
4887 }
4888 }
4889 else if (DECL_LANG_SPECIFIC (decl) && DECL_COMDAT (decl))
4890 /* Set it up again; we might have set DECL_INITIAL since the last
4891 time. */
4892 comdat_linkage (decl);
4893 }
4894
4895 /* Issue an error message if DECL is an uninitialized const variable. */
4896
4897 static void
4898 check_for_uninitialized_const_var (tree decl)
4899 {
4900 tree type = strip_array_types (TREE_TYPE (decl));
4901
4902 /* ``Unless explicitly declared extern, a const object does not have
4903 external linkage and must be initialized. ($8.4; $12.1)'' ARM
4904 7.1.6 */
4905 if (TREE_CODE (decl) == VAR_DECL
4906 && TREE_CODE (type) != REFERENCE_TYPE
4907 && CP_TYPE_CONST_P (type)
4908 && !DECL_INITIAL (decl))
4909 {
4910 tree field = default_init_uninitialized_part (type);
4911 if (!field)
4912 return;
4913
4914 permerror (DECL_SOURCE_LOCATION (decl),
4915 "uninitialized const %qD", decl);
4916
4917 if (CLASS_TYPE_P (type))
4918 {
4919 tree defaulted_ctor;
4920
4921 inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (type)),
4922 "%q#T has no user-provided default constructor", type);
4923 defaulted_ctor = in_class_defaulted_default_constructor (type);
4924 if (defaulted_ctor)
4925 inform (DECL_SOURCE_LOCATION (defaulted_ctor),
4926 "constructor is not user-provided because it is "
4927 "explicitly defaulted in the class body");
4928 inform (0, "and the implicitly-defined constructor does not "
4929 "initialize %q+#D", field);
4930 }
4931 }
4932 }
4933 \f
4934 /* Structure holding the current initializer being processed by reshape_init.
4935 CUR is a pointer to the current element being processed, END is a pointer
4936 after the last element present in the initializer. */
4937 typedef struct reshape_iterator_t
4938 {
4939 constructor_elt *cur;
4940 constructor_elt *end;
4941 } reshape_iter;
4942
4943 static tree reshape_init_r (tree, reshape_iter *, bool, tsubst_flags_t);
4944
4945 /* FIELD is a FIELD_DECL or NULL. In the former case, the value
4946 returned is the next FIELD_DECL (possibly FIELD itself) that can be
4947 initialized. If there are no more such fields, the return value
4948 will be NULL. */
4949
4950 tree
4951 next_initializable_field (tree field)
4952 {
4953 while (field
4954 && (TREE_CODE (field) != FIELD_DECL
4955 || (DECL_C_BIT_FIELD (field) && !DECL_NAME (field))
4956 || DECL_ARTIFICIAL (field)))
4957 field = DECL_CHAIN (field);
4958
4959 return field;
4960 }
4961
4962 /* Subroutine of reshape_init_array and reshape_init_vector, which does
4963 the actual work. ELT_TYPE is the element type of the array. MAX_INDEX is an
4964 INTEGER_CST representing the size of the array minus one (the maximum index),
4965 or NULL_TREE if the array was declared without specifying the size. D is
4966 the iterator within the constructor. */
4967
4968 static tree
4969 reshape_init_array_1 (tree elt_type, tree max_index, reshape_iter *d,
4970 tsubst_flags_t complain)
4971 {
4972 tree new_init;
4973 bool sized_array_p = (max_index != NULL_TREE);
4974 unsigned HOST_WIDE_INT max_index_cst = 0;
4975 unsigned HOST_WIDE_INT index;
4976
4977 /* The initializer for an array is always a CONSTRUCTOR. */
4978 new_init = build_constructor (init_list_type_node, NULL);
4979
4980 if (sized_array_p)
4981 {
4982 /* Minus 1 is used for zero sized arrays. */
4983 if (integer_all_onesp (max_index))
4984 return new_init;
4985
4986 if (host_integerp (max_index, 1))
4987 max_index_cst = tree_low_cst (max_index, 1);
4988 /* sizetype is sign extended, not zero extended. */
4989 else
4990 max_index_cst = tree_low_cst (fold_convert (size_type_node, max_index),
4991 1);
4992 }
4993
4994 /* Loop until there are no more initializers. */
4995 for (index = 0;
4996 d->cur != d->end && (!sized_array_p || index <= max_index_cst);
4997 ++index)
4998 {
4999 tree elt_init;
5000
5001 check_array_designated_initializer (d->cur, index);
5002 elt_init = reshape_init_r (elt_type, d, /*first_initializer_p=*/false,
5003 complain);
5004 if (elt_init == error_mark_node)
5005 return error_mark_node;
5006 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init),
5007 size_int (index), elt_init);
5008 if (!TREE_CONSTANT (elt_init))
5009 TREE_CONSTANT (new_init) = false;
5010 }
5011
5012 return new_init;
5013 }
5014
5015 /* Subroutine of reshape_init_r, processes the initializers for arrays.
5016 Parameters are the same of reshape_init_r. */
5017
5018 static tree
5019 reshape_init_array (tree type, reshape_iter *d, tsubst_flags_t complain)
5020 {
5021 tree max_index = NULL_TREE;
5022
5023 gcc_assert (TREE_CODE (type) == ARRAY_TYPE);
5024
5025 if (TYPE_DOMAIN (type))
5026 max_index = array_type_nelts (type);
5027
5028 return reshape_init_array_1 (TREE_TYPE (type), max_index, d, complain);
5029 }
5030
5031 /* Subroutine of reshape_init_r, processes the initializers for vectors.
5032 Parameters are the same of reshape_init_r. */
5033
5034 static tree
5035 reshape_init_vector (tree type, reshape_iter *d, tsubst_flags_t complain)
5036 {
5037 tree max_index = NULL_TREE;
5038
5039 gcc_assert (TREE_CODE (type) == VECTOR_TYPE);
5040
5041 if (COMPOUND_LITERAL_P (d->cur->value))
5042 {
5043 tree value = d->cur->value;
5044 if (!same_type_p (TREE_TYPE (value), type))
5045 {
5046 if (complain & tf_error)
5047 error ("invalid type %qT as initializer for a vector of type %qT",
5048 TREE_TYPE (d->cur->value), type);
5049 value = error_mark_node;
5050 }
5051 ++d->cur;
5052 return value;
5053 }
5054
5055 /* For a vector, we initialize it as an array of the appropriate size. */
5056 if (TREE_CODE (type) == VECTOR_TYPE)
5057 max_index = size_int (TYPE_VECTOR_SUBPARTS (type) - 1);
5058
5059 return reshape_init_array_1 (TREE_TYPE (type), max_index, d, complain);
5060 }
5061
5062 /* Subroutine of reshape_init_r, processes the initializers for classes
5063 or union. Parameters are the same of reshape_init_r. */
5064
5065 static tree
5066 reshape_init_class (tree type, reshape_iter *d, bool first_initializer_p,
5067 tsubst_flags_t complain)
5068 {
5069 tree field;
5070 tree new_init;
5071
5072 gcc_assert (CLASS_TYPE_P (type));
5073
5074 /* The initializer for a class is always a CONSTRUCTOR. */
5075 new_init = build_constructor (init_list_type_node, NULL);
5076 field = next_initializable_field (TYPE_FIELDS (type));
5077
5078 if (!field)
5079 {
5080 /* [dcl.init.aggr]
5081
5082 An initializer for an aggregate member that is an
5083 empty class shall have the form of an empty
5084 initializer-list {}. */
5085 if (!first_initializer_p)
5086 {
5087 if (complain & tf_error)
5088 error ("initializer for %qT must be brace-enclosed", type);
5089 return error_mark_node;
5090 }
5091 return new_init;
5092 }
5093
5094 /* Loop through the initializable fields, gathering initializers. */
5095 while (d->cur != d->end)
5096 {
5097 tree field_init;
5098
5099 /* Handle designated initializers, as an extension. */
5100 if (d->cur->index)
5101 {
5102 if (TREE_CODE (d->cur->index) == INTEGER_CST)
5103 {
5104 if (complain & tf_error)
5105 error ("%<[%E] =%> used in a GNU-style designated initializer"
5106 " for class %qT", d->cur->index, type);
5107 return error_mark_node;
5108 }
5109
5110 field = lookup_field_1 (type, d->cur->index, /*want_type=*/false);
5111
5112 if (!field || TREE_CODE (field) != FIELD_DECL)
5113 {
5114 if (complain & tf_error)
5115 error ("%qT has no non-static data member named %qD", type,
5116 d->cur->index);
5117 return error_mark_node;
5118 }
5119 }
5120
5121 /* If we processed all the member of the class, we are done. */
5122 if (!field)
5123 break;
5124
5125 field_init = reshape_init_r (TREE_TYPE (field), d,
5126 /*first_initializer_p=*/false, complain);
5127 if (field_init == error_mark_node)
5128 return error_mark_node;
5129
5130 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init), field, field_init);
5131
5132 /* [dcl.init.aggr]
5133
5134 When a union is initialized with a brace-enclosed
5135 initializer, the braces shall only contain an
5136 initializer for the first member of the union. */
5137 if (TREE_CODE (type) == UNION_TYPE)
5138 break;
5139
5140 field = next_initializable_field (DECL_CHAIN (field));
5141 }
5142
5143 return new_init;
5144 }
5145
5146 /* Subroutine of reshape_init_r. We're in a context where C99 initializer
5147 designators are not valid; either complain or return true to indicate
5148 that reshape_init_r should return error_mark_node. */
5149
5150 static bool
5151 has_designator_problem (reshape_iter *d, tsubst_flags_t complain)
5152 {
5153 if (d->cur->index)
5154 {
5155 if (complain & tf_error)
5156 error ("C99 designator %qE outside aggregate initializer",
5157 d->cur->index);
5158 else
5159 return true;
5160 }
5161 return false;
5162 }
5163
5164 /* Subroutine of reshape_init, which processes a single initializer (part of
5165 a CONSTRUCTOR). TYPE is the type of the variable being initialized, D is the
5166 iterator within the CONSTRUCTOR which points to the initializer to process.
5167 FIRST_INITIALIZER_P is true if this is the first initializer of the
5168 outermost CONSTRUCTOR node. */
5169
5170 static tree
5171 reshape_init_r (tree type, reshape_iter *d, bool first_initializer_p,
5172 tsubst_flags_t complain)
5173 {
5174 tree init = d->cur->value;
5175
5176 if (error_operand_p (init))
5177 return error_mark_node;
5178
5179 if (first_initializer_p && !CP_AGGREGATE_TYPE_P (type)
5180 && has_designator_problem (d, complain))
5181 return error_mark_node;
5182
5183 if (TREE_CODE (type) == COMPLEX_TYPE)
5184 {
5185 /* A complex type can be initialized from one or two initializers,
5186 but braces are not elided. */
5187 d->cur++;
5188 if (BRACE_ENCLOSED_INITIALIZER_P (init))
5189 {
5190 if (CONSTRUCTOR_NELTS (init) > 2)
5191 {
5192 if (complain & tf_error)
5193 error ("too many initializers for %qT", type);
5194 else
5195 return error_mark_node;
5196 }
5197 }
5198 else if (first_initializer_p && d->cur != d->end)
5199 {
5200 VEC(constructor_elt, gc) *v = 0;
5201 CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, init);
5202 CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, d->cur->value);
5203 if (has_designator_problem (d, complain))
5204 return error_mark_node;
5205 d->cur++;
5206 init = build_constructor (init_list_type_node, v);
5207 }
5208 return init;
5209 }
5210
5211 /* A non-aggregate type is always initialized with a single
5212 initializer. */
5213 if (!CP_AGGREGATE_TYPE_P (type))
5214 {
5215 /* It is invalid to initialize a non-aggregate type with a
5216 brace-enclosed initializer before C++0x.
5217 We need to check for BRACE_ENCLOSED_INITIALIZER_P here because
5218 of g++.old-deja/g++.mike/p7626.C: a pointer-to-member constant is
5219 a CONSTRUCTOR (with a record type). */
5220 if (TREE_CODE (init) == CONSTRUCTOR
5221 && BRACE_ENCLOSED_INITIALIZER_P (init)) /* p7626.C */
5222 {
5223 if (SCALAR_TYPE_P (type))
5224 {
5225 if (complain & tf_error)
5226 error ("braces around scalar initializer for type %qT", type);
5227 init = error_mark_node;
5228 }
5229 else
5230 maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
5231 }
5232
5233 d->cur++;
5234 return init;
5235 }
5236
5237 /* [dcl.init.aggr]
5238
5239 All implicit type conversions (clause _conv_) are considered when
5240 initializing the aggregate member with an initializer from an
5241 initializer-list. If the initializer can initialize a member,
5242 the member is initialized. Otherwise, if the member is itself a
5243 non-empty subaggregate, brace elision is assumed and the
5244 initializer is considered for the initialization of the first
5245 member of the subaggregate. */
5246 if (TREE_CODE (init) != CONSTRUCTOR
5247 /* But don't try this for the first initializer, since that would be
5248 looking through the outermost braces; A a2 = { a1 }; is not a
5249 valid aggregate initialization. */
5250 && !first_initializer_p
5251 && (same_type_ignoring_top_level_qualifiers_p (type, TREE_TYPE (init))
5252 || can_convert_arg (type, TREE_TYPE (init), init, LOOKUP_NORMAL)))
5253 {
5254 d->cur++;
5255 return init;
5256 }
5257
5258 /* [dcl.init.string]
5259
5260 A char array (whether plain char, signed char, or unsigned char)
5261 can be initialized by a string-literal (optionally enclosed in
5262 braces); a wchar_t array can be initialized by a wide
5263 string-literal (optionally enclosed in braces). */
5264 if (TREE_CODE (type) == ARRAY_TYPE
5265 && char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (type))))
5266 {
5267 tree str_init = init;
5268
5269 /* Strip one level of braces if and only if they enclose a single
5270 element (as allowed by [dcl.init.string]). */
5271 if (!first_initializer_p
5272 && TREE_CODE (str_init) == CONSTRUCTOR
5273 && VEC_length (constructor_elt, CONSTRUCTOR_ELTS (str_init)) == 1)
5274 {
5275 str_init = VEC_index (constructor_elt,
5276 CONSTRUCTOR_ELTS (str_init), 0)->value;
5277 }
5278
5279 /* If it's a string literal, then it's the initializer for the array
5280 as a whole. Otherwise, continue with normal initialization for
5281 array types (one value per array element). */
5282 if (TREE_CODE (str_init) == STRING_CST)
5283 {
5284 if (has_designator_problem (d, complain))
5285 return error_mark_node;
5286 d->cur++;
5287 return str_init;
5288 }
5289 }
5290
5291 /* The following cases are about aggregates. If we are not within a full
5292 initializer already, and there is not a CONSTRUCTOR, it means that there
5293 is a missing set of braces (that is, we are processing the case for
5294 which reshape_init exists). */
5295 if (!first_initializer_p)
5296 {
5297 if (TREE_CODE (init) == CONSTRUCTOR)
5298 {
5299 if (TREE_TYPE (init) && TYPE_PTRMEMFUNC_P (TREE_TYPE (init)))
5300 /* There is no need to reshape pointer-to-member function
5301 initializers, as they are always constructed correctly
5302 by the front end. */
5303 ;
5304 else if (COMPOUND_LITERAL_P (init))
5305 /* For a nested compound literal, there is no need to reshape since
5306 brace elision is not allowed. Even if we decided to allow it,
5307 we should add a call to reshape_init in finish_compound_literal,
5308 before calling digest_init, so changing this code would still
5309 not be necessary. */
5310 gcc_assert (!BRACE_ENCLOSED_INITIALIZER_P (init));
5311 else
5312 {
5313 ++d->cur;
5314 gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
5315 return reshape_init (type, init, complain);
5316 }
5317 }
5318
5319 warning (OPT_Wmissing_braces, "missing braces around initializer for %qT",
5320 type);
5321 }
5322
5323 /* Dispatch to specialized routines. */
5324 if (CLASS_TYPE_P (type))
5325 return reshape_init_class (type, d, first_initializer_p, complain);
5326 else if (TREE_CODE (type) == ARRAY_TYPE)
5327 return reshape_init_array (type, d, complain);
5328 else if (TREE_CODE (type) == VECTOR_TYPE)
5329 return reshape_init_vector (type, d, complain);
5330 else
5331 gcc_unreachable();
5332 }
5333
5334 /* Undo the brace-elision allowed by [dcl.init.aggr] in a
5335 brace-enclosed aggregate initializer.
5336
5337 INIT is the CONSTRUCTOR containing the list of initializers describing
5338 a brace-enclosed initializer for an entity of the indicated aggregate TYPE.
5339 It may not presently match the shape of the TYPE; for example:
5340
5341 struct S { int a; int b; };
5342 struct S a[] = { 1, 2, 3, 4 };
5343
5344 Here INIT will hold a VEC of four elements, rather than a
5345 VEC of two elements, each itself a VEC of two elements. This
5346 routine transforms INIT from the former form into the latter. The
5347 revised CONSTRUCTOR node is returned. */
5348
5349 tree
5350 reshape_init (tree type, tree init, tsubst_flags_t complain)
5351 {
5352 VEC(constructor_elt, gc) *v;
5353 reshape_iter d;
5354 tree new_init;
5355
5356 gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
5357
5358 v = CONSTRUCTOR_ELTS (init);
5359
5360 /* An empty constructor does not need reshaping, and it is always a valid
5361 initializer. */
5362 if (VEC_empty (constructor_elt, v))
5363 return init;
5364
5365 /* Recurse on this CONSTRUCTOR. */
5366 d.cur = VEC_index (constructor_elt, v, 0);
5367 d.end = d.cur + VEC_length (constructor_elt, v);
5368
5369 new_init = reshape_init_r (type, &d, true, complain);
5370 if (new_init == error_mark_node)
5371 return error_mark_node;
5372
5373 /* Make sure all the element of the constructor were used. Otherwise,
5374 issue an error about exceeding initializers. */
5375 if (d.cur != d.end)
5376 {
5377 if (complain & tf_error)
5378 error ("too many initializers for %qT", type);
5379 else
5380 return error_mark_node;
5381 }
5382
5383 return new_init;
5384 }
5385
5386 /* Verify array initializer. Returns true if errors have been reported. */
5387
5388 bool
5389 check_array_initializer (tree decl, tree type, tree init)
5390 {
5391 tree element_type = TREE_TYPE (type);
5392
5393 /* The array type itself need not be complete, because the
5394 initializer may tell us how many elements are in the array.
5395 But, the elements of the array must be complete. */
5396 if (!COMPLETE_TYPE_P (complete_type (element_type)))
5397 {
5398 if (decl)
5399 error ("elements of array %q#D have incomplete type", decl);
5400 else
5401 error ("elements of array %q#T have incomplete type", type);
5402 return true;
5403 }
5404 /* It is not valid to initialize a VLA. */
5405 if (init
5406 && ((COMPLETE_TYPE_P (type) && !TREE_CONSTANT (TYPE_SIZE (type)))
5407 || !TREE_CONSTANT (TYPE_SIZE (element_type))))
5408 {
5409 if (decl)
5410 error ("variable-sized object %qD may not be initialized", decl);
5411 else
5412 error ("variable-sized compound literal");
5413 return true;
5414 }
5415 return false;
5416 }
5417
5418 /* Subroutine of check_initializer; args are passed down from that function.
5419 Set stmts_are_full_exprs_p to 1 across a call to build_aggr_init. */
5420
5421 static tree
5422 build_aggr_init_full_exprs (tree decl, tree init, int flags)
5423
5424 {
5425 gcc_assert (stmts_are_full_exprs_p ());
5426 return build_aggr_init (decl, init, flags, tf_warning_or_error);
5427 }
5428
5429 /* Verify INIT (the initializer for DECL), and record the
5430 initialization in DECL_INITIAL, if appropriate. CLEANUP is as for
5431 grok_reference_init.
5432
5433 If the return value is non-NULL, it is an expression that must be
5434 evaluated dynamically to initialize DECL. */
5435
5436 static tree
5437 check_initializer (tree decl, tree init, int flags, VEC(tree,gc) **cleanups)
5438 {
5439 tree type = TREE_TYPE (decl);
5440 tree init_code = NULL;
5441 tree extra_init = NULL_TREE;
5442 tree core_type;
5443
5444 /* Things that are going to be initialized need to have complete
5445 type. */
5446 TREE_TYPE (decl) = type = complete_type (TREE_TYPE (decl));
5447
5448 if (DECL_HAS_VALUE_EXPR_P (decl))
5449 {
5450 /* A variable with DECL_HAS_VALUE_EXPR_P set is just a placeholder,
5451 it doesn't have storage to be initialized. */
5452 gcc_assert (init == NULL_TREE);
5453 return NULL_TREE;
5454 }
5455
5456 if (type == error_mark_node)
5457 /* We will have already complained. */
5458 return NULL_TREE;
5459
5460 if (TREE_CODE (type) == ARRAY_TYPE)
5461 {
5462 if (check_array_initializer (decl, type, init))
5463 return NULL_TREE;
5464 }
5465 else if (!COMPLETE_TYPE_P (type))
5466 {
5467 error ("%q#D has incomplete type", decl);
5468 TREE_TYPE (decl) = error_mark_node;
5469 return NULL_TREE;
5470 }
5471 else
5472 /* There is no way to make a variable-sized class type in GNU C++. */
5473 gcc_assert (TREE_CONSTANT (TYPE_SIZE (type)));
5474
5475 if (init && BRACE_ENCLOSED_INITIALIZER_P (init))
5476 {
5477 int init_len = VEC_length (constructor_elt, CONSTRUCTOR_ELTS (init));
5478 if (SCALAR_TYPE_P (type))
5479 {
5480 if (init_len == 0)
5481 {
5482 maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
5483 init = build_zero_init (type, NULL_TREE, false);
5484 }
5485 else if (init_len != 1 && TREE_CODE (type) != COMPLEX_TYPE)
5486 {
5487 error ("scalar object %qD requires one element in initializer",
5488 decl);
5489 TREE_TYPE (decl) = error_mark_node;
5490 return NULL_TREE;
5491 }
5492 }
5493 }
5494
5495 if (TREE_CODE (decl) == CONST_DECL)
5496 {
5497 gcc_assert (TREE_CODE (type) != REFERENCE_TYPE);
5498
5499 DECL_INITIAL (decl) = init;
5500
5501 gcc_assert (init != NULL_TREE);
5502 init = NULL_TREE;
5503 }
5504 else if (!init && DECL_REALLY_EXTERN (decl))
5505 ;
5506 else if (init || type_build_ctor_call (type)
5507 || TREE_CODE (type) == REFERENCE_TYPE)
5508 {
5509 if (TREE_CODE (type) == REFERENCE_TYPE)
5510 {
5511 init = grok_reference_init (decl, type, init, flags);
5512 flags |= LOOKUP_ALREADY_DIGESTED;
5513 }
5514 else if (!init)
5515 check_for_uninitialized_const_var (decl);
5516 /* Do not reshape constructors of vectors (they don't need to be
5517 reshaped. */
5518 else if (BRACE_ENCLOSED_INITIALIZER_P (init))
5519 {
5520 if (is_std_init_list (type))
5521 {
5522 init = perform_implicit_conversion (type, init,
5523 tf_warning_or_error);
5524 flags |= LOOKUP_ALREADY_DIGESTED;
5525 }
5526 else if (TYPE_NON_AGGREGATE_CLASS (type))
5527 {
5528 /* Don't reshape if the class has constructors. */
5529 if (cxx_dialect == cxx98)
5530 error ("in C++98 %qD must be initialized by constructor, "
5531 "not by %<{...}%>",
5532 decl);
5533 }
5534 else if (TREE_CODE (type) == VECTOR_TYPE && TYPE_VECTOR_OPAQUE (type))
5535 {
5536 error ("opaque vector types cannot be initialized");
5537 init = error_mark_node;
5538 }
5539 else
5540 {
5541 init = reshape_init (type, init, tf_warning_or_error);
5542 if (SCALAR_TYPE_P (type))
5543 check_narrowing (type, init);
5544 }
5545 }
5546
5547 /* If DECL has an array type without a specific bound, deduce the
5548 array size from the initializer. */
5549 maybe_deduce_size_from_array_init (decl, init);
5550 type = TREE_TYPE (decl);
5551 if (type == error_mark_node)
5552 return NULL_TREE;
5553
5554 if ((type_build_ctor_call (type) || CLASS_TYPE_P (type))
5555 && !(flags & LOOKUP_ALREADY_DIGESTED)
5556 && !(init && BRACE_ENCLOSED_INITIALIZER_P (init)
5557 && CP_AGGREGATE_TYPE_P (type)))
5558 {
5559 init_code = build_aggr_init_full_exprs (decl, init, flags);
5560
5561 /* If this is a constexpr initializer, expand_default_init will
5562 have returned an INIT_EXPR rather than a CALL_EXPR. In that
5563 case, pull the initializer back out and pass it down into
5564 store_init_value. */
5565 while (TREE_CODE (init_code) == EXPR_STMT
5566 || TREE_CODE (init_code) == CONVERT_EXPR)
5567 init_code = TREE_OPERAND (init_code, 0);
5568 if (TREE_CODE (init_code) == INIT_EXPR)
5569 {
5570 init = TREE_OPERAND (init_code, 1);
5571 init_code = NULL_TREE;
5572 /* Don't call digest_init; it's unnecessary and will complain
5573 about aggregate initialization of non-aggregate classes. */
5574 flags |= LOOKUP_ALREADY_DIGESTED;
5575 }
5576 else if (DECL_DECLARED_CONSTEXPR_P (decl))
5577 {
5578 /* Declared constexpr, but no suitable initializer; massage
5579 init appropriately so we can pass it into store_init_value
5580 for the error. */
5581 if (init && BRACE_ENCLOSED_INITIALIZER_P (init))
5582 init = finish_compound_literal (type, init,
5583 tf_warning_or_error);
5584 else if (CLASS_TYPE_P (type)
5585 && (!init || TREE_CODE (init) == TREE_LIST))
5586 {
5587 init = build_functional_cast (type, init, tf_none);
5588 if (init != error_mark_node)
5589 TARGET_EXPR_DIRECT_INIT_P (init) = true;
5590 }
5591 init_code = NULL_TREE;
5592 }
5593 else
5594 init = NULL_TREE;
5595 }
5596
5597 if (init && TREE_CODE (init) != TREE_VEC)
5598 {
5599 /* In aggregate initialization of a variable, each element
5600 initialization is a full-expression because there is no
5601 enclosing expression. */
5602 gcc_assert (stmts_are_full_exprs_p ());
5603
5604 init_code = store_init_value (decl, init, cleanups, flags);
5605
5606 if (pedantic && TREE_CODE (type) == ARRAY_TYPE
5607 && DECL_INITIAL (decl)
5608 && TREE_CODE (DECL_INITIAL (decl)) == STRING_CST
5609 && PAREN_STRING_LITERAL_P (DECL_INITIAL (decl)))
5610 warning (0, "array %qD initialized by parenthesized string literal %qE",
5611 decl, DECL_INITIAL (decl));
5612 init = NULL;
5613 }
5614 }
5615 else
5616 {
5617 if (CLASS_TYPE_P (core_type = strip_array_types (type))
5618 && (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type)
5619 || CLASSTYPE_REF_FIELDS_NEED_INIT (core_type)))
5620 diagnose_uninitialized_cst_or_ref_member (core_type, /*using_new=*/false,
5621 /*complain=*/true);
5622
5623 check_for_uninitialized_const_var (decl);
5624 }
5625
5626 if (init && init != error_mark_node)
5627 init_code = build2 (INIT_EXPR, type, decl, init);
5628
5629 if (extra_init)
5630 init_code = add_stmt_to_compound (extra_init, init_code);
5631
5632 if (init_code && DECL_IN_AGGR_P (decl))
5633 {
5634 static int explained = 0;
5635
5636 if (cxx_dialect < cxx0x)
5637 error ("initializer invalid for static member with constructor");
5638 else
5639 error ("non-constant in-class initialization invalid for static "
5640 "member %qD", decl);
5641 if (!explained)
5642 {
5643 error ("(an out of class initialization is required)");
5644 explained = 1;
5645 }
5646 }
5647
5648 return init_code;
5649 }
5650
5651 /* If DECL is not a local variable, give it RTL. */
5652
5653 static void
5654 make_rtl_for_nonlocal_decl (tree decl, tree init, const char* asmspec)
5655 {
5656 int toplev = toplevel_bindings_p ();
5657 int defer_p;
5658 const char *filename;
5659
5660 /* Set the DECL_ASSEMBLER_NAME for the object. */
5661 if (asmspec)
5662 {
5663 /* The `register' keyword, when used together with an
5664 asm-specification, indicates that the variable should be
5665 placed in a particular register. */
5666 if (TREE_CODE (decl) == VAR_DECL && DECL_REGISTER (decl))
5667 {
5668 set_user_assembler_name (decl, asmspec);
5669 DECL_HARD_REGISTER (decl) = 1;
5670 }
5671 else
5672 {
5673 if (TREE_CODE (decl) == FUNCTION_DECL
5674 && DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL)
5675 set_builtin_user_assembler_name (decl, asmspec);
5676 set_user_assembler_name (decl, asmspec);
5677 }
5678 }
5679
5680 /* Handle non-variables up front. */
5681 if (TREE_CODE (decl) != VAR_DECL)
5682 {
5683 rest_of_decl_compilation (decl, toplev, at_eof);
5684 return;
5685 }
5686
5687 /* If we see a class member here, it should be a static data
5688 member. */
5689 if (DECL_LANG_SPECIFIC (decl) && DECL_IN_AGGR_P (decl))
5690 {
5691 gcc_assert (TREE_STATIC (decl));
5692 /* An in-class declaration of a static data member should be
5693 external; it is only a declaration, and not a definition. */
5694 if (init == NULL_TREE)
5695 gcc_assert (DECL_EXTERNAL (decl) || !TREE_PUBLIC (decl));
5696 }
5697
5698 /* We don't create any RTL for local variables. */
5699 if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
5700 return;
5701
5702 /* We defer emission of local statics until the corresponding
5703 DECL_EXPR is expanded. */
5704 defer_p = DECL_FUNCTION_SCOPE_P (decl) || DECL_VIRTUAL_P (decl);
5705
5706 /* We try to defer namespace-scope static constants so that they are
5707 not emitted into the object file unnecessarily. */
5708 filename = input_filename;
5709 if (!DECL_VIRTUAL_P (decl)
5710 && TREE_READONLY (decl)
5711 && DECL_INITIAL (decl) != NULL_TREE
5712 && DECL_INITIAL (decl) != error_mark_node
5713 && filename != NULL
5714 && ! EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl))
5715 && toplev
5716 && !TREE_PUBLIC (decl))
5717 {
5718 /* Fool with the linkage of static consts according to #pragma
5719 interface. */
5720 struct c_fileinfo *finfo = get_fileinfo (filename);
5721 if (!finfo->interface_unknown && !TREE_PUBLIC (decl))
5722 {
5723 TREE_PUBLIC (decl) = 1;
5724 DECL_EXTERNAL (decl) = finfo->interface_only;
5725 }
5726
5727 defer_p = 1;
5728 }
5729 /* Likewise for template instantiations. */
5730 else if (DECL_LANG_SPECIFIC (decl)
5731 && DECL_IMPLICIT_INSTANTIATION (decl))
5732 defer_p = 1;
5733
5734 /* If we're not deferring, go ahead and assemble the variable. */
5735 if (!defer_p)
5736 rest_of_decl_compilation (decl, toplev, at_eof);
5737 }
5738
5739 /* walk_tree helper for wrap_temporary_cleanups, below. */
5740
5741 static tree
5742 wrap_cleanups_r (tree *stmt_p, int *walk_subtrees, void *data)
5743 {
5744 /* Stop at types or full-expression boundaries. */
5745 if (TYPE_P (*stmt_p)
5746 || TREE_CODE (*stmt_p) == CLEANUP_POINT_EXPR)
5747 {
5748 *walk_subtrees = 0;
5749 return NULL_TREE;
5750 }
5751
5752 if (TREE_CODE (*stmt_p) == TARGET_EXPR)
5753 {
5754 tree guard = (tree)data;
5755 tree tcleanup = TARGET_EXPR_CLEANUP (*stmt_p);
5756
5757 tcleanup = build2 (TRY_CATCH_EXPR, void_type_node, tcleanup, guard);
5758 /* Tell honor_protect_cleanup_actions to handle this as a separate
5759 cleanup. */
5760 TRY_CATCH_IS_CLEANUP (tcleanup) = 1;
5761
5762 TARGET_EXPR_CLEANUP (*stmt_p) = tcleanup;
5763 }
5764
5765 return NULL_TREE;
5766 }
5767
5768 /* We're initializing a local variable which has a cleanup GUARD. If there
5769 are any temporaries used in the initializer INIT of this variable, we
5770 need to wrap their cleanups with TRY_CATCH_EXPR (, GUARD) so that the
5771 variable will be cleaned up properly if one of them throws.
5772
5773 Unfortunately, there's no way to express this properly in terms of
5774 nesting, as the regions for the temporaries overlap the region for the
5775 variable itself; if there are two temporaries, the variable needs to be
5776 the first thing destroyed if either of them throws. However, we only
5777 want to run the variable's cleanup if it actually got constructed. So
5778 we need to guard the temporary cleanups with the variable's cleanup if
5779 they are run on the normal path, but not if they are run on the
5780 exceptional path. We implement this by telling
5781 honor_protect_cleanup_actions to strip the variable cleanup from the
5782 exceptional path. */
5783
5784 static void
5785 wrap_temporary_cleanups (tree init, tree guard)
5786 {
5787 cp_walk_tree_without_duplicates (&init, wrap_cleanups_r, (void *)guard);
5788 }
5789
5790 /* Generate code to initialize DECL (a local variable). */
5791
5792 static void
5793 initialize_local_var (tree decl, tree init)
5794 {
5795 tree type = TREE_TYPE (decl);
5796 tree cleanup;
5797 int already_used;
5798
5799 gcc_assert (TREE_CODE (decl) == VAR_DECL
5800 || TREE_CODE (decl) == RESULT_DECL);
5801 gcc_assert (!TREE_STATIC (decl));
5802
5803 if (DECL_SIZE (decl) == NULL_TREE)
5804 {
5805 /* If we used it already as memory, it must stay in memory. */
5806 DECL_INITIAL (decl) = NULL_TREE;
5807 TREE_ADDRESSABLE (decl) = TREE_USED (decl);
5808 return;
5809 }
5810
5811 if (type == error_mark_node)
5812 return;
5813
5814 /* Compute and store the initial value. */
5815 already_used = TREE_USED (decl) || TREE_USED (type);
5816 if (TREE_USED (type))
5817 DECL_READ_P (decl) = 1;
5818
5819 /* Generate a cleanup, if necessary. */
5820 cleanup = cxx_maybe_build_cleanup (decl, tf_warning_or_error);
5821
5822 /* Perform the initialization. */
5823 if (init)
5824 {
5825 if (TREE_CODE (init) == INIT_EXPR
5826 && !TREE_SIDE_EFFECTS (TREE_OPERAND (init, 1)))
5827 {
5828 /* Stick simple initializers in DECL_INITIAL so that
5829 -Wno-init-self works (c++/34772). */
5830 gcc_assert (TREE_OPERAND (init, 0) == decl);
5831 DECL_INITIAL (decl) = TREE_OPERAND (init, 1);
5832 }
5833 else
5834 {
5835 int saved_stmts_are_full_exprs_p;
5836
5837 /* If we're only initializing a single object, guard the
5838 destructors of any temporaries used in its initializer with
5839 its destructor. This isn't right for arrays because each
5840 element initialization is a full-expression. */
5841 if (cleanup && TREE_CODE (type) != ARRAY_TYPE)
5842 wrap_temporary_cleanups (init, cleanup);
5843
5844 gcc_assert (building_stmt_list_p ());
5845 saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
5846 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
5847 finish_expr_stmt (init);
5848 current_stmt_tree ()->stmts_are_full_exprs_p =
5849 saved_stmts_are_full_exprs_p;
5850 }
5851 }
5852
5853 /* Set this to 0 so we can tell whether an aggregate which was
5854 initialized was ever used. Don't do this if it has a
5855 destructor, so we don't complain about the 'resource
5856 allocation is initialization' idiom. Now set
5857 attribute((unused)) on types so decls of that type will be
5858 marked used. (see TREE_USED, above.) */
5859 if (TYPE_NEEDS_CONSTRUCTING (type)
5860 && ! already_used
5861 && TYPE_HAS_TRIVIAL_DESTRUCTOR (type)
5862 && DECL_NAME (decl))
5863 TREE_USED (decl) = 0;
5864 else if (already_used)
5865 TREE_USED (decl) = 1;
5866
5867 if (cleanup)
5868 finish_decl_cleanup (decl, cleanup);
5869 }
5870
5871 /* DECL is a VAR_DECL for a compiler-generated variable with static
5872 storage duration (like a virtual table) whose initializer is a
5873 compile-time constant. Initialize the variable and provide it to the
5874 back end. */
5875
5876 void
5877 initialize_artificial_var (tree decl, VEC(constructor_elt,gc) *v)
5878 {
5879 tree init;
5880 gcc_assert (DECL_ARTIFICIAL (decl));
5881 init = build_constructor (TREE_TYPE (decl), v);
5882 gcc_assert (TREE_CODE (init) == CONSTRUCTOR);
5883 DECL_INITIAL (decl) = init;
5884 DECL_INITIALIZED_P (decl) = 1;
5885 determine_visibility (decl);
5886 layout_var_decl (decl);
5887 maybe_commonize_var (decl);
5888 make_rtl_for_nonlocal_decl (decl, init, /*asmspec=*/NULL);
5889 }
5890
5891 /* INIT is the initializer for a variable, as represented by the
5892 parser. Returns true iff INIT is type-dependent. */
5893
5894 static bool
5895 type_dependent_init_p (tree init)
5896 {
5897 if (TREE_CODE (init) == TREE_LIST)
5898 /* A parenthesized initializer, e.g.: int i (3, 2); ? */
5899 return any_type_dependent_elements_p (init);
5900 else if (TREE_CODE (init) == CONSTRUCTOR)
5901 /* A brace-enclosed initializer, e.g.: int i = { 3 }; ? */
5902 {
5903 VEC(constructor_elt, gc) *elts;
5904 size_t nelts;
5905 size_t i;
5906
5907 elts = CONSTRUCTOR_ELTS (init);
5908 nelts = VEC_length (constructor_elt, elts);
5909 for (i = 0; i < nelts; ++i)
5910 if (type_dependent_init_p (VEC_index (constructor_elt,
5911 elts, i)->value))
5912 return true;
5913 }
5914 else
5915 /* It must be a simple expression, e.g., int i = 3; */
5916 return type_dependent_expression_p (init);
5917
5918 return false;
5919 }
5920
5921 /* INIT is the initializer for a variable, as represented by the
5922 parser. Returns true iff INIT is value-dependent. */
5923
5924 static bool
5925 value_dependent_init_p (tree init)
5926 {
5927 if (TREE_CODE (init) == TREE_LIST)
5928 /* A parenthesized initializer, e.g.: int i (3, 2); ? */
5929 return any_value_dependent_elements_p (init);
5930 else if (TREE_CODE (init) == CONSTRUCTOR)
5931 /* A brace-enclosed initializer, e.g.: int i = { 3 }; ? */
5932 {
5933 VEC(constructor_elt, gc) *elts;
5934 size_t nelts;
5935 size_t i;
5936
5937 elts = CONSTRUCTOR_ELTS (init);
5938 nelts = VEC_length (constructor_elt, elts);
5939 for (i = 0; i < nelts; ++i)
5940 if (value_dependent_init_p (VEC_index (constructor_elt,
5941 elts, i)->value))
5942 return true;
5943 }
5944 else
5945 /* It must be a simple expression, e.g., int i = 3; */
5946 return value_dependent_expression_p (init);
5947
5948 return false;
5949 }
5950
5951 /* Finish processing of a declaration;
5952 install its line number and initial value.
5953 If the length of an array type is not known before,
5954 it must be determined now, from the initial value, or it is an error.
5955
5956 INIT is the initializer (if any) for DECL. If INIT_CONST_EXPR_P is
5957 true, then INIT is an integral constant expression.
5958
5959 FLAGS is LOOKUP_ONLYCONVERTING if the = init syntax was used, else 0
5960 if the (init) syntax was used. */
5961
5962 void
5963 cp_finish_decl (tree decl, tree init, bool init_const_expr_p,
5964 tree asmspec_tree, int flags)
5965 {
5966 tree type;
5967 VEC(tree,gc) *cleanups = NULL;
5968 const char *asmspec = NULL;
5969 int was_readonly = 0;
5970 bool var_definition_p = false;
5971 tree auto_node;
5972
5973 if (decl == error_mark_node)
5974 return;
5975 else if (! decl)
5976 {
5977 if (init)
5978 error ("assignment (not initialization) in declaration");
5979 return;
5980 }
5981
5982 gcc_assert (TREE_CODE (decl) != RESULT_DECL);
5983 /* Parameters are handled by store_parm_decls, not cp_finish_decl. */
5984 gcc_assert (TREE_CODE (decl) != PARM_DECL);
5985
5986 type = TREE_TYPE (decl);
5987 if (type == error_mark_node)
5988 return;
5989
5990 /* If a name was specified, get the string. */
5991 if (at_namespace_scope_p ())
5992 asmspec_tree = maybe_apply_renaming_pragma (decl, asmspec_tree);
5993 if (asmspec_tree && asmspec_tree != error_mark_node)
5994 asmspec = TREE_STRING_POINTER (asmspec_tree);
5995
5996 if (current_class_type
5997 && CP_DECL_CONTEXT (decl) == current_class_type
5998 && TYPE_BEING_DEFINED (current_class_type)
5999 && !CLASSTYPE_TEMPLATE_INSTANTIATION (current_class_type)
6000 && (DECL_INITIAL (decl) || init))
6001 DECL_INITIALIZED_IN_CLASS_P (decl) = 1;
6002
6003 auto_node = type_uses_auto (type);
6004 if (auto_node)
6005 {
6006 tree d_init;
6007 if (init == NULL_TREE)
6008 {
6009 error ("declaration of %q#D has no initializer", decl);
6010 TREE_TYPE (decl) = error_mark_node;
6011 return;
6012 }
6013 d_init = init;
6014 if (TREE_CODE (d_init) == TREE_LIST)
6015 d_init = build_x_compound_expr_from_list (d_init, ELK_INIT,
6016 tf_warning_or_error);
6017 d_init = resolve_nondeduced_context (d_init);
6018 type = TREE_TYPE (decl) = do_auto_deduction (type, d_init,
6019 auto_node);
6020 if (type == error_mark_node)
6021 return;
6022 }
6023
6024 if (!ensure_literal_type_for_constexpr_object (decl))
6025 DECL_DECLARED_CONSTEXPR_P (decl) = 0;
6026
6027 if (TREE_CODE (decl) == VAR_DECL
6028 && DECL_CLASS_SCOPE_P (decl)
6029 && DECL_INITIALIZED_IN_CLASS_P (decl))
6030 check_static_variable_definition (decl, type);
6031
6032 if (init && TREE_CODE (decl) == FUNCTION_DECL)
6033 {
6034 tree clone;
6035 if (init == ridpointers[(int)RID_DELETE])
6036 {
6037 /* FIXME check this is 1st decl. */
6038 DECL_DELETED_FN (decl) = 1;
6039 DECL_DECLARED_INLINE_P (decl) = 1;
6040 DECL_INITIAL (decl) = error_mark_node;
6041 FOR_EACH_CLONE (clone, decl)
6042 {
6043 DECL_DELETED_FN (clone) = 1;
6044 DECL_DECLARED_INLINE_P (clone) = 1;
6045 DECL_INITIAL (clone) = error_mark_node;
6046 }
6047 init = NULL_TREE;
6048 }
6049 else if (init == ridpointers[(int)RID_DEFAULT])
6050 {
6051 if (defaultable_fn_check (decl))
6052 DECL_DEFAULTED_FN (decl) = 1;
6053 else
6054 DECL_INITIAL (decl) = NULL_TREE;
6055 }
6056 }
6057
6058 if (init && TREE_CODE (decl) == VAR_DECL)
6059 {
6060 DECL_NONTRIVIALLY_INITIALIZED_P (decl) = 1;
6061 /* If DECL is a reference, then we want to know whether init is a
6062 reference constant; init_const_expr_p as passed tells us whether
6063 it's an rvalue constant. */
6064 if (TREE_CODE (type) == REFERENCE_TYPE)
6065 init_const_expr_p = potential_constant_expression (init);
6066 if (init_const_expr_p)
6067 {
6068 /* Set these flags now for templates. We'll update the flags in
6069 store_init_value for instantiations. */
6070 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = 1;
6071 if (decl_maybe_constant_var_p (decl))
6072 TREE_CONSTANT (decl) = 1;
6073 }
6074 }
6075
6076 if (processing_template_decl)
6077 {
6078 bool type_dependent_p;
6079
6080 /* Add this declaration to the statement-tree. */
6081 if (at_function_scope_p ())
6082 add_decl_expr (decl);
6083
6084 type_dependent_p = dependent_type_p (type);
6085
6086 if (check_for_bare_parameter_packs (init))
6087 {
6088 init = NULL_TREE;
6089 DECL_INITIAL (decl) = NULL_TREE;
6090 }
6091
6092 /* Generally, initializers in templates are expanded when the
6093 template is instantiated. But, if DECL is a variable constant
6094 then it can be used in future constant expressions, so its value
6095 must be available. */
6096
6097 if (TREE_CODE (decl) != VAR_DECL || dependent_type_p (type))
6098 /* We can't do anything if the decl has dependent type. */;
6099 else if (init
6100 && init_const_expr_p
6101 && !type_dependent_p
6102 && decl_maybe_constant_var_p (decl)
6103 && !type_dependent_init_p (init)
6104 && !value_dependent_init_p (init))
6105 {
6106 /* This variable seems to be a non-dependent constant, so process
6107 its initializer. If check_initializer returns non-null the
6108 initialization wasn't constant after all. */
6109 tree init_code;
6110 cleanups = make_tree_vector ();
6111 init_code = check_initializer (decl, init, flags, &cleanups);
6112 if (init_code == NULL_TREE)
6113 init = NULL_TREE;
6114 release_tree_vector (cleanups);
6115 }
6116 else if (!DECL_PRETTY_FUNCTION_P (decl))
6117 /* Deduce array size even if the initializer is dependent. */
6118 maybe_deduce_size_from_array_init (decl, init);
6119
6120 if (init)
6121 DECL_INITIAL (decl) = init;
6122 return;
6123 }
6124
6125 /* Just store non-static data member initializers for later. */
6126 if (init && TREE_CODE (decl) == FIELD_DECL)
6127 DECL_INITIAL (decl) = init;
6128
6129 /* Take care of TYPE_DECLs up front. */
6130 if (TREE_CODE (decl) == TYPE_DECL)
6131 {
6132 if (type != error_mark_node
6133 && MAYBE_CLASS_TYPE_P (type) && DECL_NAME (decl))
6134 {
6135 if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
6136 warning (0, "shadowing previous type declaration of %q#D", decl);
6137 set_identifier_type_value (DECL_NAME (decl), decl);
6138 }
6139
6140 /* If we have installed this as the canonical typedef for this
6141 type, and that type has not been defined yet, delay emitting
6142 the debug information for it, as we will emit it later. */
6143 if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
6144 && !COMPLETE_TYPE_P (TREE_TYPE (decl)))
6145 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
6146
6147 rest_of_decl_compilation (decl, DECL_FILE_SCOPE_P (decl),
6148 at_eof);
6149 return;
6150 }
6151
6152 /* A reference will be modified here, as it is initialized. */
6153 if (! DECL_EXTERNAL (decl)
6154 && TREE_READONLY (decl)
6155 && TREE_CODE (type) == REFERENCE_TYPE)
6156 {
6157 was_readonly = 1;
6158 TREE_READONLY (decl) = 0;
6159 }
6160
6161 if (TREE_CODE (decl) == VAR_DECL)
6162 {
6163 /* Only variables with trivial initialization and destruction can
6164 have thread-local storage. */
6165 if (DECL_THREAD_LOCAL_P (decl)
6166 && (type_has_nontrivial_default_init (TREE_TYPE (decl))
6167 || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl))))
6168 error ("%qD cannot be thread-local because it has non-trivial "
6169 "type %qT", decl, TREE_TYPE (decl));
6170 /* If this is a local variable that will need a mangled name,
6171 register it now. We must do this before processing the
6172 initializer for the variable, since the initialization might
6173 require a guard variable, and since the mangled name of the
6174 guard variable will depend on the mangled name of this
6175 variable. */
6176 if (DECL_FUNCTION_SCOPE_P (decl)
6177 && TREE_STATIC (decl)
6178 && !DECL_ARTIFICIAL (decl))
6179 {
6180 push_local_name (decl);
6181 if (DECL_CONSTRUCTOR_P (current_function_decl)
6182 || DECL_DESTRUCTOR_P (current_function_decl))
6183 /* Normally local_decls is populated during GIMPLE lowering,
6184 but [cd]tors are never actually compiled directly. We need
6185 to put statics on the list so we can deal with the label
6186 address extension. */
6187 add_local_decl (cfun, decl);
6188 }
6189
6190 /* Convert the initializer to the type of DECL, if we have not
6191 already initialized DECL. */
6192 if (!DECL_INITIALIZED_P (decl)
6193 /* If !DECL_EXTERNAL then DECL is being defined. In the
6194 case of a static data member initialized inside the
6195 class-specifier, there can be an initializer even if DECL
6196 is *not* defined. */
6197 && (!DECL_EXTERNAL (decl) || init))
6198 {
6199 if (TYPE_FOR_JAVA (type) && MAYBE_CLASS_TYPE_P (type))
6200 {
6201 tree jclass
6202 = IDENTIFIER_GLOBAL_VALUE (get_identifier ("jclass"));
6203 /* Allow libjava/prims.cc define primitive classes. */
6204 if (init != NULL_TREE
6205 || jclass == NULL_TREE
6206 || TREE_CODE (jclass) != TYPE_DECL
6207 || !POINTER_TYPE_P (TREE_TYPE (jclass))
6208 || !same_type_ignoring_top_level_qualifiers_p
6209 (type, TREE_TYPE (TREE_TYPE (jclass))))
6210 error ("Java object %qD not allocated with %<new%>", decl);
6211 init = NULL_TREE;
6212 }
6213 cleanups = make_tree_vector ();
6214 init = check_initializer (decl, init, flags, &cleanups);
6215 /* Thread-local storage cannot be dynamically initialized. */
6216 if (DECL_THREAD_LOCAL_P (decl) && init)
6217 {
6218 error ("%qD is thread-local and so cannot be dynamically "
6219 "initialized", decl);
6220 init = NULL_TREE;
6221 }
6222
6223 /* Check that the initializer for a static data member was a
6224 constant. Although we check in the parser that the
6225 initializer is an integral constant expression, we do not
6226 simplify division-by-zero at the point at which it
6227 occurs. Therefore, in:
6228
6229 struct S { static const int i = 7 / 0; };
6230
6231 we issue an error at this point. It would
6232 probably be better to forbid division by zero in
6233 integral constant expressions. */
6234 if (DECL_EXTERNAL (decl) && init)
6235 {
6236 error ("%qD cannot be initialized by a non-constant expression"
6237 " when being declared", decl);
6238 DECL_INITIALIZED_IN_CLASS_P (decl) = 0;
6239 init = NULL_TREE;
6240 }
6241
6242 /* Handle:
6243
6244 [dcl.init]
6245
6246 The memory occupied by any object of static storage
6247 duration is zero-initialized at program startup before
6248 any other initialization takes place.
6249
6250 We cannot create an appropriate initializer until after
6251 the type of DECL is finalized. If DECL_INITIAL is set,
6252 then the DECL is statically initialized, and any
6253 necessary zero-initialization has already been performed. */
6254 if (TREE_STATIC (decl) && !DECL_INITIAL (decl))
6255 DECL_INITIAL (decl) = build_zero_init (TREE_TYPE (decl),
6256 /*nelts=*/NULL_TREE,
6257 /*static_storage_p=*/true);
6258 /* Remember that the initialization for this variable has
6259 taken place. */
6260 DECL_INITIALIZED_P (decl) = 1;
6261 /* This declaration is the definition of this variable,
6262 unless we are initializing a static data member within
6263 the class specifier. */
6264 if (!DECL_EXTERNAL (decl))
6265 var_definition_p = true;
6266 }
6267 /* If the variable has an array type, lay out the type, even if
6268 there is no initializer. It is valid to index through the
6269 array, and we must get TYPE_ALIGN set correctly on the array
6270 type. */
6271 else if (TREE_CODE (type) == ARRAY_TYPE)
6272 layout_type (type);
6273
6274 if (TREE_STATIC (decl)
6275 && !at_function_scope_p ()
6276 && current_function_decl == NULL)
6277 /* So decl is a global variable or a static member of a
6278 non local class. Record the types it uses
6279 so that we can decide later to emit debug info for them. */
6280 record_types_used_by_current_var_decl (decl);
6281 }
6282 else if (TREE_CODE (decl) == FIELD_DECL
6283 && TYPE_FOR_JAVA (type) && MAYBE_CLASS_TYPE_P (type))
6284 error ("non-static data member %qD has Java class type", decl);
6285
6286 /* Add this declaration to the statement-tree. This needs to happen
6287 after the call to check_initializer so that the DECL_EXPR for a
6288 reference temp is added before the DECL_EXPR for the reference itself. */
6289 if (DECL_FUNCTION_SCOPE_P (decl))
6290 add_decl_expr (decl);
6291
6292 /* Let the middle end know about variables and functions -- but not
6293 static data members in uninstantiated class templates. */
6294 if (TREE_CODE (decl) == VAR_DECL
6295 || TREE_CODE (decl) == FUNCTION_DECL)
6296 {
6297 if (TREE_CODE (decl) == VAR_DECL)
6298 {
6299 layout_var_decl (decl);
6300 maybe_commonize_var (decl);
6301 }
6302
6303 /* This needs to happen after the linkage is set. */
6304 determine_visibility (decl);
6305
6306 if (var_definition_p && TREE_STATIC (decl))
6307 {
6308 /* If a TREE_READONLY variable needs initialization
6309 at runtime, it is no longer readonly and we need to
6310 avoid MEM_READONLY_P being set on RTL created for it. */
6311 if (init)
6312 {
6313 if (TREE_READONLY (decl))
6314 TREE_READONLY (decl) = 0;
6315 was_readonly = 0;
6316 }
6317 else if (was_readonly)
6318 TREE_READONLY (decl) = 1;
6319 }
6320
6321 make_rtl_for_nonlocal_decl (decl, init, asmspec);
6322
6323 /* Check for abstractness of the type. Notice that there is no
6324 need to strip array types here since the check for those types
6325 is already done within create_array_type_for_decl. */
6326 if (TREE_CODE (type) == FUNCTION_TYPE
6327 || TREE_CODE (type) == METHOD_TYPE)
6328 abstract_virtuals_error (decl, TREE_TYPE (type));
6329 else
6330 abstract_virtuals_error (decl, type);
6331
6332 if (TREE_TYPE (decl) == error_mark_node)
6333 /* No initialization required. */
6334 ;
6335 else if (TREE_CODE (decl) == FUNCTION_DECL)
6336 {
6337 if (init)
6338 {
6339 if (init == ridpointers[(int)RID_DEFAULT])
6340 {
6341 /* An out-of-class default definition is defined at
6342 the point where it is explicitly defaulted. */
6343 if (DECL_DELETED_FN (decl))
6344 maybe_explain_implicit_delete (decl);
6345 else if (DECL_INITIAL (decl) == error_mark_node)
6346 synthesize_method (decl);
6347 }
6348 else
6349 error ("function %q#D is initialized like a variable", decl);
6350 }
6351 /* else no initialization required. */
6352 }
6353 else if (DECL_EXTERNAL (decl)
6354 && ! (DECL_LANG_SPECIFIC (decl)
6355 && DECL_NOT_REALLY_EXTERN (decl)))
6356 {
6357 if (init)
6358 DECL_INITIAL (decl) = init;
6359 }
6360 /* A variable definition. */
6361 else if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
6362 /* Initialize the local variable. */
6363 initialize_local_var (decl, init);
6364
6365 /* If a variable is defined, and then a subsequent
6366 definition with external linkage is encountered, we will
6367 get here twice for the same variable. We want to avoid
6368 calling expand_static_init more than once. For variables
6369 that are not static data members, we can call
6370 expand_static_init only when we actually process the
6371 initializer. It is not legal to redeclare a static data
6372 member, so this issue does not arise in that case. */
6373 else if (var_definition_p && TREE_STATIC (decl))
6374 expand_static_init (decl, init);
6375 }
6376
6377 /* If a CLEANUP_STMT was created to destroy a temporary bound to a
6378 reference, insert it in the statement-tree now. */
6379 if (cleanups)
6380 {
6381 unsigned i; tree t;
6382 FOR_EACH_VEC_ELT (tree, cleanups, i, t)
6383 push_cleanup (decl, t, false);
6384 release_tree_vector (cleanups);
6385 }
6386
6387 if (was_readonly)
6388 TREE_READONLY (decl) = 1;
6389
6390 invoke_plugin_callbacks (PLUGIN_FINISH_DECL, decl);
6391 }
6392
6393 /* Returns a declaration for a VAR_DECL as if:
6394
6395 extern "C" TYPE NAME;
6396
6397 had been seen. Used to create compiler-generated global
6398 variables. */
6399
6400 static tree
6401 declare_global_var (tree name, tree type)
6402 {
6403 tree decl;
6404
6405 push_to_top_level ();
6406 decl = build_decl (input_location, VAR_DECL, name, type);
6407 TREE_PUBLIC (decl) = 1;
6408 DECL_EXTERNAL (decl) = 1;
6409 DECL_ARTIFICIAL (decl) = 1;
6410 /* If the user has explicitly declared this variable (perhaps
6411 because the code we are compiling is part of a low-level runtime
6412 library), then it is possible that our declaration will be merged
6413 with theirs by pushdecl. */
6414 decl = pushdecl (decl);
6415 cp_finish_decl (decl, NULL_TREE, false, NULL_TREE, 0);
6416 pop_from_top_level ();
6417
6418 return decl;
6419 }
6420
6421 /* Returns the type for the argument to "__cxa_atexit" (or "atexit",
6422 if "__cxa_atexit" is not being used) corresponding to the function
6423 to be called when the program exits. */
6424
6425 static tree
6426 get_atexit_fn_ptr_type (void)
6427 {
6428 tree fn_type;
6429
6430 if (!atexit_fn_ptr_type_node)
6431 {
6432 tree arg_type;
6433 if (flag_use_cxa_atexit
6434 && !targetm.cxx.use_atexit_for_cxa_atexit ())
6435 /* The parameter to "__cxa_atexit" is "void (*)(void *)". */
6436 arg_type = ptr_type_node;
6437 else
6438 /* The parameter to "atexit" is "void (*)(void)". */
6439 arg_type = NULL_TREE;
6440
6441 fn_type = build_function_type_list (void_type_node,
6442 arg_type, NULL_TREE);
6443 atexit_fn_ptr_type_node = build_pointer_type (fn_type);
6444 }
6445
6446 return atexit_fn_ptr_type_node;
6447 }
6448
6449 /* Returns a pointer to the `atexit' function. Note that if
6450 FLAG_USE_CXA_ATEXIT is nonzero, then this will actually be the new
6451 `__cxa_atexit' function specified in the IA64 C++ ABI. */
6452
6453 static tree
6454 get_atexit_node (void)
6455 {
6456 tree atexit_fndecl;
6457 tree fn_type;
6458 tree fn_ptr_type;
6459 const char *name;
6460 bool use_aeabi_atexit;
6461
6462 if (atexit_node)
6463 return atexit_node;
6464
6465 if (flag_use_cxa_atexit && !targetm.cxx.use_atexit_for_cxa_atexit ())
6466 {
6467 /* The declaration for `__cxa_atexit' is:
6468
6469 int __cxa_atexit (void (*)(void *), void *, void *)
6470
6471 We build up the argument types and then the function type
6472 itself. */
6473 tree argtype0, argtype1, argtype2;
6474
6475 use_aeabi_atexit = targetm.cxx.use_aeabi_atexit ();
6476 /* First, build the pointer-to-function type for the first
6477 argument. */
6478 fn_ptr_type = get_atexit_fn_ptr_type ();
6479 /* Then, build the rest of the argument types. */
6480 argtype2 = ptr_type_node;
6481 if (use_aeabi_atexit)
6482 {
6483 argtype1 = fn_ptr_type;
6484 argtype0 = ptr_type_node;
6485 }
6486 else
6487 {
6488 argtype1 = ptr_type_node;
6489 argtype0 = fn_ptr_type;
6490 }
6491 /* And the final __cxa_atexit type. */
6492 fn_type = build_function_type_list (integer_type_node,
6493 argtype0, argtype1, argtype2,
6494 NULL_TREE);
6495 fn_ptr_type = build_pointer_type (fn_type);
6496 if (use_aeabi_atexit)
6497 name = "__aeabi_atexit";
6498 else
6499 name = "__cxa_atexit";
6500 }
6501 else
6502 {
6503 /* The declaration for `atexit' is:
6504
6505 int atexit (void (*)());
6506
6507 We build up the argument types and then the function type
6508 itself. */
6509 fn_ptr_type = get_atexit_fn_ptr_type ();
6510 /* Build the final atexit type. */
6511 fn_type = build_function_type_list (integer_type_node,
6512 fn_ptr_type, NULL_TREE);
6513 name = "atexit";
6514 }
6515
6516 /* Now, build the function declaration. */
6517 push_lang_context (lang_name_c);
6518 atexit_fndecl = build_library_fn_ptr (name, fn_type);
6519 mark_used (atexit_fndecl);
6520 pop_lang_context ();
6521 atexit_node = decay_conversion (atexit_fndecl);
6522
6523 return atexit_node;
6524 }
6525
6526 /* Returns the __dso_handle VAR_DECL. */
6527
6528 static tree
6529 get_dso_handle_node (void)
6530 {
6531 if (dso_handle_node)
6532 return dso_handle_node;
6533
6534 /* Declare the variable. */
6535 dso_handle_node = declare_global_var (get_identifier ("__dso_handle"),
6536 ptr_type_node);
6537
6538 #ifdef HAVE_GAS_HIDDEN
6539 DECL_VISIBILITY (dso_handle_node) = VISIBILITY_HIDDEN;
6540 DECL_VISIBILITY_SPECIFIED (dso_handle_node) = 1;
6541 #endif
6542
6543 return dso_handle_node;
6544 }
6545
6546 /* Begin a new function with internal linkage whose job will be simply
6547 to destroy some particular variable. */
6548
6549 static GTY(()) int start_cleanup_cnt;
6550
6551 static tree
6552 start_cleanup_fn (void)
6553 {
6554 char name[32];
6555 tree fntype;
6556 tree fndecl;
6557 bool use_cxa_atexit = flag_use_cxa_atexit
6558 && !targetm.cxx.use_atexit_for_cxa_atexit ();
6559
6560 push_to_top_level ();
6561
6562 /* No need to mangle this. */
6563 push_lang_context (lang_name_c);
6564
6565 /* Build the name of the function. */
6566 sprintf (name, "__tcf_%d", start_cleanup_cnt++);
6567 /* Build the function declaration. */
6568 fntype = TREE_TYPE (get_atexit_fn_ptr_type ());
6569 fndecl = build_lang_decl (FUNCTION_DECL, get_identifier (name), fntype);
6570 /* It's a function with internal linkage, generated by the
6571 compiler. */
6572 TREE_PUBLIC (fndecl) = 0;
6573 DECL_ARTIFICIAL (fndecl) = 1;
6574 /* Make the function `inline' so that it is only emitted if it is
6575 actually needed. It is unlikely that it will be inlined, since
6576 it is only called via a function pointer, but we avoid unnecessary
6577 emissions this way. */
6578 DECL_DECLARED_INLINE_P (fndecl) = 1;
6579 DECL_INTERFACE_KNOWN (fndecl) = 1;
6580 /* Build the parameter. */
6581 if (use_cxa_atexit)
6582 {
6583 tree parmdecl;
6584
6585 parmdecl = cp_build_parm_decl (NULL_TREE, ptr_type_node);
6586 DECL_CONTEXT (parmdecl) = fndecl;
6587 TREE_USED (parmdecl) = 1;
6588 DECL_READ_P (parmdecl) = 1;
6589 DECL_ARGUMENTS (fndecl) = parmdecl;
6590 }
6591
6592 pushdecl (fndecl);
6593 start_preparsed_function (fndecl, NULL_TREE, SF_PRE_PARSED);
6594
6595 pop_lang_context ();
6596
6597 return current_function_decl;
6598 }
6599
6600 /* Finish the cleanup function begun by start_cleanup_fn. */
6601
6602 static void
6603 end_cleanup_fn (void)
6604 {
6605 expand_or_defer_fn (finish_function (0));
6606
6607 pop_from_top_level ();
6608 }
6609
6610 /* Generate code to handle the destruction of DECL, an object with
6611 static storage duration. */
6612
6613 tree
6614 register_dtor_fn (tree decl)
6615 {
6616 tree cleanup;
6617 tree compound_stmt;
6618 tree fcall;
6619 tree type;
6620 bool use_dtor;
6621 tree arg0, arg1 = NULL_TREE, arg2 = NULL_TREE;
6622
6623 type = TREE_TYPE (decl);
6624 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
6625 return void_zero_node;
6626
6627 /* If we're using "__cxa_atexit" (or "__aeabi_atexit"), and DECL is
6628 a class object, we can just pass the destructor to
6629 "__cxa_atexit"; we don't have to build a temporary function to do
6630 the cleanup. */
6631 use_dtor = (flag_use_cxa_atexit
6632 && !targetm.cxx.use_atexit_for_cxa_atexit ()
6633 && CLASS_TYPE_P (type));
6634 if (use_dtor)
6635 {
6636 int idx;
6637
6638 /* Find the destructor. */
6639 idx = lookup_fnfields_1 (type, complete_dtor_identifier);
6640 gcc_assert (idx >= 0);
6641 cleanup = VEC_index (tree, CLASSTYPE_METHOD_VEC (type), idx);
6642 /* Make sure it is accessible. */
6643 perform_or_defer_access_check (TYPE_BINFO (type), cleanup, cleanup);
6644 }
6645 else
6646 {
6647 /* Call build_cleanup before we enter the anonymous function so
6648 that any access checks will be done relative to the current
6649 scope, rather than the scope of the anonymous function. */
6650 build_cleanup (decl);
6651
6652 /* Now start the function. */
6653 cleanup = start_cleanup_fn ();
6654
6655 /* Now, recompute the cleanup. It may contain SAVE_EXPRs that refer
6656 to the original function, rather than the anonymous one. That
6657 will make the back end think that nested functions are in use,
6658 which causes confusion. */
6659 push_deferring_access_checks (dk_no_check);
6660 fcall = build_cleanup (decl);
6661 pop_deferring_access_checks ();
6662
6663 /* Create the body of the anonymous function. */
6664 compound_stmt = begin_compound_stmt (BCS_FN_BODY);
6665 finish_expr_stmt (fcall);
6666 finish_compound_stmt (compound_stmt);
6667 end_cleanup_fn ();
6668 }
6669
6670 /* Call atexit with the cleanup function. */
6671 mark_used (cleanup);
6672 cleanup = build_address (cleanup);
6673 if (flag_use_cxa_atexit && !targetm.cxx.use_atexit_for_cxa_atexit ())
6674 {
6675 tree addr;
6676
6677 if (use_dtor)
6678 {
6679 /* We must convert CLEANUP to the type that "__cxa_atexit"
6680 expects. */
6681 cleanup = build_nop (get_atexit_fn_ptr_type (), cleanup);
6682 /* "__cxa_atexit" will pass the address of DECL to the
6683 cleanup function. */
6684 mark_used (decl);
6685 addr = build_address (decl);
6686 /* The declared type of the parameter to "__cxa_atexit" is
6687 "void *". For plain "T*", we could just let the
6688 machinery in cp_build_function_call convert it -- but if the
6689 type is "cv-qualified T *", then we need to convert it
6690 before passing it in, to avoid spurious errors. */
6691 addr = build_nop (ptr_type_node, addr);
6692 }
6693 else
6694 /* Since the cleanup functions we build ignore the address
6695 they're given, there's no reason to pass the actual address
6696 in, and, in general, it's cheaper to pass NULL than any
6697 other value. */
6698 addr = null_pointer_node;
6699 arg2 = cp_build_addr_expr (get_dso_handle_node (),
6700 tf_warning_or_error);
6701 if (targetm.cxx.use_aeabi_atexit ())
6702 {
6703 arg1 = cleanup;
6704 arg0 = addr;
6705 }
6706 else
6707 {
6708 arg1 = addr;
6709 arg0 = cleanup;
6710 }
6711 }
6712 else
6713 arg0 = cleanup;
6714 return cp_build_function_call_nary (get_atexit_node (), tf_warning_or_error,
6715 arg0, arg1, arg2, NULL_TREE);
6716 }
6717
6718 /* DECL is a VAR_DECL with static storage duration. INIT, if present,
6719 is its initializer. Generate code to handle the construction
6720 and destruction of DECL. */
6721
6722 static void
6723 expand_static_init (tree decl, tree init)
6724 {
6725 gcc_assert (TREE_CODE (decl) == VAR_DECL);
6726 gcc_assert (TREE_STATIC (decl));
6727
6728 /* Some variables require no dynamic initialization. */
6729 if (!init
6730 && TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
6731 return;
6732
6733 if (DECL_FUNCTION_SCOPE_P (decl))
6734 {
6735 /* Emit code to perform this initialization but once. */
6736 tree if_stmt = NULL_TREE, inner_if_stmt = NULL_TREE;
6737 tree then_clause = NULL_TREE, inner_then_clause = NULL_TREE;
6738 tree guard, guard_addr;
6739 tree flag, begin;
6740
6741 /* Emit code to perform this initialization but once. This code
6742 looks like:
6743
6744 static <type> guard;
6745 if (!guard.first_byte) {
6746 if (__cxa_guard_acquire (&guard)) {
6747 bool flag = false;
6748 try {
6749 // Do initialization.
6750 flag = true; __cxa_guard_release (&guard);
6751 // Register variable for destruction at end of program.
6752 } catch {
6753 if (!flag) __cxa_guard_abort (&guard);
6754 }
6755 }
6756
6757 Note that the `flag' variable is only set to 1 *after* the
6758 initialization is complete. This ensures that an exception,
6759 thrown during the construction, will cause the variable to
6760 reinitialized when we pass through this code again, as per:
6761
6762 [stmt.dcl]
6763
6764 If the initialization exits by throwing an exception, the
6765 initialization is not complete, so it will be tried again
6766 the next time control enters the declaration.
6767
6768 This process should be thread-safe, too; multiple threads
6769 should not be able to initialize the variable more than
6770 once. */
6771
6772 /* Create the guard variable. */
6773 guard = get_guard (decl);
6774
6775 /* This optimization isn't safe on targets with relaxed memory
6776 consistency. On such targets we force synchronization in
6777 __cxa_guard_acquire. */
6778 if (!targetm.relaxed_ordering || !flag_threadsafe_statics)
6779 {
6780 /* Begin the conditional initialization. */
6781 if_stmt = begin_if_stmt ();
6782 finish_if_stmt_cond (get_guard_cond (guard), if_stmt);
6783 then_clause = begin_compound_stmt (BCS_NO_SCOPE);
6784 }
6785
6786 if (flag_threadsafe_statics)
6787 {
6788 tree vfntype = NULL_TREE;
6789 tree acquire_name, release_name, abort_name;
6790 tree acquire_fn, release_fn, abort_fn;
6791 guard_addr = build_address (guard);
6792
6793 acquire_name = get_identifier ("__cxa_guard_acquire");
6794 release_name = get_identifier ("__cxa_guard_release");
6795 abort_name = get_identifier ("__cxa_guard_abort");
6796 acquire_fn = identifier_global_value (acquire_name);
6797 release_fn = identifier_global_value (release_name);
6798 abort_fn = identifier_global_value (abort_name);
6799 if (!acquire_fn)
6800 acquire_fn = push_library_fn
6801 (acquire_name, build_function_type_list (integer_type_node,
6802 TREE_TYPE (guard_addr),
6803 NULL_TREE),
6804 NULL_TREE);
6805 if (!release_fn || !abort_fn)
6806 vfntype = build_function_type_list (void_type_node,
6807 TREE_TYPE (guard_addr),
6808 NULL_TREE);
6809 if (!release_fn)
6810 release_fn = push_library_fn (release_name, vfntype, NULL_TREE);
6811 if (!abort_fn)
6812 abort_fn = push_library_fn (abort_name, vfntype, NULL_TREE);
6813
6814 inner_if_stmt = begin_if_stmt ();
6815 finish_if_stmt_cond (build_call_n (acquire_fn, 1, guard_addr),
6816 inner_if_stmt);
6817
6818 inner_then_clause = begin_compound_stmt (BCS_NO_SCOPE);
6819 begin = get_target_expr (boolean_false_node);
6820 flag = TARGET_EXPR_SLOT (begin);
6821
6822 TARGET_EXPR_CLEANUP (begin)
6823 = build3 (COND_EXPR, void_type_node, flag,
6824 void_zero_node,
6825 build_call_n (abort_fn, 1, guard_addr));
6826 CLEANUP_EH_ONLY (begin) = 1;
6827
6828 /* Do the initialization itself. */
6829 init = add_stmt_to_compound (begin, init);
6830 init = add_stmt_to_compound
6831 (init, build2 (MODIFY_EXPR, void_type_node, flag, boolean_true_node));
6832 init = add_stmt_to_compound
6833 (init, build_call_n (release_fn, 1, guard_addr));
6834 }
6835 else
6836 init = add_stmt_to_compound (init, set_guard (guard));
6837
6838 /* Use atexit to register a function for destroying this static
6839 variable. */
6840 init = add_stmt_to_compound (init, register_dtor_fn (decl));
6841
6842 finish_expr_stmt (init);
6843
6844 if (flag_threadsafe_statics)
6845 {
6846 finish_compound_stmt (inner_then_clause);
6847 finish_then_clause (inner_if_stmt);
6848 finish_if_stmt (inner_if_stmt);
6849 }
6850
6851 if (!targetm.relaxed_ordering || !flag_threadsafe_statics)
6852 {
6853 finish_compound_stmt (then_clause);
6854 finish_then_clause (if_stmt);
6855 finish_if_stmt (if_stmt);
6856 }
6857 }
6858 else
6859 static_aggregates = tree_cons (init, decl, static_aggregates);
6860 }
6861
6862 \f
6863 /* Make TYPE a complete type based on INITIAL_VALUE.
6864 Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
6865 2 if there was no information (in which case assume 0 if DO_DEFAULT),
6866 3 if the initializer list is empty (in pedantic mode). */
6867
6868 int
6869 cp_complete_array_type (tree *ptype, tree initial_value, bool do_default)
6870 {
6871 int failure;
6872 tree type, elt_type;
6873
6874 if (initial_value)
6875 {
6876 unsigned HOST_WIDE_INT i;
6877 tree value;
6878
6879 /* An array of character type can be initialized from a
6880 brace-enclosed string constant.
6881
6882 FIXME: this code is duplicated from reshape_init. Probably
6883 we should just call reshape_init here? */
6884 if (char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (*ptype)))
6885 && TREE_CODE (initial_value) == CONSTRUCTOR
6886 && !VEC_empty (constructor_elt, CONSTRUCTOR_ELTS (initial_value)))
6887 {
6888 VEC(constructor_elt,gc) *v = CONSTRUCTOR_ELTS (initial_value);
6889 tree value = VEC_index (constructor_elt, v, 0)->value;
6890
6891 if (TREE_CODE (value) == STRING_CST
6892 && VEC_length (constructor_elt, v) == 1)
6893 initial_value = value;
6894 }
6895
6896 /* If any of the elements are parameter packs, we can't actually
6897 complete this type now because the array size is dependent. */
6898 if (TREE_CODE (initial_value) == CONSTRUCTOR)
6899 {
6900 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (initial_value),
6901 i, value)
6902 {
6903 if (PACK_EXPANSION_P (value))
6904 return 0;
6905 }
6906 }
6907 }
6908
6909 failure = complete_array_type (ptype, initial_value, do_default);
6910
6911 /* We can create the array before the element type is complete, which
6912 means that we didn't have these two bits set in the original type
6913 either. In completing the type, we are expected to propagate these
6914 bits. See also complete_type which does the same thing for arrays
6915 of fixed size. */
6916 type = *ptype;
6917 if (TYPE_DOMAIN (type))
6918 {
6919 elt_type = TREE_TYPE (type);
6920 TYPE_NEEDS_CONSTRUCTING (type) = TYPE_NEEDS_CONSTRUCTING (elt_type);
6921 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
6922 = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (elt_type);
6923 }
6924
6925 return failure;
6926 }
6927
6928 /* As above, but either give an error or reject zero-size arrays, depending
6929 on COMPLAIN. */
6930
6931 int
6932 cp_complete_array_type_or_error (tree *ptype, tree initial_value,
6933 bool do_default, tsubst_flags_t complain)
6934 {
6935 int failure;
6936 bool sfinae = !(complain & tf_error);
6937 /* In SFINAE context we can't be lenient about zero-size arrays. */
6938 if (sfinae)
6939 ++pedantic;
6940 failure = cp_complete_array_type (ptype, initial_value, do_default);
6941 if (sfinae)
6942 --pedantic;
6943 if (failure)
6944 {
6945 if (sfinae)
6946 /* Not an error. */;
6947 else if (failure == 1)
6948 error ("initializer fails to determine size of %qT", *ptype);
6949 else if (failure == 2)
6950 {
6951 if (do_default)
6952 error ("array size missing in %qT", *ptype);
6953 }
6954 else if (failure == 3)
6955 error ("zero-size array %qT", *ptype);
6956 *ptype = error_mark_node;
6957 }
6958 return failure;
6959 }
6960 \f
6961 /* Return zero if something is declared to be a member of type
6962 CTYPE when in the context of CUR_TYPE. STRING is the error
6963 message to print in that case. Otherwise, quietly return 1. */
6964
6965 static int
6966 member_function_or_else (tree ctype, tree cur_type, enum overload_flags flags)
6967 {
6968 if (ctype && ctype != cur_type)
6969 {
6970 if (flags == DTOR_FLAG)
6971 error ("destructor for alien class %qT cannot be a member", ctype);
6972 else
6973 error ("constructor for alien class %qT cannot be a member", ctype);
6974 return 0;
6975 }
6976 return 1;
6977 }
6978 \f
6979 /* Subroutine of `grokdeclarator'. */
6980
6981 /* Generate errors possibly applicable for a given set of specifiers.
6982 This is for ARM $7.1.2. */
6983
6984 static void
6985 bad_specifiers (tree object,
6986 enum bad_spec_place type,
6987 int virtualp,
6988 int quals,
6989 int inlinep,
6990 int friendp,
6991 int raises)
6992 {
6993 switch (type)
6994 {
6995 case BSP_VAR:
6996 if (virtualp)
6997 error ("%qD declared as a %<virtual%> variable", object);
6998 if (inlinep)
6999 error ("%qD declared as an %<inline%> variable", object);
7000 if (quals)
7001 error ("%<const%> and %<volatile%> function specifiers on "
7002 "%qD invalid in variable declaration", object);
7003 break;
7004 case BSP_PARM:
7005 if (virtualp)
7006 error ("%qD declared as a %<virtual%> parameter", object);
7007 if (inlinep)
7008 error ("%qD declared as an %<inline%> parameter", object);
7009 if (quals)
7010 error ("%<const%> and %<volatile%> function specifiers on "
7011 "%qD invalid in parameter declaration", object);
7012 break;
7013 case BSP_TYPE:
7014 if (virtualp)
7015 error ("%qD declared as a %<virtual%> type", object);
7016 if (inlinep)
7017 error ("%qD declared as an %<inline%> type", object);
7018 if (quals)
7019 error ("%<const%> and %<volatile%> function specifiers on "
7020 "%qD invalid in type declaration", object);
7021 break;
7022 case BSP_FIELD:
7023 if (virtualp)
7024 error ("%qD declared as a %<virtual%> field", object);
7025 if (inlinep)
7026 error ("%qD declared as an %<inline%> field", object);
7027 if (quals)
7028 error ("%<const%> and %<volatile%> function specifiers on "
7029 "%qD invalid in field declaration", object);
7030 break;
7031 default:
7032 gcc_unreachable();
7033 }
7034 if (friendp)
7035 error ("%q+D declared as a friend", object);
7036 if (raises
7037 && (TREE_CODE (object) == TYPE_DECL
7038 || (!TYPE_PTRFN_P (TREE_TYPE (object))
7039 && !TYPE_REFFN_P (TREE_TYPE (object))
7040 && !TYPE_PTRMEMFUNC_P (TREE_TYPE (object)))))
7041 error ("%q+D declared with an exception specification", object);
7042 }
7043
7044 /* DECL is a member function or static data member and is presently
7045 being defined. Check that the definition is taking place in a
7046 valid namespace. */
7047
7048 static void
7049 check_class_member_definition_namespace (tree decl)
7050 {
7051 /* These checks only apply to member functions and static data
7052 members. */
7053 gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
7054 || TREE_CODE (decl) == VAR_DECL);
7055 /* We check for problems with specializations in pt.c in
7056 check_specialization_namespace, where we can issue better
7057 diagnostics. */
7058 if (processing_specialization)
7059 return;
7060 /* There are no restrictions on the placement of
7061 explicit instantiations. */
7062 if (processing_explicit_instantiation)
7063 return;
7064 /* [class.mfct]
7065
7066 A member function definition that appears outside of the
7067 class definition shall appear in a namespace scope enclosing
7068 the class definition.
7069
7070 [class.static.data]
7071
7072 The definition for a static data member shall appear in a
7073 namespace scope enclosing the member's class definition. */
7074 if (!is_ancestor (current_namespace, DECL_CONTEXT (decl)))
7075 permerror (input_location, "definition of %qD is not in namespace enclosing %qT",
7076 decl, DECL_CONTEXT (decl));
7077 }
7078
7079 /* Build a PARM_DECL for the "this" parameter. TYPE is the
7080 METHOD_TYPE for a non-static member function; QUALS are the
7081 cv-qualifiers that apply to the function. */
7082
7083 tree
7084 build_this_parm (tree type, cp_cv_quals quals)
7085 {
7086 tree this_type;
7087 tree qual_type;
7088 tree parm;
7089 cp_cv_quals this_quals;
7090
7091 if (CLASS_TYPE_P (type))
7092 {
7093 this_type
7094 = cp_build_qualified_type (type, quals & ~TYPE_QUAL_RESTRICT);
7095 this_type = build_pointer_type (this_type);
7096 }
7097 else
7098 this_type = type_of_this_parm (type);
7099 /* The `this' parameter is implicitly `const'; it cannot be
7100 assigned to. */
7101 this_quals = (quals & TYPE_QUAL_RESTRICT) | TYPE_QUAL_CONST;
7102 qual_type = cp_build_qualified_type (this_type, this_quals);
7103 parm = build_artificial_parm (this_identifier, qual_type);
7104 cp_apply_type_quals_to_decl (this_quals, parm);
7105 return parm;
7106 }
7107
7108 /* DECL is a static member function. Complain if it was declared
7109 with function-cv-quals. */
7110
7111 static void
7112 check_static_quals (tree decl, cp_cv_quals quals)
7113 {
7114 if (quals != TYPE_UNQUALIFIED)
7115 error ("static member function %q#D declared with type qualifiers",
7116 decl);
7117 }
7118
7119 /* CTYPE is class type, or null if non-class.
7120 TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
7121 or METHOD_TYPE.
7122 DECLARATOR is the function's name.
7123 PARMS is a chain of PARM_DECLs for the function.
7124 VIRTUALP is truthvalue of whether the function is virtual or not.
7125 FLAGS are to be passed through to `grokclassfn'.
7126 QUALS are qualifiers indicating whether the function is `const'
7127 or `volatile'.
7128 RAISES is a list of exceptions that this function can raise.
7129 CHECK is 1 if we must find this method in CTYPE, 0 if we should
7130 not look, and -1 if we should not call `grokclassfn' at all.
7131
7132 SFK is the kind of special function (if any) for the new function.
7133
7134 Returns `NULL_TREE' if something goes wrong, after issuing
7135 applicable error messages. */
7136
7137 static tree
7138 grokfndecl (tree ctype,
7139 tree type,
7140 tree declarator,
7141 tree parms,
7142 tree orig_declarator,
7143 int virtualp,
7144 enum overload_flags flags,
7145 cp_cv_quals quals,
7146 tree raises,
7147 int check,
7148 int friendp,
7149 int publicp,
7150 int inlinep,
7151 special_function_kind sfk,
7152 bool funcdef_flag,
7153 int template_count,
7154 tree in_namespace,
7155 tree* attrlist,
7156 location_t location)
7157 {
7158 tree decl;
7159 int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
7160 tree t;
7161
7162 if (raises)
7163 type = build_exception_variant (type, raises);
7164
7165 decl = build_lang_decl (FUNCTION_DECL, declarator, type);
7166
7167 /* If we have an explicit location, use it, otherwise use whatever
7168 build_lang_decl used (probably input_location). */
7169 if (location != UNKNOWN_LOCATION)
7170 DECL_SOURCE_LOCATION (decl) = location;
7171
7172 if (TREE_CODE (type) == METHOD_TYPE)
7173 {
7174 tree parm;
7175 parm = build_this_parm (type, quals);
7176 DECL_CHAIN (parm) = parms;
7177 parms = parm;
7178 }
7179 DECL_ARGUMENTS (decl) = parms;
7180 for (t = parms; t; t = DECL_CHAIN (t))
7181 DECL_CONTEXT (t) = decl;
7182 /* Propagate volatile out from type to decl. */
7183 if (TYPE_VOLATILE (type))
7184 TREE_THIS_VOLATILE (decl) = 1;
7185
7186 /* Setup decl according to sfk. */
7187 switch (sfk)
7188 {
7189 case sfk_constructor:
7190 case sfk_copy_constructor:
7191 case sfk_move_constructor:
7192 DECL_CONSTRUCTOR_P (decl) = 1;
7193 break;
7194 case sfk_destructor:
7195 DECL_DESTRUCTOR_P (decl) = 1;
7196 break;
7197 default:
7198 break;
7199 }
7200
7201 /* If pointers to member functions use the least significant bit to
7202 indicate whether a function is virtual, ensure a pointer
7203 to this function will have that bit clear. */
7204 if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_pfn
7205 && TREE_CODE (type) == METHOD_TYPE
7206 && DECL_ALIGN (decl) < 2 * BITS_PER_UNIT)
7207 DECL_ALIGN (decl) = 2 * BITS_PER_UNIT;
7208
7209 if (friendp
7210 && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
7211 {
7212 if (funcdef_flag)
7213 error
7214 ("defining explicit specialization %qD in friend declaration",
7215 orig_declarator);
7216 else
7217 {
7218 tree fns = TREE_OPERAND (orig_declarator, 0);
7219 tree args = TREE_OPERAND (orig_declarator, 1);
7220
7221 if (PROCESSING_REAL_TEMPLATE_DECL_P ())
7222 {
7223 /* Something like `template <class T> friend void f<T>()'. */
7224 error ("invalid use of template-id %qD in declaration "
7225 "of primary template",
7226 orig_declarator);
7227 return NULL_TREE;
7228 }
7229
7230
7231 /* A friend declaration of the form friend void f<>(). Record
7232 the information in the TEMPLATE_ID_EXPR. */
7233 SET_DECL_IMPLICIT_INSTANTIATION (decl);
7234
7235 if (TREE_CODE (fns) == COMPONENT_REF)
7236 {
7237 /* Due to bison parser ickiness, we will have already looked
7238 up an operator_name or PFUNCNAME within the current class
7239 (see template_id in parse.y). If the current class contains
7240 such a name, we'll get a COMPONENT_REF here. Undo that. */
7241
7242 gcc_assert (TREE_TYPE (TREE_OPERAND (fns, 0))
7243 == current_class_type);
7244 fns = TREE_OPERAND (fns, 1);
7245 }
7246 gcc_assert (TREE_CODE (fns) == IDENTIFIER_NODE
7247 || TREE_CODE (fns) == OVERLOAD);
7248 DECL_TEMPLATE_INFO (decl) = build_template_info (fns, args);
7249
7250 for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
7251 if (TREE_PURPOSE (t)
7252 && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
7253 {
7254 error ("default arguments are not allowed in declaration "
7255 "of friend template specialization %qD",
7256 decl);
7257 return NULL_TREE;
7258 }
7259
7260 if (inlinep)
7261 {
7262 error ("%<inline%> is not allowed in declaration of friend "
7263 "template specialization %qD",
7264 decl);
7265 return NULL_TREE;
7266 }
7267 }
7268 }
7269
7270 /* If this decl has namespace scope, set that up. */
7271 if (in_namespace)
7272 set_decl_namespace (decl, in_namespace, friendp);
7273 else if (!ctype)
7274 DECL_CONTEXT (decl) = FROB_CONTEXT (current_decl_namespace ());
7275
7276 /* `main' and builtins have implicit 'C' linkage. */
7277 if ((MAIN_NAME_P (declarator)
7278 || (IDENTIFIER_LENGTH (declarator) > 10
7279 && IDENTIFIER_POINTER (declarator)[0] == '_'
7280 && IDENTIFIER_POINTER (declarator)[1] == '_'
7281 && strncmp (IDENTIFIER_POINTER (declarator)+2, "builtin_", 8) == 0))
7282 && current_lang_name == lang_name_cplusplus
7283 && ctype == NULL_TREE
7284 && DECL_FILE_SCOPE_P (decl))
7285 SET_DECL_LANGUAGE (decl, lang_c);
7286
7287 /* Should probably propagate const out from type to decl I bet (mrs). */
7288 if (staticp)
7289 {
7290 DECL_STATIC_FUNCTION_P (decl) = 1;
7291 DECL_CONTEXT (decl) = ctype;
7292 }
7293
7294 if (ctype)
7295 {
7296 DECL_CONTEXT (decl) = ctype;
7297 if (funcdef_flag)
7298 check_class_member_definition_namespace (decl);
7299 }
7300
7301 if (ctype == NULL_TREE && DECL_MAIN_P (decl))
7302 {
7303 if (processing_template_decl)
7304 error ("cannot declare %<::main%> to be a template");
7305 if (inlinep)
7306 error ("cannot declare %<::main%> to be inline");
7307 if (!publicp)
7308 error ("cannot declare %<::main%> to be static");
7309 inlinep = 0;
7310 publicp = 1;
7311 }
7312
7313 /* Members of anonymous types and local classes have no linkage; make
7314 them internal. If a typedef is made later, this will be changed. */
7315 if (ctype && (TYPE_ANONYMOUS_P (ctype)
7316 || decl_function_context (TYPE_MAIN_DECL (ctype))))
7317 publicp = 0;
7318
7319 if (publicp && cxx_dialect == cxx98)
7320 {
7321 /* [basic.link]: A name with no linkage (notably, the name of a class
7322 or enumeration declared in a local scope) shall not be used to
7323 declare an entity with linkage.
7324
7325 DR 757 relaxes this restriction for C++0x. */
7326 t = no_linkage_check (TREE_TYPE (decl),
7327 /*relaxed_p=*/false);
7328 if (t)
7329 {
7330 if (TYPE_ANONYMOUS_P (t))
7331 {
7332 if (DECL_EXTERN_C_P (decl))
7333 /* Allow this; it's pretty common in C. */;
7334 else
7335 {
7336 permerror (input_location, "anonymous type with no linkage "
7337 "used to declare function %q#D with linkage",
7338 decl);
7339 if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
7340 permerror (input_location, "%q+#D does not refer to the unqualified "
7341 "type, so it is not used for linkage",
7342 TYPE_NAME (t));
7343 }
7344 }
7345 else
7346 permerror (input_location, "type %qT with no linkage used to "
7347 "declare function %q#D with linkage", t, decl);
7348 }
7349 }
7350
7351 TREE_PUBLIC (decl) = publicp;
7352 if (! publicp)
7353 {
7354 DECL_INTERFACE_KNOWN (decl) = 1;
7355 DECL_NOT_REALLY_EXTERN (decl) = 1;
7356 }
7357
7358 /* If the declaration was declared inline, mark it as such. */
7359 if (inlinep)
7360 DECL_DECLARED_INLINE_P (decl) = 1;
7361 if (inlinep & 2)
7362 DECL_DECLARED_CONSTEXPR_P (decl) = true;
7363
7364 DECL_EXTERNAL (decl) = 1;
7365 if (quals && TREE_CODE (type) == FUNCTION_TYPE)
7366 {
7367 error (ctype
7368 ? G_("static member function %qD cannot have cv-qualifier")
7369 : G_("non-member function %qD cannot have cv-qualifier"),
7370 decl);
7371 quals = TYPE_UNQUALIFIED;
7372 }
7373
7374 if (IDENTIFIER_OPNAME_P (DECL_NAME (decl))
7375 && !grok_op_properties (decl, /*complain=*/true))
7376 return NULL_TREE;
7377 else if (UDLIT_OPER_P (DECL_NAME (decl)))
7378 {
7379 bool long_long_unsigned_p;
7380 bool long_double_p;
7381 const char *suffix = NULL;
7382 /* [over.literal]/6: Literal operators shall not have C linkage. */
7383 if (DECL_LANGUAGE (decl) == lang_c)
7384 {
7385 error ("literal operator with C linkage");
7386 return NULL_TREE;
7387 }
7388
7389 if (DECL_NAMESPACE_SCOPE_P (decl))
7390 {
7391 if (!check_literal_operator_args (decl, &long_long_unsigned_p,
7392 &long_double_p))
7393 {
7394 error ("%qD has invalid argument list", decl);
7395 return NULL_TREE;
7396 }
7397
7398 suffix = UDLIT_OP_SUFFIX (DECL_NAME (decl));
7399 if (long_long_unsigned_p)
7400 {
7401 if (cpp_interpret_int_suffix (suffix, strlen (suffix)))
7402 warning (0, "integer suffix %<%s%>"
7403 " shadowed by implementation", suffix);
7404 }
7405 else if (long_double_p)
7406 {
7407 if (cpp_interpret_float_suffix (suffix, strlen (suffix)))
7408 warning (0, "floating point suffix %<%s%>"
7409 " shadowed by implementation", suffix);
7410 }
7411 }
7412 else
7413 {
7414 error ("%qD must be a non-member function", decl);
7415 return NULL_TREE;
7416 }
7417 }
7418
7419 if (funcdef_flag)
7420 /* Make the init_value nonzero so pushdecl knows this is not
7421 tentative. error_mark_node is replaced later with the BLOCK. */
7422 DECL_INITIAL (decl) = error_mark_node;
7423
7424 if (TYPE_NOTHROW_P (type) || nothrow_libfn_p (decl))
7425 TREE_NOTHROW (decl) = 1;
7426
7427 /* Caller will do the rest of this. */
7428 if (check < 0)
7429 return decl;
7430
7431 if (ctype != NULL_TREE)
7432 grokclassfn (ctype, decl, flags);
7433
7434 decl = check_explicit_specialization (orig_declarator, decl,
7435 template_count,
7436 2 * funcdef_flag +
7437 4 * (friendp != 0));
7438 if (decl == error_mark_node)
7439 return NULL_TREE;
7440
7441 if (DECL_STATIC_FUNCTION_P (decl))
7442 check_static_quals (decl, quals);
7443
7444 if (attrlist)
7445 {
7446 cplus_decl_attributes (&decl, *attrlist, 0);
7447 *attrlist = NULL_TREE;
7448 }
7449
7450 /* Check main's type after attributes have been applied. */
7451 if (ctype == NULL_TREE && DECL_MAIN_P (decl))
7452 {
7453 if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
7454 integer_type_node))
7455 {
7456 tree oldtypeargs = TYPE_ARG_TYPES (TREE_TYPE (decl));
7457 tree newtype;
7458 error ("%<::main%> must return %<int%>");
7459 newtype = build_function_type (integer_type_node, oldtypeargs);
7460 TREE_TYPE (decl) = newtype;
7461 }
7462 if (warn_main)
7463 check_main_parameter_types (decl);
7464 }
7465
7466 if (ctype != NULL_TREE
7467 && (! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
7468 && check)
7469 {
7470 tree old_decl = check_classfn (ctype, decl,
7471 (processing_template_decl
7472 > template_class_depth (ctype))
7473 ? current_template_parms
7474 : NULL_TREE);
7475
7476 if (old_decl == error_mark_node)
7477 return NULL_TREE;
7478
7479 if (old_decl)
7480 {
7481 tree ok;
7482 tree pushed_scope;
7483
7484 if (TREE_CODE (old_decl) == TEMPLATE_DECL)
7485 /* Because grokfndecl is always supposed to return a
7486 FUNCTION_DECL, we pull out the DECL_TEMPLATE_RESULT
7487 here. We depend on our callers to figure out that its
7488 really a template that's being returned. */
7489 old_decl = DECL_TEMPLATE_RESULT (old_decl);
7490
7491 if (DECL_STATIC_FUNCTION_P (old_decl)
7492 && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
7493 {
7494 /* Remove the `this' parm added by grokclassfn. */
7495 revert_static_member_fn (decl);
7496 check_static_quals (decl, quals);
7497 }
7498 if (DECL_ARTIFICIAL (old_decl))
7499 {
7500 error ("definition of implicitly-declared %qD", old_decl);
7501 return NULL_TREE;
7502 }
7503 else if (DECL_DEFAULTED_FN (old_decl))
7504 {
7505 error ("definition of explicitly-defaulted %q+D", decl);
7506 error ("%q+#D explicitly defaulted here", old_decl);
7507 return NULL_TREE;
7508 }
7509
7510 /* Since we've smashed OLD_DECL to its
7511 DECL_TEMPLATE_RESULT, we must do the same to DECL. */
7512 if (TREE_CODE (decl) == TEMPLATE_DECL)
7513 decl = DECL_TEMPLATE_RESULT (decl);
7514
7515 /* Attempt to merge the declarations. This can fail, in
7516 the case of some invalid specialization declarations. */
7517 pushed_scope = push_scope (ctype);
7518 ok = duplicate_decls (decl, old_decl, friendp);
7519 if (pushed_scope)
7520 pop_scope (pushed_scope);
7521 if (!ok)
7522 {
7523 error ("no %q#D member function declared in class %qT",
7524 decl, ctype);
7525 return NULL_TREE;
7526 }
7527 return old_decl;
7528 }
7529 }
7530
7531 if (DECL_CONSTRUCTOR_P (decl) && !grok_ctor_properties (ctype, decl))
7532 return NULL_TREE;
7533
7534 if (ctype == NULL_TREE || check)
7535 return decl;
7536
7537 if (virtualp)
7538 DECL_VIRTUAL_P (decl) = 1;
7539
7540 return decl;
7541 }
7542
7543 /* decl is a FUNCTION_DECL.
7544 specifiers are the parsed virt-specifiers.
7545
7546 Set flags to reflect the virt-specifiers.
7547
7548 Returns decl. */
7549
7550 static tree
7551 set_virt_specifiers (tree decl, cp_virt_specifiers specifiers)
7552 {
7553 if (decl == NULL_TREE)
7554 return decl;
7555 if (specifiers & VIRT_SPEC_OVERRIDE)
7556 DECL_OVERRIDE_P (decl) = 1;
7557 if (specifiers & VIRT_SPEC_FINAL)
7558 DECL_FINAL_P (decl) = 1;
7559 return decl;
7560 }
7561
7562 /* DECL is a VAR_DECL for a static data member. Set flags to reflect
7563 the linkage that DECL will receive in the object file. */
7564
7565 static void
7566 set_linkage_for_static_data_member (tree decl)
7567 {
7568 /* A static data member always has static storage duration and
7569 external linkage. Note that static data members are forbidden in
7570 local classes -- the only situation in which a class has
7571 non-external linkage. */
7572 TREE_PUBLIC (decl) = 1;
7573 TREE_STATIC (decl) = 1;
7574 /* For non-template classes, static data members are always put
7575 out in exactly those files where they are defined, just as
7576 with ordinary namespace-scope variables. */
7577 if (!processing_template_decl)
7578 DECL_INTERFACE_KNOWN (decl) = 1;
7579 }
7580
7581 /* Create a VAR_DECL named NAME with the indicated TYPE.
7582
7583 If SCOPE is non-NULL, it is the class type or namespace containing
7584 the variable. If SCOPE is NULL, the variable should is created in
7585 the innermost enclosings scope. */
7586
7587 static tree
7588 grokvardecl (tree type,
7589 tree name,
7590 const cp_decl_specifier_seq *declspecs,
7591 int initialized,
7592 int constp,
7593 tree scope)
7594 {
7595 tree decl;
7596 tree explicit_scope;
7597
7598 gcc_assert (!name || TREE_CODE (name) == IDENTIFIER_NODE);
7599
7600 /* Compute the scope in which to place the variable, but remember
7601 whether or not that scope was explicitly specified by the user. */
7602 explicit_scope = scope;
7603 if (!scope)
7604 {
7605 /* An explicit "extern" specifier indicates a namespace-scope
7606 variable. */
7607 if (declspecs->storage_class == sc_extern)
7608 scope = current_decl_namespace ();
7609 else if (!at_function_scope_p ())
7610 scope = current_scope ();
7611 }
7612
7613 if (scope
7614 && (/* If the variable is a namespace-scope variable declared in a
7615 template, we need DECL_LANG_SPECIFIC. */
7616 (TREE_CODE (scope) == NAMESPACE_DECL && processing_template_decl)
7617 /* Similarly for namespace-scope variables with language linkage
7618 other than C++. */
7619 || (TREE_CODE (scope) == NAMESPACE_DECL
7620 && current_lang_name != lang_name_cplusplus)
7621 /* Similarly for static data members. */
7622 || TYPE_P (scope)))
7623 decl = build_lang_decl (VAR_DECL, name, type);
7624 else
7625 decl = build_decl (input_location, VAR_DECL, name, type);
7626
7627 if (explicit_scope && TREE_CODE (explicit_scope) == NAMESPACE_DECL)
7628 set_decl_namespace (decl, explicit_scope, 0);
7629 else
7630 DECL_CONTEXT (decl) = FROB_CONTEXT (scope);
7631
7632 if (declspecs->storage_class == sc_extern)
7633 {
7634 DECL_THIS_EXTERN (decl) = 1;
7635 DECL_EXTERNAL (decl) = !initialized;
7636 }
7637
7638 if (DECL_CLASS_SCOPE_P (decl))
7639 {
7640 set_linkage_for_static_data_member (decl);
7641 /* This function is only called with out-of-class definitions. */
7642 DECL_EXTERNAL (decl) = 0;
7643 check_class_member_definition_namespace (decl);
7644 }
7645 /* At top level, either `static' or no s.c. makes a definition
7646 (perhaps tentative), and absence of `static' makes it public. */
7647 else if (toplevel_bindings_p ())
7648 {
7649 TREE_PUBLIC (decl) = (declspecs->storage_class != sc_static
7650 && (DECL_THIS_EXTERN (decl) || ! constp));
7651 TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
7652 }
7653 /* Not at top level, only `static' makes a static definition. */
7654 else
7655 {
7656 TREE_STATIC (decl) = declspecs->storage_class == sc_static;
7657 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
7658 }
7659
7660 if (declspecs->specs[(int)ds_thread])
7661 DECL_TLS_MODEL (decl) = decl_default_tls_model (decl);
7662
7663 /* If the type of the decl has no linkage, make sure that we'll
7664 notice that in mark_used. */
7665 if (cxx_dialect > cxx98
7666 && decl_linkage (decl) != lk_none
7667 && DECL_LANG_SPECIFIC (decl) == NULL
7668 && !DECL_EXTERN_C_P (decl)
7669 && no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false))
7670 retrofit_lang_decl (decl);
7671
7672 if (TREE_PUBLIC (decl))
7673 {
7674 /* [basic.link]: A name with no linkage (notably, the name of a class
7675 or enumeration declared in a local scope) shall not be used to
7676 declare an entity with linkage.
7677
7678 DR 757 relaxes this restriction for C++0x. */
7679 tree t = (cxx_dialect > cxx98 ? NULL_TREE
7680 : no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false));
7681 if (t)
7682 {
7683 if (TYPE_ANONYMOUS_P (t))
7684 {
7685 if (DECL_EXTERN_C_P (decl))
7686 /* Allow this; it's pretty common in C. */
7687 ;
7688 else
7689 {
7690 /* DRs 132, 319 and 389 seem to indicate types with
7691 no linkage can only be used to declare extern "C"
7692 entities. Since it's not always an error in the
7693 ISO C++ 90 Standard, we only issue a warning. */
7694 warning (0, "anonymous type with no linkage used to declare "
7695 "variable %q#D with linkage", decl);
7696 if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
7697 warning (0, "%q+#D does not refer to the unqualified "
7698 "type, so it is not used for linkage",
7699 TYPE_NAME (t));
7700 }
7701 }
7702 else
7703 warning (0, "type %qT with no linkage used to declare variable "
7704 "%q#D with linkage", t, decl);
7705 }
7706 }
7707 else
7708 DECL_INTERFACE_KNOWN (decl) = 1;
7709
7710 return decl;
7711 }
7712
7713 /* Create and return a canonical pointer to member function type, for
7714 TYPE, which is a POINTER_TYPE to a METHOD_TYPE. */
7715
7716 tree
7717 build_ptrmemfunc_type (tree type)
7718 {
7719 tree field, fields;
7720 tree t;
7721 tree unqualified_variant = NULL_TREE;
7722
7723 if (type == error_mark_node)
7724 return type;
7725
7726 /* If a canonical type already exists for this type, use it. We use
7727 this method instead of type_hash_canon, because it only does a
7728 simple equality check on the list of field members. */
7729
7730 if ((t = TYPE_GET_PTRMEMFUNC_TYPE (type)))
7731 return t;
7732
7733 /* Make sure that we always have the unqualified pointer-to-member
7734 type first. */
7735 if (cp_type_quals (type) != TYPE_UNQUALIFIED)
7736 unqualified_variant
7737 = build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type));
7738
7739 t = make_class_type (RECORD_TYPE);
7740 xref_basetypes (t, NULL_TREE);
7741
7742 /* Let the front end know this is a pointer to member function... */
7743 TYPE_PTRMEMFUNC_FLAG (t) = 1;
7744 /* ... and not really a class type. */
7745 SET_CLASS_TYPE_P (t, 0);
7746
7747 field = build_decl (input_location, FIELD_DECL, pfn_identifier, type);
7748 fields = field;
7749
7750 field = build_decl (input_location, FIELD_DECL, delta_identifier,
7751 delta_type_node);
7752 DECL_CHAIN (field) = fields;
7753 fields = field;
7754
7755 finish_builtin_struct (t, "__ptrmemfunc_type", fields, ptr_type_node);
7756
7757 /* Zap out the name so that the back end will give us the debugging
7758 information for this anonymous RECORD_TYPE. */
7759 TYPE_NAME (t) = NULL_TREE;
7760
7761 /* If this is not the unqualified form of this pointer-to-member
7762 type, set the TYPE_MAIN_VARIANT for this type to be the
7763 unqualified type. Since they are actually RECORD_TYPEs that are
7764 not variants of each other, we must do this manually.
7765 As we just built a new type there is no need to do yet another copy. */
7766 if (cp_type_quals (type) != TYPE_UNQUALIFIED)
7767 {
7768 int type_quals = cp_type_quals (type);
7769 TYPE_READONLY (t) = (type_quals & TYPE_QUAL_CONST) != 0;
7770 TYPE_VOLATILE (t) = (type_quals & TYPE_QUAL_VOLATILE) != 0;
7771 TYPE_RESTRICT (t) = (type_quals & TYPE_QUAL_RESTRICT) != 0;
7772 TYPE_MAIN_VARIANT (t) = unqualified_variant;
7773 TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (unqualified_variant);
7774 TYPE_NEXT_VARIANT (unqualified_variant) = t;
7775 TREE_TYPE (TYPE_BINFO (t)) = t;
7776 }
7777
7778 /* Cache this pointer-to-member type so that we can find it again
7779 later. */
7780 TYPE_SET_PTRMEMFUNC_TYPE (type, t);
7781
7782 if (TYPE_STRUCTURAL_EQUALITY_P (type))
7783 SET_TYPE_STRUCTURAL_EQUALITY (t);
7784 else if (TYPE_CANONICAL (type) != type)
7785 TYPE_CANONICAL (t) = build_ptrmemfunc_type (TYPE_CANONICAL (type));
7786
7787 return t;
7788 }
7789
7790 /* Create and return a pointer to data member type. */
7791
7792 tree
7793 build_ptrmem_type (tree class_type, tree member_type)
7794 {
7795 if (TREE_CODE (member_type) == METHOD_TYPE)
7796 {
7797 cp_cv_quals quals = type_memfn_quals (member_type);
7798 member_type = build_memfn_type (member_type, class_type, quals);
7799 return build_ptrmemfunc_type (build_pointer_type (member_type));
7800 }
7801 else
7802 {
7803 gcc_assert (TREE_CODE (member_type) != FUNCTION_TYPE);
7804 return build_offset_type (class_type, member_type);
7805 }
7806 }
7807
7808 /* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
7809 Check to see that the definition is valid. Issue appropriate error
7810 messages. Return 1 if the definition is particularly bad, or 0
7811 otherwise. */
7812
7813 static int
7814 check_static_variable_definition (tree decl, tree type)
7815 {
7816 /* Can't check yet if we don't know the type. */
7817 if (dependent_type_p (type))
7818 return 0;
7819 /* If DECL is declared constexpr, we'll do the appropriate checks
7820 in check_initializer. */
7821 if (DECL_P (decl) && DECL_DECLARED_CONSTEXPR_P (decl))
7822 return 0;
7823 else if (cxx_dialect >= cxx0x && !INTEGRAL_OR_ENUMERATION_TYPE_P (type))
7824 {
7825 if (!COMPLETE_TYPE_P (type))
7826 error ("in-class initialization of static data member %q#D of "
7827 "incomplete type", decl);
7828 else if (literal_type_p (type))
7829 permerror (input_location,
7830 "%<constexpr%> needed for in-class initialization of "
7831 "static data member %q#D of non-integral type", decl);
7832 else
7833 error ("in-class initialization of static data member %q#D of "
7834 "non-literal type", decl);
7835 return 1;
7836 }
7837
7838 /* Motion 10 at San Diego: If a static const integral data member is
7839 initialized with an integral constant expression, the initializer
7840 may appear either in the declaration (within the class), or in
7841 the definition, but not both. If it appears in the class, the
7842 member is a member constant. The file-scope definition is always
7843 required. */
7844 if (!ARITHMETIC_TYPE_P (type) && TREE_CODE (type) != ENUMERAL_TYPE)
7845 {
7846 error ("invalid in-class initialization of static data member "
7847 "of non-integral type %qT",
7848 type);
7849 return 1;
7850 }
7851 else if (!CP_TYPE_CONST_P (type))
7852 error ("ISO C++ forbids in-class initialization of non-const "
7853 "static member %qD",
7854 decl);
7855 else if (!INTEGRAL_OR_ENUMERATION_TYPE_P (type))
7856 pedwarn (input_location, OPT_pedantic, "ISO C++ forbids initialization of member constant "
7857 "%qD of non-integral type %qT", decl, type);
7858
7859 return 0;
7860 }
7861
7862 /* *expr_p is part of the TYPE_SIZE of a variably-sized array. If any
7863 SAVE_EXPRs in *expr_p wrap expressions with side-effects, break those
7864 expressions out into temporary variables so that walk_tree doesn't
7865 step into them (c++/15764). */
7866
7867 static tree
7868 stabilize_save_expr_r (tree *expr_p, int *walk_subtrees, void *data)
7869 {
7870 struct pointer_set_t *pset = (struct pointer_set_t *)data;
7871 tree expr = *expr_p;
7872 if (TREE_CODE (expr) == SAVE_EXPR)
7873 {
7874 tree op = TREE_OPERAND (expr, 0);
7875 cp_walk_tree (&op, stabilize_save_expr_r, data, pset);
7876 if (TREE_SIDE_EFFECTS (op))
7877 TREE_OPERAND (expr, 0) = get_temp_regvar (TREE_TYPE (op), op);
7878 *walk_subtrees = 0;
7879 }
7880 else if (!EXPR_P (expr) || !TREE_SIDE_EFFECTS (expr))
7881 *walk_subtrees = 0;
7882 return NULL;
7883 }
7884
7885 /* Entry point for the above. */
7886
7887 static void
7888 stabilize_vla_size (tree size)
7889 {
7890 struct pointer_set_t *pset = pointer_set_create ();
7891 /* Break out any function calls into temporary variables. */
7892 cp_walk_tree (&size, stabilize_save_expr_r, pset, pset);
7893 }
7894
7895 /* Given the SIZE (i.e., number of elements) in an array, compute an
7896 appropriate index type for the array. If non-NULL, NAME is the
7897 name of the thing being declared. */
7898
7899 tree
7900 compute_array_index_type (tree name, tree size, tsubst_flags_t complain)
7901 {
7902 tree type;
7903 tree itype;
7904 tree osize = size;
7905 tree abi_1_itype = NULL_TREE;
7906
7907 if (error_operand_p (size))
7908 return error_mark_node;
7909
7910 type = TREE_TYPE (size);
7911 /* type_dependent_expression_p? */
7912 if (!dependent_type_p (type))
7913 {
7914 mark_rvalue_use (size);
7915
7916 if (cxx_dialect < cxx0x && TREE_CODE (size) == NOP_EXPR
7917 && TREE_SIDE_EFFECTS (size))
7918 /* In C++98, we mark a non-constant array bound with a magic
7919 NOP_EXPR with TREE_SIDE_EFFECTS; don't fold in that case. */;
7920 else
7921 {
7922 size = fold_non_dependent_expr (size);
7923
7924 if (CLASS_TYPE_P (type)
7925 && CLASSTYPE_LITERAL_P (type))
7926 {
7927 size = build_expr_type_conversion (WANT_INT, size, true);
7928 if (!size)
7929 {
7930 if (!(complain & tf_error))
7931 return error_mark_node;
7932 if (name)
7933 error ("size of array %qD has non-integral type %qT",
7934 name, type);
7935 else
7936 error ("size of array has non-integral type %qT", type);
7937 size = integer_one_node;
7938 }
7939 if (size == error_mark_node)
7940 return error_mark_node;
7941 type = TREE_TYPE (size);
7942 /* We didn't support this case in GCC 3.2, so don't bother
7943 trying to model it now in ABI v1. */
7944 abi_1_itype = error_mark_node;
7945 }
7946
7947 size = maybe_constant_value (size);
7948 if (!TREE_CONSTANT (size))
7949 size = osize;
7950 }
7951
7952 if (error_operand_p (size))
7953 return error_mark_node;
7954
7955 /* The array bound must be an integer type. */
7956 if (!INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
7957 {
7958 if (!(complain & tf_error))
7959 return error_mark_node;
7960 if (name)
7961 error ("size of array %qD has non-integral type %qT", name, type);
7962 else
7963 error ("size of array has non-integral type %qT", type);
7964 size = integer_one_node;
7965 type = TREE_TYPE (size);
7966 }
7967 }
7968
7969 /* A type is dependent if it is...an array type constructed from any
7970 dependent type or whose size is specified by a constant expression
7971 that is value-dependent. */
7972 /* We can only call value_dependent_expression_p on integral constant
7973 expressions; treat non-constant expressions as dependent, too. */
7974 if (processing_template_decl
7975 && (dependent_type_p (type)
7976 || !TREE_CONSTANT (size) || value_dependent_expression_p (size)))
7977 {
7978 /* We cannot do any checking for a SIZE that isn't known to be
7979 constant. Just build the index type and mark that it requires
7980 structural equality checks. */
7981 itype = build_index_type (build_min (MINUS_EXPR, sizetype,
7982 size, integer_one_node));
7983 TYPE_DEPENDENT_P (itype) = 1;
7984 TYPE_DEPENDENT_P_VALID (itype) = 1;
7985 SET_TYPE_STRUCTURAL_EQUALITY (itype);
7986 return itype;
7987 }
7988
7989 if (!abi_version_at_least (2) && processing_template_decl
7990 && abi_1_itype == NULL_TREE)
7991 /* For abi-1, we handled all instances in templates the same way,
7992 even when they were non-dependent. This affects the manglings
7993 produced. So, we do the normal checking for non-dependent
7994 sizes, but at the end we'll return the same type that abi-1
7995 would have, but with TYPE_CANONICAL set to the "right"
7996 value that the current ABI would provide. */
7997 abi_1_itype = build_index_type (build_min (MINUS_EXPR, sizetype,
7998 osize, integer_one_node));
7999
8000 /* Normally, the array-bound will be a constant. */
8001 if (TREE_CODE (size) == INTEGER_CST)
8002 {
8003 /* Check to see if the array bound overflowed. Make that an
8004 error, no matter how generous we're being. */
8005 constant_expression_error (size);
8006
8007 /* An array must have a positive number of elements. */
8008 if (INT_CST_LT (size, integer_zero_node))
8009 {
8010 if (!(complain & tf_error))
8011 return error_mark_node;
8012 if (name)
8013 error ("size of array %qD is negative", name);
8014 else
8015 error ("size of array is negative");
8016 size = integer_one_node;
8017 }
8018 /* As an extension we allow zero-sized arrays. */
8019 else if (integer_zerop (size))
8020 {
8021 if (!(complain & tf_error))
8022 /* We must fail if performing argument deduction (as
8023 indicated by the state of complain), so that
8024 another substitution can be found. */
8025 return error_mark_node;
8026 else if (in_system_header)
8027 /* Allow them in system headers because glibc uses them. */;
8028 else if (name)
8029 pedwarn (input_location, OPT_pedantic, "ISO C++ forbids zero-size array %qD", name);
8030 else
8031 pedwarn (input_location, OPT_pedantic, "ISO C++ forbids zero-size array");
8032 }
8033 }
8034 else if (TREE_CONSTANT (size)
8035 /* We don't allow VLAs at non-function scopes, or during
8036 tentative template substitution. */
8037 || !at_function_scope_p () || !(complain & tf_error))
8038 {
8039 if (!(complain & tf_error))
8040 return error_mark_node;
8041 /* `(int) &fn' is not a valid array bound. */
8042 if (name)
8043 error ("size of array %qD is not an integral constant-expression",
8044 name);
8045 else
8046 error ("size of array is not an integral constant-expression");
8047 size = integer_one_node;
8048 }
8049 else if (pedantic && warn_vla != 0)
8050 {
8051 if (name)
8052 pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array %qD", name);
8053 else
8054 pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array");
8055 }
8056 else if (warn_vla > 0)
8057 {
8058 if (name)
8059 warning (OPT_Wvla,
8060 "variable length array %qD is used", name);
8061 else
8062 warning (OPT_Wvla,
8063 "variable length array is used");
8064 }
8065
8066 if (processing_template_decl && !TREE_CONSTANT (size))
8067 /* A variable sized array. */
8068 itype = build_min (MINUS_EXPR, sizetype, size, integer_one_node);
8069 else
8070 {
8071 HOST_WIDE_INT saved_processing_template_decl;
8072
8073 /* Compute the index of the largest element in the array. It is
8074 one less than the number of elements in the array. We save
8075 and restore PROCESSING_TEMPLATE_DECL so that computations in
8076 cp_build_binary_op will be appropriately folded. */
8077 saved_processing_template_decl = processing_template_decl;
8078 processing_template_decl = 0;
8079 itype = cp_build_binary_op (input_location,
8080 MINUS_EXPR,
8081 cp_convert (ssizetype, size),
8082 cp_convert (ssizetype, integer_one_node),
8083 tf_warning_or_error);
8084 itype = fold (itype);
8085 processing_template_decl = saved_processing_template_decl;
8086
8087 if (!TREE_CONSTANT (itype))
8088 /* A variable sized array. */
8089 itype = variable_size (itype);
8090 /* Make sure that there was no overflow when creating to a signed
8091 index type. (For example, on a 32-bit machine, an array with
8092 size 2^32 - 1 is too big.) */
8093 else if (TREE_CODE (itype) == INTEGER_CST
8094 && TREE_OVERFLOW (itype))
8095 {
8096 if (!(complain & tf_error))
8097 return error_mark_node;
8098 error ("overflow in array dimension");
8099 TREE_OVERFLOW (itype) = 0;
8100 }
8101 }
8102
8103 /* Create and return the appropriate index type. */
8104 if (abi_1_itype && abi_1_itype != error_mark_node)
8105 {
8106 tree t = build_index_type (itype);
8107 TYPE_CANONICAL (abi_1_itype) = TYPE_CANONICAL (t);
8108 itype = abi_1_itype;
8109 }
8110 else
8111 itype = build_index_type (itype);
8112
8113 /* If the index type were dependent, we would have returned early, so
8114 remember that it isn't. */
8115 TYPE_DEPENDENT_P (itype) = 0;
8116 TYPE_DEPENDENT_P_VALID (itype) = 1;
8117 return itype;
8118 }
8119
8120 /* Returns the scope (if any) in which the entity declared by
8121 DECLARATOR will be located. If the entity was declared with an
8122 unqualified name, NULL_TREE is returned. */
8123
8124 tree
8125 get_scope_of_declarator (const cp_declarator *declarator)
8126 {
8127 while (declarator && declarator->kind != cdk_id)
8128 declarator = declarator->declarator;
8129
8130 /* If the declarator-id is a SCOPE_REF, the scope in which the
8131 declaration occurs is the first operand. */
8132 if (declarator
8133 && declarator->u.id.qualifying_scope)
8134 return declarator->u.id.qualifying_scope;
8135
8136 /* Otherwise, the declarator is not a qualified name; the entity will
8137 be declared in the current scope. */
8138 return NULL_TREE;
8139 }
8140
8141 /* Returns an ARRAY_TYPE for an array with SIZE elements of the
8142 indicated TYPE. If non-NULL, NAME is the NAME of the declaration
8143 with this type. */
8144
8145 static tree
8146 create_array_type_for_decl (tree name, tree type, tree size)
8147 {
8148 tree itype = NULL_TREE;
8149
8150 /* If things have already gone awry, bail now. */
8151 if (type == error_mark_node || size == error_mark_node)
8152 return error_mark_node;
8153
8154 /* 8.3.4/1: If the type of the identifier of D contains the auto
8155 type-specifier, the program is ill-formed. */
8156 if (pedantic && type_uses_auto (type))
8157 pedwarn (input_location, OPT_pedantic,
8158 "declaration of %qD as array of %<auto%>", name);
8159
8160 /* If there are some types which cannot be array elements,
8161 issue an error-message and return. */
8162 switch (TREE_CODE (type))
8163 {
8164 case VOID_TYPE:
8165 if (name)
8166 error ("declaration of %qD as array of void", name);
8167 else
8168 error ("creating array of void");
8169 return error_mark_node;
8170
8171 case FUNCTION_TYPE:
8172 if (name)
8173 error ("declaration of %qD as array of functions", name);
8174 else
8175 error ("creating array of functions");
8176 return error_mark_node;
8177
8178 case REFERENCE_TYPE:
8179 if (name)
8180 error ("declaration of %qD as array of references", name);
8181 else
8182 error ("creating array of references");
8183 return error_mark_node;
8184
8185 case METHOD_TYPE:
8186 if (name)
8187 error ("declaration of %qD as array of function members", name);
8188 else
8189 error ("creating array of function members");
8190 return error_mark_node;
8191
8192 default:
8193 break;
8194 }
8195
8196 /* [dcl.array]
8197
8198 The constant expressions that specify the bounds of the arrays
8199 can be omitted only for the first member of the sequence. */
8200 if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
8201 {
8202 if (name)
8203 error ("declaration of %qD as multidimensional array must "
8204 "have bounds for all dimensions except the first",
8205 name);
8206 else
8207 error ("multidimensional array must have bounds for all "
8208 "dimensions except the first");
8209
8210 return error_mark_node;
8211 }
8212
8213 /* Figure out the index type for the array. */
8214 if (size)
8215 itype = compute_array_index_type (name, size, tf_warning_or_error);
8216
8217 /* [dcl.array]
8218 T is called the array element type; this type shall not be [...] an
8219 abstract class type. */
8220 abstract_virtuals_error (name, type);
8221
8222 return build_cplus_array_type (type, itype);
8223 }
8224
8225 /* Check that it's OK to declare a function with the indicated TYPE.
8226 SFK indicates the kind of special function (if any) that this
8227 function is. OPTYPE is the type given in a conversion operator
8228 declaration, or the class type for a constructor/destructor.
8229 Returns the actual return type of the function; that
8230 may be different than TYPE if an error occurs, or for certain
8231 special functions. */
8232
8233 static tree
8234 check_special_function_return_type (special_function_kind sfk,
8235 tree type,
8236 tree optype)
8237 {
8238 switch (sfk)
8239 {
8240 case sfk_constructor:
8241 if (type)
8242 error ("return type specification for constructor invalid");
8243
8244 if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
8245 type = build_pointer_type (optype);
8246 else
8247 type = void_type_node;
8248 break;
8249
8250 case sfk_destructor:
8251 if (type)
8252 error ("return type specification for destructor invalid");
8253 /* We can't use the proper return type here because we run into
8254 problems with ambiguous bases and covariant returns.
8255 Java classes are left unchanged because (void *) isn't a valid
8256 Java type, and we don't want to change the Java ABI. */
8257 if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
8258 type = build_pointer_type (void_type_node);
8259 else
8260 type = void_type_node;
8261 break;
8262
8263 case sfk_conversion:
8264 if (type)
8265 error ("return type specified for %<operator %T%>", optype);
8266 type = optype;
8267 break;
8268
8269 default:
8270 gcc_unreachable ();
8271 }
8272
8273 return type;
8274 }
8275
8276 /* A variable or data member (whose unqualified name is IDENTIFIER)
8277 has been declared with the indicated TYPE. If the TYPE is not
8278 acceptable, issue an error message and return a type to use for
8279 error-recovery purposes. */
8280
8281 tree
8282 check_var_type (tree identifier, tree type)
8283 {
8284 if (VOID_TYPE_P (type))
8285 {
8286 if (!identifier)
8287 error ("unnamed variable or field declared void");
8288 else if (TREE_CODE (identifier) == IDENTIFIER_NODE)
8289 {
8290 gcc_assert (!IDENTIFIER_OPNAME_P (identifier));
8291 error ("variable or field %qE declared void", identifier);
8292 }
8293 else
8294 error ("variable or field declared void");
8295 type = error_mark_node;
8296 }
8297
8298 return type;
8299 }
8300
8301 /* Given declspecs and a declarator (abstract or otherwise), determine
8302 the name and type of the object declared and construct a DECL node
8303 for it.
8304
8305 DECLSPECS points to the representation of declaration-specifier
8306 sequence that precedes declarator.
8307
8308 DECL_CONTEXT says which syntactic context this declaration is in:
8309 NORMAL for most contexts. Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
8310 FUNCDEF for a function definition. Like NORMAL but a few different
8311 error messages in each case. Return value may be zero meaning
8312 this definition is too screwy to try to parse.
8313 MEMFUNCDEF for a function definition. Like FUNCDEF but prepares to
8314 handle member functions (which have FIELD context).
8315 Return value may be zero meaning this definition is too screwy to
8316 try to parse.
8317 PARM for a parameter declaration (either within a function prototype
8318 or before a function body). Make a PARM_DECL, or return void_type_node.
8319 TPARM for a template parameter declaration.
8320 CATCHPARM for a parameter declaration before a catch clause.
8321 TYPENAME if for a typename (in a cast or sizeof).
8322 Don't make a DECL node; just return the ..._TYPE node.
8323 FIELD for a struct or union field; make a FIELD_DECL.
8324 BITFIELD for a field with specified width.
8325
8326 INITIALIZED is as for start_decl.
8327
8328 ATTRLIST is a pointer to the list of attributes, which may be NULL
8329 if there are none; *ATTRLIST may be modified if attributes from inside
8330 the declarator should be applied to the declaration.
8331
8332 When this function is called, scoping variables (such as
8333 CURRENT_CLASS_TYPE) should reflect the scope in which the
8334 declaration occurs, not the scope in which the new declaration will
8335 be placed. For example, on:
8336
8337 void S::f() { ... }
8338
8339 when grokdeclarator is called for `S::f', the CURRENT_CLASS_TYPE
8340 should not be `S'.
8341
8342 Returns a DECL (if a declarator is present), a TYPE (if there is no
8343 declarator, in cases like "struct S;"), or the ERROR_MARK_NODE if an
8344 error occurs. */
8345
8346 tree
8347 grokdeclarator (const cp_declarator *declarator,
8348 const cp_decl_specifier_seq *declspecs,
8349 enum decl_context decl_context,
8350 int initialized,
8351 tree* attrlist)
8352 {
8353 tree type = NULL_TREE;
8354 int longlong = 0;
8355 int explicit_int128 = 0;
8356 int virtualp, explicitp, friendp, inlinep, staticp;
8357 int explicit_int = 0;
8358 int explicit_char = 0;
8359 int defaulted_int = 0;
8360 tree dependent_name = NULL_TREE;
8361
8362 tree typedef_decl = NULL_TREE;
8363 const char *name = NULL;
8364 tree typedef_type = NULL_TREE;
8365 /* True if this declarator is a function definition. */
8366 bool funcdef_flag = false;
8367 cp_declarator_kind innermost_code = cdk_error;
8368 int bitfield = 0;
8369 #if 0
8370 /* See the code below that used this. */
8371 tree decl_attr = NULL_TREE;
8372 #endif
8373
8374 /* Keep track of what sort of function is being processed
8375 so that we can warn about default return values, or explicit
8376 return values which do not match prescribed defaults. */
8377 special_function_kind sfk = sfk_none;
8378
8379 tree dname = NULL_TREE;
8380 tree ctor_return_type = NULL_TREE;
8381 enum overload_flags flags = NO_SPECIAL;
8382 /* cv-qualifiers that apply to the declarator, for a declaration of
8383 a member function. */
8384 cp_cv_quals memfn_quals = TYPE_UNQUALIFIED;
8385 /* virt-specifiers that apply to the declarator, for a declaration of
8386 a member function. */
8387 cp_virt_specifiers virt_specifiers = VIRT_SPEC_UNSPECIFIED;
8388 /* cv-qualifiers that apply to the type specified by the DECLSPECS. */
8389 int type_quals;
8390 tree raises = NULL_TREE;
8391 int template_count = 0;
8392 tree returned_attrs = NULL_TREE;
8393 tree parms = NULL_TREE;
8394 const cp_declarator *id_declarator;
8395 /* The unqualified name of the declarator; either an
8396 IDENTIFIER_NODE, BIT_NOT_EXPR, or TEMPLATE_ID_EXPR. */
8397 tree unqualified_id;
8398 /* The class type, if any, in which this entity is located,
8399 or NULL_TREE if none. Note that this value may be different from
8400 the current class type; for example if an attempt is made to declare
8401 "A::f" inside "B", this value will be "A". */
8402 tree ctype = current_class_type;
8403 /* The NAMESPACE_DECL for the namespace in which this entity is
8404 located. If an unqualified name is used to declare the entity,
8405 this value will be NULL_TREE, even if the entity is located at
8406 namespace scope. */
8407 tree in_namespace = NULL_TREE;
8408 cp_storage_class storage_class;
8409 bool unsigned_p, signed_p, short_p, long_p, thread_p;
8410 bool type_was_error_mark_node = false;
8411 bool parameter_pack_p = declarator? declarator->parameter_pack_p : false;
8412 bool template_type_arg = false;
8413 bool template_parm_flag = false;
8414 bool constexpr_p = declspecs->specs[(int) ds_constexpr];
8415 const char *errmsg;
8416
8417 signed_p = declspecs->specs[(int)ds_signed];
8418 unsigned_p = declspecs->specs[(int)ds_unsigned];
8419 short_p = declspecs->specs[(int)ds_short];
8420 long_p = declspecs->specs[(int)ds_long];
8421 longlong = declspecs->specs[(int)ds_long] >= 2;
8422 explicit_int128 = declspecs->explicit_int128_p;
8423 thread_p = declspecs->specs[(int)ds_thread];
8424
8425 if (decl_context == FUNCDEF)
8426 funcdef_flag = true, decl_context = NORMAL;
8427 else if (decl_context == MEMFUNCDEF)
8428 funcdef_flag = true, decl_context = FIELD;
8429 else if (decl_context == BITFIELD)
8430 bitfield = 1, decl_context = FIELD;
8431 else if (decl_context == TEMPLATE_TYPE_ARG)
8432 template_type_arg = true, decl_context = TYPENAME;
8433 else if (decl_context == TPARM)
8434 template_parm_flag = true, decl_context = PARM;
8435
8436 if (initialized > 1)
8437 funcdef_flag = true;
8438
8439 /* Look inside a declarator for the name being declared
8440 and get it as a string, for an error message. */
8441 for (id_declarator = declarator;
8442 id_declarator;
8443 id_declarator = id_declarator->declarator)
8444 {
8445 if (id_declarator->kind != cdk_id)
8446 innermost_code = id_declarator->kind;
8447
8448 switch (id_declarator->kind)
8449 {
8450 case cdk_function:
8451 if (id_declarator->declarator
8452 && id_declarator->declarator->kind == cdk_id)
8453 {
8454 sfk = id_declarator->declarator->u.id.sfk;
8455 if (sfk == sfk_destructor)
8456 flags = DTOR_FLAG;
8457 }
8458 break;
8459
8460 case cdk_id:
8461 {
8462 tree qualifying_scope = id_declarator->u.id.qualifying_scope;
8463 tree decl = id_declarator->u.id.unqualified_name;
8464 if (!decl)
8465 break;
8466 if (qualifying_scope)
8467 {
8468 if (at_function_scope_p ())
8469 {
8470 /* [dcl.meaning]
8471
8472 A declarator-id shall not be qualified except
8473 for ...
8474
8475 None of the cases are permitted in block
8476 scope. */
8477 if (qualifying_scope == global_namespace)
8478 error ("invalid use of qualified-name %<::%D%>",
8479 decl);
8480 else if (TYPE_P (qualifying_scope))
8481 error ("invalid use of qualified-name %<%T::%D%>",
8482 qualifying_scope, decl);
8483 else
8484 error ("invalid use of qualified-name %<%D::%D%>",
8485 qualifying_scope, decl);
8486 return error_mark_node;
8487 }
8488 else if (TYPE_P (qualifying_scope))
8489 {
8490 ctype = qualifying_scope;
8491 if (!MAYBE_CLASS_TYPE_P (ctype))
8492 {
8493 error ("%q#T is not a class or a namespace", ctype);
8494 ctype = NULL_TREE;
8495 }
8496 else if (innermost_code != cdk_function
8497 && current_class_type
8498 && !UNIQUELY_DERIVED_FROM_P (ctype,
8499 current_class_type))
8500 {
8501 error ("type %qT is not derived from type %qT",
8502 ctype, current_class_type);
8503 return error_mark_node;
8504 }
8505 }
8506 else if (TREE_CODE (qualifying_scope) == NAMESPACE_DECL)
8507 in_namespace = qualifying_scope;
8508 }
8509 switch (TREE_CODE (decl))
8510 {
8511 case BIT_NOT_EXPR:
8512 {
8513 tree type;
8514
8515 if (innermost_code != cdk_function)
8516 {
8517 error ("declaration of %qD as non-function", decl);
8518 return error_mark_node;
8519 }
8520 else if (!qualifying_scope
8521 && !(current_class_type && at_class_scope_p ()))
8522 {
8523 error ("declaration of %qD as non-member", decl);
8524 return error_mark_node;
8525 }
8526
8527 type = TREE_OPERAND (decl, 0);
8528 if (TYPE_P (type))
8529 type = constructor_name (type);
8530 name = identifier_to_locale (IDENTIFIER_POINTER (type));
8531 dname = decl;
8532 }
8533 break;
8534
8535 case TEMPLATE_ID_EXPR:
8536 {
8537 tree fns = TREE_OPERAND (decl, 0);
8538
8539 dname = fns;
8540 if (TREE_CODE (dname) != IDENTIFIER_NODE)
8541 {
8542 gcc_assert (is_overloaded_fn (dname));
8543 dname = DECL_NAME (get_first_fn (dname));
8544 }
8545 }
8546 /* Fall through. */
8547
8548 case IDENTIFIER_NODE:
8549 if (TREE_CODE (decl) == IDENTIFIER_NODE)
8550 dname = decl;
8551
8552 if (C_IS_RESERVED_WORD (dname))
8553 {
8554 error ("declarator-id missing; using reserved word %qD",
8555 dname);
8556 name = identifier_to_locale (IDENTIFIER_POINTER (dname));
8557 }
8558 else if (!IDENTIFIER_TYPENAME_P (dname))
8559 name = identifier_to_locale (IDENTIFIER_POINTER (dname));
8560 else
8561 {
8562 gcc_assert (flags == NO_SPECIAL);
8563 flags = TYPENAME_FLAG;
8564 ctor_return_type = TREE_TYPE (dname);
8565 sfk = sfk_conversion;
8566 if (is_typename_at_global_scope (dname))
8567 name = identifier_to_locale (IDENTIFIER_POINTER (dname));
8568 else
8569 name = "<invalid operator>";
8570 }
8571 break;
8572
8573 default:
8574 gcc_unreachable ();
8575 }
8576 break;
8577 }
8578
8579 case cdk_array:
8580 case cdk_pointer:
8581 case cdk_reference:
8582 case cdk_ptrmem:
8583 break;
8584
8585 case cdk_error:
8586 return error_mark_node;
8587
8588 default:
8589 gcc_unreachable ();
8590 }
8591 if (id_declarator->kind == cdk_id)
8592 break;
8593 }
8594
8595 /* [dcl.fct.edf]
8596
8597 The declarator in a function-definition shall have the form
8598 D1 ( parameter-declaration-clause) ... */
8599 if (funcdef_flag && innermost_code != cdk_function)
8600 {
8601 error ("function definition does not declare parameters");
8602 return error_mark_node;
8603 }
8604
8605 if (((dname && IDENTIFIER_OPNAME_P (dname)) || flags == TYPENAME_FLAG)
8606 && innermost_code != cdk_function
8607 && ! (ctype && !declspecs->any_specifiers_p))
8608 {
8609 error ("declaration of %qD as non-function", dname);
8610 return error_mark_node;
8611 }
8612
8613 if (dname
8614 && TREE_CODE (dname) == IDENTIFIER_NODE
8615 && UDLIT_OPER_P (dname)
8616 && innermost_code != cdk_function)
8617 {
8618 error ("declaration of %qD as non-function", dname);
8619 return error_mark_node;
8620 }
8621
8622 if (dname && IDENTIFIER_OPNAME_P (dname))
8623 {
8624 if (declspecs->specs[(int)ds_typedef])
8625 {
8626 error ("declaration of %qD as %<typedef%>", dname);
8627 return error_mark_node;
8628 }
8629 else if (decl_context == PARM || decl_context == CATCHPARM)
8630 {
8631 error ("declaration of %qD as parameter", dname);
8632 return error_mark_node;
8633 }
8634 }
8635
8636 /* Anything declared one level down from the top level
8637 must be one of the parameters of a function
8638 (because the body is at least two levels down). */
8639
8640 /* This heuristic cannot be applied to C++ nodes! Fixed, however,
8641 by not allowing C++ class definitions to specify their parameters
8642 with xdecls (must be spec.d in the parmlist).
8643
8644 Since we now wait to push a class scope until we are sure that
8645 we are in a legitimate method context, we must set oldcname
8646 explicitly (since current_class_name is not yet alive).
8647
8648 We also want to avoid calling this a PARM if it is in a namespace. */
8649
8650 if (decl_context == NORMAL && !toplevel_bindings_p ())
8651 {
8652 cp_binding_level *b = current_binding_level;
8653 current_binding_level = b->level_chain;
8654 if (current_binding_level != 0 && toplevel_bindings_p ())
8655 decl_context = PARM;
8656 current_binding_level = b;
8657 }
8658
8659 if (name == NULL)
8660 name = decl_context == PARM ? "parameter" : "type name";
8661
8662 if (constexpr_p && declspecs->specs[(int)ds_typedef])
8663 {
8664 error ("%<constexpr%> cannot appear in a typedef declaration");
8665 return error_mark_node;
8666 }
8667
8668 /* If there were multiple types specified in the decl-specifier-seq,
8669 issue an error message. */
8670 if (declspecs->multiple_types_p)
8671 {
8672 error ("two or more data types in declaration of %qs", name);
8673 return error_mark_node;
8674 }
8675
8676 if (declspecs->conflicting_specifiers_p)
8677 {
8678 error ("conflicting specifiers in declaration of %qs", name);
8679 return error_mark_node;
8680 }
8681
8682 /* Extract the basic type from the decl-specifier-seq. */
8683 type = declspecs->type;
8684 if (type == error_mark_node)
8685 {
8686 type = NULL_TREE;
8687 type_was_error_mark_node = true;
8688 }
8689 /* If the entire declaration is itself tagged as deprecated then
8690 suppress reports of deprecated items. */
8691 if (type && TREE_DEPRECATED (type)
8692 && deprecated_state != DEPRECATED_SUPPRESS)
8693 warn_deprecated_use (type, NULL_TREE);
8694 if (type && TREE_CODE (type) == TYPE_DECL)
8695 {
8696 typedef_decl = type;
8697 type = TREE_TYPE (typedef_decl);
8698 if (TREE_DEPRECATED (type)
8699 && DECL_ARTIFICIAL (typedef_decl)
8700 && deprecated_state != DEPRECATED_SUPPRESS)
8701 warn_deprecated_use (type, NULL_TREE);
8702 }
8703 /* No type at all: default to `int', and set DEFAULTED_INT
8704 because it was not a user-defined typedef. */
8705 if (type == NULL_TREE && (signed_p || unsigned_p || long_p || short_p))
8706 {
8707 /* These imply 'int'. */
8708 type = integer_type_node;
8709 defaulted_int = 1;
8710 }
8711 /* Gather flags. */
8712 explicit_int = declspecs->explicit_int_p;
8713 explicit_char = declspecs->explicit_char_p;
8714
8715 #if 0
8716 /* See the code below that used this. */
8717 if (typedef_decl)
8718 decl_attr = DECL_ATTRIBUTES (typedef_decl);
8719 #endif
8720 typedef_type = type;
8721
8722
8723 if (sfk != sfk_conversion)
8724 ctor_return_type = ctype;
8725
8726 if (sfk != sfk_none)
8727 type = check_special_function_return_type (sfk, type,
8728 ctor_return_type);
8729 else if (type == NULL_TREE)
8730 {
8731 int is_main;
8732
8733 explicit_int = -1;
8734
8735 /* We handle `main' specially here, because 'main () { }' is so
8736 common. With no options, it is allowed. With -Wreturn-type,
8737 it is a warning. It is only an error with -pedantic-errors. */
8738 is_main = (funcdef_flag
8739 && dname && TREE_CODE (dname) == IDENTIFIER_NODE
8740 && MAIN_NAME_P (dname)
8741 && ctype == NULL_TREE
8742 && in_namespace == NULL_TREE
8743 && current_namespace == global_namespace);
8744
8745 if (type_was_error_mark_node)
8746 /* We've already issued an error, don't complain more. */;
8747 else if (in_system_header || flag_ms_extensions)
8748 /* Allow it, sigh. */;
8749 else if (! is_main)
8750 permerror (input_location, "ISO C++ forbids declaration of %qs with no type", name);
8751 else if (pedantic)
8752 pedwarn (input_location, OPT_pedantic,
8753 "ISO C++ forbids declaration of %qs with no type", name);
8754 else
8755 warning (OPT_Wreturn_type,
8756 "ISO C++ forbids declaration of %qs with no type", name);
8757
8758 type = integer_type_node;
8759 }
8760
8761 ctype = NULL_TREE;
8762
8763 if (explicit_int128)
8764 {
8765 if (int128_integer_type_node == NULL_TREE)
8766 {
8767 error ("%<__int128%> is not supported by this target");
8768 explicit_int128 = false;
8769 }
8770 else if (pedantic && ! in_system_header)
8771 pedwarn (input_location, OPT_pedantic,
8772 "ISO C++ does not support %<__int128%> for %qs", name);
8773 }
8774
8775 /* Now process the modifiers that were specified
8776 and check for invalid combinations. */
8777
8778 /* Long double is a special combination. */
8779 if (long_p && !longlong && TYPE_MAIN_VARIANT (type) == double_type_node)
8780 {
8781 long_p = false;
8782 type = cp_build_qualified_type (long_double_type_node,
8783 cp_type_quals (type));
8784 }
8785
8786 /* Check all other uses of type modifiers. */
8787
8788 if (unsigned_p || signed_p || long_p || short_p)
8789 {
8790 int ok = 0;
8791
8792 if ((signed_p || unsigned_p) && TREE_CODE (type) != INTEGER_TYPE)
8793 error ("%<signed%> or %<unsigned%> invalid for %qs", name);
8794 else if (signed_p && unsigned_p)
8795 error ("%<signed%> and %<unsigned%> specified together for %qs", name);
8796 else if (longlong && TREE_CODE (type) != INTEGER_TYPE)
8797 error ("%<long long%> invalid for %qs", name);
8798 else if (long_p && TREE_CODE (type) == REAL_TYPE)
8799 error ("%<long%> invalid for %qs", name);
8800 else if (short_p && TREE_CODE (type) == REAL_TYPE)
8801 error ("%<short%> invalid for %qs", name);
8802 else if ((long_p || short_p) && TREE_CODE (type) != INTEGER_TYPE)
8803 error ("%<long%> or %<short%> invalid for %qs", name);
8804 else if ((long_p || short_p || explicit_char || explicit_int) && explicit_int128)
8805 error ("%<long%>, %<int%>, %<short%>, or %<char%> invalid for %qs", name);
8806 else if ((long_p || short_p) && explicit_char)
8807 error ("%<long%> or %<short%> specified with char for %qs", name);
8808 else if (long_p && short_p)
8809 error ("%<long%> and %<short%> specified together for %qs", name);
8810 else if (type == char16_type_node || type == char32_type_node)
8811 {
8812 if (signed_p || unsigned_p)
8813 error ("%<signed%> or %<unsigned%> invalid for %qs", name);
8814 else if (short_p || long_p)
8815 error ("%<short%> or %<long%> invalid for %qs", name);
8816 }
8817 else
8818 {
8819 ok = 1;
8820 if (!explicit_int && !defaulted_int && !explicit_char && !explicit_int128 && pedantic)
8821 {
8822 pedwarn (input_location, OPT_pedantic,
8823 "long, short, signed or unsigned used invalidly for %qs",
8824 name);
8825 if (flag_pedantic_errors)
8826 ok = 0;
8827 }
8828 }
8829
8830 /* Discard the type modifiers if they are invalid. */
8831 if (! ok)
8832 {
8833 unsigned_p = false;
8834 signed_p = false;
8835 long_p = false;
8836 short_p = false;
8837 longlong = 0;
8838 }
8839 }
8840
8841 /* Decide whether an integer type is signed or not.
8842 Optionally treat bitfields as signed by default. */
8843 if (unsigned_p
8844 /* [class.bit]
8845
8846 It is implementation-defined whether a plain (neither
8847 explicitly signed or unsigned) char, short, int, or long
8848 bit-field is signed or unsigned.
8849
8850 Naturally, we extend this to long long as well. Note that
8851 this does not include wchar_t. */
8852 || (bitfield && !flag_signed_bitfields
8853 && !signed_p
8854 /* A typedef for plain `int' without `signed' can be
8855 controlled just like plain `int', but a typedef for
8856 `signed int' cannot be so controlled. */
8857 && !(typedef_decl
8858 && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
8859 && TREE_CODE (type) == INTEGER_TYPE
8860 && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
8861 {
8862 if (explicit_int128)
8863 type = int128_unsigned_type_node;
8864 else if (longlong)
8865 type = long_long_unsigned_type_node;
8866 else if (long_p)
8867 type = long_unsigned_type_node;
8868 else if (short_p)
8869 type = short_unsigned_type_node;
8870 else if (type == char_type_node)
8871 type = unsigned_char_type_node;
8872 else if (typedef_decl)
8873 type = unsigned_type_for (type);
8874 else
8875 type = unsigned_type_node;
8876 }
8877 else if (signed_p && type == char_type_node)
8878 type = signed_char_type_node;
8879 else if (explicit_int128)
8880 type = int128_integer_type_node;
8881 else if (longlong)
8882 type = long_long_integer_type_node;
8883 else if (long_p)
8884 type = long_integer_type_node;
8885 else if (short_p)
8886 type = short_integer_type_node;
8887
8888 if (declspecs->specs[(int)ds_complex])
8889 {
8890 if (TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
8891 error ("complex invalid for %qs", name);
8892 /* If we just have "complex", it is equivalent to
8893 "complex double", but if any modifiers at all are specified it is
8894 the complex form of TYPE. E.g, "complex short" is
8895 "complex short int". */
8896 else if (defaulted_int && ! longlong && ! explicit_int128
8897 && ! (long_p || short_p || signed_p || unsigned_p))
8898 type = complex_double_type_node;
8899 else if (type == integer_type_node)
8900 type = complex_integer_type_node;
8901 else if (type == float_type_node)
8902 type = complex_float_type_node;
8903 else if (type == double_type_node)
8904 type = complex_double_type_node;
8905 else if (type == long_double_type_node)
8906 type = complex_long_double_type_node;
8907 else
8908 type = build_complex_type (type);
8909 }
8910
8911 type_quals = TYPE_UNQUALIFIED;
8912 if (declspecs->specs[(int)ds_const])
8913 type_quals |= TYPE_QUAL_CONST;
8914 if (declspecs->specs[(int)ds_volatile])
8915 type_quals |= TYPE_QUAL_VOLATILE;
8916 if (declspecs->specs[(int)ds_restrict])
8917 type_quals |= TYPE_QUAL_RESTRICT;
8918 if (sfk == sfk_conversion && type_quals != TYPE_UNQUALIFIED)
8919 error ("qualifiers are not allowed on declaration of %<operator %T%>",
8920 ctor_return_type);
8921
8922 type_quals |= cp_type_quals (type);
8923 type = cp_build_qualified_type_real
8924 (type, type_quals, ((typedef_decl && !DECL_ARTIFICIAL (typedef_decl)
8925 ? tf_ignore_bad_quals : 0) | tf_warning_or_error));
8926 /* We might have ignored or rejected some of the qualifiers. */
8927 type_quals = cp_type_quals (type);
8928
8929 staticp = 0;
8930 inlinep = !! declspecs->specs[(int)ds_inline];
8931 virtualp = !! declspecs->specs[(int)ds_virtual];
8932 explicitp = !! declspecs->specs[(int)ds_explicit];
8933
8934 storage_class = declspecs->storage_class;
8935 if (storage_class == sc_static)
8936 staticp = 1 + (decl_context == FIELD);
8937
8938 if (virtualp && staticp == 2)
8939 {
8940 error ("member %qD cannot be declared both virtual and static", dname);
8941 storage_class = sc_none;
8942 staticp = 0;
8943 }
8944 friendp = !! declspecs->specs[(int)ds_friend];
8945
8946 if (dependent_name && !friendp)
8947 {
8948 error ("%<%T::%D%> is not a valid declarator", ctype, dependent_name);
8949 return error_mark_node;
8950 }
8951
8952 /* Issue errors about use of storage classes for parameters. */
8953 if (decl_context == PARM)
8954 {
8955 if (declspecs->specs[(int)ds_typedef])
8956 {
8957 error ("typedef declaration invalid in parameter declaration");
8958 return error_mark_node;
8959 }
8960 else if (template_parm_flag && storage_class != sc_none)
8961 {
8962 error ("storage class specified for template parameter %qs", name);
8963 return error_mark_node;
8964 }
8965 else if (storage_class == sc_static
8966 || storage_class == sc_extern
8967 || thread_p)
8968 error ("storage class specifiers invalid in parameter declarations");
8969
8970 /* Function parameters cannot be constexpr. If we saw one, moan
8971 and pretend it wasn't there. */
8972 if (constexpr_p)
8973 {
8974 error ("a parameter cannot be declared %<constexpr%>");
8975 constexpr_p = 0;
8976 }
8977 }
8978
8979 /* Give error if `virtual' is used outside of class declaration. */
8980 if (virtualp
8981 && (current_class_name == NULL_TREE || decl_context != FIELD))
8982 {
8983 error ("%<virtual%> outside class declaration");
8984 virtualp = 0;
8985 }
8986
8987 /* Static anonymous unions are dealt with here. */
8988 if (staticp && decl_context == TYPENAME
8989 && declspecs->type
8990 && ANON_AGGR_TYPE_P (declspecs->type))
8991 decl_context = FIELD;
8992
8993 /* Warn about storage classes that are invalid for certain
8994 kinds of declarations (parameters, typenames, etc.). */
8995 if (thread_p
8996 && ((storage_class
8997 && storage_class != sc_extern
8998 && storage_class != sc_static)
8999 || declspecs->specs[(int)ds_typedef]))
9000 {
9001 error ("multiple storage classes in declaration of %qs", name);
9002 thread_p = false;
9003 }
9004 if (decl_context != NORMAL
9005 && ((storage_class != sc_none
9006 && storage_class != sc_mutable)
9007 || thread_p))
9008 {
9009 if ((decl_context == PARM || decl_context == CATCHPARM)
9010 && (storage_class == sc_register
9011 || storage_class == sc_auto))
9012 ;
9013 else if (declspecs->specs[(int)ds_typedef])
9014 ;
9015 else if (decl_context == FIELD
9016 /* C++ allows static class elements. */
9017 && storage_class == sc_static)
9018 /* C++ also allows inlines and signed and unsigned elements,
9019 but in those cases we don't come in here. */
9020 ;
9021 else
9022 {
9023 if (decl_context == FIELD)
9024 error ("storage class specified for %qs", name);
9025 else
9026 {
9027 if (decl_context == PARM || decl_context == CATCHPARM)
9028 error ("storage class specified for parameter %qs", name);
9029 else
9030 error ("storage class specified for typename");
9031 }
9032 if (storage_class == sc_register
9033 || storage_class == sc_auto
9034 || storage_class == sc_extern
9035 || thread_p)
9036 storage_class = sc_none;
9037 }
9038 }
9039 else if (storage_class == sc_extern && funcdef_flag
9040 && ! toplevel_bindings_p ())
9041 error ("nested function %qs declared %<extern%>", name);
9042 else if (toplevel_bindings_p ())
9043 {
9044 if (storage_class == sc_auto)
9045 error ("top-level declaration of %qs specifies %<auto%>", name);
9046 }
9047 else if (thread_p
9048 && storage_class != sc_extern
9049 && storage_class != sc_static)
9050 {
9051 error ("function-scope %qs implicitly auto and declared %<__thread%>",
9052 name);
9053 thread_p = false;
9054 }
9055
9056 if (storage_class && friendp)
9057 {
9058 error ("storage class specifiers invalid in friend function declarations");
9059 storage_class = sc_none;
9060 staticp = 0;
9061 }
9062
9063 if (!id_declarator)
9064 unqualified_id = NULL_TREE;
9065 else
9066 {
9067 unqualified_id = id_declarator->u.id.unqualified_name;
9068 switch (TREE_CODE (unqualified_id))
9069 {
9070 case BIT_NOT_EXPR:
9071 unqualified_id = TREE_OPERAND (unqualified_id, 0);
9072 if (TYPE_P (unqualified_id))
9073 unqualified_id = constructor_name (unqualified_id);
9074 break;
9075
9076 case IDENTIFIER_NODE:
9077 case TEMPLATE_ID_EXPR:
9078 break;
9079
9080 default:
9081 gcc_unreachable ();
9082 }
9083 }
9084
9085 /* Determine the type of the entity declared by recurring on the
9086 declarator. */
9087 for (; declarator; declarator = declarator->declarator)
9088 {
9089 const cp_declarator *inner_declarator;
9090 tree attrs;
9091
9092 if (type == error_mark_node)
9093 return error_mark_node;
9094
9095 attrs = declarator->attributes;
9096 if (attrs)
9097 {
9098 int attr_flags;
9099
9100 attr_flags = 0;
9101 if (declarator == NULL || declarator->kind == cdk_id)
9102 attr_flags |= (int) ATTR_FLAG_DECL_NEXT;
9103 if (declarator->kind == cdk_function)
9104 attr_flags |= (int) ATTR_FLAG_FUNCTION_NEXT;
9105 if (declarator->kind == cdk_array)
9106 attr_flags |= (int) ATTR_FLAG_ARRAY_NEXT;
9107 returned_attrs = decl_attributes (&type,
9108 chainon (returned_attrs, attrs),
9109 attr_flags);
9110 }
9111
9112 if (declarator->kind == cdk_id)
9113 break;
9114
9115 inner_declarator = declarator->declarator;
9116
9117 switch (declarator->kind)
9118 {
9119 case cdk_array:
9120 type = create_array_type_for_decl (dname, type,
9121 declarator->u.array.bounds);
9122 break;
9123
9124 case cdk_function:
9125 {
9126 tree arg_types;
9127 int funcdecl_p;
9128
9129 /* Declaring a function type.
9130 Make sure we have a valid type for the function to return. */
9131
9132 if (type_quals != TYPE_UNQUALIFIED)
9133 {
9134 if (SCALAR_TYPE_P (type) || VOID_TYPE_P (type))
9135 warning (OPT_Wignored_qualifiers,
9136 "type qualifiers ignored on function return type");
9137 /* We now know that the TYPE_QUALS don't apply to the
9138 decl, but to its return type. */
9139 type_quals = TYPE_UNQUALIFIED;
9140 }
9141 errmsg = targetm.invalid_return_type (type);
9142 if (errmsg)
9143 {
9144 error (errmsg);
9145 type = integer_type_node;
9146 }
9147
9148 /* Error about some types functions can't return. */
9149
9150 if (TREE_CODE (type) == FUNCTION_TYPE)
9151 {
9152 error ("%qs declared as function returning a function", name);
9153 return error_mark_node;
9154 }
9155 if (TREE_CODE (type) == ARRAY_TYPE)
9156 {
9157 error ("%qs declared as function returning an array", name);
9158 return error_mark_node;
9159 }
9160
9161 /* Pick up type qualifiers which should be applied to `this'. */
9162 memfn_quals = declarator->u.function.qualifiers;
9163 /* Pick up virt-specifiers. */
9164 virt_specifiers = declarator->u.function.virt_specifiers;
9165 /* Pick up the exception specifications. */
9166 raises = declarator->u.function.exception_specification;
9167 /* If the exception-specification is ill-formed, let's pretend
9168 there wasn't one. */
9169 if (raises == error_mark_node)
9170 raises = NULL_TREE;
9171
9172 /* Say it's a definition only for the CALL_EXPR
9173 closest to the identifier. */
9174 funcdecl_p = inner_declarator && inner_declarator->kind == cdk_id;
9175
9176 /* Handle a late-specified return type. */
9177 if (funcdecl_p)
9178 {
9179 if (type_uses_auto (type))
9180 {
9181 if (!declarator->u.function.late_return_type)
9182 {
9183 error ("%qs function uses %<auto%> type specifier without"
9184 " trailing return type", name);
9185 return error_mark_node;
9186 }
9187 else if (!is_auto (type))
9188 {
9189 error ("%qs function with trailing return type has"
9190 " %qT as its type rather than plain %<auto%>",
9191 name, type);
9192 return error_mark_node;
9193 }
9194 }
9195 else if (declarator->u.function.late_return_type)
9196 {
9197 if (cxx_dialect < cxx0x)
9198 /* Not using maybe_warn_cpp0x because this should
9199 always be an error. */
9200 error ("trailing return type only available with "
9201 "-std=c++11 or -std=gnu++11");
9202 else
9203 error ("%qs function with trailing return type not "
9204 "declared with %<auto%> type specifier", name);
9205 return error_mark_node;
9206 }
9207 }
9208 type = splice_late_return_type
9209 (type, declarator->u.function.late_return_type);
9210 if (type == error_mark_node)
9211 return error_mark_node;
9212
9213 if (ctype == NULL_TREE
9214 && decl_context == FIELD
9215 && funcdecl_p
9216 && (friendp == 0 || dname == current_class_name))
9217 ctype = current_class_type;
9218
9219 if (ctype && (sfk == sfk_constructor
9220 || sfk == sfk_destructor))
9221 {
9222 /* We are within a class's scope. If our declarator name
9223 is the same as the class name, and we are defining
9224 a function, then it is a constructor/destructor, and
9225 therefore returns a void type. */
9226
9227 /* ISO C++ 12.4/2. A destructor may not be declared
9228 const or volatile. A destructor may not be
9229 static.
9230
9231 ISO C++ 12.1. A constructor may not be declared
9232 const or volatile. A constructor may not be
9233 virtual. A constructor may not be static. */
9234 if (staticp == 2)
9235 error ((flags == DTOR_FLAG)
9236 ? G_("destructor cannot be static member function")
9237 : G_("constructor cannot be static member function"));
9238 if (memfn_quals)
9239 {
9240 error ((flags == DTOR_FLAG)
9241 ? G_("destructors may not be cv-qualified")
9242 : G_("constructors may not be cv-qualified"));
9243 memfn_quals = TYPE_UNQUALIFIED;
9244 }
9245
9246 if (decl_context == FIELD
9247 && !member_function_or_else (ctype,
9248 current_class_type,
9249 flags))
9250 return error_mark_node;
9251
9252 if (flags != DTOR_FLAG)
9253 {
9254 /* It's a constructor. */
9255 if (explicitp == 1)
9256 explicitp = 2;
9257 if (virtualp)
9258 {
9259 permerror (input_location, "constructors cannot be declared virtual");
9260 virtualp = 0;
9261 }
9262 if (decl_context == FIELD
9263 && sfk != sfk_constructor)
9264 return error_mark_node;
9265 }
9266 if (decl_context == FIELD)
9267 staticp = 0;
9268 }
9269 else if (friendp)
9270 {
9271 if (initialized)
9272 error ("can%'t initialize friend function %qs", name);
9273 if (virtualp)
9274 {
9275 /* Cannot be both friend and virtual. */
9276 error ("virtual functions cannot be friends");
9277 friendp = 0;
9278 }
9279 if (decl_context == NORMAL)
9280 error ("friend declaration not in class definition");
9281 if (current_function_decl && funcdef_flag)
9282 error ("can%'t define friend function %qs in a local "
9283 "class definition",
9284 name);
9285 }
9286 else if (ctype && sfk == sfk_conversion)
9287 {
9288 if (explicitp == 1)
9289 {
9290 maybe_warn_cpp0x (CPP0X_EXPLICIT_CONVERSION);
9291 explicitp = 2;
9292 }
9293 }
9294
9295 arg_types = grokparms (declarator->u.function.parameters,
9296 &parms);
9297
9298 if (inner_declarator
9299 && inner_declarator->kind == cdk_id
9300 && inner_declarator->u.id.sfk == sfk_destructor
9301 && arg_types != void_list_node)
9302 {
9303 error ("destructors may not have parameters");
9304 arg_types = void_list_node;
9305 parms = NULL_TREE;
9306 }
9307
9308 type = build_function_type (type, arg_types);
9309 }
9310 break;
9311
9312 case cdk_pointer:
9313 case cdk_reference:
9314 case cdk_ptrmem:
9315 /* Filter out pointers-to-references and references-to-references.
9316 We can get these if a TYPE_DECL is used. */
9317
9318 if (TREE_CODE (type) == REFERENCE_TYPE)
9319 {
9320 if (declarator->kind != cdk_reference)
9321 {
9322 error ("cannot declare pointer to %q#T", type);
9323 type = TREE_TYPE (type);
9324 }
9325
9326 /* In C++0x, we allow reference to reference declarations
9327 that occur indirectly through typedefs [7.1.3/8 dcl.typedef]
9328 and template type arguments [14.3.1/4 temp.arg.type]. The
9329 check for direct reference to reference declarations, which
9330 are still forbidden, occurs below. Reasoning behind the change
9331 can be found in DR106, DR540, and the rvalue reference
9332 proposals. */
9333 else if (cxx_dialect == cxx98)
9334 {
9335 error ("cannot declare reference to %q#T", type);
9336 type = TREE_TYPE (type);
9337 }
9338 }
9339 else if (VOID_TYPE_P (type))
9340 {
9341 if (declarator->kind == cdk_reference)
9342 error ("cannot declare reference to %q#T", type);
9343 else if (declarator->kind == cdk_ptrmem)
9344 error ("cannot declare pointer to %q#T member", type);
9345 }
9346
9347 /* We now know that the TYPE_QUALS don't apply to the decl,
9348 but to the target of the pointer. */
9349 type_quals = TYPE_UNQUALIFIED;
9350
9351 if (declarator->kind == cdk_ptrmem
9352 && (TREE_CODE (type) == FUNCTION_TYPE
9353 || (memfn_quals && TREE_CODE (type) == METHOD_TYPE)))
9354 {
9355 memfn_quals |= type_memfn_quals (type);
9356 type = build_memfn_type (type,
9357 declarator->u.pointer.class_type,
9358 memfn_quals);
9359 if (type == error_mark_node)
9360 return error_mark_node;
9361 memfn_quals = TYPE_UNQUALIFIED;
9362 }
9363
9364 if (TREE_CODE (type) == FUNCTION_TYPE
9365 && type_memfn_quals (type) != TYPE_UNQUALIFIED)
9366 error (declarator->kind == cdk_reference
9367 ? G_("cannot declare reference to qualified function type %qT")
9368 : G_("cannot declare pointer to qualified function type %qT"),
9369 type);
9370
9371 /* When the pointed-to type involves components of variable size,
9372 care must be taken to ensure that the size evaluation code is
9373 emitted early enough to dominate all the possible later uses
9374 and late enough for the variables on which it depends to have
9375 been assigned.
9376
9377 This is expected to happen automatically when the pointed-to
9378 type has a name/declaration of it's own, but special attention
9379 is required if the type is anonymous.
9380
9381 We handle the NORMAL and FIELD contexts here by inserting a
9382 dummy statement that just evaluates the size at a safe point
9383 and ensures it is not deferred until e.g. within a deeper
9384 conditional context (c++/43555).
9385
9386 We expect nothing to be needed here for PARM or TYPENAME.
9387 Evaluating the size at this point for TYPENAME would
9388 actually be incorrect, as we might be in the middle of an
9389 expression with side effects on the pointed-to type size
9390 "arguments" prior to the pointer declaration point and the
9391 size evaluation could end up prior to the side effects. */
9392
9393 if (!TYPE_NAME (type)
9394 && (decl_context == NORMAL || decl_context == FIELD)
9395 && at_function_scope_p ()
9396 && variably_modified_type_p (type, NULL_TREE))
9397 {
9398 /* First break out any side-effects. */
9399 stabilize_vla_size (TYPE_SIZE (type));
9400 /* And then force evaluation of the SAVE_EXPR. */
9401 finish_expr_stmt (TYPE_SIZE (type));
9402 }
9403
9404 if (declarator->kind == cdk_reference)
9405 {
9406 /* In C++0x, the type we are creating a reference to might be
9407 a typedef which is itself a reference type. In that case,
9408 we follow the reference collapsing rules in
9409 [7.1.3/8 dcl.typedef] to create the final reference type:
9410
9411 "If a typedef TD names a type that is a reference to a type
9412 T, an attempt to create the type 'lvalue reference to cv TD'
9413 creates the type 'lvalue reference to T,' while an attempt
9414 to create the type "rvalue reference to cv TD' creates the
9415 type TD."
9416 */
9417 if (VOID_TYPE_P (type))
9418 /* We already gave an error. */;
9419 else if (TREE_CODE (type) == REFERENCE_TYPE)
9420 {
9421 if (declarator->u.reference.rvalue_ref)
9422 /* Leave type alone. */;
9423 else
9424 type = cp_build_reference_type (TREE_TYPE (type), false);
9425 }
9426 else
9427 type = cp_build_reference_type
9428 (type, declarator->u.reference.rvalue_ref);
9429
9430 /* In C++0x, we need this check for direct reference to
9431 reference declarations, which are forbidden by
9432 [8.3.2/5 dcl.ref]. Reference to reference declarations
9433 are only allowed indirectly through typedefs and template
9434 type arguments. Example:
9435
9436 void foo(int & &); // invalid ref-to-ref decl
9437
9438 typedef int & int_ref;
9439 void foo(int_ref &); // valid ref-to-ref decl
9440 */
9441 if (inner_declarator && inner_declarator->kind == cdk_reference)
9442 error ("cannot declare reference to %q#T, which is not "
9443 "a typedef or a template type argument", type);
9444 }
9445 else if (TREE_CODE (type) == METHOD_TYPE)
9446 type = build_ptrmemfunc_type (build_pointer_type (type));
9447 else if (declarator->kind == cdk_ptrmem)
9448 {
9449 gcc_assert (TREE_CODE (declarator->u.pointer.class_type)
9450 != NAMESPACE_DECL);
9451 if (declarator->u.pointer.class_type == error_mark_node)
9452 /* We will already have complained. */
9453 type = error_mark_node;
9454 else
9455 type = build_ptrmem_type (declarator->u.pointer.class_type,
9456 type);
9457 }
9458 else
9459 type = build_pointer_type (type);
9460
9461 /* Process a list of type modifier keywords (such as
9462 const or volatile) that were given inside the `*' or `&'. */
9463
9464 if (declarator->u.pointer.qualifiers)
9465 {
9466 type
9467 = cp_build_qualified_type (type,
9468 declarator->u.pointer.qualifiers);
9469 type_quals = cp_type_quals (type);
9470 }
9471 ctype = NULL_TREE;
9472 break;
9473
9474 case cdk_error:
9475 break;
9476
9477 default:
9478 gcc_unreachable ();
9479 }
9480 }
9481
9482 /* We need to stabilize side-effects in VLA sizes for regular array
9483 declarations too, not just pointers to arrays. */
9484 if (type != error_mark_node && !TYPE_NAME (type)
9485 && (decl_context == NORMAL || decl_context == FIELD)
9486 && at_function_scope_p ()
9487 && variably_modified_type_p (type, NULL_TREE))
9488 stabilize_vla_size (TYPE_SIZE (type));
9489
9490 /* A `constexpr' specifier used in an object declaration declares
9491 the object as `const'. */
9492 if (constexpr_p && innermost_code != cdk_function)
9493 {
9494 if (type_quals & TYPE_QUAL_CONST)
9495 error ("both %<const%> and %<constexpr%> cannot be used here");
9496 if (type_quals & TYPE_QUAL_VOLATILE)
9497 error ("both %<volatile%> and %<constexpr%> cannot be used here");
9498 if (TREE_CODE (type) != REFERENCE_TYPE)
9499 {
9500 type_quals |= TYPE_QUAL_CONST;
9501 type = cp_build_qualified_type (type, type_quals);
9502 }
9503 }
9504
9505 if (unqualified_id && TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR
9506 && TREE_CODE (type) != FUNCTION_TYPE
9507 && TREE_CODE (type) != METHOD_TYPE)
9508 {
9509 error ("template-id %qD used as a declarator",
9510 unqualified_id);
9511 unqualified_id = dname;
9512 }
9513
9514 /* If TYPE is a FUNCTION_TYPE, but the function name was explicitly
9515 qualified with a class-name, turn it into a METHOD_TYPE, unless
9516 we know that the function is static. We take advantage of this
9517 opportunity to do other processing that pertains to entities
9518 explicitly declared to be class members. Note that if DECLARATOR
9519 is non-NULL, we know it is a cdk_id declarator; otherwise, we
9520 would not have exited the loop above. */
9521 if (declarator
9522 && declarator->u.id.qualifying_scope
9523 && MAYBE_CLASS_TYPE_P (declarator->u.id.qualifying_scope))
9524 {
9525 tree t;
9526
9527 ctype = declarator->u.id.qualifying_scope;
9528 ctype = TYPE_MAIN_VARIANT (ctype);
9529 t = ctype;
9530 while (t != NULL_TREE && CLASS_TYPE_P (t))
9531 {
9532 /* You're supposed to have one `template <...>' for every
9533 template class, but you don't need one for a full
9534 specialization. For example:
9535
9536 template <class T> struct S{};
9537 template <> struct S<int> { void f(); };
9538 void S<int>::f () {}
9539
9540 is correct; there shouldn't be a `template <>' for the
9541 definition of `S<int>::f'. */
9542 if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t)
9543 && !any_dependent_template_arguments_p (CLASSTYPE_TI_ARGS (t)))
9544 /* T is an explicit (not partial) specialization. All
9545 containing classes must therefore also be explicitly
9546 specialized. */
9547 break;
9548 if ((CLASSTYPE_USE_TEMPLATE (t) || CLASSTYPE_IS_TEMPLATE (t))
9549 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t)))
9550 template_count += 1;
9551
9552 t = TYPE_MAIN_DECL (t);
9553 t = DECL_CONTEXT (t);
9554 }
9555
9556 if (ctype == current_class_type)
9557 {
9558 if (friendp)
9559 {
9560 permerror (input_location, "member functions are implicitly friends of their class");
9561 friendp = 0;
9562 }
9563 else
9564 permerror (declarator->id_loc,
9565 "extra qualification %<%T::%> on member %qs",
9566 ctype, name);
9567 }
9568 else if (/* If the qualifying type is already complete, then we
9569 can skip the following checks. */
9570 !COMPLETE_TYPE_P (ctype)
9571 && (/* If the function is being defined, then
9572 qualifying type must certainly be complete. */
9573 funcdef_flag
9574 /* A friend declaration of "T::f" is OK, even if
9575 "T" is a template parameter. But, if this
9576 function is not a friend, the qualifying type
9577 must be a class. */
9578 || (!friendp && !CLASS_TYPE_P (ctype))
9579 /* For a declaration, the type need not be
9580 complete, if either it is dependent (since there
9581 is no meaningful definition of complete in that
9582 case) or the qualifying class is currently being
9583 defined. */
9584 || !(dependent_type_p (ctype)
9585 || currently_open_class (ctype)))
9586 /* Check that the qualifying type is complete. */
9587 && !complete_type_or_else (ctype, NULL_TREE))
9588 return error_mark_node;
9589 else if (TREE_CODE (type) == FUNCTION_TYPE)
9590 {
9591 if (current_class_type
9592 && (!friendp || funcdef_flag))
9593 {
9594 error (funcdef_flag
9595 ? G_("cannot define member function %<%T::%s%> "
9596 "within %<%T%>")
9597 : G_("cannot declare member function %<%T::%s%> "
9598 "within %<%T%>"),
9599 ctype, name, current_class_type);
9600 return error_mark_node;
9601 }
9602 }
9603 else if (declspecs->specs[(int)ds_typedef]
9604 && current_class_type)
9605 {
9606 error ("cannot declare member %<%T::%s%> within %qT",
9607 ctype, name, current_class_type);
9608 return error_mark_node;
9609 }
9610 }
9611
9612 if (ctype == NULL_TREE && decl_context == FIELD && friendp == 0)
9613 ctype = current_class_type;
9614
9615 /* Now TYPE has the actual type. */
9616
9617 if (returned_attrs)
9618 {
9619 if (attrlist)
9620 *attrlist = chainon (returned_attrs, *attrlist);
9621 else
9622 attrlist = &returned_attrs;
9623 }
9624
9625 /* Handle parameter packs. */
9626 if (parameter_pack_p)
9627 {
9628 if (decl_context == PARM)
9629 /* Turn the type into a pack expansion.*/
9630 type = make_pack_expansion (type);
9631 else
9632 error ("non-parameter %qs cannot be a parameter pack", name);
9633 }
9634
9635 /* Did array size calculations overflow? */
9636
9637 if (TREE_CODE (type) == ARRAY_TYPE
9638 && COMPLETE_TYPE_P (type)
9639 && TREE_CODE (TYPE_SIZE_UNIT (type)) == INTEGER_CST
9640 && TREE_OVERFLOW (TYPE_SIZE_UNIT (type)))
9641 {
9642 error ("size of array %qs is too large", name);
9643 /* If we proceed with the array type as it is, we'll eventually
9644 crash in tree_low_cst(). */
9645 type = error_mark_node;
9646 }
9647
9648 if ((decl_context == FIELD || decl_context == PARM)
9649 && !processing_template_decl
9650 && variably_modified_type_p (type, NULL_TREE))
9651 {
9652 if (decl_context == FIELD)
9653 error ("data member may not have variably modified type %qT", type);
9654 else
9655 error ("parameter may not have variably modified type %qT", type);
9656 type = error_mark_node;
9657 }
9658
9659 if (explicitp == 1 || (explicitp && friendp))
9660 {
9661 /* [dcl.fct.spec] The explicit specifier shall only be used in
9662 declarations of constructors within a class definition. */
9663 error ("only declarations of constructors can be %<explicit%>");
9664 explicitp = 0;
9665 }
9666
9667 if (storage_class == sc_mutable)
9668 {
9669 if (decl_context != FIELD || friendp)
9670 {
9671 error ("non-member %qs cannot be declared %<mutable%>", name);
9672 storage_class = sc_none;
9673 }
9674 else if (decl_context == TYPENAME || declspecs->specs[(int)ds_typedef])
9675 {
9676 error ("non-object member %qs cannot be declared %<mutable%>", name);
9677 storage_class = sc_none;
9678 }
9679 else if (TREE_CODE (type) == FUNCTION_TYPE
9680 || TREE_CODE (type) == METHOD_TYPE)
9681 {
9682 error ("function %qs cannot be declared %<mutable%>", name);
9683 storage_class = sc_none;
9684 }
9685 else if (staticp)
9686 {
9687 error ("static %qs cannot be declared %<mutable%>", name);
9688 storage_class = sc_none;
9689 }
9690 else if (type_quals & TYPE_QUAL_CONST)
9691 {
9692 error ("const %qs cannot be declared %<mutable%>", name);
9693 storage_class = sc_none;
9694 }
9695 else if (TREE_CODE (type) == REFERENCE_TYPE)
9696 {
9697 permerror (input_location, "reference %qs cannot be declared "
9698 "%<mutable%>", name);
9699 storage_class = sc_none;
9700 }
9701 }
9702
9703 /* If this is declaring a typedef name, return a TYPE_DECL. */
9704 if (declspecs->specs[(int)ds_typedef] && decl_context != TYPENAME)
9705 {
9706 tree decl;
9707
9708 /* Note that the grammar rejects storage classes
9709 in typenames, fields or parameters. */
9710 if (current_lang_name == lang_name_java)
9711 TYPE_FOR_JAVA (type) = 1;
9712
9713 /* This declaration:
9714
9715 typedef void f(int) const;
9716
9717 declares a function type which is not a member of any
9718 particular class, but which is cv-qualified; for
9719 example "f S::*" declares a pointer to a const-qualified
9720 member function of S. We record the cv-qualification in the
9721 function type. */
9722 if (memfn_quals && TREE_CODE (type) == FUNCTION_TYPE)
9723 {
9724 type = apply_memfn_quals (type, memfn_quals);
9725
9726 /* We have now dealt with these qualifiers. */
9727 memfn_quals = TYPE_UNQUALIFIED;
9728 }
9729
9730 if (type_uses_auto (type))
9731 {
9732 error ("typedef declared %<auto%>");
9733 type = error_mark_node;
9734 }
9735
9736 if (decl_context == FIELD)
9737 decl = build_lang_decl (TYPE_DECL, unqualified_id, type);
9738 else
9739 decl = build_decl (input_location, TYPE_DECL, unqualified_id, type);
9740 if (id_declarator && declarator->u.id.qualifying_scope) {
9741 error_at (DECL_SOURCE_LOCATION (decl),
9742 "typedef name may not be a nested-name-specifier");
9743 TREE_TYPE (decl) = error_mark_node;
9744 }
9745
9746 if (decl_context != FIELD)
9747 {
9748 if (!current_function_decl)
9749 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
9750 else if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (current_function_decl)
9751 || (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P
9752 (current_function_decl)))
9753 /* The TYPE_DECL is "abstract" because there will be
9754 clones of this constructor/destructor, and there will
9755 be copies of this TYPE_DECL generated in those
9756 clones. */
9757 DECL_ABSTRACT (decl) = 1;
9758 }
9759 else if (constructor_name_p (unqualified_id, current_class_type))
9760 permerror (input_location, "ISO C++ forbids nested type %qD with same name "
9761 "as enclosing class",
9762 unqualified_id);
9763
9764 /* If the user declares "typedef struct {...} foo" then the
9765 struct will have an anonymous name. Fill that name in now.
9766 Nothing can refer to it, so nothing needs know about the name
9767 change. */
9768 if (type != error_mark_node
9769 && unqualified_id
9770 && TYPE_NAME (type)
9771 && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
9772 && TYPE_ANONYMOUS_P (type)
9773 && declspecs->type_definition_p
9774 && cp_type_quals (type) == TYPE_UNQUALIFIED)
9775 {
9776 tree t;
9777
9778 /* Replace the anonymous name with the real name everywhere. */
9779 for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
9780 {
9781 if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
9782 /* We do not rename the debug info representing the
9783 anonymous tagged type because the standard says in
9784 [dcl.typedef] that the naming applies only for
9785 linkage purposes. */
9786 /*debug_hooks->set_name (t, decl);*/
9787 TYPE_NAME (t) = decl;
9788 }
9789
9790 if (TYPE_LANG_SPECIFIC (type))
9791 TYPE_WAS_ANONYMOUS (type) = 1;
9792
9793 /* If this is a typedef within a template class, the nested
9794 type is a (non-primary) template. The name for the
9795 template needs updating as well. */
9796 if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
9797 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type))
9798 = TYPE_IDENTIFIER (type);
9799
9800 /* Adjust linkage now that we aren't anonymous anymore. */
9801 set_linkage_according_to_type (type, TYPE_MAIN_DECL (type));
9802 determine_visibility (TYPE_MAIN_DECL (type));
9803
9804 /* FIXME remangle member functions; member functions of a
9805 type with external linkage have external linkage. */
9806 }
9807
9808 if (signed_p
9809 || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
9810 C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
9811
9812 bad_specifiers (decl, BSP_TYPE, virtualp,
9813 memfn_quals != TYPE_UNQUALIFIED,
9814 inlinep, friendp, raises != NULL_TREE);
9815
9816 if (declspecs->specs[(int)ds_alias])
9817 /* Acknowledge that this was written:
9818 `using analias = atype;'. */
9819 TYPE_DECL_ALIAS_P (decl) = 1;
9820
9821 return decl;
9822 }
9823
9824 /* Detect the case of an array type of unspecified size
9825 which came, as such, direct from a typedef name.
9826 We must copy the type, so that the array's domain can be
9827 individually set by the object's initializer. */
9828
9829 if (type && typedef_type
9830 && TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type)
9831 && TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (typedef_type))
9832 type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
9833
9834 /* Detect where we're using a typedef of function type to declare a
9835 function. PARMS will not be set, so we must create it now. */
9836
9837 if (type == typedef_type && TREE_CODE (type) == FUNCTION_TYPE)
9838 {
9839 tree decls = NULL_TREE;
9840 tree args;
9841
9842 for (args = TYPE_ARG_TYPES (type);
9843 args && args != void_list_node;
9844 args = TREE_CHAIN (args))
9845 {
9846 tree decl = cp_build_parm_decl (NULL_TREE, TREE_VALUE (args));
9847
9848 DECL_CHAIN (decl) = decls;
9849 decls = decl;
9850 }
9851
9852 parms = nreverse (decls);
9853
9854 if (decl_context != TYPENAME)
9855 {
9856 /* A cv-qualifier-seq shall only be part of the function type
9857 for a non-static member function. [8.3.5/4 dcl.fct] */
9858 if (type_memfn_quals (type) != TYPE_UNQUALIFIED
9859 && (current_class_type == NULL_TREE || staticp) )
9860 {
9861 error (staticp
9862 ? G_("qualified function types cannot be used to "
9863 "declare static member functions")
9864 : G_("qualified function types cannot be used to "
9865 "declare free functions"));
9866 type = TYPE_MAIN_VARIANT (type);
9867 }
9868
9869 /* The qualifiers on the function type become the qualifiers on
9870 the non-static member function. */
9871 memfn_quals |= type_memfn_quals (type);
9872 type_quals = TYPE_UNQUALIFIED;
9873 }
9874 }
9875
9876 /* If this is a type name (such as, in a cast or sizeof),
9877 compute the type and return it now. */
9878
9879 if (decl_context == TYPENAME)
9880 {
9881 /* Note that the grammar rejects storage classes
9882 in typenames, fields or parameters. */
9883 if (type_quals != TYPE_UNQUALIFIED)
9884 type_quals = TYPE_UNQUALIFIED;
9885
9886 /* Special case: "friend class foo" looks like a TYPENAME context. */
9887 if (friendp)
9888 {
9889 if (type_quals != TYPE_UNQUALIFIED)
9890 {
9891 error ("type qualifiers specified for friend class declaration");
9892 type_quals = TYPE_UNQUALIFIED;
9893 }
9894 if (inlinep)
9895 {
9896 error ("%<inline%> specified for friend class declaration");
9897 inlinep = 0;
9898 }
9899
9900 if (!current_aggr)
9901 {
9902 /* Don't allow friend declaration without a class-key. */
9903 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
9904 permerror (input_location, "template parameters cannot be friends");
9905 else if (TREE_CODE (type) == TYPENAME_TYPE)
9906 permerror (input_location, "friend declaration requires class-key, "
9907 "i.e. %<friend class %T::%D%>",
9908 TYPE_CONTEXT (type), TYPENAME_TYPE_FULLNAME (type));
9909 else
9910 permerror (input_location, "friend declaration requires class-key, "
9911 "i.e. %<friend %#T%>",
9912 type);
9913 }
9914
9915 /* Only try to do this stuff if we didn't already give up. */
9916 if (type != integer_type_node)
9917 {
9918 /* A friendly class? */
9919 if (current_class_type)
9920 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type),
9921 /*complain=*/true);
9922 else
9923 error ("trying to make class %qT a friend of global scope",
9924 type);
9925
9926 type = void_type_node;
9927 }
9928 }
9929 else if (memfn_quals)
9930 {
9931 if (ctype == NULL_TREE
9932 && TREE_CODE (type) == METHOD_TYPE)
9933 ctype = TYPE_METHOD_BASETYPE (type);
9934
9935 if (ctype)
9936 type = build_memfn_type (type, ctype, memfn_quals);
9937 /* Core issue #547: need to allow this in template type args. */
9938 else if (template_type_arg && TREE_CODE (type) == FUNCTION_TYPE)
9939 type = apply_memfn_quals (type, memfn_quals);
9940 else
9941 error ("invalid qualifiers on non-member function type");
9942 }
9943
9944 return type;
9945 }
9946 else if (unqualified_id == NULL_TREE && decl_context != PARM
9947 && decl_context != CATCHPARM
9948 && TREE_CODE (type) != UNION_TYPE
9949 && ! bitfield)
9950 {
9951 error ("abstract declarator %qT used as declaration", type);
9952 return error_mark_node;
9953 }
9954
9955 /* Only functions may be declared using an operator-function-id. */
9956 if (unqualified_id
9957 && IDENTIFIER_OPNAME_P (unqualified_id)
9958 && TREE_CODE (type) != FUNCTION_TYPE
9959 && TREE_CODE (type) != METHOD_TYPE)
9960 {
9961 error ("declaration of %qD as non-function", unqualified_id);
9962 return error_mark_node;
9963 }
9964
9965 /* We don't check parameter types here because we can emit a better
9966 error message later. */
9967 if (decl_context != PARM)
9968 {
9969 type = check_var_type (unqualified_id, type);
9970 if (type == error_mark_node)
9971 return error_mark_node;
9972 }
9973
9974 /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
9975 or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE. */
9976
9977 if (decl_context == PARM || decl_context == CATCHPARM)
9978 {
9979 if (ctype || in_namespace)
9980 error ("cannot use %<::%> in parameter declaration");
9981
9982 if (type_uses_auto (type))
9983 {
9984 error ("parameter declared %<auto%>");
9985 type = error_mark_node;
9986 }
9987
9988 /* A parameter declared as an array of T is really a pointer to T.
9989 One declared as a function is really a pointer to a function.
9990 One declared as a member is really a pointer to member. */
9991
9992 if (TREE_CODE (type) == ARRAY_TYPE)
9993 {
9994 /* Transfer const-ness of array into that of type pointed to. */
9995 type = build_pointer_type (TREE_TYPE (type));
9996 type_quals = TYPE_UNQUALIFIED;
9997 }
9998 else if (TREE_CODE (type) == FUNCTION_TYPE)
9999 type = build_pointer_type (type);
10000 }
10001
10002 if (ctype && TREE_CODE (type) == FUNCTION_TYPE && staticp < 2
10003 && !NEW_DELETE_OPNAME_P (unqualified_id))
10004 {
10005 cp_cv_quals real_quals = memfn_quals;
10006 if (constexpr_p && sfk != sfk_constructor && sfk != sfk_destructor)
10007 real_quals |= TYPE_QUAL_CONST;
10008 type = build_memfn_type (type, ctype, real_quals);
10009 }
10010
10011 {
10012 tree decl;
10013
10014 if (decl_context == PARM)
10015 {
10016 decl = cp_build_parm_decl (unqualified_id, type);
10017
10018 bad_specifiers (decl, BSP_PARM, virtualp,
10019 memfn_quals != TYPE_UNQUALIFIED,
10020 inlinep, friendp, raises != NULL_TREE);
10021 }
10022 else if (decl_context == FIELD)
10023 {
10024 if (!staticp && type_uses_auto (type))
10025 {
10026 error ("non-static data member declared %<auto%>");
10027 type = error_mark_node;
10028 }
10029
10030 /* The C99 flexible array extension. */
10031 if (!staticp && TREE_CODE (type) == ARRAY_TYPE
10032 && TYPE_DOMAIN (type) == NULL_TREE)
10033 {
10034 tree itype = compute_array_index_type (dname, integer_zero_node,
10035 tf_warning_or_error);
10036 type = build_cplus_array_type (TREE_TYPE (type), itype);
10037 }
10038
10039 if (type == error_mark_node)
10040 {
10041 /* Happens when declaring arrays of sizes which
10042 are error_mark_node, for example. */
10043 decl = NULL_TREE;
10044 }
10045 else if (in_namespace && !friendp)
10046 {
10047 /* Something like struct S { int N::j; }; */
10048 error ("invalid use of %<::%>");
10049 return error_mark_node;
10050 }
10051 else if (TREE_CODE (type) == FUNCTION_TYPE
10052 || TREE_CODE (type) == METHOD_TYPE)
10053 {
10054 int publicp = 0;
10055 tree function_context;
10056
10057 if (friendp == 0)
10058 {
10059 /* This should never happen in pure C++ (the check
10060 could be an assert). It could happen in
10061 Objective-C++ if someone writes invalid code that
10062 uses a function declaration for an instance
10063 variable or property (instance variables and
10064 properties are parsed as FIELD_DECLs, but they are
10065 part of an Objective-C class, not a C++ class).
10066 That code is invalid and is caught by this
10067 check. */
10068 if (!ctype)
10069 {
10070 error ("declaration of function %qD in invalid context",
10071 unqualified_id);
10072 return error_mark_node;
10073 }
10074
10075 /* ``A union may [ ... ] not [ have ] virtual functions.''
10076 ARM 9.5 */
10077 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
10078 {
10079 error ("function %qD declared virtual inside a union",
10080 unqualified_id);
10081 return error_mark_node;
10082 }
10083
10084 if (NEW_DELETE_OPNAME_P (unqualified_id))
10085 {
10086 if (virtualp)
10087 {
10088 error ("%qD cannot be declared virtual, since it "
10089 "is always static",
10090 unqualified_id);
10091 virtualp = 0;
10092 }
10093 }
10094 }
10095
10096 /* Check that the name used for a destructor makes sense. */
10097 if (sfk == sfk_destructor)
10098 {
10099 tree uqname = id_declarator->u.id.unqualified_name;
10100
10101 if (!ctype)
10102 {
10103 gcc_assert (friendp);
10104 error ("expected qualified name in friend declaration "
10105 "for destructor %qD", uqname);
10106 return error_mark_node;
10107 }
10108
10109 if (!check_dtor_name (ctype, TREE_OPERAND (uqname, 0)))
10110 {
10111 error ("declaration of %qD as member of %qT",
10112 uqname, ctype);
10113 return error_mark_node;
10114 }
10115 if (constexpr_p)
10116 {
10117 error ("a destructor cannot be %<constexpr%>");
10118 return error_mark_node;
10119 }
10120 }
10121 else if (sfk == sfk_constructor && friendp && !ctype)
10122 {
10123 error ("expected qualified name in friend declaration "
10124 "for constructor %qD",
10125 id_declarator->u.id.unqualified_name);
10126 return error_mark_node;
10127 }
10128
10129 /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node. */
10130 function_context = (ctype != NULL_TREE) ?
10131 decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
10132 publicp = (! friendp || ! staticp)
10133 && function_context == NULL_TREE;
10134 decl = grokfndecl (ctype, type,
10135 TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
10136 ? unqualified_id : dname,
10137 parms,
10138 unqualified_id,
10139 virtualp, flags, memfn_quals, raises,
10140 friendp ? -1 : 0, friendp, publicp,
10141 inlinep | (2 * constexpr_p),
10142 sfk,
10143 funcdef_flag, template_count, in_namespace,
10144 attrlist, declarator->id_loc);
10145 decl = set_virt_specifiers (decl, virt_specifiers);
10146 if (decl == NULL_TREE)
10147 return error_mark_node;
10148 #if 0
10149 /* This clobbers the attrs stored in `decl' from `attrlist'. */
10150 /* The decl and setting of decl_attr is also turned off. */
10151 decl = build_decl_attribute_variant (decl, decl_attr);
10152 #endif
10153
10154 /* [class.conv.ctor]
10155
10156 A constructor declared without the function-specifier
10157 explicit that can be called with a single parameter
10158 specifies a conversion from the type of its first
10159 parameter to the type of its class. Such a constructor
10160 is called a converting constructor. */
10161 if (explicitp == 2)
10162 DECL_NONCONVERTING_P (decl) = 1;
10163 }
10164 else if (!staticp && !dependent_type_p (type)
10165 && !COMPLETE_TYPE_P (complete_type (type))
10166 && (TREE_CODE (type) != ARRAY_TYPE || initialized == 0))
10167 {
10168 if (unqualified_id)
10169 error ("field %qD has incomplete type", unqualified_id);
10170 else
10171 error ("name %qT has incomplete type", type);
10172
10173 /* If we're instantiating a template, tell them which
10174 instantiation made the field's type be incomplete. */
10175 if (current_class_type
10176 && TYPE_NAME (current_class_type)
10177 && IDENTIFIER_TEMPLATE (current_class_name)
10178 && declspecs->type
10179 && declspecs->type == type)
10180 error (" in instantiation of template %qT",
10181 current_class_type);
10182
10183 return error_mark_node;
10184 }
10185 else
10186 {
10187 if (friendp)
10188 {
10189 error ("%qE is neither function nor member function; "
10190 "cannot be declared friend", unqualified_id);
10191 friendp = 0;
10192 }
10193 decl = NULL_TREE;
10194 }
10195
10196 if (friendp)
10197 {
10198 /* Friends are treated specially. */
10199 if (ctype == current_class_type)
10200 ; /* We already issued a permerror. */
10201 else if (decl && DECL_NAME (decl))
10202 {
10203 if (template_class_depth (current_class_type) == 0)
10204 {
10205 decl = check_explicit_specialization
10206 (unqualified_id, decl, template_count,
10207 2 * funcdef_flag + 4);
10208 if (decl == error_mark_node)
10209 return error_mark_node;
10210 }
10211
10212 decl = do_friend (ctype, unqualified_id, decl,
10213 *attrlist, flags,
10214 funcdef_flag);
10215 return decl;
10216 }
10217 else
10218 return error_mark_node;
10219 }
10220
10221 /* Structure field. It may not be a function, except for C++. */
10222
10223 if (decl == NULL_TREE)
10224 {
10225 if (staticp)
10226 {
10227 /* C++ allows static class members. All other work
10228 for this is done by grokfield. */
10229 decl = build_lang_decl (VAR_DECL, unqualified_id, type);
10230 set_linkage_for_static_data_member (decl);
10231 /* Even if there is an in-class initialization, DECL
10232 is considered undefined until an out-of-class
10233 definition is provided. */
10234 DECL_EXTERNAL (decl) = 1;
10235
10236 if (thread_p)
10237 DECL_TLS_MODEL (decl) = decl_default_tls_model (decl);
10238
10239 if (constexpr_p && !initialized)
10240 {
10241 error ("constexpr static data member %qD must have an "
10242 "initializer", decl);
10243 constexpr_p = false;
10244 }
10245 }
10246 else
10247 {
10248 if (constexpr_p)
10249 {
10250 error ("non-static data member %qE declared %<constexpr%>",
10251 unqualified_id);
10252 constexpr_p = false;
10253 }
10254 decl = build_decl (input_location,
10255 FIELD_DECL, unqualified_id, type);
10256 DECL_NONADDRESSABLE_P (decl) = bitfield;
10257 if (bitfield && !unqualified_id)
10258 TREE_NO_WARNING (decl) = 1;
10259
10260 if (storage_class == sc_mutable)
10261 {
10262 DECL_MUTABLE_P (decl) = 1;
10263 storage_class = sc_none;
10264 }
10265
10266 if (initialized)
10267 {
10268 /* An attempt is being made to initialize a non-static
10269 member. This is new in C++11. */
10270 maybe_warn_cpp0x (CPP0X_NSDMI);
10271
10272 /* If this has been parsed with static storage class, but
10273 errors forced staticp to be cleared, ensure NSDMI is
10274 not present. */
10275 if (declspecs->storage_class == sc_static)
10276 DECL_INITIAL (decl) = error_mark_node;
10277 }
10278 }
10279
10280 bad_specifiers (decl, BSP_FIELD, virtualp,
10281 memfn_quals != TYPE_UNQUALIFIED,
10282 inlinep, friendp, raises != NULL_TREE);
10283 }
10284 }
10285 else if (TREE_CODE (type) == FUNCTION_TYPE
10286 || TREE_CODE (type) == METHOD_TYPE)
10287 {
10288 tree original_name;
10289 int publicp = 0;
10290
10291 if (!unqualified_id)
10292 return error_mark_node;
10293
10294 if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
10295 original_name = dname;
10296 else
10297 original_name = unqualified_id;
10298
10299 if (storage_class == sc_auto)
10300 error ("storage class %<auto%> invalid for function %qs", name);
10301 else if (storage_class == sc_register)
10302 error ("storage class %<register%> invalid for function %qs", name);
10303 else if (thread_p)
10304 error ("storage class %<__thread%> invalid for function %qs", name);
10305
10306 if (virt_specifiers)
10307 error ("virt-specifiers in %qs not allowed outside a class definition", name);
10308 /* Function declaration not at top level.
10309 Storage classes other than `extern' are not allowed
10310 and `extern' makes no difference. */
10311 if (! toplevel_bindings_p ()
10312 && (storage_class == sc_static
10313 || declspecs->specs[(int)ds_inline])
10314 && pedantic)
10315 {
10316 if (storage_class == sc_static)
10317 pedwarn (input_location, OPT_pedantic,
10318 "%<static%> specified invalid for function %qs "
10319 "declared out of global scope", name);
10320 else
10321 pedwarn (input_location, OPT_pedantic,
10322 "%<inline%> specifier invalid for function %qs "
10323 "declared out of global scope", name);
10324 }
10325
10326 if (ctype == NULL_TREE)
10327 {
10328 if (virtualp)
10329 {
10330 error ("virtual non-class function %qs", name);
10331 virtualp = 0;
10332 }
10333 else if (sfk == sfk_constructor
10334 || sfk == sfk_destructor)
10335 {
10336 error (funcdef_flag
10337 ? G_("%qs defined in a non-class scope")
10338 : G_("%qs declared in a non-class scope"), name);
10339 sfk = sfk_none;
10340 }
10341 }
10342
10343 /* Record presence of `static'. */
10344 publicp = (ctype != NULL_TREE
10345 || storage_class == sc_extern
10346 || storage_class != sc_static);
10347
10348 decl = grokfndecl (ctype, type, original_name, parms, unqualified_id,
10349 virtualp, flags, memfn_quals, raises,
10350 1, friendp,
10351 publicp, inlinep | (2 * constexpr_p), sfk,
10352 funcdef_flag,
10353 template_count, in_namespace, attrlist,
10354 declarator->id_loc);
10355 if (decl == NULL_TREE)
10356 return error_mark_node;
10357
10358 if (staticp == 1)
10359 {
10360 int invalid_static = 0;
10361
10362 /* Don't allow a static member function in a class, and forbid
10363 declaring main to be static. */
10364 if (TREE_CODE (type) == METHOD_TYPE)
10365 {
10366 permerror (input_location, "cannot declare member function %qD to have "
10367 "static linkage", decl);
10368 invalid_static = 1;
10369 }
10370 else if (current_function_decl)
10371 {
10372 /* FIXME need arm citation */
10373 error ("cannot declare static function inside another function");
10374 invalid_static = 1;
10375 }
10376
10377 if (invalid_static)
10378 {
10379 staticp = 0;
10380 storage_class = sc_none;
10381 }
10382 }
10383 }
10384 else
10385 {
10386 /* It's a variable. */
10387
10388 /* An uninitialized decl with `extern' is a reference. */
10389 decl = grokvardecl (type, unqualified_id,
10390 declspecs,
10391 initialized,
10392 (type_quals & TYPE_QUAL_CONST) != 0,
10393 ctype ? ctype : in_namespace);
10394 bad_specifiers (decl, BSP_VAR, virtualp,
10395 memfn_quals != TYPE_UNQUALIFIED,
10396 inlinep, friendp, raises != NULL_TREE);
10397
10398 if (ctype)
10399 {
10400 DECL_CONTEXT (decl) = ctype;
10401 if (staticp == 1)
10402 {
10403 permerror (input_location, "%<static%> may not be used when defining "
10404 "(as opposed to declaring) a static data member");
10405 staticp = 0;
10406 storage_class = sc_none;
10407 }
10408 if (storage_class == sc_register && TREE_STATIC (decl))
10409 {
10410 error ("static member %qD declared %<register%>", decl);
10411 storage_class = sc_none;
10412 }
10413 if (storage_class == sc_extern && pedantic)
10414 {
10415 pedwarn (input_location, OPT_pedantic,
10416 "cannot explicitly declare member %q#D to have "
10417 "extern linkage", decl);
10418 storage_class = sc_none;
10419 }
10420 }
10421 else if (constexpr_p && DECL_EXTERNAL (decl))
10422 {
10423 error ("declaration of constexpr variable %qD is not a definition",
10424 decl);
10425 constexpr_p = false;
10426 }
10427 }
10428
10429 if (storage_class == sc_extern && initialized && !funcdef_flag)
10430 {
10431 if (toplevel_bindings_p ())
10432 {
10433 /* It's common practice (and completely valid) to have a const
10434 be initialized and declared extern. */
10435 if (!(type_quals & TYPE_QUAL_CONST))
10436 warning (0, "%qs initialized and declared %<extern%>", name);
10437 }
10438 else
10439 {
10440 error ("%qs has both %<extern%> and initializer", name);
10441 return error_mark_node;
10442 }
10443 }
10444
10445 /* Record `register' declaration for warnings on &
10446 and in case doing stupid register allocation. */
10447
10448 if (storage_class == sc_register)
10449 DECL_REGISTER (decl) = 1;
10450 else if (storage_class == sc_extern)
10451 DECL_THIS_EXTERN (decl) = 1;
10452 else if (storage_class == sc_static)
10453 DECL_THIS_STATIC (decl) = 1;
10454
10455 /* Set constexpr flag on vars (functions got it in grokfndecl). */
10456 if (constexpr_p && TREE_CODE (decl) == VAR_DECL)
10457 DECL_DECLARED_CONSTEXPR_P (decl) = true;
10458
10459 /* Record constancy and volatility on the DECL itself . There's
10460 no need to do this when processing a template; we'll do this
10461 for the instantiated declaration based on the type of DECL. */
10462 if (!processing_template_decl)
10463 cp_apply_type_quals_to_decl (type_quals, decl);
10464
10465 return decl;
10466 }
10467 }
10468 \f
10469 /* Subroutine of start_function. Ensure that each of the parameter
10470 types (as listed in PARMS) is complete, as is required for a
10471 function definition. */
10472
10473 static void
10474 require_complete_types_for_parms (tree parms)
10475 {
10476 for (; parms; parms = DECL_CHAIN (parms))
10477 {
10478 if (dependent_type_p (TREE_TYPE (parms)))
10479 continue;
10480 if (!VOID_TYPE_P (TREE_TYPE (parms))
10481 && complete_type_or_else (TREE_TYPE (parms), parms))
10482 {
10483 relayout_decl (parms);
10484 DECL_ARG_TYPE (parms) = type_passed_as (TREE_TYPE (parms));
10485 }
10486 else
10487 /* grokparms or complete_type_or_else will have already issued
10488 an error. */
10489 TREE_TYPE (parms) = error_mark_node;
10490 }
10491 }
10492
10493 /* Returns nonzero if T is a local variable. */
10494
10495 int
10496 local_variable_p (const_tree t)
10497 {
10498 if ((TREE_CODE (t) == VAR_DECL
10499 /* A VAR_DECL with a context that is a _TYPE is a static data
10500 member. */
10501 && !TYPE_P (CP_DECL_CONTEXT (t))
10502 /* Any other non-local variable must be at namespace scope. */
10503 && !DECL_NAMESPACE_SCOPE_P (t))
10504 || (TREE_CODE (t) == PARM_DECL))
10505 return 1;
10506
10507 return 0;
10508 }
10509
10510 /* Like local_variable_p, but suitable for use as a tree-walking
10511 function. */
10512
10513 static tree
10514 local_variable_p_walkfn (tree *tp, int *walk_subtrees,
10515 void *data ATTRIBUTE_UNUSED)
10516 {
10517 /* Check DECL_NAME to avoid including temporaries. We don't check
10518 DECL_ARTIFICIAL because we do want to complain about 'this'. */
10519 if (local_variable_p (*tp) && DECL_NAME (*tp))
10520 return *tp;
10521 else if (TYPE_P (*tp))
10522 *walk_subtrees = 0;
10523
10524 return NULL_TREE;
10525 }
10526
10527 /* Check that ARG, which is a default-argument expression for a
10528 parameter DECL, is valid. Returns ARG, or ERROR_MARK_NODE, if
10529 something goes wrong. DECL may also be a _TYPE node, rather than a
10530 DECL, if there is no DECL available. */
10531
10532 tree
10533 check_default_argument (tree decl, tree arg)
10534 {
10535 tree var;
10536 tree decl_type;
10537
10538 if (TREE_CODE (arg) == DEFAULT_ARG)
10539 /* We get a DEFAULT_ARG when looking at an in-class declaration
10540 with a default argument. Ignore the argument for now; we'll
10541 deal with it after the class is complete. */
10542 return arg;
10543
10544 if (TYPE_P (decl))
10545 {
10546 decl_type = decl;
10547 decl = NULL_TREE;
10548 }
10549 else
10550 decl_type = TREE_TYPE (decl);
10551
10552 if (arg == error_mark_node
10553 || decl == error_mark_node
10554 || TREE_TYPE (arg) == error_mark_node
10555 || decl_type == error_mark_node)
10556 /* Something already went wrong. There's no need to check
10557 further. */
10558 return error_mark_node;
10559
10560 /* [dcl.fct.default]
10561
10562 A default argument expression is implicitly converted to the
10563 parameter type. */
10564 if (!TREE_TYPE (arg)
10565 || !can_convert_arg (decl_type, TREE_TYPE (arg), arg, LOOKUP_NORMAL))
10566 {
10567 if (decl)
10568 error ("default argument for %q#D has type %qT",
10569 decl, TREE_TYPE (arg));
10570 else
10571 error ("default argument for parameter of type %qT has type %qT",
10572 decl_type, TREE_TYPE (arg));
10573
10574 return error_mark_node;
10575 }
10576
10577 /* [dcl.fct.default]
10578
10579 Local variables shall not be used in default argument
10580 expressions.
10581
10582 The keyword `this' shall not be used in a default argument of a
10583 member function. */
10584 var = cp_walk_tree_without_duplicates (&arg, local_variable_p_walkfn, NULL);
10585 if (var)
10586 {
10587 if (DECL_NAME (var) == this_identifier)
10588 permerror (input_location, "default argument %qE uses %qD", arg, var);
10589 else
10590 error ("default argument %qE uses local variable %qD", arg, var);
10591 return error_mark_node;
10592 }
10593
10594 /* All is well. */
10595 return arg;
10596 }
10597
10598 /* Returns a deprecated type used within TYPE, or NULL_TREE if none. */
10599
10600 static tree
10601 type_is_deprecated (tree type)
10602 {
10603 enum tree_code code;
10604 if (TREE_DEPRECATED (type))
10605 return type;
10606 if (TYPE_NAME (type)
10607 && TREE_DEPRECATED (TYPE_NAME (type)))
10608 return type;
10609
10610 /* Do warn about using typedefs to a deprecated class. */
10611 if (TAGGED_TYPE_P (type) && type != TYPE_MAIN_VARIANT (type))
10612 return type_is_deprecated (TYPE_MAIN_VARIANT (type));
10613
10614 code = TREE_CODE (type);
10615
10616 if (code == POINTER_TYPE || code == REFERENCE_TYPE
10617 || code == OFFSET_TYPE || code == FUNCTION_TYPE
10618 || code == METHOD_TYPE || code == ARRAY_TYPE)
10619 return type_is_deprecated (TREE_TYPE (type));
10620
10621 if (TYPE_PTRMEMFUNC_P (type))
10622 return type_is_deprecated
10623 (TREE_TYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (type))));
10624
10625 return NULL_TREE;
10626 }
10627
10628 /* Decode the list of parameter types for a function type.
10629 Given the list of things declared inside the parens,
10630 return a list of types.
10631
10632 If this parameter does not end with an ellipsis, we append
10633 void_list_node.
10634
10635 *PARMS is set to the chain of PARM_DECLs created. */
10636
10637 static tree
10638 grokparms (tree parmlist, tree *parms)
10639 {
10640 tree result = NULL_TREE;
10641 tree decls = NULL_TREE;
10642 tree parm;
10643 int any_error = 0;
10644
10645 for (parm = parmlist; parm != NULL_TREE; parm = TREE_CHAIN (parm))
10646 {
10647 tree type = NULL_TREE;
10648 tree init = TREE_PURPOSE (parm);
10649 tree decl = TREE_VALUE (parm);
10650 const char *errmsg;
10651
10652 if (parm == void_list_node)
10653 break;
10654
10655 if (! decl || TREE_TYPE (decl) == error_mark_node)
10656 continue;
10657
10658 type = TREE_TYPE (decl);
10659 if (VOID_TYPE_P (type))
10660 {
10661 if (same_type_p (type, void_type_node)
10662 && DECL_SELF_REFERENCE_P (type)
10663 && !DECL_NAME (decl) && !result && TREE_CHAIN (parm) == void_list_node)
10664 /* this is a parmlist of `(void)', which is ok. */
10665 break;
10666 cxx_incomplete_type_error (decl, type);
10667 /* It's not a good idea to actually create parameters of
10668 type `void'; other parts of the compiler assume that a
10669 void type terminates the parameter list. */
10670 type = error_mark_node;
10671 TREE_TYPE (decl) = error_mark_node;
10672 }
10673
10674 if (type != error_mark_node
10675 && TYPE_FOR_JAVA (type)
10676 && MAYBE_CLASS_TYPE_P (type))
10677 {
10678 error ("parameter %qD has Java class type", decl);
10679 type = error_mark_node;
10680 TREE_TYPE (decl) = error_mark_node;
10681 init = NULL_TREE;
10682 }
10683
10684 if (type != error_mark_node
10685 && (errmsg = targetm.invalid_parameter_type (type)))
10686 {
10687 error (errmsg);
10688 type = error_mark_node;
10689 TREE_TYPE (decl) = error_mark_node;
10690 }
10691
10692 if (type != error_mark_node)
10693 {
10694 if (deprecated_state != DEPRECATED_SUPPRESS)
10695 {
10696 tree deptype = type_is_deprecated (type);
10697 if (deptype)
10698 warn_deprecated_use (deptype, NULL_TREE);
10699 }
10700
10701 /* Top-level qualifiers on the parameters are
10702 ignored for function types. */
10703 type = cp_build_qualified_type (type, 0);
10704 if (TREE_CODE (type) == METHOD_TYPE)
10705 {
10706 error ("parameter %qD invalidly declared method type", decl);
10707 type = build_pointer_type (type);
10708 TREE_TYPE (decl) = type;
10709 }
10710 else if (abstract_virtuals_error (decl, type))
10711 any_error = 1; /* Seems like a good idea. */
10712 else if (POINTER_TYPE_P (type))
10713 {
10714 /* [dcl.fct]/6, parameter types cannot contain pointers
10715 (references) to arrays of unknown bound. */
10716 tree t = TREE_TYPE (type);
10717 int ptr = TYPE_PTR_P (type);
10718
10719 while (1)
10720 {
10721 if (TYPE_PTR_P (t))
10722 ptr = 1;
10723 else if (TREE_CODE (t) != ARRAY_TYPE)
10724 break;
10725 else if (!TYPE_DOMAIN (t))
10726 break;
10727 t = TREE_TYPE (t);
10728 }
10729 if (TREE_CODE (t) == ARRAY_TYPE)
10730 error (ptr
10731 ? G_("parameter %qD includes pointer to array of "
10732 "unknown bound %qT")
10733 : G_("parameter %qD includes reference to array of "
10734 "unknown bound %qT"),
10735 decl, t);
10736 }
10737
10738 if (any_error)
10739 init = NULL_TREE;
10740 else if (init && !processing_template_decl)
10741 init = check_default_argument (decl, init);
10742 }
10743
10744 DECL_CHAIN (decl) = decls;
10745 decls = decl;
10746 result = tree_cons (init, type, result);
10747 }
10748 decls = nreverse (decls);
10749 result = nreverse (result);
10750 if (parm)
10751 result = chainon (result, void_list_node);
10752 *parms = decls;
10753
10754 return result;
10755 }
10756
10757 \f
10758 /* D is a constructor or overloaded `operator='.
10759
10760 Let T be the class in which D is declared. Then, this function
10761 returns:
10762
10763 -1 if D's is an ill-formed constructor or copy assignment operator
10764 whose first parameter is of type `T'.
10765 0 if D is not a copy constructor or copy assignment
10766 operator.
10767 1 if D is a copy constructor or copy assignment operator whose
10768 first parameter is a reference to non-const qualified T.
10769 2 if D is a copy constructor or copy assignment operator whose
10770 first parameter is a reference to const qualified T.
10771
10772 This function can be used as a predicate. Positive values indicate
10773 a copy constructor and nonzero values indicate a copy assignment
10774 operator. */
10775
10776 int
10777 copy_fn_p (const_tree d)
10778 {
10779 tree args;
10780 tree arg_type;
10781 int result = 1;
10782
10783 gcc_assert (DECL_FUNCTION_MEMBER_P (d));
10784
10785 if (TREE_CODE (d) == TEMPLATE_DECL
10786 || (DECL_TEMPLATE_INFO (d)
10787 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
10788 /* Instantiations of template member functions are never copy
10789 functions. Note that member functions of templated classes are
10790 represented as template functions internally, and we must
10791 accept those as copy functions. */
10792 return 0;
10793
10794 args = FUNCTION_FIRST_USER_PARMTYPE (d);
10795 if (!args)
10796 return 0;
10797
10798 arg_type = TREE_VALUE (args);
10799 if (arg_type == error_mark_node)
10800 return 0;
10801
10802 if (TYPE_MAIN_VARIANT (arg_type) == DECL_CONTEXT (d))
10803 {
10804 /* Pass by value copy assignment operator. */
10805 result = -1;
10806 }
10807 else if (TREE_CODE (arg_type) == REFERENCE_TYPE
10808 && !TYPE_REF_IS_RVALUE (arg_type)
10809 && TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)) == DECL_CONTEXT (d))
10810 {
10811 if (CP_TYPE_CONST_P (TREE_TYPE (arg_type)))
10812 result = 2;
10813 }
10814 else
10815 return 0;
10816
10817 args = TREE_CHAIN (args);
10818
10819 if (args && args != void_list_node && !TREE_PURPOSE (args))
10820 /* There are more non-optional args. */
10821 return 0;
10822
10823 return result;
10824 }
10825
10826 /* D is a constructor or overloaded `operator='.
10827
10828 Let T be the class in which D is declared. Then, this function
10829 returns true when D is a move constructor or move assignment
10830 operator, false otherwise. */
10831
10832 bool
10833 move_fn_p (const_tree d)
10834 {
10835 tree args;
10836 tree arg_type;
10837 bool result = false;
10838
10839 gcc_assert (DECL_FUNCTION_MEMBER_P (d));
10840
10841 if (cxx_dialect == cxx98)
10842 /* There are no move constructors if we are in C++98 mode. */
10843 return false;
10844
10845 if (TREE_CODE (d) == TEMPLATE_DECL
10846 || (DECL_TEMPLATE_INFO (d)
10847 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
10848 /* Instantiations of template member functions are never copy
10849 functions. Note that member functions of templated classes are
10850 represented as template functions internally, and we must
10851 accept those as copy functions. */
10852 return 0;
10853
10854 args = FUNCTION_FIRST_USER_PARMTYPE (d);
10855 if (!args)
10856 return 0;
10857
10858 arg_type = TREE_VALUE (args);
10859 if (arg_type == error_mark_node)
10860 return 0;
10861
10862 if (TREE_CODE (arg_type) == REFERENCE_TYPE
10863 && TYPE_REF_IS_RVALUE (arg_type)
10864 && same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)),
10865 DECL_CONTEXT (d)))
10866 result = true;
10867
10868 args = TREE_CHAIN (args);
10869
10870 if (args && args != void_list_node && !TREE_PURPOSE (args))
10871 /* There are more non-optional args. */
10872 return false;
10873
10874 return result;
10875 }
10876
10877 /* Remember any special properties of member function DECL. */
10878
10879 void
10880 grok_special_member_properties (tree decl)
10881 {
10882 tree class_type;
10883
10884 if (!DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
10885 return;
10886
10887 class_type = DECL_CONTEXT (decl);
10888 if (DECL_CONSTRUCTOR_P (decl))
10889 {
10890 int ctor = copy_fn_p (decl);
10891
10892 if (!DECL_ARTIFICIAL (decl))
10893 TYPE_HAS_USER_CONSTRUCTOR (class_type) = 1;
10894
10895 if (ctor > 0)
10896 {
10897 /* [class.copy]
10898
10899 A non-template constructor for class X is a copy
10900 constructor if its first parameter is of type X&, const
10901 X&, volatile X& or const volatile X&, and either there
10902 are no other parameters or else all other parameters have
10903 default arguments. */
10904 TYPE_HAS_COPY_CTOR (class_type) = 1;
10905 if (user_provided_p (decl))
10906 TYPE_HAS_COMPLEX_COPY_CTOR (class_type) = 1;
10907 if (ctor > 1)
10908 TYPE_HAS_CONST_COPY_CTOR (class_type) = 1;
10909 }
10910 else if (sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (decl)))
10911 {
10912 TYPE_HAS_DEFAULT_CONSTRUCTOR (class_type) = 1;
10913 if (user_provided_p (decl))
10914 TYPE_HAS_COMPLEX_DFLT (class_type) = 1;
10915 }
10916 else if (move_fn_p (decl) && user_provided_p (decl))
10917 TYPE_HAS_COMPLEX_MOVE_CTOR (class_type) = 1;
10918 else if (is_list_ctor (decl))
10919 TYPE_HAS_LIST_CTOR (class_type) = 1;
10920
10921 if (DECL_DECLARED_CONSTEXPR_P (decl)
10922 && !copy_fn_p (decl) && !move_fn_p (decl))
10923 TYPE_HAS_CONSTEXPR_CTOR (class_type) = 1;
10924 }
10925 else if (DECL_OVERLOADED_OPERATOR_P (decl) == NOP_EXPR)
10926 {
10927 /* [class.copy]
10928
10929 A non-template assignment operator for class X is a copy
10930 assignment operator if its parameter is of type X, X&, const
10931 X&, volatile X& or const volatile X&. */
10932
10933 int assop = copy_fn_p (decl);
10934
10935 if (assop)
10936 {
10937 TYPE_HAS_COPY_ASSIGN (class_type) = 1;
10938 if (user_provided_p (decl))
10939 TYPE_HAS_COMPLEX_COPY_ASSIGN (class_type) = 1;
10940 if (assop != 1)
10941 TYPE_HAS_CONST_COPY_ASSIGN (class_type) = 1;
10942 }
10943 else if (move_fn_p (decl) && user_provided_p (decl))
10944 TYPE_HAS_COMPLEX_MOVE_ASSIGN (class_type) = 1;
10945 }
10946 /* Destructors are handled in check_methods. */
10947 }
10948
10949 /* Check a constructor DECL has the correct form. Complains
10950 if the class has a constructor of the form X(X). */
10951
10952 int
10953 grok_ctor_properties (const_tree ctype, const_tree decl)
10954 {
10955 int ctor_parm = copy_fn_p (decl);
10956
10957 if (ctor_parm < 0)
10958 {
10959 /* [class.copy]
10960
10961 A declaration of a constructor for a class X is ill-formed if
10962 its first parameter is of type (optionally cv-qualified) X
10963 and either there are no other parameters or else all other
10964 parameters have default arguments.
10965
10966 We *don't* complain about member template instantiations that
10967 have this form, though; they can occur as we try to decide
10968 what constructor to use during overload resolution. Since
10969 overload resolution will never prefer such a constructor to
10970 the non-template copy constructor (which is either explicitly
10971 or implicitly defined), there's no need to worry about their
10972 existence. Theoretically, they should never even be
10973 instantiated, but that's hard to forestall. */
10974 error ("invalid constructor; you probably meant %<%T (const %T&)%>",
10975 ctype, ctype);
10976 return 0;
10977 }
10978
10979 return 1;
10980 }
10981
10982 /* An operator with this code is unary, but can also be binary. */
10983
10984 static int
10985 ambi_op_p (enum tree_code code)
10986 {
10987 return (code == INDIRECT_REF
10988 || code == ADDR_EXPR
10989 || code == UNARY_PLUS_EXPR
10990 || code == NEGATE_EXPR
10991 || code == PREINCREMENT_EXPR
10992 || code == PREDECREMENT_EXPR);
10993 }
10994
10995 /* An operator with this name can only be unary. */
10996
10997 static int
10998 unary_op_p (enum tree_code code)
10999 {
11000 return (code == TRUTH_NOT_EXPR
11001 || code == BIT_NOT_EXPR
11002 || code == COMPONENT_REF
11003 || code == TYPE_EXPR);
11004 }
11005
11006 /* DECL is a declaration for an overloaded operator. If COMPLAIN is true,
11007 errors are issued for invalid declarations. */
11008
11009 bool
11010 grok_op_properties (tree decl, bool complain)
11011 {
11012 tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
11013 tree argtype;
11014 int methodp = (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE);
11015 tree name = DECL_NAME (decl);
11016 enum tree_code operator_code;
11017 int arity;
11018 bool ellipsis_p;
11019 tree class_type;
11020
11021 /* Count the number of arguments and check for ellipsis. */
11022 for (argtype = argtypes, arity = 0;
11023 argtype && argtype != void_list_node;
11024 argtype = TREE_CHAIN (argtype))
11025 ++arity;
11026 ellipsis_p = !argtype;
11027
11028 class_type = DECL_CONTEXT (decl);
11029 if (class_type && !CLASS_TYPE_P (class_type))
11030 class_type = NULL_TREE;
11031
11032 if (DECL_CONV_FN_P (decl))
11033 operator_code = TYPE_EXPR;
11034 else
11035 do
11036 {
11037 #define DEF_OPERATOR(NAME, CODE, MANGLING, ARITY, ASSN_P) \
11038 if (ansi_opname (CODE) == name) \
11039 { \
11040 operator_code = (CODE); \
11041 break; \
11042 } \
11043 else if (ansi_assopname (CODE) == name) \
11044 { \
11045 operator_code = (CODE); \
11046 DECL_ASSIGNMENT_OPERATOR_P (decl) = 1; \
11047 break; \
11048 }
11049
11050 #include "operators.def"
11051 #undef DEF_OPERATOR
11052
11053 gcc_unreachable ();
11054 }
11055 while (0);
11056 gcc_assert (operator_code != MAX_TREE_CODES);
11057 SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
11058
11059 if (class_type)
11060 switch (operator_code)
11061 {
11062 case NEW_EXPR:
11063 TYPE_HAS_NEW_OPERATOR (class_type) = 1;
11064 break;
11065
11066 case DELETE_EXPR:
11067 TYPE_GETS_DELETE (class_type) |= 1;
11068 break;
11069
11070 case VEC_NEW_EXPR:
11071 TYPE_HAS_ARRAY_NEW_OPERATOR (class_type) = 1;
11072 break;
11073
11074 case VEC_DELETE_EXPR:
11075 TYPE_GETS_DELETE (class_type) |= 2;
11076 break;
11077
11078 default:
11079 break;
11080 }
11081
11082 /* [basic.std.dynamic.allocation]/1:
11083
11084 A program is ill-formed if an allocation function is declared
11085 in a namespace scope other than global scope or declared static
11086 in global scope.
11087
11088 The same also holds true for deallocation functions. */
11089 if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR
11090 || operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
11091 {
11092 if (DECL_NAMESPACE_SCOPE_P (decl))
11093 {
11094 if (CP_DECL_CONTEXT (decl) != global_namespace)
11095 {
11096 error ("%qD may not be declared within a namespace", decl);
11097 return false;
11098 }
11099 else if (!TREE_PUBLIC (decl))
11100 {
11101 error ("%qD may not be declared as static", decl);
11102 return false;
11103 }
11104 }
11105 }
11106
11107 if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR)
11108 {
11109 TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
11110 DECL_IS_OPERATOR_NEW (decl) = 1;
11111 }
11112 else if (operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
11113 TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
11114 else
11115 {
11116 /* An operator function must either be a non-static member function
11117 or have at least one parameter of a class, a reference to a class,
11118 an enumeration, or a reference to an enumeration. 13.4.0.6 */
11119 if (! methodp || DECL_STATIC_FUNCTION_P (decl))
11120 {
11121 if (operator_code == TYPE_EXPR
11122 || operator_code == CALL_EXPR
11123 || operator_code == COMPONENT_REF
11124 || operator_code == ARRAY_REF
11125 || operator_code == NOP_EXPR)
11126 {
11127 error ("%qD must be a nonstatic member function", decl);
11128 return false;
11129 }
11130 else
11131 {
11132 tree p;
11133
11134 if (DECL_STATIC_FUNCTION_P (decl))
11135 {
11136 error ("%qD must be either a non-static member "
11137 "function or a non-member function", decl);
11138 return false;
11139 }
11140
11141 for (p = argtypes; p && p != void_list_node; p = TREE_CHAIN (p))
11142 {
11143 tree arg = non_reference (TREE_VALUE (p));
11144 if (arg == error_mark_node)
11145 return false;
11146
11147 /* MAYBE_CLASS_TYPE_P, rather than CLASS_TYPE_P, is used
11148 because these checks are performed even on
11149 template functions. */
11150 if (MAYBE_CLASS_TYPE_P (arg)
11151 || TREE_CODE (arg) == ENUMERAL_TYPE)
11152 break;
11153 }
11154
11155 if (!p || p == void_list_node)
11156 {
11157 if (complain)
11158 error ("%qD must have an argument of class or "
11159 "enumerated type", decl);
11160 return false;
11161 }
11162 }
11163 }
11164
11165 /* There are no restrictions on the arguments to an overloaded
11166 "operator ()". */
11167 if (operator_code == CALL_EXPR)
11168 return true;
11169
11170 /* Warn about conversion operators that will never be used. */
11171 if (IDENTIFIER_TYPENAME_P (name)
11172 && ! DECL_TEMPLATE_INFO (decl)
11173 && warn_conversion
11174 /* Warn only declaring the function; there is no need to
11175 warn again about out-of-class definitions. */
11176 && class_type == current_class_type)
11177 {
11178 tree t = TREE_TYPE (name);
11179 int ref = (TREE_CODE (t) == REFERENCE_TYPE);
11180
11181 if (ref)
11182 t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
11183
11184 if (TREE_CODE (t) == VOID_TYPE)
11185 warning (OPT_Wconversion,
11186 ref
11187 ? G_("conversion to a reference to void "
11188 "will never use a type conversion operator")
11189 : G_("conversion to void "
11190 "will never use a type conversion operator"));
11191 else if (class_type)
11192 {
11193 if (t == class_type)
11194 warning (OPT_Wconversion,
11195 ref
11196 ? G_("conversion to a reference to the same type "
11197 "will never use a type conversion operator")
11198 : G_("conversion to the same type "
11199 "will never use a type conversion operator"));
11200 /* Don't force t to be complete here. */
11201 else if (MAYBE_CLASS_TYPE_P (t)
11202 && COMPLETE_TYPE_P (t)
11203 && DERIVED_FROM_P (t, class_type))
11204 warning (OPT_Wconversion,
11205 ref
11206 ? G_("conversion to a reference to a base class "
11207 "will never use a type conversion operator")
11208 : G_("conversion to a base class "
11209 "will never use a type conversion operator"));
11210 }
11211
11212 }
11213
11214 if (operator_code == COND_EXPR)
11215 {
11216 /* 13.4.0.3 */
11217 error ("ISO C++ prohibits overloading operator ?:");
11218 return false;
11219 }
11220 else if (ellipsis_p)
11221 {
11222 error ("%qD must not have variable number of arguments", decl);
11223 return false;
11224 }
11225 else if (ambi_op_p (operator_code))
11226 {
11227 if (arity == 1)
11228 /* We pick the one-argument operator codes by default, so
11229 we don't have to change anything. */
11230 ;
11231 else if (arity == 2)
11232 {
11233 /* If we thought this was a unary operator, we now know
11234 it to be a binary operator. */
11235 switch (operator_code)
11236 {
11237 case INDIRECT_REF:
11238 operator_code = MULT_EXPR;
11239 break;
11240
11241 case ADDR_EXPR:
11242 operator_code = BIT_AND_EXPR;
11243 break;
11244
11245 case UNARY_PLUS_EXPR:
11246 operator_code = PLUS_EXPR;
11247 break;
11248
11249 case NEGATE_EXPR:
11250 operator_code = MINUS_EXPR;
11251 break;
11252
11253 case PREINCREMENT_EXPR:
11254 operator_code = POSTINCREMENT_EXPR;
11255 break;
11256
11257 case PREDECREMENT_EXPR:
11258 operator_code = POSTDECREMENT_EXPR;
11259 break;
11260
11261 default:
11262 gcc_unreachable ();
11263 }
11264
11265 SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
11266
11267 if ((operator_code == POSTINCREMENT_EXPR
11268 || operator_code == POSTDECREMENT_EXPR)
11269 && ! processing_template_decl
11270 && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)), integer_type_node))
11271 {
11272 if (methodp)
11273 error ("postfix %qD must take %<int%> as its argument",
11274 decl);
11275 else
11276 error ("postfix %qD must take %<int%> as its second "
11277 "argument", decl);
11278 return false;
11279 }
11280 }
11281 else
11282 {
11283 if (methodp)
11284 error ("%qD must take either zero or one argument", decl);
11285 else
11286 error ("%qD must take either one or two arguments", decl);
11287 return false;
11288 }
11289
11290 /* More Effective C++ rule 6. */
11291 if (warn_ecpp
11292 && (operator_code == POSTINCREMENT_EXPR
11293 || operator_code == POSTDECREMENT_EXPR
11294 || operator_code == PREINCREMENT_EXPR
11295 || operator_code == PREDECREMENT_EXPR))
11296 {
11297 tree arg = TREE_VALUE (argtypes);
11298 tree ret = TREE_TYPE (TREE_TYPE (decl));
11299 if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
11300 arg = TREE_TYPE (arg);
11301 arg = TYPE_MAIN_VARIANT (arg);
11302 if (operator_code == PREINCREMENT_EXPR
11303 || operator_code == PREDECREMENT_EXPR)
11304 {
11305 if (TREE_CODE (ret) != REFERENCE_TYPE
11306 || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)),
11307 arg))
11308 warning (OPT_Weffc__, "prefix %qD should return %qT", decl,
11309 build_reference_type (arg));
11310 }
11311 else
11312 {
11313 if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
11314 warning (OPT_Weffc__, "postfix %qD should return %qT", decl, arg);
11315 }
11316 }
11317 }
11318 else if (unary_op_p (operator_code))
11319 {
11320 if (arity != 1)
11321 {
11322 if (methodp)
11323 error ("%qD must take %<void%>", decl);
11324 else
11325 error ("%qD must take exactly one argument", decl);
11326 return false;
11327 }
11328 }
11329 else /* if (binary_op_p (operator_code)) */
11330 {
11331 if (arity != 2)
11332 {
11333 if (methodp)
11334 error ("%qD must take exactly one argument", decl);
11335 else
11336 error ("%qD must take exactly two arguments", decl);
11337 return false;
11338 }
11339
11340 /* More Effective C++ rule 7. */
11341 if (warn_ecpp
11342 && (operator_code == TRUTH_ANDIF_EXPR
11343 || operator_code == TRUTH_ORIF_EXPR
11344 || operator_code == COMPOUND_EXPR))
11345 warning (OPT_Weffc__, "user-defined %qD always evaluates both arguments",
11346 decl);
11347 }
11348
11349 /* Effective C++ rule 23. */
11350 if (warn_ecpp
11351 && arity == 2
11352 && !DECL_ASSIGNMENT_OPERATOR_P (decl)
11353 && (operator_code == PLUS_EXPR
11354 || operator_code == MINUS_EXPR
11355 || operator_code == TRUNC_DIV_EXPR
11356 || operator_code == MULT_EXPR
11357 || operator_code == TRUNC_MOD_EXPR)
11358 && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
11359 warning (OPT_Weffc__, "%qD should return by value", decl);
11360
11361 /* [over.oper]/8 */
11362 for (; argtypes && argtypes != void_list_node;
11363 argtypes = TREE_CHAIN (argtypes))
11364 if (TREE_PURPOSE (argtypes))
11365 {
11366 TREE_PURPOSE (argtypes) = NULL_TREE;
11367 if (operator_code == POSTINCREMENT_EXPR
11368 || operator_code == POSTDECREMENT_EXPR)
11369 {
11370 pedwarn (input_location, OPT_pedantic, "%qD cannot have default arguments",
11371 decl);
11372 }
11373 else
11374 {
11375 error ("%qD cannot have default arguments", decl);
11376 return false;
11377 }
11378 }
11379 }
11380 return true;
11381 }
11382 \f
11383 /* Return a string giving the keyword associate with CODE. */
11384
11385 static const char *
11386 tag_name (enum tag_types code)
11387 {
11388 switch (code)
11389 {
11390 case record_type:
11391 return "struct";
11392 case class_type:
11393 return "class";
11394 case union_type:
11395 return "union";
11396 case enum_type:
11397 return "enum";
11398 case typename_type:
11399 return "typename";
11400 default:
11401 gcc_unreachable ();
11402 }
11403 }
11404
11405 /* Name lookup in an elaborated-type-specifier (after the keyword
11406 indicated by TAG_CODE) has found the TYPE_DECL DECL. If the
11407 elaborated-type-specifier is invalid, issue a diagnostic and return
11408 error_mark_node; otherwise, return the *_TYPE to which it referred.
11409 If ALLOW_TEMPLATE_P is true, TYPE may be a class template. */
11410
11411 tree
11412 check_elaborated_type_specifier (enum tag_types tag_code,
11413 tree decl,
11414 bool allow_template_p)
11415 {
11416 tree type;
11417
11418 if (decl == error_mark_node)
11419 return error_mark_node;
11420
11421 /* In the case of:
11422
11423 struct S { struct S *p; };
11424
11425 name lookup will find the TYPE_DECL for the implicit "S::S"
11426 typedef. Adjust for that here. */
11427 if (DECL_SELF_REFERENCE_P (decl))
11428 decl = TYPE_NAME (TREE_TYPE (decl));
11429
11430 type = TREE_TYPE (decl);
11431
11432 /* Check TEMPLATE_TYPE_PARM first because DECL_IMPLICIT_TYPEDEF_P
11433 is false for this case as well. */
11434 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
11435 {
11436 error ("using template type parameter %qT after %qs",
11437 type, tag_name (tag_code));
11438 return error_mark_node;
11439 }
11440 /* Accept bound template template parameters. */
11441 else if (allow_template_p
11442 && TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
11443 ;
11444 /* [dcl.type.elab]
11445
11446 If the identifier resolves to a typedef-name or the
11447 simple-template-id resolves to an alias template
11448 specialization, the elaborated-type-specifier is ill-formed.
11449
11450 In other words, the only legitimate declaration to use in the
11451 elaborated type specifier is the implicit typedef created when
11452 the type is declared. */
11453 else if (!DECL_IMPLICIT_TYPEDEF_P (decl)
11454 && !DECL_SELF_REFERENCE_P (decl)
11455 && tag_code != typename_type)
11456 {
11457 if (alias_template_specialization_p (type))
11458 error ("using alias template specialization %qT after %qs",
11459 type, tag_name (tag_code));
11460 else
11461 error ("using typedef-name %qD after %qs", decl, tag_name (tag_code));
11462 inform (DECL_SOURCE_LOCATION (decl),
11463 "%qD has a previous declaration here", decl);
11464 return error_mark_node;
11465 }
11466 else if (TREE_CODE (type) != RECORD_TYPE
11467 && TREE_CODE (type) != UNION_TYPE
11468 && tag_code != enum_type
11469 && tag_code != typename_type)
11470 {
11471 error ("%qT referred to as %qs", type, tag_name (tag_code));
11472 error ("%q+T has a previous declaration here", type);
11473 return error_mark_node;
11474 }
11475 else if (TREE_CODE (type) != ENUMERAL_TYPE
11476 && tag_code == enum_type)
11477 {
11478 error ("%qT referred to as enum", type);
11479 error ("%q+T has a previous declaration here", type);
11480 return error_mark_node;
11481 }
11482 else if (!allow_template_p
11483 && TREE_CODE (type) == RECORD_TYPE
11484 && CLASSTYPE_IS_TEMPLATE (type))
11485 {
11486 /* If a class template appears as elaborated type specifier
11487 without a template header such as:
11488
11489 template <class T> class C {};
11490 void f(class C); // No template header here
11491
11492 then the required template argument is missing. */
11493 error ("template argument required for %<%s %T%>",
11494 tag_name (tag_code),
11495 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type)));
11496 return error_mark_node;
11497 }
11498
11499 return type;
11500 }
11501
11502 /* Lookup NAME in elaborate type specifier in scope according to
11503 SCOPE and issue diagnostics if necessary.
11504 Return *_TYPE node upon success, NULL_TREE when the NAME is not
11505 found, and ERROR_MARK_NODE for type error. */
11506
11507 static tree
11508 lookup_and_check_tag (enum tag_types tag_code, tree name,
11509 tag_scope scope, bool template_header_p)
11510 {
11511 tree t;
11512 tree decl;
11513 if (scope == ts_global)
11514 {
11515 /* First try ordinary name lookup, ignoring hidden class name
11516 injected via friend declaration. */
11517 decl = lookup_name_prefer_type (name, 2);
11518 /* If that fails, the name will be placed in the smallest
11519 non-class, non-function-prototype scope according to 3.3.1/5.
11520 We may already have a hidden name declared as friend in this
11521 scope. So lookup again but not ignoring hidden names.
11522 If we find one, that name will be made visible rather than
11523 creating a new tag. */
11524 if (!decl)
11525 decl = lookup_type_scope (name, ts_within_enclosing_non_class);
11526 }
11527 else
11528 decl = lookup_type_scope (name, scope);
11529
11530 if (decl && DECL_CLASS_TEMPLATE_P (decl))
11531 decl = DECL_TEMPLATE_RESULT (decl);
11532
11533 if (decl && TREE_CODE (decl) == TYPE_DECL)
11534 {
11535 /* Look for invalid nested type:
11536 class C {
11537 class C {};
11538 }; */
11539 if (scope == ts_current && DECL_SELF_REFERENCE_P (decl))
11540 {
11541 error ("%qD has the same name as the class in which it is "
11542 "declared",
11543 decl);
11544 return error_mark_node;
11545 }
11546
11547 /* Two cases we need to consider when deciding if a class
11548 template is allowed as an elaborated type specifier:
11549 1. It is a self reference to its own class.
11550 2. It comes with a template header.
11551
11552 For example:
11553
11554 template <class T> class C {
11555 class C *c1; // DECL_SELF_REFERENCE_P is true
11556 class D;
11557 };
11558 template <class U> class C; // template_header_p is true
11559 template <class T> class C<T>::D {
11560 class C *c2; // DECL_SELF_REFERENCE_P is true
11561 }; */
11562
11563 t = check_elaborated_type_specifier (tag_code,
11564 decl,
11565 template_header_p
11566 | DECL_SELF_REFERENCE_P (decl));
11567 return t;
11568 }
11569 else if (decl && TREE_CODE (decl) == TREE_LIST)
11570 {
11571 error ("reference to %qD is ambiguous", name);
11572 print_candidates (decl);
11573 return error_mark_node;
11574 }
11575 else
11576 return NULL_TREE;
11577 }
11578
11579 /* Get the struct, enum or union (TAG_CODE says which) with tag NAME.
11580 Define the tag as a forward-reference if it is not defined.
11581
11582 If a declaration is given, process it here, and report an error if
11583 multiple declarations are not identical.
11584
11585 SCOPE is TS_CURRENT when this is also a definition. Only look in
11586 the current frame for the name (since C++ allows new names in any
11587 scope.) It is TS_WITHIN_ENCLOSING_NON_CLASS if this is a friend
11588 declaration. Only look beginning from the current scope outward up
11589 till the nearest non-class scope. Otherwise it is TS_GLOBAL.
11590
11591 TEMPLATE_HEADER_P is true when this declaration is preceded by
11592 a set of template parameters. */
11593
11594 static tree
11595 xref_tag_1 (enum tag_types tag_code, tree name,
11596 tag_scope scope, bool template_header_p)
11597 {
11598 enum tree_code code;
11599 tree t;
11600 tree context = NULL_TREE;
11601
11602 gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
11603
11604 switch (tag_code)
11605 {
11606 case record_type:
11607 case class_type:
11608 code = RECORD_TYPE;
11609 break;
11610 case union_type:
11611 code = UNION_TYPE;
11612 break;
11613 case enum_type:
11614 code = ENUMERAL_TYPE;
11615 break;
11616 default:
11617 gcc_unreachable ();
11618 }
11619
11620 /* In case of anonymous name, xref_tag is only called to
11621 make type node and push name. Name lookup is not required. */
11622 if (ANON_AGGRNAME_P (name))
11623 t = NULL_TREE;
11624 else
11625 t = lookup_and_check_tag (tag_code, name,
11626 scope, template_header_p);
11627
11628 if (t == error_mark_node)
11629 return error_mark_node;
11630
11631 if (scope != ts_current && t && current_class_type
11632 && template_class_depth (current_class_type)
11633 && template_header_p)
11634 {
11635 /* Since SCOPE is not TS_CURRENT, we are not looking at a
11636 definition of this tag. Since, in addition, we are currently
11637 processing a (member) template declaration of a template
11638 class, we must be very careful; consider:
11639
11640 template <class X>
11641 struct S1
11642
11643 template <class U>
11644 struct S2
11645 { template <class V>
11646 friend struct S1; };
11647
11648 Here, the S2::S1 declaration should not be confused with the
11649 outer declaration. In particular, the inner version should
11650 have a template parameter of level 2, not level 1. This
11651 would be particularly important if the member declaration
11652 were instead:
11653
11654 template <class V = U> friend struct S1;
11655
11656 say, when we should tsubst into `U' when instantiating
11657 S2. On the other hand, when presented with:
11658
11659 template <class T>
11660 struct S1 {
11661 template <class U>
11662 struct S2 {};
11663 template <class U>
11664 friend struct S2;
11665 };
11666
11667 we must find the inner binding eventually. We
11668 accomplish this by making sure that the new type we
11669 create to represent this declaration has the right
11670 TYPE_CONTEXT. */
11671 context = TYPE_CONTEXT (t);
11672 t = NULL_TREE;
11673 }
11674
11675 if (! t)
11676 {
11677 /* If no such tag is yet defined, create a forward-reference node
11678 and record it as the "definition".
11679 When a real declaration of this type is found,
11680 the forward-reference will be altered into a real type. */
11681 if (code == ENUMERAL_TYPE)
11682 {
11683 error ("use of enum %q#D without previous declaration", name);
11684 return error_mark_node;
11685 }
11686 else
11687 {
11688 t = make_class_type (code);
11689 TYPE_CONTEXT (t) = context;
11690 t = pushtag (name, t, scope);
11691 }
11692 }
11693 else
11694 {
11695 if (template_header_p && MAYBE_CLASS_TYPE_P (t))
11696 {
11697 if (!redeclare_class_template (t, current_template_parms))
11698 return error_mark_node;
11699 }
11700 else if (!processing_template_decl
11701 && CLASS_TYPE_P (t)
11702 && CLASSTYPE_IS_TEMPLATE (t))
11703 {
11704 error ("redeclaration of %qT as a non-template", t);
11705 error ("previous declaration %q+D", t);
11706 return error_mark_node;
11707 }
11708
11709 /* Make injected friend class visible. */
11710 if (scope != ts_within_enclosing_non_class
11711 && hidden_name_p (TYPE_NAME (t)))
11712 {
11713 DECL_ANTICIPATED (TYPE_NAME (t)) = 0;
11714 DECL_FRIEND_P (TYPE_NAME (t)) = 0;
11715
11716 if (TYPE_TEMPLATE_INFO (t))
11717 {
11718 DECL_ANTICIPATED (TYPE_TI_TEMPLATE (t)) = 0;
11719 DECL_FRIEND_P (TYPE_TI_TEMPLATE (t)) = 0;
11720 }
11721 }
11722 }
11723
11724 return t;
11725 }
11726
11727 /* Wrapper for xref_tag_1. */
11728
11729 tree
11730 xref_tag (enum tag_types tag_code, tree name,
11731 tag_scope scope, bool template_header_p)
11732 {
11733 tree ret;
11734 bool subtime;
11735 subtime = timevar_cond_start (TV_NAME_LOOKUP);
11736 ret = xref_tag_1 (tag_code, name, scope, template_header_p);
11737 timevar_cond_stop (TV_NAME_LOOKUP, subtime);
11738 return ret;
11739 }
11740
11741
11742 tree
11743 xref_tag_from_type (tree old, tree id, tag_scope scope)
11744 {
11745 enum tag_types tag_kind;
11746
11747 if (TREE_CODE (old) == RECORD_TYPE)
11748 tag_kind = (CLASSTYPE_DECLARED_CLASS (old) ? class_type : record_type);
11749 else
11750 tag_kind = union_type;
11751
11752 if (id == NULL_TREE)
11753 id = TYPE_IDENTIFIER (old);
11754
11755 return xref_tag (tag_kind, id, scope, false);
11756 }
11757
11758 /* Create the binfo hierarchy for REF with (possibly NULL) base list
11759 BASE_LIST. For each element on BASE_LIST the TREE_PURPOSE is an
11760 access_* node, and the TREE_VALUE is the type of the base-class.
11761 Non-NULL TREE_TYPE indicates virtual inheritance.
11762
11763 Returns true if the binfo hierarchy was successfully created,
11764 false if an error was detected. */
11765
11766 bool
11767 xref_basetypes (tree ref, tree base_list)
11768 {
11769 tree *basep;
11770 tree binfo, base_binfo;
11771 unsigned max_vbases = 0; /* Maximum direct & indirect virtual bases. */
11772 unsigned max_bases = 0; /* Maximum direct bases. */
11773 int i;
11774 tree default_access;
11775 tree igo_prev; /* Track Inheritance Graph Order. */
11776
11777 if (ref == error_mark_node)
11778 return false;
11779
11780 /* The base of a derived class is private by default, all others are
11781 public. */
11782 default_access = (TREE_CODE (ref) == RECORD_TYPE
11783 && CLASSTYPE_DECLARED_CLASS (ref)
11784 ? access_private_node : access_public_node);
11785
11786 /* First, make sure that any templates in base-classes are
11787 instantiated. This ensures that if we call ourselves recursively
11788 we do not get confused about which classes are marked and which
11789 are not. */
11790 basep = &base_list;
11791 while (*basep)
11792 {
11793 tree basetype = TREE_VALUE (*basep);
11794
11795 if (!(processing_template_decl && uses_template_parms (basetype))
11796 && !complete_type_or_else (basetype, NULL))
11797 /* An incomplete type. Remove it from the list. */
11798 *basep = TREE_CHAIN (*basep);
11799 else
11800 {
11801 max_bases++;
11802 if (TREE_TYPE (*basep))
11803 max_vbases++;
11804 if (CLASS_TYPE_P (basetype))
11805 max_vbases += VEC_length (tree, CLASSTYPE_VBASECLASSES (basetype));
11806 basep = &TREE_CHAIN (*basep);
11807 }
11808 }
11809
11810 TYPE_MARKED_P (ref) = 1;
11811
11812 /* The binfo slot should be empty, unless this is an (ill-formed)
11813 redefinition. */
11814 if (TYPE_BINFO (ref) && !TYPE_SIZE (ref))
11815 {
11816 error ("redefinition of %q#T", ref);
11817 return false;
11818 }
11819
11820 gcc_assert (TYPE_MAIN_VARIANT (ref) == ref);
11821
11822 binfo = make_tree_binfo (max_bases);
11823
11824 TYPE_BINFO (ref) = binfo;
11825 BINFO_OFFSET (binfo) = size_zero_node;
11826 BINFO_TYPE (binfo) = ref;
11827
11828 /* Apply base-class info set up to the variants of this type. */
11829 fixup_type_variants (ref);
11830
11831 if (max_bases)
11832 {
11833 BINFO_BASE_ACCESSES (binfo) = VEC_alloc (tree, gc, max_bases);
11834 /* An aggregate cannot have baseclasses. */
11835 CLASSTYPE_NON_AGGREGATE (ref) = 1;
11836
11837 if (TREE_CODE (ref) == UNION_TYPE)
11838 {
11839 error ("derived union %qT invalid", ref);
11840 return false;
11841 }
11842 }
11843
11844 if (max_bases > 1)
11845 {
11846 if (TYPE_FOR_JAVA (ref))
11847 {
11848 error ("Java class %qT cannot have multiple bases", ref);
11849 return false;
11850 }
11851 }
11852
11853 if (max_vbases)
11854 {
11855 CLASSTYPE_VBASECLASSES (ref) = VEC_alloc (tree, gc, max_vbases);
11856
11857 if (TYPE_FOR_JAVA (ref))
11858 {
11859 error ("Java class %qT cannot have virtual bases", ref);
11860 return false;
11861 }
11862 }
11863
11864 for (igo_prev = binfo; base_list; base_list = TREE_CHAIN (base_list))
11865 {
11866 tree access = TREE_PURPOSE (base_list);
11867 int via_virtual = TREE_TYPE (base_list) != NULL_TREE;
11868 tree basetype = TREE_VALUE (base_list);
11869
11870 if (access == access_default_node)
11871 access = default_access;
11872
11873 if (PACK_EXPANSION_P (basetype))
11874 basetype = PACK_EXPANSION_PATTERN (basetype);
11875 if (TREE_CODE (basetype) == TYPE_DECL)
11876 basetype = TREE_TYPE (basetype);
11877 if (!MAYBE_CLASS_TYPE_P (basetype) || TREE_CODE (basetype) == UNION_TYPE)
11878 {
11879 error ("base type %qT fails to be a struct or class type",
11880 basetype);
11881 return false;
11882 }
11883
11884 if (TYPE_FOR_JAVA (basetype) && (current_lang_depth () == 0))
11885 TYPE_FOR_JAVA (ref) = 1;
11886
11887 base_binfo = NULL_TREE;
11888 if (CLASS_TYPE_P (basetype) && !dependent_scope_p (basetype))
11889 {
11890 base_binfo = TYPE_BINFO (basetype);
11891 /* The original basetype could have been a typedef'd type. */
11892 basetype = BINFO_TYPE (base_binfo);
11893
11894 /* Inherit flags from the base. */
11895 TYPE_HAS_NEW_OPERATOR (ref)
11896 |= TYPE_HAS_NEW_OPERATOR (basetype);
11897 TYPE_HAS_ARRAY_NEW_OPERATOR (ref)
11898 |= TYPE_HAS_ARRAY_NEW_OPERATOR (basetype);
11899 TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
11900 TYPE_HAS_CONVERSION (ref) |= TYPE_HAS_CONVERSION (basetype);
11901 CLASSTYPE_DIAMOND_SHAPED_P (ref)
11902 |= CLASSTYPE_DIAMOND_SHAPED_P (basetype);
11903 CLASSTYPE_REPEATED_BASE_P (ref)
11904 |= CLASSTYPE_REPEATED_BASE_P (basetype);
11905 }
11906
11907 /* We must do this test after we've seen through a typedef
11908 type. */
11909 if (TYPE_MARKED_P (basetype))
11910 {
11911 if (basetype == ref)
11912 error ("recursive type %qT undefined", basetype);
11913 else
11914 error ("duplicate base type %qT invalid", basetype);
11915 return false;
11916 }
11917
11918 if (PACK_EXPANSION_P (TREE_VALUE (base_list)))
11919 /* Regenerate the pack expansion for the bases. */
11920 basetype = make_pack_expansion (basetype);
11921
11922 TYPE_MARKED_P (basetype) = 1;
11923
11924 base_binfo = copy_binfo (base_binfo, basetype, ref,
11925 &igo_prev, via_virtual);
11926 if (!BINFO_INHERITANCE_CHAIN (base_binfo))
11927 BINFO_INHERITANCE_CHAIN (base_binfo) = binfo;
11928
11929 BINFO_BASE_APPEND (binfo, base_binfo);
11930 BINFO_BASE_ACCESS_APPEND (binfo, access);
11931 }
11932
11933 if (VEC_length (tree, CLASSTYPE_VBASECLASSES (ref)) < max_vbases)
11934 /* If we didn't get max_vbases vbases, we must have shared at
11935 least one of them, and are therefore diamond shaped. */
11936 CLASSTYPE_DIAMOND_SHAPED_P (ref) = 1;
11937
11938 /* Unmark all the types. */
11939 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
11940 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
11941 TYPE_MARKED_P (ref) = 0;
11942
11943 /* Now see if we have a repeated base type. */
11944 if (!CLASSTYPE_REPEATED_BASE_P (ref))
11945 {
11946 for (base_binfo = binfo; base_binfo;
11947 base_binfo = TREE_CHAIN (base_binfo))
11948 {
11949 if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
11950 {
11951 CLASSTYPE_REPEATED_BASE_P (ref) = 1;
11952 break;
11953 }
11954 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 1;
11955 }
11956 for (base_binfo = binfo; base_binfo;
11957 base_binfo = TREE_CHAIN (base_binfo))
11958 if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
11959 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
11960 else
11961 break;
11962 }
11963
11964 return true;
11965 }
11966
11967 \f
11968 /* Copies the enum-related properties from type SRC to type DST.
11969 Used with the underlying type of an enum and the enum itself. */
11970 static void
11971 copy_type_enum (tree dst, tree src)
11972 {
11973 tree t;
11974 for (t = dst; t; t = TYPE_NEXT_VARIANT (t))
11975 {
11976 TYPE_MIN_VALUE (t) = TYPE_MIN_VALUE (src);
11977 TYPE_MAX_VALUE (t) = TYPE_MAX_VALUE (src);
11978 TYPE_SIZE (t) = TYPE_SIZE (src);
11979 TYPE_SIZE_UNIT (t) = TYPE_SIZE_UNIT (src);
11980 SET_TYPE_MODE (dst, TYPE_MODE (src));
11981 TYPE_PRECISION (t) = TYPE_PRECISION (src);
11982 TYPE_ALIGN (t) = TYPE_ALIGN (src);
11983 TYPE_USER_ALIGN (t) = TYPE_USER_ALIGN (src);
11984 TYPE_UNSIGNED (t) = TYPE_UNSIGNED (src);
11985 }
11986 }
11987
11988 /* Begin compiling the definition of an enumeration type.
11989 NAME is its name,
11990
11991 if ENUMTYPE is not NULL_TREE then the type has alredy been found.
11992
11993 UNDERLYING_TYPE is the type that will be used as the storage for
11994 the enumeration type. This should be NULL_TREE if no storage type
11995 was specified.
11996
11997 SCOPED_ENUM_P is true if this is a scoped enumeration type.
11998
11999 if IS_NEW is not NULL, gets TRUE iff a new type is created.
12000
12001 Returns the type object, as yet incomplete.
12002 Also records info about it so that build_enumerator
12003 may be used to declare the individual values as they are read. */
12004
12005 tree
12006 start_enum (tree name, tree enumtype, tree underlying_type,
12007 bool scoped_enum_p, bool *is_new)
12008 {
12009 tree prevtype = NULL_TREE;
12010 gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
12011
12012 if (is_new)
12013 *is_new = false;
12014 /* [C++0x dcl.enum]p5:
12015
12016 If not explicitly specified, the underlying type of a scoped
12017 enumeration type is int. */
12018 if (!underlying_type && scoped_enum_p)
12019 underlying_type = integer_type_node;
12020
12021 if (underlying_type)
12022 underlying_type = cv_unqualified (underlying_type);
12023
12024 /* If this is the real definition for a previous forward reference,
12025 fill in the contents in the same object that used to be the
12026 forward reference. */
12027 if (!enumtype)
12028 enumtype = lookup_and_check_tag (enum_type, name,
12029 /*tag_scope=*/ts_current,
12030 /*template_header_p=*/false);
12031
12032 /* In case of a template_decl, the only check that should be deferred
12033 to instantiation time is the comparison of underlying types. */
12034 if (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE)
12035 {
12036 if (scoped_enum_p != SCOPED_ENUM_P (enumtype))
12037 {
12038 error_at (input_location, "scoped/unscoped mismatch "
12039 "in enum %q#T", enumtype);
12040 error_at (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
12041 "previous definition here");
12042 enumtype = error_mark_node;
12043 }
12044 else if (ENUM_FIXED_UNDERLYING_TYPE_P (enumtype) != !! underlying_type)
12045 {
12046 error_at (input_location, "underlying type mismatch "
12047 "in enum %q#T", enumtype);
12048 error_at (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
12049 "previous definition here");
12050 enumtype = error_mark_node;
12051 }
12052 else if (underlying_type && ENUM_UNDERLYING_TYPE (enumtype)
12053 && !dependent_type_p (underlying_type)
12054 && !dependent_type_p (ENUM_UNDERLYING_TYPE (enumtype))
12055 && !same_type_p (underlying_type,
12056 ENUM_UNDERLYING_TYPE (enumtype)))
12057 {
12058 error_at (input_location, "different underlying type "
12059 "in enum %q#T", enumtype);
12060 error_at (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
12061 "previous definition here");
12062 underlying_type = NULL_TREE;
12063 }
12064 }
12065
12066 if (!enumtype || TREE_CODE (enumtype) != ENUMERAL_TYPE
12067 || processing_template_decl)
12068 {
12069 /* In case of error, make a dummy enum to allow parsing to
12070 continue. */
12071 if (enumtype == error_mark_node)
12072 {
12073 name = make_anon_name ();
12074 enumtype = NULL_TREE;
12075 }
12076
12077 /* enumtype may be an ENUMERAL_TYPE if this is a redefinition
12078 of an opaque enum, or an opaque enum of an already defined
12079 enumeration (C++0x only).
12080 In any other case, it'll be NULL_TREE. */
12081 if (!enumtype)
12082 {
12083 if (is_new)
12084 *is_new = true;
12085 }
12086 prevtype = enumtype;
12087
12088 /* Do not push the decl more than once, unless we need to
12089 compare underlying types at instantiation time */
12090 if (!enumtype
12091 || TREE_CODE (enumtype) != ENUMERAL_TYPE
12092 || (underlying_type
12093 && dependent_type_p (underlying_type))
12094 || (ENUM_UNDERLYING_TYPE (enumtype)
12095 && dependent_type_p (ENUM_UNDERLYING_TYPE (enumtype))))
12096 {
12097 enumtype = cxx_make_type (ENUMERAL_TYPE);
12098 enumtype = pushtag (name, enumtype, /*tag_scope=*/ts_current);
12099 }
12100 else
12101 enumtype = xref_tag (enum_type, name, /*tag_scope=*/ts_current,
12102 false);
12103
12104 if (enumtype == error_mark_node)
12105 return error_mark_node;
12106
12107 /* The enum is considered opaque until the opening '{' of the
12108 enumerator list. */
12109 SET_OPAQUE_ENUM_P (enumtype, true);
12110 ENUM_FIXED_UNDERLYING_TYPE_P (enumtype) = !! underlying_type;
12111 }
12112
12113 SET_SCOPED_ENUM_P (enumtype, scoped_enum_p);
12114
12115 if (underlying_type)
12116 {
12117 if (CP_INTEGRAL_TYPE_P (underlying_type))
12118 {
12119 copy_type_enum (enumtype, underlying_type);
12120 ENUM_UNDERLYING_TYPE (enumtype) = underlying_type;
12121 }
12122 else if (dependent_type_p (underlying_type))
12123 ENUM_UNDERLYING_TYPE (enumtype) = underlying_type;
12124 else
12125 error ("underlying type %<%T%> of %<%T%> must be an integral type",
12126 underlying_type, enumtype);
12127 }
12128
12129 /* If into a template class, the returned enum is always the first
12130 declaration (opaque or not) seen. This way all the references to
12131 this type will be to the same declaration. The following ones are used
12132 only to check for definition errors. */
12133 if (prevtype && processing_template_decl)
12134 return prevtype;
12135 else
12136 return enumtype;
12137 }
12138
12139 /* After processing and defining all the values of an enumeration type,
12140 install their decls in the enumeration type.
12141 ENUMTYPE is the type object. */
12142
12143 void
12144 finish_enum_value_list (tree enumtype)
12145 {
12146 tree values;
12147 tree underlying_type;
12148 tree decl;
12149 tree value;
12150 tree minnode, maxnode;
12151 tree t;
12152
12153 bool fixed_underlying_type_p
12154 = ENUM_UNDERLYING_TYPE (enumtype) != NULL_TREE;
12155
12156 /* We built up the VALUES in reverse order. */
12157 TYPE_VALUES (enumtype) = nreverse (TYPE_VALUES (enumtype));
12158
12159 /* For an enum defined in a template, just set the type of the values;
12160 all further processing is postponed until the template is
12161 instantiated. We need to set the type so that tsubst of a CONST_DECL
12162 works. */
12163 if (processing_template_decl)
12164 {
12165 for (values = TYPE_VALUES (enumtype);
12166 values;
12167 values = TREE_CHAIN (values))
12168 TREE_TYPE (TREE_VALUE (values)) = enumtype;
12169 return;
12170 }
12171
12172 /* Determine the minimum and maximum values of the enumerators. */
12173 if (TYPE_VALUES (enumtype))
12174 {
12175 minnode = maxnode = NULL_TREE;
12176
12177 for (values = TYPE_VALUES (enumtype);
12178 values;
12179 values = TREE_CHAIN (values))
12180 {
12181 decl = TREE_VALUE (values);
12182
12183 /* [dcl.enum]: Following the closing brace of an enum-specifier,
12184 each enumerator has the type of its enumeration. Prior to the
12185 closing brace, the type of each enumerator is the type of its
12186 initializing value. */
12187 TREE_TYPE (decl) = enumtype;
12188
12189 /* Update the minimum and maximum values, if appropriate. */
12190 value = DECL_INITIAL (decl);
12191 if (value == error_mark_node)
12192 value = integer_zero_node;
12193 /* Figure out what the minimum and maximum values of the
12194 enumerators are. */
12195 if (!minnode)
12196 minnode = maxnode = value;
12197 else if (tree_int_cst_lt (maxnode, value))
12198 maxnode = value;
12199 else if (tree_int_cst_lt (value, minnode))
12200 minnode = value;
12201 }
12202 }
12203 else
12204 /* [dcl.enum]
12205
12206 If the enumerator-list is empty, the underlying type is as if
12207 the enumeration had a single enumerator with value 0. */
12208 minnode = maxnode = integer_zero_node;
12209
12210 if (!fixed_underlying_type_p)
12211 {
12212 /* Compute the number of bits require to represent all values of the
12213 enumeration. We must do this before the type of MINNODE and
12214 MAXNODE are transformed, since tree_int_cst_min_precision relies
12215 on the TREE_TYPE of the value it is passed. */
12216 bool unsignedp = tree_int_cst_sgn (minnode) >= 0;
12217 int lowprec = tree_int_cst_min_precision (minnode, unsignedp);
12218 int highprec = tree_int_cst_min_precision (maxnode, unsignedp);
12219 int precision = MAX (lowprec, highprec);
12220 unsigned int itk;
12221 bool use_short_enum;
12222
12223 /* Determine the underlying type of the enumeration.
12224
12225 [dcl.enum]
12226
12227 The underlying type of an enumeration is an integral type that
12228 can represent all the enumerator values defined in the
12229 enumeration. It is implementation-defined which integral type is
12230 used as the underlying type for an enumeration except that the
12231 underlying type shall not be larger than int unless the value of
12232 an enumerator cannot fit in an int or unsigned int.
12233
12234 We use "int" or an "unsigned int" as the underlying type, even if
12235 a smaller integral type would work, unless the user has
12236 explicitly requested that we use the smallest possible type. The
12237 user can request that for all enumerations with a command line
12238 flag, or for just one enumeration with an attribute. */
12239
12240 use_short_enum = flag_short_enums
12241 || lookup_attribute ("packed", TYPE_ATTRIBUTES (enumtype));
12242
12243 for (itk = (use_short_enum ? itk_char : itk_int);
12244 itk != itk_none;
12245 itk++)
12246 {
12247 underlying_type = integer_types[itk];
12248 if (underlying_type != NULL_TREE
12249 && TYPE_PRECISION (underlying_type) >= precision
12250 && TYPE_UNSIGNED (underlying_type) == unsignedp)
12251 break;
12252 }
12253 if (itk == itk_none)
12254 {
12255 /* DR 377
12256
12257 IF no integral type can represent all the enumerator values, the
12258 enumeration is ill-formed. */
12259 error ("no integral type can represent all of the enumerator values "
12260 "for %qT", enumtype);
12261 precision = TYPE_PRECISION (long_long_integer_type_node);
12262 underlying_type = integer_types[itk_unsigned_long_long];
12263 }
12264
12265 /* [dcl.enum]
12266
12267 The value of sizeof() applied to an enumeration type, an object
12268 of an enumeration type, or an enumerator, is the value of sizeof()
12269 applied to the underlying type. */
12270 copy_type_enum (enumtype, underlying_type);
12271
12272 /* Compute the minimum and maximum values for the type.
12273
12274 [dcl.enum]
12275
12276 For an enumeration where emin is the smallest enumerator and emax
12277 is the largest, the values of the enumeration are the values of the
12278 underlying type in the range bmin to bmax, where bmin and bmax are,
12279 respectively, the smallest and largest values of the smallest bit-
12280 field that can store emin and emax. */
12281
12282 /* The middle-end currently assumes that types with TYPE_PRECISION
12283 narrower than their underlying type are suitably zero or sign
12284 extended to fill their mode. Similarly, it assumes that the front
12285 end assures that a value of a particular type must be within
12286 TYPE_MIN_VALUE and TYPE_MAX_VALUE.
12287
12288 We used to set these fields based on bmin and bmax, but that led
12289 to invalid assumptions like optimizing away bounds checking. So
12290 now we just set the TYPE_PRECISION, TYPE_MIN_VALUE, and
12291 TYPE_MAX_VALUE to the values for the mode above and only restrict
12292 the ENUM_UNDERLYING_TYPE for the benefit of diagnostics. */
12293 ENUM_UNDERLYING_TYPE (enumtype)
12294 = build_distinct_type_copy (underlying_type);
12295 TYPE_PRECISION (ENUM_UNDERLYING_TYPE (enumtype)) = precision;
12296 set_min_and_max_values_for_integral_type
12297 (ENUM_UNDERLYING_TYPE (enumtype), precision, unsignedp);
12298
12299 /* If -fstrict-enums, still constrain TYPE_MIN/MAX_VALUE. */
12300 if (flag_strict_enums)
12301 set_min_and_max_values_for_integral_type (enumtype, precision,
12302 unsignedp);
12303 }
12304 else
12305 underlying_type = ENUM_UNDERLYING_TYPE (enumtype);
12306
12307 /* Convert each of the enumerators to the type of the underlying
12308 type of the enumeration. */
12309 for (values = TYPE_VALUES (enumtype); values; values = TREE_CHAIN (values))
12310 {
12311 location_t saved_location;
12312
12313 decl = TREE_VALUE (values);
12314 saved_location = input_location;
12315 input_location = DECL_SOURCE_LOCATION (decl);
12316 if (fixed_underlying_type_p)
12317 /* If the enumeration type has a fixed underlying type, we
12318 already checked all of the enumerator values. */
12319 value = DECL_INITIAL (decl);
12320 else
12321 value = perform_implicit_conversion (underlying_type,
12322 DECL_INITIAL (decl),
12323 tf_warning_or_error);
12324 input_location = saved_location;
12325
12326 /* Do not clobber shared ints. */
12327 value = copy_node (value);
12328
12329 TREE_TYPE (value) = enumtype;
12330 DECL_INITIAL (decl) = value;
12331 }
12332
12333 /* Fix up all variant types of this enum type. */
12334 for (t = TYPE_MAIN_VARIANT (enumtype); t; t = TYPE_NEXT_VARIANT (t))
12335 TYPE_VALUES (t) = TYPE_VALUES (enumtype);
12336
12337 /* Finish debugging output for this type. */
12338 rest_of_type_compilation (enumtype, namespace_bindings_p ());
12339 }
12340
12341 /* Finishes the enum type. This is called only the first time an
12342 enumeration is seen, be it opaque or odinary.
12343 ENUMTYPE is the type object. */
12344
12345 void
12346 finish_enum (tree enumtype)
12347 {
12348 if (processing_template_decl)
12349 {
12350 if (at_function_scope_p ())
12351 add_stmt (build_min (TAG_DEFN, enumtype));
12352 return;
12353 }
12354
12355 /* If this is a forward declaration, there should not be any variants,
12356 though we can get a variant in the middle of an enum-specifier with
12357 wacky code like 'enum E { e = sizeof(const E*) };' */
12358 gcc_assert (enumtype == TYPE_MAIN_VARIANT (enumtype)
12359 && (TYPE_VALUES (enumtype)
12360 || !TYPE_NEXT_VARIANT (enumtype)));
12361 }
12362
12363 /* Build and install a CONST_DECL for an enumeration constant of the
12364 enumeration type ENUMTYPE whose NAME and VALUE (if any) are provided.
12365 LOC is the location of NAME.
12366 Assignment of sequential values by default is handled here. */
12367
12368 void
12369 build_enumerator (tree name, tree value, tree enumtype, location_t loc)
12370 {
12371 tree decl;
12372 tree context;
12373 tree type;
12374
12375 /* If the VALUE was erroneous, pretend it wasn't there; that will
12376 result in the enum being assigned the next value in sequence. */
12377 if (value == error_mark_node)
12378 value = NULL_TREE;
12379
12380 /* Remove no-op casts from the value. */
12381 if (value)
12382 STRIP_TYPE_NOPS (value);
12383
12384 if (! processing_template_decl)
12385 {
12386 /* Validate and default VALUE. */
12387 if (value != NULL_TREE)
12388 {
12389 value = cxx_constant_value (value);
12390
12391 if (TREE_CODE (value) != INTEGER_CST
12392 || ! INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (value)))
12393 {
12394 error ("enumerator value for %qD is not an integer constant",
12395 name);
12396 value = NULL_TREE;
12397 }
12398 }
12399
12400 /* Default based on previous value. */
12401 if (value == NULL_TREE)
12402 {
12403 if (TYPE_VALUES (enumtype))
12404 {
12405 HOST_WIDE_INT hi;
12406 unsigned HOST_WIDE_INT lo;
12407 tree prev_value;
12408 bool overflowed;
12409
12410 /* C++03 7.2/4: If no initializer is specified for the first
12411 enumerator, the type is an unspecified integral
12412 type. Otherwise the type is the same as the type of the
12413 initializing value of the preceding enumerator unless the
12414 incremented value is not representable in that type, in
12415 which case the type is an unspecified integral type
12416 sufficient to contain the incremented value. */
12417 prev_value = DECL_INITIAL (TREE_VALUE (TYPE_VALUES (enumtype)));
12418 if (error_operand_p (prev_value))
12419 value = error_mark_node;
12420 else
12421 {
12422 overflowed = add_double (TREE_INT_CST_LOW (prev_value),
12423 TREE_INT_CST_HIGH (prev_value),
12424 1, 0, &lo, &hi);
12425 if (!overflowed)
12426 {
12427 double_int di;
12428 tree type = TREE_TYPE (prev_value);
12429 bool pos = (TYPE_UNSIGNED (type) || hi >= 0);
12430 di.low = lo; di.high = hi;
12431 if (!double_int_fits_to_tree_p (type, di))
12432 {
12433 unsigned int itk;
12434 for (itk = itk_int; itk != itk_none; itk++)
12435 {
12436 type = integer_types[itk];
12437 if (type != NULL_TREE
12438 && (pos || !TYPE_UNSIGNED (type))
12439 && double_int_fits_to_tree_p (type, di))
12440 break;
12441 }
12442 if (type && cxx_dialect < cxx0x
12443 && itk > itk_unsigned_long)
12444 pedwarn (input_location, OPT_Wlong_long, pos ? "\
12445 incremented enumerator value is too large for %<unsigned long%>" : "\
12446 incremented enumerator value is too large for %<long%>");
12447 }
12448 if (type == NULL_TREE)
12449 overflowed = true;
12450 else
12451 value = double_int_to_tree (type, di);
12452 }
12453
12454 if (overflowed)
12455 {
12456 error ("overflow in enumeration values at %qD", name);
12457 value = error_mark_node;
12458 }
12459 }
12460 }
12461 else
12462 value = integer_zero_node;
12463 }
12464
12465 /* Remove no-op casts from the value. */
12466 STRIP_TYPE_NOPS (value);
12467
12468 /* If the underlying type of the enum is fixed, check whether
12469 the enumerator values fits in the underlying type. If it
12470 does not fit, the program is ill-formed [C++0x dcl.enum]. */
12471 if (ENUM_UNDERLYING_TYPE (enumtype)
12472 && value
12473 && TREE_CODE (value) == INTEGER_CST
12474 && !int_fits_type_p (value, ENUM_UNDERLYING_TYPE (enumtype)))
12475 {
12476 error ("enumerator value %E is too large for underlying type %<%T%>",
12477 value, ENUM_UNDERLYING_TYPE (enumtype));
12478
12479 /* Silently convert the value so that we can continue. */
12480 value = perform_implicit_conversion (ENUM_UNDERLYING_TYPE (enumtype),
12481 value, tf_none);
12482 }
12483 }
12484
12485 /* C++ associates enums with global, function, or class declarations. */
12486 context = current_scope ();
12487
12488 /* Build the actual enumeration constant. Note that the enumeration
12489 constants have the underlying type of the enum (if it is fixed)
12490 or the type of their initializer (if the underlying type of the
12491 enum is not fixed):
12492
12493 [ C++0x dcl.enum ]
12494
12495 If the underlying type is fixed, the type of each enumerator
12496 prior to the closing brace is the underlying type; if the
12497 initializing value of an enumerator cannot be represented by
12498 the underlying type, the program is ill-formed. If the
12499 underlying type is not fixed, the type of each enumerator is
12500 the type of its initializing value.
12501
12502 If the underlying type is not fixed, it will be computed by
12503 finish_enum and we will reset the type of this enumerator. Of
12504 course, if we're processing a template, there may be no value. */
12505 type = value ? TREE_TYPE (value) : NULL_TREE;
12506
12507 if (context && context == current_class_type)
12508 /* This enum declaration is local to the class. We need the full
12509 lang_decl so that we can record DECL_CLASS_CONTEXT, for example. */
12510 decl = build_lang_decl_loc (loc, CONST_DECL, name, type);
12511 else
12512 /* It's a global enum, or it's local to a function. (Note local to
12513 a function could mean local to a class method. */
12514 decl = build_decl (loc, CONST_DECL, name, type);
12515
12516 DECL_CONTEXT (decl) = FROB_CONTEXT (context);
12517 TREE_CONSTANT (decl) = 1;
12518 TREE_READONLY (decl) = 1;
12519 DECL_INITIAL (decl) = value;
12520
12521 if (context && context == current_class_type && !SCOPED_ENUM_P (enumtype))
12522 /* In something like `struct S { enum E { i = 7 }; };' we put `i'
12523 on the TYPE_FIELDS list for `S'. (That's so that you can say
12524 things like `S::i' later.) */
12525 finish_member_declaration (decl);
12526 else
12527 pushdecl (decl);
12528
12529 /* Add this enumeration constant to the list for this type. */
12530 TYPE_VALUES (enumtype) = tree_cons (name, decl, TYPE_VALUES (enumtype));
12531 }
12532
12533 /* Look for an enumerator with the given NAME within the enumeration
12534 type ENUMTYPE. This routine is used primarily for qualified name
12535 lookup into an enumerator in C++0x, e.g.,
12536
12537 enum class Color { Red, Green, Blue };
12538
12539 Color color = Color::Red;
12540
12541 Returns the value corresponding to the enumerator, or
12542 NULL_TREE if no such enumerator was found. */
12543 tree
12544 lookup_enumerator (tree enumtype, tree name)
12545 {
12546 tree e;
12547 gcc_assert (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE);
12548
12549 e = purpose_member (name, TYPE_VALUES (enumtype));
12550 return e? TREE_VALUE (e) : NULL_TREE;
12551 }
12552
12553 \f
12554 /* We're defining DECL. Make sure that its type is OK. */
12555
12556 static void
12557 check_function_type (tree decl, tree current_function_parms)
12558 {
12559 tree fntype = TREE_TYPE (decl);
12560 tree return_type = complete_type (TREE_TYPE (fntype));
12561
12562 /* In a function definition, arg types must be complete. */
12563 require_complete_types_for_parms (current_function_parms);
12564
12565 if (dependent_type_p (return_type))
12566 return;
12567 if (!COMPLETE_OR_VOID_TYPE_P (return_type)
12568 || (TYPE_FOR_JAVA (return_type) && MAYBE_CLASS_TYPE_P (return_type)))
12569 {
12570 tree args = TYPE_ARG_TYPES (fntype);
12571
12572 if (!COMPLETE_OR_VOID_TYPE_P (return_type))
12573 error ("return type %q#T is incomplete", return_type);
12574 else
12575 error ("return type has Java class type %q#T", return_type);
12576
12577 /* Make it return void instead. */
12578 if (TREE_CODE (fntype) == METHOD_TYPE)
12579 fntype = build_method_type_directly (TREE_TYPE (TREE_VALUE (args)),
12580 void_type_node,
12581 TREE_CHAIN (args));
12582 else
12583 fntype = build_function_type (void_type_node, args);
12584 fntype
12585 = build_exception_variant (fntype,
12586 TYPE_RAISES_EXCEPTIONS (TREE_TYPE (decl)));
12587 fntype = (cp_build_type_attribute_variant
12588 (fntype, TYPE_ATTRIBUTES (TREE_TYPE (decl))));
12589 TREE_TYPE (decl) = fntype;
12590 }
12591 else
12592 abstract_virtuals_error (decl, TREE_TYPE (fntype));
12593 }
12594
12595 /* Create the FUNCTION_DECL for a function definition.
12596 DECLSPECS and DECLARATOR are the parts of the declaration;
12597 they describe the function's name and the type it returns,
12598 but twisted together in a fashion that parallels the syntax of C.
12599
12600 FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
12601 DECLARATOR is really the DECL for the function we are about to
12602 process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
12603 indicating that the function is an inline defined in-class.
12604
12605 This function creates a binding context for the function body
12606 as well as setting up the FUNCTION_DECL in current_function_decl.
12607
12608 For C++, we must first check whether that datum makes any sense.
12609 For example, "class A local_a(1,2);" means that variable local_a
12610 is an aggregate of type A, which should have a constructor
12611 applied to it with the argument list [1, 2].
12612
12613 On entry, DECL_INITIAL (decl1) should be NULL_TREE or error_mark_node,
12614 or may be a BLOCK if the function has been defined previously
12615 in this translation unit. On exit, DECL_INITIAL (decl1) will be
12616 error_mark_node if the function has never been defined, or
12617 a BLOCK if the function has been defined somewhere. */
12618
12619 void
12620 start_preparsed_function (tree decl1, tree attrs, int flags)
12621 {
12622 tree ctype = NULL_TREE;
12623 tree fntype;
12624 tree restype;
12625 int doing_friend = 0;
12626 cp_binding_level *bl;
12627 tree current_function_parms;
12628 struct c_fileinfo *finfo
12629 = get_fileinfo (LOCATION_FILE (DECL_SOURCE_LOCATION (decl1)));
12630 bool honor_interface;
12631
12632 /* Sanity check. */
12633 gcc_assert (TREE_CODE (TREE_VALUE (void_list_node)) == VOID_TYPE);
12634 gcc_assert (TREE_CHAIN (void_list_node) == NULL_TREE);
12635
12636 fntype = TREE_TYPE (decl1);
12637 if (TREE_CODE (fntype) == METHOD_TYPE)
12638 ctype = TYPE_METHOD_BASETYPE (fntype);
12639
12640 /* ISO C++ 11.4/5. A friend function defined in a class is in
12641 the (lexical) scope of the class in which it is defined. */
12642 if (!ctype && DECL_FRIEND_P (decl1))
12643 {
12644 ctype = DECL_FRIEND_CONTEXT (decl1);
12645
12646 /* CTYPE could be null here if we're dealing with a template;
12647 for example, `inline friend float foo()' inside a template
12648 will have no CTYPE set. */
12649 if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
12650 ctype = NULL_TREE;
12651 else
12652 doing_friend = 1;
12653 }
12654
12655 if (DECL_DECLARED_INLINE_P (decl1)
12656 && lookup_attribute ("noinline", attrs))
12657 warning (0, "inline function %q+D given attribute noinline", decl1);
12658
12659 /* Handle gnu_inline attribute. */
12660 if (GNU_INLINE_P (decl1))
12661 {
12662 DECL_EXTERNAL (decl1) = 1;
12663 DECL_NOT_REALLY_EXTERN (decl1) = 0;
12664 DECL_INTERFACE_KNOWN (decl1) = 1;
12665 DECL_DISREGARD_INLINE_LIMITS (decl1) = 1;
12666 }
12667
12668 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl1))
12669 /* This is a constructor, we must ensure that any default args
12670 introduced by this definition are propagated to the clones
12671 now. The clones are used directly in overload resolution. */
12672 adjust_clone_args (decl1);
12673
12674 /* Sometimes we don't notice that a function is a static member, and
12675 build a METHOD_TYPE for it. Fix that up now. */
12676 gcc_assert (!(ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1)
12677 && TREE_CODE (TREE_TYPE (decl1)) == METHOD_TYPE));
12678
12679 /* Set up current_class_type, and enter the scope of the class, if
12680 appropriate. */
12681 if (ctype)
12682 push_nested_class (ctype);
12683 else if (DECL_STATIC_FUNCTION_P (decl1))
12684 push_nested_class (DECL_CONTEXT (decl1));
12685
12686 /* Now that we have entered the scope of the class, we must restore
12687 the bindings for any template parameters surrounding DECL1, if it
12688 is an inline member template. (Order is important; consider the
12689 case where a template parameter has the same name as a field of
12690 the class.) It is not until after this point that
12691 PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly. */
12692 if (flags & SF_INCLASS_INLINE)
12693 maybe_begin_member_template_processing (decl1);
12694
12695 /* Effective C++ rule 15. */
12696 if (warn_ecpp
12697 && DECL_OVERLOADED_OPERATOR_P (decl1) == NOP_EXPR
12698 && TREE_CODE (TREE_TYPE (fntype)) == VOID_TYPE)
12699 warning (OPT_Weffc__, "%<operator=%> should return a reference to %<*this%>");
12700
12701 /* Make the init_value nonzero so pushdecl knows this is not tentative.
12702 error_mark_node is replaced below (in poplevel) with the BLOCK. */
12703 if (!DECL_INITIAL (decl1))
12704 DECL_INITIAL (decl1) = error_mark_node;
12705
12706 /* This function exists in static storage.
12707 (This does not mean `static' in the C sense!) */
12708 TREE_STATIC (decl1) = 1;
12709
12710 /* We must call push_template_decl after current_class_type is set
12711 up. (If we are processing inline definitions after exiting a
12712 class scope, current_class_type will be NULL_TREE until set above
12713 by push_nested_class.) */
12714 if (processing_template_decl)
12715 {
12716 /* FIXME: Handle error_mark_node more gracefully. */
12717 tree newdecl1 = push_template_decl (decl1);
12718 if (newdecl1 != error_mark_node)
12719 decl1 = newdecl1;
12720 }
12721
12722 /* We are now in the scope of the function being defined. */
12723 current_function_decl = decl1;
12724
12725 /* Save the parm names or decls from this function's declarator
12726 where store_parm_decls will find them. */
12727 current_function_parms = DECL_ARGUMENTS (decl1);
12728
12729 /* Make sure the parameter and return types are reasonable. When
12730 you declare a function, these types can be incomplete, but they
12731 must be complete when you define the function. */
12732 check_function_type (decl1, current_function_parms);
12733
12734 /* Build the return declaration for the function. */
12735 restype = TREE_TYPE (fntype);
12736 if (DECL_RESULT (decl1) == NULL_TREE)
12737 {
12738 tree resdecl;
12739
12740 resdecl = build_decl (input_location, RESULT_DECL, 0, restype);
12741 DECL_ARTIFICIAL (resdecl) = 1;
12742 DECL_IGNORED_P (resdecl) = 1;
12743 DECL_RESULT (decl1) = resdecl;
12744
12745 cp_apply_type_quals_to_decl (cp_type_quals (restype), resdecl);
12746 }
12747
12748 /* Let the user know we're compiling this function. */
12749 announce_function (decl1);
12750
12751 /* Record the decl so that the function name is defined.
12752 If we already have a decl for this name, and it is a FUNCTION_DECL,
12753 use the old decl. */
12754 if (!processing_template_decl && !(flags & SF_PRE_PARSED))
12755 {
12756 /* A specialization is not used to guide overload resolution. */
12757 if (!DECL_FUNCTION_MEMBER_P (decl1)
12758 && !(DECL_USE_TEMPLATE (decl1) &&
12759 PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl1))))
12760 {
12761 tree olddecl = pushdecl (decl1);
12762
12763 if (olddecl == error_mark_node)
12764 /* If something went wrong when registering the declaration,
12765 use DECL1; we have to have a FUNCTION_DECL to use when
12766 parsing the body of the function. */
12767 ;
12768 else
12769 {
12770 /* Otherwise, OLDDECL is either a previous declaration
12771 of the same function or DECL1 itself. */
12772
12773 if (warn_missing_declarations
12774 && olddecl == decl1
12775 && !DECL_MAIN_P (decl1)
12776 && TREE_PUBLIC (decl1)
12777 && !DECL_DECLARED_INLINE_P (decl1))
12778 {
12779 tree context;
12780
12781 /* Check whether DECL1 is in an anonymous
12782 namespace. */
12783 for (context = DECL_CONTEXT (decl1);
12784 context;
12785 context = DECL_CONTEXT (context))
12786 {
12787 if (TREE_CODE (context) == NAMESPACE_DECL
12788 && DECL_NAME (context) == NULL_TREE)
12789 break;
12790 }
12791
12792 if (context == NULL)
12793 warning (OPT_Wmissing_declarations,
12794 "no previous declaration for %q+D", decl1);
12795 }
12796
12797 decl1 = olddecl;
12798 }
12799 }
12800 else
12801 {
12802 /* We need to set the DECL_CONTEXT. */
12803 if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
12804 DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
12805 }
12806 fntype = TREE_TYPE (decl1);
12807
12808 /* If #pragma weak applies, mark the decl appropriately now.
12809 The pragma only applies to global functions. Because
12810 determining whether or not the #pragma applies involves
12811 computing the mangled name for the declaration, we cannot
12812 apply the pragma until after we have merged this declaration
12813 with any previous declarations; if the original declaration
12814 has a linkage specification, that specification applies to
12815 the definition as well, and may affect the mangled name. */
12816 if (DECL_FILE_SCOPE_P (decl1))
12817 maybe_apply_pragma_weak (decl1);
12818 }
12819
12820 /* Reset this in case the call to pushdecl changed it. */
12821 current_function_decl = decl1;
12822
12823 gcc_assert (DECL_INITIAL (decl1));
12824
12825 /* This function may already have been parsed, in which case just
12826 return; our caller will skip over the body without parsing. */
12827 if (DECL_INITIAL (decl1) != error_mark_node)
12828 return;
12829
12830 /* Initialize RTL machinery. We cannot do this until
12831 CURRENT_FUNCTION_DECL and DECL_RESULT are set up. We do this
12832 even when processing a template; this is how we get
12833 CFUN set up, and our per-function variables initialized.
12834 FIXME factor out the non-RTL stuff. */
12835 bl = current_binding_level;
12836 allocate_struct_function (decl1, processing_template_decl);
12837
12838 /* Initialize the language data structures. Whenever we start
12839 a new function, we destroy temporaries in the usual way. */
12840 cfun->language = ggc_alloc_cleared_language_function ();
12841 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
12842 current_binding_level = bl;
12843
12844 /* Start the statement-tree, start the tree now. */
12845 DECL_SAVED_TREE (decl1) = push_stmt_list ();
12846
12847 /* If we are (erroneously) defining a function that we have already
12848 defined before, wipe out what we knew before. */
12849 if (!DECL_PENDING_INLINE_P (decl1))
12850 DECL_SAVED_FUNCTION_DATA (decl1) = NULL;
12851
12852 if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1))
12853 {
12854 /* We know that this was set up by `grokclassfn'. We do not
12855 wait until `store_parm_decls', since evil parse errors may
12856 never get us to that point. Here we keep the consistency
12857 between `current_class_type' and `current_class_ptr'. */
12858 tree t = DECL_ARGUMENTS (decl1);
12859
12860 gcc_assert (t != NULL_TREE && TREE_CODE (t) == PARM_DECL);
12861 gcc_assert (TREE_CODE (TREE_TYPE (t)) == POINTER_TYPE);
12862
12863 cp_function_chain->x_current_class_ref
12864 = cp_build_indirect_ref (t, RO_NULL, tf_warning_or_error);
12865 /* Set this second to avoid shortcut in cp_build_indirect_ref. */
12866 cp_function_chain->x_current_class_ptr = t;
12867
12868 /* Constructors and destructors need to know whether they're "in
12869 charge" of initializing virtual base classes. */
12870 t = DECL_CHAIN (t);
12871 if (DECL_HAS_IN_CHARGE_PARM_P (decl1))
12872 {
12873 current_in_charge_parm = t;
12874 t = DECL_CHAIN (t);
12875 }
12876 if (DECL_HAS_VTT_PARM_P (decl1))
12877 {
12878 gcc_assert (DECL_NAME (t) == vtt_parm_identifier);
12879 current_vtt_parm = t;
12880 }
12881 }
12882
12883 honor_interface = (!DECL_TEMPLATE_INSTANTIATION (decl1)
12884 /* Implicitly-defined methods (like the
12885 destructor for a class in which no destructor
12886 is explicitly declared) must not be defined
12887 until their definition is needed. So, we
12888 ignore interface specifications for
12889 compiler-generated functions. */
12890 && !DECL_ARTIFICIAL (decl1));
12891
12892 if (processing_template_decl)
12893 /* Don't mess with interface flags. */;
12894 else if (DECL_INTERFACE_KNOWN (decl1))
12895 {
12896 tree ctx = decl_function_context (decl1);
12897
12898 if (DECL_NOT_REALLY_EXTERN (decl1))
12899 DECL_EXTERNAL (decl1) = 0;
12900
12901 if (ctx != NULL_TREE && DECL_DECLARED_INLINE_P (ctx)
12902 && TREE_PUBLIC (ctx))
12903 /* This is a function in a local class in an extern inline
12904 function. */
12905 comdat_linkage (decl1);
12906 }
12907 /* If this function belongs to an interface, it is public.
12908 If it belongs to someone else's interface, it is also external.
12909 This only affects inlines and template instantiations. */
12910 else if (!finfo->interface_unknown && honor_interface)
12911 {
12912 if (DECL_DECLARED_INLINE_P (decl1)
12913 || DECL_TEMPLATE_INSTANTIATION (decl1))
12914 {
12915 DECL_EXTERNAL (decl1)
12916 = (finfo->interface_only
12917 || (DECL_DECLARED_INLINE_P (decl1)
12918 && ! flag_implement_inlines
12919 && !DECL_VINDEX (decl1)));
12920
12921 /* For WIN32 we also want to put these in linkonce sections. */
12922 maybe_make_one_only (decl1);
12923 }
12924 else
12925 DECL_EXTERNAL (decl1) = 0;
12926 DECL_INTERFACE_KNOWN (decl1) = 1;
12927 /* If this function is in an interface implemented in this file,
12928 make sure that the back end knows to emit this function
12929 here. */
12930 if (!DECL_EXTERNAL (decl1))
12931 mark_needed (decl1);
12932 }
12933 else if (finfo->interface_unknown && finfo->interface_only
12934 && honor_interface)
12935 {
12936 /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
12937 interface, we will have both finfo->interface_unknown and
12938 finfo->interface_only set. In that case, we don't want to
12939 use the normal heuristics because someone will supply a
12940 #pragma implementation elsewhere, and deducing it here would
12941 produce a conflict. */
12942 comdat_linkage (decl1);
12943 DECL_EXTERNAL (decl1) = 0;
12944 DECL_INTERFACE_KNOWN (decl1) = 1;
12945 DECL_DEFER_OUTPUT (decl1) = 1;
12946 }
12947 else
12948 {
12949 /* This is a definition, not a reference.
12950 So clear DECL_EXTERNAL, unless this is a GNU extern inline. */
12951 if (!GNU_INLINE_P (decl1))
12952 DECL_EXTERNAL (decl1) = 0;
12953
12954 if ((DECL_DECLARED_INLINE_P (decl1)
12955 || DECL_TEMPLATE_INSTANTIATION (decl1))
12956 && ! DECL_INTERFACE_KNOWN (decl1))
12957 DECL_DEFER_OUTPUT (decl1) = 1;
12958 else
12959 DECL_INTERFACE_KNOWN (decl1) = 1;
12960 }
12961
12962 /* Determine the ELF visibility attribute for the function. We must not
12963 do this before calling "pushdecl", as we must allow "duplicate_decls"
12964 to merge any attributes appropriately. We also need to wait until
12965 linkage is set. */
12966 if (!DECL_CLONED_FUNCTION_P (decl1))
12967 determine_visibility (decl1);
12968
12969 begin_scope (sk_function_parms, decl1);
12970
12971 ++function_depth;
12972
12973 if (DECL_DESTRUCTOR_P (decl1)
12974 || (DECL_CONSTRUCTOR_P (decl1)
12975 && targetm.cxx.cdtor_returns_this ()))
12976 {
12977 cdtor_label = build_decl (input_location,
12978 LABEL_DECL, NULL_TREE, NULL_TREE);
12979 DECL_CONTEXT (cdtor_label) = current_function_decl;
12980 }
12981
12982 start_fname_decls ();
12983
12984 store_parm_decls (current_function_parms);
12985 }
12986
12987
12988 /* Like start_preparsed_function, except that instead of a
12989 FUNCTION_DECL, this function takes DECLSPECS and DECLARATOR.
12990
12991 Returns 1 on success. If the DECLARATOR is not suitable for a function
12992 (it defines a datum instead), we return 0, which tells
12993 yyparse to report a parse error. */
12994
12995 int
12996 start_function (cp_decl_specifier_seq *declspecs,
12997 const cp_declarator *declarator,
12998 tree attrs)
12999 {
13000 tree decl1;
13001
13002 decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, &attrs);
13003 if (decl1 == error_mark_node)
13004 return 0;
13005 /* If the declarator is not suitable for a function definition,
13006 cause a syntax error. */
13007 if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL)
13008 {
13009 error ("invalid function declaration");
13010 return 0;
13011 }
13012
13013 if (DECL_MAIN_P (decl1))
13014 /* main must return int. grokfndecl should have corrected it
13015 (and issued a diagnostic) if the user got it wrong. */
13016 gcc_assert (same_type_p (TREE_TYPE (TREE_TYPE (decl1)),
13017 integer_type_node));
13018
13019 start_preparsed_function (decl1, attrs, /*flags=*/SF_DEFAULT);
13020
13021 return 1;
13022 }
13023 \f
13024 /* Returns true iff an EH_SPEC_BLOCK should be created in the body of
13025 FN. */
13026
13027 static bool
13028 use_eh_spec_block (tree fn)
13029 {
13030 return (flag_exceptions && flag_enforce_eh_specs
13031 && !processing_template_decl
13032 && !type_throw_all_p (TREE_TYPE (fn))
13033 /* We insert the EH_SPEC_BLOCK only in the original
13034 function; then, it is copied automatically to the
13035 clones. */
13036 && !DECL_CLONED_FUNCTION_P (fn)
13037 /* Implicitly-generated constructors and destructors have
13038 exception specifications. However, those specifications
13039 are the union of the possible exceptions specified by the
13040 constructors/destructors for bases and members, so no
13041 unallowed exception will ever reach this function. By
13042 not creating the EH_SPEC_BLOCK we save a little memory,
13043 and we avoid spurious warnings about unreachable
13044 code. */
13045 && !DECL_DEFAULTED_FN (fn));
13046 }
13047
13048 /* Store the parameter declarations into the current function declaration.
13049 This is called after parsing the parameter declarations, before
13050 digesting the body of the function.
13051
13052 Also install to binding contour return value identifier, if any. */
13053
13054 static void
13055 store_parm_decls (tree current_function_parms)
13056 {
13057 tree fndecl = current_function_decl;
13058 tree parm;
13059
13060 /* This is a chain of any other decls that came in among the parm
13061 declarations. If a parm is declared with enum {foo, bar} x;
13062 then CONST_DECLs for foo and bar are put here. */
13063 tree nonparms = NULL_TREE;
13064
13065 if (current_function_parms)
13066 {
13067 /* This case is when the function was defined with an ANSI prototype.
13068 The parms already have decls, so we need not do anything here
13069 except record them as in effect
13070 and complain if any redundant old-style parm decls were written. */
13071
13072 tree specparms = current_function_parms;
13073 tree next;
13074
13075 /* Must clear this because it might contain TYPE_DECLs declared
13076 at class level. */
13077 current_binding_level->names = NULL;
13078
13079 /* If we're doing semantic analysis, then we'll call pushdecl
13080 for each of these. We must do them in reverse order so that
13081 they end in the correct forward order. */
13082 specparms = nreverse (specparms);
13083
13084 for (parm = specparms; parm; parm = next)
13085 {
13086 next = DECL_CHAIN (parm);
13087 if (TREE_CODE (parm) == PARM_DECL)
13088 {
13089 if (DECL_NAME (parm) == NULL_TREE
13090 || TREE_CODE (parm) != VOID_TYPE)
13091 pushdecl (parm);
13092 else
13093 error ("parameter %qD declared void", parm);
13094 }
13095 else
13096 {
13097 /* If we find an enum constant or a type tag,
13098 put it aside for the moment. */
13099 TREE_CHAIN (parm) = NULL_TREE;
13100 nonparms = chainon (nonparms, parm);
13101 }
13102 }
13103
13104 /* Get the decls in their original chain order and record in the
13105 function. This is all and only the PARM_DECLs that were
13106 pushed into scope by the loop above. */
13107 DECL_ARGUMENTS (fndecl) = getdecls ();
13108 }
13109 else
13110 DECL_ARGUMENTS (fndecl) = NULL_TREE;
13111
13112 /* Now store the final chain of decls for the arguments
13113 as the decl-chain of the current lexical scope.
13114 Put the enumerators in as well, at the front so that
13115 DECL_ARGUMENTS is not modified. */
13116 current_binding_level->names = chainon (nonparms, DECL_ARGUMENTS (fndecl));
13117
13118 if (use_eh_spec_block (current_function_decl))
13119 current_eh_spec_block = begin_eh_spec_block ();
13120 }
13121
13122 \f
13123 /* We have finished doing semantic analysis on DECL, but have not yet
13124 generated RTL for its body. Save away our current state, so that
13125 when we want to generate RTL later we know what to do. */
13126
13127 static void
13128 save_function_data (tree decl)
13129 {
13130 struct language_function *f;
13131
13132 /* Save the language-specific per-function data so that we can
13133 get it back when we really expand this function. */
13134 gcc_assert (!DECL_PENDING_INLINE_P (decl));
13135
13136 /* Make a copy. */
13137 f = ggc_alloc_language_function ();
13138 memcpy (f, cp_function_chain, sizeof (struct language_function));
13139 DECL_SAVED_FUNCTION_DATA (decl) = f;
13140
13141 /* Clear out the bits we don't need. */
13142 f->base.x_stmt_tree.x_cur_stmt_list = NULL;
13143 f->bindings = NULL;
13144 f->x_local_names = NULL;
13145 f->base.local_typedefs = NULL;
13146 }
13147
13148
13149 /* Set the return value of the constructor (if present). */
13150
13151 static void
13152 finish_constructor_body (void)
13153 {
13154 tree val;
13155 tree exprstmt;
13156
13157 if (targetm.cxx.cdtor_returns_this ()
13158 && (! TYPE_FOR_JAVA (current_class_type)))
13159 {
13160 /* Any return from a constructor will end up here. */
13161 add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
13162
13163 val = DECL_ARGUMENTS (current_function_decl);
13164 val = build2 (MODIFY_EXPR, TREE_TYPE (val),
13165 DECL_RESULT (current_function_decl), val);
13166 /* Return the address of the object. */
13167 exprstmt = build_stmt (input_location, RETURN_EXPR, val);
13168 add_stmt (exprstmt);
13169 }
13170 }
13171
13172 /* Do all the processing for the beginning of a destructor; set up the
13173 vtable pointers and cleanups for bases and members. */
13174
13175 static void
13176 begin_destructor_body (void)
13177 {
13178 tree compound_stmt;
13179
13180 /* If the CURRENT_CLASS_TYPE is incomplete, we will have already
13181 issued an error message. We still want to try to process the
13182 body of the function, but initialize_vtbl_ptrs will crash if
13183 TYPE_BINFO is NULL. */
13184 if (COMPLETE_TYPE_P (current_class_type))
13185 {
13186 compound_stmt = begin_compound_stmt (0);
13187 /* Make all virtual function table pointers in non-virtual base
13188 classes point to CURRENT_CLASS_TYPE's virtual function
13189 tables. */
13190 initialize_vtbl_ptrs (current_class_ptr);
13191 finish_compound_stmt (compound_stmt);
13192
13193 /* And insert cleanups for our bases and members so that they
13194 will be properly destroyed if we throw. */
13195 push_base_cleanups ();
13196 }
13197 }
13198
13199 /* At the end of every destructor we generate code to delete the object if
13200 necessary. Do that now. */
13201
13202 static void
13203 finish_destructor_body (void)
13204 {
13205 tree exprstmt;
13206
13207 /* Any return from a destructor will end up here; that way all base
13208 and member cleanups will be run when the function returns. */
13209 add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
13210
13211 /* In a virtual destructor, we must call delete. */
13212 if (DECL_VIRTUAL_P (current_function_decl))
13213 {
13214 tree if_stmt;
13215 tree virtual_size = cxx_sizeof (current_class_type);
13216
13217 /* [class.dtor]
13218
13219 At the point of definition of a virtual destructor (including
13220 an implicit definition), non-placement operator delete shall
13221 be looked up in the scope of the destructor's class and if
13222 found shall be accessible and unambiguous. */
13223 exprstmt = build_op_delete_call(DELETE_EXPR, current_class_ptr,
13224 virtual_size,
13225 /*global_p=*/false,
13226 /*placement=*/NULL_TREE,
13227 /*alloc_fn=*/NULL_TREE);
13228
13229 if_stmt = begin_if_stmt ();
13230 finish_if_stmt_cond (build2 (BIT_AND_EXPR, integer_type_node,
13231 current_in_charge_parm,
13232 integer_one_node),
13233 if_stmt);
13234 finish_expr_stmt (exprstmt);
13235 finish_then_clause (if_stmt);
13236 finish_if_stmt (if_stmt);
13237 }
13238
13239 if (targetm.cxx.cdtor_returns_this ())
13240 {
13241 tree val;
13242
13243 val = DECL_ARGUMENTS (current_function_decl);
13244 val = build2 (MODIFY_EXPR, TREE_TYPE (val),
13245 DECL_RESULT (current_function_decl), val);
13246 /* Return the address of the object. */
13247 exprstmt = build_stmt (input_location, RETURN_EXPR, val);
13248 add_stmt (exprstmt);
13249 }
13250 }
13251
13252 /* Do the necessary processing for the beginning of a function body, which
13253 in this case includes member-initializers, but not the catch clauses of
13254 a function-try-block. Currently, this means opening a binding level
13255 for the member-initializers (in a ctor), member cleanups (in a dtor),
13256 and capture proxies (in a lambda operator()). */
13257
13258 tree
13259 begin_function_body (void)
13260 {
13261 tree stmt;
13262
13263 if (! FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
13264 return NULL_TREE;
13265
13266 if (processing_template_decl)
13267 /* Do nothing now. */;
13268 else
13269 /* Always keep the BLOCK node associated with the outermost pair of
13270 curly braces of a function. These are needed for correct
13271 operation of dwarfout.c. */
13272 keep_next_level (true);
13273
13274 stmt = begin_compound_stmt (BCS_FN_BODY);
13275
13276 if (processing_template_decl)
13277 /* Do nothing now. */;
13278 else if (DECL_DESTRUCTOR_P (current_function_decl))
13279 begin_destructor_body ();
13280
13281 return stmt;
13282 }
13283
13284 /* Do the processing for the end of a function body. Currently, this means
13285 closing out the cleanups for fully-constructed bases and members, and in
13286 the case of the destructor, deleting the object if desired. Again, this
13287 is only meaningful for [cd]tors, since they are the only functions where
13288 there is a significant distinction between the main body and any
13289 function catch clauses. Handling, say, main() return semantics here
13290 would be wrong, as flowing off the end of a function catch clause for
13291 main() would also need to return 0. */
13292
13293 void
13294 finish_function_body (tree compstmt)
13295 {
13296 if (compstmt == NULL_TREE)
13297 return;
13298
13299 /* Close the block. */
13300 finish_compound_stmt (compstmt);
13301
13302 if (processing_template_decl)
13303 /* Do nothing now. */;
13304 else if (DECL_CONSTRUCTOR_P (current_function_decl))
13305 finish_constructor_body ();
13306 else if (DECL_DESTRUCTOR_P (current_function_decl))
13307 finish_destructor_body ();
13308 }
13309
13310 /* Given a function, returns the BLOCK corresponding to the outermost level
13311 of curly braces, skipping the artificial block created for constructor
13312 initializers. */
13313
13314 tree
13315 outer_curly_brace_block (tree fndecl)
13316 {
13317 tree block = BLOCK_SUBBLOCKS (DECL_INITIAL (fndecl));
13318 if (FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
13319 /* Skip the artificial function body block. */
13320 block = BLOCK_SUBBLOCKS (block);
13321 return block;
13322 }
13323
13324 /* If FNDECL is a class's key method, add the class to the list of
13325 keyed classes that should be emitted. */
13326
13327 static void
13328 record_key_method_defined (tree fndecl)
13329 {
13330 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fndecl)
13331 && DECL_VIRTUAL_P (fndecl)
13332 && !processing_template_decl)
13333 {
13334 tree fnclass = DECL_CONTEXT (fndecl);
13335 if (fndecl == CLASSTYPE_KEY_METHOD (fnclass))
13336 keyed_classes = tree_cons (NULL_TREE, fnclass, keyed_classes);
13337 }
13338 }
13339
13340 /* Subroutine of finish_function.
13341 Save the body of constexpr functions for possible
13342 future compile time evaluation. */
13343
13344 static void
13345 maybe_save_function_definition (tree fun)
13346 {
13347 if (!processing_template_decl
13348 && DECL_DECLARED_CONSTEXPR_P (fun)
13349 && !DECL_CLONED_FUNCTION_P (fun))
13350 register_constexpr_fundef (fun, DECL_SAVED_TREE (fun));
13351 }
13352
13353 /* Finish up a function declaration and compile that function
13354 all the way to assembler language output. The free the storage
13355 for the function definition.
13356
13357 FLAGS is a bitwise or of the following values:
13358 2 - INCLASS_INLINE
13359 We just finished processing the body of an in-class inline
13360 function definition. (This processing will have taken place
13361 after the class definition is complete.) */
13362
13363 tree
13364 finish_function (int flags)
13365 {
13366 tree fndecl = current_function_decl;
13367 tree fntype, ctype = NULL_TREE;
13368 int inclass_inline = (flags & 2) != 0;
13369
13370 /* When we get some parse errors, we can end up without a
13371 current_function_decl, so cope. */
13372 if (fndecl == NULL_TREE)
13373 return error_mark_node;
13374
13375 if (c_dialect_objc ())
13376 objc_finish_function ();
13377
13378 gcc_assert (!defer_mark_used_calls);
13379 defer_mark_used_calls = true;
13380
13381 record_key_method_defined (fndecl);
13382
13383 fntype = TREE_TYPE (fndecl);
13384
13385 /* TREE_READONLY (fndecl) = 1;
13386 This caused &foo to be of type ptr-to-const-function
13387 which then got a warning when stored in a ptr-to-function variable. */
13388
13389 gcc_assert (building_stmt_list_p ());
13390 /* The current function is being defined, so its DECL_INITIAL should
13391 be set, and unless there's a multiple definition, it should be
13392 error_mark_node. */
13393 gcc_assert (DECL_INITIAL (fndecl) == error_mark_node);
13394
13395 /* For a cloned function, we've already got all the code we need;
13396 there's no need to add any extra bits. */
13397 if (!DECL_CLONED_FUNCTION_P (fndecl))
13398 {
13399 if (DECL_MAIN_P (current_function_decl))
13400 {
13401 /* Make it so that `main' always returns 0 by default (or
13402 1 for VMS). */
13403 #if VMS_TARGET
13404 finish_return_stmt (integer_one_node);
13405 #else
13406 finish_return_stmt (integer_zero_node);
13407 #endif
13408 }
13409
13410 if (use_eh_spec_block (current_function_decl))
13411 finish_eh_spec_block (TYPE_RAISES_EXCEPTIONS
13412 (TREE_TYPE (current_function_decl)),
13413 current_eh_spec_block);
13414 }
13415
13416 /* If we're saving up tree structure, tie off the function now. */
13417 DECL_SAVED_TREE (fndecl) = pop_stmt_list (DECL_SAVED_TREE (fndecl));
13418
13419 finish_fname_decls ();
13420
13421 /* If this function can't throw any exceptions, remember that. */
13422 if (!processing_template_decl
13423 && !cp_function_chain->can_throw
13424 && !flag_non_call_exceptions
13425 && !decl_replaceable_p (fndecl))
13426 TREE_NOTHROW (fndecl) = 1;
13427
13428 /* This must come after expand_function_end because cleanups might
13429 have declarations (from inline functions) that need to go into
13430 this function's blocks. */
13431
13432 /* If the current binding level isn't the outermost binding level
13433 for this function, either there is a bug, or we have experienced
13434 syntax errors and the statement tree is malformed. */
13435 if (current_binding_level->kind != sk_function_parms)
13436 {
13437 /* Make sure we have already experienced errors. */
13438 gcc_assert (errorcount);
13439
13440 /* Throw away the broken statement tree and extra binding
13441 levels. */
13442 DECL_SAVED_TREE (fndecl) = alloc_stmt_list ();
13443
13444 while (current_binding_level->kind != sk_function_parms)
13445 {
13446 if (current_binding_level->kind == sk_class)
13447 pop_nested_class ();
13448 else
13449 poplevel (0, 0, 0);
13450 }
13451 }
13452 poplevel (1, 0, 1);
13453
13454 /* Statements should always be full-expressions at the outermost set
13455 of curly braces for a function. */
13456 gcc_assert (stmts_are_full_exprs_p ());
13457
13458 /* Save constexpr function body before it gets munged by
13459 the NRV transformation. */
13460 maybe_save_function_definition (fndecl);
13461
13462 /* Set up the named return value optimization, if we can. Candidate
13463 variables are selected in check_return_expr. */
13464 if (current_function_return_value)
13465 {
13466 tree r = current_function_return_value;
13467 tree outer;
13468
13469 if (r != error_mark_node
13470 /* This is only worth doing for fns that return in memory--and
13471 simpler, since we don't have to worry about promoted modes. */
13472 && aggregate_value_p (TREE_TYPE (TREE_TYPE (fndecl)), fndecl)
13473 /* Only allow this for variables declared in the outer scope of
13474 the function so we know that their lifetime always ends with a
13475 return; see g++.dg/opt/nrv6.C. We could be more flexible if
13476 we were to do this optimization in tree-ssa. */
13477 && (outer = outer_curly_brace_block (fndecl))
13478 && chain_member (r, BLOCK_VARS (outer)))
13479 finalize_nrv (&DECL_SAVED_TREE (fndecl), r, DECL_RESULT (fndecl));
13480
13481 current_function_return_value = NULL_TREE;
13482 }
13483
13484 /* Remember that we were in class scope. */
13485 if (current_class_name)
13486 ctype = current_class_type;
13487
13488 /* Must mark the RESULT_DECL as being in this function. */
13489 DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
13490
13491 /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
13492 to the FUNCTION_DECL node itself. */
13493 BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
13494
13495 /* Save away current state, if appropriate. */
13496 if (!processing_template_decl)
13497 save_function_data (fndecl);
13498
13499 /* Complain if there's just no return statement. */
13500 if (warn_return_type
13501 && TREE_CODE (TREE_TYPE (fntype)) != VOID_TYPE
13502 && !dependent_type_p (TREE_TYPE (fntype))
13503 && !current_function_returns_value && !current_function_returns_null
13504 /* Don't complain if we abort or throw. */
13505 && !current_function_returns_abnormally
13506 /* Don't complain if we are declared noreturn. */
13507 && !TREE_THIS_VOLATILE (fndecl)
13508 && !DECL_NAME (DECL_RESULT (fndecl))
13509 && !TREE_NO_WARNING (fndecl)
13510 /* Structor return values (if any) are set by the compiler. */
13511 && !DECL_CONSTRUCTOR_P (fndecl)
13512 && !DECL_DESTRUCTOR_P (fndecl))
13513 {
13514 warning (OPT_Wreturn_type,
13515 "no return statement in function returning non-void");
13516 TREE_NO_WARNING (fndecl) = 1;
13517 }
13518
13519 /* Store the end of the function, so that we get good line number
13520 info for the epilogue. */
13521 cfun->function_end_locus = input_location;
13522
13523 /* Complain about parameters that are only set, but never otherwise used. */
13524 if (warn_unused_but_set_parameter
13525 && !processing_template_decl
13526 && errorcount == unused_but_set_errorcount
13527 && !DECL_CLONED_FUNCTION_P (fndecl))
13528 {
13529 tree decl;
13530
13531 for (decl = DECL_ARGUMENTS (fndecl);
13532 decl;
13533 decl = DECL_CHAIN (decl))
13534 if (TREE_USED (decl)
13535 && TREE_CODE (decl) == PARM_DECL
13536 && !DECL_READ_P (decl)
13537 && DECL_NAME (decl)
13538 && !DECL_ARTIFICIAL (decl)
13539 && !TREE_NO_WARNING (decl)
13540 && !DECL_IN_SYSTEM_HEADER (decl)
13541 && TREE_TYPE (decl) != error_mark_node
13542 && TREE_CODE (TREE_TYPE (decl)) != REFERENCE_TYPE
13543 && (!CLASS_TYPE_P (TREE_TYPE (decl))
13544 || !TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl))))
13545 warning (OPT_Wunused_but_set_parameter,
13546 "parameter %q+D set but not used", decl);
13547 unused_but_set_errorcount = errorcount;
13548 }
13549
13550 /* Complain about locally defined typedefs that are not used in this
13551 function. */
13552 maybe_warn_unused_local_typedefs ();
13553
13554 /* Genericize before inlining. */
13555 if (!processing_template_decl)
13556 {
13557 struct language_function *f = DECL_SAVED_FUNCTION_DATA (fndecl);
13558 invoke_plugin_callbacks (PLUGIN_PRE_GENERICIZE, fndecl);
13559 cp_genericize (fndecl);
13560 /* Clear out the bits we don't need. */
13561 f->x_current_class_ptr = NULL;
13562 f->x_current_class_ref = NULL;
13563 f->x_eh_spec_block = NULL;
13564 f->x_in_charge_parm = NULL;
13565 f->x_vtt_parm = NULL;
13566 f->x_return_value = NULL;
13567 f->bindings = NULL;
13568 f->extern_decl_map = NULL;
13569 }
13570 /* Clear out the bits we don't need. */
13571 local_names = NULL;
13572
13573 /* We're leaving the context of this function, so zap cfun. It's still in
13574 DECL_STRUCT_FUNCTION, and we'll restore it in tree_rest_of_compilation. */
13575 set_cfun (NULL);
13576 current_function_decl = NULL;
13577
13578 /* If this is an in-class inline definition, we may have to pop the
13579 bindings for the template parameters that we added in
13580 maybe_begin_member_template_processing when start_function was
13581 called. */
13582 if (inclass_inline)
13583 maybe_end_member_template_processing ();
13584
13585 /* Leave the scope of the class. */
13586 if (ctype)
13587 pop_nested_class ();
13588
13589 --function_depth;
13590
13591 /* Clean up. */
13592 current_function_decl = NULL_TREE;
13593
13594 defer_mark_used_calls = false;
13595 if (deferred_mark_used_calls)
13596 {
13597 unsigned int i;
13598 tree decl;
13599
13600 FOR_EACH_VEC_ELT (tree, deferred_mark_used_calls, i, decl)
13601 mark_used (decl);
13602 VEC_free (tree, gc, deferred_mark_used_calls);
13603 }
13604
13605 return fndecl;
13606 }
13607 \f
13608 /* Create the FUNCTION_DECL for a function definition.
13609 DECLSPECS and DECLARATOR are the parts of the declaration;
13610 they describe the return type and the name of the function,
13611 but twisted together in a fashion that parallels the syntax of C.
13612
13613 This function creates a binding context for the function body
13614 as well as setting up the FUNCTION_DECL in current_function_decl.
13615
13616 Returns a FUNCTION_DECL on success.
13617
13618 If the DECLARATOR is not suitable for a function (it defines a datum
13619 instead), we return 0, which tells yyparse to report a parse error.
13620
13621 May return void_type_node indicating that this method is actually
13622 a friend. See grokfield for more details.
13623
13624 Came here with a `.pushlevel' .
13625
13626 DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
13627 CHANGES TO CODE IN `grokfield'. */
13628
13629 tree
13630 grokmethod (cp_decl_specifier_seq *declspecs,
13631 const cp_declarator *declarator, tree attrlist)
13632 {
13633 tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
13634 &attrlist);
13635
13636 if (fndecl == error_mark_node)
13637 return error_mark_node;
13638
13639 if (fndecl == NULL || TREE_CODE (fndecl) != FUNCTION_DECL)
13640 {
13641 error ("invalid member function declaration");
13642 return error_mark_node;
13643 }
13644
13645 if (attrlist)
13646 cplus_decl_attributes (&fndecl, attrlist, 0);
13647
13648 /* Pass friends other than inline friend functions back. */
13649 if (fndecl == void_type_node)
13650 return fndecl;
13651
13652 if (DECL_IN_AGGR_P (fndecl))
13653 {
13654 if (DECL_CLASS_SCOPE_P (fndecl))
13655 error ("%qD is already defined in class %qT", fndecl,
13656 DECL_CONTEXT (fndecl));
13657 return error_mark_node;
13658 }
13659
13660 check_template_shadow (fndecl);
13661
13662 DECL_DECLARED_INLINE_P (fndecl) = 1;
13663 DECL_NO_INLINE_WARNING_P (fndecl) = 1;
13664
13665 /* We process method specializations in finish_struct_1. */
13666 if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
13667 {
13668 fndecl = push_template_decl (fndecl);
13669 if (fndecl == error_mark_node)
13670 return fndecl;
13671 }
13672
13673 if (! DECL_FRIEND_P (fndecl))
13674 {
13675 if (DECL_CHAIN (fndecl))
13676 {
13677 fndecl = copy_node (fndecl);
13678 TREE_CHAIN (fndecl) = NULL_TREE;
13679 }
13680 }
13681
13682 cp_finish_decl (fndecl, NULL_TREE, false, NULL_TREE, 0);
13683
13684 DECL_IN_AGGR_P (fndecl) = 1;
13685 return fndecl;
13686 }
13687 \f
13688
13689 /* VAR is a VAR_DECL. If its type is incomplete, remember VAR so that
13690 we can lay it out later, when and if its type becomes complete. */
13691
13692 void
13693 maybe_register_incomplete_var (tree var)
13694 {
13695 gcc_assert (TREE_CODE (var) == VAR_DECL);
13696
13697 /* Keep track of variables with incomplete types. */
13698 if (!processing_template_decl && TREE_TYPE (var) != error_mark_node
13699 && DECL_EXTERNAL (var))
13700 {
13701 tree inner_type = TREE_TYPE (var);
13702
13703 while (TREE_CODE (inner_type) == ARRAY_TYPE)
13704 inner_type = TREE_TYPE (inner_type);
13705 inner_type = TYPE_MAIN_VARIANT (inner_type);
13706
13707 if ((!COMPLETE_TYPE_P (inner_type) && CLASS_TYPE_P (inner_type))
13708 /* RTTI TD entries are created while defining the type_info. */
13709 || (TYPE_LANG_SPECIFIC (inner_type)
13710 && TYPE_BEING_DEFINED (inner_type)))
13711 {
13712 incomplete_var *iv
13713 = VEC_safe_push (incomplete_var, gc, incomplete_vars, NULL);
13714 iv->decl = var;
13715 iv->incomplete_type = inner_type;
13716 }
13717 }
13718 }
13719
13720 /* Called when a class type (given by TYPE) is defined. If there are
13721 any existing VAR_DECLs whose type has been completed by this
13722 declaration, update them now. */
13723
13724 void
13725 complete_vars (tree type)
13726 {
13727 unsigned ix;
13728 incomplete_var *iv;
13729
13730 for (ix = 0; VEC_iterate (incomplete_var, incomplete_vars, ix, iv); )
13731 {
13732 if (same_type_p (type, iv->incomplete_type))
13733 {
13734 tree var = iv->decl;
13735 tree type = TREE_TYPE (var);
13736 /* Complete the type of the variable. The VAR_DECL itself
13737 will be laid out in expand_expr. */
13738 complete_type (type);
13739 cp_apply_type_quals_to_decl (cp_type_quals (type), var);
13740 /* Remove this entry from the list. */
13741 VEC_unordered_remove (incomplete_var, incomplete_vars, ix);
13742 }
13743 else
13744 ix++;
13745 }
13746
13747 /* Check for pending declarations which may have abstract type. */
13748 complete_type_check_abstract (type);
13749 }
13750
13751 /* If DECL is of a type which needs a cleanup, build and return an
13752 expression to perform that cleanup here. Return NULL_TREE if no
13753 cleanup need be done. */
13754
13755 tree
13756 cxx_maybe_build_cleanup (tree decl, tsubst_flags_t complain)
13757 {
13758 tree type;
13759 tree attr;
13760 tree cleanup;
13761
13762 /* Assume no cleanup is required. */
13763 cleanup = NULL_TREE;
13764
13765 if (error_operand_p (decl))
13766 return cleanup;
13767
13768 /* Handle "__attribute__((cleanup))". We run the cleanup function
13769 before the destructor since the destructor is what actually
13770 terminates the lifetime of the object. */
13771 attr = lookup_attribute ("cleanup", DECL_ATTRIBUTES (decl));
13772 if (attr)
13773 {
13774 tree id;
13775 tree fn;
13776 tree arg;
13777
13778 /* Get the name specified by the user for the cleanup function. */
13779 id = TREE_VALUE (TREE_VALUE (attr));
13780 /* Look up the name to find the cleanup function to call. It is
13781 important to use lookup_name here because that is what is
13782 used in c-common.c:handle_cleanup_attribute when performing
13783 initial checks on the attribute. Note that those checks
13784 include ensuring that the function found is not an overloaded
13785 function, or an object with an overloaded call operator,
13786 etc.; we can rely on the fact that the function found is an
13787 ordinary FUNCTION_DECL. */
13788 fn = lookup_name (id);
13789 arg = build_address (decl);
13790 mark_used (decl);
13791 cleanup = cp_build_function_call_nary (fn, complain, arg, NULL_TREE);
13792 if (cleanup == error_mark_node)
13793 return error_mark_node;
13794 }
13795 /* Handle ordinary C++ destructors. */
13796 type = TREE_TYPE (decl);
13797 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
13798 {
13799 int flags = LOOKUP_NORMAL|LOOKUP_DESTRUCTOR;
13800 bool has_vbases = (TREE_CODE (type) == RECORD_TYPE
13801 && CLASSTYPE_VBASECLASSES (type));
13802 tree addr;
13803 tree call;
13804
13805 if (TREE_CODE (type) == ARRAY_TYPE)
13806 addr = decl;
13807 else
13808 addr = build_address (decl);
13809
13810 /* Optimize for space over speed here. */
13811 if (!has_vbases || flag_expensive_optimizations)
13812 flags |= LOOKUP_NONVIRTUAL;
13813
13814 call = build_delete (TREE_TYPE (addr), addr,
13815 sfk_complete_destructor, flags, 0, complain);
13816 if (call == error_mark_node)
13817 cleanup = error_mark_node;
13818 else if (cleanup)
13819 cleanup = cp_build_compound_expr (cleanup, call, complain);
13820 else
13821 cleanup = call;
13822 }
13823
13824 /* build_delete sets the location of the destructor call to the
13825 current location, even though the destructor is going to be
13826 called later, at the end of the current scope. This can lead to
13827 a "jumpy" behaviour for users of debuggers when they step around
13828 the end of the block. So let's unset the location of the
13829 destructor call instead. */
13830 if (cleanup != NULL && EXPR_P (cleanup))
13831 SET_EXPR_LOCATION (cleanup, UNKNOWN_LOCATION);
13832 return cleanup;
13833 }
13834
13835 \f
13836 /* When a stmt has been parsed, this function is called. */
13837
13838 void
13839 finish_stmt (void)
13840 {
13841 }
13842
13843 /* Return the FUNCTION_TYPE that corresponds to MEMFNTYPE, which can be a
13844 FUNCTION_DECL, METHOD_TYPE, FUNCTION_TYPE, pointer or reference to
13845 METHOD_TYPE or FUNCTION_TYPE, or pointer to member function. */
13846
13847 tree
13848 static_fn_type (tree memfntype)
13849 {
13850 tree fntype;
13851 tree args;
13852
13853 if (TYPE_PTRMEMFUNC_P (memfntype))
13854 memfntype = TYPE_PTRMEMFUNC_FN_TYPE (memfntype);
13855 if (POINTER_TYPE_P (memfntype)
13856 || TREE_CODE (memfntype) == FUNCTION_DECL)
13857 memfntype = TREE_TYPE (memfntype);
13858 if (TREE_CODE (memfntype) == FUNCTION_TYPE)
13859 return memfntype;
13860 gcc_assert (TREE_CODE (memfntype) == METHOD_TYPE);
13861 args = TYPE_ARG_TYPES (memfntype);
13862 fntype = build_function_type (TREE_TYPE (memfntype), TREE_CHAIN (args));
13863 fntype = apply_memfn_quals (fntype, type_memfn_quals (memfntype));
13864 fntype = (cp_build_type_attribute_variant
13865 (fntype, TYPE_ATTRIBUTES (memfntype)));
13866 fntype = (build_exception_variant
13867 (fntype, TYPE_RAISES_EXCEPTIONS (memfntype)));
13868 return fntype;
13869 }
13870
13871 /* DECL was originally constructed as a non-static member function,
13872 but turned out to be static. Update it accordingly. */
13873
13874 void
13875 revert_static_member_fn (tree decl)
13876 {
13877 tree stype = static_fn_type (decl);
13878 cp_cv_quals quals = type_memfn_quals (stype);
13879
13880 if (quals != TYPE_UNQUALIFIED)
13881 stype = apply_memfn_quals (stype, TYPE_UNQUALIFIED);
13882
13883 TREE_TYPE (decl) = stype;
13884
13885 if (DECL_ARGUMENTS (decl))
13886 DECL_ARGUMENTS (decl) = DECL_CHAIN (DECL_ARGUMENTS (decl));
13887 DECL_STATIC_FUNCTION_P (decl) = 1;
13888 }
13889
13890 /* Return which tree structure is used by T, or TS_CP_GENERIC if T is
13891 one of the language-independent trees. */
13892
13893 enum cp_tree_node_structure_enum
13894 cp_tree_node_structure (union lang_tree_node * t)
13895 {
13896 switch (TREE_CODE (&t->generic))
13897 {
13898 case DEFAULT_ARG: return TS_CP_DEFAULT_ARG;
13899 case DEFERRED_NOEXCEPT: return TS_CP_DEFERRED_NOEXCEPT;
13900 case IDENTIFIER_NODE: return TS_CP_IDENTIFIER;
13901 case OVERLOAD: return TS_CP_OVERLOAD;
13902 case TEMPLATE_PARM_INDEX: return TS_CP_TPI;
13903 case PTRMEM_CST: return TS_CP_PTRMEM;
13904 case BASELINK: return TS_CP_BASELINK;
13905 case STATIC_ASSERT: return TS_CP_STATIC_ASSERT;
13906 case ARGUMENT_PACK_SELECT: return TS_CP_ARGUMENT_PACK_SELECT;
13907 case TRAIT_EXPR: return TS_CP_TRAIT_EXPR;
13908 case LAMBDA_EXPR: return TS_CP_LAMBDA_EXPR;
13909 case TEMPLATE_INFO: return TS_CP_TEMPLATE_INFO;
13910 case USERDEF_LITERAL: return TS_CP_USERDEF_LITERAL;
13911 default: return TS_CP_GENERIC;
13912 }
13913 }
13914
13915 /* Build the void_list_node (void_type_node having been created). */
13916 tree
13917 build_void_list_node (void)
13918 {
13919 tree t = build_tree_list (NULL_TREE, void_type_node);
13920 return t;
13921 }
13922
13923 bool
13924 cp_missing_noreturn_ok_p (tree decl)
13925 {
13926 /* A missing noreturn is ok for the `main' function. */
13927 return DECL_MAIN_P (decl);
13928 }
13929
13930 /* Return the COMDAT group into which DECL should be placed. */
13931
13932 tree
13933 cxx_comdat_group (tree decl)
13934 {
13935 tree name;
13936
13937 /* Virtual tables, construction virtual tables, and virtual table
13938 tables all go in a single COMDAT group, named after the primary
13939 virtual table. */
13940 if (TREE_CODE (decl) == VAR_DECL && DECL_VTABLE_OR_VTT_P (decl))
13941 name = DECL_ASSEMBLER_NAME (CLASSTYPE_VTABLES (DECL_CONTEXT (decl)));
13942 /* For all other DECLs, the COMDAT group is the mangled name of the
13943 declaration itself. */
13944 else
13945 {
13946 while (DECL_THUNK_P (decl))
13947 {
13948 /* If TARGET_USE_LOCAL_THUNK_ALIAS_P, use_thunk puts the thunk
13949 into the same section as the target function. In that case
13950 we must return target's name. */
13951 tree target = THUNK_TARGET (decl);
13952 if (TARGET_USE_LOCAL_THUNK_ALIAS_P (target)
13953 && DECL_SECTION_NAME (target) != NULL
13954 && DECL_ONE_ONLY (target))
13955 decl = target;
13956 else
13957 break;
13958 }
13959 name = DECL_ASSEMBLER_NAME (decl);
13960 }
13961
13962 return name;
13963 }
13964
13965 #include "gt-cp-decl.h"