Sync usage with man page.
[netbsd-mini2440.git] / gnu / dist / gcc4 / gcc / cp / decl.c
blob4aac4eebef37db77691d25cf41482016b50cb548
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 Free Software Foundation, Inc.
4 Contributed by Michael Tiemann (tiemann@cygnus.com)
6 This file is part of GCC.
8 GCC is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2, or (at your option)
11 any later version.
13 GCC is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING. If not, write to
20 the Free Software Foundation, 51 Franklin Street, Fifth Floor,
21 Boston, MA 02110-1301, USA. */
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. */
28 /* ??? not all decl nodes are given the most useful possible
29 line numbers. For example, the CONST_DECLs for enum values. */
31 #include "config.h"
32 #include "system.h"
33 #include "coretypes.h"
34 #include "tm.h"
35 #include "tree.h"
36 #include "rtl.h"
37 #include "expr.h"
38 #include "flags.h"
39 #include "cp-tree.h"
40 #include "tree-inline.h"
41 #include "decl.h"
42 #include "output.h"
43 #include "except.h"
44 #include "toplev.h"
45 #include "hashtab.h"
46 #include "tm_p.h"
47 #include "target.h"
48 #include "c-common.h"
49 #include "c-pragma.h"
50 #include "diagnostic.h"
51 #include "debug.h"
52 #include "timevar.h"
53 #include "tree-flow.h"
55 static tree grokparms (cp_parameter_declarator *, tree *);
56 static const char *redeclaration_error_message (tree, tree);
58 static int decl_jump_unsafe (tree);
59 static void require_complete_types_for_parms (tree);
60 static int ambi_op_p (enum tree_code);
61 static int unary_op_p (enum tree_code);
62 static void push_local_name (tree);
63 static tree grok_reference_init (tree, tree, tree, tree *);
64 static tree grokvardecl (tree, tree, const cp_decl_specifier_seq *,
65 int, int, tree);
66 static void record_unknown_type (tree, const char *);
67 static tree builtin_function_1 (const char *, tree, tree,
68 enum built_in_function code,
69 enum built_in_class cl, const char *,
70 tree);
71 static tree build_library_fn_1 (tree, enum tree_code, tree);
72 static int member_function_or_else (tree, tree, enum overload_flags);
73 static void bad_specifiers (tree, const char *, int, int, int, int,
74 int);
75 static void check_for_uninitialized_const_var (tree);
76 static hashval_t typename_hash (const void *);
77 static int typename_compare (const void *, const void *);
78 static tree local_variable_p_walkfn (tree *, int *, void *);
79 static tree record_builtin_java_type (const char *, int);
80 static const char *tag_name (enum tag_types);
81 static tree lookup_and_check_tag (enum tag_types, tree, tag_scope, bool);
82 static int walk_namespaces_r (tree, walk_namespaces_fn, void *);
83 static tree make_label_decl (tree, int);
84 static void use_label (tree);
85 static void check_previous_goto_1 (tree, struct cp_binding_level *, tree,
86 const location_t *);
87 static void check_previous_goto (struct named_label_use_list *);
88 static void check_switch_goto (struct cp_binding_level *);
89 static void check_previous_gotos (tree);
90 static void pop_label (tree, tree);
91 static void pop_labels (tree);
92 static void maybe_deduce_size_from_array_init (tree, tree);
93 static void layout_var_decl (tree);
94 static void maybe_commonize_var (tree);
95 static tree check_initializer (tree, tree, int, tree *);
96 static void make_rtl_for_nonlocal_decl (tree, tree, const char *);
97 static void save_function_data (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 tree create_array_type_for_decl (tree, tree, tree);
103 static tree get_atexit_node (void);
104 static tree get_dso_handle_node (void);
105 static tree start_cleanup_fn (void);
106 static void end_cleanup_fn (void);
107 static tree cp_make_fname_decl (tree, int);
108 static void initialize_predefined_identifiers (void);
109 static tree check_special_function_return_type
110 (special_function_kind, tree, tree);
111 static tree push_cp_library_fn (enum tree_code, tree);
112 static tree build_cp_library_fn (tree, enum tree_code, tree);
113 static void store_parm_decls (tree);
114 static void initialize_local_var (tree, tree);
115 static void expand_static_init (tree, tree);
116 static tree next_initializable_field (tree);
118 /* The following symbols are subsumed in the cp_global_trees array, and
119 listed here individually for documentation purposes.
121 C++ extensions
122 tree wchar_decl_node;
124 tree vtable_entry_type;
125 tree delta_type_node;
126 tree __t_desc_type_node;
128 tree class_type_node;
129 tree unknown_type_node;
131 Array type `vtable_entry_type[]'
133 tree vtbl_type_node;
134 tree vtbl_ptr_type_node;
136 Namespaces,
138 tree std_node;
139 tree abi_node;
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.
145 tree abort_fndecl;
147 The FUNCTION_DECL for the default `::operator delete'.
149 tree global_delete_fndecl;
151 Used by RTTI
152 tree type_info_type_node, tinfo_decl_id, tinfo_decl_type;
153 tree tinfo_var_id;
157 tree cp_global_trees[CPTI_MAX];
159 /* Indicates that there is a type value in some namespace, although
160 that is not necessarily in scope at the moment. */
162 tree global_type_node;
164 /* The node that holds the "name" of the global scope. */
165 tree global_scope_name;
167 /* Used only for jumps to as-yet undefined labels, since jumps to
168 defined labels can have their validity checked immediately. */
170 struct named_label_use_list GTY(())
172 struct cp_binding_level *binding_level;
173 tree names_in_scope;
174 tree label_decl;
175 location_t o_goto_locus;
176 struct named_label_use_list *next;
179 #define named_label_uses cp_function_chain->x_named_label_uses
181 #define local_names cp_function_chain->x_local_names
183 /* A list of objects which have constructors or destructors
184 which reside in the global scope. The decl is stored in
185 the TREE_VALUE slot and the initializer is stored
186 in the TREE_PURPOSE slot. */
187 tree static_aggregates;
189 /* -- end of C++ */
191 /* A node for the integer constants 2, and 3. */
193 tree integer_two_node, integer_three_node;
195 /* A list of all LABEL_DECLs in the function that have names. Here so
196 we can clear out their names' definitions at the end of the
197 function, and so we can check the validity of jumps to these labels. */
199 struct named_label_list GTY(())
201 struct cp_binding_level *binding_level;
202 tree names_in_scope;
203 tree old_value;
204 tree label_decl;
205 tree bad_decls;
206 struct named_label_list *next;
207 unsigned int in_try_scope : 1;
208 unsigned int in_catch_scope : 1;
211 #define named_labels cp_function_chain->x_named_labels
213 /* The number of function bodies which we are currently processing.
214 (Zero if we are at namespace scope, one inside the body of a
215 function, two inside the body of a function in a local class, etc.) */
216 int function_depth;
218 /* States indicating how grokdeclarator() should handle declspecs marked
219 with __attribute__((deprecated)). An object declared as
220 __attribute__((deprecated)) suppresses warnings of uses of other
221 deprecated items. */
223 enum deprecated_states {
224 DEPRECATED_NORMAL,
225 DEPRECATED_SUPPRESS
228 static enum deprecated_states deprecated_state = DEPRECATED_NORMAL;
231 /* A TREE_LIST of VAR_DECLs. The TREE_PURPOSE is a RECORD_TYPE or
232 UNION_TYPE; the TREE_VALUE is a VAR_DECL with that type. At the
233 time the VAR_DECL was declared, the type was incomplete. */
235 static GTY(()) tree incomplete_vars;
237 /* Returns the kind of template specialization we are currently
238 processing, given that it's declaration contained N_CLASS_SCOPES
239 explicit scope qualifications. */
241 tmpl_spec_kind
242 current_tmpl_spec_kind (int n_class_scopes)
244 int n_template_parm_scopes = 0;
245 int seen_specialization_p = 0;
246 int innermost_specialization_p = 0;
247 struct cp_binding_level *b;
249 /* Scan through the template parameter scopes. */
250 for (b = current_binding_level;
251 b->kind == sk_template_parms;
252 b = b->level_chain)
254 /* If we see a specialization scope inside a parameter scope,
255 then something is wrong. That corresponds to a declaration
256 like:
258 template <class T> template <> ...
260 which is always invalid since [temp.expl.spec] forbids the
261 specialization of a class member template if the enclosing
262 class templates are not explicitly specialized as well. */
263 if (b->explicit_spec_p)
265 if (n_template_parm_scopes == 0)
266 innermost_specialization_p = 1;
267 else
268 seen_specialization_p = 1;
270 else if (seen_specialization_p == 1)
271 return tsk_invalid_member_spec;
273 ++n_template_parm_scopes;
276 /* Handle explicit instantiations. */
277 if (processing_explicit_instantiation)
279 if (n_template_parm_scopes != 0)
280 /* We've seen a template parameter list during an explicit
281 instantiation. For example:
283 template <class T> template void f(int);
285 This is erroneous. */
286 return tsk_invalid_expl_inst;
287 else
288 return tsk_expl_inst;
291 if (n_template_parm_scopes < n_class_scopes)
292 /* We've not seen enough template headers to match all the
293 specialized classes present. For example:
295 template <class T> void R<T>::S<T>::f(int);
297 This is invalid; there needs to be one set of template
298 parameters for each class. */
299 return tsk_insufficient_parms;
300 else if (n_template_parm_scopes == n_class_scopes)
301 /* We're processing a non-template declaration (even though it may
302 be a member of a template class.) For example:
304 template <class T> void S<T>::f(int);
306 The `class T' maches the `S<T>', leaving no template headers
307 corresponding to the `f'. */
308 return tsk_none;
309 else if (n_template_parm_scopes > n_class_scopes + 1)
310 /* We've got too many template headers. For example:
312 template <> template <class T> void f (T);
314 There need to be more enclosing classes. */
315 return tsk_excessive_parms;
316 else
317 /* This must be a template. It's of the form:
319 template <class T> template <class U> void S<T>::f(U);
321 This is a specialization if the innermost level was a
322 specialization; otherwise it's just a definition of the
323 template. */
324 return innermost_specialization_p ? tsk_expl_spec : tsk_template;
327 /* Exit the current scope. */
329 void
330 finish_scope (void)
332 poplevel (0, 0, 0);
335 /* When a label goes out of scope, check to see if that label was used
336 in a valid manner, and issue any appropriate warnings or errors. */
338 static void
339 pop_label (tree label, tree old_value)
341 if (!processing_template_decl)
343 if (DECL_INITIAL (label) == NULL_TREE)
345 location_t location;
347 error ("label %q+D used but not defined", label);
348 #ifdef USE_MAPPED_LOCATION
349 location = input_location; /* FIXME want (input_filename, (line)0) */
350 #else
351 location.file = input_filename;
352 location.line = 0;
353 #endif
354 /* Avoid crashing later. */
355 define_label (location, DECL_NAME (label));
357 else if (warn_unused_label && !TREE_USED (label))
358 warning (0, "label %q+D defined but not used", label);
361 SET_IDENTIFIER_LABEL_VALUE (DECL_NAME (label), old_value);
364 /* At the end of a function, all labels declared within the function
365 go out of scope. BLOCK is the top-level block for the
366 function. */
368 static void
369 pop_labels (tree block)
371 struct named_label_list *link;
373 /* Clear out the definitions of all label names, since their scopes
374 end here. */
375 for (link = named_labels; link; link = link->next)
377 pop_label (link->label_decl, link->old_value);
378 /* Put the labels into the "variables" of the top-level block,
379 so debugger can see them. */
380 TREE_CHAIN (link->label_decl) = BLOCK_VARS (block);
381 BLOCK_VARS (block) = link->label_decl;
384 named_labels = NULL;
387 /* The following two routines are used to interface to Objective-C++.
388 The binding level is purposely treated as an opaque type. */
390 void *
391 objc_get_current_scope (void)
393 return current_binding_level;
396 /* The following routine is used by the NeXT-style SJLJ exceptions;
397 variables get marked 'volatile' so as to not be clobbered by
398 _setjmp()/_longjmp() calls. All variables in the current scope,
399 as well as parent scopes up to (but not including) ENCLOSING_BLK
400 shall be thusly marked. */
402 void
403 objc_mark_locals_volatile (void *enclosing_blk)
405 struct cp_binding_level *scope;
407 for (scope = current_binding_level;
408 scope && scope != enclosing_blk;
409 scope = scope->level_chain)
411 tree decl;
413 for (decl = scope->names; decl; decl = TREE_CHAIN (decl))
414 objc_volatilize_decl (decl);
416 /* Do not climb up past the current function. */
417 if (scope->kind == sk_function_parms)
418 break;
422 /* Exit a binding level.
423 Pop the level off, and restore the state of the identifier-decl mappings
424 that were in effect when this level was entered.
426 If KEEP == 1, this level had explicit declarations, so
427 and create a "block" (a BLOCK node) for the level
428 to record its declarations and subblocks for symbol table output.
430 If FUNCTIONBODY is nonzero, this level is the body of a function,
431 so create a block as if KEEP were set and also clear out all
432 label names.
434 If REVERSE is nonzero, reverse the order of decls before putting
435 them into the BLOCK. */
437 tree
438 poplevel (int keep, int reverse, int functionbody)
440 tree link;
441 /* The chain of decls was accumulated in reverse order.
442 Put it into forward order, just for cleanliness. */
443 tree decls;
444 int tmp = functionbody;
445 int real_functionbody;
446 tree subblocks;
447 tree block;
448 tree decl;
449 int leaving_for_scope;
450 scope_kind kind;
452 timevar_push (TV_NAME_LOOKUP);
453 restart:
455 block = NULL_TREE;
457 gcc_assert (current_binding_level->kind != sk_class);
459 real_functionbody = (current_binding_level->kind == sk_cleanup
460 ? ((functionbody = 0), tmp) : functionbody);
461 subblocks = functionbody >= 0 ? current_binding_level->blocks : 0;
463 gcc_assert (!VEC_length(cp_class_binding,
464 current_binding_level->class_shadowed));
466 /* We used to use KEEP == 2 to indicate that the new block should go
467 at the beginning of the list of blocks at this binding level,
468 rather than the end. This hack is no longer used. */
469 gcc_assert (keep == 0 || keep == 1);
471 if (current_binding_level->keep)
472 keep = 1;
474 /* Any uses of undefined labels, and any defined labels, now operate
475 under constraints of next binding contour. */
476 if (cfun && !functionbody)
478 struct cp_binding_level *level_chain;
479 level_chain = current_binding_level->level_chain;
480 if (level_chain)
482 struct named_label_use_list *uses;
483 struct named_label_list *labels;
484 for (labels = named_labels; labels; labels = labels->next)
485 if (labels->binding_level == current_binding_level)
487 tree decl;
488 if (current_binding_level->kind == sk_try)
489 labels->in_try_scope = 1;
490 if (current_binding_level->kind == sk_catch)
491 labels->in_catch_scope = 1;
492 for (decl = labels->names_in_scope; decl;
493 decl = TREE_CHAIN (decl))
494 if (decl_jump_unsafe (decl))
495 labels->bad_decls = tree_cons (NULL_TREE, decl,
496 labels->bad_decls);
497 labels->binding_level = level_chain;
498 labels->names_in_scope = level_chain->names;
501 for (uses = named_label_uses; uses; uses = uses->next)
502 if (uses->binding_level == current_binding_level)
504 uses->binding_level = level_chain;
505 uses->names_in_scope = level_chain->names;
510 /* Get the decls in the order they were written.
511 Usually current_binding_level->names is in reverse order.
512 But parameter decls were previously put in forward order. */
514 if (reverse)
515 current_binding_level->names
516 = decls = nreverse (current_binding_level->names);
517 else
518 decls = current_binding_level->names;
520 /* If there were any declarations or structure tags in that level,
521 or if this level is a function body,
522 create a BLOCK to record them for the life of this function. */
523 block = NULL_TREE;
524 if (keep == 1 || functionbody)
525 block = make_node (BLOCK);
526 if (block != NULL_TREE)
528 BLOCK_VARS (block) = decls;
529 BLOCK_SUBBLOCKS (block) = subblocks;
532 /* In each subblock, record that this is its superior. */
533 if (keep >= 0)
534 for (link = subblocks; link; link = TREE_CHAIN (link))
535 BLOCK_SUPERCONTEXT (link) = block;
537 /* We still support the old for-scope rules, whereby the variables
538 in a for-init statement were in scope after the for-statement
539 ended. We only use the new rules if flag_new_for_scope is
540 nonzero. */
541 leaving_for_scope
542 = current_binding_level->kind == sk_for && flag_new_for_scope == 1;
544 /* Before we remove the declarations first check for unused variables. */
545 if (warn_unused_variable
546 && !processing_template_decl)
547 for (decl = getdecls (); decl; decl = TREE_CHAIN (decl))
548 if (TREE_CODE (decl) == VAR_DECL
549 && ! TREE_USED (decl)
550 && ! DECL_IN_SYSTEM_HEADER (decl)
551 && DECL_NAME (decl) && ! DECL_ARTIFICIAL (decl))
552 warning (0, "unused variable %q+D", decl);
554 /* Remove declarations for all the DECLs in this level. */
555 for (link = decls; link; link = TREE_CHAIN (link))
557 if (leaving_for_scope && TREE_CODE (link) == VAR_DECL
558 && DECL_NAME (link))
560 tree name = DECL_NAME (link);
561 cxx_binding *ob;
562 tree ns_binding;
564 ob = outer_binding (name,
565 IDENTIFIER_BINDING (name),
566 /*class_p=*/true);
567 if (!ob)
568 ns_binding = IDENTIFIER_NAMESPACE_VALUE (name);
569 else
570 ns_binding = NULL_TREE;
572 if (ob && ob->scope == current_binding_level->level_chain)
573 /* We have something like:
575 int i;
576 for (int i; ;);
578 and we are leaving the `for' scope. There's no reason to
579 keep the binding of the inner `i' in this case. */
580 pop_binding (name, link);
581 else if ((ob && (TREE_CODE (ob->value) == TYPE_DECL))
582 || (ns_binding && TREE_CODE (ns_binding) == TYPE_DECL))
583 /* Here, we have something like:
585 typedef int I;
587 void f () {
588 for (int I; ;);
591 We must pop the for-scope binding so we know what's a
592 type and what isn't. */
593 pop_binding (name, link);
594 else
596 /* Mark this VAR_DECL as dead so that we can tell we left it
597 there only for backward compatibility. */
598 DECL_DEAD_FOR_LOCAL (link) = 1;
600 /* Keep track of what should have happened when we
601 popped the binding. */
602 if (ob && ob->value)
604 SET_DECL_SHADOWED_FOR_VAR (link, ob->value);
605 DECL_HAS_SHADOWED_FOR_VAR_P (link) = 1;
608 /* Add it to the list of dead variables in the next
609 outermost binding to that we can remove these when we
610 leave that binding. */
611 current_binding_level->level_chain->dead_vars_from_for
612 = tree_cons (NULL_TREE, link,
613 current_binding_level->level_chain->
614 dead_vars_from_for);
616 /* Although we don't pop the cxx_binding, we do clear
617 its SCOPE since the scope is going away now. */
618 IDENTIFIER_BINDING (name)->scope
619 = current_binding_level->level_chain;
622 else
624 tree name;
626 /* Remove the binding. */
627 decl = link;
629 if (TREE_CODE (decl) == TREE_LIST)
630 decl = TREE_VALUE (decl);
631 name = decl;
633 if (TREE_CODE (name) == OVERLOAD)
634 name = OVL_FUNCTION (name);
636 gcc_assert (DECL_P (name));
637 pop_binding (DECL_NAME (name), decl);
641 /* Remove declarations for any `for' variables from inner scopes
642 that we kept around. */
643 for (link = current_binding_level->dead_vars_from_for;
644 link; link = TREE_CHAIN (link))
645 pop_binding (DECL_NAME (TREE_VALUE (link)), TREE_VALUE (link));
647 /* Restore the IDENTIFIER_TYPE_VALUEs. */
648 for (link = current_binding_level->type_shadowed;
649 link; link = TREE_CHAIN (link))
650 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (link), TREE_VALUE (link));
652 /* Restore the IDENTIFIER_LABEL_VALUEs for local labels. */
653 for (link = current_binding_level->shadowed_labels;
654 link;
655 link = TREE_CHAIN (link))
656 pop_label (TREE_VALUE (link), TREE_PURPOSE (link));
658 /* There may be OVERLOADs (wrapped in TREE_LISTs) on the BLOCK_VARs
659 list if a `using' declaration put them there. The debugging
660 back-ends won't understand OVERLOAD, so we remove them here.
661 Because the BLOCK_VARS are (temporarily) shared with
662 CURRENT_BINDING_LEVEL->NAMES we must do this fixup after we have
663 popped all the bindings. */
664 if (block)
666 tree* d;
668 for (d = &BLOCK_VARS (block); *d; )
670 if (TREE_CODE (*d) == TREE_LIST)
671 *d = TREE_CHAIN (*d);
672 else
673 d = &TREE_CHAIN (*d);
677 /* If the level being exited is the top level of a function,
678 check over all the labels. */
679 if (functionbody)
681 /* Since this is the top level block of a function, the vars are
682 the function's parameters. Don't leave them in the BLOCK
683 because they are found in the FUNCTION_DECL instead. */
684 BLOCK_VARS (block) = 0;
685 pop_labels (block);
688 kind = current_binding_level->kind;
689 if (kind == sk_cleanup)
691 tree stmt;
693 /* If this is a temporary binding created for a cleanup, then we'll
694 have pushed a statement list level. Pop that, create a new
695 BIND_EXPR for the block, and insert it into the stream. */
696 stmt = pop_stmt_list (current_binding_level->statement_list);
697 stmt = c_build_bind_expr (block, stmt);
698 add_stmt (stmt);
701 leave_scope ();
702 if (functionbody)
703 DECL_INITIAL (current_function_decl) = block;
704 else if (block)
705 current_binding_level->blocks
706 = chainon (current_binding_level->blocks, block);
708 /* If we did not make a block for the level just exited,
709 any blocks made for inner levels
710 (since they cannot be recorded as subblocks in that level)
711 must be carried forward so they will later become subblocks
712 of something else. */
713 else if (subblocks)
714 current_binding_level->blocks
715 = chainon (current_binding_level->blocks, subblocks);
717 /* Each and every BLOCK node created here in `poplevel' is important
718 (e.g. for proper debugging information) so if we created one
719 earlier, mark it as "used". */
720 if (block)
721 TREE_USED (block) = 1;
723 /* All temporary bindings created for cleanups are popped silently. */
724 if (kind == sk_cleanup)
725 goto restart;
727 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, block);
730 /* Insert BLOCK at the end of the list of subblocks of the
731 current binding level. This is used when a BIND_EXPR is expanded,
732 to handle the BLOCK node inside the BIND_EXPR. */
734 void
735 insert_block (tree block)
737 TREE_USED (block) = 1;
738 current_binding_level->blocks
739 = chainon (current_binding_level->blocks, block);
742 /* Walk all the namespaces contained NAMESPACE, including NAMESPACE
743 itself, calling F for each. The DATA is passed to F as well. */
745 static int
746 walk_namespaces_r (tree namespace, walk_namespaces_fn f, void* data)
748 int result = 0;
749 tree current = NAMESPACE_LEVEL (namespace)->namespaces;
751 result |= (*f) (namespace, data);
753 for (; current; current = TREE_CHAIN (current))
754 result |= walk_namespaces_r (current, f, data);
756 return result;
759 /* Walk all the namespaces, calling F for each. The DATA is passed to
760 F as well. */
763 walk_namespaces (walk_namespaces_fn f, void* data)
765 return walk_namespaces_r (global_namespace, f, data);
768 /* Call wrapup_globals_declarations for the globals in NAMESPACE. If
769 DATA is non-NULL, this is the last time we will call
770 wrapup_global_declarations for this NAMESPACE. */
773 wrapup_globals_for_namespace (tree namespace, void* data)
775 struct cp_binding_level *level = NAMESPACE_LEVEL (namespace);
776 VEC(tree,gc) *statics = level->static_decls;
777 tree *vec = VEC_address (tree, statics);
778 int len = VEC_length (tree, statics);
779 int last_time = (data != 0);
781 if (last_time)
783 check_global_declarations (vec, len);
784 emit_debug_global_declarations (vec, len);
785 return 0;
788 /* Write out any globals that need to be output. */
789 return wrapup_global_declarations (vec, len);
793 /* In C++, you don't have to write `struct S' to refer to `S'; you
794 can just use `S'. We accomplish this by creating a TYPE_DECL as
795 if the user had written `typedef struct S S'. Create and return
796 the TYPE_DECL for TYPE. */
798 tree
799 create_implicit_typedef (tree name, tree type)
801 tree decl;
803 decl = build_decl (TYPE_DECL, name, type);
804 DECL_ARTIFICIAL (decl) = 1;
805 /* There are other implicit type declarations, like the one *within*
806 a class that allows you to write `S::S'. We must distinguish
807 amongst these. */
808 SET_DECL_IMPLICIT_TYPEDEF_P (decl);
809 TYPE_NAME (type) = decl;
811 return decl;
814 /* Remember a local name for name-mangling purposes. */
816 static void
817 push_local_name (tree decl)
819 size_t i, nelts;
820 tree t, name;
822 timevar_push (TV_NAME_LOOKUP);
824 name = DECL_NAME (decl);
826 nelts = VEC_length (tree, local_names);
827 for (i = 0; i < nelts; i++)
829 t = VEC_index (tree, local_names, i);
830 if (DECL_NAME (t) == name)
832 if (!DECL_LANG_SPECIFIC (decl))
833 retrofit_lang_decl (decl);
834 DECL_LANG_SPECIFIC (decl)->decl_flags.u2sel = 1;
835 if (DECL_LANG_SPECIFIC (t))
836 DECL_DISCRIMINATOR (decl) = DECL_DISCRIMINATOR (t) + 1;
837 else
838 DECL_DISCRIMINATOR (decl) = 1;
840 VEC_replace (tree, local_names, i, decl);
841 timevar_pop (TV_NAME_LOOKUP);
842 return;
846 VEC_safe_push (tree, gc, local_names, decl);
847 timevar_pop (TV_NAME_LOOKUP);
850 /* Subroutine of duplicate_decls: return truthvalue of whether
851 or not types of these decls match.
853 For C++, we must compare the parameter list so that `int' can match
854 `int&' in a parameter position, but `int&' is not confused with
855 `const int&'. */
858 decls_match (tree newdecl, tree olddecl)
860 int types_match;
862 if (newdecl == olddecl)
863 return 1;
865 if (TREE_CODE (newdecl) != TREE_CODE (olddecl))
866 /* If the two DECLs are not even the same kind of thing, we're not
867 interested in their types. */
868 return 0;
870 if (TREE_CODE (newdecl) == FUNCTION_DECL)
872 tree f1 = TREE_TYPE (newdecl);
873 tree f2 = TREE_TYPE (olddecl);
874 tree p1 = TYPE_ARG_TYPES (f1);
875 tree p2 = TYPE_ARG_TYPES (f2);
877 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
878 && ! (DECL_EXTERN_C_P (newdecl)
879 && DECL_EXTERN_C_P (olddecl)))
880 return 0;
882 if (TREE_CODE (f1) != TREE_CODE (f2))
883 return 0;
885 if (same_type_p (TREE_TYPE (f1), TREE_TYPE (f2)))
887 if (p2 == NULL_TREE && DECL_EXTERN_C_P (olddecl)
888 && (DECL_BUILT_IN (olddecl)
889 #ifndef NO_IMPLICIT_EXTERN_C
890 || (DECL_IN_SYSTEM_HEADER (newdecl) && !DECL_CLASS_SCOPE_P (newdecl))
891 || (DECL_IN_SYSTEM_HEADER (olddecl) && !DECL_CLASS_SCOPE_P (olddecl))
892 #endif
895 types_match = self_promoting_args_p (p1);
896 if (p1 == void_list_node)
897 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
899 #ifndef NO_IMPLICIT_EXTERN_C
900 else if (p1 == NULL_TREE
901 && (DECL_EXTERN_C_P (olddecl)
902 && DECL_IN_SYSTEM_HEADER (olddecl)
903 && !DECL_CLASS_SCOPE_P (olddecl))
904 && (DECL_EXTERN_C_P (newdecl)
905 && DECL_IN_SYSTEM_HEADER (newdecl)
906 && !DECL_CLASS_SCOPE_P (newdecl)))
908 types_match = self_promoting_args_p (p2);
909 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
911 #endif
912 else
913 types_match = compparms (p1, p2);
915 else
916 types_match = 0;
918 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
920 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl))
921 != TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)))
922 return 0;
924 if (!comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
925 DECL_TEMPLATE_PARMS (olddecl)))
926 return 0;
928 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
929 types_match = same_type_p (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl)),
930 TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl)));
931 else
932 types_match = decls_match (DECL_TEMPLATE_RESULT (olddecl),
933 DECL_TEMPLATE_RESULT (newdecl));
935 else
937 /* Need to check scope for variable declaration (VAR_DECL).
938 For typedef (TYPE_DECL), scope is ignored. */
939 if (TREE_CODE (newdecl) == VAR_DECL
940 && CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
941 /* [dcl.link]
942 Two declarations for an object with C language linkage
943 with the same name (ignoring the namespace that qualify
944 it) that appear in different namespace scopes refer to
945 the same object. */
946 && !(DECL_EXTERN_C_P (olddecl) && DECL_EXTERN_C_P (newdecl)))
947 return 0;
949 if (TREE_TYPE (newdecl) == error_mark_node)
950 types_match = TREE_TYPE (olddecl) == error_mark_node;
951 else if (TREE_TYPE (olddecl) == NULL_TREE)
952 types_match = TREE_TYPE (newdecl) == NULL_TREE;
953 else if (TREE_TYPE (newdecl) == NULL_TREE)
954 types_match = 0;
955 else
956 types_match = comptypes (TREE_TYPE (newdecl),
957 TREE_TYPE (olddecl),
958 COMPARE_REDECLARATION);
961 return types_match;
964 /* If NEWDECL is `static' and an `extern' was seen previously,
965 warn about it. OLDDECL is the previous declaration.
967 Note that this does not apply to the C++ case of declaring
968 a variable `extern const' and then later `const'.
970 Don't complain about built-in functions, since they are beyond
971 the user's control. */
973 void
974 warn_extern_redeclared_static (tree newdecl, tree olddecl)
976 tree name;
978 if (TREE_CODE (newdecl) == TYPE_DECL
979 || TREE_CODE (newdecl) == TEMPLATE_DECL
980 || TREE_CODE (newdecl) == CONST_DECL
981 || TREE_CODE (newdecl) == NAMESPACE_DECL)
982 return;
984 /* Don't get confused by static member functions; that's a different
985 use of `static'. */
986 if (TREE_CODE (newdecl) == FUNCTION_DECL
987 && DECL_STATIC_FUNCTION_P (newdecl))
988 return;
990 /* If the old declaration was `static', or the new one isn't, then
991 then everything is OK. */
992 if (DECL_THIS_STATIC (olddecl) || !DECL_THIS_STATIC (newdecl))
993 return;
995 /* It's OK to declare a builtin function as `static'. */
996 if (TREE_CODE (olddecl) == FUNCTION_DECL
997 && DECL_ARTIFICIAL (olddecl))
998 return;
1000 name = DECL_ASSEMBLER_NAME (newdecl);
1001 pedwarn ("%qD was declared %<extern%> and later %<static%>", newdecl);
1002 pedwarn ("previous declaration of %q+D", olddecl);
1005 /* NEW_DECL is a redeclaration of OLD_DECL; both are functions or
1006 function templates. If their exception specifications do not
1007 match, issue an a diagnostic. */
1009 static void
1010 check_redeclaration_exception_specification (tree new_decl,
1011 tree old_decl)
1013 tree new_type;
1014 tree old_type;
1015 tree new_exceptions;
1016 tree old_exceptions;
1018 new_type = TREE_TYPE (new_decl);
1019 new_exceptions = TYPE_RAISES_EXCEPTIONS (new_type);
1020 old_type = TREE_TYPE (old_decl);
1021 old_exceptions = TYPE_RAISES_EXCEPTIONS (old_type);
1023 /* [except.spec]
1025 If any declaration of a function has an exception-specification,
1026 all declarations, including the definition and an explicit
1027 specialization, of that function shall have an
1028 exception-specification with the same set of type-ids. */
1029 if ((pedantic || ! DECL_IN_SYSTEM_HEADER (old_decl))
1030 && ! DECL_IS_BUILTIN (old_decl)
1031 && flag_exceptions
1032 && !comp_except_specs (new_exceptions, old_exceptions,
1033 /*exact=*/true))
1035 error ("declaration of %qF throws different exceptions", new_decl);
1036 error ("from previous declaration %q+F", old_decl);
1040 /* If NEWDECL is a redeclaration of OLDDECL, merge the declarations.
1041 If the redeclaration is invalid, a diagnostic is issued, and the
1042 error_mark_node is returned. Otherwise, OLDDECL is returned.
1044 If NEWDECL is not a redeclaration of OLDDECL, NULL_TREE is
1045 returned.
1047 NEWDECL_IS_FRIEND is true if NEWDECL was declared as a friend. */
1049 tree
1050 duplicate_decls (tree newdecl, tree olddecl, bool newdecl_is_friend)
1052 unsigned olddecl_uid = DECL_UID (olddecl);
1053 int olddecl_friend = 0, types_match = 0, hidden_friend = 0;
1054 int new_defines_function = 0;
1055 tree new_template;
1057 if (newdecl == olddecl)
1058 return olddecl;
1060 types_match = decls_match (newdecl, olddecl);
1062 /* If either the type of the new decl or the type of the old decl is an
1063 error_mark_node, then that implies that we have already issued an
1064 error (earlier) for some bogus type specification, and in that case,
1065 it is rather pointless to harass the user with yet more error message
1066 about the same declaration, so just pretend the types match here. */
1067 if (TREE_TYPE (newdecl) == error_mark_node
1068 || TREE_TYPE (olddecl) == error_mark_node)
1069 types_match = 1;
1071 if (DECL_P (olddecl)
1072 && TREE_CODE (newdecl) == FUNCTION_DECL
1073 && TREE_CODE (olddecl) == FUNCTION_DECL
1074 && (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl)))
1076 if (DECL_DECLARED_INLINE_P (newdecl)
1077 && DECL_UNINLINABLE (newdecl)
1078 && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
1079 /* Already warned elsewhere. */;
1080 else if (DECL_DECLARED_INLINE_P (olddecl)
1081 && DECL_UNINLINABLE (olddecl)
1082 && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
1083 /* Already warned. */;
1084 else if (DECL_DECLARED_INLINE_P (newdecl)
1085 && DECL_UNINLINABLE (olddecl)
1086 && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
1088 warning (OPT_Wattributes, "function %q+D redeclared as inline",
1089 newdecl);
1090 warning (OPT_Wattributes, "previous declaration of %q+D "
1091 "with attribute noinline", olddecl);
1093 else if (DECL_DECLARED_INLINE_P (olddecl)
1094 && DECL_UNINLINABLE (newdecl)
1095 && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
1097 warning (OPT_Wattributes, "function %q+D redeclared with "
1098 "attribute noinline", newdecl);
1099 warning (OPT_Wattributes, "previous declaration of %q+D was inline",
1100 olddecl);
1104 /* Check for redeclaration and other discrepancies. */
1105 if (TREE_CODE (olddecl) == FUNCTION_DECL
1106 && DECL_ARTIFICIAL (olddecl))
1108 gcc_assert (!DECL_HIDDEN_FRIEND_P (olddecl));
1109 if (TREE_CODE (newdecl) != FUNCTION_DECL)
1111 /* Avoid warnings redeclaring built-ins which have not been
1112 explicitly declared. */
1113 if (DECL_ANTICIPATED (olddecl))
1114 return NULL_TREE;
1116 /* If you declare a built-in or predefined function name as static,
1117 the old definition is overridden, but optionally warn this was a
1118 bad choice of name. */
1119 if (! TREE_PUBLIC (newdecl))
1121 if (warn_shadow)
1122 warning (0, "shadowing %s function %q#D",
1123 DECL_BUILT_IN (olddecl) ? "built-in" : "library",
1124 olddecl);
1125 /* Discard the old built-in function. */
1126 return NULL_TREE;
1128 /* If the built-in is not ansi, then programs can override
1129 it even globally without an error. */
1130 else if (! DECL_BUILT_IN (olddecl))
1131 warning (0, "library function %q#D redeclared as non-function %q#D",
1132 olddecl, newdecl);
1133 else
1135 error ("declaration of %q#D", newdecl);
1136 error ("conflicts with built-in declaration %q#D",
1137 olddecl);
1139 return NULL_TREE;
1141 else if (!types_match)
1143 /* Avoid warnings redeclaring built-ins which have not been
1144 explicitly declared. */
1145 if (DECL_ANTICIPATED (olddecl))
1147 /* Deal with fileptr_type_node. FILE type is not known
1148 at the time we create the builtins. */
1149 tree t1, t2;
1151 for (t1 = TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1152 t2 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1153 t1 || t2;
1154 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
1155 if (!t1 || !t2)
1156 break;
1157 else if (TREE_VALUE (t2) == fileptr_type_node)
1159 tree t = TREE_VALUE (t1);
1161 if (TREE_CODE (t) == POINTER_TYPE
1162 && TYPE_NAME (TREE_TYPE (t))
1163 && DECL_NAME (TYPE_NAME (TREE_TYPE (t)))
1164 == get_identifier ("FILE")
1165 && compparms (TREE_CHAIN (t1), TREE_CHAIN (t2)))
1167 tree oldargs = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1169 TYPE_ARG_TYPES (TREE_TYPE (olddecl))
1170 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
1171 types_match = decls_match (newdecl, olddecl);
1172 if (types_match)
1173 return duplicate_decls (newdecl, olddecl,
1174 newdecl_is_friend);
1175 TYPE_ARG_TYPES (TREE_TYPE (olddecl)) = oldargs;
1178 else if (! same_type_p (TREE_VALUE (t1), TREE_VALUE (t2)))
1179 break;
1181 else if ((DECL_EXTERN_C_P (newdecl)
1182 && DECL_EXTERN_C_P (olddecl))
1183 || compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1184 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
1186 /* A near match; override the builtin. */
1188 if (TREE_PUBLIC (newdecl))
1190 warning (0, "new declaration %q#D", newdecl);
1191 warning (0, "ambiguates built-in declaration %q#D",
1192 olddecl);
1194 else if (warn_shadow)
1195 warning (0, "shadowing %s function %q#D",
1196 DECL_BUILT_IN (olddecl) ? "built-in" : "library",
1197 olddecl);
1199 else
1200 /* Discard the old built-in function. */
1201 return NULL_TREE;
1203 /* Replace the old RTL to avoid problems with inlining. */
1204 COPY_DECL_RTL (newdecl, olddecl);
1206 /* Even if the types match, prefer the new declarations type for
1207 built-ins which have not been explicitly declared, for
1208 exception lists, etc... */
1209 else if (DECL_ANTICIPATED (olddecl))
1211 tree type = TREE_TYPE (newdecl);
1212 tree attribs = (*targetm.merge_type_attributes)
1213 (TREE_TYPE (olddecl), type);
1215 type = cp_build_type_attribute_variant (type, attribs);
1216 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = type;
1219 /* Whether or not the builtin can throw exceptions has no
1220 bearing on this declarator. */
1221 TREE_NOTHROW (olddecl) = 0;
1223 if (DECL_THIS_STATIC (newdecl) && !DECL_THIS_STATIC (olddecl))
1225 /* If a builtin function is redeclared as `static', merge
1226 the declarations, but make the original one static. */
1227 DECL_THIS_STATIC (olddecl) = 1;
1228 TREE_PUBLIC (olddecl) = 0;
1230 /* Make the old declaration consistent with the new one so
1231 that all remnants of the builtin-ness of this function
1232 will be banished. */
1233 SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
1234 COPY_DECL_RTL (newdecl, olddecl);
1237 else if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
1239 if ((TREE_CODE (olddecl) == TYPE_DECL && DECL_ARTIFICIAL (olddecl)
1240 && TREE_CODE (newdecl) != TYPE_DECL
1241 && ! (TREE_CODE (newdecl) == TEMPLATE_DECL
1242 && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL))
1243 || (TREE_CODE (newdecl) == TYPE_DECL && DECL_ARTIFICIAL (newdecl)
1244 && TREE_CODE (olddecl) != TYPE_DECL
1245 && ! (TREE_CODE (olddecl) == TEMPLATE_DECL
1246 && (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl))
1247 == TYPE_DECL))))
1249 /* We do nothing special here, because C++ does such nasty
1250 things with TYPE_DECLs. Instead, just let the TYPE_DECL
1251 get shadowed, and know that if we need to find a TYPE_DECL
1252 for a given name, we can look in the IDENTIFIER_TYPE_VALUE
1253 slot of the identifier. */
1254 return NULL_TREE;
1257 if ((TREE_CODE (newdecl) == FUNCTION_DECL
1258 && DECL_FUNCTION_TEMPLATE_P (olddecl))
1259 || (TREE_CODE (olddecl) == FUNCTION_DECL
1260 && DECL_FUNCTION_TEMPLATE_P (newdecl)))
1261 return NULL_TREE;
1263 error ("%q#D redeclared as different kind of symbol", newdecl);
1264 if (TREE_CODE (olddecl) == TREE_LIST)
1265 olddecl = TREE_VALUE (olddecl);
1266 error ("previous declaration of %q+#D", olddecl);
1268 return error_mark_node;
1270 else if (!types_match)
1272 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl))
1273 /* These are certainly not duplicate declarations; they're
1274 from different scopes. */
1275 return NULL_TREE;
1277 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1279 /* The name of a class template may not be declared to refer to
1280 any other template, class, function, object, namespace, value,
1281 or type in the same scope. */
1282 if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == TYPE_DECL
1283 || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
1285 error ("declaration of template %q#D", newdecl);
1286 error ("conflicts with previous declaration %q+#D", olddecl);
1288 else if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == FUNCTION_DECL
1289 && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
1290 && compparms (TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl))),
1291 TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl))))
1292 && comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
1293 DECL_TEMPLATE_PARMS (olddecl))
1294 /* Template functions can be disambiguated by
1295 return type. */
1296 && same_type_p (TREE_TYPE (TREE_TYPE (newdecl)),
1297 TREE_TYPE (TREE_TYPE (olddecl))))
1299 error ("new declaration %q#D", newdecl);
1300 error ("ambiguates old declaration %q+#D", olddecl);
1302 return NULL_TREE;
1304 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1306 if (DECL_EXTERN_C_P (newdecl) && DECL_EXTERN_C_P (olddecl))
1308 error ("declaration of C function %q#D conflicts with",
1309 newdecl);
1310 error ("previous declaration %q+#D here", olddecl);
1312 else if (compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1313 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
1315 error ("new declaration %q#D", newdecl);
1316 error ("ambiguates old declaration %q+#D", olddecl);
1318 else
1319 return NULL_TREE;
1321 else
1323 error ("conflicting declaration %q#D", newdecl);
1324 error ("%q+D has a previous declaration as %q#D", olddecl, olddecl);
1325 return error_mark_node;
1328 else if (TREE_CODE (newdecl) == FUNCTION_DECL
1329 && ((DECL_TEMPLATE_SPECIALIZATION (olddecl)
1330 && (!DECL_TEMPLATE_INFO (newdecl)
1331 || (DECL_TI_TEMPLATE (newdecl)
1332 != DECL_TI_TEMPLATE (olddecl))))
1333 || (DECL_TEMPLATE_SPECIALIZATION (newdecl)
1334 && (!DECL_TEMPLATE_INFO (olddecl)
1335 || (DECL_TI_TEMPLATE (olddecl)
1336 != DECL_TI_TEMPLATE (newdecl))))))
1337 /* It's OK to have a template specialization and a non-template
1338 with the same type, or to have specializations of two
1339 different templates with the same type. Note that if one is a
1340 specialization, and the other is an instantiation of the same
1341 template, that we do not exit at this point. That situation
1342 can occur if we instantiate a template class, and then
1343 specialize one of its methods. This situation is valid, but
1344 the declarations must be merged in the usual way. */
1345 return NULL_TREE;
1346 else if (TREE_CODE (newdecl) == FUNCTION_DECL
1347 && ((DECL_TEMPLATE_INSTANTIATION (olddecl)
1348 && !DECL_USE_TEMPLATE (newdecl))
1349 || (DECL_TEMPLATE_INSTANTIATION (newdecl)
1350 && !DECL_USE_TEMPLATE (olddecl))))
1351 /* One of the declarations is a template instantiation, and the
1352 other is not a template at all. That's OK. */
1353 return NULL_TREE;
1354 else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
1356 /* In [namespace.alias] we have:
1358 In a declarative region, a namespace-alias-definition can be
1359 used to redefine a namespace-alias declared in that declarative
1360 region to refer only to the namespace to which it already
1361 refers.
1363 Therefore, if we encounter a second alias directive for the same
1364 alias, we can just ignore the second directive. */
1365 if (DECL_NAMESPACE_ALIAS (newdecl)
1366 && (DECL_NAMESPACE_ALIAS (newdecl)
1367 == DECL_NAMESPACE_ALIAS (olddecl)))
1368 return olddecl;
1369 /* [namespace.alias]
1371 A namespace-name or namespace-alias shall not be declared as
1372 the name of any other entity in the same declarative region.
1373 A namespace-name defined at global scope shall not be
1374 declared as the name of any other entity in any global scope
1375 of the program. */
1376 error ("declaration of namespace %qD conflicts with", newdecl);
1377 error ("previous declaration of namespace %q+D here", olddecl);
1378 return error_mark_node;
1380 else
1382 const char *errmsg = redeclaration_error_message (newdecl, olddecl);
1383 if (errmsg)
1385 error (errmsg, newdecl);
1386 if (DECL_NAME (olddecl) != NULL_TREE)
1387 error ((DECL_INITIAL (olddecl) && namespace_bindings_p ())
1388 ? "%q+#D previously defined here"
1389 : "%q+#D previously declared here", olddecl);
1390 return error_mark_node;
1392 else if (TREE_CODE (olddecl) == FUNCTION_DECL
1393 && DECL_INITIAL (olddecl) != NULL_TREE
1394 && TYPE_ARG_TYPES (TREE_TYPE (olddecl)) == NULL_TREE
1395 && TYPE_ARG_TYPES (TREE_TYPE (newdecl)) != NULL_TREE)
1397 /* Prototype decl follows defn w/o prototype. */
1398 warning (0, "prototype for %q+#D", newdecl);
1399 warning (0, "%Jfollows non-prototype definition here", olddecl);
1401 else if ((TREE_CODE (olddecl) == FUNCTION_DECL
1402 || TREE_CODE (olddecl) == VAR_DECL)
1403 && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl))
1405 /* [dcl.link]
1406 If two declarations of the same function or object
1407 specify different linkage-specifications ..., the program
1408 is ill-formed.... Except for functions with C++ linkage,
1409 a function declaration without a linkage specification
1410 shall not precede the first linkage specification for
1411 that function. A function can be declared without a
1412 linkage specification after an explicit linkage
1413 specification has been seen; the linkage explicitly
1414 specified in the earlier declaration is not affected by
1415 such a function declaration.
1417 DR 563 raises the question why the restrictions on
1418 functions should not also apply to objects. Older
1419 versions of G++ silently ignore the linkage-specification
1420 for this example:
1422 namespace N {
1423 extern int i;
1424 extern "C" int i;
1427 which is clearly wrong. Therefore, we now treat objects
1428 like functions. */
1429 if (current_lang_depth () == 0)
1431 /* There is no explicit linkage-specification, so we use
1432 the linkage from the previous declaration. */
1433 if (!DECL_LANG_SPECIFIC (newdecl))
1434 retrofit_lang_decl (newdecl);
1435 SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
1437 else
1439 error ("previous declaration of %q+#D with %qL linkage",
1440 olddecl, DECL_LANGUAGE (olddecl));
1441 error ("conflicts with new declaration with %qL linkage",
1442 DECL_LANGUAGE (newdecl));
1446 if (DECL_LANG_SPECIFIC (olddecl) && DECL_USE_TEMPLATE (olddecl))
1448 else if (TREE_CODE (olddecl) == FUNCTION_DECL)
1450 tree t1 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1451 tree t2 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
1452 int i = 1;
1454 if (TREE_CODE (TREE_TYPE (newdecl)) == METHOD_TYPE)
1455 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2);
1457 for (; t1 && t1 != void_list_node;
1458 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2), i++)
1459 if (TREE_PURPOSE (t1) && TREE_PURPOSE (t2))
1461 if (1 == simple_cst_equal (TREE_PURPOSE (t1),
1462 TREE_PURPOSE (t2)))
1464 pedwarn ("default argument given for parameter %d of %q#D",
1465 i, newdecl);
1466 pedwarn ("after previous specification in %q+#D", olddecl);
1468 else
1470 error ("default argument given for parameter %d of %q#D",
1471 i, newdecl);
1472 error ("after previous specification in %q+#D",
1473 olddecl);
1477 if (DECL_DECLARED_INLINE_P (newdecl)
1478 && ! DECL_DECLARED_INLINE_P (olddecl)
1479 && TREE_ADDRESSABLE (olddecl) && warn_inline)
1481 warning (0, "%q#D was used before it was declared inline", newdecl);
1482 warning (0, "%Jprevious non-inline declaration here", olddecl);
1487 /* Do not merge an implicit typedef with an explicit one. In:
1489 class A;
1491 typedef class A A __attribute__ ((foo));
1493 the attribute should apply only to the typedef. */
1494 if (TREE_CODE (olddecl) == TYPE_DECL
1495 && (DECL_IMPLICIT_TYPEDEF_P (olddecl)
1496 || DECL_IMPLICIT_TYPEDEF_P (newdecl)))
1497 return NULL_TREE;
1499 /* If new decl is `static' and an `extern' was seen previously,
1500 warn about it. */
1501 warn_extern_redeclared_static (newdecl, olddecl);
1503 /* We have committed to returning 1 at this point. */
1504 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1506 /* Now that functions must hold information normally held
1507 by field decls, there is extra work to do so that
1508 declaration information does not get destroyed during
1509 definition. */
1510 if (DECL_VINDEX (olddecl))
1511 DECL_VINDEX (newdecl) = DECL_VINDEX (olddecl);
1512 if (DECL_CONTEXT (olddecl))
1513 DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
1514 DECL_STATIC_CONSTRUCTOR (newdecl) |= DECL_STATIC_CONSTRUCTOR (olddecl);
1515 DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
1516 DECL_PURE_VIRTUAL_P (newdecl) |= DECL_PURE_VIRTUAL_P (olddecl);
1517 DECL_VIRTUAL_P (newdecl) |= DECL_VIRTUAL_P (olddecl);
1518 DECL_THIS_STATIC (newdecl) |= DECL_THIS_STATIC (olddecl);
1519 if (DECL_OVERLOADED_OPERATOR_P (olddecl) != ERROR_MARK)
1520 SET_OVERLOADED_OPERATOR_CODE
1521 (newdecl, DECL_OVERLOADED_OPERATOR_P (olddecl));
1522 new_defines_function = DECL_INITIAL (newdecl) != NULL_TREE;
1524 /* Optionally warn about more than one declaration for the same
1525 name, but don't warn about a function declaration followed by a
1526 definition. */
1527 if (warn_redundant_decls && ! DECL_ARTIFICIAL (olddecl)
1528 && !(new_defines_function && DECL_INITIAL (olddecl) == NULL_TREE)
1529 /* Don't warn about extern decl followed by definition. */
1530 && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl))
1531 /* Don't warn about friends, let add_friend take care of it. */
1532 && ! (newdecl_is_friend || DECL_FRIEND_P (olddecl)))
1534 warning (0, "redundant redeclaration of %qD in same scope", newdecl);
1535 warning (0, "previous declaration of %q+D", olddecl);
1539 /* Deal with C++: must preserve virtual function table size. */
1540 if (TREE_CODE (olddecl) == TYPE_DECL)
1542 tree newtype = TREE_TYPE (newdecl);
1543 tree oldtype = TREE_TYPE (olddecl);
1545 if (newtype != error_mark_node && oldtype != error_mark_node
1546 && TYPE_LANG_SPECIFIC (newtype) && TYPE_LANG_SPECIFIC (oldtype))
1547 CLASSTYPE_FRIEND_CLASSES (newtype)
1548 = CLASSTYPE_FRIEND_CLASSES (oldtype);
1550 DECL_ORIGINAL_TYPE (newdecl) = DECL_ORIGINAL_TYPE (olddecl);
1553 /* Copy all the DECL_... slots specified in the new decl
1554 except for any that we copy here from the old type. */
1555 DECL_ATTRIBUTES (newdecl)
1556 = (*targetm.merge_decl_attributes) (olddecl, newdecl);
1558 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1560 tree old_result;
1561 tree new_result;
1562 old_result = DECL_TEMPLATE_RESULT (olddecl);
1563 new_result = DECL_TEMPLATE_RESULT (newdecl);
1564 TREE_TYPE (olddecl) = TREE_TYPE (old_result);
1565 DECL_TEMPLATE_SPECIALIZATIONS (olddecl)
1566 = chainon (DECL_TEMPLATE_SPECIALIZATIONS (olddecl),
1567 DECL_TEMPLATE_SPECIALIZATIONS (newdecl));
1569 if (DECL_FUNCTION_TEMPLATE_P (newdecl))
1571 DECL_INLINE (old_result)
1572 |= DECL_INLINE (new_result);
1573 DECL_DECLARED_INLINE_P (old_result)
1574 |= DECL_DECLARED_INLINE_P (new_result);
1575 check_redeclaration_exception_specification (newdecl, olddecl);
1578 /* If the new declaration is a definition, update the file and
1579 line information on the declaration. */
1580 if (DECL_INITIAL (old_result) == NULL_TREE
1581 && DECL_INITIAL (new_result) != NULL_TREE)
1583 DECL_SOURCE_LOCATION (olddecl)
1584 = DECL_SOURCE_LOCATION (old_result)
1585 = DECL_SOURCE_LOCATION (newdecl);
1586 if (DECL_FUNCTION_TEMPLATE_P (newdecl))
1587 DECL_ARGUMENTS (old_result)
1588 = DECL_ARGUMENTS (new_result);
1591 return olddecl;
1594 if (types_match)
1596 /* Automatically handles default parameters. */
1597 tree oldtype = TREE_TYPE (olddecl);
1598 tree newtype;
1600 /* Merge the data types specified in the two decls. */
1601 newtype = merge_types (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
1603 /* If merge_types produces a non-typedef type, just use the old type. */
1604 if (TREE_CODE (newdecl) == TYPE_DECL
1605 && newtype == DECL_ORIGINAL_TYPE (newdecl))
1606 newtype = oldtype;
1608 if (TREE_CODE (newdecl) == VAR_DECL)
1610 DECL_THIS_EXTERN (newdecl) |= DECL_THIS_EXTERN (olddecl);
1611 DECL_INITIALIZED_P (newdecl) |= DECL_INITIALIZED_P (olddecl);
1612 DECL_NONTRIVIALLY_INITIALIZED_P (newdecl)
1613 |= DECL_NONTRIVIALLY_INITIALIZED_P (olddecl);
1614 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (newdecl)
1615 |= DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (olddecl);
1618 /* Do this after calling `merge_types' so that default
1619 parameters don't confuse us. */
1620 else if (TREE_CODE (newdecl) == FUNCTION_DECL)
1621 check_redeclaration_exception_specification (newdecl, olddecl);
1622 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
1624 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1625 check_default_args (newdecl);
1627 /* Lay the type out, unless already done. */
1628 if (! same_type_p (newtype, oldtype)
1629 && TREE_TYPE (newdecl) != error_mark_node
1630 && !(processing_template_decl && uses_template_parms (newdecl)))
1631 layout_type (TREE_TYPE (newdecl));
1633 if ((TREE_CODE (newdecl) == VAR_DECL
1634 || TREE_CODE (newdecl) == PARM_DECL
1635 || TREE_CODE (newdecl) == RESULT_DECL
1636 || TREE_CODE (newdecl) == FIELD_DECL
1637 || TREE_CODE (newdecl) == TYPE_DECL)
1638 && !(processing_template_decl && uses_template_parms (newdecl)))
1639 layout_decl (newdecl, 0);
1641 /* Merge the type qualifiers. */
1642 if (TREE_READONLY (newdecl))
1643 TREE_READONLY (olddecl) = 1;
1644 if (TREE_THIS_VOLATILE (newdecl))
1645 TREE_THIS_VOLATILE (olddecl) = 1;
1646 if (TREE_NOTHROW (newdecl))
1647 TREE_NOTHROW (olddecl) = 1;
1649 /* Merge deprecatedness. */
1650 if (TREE_DEPRECATED (newdecl))
1651 TREE_DEPRECATED (olddecl) = 1;
1653 /* Merge the initialization information. */
1654 if (DECL_INITIAL (newdecl) == NULL_TREE
1655 && DECL_INITIAL (olddecl) != NULL_TREE)
1657 DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
1658 DECL_SOURCE_LOCATION (newdecl) = DECL_SOURCE_LOCATION (olddecl);
1659 if (CAN_HAVE_FULL_LANG_DECL_P (newdecl)
1660 && DECL_LANG_SPECIFIC (newdecl)
1661 && DECL_LANG_SPECIFIC (olddecl))
1663 DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
1664 DECL_STRUCT_FUNCTION (newdecl) = DECL_STRUCT_FUNCTION (olddecl);
1668 /* Merge the section attribute.
1669 We want to issue an error if the sections conflict but that must be
1670 done later in decl_attributes since we are called before attributes
1671 are assigned. */
1672 if (DECL_SECTION_NAME (newdecl) == NULL_TREE)
1673 DECL_SECTION_NAME (newdecl) = DECL_SECTION_NAME (olddecl);
1675 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1677 DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (newdecl)
1678 |= DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (olddecl);
1679 DECL_NO_LIMIT_STACK (newdecl) |= DECL_NO_LIMIT_STACK (olddecl);
1680 TREE_THIS_VOLATILE (newdecl) |= TREE_THIS_VOLATILE (olddecl);
1681 TREE_READONLY (newdecl) |= TREE_READONLY (olddecl);
1682 TREE_NOTHROW (newdecl) |= TREE_NOTHROW (olddecl);
1683 DECL_IS_MALLOC (newdecl) |= DECL_IS_MALLOC (olddecl);
1684 DECL_IS_PURE (newdecl) |= DECL_IS_PURE (olddecl);
1685 /* Keep the old RTL. */
1686 COPY_DECL_RTL (olddecl, newdecl);
1688 else if (TREE_CODE (newdecl) == VAR_DECL
1689 && (DECL_SIZE (olddecl) || !DECL_SIZE (newdecl)))
1691 /* Keep the old RTL. We cannot keep the old RTL if the old
1692 declaration was for an incomplete object and the new
1693 declaration is not since many attributes of the RTL will
1694 change. */
1695 COPY_DECL_RTL (olddecl, newdecl);
1698 /* If cannot merge, then use the new type and qualifiers,
1699 and don't preserve the old rtl. */
1700 else
1702 /* Clean out any memory we had of the old declaration. */
1703 tree oldstatic = value_member (olddecl, static_aggregates);
1704 if (oldstatic)
1705 TREE_VALUE (oldstatic) = error_mark_node;
1707 TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
1708 TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
1709 TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
1710 TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
1713 /* Merge the storage class information. */
1714 merge_weak (newdecl, olddecl);
1716 DECL_ONE_ONLY (newdecl) |= DECL_ONE_ONLY (olddecl);
1717 DECL_DEFER_OUTPUT (newdecl) |= DECL_DEFER_OUTPUT (olddecl);
1718 TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
1719 TREE_STATIC (olddecl) = TREE_STATIC (newdecl) |= TREE_STATIC (olddecl);
1720 if (! DECL_EXTERNAL (olddecl))
1721 DECL_EXTERNAL (newdecl) = 0;
1723 new_template = NULL_TREE;
1724 if (DECL_LANG_SPECIFIC (newdecl) && DECL_LANG_SPECIFIC (olddecl))
1726 DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl);
1727 DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl);
1728 DECL_COMDAT (newdecl) |= DECL_COMDAT (olddecl);
1729 DECL_TEMPLATE_INSTANTIATED (newdecl)
1730 |= DECL_TEMPLATE_INSTANTIATED (olddecl);
1732 /* If the OLDDECL is an instantiation and/or specialization,
1733 then the NEWDECL must be too. But, it may not yet be marked
1734 as such if the caller has created NEWDECL, but has not yet
1735 figured out that it is a redeclaration. */
1736 if (!DECL_USE_TEMPLATE (newdecl))
1737 DECL_USE_TEMPLATE (newdecl) = DECL_USE_TEMPLATE (olddecl);
1739 /* Don't really know how much of the language-specific
1740 values we should copy from old to new. */
1741 DECL_IN_AGGR_P (newdecl) = DECL_IN_AGGR_P (olddecl);
1742 DECL_LANG_SPECIFIC (newdecl)->decl_flags.u2 =
1743 DECL_LANG_SPECIFIC (olddecl)->decl_flags.u2;
1744 DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl);
1745 DECL_REPO_AVAILABLE_P (newdecl) = DECL_REPO_AVAILABLE_P (olddecl);
1746 if (DECL_TEMPLATE_INFO (newdecl))
1747 new_template = DECL_TI_TEMPLATE (newdecl);
1748 DECL_TEMPLATE_INFO (newdecl) = DECL_TEMPLATE_INFO (olddecl);
1749 DECL_INITIALIZED_IN_CLASS_P (newdecl)
1750 |= DECL_INITIALIZED_IN_CLASS_P (olddecl);
1751 olddecl_friend = DECL_FRIEND_P (olddecl);
1752 hidden_friend = (DECL_ANTICIPATED (olddecl)
1753 && DECL_HIDDEN_FRIEND_P (olddecl)
1754 && newdecl_is_friend);
1756 /* Only functions have DECL_BEFRIENDING_CLASSES. */
1757 if (TREE_CODE (newdecl) == FUNCTION_DECL
1758 || DECL_FUNCTION_TEMPLATE_P (newdecl))
1760 DECL_BEFRIENDING_CLASSES (newdecl)
1761 = chainon (DECL_BEFRIENDING_CLASSES (newdecl),
1762 DECL_BEFRIENDING_CLASSES (olddecl));
1763 /* DECL_THUNKS is only valid for virtual functions,
1764 otherwise it is a DECL_FRIEND_CONTEXT. */
1765 if (DECL_VIRTUAL_P (newdecl))
1766 DECL_THUNKS (newdecl) = DECL_THUNKS (olddecl);
1770 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1772 if (DECL_TEMPLATE_INSTANTIATION (olddecl)
1773 && !DECL_TEMPLATE_INSTANTIATION (newdecl))
1775 /* If newdecl is not a specialization, then it is not a
1776 template-related function at all. And that means that we
1777 should have exited above, returning 0. */
1778 gcc_assert (DECL_TEMPLATE_SPECIALIZATION (newdecl));
1780 if (TREE_USED (olddecl))
1781 /* From [temp.expl.spec]:
1783 If a template, a member template or the member of a class
1784 template is explicitly specialized then that
1785 specialization shall be declared before the first use of
1786 that specialization that would cause an implicit
1787 instantiation to take place, in every translation unit in
1788 which such a use occurs. */
1789 error ("explicit specialization of %qD after first use",
1790 olddecl);
1792 SET_DECL_TEMPLATE_SPECIALIZATION (olddecl);
1794 /* [temp.expl.spec/14] We don't inline explicit specialization
1795 just because the primary template says so. */
1797 else
1799 if (DECL_PENDING_INLINE_INFO (newdecl) == 0)
1800 DECL_PENDING_INLINE_INFO (newdecl) = DECL_PENDING_INLINE_INFO (olddecl);
1802 DECL_DECLARED_INLINE_P (newdecl) |= DECL_DECLARED_INLINE_P (olddecl);
1804 /* If either decl says `inline', this fn is inline, unless
1805 its definition was passed already. */
1806 if (DECL_INLINE (newdecl) && DECL_INITIAL (olddecl) == NULL_TREE)
1807 DECL_INLINE (olddecl) = 1;
1808 DECL_INLINE (newdecl) = DECL_INLINE (olddecl);
1810 DECL_UNINLINABLE (newdecl) = DECL_UNINLINABLE (olddecl)
1811 = (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl));
1814 /* Preserve abstractness on cloned [cd]tors. */
1815 DECL_ABSTRACT (newdecl) = DECL_ABSTRACT (olddecl);
1817 if (! types_match)
1819 SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
1820 COPY_DECL_ASSEMBLER_NAME (newdecl, olddecl);
1821 COPY_DECL_RTL (newdecl, olddecl);
1823 if (! types_match || new_defines_function)
1825 /* These need to be copied so that the names are available.
1826 Note that if the types do match, we'll preserve inline
1827 info and other bits, but if not, we won't. */
1828 DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
1829 DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
1831 if (new_defines_function)
1832 /* If defining a function declared with other language
1833 linkage, use the previously declared language linkage. */
1834 SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
1835 else if (types_match)
1837 /* If redeclaring a builtin function, and not a definition,
1838 it stays built in. */
1839 if (DECL_BUILT_IN (olddecl))
1841 DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
1842 DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
1843 /* If we're keeping the built-in definition, keep the rtl,
1844 regardless of declaration matches. */
1845 COPY_DECL_RTL (olddecl, newdecl);
1848 DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
1849 /* Don't clear out the arguments if we're redefining a function. */
1850 if (DECL_ARGUMENTS (olddecl))
1851 DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
1854 else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
1855 NAMESPACE_LEVEL (newdecl) = NAMESPACE_LEVEL (olddecl);
1857 /* Now preserve various other info from the definition. */
1858 TREE_ADDRESSABLE (newdecl) = TREE_ADDRESSABLE (olddecl);
1859 TREE_ASM_WRITTEN (newdecl) = TREE_ASM_WRITTEN (olddecl);
1860 DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
1861 COPY_DECL_ASSEMBLER_NAME (olddecl, newdecl);
1863 /* Warn about conflicting visibility specifications. */
1864 if (DECL_VISIBILITY_SPECIFIED (olddecl)
1865 && DECL_VISIBILITY_SPECIFIED (newdecl)
1866 && DECL_VISIBILITY (newdecl) != DECL_VISIBILITY (olddecl))
1868 warning (OPT_Wattributes, "%q+D: visibility attribute ignored "
1869 "because it", newdecl);
1870 warning (OPT_Wattributes, "%Jconflicts with previous "
1871 "declaration here", olddecl);
1873 /* Choose the declaration which specified visibility. */
1874 if (DECL_VISIBILITY_SPECIFIED (olddecl))
1876 DECL_VISIBILITY (newdecl) = DECL_VISIBILITY (olddecl);
1877 DECL_VISIBILITY_SPECIFIED (newdecl) = 1;
1879 /* Init priority used to be merged from newdecl to olddecl by the memcpy,
1880 so keep this behavior. */
1881 if (TREE_CODE (newdecl) == VAR_DECL && DECL_HAS_INIT_PRIORITY_P (newdecl))
1883 SET_DECL_INIT_PRIORITY (olddecl, DECL_INIT_PRIORITY (newdecl));
1884 DECL_HAS_INIT_PRIORITY_P (olddecl) = 1;
1887 /* The DECL_LANG_SPECIFIC information in OLDDECL will be replaced
1888 with that from NEWDECL below. */
1889 if (DECL_LANG_SPECIFIC (olddecl))
1891 gcc_assert (DECL_LANG_SPECIFIC (olddecl)
1892 != DECL_LANG_SPECIFIC (newdecl));
1893 ggc_free (DECL_LANG_SPECIFIC (olddecl));
1896 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1898 int function_size;
1900 function_size = sizeof (struct tree_decl_common);
1902 memcpy ((char *) olddecl + sizeof (struct tree_common),
1903 (char *) newdecl + sizeof (struct tree_common),
1904 function_size - sizeof (struct tree_common));
1906 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
1907 (char *) newdecl + sizeof (struct tree_decl_common),
1908 sizeof (struct tree_function_decl) - sizeof (struct tree_decl_common));
1909 if (new_template)
1910 /* If newdecl is a template instantiation, it is possible that
1911 the following sequence of events has occurred:
1913 o A friend function was declared in a class template. The
1914 class template was instantiated.
1916 o The instantiation of the friend declaration was
1917 recorded on the instantiation list, and is newdecl.
1919 o Later, however, instantiate_class_template called pushdecl
1920 on the newdecl to perform name injection. But, pushdecl in
1921 turn called duplicate_decls when it discovered that another
1922 declaration of a global function with the same name already
1923 existed.
1925 o Here, in duplicate_decls, we decided to clobber newdecl.
1927 If we're going to do that, we'd better make sure that
1928 olddecl, and not newdecl, is on the list of
1929 instantiations so that if we try to do the instantiation
1930 again we won't get the clobbered declaration. */
1931 reregister_specialization (newdecl,
1932 new_template,
1933 olddecl);
1935 else
1937 size_t size = tree_code_size (TREE_CODE (olddecl));
1938 memcpy ((char *) olddecl + sizeof (struct tree_common),
1939 (char *) newdecl + sizeof (struct tree_common),
1940 sizeof (struct tree_decl_common) - sizeof (struct tree_common));
1941 switch (TREE_CODE (olddecl))
1943 case LABEL_DECL:
1944 case VAR_DECL:
1945 case RESULT_DECL:
1946 case PARM_DECL:
1947 case FIELD_DECL:
1948 case TYPE_DECL:
1949 case CONST_DECL:
1951 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
1952 (char *) newdecl + sizeof (struct tree_decl_common),
1953 size - sizeof (struct tree_decl_common)
1954 + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
1956 break;
1957 default:
1958 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
1959 (char *) newdecl + sizeof (struct tree_decl_common),
1960 sizeof (struct tree_decl_non_common) - sizeof (struct tree_decl_common)
1961 + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
1962 break;
1965 DECL_UID (olddecl) = olddecl_uid;
1966 if (olddecl_friend)
1967 DECL_FRIEND_P (olddecl) = 1;
1968 if (hidden_friend)
1970 DECL_ANTICIPATED (olddecl) = 1;
1971 DECL_HIDDEN_FRIEND_P (olddecl) = 1;
1974 /* NEWDECL contains the merged attribute lists.
1975 Update OLDDECL to be the same. */
1976 DECL_ATTRIBUTES (olddecl) = DECL_ATTRIBUTES (newdecl);
1978 /* If OLDDECL had its DECL_RTL instantiated, re-invoke make_decl_rtl
1979 so that encode_section_info has a chance to look at the new decl
1980 flags and attributes. */
1981 if (DECL_RTL_SET_P (olddecl)
1982 && (TREE_CODE (olddecl) == FUNCTION_DECL
1983 || (TREE_CODE (olddecl) == VAR_DECL
1984 && TREE_STATIC (olddecl))))
1985 make_decl_rtl (olddecl);
1987 /* The NEWDECL will no longer be needed. Because every out-of-class
1988 declaration of a member results in a call to duplicate_decls,
1989 freeing these nodes represents in a significant savings. */
1990 ggc_free (newdecl);
1992 return olddecl;
1995 /* Return zero if the declaration NEWDECL is valid
1996 when the declaration OLDDECL (assumed to be for the same name)
1997 has already been seen.
1998 Otherwise return an error message format string with a %s
1999 where the identifier should go. */
2001 static const char *
2002 redeclaration_error_message (tree newdecl, tree olddecl)
2004 if (TREE_CODE (newdecl) == TYPE_DECL)
2006 /* Because C++ can put things into name space for free,
2007 constructs like "typedef struct foo { ... } foo"
2008 would look like an erroneous redeclaration. */
2009 if (same_type_p (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
2010 return 0;
2011 else
2012 return "redefinition of %q#D";
2014 else if (TREE_CODE (newdecl) == FUNCTION_DECL)
2016 /* If this is a pure function, its olddecl will actually be
2017 the original initialization to `0' (which we force to call
2018 abort()). Don't complain about redefinition in this case. */
2019 if (DECL_LANG_SPECIFIC (olddecl) && DECL_PURE_VIRTUAL_P (olddecl)
2020 && DECL_INITIAL (olddecl) == NULL_TREE)
2021 return 0;
2023 /* If both functions come from different namespaces, this is not
2024 a redeclaration - this is a conflict with a used function. */
2025 if (DECL_NAMESPACE_SCOPE_P (olddecl)
2026 && DECL_CONTEXT (olddecl) != DECL_CONTEXT (newdecl)
2027 && ! decls_match (olddecl, newdecl))
2028 return "%qD conflicts with used function";
2030 /* We'll complain about linkage mismatches in
2031 warn_extern_redeclared_static. */
2033 /* Defining the same name twice is no good. */
2034 if (DECL_INITIAL (olddecl) != NULL_TREE
2035 && DECL_INITIAL (newdecl) != NULL_TREE)
2037 if (DECL_NAME (olddecl) == NULL_TREE)
2038 return "%q#D not declared in class";
2039 else
2040 return "redefinition of %q#D";
2042 return 0;
2044 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
2046 tree nt, ot;
2048 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
2050 if (COMPLETE_TYPE_P (TREE_TYPE (newdecl))
2051 && COMPLETE_TYPE_P (TREE_TYPE (olddecl)))
2052 return "redefinition of %q#D";
2053 return NULL;
2056 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != FUNCTION_DECL
2057 || (DECL_TEMPLATE_RESULT (newdecl)
2058 == DECL_TEMPLATE_RESULT (olddecl)))
2059 return NULL;
2061 nt = DECL_TEMPLATE_RESULT (newdecl);
2062 if (DECL_TEMPLATE_INFO (nt))
2063 nt = DECL_TEMPLATE_RESULT (template_for_substitution (nt));
2064 ot = DECL_TEMPLATE_RESULT (olddecl);
2065 if (DECL_TEMPLATE_INFO (ot))
2066 ot = DECL_TEMPLATE_RESULT (template_for_substitution (ot));
2067 if (DECL_INITIAL (nt) && DECL_INITIAL (ot))
2068 return "redefinition of %q#D";
2070 return NULL;
2072 else if (TREE_CODE (newdecl) == VAR_DECL
2073 && DECL_THREAD_LOCAL_P (newdecl) != DECL_THREAD_LOCAL_P (olddecl))
2075 /* Only variables can be thread-local, and all declarations must
2076 agree on this property. */
2077 if (DECL_THREAD_LOCAL_P (newdecl))
2078 return "thread-local declaration of %q#D follows "
2079 "non-thread-local declaration";
2080 else
2081 return "non-thread-local declaration of %q#D follows "
2082 "thread-local declaration";
2084 else if (toplevel_bindings_p () || DECL_NAMESPACE_SCOPE_P (newdecl))
2086 /* Objects declared at top level: */
2087 /* If at least one is a reference, it's ok. */
2088 if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl))
2089 return 0;
2090 /* Reject two definitions. */
2091 return "redefinition of %q#D";
2093 else
2095 /* Objects declared with block scope: */
2096 /* Reject two definitions, and reject a definition
2097 together with an external reference. */
2098 if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl)))
2099 return "redeclaration of %q#D";
2100 return 0;
2104 /* Create a new label, named ID. */
2106 static tree
2107 make_label_decl (tree id, int local_p)
2109 tree decl;
2111 decl = build_decl (LABEL_DECL, id, void_type_node);
2113 DECL_CONTEXT (decl) = current_function_decl;
2114 DECL_MODE (decl) = VOIDmode;
2115 C_DECLARED_LABEL_FLAG (decl) = local_p;
2117 /* Say where one reference is to the label, for the sake of the
2118 error if it is not defined. */
2119 DECL_SOURCE_LOCATION (decl) = input_location;
2121 /* Record the fact that this identifier is bound to this label. */
2122 SET_IDENTIFIER_LABEL_VALUE (id, decl);
2124 return decl;
2127 /* Record this label on the list of used labels so that we can check
2128 at the end of the function to see whether or not the label was
2129 actually defined, and so we can check when the label is defined whether
2130 this use is valid. */
2132 static void
2133 use_label (tree decl)
2135 if (named_label_uses == NULL
2136 || named_label_uses->names_in_scope != current_binding_level->names
2137 || named_label_uses->label_decl != decl)
2139 struct named_label_use_list *new_ent;
2140 new_ent = GGC_NEW (struct named_label_use_list);
2141 new_ent->label_decl = decl;
2142 new_ent->names_in_scope = current_binding_level->names;
2143 new_ent->binding_level = current_binding_level;
2144 new_ent->o_goto_locus = input_location;
2145 new_ent->next = named_label_uses;
2146 named_label_uses = new_ent;
2150 /* Look for a label named ID in the current function. If one cannot
2151 be found, create one. (We keep track of used, but undefined,
2152 labels, and complain about them at the end of a function.) */
2154 tree
2155 lookup_label (tree id)
2157 tree decl;
2158 struct named_label_list *ent;
2160 timevar_push (TV_NAME_LOOKUP);
2161 /* You can't use labels at global scope. */
2162 if (current_function_decl == NULL_TREE)
2164 error ("label %qE referenced outside of any function", id);
2165 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, NULL_TREE);
2168 /* See if we've already got this label. */
2169 decl = IDENTIFIER_LABEL_VALUE (id);
2170 if (decl != NULL_TREE && DECL_CONTEXT (decl) == current_function_decl)
2171 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, decl);
2173 /* Record this label on the list of labels used in this function.
2174 We do this before calling make_label_decl so that we get the
2175 IDENTIFIER_LABEL_VALUE before the new label is declared. */
2176 ent = GGC_CNEW (struct named_label_list);
2177 ent->old_value = IDENTIFIER_LABEL_VALUE (id);
2178 ent->next = named_labels;
2179 named_labels = ent;
2181 /* We need a new label. */
2182 decl = make_label_decl (id, /*local_p=*/0);
2184 /* Now fill in the information we didn't have before. */
2185 ent->label_decl = decl;
2187 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, decl);
2190 /* Declare a local label named ID. */
2192 tree
2193 declare_local_label (tree id)
2195 tree decl;
2197 /* Add a new entry to the SHADOWED_LABELS list so that when we leave
2198 this scope we can restore the old value of
2199 IDENTIFIER_TYPE_VALUE. */
2200 current_binding_level->shadowed_labels
2201 = tree_cons (IDENTIFIER_LABEL_VALUE (id), NULL_TREE,
2202 current_binding_level->shadowed_labels);
2203 /* Look for the label. */
2204 decl = make_label_decl (id, /*local_p=*/1);
2205 /* Now fill in the information we didn't have before. */
2206 TREE_VALUE (current_binding_level->shadowed_labels) = decl;
2208 return decl;
2211 /* Returns nonzero if it is ill-formed to jump past the declaration of
2212 DECL. Returns 2 if it's also a real problem. */
2214 static int
2215 decl_jump_unsafe (tree decl)
2217 if (TREE_CODE (decl) != VAR_DECL || TREE_STATIC (decl)
2218 || TREE_TYPE (decl) == error_mark_node)
2219 return 0;
2221 if (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))
2222 || DECL_NONTRIVIALLY_INITIALIZED_P (decl))
2223 return 2;
2225 if (pod_type_p (TREE_TYPE (decl)))
2226 return 0;
2228 /* The POD stuff is just pedantry; why should it matter if the class
2229 contains a field of pointer to member type? */
2230 return 1;
2233 /* Check that a single previously seen jump to a newly defined label
2234 is OK. DECL is the LABEL_DECL or 0; LEVEL is the binding_level for
2235 the jump context; NAMES are the names in scope in LEVEL at the jump
2236 context; FILE and LINE are the source position of the jump or 0. */
2238 static void
2239 check_previous_goto_1 (tree decl,
2240 struct cp_binding_level* level,
2241 tree names, const location_t *locus)
2243 int identified = 0;
2244 int saw_eh = 0;
2245 struct cp_binding_level *b = current_binding_level;
2246 for (; b; b = b->level_chain)
2248 tree new_decls = b->names;
2249 tree old_decls = (b == level ? names : NULL_TREE);
2250 for (; new_decls != old_decls;
2251 new_decls = TREE_CHAIN (new_decls))
2253 int problem = decl_jump_unsafe (new_decls);
2254 if (! problem)
2255 continue;
2257 if (! identified)
2259 if (decl)
2260 pedwarn ("jump to label %qD", decl);
2261 else
2262 pedwarn ("jump to case label");
2264 if (locus)
2265 pedwarn ("%H from here", locus);
2266 identified = 1;
2269 if (problem > 1)
2270 error (" crosses initialization of %q+#D", new_decls);
2271 else
2272 pedwarn (" enters scope of non-POD %q+#D", new_decls);
2275 if (b == level)
2276 break;
2277 if ((b->kind == sk_try || b->kind == sk_catch) && ! saw_eh)
2279 if (! identified)
2281 if (decl)
2282 pedwarn ("jump to label %qD", decl);
2283 else
2284 pedwarn ("jump to case label");
2286 if (locus)
2287 pedwarn ("%H from here", locus);
2288 identified = 1;
2290 if (b->kind == sk_try)
2291 error (" enters try block");
2292 else
2293 error (" enters catch block");
2294 saw_eh = 1;
2299 static void
2300 check_previous_goto (struct named_label_use_list* use)
2302 check_previous_goto_1 (use->label_decl, use->binding_level,
2303 use->names_in_scope, &use->o_goto_locus);
2306 static void
2307 check_switch_goto (struct cp_binding_level* level)
2309 check_previous_goto_1 (NULL_TREE, level, level->names, NULL);
2312 /* Check that any previously seen jumps to a newly defined label DECL
2313 are OK. Called by define_label. */
2315 static void
2316 check_previous_gotos (tree decl)
2318 struct named_label_use_list **usep;
2320 if (! TREE_USED (decl))
2321 return;
2323 for (usep = &named_label_uses; *usep; )
2325 struct named_label_use_list *use = *usep;
2326 if (use->label_decl == decl)
2328 check_previous_goto (use);
2329 *usep = use->next;
2331 else
2332 usep = &(use->next);
2336 /* Check that a new jump to a label DECL is OK. Called by
2337 finish_goto_stmt. */
2339 void
2340 check_goto (tree decl)
2342 int identified = 0;
2343 tree bad;
2344 struct named_label_list *lab;
2346 /* We can't know where a computed goto is jumping. So we assume
2347 that it's OK. */
2348 if (! DECL_P (decl))
2349 return;
2351 /* If the label hasn't been defined yet, defer checking. */
2352 if (! DECL_INITIAL (decl))
2354 use_label (decl);
2355 return;
2358 for (lab = named_labels; lab; lab = lab->next)
2359 if (decl == lab->label_decl)
2360 break;
2362 /* If the label is not on named_labels it's a gcc local label, so
2363 it must be in an outer scope, so jumping to it is always OK. */
2364 if (lab == 0)
2365 return;
2367 if ((lab->in_try_scope || lab->in_catch_scope || lab->bad_decls)
2368 && !identified)
2370 pedwarn ("jump to label %q+D", decl);
2371 pedwarn (" from here");
2372 identified = 1;
2375 for (bad = lab->bad_decls; bad; bad = TREE_CHAIN (bad))
2377 tree b = TREE_VALUE (bad);
2378 int u = decl_jump_unsafe (b);
2380 if (u > 1 && DECL_ARTIFICIAL (b))
2381 /* Can't skip init of __exception_info. */
2382 error ("%J enters catch block", b);
2383 else if (u > 1)
2384 error (" skips initialization of %q+#D", b);
2385 else
2386 pedwarn (" enters scope of non-POD %q+#D", b);
2389 if (lab->in_try_scope)
2390 error (" enters try block");
2391 else if (lab->in_catch_scope)
2392 error (" enters catch block");
2395 /* Define a label, specifying the location in the source file.
2396 Return the LABEL_DECL node for the label. */
2398 tree
2399 define_label (location_t location, tree name)
2401 tree decl = lookup_label (name);
2402 struct named_label_list *ent;
2403 struct cp_binding_level *p;
2405 timevar_push (TV_NAME_LOOKUP);
2406 for (ent = named_labels; ent; ent = ent->next)
2407 if (ent->label_decl == decl)
2408 break;
2410 /* After labels, make any new cleanups in the function go into their
2411 own new (temporary) binding contour. */
2412 for (p = current_binding_level;
2413 p->kind != sk_function_parms;
2414 p = p->level_chain)
2415 p->more_cleanups_ok = 0;
2417 if (name == get_identifier ("wchar_t"))
2418 pedwarn ("label named wchar_t");
2420 if (DECL_INITIAL (decl) != NULL_TREE)
2422 error ("duplicate label %qD", decl);
2423 POP_TIMEVAR_AND_RETURN(TV_NAME_LOOKUP, error_mark_node);
2425 else
2427 /* Mark label as having been defined. */
2428 DECL_INITIAL (decl) = error_mark_node;
2429 /* Say where in the source. */
2430 DECL_SOURCE_LOCATION (decl) = location;
2431 if (ent)
2433 ent->names_in_scope = current_binding_level->names;
2434 ent->binding_level = current_binding_level;
2436 check_previous_gotos (decl);
2439 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, decl);
2442 struct cp_switch
2444 struct cp_binding_level *level;
2445 struct cp_switch *next;
2446 /* The SWITCH_STMT being built. */
2447 tree switch_stmt;
2448 /* A splay-tree mapping the low element of a case range to the high
2449 element, or NULL_TREE if there is no high element. Used to
2450 determine whether or not a new case label duplicates an old case
2451 label. We need a tree, rather than simply a hash table, because
2452 of the GNU case range extension. */
2453 splay_tree cases;
2456 /* A stack of the currently active switch statements. The innermost
2457 switch statement is on the top of the stack. There is no need to
2458 mark the stack for garbage collection because it is only active
2459 during the processing of the body of a function, and we never
2460 collect at that point. */
2462 static struct cp_switch *switch_stack;
2464 /* Called right after a switch-statement condition is parsed.
2465 SWITCH_STMT is the switch statement being parsed. */
2467 void
2468 push_switch (tree switch_stmt)
2470 struct cp_switch *p = xmalloc (sizeof (struct cp_switch));
2471 p->level = current_binding_level;
2472 p->next = switch_stack;
2473 p->switch_stmt = switch_stmt;
2474 p->cases = splay_tree_new (case_compare, NULL, NULL);
2475 switch_stack = p;
2478 void
2479 pop_switch (void)
2481 struct cp_switch *cs = switch_stack;
2482 location_t switch_location;
2484 /* Emit warnings as needed. */
2485 if (EXPR_HAS_LOCATION (cs->switch_stmt))
2486 switch_location = EXPR_LOCATION (cs->switch_stmt);
2487 else
2488 switch_location = input_location;
2489 if (!processing_template_decl)
2490 c_do_switch_warnings (cs->cases, switch_location,
2491 SWITCH_STMT_TYPE (cs->switch_stmt),
2492 SWITCH_STMT_COND (cs->switch_stmt));
2494 splay_tree_delete (cs->cases);
2495 switch_stack = switch_stack->next;
2496 free (cs);
2499 /* Note that we've seen a definition of a case label, and complain if this
2500 is a bad place for one. */
2502 tree
2503 finish_case_label (tree low_value, tree high_value)
2505 tree cond, r;
2506 struct cp_binding_level *p;
2508 if (processing_template_decl)
2510 tree label;
2512 /* For templates, just add the case label; we'll do semantic
2513 analysis at instantiation-time. */
2514 label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
2515 return add_stmt (build_case_label (low_value, high_value, label));
2518 /* Find the condition on which this switch statement depends. */
2519 cond = SWITCH_STMT_COND (switch_stack->switch_stmt);
2520 if (cond && TREE_CODE (cond) == TREE_LIST)
2521 cond = TREE_VALUE (cond);
2523 r = c_add_case_label (switch_stack->cases, cond, TREE_TYPE (cond),
2524 low_value, high_value);
2526 check_switch_goto (switch_stack->level);
2528 /* After labels, make any new cleanups in the function go into their
2529 own new (temporary) binding contour. */
2530 for (p = current_binding_level;
2531 p->kind != sk_function_parms;
2532 p = p->level_chain)
2533 p->more_cleanups_ok = 0;
2535 return r;
2538 /* Hash a TYPENAME_TYPE. K is really of type `tree'. */
2540 static hashval_t
2541 typename_hash (const void* k)
2543 hashval_t hash;
2544 tree t = (tree) k;
2546 hash = (htab_hash_pointer (TYPE_CONTEXT (t))
2547 ^ htab_hash_pointer (DECL_NAME (TYPE_NAME (t))));
2549 return hash;
2552 typedef struct typename_info {
2553 tree scope;
2554 tree name;
2555 tree template_id;
2556 bool enum_p;
2557 bool class_p;
2558 } typename_info;
2560 /* Compare two TYPENAME_TYPEs. K1 and K2 are really of type `tree'. */
2562 static int
2563 typename_compare (const void * k1, const void * k2)
2565 tree t1;
2566 const typename_info *t2;
2568 t1 = (tree) k1;
2569 t2 = (const typename_info *) k2;
2571 return (DECL_NAME (TYPE_NAME (t1)) == t2->name
2572 && TYPE_CONTEXT (t1) == t2->scope
2573 && TYPENAME_TYPE_FULLNAME (t1) == t2->template_id
2574 && TYPENAME_IS_ENUM_P (t1) == t2->enum_p
2575 && TYPENAME_IS_CLASS_P (t1) == t2->class_p);
2578 /* Build a TYPENAME_TYPE. If the type is `typename T::t', CONTEXT is
2579 the type of `T', NAME is the IDENTIFIER_NODE for `t'.
2581 Returns the new TYPENAME_TYPE. */
2583 static GTY ((param_is (union tree_node))) htab_t typename_htab;
2585 static tree
2586 build_typename_type (tree context, tree name, tree fullname,
2587 enum tag_types tag_type)
2589 tree t;
2590 tree d;
2591 typename_info ti;
2592 void **e;
2593 hashval_t hash;
2595 if (typename_htab == NULL)
2596 typename_htab = htab_create_ggc (61, &typename_hash,
2597 &typename_compare, NULL);
2599 ti.scope = FROB_CONTEXT (context);
2600 ti.name = name;
2601 ti.template_id = fullname;
2602 ti.enum_p = tag_type == enum_type;
2603 ti.class_p = (tag_type == class_type
2604 || tag_type == record_type
2605 || tag_type == union_type);
2606 hash = (htab_hash_pointer (ti.scope)
2607 ^ htab_hash_pointer (ti.name));
2609 /* See if we already have this type. */
2610 e = htab_find_slot_with_hash (typename_htab, &ti, hash, INSERT);
2611 if (*e)
2612 t = (tree) *e;
2613 else
2615 /* Build the TYPENAME_TYPE. */
2616 t = make_aggr_type (TYPENAME_TYPE);
2617 TYPE_CONTEXT (t) = ti.scope;
2618 TYPENAME_TYPE_FULLNAME (t) = ti.template_id;
2619 TYPENAME_IS_ENUM_P (t) = ti.enum_p;
2620 TYPENAME_IS_CLASS_P (t) = ti.class_p;
2622 /* Build the corresponding TYPE_DECL. */
2623 d = build_decl (TYPE_DECL, name, t);
2624 TYPE_NAME (TREE_TYPE (d)) = d;
2625 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
2626 DECL_CONTEXT (d) = FROB_CONTEXT (context);
2627 DECL_ARTIFICIAL (d) = 1;
2629 /* Store it in the hash table. */
2630 *e = t;
2633 return t;
2636 /* Resolve `typename CONTEXT::NAME'. TAG_TYPE indicates the tag
2637 provided to name the type. Returns an appropriate type, unless an
2638 error occurs, in which case error_mark_node is returned. If we
2639 locate a non-artificial TYPE_DECL and TF_KEEP_TYPE_DECL is set, we
2640 return that, rather than the _TYPE it corresponds to, in other
2641 cases we look through the type decl. If TF_ERROR is set, complain
2642 about errors, otherwise be quiet. */
2644 tree
2645 make_typename_type (tree context, tree name, enum tag_types tag_type,
2646 tsubst_flags_t complain)
2648 tree fullname;
2649 tree t;
2650 bool want_template;
2652 if (name == error_mark_node
2653 || context == NULL_TREE
2654 || context == error_mark_node)
2655 return error_mark_node;
2657 if (TYPE_P (name))
2659 if (!(TYPE_LANG_SPECIFIC (name)
2660 && (CLASSTYPE_IS_TEMPLATE (name)
2661 || CLASSTYPE_USE_TEMPLATE (name))))
2662 name = TYPE_IDENTIFIER (name);
2663 else
2664 /* Create a TEMPLATE_ID_EXPR for the type. */
2665 name = build_nt (TEMPLATE_ID_EXPR,
2666 CLASSTYPE_TI_TEMPLATE (name),
2667 CLASSTYPE_TI_ARGS (name));
2669 else if (TREE_CODE (name) == TYPE_DECL)
2670 name = DECL_NAME (name);
2672 fullname = name;
2674 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
2676 name = TREE_OPERAND (name, 0);
2677 if (TREE_CODE (name) == TEMPLATE_DECL)
2678 name = TREE_OPERAND (fullname, 0) = DECL_NAME (name);
2679 else if (TREE_CODE (name) == OVERLOAD)
2681 error ("%qD is not a type", name);
2682 return error_mark_node;
2685 if (TREE_CODE (name) == TEMPLATE_DECL)
2687 error ("%qD used without template parameters", name);
2688 return error_mark_node;
2690 gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
2691 gcc_assert (TYPE_P (context));
2693 /* When the CONTEXT is a dependent type, NAME could refer to a
2694 dependent base class of CONTEXT. So we cannot peek inside it,
2695 even if CONTEXT is a currently open scope. */
2696 if (dependent_type_p (context))
2697 return build_typename_type (context, name, fullname, tag_type);
2699 if (!IS_AGGR_TYPE (context))
2701 if (complain & tf_error)
2702 error ("%q#T is not a class", context);
2703 return error_mark_node;
2706 want_template = TREE_CODE (fullname) == TEMPLATE_ID_EXPR;
2708 /* We should only set WANT_TYPE when we're a nested typename type.
2709 Then we can give better diagnostics if we find a non-type. */
2710 t = lookup_field (context, name, 0, /*want_type=*/true);
2711 if (!t)
2713 if (complain & tf_error)
2714 error (want_template ? "no class template named %q#T in %q#T"
2715 : "no type named %q#T in %q#T", name, context);
2716 return error_mark_node;
2719 if (want_template && !DECL_CLASS_TEMPLATE_P (t))
2721 if (complain & tf_error)
2722 error ("%<typename %T::%D%> names %q#T, which is not a class template",
2723 context, name, t);
2724 return error_mark_node;
2726 if (!want_template && TREE_CODE (t) != TYPE_DECL)
2728 if (complain & tf_error)
2729 error ("%<typename %T::%D%> names %q#T, which is not a type",
2730 context, name, t);
2731 return error_mark_node;
2734 if (complain & tf_error)
2735 perform_or_defer_access_check (TYPE_BINFO (context), t);
2737 if (want_template)
2738 return lookup_template_class (t, TREE_OPERAND (fullname, 1),
2739 NULL_TREE, context,
2740 /*entering_scope=*/0,
2741 tf_error | tf_warning | tf_user);
2743 if (DECL_ARTIFICIAL (t) || !(complain & tf_keep_type_decl))
2744 t = TREE_TYPE (t);
2746 return t;
2749 /* Resolve `CONTEXT::template NAME'. Returns a TEMPLATE_DECL if the name
2750 can be resolved or an UNBOUND_CLASS_TEMPLATE, unless an error occurs,
2751 in which case error_mark_node is returned.
2753 If PARM_LIST is non-NULL, also make sure that the template parameter
2754 list of TEMPLATE_DECL matches.
2756 If COMPLAIN zero, don't complain about any errors that occur. */
2758 tree
2759 make_unbound_class_template (tree context, tree name, tree parm_list,
2760 tsubst_flags_t complain)
2762 tree t;
2763 tree d;
2765 if (TYPE_P (name))
2766 name = TYPE_IDENTIFIER (name);
2767 else if (DECL_P (name))
2768 name = DECL_NAME (name);
2769 gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
2771 if (!dependent_type_p (context)
2772 || currently_open_class (context))
2774 tree tmpl = NULL_TREE;
2776 if (IS_AGGR_TYPE (context))
2777 tmpl = lookup_field (context, name, 0, false);
2779 if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
2781 if (complain & tf_error)
2782 error ("no class template named %q#T in %q#T", name, context);
2783 return error_mark_node;
2786 if (parm_list
2787 && !comp_template_parms (DECL_TEMPLATE_PARMS (tmpl), parm_list))
2789 if (complain & tf_error)
2791 error ("template parameters do not match template");
2792 error ("%q+D declared here", tmpl);
2794 return error_mark_node;
2797 if (complain & tf_error)
2798 perform_or_defer_access_check (TYPE_BINFO (context), tmpl);
2800 return tmpl;
2803 /* Build the UNBOUND_CLASS_TEMPLATE. */
2804 t = make_aggr_type (UNBOUND_CLASS_TEMPLATE);
2805 TYPE_CONTEXT (t) = FROB_CONTEXT (context);
2806 TREE_TYPE (t) = NULL_TREE;
2808 /* Build the corresponding TEMPLATE_DECL. */
2809 d = build_decl (TEMPLATE_DECL, name, t);
2810 TYPE_NAME (TREE_TYPE (d)) = d;
2811 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
2812 DECL_CONTEXT (d) = FROB_CONTEXT (context);
2813 DECL_ARTIFICIAL (d) = 1;
2814 DECL_TEMPLATE_PARMS (d) = parm_list;
2816 return t;
2821 /* Push the declarations of builtin types into the namespace.
2822 RID_INDEX is the index of the builtin type in the array
2823 RID_POINTERS. NAME is the name used when looking up the builtin
2824 type. TYPE is the _TYPE node for the builtin type. */
2826 void
2827 record_builtin_type (enum rid rid_index,
2828 const char* name,
2829 tree type)
2831 tree rname = NULL_TREE, tname = NULL_TREE;
2832 tree tdecl = NULL_TREE;
2834 if ((int) rid_index < (int) RID_MAX)
2835 rname = ridpointers[(int) rid_index];
2836 if (name)
2837 tname = get_identifier (name);
2839 /* The calls to SET_IDENTIFIER_GLOBAL_VALUE below should be
2840 eliminated. Built-in types should not be looked up name; their
2841 names are keywords that the parser can recognize. However, there
2842 is code in c-common.c that uses identifier_global_value to look
2843 up built-in types by name. */
2844 if (tname)
2846 tdecl = build_decl (TYPE_DECL, tname, type);
2847 DECL_ARTIFICIAL (tdecl) = 1;
2848 SET_IDENTIFIER_GLOBAL_VALUE (tname, tdecl);
2850 if (rname)
2852 if (!tdecl)
2854 tdecl = build_decl (TYPE_DECL, rname, type);
2855 DECL_ARTIFICIAL (tdecl) = 1;
2857 SET_IDENTIFIER_GLOBAL_VALUE (rname, tdecl);
2860 if (!TYPE_NAME (type))
2861 TYPE_NAME (type) = tdecl;
2863 if (tdecl)
2864 debug_hooks->type_decl (tdecl, 0);
2867 /* Record one of the standard Java types.
2868 * Declare it as having the given NAME.
2869 * If SIZE > 0, it is the size of one of the integral types;
2870 * otherwise it is the negative of the size of one of the other types. */
2872 static tree
2873 record_builtin_java_type (const char* name, int size)
2875 tree type, decl;
2876 if (size > 0)
2877 type = make_signed_type (size);
2878 else if (size > -32)
2879 { /* "__java_char" or ""__java_boolean". */
2880 type = make_unsigned_type (-size);
2881 /*if (size == -1) TREE_SET_CODE (type, BOOLEAN_TYPE);*/
2883 else
2884 { /* "__java_float" or ""__java_double". */
2885 type = make_node (REAL_TYPE);
2886 TYPE_PRECISION (type) = - size;
2887 layout_type (type);
2889 record_builtin_type (RID_MAX, name, type);
2890 decl = TYPE_NAME (type);
2892 /* Suppress generate debug symbol entries for these types,
2893 since for normal C++ they are just clutter.
2894 However, push_lang_context undoes this if extern "Java" is seen. */
2895 DECL_IGNORED_P (decl) = 1;
2897 TYPE_FOR_JAVA (type) = 1;
2898 return type;
2901 /* Push a type into the namespace so that the back-ends ignore it. */
2903 static void
2904 record_unknown_type (tree type, const char* name)
2906 tree decl = pushdecl (build_decl (TYPE_DECL, get_identifier (name), type));
2907 /* Make sure the "unknown type" typedecl gets ignored for debug info. */
2908 DECL_IGNORED_P (decl) = 1;
2909 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
2910 TYPE_SIZE (type) = TYPE_SIZE (void_type_node);
2911 TYPE_ALIGN (type) = 1;
2912 TYPE_USER_ALIGN (type) = 0;
2913 TYPE_MODE (type) = TYPE_MODE (void_type_node);
2916 /* A string for which we should create an IDENTIFIER_NODE at
2917 startup. */
2919 typedef struct predefined_identifier
2921 /* The name of the identifier. */
2922 const char *const name;
2923 /* The place where the IDENTIFIER_NODE should be stored. */
2924 tree *const node;
2925 /* Nonzero if this is the name of a constructor or destructor. */
2926 const int ctor_or_dtor_p;
2927 } predefined_identifier;
2929 /* Create all the predefined identifiers. */
2931 static void
2932 initialize_predefined_identifiers (void)
2934 const predefined_identifier *pid;
2936 /* A table of identifiers to create at startup. */
2937 static const predefined_identifier predefined_identifiers[] = {
2938 { "C++", &lang_name_cplusplus, 0 },
2939 { "C", &lang_name_c, 0 },
2940 { "Java", &lang_name_java, 0 },
2941 /* Some of these names have a trailing space so that it is
2942 impossible for them to conflict with names written by users. */
2943 { "__ct ", &ctor_identifier, 1 },
2944 { "__base_ctor ", &base_ctor_identifier, 1 },
2945 { "__comp_ctor ", &complete_ctor_identifier, 1 },
2946 { "__dt ", &dtor_identifier, 1 },
2947 { "__comp_dtor ", &complete_dtor_identifier, 1 },
2948 { "__base_dtor ", &base_dtor_identifier, 1 },
2949 { "__deleting_dtor ", &deleting_dtor_identifier, 1 },
2950 { IN_CHARGE_NAME, &in_charge_identifier, 0 },
2951 { "nelts", &nelts_identifier, 0 },
2952 { THIS_NAME, &this_identifier, 0 },
2953 { VTABLE_DELTA_NAME, &delta_identifier, 0 },
2954 { VTABLE_PFN_NAME, &pfn_identifier, 0 },
2955 { "_vptr", &vptr_identifier, 0 },
2956 { "__vtt_parm", &vtt_parm_identifier, 0 },
2957 { "::", &global_scope_name, 0 },
2958 { "std", &std_identifier, 0 },
2959 { NULL, NULL, 0 }
2962 for (pid = predefined_identifiers; pid->name; ++pid)
2964 *pid->node = get_identifier (pid->name);
2965 if (pid->ctor_or_dtor_p)
2966 IDENTIFIER_CTOR_OR_DTOR_P (*pid->node) = 1;
2970 /* Create the predefined scalar types of C,
2971 and some nodes representing standard constants (0, 1, (void *)0).
2972 Initialize the global binding level.
2973 Make definitions for built-in primitive functions. */
2975 void
2976 cxx_init_decl_processing (void)
2978 tree void_ftype;
2979 tree void_ftype_ptr;
2981 build_common_tree_nodes (flag_signed_char, false);
2983 /* Create all the identifiers we need. */
2984 initialize_predefined_identifiers ();
2986 /* Create the global variables. */
2987 push_to_top_level ();
2989 current_function_decl = NULL_TREE;
2990 current_binding_level = NULL;
2991 /* Enter the global namespace. */
2992 gcc_assert (global_namespace == NULL_TREE);
2993 global_namespace = build_lang_decl (NAMESPACE_DECL, global_scope_name,
2994 void_type_node);
2995 begin_scope (sk_namespace, global_namespace);
2997 current_lang_name = NULL_TREE;
2999 /* Adjust various flags based on command-line settings. */
3000 if (!flag_permissive)
3001 flag_pedantic_errors = 1;
3002 if (!flag_no_inline)
3004 flag_inline_trees = 1;
3005 flag_no_inline = 1;
3007 if (flag_inline_functions)
3008 flag_inline_trees = 2;
3010 /* Force minimum function alignment if using the least significant
3011 bit of function pointers to store the virtual bit. */
3012 if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_pfn
3013 && force_align_functions_log < 1)
3014 force_align_functions_log = 1;
3016 /* Initially, C. */
3017 current_lang_name = lang_name_c;
3019 /* Create the `std' namespace. */
3020 push_namespace (std_identifier);
3021 std_node = current_namespace;
3022 pop_namespace ();
3024 c_common_nodes_and_builtins ();
3026 java_byte_type_node = record_builtin_java_type ("__java_byte", 8);
3027 java_short_type_node = record_builtin_java_type ("__java_short", 16);
3028 java_int_type_node = record_builtin_java_type ("__java_int", 32);
3029 java_long_type_node = record_builtin_java_type ("__java_long", 64);
3030 java_float_type_node = record_builtin_java_type ("__java_float", -32);
3031 java_double_type_node = record_builtin_java_type ("__java_double", -64);
3032 java_char_type_node = record_builtin_java_type ("__java_char", -16);
3033 java_boolean_type_node = record_builtin_java_type ("__java_boolean", -1);
3035 integer_two_node = build_int_cst (NULL_TREE, 2);
3036 integer_three_node = build_int_cst (NULL_TREE, 3);
3038 record_builtin_type (RID_BOOL, "bool", boolean_type_node);
3039 truthvalue_type_node = boolean_type_node;
3040 truthvalue_false_node = boolean_false_node;
3041 truthvalue_true_node = boolean_true_node;
3043 empty_except_spec = build_tree_list (NULL_TREE, NULL_TREE);
3045 #if 0
3046 record_builtin_type (RID_MAX, NULL, string_type_node);
3047 #endif
3049 delta_type_node = ptrdiff_type_node;
3050 vtable_index_type = ptrdiff_type_node;
3052 vtt_parm_type = build_pointer_type (const_ptr_type_node);
3053 void_ftype = build_function_type (void_type_node, void_list_node);
3054 void_ftype_ptr = build_function_type (void_type_node,
3055 tree_cons (NULL_TREE,
3056 ptr_type_node,
3057 void_list_node));
3058 void_ftype_ptr
3059 = build_exception_variant (void_ftype_ptr, empty_except_spec);
3061 /* C++ extensions */
3063 unknown_type_node = make_node (UNKNOWN_TYPE);
3064 record_unknown_type (unknown_type_node, "unknown type");
3066 /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node. */
3067 TREE_TYPE (unknown_type_node) = unknown_type_node;
3069 /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
3070 result. */
3071 TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
3072 TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
3075 /* Make sure we get a unique function type, so we can give
3076 its pointer type a name. (This wins for gdb.) */
3077 tree vfunc_type = make_node (FUNCTION_TYPE);
3078 TREE_TYPE (vfunc_type) = integer_type_node;
3079 TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
3080 layout_type (vfunc_type);
3082 vtable_entry_type = build_pointer_type (vfunc_type);
3084 record_builtin_type (RID_MAX, VTBL_PTR_TYPE, vtable_entry_type);
3086 vtbl_type_node
3087 = build_cplus_array_type (vtable_entry_type, NULL_TREE);
3088 layout_type (vtbl_type_node);
3089 vtbl_type_node = build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
3090 record_builtin_type (RID_MAX, NULL, vtbl_type_node);
3091 vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
3092 layout_type (vtbl_ptr_type_node);
3093 record_builtin_type (RID_MAX, NULL, vtbl_ptr_type_node);
3095 push_namespace (get_identifier ("__cxxabiv1"));
3096 abi_node = current_namespace;
3097 pop_namespace ();
3099 global_type_node = make_node (LANG_TYPE);
3100 record_unknown_type (global_type_node, "global type");
3102 /* Now, C++. */
3103 current_lang_name = lang_name_cplusplus;
3106 tree bad_alloc_id;
3107 tree bad_alloc_type_node;
3108 tree bad_alloc_decl;
3109 tree newtype, deltype;
3110 tree ptr_ftype_sizetype;
3112 push_namespace (std_identifier);
3113 bad_alloc_id = get_identifier ("bad_alloc");
3114 bad_alloc_type_node = make_aggr_type (RECORD_TYPE);
3115 TYPE_CONTEXT (bad_alloc_type_node) = current_namespace;
3116 bad_alloc_decl
3117 = create_implicit_typedef (bad_alloc_id, bad_alloc_type_node);
3118 DECL_CONTEXT (bad_alloc_decl) = current_namespace;
3119 TYPE_STUB_DECL (bad_alloc_type_node) = bad_alloc_decl;
3120 pop_namespace ();
3122 ptr_ftype_sizetype
3123 = build_function_type (ptr_type_node,
3124 tree_cons (NULL_TREE,
3125 size_type_node,
3126 void_list_node));
3127 newtype = build_exception_variant
3128 (ptr_ftype_sizetype, add_exception_specifier
3129 (NULL_TREE, bad_alloc_type_node, -1));
3130 deltype = build_exception_variant (void_ftype_ptr, empty_except_spec);
3131 push_cp_library_fn (NEW_EXPR, newtype);
3132 push_cp_library_fn (VEC_NEW_EXPR, newtype);
3133 global_delete_fndecl = push_cp_library_fn (DELETE_EXPR, deltype);
3134 push_cp_library_fn (VEC_DELETE_EXPR, deltype);
3137 abort_fndecl
3138 = build_library_fn_ptr ("__cxa_pure_virtual", void_ftype);
3140 /* Perform other language dependent initializations. */
3141 init_class_processing ();
3142 init_rtti_processing ();
3144 if (flag_exceptions)
3145 init_exception_processing ();
3147 if (! supports_one_only ())
3148 flag_weak = 0;
3150 make_fname_decl = cp_make_fname_decl;
3151 start_fname_decls ();
3153 /* Show we use EH for cleanups. */
3154 if (flag_exceptions)
3155 using_eh_for_cleanups ();
3158 /* Generate an initializer for a function naming variable from
3159 NAME. NAME may be NULL, to indicate a dependent name. TYPE_P is
3160 filled in with the type of the init. */
3162 tree
3163 cp_fname_init (const char* name, tree *type_p)
3165 tree domain = NULL_TREE;
3166 tree type;
3167 tree init = NULL_TREE;
3168 size_t length = 0;
3170 if (name)
3172 length = strlen (name);
3173 domain = build_index_type (size_int (length));
3174 init = build_string (length + 1, name);
3177 type = build_qualified_type (char_type_node, TYPE_QUAL_CONST);
3178 type = build_cplus_array_type (type, domain);
3180 *type_p = type;
3182 if (init)
3183 TREE_TYPE (init) = type;
3184 else
3185 init = error_mark_node;
3187 return init;
3190 /* Create the VAR_DECL for __FUNCTION__ etc. ID is the name to give the
3191 decl, NAME is the initialization string and TYPE_DEP indicates whether
3192 NAME depended on the type of the function. We make use of that to detect
3193 __PRETTY_FUNCTION__ inside a template fn. This is being done
3194 lazily at the point of first use, so we mustn't push the decl now. */
3196 static tree
3197 cp_make_fname_decl (tree id, int type_dep)
3199 const char *const name = (type_dep && processing_template_decl
3200 ? NULL : fname_as_string (type_dep));
3201 tree type;
3202 tree init = cp_fname_init (name, &type);
3203 tree decl = build_decl (VAR_DECL, id, type);
3205 if (name)
3206 free ((char *) name);
3208 /* As we're using pushdecl_with_scope, we must set the context. */
3209 DECL_CONTEXT (decl) = current_function_decl;
3210 DECL_PRETTY_FUNCTION_P (decl) = type_dep;
3212 TREE_STATIC (decl) = 1;
3213 TREE_READONLY (decl) = 1;
3214 DECL_ARTIFICIAL (decl) = 1;
3215 DECL_INITIAL (decl) = init;
3217 TREE_USED (decl) = 1;
3219 if (current_function_decl)
3221 struct cp_binding_level *b = current_binding_level;
3222 while (b->level_chain->kind != sk_function_parms)
3223 b = b->level_chain;
3224 pushdecl_with_scope (decl, b, /*is_friend=*/false);
3225 cp_finish_decl (decl, init, /*init_const_expr_p=*/false, NULL_TREE,
3226 LOOKUP_ONLYCONVERTING);
3228 else
3229 pushdecl_top_level_and_finish (decl, init);
3231 return decl;
3234 /* Make a definition for a builtin function named NAME in the current
3235 namespace, whose data type is TYPE and whose context is CONTEXT.
3236 TYPE should be a function type with argument types.
3238 CLASS and CODE tell later passes how to compile calls to this function.
3239 See tree.h for possible values.
3241 If LIBNAME is nonzero, use that for DECL_ASSEMBLER_NAME,
3242 the name to be called if we can't opencode the function.
3243 If ATTRS is nonzero, use that for the function's attribute
3244 list. */
3246 static tree
3247 builtin_function_1 (const char* name,
3248 tree type,
3249 tree context,
3250 enum built_in_function code,
3251 enum built_in_class class,
3252 const char* libname,
3253 tree attrs)
3255 tree decl = build_library_fn_1 (get_identifier (name), ERROR_MARK, type);
3256 DECL_BUILT_IN_CLASS (decl) = class;
3257 DECL_FUNCTION_CODE (decl) = code;
3258 DECL_CONTEXT (decl) = context;
3260 pushdecl (decl);
3262 /* Since `pushdecl' relies on DECL_ASSEMBLER_NAME instead of DECL_NAME,
3263 we cannot change DECL_ASSEMBLER_NAME until we have installed this
3264 function in the namespace. */
3265 if (libname)
3266 SET_DECL_ASSEMBLER_NAME (decl, get_identifier (libname));
3268 /* A function in the user's namespace should have an explicit
3269 declaration before it is used. Mark the built-in function as
3270 anticipated but not actually declared. */
3271 if (name[0] != '_' || name[1] != '_')
3272 DECL_ANTICIPATED (decl) = 1;
3274 /* Possibly apply some default attributes to this built-in function. */
3275 if (attrs)
3276 decl_attributes (&decl, attrs, ATTR_FLAG_BUILT_IN);
3277 else
3278 decl_attributes (&decl, NULL_TREE, 0);
3280 return decl;
3283 /* Entry point for the benefit of c_common_nodes_and_builtins.
3285 Make a definition for a builtin function named NAME and whose data type
3286 is TYPE. TYPE should be a function type with argument types. This
3287 function places the anticipated declaration in the global namespace
3288 and additionally in the std namespace if appropriate.
3290 CLASS and CODE tell later passes how to compile calls to this function.
3291 See tree.h for possible values.
3293 If LIBNAME is nonzero, use that for DECL_ASSEMBLER_NAME,
3294 the name to be called if we can't opencode the function.
3296 If ATTRS is nonzero, use that for the function's attribute
3297 list. */
3299 tree
3300 builtin_function (const char* name,
3301 tree type,
3302 int code,
3303 enum built_in_class cl,
3304 const char* libname,
3305 tree attrs)
3307 /* All builtins that don't begin with an '_' should additionally
3308 go in the 'std' namespace. */
3309 if (name[0] != '_')
3311 push_namespace (std_identifier);
3312 builtin_function_1 (name, type, std_node, code, cl, libname, attrs);
3313 pop_namespace ();
3316 return builtin_function_1 (name, type, NULL_TREE, code,
3317 cl, libname, attrs);
3320 /* Generate a FUNCTION_DECL with the typical flags for a runtime library
3321 function. Not called directly. */
3323 static tree
3324 build_library_fn_1 (tree name, enum tree_code operator_code, tree type)
3326 tree fn = build_lang_decl (FUNCTION_DECL, name, type);
3327 DECL_EXTERNAL (fn) = 1;
3328 TREE_PUBLIC (fn) = 1;
3329 DECL_ARTIFICIAL (fn) = 1;
3330 SET_OVERLOADED_OPERATOR_CODE (fn, operator_code);
3331 SET_DECL_LANGUAGE (fn, lang_c);
3332 /* Runtime library routines are, by definition, available in an
3333 external shared object. */
3334 DECL_VISIBILITY (fn) = VISIBILITY_DEFAULT;
3335 DECL_VISIBILITY_SPECIFIED (fn) = 1;
3336 return fn;
3339 /* Returns the _DECL for a library function with C linkage.
3340 We assume that such functions never throw; if this is incorrect,
3341 callers should unset TREE_NOTHROW. */
3343 tree
3344 build_library_fn (tree name, tree type)
3346 tree fn = build_library_fn_1 (name, ERROR_MARK, type);
3347 TREE_NOTHROW (fn) = 1;
3348 return fn;
3351 /* Returns the _DECL for a library function with C++ linkage. */
3353 static tree
3354 build_cp_library_fn (tree name, enum tree_code operator_code, tree type)
3356 tree fn = build_library_fn_1 (name, operator_code, type);
3357 TREE_NOTHROW (fn) = TYPE_NOTHROW_P (type);
3358 DECL_CONTEXT (fn) = FROB_CONTEXT (current_namespace);
3359 SET_DECL_LANGUAGE (fn, lang_cplusplus);
3360 return fn;
3363 /* Like build_library_fn, but takes a C string instead of an
3364 IDENTIFIER_NODE. */
3366 tree
3367 build_library_fn_ptr (const char* name, tree type)
3369 return build_library_fn (get_identifier (name), type);
3372 /* Like build_cp_library_fn, but takes a C string instead of an
3373 IDENTIFIER_NODE. */
3375 tree
3376 build_cp_library_fn_ptr (const char* name, tree type)
3378 return build_cp_library_fn (get_identifier (name), ERROR_MARK, type);
3381 /* Like build_library_fn, but also pushes the function so that we will
3382 be able to find it via IDENTIFIER_GLOBAL_VALUE. */
3384 tree
3385 push_library_fn (tree name, tree type)
3387 tree fn = build_library_fn (name, type);
3388 pushdecl_top_level (fn);
3389 return fn;
3392 /* Like build_cp_library_fn, but also pushes the function so that it
3393 will be found by normal lookup. */
3395 static tree
3396 push_cp_library_fn (enum tree_code operator_code, tree type)
3398 tree fn = build_cp_library_fn (ansi_opname (operator_code),
3399 operator_code,
3400 type);
3401 pushdecl (fn);
3402 return fn;
3405 /* Like push_library_fn, but takes a TREE_LIST of parm types rather than
3406 a FUNCTION_TYPE. */
3408 tree
3409 push_void_library_fn (tree name, tree parmtypes)
3411 tree type = build_function_type (void_type_node, parmtypes);
3412 return push_library_fn (name, type);
3415 /* Like push_library_fn, but also note that this function throws
3416 and does not return. Used for __throw_foo and the like. */
3418 tree
3419 push_throw_library_fn (tree name, tree type)
3421 tree fn = push_library_fn (name, type);
3422 TREE_THIS_VOLATILE (fn) = 1;
3423 TREE_NOTHROW (fn) = 0;
3424 return fn;
3427 /* When we call finish_struct for an anonymous union, we create
3428 default copy constructors and such. But, an anonymous union
3429 shouldn't have such things; this function undoes the damage to the
3430 anonymous union type T.
3432 (The reason that we create the synthesized methods is that we don't
3433 distinguish `union { int i; }' from `typedef union { int i; } U'.
3434 The first is an anonymous union; the second is just an ordinary
3435 union type.) */
3437 void
3438 fixup_anonymous_aggr (tree t)
3440 tree *q;
3442 /* Wipe out memory of synthesized methods. */
3443 TYPE_HAS_CONSTRUCTOR (t) = 0;
3444 TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
3445 TYPE_HAS_INIT_REF (t) = 0;
3446 TYPE_HAS_CONST_INIT_REF (t) = 0;
3447 TYPE_HAS_ASSIGN_REF (t) = 0;
3448 TYPE_HAS_CONST_ASSIGN_REF (t) = 0;
3450 /* Splice the implicitly generated functions out of the TYPE_METHODS
3451 list. */
3452 q = &TYPE_METHODS (t);
3453 while (*q)
3455 if (DECL_ARTIFICIAL (*q))
3456 *q = TREE_CHAIN (*q);
3457 else
3458 q = &TREE_CHAIN (*q);
3461 /* ISO C++ 9.5.3. Anonymous unions may not have function members. */
3462 if (TYPE_METHODS (t))
3463 error ("%Jan anonymous union cannot have function members",
3464 TYPE_MAIN_DECL (t));
3466 /* Anonymous aggregates cannot have fields with ctors, dtors or complex
3467 assignment operators (because they cannot have these methods themselves).
3468 For anonymous unions this is already checked because they are not allowed
3469 in any union, otherwise we have to check it. */
3470 if (TREE_CODE (t) != UNION_TYPE)
3472 tree field, type;
3474 for (field = TYPE_FIELDS (t); field; field = TREE_CHAIN (field))
3475 if (TREE_CODE (field) == FIELD_DECL)
3477 type = TREE_TYPE (field);
3478 if (CLASS_TYPE_P (type))
3480 if (TYPE_NEEDS_CONSTRUCTING (type))
3481 error ("member %q+#D with constructor not allowed "
3482 "in anonymous aggregate", field);
3483 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
3484 error ("member %q+#D with destructor not allowed "
3485 "in anonymous aggregate", field);
3486 if (TYPE_HAS_COMPLEX_ASSIGN_REF (type))
3487 error ("member %q+#D with copy assignment operator "
3488 "not allowed in anonymous aggregate", field);
3494 /* Make sure that a declaration with no declarator is well-formed, i.e.
3495 just declares a tagged type or anonymous union.
3497 Returns the type declared; or NULL_TREE if none. */
3499 tree
3500 check_tag_decl (cp_decl_specifier_seq *declspecs)
3502 int saw_friend = declspecs->specs[(int)ds_friend] != 0;
3503 int saw_typedef = declspecs->specs[(int)ds_typedef] != 0;
3504 /* If a class, struct, or enum type is declared by the DECLSPECS
3505 (i.e, if a class-specifier, enum-specifier, or non-typename
3506 elaborated-type-specifier appears in the DECLSPECS),
3507 DECLARED_TYPE is set to the corresponding type. */
3508 tree declared_type = NULL_TREE;
3509 bool error_p = false;
3511 if (declspecs->multiple_types_p)
3512 error ("multiple types in one declaration");
3513 else if (declspecs->redefined_builtin_type)
3515 if (!in_system_header)
3516 pedwarn ("redeclaration of C++ built-in type %qT",
3517 declspecs->redefined_builtin_type);
3518 return NULL_TREE;
3521 if (declspecs->type
3522 && TYPE_P (declspecs->type)
3523 && ((TREE_CODE (declspecs->type) != TYPENAME_TYPE
3524 && IS_AGGR_TYPE (declspecs->type))
3525 || TREE_CODE (declspecs->type) == ENUMERAL_TYPE))
3526 declared_type = declspecs->type;
3527 else if (declspecs->type == error_mark_node)
3528 error_p = true;
3529 if (declared_type == NULL_TREE && ! saw_friend && !error_p)
3530 pedwarn ("declaration does not declare anything");
3531 /* Check for an anonymous union. */
3532 else if (declared_type && IS_AGGR_TYPE_CODE (TREE_CODE (declared_type))
3533 && TYPE_ANONYMOUS_P (declared_type))
3535 /* 7/3 In a simple-declaration, the optional init-declarator-list
3536 can be omitted only when declaring a class (clause 9) or
3537 enumeration (7.2), that is, when the decl-specifier-seq contains
3538 either a class-specifier, an elaborated-type-specifier with
3539 a class-key (9.1), or an enum-specifier. In these cases and
3540 whenever a class-specifier or enum-specifier is present in the
3541 decl-specifier-seq, the identifiers in these specifiers are among
3542 the names being declared by the declaration (as class-name,
3543 enum-names, or enumerators, depending on the syntax). In such
3544 cases, and except for the declaration of an unnamed bit-field (9.6),
3545 the decl-specifier-seq shall introduce one or more names into the
3546 program, or shall redeclare a name introduced by a previous
3547 declaration. [Example:
3548 enum { }; // ill-formed
3549 typedef class { }; // ill-formed
3550 --end example] */
3551 if (saw_typedef)
3553 error ("missing type-name in typedef-declaration");
3554 return NULL_TREE;
3556 /* Anonymous unions are objects, so they can have specifiers. */;
3557 SET_ANON_AGGR_TYPE_P (declared_type);
3559 if (TREE_CODE (declared_type) != UNION_TYPE && pedantic
3560 && !in_system_header)
3561 pedwarn ("ISO C++ prohibits anonymous structs");
3564 else
3566 if (declspecs->specs[(int)ds_inline]
3567 || declspecs->specs[(int)ds_virtual])
3568 error ("%qs can only be specified for functions",
3569 declspecs->specs[(int)ds_inline]
3570 ? "inline" : "virtual");
3571 else if (saw_friend
3572 && (!current_class_type
3573 || current_scope () != current_class_type))
3574 error ("%<friend%> can only be specified inside a class");
3575 else if (declspecs->specs[(int)ds_explicit])
3576 error ("%<explicit%> can only be specified for constructors");
3577 else if (declspecs->storage_class)
3578 error ("a storage class can only be specified for objects "
3579 "and functions");
3580 else if (declspecs->specs[(int)ds_const]
3581 || declspecs->specs[(int)ds_volatile]
3582 || declspecs->specs[(int)ds_restrict]
3583 || declspecs->specs[(int)ds_thread])
3584 error ("qualifiers can only be specified for objects "
3585 "and functions");
3588 return declared_type;
3591 /* Called when a declaration is seen that contains no names to declare.
3592 If its type is a reference to a structure, union or enum inherited
3593 from a containing scope, shadow that tag name for the current scope
3594 with a forward reference.
3595 If its type defines a new named structure or union
3596 or defines an enum, it is valid but we need not do anything here.
3597 Otherwise, it is an error.
3599 C++: may have to grok the declspecs to learn about static,
3600 complain for anonymous unions.
3602 Returns the TYPE declared -- or NULL_TREE if none. */
3604 tree
3605 shadow_tag (cp_decl_specifier_seq *declspecs)
3607 tree t = check_tag_decl (declspecs);
3609 if (!t)
3610 return NULL_TREE;
3612 if (declspecs->attributes)
3614 warning (0, "attribute ignored in declaration of %q+#T", t);
3615 warning (0, "attribute for %q+#T must follow the %qs keyword",
3616 t, class_key_or_enum_as_string (t));
3620 maybe_process_partial_specialization (t);
3622 /* This is where the variables in an anonymous union are
3623 declared. An anonymous union declaration looks like:
3624 union { ... } ;
3625 because there is no declarator after the union, the parser
3626 sends that declaration here. */
3627 if (ANON_AGGR_TYPE_P (t))
3629 fixup_anonymous_aggr (t);
3631 if (TYPE_FIELDS (t))
3633 tree decl = grokdeclarator (/*declarator=*/NULL,
3634 declspecs, NORMAL, 0, NULL);
3635 finish_anon_union (decl);
3639 return t;
3642 /* Decode a "typename", such as "int **", returning a ..._TYPE node. */
3644 tree
3645 groktypename (cp_decl_specifier_seq *type_specifiers,
3646 const cp_declarator *declarator)
3648 tree attrs;
3649 tree type;
3650 attrs = type_specifiers->attributes;
3651 type_specifiers->attributes = NULL_TREE;
3652 type = grokdeclarator (declarator, type_specifiers, TYPENAME, 0, &attrs);
3653 if (attrs)
3654 cplus_decl_attributes (&type, attrs, 0);
3655 return type;
3658 /* Decode a declarator in an ordinary declaration or data definition.
3659 This is called as soon as the type information and variable name
3660 have been parsed, before parsing the initializer if any.
3661 Here we create the ..._DECL node, fill in its type,
3662 and put it on the list of decls for the current context.
3663 The ..._DECL node is returned as the value.
3665 Exception: for arrays where the length is not specified,
3666 the type is left null, to be filled in by `cp_finish_decl'.
3668 Function definitions do not come here; they go to start_function
3669 instead. However, external and forward declarations of functions
3670 do go through here. Structure field declarations are done by
3671 grokfield and not through here. */
3673 tree
3674 start_decl (const cp_declarator *declarator,
3675 cp_decl_specifier_seq *declspecs,
3676 int initialized,
3677 tree attributes,
3678 tree prefix_attributes,
3679 tree *pushed_scope_p)
3681 tree decl;
3682 tree type, tem;
3683 tree context;
3685 *pushed_scope_p = NULL_TREE;
3687 /* An object declared as __attribute__((deprecated)) suppresses
3688 warnings of uses of other deprecated items. */
3689 if (lookup_attribute ("deprecated", attributes))
3690 deprecated_state = DEPRECATED_SUPPRESS;
3692 attributes = chainon (attributes, prefix_attributes);
3694 decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
3695 &attributes);
3697 deprecated_state = DEPRECATED_NORMAL;
3699 if (decl == NULL_TREE || TREE_CODE (decl) == VOID_TYPE
3700 || decl == error_mark_node)
3701 return error_mark_node;
3703 type = TREE_TYPE (decl);
3705 context = DECL_CONTEXT (decl);
3707 if (context)
3709 *pushed_scope_p = push_scope (context);
3711 /* We are only interested in class contexts, later. */
3712 if (TREE_CODE (context) == NAMESPACE_DECL)
3713 context = NULL_TREE;
3716 if (initialized)
3717 /* Is it valid for this decl to have an initializer at all?
3718 If not, set INITIALIZED to zero, which will indirectly
3719 tell `cp_finish_decl' to ignore the initializer once it is parsed. */
3720 switch (TREE_CODE (decl))
3722 case TYPE_DECL:
3723 error ("typedef %qD is initialized (use __typeof__ instead)", decl);
3724 return error_mark_node;
3726 case FUNCTION_DECL:
3727 error ("function %q#D is initialized like a variable", decl);
3728 initialized = 0;
3729 break;
3731 default:
3732 break;
3735 if (initialized)
3737 if (! toplevel_bindings_p ()
3738 && DECL_EXTERNAL (decl))
3739 warning (0, "declaration of %q#D has %<extern%> and is initialized",
3740 decl);
3741 DECL_EXTERNAL (decl) = 0;
3742 if (toplevel_bindings_p ())
3743 TREE_STATIC (decl) = 1;
3745 /* Tell `pushdecl' this is an initialized decl
3746 even though we don't yet have the initializer expression.
3747 Also tell `cp_finish_decl' it may store the real initializer. */
3748 DECL_INITIAL (decl) = error_mark_node;
3751 /* Set attributes here so if duplicate decl, will have proper attributes. */
3752 cplus_decl_attributes (&decl, attributes, 0);
3754 /* If #pragma weak was used, mark the decl weak now. */
3755 maybe_apply_pragma_weak (decl);
3757 if (TREE_CODE (decl) == FUNCTION_DECL
3758 && DECL_DECLARED_INLINE_P (decl)
3759 && DECL_UNINLINABLE (decl)
3760 && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl)))
3761 warning (0, "inline function %q+D given attribute noinline", decl);
3763 if (context && COMPLETE_TYPE_P (complete_type (context)))
3765 if (TREE_CODE (decl) == VAR_DECL)
3767 tree field = lookup_field (context, DECL_NAME (decl), 0, false);
3768 if (field == NULL_TREE || TREE_CODE (field) != VAR_DECL)
3769 error ("%q#D is not a static member of %q#T", decl, context);
3770 else
3772 if (DECL_CONTEXT (field) != context)
3774 if (!same_type_p (DECL_CONTEXT (field), context))
3775 pedwarn ("ISO C++ does not permit %<%T::%D%> "
3776 "to be defined as %<%T::%D%>",
3777 DECL_CONTEXT (field), DECL_NAME (decl),
3778 context, DECL_NAME (decl));
3779 DECL_CONTEXT (decl) = DECL_CONTEXT (field);
3781 if (processing_specialization
3782 && template_class_depth (context) == 0
3783 && CLASSTYPE_TEMPLATE_SPECIALIZATION (context))
3784 error ("template header not allowed in member definition "
3785 "of explicitly specialized class");
3786 /* Static data member are tricky; an in-class initialization
3787 still doesn't provide a definition, so the in-class
3788 declaration will have DECL_EXTERNAL set, but will have an
3789 initialization. Thus, duplicate_decls won't warn
3790 about this situation, and so we check here. */
3791 if (DECL_INITIAL (decl)
3792 && DECL_INITIALIZED_IN_CLASS_P (field))
3793 error ("duplicate initialization of %qD", decl);
3794 if (duplicate_decls (decl, field, /*newdecl_is_friend=*/false))
3795 decl = field;
3798 else
3800 tree field = check_classfn (context, decl,
3801 (processing_template_decl
3802 > template_class_depth (context))
3803 ? current_template_parms
3804 : NULL_TREE);
3805 if (field && duplicate_decls (decl, field,
3806 /*newdecl_is_friend=*/false))
3807 decl = field;
3810 /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set. */
3811 DECL_IN_AGGR_P (decl) = 0;
3812 /* Do not mark DECL as an explicit specialization if it was not
3813 already marked as an instantiation; a declaration should
3814 never be marked as a specialization unless we know what
3815 template is being specialized. */
3816 if (DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl))
3818 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
3820 /* [temp.expl.spec] An explicit specialization of a static data
3821 member of a template is a definition if the declaration
3822 includes an initializer; otherwise, it is a declaration.
3824 We check for processing_specialization so this only applies
3825 to the new specialization syntax. */
3826 if (!DECL_INITIAL (decl)
3827 && processing_specialization)
3828 DECL_EXTERNAL (decl) = 1;
3831 if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl))
3832 pedwarn ("declaration of %q#D outside of class is not definition",
3833 decl);
3836 /* Enter this declaration into the symbol table. */
3837 tem = maybe_push_decl (decl);
3839 if (processing_template_decl)
3840 tem = push_template_decl (tem);
3841 if (tem == error_mark_node)
3842 return error_mark_node;
3844 #if ! defined (ASM_OUTPUT_BSS) && ! defined (ASM_OUTPUT_ALIGNED_BSS)
3845 /* Tell the back-end to use or not use .common as appropriate. If we say
3846 -fconserve-space, we want this to save .data space, at the expense of
3847 wrong semantics. If we say -fno-conserve-space, we want this to
3848 produce errors about redefs; to do this we force variables into the
3849 data segment. */
3850 DECL_COMMON (tem) = ((TREE_CODE (tem) != VAR_DECL
3851 || !DECL_THREAD_LOCAL_P (tem))
3852 && (flag_conserve_space || ! TREE_PUBLIC (tem)));
3853 #endif
3855 if (! processing_template_decl)
3856 start_decl_1 (tem);
3858 return tem;
3861 void
3862 start_decl_1 (tree decl)
3864 tree type = TREE_TYPE (decl);
3865 int initialized = (DECL_INITIAL (decl) != NULL_TREE);
3867 if (type == error_mark_node)
3868 return;
3870 if (initialized)
3871 /* Is it valid for this decl to have an initializer at all?
3872 If not, set INITIALIZED to zero, which will indirectly
3873 tell `cp_finish_decl' to ignore the initializer once it is parsed. */
3875 /* Don't allow initializations for incomplete types except for
3876 arrays which might be completed by the initialization. */
3877 if (COMPLETE_TYPE_P (complete_type (type)))
3878 ; /* A complete type is ok. */
3879 else if (TREE_CODE (type) != ARRAY_TYPE)
3881 error ("variable %q#D has initializer but incomplete type", decl);
3882 initialized = 0;
3883 type = TREE_TYPE (decl) = error_mark_node;
3885 else if (!COMPLETE_TYPE_P (complete_type (TREE_TYPE (type))))
3887 if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
3888 error ("elements of array %q#D have incomplete type", decl);
3889 /* else we already gave an error in start_decl. */
3890 initialized = 0;
3894 if (!initialized
3895 && TREE_CODE (decl) != TYPE_DECL
3896 && TREE_CODE (decl) != TEMPLATE_DECL
3897 && type != error_mark_node
3898 && IS_AGGR_TYPE (type)
3899 && ! DECL_EXTERNAL (decl))
3901 if ((! processing_template_decl || ! uses_template_parms (type))
3902 && !COMPLETE_TYPE_P (complete_type (type)))
3904 error ("aggregate %q#D has incomplete type and cannot be defined",
3905 decl);
3906 /* Change the type so that assemble_variable will give
3907 DECL an rtl we can live with: (mem (const_int 0)). */
3908 type = TREE_TYPE (decl) = error_mark_node;
3910 else
3912 /* If any base type in the hierarchy of TYPE needs a constructor,
3913 then we set initialized to 1. This way any nodes which are
3914 created for the purposes of initializing this aggregate
3915 will live as long as it does. This is necessary for global
3916 aggregates which do not have their initializers processed until
3917 the end of the file. */
3918 initialized = TYPE_NEEDS_CONSTRUCTING (type);
3922 if (! initialized)
3923 DECL_INITIAL (decl) = NULL_TREE;
3925 /* Create a new scope to hold this declaration if necessary.
3926 Whether or not a new scope is necessary cannot be determined
3927 until after the type has been completed; if the type is a
3928 specialization of a class template it is not until after
3929 instantiation has occurred that TYPE_HAS_NONTRIVIAL_DESTRUCTOR
3930 will be set correctly. */
3931 maybe_push_cleanup_level (type);
3934 /* Handle initialization of references. DECL, TYPE, and INIT have the
3935 same meaning as in cp_finish_decl. *CLEANUP must be NULL on entry,
3936 but will be set to a new CLEANUP_STMT if a temporary is created
3937 that must be destroyed subsequently.
3939 Returns an initializer expression to use to initialize DECL, or
3940 NULL if the initialization can be performed statically.
3942 Quotes on semantics can be found in ARM 8.4.3. */
3944 static tree
3945 grok_reference_init (tree decl, tree type, tree init, tree *cleanup)
3947 tree tmp;
3949 if (init == NULL_TREE)
3951 if ((DECL_LANG_SPECIFIC (decl) == 0
3952 || DECL_IN_AGGR_P (decl) == 0)
3953 && ! DECL_THIS_EXTERN (decl))
3954 error ("%qD declared as reference but not initialized", decl);
3955 return NULL_TREE;
3958 if (TREE_CODE (init) == CONSTRUCTOR)
3960 error ("ISO C++ forbids use of initializer list to "
3961 "initialize reference %qD", decl);
3962 return NULL_TREE;
3965 if (TREE_CODE (init) == TREE_LIST)
3966 init = build_x_compound_expr_from_list (init, "initializer");
3968 if (TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE
3969 && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
3970 /* Note: default conversion is only called in very special cases. */
3971 init = decay_conversion (init);
3973 /* Convert INIT to the reference type TYPE. This may involve the
3974 creation of a temporary, whose lifetime must be the same as that
3975 of the reference. If so, a DECL_EXPR for the temporary will be
3976 added just after the DECL_EXPR for DECL. That's why we don't set
3977 DECL_INITIAL for local references (instead assigning to them
3978 explicitly); we need to allow the temporary to be initialized
3979 first. */
3980 tmp = initialize_reference (type, init, decl, cleanup);
3982 if (tmp == error_mark_node)
3983 return NULL_TREE;
3984 else if (tmp == NULL_TREE)
3986 error ("cannot initialize %qT from %qT", type, TREE_TYPE (init));
3987 return NULL_TREE;
3990 if (TREE_STATIC (decl) && !TREE_CONSTANT (tmp))
3991 return tmp;
3993 DECL_INITIAL (decl) = tmp;
3995 return NULL_TREE;
3998 /* Designated initializers in arrays are not supported in GNU C++.
3999 The parser cannot detect this error since it does not know whether
4000 a given brace-enclosed initializer is for a class type or for an
4001 array. This function checks that CE does not use a designated
4002 initializer. If it does, an error is issued. Returns true if CE
4003 is valid, i.e., does not have a designated initializer. */
4005 static bool
4006 check_array_designated_initializer (const constructor_elt *ce)
4008 /* Designated initializers for array elements arenot supported. */
4009 if (ce->index)
4011 if (TREE_CODE (ce->index) == IDENTIFIER_NODE)
4012 error ("name %qD used in a GNU-style designated "
4013 "initializer for an array", ce->index);
4014 return false;
4017 return true;
4020 /* When parsing `int a[] = {1, 2};' we don't know the size of the
4021 array until we finish parsing the initializer. If that's the
4022 situation we're in, update DECL accordingly. */
4024 static void
4025 maybe_deduce_size_from_array_init (tree decl, tree init)
4027 tree type = TREE_TYPE (decl);
4029 if (TREE_CODE (type) == ARRAY_TYPE
4030 && TYPE_DOMAIN (type) == NULL_TREE
4031 && TREE_CODE (decl) != TYPE_DECL)
4033 /* do_default is really a C-ism to deal with tentative definitions.
4034 But let's leave it here to ease the eventual merge. */
4035 int do_default = !DECL_EXTERNAL (decl);
4036 tree initializer = init ? init : DECL_INITIAL (decl);
4037 int failure = 0;
4039 /* Check that there are no designated initializers in INIT, as
4040 those are not supported in GNU C++, and as the middle-end
4041 will crash if presented with a non-numeric designated
4042 initializer. */
4043 if (initializer && TREE_CODE (initializer) == CONSTRUCTOR)
4045 VEC(constructor_elt,gc) *v = CONSTRUCTOR_ELTS (initializer);
4046 constructor_elt *ce;
4047 HOST_WIDE_INT i;
4048 for (i = 0;
4049 VEC_iterate (constructor_elt, v, i, ce);
4050 ++i)
4051 if (!check_array_designated_initializer (ce))
4052 failure = 1;
4055 if (!failure)
4057 failure = cp_complete_array_type (&TREE_TYPE (decl), initializer,
4058 do_default);
4059 if (failure == 1)
4061 error ("initializer fails to determine size of %qD", decl);
4062 TREE_TYPE (decl) = error_mark_node;
4064 else if (failure == 2)
4066 if (do_default)
4068 error ("array size missing in %qD", decl);
4069 TREE_TYPE (decl) = error_mark_node;
4071 /* If a `static' var's size isn't known, make it extern as
4072 well as static, so it does not get allocated. If it's not
4073 `static', then don't mark it extern; finish_incomplete_decl
4074 will give it a default size and it will get allocated. */
4075 else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
4076 DECL_EXTERNAL (decl) = 1;
4078 else if (failure == 3)
4080 error ("zero-size array %qD", decl);
4081 TREE_TYPE (decl) = error_mark_node;
4085 cp_apply_type_quals_to_decl (cp_type_quals (TREE_TYPE (decl)), decl);
4087 layout_decl (decl, 0);
4091 /* Set DECL_SIZE, DECL_ALIGN, etc. for DECL (a VAR_DECL), and issue
4092 any appropriate error messages regarding the layout. */
4094 static void
4095 layout_var_decl (tree decl)
4097 tree type;
4099 type = TREE_TYPE (decl);
4100 if (type == error_mark_node)
4101 return;
4103 /* If we haven't already layed out this declaration, do so now.
4104 Note that we must not call complete type for an external object
4105 because it's type might involve templates that we are not
4106 supposed to instantiate yet. (And it's perfectly valid to say
4107 `extern X x' for some incomplete type `X'.) */
4108 if (!DECL_EXTERNAL (decl))
4109 complete_type (type);
4110 if (!DECL_SIZE (decl)
4111 && TREE_TYPE (decl) != error_mark_node
4112 && (COMPLETE_TYPE_P (type)
4113 || (TREE_CODE (type) == ARRAY_TYPE
4114 && !TYPE_DOMAIN (type)
4115 && COMPLETE_TYPE_P (TREE_TYPE (type)))))
4116 layout_decl (decl, 0);
4118 if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
4120 /* An automatic variable with an incomplete type: that is an error.
4121 Don't talk about array types here, since we took care of that
4122 message in grokdeclarator. */
4123 error ("storage size of %qD isn't known", decl);
4124 TREE_TYPE (decl) = error_mark_node;
4126 #if 0
4127 /* Keep this code around in case we later want to control debug info
4128 based on whether a type is "used". (jason 1999-11-11) */
4130 else if (!DECL_EXTERNAL (decl) && IS_AGGR_TYPE (ttype))
4131 /* Let debugger know it should output info for this type. */
4132 note_debug_info_needed (ttype);
4134 if (TREE_STATIC (decl) && DECL_CLASS_SCOPE_P (decl))
4135 note_debug_info_needed (DECL_CONTEXT (decl));
4136 #endif
4138 if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
4139 && DECL_SIZE (decl) != NULL_TREE
4140 && ! TREE_CONSTANT (DECL_SIZE (decl)))
4142 if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
4143 constant_expression_warning (DECL_SIZE (decl));
4144 else
4145 error ("storage size of %qD isn't constant", decl);
4149 /* If a local static variable is declared in an inline function, or if
4150 we have a weak definition, we must endeavor to create only one
4151 instance of the variable at link-time. */
4153 static void
4154 maybe_commonize_var (tree decl)
4156 /* Static data in a function with comdat linkage also has comdat
4157 linkage. */
4158 if (TREE_STATIC (decl)
4159 /* Don't mess with __FUNCTION__. */
4160 && ! DECL_ARTIFICIAL (decl)
4161 && DECL_FUNCTION_SCOPE_P (decl)
4162 /* Unfortunately, import_export_decl has not always been called
4163 before the function is processed, so we cannot simply check
4164 DECL_COMDAT. */
4165 && (DECL_COMDAT (DECL_CONTEXT (decl))
4166 || ((DECL_DECLARED_INLINE_P (DECL_CONTEXT (decl))
4167 || DECL_TEMPLATE_INSTANTIATION (DECL_CONTEXT (decl)))
4168 && TREE_PUBLIC (DECL_CONTEXT (decl)))))
4170 if (flag_weak)
4172 /* With weak symbols, we simply make the variable COMDAT;
4173 that will cause copies in multiple translations units to
4174 be merged. */
4175 comdat_linkage (decl);
4177 else
4179 if (DECL_INITIAL (decl) == NULL_TREE
4180 || DECL_INITIAL (decl) == error_mark_node)
4182 /* Without weak symbols, we can use COMMON to merge
4183 uninitialized variables. */
4184 TREE_PUBLIC (decl) = 1;
4185 DECL_COMMON (decl) = 1;
4187 else
4189 /* While for initialized variables, we must use internal
4190 linkage -- which means that multiple copies will not
4191 be merged. */
4192 TREE_PUBLIC (decl) = 0;
4193 DECL_COMMON (decl) = 0;
4194 warning (0, "sorry: semantics of inline function static "
4195 "data %q+#D are wrong (you'll wind up "
4196 "with multiple copies)", decl);
4197 warning (0, "%J you can work around this by removing "
4198 "the initializer",
4199 decl);
4203 else if (DECL_LANG_SPECIFIC (decl) && DECL_COMDAT (decl))
4204 /* Set it up again; we might have set DECL_INITIAL since the last
4205 time. */
4206 comdat_linkage (decl);
4209 /* Issue an error message if DECL is an uninitialized const variable. */
4211 static void
4212 check_for_uninitialized_const_var (tree decl)
4214 tree type = TREE_TYPE (decl);
4216 /* ``Unless explicitly declared extern, a const object does not have
4217 external linkage and must be initialized. ($8.4; $12.1)'' ARM
4218 7.1.6 */
4219 if (TREE_CODE (decl) == VAR_DECL
4220 && TREE_CODE (type) != REFERENCE_TYPE
4221 && CP_TYPE_CONST_P (type)
4222 && !TYPE_NEEDS_CONSTRUCTING (type)
4223 && !DECL_INITIAL (decl))
4224 error ("uninitialized const %qD", decl);
4228 /* Structure holding the current initializer being processed by reshape_init.
4229 CUR is a pointer to the current element being processed, END is a pointer
4230 after the last element present in the initializer. */
4231 typedef struct reshape_iterator_t
4233 constructor_elt *cur;
4234 constructor_elt *end;
4235 } reshape_iter;
4237 static tree reshape_init_r (tree, reshape_iter *, bool);
4239 /* FIELD is a FIELD_DECL or NULL. In the former case, the value
4240 returned is the next FIELD_DECL (possibly FIELD itself) that can be
4241 initialized. If there are no more such fields, the return value
4242 will be NULL. */
4244 static tree
4245 next_initializable_field (tree field)
4247 while (field
4248 && (TREE_CODE (field) != FIELD_DECL
4249 || (DECL_C_BIT_FIELD (field) && !DECL_NAME (field))
4250 || DECL_ARTIFICIAL (field)))
4251 field = TREE_CHAIN (field);
4253 return field;
4256 /* Subroutine of reshape_init_array and reshape_init_vector, which does
4257 the actual work. ELT_TYPE is the element type of the array. MAX_INDEX is an
4258 INTEGER_CST representing the size of the array minus one (the maximum index),
4259 or NULL_TREE if the array was declared without specifying the size. D is
4260 the iterator within the constructor. */
4262 static tree
4263 reshape_init_array_1 (tree elt_type, tree max_index, reshape_iter *d)
4265 tree new_init;
4266 bool sized_array_p = (max_index != NULL_TREE);
4267 unsigned HOST_WIDE_INT max_index_cst = 0;
4268 unsigned HOST_WIDE_INT index;
4270 /* The initializer for an array is always a CONSTRUCTOR. */
4271 new_init = build_constructor (NULL_TREE, NULL);
4273 if (sized_array_p)
4275 /* Minus 1 is used for zero sized arrays. */
4276 if (integer_all_onesp (max_index))
4277 return new_init;
4279 if (host_integerp (max_index, 1))
4280 max_index_cst = tree_low_cst (max_index, 1);
4281 /* sizetype is sign extended, not zero extended. */
4282 else
4283 max_index_cst = tree_low_cst (fold_convert (size_type_node, max_index),
4287 /* Loop until there are no more initializers. */
4288 for (index = 0;
4289 d->cur != d->end && (!sized_array_p || index <= max_index_cst);
4290 ++index)
4292 tree elt_init;
4294 check_array_designated_initializer (d->cur);
4295 elt_init = reshape_init_r (elt_type, d, /*first_initializer_p=*/false);
4296 if (elt_init == error_mark_node)
4297 return error_mark_node;
4298 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init), NULL_TREE, elt_init);
4301 return new_init;
4304 /* Subroutine of reshape_init_r, processes the initializers for arrays.
4305 Parameters are the same of reshape_init_r. */
4307 static tree
4308 reshape_init_array (tree type, reshape_iter *d)
4310 tree max_index = NULL_TREE;
4312 gcc_assert (TREE_CODE (type) == ARRAY_TYPE);
4314 if (TYPE_DOMAIN (type))
4315 max_index = array_type_nelts (type);
4317 return reshape_init_array_1 (TREE_TYPE (type), max_index, d);
4320 /* Subroutine of reshape_init_r, processes the initializers for vectors.
4321 Parameters are the same of reshape_init_r. */
4323 static tree
4324 reshape_init_vector (tree type, reshape_iter *d)
4326 tree max_index = NULL_TREE;
4327 tree rtype;
4329 gcc_assert (TREE_CODE (type) == VECTOR_TYPE);
4331 if (COMPOUND_LITERAL_P (d->cur->value))
4333 tree value = d->cur->value;
4334 if (!same_type_p (TREE_TYPE (value), type))
4336 error ("invalid type %qT as initializer for a vector of type %qT",
4337 TREE_TYPE (d->cur->value), type);
4338 value = error_mark_node;
4340 ++d->cur;
4341 return value;
4344 /* For a vector, the representation type is a struct
4345 containing a single member which is an array of the
4346 appropriate size. */
4347 rtype = TYPE_DEBUG_REPRESENTATION_TYPE (type);
4348 if (rtype && TYPE_DOMAIN (TREE_TYPE (TYPE_FIELDS (rtype))))
4349 max_index = array_type_nelts (TREE_TYPE (TYPE_FIELDS (rtype)));
4351 return reshape_init_array_1 (TREE_TYPE (type), max_index, d);
4354 /* Subroutine of reshape_init_r, processes the initializers for classes
4355 or union. Parameters are the same of reshape_init_r. */
4357 static tree
4358 reshape_init_class (tree type, reshape_iter *d, bool first_initializer_p)
4360 tree field;
4361 tree new_init;
4363 gcc_assert (CLASS_TYPE_P (type));
4365 /* The initializer for a class is always a CONSTRUCTOR. */
4366 new_init = build_constructor (NULL_TREE, NULL);
4367 field = next_initializable_field (TYPE_FIELDS (type));
4369 if (!field)
4371 /* [dcl.init.aggr]
4373 An initializer for an aggregate member that is an
4374 empty class shall have the form of an empty
4375 initializer-list {}. */
4376 if (!first_initializer_p)
4378 error ("initializer for %qT must be brace-enclosed", type);
4379 return error_mark_node;
4381 return new_init;
4384 /* Loop through the initializable fields, gathering initializers. */
4385 while (d->cur != d->end)
4387 tree field_init;
4389 /* Handle designated initializers, as an extension. */
4390 if (d->cur->index)
4392 if (pedantic)
4393 pedwarn ("ISO C++ does not allow designated initializers");
4395 field = lookup_field_1 (type, d->cur->index, /*want_type=*/false);
4397 if (!field || TREE_CODE (field) != FIELD_DECL)
4399 error ("%qT has no non-static data member named %qD", type,
4400 d->cur->index);
4401 return error_mark_node;
4405 /* If we processed all the member of the class, we are done. */
4406 if (!field)
4407 break;
4409 field_init = reshape_init_r (TREE_TYPE (field), d,
4410 /*first_initializer_p=*/false);
4411 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init), field, field_init);
4413 /* [dcl.init.aggr]
4415 When a union is initialized with a brace-enclosed
4416 initializer, the braces shall only contain an
4417 initializer for the first member of the union. */
4418 if (TREE_CODE (type) == UNION_TYPE)
4419 break;
4421 field = next_initializable_field (TREE_CHAIN (field));
4424 return new_init;
4427 /* Subroutine of reshape_init, which processes a single initializer (part of
4428 a CONSTRUCTOR). TYPE is the type of the variable being initialized, D is the
4429 iterator within the CONSTRUCTOR which points to the initializer to process.
4430 FIRST_INITIALIZER_P is true if this is the first initializer of the
4431 CONSTRUCTOR node. */
4433 static tree
4434 reshape_init_r (tree type, reshape_iter *d, bool first_initializer_p)
4436 tree init = d->cur->value;
4438 /* A non-aggregate type is always initialized with a single
4439 initializer. */
4440 if (!CP_AGGREGATE_TYPE_P (type))
4442 /* It is invalid to initialize a non-aggregate type with a
4443 brace-enclosed initializer.
4444 We need to check for BRACE_ENCLOSED_INITIALIZER_P here because
4445 of g++.old-deja/g++.mike/p7626.C: a pointer-to-member constant is
4446 a CONSTRUCTOR (with a record type). */
4447 if (TREE_CODE (init) == CONSTRUCTOR
4448 && BRACE_ENCLOSED_INITIALIZER_P (init)) /* p7626.C */
4450 error ("braces around scalar initializer for type %qT", type);
4451 init = error_mark_node;
4454 d->cur++;
4455 return init;
4458 /* [dcl.init.aggr]
4460 All implicit type conversions (clause _conv_) are considered when
4461 initializing the aggregate member with an initializer from an
4462 initializer-list. If the initializer can initialize a member,
4463 the member is initialized. Otherwise, if the member is itself a
4464 non-empty subaggregate, brace elision is assumed and the
4465 initializer is considered for the initialization of the first
4466 member of the subaggregate. */
4467 if (TREE_CODE (init) != CONSTRUCTOR
4468 && can_convert_arg (type, TREE_TYPE (init), init, LOOKUP_NORMAL))
4470 d->cur++;
4471 return init;
4474 /* [dcl.init.string]
4476 A char array (whether plain char, signed char, or unsigned char)
4477 can be initialized by a string-literal (optionally enclosed in
4478 braces); a wchar_t array can be initialized by a wide
4479 string-literal (optionally enclosed in braces). */
4480 if (TREE_CODE (type) == ARRAY_TYPE
4481 && char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (type))))
4483 tree str_init = init;
4485 /* Strip one level of braces if and only if they enclose a single
4486 element (as allowed by [dcl.init.string]). */
4487 if (!first_initializer_p
4488 && TREE_CODE (str_init) == CONSTRUCTOR
4489 && VEC_length (constructor_elt, CONSTRUCTOR_ELTS (str_init)) == 1)
4491 str_init = VEC_index (constructor_elt,
4492 CONSTRUCTOR_ELTS (str_init), 0)->value;
4495 /* If it's a string literal, then it's the initializer for the array
4496 as a whole. Otherwise, continue with normal initialization for
4497 array types (one value per array element). */
4498 if (TREE_CODE (str_init) == STRING_CST)
4500 d->cur++;
4501 return str_init;
4505 /* The following cases are about aggregates. If we are not within a full
4506 initializer already, and there is not a CONSTRUCTOR, it means that there
4507 is a missing set of braces (that is, we are processing the case for
4508 which reshape_init exists). */
4509 if (!first_initializer_p)
4511 if (TREE_CODE (init) == CONSTRUCTOR)
4513 if (TREE_TYPE (init) && TYPE_PTRMEMFUNC_P (TREE_TYPE (init)))
4514 /* There is no need to reshape pointer-to-member function
4515 initializers, as they are always constructed correctly
4516 by the front end. */
4518 else if (COMPOUND_LITERAL_P (init))
4519 /* For a nested compound literal, there is no need to reshape since
4520 brace elision is not allowed. Even if we decided to allow it,
4521 we should add a call to reshape_init in finish_compound_literal,
4522 before calling digest_init, so changing this code would still
4523 not be necessary. */
4524 gcc_assert (!BRACE_ENCLOSED_INITIALIZER_P (init));
4525 else
4527 ++d->cur;
4528 gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
4529 return reshape_init (type, init);
4533 warning (OPT_Wmissing_braces, "missing braces around initializer for %qT",
4534 type);
4537 /* Dispatch to specialized routines. */
4538 if (CLASS_TYPE_P (type))
4539 return reshape_init_class (type, d, first_initializer_p);
4540 else if (TREE_CODE (type) == ARRAY_TYPE)
4541 return reshape_init_array (type, d);
4542 else if (TREE_CODE (type) == VECTOR_TYPE)
4543 return reshape_init_vector (type, d);
4544 else
4545 gcc_unreachable();
4548 /* Undo the brace-elision allowed by [dcl.init.aggr] in a
4549 brace-enclosed aggregate initializer.
4551 INIT is the CONSTRUCTOR containing the list of initializers describing
4552 a brace-enclosed initializer for an entity of the indicated aggregate TYPE.
4553 It may not presently match the shape of the TYPE; for example:
4555 struct S { int a; int b; };
4556 struct S a[] = { 1, 2, 3, 4 };
4558 Here INIT will hold a VEC of four elements, rather than a
4559 VEC of two elements, each itself a VEC of two elements. This
4560 routine transforms INIT from the former form into the latter. The
4561 revised CONSTRUCTOR node is returned. */
4563 tree
4564 reshape_init (tree type, tree init)
4566 VEC(constructor_elt, gc) *v;
4567 reshape_iter d;
4568 tree new_init;
4570 gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
4572 v = CONSTRUCTOR_ELTS (init);
4574 /* An empty constructor does not need reshaping, and it is always a valid
4575 initializer. */
4576 if (VEC_empty (constructor_elt, v))
4577 return init;
4579 /* Recurse on this CONSTRUCTOR. */
4580 d.cur = VEC_index (constructor_elt, v, 0);
4581 d.end = d.cur + VEC_length (constructor_elt, v);
4583 new_init = reshape_init_r (type, &d, true);
4584 if (new_init == error_mark_node)
4585 return error_mark_node;
4587 /* Make sure all the element of the constructor were used. Otherwise,
4588 issue an error about exceeding initializers. */
4589 if (d.cur != d.end)
4590 error ("too many initializers for %qT", type);
4592 return new_init;
4595 /* Verify INIT (the initializer for DECL), and record the
4596 initialization in DECL_INITIAL, if appropriate. CLEANUP is as for
4597 grok_reference_init.
4599 If the return value is non-NULL, it is an expression that must be
4600 evaluated dynamically to initialize DECL. */
4602 static tree
4603 check_initializer (tree decl, tree init, int flags, tree *cleanup)
4605 tree type = TREE_TYPE (decl);
4606 tree init_code = NULL;
4608 /* If `start_decl' didn't like having an initialization, ignore it now. */
4609 if (init != NULL_TREE && DECL_INITIAL (decl) == NULL_TREE)
4610 init = NULL_TREE;
4612 /* If an initializer is present, DECL_INITIAL has been
4613 error_mark_node, to indicate that an as-of-yet unevaluated
4614 initialization will occur. From now on, DECL_INITIAL reflects
4615 the static initialization -- if any -- of DECL. */
4616 DECL_INITIAL (decl) = NULL_TREE;
4618 /* Things that are going to be initialized need to have complete
4619 type. */
4620 TREE_TYPE (decl) = type = complete_type (TREE_TYPE (decl));
4622 if (type == error_mark_node)
4623 /* We will have already complained. */
4624 init = NULL_TREE;
4626 if (TREE_CODE (type) == ARRAY_TYPE)
4628 tree element_type = TREE_TYPE (type);
4630 /* The array type itself need not be complete, because the
4631 initializer may tell us how many elements are in the array.
4632 But, the elements of the array must be complete. */
4633 if (!COMPLETE_TYPE_P (complete_type (element_type)))
4635 error ("elements of array %q#D have incomplete type", decl);
4636 return NULL_TREE;
4638 /* It is not valid to initialize an a VLA. */
4639 if (init
4640 && ((COMPLETE_TYPE_P (type) && !TREE_CONSTANT (TYPE_SIZE (type)))
4641 || !TREE_CONSTANT (TYPE_SIZE (element_type))))
4643 error ("variable-sized object %qD may not be initialized", decl);
4644 return NULL_TREE;
4647 else if (!COMPLETE_TYPE_P (type))
4649 error ("%qD has incomplete type", decl);
4650 TREE_TYPE (decl) = error_mark_node;
4651 return NULL_TREE;
4653 else
4654 /* There is no way to make a variable-sized class type in GNU C++. */
4655 gcc_assert (TREE_CONSTANT (TYPE_SIZE (type)));
4657 if (!CP_AGGREGATE_TYPE_P (type)
4658 && init && TREE_CODE (init) == CONSTRUCTOR
4659 && BRACE_ENCLOSED_INITIALIZER_P (init)
4660 && VEC_length (constructor_elt, CONSTRUCTOR_ELTS (init)) != 1)
4662 error ("scalar object %qD requires one element in initializer", decl);
4663 TREE_TYPE (decl) = error_mark_node;
4664 init = NULL_TREE;
4667 if (TREE_CODE (decl) == CONST_DECL)
4669 gcc_assert (TREE_CODE (decl) != REFERENCE_TYPE);
4671 DECL_INITIAL (decl) = init;
4673 gcc_assert (init != NULL_TREE);
4674 init = NULL_TREE;
4676 else if (!DECL_EXTERNAL (decl) && TREE_CODE (type) == REFERENCE_TYPE)
4677 init = grok_reference_init (decl, type, init, cleanup);
4678 else if (init)
4680 /* Do not reshape constructors of vectors (they don't need to be
4681 reshaped. */
4682 if (TREE_CODE (init) == CONSTRUCTOR
4683 && !COMPOUND_LITERAL_P (init)
4684 && !TREE_TYPE (init)) /* ptrmemfunc */
4686 init = reshape_init (type, init);
4688 if ((*targetm.vector_opaque_p) (type))
4690 error ("opaque vector types cannot be initialized");
4691 init = error_mark_node;
4695 /* If DECL has an array type without a specific bound, deduce the
4696 array size from the initializer. */
4697 maybe_deduce_size_from_array_init (decl, init);
4698 type = TREE_TYPE (decl);
4699 if (type == error_mark_node)
4700 return NULL_TREE;
4702 if (TYPE_HAS_CONSTRUCTOR (type) || TYPE_NEEDS_CONSTRUCTING (type))
4704 if (TREE_CODE (type) == ARRAY_TYPE)
4705 goto initialize_aggr;
4706 else if (TREE_CODE (init) == CONSTRUCTOR)
4708 if (TYPE_NON_AGGREGATE_CLASS (type))
4710 error ("%qD must be initialized by constructor, "
4711 "not by %<{...}%>",
4712 decl);
4713 init = error_mark_node;
4715 else
4716 goto dont_use_constructor;
4718 else
4720 int saved_stmts_are_full_exprs_p;
4722 initialize_aggr:
4723 saved_stmts_are_full_exprs_p = 0;
4724 if (building_stmt_tree ())
4726 saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
4727 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
4729 init = build_aggr_init (decl, init, flags);
4730 if (building_stmt_tree ())
4731 current_stmt_tree ()->stmts_are_full_exprs_p =
4732 saved_stmts_are_full_exprs_p;
4733 return init;
4736 else
4738 dont_use_constructor:
4739 if (TREE_CODE (init) != TREE_VEC)
4741 init_code = store_init_value (decl, init);
4742 if (pedantic && TREE_CODE (type) == ARRAY_TYPE
4743 && DECL_INITIAL (decl)
4744 && TREE_CODE (DECL_INITIAL (decl)) == STRING_CST
4745 && PAREN_STRING_LITERAL_P (DECL_INITIAL (decl)))
4746 warning (0, "array %qD initialized by parenthesized string literal %qE",
4747 decl, DECL_INITIAL (decl));
4748 init = NULL;
4752 else if (DECL_EXTERNAL (decl))
4754 else if (TYPE_P (type) && TYPE_NEEDS_CONSTRUCTING (type))
4755 goto initialize_aggr;
4756 else if (IS_AGGR_TYPE (type))
4758 tree core_type = strip_array_types (type);
4760 if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type))
4761 error ("structure %qD with uninitialized const members", decl);
4762 if (CLASSTYPE_REF_FIELDS_NEED_INIT (core_type))
4763 error ("structure %qD with uninitialized reference members", decl);
4765 check_for_uninitialized_const_var (decl);
4767 else
4768 check_for_uninitialized_const_var (decl);
4770 if (init && init != error_mark_node)
4771 init_code = build2 (INIT_EXPR, type, decl, init);
4773 return init_code;
4776 /* If DECL is not a local variable, give it RTL. */
4778 static void
4779 make_rtl_for_nonlocal_decl (tree decl, tree init, const char* asmspec)
4781 int toplev = toplevel_bindings_p ();
4782 int defer_p;
4783 const char *filename;
4785 /* Set the DECL_ASSEMBLER_NAME for the object. */
4786 if (asmspec)
4788 /* The `register' keyword, when used together with an
4789 asm-specification, indicates that the variable should be
4790 placed in a particular register. */
4791 if (TREE_CODE (decl) == VAR_DECL && DECL_REGISTER (decl))
4793 set_user_assembler_name (decl, asmspec);
4794 DECL_HARD_REGISTER (decl) = 1;
4796 else
4798 if (TREE_CODE (decl) == FUNCTION_DECL
4799 && DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL)
4800 set_builtin_user_assembler_name (decl, asmspec);
4801 set_user_assembler_name (decl, asmspec);
4805 /* Handle non-variables up front. */
4806 if (TREE_CODE (decl) != VAR_DECL)
4808 rest_of_decl_compilation (decl, toplev, at_eof);
4809 return;
4812 /* If we see a class member here, it should be a static data
4813 member. */
4814 if (DECL_LANG_SPECIFIC (decl) && DECL_IN_AGGR_P (decl))
4816 gcc_assert (TREE_STATIC (decl));
4817 /* An in-class declaration of a static data member should be
4818 external; it is only a declaration, and not a definition. */
4819 if (init == NULL_TREE)
4820 gcc_assert (DECL_EXTERNAL (decl));
4823 /* We don't create any RTL for local variables. */
4824 if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
4825 return;
4827 /* We defer emission of local statics until the corresponding
4828 DECL_EXPR is expanded. */
4829 defer_p = DECL_FUNCTION_SCOPE_P (decl) || DECL_VIRTUAL_P (decl);
4831 /* We try to defer namespace-scope static constants so that they are
4832 not emitted into the object file unnecessarily. */
4833 filename = input_filename;
4834 if (!DECL_VIRTUAL_P (decl)
4835 && TREE_READONLY (decl)
4836 && DECL_INITIAL (decl) != NULL_TREE
4837 && DECL_INITIAL (decl) != error_mark_node
4838 && filename != NULL
4839 && ! EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl))
4840 && toplev
4841 && !TREE_PUBLIC (decl))
4843 /* Fool with the linkage of static consts according to #pragma
4844 interface. */
4845 struct c_fileinfo *finfo = get_fileinfo (filename);
4846 if (!finfo->interface_unknown && !TREE_PUBLIC (decl))
4848 TREE_PUBLIC (decl) = 1;
4849 DECL_EXTERNAL (decl) = finfo->interface_only;
4852 defer_p = 1;
4854 /* Likewise for template instantiations. */
4855 else if (DECL_LANG_SPECIFIC (decl)
4856 && DECL_IMPLICIT_INSTANTIATION (decl))
4857 defer_p = 1;
4859 /* If we're not deferring, go ahead and assemble the variable. */
4860 if (!defer_p)
4861 rest_of_decl_compilation (decl, toplev, at_eof);
4864 /* Generate code to initialize DECL (a local variable). */
4866 static void
4867 initialize_local_var (tree decl, tree init)
4869 tree type = TREE_TYPE (decl);
4870 tree cleanup;
4872 gcc_assert (TREE_CODE (decl) == VAR_DECL
4873 || TREE_CODE (decl) == RESULT_DECL);
4874 gcc_assert (!TREE_STATIC (decl));
4876 if (DECL_SIZE (decl) == NULL_TREE)
4878 /* If we used it already as memory, it must stay in memory. */
4879 DECL_INITIAL (decl) = NULL_TREE;
4880 TREE_ADDRESSABLE (decl) = TREE_USED (decl);
4883 if (DECL_SIZE (decl) && type != error_mark_node)
4885 int already_used;
4887 /* Compute and store the initial value. */
4888 already_used = TREE_USED (decl) || TREE_USED (type);
4890 /* Perform the initialization. */
4891 if (init)
4893 int saved_stmts_are_full_exprs_p;
4895 gcc_assert (building_stmt_tree ());
4896 saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
4897 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
4898 finish_expr_stmt (init);
4899 current_stmt_tree ()->stmts_are_full_exprs_p =
4900 saved_stmts_are_full_exprs_p;
4903 /* Set this to 0 so we can tell whether an aggregate which was
4904 initialized was ever used. Don't do this if it has a
4905 destructor, so we don't complain about the 'resource
4906 allocation is initialization' idiom. Now set
4907 attribute((unused)) on types so decls of that type will be
4908 marked used. (see TREE_USED, above.) */
4909 if (TYPE_NEEDS_CONSTRUCTING (type)
4910 && ! already_used
4911 && TYPE_HAS_TRIVIAL_DESTRUCTOR (type)
4912 && DECL_NAME (decl))
4913 TREE_USED (decl) = 0;
4914 else if (already_used)
4915 TREE_USED (decl) = 1;
4918 /* Generate a cleanup, if necessary. */
4919 cleanup = cxx_maybe_build_cleanup (decl);
4920 if (DECL_SIZE (decl) && cleanup)
4921 finish_decl_cleanup (decl, cleanup);
4924 /* DECL is a VAR_DECL for a compiler-generated variable with static
4925 storage duration (like a virtual table) whose initializer is a
4926 compile-time constant. INIT must be either a TREE_LIST of values,
4927 or a CONSTRUCTOR. Initialize the variable and provide it to the
4928 back end. */
4930 void
4931 initialize_artificial_var (tree decl, tree init)
4933 gcc_assert (DECL_ARTIFICIAL (decl));
4934 if (TREE_CODE (init) == TREE_LIST)
4935 init = build_constructor_from_list (NULL_TREE, init);
4936 gcc_assert (TREE_CODE (init) == CONSTRUCTOR);
4937 DECL_INITIAL (decl) = init;
4938 DECL_INITIALIZED_P (decl) = 1;
4939 determine_visibility (decl);
4940 layout_var_decl (decl);
4941 maybe_commonize_var (decl);
4942 make_rtl_for_nonlocal_decl (decl, init, /*asmspec=*/NULL);
4945 /* Finish processing of a declaration;
4946 install its line number and initial value.
4947 If the length of an array type is not known before,
4948 it must be determined now, from the initial value, or it is an error.
4950 INIT is the initializer (if any) for DECL. If INIT_CONST_EXPR_P is
4951 true, then INIT is an integral constant expression.
4953 FLAGS is LOOKUP_ONLYCONVERTING if the = init syntax was used, else 0
4954 if the (init) syntax was used. */
4956 void
4957 cp_finish_decl (tree decl, tree init, bool init_const_expr_p,
4958 tree asmspec_tree, int flags)
4960 tree type;
4961 tree cleanup;
4962 const char *asmspec = NULL;
4963 int was_readonly = 0;
4964 bool var_definition_p = false;
4965 int saved_processing_template_decl;
4967 if (decl == error_mark_node)
4968 return;
4969 else if (! decl)
4971 if (init)
4972 error ("assignment (not initialization) in declaration");
4973 return;
4976 gcc_assert (TREE_CODE (decl) != RESULT_DECL);
4977 /* Parameters are handled by store_parm_decls, not cp_finish_decl. */
4978 gcc_assert (TREE_CODE (decl) != PARM_DECL);
4980 type = TREE_TYPE (decl);
4981 if (type == error_mark_node)
4982 return;
4984 /* Assume no cleanup is required. */
4985 cleanup = NULL_TREE;
4986 saved_processing_template_decl = processing_template_decl;
4988 /* If a name was specified, get the string. */
4989 if (global_scope_p (current_binding_level))
4990 asmspec_tree = maybe_apply_renaming_pragma (decl, asmspec_tree);
4991 if (asmspec_tree && asmspec_tree != error_mark_node)
4992 asmspec = TREE_STRING_POINTER (asmspec_tree);
4994 if (current_class_type
4995 && CP_DECL_CONTEXT (decl) == current_class_type
4996 && TYPE_BEING_DEFINED (current_class_type)
4997 && (DECL_INITIAL (decl) || init))
4998 DECL_INITIALIZED_IN_CLASS_P (decl) = 1;
5000 if (processing_template_decl)
5002 bool type_dependent_p;
5004 /* Add this declaration to the statement-tree. */
5005 if (at_function_scope_p ())
5006 add_decl_expr (decl);
5008 type_dependent_p = dependent_type_p (type);
5010 if (init && init_const_expr_p)
5012 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = 1;
5013 if (DECL_INTEGRAL_CONSTANT_VAR_P (decl))
5014 TREE_CONSTANT (decl) = 1;
5017 if (!init
5018 || !DECL_CLASS_SCOPE_P (decl)
5019 || !DECL_INTEGRAL_CONSTANT_VAR_P (decl)
5020 || type_dependent_p
5021 || value_dependent_expression_p (init)
5022 /* Check also if initializer is a value dependent
5023 { integral_constant_expression }. */
5024 || (TREE_CODE (init) == CONSTRUCTOR
5025 && VEC_length (constructor_elt, CONSTRUCTOR_ELTS (init)) == 1
5026 && value_dependent_expression_p
5027 (VEC_index (constructor_elt,
5028 CONSTRUCTOR_ELTS (init), 0)->value)))
5030 if (init && DECL_INITIAL (decl))
5031 DECL_INITIAL (decl) = init;
5032 if (TREE_CODE (decl) == VAR_DECL
5033 && !DECL_PRETTY_FUNCTION_P (decl)
5034 && !type_dependent_p)
5035 maybe_deduce_size_from_array_init (decl, init);
5036 goto finish_end;
5039 init = fold_non_dependent_expr (init);
5040 processing_template_decl = 0;
5043 /* Parameters are handled by store_parm_decls, not cp_finish_decl. */
5044 gcc_assert (TREE_CODE (decl) != PARM_DECL);
5046 /* Take care of TYPE_DECLs up front. */
5047 if (TREE_CODE (decl) == TYPE_DECL)
5049 if (type != error_mark_node
5050 && IS_AGGR_TYPE (type) && DECL_NAME (decl))
5052 if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
5053 warning (0, "shadowing previous type declaration of %q#D", decl);
5054 set_identifier_type_value (DECL_NAME (decl), decl);
5057 /* If we have installed this as the canonical typedef for this
5058 type, and that type has not been defined yet, delay emitting
5059 the debug information for it, as we will emit it later. */
5060 if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
5061 && !COMPLETE_TYPE_P (TREE_TYPE (decl)))
5062 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
5064 rest_of_decl_compilation (decl, DECL_CONTEXT (decl) == NULL_TREE,
5065 at_eof);
5066 goto finish_end;
5069 /* A reference will be modified here, as it is initialized. */
5070 if (! DECL_EXTERNAL (decl)
5071 && TREE_READONLY (decl)
5072 && TREE_CODE (type) == REFERENCE_TYPE)
5074 was_readonly = 1;
5075 TREE_READONLY (decl) = 0;
5078 if (TREE_CODE (decl) == VAR_DECL)
5080 /* Only PODs can have thread-local storage. Other types may require
5081 various kinds of non-trivial initialization. */
5082 if (DECL_THREAD_LOCAL_P (decl) && !pod_type_p (TREE_TYPE (decl)))
5083 error ("%qD cannot be thread-local because it has non-POD type %qT",
5084 decl, TREE_TYPE (decl));
5085 /* If this is a local variable that will need a mangled name,
5086 register it now. We must do this before processing the
5087 initializer for the variable, since the initialization might
5088 require a guard variable, and since the mangled name of the
5089 guard variable will depend on the mangled name of this
5090 variable. */
5091 if (!processing_template_decl
5092 && DECL_FUNCTION_SCOPE_P (decl)
5093 && TREE_STATIC (decl)
5094 && !DECL_ARTIFICIAL (decl))
5095 push_local_name (decl);
5096 /* Convert the initializer to the type of DECL, if we have not
5097 already initialized DECL. */
5098 if (!DECL_INITIALIZED_P (decl)
5099 /* If !DECL_EXTERNAL then DECL is being defined. In the
5100 case of a static data member initialized inside the
5101 class-specifier, there can be an initializer even if DECL
5102 is *not* defined. */
5103 && (!DECL_EXTERNAL (decl) || init))
5105 if (init)
5107 DECL_NONTRIVIALLY_INITIALIZED_P (decl) = 1;
5108 if (init_const_expr_p)
5110 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = 1;
5111 if (DECL_INTEGRAL_CONSTANT_VAR_P (decl))
5112 TREE_CONSTANT (decl) = 1;
5115 init = check_initializer (decl, init, flags, &cleanup);
5116 /* Thread-local storage cannot be dynamically initialized. */
5117 if (DECL_THREAD_LOCAL_P (decl) && init)
5119 error ("%qD is thread-local and so cannot be dynamically "
5120 "initialized", decl);
5121 init = NULL_TREE;
5124 /* Check that the initializer for a static data member was a
5125 constant. Although we check in the parser that the
5126 initializer is an integral constant expression, we do not
5127 simplify division-by-zero at the point at which it
5128 occurs. Therefore, in:
5130 struct S { static const int i = 7 / 0; };
5132 we issue an error at this point. It would
5133 probably be better to forbid division by zero in
5134 integral constant expressions. */
5135 if (DECL_EXTERNAL (decl) && init)
5137 error ("%qD cannot be initialized by a non-constant expression"
5138 " when being declared", decl);
5139 DECL_INITIALIZED_IN_CLASS_P (decl) = 0;
5140 init = NULL_TREE;
5143 /* Handle:
5145 [dcl.init]
5147 The memory occupied by any object of static storage
5148 duration is zero-initialized at program startup before
5149 any other initialization takes place.
5151 We cannot create an appropriate initializer until after
5152 the type of DECL is finalized. If DECL_INITIAL is set,
5153 then the DECL is statically initialized, and any
5154 necessary zero-initialization has already been performed. */
5155 if (TREE_STATIC (decl) && !DECL_INITIAL (decl))
5156 DECL_INITIAL (decl) = build_zero_init (TREE_TYPE (decl),
5157 /*nelts=*/NULL_TREE,
5158 /*static_storage_p=*/true);
5159 /* Remember that the initialization for this variable has
5160 taken place. */
5161 DECL_INITIALIZED_P (decl) = 1;
5162 /* This declaration is the definition of this variable,
5163 unless we are initializing a static data member within
5164 the class specifier. */
5165 if (!DECL_EXTERNAL (decl))
5166 var_definition_p = true;
5167 /* The variable is being defined, so determine its
5168 visibility. */
5169 determine_visibility (decl);
5171 /* If the variable has an array type, lay out the type, even if
5172 there is no initializer. It is valid to index through the
5173 array, and we must get TYPE_ALIGN set correctly on the array
5174 type. */
5175 else if (TREE_CODE (type) == ARRAY_TYPE)
5176 layout_type (type);
5179 /* Add this declaration to the statement-tree. This needs to happen
5180 after the call to check_initializer so that the DECL_EXPR for a
5181 reference temp is added before the DECL_EXPR for the reference itself. */
5182 if (at_function_scope_p ())
5183 add_decl_expr (decl);
5185 /* Let the middle end know about variables and functions -- but not
5186 static data members in uninstantiated class templates. */
5187 if (!saved_processing_template_decl
5188 && (TREE_CODE (decl) == VAR_DECL
5189 || TREE_CODE (decl) == FUNCTION_DECL))
5191 if (TREE_CODE (decl) == VAR_DECL)
5193 layout_var_decl (decl);
5194 maybe_commonize_var (decl);
5197 make_rtl_for_nonlocal_decl (decl, init, asmspec);
5199 /* Check for abstractness of the type. Notice that there is no
5200 need to strip array types here since the check for those types
5201 is already done within create_array_type_for_decl. */
5202 if (TREE_CODE (type) == FUNCTION_TYPE
5203 || TREE_CODE (type) == METHOD_TYPE)
5204 abstract_virtuals_error (decl, TREE_TYPE (type));
5205 else
5206 abstract_virtuals_error (decl, type);
5208 if (TREE_CODE (decl) == FUNCTION_DECL
5209 || TREE_TYPE (decl) == error_mark_node)
5210 /* No initialization required. */
5212 else if (DECL_EXTERNAL (decl)
5213 && ! (DECL_LANG_SPECIFIC (decl)
5214 && DECL_NOT_REALLY_EXTERN (decl)))
5216 if (init)
5217 DECL_INITIAL (decl) = init;
5219 else
5221 /* A variable definition. */
5222 if (DECL_FUNCTION_SCOPE_P (decl))
5224 /* Initialize the local variable. */
5225 if (processing_template_decl)
5227 if (init || DECL_INITIAL (decl) == error_mark_node)
5228 DECL_INITIAL (decl) = init;
5230 else if (!TREE_STATIC (decl))
5231 initialize_local_var (decl, init);
5234 /* If a variable is defined, and then a subsequent
5235 definition with external linkage is encountered, we will
5236 get here twice for the same variable. We want to avoid
5237 calling expand_static_init more than once. For variables
5238 that are not static data members, we can call
5239 expand_static_init only when we actually process the
5240 initializer. It is not legal to redeclare a static data
5241 member, so this issue does not arise in that case. */
5242 if (var_definition_p && TREE_STATIC (decl))
5244 if (init)
5246 if (TREE_READONLY (decl))
5247 TREE_READONLY (decl) = 0;
5248 was_readonly = 0;
5250 expand_static_init (decl, init);
5255 /* If a CLEANUP_STMT was created to destroy a temporary bound to a
5256 reference, insert it in the statement-tree now. */
5257 if (cleanup)
5258 push_cleanup (decl, cleanup, false);
5260 finish_end:
5261 processing_template_decl = saved_processing_template_decl;
5263 if (was_readonly)
5264 TREE_READONLY (decl) = 1;
5266 /* If this was marked 'used', be sure it will be output. */
5267 if (lookup_attribute ("used", DECL_ATTRIBUTES (decl)))
5268 mark_decl_referenced (decl);
5271 /* This is here for a midend callback from c-common.c. */
5273 void
5274 finish_decl (tree decl, tree init, tree asmspec_tree)
5276 cp_finish_decl (decl, init, /*init_const_expr_p=*/false, asmspec_tree, 0);
5279 /* Returns a declaration for a VAR_DECL as if:
5281 extern "C" TYPE NAME;
5283 had been seen. Used to create compiler-generated global
5284 variables. */
5286 tree
5287 declare_global_var (tree name, tree type)
5289 tree decl;
5291 push_to_top_level ();
5292 decl = build_decl (VAR_DECL, name, type);
5293 TREE_PUBLIC (decl) = 1;
5294 DECL_EXTERNAL (decl) = 1;
5295 DECL_ARTIFICIAL (decl) = 1;
5296 /* If the user has explicitly declared this variable (perhaps
5297 because the code we are compiling is part of a low-level runtime
5298 library), then it is possible that our declaration will be merged
5299 with theirs by pushdecl. */
5300 decl = pushdecl (decl);
5301 finish_decl (decl, NULL_TREE, NULL_TREE);
5302 pop_from_top_level ();
5304 return decl;
5307 /* Returns a pointer to the `atexit' function. Note that if
5308 FLAG_USE_CXA_ATEXIT is nonzero, then this will actually be the new
5309 `__cxa_atexit' function specified in the IA64 C++ ABI. */
5311 static tree
5312 get_atexit_node (void)
5314 tree atexit_fndecl;
5315 tree arg_types;
5316 tree fn_type;
5317 tree fn_ptr_type;
5318 const char *name;
5319 bool use_aeabi_atexit;
5321 if (atexit_node)
5322 return atexit_node;
5324 if (flag_use_cxa_atexit)
5326 /* The declaration for `__cxa_atexit' is:
5328 int __cxa_atexit (void (*)(void *), void *, void *)
5330 We build up the argument types and then then function type
5331 itself. */
5333 use_aeabi_atexit = targetm.cxx.use_aeabi_atexit ();
5334 /* First, build the pointer-to-function type for the first
5335 argument. */
5336 arg_types = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
5337 fn_type = build_function_type (void_type_node, arg_types);
5338 fn_ptr_type = build_pointer_type (fn_type);
5339 /* Then, build the rest of the argument types. */
5340 arg_types = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
5341 if (use_aeabi_atexit)
5343 arg_types = tree_cons (NULL_TREE, fn_ptr_type, arg_types);
5344 arg_types = tree_cons (NULL_TREE, ptr_type_node, arg_types);
5346 else
5348 arg_types = tree_cons (NULL_TREE, ptr_type_node, arg_types);
5349 arg_types = tree_cons (NULL_TREE, fn_ptr_type, arg_types);
5351 /* And the final __cxa_atexit type. */
5352 fn_type = build_function_type (integer_type_node, arg_types);
5353 fn_ptr_type = build_pointer_type (fn_type);
5354 if (use_aeabi_atexit)
5355 name = "__aeabi_atexit";
5356 else
5357 name = "__cxa_atexit";
5359 else
5361 /* The declaration for `atexit' is:
5363 int atexit (void (*)());
5365 We build up the argument types and then then function type
5366 itself. */
5367 fn_type = build_function_type (void_type_node, void_list_node);
5368 fn_ptr_type = build_pointer_type (fn_type);
5369 arg_types = tree_cons (NULL_TREE, fn_ptr_type, void_list_node);
5370 /* Build the final atexit type. */
5371 fn_type = build_function_type (integer_type_node, arg_types);
5372 name = "atexit";
5375 /* Now, build the function declaration. */
5376 push_lang_context (lang_name_c);
5377 atexit_fndecl = build_library_fn_ptr (name, fn_type);
5378 mark_used (atexit_fndecl);
5379 pop_lang_context ();
5380 atexit_node = decay_conversion (atexit_fndecl);
5382 return atexit_node;
5385 /* Returns the __dso_handle VAR_DECL. */
5387 static tree
5388 get_dso_handle_node (void)
5390 if (dso_handle_node)
5391 return dso_handle_node;
5393 /* Declare the variable. */
5394 dso_handle_node = declare_global_var (get_identifier ("__dso_handle"),
5395 ptr_type_node);
5397 return dso_handle_node;
5400 /* Begin a new function with internal linkage whose job will be simply
5401 to destroy some particular variable. */
5403 static GTY(()) int start_cleanup_cnt;
5405 static tree
5406 start_cleanup_fn (void)
5408 char name[32];
5409 tree parmtypes;
5410 tree fntype;
5411 tree fndecl;
5413 push_to_top_level ();
5415 /* No need to mangle this. */
5416 push_lang_context (lang_name_c);
5418 /* Build the parameter-types. */
5419 parmtypes = void_list_node;
5420 /* Functions passed to __cxa_atexit take an additional parameter.
5421 We'll just ignore it. After we implement the new calling
5422 convention for destructors, we can eliminate the use of
5423 additional cleanup functions entirely in the -fnew-abi case. */
5424 if (flag_use_cxa_atexit)
5425 parmtypes = tree_cons (NULL_TREE, ptr_type_node, parmtypes);
5426 /* Build the function type itself. */
5427 fntype = build_function_type (void_type_node, parmtypes);
5428 /* Build the name of the function. */
5429 sprintf (name, "__tcf_%d", start_cleanup_cnt++);
5430 /* Build the function declaration. */
5431 fndecl = build_lang_decl (FUNCTION_DECL, get_identifier (name), fntype);
5432 /* It's a function with internal linkage, generated by the
5433 compiler. */
5434 TREE_PUBLIC (fndecl) = 0;
5435 DECL_ARTIFICIAL (fndecl) = 1;
5436 /* Make the function `inline' so that it is only emitted if it is
5437 actually needed. It is unlikely that it will be inlined, since
5438 it is only called via a function pointer, but we avoid unnecessary
5439 emissions this way. */
5440 DECL_INLINE (fndecl) = 1;
5441 DECL_DECLARED_INLINE_P (fndecl) = 1;
5442 DECL_INTERFACE_KNOWN (fndecl) = 1;
5443 /* Build the parameter. */
5444 if (flag_use_cxa_atexit)
5446 tree parmdecl;
5448 parmdecl = cp_build_parm_decl (NULL_TREE, ptr_type_node);
5449 DECL_CONTEXT (parmdecl) = fndecl;
5450 TREE_USED (parmdecl) = 1;
5451 DECL_ARGUMENTS (fndecl) = parmdecl;
5454 pushdecl (fndecl);
5455 start_preparsed_function (fndecl, NULL_TREE, SF_PRE_PARSED);
5457 pop_lang_context ();
5459 return current_function_decl;
5462 /* Finish the cleanup function begun by start_cleanup_fn. */
5464 static void
5465 end_cleanup_fn (void)
5467 expand_or_defer_fn (finish_function (0));
5469 pop_from_top_level ();
5472 /* Generate code to handle the destruction of DECL, an object with
5473 static storage duration. */
5475 tree
5476 register_dtor_fn (tree decl)
5478 tree cleanup;
5479 tree compound_stmt;
5480 tree args;
5481 tree fcall;
5483 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
5484 return void_zero_node;
5486 /* Call build_cleanup before we enter the anonymous function so that
5487 any access checks will be done relative to the current scope,
5488 rather than the scope of the anonymous function. */
5489 build_cleanup (decl);
5491 /* Now start the function. */
5492 cleanup = start_cleanup_fn ();
5494 /* Now, recompute the cleanup. It may contain SAVE_EXPRs that refer
5495 to the original function, rather than the anonymous one. That
5496 will make the back-end think that nested functions are in use,
5497 which causes confusion. */
5499 push_deferring_access_checks (dk_no_check);
5500 fcall = build_cleanup (decl);
5501 pop_deferring_access_checks ();
5503 /* Create the body of the anonymous function. */
5504 compound_stmt = begin_compound_stmt (BCS_FN_BODY);
5505 finish_expr_stmt (fcall);
5506 finish_compound_stmt (compound_stmt);
5507 end_cleanup_fn ();
5509 /* Call atexit with the cleanup function. */
5510 cxx_mark_addressable (cleanup);
5511 mark_used (cleanup);
5512 cleanup = build_unary_op (ADDR_EXPR, cleanup, 0);
5513 if (flag_use_cxa_atexit)
5515 args = tree_cons (NULL_TREE,
5516 build_unary_op (ADDR_EXPR, get_dso_handle_node (), 0),
5517 NULL_TREE);
5518 if (targetm.cxx.use_aeabi_atexit ())
5520 args = tree_cons (NULL_TREE, cleanup, args);
5521 args = tree_cons (NULL_TREE, null_pointer_node, args);
5523 else
5525 args = tree_cons (NULL_TREE, null_pointer_node, args);
5526 args = tree_cons (NULL_TREE, cleanup, args);
5529 else
5530 args = tree_cons (NULL_TREE, cleanup, NULL_TREE);
5531 return build_function_call (get_atexit_node (), args);
5534 /* DECL is a VAR_DECL with static storage duration. INIT, if present,
5535 is its initializer. Generate code to handle the construction
5536 and destruction of DECL. */
5538 static void
5539 expand_static_init (tree decl, tree init)
5541 gcc_assert (TREE_CODE (decl) == VAR_DECL);
5542 gcc_assert (TREE_STATIC (decl));
5544 /* Some variables require no initialization. */
5545 if (!init
5546 && !TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))
5547 && TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
5548 return;
5550 if (DECL_FUNCTION_SCOPE_P (decl))
5552 /* Emit code to perform this initialization but once. */
5553 tree if_stmt = NULL_TREE, inner_if_stmt = NULL_TREE;
5554 tree then_clause = NULL_TREE, inner_then_clause = NULL_TREE;
5555 tree guard, guard_addr, guard_addr_list;
5556 tree acquire_fn, release_fn, abort_fn;
5557 tree flag, begin;
5559 /* Emit code to perform this initialization but once. This code
5560 looks like:
5562 static <type> guard;
5563 if (!guard.first_byte) {
5564 if (__cxa_guard_acquire (&guard)) {
5565 bool flag = false;
5566 try {
5567 // Do initialization.
5568 flag = true; __cxa_guard_release (&guard);
5569 // Register variable for destruction at end of program.
5570 } catch {
5571 if (!flag) __cxa_guard_abort (&guard);
5575 Note that the `flag' variable is only set to 1 *after* the
5576 initialization is complete. This ensures that an exception,
5577 thrown during the construction, will cause the variable to
5578 reinitialized when we pass through this code again, as per:
5580 [stmt.dcl]
5582 If the initialization exits by throwing an exception, the
5583 initialization is not complete, so it will be tried again
5584 the next time control enters the declaration.
5586 This process should be thread-safe, too; multiple threads
5587 should not be able to initialize the variable more than
5588 once. */
5590 /* Create the guard variable. */
5591 guard = get_guard (decl);
5593 /* This optimization isn't safe on targets with relaxed memory
5594 consistency. On such targets we force synchronization in
5595 __cxa_guard_acquire. */
5596 if (!targetm.relaxed_ordering || !flag_threadsafe_statics)
5598 /* Begin the conditional initialization. */
5599 if_stmt = begin_if_stmt ();
5600 finish_if_stmt_cond (get_guard_cond (guard), if_stmt);
5601 then_clause = begin_compound_stmt (BCS_NO_SCOPE);
5604 if (flag_threadsafe_statics)
5606 guard_addr = build_address (guard);
5607 guard_addr_list = build_tree_list (NULL_TREE, guard_addr);
5609 acquire_fn = get_identifier ("__cxa_guard_acquire");
5610 release_fn = get_identifier ("__cxa_guard_release");
5611 abort_fn = get_identifier ("__cxa_guard_abort");
5612 if (!get_global_value_if_present (acquire_fn, &acquire_fn))
5614 tree argtypes = tree_cons (NULL_TREE, TREE_TYPE (guard_addr),
5615 void_list_node);
5616 tree vfntype = build_function_type (void_type_node, argtypes);
5617 acquire_fn = push_library_fn
5618 (acquire_fn, build_function_type (integer_type_node, argtypes));
5619 release_fn = push_library_fn (release_fn, vfntype);
5620 abort_fn = push_library_fn (abort_fn, vfntype);
5622 else
5624 release_fn = identifier_global_value (release_fn);
5625 abort_fn = identifier_global_value (abort_fn);
5628 inner_if_stmt = begin_if_stmt ();
5629 finish_if_stmt_cond (build_call (acquire_fn, guard_addr_list),
5630 inner_if_stmt);
5632 inner_then_clause = begin_compound_stmt (BCS_NO_SCOPE);
5633 begin = get_target_expr (boolean_false_node);
5634 flag = TARGET_EXPR_SLOT (begin);
5636 TARGET_EXPR_CLEANUP (begin)
5637 = build3 (COND_EXPR, void_type_node, flag,
5638 void_zero_node,
5639 build_call (abort_fn, guard_addr_list));
5640 CLEANUP_EH_ONLY (begin) = 1;
5642 /* Do the initialization itself. */
5643 init = add_stmt_to_compound (begin, init);
5644 init = add_stmt_to_compound
5645 (init, build2 (MODIFY_EXPR, void_type_node, flag, boolean_true_node));
5646 init = add_stmt_to_compound
5647 (init, build_call (release_fn, guard_addr_list));
5649 else
5650 init = add_stmt_to_compound (init, set_guard (guard));
5652 /* Use atexit to register a function for destroying this static
5653 variable. */
5654 init = add_stmt_to_compound (init, register_dtor_fn (decl));
5656 finish_expr_stmt (init);
5658 if (flag_threadsafe_statics)
5660 finish_compound_stmt (inner_then_clause);
5661 finish_then_clause (inner_if_stmt);
5662 finish_if_stmt (inner_if_stmt);
5665 if (!targetm.relaxed_ordering || !flag_threadsafe_statics)
5667 finish_compound_stmt (then_clause);
5668 finish_then_clause (if_stmt);
5669 finish_if_stmt (if_stmt);
5672 else
5673 static_aggregates = tree_cons (init, decl, static_aggregates);
5677 /* Make TYPE a complete type based on INITIAL_VALUE.
5678 Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
5679 2 if there was no information (in which case assume 0 if DO_DEFAULT),
5680 3 if the initializer list is empty (in pedantic mode). */
5683 cp_complete_array_type (tree *ptype, tree initial_value, bool do_default)
5685 int failure;
5686 tree type, elt_type;
5688 if (initial_value)
5690 /* An array of character type can be initialized from a
5691 brace-enclosed string constant.
5693 FIXME: this code is duplicated from reshape_init. Probably
5694 we should just call reshape_init here? */
5695 if (char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (*ptype)))
5696 && TREE_CODE (initial_value) == CONSTRUCTOR
5697 && !VEC_empty (constructor_elt, CONSTRUCTOR_ELTS (initial_value)))
5699 VEC(constructor_elt,gc) *v = CONSTRUCTOR_ELTS (initial_value);
5700 tree value = VEC_index (constructor_elt, v, 0)->value;
5702 if (TREE_CODE (value) == STRING_CST
5703 && VEC_length (constructor_elt, v) == 1)
5704 initial_value = value;
5708 failure = complete_array_type (ptype, initial_value, do_default);
5710 /* We can create the array before the element type is complete, which
5711 means that we didn't have these two bits set in the original type
5712 either. In completing the type, we are expected to propagate these
5713 bits. See also complete_type which does the same thing for arrays
5714 of fixed size. */
5715 type = *ptype;
5716 if (TYPE_DOMAIN (type))
5718 elt_type = TREE_TYPE (type);
5719 TYPE_NEEDS_CONSTRUCTING (type) = TYPE_NEEDS_CONSTRUCTING (elt_type);
5720 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
5721 = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (elt_type);
5724 return failure;
5727 /* Return zero if something is declared to be a member of type
5728 CTYPE when in the context of CUR_TYPE. STRING is the error
5729 message to print in that case. Otherwise, quietly return 1. */
5731 static int
5732 member_function_or_else (tree ctype, tree cur_type, enum overload_flags flags)
5734 if (ctype && ctype != cur_type)
5736 if (flags == DTOR_FLAG)
5737 error ("destructor for alien class %qT cannot be a member", ctype);
5738 else
5739 error ("constructor for alien class %qT cannot be a member", ctype);
5740 return 0;
5742 return 1;
5745 /* Subroutine of `grokdeclarator'. */
5747 /* Generate errors possibly applicable for a given set of specifiers.
5748 This is for ARM $7.1.2. */
5750 static void
5751 bad_specifiers (tree object,
5752 const char* type,
5753 int virtualp,
5754 int quals,
5755 int inlinep,
5756 int friendp,
5757 int raises)
5759 if (virtualp)
5760 error ("%qD declared as a %<virtual%> %s", object, type);
5761 if (inlinep)
5762 error ("%qD declared as an %<inline%> %s", object, type);
5763 if (quals)
5764 error ("%<const%> and %<volatile%> function specifiers on "
5765 "%qD invalid in %s declaration",
5766 object, type);
5767 if (friendp)
5768 error ("%q+D declared as a friend", object);
5769 if (raises
5770 && (TREE_CODE (object) == TYPE_DECL
5771 || (!TYPE_PTRFN_P (TREE_TYPE (object))
5772 && !TYPE_REFFN_P (TREE_TYPE (object))
5773 && !TYPE_PTRMEMFUNC_P (TREE_TYPE (object)))))
5774 error ("%q+D declared with an exception specification", object);
5777 /* DECL is a member function or static data member and is presently
5778 being defined. Check that the definition is taking place in a
5779 valid namespace. */
5781 static void
5782 check_class_member_definition_namespace (tree decl)
5784 /* These checks only apply to member functions and static data
5785 members. */
5786 gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
5787 || TREE_CODE (decl) == VAR_DECL);
5788 /* We check for problems with specializations in pt.c in
5789 check_specialization_namespace, where we can issue better
5790 diagnostics. */
5791 if (processing_specialization)
5792 return;
5793 /* There are no restrictions on the placement of
5794 explicit instantiations. */
5795 if (processing_explicit_instantiation)
5796 return;
5797 /* [class.mfct]
5799 A member function definition that appears outside of the
5800 class definition shall appear in a namespace scope enclosing
5801 the class definition.
5803 [class.static.data]
5805 The definition for a static data member shall appear in a
5806 namespace scope enclosing the member's class definition. */
5807 if (!is_ancestor (current_namespace, DECL_CONTEXT (decl)))
5808 pedwarn ("definition of %qD is not in namespace enclosing %qT",
5809 decl, DECL_CONTEXT (decl));
5812 /* CTYPE is class type, or null if non-class.
5813 TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
5814 or METHOD_TYPE.
5815 DECLARATOR is the function's name.
5816 PARMS is a chain of PARM_DECLs for the function.
5817 VIRTUALP is truthvalue of whether the function is virtual or not.
5818 FLAGS are to be passed through to `grokclassfn'.
5819 QUALS are qualifiers indicating whether the function is `const'
5820 or `volatile'.
5821 RAISES is a list of exceptions that this function can raise.
5822 CHECK is 1 if we must find this method in CTYPE, 0 if we should
5823 not look, and -1 if we should not call `grokclassfn' at all.
5825 SFK is the kind of special function (if any) for the new function.
5827 Returns `NULL_TREE' if something goes wrong, after issuing
5828 applicable error messages. */
5830 static tree
5831 grokfndecl (tree ctype,
5832 tree type,
5833 tree declarator,
5834 tree parms,
5835 tree orig_declarator,
5836 int virtualp,
5837 enum overload_flags flags,
5838 cp_cv_quals quals,
5839 tree raises,
5840 int check,
5841 int friendp,
5842 int publicp,
5843 int inlinep,
5844 special_function_kind sfk,
5845 int funcdef_flag,
5846 int template_count,
5847 tree in_namespace,
5848 tree* attrlist)
5850 tree decl;
5851 int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
5852 tree t;
5854 if (raises)
5855 type = build_exception_variant (type, raises);
5857 decl = build_lang_decl (FUNCTION_DECL, declarator, type);
5858 DECL_ARGUMENTS (decl) = parms;
5859 /* Propagate volatile out from type to decl. */
5860 if (TYPE_VOLATILE (type))
5861 TREE_THIS_VOLATILE (decl) = 1;
5863 if (friendp
5864 && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
5866 if (funcdef_flag)
5867 error
5868 ("defining explicit specialization %qD in friend declaration",
5869 orig_declarator);
5870 else
5872 tree fns = TREE_OPERAND (orig_declarator, 0);
5873 tree args = TREE_OPERAND (orig_declarator, 1);
5875 if (PROCESSING_REAL_TEMPLATE_DECL_P ())
5877 /* Something like `template <class T> friend void f<T>()'. */
5878 error ("invalid use of template-id %qD in declaration "
5879 "of primary template",
5880 orig_declarator);
5881 return NULL_TREE;
5885 /* A friend declaration of the form friend void f<>(). Record
5886 the information in the TEMPLATE_ID_EXPR. */
5887 SET_DECL_IMPLICIT_INSTANTIATION (decl);
5889 if (TREE_CODE (fns) == COMPONENT_REF)
5891 /* Due to bison parser ickiness, we will have already looked
5892 up an operator_name or PFUNCNAME within the current class
5893 (see template_id in parse.y). If the current class contains
5894 such a name, we'll get a COMPONENT_REF here. Undo that. */
5896 gcc_assert (TREE_TYPE (TREE_OPERAND (fns, 0))
5897 == current_class_type);
5898 fns = TREE_OPERAND (fns, 1);
5900 gcc_assert (TREE_CODE (fns) == IDENTIFIER_NODE
5901 || TREE_CODE (fns) == OVERLOAD);
5902 DECL_TEMPLATE_INFO (decl) = tree_cons (fns, args, NULL_TREE);
5904 for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
5905 if (TREE_PURPOSE (t)
5906 && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
5908 error ("default arguments are not allowed in declaration "
5909 "of friend template specialization %qD",
5910 decl);
5911 return NULL_TREE;
5914 if (inlinep)
5916 error ("%<inline%> is not allowed in declaration of friend "
5917 "template specialization %qD",
5918 decl);
5919 return NULL_TREE;
5924 /* If this decl has namespace scope, set that up. */
5925 if (in_namespace)
5926 set_decl_namespace (decl, in_namespace, friendp);
5927 else if (!ctype)
5928 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
5930 /* `main' and builtins have implicit 'C' linkage. */
5931 if ((MAIN_NAME_P (declarator)
5932 || (IDENTIFIER_LENGTH (declarator) > 10
5933 && IDENTIFIER_POINTER (declarator)[0] == '_'
5934 && IDENTIFIER_POINTER (declarator)[1] == '_'
5935 && strncmp (IDENTIFIER_POINTER (declarator)+2, "builtin_", 8) == 0))
5936 && current_lang_name == lang_name_cplusplus
5937 && ctype == NULL_TREE
5938 /* NULL_TREE means global namespace. */
5939 && DECL_CONTEXT (decl) == NULL_TREE)
5940 SET_DECL_LANGUAGE (decl, lang_c);
5942 /* Should probably propagate const out from type to decl I bet (mrs). */
5943 if (staticp)
5945 DECL_STATIC_FUNCTION_P (decl) = 1;
5946 DECL_CONTEXT (decl) = ctype;
5949 if (ctype)
5951 DECL_CONTEXT (decl) = ctype;
5952 if (funcdef_flag)
5953 check_class_member_definition_namespace (decl);
5956 if (ctype == NULL_TREE && DECL_MAIN_P (decl))
5958 if (processing_template_decl)
5959 error ("cannot declare %<::main%> to be a template");
5960 if (inlinep)
5961 error ("cannot declare %<::main%> to be inline");
5962 if (!publicp)
5963 error ("cannot declare %<::main%> to be static");
5964 inlinep = 0;
5965 publicp = 1;
5968 /* Members of anonymous types and local classes have no linkage; make
5969 them internal. If a typedef is made later, this will be changed. */
5970 if (ctype && (TYPE_ANONYMOUS_P (ctype)
5971 || decl_function_context (TYPE_MAIN_DECL (ctype))))
5972 publicp = 0;
5974 if (publicp)
5976 /* [basic.link]: A name with no linkage (notably, the name of a class
5977 or enumeration declared in a local scope) shall not be used to
5978 declare an entity with linkage.
5980 Only check this for public decls for now. See core 319, 389. */
5981 t = no_linkage_check (TREE_TYPE (decl),
5982 /*relaxed_p=*/false);
5983 if (t)
5985 if (TYPE_ANONYMOUS_P (t))
5987 if (DECL_EXTERN_C_P (decl))
5988 /* Allow this; it's pretty common in C. */;
5989 else
5991 pedwarn ("non-local function %q#D uses anonymous type",
5992 decl);
5993 if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
5994 pedwarn ("%q+#D does not refer to the unqualified "
5995 "type, so it is not used for linkage",
5996 TYPE_NAME (t));
5999 else
6000 pedwarn ("non-local function %q#D uses local type %qT", decl, t);
6004 TREE_PUBLIC (decl) = publicp;
6005 if (! publicp)
6007 DECL_INTERFACE_KNOWN (decl) = 1;
6008 DECL_NOT_REALLY_EXTERN (decl) = 1;
6011 /* If the declaration was declared inline, mark it as such. */
6012 if (inlinep)
6013 DECL_DECLARED_INLINE_P (decl) = 1;
6014 /* We inline functions that are explicitly declared inline, or, when
6015 the user explicitly asks us to, all functions. */
6016 if (DECL_DECLARED_INLINE_P (decl)
6017 || (flag_inline_trees == 2 && !DECL_INLINE (decl) && funcdef_flag))
6018 DECL_INLINE (decl) = 1;
6020 DECL_EXTERNAL (decl) = 1;
6021 if (quals && TREE_CODE (type) == FUNCTION_TYPE)
6023 error ("%smember function %qD cannot have cv-qualifier",
6024 (ctype ? "static " : "non-"), decl);
6025 quals = TYPE_UNQUALIFIED;
6028 if (IDENTIFIER_OPNAME_P (DECL_NAME (decl)))
6029 grok_op_properties (decl, /*complain=*/true);
6031 if (ctype && decl_function_context (decl))
6032 DECL_NO_STATIC_CHAIN (decl) = 1;
6034 if (funcdef_flag)
6035 /* Make the init_value nonzero so pushdecl knows this is not
6036 tentative. error_mark_node is replaced later with the BLOCK. */
6037 DECL_INITIAL (decl) = error_mark_node;
6039 if (TYPE_NOTHROW_P (type) || nothrow_libfn_p (decl))
6040 TREE_NOTHROW (decl) = 1;
6042 /* Caller will do the rest of this. */
6043 if (check < 0)
6044 return decl;
6046 if (ctype != NULL_TREE)
6048 if (sfk == sfk_constructor)
6049 DECL_CONSTRUCTOR_P (decl) = 1;
6051 grokclassfn (ctype, decl, flags, quals);
6054 decl = check_explicit_specialization (orig_declarator, decl,
6055 template_count,
6056 2 * (funcdef_flag != 0) +
6057 4 * (friendp != 0));
6058 if (decl == error_mark_node)
6059 return NULL_TREE;
6061 if (attrlist)
6063 cplus_decl_attributes (&decl, *attrlist, 0);
6064 *attrlist = NULL_TREE;
6067 /* Check main's type after attributes have been applied. */
6068 if (ctype == NULL_TREE && DECL_MAIN_P (decl)
6069 && !same_type_p (TREE_TYPE (TREE_TYPE (decl)),
6070 integer_type_node))
6072 tree oldtypeargs = TYPE_ARG_TYPES (TREE_TYPE (decl));
6073 tree newtype;
6074 error ("%<::main%> must return %<int%>");
6075 newtype = build_function_type (integer_type_node, oldtypeargs);
6076 TREE_TYPE (decl) = newtype;
6079 if (ctype != NULL_TREE
6080 && (! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
6081 && check)
6083 tree old_decl;
6085 old_decl = check_classfn (ctype, decl,
6086 (processing_template_decl
6087 > template_class_depth (ctype))
6088 ? current_template_parms
6089 : NULL_TREE);
6091 if (old_decl && TREE_CODE (old_decl) == TEMPLATE_DECL)
6092 /* Because grokfndecl is always supposed to return a
6093 FUNCTION_DECL, we pull out the DECL_TEMPLATE_RESULT
6094 here. We depend on our callers to figure out that its
6095 really a template that's being returned. */
6096 old_decl = DECL_TEMPLATE_RESULT (old_decl);
6098 if (old_decl && DECL_STATIC_FUNCTION_P (old_decl)
6099 && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
6100 /* Remove the `this' parm added by grokclassfn.
6101 XXX Isn't this done in start_function, too? */
6102 revert_static_member_fn (decl);
6103 if (old_decl && DECL_ARTIFICIAL (old_decl))
6104 error ("definition of implicitly-declared %qD", old_decl);
6106 if (old_decl)
6108 tree ok;
6109 tree pushed_scope;
6111 /* Since we've smashed OLD_DECL to its
6112 DECL_TEMPLATE_RESULT, we must do the same to DECL. */
6113 if (TREE_CODE (decl) == TEMPLATE_DECL)
6114 decl = DECL_TEMPLATE_RESULT (decl);
6116 /* Attempt to merge the declarations. This can fail, in
6117 the case of some invalid specialization declarations. */
6118 pushed_scope = push_scope (ctype);
6119 ok = duplicate_decls (decl, old_decl, friendp);
6120 if (pushed_scope)
6121 pop_scope (pushed_scope);
6122 if (!ok)
6124 error ("no %q#D member function declared in class %qT",
6125 decl, ctype);
6126 return NULL_TREE;
6128 return old_decl;
6132 if (DECL_CONSTRUCTOR_P (decl) && !grok_ctor_properties (ctype, decl))
6133 return NULL_TREE;
6135 if (ctype == NULL_TREE || check)
6136 return decl;
6138 if (virtualp)
6139 DECL_VIRTUAL_P (decl) = 1;
6141 return decl;
6144 /* DECL is a VAR_DECL for a static data member. Set flags to reflect
6145 the linkage that DECL will receive in the object file. */
6147 static void
6148 set_linkage_for_static_data_member (tree decl)
6150 /* A static data member always has static storage duration and
6151 external linkage. Note that static data members are forbidden in
6152 local classes -- the only situation in which a class has
6153 non-external linkage. */
6154 TREE_PUBLIC (decl) = 1;
6155 TREE_STATIC (decl) = 1;
6156 /* For non-template classes, static data members are always put
6157 out in exactly those files where they are defined, just as
6158 with ordinary namespace-scope variables. */
6159 if (!processing_template_decl)
6160 DECL_INTERFACE_KNOWN (decl) = 1;
6163 /* Create a VAR_DECL named NAME with the indicated TYPE.
6165 If SCOPE is non-NULL, it is the class type or namespace containing
6166 the variable. If SCOPE is NULL, the variable should is created in
6167 the innermost enclosings scope. */
6169 static tree
6170 grokvardecl (tree type,
6171 tree name,
6172 const cp_decl_specifier_seq *declspecs,
6173 int initialized,
6174 int constp,
6175 tree scope)
6177 tree decl;
6178 tree explicit_scope;
6180 gcc_assert (!name || TREE_CODE (name) == IDENTIFIER_NODE);
6182 /* Compute the scope in which to place the variable, but remember
6183 whether or not that scope was explicitly specified by the user. */
6184 explicit_scope = scope;
6185 if (!scope)
6187 /* An explicit "extern" specifier indicates a namespace-scope
6188 variable. */
6189 if (declspecs->storage_class == sc_extern)
6190 scope = current_namespace;
6191 else if (!at_function_scope_p ())
6192 scope = current_scope ();
6195 if (scope
6196 && (/* If the variable is a namespace-scope variable declared in a
6197 template, we need DECL_LANG_SPECIFIC. */
6198 (TREE_CODE (scope) == NAMESPACE_DECL && processing_template_decl)
6199 /* Similarly for namespace-scope variables with language linkage
6200 other than C++. */
6201 || (TREE_CODE (scope) == NAMESPACE_DECL
6202 && current_lang_name != lang_name_cplusplus)
6203 /* Similarly for static data members. */
6204 || TYPE_P (scope)))
6205 decl = build_lang_decl (VAR_DECL, name, type);
6206 else
6207 decl = build_decl (VAR_DECL, name, type);
6209 if (explicit_scope && TREE_CODE (explicit_scope) == NAMESPACE_DECL)
6210 set_decl_namespace (decl, explicit_scope, 0);
6211 else
6212 DECL_CONTEXT (decl) = scope;
6214 if (declspecs->storage_class == sc_extern)
6216 DECL_THIS_EXTERN (decl) = 1;
6217 DECL_EXTERNAL (decl) = !initialized;
6220 if (DECL_CLASS_SCOPE_P (decl))
6222 set_linkage_for_static_data_member (decl);
6223 /* This function is only called with out-of-class definitions. */
6224 DECL_EXTERNAL (decl) = 0;
6225 check_class_member_definition_namespace (decl);
6227 /* At top level, either `static' or no s.c. makes a definition
6228 (perhaps tentative), and absence of `static' makes it public. */
6229 else if (toplevel_bindings_p ())
6231 TREE_PUBLIC (decl) = (declspecs->storage_class != sc_static
6232 && (DECL_THIS_EXTERN (decl) || ! constp));
6233 TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
6235 /* Not at top level, only `static' makes a static definition. */
6236 else
6238 TREE_STATIC (decl) = declspecs->storage_class == sc_static;
6239 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
6242 if (declspecs->specs[(int)ds_thread])
6244 if (targetm.have_tls)
6245 DECL_TLS_MODEL (decl) = decl_default_tls_model (decl);
6246 else
6247 /* A mere warning is sure to result in improper semantics
6248 at runtime. Don't bother to allow this to compile. */
6249 error ("thread-local storage not supported for this target");
6252 if (TREE_PUBLIC (decl))
6254 /* [basic.link]: A name with no linkage (notably, the name of a class
6255 or enumeration declared in a local scope) shall not be used to
6256 declare an entity with linkage.
6258 Only check this for public decls for now. */
6259 tree t = no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false);
6260 if (t)
6262 if (TYPE_ANONYMOUS_P (t))
6264 if (DECL_EXTERN_C_P (decl))
6265 /* Allow this; it's pretty common in C. */
6267 else
6269 /* DRs 132, 319 and 389 seem to indicate types with
6270 no linkage can only be used to declare extern "C"
6271 entities. Since it's not always an error in the
6272 ISO C++ 90 Standard, we only issue a warning. */
6273 warning (0, "non-local variable %q#D uses anonymous type",
6274 decl);
6275 if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
6276 warning (0, "%q+#D does not refer to the unqualified "
6277 "type, so it is not used for linkage",
6278 TYPE_NAME (t));
6281 else
6282 warning (0, "non-local variable %q#D uses local type %qT", decl, t);
6285 else
6286 DECL_INTERFACE_KNOWN (decl) = 1;
6288 return decl;
6291 /* Create and return a canonical pointer to member function type, for
6292 TYPE, which is a POINTER_TYPE to a METHOD_TYPE. */
6294 tree
6295 build_ptrmemfunc_type (tree type)
6297 tree field, fields;
6298 tree t;
6299 tree unqualified_variant = NULL_TREE;
6301 if (type == error_mark_node)
6302 return type;
6304 /* If a canonical type already exists for this type, use it. We use
6305 this method instead of type_hash_canon, because it only does a
6306 simple equality check on the list of field members. */
6308 if ((t = TYPE_GET_PTRMEMFUNC_TYPE (type)))
6309 return t;
6311 /* Make sure that we always have the unqualified pointer-to-member
6312 type first. */
6313 if (cp_type_quals (type) != TYPE_UNQUALIFIED)
6314 unqualified_variant
6315 = build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type));
6317 t = make_aggr_type (RECORD_TYPE);
6318 xref_basetypes (t, NULL_TREE);
6320 /* Let the front-end know this is a pointer to member function... */
6321 TYPE_PTRMEMFUNC_FLAG (t) = 1;
6322 /* ... and not really an aggregate. */
6323 SET_IS_AGGR_TYPE (t, 0);
6325 field = build_decl (FIELD_DECL, pfn_identifier, type);
6326 fields = field;
6328 field = build_decl (FIELD_DECL, delta_identifier, delta_type_node);
6329 TREE_CHAIN (field) = fields;
6330 fields = field;
6332 finish_builtin_struct (t, "__ptrmemfunc_type", fields, ptr_type_node);
6334 /* Zap out the name so that the back-end will give us the debugging
6335 information for this anonymous RECORD_TYPE. */
6336 TYPE_NAME (t) = NULL_TREE;
6338 /* If this is not the unqualified form of this pointer-to-member
6339 type, set the TYPE_MAIN_VARIANT for this type to be the
6340 unqualified type. Since they are actually RECORD_TYPEs that are
6341 not variants of each other, we must do this manually. */
6342 if (cp_type_quals (type) != TYPE_UNQUALIFIED)
6344 t = build_qualified_type (t, cp_type_quals (type));
6345 TYPE_MAIN_VARIANT (t) = unqualified_variant;
6346 TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (unqualified_variant);
6347 TYPE_NEXT_VARIANT (unqualified_variant) = t;
6350 /* Cache this pointer-to-member type so that we can find it again
6351 later. */
6352 TYPE_SET_PTRMEMFUNC_TYPE (type, t);
6354 return t;
6357 /* Create and return a pointer to data member type. */
6359 tree
6360 build_ptrmem_type (tree class_type, tree member_type)
6362 if (TREE_CODE (member_type) == METHOD_TYPE)
6364 tree arg_types;
6366 arg_types = TYPE_ARG_TYPES (member_type);
6367 class_type = (cp_build_qualified_type
6368 (class_type,
6369 cp_type_quals (TREE_TYPE (TREE_VALUE (arg_types)))));
6370 member_type
6371 = build_method_type_directly (class_type,
6372 TREE_TYPE (member_type),
6373 TREE_CHAIN (arg_types));
6374 return build_ptrmemfunc_type (build_pointer_type (member_type));
6376 else
6378 gcc_assert (TREE_CODE (member_type) != FUNCTION_TYPE);
6379 return build_offset_type (class_type, member_type);
6383 /* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
6384 Check to see that the definition is valid. Issue appropriate error
6385 messages. Return 1 if the definition is particularly bad, or 0
6386 otherwise. */
6389 check_static_variable_definition (tree decl, tree type)
6391 /* Motion 10 at San Diego: If a static const integral data member is
6392 initialized with an integral constant expression, the initializer
6393 may appear either in the declaration (within the class), or in
6394 the definition, but not both. If it appears in the class, the
6395 member is a member constant. The file-scope definition is always
6396 required. */
6397 if (!ARITHMETIC_TYPE_P (type) && TREE_CODE (type) != ENUMERAL_TYPE)
6399 error ("invalid in-class initialization of static data member "
6400 "of non-integral type %qT",
6401 type);
6402 /* If we just return the declaration, crashes will sometimes
6403 occur. We therefore return void_type_node, as if this were a
6404 friend declaration, to cause callers to completely ignore
6405 this declaration. */
6406 return 1;
6408 else if (!CP_TYPE_CONST_P (type))
6409 error ("ISO C++ forbids in-class initialization of non-const "
6410 "static member %qD",
6411 decl);
6412 else if (pedantic && !INTEGRAL_TYPE_P (type))
6413 pedwarn ("ISO C++ forbids initialization of member constant "
6414 "%qD of non-integral type %qT", decl, type);
6416 return 0;
6419 /* Given the SIZE (i.e., number of elements) in an array, compute an
6420 appropriate index type for the array. If non-NULL, NAME is the
6421 name of the thing being declared. */
6423 tree
6424 compute_array_index_type (tree name, tree size)
6426 tree type;
6427 tree itype;
6429 if (error_operand_p (size))
6430 return error_mark_node;
6432 type = TREE_TYPE (size);
6433 /* The array bound must be an integer type. */
6434 if (!dependent_type_p (type) && !INTEGRAL_TYPE_P (type))
6436 if (name)
6437 error ("size of array %qD has non-integral type %qT", name, type);
6438 else
6439 error ("size of array has non-integral type %qT", type);
6440 size = integer_one_node;
6441 type = TREE_TYPE (size);
6444 if (abi_version_at_least (2)
6445 /* We should only handle value dependent expressions specially. */
6446 ? value_dependent_expression_p (size)
6447 /* But for abi-1, we handled all instances in templates. This
6448 effects the manglings produced. */
6449 : processing_template_decl)
6450 return build_index_type (build_min (MINUS_EXPR, sizetype,
6451 size, integer_one_node));
6453 /* The size might be the result of a cast. */
6454 STRIP_TYPE_NOPS (size);
6456 /* It might be a const variable or enumeration constant. */
6457 size = integral_constant_value (size);
6459 /* Normally, the array-bound will be a constant. */
6460 if (TREE_CODE (size) == INTEGER_CST)
6462 /* Check to see if the array bound overflowed. Make that an
6463 error, no matter how generous we're being. */
6464 int old_flag_pedantic_errors = flag_pedantic_errors;
6465 int old_pedantic = pedantic;
6466 pedantic = flag_pedantic_errors = 1;
6467 constant_expression_warning (size);
6468 pedantic = old_pedantic;
6469 flag_pedantic_errors = old_flag_pedantic_errors;
6471 /* An array must have a positive number of elements. */
6472 if (INT_CST_LT (size, integer_zero_node))
6474 if (name)
6475 error ("size of array %qD is negative", name);
6476 else
6477 error ("size of array is negative");
6478 size = integer_one_node;
6480 /* As an extension we allow zero-sized arrays. We always allow
6481 them in system headers because glibc uses them. */
6482 else if (integer_zerop (size) && pedantic && !in_system_header)
6484 if (name)
6485 pedwarn ("ISO C++ forbids zero-size array %qD", name);
6486 else
6487 pedwarn ("ISO C++ forbids zero-size array");
6490 else if (TREE_CONSTANT (size))
6492 /* `(int) &fn' is not a valid array bound. */
6493 if (name)
6494 error ("size of array %qD is not an integral constant-expression",
6495 name);
6496 else
6497 error ("size of array is not an integral constant-expression");
6498 size = integer_one_node;
6500 else if (pedantic)
6502 if (name)
6503 pedwarn ("ISO C++ forbids variable-size array %qD", name);
6504 else
6505 pedwarn ("ISO C++ forbids variable-size array");
6508 if (processing_template_decl && !TREE_CONSTANT (size))
6509 /* A variable sized array. */
6510 itype = build_min (MINUS_EXPR, sizetype, size, integer_one_node);
6511 else
6513 HOST_WIDE_INT saved_processing_template_decl;
6515 /* Compute the index of the largest element in the array. It is
6516 one less than the number of elements in the array. We save
6517 and restore PROCESSING_TEMPLATE_DECL so that computations in
6518 cp_build_binary_op will be appropriately folded. */
6519 saved_processing_template_decl = processing_template_decl;
6520 processing_template_decl = 0;
6521 itype = cp_build_binary_op (MINUS_EXPR,
6522 cp_convert (ssizetype, size),
6523 cp_convert (ssizetype, integer_one_node));
6524 itype = fold (itype);
6525 processing_template_decl = saved_processing_template_decl;
6527 if (!TREE_CONSTANT (itype))
6528 /* A variable sized array. */
6529 itype = variable_size (itype);
6530 /* Make sure that there was no overflow when creating to a signed
6531 index type. (For example, on a 32-bit machine, an array with
6532 size 2^32 - 1 is too big.) */
6533 else if (TREE_OVERFLOW (itype))
6535 error ("overflow in array dimension");
6536 TREE_OVERFLOW (itype) = 0;
6540 /* Create and return the appropriate index type. */
6541 return build_index_type (itype);
6544 /* Returns the scope (if any) in which the entity declared by
6545 DECLARATOR will be located. If the entity was declared with an
6546 unqualified name, NULL_TREE is returned. */
6548 tree
6549 get_scope_of_declarator (const cp_declarator *declarator)
6551 while (declarator && declarator->kind != cdk_id)
6552 declarator = declarator->declarator;
6554 /* If the declarator-id is a SCOPE_REF, the scope in which the
6555 declaration occurs is the first operand. */
6556 if (declarator
6557 && declarator->u.id.qualifying_scope)
6558 return declarator->u.id.qualifying_scope;
6560 /* Otherwise, the declarator is not a qualified name; the entity will
6561 be declared in the current scope. */
6562 return NULL_TREE;
6565 /* Returns an ARRAY_TYPE for an array with SIZE elements of the
6566 indicated TYPE. If non-NULL, NAME is the NAME of the declaration
6567 with this type. */
6569 static tree
6570 create_array_type_for_decl (tree name, tree type, tree size)
6572 tree itype = NULL_TREE;
6573 const char* error_msg;
6575 /* If things have already gone awry, bail now. */
6576 if (type == error_mark_node || size == error_mark_node)
6577 return error_mark_node;
6579 /* Assume that everything will go OK. */
6580 error_msg = NULL;
6582 /* There are some types which cannot be array elements. */
6583 switch (TREE_CODE (type))
6585 case VOID_TYPE:
6586 error_msg = "array of void";
6587 break;
6589 case FUNCTION_TYPE:
6590 error_msg = "array of functions";
6591 break;
6593 case REFERENCE_TYPE:
6594 error_msg = "array of references";
6595 break;
6597 case METHOD_TYPE:
6598 error_msg = "array of function members";
6599 break;
6601 default:
6602 break;
6605 /* If something went wrong, issue an error-message and return. */
6606 if (error_msg)
6608 if (name)
6609 error ("declaration of %qD as %s", name, error_msg);
6610 else
6611 error ("creating %s", error_msg);
6613 return error_mark_node;
6616 /* [dcl.array]
6618 The constant expressions that specify the bounds of the arrays
6619 can be omitted only for the first member of the sequence. */
6620 if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
6622 if (name)
6623 error ("declaration of %qD as multidimensional array must "
6624 "have bounds for all dimensions except the first",
6625 name);
6626 else
6627 error ("multidimensional array must have bounds for all "
6628 "dimensions except the first");
6630 return error_mark_node;
6633 /* Figure out the index type for the array. */
6634 if (size)
6635 itype = compute_array_index_type (name, size);
6637 /* [dcl.array]
6638 T is called the array element type; this type shall not be [...] an
6639 abstract class type. */
6640 abstract_virtuals_error (name, type);
6642 return build_cplus_array_type (type, itype);
6645 /* Check that it's OK to declare a function with the indicated TYPE.
6646 SFK indicates the kind of special function (if any) that this
6647 function is. OPTYPE is the type given in a conversion operator
6648 declaration, or the class type for a constructor/destructor.
6649 Returns the actual return type of the function; that
6650 may be different than TYPE if an error occurs, or for certain
6651 special functions. */
6653 static tree
6654 check_special_function_return_type (special_function_kind sfk,
6655 tree type,
6656 tree optype)
6658 switch (sfk)
6660 case sfk_constructor:
6661 if (type)
6662 error ("return type specification for constructor invalid");
6664 if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
6665 type = build_pointer_type (optype);
6666 else
6667 type = void_type_node;
6668 break;
6670 case sfk_destructor:
6671 if (type)
6672 error ("return type specification for destructor invalid");
6673 /* We can't use the proper return type here because we run into
6674 problems with ambiguous bases and covariant returns.
6675 Java classes are left unchanged because (void *) isn't a valid
6676 Java type, and we don't want to change the Java ABI. */
6677 if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
6678 type = build_pointer_type (void_type_node);
6679 else
6680 type = void_type_node;
6681 break;
6683 case sfk_conversion:
6684 if (type && !same_type_p (type, optype))
6685 error ("operator %qT declared to return %qT", optype, type);
6686 else if (type)
6687 pedwarn ("return type specified for %<operator %T%>", optype);
6688 type = optype;
6689 break;
6691 default:
6692 gcc_unreachable ();
6695 return type;
6698 /* A variable or data member (whose unqualified name is IDENTIFIER)
6699 has been declared with the indicated TYPE. If the TYPE is not
6700 acceptable, issue an error message and return a type to use for
6701 error-recovery purposes. */
6703 tree
6704 check_var_type (tree identifier, tree type)
6706 if (VOID_TYPE_P (type))
6708 if (!identifier)
6709 error ("unnamed variable or field declared void");
6710 else if (TREE_CODE (identifier) == IDENTIFIER_NODE)
6712 gcc_assert (!IDENTIFIER_OPNAME_P (identifier));
6713 error ("variable or field %qE declared void", identifier);
6715 else
6716 error ("variable or field declared void");
6717 type = integer_type_node;
6720 return type;
6723 /* Given declspecs and a declarator (abstract or otherwise), determine
6724 the name and type of the object declared and construct a DECL node
6725 for it.
6727 DECLSPECS is a chain of tree_list nodes whose value fields
6728 are the storage classes and type specifiers.
6730 DECL_CONTEXT says which syntactic context this declaration is in:
6731 NORMAL for most contexts. Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
6732 FUNCDEF for a function definition. Like NORMAL but a few different
6733 error messages in each case. Return value may be zero meaning
6734 this definition is too screwy to try to parse.
6735 MEMFUNCDEF for a function definition. Like FUNCDEF but prepares to
6736 handle member functions (which have FIELD context).
6737 Return value may be zero meaning this definition is too screwy to
6738 try to parse.
6739 PARM for a parameter declaration (either within a function prototype
6740 or before a function body). Make a PARM_DECL, or return void_type_node.
6741 CATCHPARM for a parameter declaration before a catch clause.
6742 TYPENAME if for a typename (in a cast or sizeof).
6743 Don't make a DECL node; just return the ..._TYPE node.
6744 FIELD for a struct or union field; make a FIELD_DECL.
6745 BITFIELD for a field with specified width.
6746 INITIALIZED is 1 if the decl has an initializer.
6748 ATTRLIST is a pointer to the list of attributes, which may be NULL
6749 if there are none; *ATTRLIST may be modified if attributes from inside
6750 the declarator should be applied to the declaration.
6752 When this function is called, scoping variables (such as
6753 CURRENT_CLASS_TYPE) should reflect the scope in which the
6754 declaration occurs, not the scope in which the new declaration will
6755 be placed. For example, on:
6757 void S::f() { ... }
6759 when grokdeclarator is called for `S::f', the CURRENT_CLASS_TYPE
6760 should not be `S'. */
6762 tree
6763 grokdeclarator (const cp_declarator *declarator,
6764 const cp_decl_specifier_seq *declspecs,
6765 enum decl_context decl_context,
6766 int initialized,
6767 tree* attrlist)
6769 tree type = NULL_TREE;
6770 int longlong = 0;
6771 int type_quals;
6772 int virtualp, explicitp, friendp, inlinep, staticp;
6773 int explicit_int = 0;
6774 int explicit_char = 0;
6775 int defaulted_int = 0;
6776 tree dependant_name = NULL_TREE;
6778 tree typedef_decl = NULL_TREE;
6779 const char *name = NULL;
6780 tree typedef_type = NULL_TREE;
6781 int funcdef_flag = 0;
6782 cp_declarator_kind innermost_code = cdk_error;
6783 int bitfield = 0;
6784 #if 0
6785 /* See the code below that used this. */
6786 tree decl_attr = NULL_TREE;
6787 #endif
6789 /* Keep track of what sort of function is being processed
6790 so that we can warn about default return values, or explicit
6791 return values which do not match prescribed defaults. */
6792 special_function_kind sfk = sfk_none;
6794 tree dname = NULL_TREE;
6795 tree ctor_return_type = NULL_TREE;
6796 enum overload_flags flags = NO_SPECIAL;
6797 cp_cv_quals quals = TYPE_UNQUALIFIED;
6798 tree raises = NULL_TREE;
6799 int template_count = 0;
6800 tree returned_attrs = NULL_TREE;
6801 tree parms = NULL_TREE;
6802 const cp_declarator *id_declarator;
6803 /* The unqualified name of the declarator; either an
6804 IDENTIFIER_NODE, BIT_NOT_EXPR, or TEMPLATE_ID_EXPR. */
6805 tree unqualified_id;
6806 /* The class type, if any, in which this entity is located,
6807 or NULL_TREE if none. Note that this value may be different from
6808 the current class type; for example if an attempt is made to declare
6809 "A::f" inside "B", this value will be "A". */
6810 tree ctype = current_class_type;
6811 /* The NAMESPACE_DECL for the namespace in which this entity is
6812 located. If an unqualified name is used to declare the entity,
6813 this value will be NULL_TREE, even if the entity is located at
6814 namespace scope. */
6815 tree in_namespace = NULL_TREE;
6816 cp_storage_class storage_class;
6817 bool unsigned_p, signed_p, short_p, long_p, thread_p;
6818 bool type_was_error_mark_node = false;
6820 signed_p = declspecs->specs[(int)ds_signed];
6821 unsigned_p = declspecs->specs[(int)ds_unsigned];
6822 short_p = declspecs->specs[(int)ds_short];
6823 long_p = declspecs->specs[(int)ds_long];
6824 longlong = declspecs->specs[(int)ds_long] >= 2;
6825 thread_p = declspecs->specs[(int)ds_thread];
6827 if (decl_context == FUNCDEF)
6828 funcdef_flag = 1, decl_context = NORMAL;
6829 else if (decl_context == MEMFUNCDEF)
6830 funcdef_flag = -1, decl_context = FIELD;
6831 else if (decl_context == BITFIELD)
6832 bitfield = 1, decl_context = FIELD;
6834 /* Look inside a declarator for the name being declared
6835 and get it as a string, for an error message. */
6836 for (id_declarator = declarator;
6837 id_declarator;
6838 id_declarator = id_declarator->declarator)
6840 if (id_declarator->kind != cdk_id)
6841 innermost_code = id_declarator->kind;
6843 switch (id_declarator->kind)
6845 case cdk_function:
6846 if (id_declarator->declarator
6847 && id_declarator->declarator->kind == cdk_id)
6849 sfk = id_declarator->declarator->u.id.sfk;
6850 if (sfk == sfk_destructor)
6851 flags = DTOR_FLAG;
6853 break;
6855 case cdk_id:
6857 tree qualifying_scope = id_declarator->u.id.qualifying_scope;
6858 tree decl = id_declarator->u.id.unqualified_name;
6859 if (!decl)
6860 break;
6861 if (qualifying_scope)
6863 if (at_function_scope_p ())
6865 /* [dcl.meaning]
6867 A declarator-id shall not be qualified except
6868 for ...
6870 None of the cases are permitted in block
6871 scope. */
6872 if (qualifying_scope == global_namespace)
6873 error ("invalid use of qualified-name %<::%D%>",
6874 decl);
6875 else if (TYPE_P (qualifying_scope))
6876 error ("invalid use of qualified-name %<%T::%D%>",
6877 qualifying_scope, decl);
6878 else
6879 error ("invalid use of qualified-name %<%D::%D%>",
6880 qualifying_scope, decl);
6881 return error_mark_node;
6883 else if (TYPE_P (qualifying_scope))
6885 ctype = qualifying_scope;
6886 if (innermost_code != cdk_function
6887 && current_class_type
6888 && !UNIQUELY_DERIVED_FROM_P (ctype,
6889 current_class_type))
6891 error ("type %qT is not derived from type %qT",
6892 ctype, current_class_type);
6893 return error_mark_node;
6896 else if (TREE_CODE (qualifying_scope) == NAMESPACE_DECL)
6897 in_namespace = qualifying_scope;
6899 switch (TREE_CODE (decl))
6901 case BIT_NOT_EXPR:
6903 tree type;
6905 if (innermost_code != cdk_function)
6907 error ("declaration of %qD as non-function", decl);
6908 return error_mark_node;
6910 else if (!qualifying_scope
6911 && !(current_class_type && at_class_scope_p ()))
6913 error ("declaration of %qD as non-member", decl);
6914 return error_mark_node;
6917 type = TREE_OPERAND (decl, 0);
6918 name = IDENTIFIER_POINTER (constructor_name (type));
6919 dname = decl;
6921 break;
6923 case TEMPLATE_ID_EXPR:
6925 tree fns = TREE_OPERAND (decl, 0);
6927 dname = fns;
6928 if (TREE_CODE (dname) != IDENTIFIER_NODE)
6930 gcc_assert (is_overloaded_fn (dname));
6931 dname = DECL_NAME (get_first_fn (dname));
6934 /* Fall through. */
6936 case IDENTIFIER_NODE:
6937 if (TREE_CODE (decl) == IDENTIFIER_NODE)
6938 dname = decl;
6940 if (C_IS_RESERVED_WORD (dname))
6942 error ("declarator-id missing; using reserved word %qD",
6943 dname);
6944 name = IDENTIFIER_POINTER (dname);
6946 else if (!IDENTIFIER_TYPENAME_P (dname))
6947 name = IDENTIFIER_POINTER (dname);
6948 else
6950 gcc_assert (flags == NO_SPECIAL);
6951 flags = TYPENAME_FLAG;
6952 ctor_return_type = TREE_TYPE (dname);
6953 sfk = sfk_conversion;
6954 if (is_typename_at_global_scope (dname))
6955 name = IDENTIFIER_POINTER (dname);
6956 else
6957 name = "<invalid operator>";
6959 break;
6961 default:
6962 gcc_unreachable ();
6964 break;
6966 case cdk_array:
6967 case cdk_pointer:
6968 case cdk_reference:
6969 case cdk_ptrmem:
6970 break;
6972 case cdk_error:
6973 break;
6975 default:
6976 gcc_unreachable ();
6979 if (id_declarator->kind == cdk_id)
6980 break;
6983 /* A function definition's declarator must have the form of
6984 a function declarator. */
6986 if (funcdef_flag && innermost_code != cdk_function)
6987 return 0;
6989 if (((dname && IDENTIFIER_OPNAME_P (dname)) || flags == TYPENAME_FLAG)
6990 && innermost_code != cdk_function
6991 && ! (ctype && !declspecs->any_specifiers_p))
6993 error ("declaration of %qD as non-function", dname);
6994 return error_mark_node;
6997 /* Anything declared one level down from the top level
6998 must be one of the parameters of a function
6999 (because the body is at least two levels down). */
7001 /* This heuristic cannot be applied to C++ nodes! Fixed, however,
7002 by not allowing C++ class definitions to specify their parameters
7003 with xdecls (must be spec.d in the parmlist).
7005 Since we now wait to push a class scope until we are sure that
7006 we are in a legitimate method context, we must set oldcname
7007 explicitly (since current_class_name is not yet alive).
7009 We also want to avoid calling this a PARM if it is in a namespace. */
7011 if (decl_context == NORMAL && !toplevel_bindings_p ())
7013 struct cp_binding_level *b = current_binding_level;
7014 current_binding_level = b->level_chain;
7015 if (current_binding_level != 0 && toplevel_bindings_p ())
7016 decl_context = PARM;
7017 current_binding_level = b;
7020 if (name == NULL)
7021 name = decl_context == PARM ? "parameter" : "type name";
7023 /* If there were multiple types specified in the decl-specifier-seq,
7024 issue an error message. */
7025 if (declspecs->multiple_types_p)
7026 error ("two or more data types in declaration of %qs", name);
7027 /* Extract the basic type from the decl-specifier-seq. */
7028 type = declspecs->type;
7029 if (type == error_mark_node)
7031 type = NULL_TREE;
7032 type_was_error_mark_node = true;
7034 /* If the entire declaration is itself tagged as deprecated then
7035 suppress reports of deprecated items. */
7036 if (type && TREE_DEPRECATED (type)
7037 && deprecated_state != DEPRECATED_SUPPRESS)
7038 warn_deprecated_use (type);
7039 if (type && TREE_CODE (type) == TYPE_DECL)
7041 typedef_decl = type;
7042 type = TREE_TYPE (typedef_decl);
7044 /* No type at all: default to `int', and set DEFAULTED_INT
7045 because it was not a user-defined typedef. */
7046 if (type == NULL_TREE && (signed_p || unsigned_p || long_p || short_p))
7048 /* These imply 'int'. */
7049 type = integer_type_node;
7050 defaulted_int = 1;
7052 /* Gather flags. */
7053 explicit_int = declspecs->explicit_int_p;
7054 explicit_char = declspecs->explicit_char_p;
7056 #if 0
7057 /* See the code below that used this. */
7058 if (typedef_decl)
7059 decl_attr = DECL_ATTRIBUTES (typedef_decl);
7060 #endif
7061 typedef_type = type;
7064 if (sfk != sfk_conversion)
7065 ctor_return_type = ctype;
7067 if (sfk != sfk_none)
7068 type = check_special_function_return_type (sfk, type,
7069 ctor_return_type);
7070 else if (type == NULL_TREE)
7072 int is_main;
7074 explicit_int = -1;
7076 /* We handle `main' specially here, because 'main () { }' is so
7077 common. With no options, it is allowed. With -Wreturn-type,
7078 it is a warning. It is only an error with -pedantic-errors. */
7079 is_main = (funcdef_flag
7080 && dname && MAIN_NAME_P (dname)
7081 && ctype == NULL_TREE
7082 && in_namespace == NULL_TREE
7083 && current_namespace == global_namespace);
7085 if (type_was_error_mark_node)
7086 /* We've already issued an error, don't complain more. */;
7087 else if (in_system_header || flag_ms_extensions)
7088 /* Allow it, sigh. */;
7089 else if (pedantic || ! is_main)
7090 pedwarn ("ISO C++ forbids declaration of %qs with no type", name);
7091 else if (warn_return_type)
7092 warning (0, "ISO C++ forbids declaration of %qs with no type", name);
7094 type = integer_type_node;
7097 ctype = NULL_TREE;
7099 /* Now process the modifiers that were specified
7100 and check for invalid combinations. */
7102 /* Long double is a special combination. */
7103 if (long_p && TYPE_MAIN_VARIANT (type) == double_type_node)
7105 long_p = false;
7106 type = build_qualified_type (long_double_type_node,
7107 cp_type_quals (type));
7110 /* Check all other uses of type modifiers. */
7112 if (unsigned_p || signed_p || long_p || short_p)
7114 int ok = 0;
7116 if (TREE_CODE (type) == REAL_TYPE)
7117 error ("short, signed or unsigned invalid for %qs", name);
7118 else if (TREE_CODE (type) != INTEGER_TYPE)
7119 error ("long, short, signed or unsigned invalid for %qs", name);
7120 else if (long_p && short_p)
7121 error ("long and short specified together for %qs", name);
7122 else if ((long_p || short_p) && explicit_char)
7123 error ("long or short specified with char for %qs", name);
7124 else if ((long_p|| short_p) && TREE_CODE (type) == REAL_TYPE)
7125 error ("long or short specified with floating type for %qs", name);
7126 else if (signed_p && unsigned_p)
7127 error ("signed and unsigned given together for %qs", name);
7128 else
7130 ok = 1;
7131 if (!explicit_int && !defaulted_int && !explicit_char && pedantic)
7133 pedwarn ("long, short, signed or unsigned used invalidly for %qs",
7134 name);
7135 if (flag_pedantic_errors)
7136 ok = 0;
7140 /* Discard the type modifiers if they are invalid. */
7141 if (! ok)
7143 unsigned_p = false;
7144 signed_p = false;
7145 long_p = false;
7146 short_p = false;
7147 longlong = 0;
7151 /* Decide whether an integer type is signed or not.
7152 Optionally treat bitfields as signed by default. */
7153 if (unsigned_p
7154 /* [class.bit]
7156 It is implementation-defined whether a plain (neither
7157 explicitly signed or unsigned) char, short, int, or long
7158 bit-field is signed or unsigned.
7160 Naturally, we extend this to long long as well. Note that
7161 this does not include wchar_t. */
7162 || (bitfield && !flag_signed_bitfields
7163 && !signed_p
7164 /* A typedef for plain `int' without `signed' can be
7165 controlled just like plain `int', but a typedef for
7166 `signed int' cannot be so controlled. */
7167 && !(typedef_decl
7168 && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
7169 && (TREE_CODE (type) == INTEGER_TYPE
7170 || TREE_CODE (type) == CHAR_TYPE)
7171 && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
7173 if (longlong)
7174 type = long_long_unsigned_type_node;
7175 else if (long_p)
7176 type = long_unsigned_type_node;
7177 else if (short_p)
7178 type = short_unsigned_type_node;
7179 else if (type == char_type_node)
7180 type = unsigned_char_type_node;
7181 else if (typedef_decl)
7182 type = c_common_unsigned_type (type);
7183 else
7184 type = unsigned_type_node;
7186 else if (signed_p && type == char_type_node)
7187 type = signed_char_type_node;
7188 else if (longlong)
7189 type = long_long_integer_type_node;
7190 else if (long_p)
7191 type = long_integer_type_node;
7192 else if (short_p)
7193 type = short_integer_type_node;
7195 if (declspecs->specs[(int)ds_complex])
7197 if (TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
7198 error ("complex invalid for %qs", name);
7199 /* If we just have "complex", it is equivalent to
7200 "complex double", but if any modifiers at all are specified it is
7201 the complex form of TYPE. E.g, "complex short" is
7202 "complex short int". */
7204 else if (defaulted_int && ! longlong
7205 && ! (long_p || short_p || signed_p || unsigned_p))
7206 type = complex_double_type_node;
7207 else if (type == integer_type_node)
7208 type = complex_integer_type_node;
7209 else if (type == float_type_node)
7210 type = complex_float_type_node;
7211 else if (type == double_type_node)
7212 type = complex_double_type_node;
7213 else if (type == long_double_type_node)
7214 type = complex_long_double_type_node;
7215 else
7216 type = build_complex_type (type);
7219 type_quals = TYPE_UNQUALIFIED;
7220 if (declspecs->specs[(int)ds_const])
7221 type_quals |= TYPE_QUAL_CONST;
7222 if (declspecs->specs[(int)ds_volatile])
7223 type_quals |= TYPE_QUAL_VOLATILE;
7224 if (declspecs->specs[(int)ds_restrict])
7225 type_quals |= TYPE_QUAL_RESTRICT;
7226 if (sfk == sfk_conversion && type_quals != TYPE_UNQUALIFIED)
7227 error ("qualifiers are not allowed on declaration of %<operator %T%>",
7228 ctor_return_type);
7230 if (TREE_CODE (type) == FUNCTION_TYPE
7231 && type_quals != TYPE_UNQUALIFIED)
7233 /* This was an error in C++98 (cv-qualifiers cannot be added to
7234 a function type), but DR 295 makes the code well-formed by
7235 dropping the extra qualifiers. */
7236 if (pedantic)
7238 tree bad_type = build_qualified_type (type, type_quals);
7239 pedwarn ("ignoring %qV qualifiers added to function type %qT",
7240 bad_type, type);
7242 type_quals = TYPE_UNQUALIFIED;
7244 type_quals |= cp_type_quals (type);
7245 type = cp_build_qualified_type_real
7246 (type, type_quals, ((typedef_decl && !DECL_ARTIFICIAL (typedef_decl)
7247 ? tf_ignore_bad_quals : 0) | tf_error | tf_warning));
7248 /* We might have ignored or rejected some of the qualifiers. */
7249 type_quals = cp_type_quals (type);
7251 staticp = 0;
7252 inlinep = !! declspecs->specs[(int)ds_inline];
7253 virtualp = !! declspecs->specs[(int)ds_virtual];
7254 explicitp = !! declspecs->specs[(int)ds_explicit];
7256 storage_class = declspecs->storage_class;
7257 if (storage_class == sc_static)
7258 staticp = 1 + (decl_context == FIELD);
7260 if (virtualp && staticp == 2)
7262 error ("member %qD cannot be declared both virtual and static", dname);
7263 storage_class = sc_none;
7264 staticp = 0;
7266 friendp = !! declspecs->specs[(int)ds_friend];
7268 if (dependant_name && !friendp)
7270 error ("%<%T::%D%> is not a valid declarator", ctype, dependant_name);
7271 return void_type_node;
7274 /* Issue errors about use of storage classes for parameters. */
7275 if (decl_context == PARM)
7277 if (declspecs->specs[(int)ds_typedef])
7279 error ("typedef declaration invalid in parameter declaration");
7280 return error_mark_node;
7282 else if (storage_class == sc_static
7283 || storage_class == sc_extern
7284 || thread_p)
7285 error ("storage class specifiers invalid in parameter declarations");
7288 /* Give error if `virtual' is used outside of class declaration. */
7289 if (virtualp
7290 && (current_class_name == NULL_TREE || decl_context != FIELD))
7292 error ("virtual outside class declaration");
7293 virtualp = 0;
7296 /* Static anonymous unions are dealt with here. */
7297 if (staticp && decl_context == TYPENAME
7298 && declspecs->type
7299 && ANON_AGGR_TYPE_P (declspecs->type))
7300 decl_context = FIELD;
7302 /* Warn about storage classes that are invalid for certain
7303 kinds of declarations (parameters, typenames, etc.). */
7304 if (thread_p
7305 && ((storage_class
7306 && storage_class != sc_extern
7307 && storage_class != sc_static)
7308 || declspecs->specs[(int)ds_typedef]))
7310 if (!declspecs->multiple_storage_classes_p)
7311 error ("multiple storage classes in declaration of %qs", name);
7312 thread_p = false;
7314 if (declspecs->multiple_storage_classes_p)
7316 error ("multiple storage classes in declaration of %qs", name);
7317 storage_class = sc_none;
7319 else if (decl_context != NORMAL
7320 && ((storage_class != sc_none
7321 && storage_class != sc_mutable)
7322 || thread_p))
7324 if ((decl_context == PARM || decl_context == CATCHPARM)
7325 && (storage_class == sc_register
7326 || storage_class == sc_auto))
7328 else if (declspecs->specs[(int)ds_typedef])
7330 else if (decl_context == FIELD
7331 /* C++ allows static class elements. */
7332 && storage_class == sc_static)
7333 /* C++ also allows inlines and signed and unsigned elements,
7334 but in those cases we don't come in here. */
7336 else
7338 if (decl_context == FIELD)
7339 error ("storage class specified for %qs", name);
7340 else
7342 if (decl_context == PARM || decl_context == CATCHPARM)
7343 error ("storage class specified for parameter %qs", name);
7344 else
7345 error ("storage class specified for typename");
7347 if (storage_class == sc_register
7348 || storage_class == sc_auto
7349 || storage_class == sc_extern
7350 || thread_p)
7351 storage_class = sc_none;
7354 else if (storage_class == sc_extern && initialized
7355 && !funcdef_flag)
7357 if (toplevel_bindings_p ())
7359 /* It's common practice (and completely valid) to have a const
7360 be initialized and declared extern. */
7361 if (!(type_quals & TYPE_QUAL_CONST))
7362 warning (0, "%qs initialized and declared %<extern%>", name);
7364 else
7365 error ("%qs has both %<extern%> and initializer", name);
7367 else if (storage_class == sc_extern && funcdef_flag
7368 && ! toplevel_bindings_p ())
7369 error ("nested function %qs declared %<extern%>", name);
7370 else if (toplevel_bindings_p ())
7372 if (storage_class == sc_auto)
7373 error ("top-level declaration of %qs specifies %<auto%>", name);
7375 else if (thread_p
7376 && storage_class != sc_extern
7377 && storage_class != sc_static)
7379 error ("function-scope %qs implicitly auto and declared %<__thread%>",
7380 name);
7381 thread_p = false;
7384 if (storage_class && friendp)
7385 error ("storage class specifiers invalid in friend function declarations");
7387 if (!id_declarator)
7388 unqualified_id = NULL_TREE;
7389 else
7391 unqualified_id = id_declarator->u.id.unqualified_name;
7392 switch (TREE_CODE (unqualified_id))
7394 case BIT_NOT_EXPR:
7395 unqualified_id
7396 = constructor_name (TREE_OPERAND (unqualified_id, 0));
7397 break;
7399 case IDENTIFIER_NODE:
7400 case TEMPLATE_ID_EXPR:
7401 break;
7403 default:
7404 gcc_unreachable ();
7408 /* Determine the type of the entity declared by recurring on the
7409 declarator. */
7410 for (; declarator; declarator = declarator->declarator)
7412 const cp_declarator *inner_declarator;
7413 tree attrs;
7415 if (type == error_mark_node)
7416 return error_mark_node;
7418 attrs = declarator->attributes;
7419 if (attrs)
7421 int attr_flags;
7423 attr_flags = 0;
7424 if (declarator == NULL || declarator->kind == cdk_id)
7425 attr_flags |= (int) ATTR_FLAG_DECL_NEXT;
7426 if (declarator->kind == cdk_function)
7427 attr_flags |= (int) ATTR_FLAG_FUNCTION_NEXT;
7428 if (declarator->kind == cdk_array)
7429 attr_flags |= (int) ATTR_FLAG_ARRAY_NEXT;
7430 returned_attrs = decl_attributes (&type,
7431 chainon (returned_attrs, attrs),
7432 attr_flags);
7435 if (declarator->kind == cdk_id)
7436 break;
7438 inner_declarator = declarator->declarator;
7440 switch (declarator->kind)
7442 case cdk_array:
7443 type = create_array_type_for_decl (dname, type,
7444 declarator->u.array.bounds);
7445 break;
7447 case cdk_function:
7449 tree arg_types;
7450 int funcdecl_p;
7452 /* Declaring a function type.
7453 Make sure we have a valid type for the function to return. */
7455 /* We now know that the TYPE_QUALS don't apply to the
7456 decl, but to its return type. */
7457 type_quals = TYPE_UNQUALIFIED;
7459 /* Warn about some types functions can't return. */
7461 if (TREE_CODE (type) == FUNCTION_TYPE)
7463 error ("%qs declared as function returning a function", name);
7464 type = integer_type_node;
7466 if (TREE_CODE (type) == ARRAY_TYPE)
7468 error ("%qs declared as function returning an array", name);
7469 type = integer_type_node;
7472 /* Pick up type qualifiers which should be applied to `this'. */
7473 quals = declarator->u.function.qualifiers;
7475 /* Pick up the exception specifications. */
7476 raises = declarator->u.function.exception_specification;
7478 /* Say it's a definition only for the CALL_EXPR
7479 closest to the identifier. */
7480 funcdecl_p = inner_declarator && inner_declarator->kind == cdk_id;
7482 if (ctype == NULL_TREE
7483 && decl_context == FIELD
7484 && funcdecl_p
7485 && (friendp == 0 || dname == current_class_name))
7486 ctype = current_class_type;
7488 if (ctype && (sfk == sfk_constructor
7489 || sfk == sfk_destructor))
7491 /* We are within a class's scope. If our declarator name
7492 is the same as the class name, and we are defining
7493 a function, then it is a constructor/destructor, and
7494 therefore returns a void type. */
7496 if (flags == DTOR_FLAG)
7498 /* ISO C++ 12.4/2. A destructor may not be
7499 declared const or volatile. A destructor may
7500 not be static. */
7501 if (staticp == 2)
7502 error ("destructor cannot be static member function");
7503 if (quals)
7505 error ("destructors may not be cv-qualified");
7506 quals = TYPE_UNQUALIFIED;
7508 if (decl_context == FIELD)
7510 if (! member_function_or_else (ctype,
7511 current_class_type,
7512 flags))
7513 return void_type_node;
7516 else /* It's a constructor. */
7518 if (explicitp == 1)
7519 explicitp = 2;
7520 /* ISO C++ 12.1. A constructor may not be
7521 declared const or volatile. A constructor may
7522 not be virtual. A constructor may not be
7523 static. */
7524 if (staticp == 2)
7525 error ("constructor cannot be static member function");
7526 if (virtualp)
7528 pedwarn ("constructors cannot be declared virtual");
7529 virtualp = 0;
7531 if (quals)
7533 error ("constructors may not be cv-qualified");
7534 quals = TYPE_UNQUALIFIED;
7536 if (decl_context == FIELD)
7538 if (! member_function_or_else (ctype,
7539 current_class_type,
7540 flags))
7541 return void_type_node;
7542 TYPE_HAS_CONSTRUCTOR (ctype) = 1;
7543 if (sfk != sfk_constructor)
7544 return NULL_TREE;
7547 if (decl_context == FIELD)
7548 staticp = 0;
7550 else if (friendp)
7552 if (initialized)
7553 error ("can't initialize friend function %qs", name);
7554 if (virtualp)
7556 /* Cannot be both friend and virtual. */
7557 error ("virtual functions cannot be friends");
7558 friendp = 0;
7560 if (decl_context == NORMAL)
7561 error ("friend declaration not in class definition");
7562 if (current_function_decl && funcdef_flag)
7563 error ("can't define friend function %qs in a local "
7564 "class definition",
7565 name);
7568 arg_types = grokparms (declarator->u.function.parameters,
7569 &parms);
7571 if (inner_declarator
7572 && inner_declarator->kind == cdk_id
7573 && inner_declarator->u.id.sfk == sfk_destructor
7574 && arg_types != void_list_node)
7576 error ("destructors may not have parameters");
7577 arg_types = void_list_node;
7578 parms = NULL_TREE;
7581 type = build_function_type (type, arg_types);
7582 type = cp_build_qualified_type (type, quals);
7584 break;
7586 case cdk_pointer:
7587 case cdk_reference:
7588 case cdk_ptrmem:
7589 /* Filter out pointers-to-references and references-to-references.
7590 We can get these if a TYPE_DECL is used. */
7592 if (TREE_CODE (type) == REFERENCE_TYPE)
7594 error (declarator->kind == cdk_reference
7595 ? "cannot declare reference to %q#T"
7596 : "cannot declare pointer to %q#T", type);
7597 type = TREE_TYPE (type);
7599 else if (VOID_TYPE_P (type))
7601 if (declarator->kind == cdk_reference)
7602 error ("cannot declare reference to %q#T", type);
7603 else if (declarator->kind == cdk_ptrmem)
7604 error ("cannot declare pointer to %q#T member", type);
7607 /* We now know that the TYPE_QUALS don't apply to the decl,
7608 but to the target of the pointer. */
7609 type_quals = TYPE_UNQUALIFIED;
7611 if (declarator->kind == cdk_ptrmem
7612 && (TREE_CODE (type) == FUNCTION_TYPE
7613 || (quals && TREE_CODE (type) == METHOD_TYPE)))
7615 tree dummy;
7617 /* If the type is a FUNCTION_TYPE, pick up the
7618 qualifiers from that function type. No other
7619 qualifiers may be supplied. */
7620 if (TREE_CODE (type) == FUNCTION_TYPE)
7621 quals = cp_type_quals (type);
7623 dummy = build_decl (TYPE_DECL, NULL_TREE, type);
7624 grok_method_quals (declarator->u.pointer.class_type,
7625 dummy, quals);
7626 type = TREE_TYPE (dummy);
7627 quals = TYPE_UNQUALIFIED;
7630 if (declarator->kind == cdk_reference)
7632 if (!VOID_TYPE_P (type))
7633 type = build_reference_type (type);
7635 else if (TREE_CODE (type) == METHOD_TYPE)
7636 type = build_ptrmemfunc_type (build_pointer_type (type));
7637 else if (declarator->kind == cdk_ptrmem)
7639 /* We might have parsed a namespace as the class type. */
7640 if (TREE_CODE (declarator->u.pointer.class_type)
7641 == NAMESPACE_DECL)
7643 error ("%qD is a namespace",
7644 declarator->u.pointer.class_type);
7645 type = build_pointer_type (type);
7647 else if (declarator->u.pointer.class_type == error_mark_node)
7648 /* We will already have complained. */
7649 type = error_mark_node;
7650 else
7651 type = build_ptrmem_type (declarator->u.pointer.class_type,
7652 type);
7654 else
7655 type = build_pointer_type (type);
7657 /* Process a list of type modifier keywords (such as
7658 const or volatile) that were given inside the `*' or `&'. */
7660 if (declarator->u.pointer.qualifiers)
7662 type
7663 = cp_build_qualified_type (type,
7664 declarator->u.pointer.qualifiers);
7665 type_quals = cp_type_quals (type);
7667 ctype = NULL_TREE;
7668 break;
7670 case cdk_error:
7671 break;
7673 default:
7674 gcc_unreachable ();
7678 if (unqualified_id && TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR
7679 && TREE_CODE (type) != FUNCTION_TYPE
7680 && TREE_CODE (type) != METHOD_TYPE)
7682 error ("template-id %qD used as a declarator",
7683 unqualified_id);
7684 unqualified_id = dname;
7687 /* If TYPE is a FUNCTION_TYPE, but the function name was explicitly
7688 qualified with a class-name, turn it into a METHOD_TYPE, unless
7689 we know that the function is static. We take advantage of this
7690 opportunity to do other processing that pertains to entities
7691 explicitly declared to be class members. Note that if DECLARATOR
7692 is non-NULL, we know it is a cdk_id declarator; otherwise, we
7693 would not have exited the loop above. */
7694 if (declarator
7695 && declarator->u.id.qualifying_scope
7696 && TYPE_P (declarator->u.id.qualifying_scope))
7698 tree t;
7700 ctype = declarator->u.id.qualifying_scope;
7701 ctype = TYPE_MAIN_VARIANT (ctype);
7702 t = ctype;
7703 while (t != NULL_TREE && CLASS_TYPE_P (t))
7705 /* You're supposed to have one `template <...>' for every
7706 template class, but you don't need one for a full
7707 specialization. For example:
7709 template <class T> struct S{};
7710 template <> struct S<int> { void f(); };
7711 void S<int>::f () {}
7713 is correct; there shouldn't be a `template <>' for the
7714 definition of `S<int>::f'. */
7715 if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t)
7716 && !any_dependent_template_arguments_p (CLASSTYPE_TI_ARGS (t)))
7717 /* T is an explicit (not partial) specialization. All
7718 containing classes must therefore also be explicitly
7719 specialized. */
7720 break;
7721 if ((CLASSTYPE_USE_TEMPLATE (t) || CLASSTYPE_IS_TEMPLATE (t))
7722 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t)))
7723 template_count += 1;
7725 t = TYPE_MAIN_DECL (t);
7726 t = DECL_CONTEXT (t);
7729 if (ctype == current_class_type)
7731 if (friendp)
7732 pedwarn ("member functions are implicitly friends of their class");
7733 else
7734 pedwarn ("extra qualification %<%T::%> on member %qs",
7735 ctype, name);
7737 else if (TREE_CODE (type) == FUNCTION_TYPE)
7739 tree sname = declarator->u.id.unqualified_name;
7741 if (current_class_type
7742 && (!friendp || funcdef_flag))
7744 error (funcdef_flag
7745 ? "cannot define member function %<%T::%s%> within %<%T%>"
7746 : "cannot declare member function %<%T::%s%> within %<%T%>",
7747 ctype, name, current_class_type);
7748 return error_mark_node;
7751 if (TREE_CODE (sname) == IDENTIFIER_NODE
7752 && NEW_DELETE_OPNAME_P (sname))
7753 /* Overloaded operator new and operator delete
7754 are always static functions. */
7756 else
7757 type = (build_method_type_directly
7758 (cp_build_qualified_type (ctype,
7759 quals & ~TYPE_QUAL_RESTRICT),
7760 TREE_TYPE (type),
7761 TYPE_ARG_TYPES (type)));
7763 else if (declspecs->specs[(int)ds_typedef]
7764 || COMPLETE_TYPE_P (complete_type (ctype)))
7766 /* Have to move this code elsewhere in this function.
7767 this code is used for i.e., typedef int A::M; M *pm;
7769 It is? How? jason 10/2/94 */
7771 if (current_class_type)
7773 error ("cannot declare member %<%T::%s%> within %qT",
7774 ctype, name, current_class_type);
7775 return void_type_node;
7778 else
7780 cxx_incomplete_type_error (NULL_TREE, ctype);
7781 return error_mark_node;
7785 /* Now TYPE has the actual type. */
7787 if (returned_attrs)
7789 if (attrlist)
7790 *attrlist = chainon (returned_attrs, *attrlist);
7791 else
7792 attrlist = &returned_attrs;
7795 /* Did array size calculations overflow? */
7797 if (TREE_CODE (type) == ARRAY_TYPE
7798 && COMPLETE_TYPE_P (type)
7799 && TREE_CODE (TYPE_SIZE_UNIT (type)) == INTEGER_CST
7800 && TREE_OVERFLOW (TYPE_SIZE_UNIT (type)))
7802 error ("size of array %qs is too large", name);
7803 /* If we proceed with the array type as it is, we'll eventually
7804 crash in tree_low_cst(). */
7805 type = error_mark_node;
7808 if ((decl_context == FIELD || decl_context == PARM)
7809 && !processing_template_decl
7810 && variably_modified_type_p (type, NULL_TREE))
7812 if (decl_context == FIELD)
7813 error ("data member may not have variably modified type %qT", type);
7814 else
7815 error ("parameter may not have variably modified type %qT", type);
7816 type = error_mark_node;
7819 if (explicitp == 1 || (explicitp && friendp))
7821 /* [dcl.fct.spec] The explicit specifier shall only be used in
7822 declarations of constructors within a class definition. */
7823 error ("only declarations of constructors can be %<explicit%>");
7824 explicitp = 0;
7827 if (storage_class == sc_mutable)
7829 if (decl_context != FIELD || friendp)
7831 error ("non-member %qs cannot be declared %<mutable%>", name);
7832 storage_class = sc_none;
7834 else if (decl_context == TYPENAME || declspecs->specs[(int)ds_typedef])
7836 error ("non-object member %qs cannot be declared %<mutable%>", name);
7837 storage_class = sc_none;
7839 else if (TREE_CODE (type) == FUNCTION_TYPE
7840 || TREE_CODE (type) == METHOD_TYPE)
7842 error ("function %qs cannot be declared %<mutable%>", name);
7843 storage_class = sc_none;
7845 else if (staticp)
7847 error ("static %qs cannot be declared %<mutable%>", name);
7848 storage_class = sc_none;
7850 else if (type_quals & TYPE_QUAL_CONST)
7852 error ("const %qs cannot be declared %<mutable%>", name);
7853 storage_class = sc_none;
7857 /* If this is declaring a typedef name, return a TYPE_DECL. */
7858 if (declspecs->specs[(int)ds_typedef] && decl_context != TYPENAME)
7860 tree decl;
7862 /* Note that the grammar rejects storage classes
7863 in typenames, fields or parameters. */
7864 if (current_lang_name == lang_name_java)
7865 TYPE_FOR_JAVA (type) = 1;
7867 if (decl_context == FIELD)
7868 decl = build_lang_decl (TYPE_DECL, unqualified_id, type);
7869 else
7870 decl = build_decl (TYPE_DECL, unqualified_id, type);
7871 if (id_declarator && declarator->u.id.qualifying_scope)
7872 error ("%Jtypedef name may not be a nested-name-specifier", decl);
7874 if (decl_context != FIELD)
7876 if (!current_function_decl)
7877 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
7878 else if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (current_function_decl)
7879 || (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P
7880 (current_function_decl)))
7881 /* The TYPE_DECL is "abstract" because there will be
7882 clones of this constructor/destructor, and there will
7883 be copies of this TYPE_DECL generated in those
7884 clones. */
7885 DECL_ABSTRACT (decl) = 1;
7887 else if (constructor_name_p (unqualified_id, current_class_type))
7888 pedwarn ("ISO C++ forbids nested type %qD with same name "
7889 "as enclosing class",
7890 unqualified_id);
7892 /* If the user declares "typedef struct {...} foo" then the
7893 struct will have an anonymous name. Fill that name in now.
7894 Nothing can refer to it, so nothing needs know about the name
7895 change. */
7896 if (type != error_mark_node
7897 && unqualified_id
7898 && TYPE_NAME (type)
7899 && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
7900 && TYPE_ANONYMOUS_P (type)
7901 /* Don't do this if there are attributes. */
7902 && (!attrlist || !*attrlist)
7903 && cp_type_quals (type) == TYPE_UNQUALIFIED)
7905 tree oldname = TYPE_NAME (type);
7906 tree t;
7908 /* Replace the anonymous name with the real name everywhere. */
7909 for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
7910 if (TYPE_NAME (t) == oldname)
7911 TYPE_NAME (t) = decl;
7913 if (TYPE_LANG_SPECIFIC (type))
7914 TYPE_WAS_ANONYMOUS (type) = 1;
7916 /* If this is a typedef within a template class, the nested
7917 type is a (non-primary) template. The name for the
7918 template needs updating as well. */
7919 if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
7920 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type))
7921 = TYPE_IDENTIFIER (type);
7923 /* FIXME remangle member functions; member functions of a
7924 type with external linkage have external linkage. */
7927 if (quals)
7929 if (ctype == NULL_TREE)
7931 if (TREE_CODE (type) == METHOD_TYPE)
7932 ctype = TYPE_METHOD_BASETYPE (type);
7933 /* Any qualifiers on a function type typedef have
7934 already been dealt with. */
7935 else if (TREE_CODE (type) == FUNCTION_TYPE)
7936 quals = TYPE_UNQUALIFIED;
7938 if (ctype != NULL_TREE)
7939 grok_method_quals (ctype, decl, quals);
7942 if (signed_p
7943 || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
7944 C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
7946 bad_specifiers (decl, "type", virtualp, quals != TYPE_UNQUALIFIED,
7947 inlinep, friendp, raises != NULL_TREE);
7949 return decl;
7952 /* Detect the case of an array type of unspecified size
7953 which came, as such, direct from a typedef name.
7954 We must copy the type, so that the array's domain can be
7955 individually set by the object's initializer. */
7957 if (type && typedef_type
7958 && TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type)
7959 && TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (typedef_type))
7960 type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
7962 /* Detect where we're using a typedef of function type to declare a
7963 function. PARMS will not be set, so we must create it now. */
7965 if (type == typedef_type && TREE_CODE (type) == FUNCTION_TYPE)
7967 tree decls = NULL_TREE;
7968 tree args;
7970 for (args = TYPE_ARG_TYPES (type); args; args = TREE_CHAIN (args))
7972 tree decl = cp_build_parm_decl (NULL_TREE, TREE_VALUE (args));
7974 TREE_CHAIN (decl) = decls;
7975 decls = decl;
7978 parms = nreverse (decls);
7980 if (decl_context != TYPENAME)
7982 /* A cv-qualifier-seq shall only be part of the function type
7983 for a non-static member function. [8.3.5/4 dcl.fct] */
7984 if (cp_type_quals (type) != TYPE_UNQUALIFIED
7985 && (current_class_type == NULL_TREE || staticp) )
7987 error ("qualified function types cannot be used to declare %s functions",
7988 (staticp? "static member" : "free"));
7989 type = TYPE_MAIN_VARIANT (type);
7992 /* The qualifiers on the function type become the qualifiers on
7993 the non-static member function. */
7994 quals |= cp_type_quals (type);
7998 /* If this is a type name (such as, in a cast or sizeof),
7999 compute the type and return it now. */
8001 if (decl_context == TYPENAME)
8003 /* Note that the grammar rejects storage classes
8004 in typenames, fields or parameters. */
8005 if (type_quals != TYPE_UNQUALIFIED)
8006 type_quals = TYPE_UNQUALIFIED;
8008 /* Special case: "friend class foo" looks like a TYPENAME context. */
8009 if (friendp)
8011 if (type_quals != TYPE_UNQUALIFIED)
8013 error ("type qualifiers specified for friend class declaration");
8014 type_quals = TYPE_UNQUALIFIED;
8016 if (inlinep)
8018 error ("%<inline%> specified for friend class declaration");
8019 inlinep = 0;
8022 if (!current_aggr)
8024 /* Don't allow friend declaration without a class-key. */
8025 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
8026 pedwarn ("template parameters cannot be friends");
8027 else if (TREE_CODE (type) == TYPENAME_TYPE)
8028 pedwarn ("friend declaration requires class-key, "
8029 "i.e. %<friend class %T::%D%>",
8030 TYPE_CONTEXT (type), TYPENAME_TYPE_FULLNAME (type));
8031 else
8032 pedwarn ("friend declaration requires class-key, "
8033 "i.e. %<friend %#T%>",
8034 type);
8037 /* Only try to do this stuff if we didn't already give up. */
8038 if (type != integer_type_node)
8040 /* A friendly class? */
8041 if (current_class_type)
8042 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type),
8043 /*complain=*/true);
8044 else
8045 error ("trying to make class %qT a friend of global scope",
8046 type);
8048 type = void_type_node;
8051 else if (quals)
8053 if (ctype == NULL_TREE)
8055 if (TREE_CODE (type) != METHOD_TYPE)
8056 error ("invalid qualifiers on non-member function type");
8057 else
8058 ctype = TYPE_METHOD_BASETYPE (type);
8060 if (ctype)
8062 tree dummy = build_decl (TYPE_DECL, unqualified_id, type);
8063 grok_method_quals (ctype, dummy, quals);
8064 type = TREE_TYPE (dummy);
8068 return type;
8070 else if (unqualified_id == NULL_TREE && decl_context != PARM
8071 && decl_context != CATCHPARM
8072 && TREE_CODE (type) != UNION_TYPE
8073 && ! bitfield)
8075 error ("abstract declarator %qT used as declaration", type);
8076 return error_mark_node;
8079 /* Only functions may be declared using an operator-function-id. */
8080 if (unqualified_id
8081 && IDENTIFIER_OPNAME_P (unqualified_id)
8082 && TREE_CODE (type) != FUNCTION_TYPE
8083 && TREE_CODE (type) != METHOD_TYPE)
8085 error ("declaration of %qD as non-function", unqualified_id);
8086 return error_mark_node;
8089 /* We don't check parameter types here because we can emit a better
8090 error message later. */
8091 if (decl_context != PARM)
8092 type = check_var_type (unqualified_id, type);
8094 /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
8095 or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE. */
8097 if (decl_context == PARM || decl_context == CATCHPARM)
8099 if (ctype || in_namespace)
8100 error ("cannot use %<::%> in parameter declaration");
8102 /* A parameter declared as an array of T is really a pointer to T.
8103 One declared as a function is really a pointer to a function.
8104 One declared as a member is really a pointer to member. */
8106 if (TREE_CODE (type) == ARRAY_TYPE)
8108 /* Transfer const-ness of array into that of type pointed to. */
8109 type = build_pointer_type (TREE_TYPE (type));
8110 type_quals = TYPE_UNQUALIFIED;
8112 else if (TREE_CODE (type) == FUNCTION_TYPE)
8113 type = build_pointer_type (type);
8117 tree decl;
8119 if (decl_context == PARM)
8121 decl = cp_build_parm_decl (unqualified_id, type);
8123 bad_specifiers (decl, "parameter", virtualp, quals != TYPE_UNQUALIFIED,
8124 inlinep, friendp, raises != NULL_TREE);
8126 else if (decl_context == FIELD)
8128 /* The C99 flexible array extension. */
8129 if (!staticp && TREE_CODE (type) == ARRAY_TYPE
8130 && TYPE_DOMAIN (type) == NULL_TREE)
8132 tree itype = compute_array_index_type (dname, integer_zero_node);
8133 type = build_cplus_array_type (TREE_TYPE (type), itype);
8136 if (type == error_mark_node)
8138 /* Happens when declaring arrays of sizes which
8139 are error_mark_node, for example. */
8140 decl = NULL_TREE;
8142 else if (in_namespace && !friendp)
8144 /* Something like struct S { int N::j; }; */
8145 error ("invalid use of %<::%>");
8146 return error_mark_node;
8148 else if (TREE_CODE (type) == FUNCTION_TYPE)
8150 int publicp = 0;
8151 tree function_context;
8153 if (friendp == 0)
8155 if (ctype == NULL_TREE)
8156 ctype = current_class_type;
8158 if (ctype == NULL_TREE)
8160 error ("can't make %qD into a method -- not in a class",
8161 unqualified_id);
8162 return void_type_node;
8165 /* ``A union may [ ... ] not [ have ] virtual functions.''
8166 ARM 9.5 */
8167 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
8169 error ("function %qD declared virtual inside a union",
8170 unqualified_id);
8171 return void_type_node;
8174 if (NEW_DELETE_OPNAME_P (unqualified_id))
8176 if (virtualp)
8178 error ("%qD cannot be declared virtual, since it "
8179 "is always static",
8180 unqualified_id);
8181 virtualp = 0;
8184 else if (staticp < 2)
8185 type = build_method_type_directly (ctype,
8186 TREE_TYPE (type),
8187 TYPE_ARG_TYPES (type));
8190 /* Check that the name used for a destructor makes sense. */
8191 if (sfk == sfk_destructor)
8193 if (!ctype)
8195 gcc_assert (friendp);
8196 error ("expected qualified name in friend declaration "
8197 "for destructor %qD",
8198 id_declarator->u.id.unqualified_name);
8199 return error_mark_node;
8202 if (!same_type_p (TREE_OPERAND
8203 (id_declarator->u.id.unqualified_name, 0),
8204 ctype))
8206 error ("declaration of %qD as member of %qT",
8207 id_declarator->u.id.unqualified_name, ctype);
8208 return error_mark_node;
8212 /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node. */
8213 function_context = (ctype != NULL_TREE) ?
8214 decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
8215 publicp = (! friendp || ! staticp)
8216 && function_context == NULL_TREE;
8217 decl = grokfndecl (ctype, type,
8218 TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
8219 ? unqualified_id : dname,
8220 parms,
8221 unqualified_id,
8222 virtualp, flags, quals, raises,
8223 friendp ? -1 : 0, friendp, publicp, inlinep,
8224 sfk,
8225 funcdef_flag, template_count, in_namespace, attrlist);
8226 if (decl == NULL_TREE)
8227 return decl;
8228 #if 0
8229 /* This clobbers the attrs stored in `decl' from `attrlist'. */
8230 /* The decl and setting of decl_attr is also turned off. */
8231 decl = build_decl_attribute_variant (decl, decl_attr);
8232 #endif
8234 /* [class.conv.ctor]
8236 A constructor declared without the function-specifier
8237 explicit that can be called with a single parameter
8238 specifies a conversion from the type of its first
8239 parameter to the type of its class. Such a constructor
8240 is called a converting constructor. */
8241 if (explicitp == 2)
8242 DECL_NONCONVERTING_P (decl) = 1;
8243 else if (DECL_CONSTRUCTOR_P (decl))
8245 /* The constructor can be called with exactly one
8246 parameter if there is at least one parameter, and
8247 any subsequent parameters have default arguments.
8248 Ignore any compiler-added parms. */
8249 tree arg_types = FUNCTION_FIRST_USER_PARMTYPE (decl);
8251 if (arg_types == void_list_node
8252 || (arg_types
8253 && TREE_CHAIN (arg_types)
8254 && TREE_CHAIN (arg_types) != void_list_node
8255 && !TREE_PURPOSE (TREE_CHAIN (arg_types))))
8256 DECL_NONCONVERTING_P (decl) = 1;
8259 else if (TREE_CODE (type) == METHOD_TYPE)
8261 /* We only get here for friend declarations of
8262 members of other classes. */
8263 /* All method decls are public, so tell grokfndecl to set
8264 TREE_PUBLIC, also. */
8265 decl = grokfndecl (ctype, type,
8266 TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
8267 ? unqualified_id : dname,
8268 parms,
8269 unqualified_id,
8270 virtualp, flags, quals, raises,
8271 friendp ? -1 : 0, friendp, 1, 0, sfk,
8272 funcdef_flag, template_count, in_namespace,
8273 attrlist);
8274 if (decl == NULL_TREE)
8275 return NULL_TREE;
8277 else if (!staticp && !dependent_type_p (type)
8278 && !COMPLETE_TYPE_P (complete_type (type))
8279 && (TREE_CODE (type) != ARRAY_TYPE || initialized == 0))
8281 if (unqualified_id)
8282 error ("field %qD has incomplete type", unqualified_id);
8283 else
8284 error ("name %qT has incomplete type", type);
8286 /* If we're instantiating a template, tell them which
8287 instantiation made the field's type be incomplete. */
8288 if (current_class_type
8289 && TYPE_NAME (current_class_type)
8290 && IDENTIFIER_TEMPLATE (TYPE_IDENTIFIER (current_class_type))
8291 && declspecs->type
8292 && declspecs->type == type)
8293 error (" in instantiation of template %qT",
8294 current_class_type);
8296 type = error_mark_node;
8297 decl = NULL_TREE;
8299 else
8301 if (friendp)
8303 error ("%qE is neither function nor member function; "
8304 "cannot be declared friend", unqualified_id);
8305 friendp = 0;
8307 decl = NULL_TREE;
8310 if (friendp)
8312 /* Friends are treated specially. */
8313 if (ctype == current_class_type)
8314 ; /* We already issued a pedwarn. */
8315 else if (decl && DECL_NAME (decl))
8317 if (template_class_depth (current_class_type) == 0)
8319 decl = check_explicit_specialization
8320 (unqualified_id, decl, template_count,
8321 2 * (funcdef_flag != 0) + 4);
8322 if (decl == error_mark_node)
8323 return error_mark_node;
8326 decl = do_friend (ctype, unqualified_id, decl,
8327 *attrlist, flags, quals, funcdef_flag);
8328 return decl;
8330 else
8331 return void_type_node;
8334 /* Structure field. It may not be a function, except for C++. */
8336 if (decl == NULL_TREE)
8338 if (initialized)
8340 if (!staticp)
8342 /* An attempt is being made to initialize a non-static
8343 member. But, from [class.mem]:
8345 4 A member-declarator can contain a
8346 constant-initializer only if it declares a static
8347 member (_class.static_) of integral or enumeration
8348 type, see _class.static.data_.
8350 This used to be relatively common practice, but
8351 the rest of the compiler does not correctly
8352 handle the initialization unless the member is
8353 static so we make it static below. */
8354 pedwarn ("ISO C++ forbids initialization of member %qD",
8355 unqualified_id);
8356 pedwarn ("making %qD static", unqualified_id);
8357 staticp = 1;
8360 if (uses_template_parms (type))
8361 /* We'll check at instantiation time. */
8363 else if (check_static_variable_definition (unqualified_id,
8364 type))
8365 /* If we just return the declaration, crashes
8366 will sometimes occur. We therefore return
8367 void_type_node, as if this was a friend
8368 declaration, to cause callers to completely
8369 ignore this declaration. */
8370 return void_type_node;
8373 if (staticp)
8375 /* C++ allows static class members. All other work
8376 for this is done by grokfield. */
8377 decl = build_lang_decl (VAR_DECL, unqualified_id, type);
8378 set_linkage_for_static_data_member (decl);
8379 /* Even if there is an in-class initialization, DECL
8380 is considered undefined until an out-of-class
8381 definition is provided. */
8382 DECL_EXTERNAL (decl) = 1;
8384 if (thread_p)
8386 if (targetm.have_tls)
8387 DECL_TLS_MODEL (decl) = decl_default_tls_model (decl);
8388 else
8389 /* A mere warning is sure to result in improper
8390 semantics at runtime. Don't bother to allow this to
8391 compile. */
8392 error ("thread-local storage not supported for this target");
8395 else
8397 decl = build_decl (FIELD_DECL, unqualified_id, type);
8398 DECL_NONADDRESSABLE_P (decl) = bitfield;
8399 if (storage_class == sc_mutable)
8401 DECL_MUTABLE_P (decl) = 1;
8402 storage_class = sc_none;
8406 bad_specifiers (decl, "field", virtualp, quals != TYPE_UNQUALIFIED,
8407 inlinep, friendp, raises != NULL_TREE);
8410 else if (TREE_CODE (type) == FUNCTION_TYPE
8411 || TREE_CODE (type) == METHOD_TYPE)
8413 tree original_name;
8414 int publicp = 0;
8416 if (!unqualified_id)
8417 return NULL_TREE;
8419 if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
8420 original_name = dname;
8421 else
8422 original_name = unqualified_id;
8424 if (storage_class == sc_auto)
8425 error ("storage class %<auto%> invalid for function %qs", name);
8426 else if (storage_class == sc_register)
8427 error ("storage class %<register%> invalid for function %qs", name);
8428 else if (thread_p)
8429 error ("storage class %<__thread%> invalid for function %qs", name);
8431 /* Function declaration not at top level.
8432 Storage classes other than `extern' are not allowed
8433 and `extern' makes no difference. */
8434 if (! toplevel_bindings_p ()
8435 && (storage_class == sc_static
8436 || declspecs->specs[(int)ds_inline])
8437 && pedantic)
8439 if (storage_class == sc_static)
8440 pedwarn ("%<static%> specified invalid for function %qs "
8441 "declared out of global scope", name);
8442 else
8443 pedwarn ("%<inline%> specifier invalid for function %qs "
8444 "declared out of global scope", name);
8447 if (ctype == NULL_TREE)
8449 if (virtualp)
8451 error ("virtual non-class function %qs", name);
8452 virtualp = 0;
8455 else if (TREE_CODE (type) == FUNCTION_TYPE && staticp < 2
8456 && !NEW_DELETE_OPNAME_P (original_name))
8457 type = build_method_type_directly (ctype,
8458 TREE_TYPE (type),
8459 TYPE_ARG_TYPES (type));
8461 /* Record presence of `static'. */
8462 publicp = (ctype != NULL_TREE
8463 || storage_class == sc_extern
8464 || storage_class != sc_static);
8466 decl = grokfndecl (ctype, type, original_name, parms, unqualified_id,
8467 virtualp, flags, quals, raises,
8468 1, friendp,
8469 publicp, inlinep, sfk, funcdef_flag,
8470 template_count, in_namespace, attrlist);
8471 if (decl == NULL_TREE)
8472 return NULL_TREE;
8474 if (staticp == 1)
8476 int invalid_static = 0;
8478 /* Don't allow a static member function in a class, and forbid
8479 declaring main to be static. */
8480 if (TREE_CODE (type) == METHOD_TYPE)
8482 pedwarn ("cannot declare member function %qD to have "
8483 "static linkage", decl);
8484 invalid_static = 1;
8486 else if (current_function_decl)
8488 /* FIXME need arm citation */
8489 error ("cannot declare static function inside another function");
8490 invalid_static = 1;
8493 if (invalid_static)
8495 staticp = 0;
8496 storage_class = sc_none;
8500 else
8502 /* It's a variable. */
8504 /* An uninitialized decl with `extern' is a reference. */
8505 decl = grokvardecl (type, unqualified_id,
8506 declspecs,
8507 initialized,
8508 (type_quals & TYPE_QUAL_CONST) != 0,
8509 ctype ? ctype : in_namespace);
8510 bad_specifiers (decl, "variable", virtualp, quals != TYPE_UNQUALIFIED,
8511 inlinep, friendp, raises != NULL_TREE);
8513 if (ctype)
8515 DECL_CONTEXT (decl) = ctype;
8516 if (staticp == 1)
8518 pedwarn ("%<static%> may not be used when defining "
8519 "(as opposed to declaring) a static data member");
8520 staticp = 0;
8521 storage_class = sc_none;
8523 if (storage_class == sc_register && TREE_STATIC (decl))
8525 error ("static member %qD declared %<register%>", decl);
8526 storage_class = sc_none;
8528 if (storage_class == sc_extern && pedantic)
8530 pedwarn ("cannot explicitly declare member %q#D to have "
8531 "extern linkage",
8532 decl);
8533 storage_class = sc_none;
8538 /* Record `register' declaration for warnings on &
8539 and in case doing stupid register allocation. */
8541 if (storage_class == sc_register)
8542 DECL_REGISTER (decl) = 1;
8543 else if (storage_class == sc_extern)
8544 DECL_THIS_EXTERN (decl) = 1;
8545 else if (storage_class == sc_static)
8546 DECL_THIS_STATIC (decl) = 1;
8548 /* Record constancy and volatility. There's no need to do this
8549 when processing a template; we'll do this for the instantiated
8550 declaration based on the type of DECL. */
8551 if (!processing_template_decl)
8552 cp_apply_type_quals_to_decl (type_quals, decl);
8554 return decl;
8558 /* Subroutine of start_function. Ensure that each of the parameter
8559 types (as listed in PARMS) is complete, as is required for a
8560 function definition. */
8562 static void
8563 require_complete_types_for_parms (tree parms)
8565 for (; parms; parms = TREE_CHAIN (parms))
8567 if (dependent_type_p (TREE_TYPE (parms)))
8568 continue;
8569 if (!VOID_TYPE_P (TREE_TYPE (parms))
8570 && complete_type_or_else (TREE_TYPE (parms), parms))
8572 relayout_decl (parms);
8573 DECL_ARG_TYPE (parms) = type_passed_as (TREE_TYPE (parms));
8575 else
8576 /* grokparms or complete_type_or_else will have already issued
8577 an error. */
8578 TREE_TYPE (parms) = error_mark_node;
8582 /* Returns nonzero if T is a local variable. */
8585 local_variable_p (tree t)
8587 if ((TREE_CODE (t) == VAR_DECL
8588 /* A VAR_DECL with a context that is a _TYPE is a static data
8589 member. */
8590 && !TYPE_P (CP_DECL_CONTEXT (t))
8591 /* Any other non-local variable must be at namespace scope. */
8592 && !DECL_NAMESPACE_SCOPE_P (t))
8593 || (TREE_CODE (t) == PARM_DECL))
8594 return 1;
8596 return 0;
8599 /* Returns nonzero if T is an automatic local variable or a label.
8600 (These are the declarations that need to be remapped when the code
8601 containing them is duplicated.) */
8604 nonstatic_local_decl_p (tree t)
8606 return ((local_variable_p (t) && !TREE_STATIC (t))
8607 || TREE_CODE (t) == LABEL_DECL
8608 || TREE_CODE (t) == RESULT_DECL);
8611 /* Like local_variable_p, but suitable for use as a tree-walking
8612 function. */
8614 static tree
8615 local_variable_p_walkfn (tree *tp, int *walk_subtrees,
8616 void *data ATTRIBUTE_UNUSED)
8618 if (local_variable_p (*tp) && !DECL_ARTIFICIAL (*tp))
8619 return *tp;
8620 else if (TYPE_P (*tp))
8621 *walk_subtrees = 0;
8623 return NULL_TREE;
8627 /* Check that ARG, which is a default-argument expression for a
8628 parameter DECL, is valid. Returns ARG, or ERROR_MARK_NODE, if
8629 something goes wrong. DECL may also be a _TYPE node, rather than a
8630 DECL, if there is no DECL available. */
8632 tree
8633 check_default_argument (tree decl, tree arg)
8635 tree var;
8636 tree decl_type;
8638 if (TREE_CODE (arg) == DEFAULT_ARG)
8639 /* We get a DEFAULT_ARG when looking at an in-class declaration
8640 with a default argument. Ignore the argument for now; we'll
8641 deal with it after the class is complete. */
8642 return arg;
8644 if (TYPE_P (decl))
8646 decl_type = decl;
8647 decl = NULL_TREE;
8649 else
8650 decl_type = TREE_TYPE (decl);
8652 if (arg == error_mark_node
8653 || decl == error_mark_node
8654 || TREE_TYPE (arg) == error_mark_node
8655 || decl_type == error_mark_node)
8656 /* Something already went wrong. There's no need to check
8657 further. */
8658 return error_mark_node;
8660 /* [dcl.fct.default]
8662 A default argument expression is implicitly converted to the
8663 parameter type. */
8664 if (!TREE_TYPE (arg)
8665 || !can_convert_arg (decl_type, TREE_TYPE (arg), arg, LOOKUP_NORMAL))
8667 if (decl)
8668 error ("default argument for %q#D has type %qT",
8669 decl, TREE_TYPE (arg));
8670 else
8671 error ("default argument for parameter of type %qT has type %qT",
8672 decl_type, TREE_TYPE (arg));
8674 return error_mark_node;
8677 /* [dcl.fct.default]
8679 Local variables shall not be used in default argument
8680 expressions.
8682 The keyword `this' shall not be used in a default argument of a
8683 member function. */
8684 var = walk_tree_without_duplicates (&arg, local_variable_p_walkfn,
8685 NULL);
8686 if (var)
8688 error ("default argument %qE uses local variable %qD", arg, var);
8689 return error_mark_node;
8692 /* All is well. */
8693 return arg;
8696 /* Decode the list of parameter types for a function type.
8697 Given the list of things declared inside the parens,
8698 return a list of types.
8700 If this parameter does not end with an ellipsis, we append
8701 void_list_node.
8703 *PARMS is set to the chain of PARM_DECLs created. */
8705 static tree
8706 grokparms (cp_parameter_declarator *first_parm, tree *parms)
8708 tree result = NULL_TREE;
8709 tree decls = NULL_TREE;
8710 int ellipsis = !first_parm || first_parm->ellipsis_p;
8711 cp_parameter_declarator *parm;
8712 int any_error = 0;
8714 for (parm = first_parm; parm != NULL; parm = parm->next)
8716 tree type = NULL_TREE;
8717 tree init = parm->default_argument;
8718 tree attrs;
8719 tree decl;
8721 if (parm == no_parameters)
8722 break;
8724 attrs = parm->decl_specifiers.attributes;
8725 parm->decl_specifiers.attributes = NULL_TREE;
8726 decl = grokdeclarator (parm->declarator, &parm->decl_specifiers,
8727 PARM, init != NULL_TREE, &attrs);
8728 if (! decl || TREE_TYPE (decl) == error_mark_node)
8729 continue;
8731 if (attrs)
8732 cplus_decl_attributes (&decl, attrs, 0);
8734 type = TREE_TYPE (decl);
8735 if (VOID_TYPE_P (type))
8737 if (same_type_p (type, void_type_node)
8738 && !DECL_NAME (decl) && !result && !parm->next && !ellipsis)
8739 /* this is a parmlist of `(void)', which is ok. */
8740 break;
8741 cxx_incomplete_type_error (decl, type);
8742 /* It's not a good idea to actually create parameters of
8743 type `void'; other parts of the compiler assume that a
8744 void type terminates the parameter list. */
8745 type = error_mark_node;
8746 TREE_TYPE (decl) = error_mark_node;
8749 if (type != error_mark_node)
8751 /* Top-level qualifiers on the parameters are
8752 ignored for function types. */
8753 type = cp_build_qualified_type (type, 0);
8754 if (TREE_CODE (type) == METHOD_TYPE)
8756 error ("parameter %qD invalidly declared method type", decl);
8757 type = build_pointer_type (type);
8758 TREE_TYPE (decl) = type;
8760 else if (abstract_virtuals_error (decl, type))
8761 any_error = 1; /* Seems like a good idea. */
8762 else if (POINTER_TYPE_P (type))
8764 /* [dcl.fct]/6, parameter types cannot contain pointers
8765 (references) to arrays of unknown bound. */
8766 tree t = TREE_TYPE (type);
8767 int ptr = TYPE_PTR_P (type);
8769 while (1)
8771 if (TYPE_PTR_P (t))
8772 ptr = 1;
8773 else if (TREE_CODE (t) != ARRAY_TYPE)
8774 break;
8775 else if (!TYPE_DOMAIN (t))
8776 break;
8777 t = TREE_TYPE (t);
8779 if (TREE_CODE (t) == ARRAY_TYPE)
8780 error ("parameter %qD includes %s to array of unknown "
8781 "bound %qT",
8782 decl, ptr ? "pointer" : "reference", t);
8785 if (any_error)
8786 init = NULL_TREE;
8787 else if (init && !processing_template_decl)
8788 init = check_default_argument (decl, init);
8791 TREE_CHAIN (decl) = decls;
8792 decls = decl;
8793 result = tree_cons (init, type, result);
8795 decls = nreverse (decls);
8796 result = nreverse (result);
8797 if (!ellipsis)
8798 result = chainon (result, void_list_node);
8799 *parms = decls;
8801 return result;
8805 /* D is a constructor or overloaded `operator='.
8807 Let T be the class in which D is declared. Then, this function
8808 returns:
8810 -1 if D's is an ill-formed constructor or copy assignment operator
8811 whose first parameter is of type `T'.
8812 0 if D is not a copy constructor or copy assignment
8813 operator.
8814 1 if D is a copy constructor or copy assignment operator whose
8815 first parameter is a reference to const qualified T.
8816 2 if D is a copy constructor or copy assignment operator whose
8817 first parameter is a reference to non-const qualified T.
8819 This function can be used as a predicate. Positive values indicate
8820 a copy constructor and nonzero values indicate a copy assignment
8821 operator. */
8824 copy_fn_p (tree d)
8826 tree args;
8827 tree arg_type;
8828 int result = 1;
8830 if (!DECL_FUNCTION_MEMBER_P (d))
8831 /* Non-members are invalid. We complained, but kept the declaration. */
8832 return 0;
8834 if (DECL_TEMPLATE_INFO (d)
8835 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d)))
8836 /* Instantiations of template member functions are never copy
8837 functions. Note that member functions of templated classes are
8838 represented as template functions internally, and we must
8839 accept those as copy functions. */
8840 return 0;
8842 args = FUNCTION_FIRST_USER_PARMTYPE (d);
8843 if (!args)
8844 return 0;
8846 arg_type = TREE_VALUE (args);
8847 if (arg_type == error_mark_node)
8848 return 0;
8850 if (TYPE_MAIN_VARIANT (arg_type) == DECL_CONTEXT (d))
8852 /* Pass by value copy assignment operator. */
8853 result = -1;
8855 else if (TREE_CODE (arg_type) == REFERENCE_TYPE
8856 && TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)) == DECL_CONTEXT (d))
8858 if (CP_TYPE_CONST_P (TREE_TYPE (arg_type)))
8859 result = 2;
8861 else
8862 return 0;
8864 args = TREE_CHAIN (args);
8866 if (args && args != void_list_node && !TREE_PURPOSE (args))
8867 /* There are more non-optional args. */
8868 return 0;
8870 return result;
8873 /* Remember any special properties of member function DECL. */
8875 void grok_special_member_properties (tree decl)
8877 if (!DECL_NONSTATIC_MEMBER_FUNCTION_P(decl))
8878 ; /* Not special. */
8879 else if (DECL_CONSTRUCTOR_P (decl))
8881 int ctor = copy_fn_p (decl);
8883 if (ctor > 0)
8885 /* [class.copy]
8887 A non-template constructor for class X is a copy
8888 constructor if its first parameter is of type X&, const
8889 X&, volatile X& or const volatile X&, and either there
8890 are no other parameters or else all other parameters have
8891 default arguments. */
8892 TYPE_HAS_INIT_REF (DECL_CONTEXT (decl)) = 1;
8893 if (ctor > 1)
8894 TYPE_HAS_CONST_INIT_REF (DECL_CONTEXT (decl)) = 1;
8896 else if (sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (decl)))
8897 TYPE_HAS_DEFAULT_CONSTRUCTOR (DECL_CONTEXT (decl)) = 1;
8899 else if (DECL_OVERLOADED_OPERATOR_P (decl) == NOP_EXPR)
8901 /* [class.copy]
8903 A non-template assignment operator for class X is a copy
8904 assignment operator if its parameter is of type X, X&, const
8905 X&, volatile X& or const volatile X&. */
8907 int assop = copy_fn_p (decl);
8909 if (assop)
8911 TYPE_HAS_ASSIGN_REF (DECL_CONTEXT (decl)) = 1;
8912 if (assop != 1)
8913 TYPE_HAS_CONST_ASSIGN_REF (DECL_CONTEXT (decl)) = 1;
8918 /* Check a constructor DECL has the correct form. Complains
8919 if the class has a constructor of the form X(X). */
8922 grok_ctor_properties (tree ctype, tree decl)
8924 int ctor_parm = copy_fn_p (decl);
8926 if (ctor_parm < 0)
8928 /* [class.copy]
8930 A declaration of a constructor for a class X is ill-formed if
8931 its first parameter is of type (optionally cv-qualified) X
8932 and either there are no other parameters or else all other
8933 parameters have default arguments.
8935 We *don't* complain about member template instantiations that
8936 have this form, though; they can occur as we try to decide
8937 what constructor to use during overload resolution. Since
8938 overload resolution will never prefer such a constructor to
8939 the non-template copy constructor (which is either explicitly
8940 or implicitly defined), there's no need to worry about their
8941 existence. Theoretically, they should never even be
8942 instantiated, but that's hard to forestall. */
8943 error ("invalid constructor; you probably meant %<%T (const %T&)%>",
8944 ctype, ctype);
8945 return 0;
8948 return 1;
8951 /* An operator with this code is unary, but can also be binary. */
8953 static int
8954 ambi_op_p (enum tree_code code)
8956 return (code == INDIRECT_REF
8957 || code == ADDR_EXPR
8958 || code == UNARY_PLUS_EXPR
8959 || code == NEGATE_EXPR
8960 || code == PREINCREMENT_EXPR
8961 || code == PREDECREMENT_EXPR);
8964 /* An operator with this name can only be unary. */
8966 static int
8967 unary_op_p (enum tree_code code)
8969 return (code == TRUTH_NOT_EXPR
8970 || code == BIT_NOT_EXPR
8971 || code == COMPONENT_REF
8972 || code == TYPE_EXPR);
8975 /* DECL is a declaration for an overloaded operator. If COMPLAIN is true,
8976 errors are issued for invalid declarations. */
8978 void
8979 grok_op_properties (tree decl, bool complain)
8981 tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
8982 tree argtype;
8983 int methodp = (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE);
8984 tree name = DECL_NAME (decl);
8985 enum tree_code operator_code;
8986 int arity;
8987 bool ellipsis_p;
8988 tree class_type;
8990 /* Count the number of arguments and check for ellipsis. */
8991 for (argtype = argtypes, arity = 0;
8992 argtype && argtype != void_list_node;
8993 argtype = TREE_CHAIN (argtype))
8994 ++arity;
8995 ellipsis_p = !argtype;
8997 class_type = DECL_CONTEXT (decl);
8998 if (class_type && !CLASS_TYPE_P (class_type))
8999 class_type = NULL_TREE;
9001 if (DECL_CONV_FN_P (decl))
9002 operator_code = TYPE_EXPR;
9003 else
9006 #define DEF_OPERATOR(NAME, CODE, MANGLING, ARITY, ASSN_P) \
9007 if (ansi_opname (CODE) == name) \
9009 operator_code = (CODE); \
9010 break; \
9012 else if (ansi_assopname (CODE) == name) \
9014 operator_code = (CODE); \
9015 DECL_ASSIGNMENT_OPERATOR_P (decl) = 1; \
9016 break; \
9019 #include "operators.def"
9020 #undef DEF_OPERATOR
9022 gcc_unreachable ();
9024 while (0);
9025 gcc_assert (operator_code != LAST_CPLUS_TREE_CODE);
9026 SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
9028 if (class_type)
9029 switch (operator_code)
9031 case NEW_EXPR:
9032 TYPE_HAS_NEW_OPERATOR (class_type) = 1;
9033 break;
9035 case DELETE_EXPR:
9036 TYPE_GETS_DELETE (class_type) |= 1;
9037 break;
9039 case VEC_NEW_EXPR:
9040 TYPE_HAS_ARRAY_NEW_OPERATOR (class_type) = 1;
9041 break;
9043 case VEC_DELETE_EXPR:
9044 TYPE_GETS_DELETE (class_type) |= 2;
9045 break;
9047 default:
9048 break;
9051 /* [basic.std.dynamic.allocation]/1:
9053 A program is ill-formed if an allocation function is declared
9054 in a namespace scope other than global scope or declared static
9055 in global scope.
9057 The same also holds true for deallocation functions. */
9058 if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR
9059 || operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
9061 if (DECL_NAMESPACE_SCOPE_P (decl))
9063 if (CP_DECL_CONTEXT (decl) != global_namespace)
9064 error ("%qD may not be declared within a namespace", decl);
9065 else if (!TREE_PUBLIC (decl))
9066 error ("%qD may not be declared as static", decl);
9070 if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR)
9071 TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
9072 else if (operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
9073 TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
9074 else
9076 /* An operator function must either be a non-static member function
9077 or have at least one parameter of a class, a reference to a class,
9078 an enumeration, or a reference to an enumeration. 13.4.0.6 */
9079 if (! methodp || DECL_STATIC_FUNCTION_P (decl))
9081 if (operator_code == TYPE_EXPR
9082 || operator_code == CALL_EXPR
9083 || operator_code == COMPONENT_REF
9084 || operator_code == ARRAY_REF
9085 || operator_code == NOP_EXPR)
9087 error ("%qD must be a nonstatic member function", decl);
9088 return;
9090 else
9092 tree p;
9094 if (DECL_STATIC_FUNCTION_P (decl))
9096 error ("%qD must be either a non-static member "
9097 "function or a non-member function", decl);
9098 return;
9101 for (p = argtypes; p && p != void_list_node; p = TREE_CHAIN (p))
9103 tree arg = non_reference (TREE_VALUE (p));
9104 if (arg == error_mark_node)
9105 return;
9107 /* IS_AGGR_TYPE, rather than CLASS_TYPE_P, is used
9108 because these checks are performed even on
9109 template functions. */
9110 if (IS_AGGR_TYPE (arg) || TREE_CODE (arg) == ENUMERAL_TYPE)
9111 break;
9114 if (!p || p == void_list_node)
9116 if (!complain)
9117 return;
9119 error ("%qD must have an argument of class or "
9120 "enumerated type",
9121 decl);
9126 /* There are no restrictions on the arguments to an overloaded
9127 "operator ()". */
9128 if (operator_code == CALL_EXPR)
9129 return;
9131 /* Warn about conversion operators that will never be used. */
9132 if (IDENTIFIER_TYPENAME_P (name)
9133 && ! DECL_TEMPLATE_INFO (decl)
9134 && warn_conversion
9135 /* Warn only declaring the function; there is no need to
9136 warn again about out-of-class definitions. */
9137 && class_type == current_class_type)
9139 tree t = TREE_TYPE (name);
9140 int ref = (TREE_CODE (t) == REFERENCE_TYPE);
9141 const char *what = 0;
9143 if (ref)
9144 t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
9146 if (TREE_CODE (t) == VOID_TYPE)
9147 what = "void";
9148 else if (class_type)
9150 if (t == class_type)
9151 what = "the same type";
9152 /* Don't force t to be complete here. */
9153 else if (IS_AGGR_TYPE (t)
9154 && COMPLETE_TYPE_P (t)
9155 && DERIVED_FROM_P (t, class_type))
9156 what = "a base class";
9159 if (what)
9160 warning (0, "conversion to %s%s will never use a type "
9161 "conversion operator",
9162 ref ? "a reference to " : "", what);
9165 if (operator_code == COND_EXPR)
9167 /* 13.4.0.3 */
9168 error ("ISO C++ prohibits overloading operator ?:");
9170 else if (ellipsis_p)
9171 error ("%qD must not have variable number of arguments", decl);
9172 else if (ambi_op_p (operator_code))
9174 if (arity == 1)
9175 /* We pick the one-argument operator codes by default, so
9176 we don't have to change anything. */
9178 else if (arity == 2)
9180 /* If we thought this was a unary operator, we now know
9181 it to be a binary operator. */
9182 switch (operator_code)
9184 case INDIRECT_REF:
9185 operator_code = MULT_EXPR;
9186 break;
9188 case ADDR_EXPR:
9189 operator_code = BIT_AND_EXPR;
9190 break;
9192 case UNARY_PLUS_EXPR:
9193 operator_code = PLUS_EXPR;
9194 break;
9196 case NEGATE_EXPR:
9197 operator_code = MINUS_EXPR;
9198 break;
9200 case PREINCREMENT_EXPR:
9201 operator_code = POSTINCREMENT_EXPR;
9202 break;
9204 case PREDECREMENT_EXPR:
9205 operator_code = POSTDECREMENT_EXPR;
9206 break;
9208 default:
9209 gcc_unreachable ();
9212 SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
9214 if ((operator_code == POSTINCREMENT_EXPR
9215 || operator_code == POSTDECREMENT_EXPR)
9216 && ! processing_template_decl
9217 && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)), integer_type_node))
9219 if (methodp)
9220 error ("postfix %qD must take %<int%> as its argument",
9221 decl);
9222 else
9223 error
9224 ("postfix %qD must take %<int%> as its second argument",
9225 decl);
9228 else
9230 if (methodp)
9231 error ("%qD must take either zero or one argument", decl);
9232 else
9233 error ("%qD must take either one or two arguments", decl);
9236 /* More Effective C++ rule 6. */
9237 if (warn_ecpp
9238 && (operator_code == POSTINCREMENT_EXPR
9239 || operator_code == POSTDECREMENT_EXPR
9240 || operator_code == PREINCREMENT_EXPR
9241 || operator_code == PREDECREMENT_EXPR))
9243 tree arg = TREE_VALUE (argtypes);
9244 tree ret = TREE_TYPE (TREE_TYPE (decl));
9245 if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
9246 arg = TREE_TYPE (arg);
9247 arg = TYPE_MAIN_VARIANT (arg);
9248 if (operator_code == PREINCREMENT_EXPR
9249 || operator_code == PREDECREMENT_EXPR)
9251 if (TREE_CODE (ret) != REFERENCE_TYPE
9252 || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)),
9253 arg))
9254 warning (0, "prefix %qD should return %qT", decl,
9255 build_reference_type (arg));
9257 else
9259 if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
9260 warning (0, "postfix %qD should return %qT", decl, arg);
9264 else if (unary_op_p (operator_code))
9266 if (arity != 1)
9268 if (methodp)
9269 error ("%qD must take %<void%>", decl);
9270 else
9271 error ("%qD must take exactly one argument", decl);
9274 else /* if (binary_op_p (operator_code)) */
9276 if (arity != 2)
9278 if (methodp)
9279 error ("%qD must take exactly one argument", decl);
9280 else
9281 error ("%qD must take exactly two arguments", decl);
9284 /* More Effective C++ rule 7. */
9285 if (warn_ecpp
9286 && (operator_code == TRUTH_ANDIF_EXPR
9287 || operator_code == TRUTH_ORIF_EXPR
9288 || operator_code == COMPOUND_EXPR))
9289 warning (0, "user-defined %qD always evaluates both arguments",
9290 decl);
9293 /* Effective C++ rule 23. */
9294 if (warn_ecpp
9295 && arity == 2
9296 && !DECL_ASSIGNMENT_OPERATOR_P (decl)
9297 && (operator_code == PLUS_EXPR
9298 || operator_code == MINUS_EXPR
9299 || operator_code == TRUNC_DIV_EXPR
9300 || operator_code == MULT_EXPR
9301 || operator_code == TRUNC_MOD_EXPR)
9302 && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
9303 warning (0, "%qD should return by value", decl);
9305 /* [over.oper]/8 */
9306 for (; argtypes && argtypes != void_list_node;
9307 argtypes = TREE_CHAIN (argtypes))
9308 if (TREE_PURPOSE (argtypes))
9310 TREE_PURPOSE (argtypes) = NULL_TREE;
9311 if (operator_code == POSTINCREMENT_EXPR
9312 || operator_code == POSTDECREMENT_EXPR)
9314 if (pedantic)
9315 pedwarn ("%qD cannot have default arguments", decl);
9317 else
9318 error ("%qD cannot have default arguments", decl);
9325 /* Return a string giving the keyword associate with CODE. */
9327 static const char *
9328 tag_name (enum tag_types code)
9330 switch (code)
9332 case record_type:
9333 return "struct";
9334 case class_type:
9335 return "class";
9336 case union_type:
9337 return "union";
9338 case enum_type:
9339 return "enum";
9340 case typename_type:
9341 return "typename";
9342 default:
9343 gcc_unreachable ();
9347 /* Name lookup in an elaborated-type-specifier (after the keyword
9348 indicated by TAG_CODE) has found the TYPE_DECL DECL. If the
9349 elaborated-type-specifier is invalid, issue a diagnostic and return
9350 error_mark_node; otherwise, return the *_TYPE to which it referred.
9351 If ALLOW_TEMPLATE_P is true, TYPE may be a class template. */
9353 tree
9354 check_elaborated_type_specifier (enum tag_types tag_code,
9355 tree decl,
9356 bool allow_template_p)
9358 tree type;
9360 /* In the case of:
9362 struct S { struct S *p; };
9364 name lookup will find the TYPE_DECL for the implicit "S::S"
9365 typedef. Adjust for that here. */
9366 if (DECL_SELF_REFERENCE_P (decl))
9367 decl = TYPE_NAME (TREE_TYPE (decl));
9369 type = TREE_TYPE (decl);
9371 /* Check TEMPLATE_TYPE_PARM first because DECL_IMPLICIT_TYPEDEF_P
9372 is false for this case as well. */
9373 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
9375 error ("using template type parameter %qT after %qs",
9376 type, tag_name (tag_code));
9377 return error_mark_node;
9379 /* [dcl.type.elab]
9381 If the identifier resolves to a typedef-name or a template
9382 type-parameter, the elaborated-type-specifier is ill-formed.
9384 In other words, the only legitimate declaration to use in the
9385 elaborated type specifier is the implicit typedef created when
9386 the type is declared. */
9387 else if (!DECL_IMPLICIT_TYPEDEF_P (decl)
9388 && tag_code != typename_type)
9390 error ("using typedef-name %qD after %qs", decl, tag_name (tag_code));
9391 error ("%q+D has a previous declaration here", decl);
9392 return error_mark_node;
9394 else if (TREE_CODE (type) != RECORD_TYPE
9395 && TREE_CODE (type) != UNION_TYPE
9396 && tag_code != enum_type
9397 && tag_code != typename_type)
9399 error ("%qT referred to as %qs", type, tag_name (tag_code));
9400 error ("%q+T has a previous declaration here", type);
9401 return error_mark_node;
9403 else if (TREE_CODE (type) != ENUMERAL_TYPE
9404 && tag_code == enum_type)
9406 error ("%qT referred to as enum", type);
9407 error ("%q+T has a previous declaration here", type);
9408 return error_mark_node;
9410 else if (!allow_template_p
9411 && TREE_CODE (type) == RECORD_TYPE
9412 && CLASSTYPE_IS_TEMPLATE (type))
9414 /* If a class template appears as elaborated type specifier
9415 without a template header such as:
9417 template <class T> class C {};
9418 void f(class C); // No template header here
9420 then the required template argument is missing. */
9421 error ("template argument required for %<%s %T%>",
9422 tag_name (tag_code),
9423 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type)));
9424 return error_mark_node;
9427 return type;
9430 /* Lookup NAME in elaborate type specifier in scope according to
9431 SCOPE and issue diagnostics if necessary.
9432 Return *_TYPE node upon success, NULL_TREE when the NAME is not
9433 found, and ERROR_MARK_NODE for type error. */
9435 static tree
9436 lookup_and_check_tag (enum tag_types tag_code, tree name,
9437 tag_scope scope, bool template_header_p)
9439 tree t;
9440 tree decl;
9441 if (scope == ts_global)
9443 /* First try ordinary name lookup, ignoring hidden class name
9444 injected via friend declaration. */
9445 decl = lookup_name (name, 2);
9446 /* If that fails, the name will be placed in the smallest
9447 non-class, non-function-prototype scope according to 3.3.1/5.
9448 We may already have a hidden name declared as friend in this
9449 scope. So lookup again but not ignoring hidden names.
9450 If we find one, that name will be made visible rather than
9451 creating a new tag. */
9452 if (!decl)
9453 decl = lookup_type_scope (name, ts_within_enclosing_non_class);
9455 else
9456 decl = lookup_type_scope (name, scope);
9458 if (decl && DECL_CLASS_TEMPLATE_P (decl))
9459 decl = DECL_TEMPLATE_RESULT (decl);
9461 if (decl && TREE_CODE (decl) == TYPE_DECL)
9463 /* Look for invalid nested type:
9464 class C {
9465 class C {};
9466 }; */
9467 if (scope == ts_current && DECL_SELF_REFERENCE_P (decl))
9469 error ("%qD has the same name as the class in which it is "
9470 "declared",
9471 decl);
9472 return error_mark_node;
9475 /* Two cases we need to consider when deciding if a class
9476 template is allowed as an elaborated type specifier:
9477 1. It is a self reference to its own class.
9478 2. It comes with a template header.
9480 For example:
9482 template <class T> class C {
9483 class C *c1; // DECL_SELF_REFERENCE_P is true
9484 class D;
9486 template <class U> class C; // template_header_p is true
9487 template <class T> class C<T>::D {
9488 class C *c2; // DECL_SELF_REFERENCE_P is true
9489 }; */
9491 t = check_elaborated_type_specifier (tag_code,
9492 decl,
9493 template_header_p
9494 | DECL_SELF_REFERENCE_P (decl));
9495 return t;
9497 else
9498 return NULL_TREE;
9501 /* Get the struct, enum or union (TAG_CODE says which) with tag NAME.
9502 Define the tag as a forward-reference if it is not defined.
9504 If a declaration is given, process it here, and report an error if
9505 multiple declarations are not identical.
9507 SCOPE is TS_CURRENT when this is also a definition. Only look in
9508 the current frame for the name (since C++ allows new names in any
9509 scope.) It is TS_WITHIN_ENCLOSING_NON_CLASS if this is a friend
9510 declaration. Only look beginning from the current scope outward up
9511 till the nearest non-class scope. Otherwise it is TS_GLOBAL.
9513 TEMPLATE_HEADER_P is true when this declaration is preceded by
9514 a set of template parameters. */
9516 tree
9517 xref_tag (enum tag_types tag_code, tree name,
9518 tag_scope scope, bool template_header_p)
9520 enum tree_code code;
9521 tree t;
9522 tree context = NULL_TREE;
9524 timevar_push (TV_NAME_LOOKUP);
9526 gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
9528 switch (tag_code)
9530 case record_type:
9531 case class_type:
9532 code = RECORD_TYPE;
9533 break;
9534 case union_type:
9535 code = UNION_TYPE;
9536 break;
9537 case enum_type:
9538 code = ENUMERAL_TYPE;
9539 break;
9540 default:
9541 gcc_unreachable ();
9544 /* In case of anonymous name, xref_tag is only called to
9545 make type node and push name. Name lookup is not required. */
9546 if (ANON_AGGRNAME_P (name))
9547 t = NULL_TREE;
9548 else
9549 t = lookup_and_check_tag (tag_code, name,
9550 scope, template_header_p);
9552 if (t == error_mark_node)
9553 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
9555 if (scope != ts_current && t && current_class_type
9556 && template_class_depth (current_class_type)
9557 && template_header_p)
9559 /* Since SCOPE is not TS_CURRENT, we are not looking at a
9560 definition of this tag. Since, in addition, we are currently
9561 processing a (member) template declaration of a template
9562 class, we must be very careful; consider:
9564 template <class X>
9565 struct S1
9567 template <class U>
9568 struct S2
9569 { template <class V>
9570 friend struct S1; };
9572 Here, the S2::S1 declaration should not be confused with the
9573 outer declaration. In particular, the inner version should
9574 have a template parameter of level 2, not level 1. This
9575 would be particularly important if the member declaration
9576 were instead:
9578 template <class V = U> friend struct S1;
9580 say, when we should tsubst into `U' when instantiating
9581 S2. On the other hand, when presented with:
9583 template <class T>
9584 struct S1 {
9585 template <class U>
9586 struct S2 {};
9587 template <class U>
9588 friend struct S2;
9591 we must find the inner binding eventually. We
9592 accomplish this by making sure that the new type we
9593 create to represent this declaration has the right
9594 TYPE_CONTEXT. */
9595 context = TYPE_CONTEXT (t);
9596 t = NULL_TREE;
9599 if (! t)
9601 /* If no such tag is yet defined, create a forward-reference node
9602 and record it as the "definition".
9603 When a real declaration of this type is found,
9604 the forward-reference will be altered into a real type. */
9605 if (code == ENUMERAL_TYPE)
9607 error ("use of enum %q#D without previous declaration", name);
9608 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
9610 else
9612 t = make_aggr_type (code);
9613 TYPE_CONTEXT (t) = context;
9614 t = pushtag (name, t, scope);
9617 else
9619 if (template_header_p && IS_AGGR_TYPE (t))
9620 redeclare_class_template (t, current_template_parms);
9621 else if (!processing_template_decl
9622 && CLASS_TYPE_P (t)
9623 && CLASSTYPE_IS_TEMPLATE (t))
9625 error ("redeclaration of %qT as a non-template", t);
9626 error ("previous declaration %q+D", t);
9627 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
9630 /* Make injected friend class visible. */
9631 if (scope != ts_within_enclosing_non_class
9632 && hidden_name_p (TYPE_NAME (t)))
9634 DECL_ANTICIPATED (TYPE_NAME (t)) = 0;
9635 DECL_FRIEND_P (TYPE_NAME (t)) = 0;
9637 if (TYPE_TEMPLATE_INFO (t))
9639 DECL_ANTICIPATED (TYPE_TI_TEMPLATE (t)) = 0;
9640 DECL_FRIEND_P (TYPE_TI_TEMPLATE (t)) = 0;
9645 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
9648 tree
9649 xref_tag_from_type (tree old, tree id, tag_scope scope)
9651 enum tag_types tag_kind;
9653 if (TREE_CODE (old) == RECORD_TYPE)
9654 tag_kind = (CLASSTYPE_DECLARED_CLASS (old) ? class_type : record_type);
9655 else
9656 tag_kind = union_type;
9658 if (id == NULL_TREE)
9659 id = TYPE_IDENTIFIER (old);
9661 return xref_tag (tag_kind, id, scope, false);
9664 /* Create the binfo hierarchy for REF with (possibly NULL) base list
9665 BASE_LIST. For each element on BASE_LIST the TREE_PURPOSE is an
9666 access_* node, and the TREE_VALUE is the type of the base-class.
9667 Non-NULL TREE_TYPE indicates virtual inheritance. */
9669 void
9670 xref_basetypes (tree ref, tree base_list)
9672 tree *basep;
9673 tree binfo, base_binfo;
9674 unsigned max_vbases = 0; /* Maximum direct & indirect virtual bases. */
9675 unsigned max_bases = 0; /* Maximum direct bases. */
9676 int i;
9677 tree default_access;
9678 tree igo_prev; /* Track Inheritance Graph Order. */
9680 if (ref == error_mark_node)
9681 return;
9683 /* The base of a derived class is private by default, all others are
9684 public. */
9685 default_access = (TREE_CODE (ref) == RECORD_TYPE
9686 && CLASSTYPE_DECLARED_CLASS (ref)
9687 ? access_private_node : access_public_node);
9689 /* First, make sure that any templates in base-classes are
9690 instantiated. This ensures that if we call ourselves recursively
9691 we do not get confused about which classes are marked and which
9692 are not. */
9693 basep = &base_list;
9694 while (*basep)
9696 tree basetype = TREE_VALUE (*basep);
9698 if (!(processing_template_decl && uses_template_parms (basetype))
9699 && !complete_type_or_else (basetype, NULL))
9700 /* An incomplete type. Remove it from the list. */
9701 *basep = TREE_CHAIN (*basep);
9702 else
9704 max_bases++;
9705 if (TREE_TYPE (*basep))
9706 max_vbases++;
9707 if (CLASS_TYPE_P (basetype))
9708 max_vbases += VEC_length (tree, CLASSTYPE_VBASECLASSES (basetype));
9709 basep = &TREE_CHAIN (*basep);
9713 TYPE_MARKED_P (ref) = 1;
9715 /* The binfo slot should be empty, unless this is an (ill-formed)
9716 redefinition. */
9717 gcc_assert (!TYPE_BINFO (ref) || TYPE_SIZE (ref));
9718 gcc_assert (TYPE_MAIN_VARIANT (ref) == ref);
9720 binfo = make_tree_binfo (max_bases);
9722 TYPE_BINFO (ref) = binfo;
9723 BINFO_OFFSET (binfo) = size_zero_node;
9724 BINFO_TYPE (binfo) = ref;
9726 if (max_bases)
9728 BINFO_BASE_ACCESSES (binfo) = VEC_alloc (tree, gc, max_bases);
9729 /* An aggregate cannot have baseclasses. */
9730 CLASSTYPE_NON_AGGREGATE (ref) = 1;
9732 if (TREE_CODE (ref) == UNION_TYPE)
9733 error ("derived union %qT invalid", ref);
9736 if (max_bases > 1)
9738 if (TYPE_FOR_JAVA (ref))
9739 error ("Java class %qT cannot have multiple bases", ref);
9742 if (max_vbases)
9744 CLASSTYPE_VBASECLASSES (ref) = VEC_alloc (tree, gc, max_vbases);
9746 if (TYPE_FOR_JAVA (ref))
9747 error ("Java class %qT cannot have virtual bases", ref);
9750 for (igo_prev = binfo; base_list; base_list = TREE_CHAIN (base_list))
9752 tree access = TREE_PURPOSE (base_list);
9753 int via_virtual = TREE_TYPE (base_list) != NULL_TREE;
9754 tree basetype = TREE_VALUE (base_list);
9756 if (access == access_default_node)
9757 access = default_access;
9759 if (TREE_CODE (basetype) == TYPE_DECL)
9760 basetype = TREE_TYPE (basetype);
9761 if (TREE_CODE (basetype) != RECORD_TYPE
9762 && TREE_CODE (basetype) != TYPENAME_TYPE
9763 && TREE_CODE (basetype) != TEMPLATE_TYPE_PARM
9764 && TREE_CODE (basetype) != BOUND_TEMPLATE_TEMPLATE_PARM)
9766 error ("base type %qT fails to be a struct or class type",
9767 basetype);
9768 continue;
9771 if (TYPE_FOR_JAVA (basetype) && (current_lang_depth () == 0))
9772 TYPE_FOR_JAVA (ref) = 1;
9774 base_binfo = NULL_TREE;
9775 if (CLASS_TYPE_P (basetype) && !dependent_type_p (basetype))
9777 base_binfo = TYPE_BINFO (basetype);
9778 /* The original basetype could have been a typedef'd type. */
9779 basetype = BINFO_TYPE (base_binfo);
9781 /* Inherit flags from the base. */
9782 TYPE_HAS_NEW_OPERATOR (ref)
9783 |= TYPE_HAS_NEW_OPERATOR (basetype);
9784 TYPE_HAS_ARRAY_NEW_OPERATOR (ref)
9785 |= TYPE_HAS_ARRAY_NEW_OPERATOR (basetype);
9786 TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
9787 TYPE_HAS_CONVERSION (ref) |= TYPE_HAS_CONVERSION (basetype);
9788 CLASSTYPE_DIAMOND_SHAPED_P (ref)
9789 |= CLASSTYPE_DIAMOND_SHAPED_P (basetype);
9790 CLASSTYPE_REPEATED_BASE_P (ref)
9791 |= CLASSTYPE_REPEATED_BASE_P (basetype);
9794 /* We must do this test after we've seen through a typedef
9795 type. */
9796 if (TYPE_MARKED_P (basetype))
9798 if (basetype == ref)
9799 error ("recursive type %qT undefined", basetype);
9800 else
9801 error ("duplicate base type %qT invalid", basetype);
9802 continue;
9804 TYPE_MARKED_P (basetype) = 1;
9806 base_binfo = copy_binfo (base_binfo, basetype, ref,
9807 &igo_prev, via_virtual);
9808 if (!BINFO_INHERITANCE_CHAIN (base_binfo))
9809 BINFO_INHERITANCE_CHAIN (base_binfo) = binfo;
9811 BINFO_BASE_APPEND (binfo, base_binfo);
9812 BINFO_BASE_ACCESS_APPEND (binfo, access);
9815 if (VEC_space (tree, CLASSTYPE_VBASECLASSES (ref), 1))
9816 /* If we have space in the vbase vector, we must have shared at
9817 least one of them, and are therefore diamond shaped. */
9818 CLASSTYPE_DIAMOND_SHAPED_P (ref) = 1;
9820 /* Unmark all the types. */
9821 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
9822 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
9823 TYPE_MARKED_P (ref) = 0;
9825 /* Now see if we have a repeated base type. */
9826 if (!CLASSTYPE_REPEATED_BASE_P (ref))
9828 for (base_binfo = binfo; base_binfo;
9829 base_binfo = TREE_CHAIN (base_binfo))
9831 if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
9833 CLASSTYPE_REPEATED_BASE_P (ref) = 1;
9834 break;
9836 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 1;
9838 for (base_binfo = binfo; base_binfo;
9839 base_binfo = TREE_CHAIN (base_binfo))
9840 if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
9841 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
9842 else
9843 break;
9848 /* Begin compiling the definition of an enumeration type.
9849 NAME is its name.
9850 Returns the type object, as yet incomplete.
9851 Also records info about it so that build_enumerator
9852 may be used to declare the individual values as they are read. */
9854 tree
9855 start_enum (tree name)
9857 tree enumtype;
9859 gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
9861 /* If this is the real definition for a previous forward reference,
9862 fill in the contents in the same object that used to be the
9863 forward reference. */
9865 enumtype = lookup_and_check_tag (enum_type, name,
9866 /*tag_scope=*/ts_current,
9867 /*template_header_p=*/false);
9869 if (enumtype != NULL_TREE && TREE_CODE (enumtype) == ENUMERAL_TYPE)
9871 error ("multiple definition of %q#T", enumtype);
9872 error ("%Jprevious definition here", TYPE_MAIN_DECL (enumtype));
9873 /* Clear out TYPE_VALUES, and start again. */
9874 TYPE_VALUES (enumtype) = NULL_TREE;
9876 else
9878 /* In case of error, make a dummy enum to allow parsing to
9879 continue. */
9880 if (enumtype == error_mark_node)
9881 name = make_anon_name ();
9883 enumtype = make_node (ENUMERAL_TYPE);
9884 enumtype = pushtag (name, enumtype, /*tag_scope=*/ts_current);
9887 return enumtype;
9890 /* After processing and defining all the values of an enumeration type,
9891 install their decls in the enumeration type and finish it off.
9892 ENUMTYPE is the type object and VALUES a list of name-value pairs. */
9894 void
9895 finish_enum (tree enumtype)
9897 tree values;
9898 tree decl;
9899 tree value;
9900 tree minnode;
9901 tree maxnode;
9902 tree t;
9903 bool unsignedp;
9904 bool use_short_enum;
9905 int lowprec;
9906 int highprec;
9907 int precision;
9908 integer_type_kind itk;
9909 tree underlying_type = NULL_TREE;
9911 /* We built up the VALUES in reverse order. */
9912 TYPE_VALUES (enumtype) = nreverse (TYPE_VALUES (enumtype));
9914 /* For an enum defined in a template, just set the type of the values;
9915 all further processing is postponed until the template is
9916 instantiated. We need to set the type so that tsubst of a CONST_DECL
9917 works. */
9918 if (processing_template_decl)
9920 for (values = TYPE_VALUES (enumtype);
9921 values;
9922 values = TREE_CHAIN (values))
9923 TREE_TYPE (TREE_VALUE (values)) = enumtype;
9924 if (at_function_scope_p ())
9925 add_stmt (build_min (TAG_DEFN, enumtype));
9926 return;
9929 /* Determine the minimum and maximum values of the enumerators. */
9930 if (TYPE_VALUES (enumtype))
9932 minnode = maxnode = NULL_TREE;
9934 for (values = TYPE_VALUES (enumtype);
9935 values;
9936 values = TREE_CHAIN (values))
9938 decl = TREE_VALUE (values);
9940 /* [dcl.enum]: Following the closing brace of an enum-specifier,
9941 each enumerator has the type of its enumeration. Prior to the
9942 closing brace, the type of each enumerator is the type of its
9943 initializing value. */
9944 TREE_TYPE (decl) = enumtype;
9946 /* Update the minimum and maximum values, if appropriate. */
9947 value = DECL_INITIAL (decl);
9948 if (value == error_mark_node)
9949 value = integer_zero_node;
9950 /* Figure out what the minimum and maximum values of the
9951 enumerators are. */
9952 if (!minnode)
9953 minnode = maxnode = value;
9954 else if (tree_int_cst_lt (maxnode, value))
9955 maxnode = value;
9956 else if (tree_int_cst_lt (value, minnode))
9957 minnode = value;
9960 else
9961 /* [dcl.enum]
9963 If the enumerator-list is empty, the underlying type is as if
9964 the enumeration had a single enumerator with value 0. */
9965 minnode = maxnode = integer_zero_node;
9967 /* Compute the number of bits require to represent all values of the
9968 enumeration. We must do this before the type of MINNODE and
9969 MAXNODE are transformed, since min_precision relies on the
9970 TREE_TYPE of the value it is passed. */
9971 unsignedp = tree_int_cst_sgn (minnode) >= 0;
9972 lowprec = min_precision (minnode, unsignedp);
9973 highprec = min_precision (maxnode, unsignedp);
9974 precision = MAX (lowprec, highprec);
9976 /* Determine the underlying type of the enumeration.
9978 [dcl.enum]
9980 The underlying type of an enumeration is an integral type that
9981 can represent all the enumerator values defined in the
9982 enumeration. It is implementation-defined which integral type is
9983 used as the underlying type for an enumeration except that the
9984 underlying type shall not be larger than int unless the value of
9985 an enumerator cannot fit in an int or unsigned int.
9987 We use "int" or an "unsigned int" as the underlying type, even if
9988 a smaller integral type would work, unless the user has
9989 explicitly requested that we use the smallest possible type. The
9990 user can request that for all enumerations with a command line
9991 flag, or for just one enumeration with an attribute. */
9993 use_short_enum = flag_short_enums
9994 || lookup_attribute ("packed", TYPE_ATTRIBUTES (enumtype));
9996 for (itk = (use_short_enum ? itk_char : itk_int);
9997 itk != itk_none;
9998 itk++)
10000 underlying_type = integer_types[itk];
10001 if (TYPE_PRECISION (underlying_type) >= precision
10002 && TYPE_UNSIGNED (underlying_type) == unsignedp)
10003 break;
10005 if (itk == itk_none)
10007 /* DR 377
10009 IF no integral type can represent all the enumerator values, the
10010 enumeration is ill-formed. */
10011 error ("no integral type can represent all of the enumerator values "
10012 "for %qT", enumtype);
10013 precision = TYPE_PRECISION (long_long_integer_type_node);
10014 underlying_type = integer_types[itk_unsigned_long_long];
10017 /* Compute the minium and maximum values for the type.
10019 [dcl.enum]
10021 For an enumeration where emin is the smallest enumerator and emax
10022 is the largest, the values of the enumeration are the values of the
10023 underlying type in the range bmin to bmax, where bmin and bmax are,
10024 respectively, the smallest and largest values of the smallest bit-
10025 field that can store emin and emax. */
10027 /* The middle-end currently assumes that types with TYPE_PRECISION
10028 narrower than their underlying type are suitably zero or sign
10029 extended to fill their mode. g++ doesn't make these guarantees.
10030 Until the middle-end can represent such paradoxical types, we
10031 set the TYPE_PRECISION to the width of the underlying type. */
10032 TYPE_PRECISION (enumtype) = TYPE_PRECISION (underlying_type);
10034 set_min_and_max_values_for_integral_type (enumtype, precision, unsignedp);
10036 /* [dcl.enum]
10038 The value of sizeof() applied to an enumeration type, an object
10039 of an enumeration type, or an enumerator, is the value of sizeof()
10040 applied to the underlying type. */
10041 TYPE_SIZE (enumtype) = TYPE_SIZE (underlying_type);
10042 TYPE_SIZE_UNIT (enumtype) = TYPE_SIZE_UNIT (underlying_type);
10043 TYPE_MODE (enumtype) = TYPE_MODE (underlying_type);
10044 TYPE_ALIGN (enumtype) = TYPE_ALIGN (underlying_type);
10045 TYPE_USER_ALIGN (enumtype) = TYPE_USER_ALIGN (underlying_type);
10046 TYPE_UNSIGNED (enumtype) = TYPE_UNSIGNED (underlying_type);
10048 /* Convert each of the enumerators to the type of the underlying
10049 type of the enumeration. */
10050 for (values = TYPE_VALUES (enumtype); values; values = TREE_CHAIN (values))
10052 location_t saved_location;
10054 decl = TREE_VALUE (values);
10055 saved_location = input_location;
10056 input_location = DECL_SOURCE_LOCATION (decl);
10057 value = perform_implicit_conversion (underlying_type,
10058 DECL_INITIAL (decl));
10059 input_location = saved_location;
10061 /* Do not clobber shared ints. */
10062 value = copy_node (value);
10064 TREE_TYPE (value) = enumtype;
10065 DECL_INITIAL (decl) = value;
10066 TREE_VALUE (values) = value;
10069 /* Fix up all variant types of this enum type. */
10070 for (t = TYPE_MAIN_VARIANT (enumtype); t; t = TYPE_NEXT_VARIANT (t))
10072 TYPE_VALUES (t) = TYPE_VALUES (enumtype);
10073 TYPE_MIN_VALUE (t) = TYPE_MIN_VALUE (enumtype);
10074 TYPE_MAX_VALUE (t) = TYPE_MAX_VALUE (enumtype);
10075 TYPE_SIZE (t) = TYPE_SIZE (enumtype);
10076 TYPE_SIZE_UNIT (t) = TYPE_SIZE_UNIT (enumtype);
10077 TYPE_MODE (t) = TYPE_MODE (enumtype);
10078 TYPE_PRECISION (t) = TYPE_PRECISION (enumtype);
10079 TYPE_ALIGN (t) = TYPE_ALIGN (enumtype);
10080 TYPE_USER_ALIGN (t) = TYPE_USER_ALIGN (enumtype);
10081 TYPE_UNSIGNED (t) = TYPE_UNSIGNED (enumtype);
10084 /* Finish debugging output for this type. */
10085 rest_of_type_compilation (enumtype, namespace_bindings_p ());
10088 /* Build and install a CONST_DECL for an enumeration constant of the
10089 enumeration type ENUMTYPE whose NAME and VALUE (if any) are provided.
10090 Assignment of sequential values by default is handled here. */
10092 void
10093 build_enumerator (tree name, tree value, tree enumtype)
10095 tree decl;
10096 tree context;
10097 tree type;
10099 /* If the VALUE was erroneous, pretend it wasn't there; that will
10100 result in the enum being assigned the next value in sequence. */
10101 if (value == error_mark_node)
10102 value = NULL_TREE;
10104 /* Remove no-op casts from the value. */
10105 if (value)
10106 STRIP_TYPE_NOPS (value);
10108 if (! processing_template_decl)
10110 /* Validate and default VALUE. */
10111 if (value != NULL_TREE)
10113 value = integral_constant_value (value);
10115 if (TREE_CODE (value) == INTEGER_CST)
10117 value = perform_integral_promotions (value);
10118 constant_expression_warning (value);
10120 else
10122 error ("enumerator value for %qD not integer constant", name);
10123 value = NULL_TREE;
10127 /* Default based on previous value. */
10128 if (value == NULL_TREE)
10130 if (TYPE_VALUES (enumtype))
10132 HOST_WIDE_INT hi;
10133 unsigned HOST_WIDE_INT lo;
10134 tree prev_value;
10135 bool overflowed;
10137 /* The next value is the previous value plus one. We can
10138 safely assume that the previous value is an INTEGER_CST.
10139 add_double doesn't know the type of the target expression,
10140 so we must check with int_fits_type_p as well. */
10141 prev_value = DECL_INITIAL (TREE_VALUE (TYPE_VALUES (enumtype)));
10142 overflowed = add_double (TREE_INT_CST_LOW (prev_value),
10143 TREE_INT_CST_HIGH (prev_value),
10144 1, 0, &lo, &hi);
10145 value = build_int_cst_wide (TREE_TYPE (prev_value), lo, hi);
10146 overflowed |= !int_fits_type_p (value, TREE_TYPE (prev_value));
10148 if (overflowed)
10150 error ("overflow in enumeration values at %qD", name);
10151 value = error_mark_node;
10154 else
10155 value = integer_zero_node;
10158 /* Remove no-op casts from the value. */
10159 STRIP_TYPE_NOPS (value);
10162 /* C++ associates enums with global, function, or class declarations. */
10163 context = current_scope ();
10165 /* Build the actual enumeration constant. Note that the enumeration
10166 constants have the type of their initializers until the
10167 enumeration is complete:
10169 [ dcl.enum ]
10171 Following the closing brace of an enum-specifier, each enumer-
10172 ator has the type of its enumeration. Prior to the closing
10173 brace, the type of each enumerator is the type of its
10174 initializing value.
10176 In finish_enum we will reset the type. Of course, if we're
10177 processing a template, there may be no value. */
10178 type = value ? TREE_TYPE (value) : NULL_TREE;
10180 if (context && context == current_class_type)
10181 /* This enum declaration is local to the class. We need the full
10182 lang_decl so that we can record DECL_CLASS_CONTEXT, for example. */
10183 decl = build_lang_decl (CONST_DECL, name, type);
10184 else
10185 /* It's a global enum, or it's local to a function. (Note local to
10186 a function could mean local to a class method. */
10187 decl = build_decl (CONST_DECL, name, type);
10189 DECL_CONTEXT (decl) = FROB_CONTEXT (context);
10190 TREE_CONSTANT (decl) = 1;
10191 TREE_INVARIANT (decl) = 1;
10192 TREE_READONLY (decl) = 1;
10193 DECL_INITIAL (decl) = value;
10195 if (context && context == current_class_type)
10196 /* In something like `struct S { enum E { i = 7 }; };' we put `i'
10197 on the TYPE_FIELDS list for `S'. (That's so that you can say
10198 things like `S::i' later.) */
10199 finish_member_declaration (decl);
10200 else
10201 pushdecl (decl);
10203 /* Add this enumeration constant to the list for this type. */
10204 TYPE_VALUES (enumtype) = tree_cons (name, decl, TYPE_VALUES (enumtype));
10208 /* We're defining DECL. Make sure that it's type is OK. */
10210 static void
10211 check_function_type (tree decl, tree current_function_parms)
10213 tree fntype = TREE_TYPE (decl);
10214 tree return_type = complete_type (TREE_TYPE (fntype));
10216 /* In a function definition, arg types must be complete. */
10217 require_complete_types_for_parms (current_function_parms);
10219 if (dependent_type_p (return_type))
10220 return;
10221 if (!COMPLETE_OR_VOID_TYPE_P (return_type))
10223 tree args = TYPE_ARG_TYPES (fntype);
10225 error ("return type %q#T is incomplete", return_type);
10227 /* Make it return void instead. */
10228 if (TREE_CODE (fntype) == METHOD_TYPE)
10229 fntype = build_method_type_directly (TREE_TYPE (TREE_VALUE (args)),
10230 void_type_node,
10231 TREE_CHAIN (args));
10232 else
10233 fntype = build_function_type (void_type_node, args);
10234 TREE_TYPE (decl)
10235 = build_exception_variant (fntype,
10236 TYPE_RAISES_EXCEPTIONS (TREE_TYPE (decl)));
10238 else
10239 abstract_virtuals_error (decl, TREE_TYPE (fntype));
10242 /* Create the FUNCTION_DECL for a function definition.
10243 DECLSPECS and DECLARATOR are the parts of the declaration;
10244 they describe the function's name and the type it returns,
10245 but twisted together in a fashion that parallels the syntax of C.
10247 FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
10248 DECLARATOR is really the DECL for the function we are about to
10249 process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
10250 indicating that the function is an inline defined in-class.
10252 This function creates a binding context for the function body
10253 as well as setting up the FUNCTION_DECL in current_function_decl.
10255 For C++, we must first check whether that datum makes any sense.
10256 For example, "class A local_a(1,2);" means that variable local_a
10257 is an aggregate of type A, which should have a constructor
10258 applied to it with the argument list [1, 2]. */
10260 void
10261 start_preparsed_function (tree decl1, tree attrs, int flags)
10263 tree ctype = NULL_TREE;
10264 tree fntype;
10265 tree restype;
10266 int doing_friend = 0;
10267 struct cp_binding_level *bl;
10268 tree current_function_parms;
10269 struct c_fileinfo *finfo
10270 = get_fileinfo (LOCATION_FILE (DECL_SOURCE_LOCATION (decl1)));
10271 bool honor_interface;
10273 /* Sanity check. */
10274 gcc_assert (TREE_CODE (TREE_VALUE (void_list_node)) == VOID_TYPE);
10275 gcc_assert (TREE_CHAIN (void_list_node) == NULL_TREE);
10277 fntype = TREE_TYPE (decl1);
10278 if (TREE_CODE (fntype) == METHOD_TYPE)
10279 ctype = TYPE_METHOD_BASETYPE (fntype);
10281 /* ISO C++ 11.4/5. A friend function defined in a class is in
10282 the (lexical) scope of the class in which it is defined. */
10283 if (!ctype && DECL_FRIEND_P (decl1))
10285 ctype = DECL_FRIEND_CONTEXT (decl1);
10287 /* CTYPE could be null here if we're dealing with a template;
10288 for example, `inline friend float foo()' inside a template
10289 will have no CTYPE set. */
10290 if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
10291 ctype = NULL_TREE;
10292 else
10293 doing_friend = 1;
10296 if (DECL_DECLARED_INLINE_P (decl1)
10297 && lookup_attribute ("noinline", attrs))
10298 warning (0, "inline function %q+D given attribute noinline", decl1);
10300 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl1))
10301 /* This is a constructor, we must ensure that any default args
10302 introduced by this definition are propagated to the clones
10303 now. The clones are used directly in overload resolution. */
10304 adjust_clone_args (decl1);
10306 /* Sometimes we don't notice that a function is a static member, and
10307 build a METHOD_TYPE for it. Fix that up now. */
10308 if (ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1)
10309 && TREE_CODE (TREE_TYPE (decl1)) == METHOD_TYPE)
10311 revert_static_member_fn (decl1);
10312 ctype = NULL_TREE;
10315 /* Set up current_class_type, and enter the scope of the class, if
10316 appropriate. */
10317 if (ctype)
10318 push_nested_class (ctype);
10319 else if (DECL_STATIC_FUNCTION_P (decl1))
10320 push_nested_class (DECL_CONTEXT (decl1));
10322 /* Now that we have entered the scope of the class, we must restore
10323 the bindings for any template parameters surrounding DECL1, if it
10324 is an inline member template. (Order is important; consider the
10325 case where a template parameter has the same name as a field of
10326 the class.) It is not until after this point that
10327 PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly. */
10328 if (flags & SF_INCLASS_INLINE)
10329 maybe_begin_member_template_processing (decl1);
10331 /* Effective C++ rule 15. */
10332 if (warn_ecpp
10333 && DECL_OVERLOADED_OPERATOR_P (decl1) == NOP_EXPR
10334 && TREE_CODE (TREE_TYPE (fntype)) == VOID_TYPE)
10335 warning (0, "%<operator=%> should return a reference to %<*this%>");
10337 /* Make the init_value nonzero so pushdecl knows this is not tentative.
10338 error_mark_node is replaced below (in poplevel) with the BLOCK. */
10339 if (!DECL_INITIAL (decl1))
10340 DECL_INITIAL (decl1) = error_mark_node;
10342 /* This function exists in static storage.
10343 (This does not mean `static' in the C sense!) */
10344 TREE_STATIC (decl1) = 1;
10346 /* We must call push_template_decl after current_class_type is set
10347 up. (If we are processing inline definitions after exiting a
10348 class scope, current_class_type will be NULL_TREE until set above
10349 by push_nested_class.) */
10350 if (processing_template_decl)
10352 /* FIXME: Handle error_mark_node more gracefully. */
10353 tree newdecl1 = push_template_decl (decl1);
10354 if (newdecl1 != error_mark_node)
10355 decl1 = newdecl1;
10358 /* We are now in the scope of the function being defined. */
10359 current_function_decl = decl1;
10361 /* Save the parm names or decls from this function's declarator
10362 where store_parm_decls will find them. */
10363 current_function_parms = DECL_ARGUMENTS (decl1);
10365 /* Make sure the parameter and return types are reasonable. When
10366 you declare a function, these types can be incomplete, but they
10367 must be complete when you define the function. */
10368 check_function_type (decl1, current_function_parms);
10370 /* Build the return declaration for the function. */
10371 restype = TREE_TYPE (fntype);
10372 /* Promote the value to int before returning it. */
10373 if (c_promoting_integer_type_p (restype))
10374 restype = type_promotes_to (restype);
10375 if (DECL_RESULT (decl1) == NULL_TREE)
10377 tree resdecl;
10379 resdecl = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (restype));
10380 DECL_ARTIFICIAL (resdecl) = 1;
10381 DECL_IGNORED_P (resdecl) = 1;
10382 DECL_RESULT (decl1) = resdecl;
10384 cp_apply_type_quals_to_decl (cp_type_quals (restype), resdecl);
10387 /* Initialize RTL machinery. We cannot do this until
10388 CURRENT_FUNCTION_DECL and DECL_RESULT are set up. We do this
10389 even when processing a template; this is how we get
10390 CFUN set up, and our per-function variables initialized.
10391 FIXME factor out the non-RTL stuff. */
10392 bl = current_binding_level;
10393 allocate_struct_function (decl1);
10394 current_binding_level = bl;
10396 /* Even though we're inside a function body, we still don't want to
10397 call expand_expr to calculate the size of a variable-sized array.
10398 We haven't necessarily assigned RTL to all variables yet, so it's
10399 not safe to try to expand expressions involving them. */
10400 cfun->x_dont_save_pending_sizes_p = 1;
10402 /* Start the statement-tree, start the tree now. */
10403 DECL_SAVED_TREE (decl1) = push_stmt_list ();
10405 /* Let the user know we're compiling this function. */
10406 announce_function (decl1);
10408 /* Record the decl so that the function name is defined.
10409 If we already have a decl for this name, and it is a FUNCTION_DECL,
10410 use the old decl. */
10411 if (!processing_template_decl && !(flags & SF_PRE_PARSED))
10413 /* A specialization is not used to guide overload resolution. */
10414 if (!DECL_FUNCTION_MEMBER_P (decl1)
10415 && !(DECL_USE_TEMPLATE (decl1) &&
10416 PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl1))))
10418 tree olddecl = pushdecl (decl1);
10420 if (olddecl == error_mark_node)
10421 /* If something went wrong when registering the declaration,
10422 use DECL1; we have to have a FUNCTION_DECL to use when
10423 parsing the body of the function. */
10425 else
10426 /* Otherwise, OLDDECL is either a previous declaration of
10427 the same function or DECL1 itself. */
10428 decl1 = olddecl;
10430 else
10432 /* We need to set the DECL_CONTEXT. */
10433 if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
10434 DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
10436 fntype = TREE_TYPE (decl1);
10438 /* If #pragma weak applies, mark the decl appropriately now.
10439 The pragma only applies to global functions. Because
10440 determining whether or not the #pragma applies involves
10441 computing the mangled name for the declaration, we cannot
10442 apply the pragma until after we have merged this declaration
10443 with any previous declarations; if the original declaration
10444 has a linkage specification, that specification applies to
10445 the definition as well, and may affect the mangled name. */
10446 if (!DECL_CONTEXT (decl1))
10447 maybe_apply_pragma_weak (decl1);
10450 /* Determine the ELF visibility attribute for the function. We must
10451 not do this before calling "pushdecl", as we must allow
10452 "duplicate_decls" to merge any attributes appropriately. */
10453 if (!DECL_CLONED_FUNCTION_P (decl1))
10454 determine_visibility (decl1);
10456 /* Reset these in case the call to pushdecl changed them. */
10457 current_function_decl = decl1;
10458 cfun->decl = decl1;
10460 /* If we are (erroneously) defining a function that we have already
10461 defined before, wipe out what we knew before. */
10462 if (!DECL_PENDING_INLINE_P (decl1))
10463 DECL_SAVED_FUNCTION_DATA (decl1) = NULL;
10465 if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1))
10467 /* We know that this was set up by `grokclassfn'. We do not
10468 wait until `store_parm_decls', since evil parse errors may
10469 never get us to that point. Here we keep the consistency
10470 between `current_class_type' and `current_class_ptr'. */
10471 tree t = DECL_ARGUMENTS (decl1);
10473 gcc_assert (t != NULL_TREE && TREE_CODE (t) == PARM_DECL);
10474 gcc_assert (TREE_CODE (TREE_TYPE (t)) == POINTER_TYPE);
10476 cp_function_chain->x_current_class_ref
10477 = build_indirect_ref (t, NULL);
10478 cp_function_chain->x_current_class_ptr = t;
10480 /* Constructors and destructors need to know whether they're "in
10481 charge" of initializing virtual base classes. */
10482 t = TREE_CHAIN (t);
10483 if (DECL_HAS_IN_CHARGE_PARM_P (decl1))
10485 current_in_charge_parm = t;
10486 t = TREE_CHAIN (t);
10488 if (DECL_HAS_VTT_PARM_P (decl1))
10490 gcc_assert (DECL_NAME (t) == vtt_parm_identifier);
10491 current_vtt_parm = t;
10495 honor_interface = (!DECL_TEMPLATE_INSTANTIATION (decl1)
10496 /* Implicitly-defined methods (like the
10497 destructor for a class in which no destructor
10498 is explicitly declared) must not be defined
10499 until their definition is needed. So, we
10500 ignore interface specifications for
10501 compiler-generated functions. */
10502 && !DECL_ARTIFICIAL (decl1));
10504 if (DECL_INTERFACE_KNOWN (decl1))
10506 tree ctx = decl_function_context (decl1);
10508 if (DECL_NOT_REALLY_EXTERN (decl1))
10509 DECL_EXTERNAL (decl1) = 0;
10511 if (ctx != NULL_TREE && DECL_DECLARED_INLINE_P (ctx)
10512 && TREE_PUBLIC (ctx))
10513 /* This is a function in a local class in an extern inline
10514 function. */
10515 comdat_linkage (decl1);
10517 /* If this function belongs to an interface, it is public.
10518 If it belongs to someone else's interface, it is also external.
10519 This only affects inlines and template instantiations. */
10520 else if (!finfo->interface_unknown && honor_interface)
10522 if (DECL_DECLARED_INLINE_P (decl1)
10523 || DECL_TEMPLATE_INSTANTIATION (decl1)
10524 || processing_template_decl)
10526 DECL_EXTERNAL (decl1)
10527 = (finfo->interface_only
10528 || (DECL_DECLARED_INLINE_P (decl1)
10529 && ! flag_implement_inlines
10530 && !DECL_VINDEX (decl1)));
10532 /* For WIN32 we also want to put these in linkonce sections. */
10533 maybe_make_one_only (decl1);
10535 else
10536 DECL_EXTERNAL (decl1) = 0;
10537 DECL_INTERFACE_KNOWN (decl1) = 1;
10538 /* If this function is in an interface implemented in this file,
10539 make sure that the backend knows to emit this function
10540 here. */
10541 if (!DECL_EXTERNAL (decl1))
10542 mark_needed (decl1);
10544 else if (finfo->interface_unknown && finfo->interface_only
10545 && honor_interface)
10547 /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
10548 interface, we will have both finfo->interface_unknown and
10549 finfo->interface_only set. In that case, we don't want to
10550 use the normal heuristics because someone will supply a
10551 #pragma implementation elsewhere, and deducing it here would
10552 produce a conflict. */
10553 comdat_linkage (decl1);
10554 DECL_EXTERNAL (decl1) = 0;
10555 DECL_INTERFACE_KNOWN (decl1) = 1;
10556 DECL_DEFER_OUTPUT (decl1) = 1;
10558 else
10560 /* This is a definition, not a reference.
10561 So clear DECL_EXTERNAL. */
10562 DECL_EXTERNAL (decl1) = 0;
10564 if ((DECL_DECLARED_INLINE_P (decl1)
10565 || DECL_TEMPLATE_INSTANTIATION (decl1))
10566 && ! DECL_INTERFACE_KNOWN (decl1)
10567 /* Don't try to defer nested functions for now. */
10568 && ! decl_function_context (decl1))
10569 DECL_DEFER_OUTPUT (decl1) = 1;
10570 else
10571 DECL_INTERFACE_KNOWN (decl1) = 1;
10574 begin_scope (sk_function_parms, decl1);
10576 ++function_depth;
10578 if (DECL_DESTRUCTOR_P (decl1)
10579 || (DECL_CONSTRUCTOR_P (decl1)
10580 && targetm.cxx.cdtor_returns_this ()))
10582 cdtor_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
10583 DECL_CONTEXT (cdtor_label) = current_function_decl;
10586 start_fname_decls ();
10588 store_parm_decls (current_function_parms);
10592 /* Like start_preparsed_function, except that instead of a
10593 FUNCTION_DECL, this function takes DECLSPECS and DECLARATOR.
10595 Returns 1 on success. If the DECLARATOR is not suitable for a function
10596 (it defines a datum instead), we return 0, which tells
10597 yyparse to report a parse error. */
10600 start_function (cp_decl_specifier_seq *declspecs,
10601 const cp_declarator *declarator,
10602 tree attrs)
10604 tree decl1;
10606 decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, &attrs);
10607 /* If the declarator is not suitable for a function definition,
10608 cause a syntax error. */
10609 if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL)
10610 return 0;
10612 if (DECL_MAIN_P (decl1))
10613 /* main must return int. grokfndecl should have corrected it
10614 (and issued a diagnostic) if the user got it wrong. */
10615 gcc_assert (same_type_p (TREE_TYPE (TREE_TYPE (decl1)),
10616 integer_type_node));
10618 start_preparsed_function (decl1, attrs, /*flags=*/SF_DEFAULT);
10620 return 1;
10623 /* Returns true iff an EH_SPEC_BLOCK should be created in the body of
10624 FN. */
10626 static bool
10627 use_eh_spec_block (tree fn)
10629 return (flag_exceptions && flag_enforce_eh_specs
10630 && !processing_template_decl
10631 && TYPE_RAISES_EXCEPTIONS (TREE_TYPE (fn))
10632 /* We insert the EH_SPEC_BLOCK only in the original
10633 function; then, it is copied automatically to the
10634 clones. */
10635 && !DECL_CLONED_FUNCTION_P (fn)
10636 /* Implicitly-generated constructors and destructors have
10637 exception specifications. However, those specifications
10638 are the union of the possible exceptions specified by the
10639 constructors/destructors for bases and members, so no
10640 unallowed exception will ever reach this function. By
10641 not creating the EH_SPEC_BLOCK we save a little memory,
10642 and we avoid spurious warnings about unreachable
10643 code. */
10644 && !DECL_ARTIFICIAL (fn));
10647 /* Store the parameter declarations into the current function declaration.
10648 This is called after parsing the parameter declarations, before
10649 digesting the body of the function.
10651 Also install to binding contour return value identifier, if any. */
10653 static void
10654 store_parm_decls (tree current_function_parms)
10656 tree fndecl = current_function_decl;
10657 tree parm;
10659 /* This is a chain of any other decls that came in among the parm
10660 declarations. If a parm is declared with enum {foo, bar} x;
10661 then CONST_DECLs for foo and bar are put here. */
10662 tree nonparms = NULL_TREE;
10664 if (current_function_parms)
10666 /* This case is when the function was defined with an ANSI prototype.
10667 The parms already have decls, so we need not do anything here
10668 except record them as in effect
10669 and complain if any redundant old-style parm decls were written. */
10671 tree specparms = current_function_parms;
10672 tree next;
10674 /* Must clear this because it might contain TYPE_DECLs declared
10675 at class level. */
10676 current_binding_level->names = NULL;
10678 /* If we're doing semantic analysis, then we'll call pushdecl
10679 for each of these. We must do them in reverse order so that
10680 they end in the correct forward order. */
10681 specparms = nreverse (specparms);
10683 for (parm = specparms; parm; parm = next)
10685 next = TREE_CHAIN (parm);
10686 if (TREE_CODE (parm) == PARM_DECL)
10688 if (DECL_NAME (parm) == NULL_TREE
10689 || TREE_CODE (parm) != VOID_TYPE)
10690 pushdecl (parm);
10691 else
10692 error ("parameter %qD declared void", parm);
10694 else
10696 /* If we find an enum constant or a type tag,
10697 put it aside for the moment. */
10698 TREE_CHAIN (parm) = NULL_TREE;
10699 nonparms = chainon (nonparms, parm);
10703 /* Get the decls in their original chain order and record in the
10704 function. This is all and only the PARM_DECLs that were
10705 pushed into scope by the loop above. */
10706 DECL_ARGUMENTS (fndecl) = getdecls ();
10708 else
10709 DECL_ARGUMENTS (fndecl) = NULL_TREE;
10711 /* Now store the final chain of decls for the arguments
10712 as the decl-chain of the current lexical scope.
10713 Put the enumerators in as well, at the front so that
10714 DECL_ARGUMENTS is not modified. */
10715 current_binding_level->names = chainon (nonparms, DECL_ARGUMENTS (fndecl));
10717 if (use_eh_spec_block (current_function_decl))
10718 current_eh_spec_block = begin_eh_spec_block ();
10722 /* We have finished doing semantic analysis on DECL, but have not yet
10723 generated RTL for its body. Save away our current state, so that
10724 when we want to generate RTL later we know what to do. */
10726 static void
10727 save_function_data (tree decl)
10729 struct language_function *f;
10731 /* Save the language-specific per-function data so that we can
10732 get it back when we really expand this function. */
10733 gcc_assert (!DECL_PENDING_INLINE_P (decl));
10735 /* Make a copy. */
10736 f = GGC_NEW (struct language_function);
10737 memcpy (f, cp_function_chain, sizeof (struct language_function));
10738 DECL_SAVED_FUNCTION_DATA (decl) = f;
10740 /* Clear out the bits we don't need. */
10741 f->base.x_stmt_tree.x_cur_stmt_list = NULL_TREE;
10742 f->x_named_label_uses = NULL;
10743 f->bindings = NULL;
10744 f->x_local_names = NULL;
10748 /* Set the return value of the constructor (if present). */
10750 static void
10751 finish_constructor_body (void)
10753 tree val;
10754 tree exprstmt;
10756 if (targetm.cxx.cdtor_returns_this ())
10758 /* Any return from a constructor will end up here. */
10759 add_stmt (build_stmt (LABEL_EXPR, cdtor_label));
10761 val = DECL_ARGUMENTS (current_function_decl);
10762 val = build2 (MODIFY_EXPR, TREE_TYPE (val),
10763 DECL_RESULT (current_function_decl), val);
10764 /* Return the address of the object. */
10765 exprstmt = build_stmt (RETURN_EXPR, val);
10766 add_stmt (exprstmt);
10770 /* Do all the processing for the beginning of a destructor; set up the
10771 vtable pointers and cleanups for bases and members. */
10773 static void
10774 begin_destructor_body (void)
10776 tree if_stmt;
10777 tree compound_stmt;
10779 /* If the CURRENT_CLASS_TYPE is incomplete, we will have already
10780 issued an error message. We still want to try to process the
10781 body of the function, but initialize_vtbl_ptrs will crash if
10782 TYPE_BINFO is NULL. */
10783 if (!COMPLETE_TYPE_P (current_class_type))
10784 return;
10786 /* If the dtor is empty, and we know there is not any possible
10787 way we could use any vtable entries, before they are possibly
10788 set by a base class dtor, we don't have to setup the vtables,
10789 as we know that any base class dtor will set up any vtables
10790 it needs. We avoid MI, because one base class dtor can do a
10791 virtual dispatch to an overridden function that would need to
10792 have a non-related vtable set up, we cannot avoid setting up
10793 vtables in that case. We could change this to see if there
10794 is just one vtable.
10796 ??? In the destructor for a class, the vtables are set
10797 appropriately for that class. There will be no non-related
10798 vtables. jason 2001-12-11. */
10799 if_stmt = begin_if_stmt ();
10801 /* If it is not safe to avoid setting up the vtables, then
10802 someone will change the condition to be boolean_true_node.
10803 (Actually, for now, we do not have code to set the condition
10804 appropriately, so we just assume that we always need to
10805 initialize the vtables.) */
10806 finish_if_stmt_cond (boolean_true_node, if_stmt);
10808 compound_stmt = begin_compound_stmt (0);
10810 /* Make all virtual function table pointers in non-virtual base
10811 classes point to CURRENT_CLASS_TYPE's virtual function
10812 tables. */
10813 initialize_vtbl_ptrs (current_class_ptr);
10815 finish_compound_stmt (compound_stmt);
10816 finish_then_clause (if_stmt);
10817 finish_if_stmt (if_stmt);
10819 /* And insert cleanups for our bases and members so that they
10820 will be properly destroyed if we throw. */
10821 push_base_cleanups ();
10824 /* At the end of every destructor we generate code to delete the object if
10825 necessary. Do that now. */
10827 static void
10828 finish_destructor_body (void)
10830 tree exprstmt;
10832 /* Any return from a destructor will end up here; that way all base
10833 and member cleanups will be run when the function returns. */
10834 add_stmt (build_stmt (LABEL_EXPR, cdtor_label));
10836 /* In a virtual destructor, we must call delete. */
10837 if (DECL_VIRTUAL_P (current_function_decl))
10839 tree if_stmt;
10840 tree virtual_size = cxx_sizeof (current_class_type);
10842 /* [class.dtor]
10844 At the point of definition of a virtual destructor (including
10845 an implicit definition), non-placement operator delete shall
10846 be looked up in the scope of the destructor's class and if
10847 found shall be accessible and unambiguous. */
10848 exprstmt = build_op_delete_call
10849 (DELETE_EXPR, current_class_ptr, virtual_size,
10850 /*global_p=*/false, NULL_TREE);
10852 if_stmt = begin_if_stmt ();
10853 finish_if_stmt_cond (build2 (BIT_AND_EXPR, integer_type_node,
10854 current_in_charge_parm,
10855 integer_one_node),
10856 if_stmt);
10857 finish_expr_stmt (exprstmt);
10858 finish_then_clause (if_stmt);
10859 finish_if_stmt (if_stmt);
10862 if (targetm.cxx.cdtor_returns_this ())
10864 tree val;
10866 val = DECL_ARGUMENTS (current_function_decl);
10867 val = build2 (MODIFY_EXPR, TREE_TYPE (val),
10868 DECL_RESULT (current_function_decl), val);
10869 /* Return the address of the object. */
10870 exprstmt = build_stmt (RETURN_EXPR, val);
10871 add_stmt (exprstmt);
10875 /* Do the necessary processing for the beginning of a function body, which
10876 in this case includes member-initializers, but not the catch clauses of
10877 a function-try-block. Currently, this means opening a binding level
10878 for the member-initializers (in a ctor) and member cleanups (in a dtor). */
10880 tree
10881 begin_function_body (void)
10883 tree stmt;
10885 if (! FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
10886 return NULL_TREE;
10888 if (processing_template_decl)
10889 /* Do nothing now. */;
10890 else
10891 /* Always keep the BLOCK node associated with the outermost pair of
10892 curly braces of a function. These are needed for correct
10893 operation of dwarfout.c. */
10894 keep_next_level (true);
10896 stmt = begin_compound_stmt (BCS_FN_BODY);
10898 if (processing_template_decl)
10899 /* Do nothing now. */;
10900 else if (DECL_DESTRUCTOR_P (current_function_decl))
10901 begin_destructor_body ();
10903 return stmt;
10906 /* Do the processing for the end of a function body. Currently, this means
10907 closing out the cleanups for fully-constructed bases and members, and in
10908 the case of the destructor, deleting the object if desired. Again, this
10909 is only meaningful for [cd]tors, since they are the only functions where
10910 there is a significant distinction between the main body and any
10911 function catch clauses. Handling, say, main() return semantics here
10912 would be wrong, as flowing off the end of a function catch clause for
10913 main() would also need to return 0. */
10915 void
10916 finish_function_body (tree compstmt)
10918 if (compstmt == NULL_TREE)
10919 return;
10921 /* Close the block. */
10922 finish_compound_stmt (compstmt);
10924 if (processing_template_decl)
10925 /* Do nothing now. */;
10926 else if (DECL_CONSTRUCTOR_P (current_function_decl))
10927 finish_constructor_body ();
10928 else if (DECL_DESTRUCTOR_P (current_function_decl))
10929 finish_destructor_body ();
10932 /* Given a function, returns the BLOCK corresponding to the outermost level
10933 of curly braces, skipping the artificial block created for constructor
10934 initializers. */
10936 static tree
10937 outer_curly_brace_block (tree fndecl)
10939 tree block = BLOCK_SUBBLOCKS (DECL_INITIAL (fndecl));
10940 if (FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
10941 /* Skip the artificial function body block. */
10942 block = BLOCK_SUBBLOCKS (block);
10943 return block;
10946 /* Finish up a function declaration and compile that function
10947 all the way to assembler language output. The free the storage
10948 for the function definition.
10950 FLAGS is a bitwise or of the following values:
10951 2 - INCLASS_INLINE
10952 We just finished processing the body of an in-class inline
10953 function definition. (This processing will have taken place
10954 after the class definition is complete.) */
10956 tree
10957 finish_function (int flags)
10959 tree fndecl = current_function_decl;
10960 tree fntype, ctype = NULL_TREE;
10961 int inclass_inline = (flags & 2) != 0;
10962 int nested;
10964 /* When we get some parse errors, we can end up without a
10965 current_function_decl, so cope. */
10966 if (fndecl == NULL_TREE)
10967 return error_mark_node;
10969 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fndecl)
10970 && DECL_VIRTUAL_P (fndecl)
10971 && !processing_template_decl)
10973 tree fnclass = DECL_CONTEXT (fndecl);
10974 if (fndecl == CLASSTYPE_KEY_METHOD (fnclass))
10975 keyed_classes = tree_cons (NULL_TREE, fnclass, keyed_classes);
10978 nested = function_depth > 1;
10979 fntype = TREE_TYPE (fndecl);
10981 /* TREE_READONLY (fndecl) = 1;
10982 This caused &foo to be of type ptr-to-const-function
10983 which then got a warning when stored in a ptr-to-function variable. */
10985 gcc_assert (building_stmt_tree ());
10987 /* For a cloned function, we've already got all the code we need;
10988 there's no need to add any extra bits. */
10989 if (!DECL_CLONED_FUNCTION_P (fndecl))
10991 if (DECL_MAIN_P (current_function_decl))
10993 tree stmt;
10995 /* Make it so that `main' always returns 0 by default (or
10996 1 for VMS). */
10997 #if VMS_TARGET
10998 stmt = finish_return_stmt (integer_one_node);
10999 #else
11000 stmt = finish_return_stmt (integer_zero_node);
11001 #endif
11002 /* Hack. We don't want the middle-end to warn that this
11003 return is unreachable, so put the statement on the
11004 special line 0. */
11005 #ifdef USE_MAPPED_LOCATION
11006 SET_EXPR_LOCATION (stmt, UNKNOWN_LOCATION);
11007 #else
11008 annotate_with_file_line (stmt, input_filename, 0);
11009 #endif
11012 if (use_eh_spec_block (current_function_decl))
11013 finish_eh_spec_block (TYPE_RAISES_EXCEPTIONS
11014 (TREE_TYPE (current_function_decl)),
11015 current_eh_spec_block);
11018 /* If we're saving up tree structure, tie off the function now. */
11019 DECL_SAVED_TREE (fndecl) = pop_stmt_list (DECL_SAVED_TREE (fndecl));
11021 finish_fname_decls ();
11023 /* If this function can't throw any exceptions, remember that. */
11024 if (!processing_template_decl
11025 && !cp_function_chain->can_throw
11026 && !flag_non_call_exceptions
11027 && !DECL_REPLACEABLE_P (fndecl))
11028 TREE_NOTHROW (fndecl) = 1;
11030 /* This must come after expand_function_end because cleanups might
11031 have declarations (from inline functions) that need to go into
11032 this function's blocks. */
11034 /* If the current binding level isn't the outermost binding level
11035 for this function, either there is a bug, or we have experienced
11036 syntax errors and the statement tree is malformed. */
11037 if (current_binding_level->kind != sk_function_parms)
11039 /* Make sure we have already experienced errors. */
11040 gcc_assert (errorcount);
11042 /* Throw away the broken statement tree and extra binding
11043 levels. */
11044 DECL_SAVED_TREE (fndecl) = alloc_stmt_list ();
11046 while (current_binding_level->kind != sk_function_parms)
11048 if (current_binding_level->kind == sk_class)
11049 pop_nested_class ();
11050 else
11051 poplevel (0, 0, 0);
11054 poplevel (1, 0, 1);
11056 /* Statements should always be full-expressions at the outermost set
11057 of curly braces for a function. */
11058 gcc_assert (stmts_are_full_exprs_p ());
11060 /* Set up the named return value optimization, if we can. Candidate
11061 variables are selected in check_return_expr. */
11062 if (current_function_return_value)
11064 tree r = current_function_return_value;
11065 tree outer;
11067 if (r != error_mark_node
11068 /* This is only worth doing for fns that return in memory--and
11069 simpler, since we don't have to worry about promoted modes. */
11070 && aggregate_value_p (TREE_TYPE (TREE_TYPE (fndecl)), fndecl)
11071 /* Only allow this for variables declared in the outer scope of
11072 the function so we know that their lifetime always ends with a
11073 return; see g++.dg/opt/nrv6.C. We could be more flexible if
11074 we were to do this optimization in tree-ssa. */
11075 && (outer = outer_curly_brace_block (fndecl))
11076 && chain_member (r, BLOCK_VARS (outer)))
11077 finalize_nrv (&DECL_SAVED_TREE (fndecl), r, DECL_RESULT (fndecl));
11079 current_function_return_value = NULL_TREE;
11082 /* Remember that we were in class scope. */
11083 if (current_class_name)
11084 ctype = current_class_type;
11086 /* Must mark the RESULT_DECL as being in this function. */
11087 DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
11089 /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
11090 to the FUNCTION_DECL node itself. */
11091 BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
11093 /* Save away current state, if appropriate. */
11094 if (!processing_template_decl)
11095 save_function_data (fndecl);
11097 /* Complain if there's just no return statement. */
11098 if (warn_return_type
11099 && TREE_CODE (TREE_TYPE (fntype)) != VOID_TYPE
11100 && !dependent_type_p (TREE_TYPE (fntype))
11101 && !current_function_returns_value && !current_function_returns_null
11102 /* Don't complain if we abort or throw. */
11103 && !current_function_returns_abnormally
11104 && !DECL_NAME (DECL_RESULT (fndecl))
11105 /* Normally, with -Wreturn-type, flow will complain. Unless we're an
11106 inline function, as we might never be compiled separately. */
11107 && (DECL_INLINE (fndecl) || processing_template_decl)
11108 /* Structor return values (if any) are set by the compiler. */
11109 && !DECL_CONSTRUCTOR_P (fndecl)
11110 && !DECL_DESTRUCTOR_P (fndecl))
11111 warning (0, "no return statement in function returning non-void");
11113 /* Store the end of the function, so that we get good line number
11114 info for the epilogue. */
11115 cfun->function_end_locus = input_location;
11117 /* Genericize before inlining. */
11118 if (!processing_template_decl)
11120 struct language_function *f = DECL_SAVED_FUNCTION_DATA (fndecl);
11121 cp_genericize (fndecl);
11122 /* Clear out the bits we don't need. */
11123 f->x_current_class_ptr = NULL;
11124 f->x_current_class_ref = NULL;
11125 f->x_eh_spec_block = NULL;
11126 f->x_in_charge_parm = NULL;
11127 f->x_vtt_parm = NULL;
11128 f->x_return_value = NULL;
11129 f->bindings = NULL;
11130 f->extern_decl_map = NULL;
11132 /* Handle attribute((warn_unused_result)). Relies on gimple input. */
11133 c_warn_unused_result (&DECL_SAVED_TREE (fndecl));
11135 /* Clear out the bits we don't need. */
11136 local_names = NULL;
11137 named_label_uses = NULL;
11139 /* We're leaving the context of this function, so zap cfun. It's still in
11140 DECL_STRUCT_FUNCTION, and we'll restore it in tree_rest_of_compilation. */
11141 cfun = NULL;
11142 current_function_decl = NULL;
11144 /* If this is an in-class inline definition, we may have to pop the
11145 bindings for the template parameters that we added in
11146 maybe_begin_member_template_processing when start_function was
11147 called. */
11148 if (inclass_inline)
11149 maybe_end_member_template_processing ();
11151 /* Leave the scope of the class. */
11152 if (ctype)
11153 pop_nested_class ();
11155 --function_depth;
11157 /* Clean up. */
11158 if (! nested)
11159 /* Let the error reporting routines know that we're outside a
11160 function. For a nested function, this value is used in
11161 cxx_pop_function_context and then reset via pop_function_context. */
11162 current_function_decl = NULL_TREE;
11164 return fndecl;
11167 /* Create the FUNCTION_DECL for a function definition.
11168 DECLSPECS and DECLARATOR are the parts of the declaration;
11169 they describe the return type and the name of the function,
11170 but twisted together in a fashion that parallels the syntax of C.
11172 This function creates a binding context for the function body
11173 as well as setting up the FUNCTION_DECL in current_function_decl.
11175 Returns a FUNCTION_DECL on success.
11177 If the DECLARATOR is not suitable for a function (it defines a datum
11178 instead), we return 0, which tells yyparse to report a parse error.
11180 May return void_type_node indicating that this method is actually
11181 a friend. See grokfield for more details.
11183 Came here with a `.pushlevel' .
11185 DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
11186 CHANGES TO CODE IN `grokfield'. */
11188 tree
11189 start_method (cp_decl_specifier_seq *declspecs,
11190 const cp_declarator *declarator, tree attrlist)
11192 tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
11193 &attrlist);
11195 if (fndecl == error_mark_node)
11196 return error_mark_node;
11198 if (fndecl == NULL || TREE_CODE (fndecl) != FUNCTION_DECL)
11200 error ("invalid member function declaration");
11201 return error_mark_node;
11204 if (attrlist)
11205 cplus_decl_attributes (&fndecl, attrlist, 0);
11207 /* Pass friends other than inline friend functions back. */
11208 if (fndecl == void_type_node)
11209 return fndecl;
11211 if (DECL_IN_AGGR_P (fndecl))
11213 if (DECL_CONTEXT (fndecl)
11214 && TREE_CODE( DECL_CONTEXT (fndecl)) != NAMESPACE_DECL)
11215 error ("%qD is already defined in class %qT", fndecl,
11216 DECL_CONTEXT (fndecl));
11217 return error_mark_node;
11220 check_template_shadow (fndecl);
11222 DECL_DECLARED_INLINE_P (fndecl) = 1;
11223 if (flag_default_inline)
11224 DECL_INLINE (fndecl) = 1;
11226 /* We process method specializations in finish_struct_1. */
11227 if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
11229 fndecl = push_template_decl (fndecl);
11230 if (fndecl == error_mark_node)
11231 return fndecl;
11234 if (! DECL_FRIEND_P (fndecl))
11236 if (TREE_CHAIN (fndecl))
11238 fndecl = copy_node (fndecl);
11239 TREE_CHAIN (fndecl) = NULL_TREE;
11241 grok_special_member_properties (fndecl);
11244 finish_decl (fndecl, NULL_TREE, NULL_TREE);
11246 /* Make a place for the parms. */
11247 begin_scope (sk_function_parms, fndecl);
11249 DECL_IN_AGGR_P (fndecl) = 1;
11250 return fndecl;
11253 /* Go through the motions of finishing a function definition.
11254 We don't compile this method until after the whole class has
11255 been processed.
11257 FINISH_METHOD must return something that looks as though it
11258 came from GROKFIELD (since we are defining a method, after all).
11260 This is called after parsing the body of the function definition.
11261 STMTS is the chain of statements that makes up the function body.
11263 DECL is the ..._DECL that `start_method' provided. */
11265 tree
11266 finish_method (tree decl)
11268 tree fndecl = decl;
11269 tree old_initial;
11271 tree link;
11273 if (decl == void_type_node)
11274 return decl;
11276 old_initial = DECL_INITIAL (fndecl);
11278 /* Undo the level for the parms (from start_method).
11279 This is like poplevel, but it causes nothing to be
11280 saved. Saving information here confuses symbol-table
11281 output routines. Besides, this information will
11282 be correctly output when this method is actually
11283 compiled. */
11285 /* Clear out the meanings of the local variables of this level;
11286 also record in each decl which block it belongs to. */
11288 for (link = current_binding_level->names; link; link = TREE_CHAIN (link))
11290 if (DECL_NAME (link) != NULL_TREE)
11291 pop_binding (DECL_NAME (link), link);
11292 gcc_assert (TREE_CODE (link) != FUNCTION_DECL);
11293 DECL_CONTEXT (link) = NULL_TREE;
11296 poplevel (0, 0, 0);
11298 DECL_INITIAL (fndecl) = old_initial;
11300 /* We used to check if the context of FNDECL was different from
11301 current_class_type as another way to get inside here. This didn't work
11302 for String.cc in libg++. */
11303 if (DECL_FRIEND_P (fndecl))
11305 VEC_safe_push (tree, gc, CLASSTYPE_INLINE_FRIENDS (current_class_type),
11306 fndecl);
11307 decl = void_type_node;
11310 return decl;
11314 /* VAR is a VAR_DECL. If its type is incomplete, remember VAR so that
11315 we can lay it out later, when and if its type becomes complete. */
11317 void
11318 maybe_register_incomplete_var (tree var)
11320 gcc_assert (TREE_CODE (var) == VAR_DECL);
11322 /* Keep track of variables with incomplete types. */
11323 if (!processing_template_decl && TREE_TYPE (var) != error_mark_node
11324 && DECL_EXTERNAL (var))
11326 tree inner_type = TREE_TYPE (var);
11328 while (TREE_CODE (inner_type) == ARRAY_TYPE)
11329 inner_type = TREE_TYPE (inner_type);
11330 inner_type = TYPE_MAIN_VARIANT (inner_type);
11332 if ((!COMPLETE_TYPE_P (inner_type) && CLASS_TYPE_P (inner_type))
11333 /* RTTI TD entries are created while defining the type_info. */
11334 || (TYPE_LANG_SPECIFIC (inner_type)
11335 && TYPE_BEING_DEFINED (inner_type)))
11336 incomplete_vars = tree_cons (inner_type, var, incomplete_vars);
11340 /* Called when a class type (given by TYPE) is defined. If there are
11341 any existing VAR_DECLs whose type hsa been completed by this
11342 declaration, update them now. */
11344 void
11345 complete_vars (tree type)
11347 tree *list = &incomplete_vars;
11349 gcc_assert (CLASS_TYPE_P (type));
11350 while (*list)
11352 if (same_type_p (type, TREE_PURPOSE (*list)))
11354 tree var = TREE_VALUE (*list);
11355 tree type = TREE_TYPE (var);
11356 /* Complete the type of the variable. The VAR_DECL itself
11357 will be laid out in expand_expr. */
11358 complete_type (type);
11359 cp_apply_type_quals_to_decl (cp_type_quals (type), var);
11360 /* Remove this entry from the list. */
11361 *list = TREE_CHAIN (*list);
11363 else
11364 list = &TREE_CHAIN (*list);
11367 /* Check for pending declarations which may have abstract type. */
11368 complete_type_check_abstract (type);
11371 /* If DECL is of a type which needs a cleanup, build that cleanup
11372 here. */
11374 tree
11375 cxx_maybe_build_cleanup (tree decl)
11377 tree type = TREE_TYPE (decl);
11379 if (type != error_mark_node && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
11381 int flags = LOOKUP_NORMAL|LOOKUP_DESTRUCTOR;
11382 tree rval;
11383 bool has_vbases = (TREE_CODE (type) == RECORD_TYPE
11384 && CLASSTYPE_VBASECLASSES (type));
11386 if (TREE_CODE (type) == ARRAY_TYPE)
11387 rval = decl;
11388 else
11390 cxx_mark_addressable (decl);
11391 rval = build_unary_op (ADDR_EXPR, decl, 0);
11394 /* Optimize for space over speed here. */
11395 if (!has_vbases || flag_expensive_optimizations)
11396 flags |= LOOKUP_NONVIRTUAL;
11398 rval = build_delete (TREE_TYPE (rval), rval,
11399 sfk_complete_destructor, flags, 0);
11401 return rval;
11403 return NULL_TREE;
11406 /* When a stmt has been parsed, this function is called. */
11408 void
11409 finish_stmt (void)
11413 /* DECL was originally constructed as a non-static member function,
11414 but turned out to be static. Update it accordingly. */
11416 void
11417 revert_static_member_fn (tree decl)
11419 tree tmp;
11420 tree function = TREE_TYPE (decl);
11421 tree args = TYPE_ARG_TYPES (function);
11423 if (cp_type_quals (TREE_TYPE (TREE_VALUE (args)))
11424 != TYPE_UNQUALIFIED)
11425 error ("static member function %q#D declared with type qualifiers", decl);
11427 args = TREE_CHAIN (args);
11428 tmp = build_function_type (TREE_TYPE (function), args);
11429 tmp = build_qualified_type (tmp, cp_type_quals (function));
11430 tmp = build_exception_variant (tmp,
11431 TYPE_RAISES_EXCEPTIONS (function));
11432 TREE_TYPE (decl) = tmp;
11433 if (DECL_ARGUMENTS (decl)
11434 /* revert_static_member_fn might be called before grokclassfn
11435 had time to add the "this" argument. */
11436 && DECL_ARTIFICIAL (DECL_ARGUMENTS (decl))
11437 && DECL_NAME (DECL_ARGUMENTS (decl)) == this_identifier)
11438 DECL_ARGUMENTS (decl) = TREE_CHAIN (DECL_ARGUMENTS (decl));
11439 DECL_STATIC_FUNCTION_P (decl) = 1;
11442 /* Initialize the variables used during compilation of a C++
11443 function. */
11445 void
11446 cxx_push_function_context (struct function * f)
11448 struct language_function *p = GGC_CNEW (struct language_function);
11449 f->language = p;
11451 /* Whenever we start a new function, we destroy temporaries in the
11452 usual way. */
11453 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
11455 if (f->decl)
11457 tree fn = f->decl;
11459 if (DECL_SAVED_FUNCTION_DATA (fn))
11461 /* If we already parsed this function, and we're just expanding it
11462 now, restore saved state. */
11463 *cp_function_chain = *DECL_SAVED_FUNCTION_DATA (fn);
11465 /* We don't need the saved data anymore. Unless this is an inline
11466 function; we need the named return value info for
11467 declare_return_variable. */
11468 if (! DECL_INLINE (fn))
11469 DECL_SAVED_FUNCTION_DATA (fn) = NULL;
11474 /* Free the language-specific parts of F, now that we've finished
11475 compiling the function. */
11477 void
11478 cxx_pop_function_context (struct function * f)
11480 f->language = 0;
11483 /* Return which tree structure is used by T, or TS_CP_GENERIC if T is
11484 one of the language-independent trees. */
11486 enum cp_tree_node_structure_enum
11487 cp_tree_node_structure (union lang_tree_node * t)
11489 switch (TREE_CODE (&t->generic))
11491 case DEFAULT_ARG: return TS_CP_DEFAULT_ARG;
11492 case IDENTIFIER_NODE: return TS_CP_IDENTIFIER;
11493 case OVERLOAD: return TS_CP_OVERLOAD;
11494 case TEMPLATE_PARM_INDEX: return TS_CP_TPI;
11495 case TINST_LEVEL: return TS_CP_TINST_LEVEL;
11496 case PTRMEM_CST: return TS_CP_PTRMEM;
11497 case BASELINK: return TS_CP_BASELINK;
11498 default: return TS_CP_GENERIC;
11502 /* Build the void_list_node (void_type_node having been created). */
11503 tree
11504 build_void_list_node (void)
11506 tree t = build_tree_list (NULL_TREE, void_type_node);
11507 return t;
11510 bool
11511 cp_missing_noreturn_ok_p (tree decl)
11513 /* A missing noreturn is ok for the `main' function. */
11514 return DECL_MAIN_P (decl);
11517 /* Return the COMDAT group into which DECL should be placed. */
11519 const char *
11520 cxx_comdat_group (tree decl)
11522 tree name;
11524 /* Virtual tables, construction virtual tables, and virtual table
11525 tables all go in a single COMDAT group, named after the primary
11526 virtual table. */
11527 if (TREE_CODE (decl) == VAR_DECL && DECL_VTABLE_OR_VTT_P (decl))
11528 name = DECL_ASSEMBLER_NAME (CLASSTYPE_VTABLES (DECL_CONTEXT (decl)));
11529 /* For all other DECLs, the COMDAT group is the mangled name of the
11530 declaration itself. */
11531 else
11533 while (DECL_THUNK_P (decl))
11535 /* If TARGET_USE_LOCAL_THUNK_ALIAS_P, use_thunk puts the thunk
11536 into the same section as the target function. In that case
11537 we must return target's name. */
11538 tree target = THUNK_TARGET (decl);
11539 if (TARGET_USE_LOCAL_THUNK_ALIAS_P (target)
11540 && DECL_SECTION_NAME (target) != NULL
11541 && DECL_ONE_ONLY (target))
11542 decl = target;
11543 else
11544 break;
11546 name = DECL_ASSEMBLER_NAME (decl);
11549 return IDENTIFIER_POINTER (name);
11552 #include "gt-cp-decl.h"