os_dep.c: Add FreeBSD/PowerPC bits.
[official-gcc.git] / gcc / cp / decl.c
blob3edb40a301eeabd5f4224d39d2cd71ef6d8edb45
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, 59 Temple Place - Suite 330,
21 Boston, MA 02111-1307, 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);
117 static tree reshape_init (tree, tree *);
119 /* Erroneous argument lists can use this *IFF* they do not modify it. */
120 tree error_mark_list;
122 /* The following symbols are subsumed in the cp_global_trees array, and
123 listed here individually for documentation purposes.
125 C++ extensions
126 tree wchar_decl_node;
128 tree vtable_entry_type;
129 tree delta_type_node;
130 tree __t_desc_type_node;
132 tree class_type_node;
133 tree unknown_type_node;
135 Array type `vtable_entry_type[]'
137 tree vtbl_type_node;
138 tree vtbl_ptr_type_node;
140 Namespaces,
142 tree std_node;
143 tree abi_node;
145 A FUNCTION_DECL which can call `abort'. Not necessarily the
146 one that the user will declare, but sufficient to be called
147 by routines that want to abort the program.
149 tree abort_fndecl;
151 The FUNCTION_DECL for the default `::operator delete'.
153 tree global_delete_fndecl;
155 Used by RTTI
156 tree type_info_type_node, tinfo_decl_id, tinfo_decl_type;
157 tree tinfo_var_id;
161 tree cp_global_trees[CPTI_MAX];
163 /* Indicates that there is a type value in some namespace, although
164 that is not necessarily in scope at the moment. */
166 tree global_type_node;
168 /* The node that holds the "name" of the global scope. */
169 tree global_scope_name;
171 /* Used only for jumps to as-yet undefined labels, since jumps to
172 defined labels can have their validity checked immediately. */
174 struct named_label_use_list GTY(())
176 struct cp_binding_level *binding_level;
177 tree names_in_scope;
178 tree label_decl;
179 location_t o_goto_locus;
180 struct named_label_use_list *next;
183 #define named_label_uses cp_function_chain->x_named_label_uses
185 #define local_names cp_function_chain->x_local_names
187 /* A list of objects which have constructors or destructors
188 which reside in the global scope. The decl is stored in
189 the TREE_VALUE slot and the initializer is stored
190 in the TREE_PURPOSE slot. */
191 tree static_aggregates;
193 /* -- end of C++ */
195 /* A node for the integer constants 2, and 3. */
197 tree integer_two_node, integer_three_node;
199 /* A list of all LABEL_DECLs in the function that have names. Here so
200 we can clear out their names' definitions at the end of the
201 function, and so we can check the validity of jumps to these labels. */
203 struct named_label_list GTY(())
205 struct cp_binding_level *binding_level;
206 tree names_in_scope;
207 tree old_value;
208 tree label_decl;
209 tree bad_decls;
210 struct named_label_list *next;
211 unsigned int in_try_scope : 1;
212 unsigned int in_catch_scope : 1;
215 #define named_labels cp_function_chain->x_named_labels
217 /* The number of function bodies which we are currently processing.
218 (Zero if we are at namespace scope, one inside the body of a
219 function, two inside the body of a function in a local class, etc.) */
220 int function_depth;
222 /* States indicating how grokdeclarator() should handle declspecs marked
223 with __attribute__((deprecated)). An object declared as
224 __attribute__((deprecated)) suppresses warnings of uses of other
225 deprecated items. */
227 enum deprecated_states {
228 DEPRECATED_NORMAL,
229 DEPRECATED_SUPPRESS
232 static enum deprecated_states deprecated_state = DEPRECATED_NORMAL;
234 /* True if a declaration with an `extern' linkage specifier is being
235 processed. */
236 bool have_extern_spec;
239 /* A TREE_LIST of VAR_DECLs. The TREE_PURPOSE is a RECORD_TYPE or
240 UNION_TYPE; the TREE_VALUE is a VAR_DECL with that type. At the
241 time the VAR_DECL was declared, the type was incomplete. */
243 static GTY(()) tree incomplete_vars;
245 /* Returns the kind of template specialization we are currently
246 processing, given that it's declaration contained N_CLASS_SCOPES
247 explicit scope qualifications. */
249 tmpl_spec_kind
250 current_tmpl_spec_kind (int n_class_scopes)
252 int n_template_parm_scopes = 0;
253 int seen_specialization_p = 0;
254 int innermost_specialization_p = 0;
255 struct cp_binding_level *b;
257 /* Scan through the template parameter scopes. */
258 for (b = current_binding_level;
259 b->kind == sk_template_parms;
260 b = b->level_chain)
262 /* If we see a specialization scope inside a parameter scope,
263 then something is wrong. That corresponds to a declaration
264 like:
266 template <class T> template <> ...
268 which is always invalid since [temp.expl.spec] forbids the
269 specialization of a class member template if the enclosing
270 class templates are not explicitly specialized as well. */
271 if (b->explicit_spec_p)
273 if (n_template_parm_scopes == 0)
274 innermost_specialization_p = 1;
275 else
276 seen_specialization_p = 1;
278 else if (seen_specialization_p == 1)
279 return tsk_invalid_member_spec;
281 ++n_template_parm_scopes;
284 /* Handle explicit instantiations. */
285 if (processing_explicit_instantiation)
287 if (n_template_parm_scopes != 0)
288 /* We've seen a template parameter list during an explicit
289 instantiation. For example:
291 template <class T> template void f(int);
293 This is erroneous. */
294 return tsk_invalid_expl_inst;
295 else
296 return tsk_expl_inst;
299 if (n_template_parm_scopes < n_class_scopes)
300 /* We've not seen enough template headers to match all the
301 specialized classes present. For example:
303 template <class T> void R<T>::S<T>::f(int);
305 This is invalid; there needs to be one set of template
306 parameters for each class. */
307 return tsk_insufficient_parms;
308 else if (n_template_parm_scopes == n_class_scopes)
309 /* We're processing a non-template declaration (even though it may
310 be a member of a template class.) For example:
312 template <class T> void S<T>::f(int);
314 The `class T' maches the `S<T>', leaving no template headers
315 corresponding to the `f'. */
316 return tsk_none;
317 else if (n_template_parm_scopes > n_class_scopes + 1)
318 /* We've got too many template headers. For example:
320 template <> template <class T> void f (T);
322 There need to be more enclosing classes. */
323 return tsk_excessive_parms;
324 else
325 /* This must be a template. It's of the form:
327 template <class T> template <class U> void S<T>::f(U);
329 This is a specialization if the innermost level was a
330 specialization; otherwise it's just a definition of the
331 template. */
332 return innermost_specialization_p ? tsk_expl_spec : tsk_template;
335 /* Exit the current scope. */
337 void
338 finish_scope (void)
340 poplevel (0, 0, 0);
343 /* When a label goes out of scope, check to see if that label was used
344 in a valid manner, and issue any appropriate warnings or errors. */
346 static void
347 pop_label (tree label, tree old_value)
349 if (!processing_template_decl)
351 if (DECL_INITIAL (label) == NULL_TREE)
353 location_t location;
355 cp_error_at ("label %qD used but not defined", label);
356 #ifdef USE_MAPPED_LOCATION
357 location = input_location; /* FIXME want (input_filename, (line)0) */
358 #else
359 location.file = input_filename;
360 location.line = 0;
361 #endif
362 /* Avoid crashing later. */
363 define_label (location, DECL_NAME (label));
365 else if (warn_unused_label && !TREE_USED (label))
366 cp_warning_at ("label %qD defined but not used", label);
369 SET_IDENTIFIER_LABEL_VALUE (DECL_NAME (label), old_value);
372 /* At the end of a function, all labels declared within the function
373 go out of scope. BLOCK is the top-level block for the
374 function. */
376 static void
377 pop_labels (tree block)
379 struct named_label_list *link;
381 /* Clear out the definitions of all label names, since their scopes
382 end here. */
383 for (link = named_labels; link; link = link->next)
385 pop_label (link->label_decl, link->old_value);
386 /* Put the labels into the "variables" of the top-level block,
387 so debugger can see them. */
388 TREE_CHAIN (link->label_decl) = BLOCK_VARS (block);
389 BLOCK_VARS (block) = link->label_decl;
392 named_labels = NULL;
395 /* The following two routines are used to interface to Objective-C++.
396 The binding level is purposely treated as an opaque type. */
398 void *
399 objc_get_current_scope (void)
401 return current_binding_level;
404 /* The following routine is used by the NeXT-style SJLJ exceptions;
405 variables get marked 'volatile' so as to not be clobbered by
406 _setjmp()/_longjmp() calls. All variables in the current scope,
407 as well as parent scopes up to (but not including) ENCLOSING_BLK
408 shall be thusly marked. */
410 void
411 objc_mark_locals_volatile (void *enclosing_blk)
413 struct cp_binding_level *scope;
415 for (scope = current_binding_level;
416 scope && scope != enclosing_blk;
417 scope = scope->level_chain)
419 tree decl;
421 for (decl = scope->names; decl; decl = TREE_CHAIN (decl))
422 objc_volatilize_decl (decl);
424 /* Do not climb up past the current function. */
425 if (scope->kind == sk_function_parms)
426 break;
430 /* Exit a binding level.
431 Pop the level off, and restore the state of the identifier-decl mappings
432 that were in effect when this level was entered.
434 If KEEP == 1, this level had explicit declarations, so
435 and create a "block" (a BLOCK node) for the level
436 to record its declarations and subblocks for symbol table output.
438 If FUNCTIONBODY is nonzero, this level is the body of a function,
439 so create a block as if KEEP were set and also clear out all
440 label names.
442 If REVERSE is nonzero, reverse the order of decls before putting
443 them into the BLOCK. */
445 tree
446 poplevel (int keep, int reverse, int functionbody)
448 tree link;
449 /* The chain of decls was accumulated in reverse order.
450 Put it into forward order, just for cleanliness. */
451 tree decls;
452 int tmp = functionbody;
453 int real_functionbody;
454 tree subblocks;
455 tree block;
456 tree decl;
457 int leaving_for_scope;
458 scope_kind kind;
460 timevar_push (TV_NAME_LOOKUP);
461 restart:
463 block = NULL_TREE;
465 gcc_assert (current_binding_level->kind != sk_class);
467 real_functionbody = (current_binding_level->kind == sk_cleanup
468 ? ((functionbody = 0), tmp) : functionbody);
469 subblocks = functionbody >= 0 ? current_binding_level->blocks : 0;
471 gcc_assert (!VEC_length(cp_class_binding,
472 current_binding_level->class_shadowed));
474 /* We used to use KEEP == 2 to indicate that the new block should go
475 at the beginning of the list of blocks at this binding level,
476 rather than the end. This hack is no longer used. */
477 gcc_assert (keep == 0 || keep == 1);
479 if (current_binding_level->keep)
480 keep = 1;
482 /* Any uses of undefined labels, and any defined labels, now operate
483 under constraints of next binding contour. */
484 if (cfun && !functionbody)
486 struct cp_binding_level *level_chain;
487 level_chain = current_binding_level->level_chain;
488 if (level_chain)
490 struct named_label_use_list *uses;
491 struct named_label_list *labels;
492 for (labels = named_labels; labels; labels = labels->next)
493 if (labels->binding_level == current_binding_level)
495 tree decl;
496 if (current_binding_level->kind == sk_try)
497 labels->in_try_scope = 1;
498 if (current_binding_level->kind == sk_catch)
499 labels->in_catch_scope = 1;
500 for (decl = labels->names_in_scope; decl;
501 decl = TREE_CHAIN (decl))
502 if (decl_jump_unsafe (decl))
503 labels->bad_decls = tree_cons (NULL_TREE, decl,
504 labels->bad_decls);
505 labels->binding_level = level_chain;
506 labels->names_in_scope = level_chain->names;
509 for (uses = named_label_uses; uses; uses = uses->next)
510 if (uses->binding_level == current_binding_level)
512 uses->binding_level = level_chain;
513 uses->names_in_scope = level_chain->names;
518 /* Get the decls in the order they were written.
519 Usually current_binding_level->names is in reverse order.
520 But parameter decls were previously put in forward order. */
522 if (reverse)
523 current_binding_level->names
524 = decls = nreverse (current_binding_level->names);
525 else
526 decls = current_binding_level->names;
528 /* If there were any declarations or structure tags in that level,
529 or if this level is a function body,
530 create a BLOCK to record them for the life of this function. */
531 block = NULL_TREE;
532 if (keep == 1 || functionbody)
533 block = make_node (BLOCK);
534 if (block != NULL_TREE)
536 BLOCK_VARS (block) = decls;
537 BLOCK_SUBBLOCKS (block) = subblocks;
540 /* In each subblock, record that this is its superior. */
541 if (keep >= 0)
542 for (link = subblocks; link; link = TREE_CHAIN (link))
543 BLOCK_SUPERCONTEXT (link) = block;
545 /* We still support the old for-scope rules, whereby the variables
546 in a for-init statement were in scope after the for-statement
547 ended. We only use the new rules if flag_new_for_scope is
548 nonzero. */
549 leaving_for_scope
550 = current_binding_level->kind == sk_for && flag_new_for_scope == 1;
552 /* Before we remove the declarations first check for unused variables. */
553 if (warn_unused_variable
554 && !processing_template_decl)
555 for (decl = getdecls (); decl; decl = TREE_CHAIN (decl))
556 if (TREE_CODE (decl) == VAR_DECL
557 && ! TREE_USED (decl)
558 && ! DECL_IN_SYSTEM_HEADER (decl)
559 && DECL_NAME (decl) && ! DECL_ARTIFICIAL (decl))
560 warning (0, "%Junused variable %qD", decl, decl);
562 /* Remove declarations for all the DECLs in this level. */
563 for (link = decls; link; link = TREE_CHAIN (link))
565 if (leaving_for_scope && TREE_CODE (link) == VAR_DECL
566 && DECL_NAME (link))
568 tree name = DECL_NAME (link);
569 cxx_binding *ob;
570 tree ns_binding;
572 ob = outer_binding (name,
573 IDENTIFIER_BINDING (name),
574 /*class_p=*/true);
575 if (!ob)
576 ns_binding = IDENTIFIER_NAMESPACE_VALUE (name);
577 else
578 ns_binding = NULL_TREE;
580 if (ob && ob->scope == current_binding_level->level_chain)
581 /* We have something like:
583 int i;
584 for (int i; ;);
586 and we are leaving the `for' scope. There's no reason to
587 keep the binding of the inner `i' in this case. */
588 pop_binding (name, link);
589 else if ((ob && (TREE_CODE (ob->value) == TYPE_DECL))
590 || (ns_binding && TREE_CODE (ns_binding) == TYPE_DECL))
591 /* Here, we have something like:
593 typedef int I;
595 void f () {
596 for (int I; ;);
599 We must pop the for-scope binding so we know what's a
600 type and what isn't. */
601 pop_binding (name, link);
602 else
604 /* Mark this VAR_DECL as dead so that we can tell we left it
605 there only for backward compatibility. */
606 DECL_DEAD_FOR_LOCAL (link) = 1;
608 /* Keep track of what should have happened when we
609 popped the binding. */
610 if (ob && ob->value)
611 DECL_SHADOWED_FOR_VAR (link) = ob->value;
613 /* Add it to the list of dead variables in the next
614 outermost binding to that we can remove these when we
615 leave that binding. */
616 current_binding_level->level_chain->dead_vars_from_for
617 = tree_cons (NULL_TREE, link,
618 current_binding_level->level_chain->
619 dead_vars_from_for);
621 /* Although we don't pop the cxx_binding, we do clear
622 its SCOPE since the scope is going away now. */
623 IDENTIFIER_BINDING (name)->scope
624 = current_binding_level->level_chain;
627 else
629 tree name;
631 /* Remove the binding. */
632 decl = link;
634 if (TREE_CODE (decl) == TREE_LIST)
635 decl = TREE_VALUE (decl);
636 name = decl;
638 if (TREE_CODE (name) == OVERLOAD)
639 name = OVL_FUNCTION (name);
641 gcc_assert (DECL_P (name));
642 pop_binding (DECL_NAME (name), decl);
646 /* Remove declarations for any `for' variables from inner scopes
647 that we kept around. */
648 for (link = current_binding_level->dead_vars_from_for;
649 link; link = TREE_CHAIN (link))
650 pop_binding (DECL_NAME (TREE_VALUE (link)), TREE_VALUE (link));
652 /* Restore the IDENTIFIER_TYPE_VALUEs. */
653 for (link = current_binding_level->type_shadowed;
654 link; link = TREE_CHAIN (link))
655 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (link), TREE_VALUE (link));
657 /* Restore the IDENTIFIER_LABEL_VALUEs for local labels. */
658 for (link = current_binding_level->shadowed_labels;
659 link;
660 link = TREE_CHAIN (link))
661 pop_label (TREE_VALUE (link), TREE_PURPOSE (link));
663 /* There may be OVERLOADs (wrapped in TREE_LISTs) on the BLOCK_VARs
664 list if a `using' declaration put them there. The debugging
665 back-ends won't understand OVERLOAD, so we remove them here.
666 Because the BLOCK_VARS are (temporarily) shared with
667 CURRENT_BINDING_LEVEL->NAMES we must do this fixup after we have
668 popped all the bindings. */
669 if (block)
671 tree* d;
673 for (d = &BLOCK_VARS (block); *d; )
675 if (TREE_CODE (*d) == TREE_LIST)
676 *d = TREE_CHAIN (*d);
677 else
678 d = &TREE_CHAIN (*d);
682 /* If the level being exited is the top level of a function,
683 check over all the labels. */
684 if (functionbody)
686 /* Since this is the top level block of a function, the vars are
687 the function's parameters. Don't leave them in the BLOCK
688 because they are found in the FUNCTION_DECL instead. */
689 BLOCK_VARS (block) = 0;
690 pop_labels (block);
693 kind = current_binding_level->kind;
694 if (kind == sk_cleanup)
696 tree stmt;
698 /* If this is a temporary binding created for a cleanup, then we'll
699 have pushed a statement list level. Pop that, create a new
700 BIND_EXPR for the block, and insert it into the stream. */
701 stmt = pop_stmt_list (current_binding_level->statement_list);
702 stmt = c_build_bind_expr (block, stmt);
703 add_stmt (stmt);
706 leave_scope ();
707 if (functionbody)
708 DECL_INITIAL (current_function_decl) = block;
709 else if (block)
710 current_binding_level->blocks
711 = chainon (current_binding_level->blocks, block);
713 /* If we did not make a block for the level just exited,
714 any blocks made for inner levels
715 (since they cannot be recorded as subblocks in that level)
716 must be carried forward so they will later become subblocks
717 of something else. */
718 else if (subblocks)
719 current_binding_level->blocks
720 = chainon (current_binding_level->blocks, subblocks);
722 /* Each and every BLOCK node created here in `poplevel' is important
723 (e.g. for proper debugging information) so if we created one
724 earlier, mark it as "used". */
725 if (block)
726 TREE_USED (block) = 1;
728 /* All temporary bindings created for cleanups are popped silently. */
729 if (kind == sk_cleanup)
730 goto restart;
732 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, block);
735 /* Insert BLOCK at the end of the list of subblocks of the
736 current binding level. This is used when a BIND_EXPR is expanded,
737 to handle the BLOCK node inside the BIND_EXPR. */
739 void
740 insert_block (tree block)
742 TREE_USED (block) = 1;
743 current_binding_level->blocks
744 = chainon (current_binding_level->blocks, block);
747 /* Walk all the namespaces contained NAMESPACE, including NAMESPACE
748 itself, calling F for each. The DATA is passed to F as well. */
750 static int
751 walk_namespaces_r (tree namespace, walk_namespaces_fn f, void* data)
753 int result = 0;
754 tree current = NAMESPACE_LEVEL (namespace)->namespaces;
756 result |= (*f) (namespace, data);
758 for (; current; current = TREE_CHAIN (current))
759 result |= walk_namespaces_r (current, f, data);
761 return result;
764 /* Walk all the namespaces, calling F for each. The DATA is passed to
765 F as well. */
768 walk_namespaces (walk_namespaces_fn f, void* data)
770 return walk_namespaces_r (global_namespace, f, data);
773 /* Call wrapup_globals_declarations for the globals in NAMESPACE. If
774 DATA is non-NULL, this is the last time we will call
775 wrapup_global_declarations for this NAMESPACE. */
778 wrapup_globals_for_namespace (tree namespace, void* data)
780 struct cp_binding_level *level = NAMESPACE_LEVEL (namespace);
781 VEC(tree,gc) *statics = level->static_decls;
782 tree *vec = VEC_address (tree, statics);
783 int len = VEC_length (tree, statics);
784 int last_time = (data != 0);
786 if (last_time)
788 check_global_declarations (vec, len);
789 return 0;
792 /* Write out any globals that need to be output. */
793 return wrapup_global_declarations (vec, len);
797 /* In C++, you don't have to write `struct S' to refer to `S'; you
798 can just use `S'. We accomplish this by creating a TYPE_DECL as
799 if the user had written `typedef struct S S'. Create and return
800 the TYPE_DECL for TYPE. */
802 tree
803 create_implicit_typedef (tree name, tree type)
805 tree decl;
807 decl = build_decl (TYPE_DECL, name, type);
808 DECL_ARTIFICIAL (decl) = 1;
809 /* There are other implicit type declarations, like the one *within*
810 a class that allows you to write `S::S'. We must distinguish
811 amongst these. */
812 SET_DECL_IMPLICIT_TYPEDEF_P (decl);
813 TYPE_NAME (type) = decl;
815 return decl;
818 /* Remember a local name for name-mangling purposes. */
820 static void
821 push_local_name (tree decl)
823 size_t i, nelts;
824 tree t, name;
826 timevar_push (TV_NAME_LOOKUP);
828 name = DECL_NAME (decl);
830 nelts = VEC_length (tree, local_names);
831 for (i = 0; i < nelts; i++)
833 t = VEC_index (tree, local_names, i);
834 if (DECL_NAME (t) == name)
836 if (!DECL_LANG_SPECIFIC (decl))
837 retrofit_lang_decl (decl);
838 DECL_LANG_SPECIFIC (decl)->decl_flags.u2sel = 1;
839 if (DECL_LANG_SPECIFIC (t))
840 DECL_DISCRIMINATOR (decl) = DECL_DISCRIMINATOR (t) + 1;
841 else
842 DECL_DISCRIMINATOR (decl) = 1;
844 VEC_replace (tree, local_names, i, decl);
845 timevar_pop (TV_NAME_LOOKUP);
846 return;
850 VEC_safe_push (tree, gc, local_names, decl);
851 timevar_pop (TV_NAME_LOOKUP);
854 /* Subroutine of duplicate_decls: return truthvalue of whether
855 or not types of these decls match.
857 For C++, we must compare the parameter list so that `int' can match
858 `int&' in a parameter position, but `int&' is not confused with
859 `const int&'. */
862 decls_match (tree newdecl, tree olddecl)
864 int types_match;
866 if (newdecl == olddecl)
867 return 1;
869 if (TREE_CODE (newdecl) != TREE_CODE (olddecl))
870 /* If the two DECLs are not even the same kind of thing, we're not
871 interested in their types. */
872 return 0;
874 if (TREE_CODE (newdecl) == FUNCTION_DECL)
876 tree f1 = TREE_TYPE (newdecl);
877 tree f2 = TREE_TYPE (olddecl);
878 tree p1 = TYPE_ARG_TYPES (f1);
879 tree p2 = TYPE_ARG_TYPES (f2);
881 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
882 && ! (DECL_EXTERN_C_P (newdecl)
883 && DECL_EXTERN_C_P (olddecl)))
884 return 0;
886 if (TREE_CODE (f1) != TREE_CODE (f2))
887 return 0;
889 if (same_type_p (TREE_TYPE (f1), TREE_TYPE (f2)))
891 if (p2 == NULL_TREE && DECL_EXTERN_C_P (olddecl)
892 && (DECL_BUILT_IN (olddecl)
893 #ifndef NO_IMPLICIT_EXTERN_C
894 || (DECL_IN_SYSTEM_HEADER (newdecl) && !DECL_CLASS_SCOPE_P (newdecl))
895 || (DECL_IN_SYSTEM_HEADER (olddecl) && !DECL_CLASS_SCOPE_P (olddecl))
896 #endif
899 types_match = self_promoting_args_p (p1);
900 if (p1 == void_list_node)
901 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
903 #ifndef NO_IMPLICIT_EXTERN_C
904 else if (p1 == NULL_TREE
905 && (DECL_EXTERN_C_P (olddecl)
906 && DECL_IN_SYSTEM_HEADER (olddecl)
907 && !DECL_CLASS_SCOPE_P (olddecl))
908 && (DECL_EXTERN_C_P (newdecl)
909 && DECL_IN_SYSTEM_HEADER (newdecl)
910 && !DECL_CLASS_SCOPE_P (newdecl)))
912 types_match = self_promoting_args_p (p2);
913 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
915 #endif
916 else
917 types_match = compparms (p1, p2);
919 else
920 types_match = 0;
922 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
924 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl))
925 != TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)))
926 return 0;
928 if (!comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
929 DECL_TEMPLATE_PARMS (olddecl)))
930 return 0;
932 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
933 types_match = same_type_p (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl)),
934 TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl)));
935 else
936 types_match = decls_match (DECL_TEMPLATE_RESULT (olddecl),
937 DECL_TEMPLATE_RESULT (newdecl));
939 else
941 /* Need to check scope for variable declaration (VAR_DECL).
942 For typedef (TYPE_DECL), scope is ignored. */
943 if (TREE_CODE (newdecl) == VAR_DECL
944 && CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl))
945 return 0;
947 if (TREE_TYPE (newdecl) == error_mark_node)
948 types_match = TREE_TYPE (olddecl) == error_mark_node;
949 else if (TREE_TYPE (olddecl) == NULL_TREE)
950 types_match = TREE_TYPE (newdecl) == NULL_TREE;
951 else if (TREE_TYPE (newdecl) == NULL_TREE)
952 types_match = 0;
953 else
954 types_match = comptypes (TREE_TYPE (newdecl),
955 TREE_TYPE (olddecl),
956 COMPARE_REDECLARATION);
959 return types_match;
962 /* If NEWDECL is `static' and an `extern' was seen previously,
963 warn about it. OLDDECL is the previous declaration.
965 Note that this does not apply to the C++ case of declaring
966 a variable `extern const' and then later `const'.
968 Don't complain about built-in functions, since they are beyond
969 the user's control. */
971 void
972 warn_extern_redeclared_static (tree newdecl, tree olddecl)
974 tree name;
976 if (TREE_CODE (newdecl) == TYPE_DECL
977 || TREE_CODE (newdecl) == TEMPLATE_DECL
978 || TREE_CODE (newdecl) == CONST_DECL
979 || TREE_CODE (newdecl) == NAMESPACE_DECL)
980 return;
982 /* Don't get confused by static member functions; that's a different
983 use of `static'. */
984 if (TREE_CODE (newdecl) == FUNCTION_DECL
985 && DECL_STATIC_FUNCTION_P (newdecl))
986 return;
988 /* If the old declaration was `static', or the new one isn't, then
989 then everything is OK. */
990 if (DECL_THIS_STATIC (olddecl) || !DECL_THIS_STATIC (newdecl))
991 return;
993 /* It's OK to declare a builtin function as `static'. */
994 if (TREE_CODE (olddecl) == FUNCTION_DECL
995 && DECL_ARTIFICIAL (olddecl))
996 return;
998 name = DECL_ASSEMBLER_NAME (newdecl);
999 pedwarn ("%qD was declared %<extern%> and later %<static%>", newdecl);
1000 cp_pedwarn_at ("previous declaration of %qD", olddecl);
1003 /* If NEWDECL is a redeclaration of OLDDECL, merge the declarations.
1004 If the redeclaration is invalid, a diagnostic is issued, and the
1005 error_mark_node is returned. Otherwise, OLDDECL is returned.
1007 If NEWDECL is not a redeclaration of OLDDECL, NULL_TREE is
1008 returned. */
1010 tree
1011 duplicate_decls (tree newdecl, tree olddecl)
1013 unsigned olddecl_uid = DECL_UID (olddecl);
1014 int olddecl_friend = 0, types_match = 0;
1015 int new_defines_function = 0;
1017 if (newdecl == olddecl)
1018 return olddecl;
1020 types_match = decls_match (newdecl, olddecl);
1022 /* If either the type of the new decl or the type of the old decl is an
1023 error_mark_node, then that implies that we have already issued an
1024 error (earlier) for some bogus type specification, and in that case,
1025 it is rather pointless to harass the user with yet more error message
1026 about the same declaration, so just pretend the types match here. */
1027 if (TREE_TYPE (newdecl) == error_mark_node
1028 || TREE_TYPE (olddecl) == error_mark_node)
1029 types_match = 1;
1031 if (DECL_P (olddecl)
1032 && TREE_CODE (newdecl) == FUNCTION_DECL
1033 && TREE_CODE (olddecl) == FUNCTION_DECL
1034 && (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl)))
1036 if (DECL_DECLARED_INLINE_P (newdecl)
1037 && DECL_UNINLINABLE (newdecl)
1038 && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
1039 /* Already warned elsewhere. */;
1040 else if (DECL_DECLARED_INLINE_P (olddecl)
1041 && DECL_UNINLINABLE (olddecl)
1042 && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
1043 /* Already warned. */;
1044 else if (DECL_DECLARED_INLINE_P (newdecl)
1045 && DECL_UNINLINABLE (olddecl)
1046 && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
1048 warning (OPT_Wattributes, "%Jfunction %qD redeclared as inline",
1049 newdecl, newdecl);
1050 warning (OPT_Wattributes, "%Jprevious declaration of %qD "
1051 "with attribute noinline", olddecl, olddecl);
1053 else if (DECL_DECLARED_INLINE_P (olddecl)
1054 && DECL_UNINLINABLE (newdecl)
1055 && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
1057 warning (OPT_Wattributes, "%Jfunction %qD redeclared with "
1058 "attribute noinline", newdecl, newdecl);
1059 warning (OPT_Wattributes, "%Jprevious declaration of %qD was inline",
1060 olddecl, olddecl);
1064 /* Check for redeclaration and other discrepancies. */
1065 if (TREE_CODE (olddecl) == FUNCTION_DECL
1066 && DECL_ARTIFICIAL (olddecl))
1068 if (TREE_CODE (newdecl) != FUNCTION_DECL)
1070 /* Avoid warnings redeclaring anticipated built-ins. */
1071 if (DECL_ANTICIPATED (olddecl))
1072 return NULL_TREE;
1074 /* If you declare a built-in or predefined function name as static,
1075 the old definition is overridden, but optionally warn this was a
1076 bad choice of name. */
1077 if (! TREE_PUBLIC (newdecl))
1079 if (warn_shadow)
1080 warning (0, "shadowing %s function %q#D",
1081 DECL_BUILT_IN (olddecl) ? "built-in" : "library",
1082 olddecl);
1083 /* Discard the old built-in function. */
1084 return NULL_TREE;
1086 /* If the built-in is not ansi, then programs can override
1087 it even globally without an error. */
1088 else if (! DECL_BUILT_IN (olddecl))
1089 warning (0, "library function %q#D redeclared as non-function %q#D",
1090 olddecl, newdecl);
1091 else
1093 error ("declaration of %q#D", newdecl);
1094 error ("conflicts with built-in declaration %q#D",
1095 olddecl);
1097 return NULL_TREE;
1099 else if (!types_match)
1101 /* Avoid warnings redeclaring anticipated built-ins. */
1102 if (DECL_ANTICIPATED (olddecl))
1104 /* Deal with fileptr_type_node. FILE type is not known
1105 at the time we create the builtins. */
1106 tree t1, t2;
1108 for (t1 = TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1109 t2 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1110 t1 || t2;
1111 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
1112 if (!t1 || !t2)
1113 break;
1114 else if (TREE_VALUE (t2) == fileptr_type_node)
1116 tree t = TREE_VALUE (t1);
1118 if (TREE_CODE (t) == POINTER_TYPE
1119 && TYPE_NAME (TREE_TYPE (t))
1120 && DECL_NAME (TYPE_NAME (TREE_TYPE (t)))
1121 == get_identifier ("FILE")
1122 && compparms (TREE_CHAIN (t1), TREE_CHAIN (t2)))
1124 tree oldargs = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1126 TYPE_ARG_TYPES (TREE_TYPE (olddecl))
1127 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
1128 types_match = decls_match (newdecl, olddecl);
1129 if (types_match)
1130 return duplicate_decls (newdecl, olddecl);
1131 TYPE_ARG_TYPES (TREE_TYPE (olddecl)) = oldargs;
1134 else if (! same_type_p (TREE_VALUE (t1), TREE_VALUE (t2)))
1135 break;
1137 else if ((DECL_EXTERN_C_P (newdecl)
1138 && DECL_EXTERN_C_P (olddecl))
1139 || compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1140 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
1142 /* A near match; override the builtin. */
1144 if (TREE_PUBLIC (newdecl))
1146 warning (0, "new declaration %q#D", newdecl);
1147 warning (0, "ambiguates built-in declaration %q#D",
1148 olddecl);
1150 else if (warn_shadow)
1151 warning (0, "shadowing %s function %q#D",
1152 DECL_BUILT_IN (olddecl) ? "built-in" : "library",
1153 olddecl);
1155 else
1156 /* Discard the old built-in function. */
1157 return NULL_TREE;
1159 /* Replace the old RTL to avoid problems with inlining. */
1160 COPY_DECL_RTL (newdecl, olddecl);
1162 /* Even if the types match, prefer the new declarations type
1163 for anticipated built-ins, for exception lists, etc... */
1164 else if (DECL_ANTICIPATED (olddecl))
1166 tree type = TREE_TYPE (newdecl);
1167 tree attribs = (*targetm.merge_type_attributes)
1168 (TREE_TYPE (olddecl), type);
1170 type = cp_build_type_attribute_variant (type, attribs);
1171 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = type;
1174 /* Whether or not the builtin can throw exceptions has no
1175 bearing on this declarator. */
1176 TREE_NOTHROW (olddecl) = 0;
1178 if (DECL_THIS_STATIC (newdecl) && !DECL_THIS_STATIC (olddecl))
1180 /* If a builtin function is redeclared as `static', merge
1181 the declarations, but make the original one static. */
1182 DECL_THIS_STATIC (olddecl) = 1;
1183 TREE_PUBLIC (olddecl) = 0;
1185 /* Make the old declaration consistent with the new one so
1186 that all remnants of the builtin-ness of this function
1187 will be banished. */
1188 SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
1189 COPY_DECL_RTL (newdecl, olddecl);
1192 else if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
1194 if ((TREE_CODE (olddecl) == TYPE_DECL && DECL_ARTIFICIAL (olddecl)
1195 && TREE_CODE (newdecl) != TYPE_DECL
1196 && ! (TREE_CODE (newdecl) == TEMPLATE_DECL
1197 && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL))
1198 || (TREE_CODE (newdecl) == TYPE_DECL && DECL_ARTIFICIAL (newdecl)
1199 && TREE_CODE (olddecl) != TYPE_DECL
1200 && ! (TREE_CODE (olddecl) == TEMPLATE_DECL
1201 && (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl))
1202 == TYPE_DECL))))
1204 /* We do nothing special here, because C++ does such nasty
1205 things with TYPE_DECLs. Instead, just let the TYPE_DECL
1206 get shadowed, and know that if we need to find a TYPE_DECL
1207 for a given name, we can look in the IDENTIFIER_TYPE_VALUE
1208 slot of the identifier. */
1209 return NULL_TREE;
1212 if ((TREE_CODE (newdecl) == FUNCTION_DECL
1213 && DECL_FUNCTION_TEMPLATE_P (olddecl))
1214 || (TREE_CODE (olddecl) == FUNCTION_DECL
1215 && DECL_FUNCTION_TEMPLATE_P (newdecl)))
1216 return NULL_TREE;
1218 error ("%q#D redeclared as different kind of symbol", newdecl);
1219 if (TREE_CODE (olddecl) == TREE_LIST)
1220 olddecl = TREE_VALUE (olddecl);
1221 cp_error_at ("previous declaration of %q#D", olddecl);
1223 return error_mark_node;
1225 else if (!types_match)
1227 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl))
1228 /* These are certainly not duplicate declarations; they're
1229 from different scopes. */
1230 return NULL_TREE;
1232 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1234 /* The name of a class template may not be declared to refer to
1235 any other template, class, function, object, namespace, value,
1236 or type in the same scope. */
1237 if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == TYPE_DECL
1238 || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
1240 error ("declaration of template %q#D", newdecl);
1241 cp_error_at ("conflicts with previous declaration %q#D",
1242 olddecl);
1244 else if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == FUNCTION_DECL
1245 && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
1246 && compparms (TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl))),
1247 TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl))))
1248 && comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
1249 DECL_TEMPLATE_PARMS (olddecl))
1250 /* Template functions can be disambiguated by
1251 return type. */
1252 && same_type_p (TREE_TYPE (TREE_TYPE (newdecl)),
1253 TREE_TYPE (TREE_TYPE (olddecl))))
1255 error ("new declaration %q#D", newdecl);
1256 cp_error_at ("ambiguates old declaration %q#D", olddecl);
1258 return NULL_TREE;
1260 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1262 if (DECL_EXTERN_C_P (newdecl) && DECL_EXTERN_C_P (olddecl))
1264 error ("declaration of C function %q#D conflicts with",
1265 newdecl);
1266 cp_error_at ("previous declaration %q#D here", olddecl);
1268 else if (compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1269 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
1271 error ("new declaration %q#D", newdecl);
1272 cp_error_at ("ambiguates old declaration %q#D", olddecl);
1274 else
1275 return NULL_TREE;
1277 else
1279 error ("conflicting declaration %q#D", newdecl);
1280 cp_error_at ("%qD has a previous declaration as %q#D",
1281 olddecl, olddecl);
1282 return error_mark_node;
1285 else if (TREE_CODE (newdecl) == FUNCTION_DECL
1286 && ((DECL_TEMPLATE_SPECIALIZATION (olddecl)
1287 && (!DECL_TEMPLATE_INFO (newdecl)
1288 || (DECL_TI_TEMPLATE (newdecl)
1289 != DECL_TI_TEMPLATE (olddecl))))
1290 || (DECL_TEMPLATE_SPECIALIZATION (newdecl)
1291 && (!DECL_TEMPLATE_INFO (olddecl)
1292 || (DECL_TI_TEMPLATE (olddecl)
1293 != DECL_TI_TEMPLATE (newdecl))))))
1294 /* It's OK to have a template specialization and a non-template
1295 with the same type, or to have specializations of two
1296 different templates with the same type. Note that if one is a
1297 specialization, and the other is an instantiation of the same
1298 template, that we do not exit at this point. That situation
1299 can occur if we instantiate a template class, and then
1300 specialize one of its methods. This situation is valid, but
1301 the declarations must be merged in the usual way. */
1302 return NULL_TREE;
1303 else if (TREE_CODE (newdecl) == FUNCTION_DECL
1304 && ((DECL_TEMPLATE_INSTANTIATION (olddecl)
1305 && !DECL_USE_TEMPLATE (newdecl))
1306 || (DECL_TEMPLATE_INSTANTIATION (newdecl)
1307 && !DECL_USE_TEMPLATE (olddecl))))
1308 /* One of the declarations is a template instantiation, and the
1309 other is not a template at all. That's OK. */
1310 return NULL_TREE;
1311 else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
1313 /* In [namespace.alias] we have:
1315 In a declarative region, a namespace-alias-definition can be
1316 used to redefine a namespace-alias declared in that declarative
1317 region to refer only to the namespace to which it already
1318 refers.
1320 Therefore, if we encounter a second alias directive for the same
1321 alias, we can just ignore the second directive. */
1322 if (DECL_NAMESPACE_ALIAS (newdecl)
1323 && (DECL_NAMESPACE_ALIAS (newdecl)
1324 == DECL_NAMESPACE_ALIAS (olddecl)))
1325 return olddecl;
1326 /* [namespace.alias]
1328 A namespace-name or namespace-alias shall not be declared as
1329 the name of any other entity in the same declarative region.
1330 A namespace-name defined at global scope shall not be
1331 declared as the name of any other entity in any global scope
1332 of the program. */
1333 error ("declaration of namespace %qD conflicts with", newdecl);
1334 cp_error_at ("previous declaration of namespace %qD here", olddecl);
1335 return error_mark_node;
1337 else
1339 const char *errmsg = redeclaration_error_message (newdecl, olddecl);
1340 if (errmsg)
1342 error (errmsg, newdecl);
1343 if (DECL_NAME (olddecl) != NULL_TREE)
1344 cp_error_at ((DECL_INITIAL (olddecl)
1345 && namespace_bindings_p ())
1346 ? "%q#D previously defined here"
1347 : "%q#D previously declared here", olddecl);
1348 return error_mark_node;
1350 else if (TREE_CODE (olddecl) == FUNCTION_DECL
1351 && DECL_INITIAL (olddecl) != NULL_TREE
1352 && TYPE_ARG_TYPES (TREE_TYPE (olddecl)) == NULL_TREE
1353 && TYPE_ARG_TYPES (TREE_TYPE (newdecl)) != NULL_TREE)
1355 /* Prototype decl follows defn w/o prototype. */
1356 cp_warning_at ("prototype for %q#D", newdecl);
1357 warning (0, "%Jfollows non-prototype definition here", olddecl);
1359 else if (TREE_CODE (olddecl) == FUNCTION_DECL
1360 && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl))
1362 /* extern "C" int foo ();
1363 int foo () { bar (); }
1364 is OK. */
1365 if (current_lang_depth () == 0)
1366 SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
1367 else
1369 cp_error_at ("previous declaration of %q#D with %qL linkage",
1370 olddecl, DECL_LANGUAGE (olddecl));
1371 error ("conflicts with new declaration with %qL linkage",
1372 DECL_LANGUAGE (newdecl));
1376 if (DECL_LANG_SPECIFIC (olddecl) && DECL_USE_TEMPLATE (olddecl))
1378 else if (TREE_CODE (olddecl) == FUNCTION_DECL)
1380 tree t1 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1381 tree t2 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
1382 int i = 1;
1384 if (TREE_CODE (TREE_TYPE (newdecl)) == METHOD_TYPE)
1385 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2);
1387 for (; t1 && t1 != void_list_node;
1388 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2), i++)
1389 if (TREE_PURPOSE (t1) && TREE_PURPOSE (t2))
1391 if (1 == simple_cst_equal (TREE_PURPOSE (t1),
1392 TREE_PURPOSE (t2)))
1394 pedwarn ("default argument given for parameter %d of %q#D",
1395 i, newdecl);
1396 cp_pedwarn_at ("after previous specification in %q#D",
1397 olddecl);
1399 else
1401 error ("default argument given for parameter %d of %q#D",
1402 i, newdecl);
1403 cp_error_at ("after previous specification in %q#D",
1404 olddecl);
1408 if (DECL_DECLARED_INLINE_P (newdecl)
1409 && ! DECL_DECLARED_INLINE_P (olddecl)
1410 && TREE_ADDRESSABLE (olddecl) && warn_inline)
1412 warning (0, "%q#D was used before it was declared inline", newdecl);
1413 warning (0, "%Jprevious non-inline declaration here", olddecl);
1418 /* Do not merge an implicit typedef with an explicit one. In:
1420 class A;
1422 typedef class A A __attribute__ ((foo));
1424 the attribute should apply only to the typedef. */
1425 if (TREE_CODE (olddecl) == TYPE_DECL
1426 && (DECL_IMPLICIT_TYPEDEF_P (olddecl)
1427 || DECL_IMPLICIT_TYPEDEF_P (newdecl)))
1428 return NULL_TREE;
1430 /* If new decl is `static' and an `extern' was seen previously,
1431 warn about it. */
1432 warn_extern_redeclared_static (newdecl, olddecl);
1434 /* We have committed to returning 1 at this point. */
1435 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1437 /* Now that functions must hold information normally held
1438 by field decls, there is extra work to do so that
1439 declaration information does not get destroyed during
1440 definition. */
1441 if (DECL_VINDEX (olddecl))
1442 DECL_VINDEX (newdecl) = DECL_VINDEX (olddecl);
1443 if (DECL_CONTEXT (olddecl))
1444 DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
1445 DECL_STATIC_CONSTRUCTOR (newdecl) |= DECL_STATIC_CONSTRUCTOR (olddecl);
1446 DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
1447 DECL_PURE_VIRTUAL_P (newdecl) |= DECL_PURE_VIRTUAL_P (olddecl);
1448 DECL_VIRTUAL_P (newdecl) |= DECL_VIRTUAL_P (olddecl);
1449 DECL_THIS_STATIC (newdecl) |= DECL_THIS_STATIC (olddecl);
1450 if (DECL_OVERLOADED_OPERATOR_P (olddecl) != ERROR_MARK)
1451 SET_OVERLOADED_OPERATOR_CODE
1452 (newdecl, DECL_OVERLOADED_OPERATOR_P (olddecl));
1453 new_defines_function = DECL_INITIAL (newdecl) != NULL_TREE;
1455 /* Optionally warn about more than one declaration for the same
1456 name, but don't warn about a function declaration followed by a
1457 definition. */
1458 if (warn_redundant_decls && ! DECL_ARTIFICIAL (olddecl)
1459 && !(new_defines_function && DECL_INITIAL (olddecl) == NULL_TREE)
1460 /* Don't warn about extern decl followed by definition. */
1461 && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl))
1462 /* Don't warn about friends, let add_friend take care of it. */
1463 && ! (DECL_FRIEND_P (newdecl) || DECL_FRIEND_P (olddecl)))
1465 warning (0, "redundant redeclaration of %qD in same scope", newdecl);
1466 cp_warning_at ("previous declaration of %qD", olddecl);
1470 /* Deal with C++: must preserve virtual function table size. */
1471 if (TREE_CODE (olddecl) == TYPE_DECL)
1473 tree newtype = TREE_TYPE (newdecl);
1474 tree oldtype = TREE_TYPE (olddecl);
1476 if (newtype != error_mark_node && oldtype != error_mark_node
1477 && TYPE_LANG_SPECIFIC (newtype) && TYPE_LANG_SPECIFIC (oldtype))
1478 CLASSTYPE_FRIEND_CLASSES (newtype)
1479 = CLASSTYPE_FRIEND_CLASSES (oldtype);
1481 DECL_ORIGINAL_TYPE (newdecl) = DECL_ORIGINAL_TYPE (olddecl);
1484 /* Copy all the DECL_... slots specified in the new decl
1485 except for any that we copy here from the old type. */
1486 DECL_ATTRIBUTES (newdecl)
1487 = (*targetm.merge_decl_attributes) (olddecl, newdecl);
1489 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1491 TREE_TYPE (olddecl) = TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl));
1492 DECL_TEMPLATE_SPECIALIZATIONS (olddecl)
1493 = chainon (DECL_TEMPLATE_SPECIALIZATIONS (olddecl),
1494 DECL_TEMPLATE_SPECIALIZATIONS (newdecl));
1496 /* If the new declaration is a definition, update the file and
1497 line information on the declaration. */
1498 if (DECL_INITIAL (DECL_TEMPLATE_RESULT (olddecl)) == NULL_TREE
1499 && DECL_INITIAL (DECL_TEMPLATE_RESULT (newdecl)) != NULL_TREE)
1501 DECL_SOURCE_LOCATION (olddecl)
1502 = DECL_SOURCE_LOCATION (DECL_TEMPLATE_RESULT (olddecl))
1503 = DECL_SOURCE_LOCATION (newdecl);
1504 if (DECL_FUNCTION_TEMPLATE_P (newdecl))
1505 DECL_ARGUMENTS (DECL_TEMPLATE_RESULT (olddecl))
1506 = DECL_ARGUMENTS (DECL_TEMPLATE_RESULT (newdecl));
1509 if (DECL_FUNCTION_TEMPLATE_P (newdecl))
1511 DECL_INLINE (DECL_TEMPLATE_RESULT (olddecl))
1512 |= DECL_INLINE (DECL_TEMPLATE_RESULT (newdecl));
1513 DECL_DECLARED_INLINE_P (DECL_TEMPLATE_RESULT (olddecl))
1514 |= DECL_DECLARED_INLINE_P (DECL_TEMPLATE_RESULT (newdecl));
1517 return olddecl;
1520 if (types_match)
1522 /* Automatically handles default parameters. */
1523 tree oldtype = TREE_TYPE (olddecl);
1524 tree newtype;
1526 /* Merge the data types specified in the two decls. */
1527 newtype = merge_types (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
1529 /* If merge_types produces a non-typedef type, just use the old type. */
1530 if (TREE_CODE (newdecl) == TYPE_DECL
1531 && newtype == DECL_ORIGINAL_TYPE (newdecl))
1532 newtype = oldtype;
1534 if (TREE_CODE (newdecl) == VAR_DECL)
1536 DECL_THIS_EXTERN (newdecl) |= DECL_THIS_EXTERN (olddecl);
1537 DECL_INITIALIZED_P (newdecl) |= DECL_INITIALIZED_P (olddecl);
1538 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (newdecl)
1539 |= DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (olddecl);
1542 /* Do this after calling `merge_types' so that default
1543 parameters don't confuse us. */
1544 else if (TREE_CODE (newdecl) == FUNCTION_DECL
1545 && (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl))
1546 != TYPE_RAISES_EXCEPTIONS (TREE_TYPE (olddecl))))
1548 TREE_TYPE (newdecl) = build_exception_variant (newtype,
1549 TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl)));
1550 TREE_TYPE (olddecl) = build_exception_variant (newtype,
1551 TYPE_RAISES_EXCEPTIONS (oldtype));
1553 if ((pedantic || ! DECL_IN_SYSTEM_HEADER (olddecl))
1554 && ! DECL_IS_BUILTIN (olddecl)
1555 && flag_exceptions
1556 && !comp_except_specs (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl)),
1557 TYPE_RAISES_EXCEPTIONS (TREE_TYPE (olddecl)), 1))
1559 error ("declaration of %qF throws different exceptions",
1560 newdecl);
1561 cp_error_at ("than previous declaration %qF", olddecl);
1564 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
1566 /* Lay the type out, unless already done. */
1567 if (! same_type_p (newtype, oldtype)
1568 && TREE_TYPE (newdecl) != error_mark_node
1569 && !(processing_template_decl && uses_template_parms (newdecl)))
1570 layout_type (TREE_TYPE (newdecl));
1572 if ((TREE_CODE (newdecl) == VAR_DECL
1573 || TREE_CODE (newdecl) == PARM_DECL
1574 || TREE_CODE (newdecl) == RESULT_DECL
1575 || TREE_CODE (newdecl) == FIELD_DECL
1576 || TREE_CODE (newdecl) == TYPE_DECL)
1577 && !(processing_template_decl && uses_template_parms (newdecl)))
1578 layout_decl (newdecl, 0);
1580 /* Merge the type qualifiers. */
1581 if (TREE_READONLY (newdecl))
1582 TREE_READONLY (olddecl) = 1;
1583 if (TREE_THIS_VOLATILE (newdecl))
1584 TREE_THIS_VOLATILE (olddecl) = 1;
1585 if (TREE_NOTHROW (newdecl))
1586 TREE_NOTHROW (olddecl) = 1;
1588 /* Merge deprecatedness. */
1589 if (TREE_DEPRECATED (newdecl))
1590 TREE_DEPRECATED (olddecl) = 1;
1592 /* Merge the initialization information. */
1593 if (DECL_INITIAL (newdecl) == NULL_TREE
1594 && DECL_INITIAL (olddecl) != NULL_TREE)
1596 DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
1597 DECL_SOURCE_LOCATION (newdecl) = DECL_SOURCE_LOCATION (olddecl);
1598 if (CAN_HAVE_FULL_LANG_DECL_P (newdecl)
1599 && DECL_LANG_SPECIFIC (newdecl)
1600 && DECL_LANG_SPECIFIC (olddecl))
1602 DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
1603 DECL_STRUCT_FUNCTION (newdecl) = DECL_STRUCT_FUNCTION (olddecl);
1607 /* Merge the section attribute.
1608 We want to issue an error if the sections conflict but that must be
1609 done later in decl_attributes since we are called before attributes
1610 are assigned. */
1611 if (DECL_SECTION_NAME (newdecl) == NULL_TREE)
1612 DECL_SECTION_NAME (newdecl) = DECL_SECTION_NAME (olddecl);
1614 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1616 DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (newdecl)
1617 |= DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (olddecl);
1618 DECL_NO_LIMIT_STACK (newdecl) |= DECL_NO_LIMIT_STACK (olddecl);
1619 TREE_THIS_VOLATILE (newdecl) |= TREE_THIS_VOLATILE (olddecl);
1620 TREE_READONLY (newdecl) |= TREE_READONLY (olddecl);
1621 TREE_NOTHROW (newdecl) |= TREE_NOTHROW (olddecl);
1622 DECL_IS_MALLOC (newdecl) |= DECL_IS_MALLOC (olddecl);
1623 DECL_IS_PURE (newdecl) |= DECL_IS_PURE (olddecl);
1624 /* Keep the old RTL. */
1625 COPY_DECL_RTL (olddecl, newdecl);
1627 else if (TREE_CODE (newdecl) == VAR_DECL
1628 && (DECL_SIZE (olddecl) || !DECL_SIZE (newdecl)))
1630 /* Keep the old RTL. We cannot keep the old RTL if the old
1631 declaration was for an incomplete object and the new
1632 declaration is not since many attributes of the RTL will
1633 change. */
1634 COPY_DECL_RTL (olddecl, newdecl);
1637 /* If cannot merge, then use the new type and qualifiers,
1638 and don't preserve the old rtl. */
1639 else
1641 /* Clean out any memory we had of the old declaration. */
1642 tree oldstatic = value_member (olddecl, static_aggregates);
1643 if (oldstatic)
1644 TREE_VALUE (oldstatic) = error_mark_node;
1646 TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
1647 TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
1648 TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
1649 TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
1652 /* Merge the storage class information. */
1653 merge_weak (newdecl, olddecl);
1655 DECL_ONE_ONLY (newdecl) |= DECL_ONE_ONLY (olddecl);
1656 DECL_DEFER_OUTPUT (newdecl) |= DECL_DEFER_OUTPUT (olddecl);
1657 TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
1658 TREE_STATIC (olddecl) = TREE_STATIC (newdecl) |= TREE_STATIC (olddecl);
1659 if (! DECL_EXTERNAL (olddecl))
1660 DECL_EXTERNAL (newdecl) = 0;
1662 if (DECL_LANG_SPECIFIC (newdecl) && DECL_LANG_SPECIFIC (olddecl))
1664 DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl);
1665 DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl);
1666 DECL_COMDAT (newdecl) |= DECL_COMDAT (olddecl);
1667 DECL_TEMPLATE_INSTANTIATED (newdecl)
1668 |= DECL_TEMPLATE_INSTANTIATED (olddecl);
1670 /* If the OLDDECL is an instantiation and/or specialization,
1671 then the NEWDECL must be too. But, it may not yet be marked
1672 as such if the caller has created NEWDECL, but has not yet
1673 figured out that it is a redeclaration. */
1674 if (!DECL_USE_TEMPLATE (newdecl))
1675 DECL_USE_TEMPLATE (newdecl) = DECL_USE_TEMPLATE (olddecl);
1677 /* Don't really know how much of the language-specific
1678 values we should copy from old to new. */
1679 DECL_IN_AGGR_P (newdecl) = DECL_IN_AGGR_P (olddecl);
1680 DECL_LANG_SPECIFIC (newdecl)->decl_flags.u2 =
1681 DECL_LANG_SPECIFIC (olddecl)->decl_flags.u2;
1682 DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl);
1683 DECL_REPO_AVAILABLE_P (newdecl) = DECL_REPO_AVAILABLE_P (olddecl);
1684 DECL_TEMPLATE_INFO (newdecl) = DECL_TEMPLATE_INFO (olddecl);
1685 DECL_INITIALIZED_IN_CLASS_P (newdecl)
1686 |= DECL_INITIALIZED_IN_CLASS_P (olddecl);
1687 olddecl_friend = DECL_FRIEND_P (olddecl);
1689 /* Only functions have DECL_BEFRIENDING_CLASSES. */
1690 if (TREE_CODE (newdecl) == FUNCTION_DECL
1691 || DECL_FUNCTION_TEMPLATE_P (newdecl))
1693 DECL_BEFRIENDING_CLASSES (newdecl)
1694 = chainon (DECL_BEFRIENDING_CLASSES (newdecl),
1695 DECL_BEFRIENDING_CLASSES (olddecl));
1696 /* DECL_THUNKS is only valid for virtual functions,
1697 otherwise it is a DECL_FRIEND_CONTEXT. */
1698 if (DECL_VIRTUAL_P (newdecl))
1699 DECL_THUNKS (newdecl) = DECL_THUNKS (olddecl);
1703 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1705 if (DECL_TEMPLATE_INSTANTIATION (olddecl)
1706 && !DECL_TEMPLATE_INSTANTIATION (newdecl))
1708 /* If newdecl is not a specialization, then it is not a
1709 template-related function at all. And that means that we
1710 should have exited above, returning 0. */
1711 gcc_assert (DECL_TEMPLATE_SPECIALIZATION (newdecl));
1713 if (TREE_USED (olddecl))
1714 /* From [temp.expl.spec]:
1716 If a template, a member template or the member of a class
1717 template is explicitly specialized then that
1718 specialization shall be declared before the first use of
1719 that specialization that would cause an implicit
1720 instantiation to take place, in every translation unit in
1721 which such a use occurs. */
1722 error ("explicit specialization of %qD after first use",
1723 olddecl);
1725 SET_DECL_TEMPLATE_SPECIALIZATION (olddecl);
1727 /* [temp.expl.spec/14] We don't inline explicit specialization
1728 just because the primary template says so. */
1730 else
1732 if (DECL_PENDING_INLINE_INFO (newdecl) == 0)
1733 DECL_PENDING_INLINE_INFO (newdecl) = DECL_PENDING_INLINE_INFO (olddecl);
1735 DECL_DECLARED_INLINE_P (newdecl) |= DECL_DECLARED_INLINE_P (olddecl);
1737 /* If either decl says `inline', this fn is inline, unless
1738 its definition was passed already. */
1739 if (DECL_INLINE (newdecl) && DECL_INITIAL (olddecl) == NULL_TREE)
1740 DECL_INLINE (olddecl) = 1;
1741 DECL_INLINE (newdecl) = DECL_INLINE (olddecl);
1743 DECL_UNINLINABLE (newdecl) = DECL_UNINLINABLE (olddecl)
1744 = (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl));
1747 /* Preserve abstractness on cloned [cd]tors. */
1748 DECL_ABSTRACT (newdecl) = DECL_ABSTRACT (olddecl);
1750 if (! types_match)
1752 SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
1753 COPY_DECL_ASSEMBLER_NAME (newdecl, olddecl);
1754 COPY_DECL_RTL (newdecl, olddecl);
1756 if (! types_match || new_defines_function)
1758 /* These need to be copied so that the names are available.
1759 Note that if the types do match, we'll preserve inline
1760 info and other bits, but if not, we won't. */
1761 DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
1762 DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
1764 if (new_defines_function)
1765 /* If defining a function declared with other language
1766 linkage, use the previously declared language linkage. */
1767 SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
1768 else if (types_match)
1770 /* If redeclaring a builtin function, and not a definition,
1771 it stays built in. */
1772 if (DECL_BUILT_IN (olddecl))
1774 DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
1775 DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
1776 /* If we're keeping the built-in definition, keep the rtl,
1777 regardless of declaration matches. */
1778 COPY_DECL_RTL (olddecl, newdecl);
1781 DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
1782 /* Don't clear out the arguments if we're redefining a function. */
1783 if (DECL_ARGUMENTS (olddecl))
1784 DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
1787 else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
1788 NAMESPACE_LEVEL (newdecl) = NAMESPACE_LEVEL (olddecl);
1790 /* Now preserve various other info from the definition. */
1791 TREE_ADDRESSABLE (newdecl) = TREE_ADDRESSABLE (olddecl);
1792 TREE_ASM_WRITTEN (newdecl) = TREE_ASM_WRITTEN (olddecl);
1793 DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
1794 COPY_DECL_ASSEMBLER_NAME (olddecl, newdecl);
1796 /* Warn about conflicting visibility specifications. */
1797 if (DECL_VISIBILITY_SPECIFIED (olddecl)
1798 && DECL_VISIBILITY_SPECIFIED (newdecl)
1799 && DECL_VISIBILITY (newdecl) != DECL_VISIBILITY (olddecl))
1801 warning (OPT_Wattributes, "%J%qD: visibility attribute ignored "
1802 "because it", newdecl, newdecl);
1803 warning (OPT_Wattributes, "%Jconflicts with previous "
1804 "declaration here", olddecl);
1806 /* Choose the declaration which specified visibility. */
1807 if (DECL_VISIBILITY_SPECIFIED (olddecl))
1809 DECL_VISIBILITY (newdecl) = DECL_VISIBILITY (olddecl);
1810 DECL_VISIBILITY_SPECIFIED (newdecl) = 1;
1813 /* The DECL_LANG_SPECIFIC information in OLDDECL will be replaced
1814 with that from NEWDECL below. */
1815 if (DECL_LANG_SPECIFIC (olddecl))
1817 gcc_assert (DECL_LANG_SPECIFIC (olddecl)
1818 != DECL_LANG_SPECIFIC (newdecl));
1819 ggc_free (DECL_LANG_SPECIFIC (olddecl));
1822 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1824 int function_size;
1826 function_size = sizeof (struct tree_decl);
1828 memcpy ((char *) olddecl + sizeof (struct tree_common),
1829 (char *) newdecl + sizeof (struct tree_common),
1830 function_size - sizeof (struct tree_common));
1832 if (DECL_TEMPLATE_INSTANTIATION (newdecl))
1833 /* If newdecl is a template instantiation, it is possible that
1834 the following sequence of events has occurred:
1836 o A friend function was declared in a class template. The
1837 class template was instantiated.
1839 o The instantiation of the friend declaration was
1840 recorded on the instantiation list, and is newdecl.
1842 o Later, however, instantiate_class_template called pushdecl
1843 on the newdecl to perform name injection. But, pushdecl in
1844 turn called duplicate_decls when it discovered that another
1845 declaration of a global function with the same name already
1846 existed.
1848 o Here, in duplicate_decls, we decided to clobber newdecl.
1850 If we're going to do that, we'd better make sure that
1851 olddecl, and not newdecl, is on the list of
1852 instantiations so that if we try to do the instantiation
1853 again we won't get the clobbered declaration. */
1854 reregister_specialization (newdecl,
1855 DECL_TI_TEMPLATE (newdecl),
1856 olddecl);
1858 else
1860 memcpy ((char *) olddecl + sizeof (struct tree_common),
1861 (char *) newdecl + sizeof (struct tree_common),
1862 sizeof (struct tree_decl) - sizeof (struct tree_common)
1863 + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
1866 DECL_UID (olddecl) = olddecl_uid;
1867 if (olddecl_friend)
1868 DECL_FRIEND_P (olddecl) = 1;
1870 /* NEWDECL contains the merged attribute lists.
1871 Update OLDDECL to be the same. */
1872 DECL_ATTRIBUTES (olddecl) = DECL_ATTRIBUTES (newdecl);
1874 /* If OLDDECL had its DECL_RTL instantiated, re-invoke make_decl_rtl
1875 so that encode_section_info has a chance to look at the new decl
1876 flags and attributes. */
1877 if (DECL_RTL_SET_P (olddecl)
1878 && (TREE_CODE (olddecl) == FUNCTION_DECL
1879 || (TREE_CODE (olddecl) == VAR_DECL
1880 && TREE_STATIC (olddecl))))
1881 make_decl_rtl (olddecl);
1883 /* The NEWDECL will no longer be needed. Because every out-of-class
1884 declaration of a member results in a call to duplicate_decls,
1885 freeing these nodes represents in a significant savings. */
1886 ggc_free (newdecl);
1888 return olddecl;
1891 /* Return zero if the declaration NEWDECL is valid
1892 when the declaration OLDDECL (assumed to be for the same name)
1893 has already been seen.
1894 Otherwise return an error message format string with a %s
1895 where the identifier should go. */
1897 static const char *
1898 redeclaration_error_message (tree newdecl, tree olddecl)
1900 if (TREE_CODE (newdecl) == TYPE_DECL)
1902 /* Because C++ can put things into name space for free,
1903 constructs like "typedef struct foo { ... } foo"
1904 would look like an erroneous redeclaration. */
1905 if (same_type_p (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
1906 return 0;
1907 else
1908 return "redefinition of %q#D";
1910 else if (TREE_CODE (newdecl) == FUNCTION_DECL)
1912 /* If this is a pure function, its olddecl will actually be
1913 the original initialization to `0' (which we force to call
1914 abort()). Don't complain about redefinition in this case. */
1915 if (DECL_LANG_SPECIFIC (olddecl) && DECL_PURE_VIRTUAL_P (olddecl)
1916 && DECL_INITIAL (olddecl) == NULL_TREE)
1917 return 0;
1919 /* If both functions come from different namespaces, this is not
1920 a redeclaration - this is a conflict with a used function. */
1921 if (DECL_NAMESPACE_SCOPE_P (olddecl)
1922 && DECL_CONTEXT (olddecl) != DECL_CONTEXT (newdecl)
1923 && ! decls_match (olddecl, newdecl))
1924 return "%qD conflicts with used function";
1926 /* We'll complain about linkage mismatches in
1927 warn_extern_redeclared_static. */
1929 /* Defining the same name twice is no good. */
1930 if (DECL_INITIAL (olddecl) != NULL_TREE
1931 && DECL_INITIAL (newdecl) != NULL_TREE)
1933 if (DECL_NAME (olddecl) == NULL_TREE)
1934 return "%q#D not declared in class";
1935 else
1936 return "redefinition of %q#D";
1938 return 0;
1940 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1942 tree nt, ot;
1944 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
1946 if (COMPLETE_TYPE_P (TREE_TYPE (newdecl))
1947 && COMPLETE_TYPE_P (TREE_TYPE (olddecl)))
1948 return "redefinition of %q#D";
1949 return NULL;
1952 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != FUNCTION_DECL
1953 || (DECL_TEMPLATE_RESULT (newdecl)
1954 == DECL_TEMPLATE_RESULT (olddecl)))
1955 return NULL;
1957 nt = DECL_TEMPLATE_RESULT (newdecl);
1958 if (DECL_TEMPLATE_INFO (nt))
1959 nt = DECL_TEMPLATE_RESULT (template_for_substitution (nt));
1960 ot = DECL_TEMPLATE_RESULT (olddecl);
1961 if (DECL_TEMPLATE_INFO (ot))
1962 ot = DECL_TEMPLATE_RESULT (template_for_substitution (ot));
1963 if (DECL_INITIAL (nt) && DECL_INITIAL (ot))
1964 return "redefinition of %q#D";
1966 return NULL;
1968 else if (toplevel_bindings_p () || DECL_NAMESPACE_SCOPE_P (newdecl))
1970 /* Objects declared at top level: */
1971 /* If at least one is a reference, it's ok. */
1972 if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl))
1973 return 0;
1974 /* Reject two definitions. */
1975 return "redefinition of %q#D";
1977 else
1979 /* Objects declared with block scope: */
1980 /* Reject two definitions, and reject a definition
1981 together with an external reference. */
1982 if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl)))
1983 return "redeclaration of %q#D";
1984 return 0;
1988 /* Create a new label, named ID. */
1990 static tree
1991 make_label_decl (tree id, int local_p)
1993 tree decl;
1995 decl = build_decl (LABEL_DECL, id, void_type_node);
1997 DECL_CONTEXT (decl) = current_function_decl;
1998 DECL_MODE (decl) = VOIDmode;
1999 C_DECLARED_LABEL_FLAG (decl) = local_p;
2001 /* Say where one reference is to the label, for the sake of the
2002 error if it is not defined. */
2003 DECL_SOURCE_LOCATION (decl) = input_location;
2005 /* Record the fact that this identifier is bound to this label. */
2006 SET_IDENTIFIER_LABEL_VALUE (id, decl);
2008 return decl;
2011 /* Record this label on the list of used labels so that we can check
2012 at the end of the function to see whether or not the label was
2013 actually defined, and so we can check when the label is defined whether
2014 this use is valid. */
2016 static void
2017 use_label (tree decl)
2019 if (named_label_uses == NULL
2020 || named_label_uses->names_in_scope != current_binding_level->names
2021 || named_label_uses->label_decl != decl)
2023 struct named_label_use_list *new_ent;
2024 new_ent = GGC_NEW (struct named_label_use_list);
2025 new_ent->label_decl = decl;
2026 new_ent->names_in_scope = current_binding_level->names;
2027 new_ent->binding_level = current_binding_level;
2028 new_ent->o_goto_locus = input_location;
2029 new_ent->next = named_label_uses;
2030 named_label_uses = new_ent;
2034 /* Look for a label named ID in the current function. If one cannot
2035 be found, create one. (We keep track of used, but undefined,
2036 labels, and complain about them at the end of a function.) */
2038 tree
2039 lookup_label (tree id)
2041 tree decl;
2042 struct named_label_list *ent;
2044 timevar_push (TV_NAME_LOOKUP);
2045 /* You can't use labels at global scope. */
2046 if (current_function_decl == NULL_TREE)
2048 error ("label %qE referenced outside of any function", id);
2049 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, NULL_TREE);
2052 /* See if we've already got this label. */
2053 decl = IDENTIFIER_LABEL_VALUE (id);
2054 if (decl != NULL_TREE && DECL_CONTEXT (decl) == current_function_decl)
2055 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, decl);
2057 /* Record this label on the list of labels used in this function.
2058 We do this before calling make_label_decl so that we get the
2059 IDENTIFIER_LABEL_VALUE before the new label is declared. */
2060 ent = GGC_CNEW (struct named_label_list);
2061 ent->old_value = IDENTIFIER_LABEL_VALUE (id);
2062 ent->next = named_labels;
2063 named_labels = ent;
2065 /* We need a new label. */
2066 decl = make_label_decl (id, /*local_p=*/0);
2068 /* Now fill in the information we didn't have before. */
2069 ent->label_decl = decl;
2071 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, decl);
2074 /* Declare a local label named ID. */
2076 tree
2077 declare_local_label (tree id)
2079 tree decl;
2081 /* Add a new entry to the SHADOWED_LABELS list so that when we leave
2082 this scope we can restore the old value of
2083 IDENTIFIER_TYPE_VALUE. */
2084 current_binding_level->shadowed_labels
2085 = tree_cons (IDENTIFIER_LABEL_VALUE (id), NULL_TREE,
2086 current_binding_level->shadowed_labels);
2087 /* Look for the label. */
2088 decl = make_label_decl (id, /*local_p=*/1);
2089 /* Now fill in the information we didn't have before. */
2090 TREE_VALUE (current_binding_level->shadowed_labels) = decl;
2092 return decl;
2095 /* Returns nonzero if it is ill-formed to jump past the declaration of
2096 DECL. Returns 2 if it's also a real problem. */
2098 static int
2099 decl_jump_unsafe (tree decl)
2101 if (TREE_CODE (decl) != VAR_DECL || TREE_STATIC (decl))
2102 return 0;
2104 if (DECL_INITIAL (decl) == NULL_TREE
2105 && pod_type_p (TREE_TYPE (decl)))
2106 return 0;
2108 /* This is really only important if we're crossing an initialization.
2109 The POD stuff is just pedantry; why should it matter if the class
2110 contains a field of pointer to member type? */
2111 if (DECL_INITIAL (decl)
2112 || (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))))
2113 return 2;
2114 return 1;
2117 /* Check that a single previously seen jump to a newly defined label
2118 is OK. DECL is the LABEL_DECL or 0; LEVEL is the binding_level for
2119 the jump context; NAMES are the names in scope in LEVEL at the jump
2120 context; FILE and LINE are the source position of the jump or 0. */
2122 static void
2123 check_previous_goto_1 (tree decl,
2124 struct cp_binding_level* level,
2125 tree names, const location_t *locus)
2127 int identified = 0;
2128 int saw_eh = 0;
2129 struct cp_binding_level *b = current_binding_level;
2130 for (; b; b = b->level_chain)
2132 tree new_decls = b->names;
2133 tree old_decls = (b == level ? names : NULL_TREE);
2134 for (; new_decls != old_decls;
2135 new_decls = TREE_CHAIN (new_decls))
2137 int problem = decl_jump_unsafe (new_decls);
2138 if (! problem)
2139 continue;
2141 if (! identified)
2143 if (decl)
2144 pedwarn ("jump to label %qD", decl);
2145 else
2146 pedwarn ("jump to case label");
2148 if (locus)
2149 pedwarn ("%H from here", locus);
2150 identified = 1;
2153 if (problem > 1)
2154 cp_error_at (" crosses initialization of %q#D",
2155 new_decls);
2156 else
2157 cp_pedwarn_at (" enters scope of non-POD %q#D",
2158 new_decls);
2161 if (b == level)
2162 break;
2163 if ((b->kind == sk_try || b->kind == sk_catch) && ! saw_eh)
2165 if (! identified)
2167 if (decl)
2168 pedwarn ("jump to label %qD", decl);
2169 else
2170 pedwarn ("jump to case label");
2172 if (locus)
2173 pedwarn ("%H from here", locus);
2174 identified = 1;
2176 if (b->kind == sk_try)
2177 error (" enters try block");
2178 else
2179 error (" enters catch block");
2180 saw_eh = 1;
2185 static void
2186 check_previous_goto (struct named_label_use_list* use)
2188 check_previous_goto_1 (use->label_decl, use->binding_level,
2189 use->names_in_scope, &use->o_goto_locus);
2192 static void
2193 check_switch_goto (struct cp_binding_level* level)
2195 check_previous_goto_1 (NULL_TREE, level, level->names, NULL);
2198 /* Check that any previously seen jumps to a newly defined label DECL
2199 are OK. Called by define_label. */
2201 static void
2202 check_previous_gotos (tree decl)
2204 struct named_label_use_list **usep;
2206 if (! TREE_USED (decl))
2207 return;
2209 for (usep = &named_label_uses; *usep; )
2211 struct named_label_use_list *use = *usep;
2212 if (use->label_decl == decl)
2214 check_previous_goto (use);
2215 *usep = use->next;
2217 else
2218 usep = &(use->next);
2222 /* Check that a new jump to a label DECL is OK. Called by
2223 finish_goto_stmt. */
2225 void
2226 check_goto (tree decl)
2228 int identified = 0;
2229 tree bad;
2230 struct named_label_list *lab;
2232 /* We can't know where a computed goto is jumping. So we assume
2233 that it's OK. */
2234 if (! DECL_P (decl))
2235 return;
2237 /* If the label hasn't been defined yet, defer checking. */
2238 if (! DECL_INITIAL (decl))
2240 use_label (decl);
2241 return;
2244 for (lab = named_labels; lab; lab = lab->next)
2245 if (decl == lab->label_decl)
2246 break;
2248 /* If the label is not on named_labels it's a gcc local label, so
2249 it must be in an outer scope, so jumping to it is always OK. */
2250 if (lab == 0)
2251 return;
2253 if ((lab->in_try_scope || lab->in_catch_scope || lab->bad_decls)
2254 && !identified)
2256 cp_pedwarn_at ("jump to label %qD", decl);
2257 pedwarn (" from here");
2258 identified = 1;
2261 for (bad = lab->bad_decls; bad; bad = TREE_CHAIN (bad))
2263 tree b = TREE_VALUE (bad);
2264 int u = decl_jump_unsafe (b);
2266 if (u > 1 && DECL_ARTIFICIAL (b))
2267 /* Can't skip init of __exception_info. */
2268 error ("%J enters catch block", b);
2269 else if (u > 1)
2270 cp_error_at (" skips initialization of %q#D", b);
2271 else
2272 cp_pedwarn_at (" enters scope of non-POD %q#D", b);
2275 if (lab->in_try_scope)
2276 error (" enters try block");
2277 else if (lab->in_catch_scope)
2278 error (" enters catch block");
2281 /* Define a label, specifying the location in the source file.
2282 Return the LABEL_DECL node for the label. */
2284 tree
2285 define_label (location_t location, tree name)
2287 tree decl = lookup_label (name);
2288 struct named_label_list *ent;
2289 struct cp_binding_level *p;
2291 timevar_push (TV_NAME_LOOKUP);
2292 for (ent = named_labels; ent; ent = ent->next)
2293 if (ent->label_decl == decl)
2294 break;
2296 /* After labels, make any new cleanups in the function go into their
2297 own new (temporary) binding contour. */
2298 for (p = current_binding_level;
2299 p->kind != sk_function_parms;
2300 p = p->level_chain)
2301 p->more_cleanups_ok = 0;
2303 if (name == get_identifier ("wchar_t"))
2304 pedwarn ("label named wchar_t");
2306 if (DECL_INITIAL (decl) != NULL_TREE)
2307 error ("duplicate label %qD", decl);
2308 else
2310 /* Mark label as having been defined. */
2311 DECL_INITIAL (decl) = error_mark_node;
2312 /* Say where in the source. */
2313 DECL_SOURCE_LOCATION (decl) = location;
2314 if (ent)
2316 ent->names_in_scope = current_binding_level->names;
2317 ent->binding_level = current_binding_level;
2319 check_previous_gotos (decl);
2322 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, decl);
2325 struct cp_switch
2327 struct cp_binding_level *level;
2328 struct cp_switch *next;
2329 /* The SWITCH_STMT being built. */
2330 tree switch_stmt;
2331 /* A splay-tree mapping the low element of a case range to the high
2332 element, or NULL_TREE if there is no high element. Used to
2333 determine whether or not a new case label duplicates an old case
2334 label. We need a tree, rather than simply a hash table, because
2335 of the GNU case range extension. */
2336 splay_tree cases;
2339 /* A stack of the currently active switch statements. The innermost
2340 switch statement is on the top of the stack. There is no need to
2341 mark the stack for garbage collection because it is only active
2342 during the processing of the body of a function, and we never
2343 collect at that point. */
2345 static struct cp_switch *switch_stack;
2347 /* Called right after a switch-statement condition is parsed.
2348 SWITCH_STMT is the switch statement being parsed. */
2350 void
2351 push_switch (tree switch_stmt)
2353 struct cp_switch *p = xmalloc (sizeof (struct cp_switch));
2354 p->level = current_binding_level;
2355 p->next = switch_stack;
2356 p->switch_stmt = switch_stmt;
2357 p->cases = splay_tree_new (case_compare, NULL, NULL);
2358 switch_stack = p;
2361 void
2362 pop_switch (void)
2364 struct cp_switch *cs = switch_stack;
2365 location_t switch_location;
2367 /* Emit warnings as needed. */
2368 if (EXPR_HAS_LOCATION (cs->switch_stmt))
2369 switch_location = EXPR_LOCATION (cs->switch_stmt);
2370 else
2371 switch_location = input_location;
2372 c_do_switch_warnings (cs->cases, switch_location,
2373 SWITCH_STMT_TYPE (cs->switch_stmt),
2374 SWITCH_STMT_COND (cs->switch_stmt));
2376 splay_tree_delete (cs->cases);
2377 switch_stack = switch_stack->next;
2378 free (cs);
2381 /* Note that we've seen a definition of a case label, and complain if this
2382 is a bad place for one. */
2384 tree
2385 finish_case_label (tree low_value, tree high_value)
2387 tree cond, r;
2388 struct cp_binding_level *p;
2390 if (processing_template_decl)
2392 tree label;
2394 /* For templates, just add the case label; we'll do semantic
2395 analysis at instantiation-time. */
2396 label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
2397 return add_stmt (build_case_label (low_value, high_value, label));
2400 /* Find the condition on which this switch statement depends. */
2401 cond = SWITCH_STMT_COND (switch_stack->switch_stmt);
2402 if (cond && TREE_CODE (cond) == TREE_LIST)
2403 cond = TREE_VALUE (cond);
2405 r = c_add_case_label (switch_stack->cases, cond, TREE_TYPE (cond),
2406 low_value, high_value);
2408 check_switch_goto (switch_stack->level);
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 return r;
2420 /* Hash a TYPENAME_TYPE. K is really of type `tree'. */
2422 static hashval_t
2423 typename_hash (const void* k)
2425 hashval_t hash;
2426 tree t = (tree) k;
2428 hash = (htab_hash_pointer (TYPE_CONTEXT (t))
2429 ^ htab_hash_pointer (DECL_NAME (TYPE_NAME (t))));
2431 return hash;
2434 typedef struct typename_info {
2435 tree scope;
2436 tree name;
2437 tree template_id;
2438 bool enum_p;
2439 bool class_p;
2440 } typename_info;
2442 /* Compare two TYPENAME_TYPEs. K1 and K2 are really of type `tree'. */
2444 static int
2445 typename_compare (const void * k1, const void * k2)
2447 tree t1;
2448 const typename_info *t2;
2450 t1 = (tree) k1;
2451 t2 = (const typename_info *) k2;
2453 return (DECL_NAME (TYPE_NAME (t1)) == t2->name
2454 && TYPE_CONTEXT (t1) == t2->scope
2455 && TYPENAME_TYPE_FULLNAME (t1) == t2->template_id
2456 && TYPENAME_IS_ENUM_P (t1) == t2->enum_p
2457 && TYPENAME_IS_CLASS_P (t1) == t2->class_p);
2460 /* Build a TYPENAME_TYPE. If the type is `typename T::t', CONTEXT is
2461 the type of `T', NAME is the IDENTIFIER_NODE for `t'.
2463 Returns the new TYPENAME_TYPE. */
2465 static GTY ((param_is (union tree_node))) htab_t typename_htab;
2467 static tree
2468 build_typename_type (tree context, tree name, tree fullname,
2469 enum tag_types tag_type)
2471 tree t;
2472 tree d;
2473 typename_info ti;
2474 void **e;
2475 hashval_t hash;
2477 if (typename_htab == NULL)
2478 typename_htab = htab_create_ggc (61, &typename_hash,
2479 &typename_compare, NULL);
2481 ti.scope = FROB_CONTEXT (context);
2482 ti.name = name;
2483 ti.template_id = fullname;
2484 ti.enum_p = tag_type == enum_type;
2485 ti.class_p = (tag_type == class_type
2486 || tag_type == record_type
2487 || tag_type == union_type);
2488 hash = (htab_hash_pointer (ti.scope)
2489 ^ htab_hash_pointer (ti.name));
2491 /* See if we already have this type. */
2492 e = htab_find_slot_with_hash (typename_htab, &ti, hash, INSERT);
2493 if (*e)
2494 t = (tree) *e;
2495 else
2497 /* Build the TYPENAME_TYPE. */
2498 t = make_aggr_type (TYPENAME_TYPE);
2499 TYPE_CONTEXT (t) = ti.scope;
2500 TYPENAME_TYPE_FULLNAME (t) = ti.template_id;
2501 TYPENAME_IS_ENUM_P (t) = ti.enum_p;
2502 TYPENAME_IS_CLASS_P (t) = ti.class_p;
2504 /* Build the corresponding TYPE_DECL. */
2505 d = build_decl (TYPE_DECL, name, t);
2506 TYPE_NAME (TREE_TYPE (d)) = d;
2507 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
2508 DECL_CONTEXT (d) = FROB_CONTEXT (context);
2509 DECL_ARTIFICIAL (d) = 1;
2511 /* Store it in the hash table. */
2512 *e = t;
2515 return t;
2518 /* Resolve `typename CONTEXT::NAME'. TAG_TYPE indicates the tag
2519 provided to name the type. Returns an appropriate type, unless an
2520 error occurs, in which case error_mark_node is returned. If we
2521 locate a non-artificial TYPE_DECL and TF_KEEP_TYPE_DECL is set, we
2522 return that, rather than the _TYPE it corresponds to, in other
2523 cases we look through the type decl. If TF_ERROR is set, complain
2524 about errors, otherwise be quiet. */
2526 tree
2527 make_typename_type (tree context, tree name, enum tag_types tag_type,
2528 tsubst_flags_t complain)
2530 tree fullname;
2532 if (name == error_mark_node
2533 || context == NULL_TREE
2534 || context == error_mark_node)
2535 return error_mark_node;
2537 if (TYPE_P (name))
2539 if (!(TYPE_LANG_SPECIFIC (name)
2540 && (CLASSTYPE_IS_TEMPLATE (name)
2541 || CLASSTYPE_USE_TEMPLATE (name))))
2542 name = TYPE_IDENTIFIER (name);
2543 else
2544 /* Create a TEMPLATE_ID_EXPR for the type. */
2545 name = build_nt (TEMPLATE_ID_EXPR,
2546 CLASSTYPE_TI_TEMPLATE (name),
2547 CLASSTYPE_TI_ARGS (name));
2549 else if (TREE_CODE (name) == TYPE_DECL)
2550 name = DECL_NAME (name);
2552 fullname = name;
2554 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
2556 name = TREE_OPERAND (name, 0);
2557 if (TREE_CODE (name) == TEMPLATE_DECL)
2558 name = TREE_OPERAND (fullname, 0) = DECL_NAME (name);
2560 if (TREE_CODE (name) == TEMPLATE_DECL)
2562 error ("%qD used without template parameters", name);
2563 return error_mark_node;
2565 gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
2566 gcc_assert (TYPE_P (context));
2568 if (!dependent_type_p (context)
2569 || currently_open_class (context))
2571 if (TREE_CODE (fullname) == TEMPLATE_ID_EXPR)
2573 tree tmpl = NULL_TREE;
2574 if (IS_AGGR_TYPE (context))
2575 tmpl = lookup_field (context, name, 0, false);
2576 if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
2578 if (complain & tf_error)
2579 error ("no class template named %q#T in %q#T",
2580 name, context);
2581 return error_mark_node;
2584 if (complain & tf_error)
2585 perform_or_defer_access_check (TYPE_BINFO (context), tmpl);
2587 return lookup_template_class (tmpl,
2588 TREE_OPERAND (fullname, 1),
2589 NULL_TREE, context,
2590 /*entering_scope=*/0,
2591 tf_error | tf_warning | tf_user);
2593 else
2595 tree t;
2597 if (!IS_AGGR_TYPE (context))
2599 if (complain & tf_error)
2600 error ("no type named %q#T in %q#T", name, context);
2601 return error_mark_node;
2604 t = lookup_field (context, name, 0, true);
2605 if (t)
2607 if (TREE_CODE (t) != TYPE_DECL)
2609 if (complain & tf_error)
2610 error ("no type named %q#T in %q#T", name, context);
2611 return error_mark_node;
2614 if (complain & tf_error)
2615 perform_or_defer_access_check (TYPE_BINFO (context), t);
2617 if (DECL_ARTIFICIAL (t) || !(complain & tf_keep_type_decl))
2618 t = TREE_TYPE (t);
2620 return t;
2625 /* If the CONTEXT is not a template type, then either the field is
2626 there now or its never going to be. */
2627 if (!dependent_type_p (context))
2629 if (complain & tf_error)
2630 error ("no type named %q#T in %q#T", name, context);
2631 return error_mark_node;
2634 return build_typename_type (context, name, fullname, tag_type);
2637 /* Resolve `CONTEXT::template NAME'. Returns a TEMPLATE_DECL if the name
2638 can be resolved or an UNBOUND_CLASS_TEMPLATE, unless an error occurs,
2639 in which case error_mark_node is returned.
2641 If PARM_LIST is non-NULL, also make sure that the template parameter
2642 list of TEMPLATE_DECL matches.
2644 If COMPLAIN zero, don't complain about any errors that occur. */
2646 tree
2647 make_unbound_class_template (tree context, tree name, tree parm_list,
2648 tsubst_flags_t complain)
2650 tree t;
2651 tree d;
2653 if (TYPE_P (name))
2654 name = TYPE_IDENTIFIER (name);
2655 else if (DECL_P (name))
2656 name = DECL_NAME (name);
2657 gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
2659 if (!dependent_type_p (context)
2660 || currently_open_class (context))
2662 tree tmpl = NULL_TREE;
2664 if (IS_AGGR_TYPE (context))
2665 tmpl = lookup_field (context, name, 0, false);
2667 if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
2669 if (complain & tf_error)
2670 error ("no class template named %q#T in %q#T", name, context);
2671 return error_mark_node;
2674 if (parm_list
2675 && !comp_template_parms (DECL_TEMPLATE_PARMS (tmpl), parm_list))
2677 if (complain & tf_error)
2679 error ("template parameters do not match template");
2680 cp_error_at ("%qD declared here", tmpl);
2682 return error_mark_node;
2685 if (complain & tf_error)
2686 perform_or_defer_access_check (TYPE_BINFO (context), tmpl);
2688 return tmpl;
2691 /* Build the UNBOUND_CLASS_TEMPLATE. */
2692 t = make_aggr_type (UNBOUND_CLASS_TEMPLATE);
2693 TYPE_CONTEXT (t) = FROB_CONTEXT (context);
2694 TREE_TYPE (t) = NULL_TREE;
2696 /* Build the corresponding TEMPLATE_DECL. */
2697 d = build_decl (TEMPLATE_DECL, name, t);
2698 TYPE_NAME (TREE_TYPE (d)) = d;
2699 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
2700 DECL_CONTEXT (d) = FROB_CONTEXT (context);
2701 DECL_ARTIFICIAL (d) = 1;
2702 DECL_TEMPLATE_PARMS (d) = parm_list;
2704 return t;
2709 /* Push the declarations of builtin types into the namespace.
2710 RID_INDEX is the index of the builtin type in the array
2711 RID_POINTERS. NAME is the name used when looking up the builtin
2712 type. TYPE is the _TYPE node for the builtin type. */
2714 void
2715 record_builtin_type (enum rid rid_index,
2716 const char* name,
2717 tree type)
2719 tree rname = NULL_TREE, tname = NULL_TREE;
2720 tree tdecl = NULL_TREE;
2722 if ((int) rid_index < (int) RID_MAX)
2723 rname = ridpointers[(int) rid_index];
2724 if (name)
2725 tname = get_identifier (name);
2727 /* The calls to SET_IDENTIFIER_GLOBAL_VALUE below should be
2728 eliminated. Built-in types should not be looked up name; their
2729 names are keywords that the parser can recognize. However, there
2730 is code in c-common.c that uses identifier_global_value to look
2731 up built-in types by name. */
2732 if (tname)
2734 tdecl = build_decl (TYPE_DECL, tname, type);
2735 DECL_ARTIFICIAL (tdecl) = 1;
2736 SET_IDENTIFIER_GLOBAL_VALUE (tname, tdecl);
2738 if (rname)
2740 if (!tdecl)
2742 tdecl = build_decl (TYPE_DECL, rname, type);
2743 DECL_ARTIFICIAL (tdecl) = 1;
2745 SET_IDENTIFIER_GLOBAL_VALUE (rname, tdecl);
2748 if (!TYPE_NAME (type))
2749 TYPE_NAME (type) = tdecl;
2751 if (tdecl)
2752 debug_hooks->type_decl (tdecl, 0);
2755 /* Record one of the standard Java types.
2756 * Declare it as having the given NAME.
2757 * If SIZE > 0, it is the size of one of the integral types;
2758 * otherwise it is the negative of the size of one of the other types. */
2760 static tree
2761 record_builtin_java_type (const char* name, int size)
2763 tree type, decl;
2764 if (size > 0)
2765 type = make_signed_type (size);
2766 else if (size > -32)
2767 { /* "__java_char" or ""__java_boolean". */
2768 type = make_unsigned_type (-size);
2769 /*if (size == -1) TREE_SET_CODE (type, BOOLEAN_TYPE);*/
2771 else
2772 { /* "__java_float" or ""__java_double". */
2773 type = make_node (REAL_TYPE);
2774 TYPE_PRECISION (type) = - size;
2775 layout_type (type);
2777 record_builtin_type (RID_MAX, name, type);
2778 decl = TYPE_NAME (type);
2780 /* Suppress generate debug symbol entries for these types,
2781 since for normal C++ they are just clutter.
2782 However, push_lang_context undoes this if extern "Java" is seen. */
2783 DECL_IGNORED_P (decl) = 1;
2785 TYPE_FOR_JAVA (type) = 1;
2786 return type;
2789 /* Push a type into the namespace so that the back-ends ignore it. */
2791 static void
2792 record_unknown_type (tree type, const char* name)
2794 tree decl = pushdecl (build_decl (TYPE_DECL, get_identifier (name), type));
2795 /* Make sure the "unknown type" typedecl gets ignored for debug info. */
2796 DECL_IGNORED_P (decl) = 1;
2797 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
2798 TYPE_SIZE (type) = TYPE_SIZE (void_type_node);
2799 TYPE_ALIGN (type) = 1;
2800 TYPE_USER_ALIGN (type) = 0;
2801 TYPE_MODE (type) = TYPE_MODE (void_type_node);
2804 /* An string for which we should create an IDENTIFIER_NODE at
2805 startup. */
2807 typedef struct predefined_identifier
2809 /* The name of the identifier. */
2810 const char *const name;
2811 /* The place where the IDENTIFIER_NODE should be stored. */
2812 tree *const node;
2813 /* Nonzero if this is the name of a constructor or destructor. */
2814 const int ctor_or_dtor_p;
2815 } predefined_identifier;
2817 /* Create all the predefined identifiers. */
2819 static void
2820 initialize_predefined_identifiers (void)
2822 const predefined_identifier *pid;
2824 /* A table of identifiers to create at startup. */
2825 static const predefined_identifier predefined_identifiers[] = {
2826 { "C++", &lang_name_cplusplus, 0 },
2827 { "C", &lang_name_c, 0 },
2828 { "Java", &lang_name_java, 0 },
2829 /* Some of these names have a trailing space so that it is
2830 impossible for them to conflict with names written by users. */
2831 { "__ct ", &ctor_identifier, 1 },
2832 { "__base_ctor ", &base_ctor_identifier, 1 },
2833 { "__comp_ctor ", &complete_ctor_identifier, 1 },
2834 { "__dt ", &dtor_identifier, 1 },
2835 { "__comp_dtor ", &complete_dtor_identifier, 1 },
2836 { "__base_dtor ", &base_dtor_identifier, 1 },
2837 { "__deleting_dtor ", &deleting_dtor_identifier, 1 },
2838 { IN_CHARGE_NAME, &in_charge_identifier, 0 },
2839 { "nelts", &nelts_identifier, 0 },
2840 { THIS_NAME, &this_identifier, 0 },
2841 { VTABLE_DELTA_NAME, &delta_identifier, 0 },
2842 { VTABLE_PFN_NAME, &pfn_identifier, 0 },
2843 { "_vptr", &vptr_identifier, 0 },
2844 { "__vtt_parm", &vtt_parm_identifier, 0 },
2845 { "::", &global_scope_name, 0 },
2846 { "std", &std_identifier, 0 },
2847 { NULL, NULL, 0 }
2850 for (pid = predefined_identifiers; pid->name; ++pid)
2852 *pid->node = get_identifier (pid->name);
2853 if (pid->ctor_or_dtor_p)
2854 IDENTIFIER_CTOR_OR_DTOR_P (*pid->node) = 1;
2858 /* Create the predefined scalar types of C,
2859 and some nodes representing standard constants (0, 1, (void *)0).
2860 Initialize the global binding level.
2861 Make definitions for built-in primitive functions. */
2863 void
2864 cxx_init_decl_processing (void)
2866 tree void_ftype;
2867 tree void_ftype_ptr;
2869 build_common_tree_nodes (flag_signed_char, false);
2871 /* Create all the identifiers we need. */
2872 initialize_predefined_identifiers ();
2874 /* Create the global variables. */
2875 push_to_top_level ();
2877 current_function_decl = NULL_TREE;
2878 current_binding_level = NULL;
2879 /* Enter the global namespace. */
2880 gcc_assert (global_namespace == NULL_TREE);
2881 global_namespace = build_lang_decl (NAMESPACE_DECL, global_scope_name,
2882 void_type_node);
2883 begin_scope (sk_namespace, global_namespace);
2885 current_lang_name = NULL_TREE;
2887 /* Adjust various flags based on command-line settings. */
2888 if (!flag_permissive)
2889 flag_pedantic_errors = 1;
2890 if (!flag_no_inline)
2892 flag_inline_trees = 1;
2893 flag_no_inline = 1;
2895 if (flag_inline_functions)
2896 flag_inline_trees = 2;
2898 /* Force minimum function alignment if using the least significant
2899 bit of function pointers to store the virtual bit. */
2900 if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_pfn
2901 && force_align_functions_log < 1)
2902 force_align_functions_log = 1;
2904 /* Initially, C. */
2905 current_lang_name = lang_name_c;
2907 error_mark_list = build_tree_list (error_mark_node, error_mark_node);
2908 TREE_TYPE (error_mark_list) = error_mark_node;
2910 /* Create the `std' namespace. */
2911 push_namespace (std_identifier);
2912 std_node = current_namespace;
2913 pop_namespace ();
2915 c_common_nodes_and_builtins ();
2917 java_byte_type_node = record_builtin_java_type ("__java_byte", 8);
2918 java_short_type_node = record_builtin_java_type ("__java_short", 16);
2919 java_int_type_node = record_builtin_java_type ("__java_int", 32);
2920 java_long_type_node = record_builtin_java_type ("__java_long", 64);
2921 java_float_type_node = record_builtin_java_type ("__java_float", -32);
2922 java_double_type_node = record_builtin_java_type ("__java_double", -64);
2923 java_char_type_node = record_builtin_java_type ("__java_char", -16);
2924 java_boolean_type_node = record_builtin_java_type ("__java_boolean", -1);
2926 integer_two_node = build_int_cst (NULL_TREE, 2);
2927 integer_three_node = build_int_cst (NULL_TREE, 3);
2929 record_builtin_type (RID_BOOL, "bool", boolean_type_node);
2930 truthvalue_type_node = boolean_type_node;
2931 truthvalue_false_node = boolean_false_node;
2932 truthvalue_true_node = boolean_true_node;
2934 empty_except_spec = build_tree_list (NULL_TREE, NULL_TREE);
2936 #if 0
2937 record_builtin_type (RID_MAX, NULL, string_type_node);
2938 #endif
2940 delta_type_node = ptrdiff_type_node;
2941 vtable_index_type = ptrdiff_type_node;
2943 vtt_parm_type = build_pointer_type (const_ptr_type_node);
2944 void_ftype = build_function_type (void_type_node, void_list_node);
2945 void_ftype_ptr = build_function_type (void_type_node,
2946 tree_cons (NULL_TREE,
2947 ptr_type_node,
2948 void_list_node));
2949 void_ftype_ptr
2950 = build_exception_variant (void_ftype_ptr, empty_except_spec);
2952 /* C++ extensions */
2954 unknown_type_node = make_node (UNKNOWN_TYPE);
2955 record_unknown_type (unknown_type_node, "unknown type");
2957 /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node. */
2958 TREE_TYPE (unknown_type_node) = unknown_type_node;
2960 /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
2961 result. */
2962 TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
2963 TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
2966 /* Make sure we get a unique function type, so we can give
2967 its pointer type a name. (This wins for gdb.) */
2968 tree vfunc_type = make_node (FUNCTION_TYPE);
2969 TREE_TYPE (vfunc_type) = integer_type_node;
2970 TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
2971 layout_type (vfunc_type);
2973 vtable_entry_type = build_pointer_type (vfunc_type);
2975 record_builtin_type (RID_MAX, VTBL_PTR_TYPE, vtable_entry_type);
2977 vtbl_type_node
2978 = build_cplus_array_type (vtable_entry_type, NULL_TREE);
2979 layout_type (vtbl_type_node);
2980 vtbl_type_node = build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
2981 record_builtin_type (RID_MAX, NULL, vtbl_type_node);
2982 vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
2983 layout_type (vtbl_ptr_type_node);
2984 record_builtin_type (RID_MAX, NULL, vtbl_ptr_type_node);
2986 push_namespace (get_identifier ("__cxxabiv1"));
2987 abi_node = current_namespace;
2988 pop_namespace ();
2990 global_type_node = make_node (LANG_TYPE);
2991 record_unknown_type (global_type_node, "global type");
2993 /* Now, C++. */
2994 current_lang_name = lang_name_cplusplus;
2997 tree bad_alloc_id;
2998 tree bad_alloc_type_node;
2999 tree bad_alloc_decl;
3000 tree newtype, deltype;
3001 tree ptr_ftype_sizetype;
3003 push_namespace (std_identifier);
3004 bad_alloc_id = get_identifier ("bad_alloc");
3005 bad_alloc_type_node = make_aggr_type (RECORD_TYPE);
3006 TYPE_CONTEXT (bad_alloc_type_node) = current_namespace;
3007 bad_alloc_decl
3008 = create_implicit_typedef (bad_alloc_id, bad_alloc_type_node);
3009 DECL_CONTEXT (bad_alloc_decl) = current_namespace;
3010 TYPE_STUB_DECL (bad_alloc_type_node) = bad_alloc_decl;
3011 pop_namespace ();
3013 ptr_ftype_sizetype
3014 = build_function_type (ptr_type_node,
3015 tree_cons (NULL_TREE,
3016 size_type_node,
3017 void_list_node));
3018 newtype = build_exception_variant
3019 (ptr_ftype_sizetype, add_exception_specifier
3020 (NULL_TREE, bad_alloc_type_node, -1));
3021 deltype = build_exception_variant (void_ftype_ptr, empty_except_spec);
3022 push_cp_library_fn (NEW_EXPR, newtype);
3023 push_cp_library_fn (VEC_NEW_EXPR, newtype);
3024 global_delete_fndecl = push_cp_library_fn (DELETE_EXPR, deltype);
3025 push_cp_library_fn (VEC_DELETE_EXPR, deltype);
3028 abort_fndecl
3029 = build_library_fn_ptr ("__cxa_pure_virtual", void_ftype);
3031 /* Perform other language dependent initializations. */
3032 init_class_processing ();
3033 init_rtti_processing ();
3035 if (flag_exceptions)
3036 init_exception_processing ();
3038 if (! supports_one_only ())
3039 flag_weak = 0;
3041 make_fname_decl = cp_make_fname_decl;
3042 start_fname_decls ();
3044 /* Show we use EH for cleanups. */
3045 if (flag_exceptions)
3046 using_eh_for_cleanups ();
3049 /* Generate an initializer for a function naming variable from
3050 NAME. NAME may be NULL, to indicate a dependent name. TYPE_P is
3051 filled in with the type of the init. */
3053 tree
3054 cp_fname_init (const char* name, tree *type_p)
3056 tree domain = NULL_TREE;
3057 tree type;
3058 tree init = NULL_TREE;
3059 size_t length = 0;
3061 if (name)
3063 length = strlen (name);
3064 domain = build_index_type (size_int (length));
3065 init = build_string (length + 1, name);
3068 type = build_qualified_type (char_type_node, TYPE_QUAL_CONST);
3069 type = build_cplus_array_type (type, domain);
3071 *type_p = type;
3073 if (init)
3074 TREE_TYPE (init) = type;
3075 else
3076 init = error_mark_node;
3078 return init;
3081 /* Create the VAR_DECL for __FUNCTION__ etc. ID is the name to give the
3082 decl, NAME is the initialization string and TYPE_DEP indicates whether
3083 NAME depended on the type of the function. We make use of that to detect
3084 __PRETTY_FUNCTION__ inside a template fn. This is being done
3085 lazily at the point of first use, so we mustn't push the decl now. */
3087 static tree
3088 cp_make_fname_decl (tree id, int type_dep)
3090 const char *const name = (type_dep && processing_template_decl
3091 ? NULL : fname_as_string (type_dep));
3092 tree type;
3093 tree init = cp_fname_init (name, &type);
3094 tree decl = build_decl (VAR_DECL, id, type);
3096 if (name)
3097 free ((char *) name);
3099 /* As we're using pushdecl_with_scope, we must set the context. */
3100 DECL_CONTEXT (decl) = current_function_decl;
3101 DECL_PRETTY_FUNCTION_P (decl) = type_dep;
3103 TREE_STATIC (decl) = 1;
3104 TREE_READONLY (decl) = 1;
3105 DECL_ARTIFICIAL (decl) = 1;
3106 DECL_INITIAL (decl) = init;
3108 TREE_USED (decl) = 1;
3110 if (current_function_decl)
3112 struct cp_binding_level *b = current_binding_level;
3113 while (b->level_chain->kind != sk_function_parms)
3114 b = b->level_chain;
3115 pushdecl_with_scope (decl, b);
3116 cp_finish_decl (decl, init, NULL_TREE, LOOKUP_ONLYCONVERTING);
3118 else
3119 pushdecl_top_level_and_finish (decl, init);
3121 return decl;
3124 /* Make a definition for a builtin function named NAME in the current
3125 namespace, whose data type is TYPE and whose context is CONTEXT.
3126 TYPE should be a function type with argument types.
3128 CLASS and CODE tell later passes how to compile calls to this function.
3129 See tree.h for possible values.
3131 If LIBNAME is nonzero, use that for DECL_ASSEMBLER_NAME,
3132 the name to be called if we can't opencode the function.
3133 If ATTRS is nonzero, use that for the function's attribute
3134 list. */
3136 static tree
3137 builtin_function_1 (const char* name,
3138 tree type,
3139 tree context,
3140 enum built_in_function code,
3141 enum built_in_class class,
3142 const char* libname,
3143 tree attrs)
3145 tree decl = build_library_fn_1 (get_identifier (name), ERROR_MARK, type);
3146 DECL_BUILT_IN_CLASS (decl) = class;
3147 DECL_FUNCTION_CODE (decl) = code;
3148 DECL_CONTEXT (decl) = context;
3150 pushdecl (decl);
3152 /* Since `pushdecl' relies on DECL_ASSEMBLER_NAME instead of DECL_NAME,
3153 we cannot change DECL_ASSEMBLER_NAME until we have installed this
3154 function in the namespace. */
3155 if (libname)
3156 SET_DECL_ASSEMBLER_NAME (decl, get_identifier (libname));
3158 /* Warn if a function in the namespace for users
3159 is used without an occasion to consider it declared. */
3160 if (name[0] != '_' || name[1] != '_')
3161 DECL_ANTICIPATED (decl) = 1;
3163 /* Possibly apply some default attributes to this built-in function. */
3164 if (attrs)
3165 decl_attributes (&decl, attrs, ATTR_FLAG_BUILT_IN);
3166 else
3167 decl_attributes (&decl, NULL_TREE, 0);
3169 return decl;
3172 /* Entry point for the benefit of c_common_nodes_and_builtins.
3174 Make a definition for a builtin function named NAME and whose data type
3175 is TYPE. TYPE should be a function type with argument types. This
3176 function places the anticipated declaration in the global namespace
3177 and additionally in the std namespace if appropriate.
3179 CLASS and CODE tell later passes how to compile calls to this function.
3180 See tree.h for possible values.
3182 If LIBNAME is nonzero, use that for DECL_ASSEMBLER_NAME,
3183 the name to be called if we can't opencode the function.
3185 If ATTRS is nonzero, use that for the function's attribute
3186 list. */
3188 tree
3189 builtin_function (const char* name,
3190 tree type,
3191 int code,
3192 enum built_in_class cl,
3193 const char* libname,
3194 tree attrs)
3196 /* All builtins that don't begin with an '_' should additionally
3197 go in the 'std' namespace. */
3198 if (name[0] != '_')
3200 push_namespace (std_identifier);
3201 builtin_function_1 (name, type, std_node, code, cl, libname, attrs);
3202 pop_namespace ();
3205 return builtin_function_1 (name, type, NULL_TREE, code,
3206 cl, libname, attrs);
3209 /* Generate a FUNCTION_DECL with the typical flags for a runtime library
3210 function. Not called directly. */
3212 static tree
3213 build_library_fn_1 (tree name, enum tree_code operator_code, tree type)
3215 tree fn = build_lang_decl (FUNCTION_DECL, name, type);
3216 DECL_EXTERNAL (fn) = 1;
3217 TREE_PUBLIC (fn) = 1;
3218 DECL_ARTIFICIAL (fn) = 1;
3219 SET_OVERLOADED_OPERATOR_CODE (fn, operator_code);
3220 SET_DECL_LANGUAGE (fn, lang_c);
3221 /* Runtime library routines are, by definition, available in an
3222 external shared object. */
3223 DECL_VISIBILITY (fn) = VISIBILITY_DEFAULT;
3224 DECL_VISIBILITY_SPECIFIED (fn) = 1;
3225 return fn;
3228 /* Returns the _DECL for a library function with C linkage.
3229 We assume that such functions never throw; if this is incorrect,
3230 callers should unset TREE_NOTHROW. */
3232 tree
3233 build_library_fn (tree name, tree type)
3235 tree fn = build_library_fn_1 (name, ERROR_MARK, type);
3236 TREE_NOTHROW (fn) = 1;
3237 return fn;
3240 /* Returns the _DECL for a library function with C++ linkage. */
3242 static tree
3243 build_cp_library_fn (tree name, enum tree_code operator_code, tree type)
3245 tree fn = build_library_fn_1 (name, operator_code, type);
3246 TREE_NOTHROW (fn) = TYPE_NOTHROW_P (type);
3247 DECL_CONTEXT (fn) = FROB_CONTEXT (current_namespace);
3248 SET_DECL_LANGUAGE (fn, lang_cplusplus);
3249 return fn;
3252 /* Like build_library_fn, but takes a C string instead of an
3253 IDENTIFIER_NODE. */
3255 tree
3256 build_library_fn_ptr (const char* name, tree type)
3258 return build_library_fn (get_identifier (name), type);
3261 /* Like build_cp_library_fn, but takes a C string instead of an
3262 IDENTIFIER_NODE. */
3264 tree
3265 build_cp_library_fn_ptr (const char* name, tree type)
3267 return build_cp_library_fn (get_identifier (name), ERROR_MARK, type);
3270 /* Like build_library_fn, but also pushes the function so that we will
3271 be able to find it via IDENTIFIER_GLOBAL_VALUE. */
3273 tree
3274 push_library_fn (tree name, tree type)
3276 tree fn = build_library_fn (name, type);
3277 pushdecl_top_level (fn);
3278 return fn;
3281 /* Like build_cp_library_fn, but also pushes the function so that it
3282 will be found by normal lookup. */
3284 static tree
3285 push_cp_library_fn (enum tree_code operator_code, tree type)
3287 tree fn = build_cp_library_fn (ansi_opname (operator_code),
3288 operator_code,
3289 type);
3290 pushdecl (fn);
3291 return fn;
3294 /* Like push_library_fn, but takes a TREE_LIST of parm types rather than
3295 a FUNCTION_TYPE. */
3297 tree
3298 push_void_library_fn (tree name, tree parmtypes)
3300 tree type = build_function_type (void_type_node, parmtypes);
3301 return push_library_fn (name, type);
3304 /* Like push_library_fn, but also note that this function throws
3305 and does not return. Used for __throw_foo and the like. */
3307 tree
3308 push_throw_library_fn (tree name, tree type)
3310 tree fn = push_library_fn (name, type);
3311 TREE_THIS_VOLATILE (fn) = 1;
3312 TREE_NOTHROW (fn) = 0;
3313 return fn;
3316 /* When we call finish_struct for an anonymous union, we create
3317 default copy constructors and such. But, an anonymous union
3318 shouldn't have such things; this function undoes the damage to the
3319 anonymous union type T.
3321 (The reason that we create the synthesized methods is that we don't
3322 distinguish `union { int i; }' from `typedef union { int i; } U'.
3323 The first is an anonymous union; the second is just an ordinary
3324 union type.) */
3326 void
3327 fixup_anonymous_aggr (tree t)
3329 tree *q;
3331 /* Wipe out memory of synthesized methods. */
3332 TYPE_HAS_CONSTRUCTOR (t) = 0;
3333 TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
3334 TYPE_HAS_INIT_REF (t) = 0;
3335 TYPE_HAS_CONST_INIT_REF (t) = 0;
3336 TYPE_HAS_ASSIGN_REF (t) = 0;
3337 TYPE_HAS_CONST_ASSIGN_REF (t) = 0;
3339 /* Splice the implicitly generated functions out of the TYPE_METHODS
3340 list. */
3341 q = &TYPE_METHODS (t);
3342 while (*q)
3344 if (DECL_ARTIFICIAL (*q))
3345 *q = TREE_CHAIN (*q);
3346 else
3347 q = &TREE_CHAIN (*q);
3350 /* ISO C++ 9.5.3. Anonymous unions may not have function members. */
3351 if (TYPE_METHODS (t))
3352 error ("%Jan anonymous union cannot have function members",
3353 TYPE_MAIN_DECL (t));
3355 /* Anonymous aggregates cannot have fields with ctors, dtors or complex
3356 assignment operators (because they cannot have these methods themselves).
3357 For anonymous unions this is already checked because they are not allowed
3358 in any union, otherwise we have to check it. */
3359 if (TREE_CODE (t) != UNION_TYPE)
3361 tree field, type;
3363 for (field = TYPE_FIELDS (t); field; field = TREE_CHAIN (field))
3364 if (TREE_CODE (field) == FIELD_DECL)
3366 type = TREE_TYPE (field);
3367 if (CLASS_TYPE_P (type))
3369 if (TYPE_NEEDS_CONSTRUCTING (type))
3370 cp_error_at ("member %q#D with constructor not allowed "
3371 "in anonymous aggregate",
3372 field);
3373 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
3374 cp_error_at ("member %q#D with destructor not allowed "
3375 "in anonymous aggregate",
3376 field);
3377 if (TYPE_HAS_COMPLEX_ASSIGN_REF (type))
3378 cp_error_at ("member %q#D with copy assignment operator "
3379 "not allowed in anonymous aggregate",
3380 field);
3386 /* Make sure that a declaration with no declarator is well-formed, i.e.
3387 just declares a tagged type or anonymous union.
3389 Returns the type declared; or NULL_TREE if none. */
3391 tree
3392 check_tag_decl (cp_decl_specifier_seq *declspecs)
3394 int saw_friend = declspecs->specs[(int)ds_friend] != 0;
3395 int saw_typedef = declspecs->specs[(int)ds_typedef] != 0;
3396 /* If a class, struct, or enum type is declared by the DECLSPECS
3397 (i.e, if a class-specifier, enum-specifier, or non-typename
3398 elaborated-type-specifier appears in the DECLSPECS),
3399 DECLARED_TYPE is set to the corresponding type. */
3400 tree declared_type = NULL_TREE;
3401 bool error_p = false;
3403 if (declspecs->multiple_types_p)
3404 error ("multiple types in one declaration");
3405 else if (declspecs->redefined_builtin_type)
3407 if (!in_system_header)
3408 pedwarn ("redeclaration of C++ built-in type %qT",
3409 declspecs->redefined_builtin_type);
3410 return NULL_TREE;
3413 if (declspecs->type
3414 && TYPE_P (declspecs->type)
3415 && ((TREE_CODE (declspecs->type) != TYPENAME_TYPE
3416 && IS_AGGR_TYPE (declspecs->type))
3417 || TREE_CODE (declspecs->type) == ENUMERAL_TYPE))
3418 declared_type = declspecs->type;
3419 else if (declspecs->type == error_mark_node)
3420 error_p = true;
3421 if (declared_type == NULL_TREE && ! saw_friend && !error_p)
3422 pedwarn ("declaration does not declare anything");
3423 /* Check for an anonymous union. */
3424 else if (declared_type && IS_AGGR_TYPE_CODE (TREE_CODE (declared_type))
3425 && TYPE_ANONYMOUS_P (declared_type))
3427 /* 7/3 In a simple-declaration, the optional init-declarator-list
3428 can be omitted only when declaring a class (clause 9) or
3429 enumeration (7.2), that is, when the decl-specifier-seq contains
3430 either a class-specifier, an elaborated-type-specifier with
3431 a class-key (9.1), or an enum-specifier. In these cases and
3432 whenever a class-specifier or enum-specifier is present in the
3433 decl-specifier-seq, the identifiers in these specifiers are among
3434 the names being declared by the declaration (as class-name,
3435 enum-names, or enumerators, depending on the syntax). In such
3436 cases, and except for the declaration of an unnamed bit-field (9.6),
3437 the decl-specifier-seq shall introduce one or more names into the
3438 program, or shall redeclare a name introduced by a previous
3439 declaration. [Example:
3440 enum { }; // ill-formed
3441 typedef class { }; // ill-formed
3442 --end example] */
3443 if (saw_typedef)
3445 error ("missing type-name in typedef-declaration");
3446 return NULL_TREE;
3448 /* Anonymous unions are objects, so they can have specifiers. */;
3449 SET_ANON_AGGR_TYPE_P (declared_type);
3451 if (TREE_CODE (declared_type) != UNION_TYPE && pedantic
3452 && !in_system_header)
3453 pedwarn ("ISO C++ prohibits anonymous structs");
3456 else
3458 if (declspecs->specs[(int)ds_inline]
3459 || declspecs->specs[(int)ds_virtual])
3460 error ("%qs can only be specified for functions",
3461 declspecs->specs[(int)ds_inline]
3462 ? "inline" : "virtual");
3463 else if (saw_friend
3464 && (!current_class_type
3465 || current_scope () != current_class_type))
3466 error ("%<friend%> can only be specified inside a class");
3467 else if (declspecs->specs[(int)ds_explicit])
3468 error ("%<explicit%> can only be specified for constructors");
3469 else if (declspecs->storage_class)
3470 error ("a storage class can only be specified for objects "
3471 "and functions");
3472 else if (declspecs->specs[(int)ds_const]
3473 || declspecs->specs[(int)ds_volatile]
3474 || declspecs->specs[(int)ds_restrict]
3475 || declspecs->specs[(int)ds_thread])
3476 error ("qualifiers can only be specified for objects "
3477 "and functions");
3480 return declared_type;
3483 /* Called when a declaration is seen that contains no names to declare.
3484 If its type is a reference to a structure, union or enum inherited
3485 from a containing scope, shadow that tag name for the current scope
3486 with a forward reference.
3487 If its type defines a new named structure or union
3488 or defines an enum, it is valid but we need not do anything here.
3489 Otherwise, it is an error.
3491 C++: may have to grok the declspecs to learn about static,
3492 complain for anonymous unions.
3494 Returns the TYPE declared -- or NULL_TREE if none. */
3496 tree
3497 shadow_tag (cp_decl_specifier_seq *declspecs)
3499 tree t = check_tag_decl (declspecs);
3501 if (!t)
3502 return NULL_TREE;
3504 if (declspecs->attributes)
3506 cp_warning_at ("attribute ignored in declaration of %q#T", t);
3507 cp_warning_at ("attribute for %q#T must follow the %qs keyword",
3509 class_key_or_enum_as_string (t));
3513 maybe_process_partial_specialization (t);
3515 /* This is where the variables in an anonymous union are
3516 declared. An anonymous union declaration looks like:
3517 union { ... } ;
3518 because there is no declarator after the union, the parser
3519 sends that declaration here. */
3520 if (ANON_AGGR_TYPE_P (t))
3522 fixup_anonymous_aggr (t);
3524 if (TYPE_FIELDS (t))
3526 tree decl = grokdeclarator (/*declarator=*/NULL,
3527 declspecs, NORMAL, 0, NULL);
3528 finish_anon_union (decl);
3532 return t;
3535 /* Decode a "typename", such as "int **", returning a ..._TYPE node. */
3537 tree
3538 groktypename (cp_decl_specifier_seq *type_specifiers,
3539 const cp_declarator *declarator)
3541 tree attrs;
3542 tree type;
3543 attrs = type_specifiers->attributes;
3544 type_specifiers->attributes = NULL_TREE;
3545 type = grokdeclarator (declarator, type_specifiers, TYPENAME, 0, &attrs);
3546 if (attrs)
3547 cplus_decl_attributes (&type, attrs, 0);
3548 return type;
3551 /* Decode a declarator in an ordinary declaration or data definition.
3552 This is called as soon as the type information and variable name
3553 have been parsed, before parsing the initializer if any.
3554 Here we create the ..._DECL node, fill in its type,
3555 and put it on the list of decls for the current context.
3556 The ..._DECL node is returned as the value.
3558 Exception: for arrays where the length is not specified,
3559 the type is left null, to be filled in by `cp_finish_decl'.
3561 Function definitions do not come here; they go to start_function
3562 instead. However, external and forward declarations of functions
3563 do go through here. Structure field declarations are done by
3564 grokfield and not through here. */
3566 tree
3567 start_decl (const cp_declarator *declarator,
3568 cp_decl_specifier_seq *declspecs,
3569 int initialized,
3570 tree attributes,
3571 tree prefix_attributes,
3572 tree *pushed_scope_p)
3574 tree decl;
3575 tree type, tem;
3576 tree context;
3578 *pushed_scope_p = NULL_TREE;
3580 /* This should only be done once on the top most decl. */
3581 if (have_extern_spec)
3583 declspecs->storage_class = sc_extern;
3584 have_extern_spec = false;
3587 /* An object declared as __attribute__((deprecated)) suppresses
3588 warnings of uses of other deprecated items. */
3589 if (lookup_attribute ("deprecated", attributes))
3590 deprecated_state = DEPRECATED_SUPPRESS;
3592 attributes = chainon (attributes, prefix_attributes);
3594 decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
3595 &attributes);
3597 deprecated_state = DEPRECATED_NORMAL;
3599 if (decl == NULL_TREE || TREE_CODE (decl) == VOID_TYPE)
3600 return error_mark_node;
3602 type = TREE_TYPE (decl);
3604 if (type == error_mark_node)
3605 return error_mark_node;
3607 context = DECL_CONTEXT (decl);
3609 if (context)
3611 *pushed_scope_p = push_scope (context);
3613 /* We are only interested in class contexts, later. */
3614 if (TREE_CODE (context) == NAMESPACE_DECL)
3615 context = NULL_TREE;
3618 if (initialized)
3619 /* Is it valid for this decl to have an initializer at all?
3620 If not, set INITIALIZED to zero, which will indirectly
3621 tell `cp_finish_decl' to ignore the initializer once it is parsed. */
3622 switch (TREE_CODE (decl))
3624 case TYPE_DECL:
3625 error ("typedef %qD is initialized (use __typeof__ instead)", decl);
3626 initialized = 0;
3627 break;
3629 case FUNCTION_DECL:
3630 error ("function %q#D is initialized like a variable", decl);
3631 initialized = 0;
3632 break;
3634 default:
3635 break;
3638 if (initialized)
3640 if (! toplevel_bindings_p ()
3641 && DECL_EXTERNAL (decl))
3642 warning (0, "declaration of %q#D has %<extern%> and is initialized",
3643 decl);
3644 DECL_EXTERNAL (decl) = 0;
3645 if (toplevel_bindings_p ())
3646 TREE_STATIC (decl) = 1;
3648 /* Tell `pushdecl' this is an initialized decl
3649 even though we don't yet have the initializer expression.
3650 Also tell `cp_finish_decl' it may store the real initializer. */
3651 DECL_INITIAL (decl) = error_mark_node;
3654 /* Set attributes here so if duplicate decl, will have proper attributes. */
3655 cplus_decl_attributes (&decl, attributes, 0);
3657 /* If #pragma weak was used, mark the decl weak now. */
3658 maybe_apply_pragma_weak (decl);
3660 if (TREE_CODE (decl) == FUNCTION_DECL
3661 && DECL_DECLARED_INLINE_P (decl)
3662 && DECL_UNINLINABLE (decl)
3663 && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl)))
3664 warning (0, "%Jinline function %qD given attribute noinline", decl, decl);
3666 if (context && COMPLETE_TYPE_P (complete_type (context)))
3668 if (TREE_CODE (decl) == VAR_DECL)
3670 tree field = lookup_field (context, DECL_NAME (decl), 0, false);
3671 if (field == NULL_TREE || TREE_CODE (field) != VAR_DECL)
3672 error ("%q#D is not a static member of %q#T", decl, context);
3673 else
3675 if (DECL_CONTEXT (field) != context)
3677 if (!same_type_p (DECL_CONTEXT (field), context))
3678 pedwarn ("ISO C++ does not permit %<%T::%D%> "
3679 "to be defined as %<%T::%D%>",
3680 DECL_CONTEXT (field), DECL_NAME (decl),
3681 context, DECL_NAME (decl));
3682 DECL_CONTEXT (decl) = DECL_CONTEXT (field);
3684 if (processing_specialization
3685 && template_class_depth (context) == 0
3686 && CLASSTYPE_TEMPLATE_SPECIALIZATION (context))
3687 error ("template header not allowed in member definition "
3688 "of explicitly specialized class");
3689 /* Static data member are tricky; an in-class initialization
3690 still doesn't provide a definition, so the in-class
3691 declaration will have DECL_EXTERNAL set, but will have an
3692 initialization. Thus, duplicate_decls won't warn
3693 about this situation, and so we check here. */
3694 if (DECL_INITIAL (decl) && DECL_INITIAL (field))
3695 error ("duplicate initialization of %qD", decl);
3696 if (duplicate_decls (decl, field))
3697 decl = field;
3700 else
3702 tree field = check_classfn (context, decl,
3703 (processing_template_decl
3704 > template_class_depth (context))
3705 ? current_template_parms
3706 : NULL_TREE);
3707 if (field && duplicate_decls (decl, field))
3708 decl = field;
3711 /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set. */
3712 DECL_IN_AGGR_P (decl) = 0;
3713 /* Do not mark DECL as an explicit specialization if it was not
3714 already marked as an instantiation; a declaration should
3715 never be marked as a specialization unless we know what
3716 template is being specialized. */
3717 if (DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl))
3719 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
3721 /* [temp.expl.spec] An explicit specialization of a static data
3722 member of a template is a definition if the declaration
3723 includes an initializer; otherwise, it is a declaration.
3725 We check for processing_specialization so this only applies
3726 to the new specialization syntax. */
3727 if (!DECL_INITIAL (decl)
3728 && processing_specialization)
3729 DECL_EXTERNAL (decl) = 1;
3732 if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl))
3733 pedwarn ("declaration of %q#D outside of class is not definition",
3734 decl);
3737 /* Enter this declaration into the symbol table. */
3738 tem = maybe_push_decl (decl);
3740 if (processing_template_decl)
3741 tem = push_template_decl (tem);
3742 if (tem == error_mark_node)
3743 return error_mark_node;
3745 #if ! defined (ASM_OUTPUT_BSS) && ! defined (ASM_OUTPUT_ALIGNED_BSS)
3746 /* Tell the back-end to use or not use .common as appropriate. If we say
3747 -fconserve-space, we want this to save .data space, at the expense of
3748 wrong semantics. If we say -fno-conserve-space, we want this to
3749 produce errors about redefs; to do this we force variables into the
3750 data segment. */
3751 DECL_COMMON (tem) = ((TREE_CODE (tem) != VAR_DECL
3752 || !DECL_THREAD_LOCAL (tem))
3753 && (flag_conserve_space || ! TREE_PUBLIC (tem)));
3754 #endif
3756 if (! processing_template_decl)
3757 start_decl_1 (tem);
3759 return tem;
3762 void
3763 start_decl_1 (tree decl)
3765 tree type = TREE_TYPE (decl);
3766 int initialized = (DECL_INITIAL (decl) != NULL_TREE);
3768 if (type == error_mark_node)
3769 return;
3771 if (initialized)
3772 /* Is it valid for this decl to have an initializer at all?
3773 If not, set INITIALIZED to zero, which will indirectly
3774 tell `cp_finish_decl' to ignore the initializer once it is parsed. */
3776 /* Don't allow initializations for incomplete types except for
3777 arrays which might be completed by the initialization. */
3778 if (COMPLETE_TYPE_P (complete_type (type)))
3779 ; /* A complete type is ok. */
3780 else if (TREE_CODE (type) != ARRAY_TYPE)
3782 error ("variable %q#D has initializer but incomplete type", decl);
3783 initialized = 0;
3784 type = TREE_TYPE (decl) = error_mark_node;
3786 else if (!COMPLETE_TYPE_P (complete_type (TREE_TYPE (type))))
3788 if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
3789 error ("elements of array %q#D have incomplete type", decl);
3790 /* else we already gave an error in start_decl. */
3791 initialized = 0;
3795 if (!initialized
3796 && TREE_CODE (decl) != TYPE_DECL
3797 && TREE_CODE (decl) != TEMPLATE_DECL
3798 && type != error_mark_node
3799 && IS_AGGR_TYPE (type)
3800 && ! DECL_EXTERNAL (decl))
3802 if ((! processing_template_decl || ! uses_template_parms (type))
3803 && !COMPLETE_TYPE_P (complete_type (type)))
3805 error ("aggregate %q#D has incomplete type and cannot be defined",
3806 decl);
3807 /* Change the type so that assemble_variable will give
3808 DECL an rtl we can live with: (mem (const_int 0)). */
3809 type = TREE_TYPE (decl) = error_mark_node;
3811 else
3813 /* If any base type in the hierarchy of TYPE needs a constructor,
3814 then we set initialized to 1. This way any nodes which are
3815 created for the purposes of initializing this aggregate
3816 will live as long as it does. This is necessary for global
3817 aggregates which do not have their initializers processed until
3818 the end of the file. */
3819 initialized = TYPE_NEEDS_CONSTRUCTING (type);
3823 if (! initialized)
3824 DECL_INITIAL (decl) = NULL_TREE;
3826 /* Create a new scope to hold this declaration if necessary.
3827 Whether or not a new scope is necessary cannot be determined
3828 until after the type has been completed; if the type is a
3829 specialization of a class template it is not until after
3830 instantiation has occurred that TYPE_HAS_NONTRIVIAL_DESTRUCTOR
3831 will be set correctly. */
3832 maybe_push_cleanup_level (type);
3835 /* Handle initialization of references. DECL, TYPE, and INIT have the
3836 same meaning as in cp_finish_decl. *CLEANUP must be NULL on entry,
3837 but will be set to a new CLEANUP_STMT if a temporary is created
3838 that must be destroyed subsequently.
3840 Returns an initializer expression to use to initialize DECL, or
3841 NULL if the initialization can be performed statically.
3843 Quotes on semantics can be found in ARM 8.4.3. */
3845 static tree
3846 grok_reference_init (tree decl, tree type, tree init, tree *cleanup)
3848 tree tmp;
3850 if (init == NULL_TREE)
3852 if ((DECL_LANG_SPECIFIC (decl) == 0
3853 || DECL_IN_AGGR_P (decl) == 0)
3854 && ! DECL_THIS_EXTERN (decl))
3855 error ("%qD declared as reference but not initialized", decl);
3856 return NULL_TREE;
3859 if (TREE_CODE (init) == CONSTRUCTOR)
3861 error ("ISO C++ forbids use of initializer list to "
3862 "initialize reference %qD", decl);
3863 return NULL_TREE;
3866 if (TREE_CODE (init) == TREE_LIST)
3867 init = build_x_compound_expr_from_list (init, "initializer");
3869 if (TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE
3870 && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
3871 /* Note: default conversion is only called in very special cases. */
3872 init = decay_conversion (init);
3874 /* Convert INIT to the reference type TYPE. This may involve the
3875 creation of a temporary, whose lifetime must be the same as that
3876 of the reference. If so, a DECL_EXPR for the temporary will be
3877 added just after the DECL_EXPR for DECL. That's why we don't set
3878 DECL_INITIAL for local references (instead assigning to them
3879 explicitly); we need to allow the temporary to be initialized
3880 first. */
3881 tmp = initialize_reference (type, init, decl, cleanup);
3883 if (tmp == error_mark_node)
3884 return NULL_TREE;
3885 else if (tmp == NULL_TREE)
3887 error ("cannot initialize %qT from %qT", type, TREE_TYPE (init));
3888 return NULL_TREE;
3891 if (TREE_STATIC (decl) && !TREE_CONSTANT (tmp))
3892 return tmp;
3894 DECL_INITIAL (decl) = tmp;
3896 return NULL_TREE;
3899 /* When parsing `int a[] = {1, 2};' we don't know the size of the
3900 array until we finish parsing the initializer. If that's the
3901 situation we're in, update DECL accordingly. */
3903 static void
3904 maybe_deduce_size_from_array_init (tree decl, tree init)
3906 tree type = TREE_TYPE (decl);
3908 if (TREE_CODE (type) == ARRAY_TYPE
3909 && TYPE_DOMAIN (type) == NULL_TREE
3910 && TREE_CODE (decl) != TYPE_DECL)
3912 /* do_default is really a C-ism to deal with tentative definitions.
3913 But let's leave it here to ease the eventual merge. */
3914 int do_default = !DECL_EXTERNAL (decl);
3915 tree initializer = init ? init : DECL_INITIAL (decl);
3916 int failure = cp_complete_array_type (&TREE_TYPE (decl), initializer,
3917 do_default);
3919 if (failure == 1)
3920 error ("initializer fails to determine size of %qD", decl);
3922 if (failure == 2)
3924 if (do_default)
3925 error ("array size missing in %qD", decl);
3926 /* If a `static' var's size isn't known, make it extern as
3927 well as static, so it does not get allocated. If it's not
3928 `static', then don't mark it extern; finish_incomplete_decl
3929 will give it a default size and it will get allocated. */
3930 else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
3931 DECL_EXTERNAL (decl) = 1;
3934 if (failure == 3)
3935 error ("zero-size array %qD", decl);
3937 cp_apply_type_quals_to_decl (cp_type_quals (TREE_TYPE (decl)), decl);
3939 layout_decl (decl, 0);
3943 /* Set DECL_SIZE, DECL_ALIGN, etc. for DECL (a VAR_DECL), and issue
3944 any appropriate error messages regarding the layout. */
3946 static void
3947 layout_var_decl (tree decl)
3949 tree type = TREE_TYPE (decl);
3951 /* If we haven't already layed out this declaration, do so now.
3952 Note that we must not call complete type for an external object
3953 because it's type might involve templates that we are not
3954 supposed to instantiate yet. (And it's perfectly valid to say
3955 `extern X x' for some incomplete type `X'.) */
3956 if (!DECL_EXTERNAL (decl))
3957 complete_type (type);
3958 if (!DECL_SIZE (decl)
3959 && TREE_TYPE (decl) != error_mark_node
3960 && (COMPLETE_TYPE_P (type)
3961 || (TREE_CODE (type) == ARRAY_TYPE
3962 && !TYPE_DOMAIN (type)
3963 && COMPLETE_TYPE_P (TREE_TYPE (type)))))
3964 layout_decl (decl, 0);
3966 if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
3968 /* An automatic variable with an incomplete type: that is an error.
3969 Don't talk about array types here, since we took care of that
3970 message in grokdeclarator. */
3971 error ("storage size of %qD isn't known", decl);
3972 TREE_TYPE (decl) = error_mark_node;
3974 #if 0
3975 /* Keep this code around in case we later want to control debug info
3976 based on whether a type is "used". (jason 1999-11-11) */
3978 else if (!DECL_EXTERNAL (decl) && IS_AGGR_TYPE (ttype))
3979 /* Let debugger know it should output info for this type. */
3980 note_debug_info_needed (ttype);
3982 if (TREE_STATIC (decl) && DECL_CLASS_SCOPE_P (decl))
3983 note_debug_info_needed (DECL_CONTEXT (decl));
3984 #endif
3986 if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
3987 && DECL_SIZE (decl) != NULL_TREE
3988 && ! TREE_CONSTANT (DECL_SIZE (decl)))
3990 if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
3991 constant_expression_warning (DECL_SIZE (decl));
3992 else
3993 error ("storage size of %qD isn't constant", decl);
3996 if (TREE_STATIC (decl)
3997 && !DECL_ARTIFICIAL (decl)
3998 && current_function_decl
3999 && DECL_CONTEXT (decl) == current_function_decl)
4000 push_local_name (decl);
4003 /* If a local static variable is declared in an inline function, or if
4004 we have a weak definition, we must endeavor to create only one
4005 instance of the variable at link-time. */
4007 static void
4008 maybe_commonize_var (tree decl)
4010 /* Static data in a function with comdat linkage also has comdat
4011 linkage. */
4012 if (TREE_STATIC (decl)
4013 /* Don't mess with __FUNCTION__. */
4014 && ! DECL_ARTIFICIAL (decl)
4015 && DECL_FUNCTION_SCOPE_P (decl)
4016 /* Unfortunately, import_export_decl has not always been called
4017 before the function is processed, so we cannot simply check
4018 DECL_COMDAT. */
4019 && (DECL_COMDAT (DECL_CONTEXT (decl))
4020 || ((DECL_DECLARED_INLINE_P (DECL_CONTEXT (decl))
4021 || DECL_TEMPLATE_INSTANTIATION (DECL_CONTEXT (decl)))
4022 && TREE_PUBLIC (DECL_CONTEXT (decl)))))
4024 if (flag_weak)
4026 /* With weak symbols, we simply make the variable COMDAT;
4027 that will cause copies in multiple translations units to
4028 be merged. */
4029 comdat_linkage (decl);
4031 else
4033 if (DECL_INITIAL (decl) == NULL_TREE
4034 || DECL_INITIAL (decl) == error_mark_node)
4036 /* Without weak symbols, we can use COMMON to merge
4037 uninitialized variables. */
4038 TREE_PUBLIC (decl) = 1;
4039 DECL_COMMON (decl) = 1;
4041 else
4043 /* While for initialized variables, we must use internal
4044 linkage -- which means that multiple copies will not
4045 be merged. */
4046 TREE_PUBLIC (decl) = 0;
4047 DECL_COMMON (decl) = 0;
4048 cp_warning_at ("sorry: semantics of inline function static "
4049 "data %q#D are wrong (you'll wind up "
4050 "with multiple copies)", decl);
4051 warning (0, "%J you can work around this by removing "
4052 "the initializer",
4053 decl);
4057 else if (DECL_LANG_SPECIFIC (decl) && DECL_COMDAT (decl))
4058 /* Set it up again; we might have set DECL_INITIAL since the last
4059 time. */
4060 comdat_linkage (decl);
4063 /* Issue an error message if DECL is an uninitialized const variable. */
4065 static void
4066 check_for_uninitialized_const_var (tree decl)
4068 tree type = TREE_TYPE (decl);
4070 /* ``Unless explicitly declared extern, a const object does not have
4071 external linkage and must be initialized. ($8.4; $12.1)'' ARM
4072 7.1.6 */
4073 if (TREE_CODE (decl) == VAR_DECL
4074 && TREE_CODE (type) != REFERENCE_TYPE
4075 && CP_TYPE_CONST_P (type)
4076 && !TYPE_NEEDS_CONSTRUCTING (type)
4077 && !DECL_INITIAL (decl))
4078 error ("uninitialized const %qD", decl);
4081 /* FIELD is a FIELD_DECL or NULL. In the former case, the value
4082 returned is the next FIELD_DECL (possibly FIELD itself) that can be
4083 initialized. If there are no more such fields, the return value
4084 will be NULL. */
4086 static tree
4087 next_initializable_field (tree field)
4089 while (field
4090 && (TREE_CODE (field) != FIELD_DECL
4091 || (DECL_C_BIT_FIELD (field) && !DECL_NAME (field))
4092 || DECL_ARTIFICIAL (field)))
4093 field = TREE_CHAIN (field);
4095 return field;
4098 /* Subroutine of reshape_init. Reshape the constructor for an array. INITP
4099 is the pointer to the old constructor list (to the CONSTRUCTOR_ELTS of
4100 the CONSTRUCTOR we are processing), while NEW_INIT is the CONSTRUCTOR we
4101 are building.
4102 ELT_TYPE is the element type of the array. MAX_INDEX is an INTEGER_CST
4103 representing the size of the array minus one (the maximum index), or
4104 NULL_TREE if the array was declared without specifying the size. */
4106 static bool
4107 reshape_init_array (tree elt_type, tree max_index,
4108 tree *initp, tree new_init)
4110 bool sized_array_p = (max_index != NULL_TREE);
4111 unsigned HOST_WIDE_INT max_index_cst = 0;
4112 unsigned HOST_WIDE_INT index;
4114 if (sized_array_p)
4116 if (host_integerp (max_index, 1))
4117 max_index_cst = tree_low_cst (max_index, 1);
4118 /* sizetype is sign extended, not zero extended. */
4119 else
4120 max_index_cst = tree_low_cst (fold_convert (size_type_node, max_index),
4124 /* Loop until there are no more initializers. */
4125 for (index = 0;
4126 *initp && (!sized_array_p || index <= max_index_cst);
4127 ++index)
4129 tree element_init;
4130 tree designated_index;
4132 element_init = reshape_init (elt_type, initp);
4133 if (element_init == error_mark_node)
4134 return false;
4135 TREE_CHAIN (element_init) = CONSTRUCTOR_ELTS (new_init);
4136 CONSTRUCTOR_ELTS (new_init) = element_init;
4137 designated_index = TREE_PURPOSE (element_init);
4138 if (designated_index)
4140 /* Handle array designated initializers (GNU extension). */
4141 if (TREE_CODE (designated_index) == IDENTIFIER_NODE)
4143 error ("name %qD used in a GNU-style designated "
4144 "initializer for an array", designated_index);
4145 TREE_PURPOSE (element_init) = NULL_TREE;
4147 else
4148 gcc_unreachable ();
4152 return true;
4155 /* Undo the brace-elision allowed by [dcl.init.aggr] in a
4156 brace-enclosed aggregate initializer.
4158 *INITP is one of a list of initializers describing a brace-enclosed
4159 initializer for an entity of the indicated aggregate TYPE. It may
4160 not presently match the shape of the TYPE; for example:
4162 struct S { int a; int b; };
4163 struct S a[] = { 1, 2, 3, 4 };
4165 Here *INITP will point to TREE_LIST of four elements, rather than a
4166 list of two elements, each itself a list of two elements. This
4167 routine transforms INIT from the former form into the latter. The
4168 revised initializer is returned. */
4170 static tree
4171 reshape_init (tree type, tree *initp)
4173 tree inits;
4174 tree old_init;
4175 tree old_init_value;
4176 tree new_init;
4177 bool brace_enclosed_p;
4178 bool string_init_p;
4180 old_init = *initp;
4181 old_init_value = (TREE_CODE (*initp) == TREE_LIST
4182 ? TREE_VALUE (*initp) : old_init);
4184 gcc_assert (old_init_value);
4186 /* If the initializer is brace-enclosed, pull initializers from the
4187 enclosed elements. Advance past the brace-enclosed initializer
4188 now. */
4189 if (TREE_CODE (old_init_value) == CONSTRUCTOR
4190 && BRACE_ENCLOSED_INITIALIZER_P (old_init_value))
4192 *initp = TREE_CHAIN (old_init);
4193 TREE_CHAIN (old_init) = NULL_TREE;
4194 inits = CONSTRUCTOR_ELTS (old_init_value);
4195 initp = &inits;
4196 brace_enclosed_p = true;
4198 else
4200 inits = NULL_TREE;
4201 brace_enclosed_p = false;
4204 /* A non-aggregate type is always initialized with a single
4205 initializer. */
4206 if (!CP_AGGREGATE_TYPE_P (type))
4208 *initp = TREE_CHAIN (old_init);
4209 TREE_CHAIN (old_init) = NULL_TREE;
4210 /* It is invalid to initialize a non-aggregate type with a
4211 brace-enclosed initializer. */
4212 if (brace_enclosed_p)
4214 error ("brace-enclosed initializer used to initialize %qT",
4215 type);
4216 if (TREE_CODE (old_init) == TREE_LIST)
4217 TREE_VALUE (old_init) = error_mark_node;
4218 else
4219 old_init = error_mark_node;
4222 return old_init;
4225 /* [dcl.init.aggr]
4227 All implicit type conversions (clause _conv_) are considered when
4228 initializing the aggregate member with an initializer from an
4229 initializer-list. If the initializer can initialize a member,
4230 the member is initialized. Otherwise, if the member is itself a
4231 non-empty subaggregate, brace elision is assumed and the
4232 initializer is considered for the initialization of the first
4233 member of the subaggregate. */
4234 if (!brace_enclosed_p
4235 && can_convert_arg (type, TREE_TYPE (old_init_value), old_init_value))
4237 *initp = TREE_CHAIN (old_init);
4238 TREE_CHAIN (old_init) = NULL_TREE;
4239 return old_init;
4242 string_init_p = false;
4243 if (TREE_CODE (old_init_value) == STRING_CST
4244 && TREE_CODE (type) == ARRAY_TYPE
4245 && char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (type))))
4247 /* [dcl.init.string]
4249 A char array (whether plain char, signed char, or unsigned char)
4250 can be initialized by a string-literal (optionally enclosed in
4251 braces); a wchar_t array can be initialized by a wide
4252 string-literal (optionally enclosed in braces). */
4253 new_init = old_init;
4254 /* Move past the initializer. */
4255 *initp = TREE_CHAIN (old_init);
4256 TREE_CHAIN (old_init) = NULL_TREE;
4257 string_init_p = true;
4259 else
4261 /* Build a CONSTRUCTOR to hold the contents of the aggregate. */
4262 new_init = build_constructor (NULL_TREE, NULL_TREE);
4264 if (CLASS_TYPE_P (type))
4266 tree field;
4268 field = next_initializable_field (TYPE_FIELDS (type));
4270 if (!field)
4272 /* [dcl.init.aggr]
4274 An initializer for an aggregate member that is an
4275 empty class shall have the form of an empty
4276 initializer-list {}. */
4277 if (!brace_enclosed_p)
4279 error ("initializer for %qT must be brace-enclosed", type);
4280 return error_mark_node;
4283 else
4285 /* Loop through the initializable fields, gathering
4286 initializers. */
4287 while (*initp)
4289 tree field_init;
4291 /* Handle designated initializers, as an extension. */
4292 if (TREE_PURPOSE (*initp))
4294 if (pedantic)
4295 pedwarn ("ISO C++ does not allow designated initializers");
4296 field = lookup_field_1 (type, TREE_PURPOSE (*initp),
4297 /*want_type=*/false);
4298 if (!field || TREE_CODE (field) != FIELD_DECL)
4299 error ("%qT has no non-static data member named %qD",
4300 type, TREE_PURPOSE (*initp));
4302 if (!field)
4303 break;
4305 field_init = reshape_init (TREE_TYPE (field), initp);
4306 if (field_init == error_mark_node)
4307 return error_mark_node;
4308 TREE_CHAIN (field_init) = CONSTRUCTOR_ELTS (new_init);
4309 CONSTRUCTOR_ELTS (new_init) = field_init;
4310 /* [dcl.init.aggr]
4312 When a union is initialized with a brace-enclosed
4313 initializer, the braces shall only contain an
4314 initializer for the first member of the union. */
4315 if (TREE_CODE (type) == UNION_TYPE)
4316 break;
4317 field = next_initializable_field (TREE_CHAIN (field));
4321 else if (TREE_CODE (type) == ARRAY_TYPE
4322 || TREE_CODE (type) == VECTOR_TYPE)
4324 /* If the bound of the array is known, take no more initializers
4325 than are allowed. */
4326 tree max_index = NULL_TREE;
4327 if (TREE_CODE (type) == ARRAY_TYPE)
4329 if (TYPE_DOMAIN (type))
4330 max_index = array_type_nelts (type);
4332 else
4334 /* For a vector, the representation type is a struct
4335 containing a single member which is an array of the
4336 appropriate size. */
4337 tree rtype = TYPE_DEBUG_REPRESENTATION_TYPE (type);
4338 if (rtype && TYPE_DOMAIN (TREE_TYPE (TYPE_FIELDS (rtype))))
4339 max_index = array_type_nelts (TREE_TYPE (TYPE_FIELDS
4340 (rtype)));
4343 if (!reshape_init_array (TREE_TYPE (type), max_index,
4344 initp, new_init))
4345 return error_mark_node;
4347 else
4348 gcc_unreachable ();
4350 /* The initializers were placed in reverse order in the
4351 CONSTRUCTOR. */
4352 CONSTRUCTOR_ELTS (new_init) = nreverse (CONSTRUCTOR_ELTS (new_init));
4354 if (TREE_CODE (old_init) == TREE_LIST)
4355 new_init = build_tree_list (TREE_PURPOSE (old_init), new_init);
4358 /* If there are more initializers than necessary, issue a
4359 diagnostic. */
4360 if (*initp)
4362 if (brace_enclosed_p)
4363 error ("too many initializers for %qT", type);
4364 else if (warn_missing_braces && !string_init_p)
4365 warning (0, "missing braces around initializer");
4368 return new_init;
4371 /* Verify INIT (the initializer for DECL), and record the
4372 initialization in DECL_INITIAL, if appropriate. CLEANUP is as for
4373 grok_reference_init.
4375 If the return value is non-NULL, it is an expression that must be
4376 evaluated dynamically to initialize DECL. */
4378 static tree
4379 check_initializer (tree decl, tree init, int flags, tree *cleanup)
4381 tree type = TREE_TYPE (decl);
4382 tree init_code = NULL;
4384 /* If `start_decl' didn't like having an initialization, ignore it now. */
4385 if (init != NULL_TREE && DECL_INITIAL (decl) == NULL_TREE)
4386 init = NULL_TREE;
4388 /* If an initializer is present, DECL_INITIAL has been
4389 error_mark_node, to indicate that an as-of-yet unevaluated
4390 initialization will occur. From now on, DECL_INITIAL reflects
4391 the static initialization -- if any -- of DECL. */
4392 DECL_INITIAL (decl) = NULL_TREE;
4394 /* Things that are going to be initialized need to have complete
4395 type. */
4396 TREE_TYPE (decl) = type = complete_type (TREE_TYPE (decl));
4398 if (type == error_mark_node)
4399 /* We will have already complained. */
4400 init = NULL_TREE;
4401 else if (init && COMPLETE_TYPE_P (type)
4402 && !TREE_CONSTANT (TYPE_SIZE (type)))
4404 error ("variable-sized object %qD may not be initialized", decl);
4405 init = NULL_TREE;
4407 else if (TREE_CODE (type) == ARRAY_TYPE
4408 && !COMPLETE_TYPE_P (complete_type (TREE_TYPE (type))))
4410 error ("elements of array %q#D have incomplete type", decl);
4411 init = NULL_TREE;
4413 else if (TREE_CODE (type) != ARRAY_TYPE && !COMPLETE_TYPE_P (type))
4415 error ("%qD has incomplete type", decl);
4416 TREE_TYPE (decl) = error_mark_node;
4417 init = NULL_TREE;
4420 if (TREE_CODE (decl) == CONST_DECL)
4422 gcc_assert (TREE_CODE (decl) != REFERENCE_TYPE);
4424 DECL_INITIAL (decl) = init;
4426 gcc_assert (init != NULL_TREE);
4427 init = NULL_TREE;
4429 else if (!DECL_EXTERNAL (decl) && TREE_CODE (type) == REFERENCE_TYPE)
4430 init = grok_reference_init (decl, type, init, cleanup);
4431 else if (init)
4433 if (TREE_CODE (init) == CONSTRUCTOR
4434 && BRACE_ENCLOSED_INITIALIZER_P (init))
4436 /* [dcl.init] paragraph 13,
4437 If T is a scalar type, then a declaration of the form
4438 T x = { a };
4439 is equivalent to
4440 T x = a;
4442 reshape_init will complain about the extra braces,
4443 and doesn't do anything useful in the case where TYPE is
4444 scalar, so just don't call it. */
4445 if (CP_AGGREGATE_TYPE_P (type))
4446 init = reshape_init (type, &init);
4448 if ((*targetm.vector_opaque_p) (type))
4450 error ("opaque vector types cannot be initialized");
4451 init = error_mark_node;
4455 /* If DECL has an array type without a specific bound, deduce the
4456 array size from the initializer. */
4457 maybe_deduce_size_from_array_init (decl, init);
4458 type = TREE_TYPE (decl);
4460 if (TYPE_HAS_CONSTRUCTOR (type) || TYPE_NEEDS_CONSTRUCTING (type))
4462 if (TREE_CODE (type) == ARRAY_TYPE)
4463 goto initialize_aggr;
4464 else if (TREE_CODE (init) == CONSTRUCTOR
4465 && BRACE_ENCLOSED_INITIALIZER_P (init))
4467 if (TYPE_NON_AGGREGATE_CLASS (type))
4469 error ("%qD must be initialized by constructor, "
4470 "not by %<{...}%>",
4471 decl);
4472 init = error_mark_node;
4474 else
4475 goto dont_use_constructor;
4477 else
4479 int saved_stmts_are_full_exprs_p;
4481 initialize_aggr:
4482 saved_stmts_are_full_exprs_p = 0;
4483 if (building_stmt_tree ())
4485 saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
4486 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
4488 init = build_aggr_init (decl, init, flags);
4489 if (building_stmt_tree ())
4490 current_stmt_tree ()->stmts_are_full_exprs_p =
4491 saved_stmts_are_full_exprs_p;
4492 return init;
4495 else
4497 dont_use_constructor:
4498 if (TREE_CODE (init) != TREE_VEC)
4500 init_code = store_init_value (decl, init);
4501 if (pedantic && TREE_CODE (type) == ARRAY_TYPE
4502 && DECL_INITIAL (decl)
4503 && TREE_CODE (DECL_INITIAL (decl)) == STRING_CST
4504 && PAREN_STRING_LITERAL_P (DECL_INITIAL (decl)))
4505 warning (0, "array %qD initialized by parenthesized string literal %qE",
4506 decl, DECL_INITIAL (decl));
4507 init = NULL;
4511 else if (DECL_EXTERNAL (decl))
4513 else if (TYPE_P (type) && TYPE_NEEDS_CONSTRUCTING (type))
4514 goto initialize_aggr;
4515 else if (IS_AGGR_TYPE (type))
4517 tree core_type = strip_array_types (type);
4519 if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type))
4520 error ("structure %qD with uninitialized const members", decl);
4521 if (CLASSTYPE_REF_FIELDS_NEED_INIT (core_type))
4522 error ("structure %qD with uninitialized reference members", decl);
4524 check_for_uninitialized_const_var (decl);
4526 else
4527 check_for_uninitialized_const_var (decl);
4529 if (init && init != error_mark_node)
4530 init_code = build2 (INIT_EXPR, type, decl, init);
4532 return init_code;
4535 /* If DECL is not a local variable, give it RTL. */
4537 static void
4538 make_rtl_for_nonlocal_decl (tree decl, tree init, const char* asmspec)
4540 int toplev = toplevel_bindings_p ();
4541 int defer_p;
4542 const char *filename;
4544 /* Set the DECL_ASSEMBLER_NAME for the object. */
4545 if (asmspec)
4547 /* The `register' keyword, when used together with an
4548 asm-specification, indicates that the variable should be
4549 placed in a particular register. */
4550 if (TREE_CODE (decl) == VAR_DECL && DECL_REGISTER (decl))
4552 change_decl_assembler_name (decl, get_identifier (asmspec));
4553 DECL_HARD_REGISTER (decl) = 1;
4555 else
4557 if (TREE_CODE (decl) == FUNCTION_DECL
4558 && DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL)
4559 set_builtin_user_assembler_name (decl, asmspec);
4560 set_user_assembler_name (decl, asmspec);
4564 /* Handle non-variables up front. */
4565 if (TREE_CODE (decl) != VAR_DECL)
4567 rest_of_decl_compilation (decl, toplev, at_eof);
4568 return;
4571 /* If we see a class member here, it should be a static data
4572 member. */
4573 if (DECL_LANG_SPECIFIC (decl) && DECL_IN_AGGR_P (decl))
4575 gcc_assert (TREE_STATIC (decl));
4576 /* An in-class declaration of a static data member should be
4577 external; it is only a declaration, and not a definition. */
4578 if (init == NULL_TREE)
4579 gcc_assert (DECL_EXTERNAL (decl));
4582 /* We don't create any RTL for local variables. */
4583 if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
4584 return;
4586 /* We defer emission of local statics until the corresponding
4587 DECL_EXPR is expanded. */
4588 defer_p = DECL_FUNCTION_SCOPE_P (decl) || DECL_VIRTUAL_P (decl);
4590 /* We try to defer namespace-scope static constants so that they are
4591 not emitted into the object file unnecessarily. */
4592 filename = input_filename;
4593 if (!DECL_VIRTUAL_P (decl)
4594 && TREE_READONLY (decl)
4595 && DECL_INITIAL (decl) != NULL_TREE
4596 && DECL_INITIAL (decl) != error_mark_node
4597 && filename != NULL
4598 && ! EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl))
4599 && toplev
4600 && !TREE_PUBLIC (decl))
4602 /* Fool with the linkage of static consts according to #pragma
4603 interface. */
4604 struct c_fileinfo *finfo = get_fileinfo (lbasename (filename));
4605 if (!finfo->interface_unknown && !TREE_PUBLIC (decl))
4607 TREE_PUBLIC (decl) = 1;
4608 DECL_EXTERNAL (decl) = finfo->interface_only;
4611 defer_p = 1;
4613 /* Likewise for template instantiations. */
4614 else if (DECL_LANG_SPECIFIC (decl)
4615 && DECL_IMPLICIT_INSTANTIATION (decl))
4616 defer_p = 1;
4618 /* If we're not deferring, go ahead and assemble the variable. */
4619 if (!defer_p)
4620 rest_of_decl_compilation (decl, toplev, at_eof);
4623 /* Generate code to initialize DECL (a local variable). */
4625 static void
4626 initialize_local_var (tree decl, tree init)
4628 tree type = TREE_TYPE (decl);
4629 tree cleanup;
4631 gcc_assert (TREE_CODE (decl) == VAR_DECL
4632 || TREE_CODE (decl) == RESULT_DECL);
4633 gcc_assert (!TREE_STATIC (decl));
4635 if (DECL_SIZE (decl) == NULL_TREE)
4637 /* If we used it already as memory, it must stay in memory. */
4638 DECL_INITIAL (decl) = NULL_TREE;
4639 TREE_ADDRESSABLE (decl) = TREE_USED (decl);
4642 if (DECL_SIZE (decl) && type != error_mark_node)
4644 int already_used;
4646 /* Compute and store the initial value. */
4647 already_used = TREE_USED (decl) || TREE_USED (type);
4649 /* Perform the initialization. */
4650 if (init)
4652 int saved_stmts_are_full_exprs_p;
4654 gcc_assert (building_stmt_tree ());
4655 saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
4656 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
4657 finish_expr_stmt (init);
4658 current_stmt_tree ()->stmts_are_full_exprs_p =
4659 saved_stmts_are_full_exprs_p;
4662 /* Set this to 0 so we can tell whether an aggregate which was
4663 initialized was ever used. Don't do this if it has a
4664 destructor, so we don't complain about the 'resource
4665 allocation is initialization' idiom. Now set
4666 attribute((unused)) on types so decls of that type will be
4667 marked used. (see TREE_USED, above.) */
4668 if (TYPE_NEEDS_CONSTRUCTING (type)
4669 && ! already_used
4670 && TYPE_HAS_TRIVIAL_DESTRUCTOR (type)
4671 && DECL_NAME (decl))
4672 TREE_USED (decl) = 0;
4673 else if (already_used)
4674 TREE_USED (decl) = 1;
4677 /* Generate a cleanup, if necessary. */
4678 cleanup = cxx_maybe_build_cleanup (decl);
4679 if (DECL_SIZE (decl) && cleanup)
4680 finish_decl_cleanup (decl, cleanup);
4683 /* DECL is a VAR_DECL for a compiler-generated variable with static
4684 storage duration (like a virtual table) whose initializer is a
4685 compile-time constant. Initialize the variable and provide it to
4686 the back end. */
4688 void
4689 initialize_artificial_var (tree decl, tree init)
4691 DECL_INITIAL (decl) = build_constructor (NULL_TREE, init);
4692 DECL_INITIALIZED_P (decl) = 1;
4693 determine_visibility (decl);
4694 layout_var_decl (decl);
4695 maybe_commonize_var (decl);
4696 make_rtl_for_nonlocal_decl (decl, init, /*asmspec=*/NULL);
4699 /* Finish processing of a declaration;
4700 install its line number and initial value.
4701 If the length of an array type is not known before,
4702 it must be determined now, from the initial value, or it is an error.
4704 INIT holds the value of an initializer that should be allowed to escape
4705 the normal rules.
4707 FLAGS is LOOKUP_ONLYCONVERTING if the = init syntax was used, else 0
4708 if the (init) syntax was used. */
4710 void
4711 cp_finish_decl (tree decl, tree init, tree asmspec_tree, int flags)
4713 tree type;
4714 tree cleanup;
4715 const char *asmspec = NULL;
4716 int was_readonly = 0;
4717 bool var_definition_p = false;
4719 if (decl == error_mark_node)
4720 return;
4721 else if (! decl)
4723 if (init)
4724 error ("assignment (not initialization) in declaration");
4725 return;
4728 gcc_assert (TREE_CODE (decl) != RESULT_DECL);
4730 /* Assume no cleanup is required. */
4731 cleanup = NULL_TREE;
4733 /* If a name was specified, get the string. */
4734 if (global_scope_p (current_binding_level))
4735 asmspec_tree = maybe_apply_renaming_pragma (decl, asmspec_tree);
4736 if (asmspec_tree)
4737 asmspec = TREE_STRING_POINTER (asmspec_tree);
4739 if (init && TREE_CODE (init) == NAMESPACE_DECL)
4741 error ("cannot initialize %qD to namespace %qD", decl, init);
4742 init = NULL_TREE;
4745 if (current_class_type
4746 && CP_DECL_CONTEXT (decl) == current_class_type
4747 && TYPE_BEING_DEFINED (current_class_type)
4748 && (DECL_INITIAL (decl) || init))
4749 DECL_INITIALIZED_IN_CLASS_P (decl) = 1;
4751 type = TREE_TYPE (decl);
4753 if (type == error_mark_node)
4754 goto finish_end;
4756 if (processing_template_decl)
4758 /* Add this declaration to the statement-tree. */
4759 if (at_function_scope_p ())
4760 add_decl_expr (decl);
4762 if (init && DECL_INITIAL (decl))
4763 DECL_INITIAL (decl) = init;
4764 if (TREE_CODE (decl) == VAR_DECL
4765 && !DECL_PRETTY_FUNCTION_P (decl)
4766 && !dependent_type_p (TREE_TYPE (decl)))
4767 maybe_deduce_size_from_array_init (decl, init);
4769 goto finish_end;
4772 /* Parameters are handled by store_parm_decls, not cp_finish_decl. */
4773 gcc_assert (TREE_CODE (decl) != PARM_DECL);
4775 /* Take care of TYPE_DECLs up front. */
4776 if (TREE_CODE (decl) == TYPE_DECL)
4778 if (type != error_mark_node
4779 && IS_AGGR_TYPE (type) && DECL_NAME (decl))
4781 if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
4782 warning (0, "shadowing previous type declaration of %q#D", decl);
4783 set_identifier_type_value (DECL_NAME (decl), decl);
4786 /* If we have installed this as the canonical typedef for this
4787 type, and that type has not been defined yet, delay emitting
4788 the debug information for it, as we will emit it later. */
4789 if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
4790 && !COMPLETE_TYPE_P (TREE_TYPE (decl)))
4791 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
4793 rest_of_decl_compilation (decl, DECL_CONTEXT (decl) == NULL_TREE,
4794 at_eof);
4795 goto finish_end;
4798 /* A reference will be modified here, as it is initialized. */
4799 if (! DECL_EXTERNAL (decl)
4800 && TREE_READONLY (decl)
4801 && TREE_CODE (type) == REFERENCE_TYPE)
4803 was_readonly = 1;
4804 TREE_READONLY (decl) = 0;
4807 if (TREE_CODE (decl) == VAR_DECL)
4809 /* Only PODs can have thread-local storage. Other types may require
4810 various kinds of non-trivial initialization. */
4811 if (DECL_THREAD_LOCAL (decl) && !pod_type_p (TREE_TYPE (decl)))
4812 error ("%qD cannot be thread-local because it has non-POD type %qT",
4813 decl, TREE_TYPE (decl));
4814 /* Convert the initializer to the type of DECL, if we have not
4815 already initialized DECL. */
4816 if (!DECL_INITIALIZED_P (decl)
4817 /* If !DECL_EXTERNAL then DECL is being defined. In the
4818 case of a static data member initialized inside the
4819 class-specifier, there can be an initializer even if DECL
4820 is *not* defined. */
4821 && (!DECL_EXTERNAL (decl) || init))
4823 init = check_initializer (decl, init, flags, &cleanup);
4824 /* Thread-local storage cannot be dynamically initialized. */
4825 if (DECL_THREAD_LOCAL (decl) && init)
4827 error ("%qD is thread-local and so cannot be dynamically "
4828 "initialized", decl);
4829 init = NULL_TREE;
4831 if (DECL_EXTERNAL (decl) && init)
4833 /* The static data member cannot be initialized by a
4834 non-constant when being declared. */
4835 error ("%qD cannot be initialized by a non-constant expression"
4836 " when being declared", decl);
4837 DECL_INITIALIZED_IN_CLASS_P (decl) = 0;
4838 init = NULL_TREE;
4841 /* Handle:
4843 [dcl.init]
4845 The memory occupied by any object of static storage
4846 duration is zero-initialized at program startup before
4847 any other initialization takes place.
4849 We cannot create an appropriate initializer until after
4850 the type of DECL is finalized. If DECL_INITIAL is set,
4851 then the DECL is statically initialized, and any
4852 necessary zero-initialization has already been performed. */
4853 if (TREE_STATIC (decl) && !DECL_INITIAL (decl))
4854 DECL_INITIAL (decl) = build_zero_init (TREE_TYPE (decl),
4855 /*nelts=*/NULL_TREE,
4856 /*static_storage_p=*/true);
4857 /* Remember that the initialization for this variable has
4858 taken place. */
4859 DECL_INITIALIZED_P (decl) = 1;
4860 /* This declaration is the definition of this variable,
4861 unless we are initializing a static data member within
4862 the class specifier. */
4863 if (!DECL_EXTERNAL (decl))
4864 var_definition_p = true;
4865 /* The variable is being defined, so determine its
4866 visibility. */
4867 determine_visibility (decl);
4869 /* If the variable has an array type, lay out the type, even if
4870 there is no initializer. It is valid to index through the
4871 array, and we must get TYPE_ALIGN set correctly on the array
4872 type. */
4873 else if (TREE_CODE (type) == ARRAY_TYPE)
4874 layout_type (type);
4877 /* Add this declaration to the statement-tree. This needs to happen
4878 after the call to check_initializer so that the DECL_EXPR for a
4879 reference temp is added before the DECL_EXPR for the reference itself. */
4880 if (at_function_scope_p ())
4881 add_decl_expr (decl);
4883 if (TREE_CODE (decl) == VAR_DECL)
4884 layout_var_decl (decl);
4886 /* Output the assembler code and/or RTL code for variables and functions,
4887 unless the type is an undefined structure or union.
4888 If not, it will get done when the type is completed. */
4889 if (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == FUNCTION_DECL)
4891 if (TREE_CODE (decl) == VAR_DECL)
4892 maybe_commonize_var (decl);
4894 make_rtl_for_nonlocal_decl (decl, init, asmspec);
4896 /* Check for abstractness of the type. Notice that there is no
4897 need to strip array types here since the check for those types
4898 is already done within create_array_type_for_decl. */
4899 if (TREE_CODE (type) == FUNCTION_TYPE
4900 || TREE_CODE (type) == METHOD_TYPE)
4901 abstract_virtuals_error (decl, TREE_TYPE (type));
4902 else
4903 abstract_virtuals_error (decl, type);
4905 if (TREE_CODE (decl) == FUNCTION_DECL
4906 || TREE_TYPE (decl) == error_mark_node)
4907 /* No initialization required. */
4909 else if (DECL_EXTERNAL (decl)
4910 && ! (DECL_LANG_SPECIFIC (decl)
4911 && DECL_NOT_REALLY_EXTERN (decl)))
4913 if (init)
4914 DECL_INITIAL (decl) = init;
4916 else
4918 /* A variable definition. */
4919 if (DECL_FUNCTION_SCOPE_P (decl))
4921 /* Initialize the local variable. */
4922 if (processing_template_decl)
4924 if (init || DECL_INITIAL (decl) == error_mark_node)
4925 DECL_INITIAL (decl) = init;
4927 else if (!TREE_STATIC (decl))
4928 initialize_local_var (decl, init);
4931 /* If a variable is defined, and then a subsequent
4932 definition with external linkage is encountered, we will
4933 get here twice for the same variable. We want to avoid
4934 calling expand_static_init more than once. For variables
4935 that are not static data members, we can call
4936 expand_static_init only when we actually process the
4937 initializer. It is not legal to redeclare a static data
4938 member, so this issue does not arise in that case. */
4939 if (var_definition_p && TREE_STATIC (decl))
4940 expand_static_init (decl, init);
4944 /* If a CLEANUP_STMT was created to destroy a temporary bound to a
4945 reference, insert it in the statement-tree now. */
4946 if (cleanup)
4947 push_cleanup (decl, cleanup, false);
4949 finish_end:
4951 if (was_readonly)
4952 TREE_READONLY (decl) = 1;
4954 /* If this was marked 'used', be sure it will be output. */
4955 if (lookup_attribute ("used", DECL_ATTRIBUTES (decl)))
4956 mark_decl_referenced (decl);
4959 /* This is here for a midend callback from c-common.c. */
4961 void
4962 finish_decl (tree decl, tree init, tree asmspec_tree)
4964 cp_finish_decl (decl, init, asmspec_tree, 0);
4967 /* Returns a declaration for a VAR_DECL as if:
4969 extern "C" TYPE NAME;
4971 had been seen. Used to create compiler-generated global
4972 variables. */
4974 tree
4975 declare_global_var (tree name, tree type)
4977 tree decl;
4979 push_to_top_level ();
4980 decl = build_decl (VAR_DECL, name, type);
4981 TREE_PUBLIC (decl) = 1;
4982 DECL_EXTERNAL (decl) = 1;
4983 DECL_ARTIFICIAL (decl) = 1;
4984 /* If the user has explicitly declared this variable (perhaps
4985 because the code we are compiling is part of a low-level runtime
4986 library), then it is possible that our declaration will be merged
4987 with theirs by pushdecl. */
4988 decl = pushdecl (decl);
4989 cp_finish_decl (decl, NULL_TREE, NULL_TREE, 0);
4990 pop_from_top_level ();
4992 return decl;
4995 /* Returns a pointer to the `atexit' function. Note that if
4996 FLAG_USE_CXA_ATEXIT is nonzero, then this will actually be the new
4997 `__cxa_atexit' function specified in the IA64 C++ ABI. */
4999 static tree
5000 get_atexit_node (void)
5002 tree atexit_fndecl;
5003 tree arg_types;
5004 tree fn_type;
5005 tree fn_ptr_type;
5006 const char *name;
5007 bool use_aeabi_atexit;
5009 if (atexit_node)
5010 return atexit_node;
5012 if (flag_use_cxa_atexit)
5014 /* The declaration for `__cxa_atexit' is:
5016 int __cxa_atexit (void (*)(void *), void *, void *)
5018 We build up the argument types and then then function type
5019 itself. */
5021 use_aeabi_atexit = targetm.cxx.use_aeabi_atexit ();
5022 /* First, build the pointer-to-function type for the first
5023 argument. */
5024 arg_types = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
5025 fn_type = build_function_type (void_type_node, arg_types);
5026 fn_ptr_type = build_pointer_type (fn_type);
5027 /* Then, build the rest of the argument types. */
5028 arg_types = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
5029 if (use_aeabi_atexit)
5031 arg_types = tree_cons (NULL_TREE, fn_ptr_type, arg_types);
5032 arg_types = tree_cons (NULL_TREE, ptr_type_node, arg_types);
5034 else
5036 arg_types = tree_cons (NULL_TREE, ptr_type_node, arg_types);
5037 arg_types = tree_cons (NULL_TREE, fn_ptr_type, arg_types);
5039 /* And the final __cxa_atexit type. */
5040 fn_type = build_function_type (integer_type_node, arg_types);
5041 fn_ptr_type = build_pointer_type (fn_type);
5042 if (use_aeabi_atexit)
5043 name = "__aeabi_atexit";
5044 else
5045 name = "__cxa_atexit";
5047 else
5049 /* The declaration for `atexit' is:
5051 int atexit (void (*)());
5053 We build up the argument types and then then function type
5054 itself. */
5055 fn_type = build_function_type (void_type_node, void_list_node);
5056 fn_ptr_type = build_pointer_type (fn_type);
5057 arg_types = tree_cons (NULL_TREE, fn_ptr_type, void_list_node);
5058 /* Build the final atexit type. */
5059 fn_type = build_function_type (integer_type_node, arg_types);
5060 name = "atexit";
5063 /* Now, build the function declaration. */
5064 push_lang_context (lang_name_c);
5065 atexit_fndecl = build_library_fn_ptr (name, fn_type);
5066 mark_used (atexit_fndecl);
5067 pop_lang_context ();
5068 atexit_node = decay_conversion (atexit_fndecl);
5070 return atexit_node;
5073 /* Returns the __dso_handle VAR_DECL. */
5075 static tree
5076 get_dso_handle_node (void)
5078 if (dso_handle_node)
5079 return dso_handle_node;
5081 /* Declare the variable. */
5082 dso_handle_node = declare_global_var (get_identifier ("__dso_handle"),
5083 ptr_type_node);
5085 return dso_handle_node;
5088 /* Begin a new function with internal linkage whose job will be simply
5089 to destroy some particular variable. */
5091 static GTY(()) int start_cleanup_cnt;
5093 static tree
5094 start_cleanup_fn (void)
5096 char name[32];
5097 tree parmtypes;
5098 tree fntype;
5099 tree fndecl;
5101 push_to_top_level ();
5103 /* No need to mangle this. */
5104 push_lang_context (lang_name_c);
5106 /* Build the parameter-types. */
5107 parmtypes = void_list_node;
5108 /* Functions passed to __cxa_atexit take an additional parameter.
5109 We'll just ignore it. After we implement the new calling
5110 convention for destructors, we can eliminate the use of
5111 additional cleanup functions entirely in the -fnew-abi case. */
5112 if (flag_use_cxa_atexit)
5113 parmtypes = tree_cons (NULL_TREE, ptr_type_node, parmtypes);
5114 /* Build the function type itself. */
5115 fntype = build_function_type (void_type_node, parmtypes);
5116 /* Build the name of the function. */
5117 sprintf (name, "__tcf_%d", start_cleanup_cnt++);
5118 /* Build the function declaration. */
5119 fndecl = build_lang_decl (FUNCTION_DECL, get_identifier (name), fntype);
5120 /* It's a function with internal linkage, generated by the
5121 compiler. */
5122 TREE_PUBLIC (fndecl) = 0;
5123 DECL_ARTIFICIAL (fndecl) = 1;
5124 /* Make the function `inline' so that it is only emitted if it is
5125 actually needed. It is unlikely that it will be inlined, since
5126 it is only called via a function pointer, but we avoid unnecessary
5127 emissions this way. */
5128 DECL_INLINE (fndecl) = 1;
5129 DECL_DECLARED_INLINE_P (fndecl) = 1;
5130 DECL_INTERFACE_KNOWN (fndecl) = 1;
5131 /* Build the parameter. */
5132 if (flag_use_cxa_atexit)
5134 tree parmdecl;
5136 parmdecl = cp_build_parm_decl (NULL_TREE, ptr_type_node);
5137 DECL_CONTEXT (parmdecl) = fndecl;
5138 TREE_USED (parmdecl) = 1;
5139 DECL_ARGUMENTS (fndecl) = parmdecl;
5142 pushdecl (fndecl);
5143 start_preparsed_function (fndecl, NULL_TREE, SF_PRE_PARSED);
5145 pop_lang_context ();
5147 return current_function_decl;
5150 /* Finish the cleanup function begun by start_cleanup_fn. */
5152 static void
5153 end_cleanup_fn (void)
5155 expand_or_defer_fn (finish_function (0));
5157 pop_from_top_level ();
5160 /* Generate code to handle the destruction of DECL, an object with
5161 static storage duration. */
5163 tree
5164 register_dtor_fn (tree decl)
5166 tree cleanup;
5167 tree compound_stmt;
5168 tree args;
5169 tree fcall;
5171 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
5172 return void_zero_node;
5174 /* Call build_cleanup before we enter the anonymous function so that
5175 any access checks will be done relative to the current scope,
5176 rather than the scope of the anonymous function. */
5177 build_cleanup (decl);
5179 /* Now start the function. */
5180 cleanup = start_cleanup_fn ();
5182 /* Now, recompute the cleanup. It may contain SAVE_EXPRs that refer
5183 to the original function, rather than the anonymous one. That
5184 will make the back-end think that nested functions are in use,
5185 which causes confusion. */
5187 push_deferring_access_checks (dk_no_check);
5188 fcall = build_cleanup (decl);
5189 pop_deferring_access_checks ();
5191 /* Create the body of the anonymous function. */
5192 compound_stmt = begin_compound_stmt (BCS_FN_BODY);
5193 finish_expr_stmt (fcall);
5194 finish_compound_stmt (compound_stmt);
5195 end_cleanup_fn ();
5197 /* Call atexit with the cleanup function. */
5198 cxx_mark_addressable (cleanup);
5199 mark_used (cleanup);
5200 cleanup = build_unary_op (ADDR_EXPR, cleanup, 0);
5201 if (flag_use_cxa_atexit)
5203 args = tree_cons (NULL_TREE,
5204 build_unary_op (ADDR_EXPR, get_dso_handle_node (), 0),
5205 NULL_TREE);
5206 if (targetm.cxx.use_aeabi_atexit ())
5208 args = tree_cons (NULL_TREE, cleanup, args);
5209 args = tree_cons (NULL_TREE, null_pointer_node, args);
5211 else
5213 args = tree_cons (NULL_TREE, null_pointer_node, args);
5214 args = tree_cons (NULL_TREE, cleanup, args);
5217 else
5218 args = tree_cons (NULL_TREE, cleanup, NULL_TREE);
5219 return build_function_call (get_atexit_node (), args);
5222 /* DECL is a VAR_DECL with static storage duration. INIT, if present,
5223 is its initializer. Generate code to handle the construction
5224 and destruction of DECL. */
5226 static void
5227 expand_static_init (tree decl, tree init)
5229 gcc_assert (TREE_CODE (decl) == VAR_DECL);
5230 gcc_assert (TREE_STATIC (decl));
5232 /* Some variables require no initialization. */
5233 if (!init
5234 && !TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))
5235 && TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
5236 return;
5238 if (DECL_FUNCTION_SCOPE_P (decl))
5240 /* Emit code to perform this initialization but once. */
5241 tree if_stmt = NULL_TREE, inner_if_stmt = NULL_TREE;
5242 tree then_clause = NULL_TREE, inner_then_clause = NULL_TREE;
5243 tree guard, guard_addr, guard_addr_list;
5244 tree acquire_fn, release_fn, abort_fn;
5245 tree flag, begin;
5247 /* Emit code to perform this initialization but once. This code
5248 looks like:
5250 static <type> guard;
5251 if (!guard.first_byte) {
5252 if (__cxa_guard_acquire (&guard)) {
5253 bool flag = false;
5254 try {
5255 // Do initialization.
5256 flag = true; __cxa_guard_release (&guard);
5257 // Register variable for destruction at end of program.
5258 } catch {
5259 if (!flag) __cxa_guard_abort (&guard);
5263 Note that the `flag' variable is only set to 1 *after* the
5264 initialization is complete. This ensures that an exception,
5265 thrown during the construction, will cause the variable to
5266 reinitialized when we pass through this code again, as per:
5268 [stmt.dcl]
5270 If the initialization exits by throwing an exception, the
5271 initialization is not complete, so it will be tried again
5272 the next time control enters the declaration.
5274 This process should be thread-safe, too; multiple threads
5275 should not be able to initialize the variable more than
5276 once. */
5278 /* Create the guard variable. */
5279 guard = get_guard (decl);
5281 /* This optimization isn't safe on targets with relaxed memory
5282 consistency. On such targets we force synchronization in
5283 __cxa_guard_acquire. */
5284 if (!targetm.relaxed_ordering || !flag_threadsafe_statics)
5286 /* Begin the conditional initialization. */
5287 if_stmt = begin_if_stmt ();
5288 finish_if_stmt_cond (get_guard_cond (guard), if_stmt);
5289 then_clause = begin_compound_stmt (BCS_NO_SCOPE);
5292 if (flag_threadsafe_statics)
5294 guard_addr = build_address (guard);
5295 guard_addr_list = build_tree_list (NULL_TREE, guard_addr);
5297 acquire_fn = get_identifier ("__cxa_guard_acquire");
5298 release_fn = get_identifier ("__cxa_guard_release");
5299 abort_fn = get_identifier ("__cxa_guard_abort");
5300 if (!get_global_value_if_present (acquire_fn, &acquire_fn))
5302 tree argtypes = tree_cons (NULL_TREE, TREE_TYPE (guard_addr),
5303 void_list_node);
5304 tree vfntype = build_function_type (void_type_node, argtypes);
5305 acquire_fn = push_library_fn
5306 (acquire_fn, build_function_type (integer_type_node, argtypes));
5307 release_fn = push_library_fn (release_fn, vfntype);
5308 abort_fn = push_library_fn (abort_fn, vfntype);
5310 else
5312 release_fn = identifier_global_value (release_fn);
5313 abort_fn = identifier_global_value (abort_fn);
5316 inner_if_stmt = begin_if_stmt ();
5317 finish_if_stmt_cond (build_call (acquire_fn, guard_addr_list),
5318 inner_if_stmt);
5320 inner_then_clause = begin_compound_stmt (BCS_NO_SCOPE);
5321 begin = get_target_expr (boolean_false_node);
5322 flag = TARGET_EXPR_SLOT (begin);
5324 TARGET_EXPR_CLEANUP (begin)
5325 = build3 (COND_EXPR, void_type_node, flag,
5326 void_zero_node,
5327 build_call (abort_fn, guard_addr_list));
5328 CLEANUP_EH_ONLY (begin) = 1;
5330 /* Do the initialization itself. */
5331 init = add_stmt_to_compound (begin, init);
5332 init = add_stmt_to_compound
5333 (init, build2 (MODIFY_EXPR, void_type_node, flag, boolean_true_node));
5334 init = add_stmt_to_compound
5335 (init, build_call (release_fn, guard_addr_list));
5337 else
5338 init = add_stmt_to_compound (init, set_guard (guard));
5340 /* Use atexit to register a function for destroying this static
5341 variable. */
5342 init = add_stmt_to_compound (init, register_dtor_fn (decl));
5344 finish_expr_stmt (init);
5346 if (flag_threadsafe_statics)
5348 finish_compound_stmt (inner_then_clause);
5349 finish_then_clause (inner_if_stmt);
5350 finish_if_stmt (inner_if_stmt);
5353 if (!targetm.relaxed_ordering || !flag_threadsafe_statics)
5355 finish_compound_stmt (then_clause);
5356 finish_then_clause (if_stmt);
5357 finish_if_stmt (if_stmt);
5360 else
5361 static_aggregates = tree_cons (init, decl, static_aggregates);
5365 /* Make TYPE a complete type based on INITIAL_VALUE.
5366 Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
5367 2 if there was no information (in which case assume 0 if DO_DEFAULT),
5368 3 if the initializer list is empty (in pedantic mode). */
5371 cp_complete_array_type (tree *ptype, tree initial_value, bool do_default)
5373 int failure;
5374 tree type, elt_type;
5376 if (initial_value)
5378 /* An array of character type can be initialized from a
5379 brace-enclosed string constant. */
5380 if (char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (*ptype)))
5381 && TREE_CODE (initial_value) == CONSTRUCTOR
5382 && CONSTRUCTOR_ELTS (initial_value)
5383 && (TREE_CODE (TREE_VALUE (CONSTRUCTOR_ELTS (initial_value)))
5384 == STRING_CST)
5385 && TREE_CHAIN (CONSTRUCTOR_ELTS (initial_value)) == NULL_TREE)
5386 initial_value = TREE_VALUE (CONSTRUCTOR_ELTS (initial_value));
5389 failure = complete_array_type (ptype, initial_value, do_default);
5391 /* We can create the array before the element type is complete, which
5392 means that we didn't have these two bits set in the original type
5393 either. In completing the type, we are expected to propagate these
5394 bits. See also complete_type which does the same thing for arrays
5395 of fixed size. */
5396 type = *ptype;
5397 if (TYPE_DOMAIN (type))
5399 elt_type = TREE_TYPE (type);
5400 TYPE_NEEDS_CONSTRUCTING (type) = TYPE_NEEDS_CONSTRUCTING (elt_type);
5401 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
5402 = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (elt_type);
5405 return failure;
5408 /* Return zero if something is declared to be a member of type
5409 CTYPE when in the context of CUR_TYPE. STRING is the error
5410 message to print in that case. Otherwise, quietly return 1. */
5412 static int
5413 member_function_or_else (tree ctype, tree cur_type, enum overload_flags flags)
5415 if (ctype && ctype != cur_type)
5417 if (flags == DTOR_FLAG)
5418 error ("destructor for alien class %qT cannot be a member", ctype);
5419 else
5420 error ("constructor for alien class %qT cannot be a member", ctype);
5421 return 0;
5423 return 1;
5426 /* Subroutine of `grokdeclarator'. */
5428 /* Generate errors possibly applicable for a given set of specifiers.
5429 This is for ARM $7.1.2. */
5431 static void
5432 bad_specifiers (tree object,
5433 const char* type,
5434 int virtualp,
5435 int quals,
5436 int inlinep,
5437 int friendp,
5438 int raises)
5440 if (virtualp)
5441 error ("%qD declared as a %<virtual%> %s", object, type);
5442 if (inlinep)
5443 error ("%qD declared as an %<inline%> %s", object, type);
5444 if (quals)
5445 error ("%<const%> and %<volatile%> function specifiers on "
5446 "%qD invalid in %s declaration",
5447 object, type);
5448 if (friendp)
5449 cp_error_at ("%qD declared as a friend", object);
5450 if (raises
5451 && (TREE_CODE (object) == TYPE_DECL
5452 || (!TYPE_PTRFN_P (TREE_TYPE (object))
5453 && !TYPE_REFFN_P (TREE_TYPE (object))
5454 && !TYPE_PTRMEMFUNC_P (TREE_TYPE (object)))))
5455 cp_error_at ("%qD declared with an exception specification", object);
5458 /* CTYPE is class type, or null if non-class.
5459 TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
5460 or METHOD_TYPE.
5461 DECLARATOR is the function's name.
5462 PARMS is a chain of PARM_DECLs for the function.
5463 VIRTUALP is truthvalue of whether the function is virtual or not.
5464 FLAGS are to be passed through to `grokclassfn'.
5465 QUALS are qualifiers indicating whether the function is `const'
5466 or `volatile'.
5467 RAISES is a list of exceptions that this function can raise.
5468 CHECK is 1 if we must find this method in CTYPE, 0 if we should
5469 not look, and -1 if we should not call `grokclassfn' at all.
5471 SFK is the kind of special function (if any) for the new function.
5473 Returns `NULL_TREE' if something goes wrong, after issuing
5474 applicable error messages. */
5476 static tree
5477 grokfndecl (tree ctype,
5478 tree type,
5479 tree declarator,
5480 tree parms,
5481 tree orig_declarator,
5482 int virtualp,
5483 enum overload_flags flags,
5484 cp_cv_quals quals,
5485 tree raises,
5486 int check,
5487 int friendp,
5488 int publicp,
5489 int inlinep,
5490 special_function_kind sfk,
5491 int funcdef_flag,
5492 int template_count,
5493 tree in_namespace,
5494 tree* attrlist)
5496 tree decl;
5497 int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
5498 int has_default_arg = 0;
5499 tree t;
5501 if (raises)
5502 type = build_exception_variant (type, raises);
5504 decl = build_lang_decl (FUNCTION_DECL, declarator, type);
5505 DECL_ARGUMENTS (decl) = parms;
5506 /* Propagate volatile out from type to decl. */
5507 if (TYPE_VOLATILE (type))
5508 TREE_THIS_VOLATILE (decl) = 1;
5510 /* If this decl has namespace scope, set that up. */
5511 if (in_namespace)
5512 set_decl_namespace (decl, in_namespace, friendp);
5513 else if (!ctype)
5514 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
5516 /* `main' and builtins have implicit 'C' linkage. */
5517 if ((MAIN_NAME_P (declarator)
5518 || (IDENTIFIER_LENGTH (declarator) > 10
5519 && IDENTIFIER_POINTER (declarator)[0] == '_'
5520 && IDENTIFIER_POINTER (declarator)[1] == '_'
5521 && strncmp (IDENTIFIER_POINTER (declarator)+2, "builtin_", 8) == 0))
5522 && current_lang_name == lang_name_cplusplus
5523 && ctype == NULL_TREE
5524 /* NULL_TREE means global namespace. */
5525 && DECL_CONTEXT (decl) == NULL_TREE)
5526 SET_DECL_LANGUAGE (decl, lang_c);
5528 /* Should probably propagate const out from type to decl I bet (mrs). */
5529 if (staticp)
5531 DECL_STATIC_FUNCTION_P (decl) = 1;
5532 DECL_CONTEXT (decl) = ctype;
5535 if (ctype)
5536 DECL_CONTEXT (decl) = ctype;
5538 if (ctype == NULL_TREE && DECL_MAIN_P (decl))
5540 if (processing_template_decl)
5541 error ("cannot declare %<::main%> to be a template");
5542 if (inlinep)
5543 error ("cannot declare %<::main%> to be inline");
5544 if (!publicp)
5545 error ("cannot declare %<::main%> to be static");
5546 if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
5547 integer_type_node))
5549 error ("%<::main%> must return %<int%>");
5550 TREE_TYPE (TREE_TYPE (decl)) = integer_type_node;
5552 inlinep = 0;
5553 publicp = 1;
5556 /* Members of anonymous types and local classes have no linkage; make
5557 them internal. If a typedef is made later, this will be changed. */
5558 if (ctype && (TYPE_ANONYMOUS_P (ctype)
5559 || decl_function_context (TYPE_MAIN_DECL (ctype))))
5560 publicp = 0;
5562 if (publicp)
5564 /* [basic.link]: A name with no linkage (notably, the name of a class
5565 or enumeration declared in a local scope) shall not be used to
5566 declare an entity with linkage.
5568 Only check this for public decls for now. See core 319, 389. */
5569 t = no_linkage_check (TREE_TYPE (decl),
5570 /*relaxed_p=*/false);
5571 if (t)
5573 if (TYPE_ANONYMOUS_P (t))
5575 if (DECL_EXTERN_C_P (decl))
5576 /* Allow this; it's pretty common in C. */;
5577 else
5579 pedwarn ("non-local function %q#D uses anonymous type",
5580 decl);
5581 if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
5582 cp_pedwarn_at ("%q#D does not refer to the unqualified "
5583 "type, so it is not used for linkage",
5584 TYPE_NAME (t));
5587 else
5588 pedwarn ("non-local function %q#D uses local type %qT", decl, t);
5592 TREE_PUBLIC (decl) = publicp;
5593 if (! publicp)
5595 DECL_INTERFACE_KNOWN (decl) = 1;
5596 DECL_NOT_REALLY_EXTERN (decl) = 1;
5599 /* If the declaration was declared inline, mark it as such. */
5600 if (inlinep)
5601 DECL_DECLARED_INLINE_P (decl) = 1;
5602 /* We inline functions that are explicitly declared inline, or, when
5603 the user explicitly asks us to, all functions. */
5604 if (DECL_DECLARED_INLINE_P (decl)
5605 || (flag_inline_trees == 2 && !DECL_INLINE (decl) && funcdef_flag))
5606 DECL_INLINE (decl) = 1;
5608 DECL_EXTERNAL (decl) = 1;
5609 if (quals && TREE_CODE (type) == FUNCTION_TYPE)
5611 error ("%smember function %qD cannot have cv-qualifier",
5612 (ctype ? "static " : "non-"), decl);
5613 quals = TYPE_UNQUALIFIED;
5616 if (IDENTIFIER_OPNAME_P (DECL_NAME (decl)))
5617 grok_op_properties (decl, /*complain=*/true);
5619 if (ctype && decl_function_context (decl))
5620 DECL_NO_STATIC_CHAIN (decl) = 1;
5622 for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
5623 if (TREE_PURPOSE (t)
5624 && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
5626 has_default_arg = 1;
5627 break;
5630 if (friendp
5631 && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
5633 if (funcdef_flag)
5634 error
5635 ("defining explicit specialization %qD in friend declaration",
5636 orig_declarator);
5637 else
5639 tree fns = TREE_OPERAND (orig_declarator, 0);
5640 tree args = TREE_OPERAND (orig_declarator, 1);
5642 if (PROCESSING_REAL_TEMPLATE_DECL_P ())
5644 /* Something like `template <class T> friend void f<T>()'. */
5645 error ("invalid use of template-id %qD in declaration "
5646 "of primary template",
5647 orig_declarator);
5648 return NULL_TREE;
5652 /* A friend declaration of the form friend void f<>(). Record
5653 the information in the TEMPLATE_ID_EXPR. */
5654 SET_DECL_IMPLICIT_INSTANTIATION (decl);
5656 if (TREE_CODE (fns) == COMPONENT_REF)
5658 /* Due to bison parser ickiness, we will have already looked
5659 up an operator_name or PFUNCNAME within the current class
5660 (see template_id in parse.y). If the current class contains
5661 such a name, we'll get a COMPONENT_REF here. Undo that. */
5663 gcc_assert (TREE_TYPE (TREE_OPERAND (fns, 0))
5664 == current_class_type);
5665 fns = TREE_OPERAND (fns, 1);
5667 gcc_assert (TREE_CODE (fns) == IDENTIFIER_NODE
5668 || TREE_CODE (fns) == OVERLOAD);
5669 DECL_TEMPLATE_INFO (decl) = tree_cons (fns, args, NULL_TREE);
5671 if (has_default_arg)
5673 error ("default arguments are not allowed in declaration "
5674 "of friend template specialization %qD",
5675 decl);
5676 return NULL_TREE;
5679 if (inlinep)
5681 error ("%<inline%> is not allowed in declaration of friend "
5682 "template specialization %qD",
5683 decl);
5684 return NULL_TREE;
5689 if (funcdef_flag)
5690 /* Make the init_value nonzero so pushdecl knows this is not
5691 tentative. error_mark_node is replaced later with the BLOCK. */
5692 DECL_INITIAL (decl) = error_mark_node;
5694 if (TYPE_NOTHROW_P (type) || nothrow_libfn_p (decl))
5695 TREE_NOTHROW (decl) = 1;
5697 /* Caller will do the rest of this. */
5698 if (check < 0)
5699 return decl;
5701 if (ctype != NULL_TREE)
5703 if (sfk == sfk_constructor)
5704 DECL_CONSTRUCTOR_P (decl) = 1;
5706 grokclassfn (ctype, decl, flags, quals);
5709 decl = check_explicit_specialization (orig_declarator, decl,
5710 template_count,
5711 2 * (funcdef_flag != 0) +
5712 4 * (friendp != 0));
5713 if (decl == error_mark_node)
5714 return NULL_TREE;
5716 if (attrlist)
5718 cplus_decl_attributes (&decl, *attrlist, 0);
5719 *attrlist = NULL_TREE;
5722 if (ctype != NULL_TREE
5723 && (! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
5724 && check)
5726 tree old_decl;
5728 old_decl = check_classfn (ctype, decl,
5729 (processing_template_decl
5730 > template_class_depth (ctype))
5731 ? current_template_parms
5732 : NULL_TREE);
5734 if (old_decl && TREE_CODE (old_decl) == TEMPLATE_DECL)
5735 /* Because grokfndecl is always supposed to return a
5736 FUNCTION_DECL, we pull out the DECL_TEMPLATE_RESULT
5737 here. We depend on our callers to figure out that its
5738 really a template that's being returned. */
5739 old_decl = DECL_TEMPLATE_RESULT (old_decl);
5741 if (old_decl && DECL_STATIC_FUNCTION_P (old_decl)
5742 && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
5743 /* Remove the `this' parm added by grokclassfn.
5744 XXX Isn't this done in start_function, too? */
5745 revert_static_member_fn (decl);
5746 if (old_decl && DECL_ARTIFICIAL (old_decl))
5747 error ("definition of implicitly-declared %qD", old_decl);
5749 if (old_decl)
5751 tree ok;
5752 tree pushed_scope;
5754 /* Since we've smashed OLD_DECL to its
5755 DECL_TEMPLATE_RESULT, we must do the same to DECL. */
5756 if (TREE_CODE (decl) == TEMPLATE_DECL)
5757 decl = DECL_TEMPLATE_RESULT (decl);
5759 /* Attempt to merge the declarations. This can fail, in
5760 the case of some invalid specialization declarations. */
5761 pushed_scope = push_scope (ctype);
5762 ok = duplicate_decls (decl, old_decl);
5763 if (pushed_scope)
5764 pop_scope (pushed_scope);
5765 if (!ok)
5767 error ("no %q#D member function declared in class %qT",
5768 decl, ctype);
5769 return NULL_TREE;
5771 return old_decl;
5775 if (DECL_CONSTRUCTOR_P (decl) && !grok_ctor_properties (ctype, decl))
5776 return NULL_TREE;
5778 if (ctype == NULL_TREE || check)
5779 return decl;
5781 if (virtualp)
5782 DECL_VIRTUAL_P (decl) = 1;
5784 return decl;
5787 /* DECL is a VAR_DECL for a static data member. Set flags to reflect
5788 the linkage that DECL will receive in the object file. */
5790 static void
5791 set_linkage_for_static_data_member (tree decl)
5793 /* A static data member always has static storage duration and
5794 external linkage. Note that static data members are forbidden in
5795 local classes -- the only situation in which a class has
5796 non-external linkage. */
5797 TREE_PUBLIC (decl) = 1;
5798 TREE_STATIC (decl) = 1;
5799 /* For non-template classes, static data members are always put
5800 out in exactly those files where they are defined, just as
5801 with ordinary namespace-scope variables. */
5802 if (!processing_template_decl)
5803 DECL_INTERFACE_KNOWN (decl) = 1;
5806 /* Create a VAR_DECL named NAME with the indicated TYPE.
5808 If SCOPE is non-NULL, it is the class type or namespace containing
5809 the variable. If SCOPE is NULL, the variable should is created in
5810 the innermost enclosings scope. */
5812 static tree
5813 grokvardecl (tree type,
5814 tree name,
5815 const cp_decl_specifier_seq *declspecs,
5816 int initialized,
5817 int constp,
5818 tree scope)
5820 tree decl;
5821 tree explicit_scope;
5823 gcc_assert (!name || TREE_CODE (name) == IDENTIFIER_NODE);
5825 /* Compute the scope in which to place the variable, but remember
5826 whether or not that scope was explicitly specified by the user. */
5827 explicit_scope = scope;
5828 if (!scope)
5830 /* An explicit "extern" specifier indicates a namespace-scope
5831 variable. */
5832 if (declspecs->storage_class == sc_extern)
5833 scope = current_namespace;
5834 else if (!at_function_scope_p ())
5835 scope = current_scope ();
5838 if (scope
5839 && (/* If the variable is a namespace-scope variable declared in a
5840 template, we need DECL_LANG_SPECIFIC. */
5841 (TREE_CODE (scope) == NAMESPACE_DECL && processing_template_decl)
5842 /* Similarly for namespace-scope variables with language linkage
5843 other than C++. */
5844 || (TREE_CODE (scope) == NAMESPACE_DECL
5845 && current_lang_name != lang_name_cplusplus)
5846 /* Similarly for static data members. */
5847 || TYPE_P (scope)))
5848 decl = build_lang_decl (VAR_DECL, name, type);
5849 else
5850 decl = build_decl (VAR_DECL, name, type);
5852 if (explicit_scope && TREE_CODE (explicit_scope) == NAMESPACE_DECL)
5853 set_decl_namespace (decl, explicit_scope, 0);
5854 else
5855 DECL_CONTEXT (decl) = scope;
5857 if (declspecs->storage_class == sc_extern)
5859 DECL_THIS_EXTERN (decl) = 1;
5860 DECL_EXTERNAL (decl) = !initialized;
5863 if (DECL_CLASS_SCOPE_P (decl))
5865 set_linkage_for_static_data_member (decl);
5866 /* This function is only called with out-of-class definitions. */
5867 DECL_EXTERNAL (decl) = 0;
5869 /* At top level, either `static' or no s.c. makes a definition
5870 (perhaps tentative), and absence of `static' makes it public. */
5871 else if (toplevel_bindings_p ())
5873 TREE_PUBLIC (decl) = (declspecs->storage_class != sc_static
5874 && (DECL_THIS_EXTERN (decl) || ! constp));
5875 TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
5877 /* Not at top level, only `static' makes a static definition. */
5878 else
5880 TREE_STATIC (decl) = declspecs->storage_class == sc_static;
5881 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
5884 if (declspecs->specs[(int)ds_thread])
5886 if (targetm.have_tls)
5887 DECL_THREAD_LOCAL (decl) = 1;
5888 else
5889 /* A mere warning is sure to result in improper semantics
5890 at runtime. Don't bother to allow this to compile. */
5891 error ("thread-local storage not supported for this target");
5894 if (TREE_PUBLIC (decl))
5896 /* [basic.link]: A name with no linkage (notably, the name of a class
5897 or enumeration declared in a local scope) shall not be used to
5898 declare an entity with linkage.
5900 Only check this for public decls for now. */
5901 tree t = no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false);
5902 if (t)
5904 if (TYPE_ANONYMOUS_P (t))
5906 if (DECL_EXTERN_C_P (decl))
5907 /* Allow this; it's pretty common in C. */
5909 else
5911 /* DRs 132, 319 and 389 seem to indicate types with
5912 no linkage can only be used to declare extern "C"
5913 entities. Since it's not always an error in the
5914 ISO C++ 90 Standard, we only issue a warning. */
5915 warning (0, "non-local variable %q#D uses anonymous type",
5916 decl);
5917 if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
5918 cp_warning_at ("%q#D does not refer to the unqualified "
5919 "type, so it is not used for linkage",
5920 TYPE_NAME (t));
5923 else
5924 warning (0, "non-local variable %q#D uses local type %qT", decl, t);
5927 else
5928 DECL_INTERFACE_KNOWN (decl) = 1;
5930 return decl;
5933 /* Create and return a canonical pointer to member function type, for
5934 TYPE, which is a POINTER_TYPE to a METHOD_TYPE. */
5936 tree
5937 build_ptrmemfunc_type (tree type)
5939 tree field, fields;
5940 tree t;
5941 tree unqualified_variant = NULL_TREE;
5943 if (type == error_mark_node)
5944 return type;
5946 /* If a canonical type already exists for this type, use it. We use
5947 this method instead of type_hash_canon, because it only does a
5948 simple equality check on the list of field members. */
5950 if ((t = TYPE_GET_PTRMEMFUNC_TYPE (type)))
5951 return t;
5953 /* Make sure that we always have the unqualified pointer-to-member
5954 type first. */
5955 if (cp_type_quals (type) != TYPE_UNQUALIFIED)
5956 unqualified_variant
5957 = build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type));
5959 t = make_aggr_type (RECORD_TYPE);
5960 xref_basetypes (t, NULL_TREE);
5962 /* Let the front-end know this is a pointer to member function... */
5963 TYPE_PTRMEMFUNC_FLAG (t) = 1;
5964 /* ... and not really an aggregate. */
5965 SET_IS_AGGR_TYPE (t, 0);
5967 field = build_decl (FIELD_DECL, pfn_identifier, type);
5968 fields = field;
5970 field = build_decl (FIELD_DECL, delta_identifier, delta_type_node);
5971 TREE_CHAIN (field) = fields;
5972 fields = field;
5974 finish_builtin_struct (t, "__ptrmemfunc_type", fields, ptr_type_node);
5976 /* Zap out the name so that the back-end will give us the debugging
5977 information for this anonymous RECORD_TYPE. */
5978 TYPE_NAME (t) = NULL_TREE;
5980 /* If this is not the unqualified form of this pointer-to-member
5981 type, set the TYPE_MAIN_VARIANT for this type to be the
5982 unqualified type. Since they are actually RECORD_TYPEs that are
5983 not variants of each other, we must do this manually. */
5984 if (cp_type_quals (type) != TYPE_UNQUALIFIED)
5986 t = build_qualified_type (t, cp_type_quals (type));
5987 TYPE_MAIN_VARIANT (t) = unqualified_variant;
5988 TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (unqualified_variant);
5989 TYPE_NEXT_VARIANT (unqualified_variant) = t;
5992 /* Cache this pointer-to-member type so that we can find it again
5993 later. */
5994 TYPE_SET_PTRMEMFUNC_TYPE (type, t);
5996 return t;
5999 /* Create and return a pointer to data member type. */
6001 tree
6002 build_ptrmem_type (tree class_type, tree member_type)
6004 if (TREE_CODE (member_type) == METHOD_TYPE)
6006 tree arg_types;
6008 arg_types = TYPE_ARG_TYPES (member_type);
6009 class_type = (cp_build_qualified_type
6010 (class_type,
6011 cp_type_quals (TREE_TYPE (TREE_VALUE (arg_types)))));
6012 member_type
6013 = build_method_type_directly (class_type,
6014 TREE_TYPE (member_type),
6015 TREE_CHAIN (arg_types));
6016 return build_ptrmemfunc_type (build_pointer_type (member_type));
6018 else
6020 gcc_assert (TREE_CODE (member_type) != FUNCTION_TYPE);
6021 return build_offset_type (class_type, member_type);
6025 /* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
6026 Check to see that the definition is valid. Issue appropriate error
6027 messages. Return 1 if the definition is particularly bad, or 0
6028 otherwise. */
6031 check_static_variable_definition (tree decl, tree type)
6033 /* Motion 10 at San Diego: If a static const integral data member is
6034 initialized with an integral constant expression, the initializer
6035 may appear either in the declaration (within the class), or in
6036 the definition, but not both. If it appears in the class, the
6037 member is a member constant. The file-scope definition is always
6038 required. */
6039 if (!ARITHMETIC_TYPE_P (type) && TREE_CODE (type) != ENUMERAL_TYPE)
6041 error ("invalid in-class initialization of static data member "
6042 "of non-integral type %qT",
6043 type);
6044 /* If we just return the declaration, crashes will sometimes
6045 occur. We therefore return void_type_node, as if this were a
6046 friend declaration, to cause callers to completely ignore
6047 this declaration. */
6048 return 1;
6050 else if (!CP_TYPE_CONST_P (type))
6051 error ("ISO C++ forbids in-class initialization of non-const "
6052 "static member %qD",
6053 decl);
6054 else if (pedantic && !INTEGRAL_TYPE_P (type))
6055 pedwarn ("ISO C++ forbids initialization of member constant "
6056 "%qD of non-integral type %qT", decl, type);
6058 return 0;
6061 /* Given the SIZE (i.e., number of elements) in an array, compute an
6062 appropriate index type for the array. If non-NULL, NAME is the
6063 name of the thing being declared. */
6065 tree
6066 compute_array_index_type (tree name, tree size)
6068 tree type = TREE_TYPE (size);
6069 tree itype;
6071 /* The array bound must be an integer type. */
6072 if (!dependent_type_p (type) && !INTEGRAL_TYPE_P (type))
6074 if (name)
6075 error ("size of array %qD has non-integral type %qT", name, type);
6076 else
6077 error ("size of array has non-integral type %qT", type);
6078 size = integer_one_node;
6079 type = TREE_TYPE (size);
6082 if (abi_version_at_least (2)
6083 /* We should only handle value dependent expressions specially. */
6084 ? value_dependent_expression_p (size)
6085 /* But for abi-1, we handled all instances in templates. This
6086 effects the manglings produced. */
6087 : processing_template_decl)
6088 return build_index_type (build_min (MINUS_EXPR, sizetype,
6089 size, integer_one_node));
6091 /* The size might be the result of a cast. */
6092 STRIP_TYPE_NOPS (size);
6094 /* It might be a const variable or enumeration constant. */
6095 size = integral_constant_value (size);
6097 /* Normally, the array-bound will be a constant. */
6098 if (TREE_CODE (size) == INTEGER_CST)
6100 /* Check to see if the array bound overflowed. Make that an
6101 error, no matter how generous we're being. */
6102 int old_flag_pedantic_errors = flag_pedantic_errors;
6103 int old_pedantic = pedantic;
6104 pedantic = flag_pedantic_errors = 1;
6105 constant_expression_warning (size);
6106 pedantic = old_pedantic;
6107 flag_pedantic_errors = old_flag_pedantic_errors;
6109 /* An array must have a positive number of elements. */
6110 if (INT_CST_LT (size, integer_zero_node))
6112 if (name)
6113 error ("size of array %qD is negative", name);
6114 else
6115 error ("size of array is negative");
6116 size = integer_one_node;
6118 /* As an extension we allow zero-sized arrays. We always allow
6119 them in system headers because glibc uses them. */
6120 else if (integer_zerop (size) && pedantic && !in_system_header)
6122 if (name)
6123 pedwarn ("ISO C++ forbids zero-size array %qD", name);
6124 else
6125 pedwarn ("ISO C++ forbids zero-size array");
6128 else if (TREE_CONSTANT (size))
6130 /* `(int) &fn' is not a valid array bound. */
6131 if (name)
6132 error ("size of array %qD is not an integral constant-expression",
6133 name);
6134 else
6135 error ("size of array is not an integral constant-expression");
6137 else if (pedantic)
6139 if (name)
6140 pedwarn ("ISO C++ forbids variable-size array %qD", name);
6141 else
6142 pedwarn ("ISO C++ forbids variable-size array");
6145 if (processing_template_decl && !TREE_CONSTANT (size))
6146 /* A variable sized array. */
6147 itype = build_min (MINUS_EXPR, sizetype, size, integer_one_node);
6148 else
6150 HOST_WIDE_INT saved_processing_template_decl;
6152 /* Compute the index of the largest element in the array. It is
6153 one less than the number of elements in the array. We save
6154 and restore PROCESSING_TEMPLATE_DECL so that computations in
6155 cp_build_binary_op will be appropriately folded. */
6156 saved_processing_template_decl = processing_template_decl;
6157 processing_template_decl = 0;
6158 itype = cp_build_binary_op (MINUS_EXPR,
6159 cp_convert (ssizetype, size),
6160 cp_convert (ssizetype, integer_one_node));
6161 itype = fold (itype);
6162 processing_template_decl = saved_processing_template_decl;
6164 if (!TREE_CONSTANT (itype))
6165 /* A variable sized array. */
6166 itype = variable_size (itype);
6167 /* Make sure that there was no overflow when creating to a signed
6168 index type. (For example, on a 32-bit machine, an array with
6169 size 2^32 - 1 is too big.) */
6170 else if (TREE_OVERFLOW (itype))
6172 error ("overflow in array dimension");
6173 TREE_OVERFLOW (itype) = 0;
6177 /* Create and return the appropriate index type. */
6178 return build_index_type (itype);
6181 /* Returns the scope (if any) in which the entity declared by
6182 DECLARATOR will be located. If the entity was declared with an
6183 unqualified name, NULL_TREE is returned. */
6185 tree
6186 get_scope_of_declarator (const cp_declarator *declarator)
6188 while (declarator && declarator->kind != cdk_id)
6189 declarator = declarator->declarator;
6191 /* If the declarator-id is a SCOPE_REF, the scope in which the
6192 declaration occurs is the first operand. */
6193 if (declarator
6194 && declarator->u.id.qualifying_scope)
6195 return declarator->u.id.qualifying_scope;
6197 /* Otherwise, the declarator is not a qualified name; the entity will
6198 be declared in the current scope. */
6199 return NULL_TREE;
6202 /* Returns an ARRAY_TYPE for an array with SIZE elements of the
6203 indicated TYPE. If non-NULL, NAME is the NAME of the declaration
6204 with this type. */
6206 static tree
6207 create_array_type_for_decl (tree name, tree type, tree size)
6209 tree itype = NULL_TREE;
6210 const char* error_msg;
6212 /* If things have already gone awry, bail now. */
6213 if (type == error_mark_node || size == error_mark_node)
6214 return error_mark_node;
6216 /* Assume that everything will go OK. */
6217 error_msg = NULL;
6219 /* There are some types which cannot be array elements. */
6220 switch (TREE_CODE (type))
6222 case VOID_TYPE:
6223 error_msg = "array of void";
6224 break;
6226 case FUNCTION_TYPE:
6227 error_msg = "array of functions";
6228 break;
6230 case REFERENCE_TYPE:
6231 error_msg = "array of references";
6232 break;
6234 case METHOD_TYPE:
6235 error_msg = "array of function members";
6236 break;
6238 default:
6239 break;
6242 /* If something went wrong, issue an error-message and return. */
6243 if (error_msg)
6245 if (name)
6246 error ("declaration of %qD as %s", name, error_msg);
6247 else
6248 error ("creating %s", error_msg);
6250 return error_mark_node;
6253 /* [dcl.array]
6255 The constant expressions that specify the bounds of the arrays
6256 can be omitted only for the first member of the sequence. */
6257 if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
6259 if (name)
6260 error ("declaration of %qD as multidimensional array must "
6261 "have bounds for all dimensions except the first",
6262 name);
6263 else
6264 error ("multidimensional array must have bounds for all "
6265 "dimensions except the first");
6267 return error_mark_node;
6270 /* Figure out the index type for the array. */
6271 if (size)
6272 itype = compute_array_index_type (name, size);
6274 /* [dcl.array]
6275 T is called the array element type; this type shall not be [...] an
6276 abstract class type. */
6277 abstract_virtuals_error (name, type);
6279 return build_cplus_array_type (type, itype);
6282 /* Check that it's OK to declare a function with the indicated TYPE.
6283 SFK indicates the kind of special function (if any) that this
6284 function is. OPTYPE is the type given in a conversion operator
6285 declaration, or the class type for a constructor/destructor.
6286 Returns the actual return type of the function; that
6287 may be different than TYPE if an error occurs, or for certain
6288 special functions. */
6290 static tree
6291 check_special_function_return_type (special_function_kind sfk,
6292 tree type,
6293 tree optype)
6295 switch (sfk)
6297 case sfk_constructor:
6298 if (type)
6299 error ("return type specification for constructor invalid");
6301 if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
6302 type = build_pointer_type (optype);
6303 else
6304 type = void_type_node;
6305 break;
6307 case sfk_destructor:
6308 if (type)
6309 error ("return type specification for destructor invalid");
6310 /* We can't use the proper return type here because we run into
6311 problems with ambiguous bases and covariant returns.
6312 Java classes are left unchanged because (void *) isn't a valid
6313 Java type, and we don't want to change the Java ABI. */
6314 if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
6315 type = build_pointer_type (void_type_node);
6316 else
6317 type = void_type_node;
6318 break;
6320 case sfk_conversion:
6321 if (type && !same_type_p (type, optype))
6322 error ("operator %qT declared to return %qT", optype, type);
6323 else if (type)
6324 pedwarn ("return type specified for %<operator %T%>", optype);
6325 type = optype;
6326 break;
6328 default:
6329 gcc_unreachable ();
6332 return type;
6335 /* A variable or data member (whose unqualified name is IDENTIFIER)
6336 has been declared with the indicated TYPE. If the TYPE is not
6337 acceptable, issue an error message and return a type to use for
6338 error-recovery purposes. */
6340 tree
6341 check_var_type (tree identifier, tree type)
6343 if (VOID_TYPE_P (type))
6345 if (!identifier)
6346 error ("unnamed variable or field declared void");
6347 else if (TREE_CODE (identifier) == IDENTIFIER_NODE)
6349 gcc_assert (!IDENTIFIER_OPNAME_P (identifier));
6350 error ("variable or field %qE declared void", identifier);
6352 else
6353 error ("variable or field declared void");
6354 type = integer_type_node;
6357 return type;
6360 /* Given declspecs and a declarator (abstract or otherwise), determine
6361 the name and type of the object declared and construct a DECL node
6362 for it.
6364 DECLSPECS is a chain of tree_list nodes whose value fields
6365 are the storage classes and type specifiers.
6367 DECL_CONTEXT says which syntactic context this declaration is in:
6368 NORMAL for most contexts. Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
6369 FUNCDEF for a function definition. Like NORMAL but a few different
6370 error messages in each case. Return value may be zero meaning
6371 this definition is too screwy to try to parse.
6372 MEMFUNCDEF for a function definition. Like FUNCDEF but prepares to
6373 handle member functions (which have FIELD context).
6374 Return value may be zero meaning this definition is too screwy to
6375 try to parse.
6376 PARM for a parameter declaration (either within a function prototype
6377 or before a function body). Make a PARM_DECL, or return void_type_node.
6378 CATCHPARM for a parameter declaration before a catch clause.
6379 TYPENAME if for a typename (in a cast or sizeof).
6380 Don't make a DECL node; just return the ..._TYPE node.
6381 FIELD for a struct or union field; make a FIELD_DECL.
6382 BITFIELD for a field with specified width.
6383 INITIALIZED is 1 if the decl has an initializer.
6385 ATTRLIST is a pointer to the list of attributes, which may be NULL
6386 if there are none; *ATTRLIST may be modified if attributes from inside
6387 the declarator should be applied to the declaration.
6389 When this function is called, scoping variables (such as
6390 CURRENT_CLASS_TYPE) should reflect the scope in which the
6391 declaration occurs, not the scope in which the new declaration will
6392 be placed. For example, on:
6394 void S::f() { ... }
6396 when grokdeclarator is called for `S::f', the CURRENT_CLASS_TYPE
6397 should not be `S'. */
6399 tree
6400 grokdeclarator (const cp_declarator *declarator,
6401 const cp_decl_specifier_seq *declspecs,
6402 enum decl_context decl_context,
6403 int initialized,
6404 tree* attrlist)
6406 tree type = NULL_TREE;
6407 int longlong = 0;
6408 int type_quals;
6409 int virtualp, explicitp, friendp, inlinep, staticp;
6410 int explicit_int = 0;
6411 int explicit_char = 0;
6412 int defaulted_int = 0;
6413 tree dependant_name = NULL_TREE;
6415 tree typedef_decl = NULL_TREE;
6416 const char *name = NULL;
6417 tree typedef_type = NULL_TREE;
6418 int funcdef_flag = 0;
6419 cp_declarator_kind innermost_code = cdk_error;
6420 int bitfield = 0;
6421 #if 0
6422 /* See the code below that used this. */
6423 tree decl_attr = NULL_TREE;
6424 #endif
6426 /* Keep track of what sort of function is being processed
6427 so that we can warn about default return values, or explicit
6428 return values which do not match prescribed defaults. */
6429 special_function_kind sfk = sfk_none;
6431 tree dname = NULL_TREE;
6432 tree ctor_return_type = NULL_TREE;
6433 enum overload_flags flags = NO_SPECIAL;
6434 cp_cv_quals quals = TYPE_UNQUALIFIED;
6435 tree raises = NULL_TREE;
6436 int template_count = 0;
6437 tree returned_attrs = NULL_TREE;
6438 tree parms = NULL_TREE;
6439 const cp_declarator *id_declarator;
6440 /* The unqualified name of the declarator; either an
6441 IDENTIFIER_NODE, BIT_NOT_EXPR, or TEMPLATE_ID_EXPR. */
6442 tree unqualified_id;
6443 /* The class type, if any, in which this entity is located,
6444 or NULL_TREE if none. Note that this value may be different from
6445 the current class type; for example if an attempt is made to declare
6446 "A::f" inside "B", this value will be "A". */
6447 tree ctype = current_class_type;
6448 /* The NAMESPACE_DECL for the namespace in which this entity is
6449 located. If an unqualified name is used to declare the entity,
6450 this value will be NULL_TREE, even if the entity is located at
6451 namespace scope. */
6452 tree in_namespace = NULL_TREE;
6453 cp_decl_spec ds;
6454 cp_storage_class storage_class;
6455 bool unsigned_p, signed_p, short_p, long_p, thread_p;
6456 bool type_was_error_mark_node = false;
6458 signed_p = declspecs->specs[(int)ds_signed];
6459 unsigned_p = declspecs->specs[(int)ds_unsigned];
6460 short_p = declspecs->specs[(int)ds_short];
6461 long_p = declspecs->specs[(int)ds_long];
6462 thread_p = declspecs->specs[(int)ds_thread];
6464 if (decl_context == FUNCDEF)
6465 funcdef_flag = 1, decl_context = NORMAL;
6466 else if (decl_context == MEMFUNCDEF)
6467 funcdef_flag = -1, decl_context = FIELD;
6468 else if (decl_context == BITFIELD)
6469 bitfield = 1, decl_context = FIELD;
6471 /* Look inside a declarator for the name being declared
6472 and get it as a string, for an error message. */
6473 for (id_declarator = declarator;
6474 id_declarator;
6475 id_declarator = id_declarator->declarator)
6477 if (id_declarator->kind != cdk_id)
6478 innermost_code = id_declarator->kind;
6480 switch (id_declarator->kind)
6482 case cdk_function:
6483 if (id_declarator->declarator
6484 && id_declarator->declarator->kind == cdk_id)
6486 sfk = id_declarator->declarator->u.id.sfk;
6487 if (sfk == sfk_destructor)
6488 flags = DTOR_FLAG;
6490 break;
6492 case cdk_id:
6494 tree qualifying_scope = id_declarator->u.id.qualifying_scope;
6495 tree decl = id_declarator->u.id.unqualified_name;
6496 if (!decl)
6497 break;
6498 if (qualifying_scope)
6500 if (TYPE_P (qualifying_scope))
6502 ctype = qualifying_scope;
6503 if (innermost_code != cdk_function
6504 && current_class_type
6505 && !UNIQUELY_DERIVED_FROM_P (ctype,
6506 current_class_type))
6508 error ("type %qT is not derived from type %qT",
6509 ctype, current_class_type);
6510 return error_mark_node;
6513 else if (TREE_CODE (qualifying_scope) == NAMESPACE_DECL)
6514 in_namespace = qualifying_scope;
6516 if (TREE_CODE (decl) == BASELINK)
6517 decl = BASELINK_FUNCTIONS (decl);
6518 if (decl == error_mark_node)
6519 return error_mark_node;
6520 switch (TREE_CODE (decl))
6522 case BIT_NOT_EXPR:
6524 tree type;
6526 if (innermost_code != cdk_function)
6528 error ("declaration of %qD as non-function", decl);
6529 return error_mark_node;
6531 else if (!qualifying_scope
6532 && !(current_class_type && at_class_scope_p ()))
6534 error ("declaration of %qD as non-member", decl);
6535 return error_mark_node;
6538 type = TREE_OPERAND (decl, 0);
6539 name = IDENTIFIER_POINTER (constructor_name (type));
6541 break;
6543 case TEMPLATE_ID_EXPR:
6545 tree fns = TREE_OPERAND (decl, 0);
6547 dname = fns;
6548 if (TREE_CODE (dname) == COMPONENT_REF)
6549 dname = TREE_OPERAND (dname, 1);
6550 if (TREE_CODE (dname) != IDENTIFIER_NODE)
6552 gcc_assert (is_overloaded_fn (dname));
6553 dname = DECL_NAME (get_first_fn (dname));
6556 /* Fall through. */
6558 case IDENTIFIER_NODE:
6559 if (TREE_CODE (decl) == IDENTIFIER_NODE)
6560 dname = decl;
6562 if (C_IS_RESERVED_WORD (dname))
6564 error ("declarator-id missing; using reserved word %qD",
6565 dname);
6566 name = IDENTIFIER_POINTER (dname);
6568 else if (!IDENTIFIER_TYPENAME_P (dname))
6569 name = IDENTIFIER_POINTER (dname);
6570 else
6572 gcc_assert (flags == NO_SPECIAL);
6573 flags = TYPENAME_FLAG;
6574 ctor_return_type = TREE_TYPE (dname);
6575 sfk = sfk_conversion;
6576 if (is_typename_at_global_scope (dname))
6577 name = IDENTIFIER_POINTER (dname);
6578 else
6579 name = "<invalid operator>";
6581 break;
6583 case TYPE_DECL:
6584 dname = constructor_name (TREE_TYPE (decl));
6585 name = IDENTIFIER_POINTER (dname);
6586 break;
6588 default:
6589 gcc_unreachable ();
6591 break;
6593 case cdk_array:
6594 case cdk_pointer:
6595 case cdk_reference:
6596 case cdk_ptrmem:
6597 break;
6599 case cdk_error:
6600 break;
6602 default:
6603 gcc_unreachable ();
6606 if (id_declarator->kind == cdk_id)
6607 break;
6610 /* A function definition's declarator must have the form of
6611 a function declarator. */
6613 if (funcdef_flag && innermost_code != cdk_function)
6614 return 0;
6616 if (((dname && IDENTIFIER_OPNAME_P (dname)) || flags == TYPENAME_FLAG)
6617 && innermost_code != cdk_function
6618 && ! (ctype && !declspecs->any_specifiers_p))
6620 error ("declaration of %qD as non-function", dname);
6621 return error_mark_node;
6624 /* Anything declared one level down from the top level
6625 must be one of the parameters of a function
6626 (because the body is at least two levels down). */
6628 /* This heuristic cannot be applied to C++ nodes! Fixed, however,
6629 by not allowing C++ class definitions to specify their parameters
6630 with xdecls (must be spec.d in the parmlist).
6632 Since we now wait to push a class scope until we are sure that
6633 we are in a legitimate method context, we must set oldcname
6634 explicitly (since current_class_name is not yet alive).
6636 We also want to avoid calling this a PARM if it is in a namespace. */
6638 if (decl_context == NORMAL && !toplevel_bindings_p ())
6640 struct cp_binding_level *b = current_binding_level;
6641 current_binding_level = b->level_chain;
6642 if (current_binding_level != 0 && toplevel_bindings_p ())
6643 decl_context = PARM;
6644 current_binding_level = b;
6647 if (name == NULL)
6648 name = decl_context == PARM ? "parameter" : "type name";
6650 /* If there were multiple types specified in the decl-specifier-seq,
6651 issue an error message. */
6652 if (declspecs->multiple_types_p)
6653 error ("two or more data types in declaration of %qs", name);
6654 /* Extract the basic type from the decl-specifier-seq. */
6655 type = declspecs->type;
6656 if (type == error_mark_node)
6658 type = NULL_TREE;
6659 type_was_error_mark_node = true;
6661 /* If the entire declaration is itself tagged as deprecated then
6662 suppress reports of deprecated items. */
6663 if (type && TREE_DEPRECATED (type)
6664 && deprecated_state != DEPRECATED_SUPPRESS)
6665 warn_deprecated_use (type);
6666 if (type && TREE_CODE (type) == TYPE_DECL)
6668 typedef_decl = type;
6669 type = TREE_TYPE (typedef_decl);
6671 /* No type at all: default to `int', and set DEFAULTED_INT
6672 because it was not a user-defined typedef. */
6673 if (type == NULL_TREE && (signed_p || unsigned_p || long_p || short_p))
6675 /* These imply 'int'. */
6676 type = integer_type_node;
6677 defaulted_int = 1;
6679 /* Gather flags. */
6680 explicit_int = declspecs->explicit_int_p;
6681 explicit_char = declspecs->explicit_char_p;
6683 /* Check for repeated decl-specifiers. */
6684 for (ds = ds_first; ds != ds_last; ++ds)
6686 unsigned count = declspecs->specs[(int)ds];
6687 if (count < 2)
6688 continue;
6689 /* The "long" specifier is a special case because of
6690 "long long". */
6691 if (ds == ds_long)
6693 if (count > 2)
6694 error ("%<long long long%> is too long for GCC");
6695 else if (pedantic && !in_system_header && warn_long_long)
6696 pedwarn ("ISO C++ does not support %<long long%>");
6697 else
6698 longlong = 1;
6700 else if (declspecs->specs[(int)ds] > 1)
6702 static const char *const decl_spec_names[] = {
6703 "signed",
6704 "unsigned",
6705 "short",
6706 "long",
6707 "const",
6708 "volatile",
6709 "restrict",
6710 "inline",
6711 "virtual",
6712 "explicit",
6713 "friend",
6714 "typedef",
6715 "__complex",
6716 "__thread"
6718 error ("duplicate %qs", decl_spec_names[(int)ds]);
6722 #if 0
6723 /* See the code below that used this. */
6724 if (typedef_decl)
6725 decl_attr = DECL_ATTRIBUTES (typedef_decl);
6726 #endif
6727 typedef_type = type;
6730 if (sfk != sfk_conversion)
6731 ctor_return_type = ctype;
6733 if (sfk != sfk_none)
6734 type = check_special_function_return_type (sfk, type,
6735 ctor_return_type);
6736 else if (type == NULL_TREE)
6738 int is_main;
6740 explicit_int = -1;
6742 /* We handle `main' specially here, because 'main () { }' is so
6743 common. With no options, it is allowed. With -Wreturn-type,
6744 it is a warning. It is only an error with -pedantic-errors. */
6745 is_main = (funcdef_flag
6746 && dname && MAIN_NAME_P (dname)
6747 && ctype == NULL_TREE
6748 && in_namespace == NULL_TREE
6749 && current_namespace == global_namespace);
6751 if (type_was_error_mark_node)
6752 /* We've already issued an error, don't complain more. */;
6753 else if (in_system_header || flag_ms_extensions)
6754 /* Allow it, sigh. */;
6755 else if (pedantic || ! is_main)
6756 pedwarn ("ISO C++ forbids declaration of %qs with no type", name);
6757 else if (warn_return_type)
6758 warning (0, "ISO C++ forbids declaration of %qs with no type", name);
6760 type = integer_type_node;
6763 ctype = NULL_TREE;
6765 /* Now process the modifiers that were specified
6766 and check for invalid combinations. */
6768 /* Long double is a special combination. */
6769 if (long_p && TYPE_MAIN_VARIANT (type) == double_type_node)
6771 long_p = false;
6772 type = build_qualified_type (long_double_type_node,
6773 cp_type_quals (type));
6776 /* Check all other uses of type modifiers. */
6778 if (unsigned_p || signed_p || long_p || short_p)
6780 int ok = 0;
6782 if (TREE_CODE (type) == REAL_TYPE)
6783 error ("short, signed or unsigned invalid for %qs", name);
6784 else if (TREE_CODE (type) != INTEGER_TYPE)
6785 error ("long, short, signed or unsigned invalid for %qs", name);
6786 else if (long_p && short_p)
6787 error ("long and short specified together for %qs", name);
6788 else if ((long_p || short_p) && explicit_char)
6789 error ("long or short specified with char for %qs", name);
6790 else if ((long_p|| short_p) && TREE_CODE (type) == REAL_TYPE)
6791 error ("long or short specified with floating type for %qs", name);
6792 else if (signed_p && unsigned_p)
6793 error ("signed and unsigned given together for %qs", name);
6794 else
6796 ok = 1;
6797 if (!explicit_int && !defaulted_int && !explicit_char && pedantic)
6799 pedwarn ("long, short, signed or unsigned used invalidly for %qs",
6800 name);
6801 if (flag_pedantic_errors)
6802 ok = 0;
6806 /* Discard the type modifiers if they are invalid. */
6807 if (! ok)
6809 unsigned_p = false;
6810 signed_p = false;
6811 long_p = false;
6812 short_p = false;
6813 longlong = 0;
6817 /* Decide whether an integer type is signed or not.
6818 Optionally treat bitfields as signed by default. */
6819 if (unsigned_p
6820 /* [class.bit]
6822 It is implementation-defined whether a plain (neither
6823 explicitly signed or unsigned) char, short, int, or long
6824 bit-field is signed or unsigned.
6826 Naturally, we extend this to long long as well. Note that
6827 this does not include wchar_t. */
6828 || (bitfield && !flag_signed_bitfields
6829 && !signed_p
6830 /* A typedef for plain `int' without `signed' can be
6831 controlled just like plain `int', but a typedef for
6832 `signed int' cannot be so controlled. */
6833 && !(typedef_decl
6834 && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
6835 && (TREE_CODE (type) == INTEGER_TYPE
6836 || TREE_CODE (type) == CHAR_TYPE)
6837 && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
6839 if (longlong)
6840 type = long_long_unsigned_type_node;
6841 else if (long_p)
6842 type = long_unsigned_type_node;
6843 else if (short_p)
6844 type = short_unsigned_type_node;
6845 else if (type == char_type_node)
6846 type = unsigned_char_type_node;
6847 else if (typedef_decl)
6848 type = c_common_unsigned_type (type);
6849 else
6850 type = unsigned_type_node;
6852 else if (signed_p && type == char_type_node)
6853 type = signed_char_type_node;
6854 else if (longlong)
6855 type = long_long_integer_type_node;
6856 else if (long_p)
6857 type = long_integer_type_node;
6858 else if (short_p)
6859 type = short_integer_type_node;
6861 if (declspecs->specs[(int)ds_complex])
6863 if (TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
6864 error ("complex invalid for %qs", name);
6865 /* If we just have "complex", it is equivalent to
6866 "complex double", but if any modifiers at all are specified it is
6867 the complex form of TYPE. E.g, "complex short" is
6868 "complex short int". */
6870 else if (defaulted_int && ! longlong
6871 && ! (long_p || short_p || signed_p || unsigned_p))
6872 type = complex_double_type_node;
6873 else if (type == integer_type_node)
6874 type = complex_integer_type_node;
6875 else if (type == float_type_node)
6876 type = complex_float_type_node;
6877 else if (type == double_type_node)
6878 type = complex_double_type_node;
6879 else if (type == long_double_type_node)
6880 type = complex_long_double_type_node;
6881 else
6882 type = build_complex_type (type);
6885 type_quals = TYPE_UNQUALIFIED;
6886 if (declspecs->specs[(int)ds_const])
6887 type_quals |= TYPE_QUAL_CONST;
6888 if (declspecs->specs[(int)ds_volatile])
6889 type_quals |= TYPE_QUAL_VOLATILE;
6890 if (declspecs->specs[(int)ds_restrict])
6891 type_quals |= TYPE_QUAL_RESTRICT;
6892 if (sfk == sfk_conversion && type_quals != TYPE_UNQUALIFIED)
6893 error ("qualifiers are not allowed on declaration of %<operator %T%>",
6894 ctor_return_type);
6896 if (TREE_CODE (type) == FUNCTION_TYPE
6897 && type_quals != TYPE_UNQUALIFIED)
6899 /* This was an error in C++98 (cv-qualifiers cannot be added to
6900 a function type), but DR 295 makes the code well-formed by
6901 dropping the extra qualifiers. */
6902 if (pedantic)
6904 tree bad_type = build_qualified_type (type, type_quals);
6905 pedwarn ("ignoring %qV qualifiers added to function type %qT",
6906 bad_type, type);
6908 type_quals = TYPE_UNQUALIFIED;
6910 type_quals |= cp_type_quals (type);
6911 type = cp_build_qualified_type_real
6912 (type, type_quals, ((typedef_decl && !DECL_ARTIFICIAL (typedef_decl)
6913 ? tf_ignore_bad_quals : 0) | tf_error | tf_warning));
6914 /* We might have ignored or rejected some of the qualifiers. */
6915 type_quals = cp_type_quals (type);
6917 staticp = 0;
6918 inlinep = !! declspecs->specs[(int)ds_inline];
6919 virtualp = !! declspecs->specs[(int)ds_virtual];
6920 explicitp = !! declspecs->specs[(int)ds_explicit];
6922 storage_class = declspecs->storage_class;
6923 if (storage_class == sc_static)
6924 staticp = 1 + (decl_context == FIELD);
6926 if (virtualp && staticp == 2)
6928 error ("member %qD cannot be declared both virtual and static", dname);
6929 staticp = 0;
6931 friendp = !! declspecs->specs[(int)ds_friend];
6933 if (dependant_name && !friendp)
6935 error ("%<%T::%D%> is not a valid declarator", ctype, dependant_name);
6936 return void_type_node;
6939 /* Issue errors about use of storage classes for parameters. */
6940 if (decl_context == PARM)
6942 if (declspecs->specs[(int)ds_typedef])
6943 error ("typedef declaration invalid in parameter declaration");
6944 else if (storage_class == sc_static
6945 || storage_class == sc_extern
6946 || thread_p)
6947 error ("storage class specifiers invalid in parameter declarations");
6950 /* Give error if `virtual' is used outside of class declaration. */
6951 if (virtualp
6952 && (current_class_name == NULL_TREE || decl_context != FIELD))
6954 error ("virtual outside class declaration");
6955 virtualp = 0;
6958 /* Static anonymous unions are dealt with here. */
6959 if (staticp && decl_context == TYPENAME
6960 && declspecs->type
6961 && ANON_AGGR_TYPE_P (declspecs->type))
6962 decl_context = FIELD;
6964 /* Warn about storage classes that are invalid for certain
6965 kinds of declarations (parameters, typenames, etc.). */
6966 if (declspecs->multiple_storage_classes_p)
6967 error ("multiple storage classes in declaration of %qs", name);
6968 else if (thread_p
6969 && ((storage_class
6970 && storage_class != sc_extern
6971 && storage_class != sc_static)
6972 || declspecs->specs[(int)ds_typedef]))
6974 error ("multiple storage classes in declaration of %qs", name);
6975 thread_p = false;
6977 else if (decl_context != NORMAL
6978 && ((storage_class != sc_none
6979 && storage_class != sc_mutable)
6980 || thread_p))
6982 if ((decl_context == PARM || decl_context == CATCHPARM)
6983 && (storage_class == sc_register
6984 || storage_class == sc_auto))
6986 else if (declspecs->specs[(int)ds_typedef])
6988 else if (decl_context == FIELD
6989 /* C++ allows static class elements. */
6990 && storage_class == sc_static)
6991 /* C++ also allows inlines and signed and unsigned elements,
6992 but in those cases we don't come in here. */
6994 else
6996 if (decl_context == FIELD)
6997 error ("storage class specified for %qs", name);
6998 else
7000 if (decl_context == PARM || decl_context == CATCHPARM)
7001 error ("storage class specified for parameter %qs", name);
7002 else
7003 error ("storage class specified for typename");
7005 if (storage_class == sc_register
7006 || storage_class == sc_auto
7007 || storage_class == sc_extern
7008 || thread_p)
7009 storage_class = sc_none;
7012 else if (storage_class == sc_extern && initialized
7013 && !funcdef_flag)
7015 if (toplevel_bindings_p ())
7017 /* It's common practice (and completely valid) to have a const
7018 be initialized and declared extern. */
7019 if (!(type_quals & TYPE_QUAL_CONST))
7020 warning (0, "%qs initialized and declared %<extern%>", name);
7022 else
7023 error ("%qs has both %<extern%> and initializer", name);
7025 else if (storage_class == sc_extern && funcdef_flag
7026 && ! toplevel_bindings_p ())
7027 error ("nested function %qs declared %<extern%>", name);
7028 else if (toplevel_bindings_p ())
7030 if (storage_class == sc_auto)
7031 error ("top-level declaration of %qs specifies %<auto%>", name);
7033 else if (thread_p
7034 && storage_class != sc_extern
7035 && storage_class != sc_static)
7037 error ("function-scope %qs implicitly auto and declared %<__thread%>",
7038 name);
7039 thread_p = false;
7042 if (storage_class && friendp)
7043 error ("storage class specifiers invalid in friend function declarations");
7045 if (!id_declarator)
7046 unqualified_id = NULL_TREE;
7047 else
7049 unqualified_id = id_declarator->u.id.unqualified_name;
7050 if (TREE_CODE (unqualified_id) == BASELINK)
7051 unqualified_id = BASELINK_FUNCTIONS (unqualified_id);
7052 switch (TREE_CODE (unqualified_id))
7054 case BIT_NOT_EXPR:
7055 unqualified_id
7056 = constructor_name (TREE_OPERAND (unqualified_id, 0));
7057 break;
7059 case TYPE_DECL:
7060 unqualified_id
7061 = constructor_name (TREE_TYPE (unqualified_id));
7062 break;
7064 case IDENTIFIER_NODE:
7065 case TEMPLATE_ID_EXPR:
7066 break;
7068 default:
7069 gcc_unreachable ();
7073 /* Determine the type of the entity declared by recurring on the
7074 declarator. */
7075 for (; declarator; declarator = declarator->declarator)
7077 const cp_declarator *inner_declarator;
7078 tree attrs;
7080 if (type == error_mark_node)
7081 return error_mark_node;
7083 attrs = declarator->attributes;
7084 if (attrs)
7086 int attr_flags;
7088 attr_flags = 0;
7089 if (declarator == NULL || declarator->kind == cdk_id)
7090 attr_flags |= (int) ATTR_FLAG_DECL_NEXT;
7091 if (declarator->kind == cdk_function)
7092 attr_flags |= (int) ATTR_FLAG_FUNCTION_NEXT;
7093 if (declarator->kind == cdk_array)
7094 attr_flags |= (int) ATTR_FLAG_ARRAY_NEXT;
7095 returned_attrs = decl_attributes (&type,
7096 chainon (returned_attrs, attrs),
7097 attr_flags);
7100 if (declarator->kind == cdk_id)
7101 break;
7103 inner_declarator = declarator->declarator;
7105 switch (declarator->kind)
7107 case cdk_array:
7108 type = create_array_type_for_decl (dname, type,
7109 declarator->u.array.bounds);
7110 break;
7112 case cdk_function:
7114 tree arg_types;
7115 int funcdecl_p;
7117 /* Declaring a function type.
7118 Make sure we have a valid type for the function to return. */
7120 /* We now know that the TYPE_QUALS don't apply to the
7121 decl, but to its return type. */
7122 type_quals = TYPE_UNQUALIFIED;
7124 /* Warn about some types functions can't return. */
7126 if (TREE_CODE (type) == FUNCTION_TYPE)
7128 error ("%qs declared as function returning a function", name);
7129 type = integer_type_node;
7131 if (TREE_CODE (type) == ARRAY_TYPE)
7133 error ("%qs declared as function returning an array", name);
7134 type = integer_type_node;
7137 /* Pick up type qualifiers which should be applied to `this'. */
7138 quals = declarator->u.function.qualifiers;
7140 /* Pick up the exception specifications. */
7141 raises = declarator->u.function.exception_specification;
7143 /* Say it's a definition only for the CALL_EXPR
7144 closest to the identifier. */
7145 funcdecl_p = inner_declarator && inner_declarator->kind == cdk_id;
7147 if (ctype == NULL_TREE
7148 && decl_context == FIELD
7149 && funcdecl_p
7150 && (friendp == 0 || dname == current_class_name))
7151 ctype = current_class_type;
7153 if (ctype && sfk == sfk_conversion)
7154 TYPE_HAS_CONVERSION (ctype) = 1;
7155 if (ctype && (sfk == sfk_constructor
7156 || sfk == sfk_destructor))
7158 /* We are within a class's scope. If our declarator name
7159 is the same as the class name, and we are defining
7160 a function, then it is a constructor/destructor, and
7161 therefore returns a void type. */
7163 if (flags == DTOR_FLAG)
7165 /* ISO C++ 12.4/2. A destructor may not be
7166 declared const or volatile. A destructor may
7167 not be static. */
7168 if (staticp == 2)
7169 error ("destructor cannot be static member function");
7170 if (quals)
7172 error ("destructors may not be cv-qualified");
7173 quals = TYPE_UNQUALIFIED;
7175 if (decl_context == FIELD)
7177 if (! member_function_or_else (ctype,
7178 current_class_type,
7179 flags))
7180 return void_type_node;
7183 else /* It's a constructor. */
7185 if (explicitp == 1)
7186 explicitp = 2;
7187 /* ISO C++ 12.1. A constructor may not be
7188 declared const or volatile. A constructor may
7189 not be virtual. A constructor may not be
7190 static. */
7191 if (staticp == 2)
7192 error ("constructor cannot be static member function");
7193 if (virtualp)
7195 pedwarn ("constructors cannot be declared virtual");
7196 virtualp = 0;
7198 if (quals)
7200 error ("constructors may not be cv-qualified");
7201 quals = TYPE_UNQUALIFIED;
7203 if (decl_context == FIELD)
7205 if (! member_function_or_else (ctype,
7206 current_class_type,
7207 flags))
7208 return void_type_node;
7209 TYPE_HAS_CONSTRUCTOR (ctype) = 1;
7210 if (sfk != sfk_constructor)
7211 return NULL_TREE;
7214 if (decl_context == FIELD)
7215 staticp = 0;
7217 else if (friendp)
7219 if (initialized)
7220 error ("can't initialize friend function %qs", name);
7221 if (virtualp)
7223 /* Cannot be both friend and virtual. */
7224 error ("virtual functions cannot be friends");
7225 friendp = 0;
7227 if (decl_context == NORMAL)
7228 error ("friend declaration not in class definition");
7229 if (current_function_decl && funcdef_flag)
7230 error ("can't define friend function %qs in a local "
7231 "class definition",
7232 name);
7235 arg_types = grokparms (declarator->u.function.parameters,
7236 &parms);
7238 if (inner_declarator
7239 && inner_declarator->kind == cdk_id
7240 && inner_declarator->u.id.sfk == sfk_destructor
7241 && arg_types != void_list_node)
7243 error ("destructors may not have parameters");
7244 arg_types = void_list_node;
7245 parms = NULL_TREE;
7248 type = build_function_type (type, arg_types);
7249 type = cp_build_qualified_type (type, quals);
7251 break;
7253 case cdk_pointer:
7254 case cdk_reference:
7255 case cdk_ptrmem:
7256 /* Filter out pointers-to-references and references-to-references.
7257 We can get these if a TYPE_DECL is used. */
7259 if (TREE_CODE (type) == REFERENCE_TYPE)
7261 error (declarator->kind == cdk_reference
7262 ? "cannot declare reference to %q#T"
7263 : "cannot declare pointer to %q#T", type);
7264 type = TREE_TYPE (type);
7266 else if (VOID_TYPE_P (type))
7268 if (declarator->kind == cdk_reference)
7269 error ("cannot declare reference to %q#T", type);
7270 else if (declarator->kind == cdk_ptrmem)
7271 error ("cannot declare pointer to %q#T member", type);
7274 /* We now know that the TYPE_QUALS don't apply to the decl,
7275 but to the target of the pointer. */
7276 type_quals = TYPE_UNQUALIFIED;
7278 if (declarator->kind == cdk_ptrmem
7279 && (TREE_CODE (type) == FUNCTION_TYPE
7280 || (quals && TREE_CODE (type) == METHOD_TYPE)))
7282 tree dummy;
7284 /* If the type is a FUNCTION_TYPE, pick up the
7285 qualifiers from that function type. No other
7286 qualifiers may be supplied. */
7287 if (TREE_CODE (type) == FUNCTION_TYPE)
7288 quals = cp_type_quals (type);
7290 dummy = build_decl (TYPE_DECL, NULL_TREE, type);
7291 grok_method_quals (declarator->u.pointer.class_type,
7292 dummy, quals);
7293 type = TREE_TYPE (dummy);
7294 quals = TYPE_UNQUALIFIED;
7297 if (declarator->kind == cdk_reference)
7299 if (!VOID_TYPE_P (type))
7300 type = build_reference_type (type);
7302 else if (TREE_CODE (type) == METHOD_TYPE)
7303 type = build_ptrmemfunc_type (build_pointer_type (type));
7304 else if (declarator->kind == cdk_ptrmem)
7306 /* We might have parsed a namespace as the class type. */
7307 if (TREE_CODE (declarator->u.pointer.class_type)
7308 == NAMESPACE_DECL)
7310 error ("%qD is a namespace",
7311 declarator->u.pointer.class_type);
7312 type = build_pointer_type (type);
7314 else if (declarator->u.pointer.class_type == error_mark_node)
7315 /* We will already have complained. */
7316 type = error_mark_node;
7317 else
7318 type = build_ptrmem_type (declarator->u.pointer.class_type,
7319 type);
7321 else
7322 type = build_pointer_type (type);
7324 /* Process a list of type modifier keywords (such as
7325 const or volatile) that were given inside the `*' or `&'. */
7327 if (declarator->u.pointer.qualifiers)
7329 type
7330 = cp_build_qualified_type (type,
7331 declarator->u.pointer.qualifiers);
7332 type_quals = cp_type_quals (type);
7334 ctype = NULL_TREE;
7335 break;
7337 case cdk_error:
7338 break;
7340 default:
7341 gcc_unreachable ();
7345 if (unqualified_id && TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR
7346 && TREE_CODE (type) != FUNCTION_TYPE
7347 && TREE_CODE (type) != METHOD_TYPE)
7349 error ("template-id %qD used as a declarator",
7350 unqualified_id);
7351 unqualified_id = dname;
7354 /* If DECLARATOR is non-NULL, we know it is a cdk_id declarator;
7355 otherwise, we would not have exited the loop above. */
7356 if (declarator
7357 && declarator->u.id.qualifying_scope
7358 && TYPE_P (declarator->u.id.qualifying_scope))
7360 tree t;
7362 ctype = declarator->u.id.qualifying_scope;
7363 ctype = TYPE_MAIN_VARIANT (ctype);
7364 t = ctype;
7365 while (t != NULL_TREE && CLASS_TYPE_P (t))
7367 /* You're supposed to have one `template <...>' for every
7368 template class, but you don't need one for a full
7369 specialization. For example:
7371 template <class T> struct S{};
7372 template <> struct S<int> { void f(); };
7373 void S<int>::f () {}
7375 is correct; there shouldn't be a `template <>' for the
7376 definition of `S<int>::f'. */
7377 if (CLASSTYPE_TEMPLATE_INFO (t)
7378 && (CLASSTYPE_TEMPLATE_INSTANTIATION (t)
7379 || uses_template_parms (CLASSTYPE_TI_ARGS (t)))
7380 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t)))
7381 template_count += 1;
7383 t = TYPE_MAIN_DECL (t);
7384 t = DECL_CONTEXT (t);
7387 if (ctype == current_class_type)
7389 /* class A {
7390 void A::f ();
7393 Is this ill-formed? */
7395 if (pedantic)
7396 pedwarn ("extra qualification %<%T::%> on member %qs ignored",
7397 ctype, name);
7399 else if (TREE_CODE (type) == FUNCTION_TYPE)
7401 tree sname = declarator->u.id.unqualified_name;
7403 if (TREE_CODE (sname) == IDENTIFIER_NODE
7404 && NEW_DELETE_OPNAME_P (sname))
7405 /* Overloaded operator new and operator delete
7406 are always static functions. */
7408 else if (current_class_type == NULL_TREE || friendp)
7409 type
7410 = build_method_type_directly (ctype,
7411 TREE_TYPE (type),
7412 TYPE_ARG_TYPES (type));
7413 else
7415 error ("cannot declare member function %<%T::%s%> within %<%T%>",
7416 ctype, name, current_class_type);
7417 return error_mark_node;
7420 else if (declspecs->specs[(int)ds_typedef]
7421 || COMPLETE_TYPE_P (complete_type (ctype)))
7423 /* Have to move this code elsewhere in this function.
7424 this code is used for i.e., typedef int A::M; M *pm;
7426 It is? How? jason 10/2/94 */
7428 if (current_class_type)
7430 error ("cannot declare member %<%T::%s%> within %qT",
7431 ctype, name, current_class_type);
7432 return void_type_node;
7435 else
7437 cxx_incomplete_type_error (NULL_TREE, ctype);
7438 return error_mark_node;
7442 if (returned_attrs)
7444 if (attrlist)
7445 *attrlist = chainon (returned_attrs, *attrlist);
7446 else
7447 attrlist = &returned_attrs;
7450 /* Now TYPE has the actual type. */
7452 /* Did array size calculations overflow? */
7454 if (TREE_CODE (type) == ARRAY_TYPE
7455 && COMPLETE_TYPE_P (type)
7456 && TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST
7457 && TREE_OVERFLOW (TYPE_SIZE (type)))
7459 error ("size of array %qs is too large", name);
7460 /* If we proceed with the array type as it is, we'll eventually
7461 crash in tree_low_cst(). */
7462 type = error_mark_node;
7465 if ((decl_context == FIELD || decl_context == PARM)
7466 && !processing_template_decl
7467 && variably_modified_type_p (type, NULL_TREE))
7469 if (decl_context == FIELD)
7470 error ("data member may not have variably modified type %qT", type);
7471 else
7472 error ("parameter may not have variably modified type %qT", type);
7473 type = error_mark_node;
7476 if (explicitp == 1 || (explicitp && friendp))
7478 /* [dcl.fct.spec] The explicit specifier shall only be used in
7479 declarations of constructors within a class definition. */
7480 error ("only declarations of constructors can be %<explicit%>");
7481 explicitp = 0;
7484 if (storage_class == sc_mutable)
7486 if (decl_context != FIELD || friendp)
7488 error ("non-member %qs cannot be declared %<mutable%>", name);
7489 storage_class = sc_none;
7491 else if (decl_context == TYPENAME || declspecs->specs[(int)ds_typedef])
7493 error ("non-object member %qs cannot be declared %<mutable%>", name);
7494 storage_class = sc_none;
7496 else if (TREE_CODE (type) == FUNCTION_TYPE
7497 || TREE_CODE (type) == METHOD_TYPE)
7499 error ("function %qs cannot be declared %<mutable%>", name);
7500 storage_class = sc_none;
7502 else if (staticp)
7504 error ("static %qs cannot be declared %<mutable%>", name);
7505 storage_class = sc_none;
7507 else if (type_quals & TYPE_QUAL_CONST)
7509 error ("const %qs cannot be declared %<mutable%>", name);
7510 storage_class = sc_none;
7514 /* If this is declaring a typedef name, return a TYPE_DECL. */
7515 if (declspecs->specs[(int)ds_typedef] && decl_context != TYPENAME)
7517 tree decl;
7519 /* Note that the grammar rejects storage classes
7520 in typenames, fields or parameters. */
7521 if (current_lang_name == lang_name_java)
7522 TYPE_FOR_JAVA (type) = 1;
7524 if (decl_context == FIELD)
7525 decl = build_lang_decl (TYPE_DECL, unqualified_id, type);
7526 else
7527 decl = build_decl (TYPE_DECL, unqualified_id, type);
7528 if (id_declarator && declarator->u.id.qualifying_scope)
7529 error ("%Jtypedef name may not be a nested-name-specifier", decl);
7531 if (decl_context != FIELD)
7533 if (!current_function_decl)
7534 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
7535 else if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (current_function_decl)
7536 || (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P
7537 (current_function_decl)))
7538 /* The TYPE_DECL is "abstract" because there will be
7539 clones of this constructor/destructor, and there will
7540 be copies of this TYPE_DECL generated in those
7541 clones. */
7542 DECL_ABSTRACT (decl) = 1;
7544 else if (constructor_name_p (unqualified_id, current_class_type))
7545 pedwarn ("ISO C++ forbids nested type %qD with same name "
7546 "as enclosing class",
7547 unqualified_id);
7549 /* If the user declares "typedef struct {...} foo" then the
7550 struct will have an anonymous name. Fill that name in now.
7551 Nothing can refer to it, so nothing needs know about the name
7552 change. */
7553 if (type != error_mark_node
7554 && unqualified_id
7555 && TYPE_NAME (type)
7556 && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
7557 && TYPE_ANONYMOUS_P (type)
7558 /* Don't do this if there are attributes. */
7559 && (!attrlist || !*attrlist)
7560 && cp_type_quals (type) == TYPE_UNQUALIFIED)
7562 tree oldname = TYPE_NAME (type);
7563 tree t;
7565 /* Replace the anonymous name with the real name everywhere. */
7566 for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
7567 if (TYPE_NAME (t) == oldname)
7568 TYPE_NAME (t) = decl;
7570 if (TYPE_LANG_SPECIFIC (type))
7571 TYPE_WAS_ANONYMOUS (type) = 1;
7573 /* If this is a typedef within a template class, the nested
7574 type is a (non-primary) template. The name for the
7575 template needs updating as well. */
7576 if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
7577 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type))
7578 = TYPE_IDENTIFIER (type);
7580 /* FIXME remangle member functions; member functions of a
7581 type with external linkage have external linkage. */
7584 if (quals)
7586 if (ctype == NULL_TREE)
7588 if (TREE_CODE (type) == METHOD_TYPE)
7589 ctype = TYPE_METHOD_BASETYPE (type);
7590 /* Any qualifiers on a function type typedef have
7591 already been dealt with. */
7592 else if (TREE_CODE (type) == FUNCTION_TYPE)
7593 quals = TYPE_UNQUALIFIED;
7595 if (ctype != NULL_TREE)
7596 grok_method_quals (ctype, decl, quals);
7599 if (signed_p
7600 || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
7601 C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
7603 bad_specifiers (decl, "type", virtualp, quals != TYPE_UNQUALIFIED,
7604 inlinep, friendp, raises != NULL_TREE);
7606 return decl;
7609 /* Detect the case of an array type of unspecified size
7610 which came, as such, direct from a typedef name.
7611 We must copy the type, so that the array's domain can be
7612 individually set by the object's initializer. */
7614 if (type && typedef_type
7615 && TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type)
7616 && TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (typedef_type))
7617 type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
7619 /* Detect where we're using a typedef of function type to declare a
7620 function. PARMS will not be set, so we must create it now. */
7622 if (type == typedef_type && TREE_CODE (type) == FUNCTION_TYPE)
7624 tree decls = NULL_TREE;
7625 tree args;
7627 for (args = TYPE_ARG_TYPES (type); args; args = TREE_CHAIN (args))
7629 tree decl = cp_build_parm_decl (NULL_TREE, TREE_VALUE (args));
7631 TREE_CHAIN (decl) = decls;
7632 decls = decl;
7635 parms = nreverse (decls);
7637 if (decl_context != TYPENAME)
7639 /* A cv-qualifier-seq shall only be part of the function type
7640 for a non-static member function. [8.3.5/4 dcl.fct] */
7641 if (cp_type_quals (type) != TYPE_UNQUALIFIED
7642 && (current_class_type == NULL_TREE || staticp) )
7644 error ("qualified function types cannot be used to declare %s functions",
7645 (staticp? "static member" : "free"));
7646 type = TYPE_MAIN_VARIANT (type);
7649 /* The qualifiers on the function type become the qualifiers on
7650 the non-static member function. */
7651 quals |= cp_type_quals (type);
7655 /* If this is a type name (such as, in a cast or sizeof),
7656 compute the type and return it now. */
7658 if (decl_context == TYPENAME)
7660 /* Note that the grammar rejects storage classes
7661 in typenames, fields or parameters. */
7662 if (type_quals != TYPE_UNQUALIFIED)
7663 type_quals = TYPE_UNQUALIFIED;
7665 /* Special case: "friend class foo" looks like a TYPENAME context. */
7666 if (friendp)
7668 if (type_quals != TYPE_UNQUALIFIED)
7670 error ("type qualifiers specified for friend class declaration");
7671 type_quals = TYPE_UNQUALIFIED;
7673 if (inlinep)
7675 error ("%<inline%> specified for friend class declaration");
7676 inlinep = 0;
7679 if (!current_aggr)
7681 /* Don't allow friend declaration without a class-key. */
7682 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
7683 pedwarn ("template parameters cannot be friends");
7684 else if (TREE_CODE (type) == TYPENAME_TYPE)
7685 pedwarn ("friend declaration requires class-key, "
7686 "i.e. %<friend class %T::%D%>",
7687 TYPE_CONTEXT (type), TYPENAME_TYPE_FULLNAME (type));
7688 else
7689 pedwarn ("friend declaration requires class-key, "
7690 "i.e. %<friend %#T%>",
7691 type);
7694 /* Only try to do this stuff if we didn't already give up. */
7695 if (type != integer_type_node)
7697 /* A friendly class? */
7698 if (current_class_type)
7699 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type),
7700 /*complain=*/true);
7701 else
7702 error ("trying to make class %qT a friend of global scope",
7703 type);
7705 type = void_type_node;
7708 else if (quals)
7710 if (ctype == NULL_TREE)
7712 if (TREE_CODE (type) != METHOD_TYPE)
7713 error ("invalid qualifiers on non-member function type");
7714 else
7715 ctype = TYPE_METHOD_BASETYPE (type);
7717 if (ctype)
7719 tree dummy = build_decl (TYPE_DECL, unqualified_id, type);
7720 grok_method_quals (ctype, dummy, quals);
7721 type = TREE_TYPE (dummy);
7725 return type;
7727 else if (unqualified_id == NULL_TREE && decl_context != PARM
7728 && decl_context != CATCHPARM
7729 && TREE_CODE (type) != UNION_TYPE
7730 && ! bitfield)
7732 error ("abstract declarator %qT used as declaration", type);
7733 return error_mark_node;
7736 /* Only functions may be declared using an operator-function-id. */
7737 if (unqualified_id
7738 && IDENTIFIER_OPNAME_P (unqualified_id)
7739 && TREE_CODE (type) != FUNCTION_TYPE
7740 && TREE_CODE (type) != METHOD_TYPE)
7742 error ("declaration of %qD as non-function", unqualified_id);
7743 return error_mark_node;
7746 /* We don't check parameter types here because we can emit a better
7747 error message later. */
7748 if (decl_context != PARM)
7749 type = check_var_type (unqualified_id, type);
7751 /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
7752 or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE. */
7754 if (decl_context == PARM || decl_context == CATCHPARM)
7756 if (ctype || in_namespace)
7757 error ("cannot use %<::%> in parameter declaration");
7759 /* A parameter declared as an array of T is really a pointer to T.
7760 One declared as a function is really a pointer to a function.
7761 One declared as a member is really a pointer to member. */
7763 if (TREE_CODE (type) == ARRAY_TYPE)
7765 /* Transfer const-ness of array into that of type pointed to. */
7766 type = build_pointer_type (TREE_TYPE (type));
7767 type_quals = TYPE_UNQUALIFIED;
7769 else if (TREE_CODE (type) == FUNCTION_TYPE)
7770 type = build_pointer_type (type);
7774 tree decl;
7776 if (decl_context == PARM)
7778 decl = cp_build_parm_decl (unqualified_id, type);
7780 bad_specifiers (decl, "parameter", virtualp, quals != TYPE_UNQUALIFIED,
7781 inlinep, friendp, raises != NULL_TREE);
7783 else if (decl_context == FIELD)
7785 /* The C99 flexible array extension. */
7786 if (!staticp && TREE_CODE (type) == ARRAY_TYPE
7787 && TYPE_DOMAIN (type) == NULL_TREE)
7789 tree itype = compute_array_index_type (dname, integer_zero_node);
7790 type = build_cplus_array_type (TREE_TYPE (type), itype);
7793 if (type == error_mark_node)
7795 /* Happens when declaring arrays of sizes which
7796 are error_mark_node, for example. */
7797 decl = NULL_TREE;
7799 else if (in_namespace && !friendp)
7801 /* Something like struct S { int N::j; }; */
7802 error ("invalid use of %<::%>");
7803 decl = NULL_TREE;
7805 else if (TREE_CODE (type) == FUNCTION_TYPE)
7807 int publicp = 0;
7808 tree function_context;
7810 if (friendp == 0)
7812 if (ctype == NULL_TREE)
7813 ctype = current_class_type;
7815 if (ctype == NULL_TREE)
7817 error ("can't make %qD into a method -- not in a class",
7818 unqualified_id);
7819 return void_type_node;
7822 /* ``A union may [ ... ] not [ have ] virtual functions.''
7823 ARM 9.5 */
7824 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
7826 error ("function %qD declared virtual inside a union",
7827 unqualified_id);
7828 return void_type_node;
7831 if (NEW_DELETE_OPNAME_P (unqualified_id))
7833 if (virtualp)
7835 error ("%qD cannot be declared virtual, since it "
7836 "is always static",
7837 unqualified_id);
7838 virtualp = 0;
7841 else if (staticp < 2)
7842 type = build_method_type_directly (ctype,
7843 TREE_TYPE (type),
7844 TYPE_ARG_TYPES (type));
7847 /* Check that the name used for a destructor makes sense. */
7848 if (sfk == sfk_destructor
7849 && !same_type_p (TREE_OPERAND
7850 (id_declarator->u.id.unqualified_name, 0),
7851 ctype))
7853 error ("declaration of %qD as member of %qT",
7854 id_declarator->u.id.unqualified_name,
7855 ctype);
7856 return error_mark_node;
7859 /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node. */
7860 function_context = (ctype != NULL_TREE) ?
7861 decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
7862 publicp = (! friendp || ! staticp)
7863 && function_context == NULL_TREE;
7864 decl = grokfndecl (ctype, type,
7865 TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
7866 ? unqualified_id : dname,
7867 parms,
7868 unqualified_id,
7869 virtualp, flags, quals, raises,
7870 friendp ? -1 : 0, friendp, publicp, inlinep,
7871 sfk,
7872 funcdef_flag, template_count, in_namespace, attrlist);
7873 if (decl == NULL_TREE)
7874 return decl;
7875 #if 0
7876 /* This clobbers the attrs stored in `decl' from `attrlist'. */
7877 /* The decl and setting of decl_attr is also turned off. */
7878 decl = build_decl_attribute_variant (decl, decl_attr);
7879 #endif
7881 /* [class.conv.ctor]
7883 A constructor declared without the function-specifier
7884 explicit that can be called with a single parameter
7885 specifies a conversion from the type of its first
7886 parameter to the type of its class. Such a constructor
7887 is called a converting constructor. */
7888 if (explicitp == 2)
7889 DECL_NONCONVERTING_P (decl) = 1;
7890 else if (DECL_CONSTRUCTOR_P (decl))
7892 /* The constructor can be called with exactly one
7893 parameter if there is at least one parameter, and
7894 any subsequent parameters have default arguments.
7895 Ignore any compiler-added parms. */
7896 tree arg_types = FUNCTION_FIRST_USER_PARMTYPE (decl);
7898 if (arg_types == void_list_node
7899 || (arg_types
7900 && TREE_CHAIN (arg_types)
7901 && TREE_CHAIN (arg_types) != void_list_node
7902 && !TREE_PURPOSE (TREE_CHAIN (arg_types))))
7903 DECL_NONCONVERTING_P (decl) = 1;
7906 else if (TREE_CODE (type) == METHOD_TYPE)
7908 /* We only get here for friend declarations of
7909 members of other classes. */
7910 /* All method decls are public, so tell grokfndecl to set
7911 TREE_PUBLIC, also. */
7912 decl = grokfndecl (ctype, type,
7913 TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
7914 ? unqualified_id : dname,
7915 parms,
7916 unqualified_id,
7917 virtualp, flags, quals, raises,
7918 friendp ? -1 : 0, friendp, 1, 0, sfk,
7919 funcdef_flag, template_count, in_namespace,
7920 attrlist);
7921 if (decl == NULL_TREE)
7922 return NULL_TREE;
7924 else if (!staticp && !dependent_type_p (type)
7925 && !COMPLETE_TYPE_P (complete_type (type))
7926 && (TREE_CODE (type) != ARRAY_TYPE || initialized == 0))
7928 if (unqualified_id)
7929 error ("field %qD has incomplete type", unqualified_id);
7930 else
7931 error ("name %qT has incomplete type", type);
7933 /* If we're instantiating a template, tell them which
7934 instantiation made the field's type be incomplete. */
7935 if (current_class_type
7936 && TYPE_NAME (current_class_type)
7937 && IDENTIFIER_TEMPLATE (TYPE_IDENTIFIER (current_class_type))
7938 && declspecs->type
7939 && declspecs->type == type)
7940 error (" in instantiation of template %qT",
7941 current_class_type);
7943 type = error_mark_node;
7944 decl = NULL_TREE;
7946 else
7948 if (friendp)
7950 error ("%qE is neither function nor member function; "
7951 "cannot be declared friend", unqualified_id);
7952 friendp = 0;
7954 decl = NULL_TREE;
7957 if (friendp)
7959 /* Friends are treated specially. */
7960 if (ctype == current_class_type)
7961 warning (0, "member functions are implicitly friends of their class");
7962 else if (decl && DECL_NAME (decl))
7964 if (template_class_depth (current_class_type) == 0)
7966 decl = check_explicit_specialization
7967 (unqualified_id, decl, template_count,
7968 2 * (funcdef_flag != 0) + 4);
7969 if (decl == error_mark_node)
7970 return error_mark_node;
7973 decl = do_friend (ctype, unqualified_id, decl,
7974 *attrlist, flags, quals, funcdef_flag);
7975 return decl;
7977 else
7978 return void_type_node;
7981 /* Structure field. It may not be a function, except for C++. */
7983 if (decl == NULL_TREE)
7985 if (initialized)
7987 if (!staticp)
7989 /* An attempt is being made to initialize a non-static
7990 member. But, from [class.mem]:
7992 4 A member-declarator can contain a
7993 constant-initializer only if it declares a static
7994 member (_class.static_) of integral or enumeration
7995 type, see _class.static.data_.
7997 This used to be relatively common practice, but
7998 the rest of the compiler does not correctly
7999 handle the initialization unless the member is
8000 static so we make it static below. */
8001 pedwarn ("ISO C++ forbids initialization of member %qD",
8002 unqualified_id);
8003 pedwarn ("making %qD static", unqualified_id);
8004 staticp = 1;
8007 if (uses_template_parms (type))
8008 /* We'll check at instantiation time. */
8010 else if (check_static_variable_definition (unqualified_id,
8011 type))
8012 /* If we just return the declaration, crashes
8013 will sometimes occur. We therefore return
8014 void_type_node, as if this was a friend
8015 declaration, to cause callers to completely
8016 ignore this declaration. */
8017 return void_type_node;
8020 if (staticp)
8022 /* C++ allows static class members. All other work
8023 for this is done by grokfield. */
8024 decl = build_lang_decl (VAR_DECL, unqualified_id, type);
8025 set_linkage_for_static_data_member (decl);
8026 /* Even if there is an in-class initialization, DECL
8027 is considered undefined until an out-of-class
8028 definition is provided. */
8029 DECL_EXTERNAL (decl) = 1;
8031 else
8033 decl = build_decl (FIELD_DECL, unqualified_id, type);
8034 DECL_NONADDRESSABLE_P (decl) = bitfield;
8035 if (storage_class == sc_mutable)
8037 DECL_MUTABLE_P (decl) = 1;
8038 storage_class = sc_none;
8042 bad_specifiers (decl, "field", virtualp, quals != TYPE_UNQUALIFIED,
8043 inlinep, friendp, raises != NULL_TREE);
8046 else if (TREE_CODE (type) == FUNCTION_TYPE
8047 || TREE_CODE (type) == METHOD_TYPE)
8049 tree original_name;
8050 int publicp = 0;
8052 if (!unqualified_id)
8053 return NULL_TREE;
8055 if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
8056 original_name = dname;
8057 else
8058 original_name = unqualified_id;
8060 if (storage_class == sc_auto)
8061 error ("storage class %<auto%> invalid for function %qs", name);
8062 else if (storage_class == sc_register)
8063 error ("storage class %<register%> invalid for function %qs", name);
8064 else if (thread_p)
8065 error ("storage class %<__thread%> invalid for function %qs", name);
8067 /* Function declaration not at top level.
8068 Storage classes other than `extern' are not allowed
8069 and `extern' makes no difference. */
8070 if (! toplevel_bindings_p ()
8071 && (storage_class == sc_static
8072 || declspecs->specs[(int)ds_inline])
8073 && pedantic)
8075 if (storage_class == sc_static)
8076 pedwarn ("%<static%> specified invalid for function %qs "
8077 "declared out of global scope", name);
8078 else
8079 pedwarn ("%<inline%> specifier invalid for function %qs "
8080 "declared out of global scope", name);
8083 if (ctype == NULL_TREE)
8085 if (virtualp)
8087 error ("virtual non-class function %qs", name);
8088 virtualp = 0;
8091 else if (TREE_CODE (type) == FUNCTION_TYPE && staticp < 2
8092 && !NEW_DELETE_OPNAME_P (original_name))
8093 type = build_method_type_directly (ctype,
8094 TREE_TYPE (type),
8095 TYPE_ARG_TYPES (type));
8097 /* Record presence of `static'. */
8098 publicp = (ctype != NULL_TREE
8099 || storage_class == sc_extern
8100 || storage_class != sc_static);
8102 decl = grokfndecl (ctype, type, original_name, parms, unqualified_id,
8103 virtualp, flags, quals, raises,
8104 1, friendp,
8105 publicp, inlinep, sfk, funcdef_flag,
8106 template_count, in_namespace, attrlist);
8107 if (decl == NULL_TREE)
8108 return NULL_TREE;
8110 if (staticp == 1)
8112 int invalid_static = 0;
8114 /* Don't allow a static member function in a class, and forbid
8115 declaring main to be static. */
8116 if (TREE_CODE (type) == METHOD_TYPE)
8118 pedwarn ("cannot declare member function %qD to have "
8119 "static linkage", decl);
8120 invalid_static = 1;
8122 else if (current_function_decl)
8124 /* FIXME need arm citation */
8125 error ("cannot declare static function inside another function");
8126 invalid_static = 1;
8129 if (invalid_static)
8131 staticp = 0;
8132 storage_class = sc_none;
8136 else
8138 /* It's a variable. */
8140 /* An uninitialized decl with `extern' is a reference. */
8141 decl = grokvardecl (type, unqualified_id,
8142 declspecs,
8143 initialized,
8144 (type_quals & TYPE_QUAL_CONST) != 0,
8145 ctype ? ctype : in_namespace);
8146 bad_specifiers (decl, "variable", virtualp, quals != TYPE_UNQUALIFIED,
8147 inlinep, friendp, raises != NULL_TREE);
8149 if (ctype)
8151 DECL_CONTEXT (decl) = ctype;
8152 if (staticp == 1)
8154 pedwarn ("%<static%> may not be used when defining "
8155 "(as opposed to declaring) a static data member");
8156 staticp = 0;
8157 storage_class = sc_none;
8159 if (storage_class == sc_register && TREE_STATIC (decl))
8161 error ("static member %qD declared %<register%>", decl);
8162 storage_class = sc_none;
8164 if (storage_class == sc_extern && pedantic)
8166 pedwarn ("cannot explicitly declare member %q#D to have "
8167 "extern linkage",
8168 decl);
8169 storage_class = sc_none;
8174 /* Record `register' declaration for warnings on &
8175 and in case doing stupid register allocation. */
8177 if (storage_class == sc_register)
8178 DECL_REGISTER (decl) = 1;
8179 else if (storage_class == sc_extern)
8180 DECL_THIS_EXTERN (decl) = 1;
8181 else if (storage_class == sc_static)
8182 DECL_THIS_STATIC (decl) = 1;
8184 /* Record constancy and volatility. There's no need to do this
8185 when processing a template; we'll do this for the instantiated
8186 declaration based on the type of DECL. */
8187 if (!processing_template_decl)
8188 cp_apply_type_quals_to_decl (type_quals, decl);
8190 return decl;
8194 /* Subroutine of start_function. Ensure that each of the parameter
8195 types (as listed in PARMS) is complete, as is required for a
8196 function definition. */
8198 static void
8199 require_complete_types_for_parms (tree parms)
8201 for (; parms; parms = TREE_CHAIN (parms))
8203 if (dependent_type_p (TREE_TYPE (parms)))
8204 continue;
8205 if (VOID_TYPE_P (TREE_TYPE (parms)))
8206 /* grokparms will have already issued an error. */
8207 TREE_TYPE (parms) = error_mark_node;
8208 else if (complete_type_or_else (TREE_TYPE (parms), parms))
8210 layout_decl (parms, 0);
8211 DECL_ARG_TYPE (parms) = type_passed_as (TREE_TYPE (parms));
8216 /* Returns nonzero if T is a local variable. */
8219 local_variable_p (tree t)
8221 if ((TREE_CODE (t) == VAR_DECL
8222 /* A VAR_DECL with a context that is a _TYPE is a static data
8223 member. */
8224 && !TYPE_P (CP_DECL_CONTEXT (t))
8225 /* Any other non-local variable must be at namespace scope. */
8226 && !DECL_NAMESPACE_SCOPE_P (t))
8227 || (TREE_CODE (t) == PARM_DECL))
8228 return 1;
8230 return 0;
8233 /* Returns nonzero if T is an automatic local variable or a label.
8234 (These are the declarations that need to be remapped when the code
8235 containing them is duplicated.) */
8238 nonstatic_local_decl_p (tree t)
8240 return ((local_variable_p (t) && !TREE_STATIC (t))
8241 || TREE_CODE (t) == LABEL_DECL
8242 || TREE_CODE (t) == RESULT_DECL);
8245 /* Like local_variable_p, but suitable for use as a tree-walking
8246 function. */
8248 static tree
8249 local_variable_p_walkfn (tree *tp, int *walk_subtrees,
8250 void *data ATTRIBUTE_UNUSED)
8252 if (local_variable_p (*tp) && !DECL_ARTIFICIAL (*tp))
8253 return *tp;
8254 else if (TYPE_P (*tp))
8255 *walk_subtrees = 0;
8257 return NULL_TREE;
8261 /* Check that ARG, which is a default-argument expression for a
8262 parameter DECL, is valid. Returns ARG, or ERROR_MARK_NODE, if
8263 something goes wrong. DECL may also be a _TYPE node, rather than a
8264 DECL, if there is no DECL available. */
8266 tree
8267 check_default_argument (tree decl, tree arg)
8269 tree var;
8270 tree decl_type;
8272 if (TREE_CODE (arg) == DEFAULT_ARG)
8273 /* We get a DEFAULT_ARG when looking at an in-class declaration
8274 with a default argument. Ignore the argument for now; we'll
8275 deal with it after the class is complete. */
8276 return arg;
8278 if (processing_template_decl || uses_template_parms (arg))
8279 /* We don't do anything checking until instantiation-time. Note
8280 that there may be uninstantiated arguments even for an
8281 instantiated function, since default arguments are not
8282 instantiated until they are needed. */
8283 return arg;
8285 if (TYPE_P (decl))
8287 decl_type = decl;
8288 decl = NULL_TREE;
8290 else
8291 decl_type = TREE_TYPE (decl);
8293 if (arg == error_mark_node
8294 || decl == error_mark_node
8295 || TREE_TYPE (arg) == error_mark_node
8296 || decl_type == error_mark_node)
8297 /* Something already went wrong. There's no need to check
8298 further. */
8299 return error_mark_node;
8301 /* [dcl.fct.default]
8303 A default argument expression is implicitly converted to the
8304 parameter type. */
8305 if (!TREE_TYPE (arg)
8306 || !can_convert_arg (decl_type, TREE_TYPE (arg), arg))
8308 if (decl)
8309 error ("default argument for %q#D has type %qT",
8310 decl, TREE_TYPE (arg));
8311 else
8312 error ("default argument for parameter of type %qT has type %qT",
8313 decl_type, TREE_TYPE (arg));
8315 return error_mark_node;
8318 /* [dcl.fct.default]
8320 Local variables shall not be used in default argument
8321 expressions.
8323 The keyword `this' shall not be used in a default argument of a
8324 member function. */
8325 var = walk_tree_without_duplicates (&arg, local_variable_p_walkfn,
8326 NULL);
8327 if (var)
8329 error ("default argument %qE uses local variable %qD", arg, var);
8330 return error_mark_node;
8333 /* All is well. */
8334 return arg;
8337 /* Decode the list of parameter types for a function type.
8338 Given the list of things declared inside the parens,
8339 return a list of types.
8341 If this parameter does not end with an ellipsis, we append
8342 void_list_node.
8344 *PARMS is set to the chain of PARM_DECLs created. */
8346 static tree
8347 grokparms (cp_parameter_declarator *first_parm, tree *parms)
8349 tree result = NULL_TREE;
8350 tree decls = NULL_TREE;
8351 int ellipsis = !first_parm || first_parm->ellipsis_p;
8352 cp_parameter_declarator *parm;
8353 int any_error = 0;
8355 for (parm = first_parm; parm != NULL; parm = parm->next)
8357 tree type = NULL_TREE;
8358 tree init = parm->default_argument;
8359 tree attrs;
8360 tree decl;
8362 if (parm == no_parameters)
8363 break;
8365 attrs = parm->decl_specifiers.attributes;
8366 parm->decl_specifiers.attributes = NULL_TREE;
8367 decl = grokdeclarator (parm->declarator, &parm->decl_specifiers,
8368 PARM, init != NULL_TREE, &attrs);
8369 if (! decl || TREE_TYPE (decl) == error_mark_node)
8370 continue;
8372 if (attrs)
8373 cplus_decl_attributes (&decl, attrs, 0);
8375 type = TREE_TYPE (decl);
8376 if (VOID_TYPE_P (type))
8378 if (same_type_p (type, void_type_node)
8379 && !DECL_NAME (decl) && !result && !parm->next && !ellipsis)
8380 /* this is a parmlist of `(void)', which is ok. */
8381 break;
8382 cxx_incomplete_type_error (decl, type);
8383 /* It's not a good idea to actually create parameters of
8384 type `void'; other parts of the compiler assume that a
8385 void type terminates the parameter list. */
8386 type = error_mark_node;
8387 TREE_TYPE (decl) = error_mark_node;
8390 if (type != error_mark_node)
8392 /* Top-level qualifiers on the parameters are
8393 ignored for function types. */
8394 type = cp_build_qualified_type (type, 0);
8395 if (TREE_CODE (type) == METHOD_TYPE)
8397 error ("parameter %qD invalidly declared method type", decl);
8398 type = build_pointer_type (type);
8399 TREE_TYPE (decl) = type;
8401 else if (abstract_virtuals_error (decl, type))
8402 any_error = 1; /* Seems like a good idea. */
8403 else if (POINTER_TYPE_P (type))
8405 /* [dcl.fct]/6, parameter types cannot contain pointers
8406 (references) to arrays of unknown bound. */
8407 tree t = TREE_TYPE (type);
8408 int ptr = TYPE_PTR_P (type);
8410 while (1)
8412 if (TYPE_PTR_P (t))
8413 ptr = 1;
8414 else if (TREE_CODE (t) != ARRAY_TYPE)
8415 break;
8416 else if (!TYPE_DOMAIN (t))
8417 break;
8418 t = TREE_TYPE (t);
8420 if (TREE_CODE (t) == ARRAY_TYPE)
8421 error ("parameter %qD includes %s to array of unknown "
8422 "bound %qT",
8423 decl, ptr ? "pointer" : "reference", t);
8426 if (!any_error && init)
8427 init = check_default_argument (decl, init);
8428 else
8429 init = NULL_TREE;
8432 TREE_CHAIN (decl) = decls;
8433 decls = decl;
8434 result = tree_cons (init, type, result);
8436 decls = nreverse (decls);
8437 result = nreverse (result);
8438 if (!ellipsis)
8439 result = chainon (result, void_list_node);
8440 *parms = decls;
8442 return result;
8446 /* D is a constructor or overloaded `operator='.
8448 Let T be the class in which D is declared. Then, this function
8449 returns:
8451 -1 if D's is an ill-formed constructor or copy assignment operator
8452 whose first parameter is of type `T'.
8453 0 if D is not a copy constructor or copy assignment
8454 operator.
8455 1 if D is a copy constructor or copy assignment operator whose
8456 first parameter is a reference to const qualified T.
8457 2 if D is a copy constructor or copy assignment operator whose
8458 first parameter is a reference to non-const qualified T.
8460 This function can be used as a predicate. Positive values indicate
8461 a copy constructor and nonzero values indicate a copy assignment
8462 operator. */
8465 copy_fn_p (tree d)
8467 tree args;
8468 tree arg_type;
8469 int result = 1;
8471 gcc_assert (DECL_FUNCTION_MEMBER_P (d));
8473 if (DECL_TEMPLATE_INFO (d)
8474 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d)))
8475 /* Instantiations of template member functions are never copy
8476 functions. Note that member functions of templated classes are
8477 represented as template functions internally, and we must
8478 accept those as copy functions. */
8479 return 0;
8481 args = FUNCTION_FIRST_USER_PARMTYPE (d);
8482 if (!args)
8483 return 0;
8485 arg_type = TREE_VALUE (args);
8487 if (TYPE_MAIN_VARIANT (arg_type) == DECL_CONTEXT (d))
8489 /* Pass by value copy assignment operator. */
8490 result = -1;
8492 else if (TREE_CODE (arg_type) == REFERENCE_TYPE
8493 && TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)) == DECL_CONTEXT (d))
8495 if (CP_TYPE_CONST_P (TREE_TYPE (arg_type)))
8496 result = 2;
8498 else
8499 return 0;
8501 args = TREE_CHAIN (args);
8503 if (args && args != void_list_node && !TREE_PURPOSE (args))
8504 /* There are more non-optional args. */
8505 return 0;
8507 return result;
8510 /* Remember any special properties of member function DECL. */
8512 void grok_special_member_properties (tree decl)
8514 if (!DECL_NONSTATIC_MEMBER_FUNCTION_P(decl))
8515 ; /* Not special. */
8516 else if (DECL_CONSTRUCTOR_P (decl))
8518 int ctor = copy_fn_p (decl);
8520 if (ctor > 0)
8522 /* [class.copy]
8524 A non-template constructor for class X is a copy
8525 constructor if its first parameter is of type X&, const
8526 X&, volatile X& or const volatile X&, and either there
8527 are no other parameters or else all other parameters have
8528 default arguments. */
8529 TYPE_HAS_INIT_REF (DECL_CONTEXT (decl)) = 1;
8530 if (ctor > 1)
8531 TYPE_HAS_CONST_INIT_REF (DECL_CONTEXT (decl)) = 1;
8533 else if (sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (decl)))
8534 TYPE_HAS_DEFAULT_CONSTRUCTOR (DECL_CONTEXT (decl)) = 1;
8536 else if (DECL_OVERLOADED_OPERATOR_P (decl) == NOP_EXPR)
8538 /* [class.copy]
8540 A non-template assignment operator for class X is a copy
8541 assignment operator if its parameter is of type X, X&, const
8542 X&, volatile X& or const volatile X&. */
8544 int assop = copy_fn_p (decl);
8546 if (assop)
8548 TYPE_HAS_ASSIGN_REF (DECL_CONTEXT (decl)) = 1;
8549 if (assop != 1)
8550 TYPE_HAS_CONST_ASSIGN_REF (DECL_CONTEXT (decl)) = 1;
8555 /* Check a constructor DECL has the correct form. Complains
8556 if the class has a constructor of the form X(X). */
8559 grok_ctor_properties (tree ctype, tree decl)
8561 int ctor_parm = copy_fn_p (decl);
8563 if (ctor_parm < 0)
8565 /* [class.copy]
8567 A declaration of a constructor for a class X is ill-formed if
8568 its first parameter is of type (optionally cv-qualified) X
8569 and either there are no other parameters or else all other
8570 parameters have default arguments.
8572 We *don't* complain about member template instantiations that
8573 have this form, though; they can occur as we try to decide
8574 what constructor to use during overload resolution. Since
8575 overload resolution will never prefer such a constructor to
8576 the non-template copy constructor (which is either explicitly
8577 or implicitly defined), there's no need to worry about their
8578 existence. Theoretically, they should never even be
8579 instantiated, but that's hard to forestall. */
8580 error ("invalid constructor; you probably meant %<%T (const %T&)%>",
8581 ctype, ctype);
8582 return 0;
8585 return 1;
8588 /* An operator with this code is unary, but can also be binary. */
8590 static int
8591 ambi_op_p (enum tree_code code)
8593 return (code == INDIRECT_REF
8594 || code == ADDR_EXPR
8595 || code == UNARY_PLUS_EXPR
8596 || code == NEGATE_EXPR
8597 || code == PREINCREMENT_EXPR
8598 || code == PREDECREMENT_EXPR);
8601 /* An operator with this name can only be unary. */
8603 static int
8604 unary_op_p (enum tree_code code)
8606 return (code == TRUTH_NOT_EXPR
8607 || code == BIT_NOT_EXPR
8608 || code == COMPONENT_REF
8609 || code == TYPE_EXPR);
8612 /* DECL is a declaration for an overloaded operator. If COMPLAIN is true,
8613 errors are issued for invalid declarations. */
8615 void
8616 grok_op_properties (tree decl, bool complain)
8618 tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
8619 tree argtype;
8620 int methodp = (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE);
8621 tree name = DECL_NAME (decl);
8622 enum tree_code operator_code;
8623 int arity;
8624 tree class_type;
8626 /* Count the number of arguments. */
8627 for (argtype = argtypes, arity = 0;
8628 argtype && argtype != void_list_node;
8629 argtype = TREE_CHAIN (argtype))
8630 ++arity;
8632 class_type = DECL_CONTEXT (decl);
8633 if (class_type && !CLASS_TYPE_P (class_type))
8634 class_type = NULL_TREE;
8636 if (DECL_CONV_FN_P (decl))
8637 operator_code = TYPE_EXPR;
8638 else
8641 #define DEF_OPERATOR(NAME, CODE, MANGLING, ARITY, ASSN_P) \
8642 if (ansi_opname (CODE) == name) \
8644 operator_code = (CODE); \
8645 break; \
8647 else if (ansi_assopname (CODE) == name) \
8649 operator_code = (CODE); \
8650 DECL_ASSIGNMENT_OPERATOR_P (decl) = 1; \
8651 break; \
8654 #include "operators.def"
8655 #undef DEF_OPERATOR
8657 gcc_unreachable ();
8659 while (0);
8660 gcc_assert (operator_code != LAST_CPLUS_TREE_CODE);
8661 SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
8663 if (class_type)
8664 switch (operator_code)
8666 case NEW_EXPR:
8667 TYPE_HAS_NEW_OPERATOR (class_type) = 1;
8668 break;
8670 case DELETE_EXPR:
8671 TYPE_GETS_DELETE (class_type) |= 1;
8672 break;
8674 case VEC_NEW_EXPR:
8675 TYPE_HAS_ARRAY_NEW_OPERATOR (class_type) = 1;
8676 break;
8678 case VEC_DELETE_EXPR:
8679 TYPE_GETS_DELETE (class_type) |= 2;
8680 break;
8682 default:
8683 break;
8686 /* [basic.std.dynamic.allocation]/1:
8688 A program is ill-formed if an allocation function is declared
8689 in a namespace scope other than global scope or declared static
8690 in global scope.
8692 The same also holds true for deallocation functions. */
8693 if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR
8694 || operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
8696 if (DECL_NAMESPACE_SCOPE_P (decl))
8698 if (CP_DECL_CONTEXT (decl) != global_namespace)
8699 error ("%qD may not be declared within a namespace", decl);
8700 else if (!TREE_PUBLIC (decl))
8701 error ("%qD may not be declared as static", decl);
8705 if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR)
8706 TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
8707 else if (operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
8708 TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
8709 else
8711 /* An operator function must either be a non-static member function
8712 or have at least one parameter of a class, a reference to a class,
8713 an enumeration, or a reference to an enumeration. 13.4.0.6 */
8714 if (! methodp || DECL_STATIC_FUNCTION_P (decl))
8716 if (operator_code == TYPE_EXPR
8717 || operator_code == CALL_EXPR
8718 || operator_code == COMPONENT_REF
8719 || operator_code == ARRAY_REF
8720 || operator_code == NOP_EXPR)
8722 error ("%qD must be a nonstatic member function", decl);
8723 return;
8725 else
8727 tree p;
8729 if (DECL_STATIC_FUNCTION_P (decl))
8731 error ("%qD must be either a non-static member "
8732 "function or a non-member function", decl);
8733 return;
8736 for (p = argtypes; p && p != void_list_node; p = TREE_CHAIN (p))
8738 tree arg = non_reference (TREE_VALUE (p));
8739 /* IS_AGGR_TYPE, rather than CLASS_TYPE_P, is used
8740 because these checks are performed even on
8741 template functions. */
8742 if (IS_AGGR_TYPE (arg) || TREE_CODE (arg) == ENUMERAL_TYPE)
8743 break;
8746 if (!p || p == void_list_node)
8748 if (!complain)
8749 return;
8751 error ("%qD must have an argument of class or "
8752 "enumerated type",
8753 decl);
8758 /* There are no restrictions on the arguments to an overloaded
8759 "operator ()". */
8760 if (operator_code == CALL_EXPR)
8761 return;
8763 /* Warn about conversion operators that will never be used. */
8764 if (IDENTIFIER_TYPENAME_P (name)
8765 && ! DECL_TEMPLATE_INFO (decl)
8766 && warn_conversion
8767 /* Warn only declaring the function; there is no need to
8768 warn again about out-of-class definitions. */
8769 && class_type == current_class_type)
8771 tree t = TREE_TYPE (name);
8772 int ref = (TREE_CODE (t) == REFERENCE_TYPE);
8773 const char *what = 0;
8775 if (ref)
8776 t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
8778 if (TREE_CODE (t) == VOID_TYPE)
8779 what = "void";
8780 else if (class_type)
8782 if (t == class_type)
8783 what = "the same type";
8784 /* Don't force t to be complete here. */
8785 else if (IS_AGGR_TYPE (t)
8786 && COMPLETE_TYPE_P (t)
8787 && DERIVED_FROM_P (t, class_type))
8788 what = "a base class";
8791 if (what)
8792 warning (0, "conversion to %s%s will never use a type "
8793 "conversion operator",
8794 ref ? "a reference to " : "", what);
8796 if (operator_code == COND_EXPR)
8798 /* 13.4.0.3 */
8799 error ("ISO C++ prohibits overloading operator ?:");
8801 else if (ambi_op_p (operator_code))
8803 if (arity == 1)
8804 /* We pick the one-argument operator codes by default, so
8805 we don't have to change anything. */
8807 else if (arity == 2)
8809 /* If we thought this was a unary operator, we now know
8810 it to be a binary operator. */
8811 switch (operator_code)
8813 case INDIRECT_REF:
8814 operator_code = MULT_EXPR;
8815 break;
8817 case ADDR_EXPR:
8818 operator_code = BIT_AND_EXPR;
8819 break;
8821 case UNARY_PLUS_EXPR:
8822 operator_code = PLUS_EXPR;
8823 break;
8825 case NEGATE_EXPR:
8826 operator_code = MINUS_EXPR;
8827 break;
8829 case PREINCREMENT_EXPR:
8830 operator_code = POSTINCREMENT_EXPR;
8831 break;
8833 case PREDECREMENT_EXPR:
8834 operator_code = POSTDECREMENT_EXPR;
8835 break;
8837 default:
8838 gcc_unreachable ();
8841 SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
8843 if ((operator_code == POSTINCREMENT_EXPR
8844 || operator_code == POSTDECREMENT_EXPR)
8845 && ! processing_template_decl
8846 && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)), integer_type_node))
8848 if (methodp)
8849 error ("postfix %qD must take %<int%> as its argument",
8850 decl);
8851 else
8852 error
8853 ("postfix %qD must take %<int%> as its second argument",
8854 decl);
8857 else
8859 if (methodp)
8860 error ("%qD must take either zero or one argument", decl);
8861 else
8862 error ("%qD must take either one or two arguments", decl);
8865 /* More Effective C++ rule 6. */
8866 if (warn_ecpp
8867 && (operator_code == POSTINCREMENT_EXPR
8868 || operator_code == POSTDECREMENT_EXPR
8869 || operator_code == PREINCREMENT_EXPR
8870 || operator_code == PREDECREMENT_EXPR))
8872 tree arg = TREE_VALUE (argtypes);
8873 tree ret = TREE_TYPE (TREE_TYPE (decl));
8874 if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
8875 arg = TREE_TYPE (arg);
8876 arg = TYPE_MAIN_VARIANT (arg);
8877 if (operator_code == PREINCREMENT_EXPR
8878 || operator_code == PREDECREMENT_EXPR)
8880 if (TREE_CODE (ret) != REFERENCE_TYPE
8881 || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)),
8882 arg))
8883 warning (0, "prefix %qD should return %qT", decl,
8884 build_reference_type (arg));
8886 else
8888 if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
8889 warning (0, "postfix %qD should return %qT", decl, arg);
8893 else if (unary_op_p (operator_code))
8895 if (arity != 1)
8897 if (methodp)
8898 error ("%qD must take %<void%>", decl);
8899 else
8900 error ("%qD must take exactly one argument", decl);
8903 else /* if (binary_op_p (operator_code)) */
8905 if (arity != 2)
8907 if (methodp)
8908 error ("%qD must take exactly one argument", decl);
8909 else
8910 error ("%qD must take exactly two arguments", decl);
8913 /* More Effective C++ rule 7. */
8914 if (warn_ecpp
8915 && (operator_code == TRUTH_ANDIF_EXPR
8916 || operator_code == TRUTH_ORIF_EXPR
8917 || operator_code == COMPOUND_EXPR))
8918 warning (0, "user-defined %qD always evaluates both arguments",
8919 decl);
8922 /* Effective C++ rule 23. */
8923 if (warn_ecpp
8924 && arity == 2
8925 && !DECL_ASSIGNMENT_OPERATOR_P (decl)
8926 && (operator_code == PLUS_EXPR
8927 || operator_code == MINUS_EXPR
8928 || operator_code == TRUNC_DIV_EXPR
8929 || operator_code == MULT_EXPR
8930 || operator_code == TRUNC_MOD_EXPR)
8931 && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
8932 warning (0, "%qD should return by value", decl);
8934 /* [over.oper]/8 */
8935 for (; argtypes && argtypes != void_list_node;
8936 argtypes = TREE_CHAIN (argtypes))
8937 if (TREE_PURPOSE (argtypes))
8939 TREE_PURPOSE (argtypes) = NULL_TREE;
8940 if (operator_code == POSTINCREMENT_EXPR
8941 || operator_code == POSTDECREMENT_EXPR)
8943 if (pedantic)
8944 pedwarn ("%qD cannot have default arguments", decl);
8946 else
8947 error ("%qD cannot have default arguments", decl);
8954 /* Return a string giving the keyword associate with CODE. */
8956 static const char *
8957 tag_name (enum tag_types code)
8959 switch (code)
8961 case record_type:
8962 return "struct";
8963 case class_type:
8964 return "class";
8965 case union_type:
8966 return "union";
8967 case enum_type:
8968 return "enum";
8969 case typename_type:
8970 return "typename";
8971 default:
8972 gcc_unreachable ();
8976 /* Name lookup in an elaborated-type-specifier (after the keyword
8977 indicated by TAG_CODE) has found the TYPE_DECL DECL. If the
8978 elaborated-type-specifier is invalid, issue a diagnostic and return
8979 error_mark_node; otherwise, return the *_TYPE to which it referred.
8980 If ALLOW_TEMPLATE_P is true, TYPE may be a class template. */
8982 tree
8983 check_elaborated_type_specifier (enum tag_types tag_code,
8984 tree decl,
8985 bool allow_template_p)
8987 tree type;
8989 /* In the case of:
8991 struct S { struct S *p; };
8993 name lookup will find the TYPE_DECL for the implicit "S::S"
8994 typedef. Adjust for that here. */
8995 if (DECL_SELF_REFERENCE_P (decl))
8996 decl = TYPE_NAME (TREE_TYPE (decl));
8998 type = TREE_TYPE (decl);
9000 /* Check TEMPLATE_TYPE_PARM first because DECL_IMPLICIT_TYPEDEF_P
9001 is false for this case as well. */
9002 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
9004 error ("using template type parameter %qT after %qs",
9005 type, tag_name (tag_code));
9006 return error_mark_node;
9008 /* [dcl.type.elab]
9010 If the identifier resolves to a typedef-name or a template
9011 type-parameter, the elaborated-type-specifier is ill-formed.
9013 In other words, the only legitimate declaration to use in the
9014 elaborated type specifier is the implicit typedef created when
9015 the type is declared. */
9016 else if (!DECL_IMPLICIT_TYPEDEF_P (decl)
9017 && tag_code != typename_type)
9019 error ("using typedef-name %qD after %qs", decl, tag_name (tag_code));
9020 cp_error_at ("%qD has a previous declaration here", decl);
9021 return error_mark_node;
9023 else if (TREE_CODE (type) != RECORD_TYPE
9024 && TREE_CODE (type) != UNION_TYPE
9025 && tag_code != enum_type
9026 && tag_code != typename_type)
9028 error ("%qT referred to as %qs", type, tag_name (tag_code));
9029 cp_error_at ("%qT has a previous declaration here", type);
9030 return error_mark_node;
9032 else if (TREE_CODE (type) != ENUMERAL_TYPE
9033 && tag_code == enum_type
9034 && tag_code != typename_type)
9036 error ("%qT referred to as enum", type);
9037 cp_error_at ("%qT has a previous declaration here", type);
9038 return error_mark_node;
9040 else if (!allow_template_p
9041 && TREE_CODE (type) == RECORD_TYPE
9042 && CLASSTYPE_IS_TEMPLATE (type))
9044 /* If a class template appears as elaborated type specifier
9045 without a template header such as:
9047 template <class T> class C {};
9048 void f(class C); // No template header here
9050 then the required template argument is missing. */
9051 error ("template argument required for %<%s %T%>",
9052 tag_name (tag_code),
9053 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type)));
9054 return error_mark_node;
9057 return type;
9060 /* Lookup NAME in elaborate type specifier in scope according to
9061 SCOPE and issue diagnostics if necessary.
9062 Return *_TYPE node upon success, NULL_TREE when the NAME is not
9063 found, and ERROR_MARK_NODE for type error. */
9065 static tree
9066 lookup_and_check_tag (enum tag_types tag_code, tree name,
9067 tag_scope scope, bool template_header_p)
9069 tree t;
9070 tree decl;
9071 if (scope == ts_global)
9073 /* First try ordinary name lookup, ignoring hidden class name
9074 injected via friend declaration. */
9075 decl = lookup_name (name, 2);
9076 /* If that fails, the name will be placed in the smallest
9077 non-class, non-function-prototype scope according to 3.3.1/5.
9078 We may already have a hidden name declared as friend in this
9079 scope. So lookup again but not ignoring hidden name.
9080 If we find one, that name will be made visible rather than
9081 creating a new tag. */
9082 if (!decl)
9083 decl = lookup_type_scope (name, ts_within_enclosing_non_class);
9085 else
9086 decl = lookup_type_scope (name, scope);
9088 if (decl && DECL_CLASS_TEMPLATE_P (decl))
9089 decl = DECL_TEMPLATE_RESULT (decl);
9091 if (decl && TREE_CODE (decl) == TYPE_DECL)
9093 /* Look for invalid nested type:
9094 class C {
9095 class C {};
9096 }; */
9097 if (scope == ts_current && DECL_SELF_REFERENCE_P (decl))
9099 error ("%qD has the same name as the class in which it is "
9100 "declared",
9101 decl);
9102 return error_mark_node;
9105 /* Two cases we need to consider when deciding if a class
9106 template is allowed as an elaborated type specifier:
9107 1. It is a self reference to its own class.
9108 2. It comes with a template header.
9110 For example:
9112 template <class T> class C {
9113 class C *c1; // DECL_SELF_REFERENCE_P is true
9114 class D;
9116 template <class U> class C; // template_header_p is true
9117 template <class T> class C<T>::D {
9118 class C *c2; // DECL_SELF_REFERENCE_P is true
9119 }; */
9121 t = check_elaborated_type_specifier (tag_code,
9122 decl,
9123 template_header_p
9124 | DECL_SELF_REFERENCE_P (decl));
9125 return t;
9127 else
9128 return NULL_TREE;
9131 /* Get the struct, enum or union (TAG_CODE says which) with tag NAME.
9132 Define the tag as a forward-reference if it is not defined.
9134 If a declaration is given, process it here, and report an error if
9135 multiple declarations are not identical.
9137 SCOPE is TS_CURRENT when this is also a definition. Only look in
9138 the current frame for the name (since C++ allows new names in any
9139 scope.) It is TS_WITHIN_ENCLOSING_NON_CLASS if this is a friend
9140 declaration. Only look beginning from the current scope outward up
9141 till the nearest non-class scope. Otherwise it is TS_GLOBAL.
9143 TEMPLATE_HEADER_P is true when this declaration is preceded by
9144 a set of template parameters. */
9146 tree
9147 xref_tag (enum tag_types tag_code, tree name,
9148 tag_scope scope, bool template_header_p)
9150 enum tree_code code;
9151 tree t;
9152 tree context = NULL_TREE;
9154 timevar_push (TV_NAME_LOOKUP);
9156 gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
9158 switch (tag_code)
9160 case record_type:
9161 case class_type:
9162 code = RECORD_TYPE;
9163 break;
9164 case union_type:
9165 code = UNION_TYPE;
9166 break;
9167 case enum_type:
9168 code = ENUMERAL_TYPE;
9169 break;
9170 default:
9171 gcc_unreachable ();
9174 /* In case of anonymous name, xref_tag is only called to
9175 make type node and push name. Name lookup is not required. */
9176 if (ANON_AGGRNAME_P (name))
9177 t = NULL_TREE;
9178 else
9179 t = lookup_and_check_tag (tag_code, name,
9180 scope, template_header_p);
9182 if (t == error_mark_node)
9183 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
9185 if (scope != ts_current && t && current_class_type
9186 && template_class_depth (current_class_type)
9187 && template_header_p)
9189 /* Since SCOPE is not TS_CURRENT, we are not looking at a
9190 definition of this tag. Since, in addition, we are currently
9191 processing a (member) template declaration of a template
9192 class, we must be very careful; consider:
9194 template <class X>
9195 struct S1
9197 template <class U>
9198 struct S2
9199 { template <class V>
9200 friend struct S1; };
9202 Here, the S2::S1 declaration should not be confused with the
9203 outer declaration. In particular, the inner version should
9204 have a template parameter of level 2, not level 1. This
9205 would be particularly important if the member declaration
9206 were instead:
9208 template <class V = U> friend struct S1;
9210 say, when we should tsubst into `U' when instantiating
9211 S2. On the other hand, when presented with:
9213 template <class T>
9214 struct S1 {
9215 template <class U>
9216 struct S2 {};
9217 template <class U>
9218 friend struct S2;
9221 we must find the inner binding eventually. We
9222 accomplish this by making sure that the new type we
9223 create to represent this declaration has the right
9224 TYPE_CONTEXT. */
9225 context = TYPE_CONTEXT (t);
9226 t = NULL_TREE;
9229 if (! t)
9231 /* If no such tag is yet defined, create a forward-reference node
9232 and record it as the "definition".
9233 When a real declaration of this type is found,
9234 the forward-reference will be altered into a real type. */
9235 if (code == ENUMERAL_TYPE)
9237 error ("use of enum %q#D without previous declaration", name);
9238 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
9240 else
9242 t = make_aggr_type (code);
9243 TYPE_CONTEXT (t) = context;
9244 t = pushtag (name, t, scope);
9247 else
9249 if (template_header_p && IS_AGGR_TYPE (t))
9250 redeclare_class_template (t, current_template_parms);
9251 else if (!processing_template_decl
9252 && CLASS_TYPE_P (t)
9253 && CLASSTYPE_IS_TEMPLATE (t))
9255 error ("redeclaration of %qT as a non-template", t);
9256 t = error_mark_node;
9259 /* Make injected friend class visible. */
9260 if (scope != ts_within_enclosing_non_class
9261 && hidden_name_p (TYPE_NAME (t)))
9263 DECL_ANTICIPATED (TYPE_NAME (t)) = 0;
9264 DECL_FRIEND_P (TYPE_NAME (t)) = 0;
9266 if (TYPE_TEMPLATE_INFO (t))
9268 DECL_ANTICIPATED (TYPE_TI_TEMPLATE (t)) = 0;
9269 DECL_FRIEND_P (TYPE_TI_TEMPLATE (t)) = 0;
9274 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
9277 tree
9278 xref_tag_from_type (tree old, tree id, tag_scope scope)
9280 enum tag_types tag_kind;
9282 if (TREE_CODE (old) == RECORD_TYPE)
9283 tag_kind = (CLASSTYPE_DECLARED_CLASS (old) ? class_type : record_type);
9284 else
9285 tag_kind = union_type;
9287 if (id == NULL_TREE)
9288 id = TYPE_IDENTIFIER (old);
9290 return xref_tag (tag_kind, id, scope, false);
9293 /* Create the binfo hierarchy for REF with (possibly NULL) base list
9294 BASE_LIST. For each element on BASE_LIST the TREE_PURPOSE is an
9295 access_* node, and the TREE_VALUE is the type of the base-class.
9296 Non-NULL TREE_TYPE indicates virtual inheritance. */
9298 void
9299 xref_basetypes (tree ref, tree base_list)
9301 tree *basep;
9302 tree binfo, base_binfo;
9303 unsigned max_vbases = 0; /* Maximum direct & indirect virtual bases. */
9304 unsigned max_bases = 0; /* Maximum direct bases. */
9305 int i;
9306 tree default_access;
9307 tree igo_prev; /* Track Inheritance Graph Order. */
9309 if (ref == error_mark_node)
9310 return;
9312 /* The base of a derived class is private by default, all others are
9313 public. */
9314 default_access = (TREE_CODE (ref) == RECORD_TYPE
9315 && CLASSTYPE_DECLARED_CLASS (ref)
9316 ? access_private_node : access_public_node);
9318 /* First, make sure that any templates in base-classes are
9319 instantiated. This ensures that if we call ourselves recursively
9320 we do not get confused about which classes are marked and which
9321 are not. */
9322 basep = &base_list;
9323 while (*basep)
9325 tree basetype = TREE_VALUE (*basep);
9327 if (!(processing_template_decl && uses_template_parms (basetype))
9328 && !complete_type_or_else (basetype, NULL))
9329 /* An incomplete type. Remove it from the list. */
9330 *basep = TREE_CHAIN (*basep);
9331 else
9333 max_bases++;
9334 if (TREE_TYPE (*basep))
9335 max_vbases++;
9336 if (CLASS_TYPE_P (basetype))
9337 max_vbases += VEC_length (tree, CLASSTYPE_VBASECLASSES (basetype));
9338 basep = &TREE_CHAIN (*basep);
9342 TYPE_MARKED_P (ref) = 1;
9344 /* The binfo slot should be empty, unless this is an (ill-formed)
9345 redefinition. */
9346 gcc_assert (!TYPE_BINFO (ref) || TYPE_SIZE (ref));
9347 gcc_assert (TYPE_MAIN_VARIANT (ref) == ref);
9349 binfo = make_tree_binfo (max_bases);
9351 TYPE_BINFO (ref) = binfo;
9352 BINFO_OFFSET (binfo) = size_zero_node;
9353 BINFO_TYPE (binfo) = ref;
9355 if (max_bases)
9357 BINFO_BASE_ACCESSES (binfo) = VEC_alloc (tree, gc, max_bases);
9358 /* An aggregate cannot have baseclasses. */
9359 CLASSTYPE_NON_AGGREGATE (ref) = 1;
9361 if (TREE_CODE (ref) == UNION_TYPE)
9362 error ("derived union %qT invalid", ref);
9365 if (max_bases > 1)
9367 if (TYPE_FOR_JAVA (ref))
9368 error ("Java class %qT cannot have multiple bases", ref);
9371 if (max_vbases)
9373 CLASSTYPE_VBASECLASSES (ref) = VEC_alloc (tree, gc, max_vbases);
9375 if (TYPE_FOR_JAVA (ref))
9376 error ("Java class %qT cannot have virtual bases", ref);
9379 for (igo_prev = binfo; base_list; base_list = TREE_CHAIN (base_list))
9381 tree access = TREE_PURPOSE (base_list);
9382 int via_virtual = TREE_TYPE (base_list) != NULL_TREE;
9383 tree basetype = TREE_VALUE (base_list);
9385 if (access == access_default_node)
9386 access = default_access;
9388 if (TREE_CODE (basetype) == TYPE_DECL)
9389 basetype = TREE_TYPE (basetype);
9390 if (TREE_CODE (basetype) != RECORD_TYPE
9391 && TREE_CODE (basetype) != TYPENAME_TYPE
9392 && TREE_CODE (basetype) != TEMPLATE_TYPE_PARM
9393 && TREE_CODE (basetype) != BOUND_TEMPLATE_TEMPLATE_PARM)
9395 error ("base type %qT fails to be a struct or class type",
9396 basetype);
9397 continue;
9400 if (TYPE_FOR_JAVA (basetype) && (current_lang_depth () == 0))
9401 TYPE_FOR_JAVA (ref) = 1;
9403 base_binfo = NULL_TREE;
9404 if (CLASS_TYPE_P (basetype) && !dependent_type_p (basetype))
9406 base_binfo = TYPE_BINFO (basetype);
9407 /* The original basetype could have been a typedef'd type. */
9408 basetype = BINFO_TYPE (base_binfo);
9410 /* Inherit flags from the base. */
9411 TYPE_HAS_NEW_OPERATOR (ref)
9412 |= TYPE_HAS_NEW_OPERATOR (basetype);
9413 TYPE_HAS_ARRAY_NEW_OPERATOR (ref)
9414 |= TYPE_HAS_ARRAY_NEW_OPERATOR (basetype);
9415 TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
9416 TYPE_HAS_CONVERSION (ref) |= TYPE_HAS_CONVERSION (basetype);
9417 CLASSTYPE_DIAMOND_SHAPED_P (ref)
9418 |= CLASSTYPE_DIAMOND_SHAPED_P (basetype);
9419 CLASSTYPE_REPEATED_BASE_P (ref)
9420 |= CLASSTYPE_REPEATED_BASE_P (basetype);
9423 /* We must do this test after we've seen through a typedef
9424 type. */
9425 if (TYPE_MARKED_P (basetype))
9427 if (basetype == ref)
9428 error ("recursive type %qT undefined", basetype);
9429 else
9430 error ("duplicate base type %qT invalid", basetype);
9431 continue;
9433 TYPE_MARKED_P (basetype) = 1;
9435 base_binfo = copy_binfo (base_binfo, basetype, ref,
9436 &igo_prev, via_virtual);
9437 if (!BINFO_INHERITANCE_CHAIN (base_binfo))
9438 BINFO_INHERITANCE_CHAIN (base_binfo) = binfo;
9440 BINFO_BASE_APPEND (binfo, base_binfo);
9441 BINFO_BASE_ACCESS_APPEND (binfo, access);
9444 if (VEC_space (tree, CLASSTYPE_VBASECLASSES (ref), 1))
9445 /* If we have space in the vbase vector, we must have shared at
9446 least one of them, and are therefore diamond shaped. */
9447 CLASSTYPE_DIAMOND_SHAPED_P (ref) = 1;
9449 /* Unmark all the types. */
9450 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
9451 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
9452 TYPE_MARKED_P (ref) = 0;
9454 /* Now see if we have a repeated base type. */
9455 if (!CLASSTYPE_REPEATED_BASE_P (ref))
9457 for (base_binfo = binfo; base_binfo;
9458 base_binfo = TREE_CHAIN (base_binfo))
9460 if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
9462 CLASSTYPE_REPEATED_BASE_P (ref) = 1;
9463 break;
9465 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 1;
9467 for (base_binfo = binfo; base_binfo;
9468 base_binfo = TREE_CHAIN (base_binfo))
9469 if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
9470 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
9471 else
9472 break;
9477 /* Begin compiling the definition of an enumeration type.
9478 NAME is its name.
9479 Returns the type object, as yet incomplete.
9480 Also records info about it so that build_enumerator
9481 may be used to declare the individual values as they are read. */
9483 tree
9484 start_enum (tree name)
9486 tree enumtype;
9488 gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
9490 /* If this is the real definition for a previous forward reference,
9491 fill in the contents in the same object that used to be the
9492 forward reference. */
9494 enumtype = lookup_and_check_tag (enum_type, name,
9495 /*tag_scope=*/ts_current,
9496 /*template_header_p=*/false);
9498 if (enumtype != NULL_TREE && TREE_CODE (enumtype) == ENUMERAL_TYPE)
9500 error ("multiple definition of %q#T", enumtype);
9501 error ("%Jprevious definition here", TYPE_MAIN_DECL (enumtype));
9502 /* Clear out TYPE_VALUES, and start again. */
9503 TYPE_VALUES (enumtype) = NULL_TREE;
9505 else
9507 /* In case of error, make a dummy enum to allow parsing to
9508 continue. */
9509 if (enumtype == error_mark_node)
9510 name = make_anon_name ();
9512 enumtype = make_node (ENUMERAL_TYPE);
9513 enumtype = pushtag (name, enumtype, /*tag_scope=*/ts_current);
9516 return enumtype;
9519 /* After processing and defining all the values of an enumeration type,
9520 install their decls in the enumeration type and finish it off.
9521 ENUMTYPE is the type object and VALUES a list of name-value pairs. */
9523 void
9524 finish_enum (tree enumtype)
9526 tree values;
9527 tree decl;
9528 tree value;
9529 tree minnode;
9530 tree maxnode;
9531 tree t;
9532 bool unsignedp;
9533 bool use_short_enum;
9534 int lowprec;
9535 int highprec;
9536 int precision;
9537 integer_type_kind itk;
9538 tree underlying_type = NULL_TREE;
9540 /* We built up the VALUES in reverse order. */
9541 TYPE_VALUES (enumtype) = nreverse (TYPE_VALUES (enumtype));
9543 /* For an enum defined in a template, just set the type of the values;
9544 all further processing is postponed until the template is
9545 instantiated. We need to set the type so that tsubst of a CONST_DECL
9546 works. */
9547 if (processing_template_decl)
9549 for (values = TYPE_VALUES (enumtype);
9550 values;
9551 values = TREE_CHAIN (values))
9552 TREE_TYPE (TREE_VALUE (values)) = enumtype;
9553 if (at_function_scope_p ())
9554 add_stmt (build_min (TAG_DEFN, enumtype));
9555 return;
9558 /* Determine the minimum and maximum values of the enumerators. */
9559 if (TYPE_VALUES (enumtype))
9561 minnode = maxnode = NULL_TREE;
9563 for (values = TYPE_VALUES (enumtype);
9564 values;
9565 values = TREE_CHAIN (values))
9567 decl = TREE_VALUE (values);
9569 /* [dcl.enum]: Following the closing brace of an enum-specifier,
9570 each enumerator has the type of its enumeration. Prior to the
9571 closing brace, the type of each enumerator is the type of its
9572 initializing value. */
9573 TREE_TYPE (decl) = enumtype;
9575 /* Update the minimum and maximum values, if appropriate. */
9576 value = DECL_INITIAL (decl);
9577 /* Figure out what the minimum and maximum values of the
9578 enumerators are. */
9579 if (!minnode)
9580 minnode = maxnode = value;
9581 else if (tree_int_cst_lt (maxnode, value))
9582 maxnode = value;
9583 else if (tree_int_cst_lt (value, minnode))
9584 minnode = value;
9587 else
9588 /* [dcl.enum]
9590 If the enumerator-list is empty, the underlying type is as if
9591 the enumeration had a single enumerator with value 0. */
9592 minnode = maxnode = integer_zero_node;
9594 /* Compute the number of bits require to represent all values of the
9595 enumeration. We must do this before the type of MINNODE and
9596 MAXNODE are transformed, since min_precision relies on the
9597 TREE_TYPE of the value it is passed. */
9598 unsignedp = tree_int_cst_sgn (minnode) >= 0;
9599 lowprec = min_precision (minnode, unsignedp);
9600 highprec = min_precision (maxnode, unsignedp);
9601 precision = MAX (lowprec, highprec);
9603 /* Determine the underlying type of the enumeration.
9605 [dcl.enum]
9607 The underlying type of an enumeration is an integral type that
9608 can represent all the enumerator values defined in the
9609 enumeration. It is implementation-defined which integral type is
9610 used as the underlying type for an enumeration except that the
9611 underlying type shall not be larger than int unless the value of
9612 an enumerator cannot fit in an int or unsigned int.
9614 We use "int" or an "unsigned int" as the underlying type, even if
9615 a smaller integral type would work, unless the user has
9616 explicitly requested that we use the smallest possible type. The
9617 user can request that for all enumerations with a command line
9618 flag, or for just one enumeration with an attribute. */
9620 use_short_enum = flag_short_enums
9621 || lookup_attribute ("packed", TYPE_ATTRIBUTES (enumtype));
9623 for (itk = (use_short_enum ? itk_char : itk_int);
9624 itk != itk_none;
9625 itk++)
9627 underlying_type = integer_types[itk];
9628 if (TYPE_PRECISION (underlying_type) >= precision
9629 && TYPE_UNSIGNED (underlying_type) == unsignedp)
9630 break;
9632 if (itk == itk_none)
9634 /* DR 377
9636 IF no integral type can represent all the enumerator values, the
9637 enumeration is ill-formed. */
9638 error ("no integral type can represent all of the enumerator values "
9639 "for %qT", enumtype);
9640 precision = TYPE_PRECISION (long_long_integer_type_node);
9641 underlying_type = integer_types[itk_unsigned_long_long];
9644 /* Compute the minium and maximum values for the type.
9646 [dcl.enum]
9648 For an enumeration where emin is the smallest enumerator and emax
9649 is the largest, the values of the enumeration are the values of the
9650 underlying type in the range bmin to bmax, where bmin and bmax are,
9651 respectively, the smallest and largest values of the smallest bit-
9652 field that can store emin and emax. */
9654 /* The middle-end currently assumes that types with TYPE_PRECISION
9655 narrower than their underlying type are suitably zero or sign
9656 extended to fill their mode. g++ doesn't make these guarantees.
9657 Until the middle-end can represent such paradoxical types, we
9658 set the TYPE_PRECISION to the width of the underlying type. */
9659 TYPE_PRECISION (enumtype) = TYPE_PRECISION (underlying_type);
9661 set_min_and_max_values_for_integral_type (enumtype, precision, unsignedp);
9663 /* [dcl.enum]
9665 The value of sizeof() applied to an enumeration type, an object
9666 of an enumeration type, or an enumerator, is the value of sizeof()
9667 applied to the underlying type. */
9668 TYPE_SIZE (enumtype) = TYPE_SIZE (underlying_type);
9669 TYPE_SIZE_UNIT (enumtype) = TYPE_SIZE_UNIT (underlying_type);
9670 TYPE_MODE (enumtype) = TYPE_MODE (underlying_type);
9671 TYPE_ALIGN (enumtype) = TYPE_ALIGN (underlying_type);
9672 TYPE_USER_ALIGN (enumtype) = TYPE_USER_ALIGN (underlying_type);
9673 TYPE_UNSIGNED (enumtype) = TYPE_UNSIGNED (underlying_type);
9675 /* Convert each of the enumerators to the type of the underlying
9676 type of the enumeration. */
9677 for (values = TYPE_VALUES (enumtype); values; values = TREE_CHAIN (values))
9679 decl = TREE_VALUE (values);
9680 value = perform_implicit_conversion (underlying_type,
9681 DECL_INITIAL (decl));
9683 /* Do not clobber shared ints. */
9684 value = copy_node (value);
9686 TREE_TYPE (value) = enumtype;
9687 DECL_INITIAL (decl) = value;
9688 TREE_VALUE (values) = value;
9691 /* Fix up all variant types of this enum type. */
9692 for (t = TYPE_MAIN_VARIANT (enumtype); t; t = TYPE_NEXT_VARIANT (t))
9694 TYPE_VALUES (t) = TYPE_VALUES (enumtype);
9695 TYPE_MIN_VALUE (t) = TYPE_MIN_VALUE (enumtype);
9696 TYPE_MAX_VALUE (t) = TYPE_MAX_VALUE (enumtype);
9697 TYPE_SIZE (t) = TYPE_SIZE (enumtype);
9698 TYPE_SIZE_UNIT (t) = TYPE_SIZE_UNIT (enumtype);
9699 TYPE_MODE (t) = TYPE_MODE (enumtype);
9700 TYPE_PRECISION (t) = TYPE_PRECISION (enumtype);
9701 TYPE_ALIGN (t) = TYPE_ALIGN (enumtype);
9702 TYPE_USER_ALIGN (t) = TYPE_USER_ALIGN (enumtype);
9703 TYPE_UNSIGNED (t) = TYPE_UNSIGNED (enumtype);
9706 /* Finish debugging output for this type. */
9707 rest_of_type_compilation (enumtype, namespace_bindings_p ());
9710 /* Build and install a CONST_DECL for an enumeration constant of the
9711 enumeration type ENUMTYPE whose NAME and VALUE (if any) are provided.
9712 Assignment of sequential values by default is handled here. */
9714 void
9715 build_enumerator (tree name, tree value, tree enumtype)
9717 tree decl;
9718 tree context;
9719 tree type;
9721 /* If the VALUE was erroneous, pretend it wasn't there; that will
9722 result in the enum being assigned the next value in sequence. */
9723 if (value == error_mark_node)
9724 value = NULL_TREE;
9726 /* Remove no-op casts from the value. */
9727 if (value)
9728 STRIP_TYPE_NOPS (value);
9730 if (! processing_template_decl)
9732 /* Validate and default VALUE. */
9733 if (value != NULL_TREE)
9735 value = integral_constant_value (value);
9737 if (TREE_CODE (value) == INTEGER_CST)
9739 value = perform_integral_promotions (value);
9740 constant_expression_warning (value);
9742 else
9744 error ("enumerator value for %qD not integer constant", name);
9745 value = NULL_TREE;
9749 /* Default based on previous value. */
9750 if (value == NULL_TREE)
9752 if (TYPE_VALUES (enumtype))
9754 HOST_WIDE_INT hi;
9755 unsigned HOST_WIDE_INT lo;
9756 tree prev_value;
9757 bool overflowed;
9759 /* The next value is the previous value plus one. We can
9760 safely assume that the previous value is an INTEGER_CST.
9761 add_double doesn't know the type of the target expression,
9762 so we must check with int_fits_type_p as well. */
9763 prev_value = DECL_INITIAL (TREE_VALUE (TYPE_VALUES (enumtype)));
9764 overflowed = add_double (TREE_INT_CST_LOW (prev_value),
9765 TREE_INT_CST_HIGH (prev_value),
9766 1, 0, &lo, &hi);
9767 value = build_int_cst_wide (TREE_TYPE (prev_value), lo, hi);
9768 overflowed |= !int_fits_type_p (value, TREE_TYPE (prev_value));
9770 if (overflowed)
9771 error ("overflow in enumeration values at %qD", name);
9773 else
9774 value = integer_zero_node;
9777 /* Remove no-op casts from the value. */
9778 STRIP_TYPE_NOPS (value);
9781 /* C++ associates enums with global, function, or class declarations. */
9782 context = current_scope ();
9784 /* Build the actual enumeration constant. Note that the enumeration
9785 constants have the type of their initializers until the
9786 enumeration is complete:
9788 [ dcl.enum ]
9790 Following the closing brace of an enum-specifier, each enumer-
9791 ator has the type of its enumeration. Prior to the closing
9792 brace, the type of each enumerator is the type of its
9793 initializing value.
9795 In finish_enum we will reset the type. Of course, if we're
9796 processing a template, there may be no value. */
9797 type = value ? TREE_TYPE (value) : NULL_TREE;
9799 if (context && context == current_class_type)
9800 /* This enum declaration is local to the class. We need the full
9801 lang_decl so that we can record DECL_CLASS_CONTEXT, for example. */
9802 decl = build_lang_decl (CONST_DECL, name, type);
9803 else
9804 /* It's a global enum, or it's local to a function. (Note local to
9805 a function could mean local to a class method. */
9806 decl = build_decl (CONST_DECL, name, type);
9808 DECL_CONTEXT (decl) = FROB_CONTEXT (context);
9809 TREE_CONSTANT (decl) = 1;
9810 TREE_INVARIANT (decl) = 1;
9811 TREE_READONLY (decl) = 1;
9812 DECL_INITIAL (decl) = value;
9814 if (context && context == current_class_type)
9815 /* In something like `struct S { enum E { i = 7 }; };' we put `i'
9816 on the TYPE_FIELDS list for `S'. (That's so that you can say
9817 things like `S::i' later.) */
9818 finish_member_declaration (decl);
9819 else
9820 pushdecl (decl);
9822 /* Add this enumeration constant to the list for this type. */
9823 TYPE_VALUES (enumtype) = tree_cons (name, decl, TYPE_VALUES (enumtype));
9827 /* We're defining DECL. Make sure that it's type is OK. */
9829 static void
9830 check_function_type (tree decl, tree current_function_parms)
9832 tree fntype = TREE_TYPE (decl);
9833 tree return_type = complete_type (TREE_TYPE (fntype));
9835 /* In a function definition, arg types must be complete. */
9836 require_complete_types_for_parms (current_function_parms);
9838 if (dependent_type_p (return_type))
9839 return;
9840 if (!COMPLETE_OR_VOID_TYPE_P (return_type))
9842 error ("return type %q#T is incomplete", TREE_TYPE (fntype));
9844 /* Make it return void instead, but don't change the
9845 type of the DECL_RESULT, in case we have a named return value. */
9846 if (TREE_CODE (fntype) == METHOD_TYPE)
9848 tree ctype = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (fntype)));
9849 TREE_TYPE (decl)
9850 = build_method_type_directly (ctype,
9851 void_type_node,
9852 FUNCTION_ARG_CHAIN (decl));
9854 else
9855 TREE_TYPE (decl)
9856 = build_function_type (void_type_node,
9857 TYPE_ARG_TYPES (TREE_TYPE (decl)));
9858 TREE_TYPE (decl)
9859 = build_exception_variant (fntype,
9860 TYPE_RAISES_EXCEPTIONS (fntype));
9862 else
9863 abstract_virtuals_error (decl, TREE_TYPE (fntype));
9866 /* Create the FUNCTION_DECL for a function definition.
9867 DECLSPECS and DECLARATOR are the parts of the declaration;
9868 they describe the function's name and the type it returns,
9869 but twisted together in a fashion that parallels the syntax of C.
9871 FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
9872 DECLARATOR is really the DECL for the function we are about to
9873 process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
9874 indicating that the function is an inline defined in-class.
9876 This function creates a binding context for the function body
9877 as well as setting up the FUNCTION_DECL in current_function_decl.
9879 For C++, we must first check whether that datum makes any sense.
9880 For example, "class A local_a(1,2);" means that variable local_a
9881 is an aggregate of type A, which should have a constructor
9882 applied to it with the argument list [1, 2]. */
9884 void
9885 start_preparsed_function (tree decl1, tree attrs, int flags)
9887 tree ctype = NULL_TREE;
9888 tree fntype;
9889 tree restype;
9890 int doing_friend = 0;
9891 struct cp_binding_level *bl;
9892 tree current_function_parms;
9893 struct c_fileinfo *finfo
9894 = get_fileinfo (lbasename (LOCATION_FILE (DECL_SOURCE_LOCATION (decl1))));
9896 /* Sanity check. */
9897 gcc_assert (TREE_CODE (TREE_VALUE (void_list_node)) == VOID_TYPE);
9898 gcc_assert (TREE_CHAIN (void_list_node) == NULL_TREE);
9900 fntype = TREE_TYPE (decl1);
9901 if (TREE_CODE (fntype) == METHOD_TYPE)
9902 ctype = TYPE_METHOD_BASETYPE (fntype);
9904 /* ISO C++ 11.4/5. A friend function defined in a class is in
9905 the (lexical) scope of the class in which it is defined. */
9906 if (!ctype && DECL_FRIEND_P (decl1))
9908 ctype = DECL_FRIEND_CONTEXT (decl1);
9910 /* CTYPE could be null here if we're dealing with a template;
9911 for example, `inline friend float foo()' inside a template
9912 will have no CTYPE set. */
9913 if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
9914 ctype = NULL_TREE;
9915 else
9916 doing_friend = 1;
9919 if (DECL_DECLARED_INLINE_P (decl1)
9920 && lookup_attribute ("noinline", attrs))
9921 warning (0, "%Jinline function %qD given attribute noinline", decl1, decl1);
9923 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl1))
9924 /* This is a constructor, we must ensure that any default args
9925 introduced by this definition are propagated to the clones
9926 now. The clones are used directly in overload resolution. */
9927 adjust_clone_args (decl1);
9929 /* Sometimes we don't notice that a function is a static member, and
9930 build a METHOD_TYPE for it. Fix that up now. */
9931 if (ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1)
9932 && TREE_CODE (TREE_TYPE (decl1)) == METHOD_TYPE)
9934 revert_static_member_fn (decl1);
9935 ctype = NULL_TREE;
9938 /* Set up current_class_type, and enter the scope of the class, if
9939 appropriate. */
9940 if (ctype)
9941 push_nested_class (ctype);
9942 else if (DECL_STATIC_FUNCTION_P (decl1))
9943 push_nested_class (DECL_CONTEXT (decl1));
9945 /* Now that we have entered the scope of the class, we must restore
9946 the bindings for any template parameters surrounding DECL1, if it
9947 is an inline member template. (Order is important; consider the
9948 case where a template parameter has the same name as a field of
9949 the class.) It is not until after this point that
9950 PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly. */
9951 if (flags & SF_INCLASS_INLINE)
9952 maybe_begin_member_template_processing (decl1);
9954 /* Effective C++ rule 15. */
9955 if (warn_ecpp
9956 && DECL_OVERLOADED_OPERATOR_P (decl1) == NOP_EXPR
9957 && TREE_CODE (TREE_TYPE (fntype)) == VOID_TYPE)
9958 warning (0, "%<operator=%> should return a reference to %<*this%>");
9960 /* Make the init_value nonzero so pushdecl knows this is not tentative.
9961 error_mark_node is replaced below (in poplevel) with the BLOCK. */
9962 if (!DECL_INITIAL (decl1))
9963 DECL_INITIAL (decl1) = error_mark_node;
9965 /* This function exists in static storage.
9966 (This does not mean `static' in the C sense!) */
9967 TREE_STATIC (decl1) = 1;
9969 /* We must call push_template_decl after current_class_type is set
9970 up. (If we are processing inline definitions after exiting a
9971 class scope, current_class_type will be NULL_TREE until set above
9972 by push_nested_class.) */
9973 if (processing_template_decl)
9975 /* FIXME: Handle error_mark_node more gracefully. */
9976 tree newdecl1 = push_template_decl (decl1);
9977 if (newdecl1 != error_mark_node)
9978 decl1 = newdecl1;
9981 /* We are now in the scope of the function being defined. */
9982 current_function_decl = decl1;
9984 /* Save the parm names or decls from this function's declarator
9985 where store_parm_decls will find them. */
9986 current_function_parms = DECL_ARGUMENTS (decl1);
9988 /* Make sure the parameter and return types are reasonable. When
9989 you declare a function, these types can be incomplete, but they
9990 must be complete when you define the function. */
9991 check_function_type (decl1, current_function_parms);
9993 /* Build the return declaration for the function. */
9994 restype = TREE_TYPE (fntype);
9995 /* Promote the value to int before returning it. */
9996 if (c_promoting_integer_type_p (restype))
9997 restype = type_promotes_to (restype);
9998 if (DECL_RESULT (decl1) == NULL_TREE)
10000 tree resdecl;
10002 resdecl = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (restype));
10003 DECL_ARTIFICIAL (resdecl) = 1;
10004 DECL_IGNORED_P (resdecl) = 1;
10005 DECL_RESULT (decl1) = resdecl;
10007 cp_apply_type_quals_to_decl (cp_type_quals (restype), resdecl);
10010 /* Initialize RTL machinery. We cannot do this until
10011 CURRENT_FUNCTION_DECL and DECL_RESULT are set up. We do this
10012 even when processing a template; this is how we get
10013 CFUN set up, and our per-function variables initialized.
10014 FIXME factor out the non-RTL stuff. */
10015 bl = current_binding_level;
10016 allocate_struct_function (decl1);
10017 current_binding_level = bl;
10019 /* Even though we're inside a function body, we still don't want to
10020 call expand_expr to calculate the size of a variable-sized array.
10021 We haven't necessarily assigned RTL to all variables yet, so it's
10022 not safe to try to expand expressions involving them. */
10023 cfun->x_dont_save_pending_sizes_p = 1;
10025 /* Start the statement-tree, start the tree now. */
10026 DECL_SAVED_TREE (decl1) = push_stmt_list ();
10028 /* Let the user know we're compiling this function. */
10029 announce_function (decl1);
10031 /* Record the decl so that the function name is defined.
10032 If we already have a decl for this name, and it is a FUNCTION_DECL,
10033 use the old decl. */
10034 if (!processing_template_decl && !(flags & SF_PRE_PARSED))
10036 /* A specialization is not used to guide overload resolution. */
10037 if (!DECL_FUNCTION_MEMBER_P (decl1)
10038 && !(DECL_USE_TEMPLATE (decl1) &&
10039 PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl1))))
10041 tree olddecl = pushdecl (decl1);
10043 if (olddecl == error_mark_node)
10044 /* If something went wrong when registering the declaration,
10045 use DECL1; we have to have a FUNCTION_DECL to use when
10046 parsing the body of the function. */
10048 else
10049 /* Otherwise, OLDDECL is either a previous declaration of
10050 the same function or DECL1 itself. */
10051 decl1 = olddecl;
10053 else
10055 /* We need to set the DECL_CONTEXT. */
10056 if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
10057 DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
10058 /* And make sure we have enough default args. */
10059 check_default_args (decl1);
10061 fntype = TREE_TYPE (decl1);
10064 /* Determine the ELF visibility attribute for the function. We must
10065 not do this before calling "pushdecl", as we must allow
10066 "duplicate_decls" to merge any attributes appropriately. */
10067 if (!DECL_CLONED_FUNCTION_P (decl1))
10068 determine_visibility (decl1);
10070 /* Reset these in case the call to pushdecl changed them. */
10071 current_function_decl = decl1;
10072 cfun->decl = decl1;
10074 /* If we are (erroneously) defining a function that we have already
10075 defined before, wipe out what we knew before. */
10076 if (!DECL_PENDING_INLINE_P (decl1))
10077 DECL_SAVED_FUNCTION_DATA (decl1) = NULL;
10079 if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1))
10081 /* We know that this was set up by `grokclassfn'. We do not
10082 wait until `store_parm_decls', since evil parse errors may
10083 never get us to that point. Here we keep the consistency
10084 between `current_class_type' and `current_class_ptr'. */
10085 tree t = DECL_ARGUMENTS (decl1);
10087 gcc_assert (t != NULL_TREE && TREE_CODE (t) == PARM_DECL);
10088 gcc_assert (TREE_CODE (TREE_TYPE (t)) == POINTER_TYPE);
10090 cp_function_chain->x_current_class_ref
10091 = build_indirect_ref (t, NULL);
10092 cp_function_chain->x_current_class_ptr = t;
10094 /* Constructors and destructors need to know whether they're "in
10095 charge" of initializing virtual base classes. */
10096 t = TREE_CHAIN (t);
10097 if (DECL_HAS_IN_CHARGE_PARM_P (decl1))
10099 current_in_charge_parm = t;
10100 t = TREE_CHAIN (t);
10102 if (DECL_HAS_VTT_PARM_P (decl1))
10104 gcc_assert (DECL_NAME (t) == vtt_parm_identifier);
10105 current_vtt_parm = t;
10109 if (DECL_INTERFACE_KNOWN (decl1))
10111 tree ctx = decl_function_context (decl1);
10113 if (DECL_NOT_REALLY_EXTERN (decl1))
10114 DECL_EXTERNAL (decl1) = 0;
10116 if (ctx != NULL_TREE && DECL_DECLARED_INLINE_P (ctx)
10117 && TREE_PUBLIC (ctx))
10118 /* This is a function in a local class in an extern inline
10119 function. */
10120 comdat_linkage (decl1);
10122 /* If this function belongs to an interface, it is public.
10123 If it belongs to someone else's interface, it is also external.
10124 This only affects inlines and template instantiations. */
10125 else if (finfo->interface_unknown == 0
10126 && ! DECL_TEMPLATE_INSTANTIATION (decl1))
10128 if (DECL_DECLARED_INLINE_P (decl1)
10129 || DECL_TEMPLATE_INSTANTIATION (decl1)
10130 || processing_template_decl)
10132 DECL_EXTERNAL (decl1)
10133 = (finfo->interface_only
10134 || (DECL_DECLARED_INLINE_P (decl1)
10135 && ! flag_implement_inlines
10136 && !DECL_VINDEX (decl1)));
10138 /* For WIN32 we also want to put these in linkonce sections. */
10139 maybe_make_one_only (decl1);
10141 else
10142 DECL_EXTERNAL (decl1) = 0;
10143 DECL_NOT_REALLY_EXTERN (decl1) = 0;
10144 DECL_INTERFACE_KNOWN (decl1) = 1;
10145 /* If this function is in an interface implemented in this file,
10146 make sure that the backend knows to emit this function
10147 here. */
10148 if (!DECL_EXTERNAL (decl1))
10149 mark_needed (decl1);
10151 else if (finfo->interface_unknown && finfo->interface_only
10152 && ! DECL_TEMPLATE_INSTANTIATION (decl1))
10154 /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
10155 interface, we will have both finfo->interface_unknown and
10156 finfo->interface_only set. In that case, we don't want to
10157 use the normal heuristics because someone will supply a
10158 #pragma implementation elsewhere, and deducing it here would
10159 produce a conflict. */
10160 comdat_linkage (decl1);
10161 DECL_EXTERNAL (decl1) = 0;
10162 DECL_INTERFACE_KNOWN (decl1) = 1;
10163 DECL_DEFER_OUTPUT (decl1) = 1;
10165 else
10167 /* This is a definition, not a reference.
10168 So clear DECL_EXTERNAL. */
10169 DECL_EXTERNAL (decl1) = 0;
10171 if ((DECL_DECLARED_INLINE_P (decl1)
10172 || DECL_TEMPLATE_INSTANTIATION (decl1))
10173 && ! DECL_INTERFACE_KNOWN (decl1)
10174 /* Don't try to defer nested functions for now. */
10175 && ! decl_function_context (decl1))
10176 DECL_DEFER_OUTPUT (decl1) = 1;
10177 else
10178 DECL_INTERFACE_KNOWN (decl1) = 1;
10181 begin_scope (sk_function_parms, decl1);
10183 ++function_depth;
10185 if (DECL_DESTRUCTOR_P (decl1)
10186 || (DECL_CONSTRUCTOR_P (decl1)
10187 && targetm.cxx.cdtor_returns_this ()))
10189 cdtor_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
10190 DECL_CONTEXT (cdtor_label) = current_function_decl;
10193 start_fname_decls ();
10195 store_parm_decls (current_function_parms);
10199 /* Like start_preparsed_function, except that instead of a
10200 FUNCTION_DECL, this function takes DECLSPECS and DECLARATOR.
10202 Returns 1 on success. If the DECLARATOR is not suitable for a function
10203 (it defines a datum instead), we return 0, which tells
10204 yyparse to report a parse error. */
10207 start_function (cp_decl_specifier_seq *declspecs,
10208 const cp_declarator *declarator,
10209 tree attrs)
10211 tree decl1;
10213 if (have_extern_spec)
10215 declspecs->storage_class = sc_extern;
10216 /* This should only be done once on the outermost decl. */
10217 have_extern_spec = false;
10220 decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, &attrs);
10221 /* If the declarator is not suitable for a function definition,
10222 cause a syntax error. */
10223 if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL)
10224 return 0;
10226 /* If #pragma weak was used, mark the decl weak now. */
10227 if (global_scope_p (current_binding_level))
10228 maybe_apply_pragma_weak (decl1);
10230 if (DECL_MAIN_P (decl1))
10231 /* main must return int. grokfndecl should have corrected it
10232 (and issued a diagnostic) if the user got it wrong. */
10233 gcc_assert (same_type_p (TREE_TYPE (TREE_TYPE (decl1)),
10234 integer_type_node));
10236 start_preparsed_function (decl1, attrs, /*flags=*/SF_DEFAULT);
10238 return 1;
10241 /* Store the parameter declarations into the current function declaration.
10242 This is called after parsing the parameter declarations, before
10243 digesting the body of the function.
10245 Also install to binding contour return value identifier, if any. */
10247 static void
10248 store_parm_decls (tree current_function_parms)
10250 tree fndecl = current_function_decl;
10251 tree parm;
10253 /* This is a chain of any other decls that came in among the parm
10254 declarations. If a parm is declared with enum {foo, bar} x;
10255 then CONST_DECLs for foo and bar are put here. */
10256 tree nonparms = NULL_TREE;
10258 if (current_function_parms)
10260 /* This case is when the function was defined with an ANSI prototype.
10261 The parms already have decls, so we need not do anything here
10262 except record them as in effect
10263 and complain if any redundant old-style parm decls were written. */
10265 tree specparms = current_function_parms;
10266 tree next;
10268 /* Must clear this because it might contain TYPE_DECLs declared
10269 at class level. */
10270 current_binding_level->names = NULL;
10272 /* If we're doing semantic analysis, then we'll call pushdecl
10273 for each of these. We must do them in reverse order so that
10274 they end in the correct forward order. */
10275 specparms = nreverse (specparms);
10277 for (parm = specparms; parm; parm = next)
10279 next = TREE_CHAIN (parm);
10280 if (TREE_CODE (parm) == PARM_DECL)
10282 if (DECL_NAME (parm) == NULL_TREE
10283 || TREE_CODE (parm) != VOID_TYPE)
10284 pushdecl (parm);
10285 else
10286 error ("parameter %qD declared void", parm);
10288 else
10290 /* If we find an enum constant or a type tag,
10291 put it aside for the moment. */
10292 TREE_CHAIN (parm) = NULL_TREE;
10293 nonparms = chainon (nonparms, parm);
10297 /* Get the decls in their original chain order and record in the
10298 function. This is all and only the PARM_DECLs that were
10299 pushed into scope by the loop above. */
10300 DECL_ARGUMENTS (fndecl) = getdecls ();
10302 else
10303 DECL_ARGUMENTS (fndecl) = NULL_TREE;
10305 /* Now store the final chain of decls for the arguments
10306 as the decl-chain of the current lexical scope.
10307 Put the enumerators in as well, at the front so that
10308 DECL_ARGUMENTS is not modified. */
10309 current_binding_level->names = chainon (nonparms, DECL_ARGUMENTS (fndecl));
10311 /* For a cloned function, we've already got all the code we need;
10312 there's no need to add any extra bits. */
10313 if (!DECL_CLONED_FUNCTION_P (fndecl))
10315 /* Do the starting of the exception specifications, if we have any. */
10316 if (flag_exceptions && !processing_template_decl
10317 && flag_enforce_eh_specs
10318 && TYPE_RAISES_EXCEPTIONS (TREE_TYPE (current_function_decl)))
10319 current_eh_spec_block = begin_eh_spec_block ();
10324 /* We have finished doing semantic analysis on DECL, but have not yet
10325 generated RTL for its body. Save away our current state, so that
10326 when we want to generate RTL later we know what to do. */
10328 static void
10329 save_function_data (tree decl)
10331 struct language_function *f;
10333 /* Save the language-specific per-function data so that we can
10334 get it back when we really expand this function. */
10335 gcc_assert (!DECL_PENDING_INLINE_P (decl));
10337 /* Make a copy. */
10338 f = GGC_NEW (struct language_function);
10339 memcpy (f, cp_function_chain, sizeof (struct language_function));
10340 DECL_SAVED_FUNCTION_DATA (decl) = f;
10342 /* Clear out the bits we don't need. */
10343 f->base.x_stmt_tree.x_cur_stmt_list = NULL_TREE;
10344 f->x_named_label_uses = NULL;
10345 f->bindings = NULL;
10346 f->x_local_names = NULL;
10350 /* Set the return value of the constructor (if present). */
10352 static void
10353 finish_constructor_body (void)
10355 tree val;
10356 tree exprstmt;
10358 if (targetm.cxx.cdtor_returns_this ())
10360 /* Any return from a constructor will end up here. */
10361 add_stmt (build_stmt (LABEL_EXPR, cdtor_label));
10363 val = DECL_ARGUMENTS (current_function_decl);
10364 val = build2 (MODIFY_EXPR, TREE_TYPE (val),
10365 DECL_RESULT (current_function_decl), val);
10366 /* Return the address of the object. */
10367 exprstmt = build_stmt (RETURN_EXPR, val);
10368 add_stmt (exprstmt);
10372 /* Do all the processing for the beginning of a destructor; set up the
10373 vtable pointers and cleanups for bases and members. */
10375 static void
10376 begin_destructor_body (void)
10378 tree if_stmt;
10379 tree compound_stmt;
10381 /* If the dtor is empty, and we know there is not any possible
10382 way we could use any vtable entries, before they are possibly
10383 set by a base class dtor, we don't have to setup the vtables,
10384 as we know that any base class dtor will set up any vtables
10385 it needs. We avoid MI, because one base class dtor can do a
10386 virtual dispatch to an overridden function that would need to
10387 have a non-related vtable set up, we cannot avoid setting up
10388 vtables in that case. We could change this to see if there
10389 is just one vtable.
10391 ??? In the destructor for a class, the vtables are set
10392 appropriately for that class. There will be no non-related
10393 vtables. jason 2001-12-11. */
10394 if_stmt = begin_if_stmt ();
10396 /* If it is not safe to avoid setting up the vtables, then
10397 someone will change the condition to be boolean_true_node.
10398 (Actually, for now, we do not have code to set the condition
10399 appropriately, so we just assume that we always need to
10400 initialize the vtables.) */
10401 finish_if_stmt_cond (boolean_true_node, if_stmt);
10403 compound_stmt = begin_compound_stmt (0);
10405 /* Make all virtual function table pointers in non-virtual base
10406 classes point to CURRENT_CLASS_TYPE's virtual function
10407 tables. */
10408 initialize_vtbl_ptrs (current_class_ptr);
10410 finish_compound_stmt (compound_stmt);
10411 finish_then_clause (if_stmt);
10412 finish_if_stmt (if_stmt);
10414 /* And insert cleanups for our bases and members so that they
10415 will be properly destroyed if we throw. */
10416 push_base_cleanups ();
10419 /* At the end of every destructor we generate code to delete the object if
10420 necessary. Do that now. */
10422 static void
10423 finish_destructor_body (void)
10425 tree exprstmt;
10427 /* Any return from a destructor will end up here; that way all base
10428 and member cleanups will be run when the function returns. */
10429 add_stmt (build_stmt (LABEL_EXPR, cdtor_label));
10431 /* In a virtual destructor, we must call delete. */
10432 if (DECL_VIRTUAL_P (current_function_decl))
10434 tree if_stmt;
10435 tree virtual_size = cxx_sizeof (current_class_type);
10437 /* [class.dtor]
10439 At the point of definition of a virtual destructor (including
10440 an implicit definition), non-placement operator delete shall
10441 be looked up in the scope of the destructor's class and if
10442 found shall be accessible and unambiguous. */
10443 exprstmt = build_op_delete_call
10444 (DELETE_EXPR, current_class_ptr, virtual_size,
10445 /*global_p=*/false, NULL_TREE);
10447 if_stmt = begin_if_stmt ();
10448 finish_if_stmt_cond (build2 (BIT_AND_EXPR, integer_type_node,
10449 current_in_charge_parm,
10450 integer_one_node),
10451 if_stmt);
10452 finish_expr_stmt (exprstmt);
10453 finish_then_clause (if_stmt);
10454 finish_if_stmt (if_stmt);
10457 if (targetm.cxx.cdtor_returns_this ())
10459 tree val;
10461 val = DECL_ARGUMENTS (current_function_decl);
10462 val = build2 (MODIFY_EXPR, TREE_TYPE (val),
10463 DECL_RESULT (current_function_decl), val);
10464 /* Return the address of the object. */
10465 exprstmt = build_stmt (RETURN_EXPR, val);
10466 add_stmt (exprstmt);
10470 /* Do the necessary processing for the beginning of a function body, which
10471 in this case includes member-initializers, but not the catch clauses of
10472 a function-try-block. Currently, this means opening a binding level
10473 for the member-initializers (in a ctor) and member cleanups (in a dtor).
10474 In other functions, this isn't necessary, but it doesn't hurt. */
10476 tree
10477 begin_function_body (void)
10479 tree stmt;
10481 if (processing_template_decl)
10482 /* Do nothing now. */;
10483 else
10484 /* Always keep the BLOCK node associated with the outermost pair of
10485 curly braces of a function. These are needed for correct
10486 operation of dwarfout.c. */
10487 keep_next_level (true);
10489 stmt = begin_compound_stmt (BCS_FN_BODY);
10491 if (processing_template_decl)
10492 /* Do nothing now. */;
10493 else if (DECL_DESTRUCTOR_P (current_function_decl))
10494 begin_destructor_body ();
10496 return stmt;
10499 /* Do the processing for the end of a function body. Currently, this means
10500 closing out the cleanups for fully-constructed bases and members, and in
10501 the case of the destructor, deleting the object if desired. Again, this
10502 is only meaningful for [cd]tors, since they are the only functions where
10503 there is a significant distinction between the main body and any
10504 function catch clauses. Handling, say, main() return semantics here
10505 would be wrong, as flowing off the end of a function catch clause for
10506 main() would also need to return 0. */
10508 void
10509 finish_function_body (tree compstmt)
10511 /* Close the block. */
10512 finish_compound_stmt (compstmt);
10514 if (processing_template_decl)
10515 /* Do nothing now. */;
10516 else if (DECL_CONSTRUCTOR_P (current_function_decl))
10517 finish_constructor_body ();
10518 else if (DECL_DESTRUCTOR_P (current_function_decl))
10519 finish_destructor_body ();
10522 /* Finish up a function declaration and compile that function
10523 all the way to assembler language output. The free the storage
10524 for the function definition.
10526 FLAGS is a bitwise or of the following values:
10527 2 - INCLASS_INLINE
10528 We just finished processing the body of an in-class inline
10529 function definition. (This processing will have taken place
10530 after the class definition is complete.) */
10532 tree
10533 finish_function (int flags)
10535 tree fndecl = current_function_decl;
10536 tree fntype, ctype = NULL_TREE;
10537 int inclass_inline = (flags & 2) != 0;
10538 int nested;
10540 /* When we get some parse errors, we can end up without a
10541 current_function_decl, so cope. */
10542 if (fndecl == NULL_TREE)
10543 return error_mark_node;
10545 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fndecl)
10546 && DECL_VIRTUAL_P (fndecl)
10547 && !processing_template_decl)
10549 tree fnclass = DECL_CONTEXT (fndecl);
10550 if (fndecl == CLASSTYPE_KEY_METHOD (fnclass))
10551 keyed_classes = tree_cons (NULL_TREE, fnclass, keyed_classes);
10554 nested = function_depth > 1;
10555 fntype = TREE_TYPE (fndecl);
10557 /* TREE_READONLY (fndecl) = 1;
10558 This caused &foo to be of type ptr-to-const-function
10559 which then got a warning when stored in a ptr-to-function variable. */
10561 gcc_assert (building_stmt_tree ());
10563 /* For a cloned function, we've already got all the code we need;
10564 there's no need to add any extra bits. */
10565 if (!DECL_CLONED_FUNCTION_P (fndecl))
10567 if (DECL_MAIN_P (current_function_decl))
10569 tree stmt;
10571 /* Make it so that `main' always returns 0 by default (or
10572 1 for VMS). */
10573 #if VMS_TARGET
10574 stmt = finish_return_stmt (integer_one_node);
10575 #else
10576 stmt = finish_return_stmt (integer_zero_node);
10577 #endif
10578 /* Hack. We don't want the middle-end to warn that this
10579 return is unreachable, so put the statement on the
10580 special line 0. */
10581 #ifdef USE_MAPPED_LOCATION
10582 SET_EXPR_LOCATION (stmt, UNKNOWN_LOCATION);
10583 #else
10584 annotate_with_file_line (stmt, input_filename, 0);
10585 #endif
10588 /* Finish dealing with exception specifiers. */
10589 if (flag_exceptions && !processing_template_decl
10590 && flag_enforce_eh_specs
10591 && TYPE_RAISES_EXCEPTIONS (TREE_TYPE (current_function_decl)))
10592 finish_eh_spec_block (TYPE_RAISES_EXCEPTIONS
10593 (TREE_TYPE (current_function_decl)),
10594 current_eh_spec_block);
10597 /* If we're saving up tree structure, tie off the function now. */
10598 DECL_SAVED_TREE (fndecl) = pop_stmt_list (DECL_SAVED_TREE (fndecl));
10600 finish_fname_decls ();
10602 /* If this function can't throw any exceptions, remember that. */
10603 if (!processing_template_decl
10604 && !cp_function_chain->can_throw
10605 && !flag_non_call_exceptions)
10606 TREE_NOTHROW (fndecl) = 1;
10608 /* This must come after expand_function_end because cleanups might
10609 have declarations (from inline functions) that need to go into
10610 this function's blocks. */
10612 /* If the current binding level isn't the outermost binding level
10613 for this function, either there is a bug, or we have experienced
10614 syntax errors and the statement tree is malformed. */
10615 if (current_binding_level->kind != sk_function_parms)
10617 /* Make sure we have already experienced errors. */
10618 gcc_assert (errorcount);
10620 /* Throw away the broken statement tree and extra binding
10621 levels. */
10622 DECL_SAVED_TREE (fndecl) = alloc_stmt_list ();
10624 while (current_binding_level->kind != sk_function_parms)
10626 if (current_binding_level->kind == sk_class)
10627 pop_nested_class ();
10628 else
10629 poplevel (0, 0, 0);
10632 poplevel (1, 0, 1);
10634 /* Statements should always be full-expressions at the outermost set
10635 of curly braces for a function. */
10636 gcc_assert (stmts_are_full_exprs_p ());
10638 /* Set up the named return value optimization, if we can. Candidate
10639 variables are selected in check_return_value. */
10640 if (current_function_return_value)
10642 tree r = current_function_return_value;
10643 tree outer;
10645 if (r != error_mark_node
10646 /* This is only worth doing for fns that return in memory--and
10647 simpler, since we don't have to worry about promoted modes. */
10648 && aggregate_value_p (TREE_TYPE (TREE_TYPE (fndecl)), fndecl)
10649 /* Only allow this for variables declared in the outer scope of
10650 the function so we know that their lifetime always ends with a
10651 return; see g++.dg/opt/nrv6.C. We could be more flexible if
10652 we were to do this optimization in tree-ssa. */
10653 && (outer = BLOCK_SUBBLOCKS (DECL_INITIAL (fndecl)))
10654 /* Skip the artificial function body block. */
10655 && (outer = BLOCK_SUBBLOCKS (outer))
10656 && chain_member (r, BLOCK_VARS (outer)))
10657 finalize_nrv (&DECL_SAVED_TREE (fndecl), r, DECL_RESULT (fndecl));
10659 current_function_return_value = NULL_TREE;
10662 /* Remember that we were in class scope. */
10663 if (current_class_name)
10664 ctype = current_class_type;
10666 /* Must mark the RESULT_DECL as being in this function. */
10667 DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
10669 /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
10670 to the FUNCTION_DECL node itself. */
10671 BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
10673 /* Save away current state, if appropriate. */
10674 if (!processing_template_decl)
10675 save_function_data (fndecl);
10677 /* Complain if there's just no return statement. */
10678 if (warn_return_type
10679 && TREE_CODE (TREE_TYPE (fntype)) != VOID_TYPE
10680 && !dependent_type_p (TREE_TYPE (fntype))
10681 && !current_function_returns_value && !current_function_returns_null
10682 /* Don't complain if we abort or throw. */
10683 && !current_function_returns_abnormally
10684 && !DECL_NAME (DECL_RESULT (fndecl))
10685 /* Normally, with -Wreturn-type, flow will complain. Unless we're an
10686 inline function, as we might never be compiled separately. */
10687 && (DECL_INLINE (fndecl) || processing_template_decl)
10688 /* Structor return values (if any) are set by the compiler. */
10689 && !DECL_CONSTRUCTOR_P (fndecl)
10690 && !DECL_DESTRUCTOR_P (fndecl))
10691 warning (0, "no return statement in function returning non-void");
10693 /* Store the end of the function, so that we get good line number
10694 info for the epilogue. */
10695 cfun->function_end_locus = input_location;
10697 /* Genericize before inlining. */
10698 if (!processing_template_decl)
10700 struct language_function *f = DECL_SAVED_FUNCTION_DATA (fndecl);
10701 cp_genericize (fndecl);
10702 /* Clear out the bits we don't need. */
10703 f->x_current_class_ptr = NULL;
10704 f->x_current_class_ref = NULL;
10705 f->x_eh_spec_block = NULL;
10706 f->x_in_charge_parm = NULL;
10707 f->x_vtt_parm = NULL;
10708 f->x_return_value = NULL;
10709 f->bindings = NULL;
10711 /* Handle attribute((warn_unused_result)). Relies on gimple input. */
10712 c_warn_unused_result (&DECL_SAVED_TREE (fndecl));
10714 /* Clear out the bits we don't need. */
10715 local_names = NULL;
10716 named_label_uses = NULL;
10718 /* We're leaving the context of this function, so zap cfun. It's still in
10719 DECL_STRUCT_FUNCTION, and we'll restore it in tree_rest_of_compilation. */
10720 cfun = NULL;
10721 current_function_decl = NULL;
10723 /* If this is an in-class inline definition, we may have to pop the
10724 bindings for the template parameters that we added in
10725 maybe_begin_member_template_processing when start_function was
10726 called. */
10727 if (inclass_inline)
10728 maybe_end_member_template_processing ();
10730 /* Leave the scope of the class. */
10731 if (ctype)
10732 pop_nested_class ();
10734 --function_depth;
10736 /* Clean up. */
10737 if (! nested)
10738 /* Let the error reporting routines know that we're outside a
10739 function. For a nested function, this value is used in
10740 cxx_pop_function_context and then reset via pop_function_context. */
10741 current_function_decl = NULL_TREE;
10743 return fndecl;
10746 /* Create the FUNCTION_DECL for a function definition.
10747 DECLSPECS and DECLARATOR are the parts of the declaration;
10748 they describe the return type and the name of the function,
10749 but twisted together in a fashion that parallels the syntax of C.
10751 This function creates a binding context for the function body
10752 as well as setting up the FUNCTION_DECL in current_function_decl.
10754 Returns a FUNCTION_DECL on success.
10756 If the DECLARATOR is not suitable for a function (it defines a datum
10757 instead), we return 0, which tells yyparse to report a parse error.
10759 May return void_type_node indicating that this method is actually
10760 a friend. See grokfield for more details.
10762 Came here with a `.pushlevel' .
10764 DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
10765 CHANGES TO CODE IN `grokfield'. */
10767 tree
10768 start_method (cp_decl_specifier_seq *declspecs,
10769 const cp_declarator *declarator, tree attrlist)
10771 tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
10772 &attrlist);
10774 if (fndecl == error_mark_node)
10775 return error_mark_node;
10777 if (fndecl == NULL || TREE_CODE (fndecl) != FUNCTION_DECL)
10779 error ("invalid member function declaration");
10780 return error_mark_node;
10783 if (attrlist)
10784 cplus_decl_attributes (&fndecl, attrlist, 0);
10786 /* Pass friends other than inline friend functions back. */
10787 if (fndecl == void_type_node)
10788 return fndecl;
10790 if (DECL_IN_AGGR_P (fndecl))
10792 if (DECL_CONTEXT (fndecl)
10793 && TREE_CODE( DECL_CONTEXT (fndecl)) != NAMESPACE_DECL)
10794 error ("%qD is already defined in class %qT", fndecl,
10795 DECL_CONTEXT (fndecl));
10796 return void_type_node;
10799 check_template_shadow (fndecl);
10801 DECL_DECLARED_INLINE_P (fndecl) = 1;
10802 if (flag_default_inline)
10803 DECL_INLINE (fndecl) = 1;
10805 /* We process method specializations in finish_struct_1. */
10806 if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
10808 fndecl = push_template_decl (fndecl);
10809 if (fndecl == error_mark_node)
10810 return fndecl;
10813 if (! DECL_FRIEND_P (fndecl))
10815 if (TREE_CHAIN (fndecl))
10817 fndecl = copy_node (fndecl);
10818 TREE_CHAIN (fndecl) = NULL_TREE;
10820 grok_special_member_properties (fndecl);
10823 cp_finish_decl (fndecl, NULL_TREE, NULL_TREE, 0);
10825 /* Make a place for the parms. */
10826 begin_scope (sk_function_parms, fndecl);
10828 DECL_IN_AGGR_P (fndecl) = 1;
10829 return fndecl;
10832 /* Go through the motions of finishing a function definition.
10833 We don't compile this method until after the whole class has
10834 been processed.
10836 FINISH_METHOD must return something that looks as though it
10837 came from GROKFIELD (since we are defining a method, after all).
10839 This is called after parsing the body of the function definition.
10840 STMTS is the chain of statements that makes up the function body.
10842 DECL is the ..._DECL that `start_method' provided. */
10844 tree
10845 finish_method (tree decl)
10847 tree fndecl = decl;
10848 tree old_initial;
10850 tree link;
10852 if (decl == void_type_node)
10853 return decl;
10855 old_initial = DECL_INITIAL (fndecl);
10857 /* Undo the level for the parms (from start_method).
10858 This is like poplevel, but it causes nothing to be
10859 saved. Saving information here confuses symbol-table
10860 output routines. Besides, this information will
10861 be correctly output when this method is actually
10862 compiled. */
10864 /* Clear out the meanings of the local variables of this level;
10865 also record in each decl which block it belongs to. */
10867 for (link = current_binding_level->names; link; link = TREE_CHAIN (link))
10869 if (DECL_NAME (link) != NULL_TREE)
10870 pop_binding (DECL_NAME (link), link);
10871 gcc_assert (TREE_CODE (link) != FUNCTION_DECL);
10872 DECL_CONTEXT (link) = NULL_TREE;
10875 poplevel (0, 0, 0);
10877 DECL_INITIAL (fndecl) = old_initial;
10879 /* We used to check if the context of FNDECL was different from
10880 current_class_type as another way to get inside here. This didn't work
10881 for String.cc in libg++. */
10882 if (DECL_FRIEND_P (fndecl))
10884 VEC_safe_push (tree, gc, CLASSTYPE_INLINE_FRIENDS (current_class_type),
10885 fndecl);
10886 decl = void_type_node;
10889 return decl;
10893 /* VAR is a VAR_DECL. If its type is incomplete, remember VAR so that
10894 we can lay it out later, when and if its type becomes complete. */
10896 void
10897 maybe_register_incomplete_var (tree var)
10899 gcc_assert (TREE_CODE (var) == VAR_DECL);
10901 /* Keep track of variables with incomplete types. */
10902 if (!processing_template_decl && TREE_TYPE (var) != error_mark_node
10903 && DECL_EXTERNAL (var))
10905 tree inner_type = TREE_TYPE (var);
10907 while (TREE_CODE (inner_type) == ARRAY_TYPE)
10908 inner_type = TREE_TYPE (inner_type);
10909 inner_type = TYPE_MAIN_VARIANT (inner_type);
10911 if ((!COMPLETE_TYPE_P (inner_type) && CLASS_TYPE_P (inner_type))
10912 /* RTTI TD entries are created while defining the type_info. */
10913 || (TYPE_LANG_SPECIFIC (inner_type)
10914 && TYPE_BEING_DEFINED (inner_type)))
10915 incomplete_vars = tree_cons (inner_type, var, incomplete_vars);
10919 /* Called when a class type (given by TYPE) is defined. If there are
10920 any existing VAR_DECLs whose type hsa been completed by this
10921 declaration, update them now. */
10923 void
10924 complete_vars (tree type)
10926 tree *list = &incomplete_vars;
10928 gcc_assert (CLASS_TYPE_P (type));
10929 while (*list)
10931 if (same_type_p (type, TREE_PURPOSE (*list)))
10933 tree var = TREE_VALUE (*list);
10934 tree type = TREE_TYPE (var);
10935 /* Complete the type of the variable. The VAR_DECL itself
10936 will be laid out in expand_expr. */
10937 complete_type (type);
10938 cp_apply_type_quals_to_decl (cp_type_quals (type), var);
10939 /* Remove this entry from the list. */
10940 *list = TREE_CHAIN (*list);
10942 else
10943 list = &TREE_CHAIN (*list);
10946 /* Check for pending declarations which may have abstract type. */
10947 complete_type_check_abstract (type);
10950 /* If DECL is of a type which needs a cleanup, build that cleanup
10951 here. */
10953 tree
10954 cxx_maybe_build_cleanup (tree decl)
10956 tree type = TREE_TYPE (decl);
10958 if (type != error_mark_node && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
10960 int flags = LOOKUP_NORMAL|LOOKUP_DESTRUCTOR;
10961 tree rval;
10962 bool has_vbases = (TREE_CODE (type) == RECORD_TYPE
10963 && CLASSTYPE_VBASECLASSES (type));
10965 if (TREE_CODE (type) == ARRAY_TYPE)
10966 rval = decl;
10967 else
10969 cxx_mark_addressable (decl);
10970 rval = build_unary_op (ADDR_EXPR, decl, 0);
10973 /* Optimize for space over speed here. */
10974 if (!has_vbases || flag_expensive_optimizations)
10975 flags |= LOOKUP_NONVIRTUAL;
10977 rval = build_delete (TREE_TYPE (rval), rval,
10978 sfk_complete_destructor, flags, 0);
10980 return rval;
10982 return NULL_TREE;
10985 /* When a stmt has been parsed, this function is called. */
10987 void
10988 finish_stmt (void)
10992 /* DECL was originally constructed as a non-static member function,
10993 but turned out to be static. Update it accordingly. */
10995 void
10996 revert_static_member_fn (tree decl)
10998 tree tmp;
10999 tree function = TREE_TYPE (decl);
11000 tree args = TYPE_ARG_TYPES (function);
11002 if (cp_type_quals (TREE_TYPE (TREE_VALUE (args)))
11003 != TYPE_UNQUALIFIED)
11004 error ("static member function %q#D declared with type qualifiers", decl);
11006 args = TREE_CHAIN (args);
11007 tmp = build_function_type (TREE_TYPE (function), args);
11008 tmp = build_qualified_type (tmp, cp_type_quals (function));
11009 tmp = build_exception_variant (tmp,
11010 TYPE_RAISES_EXCEPTIONS (function));
11011 TREE_TYPE (decl) = tmp;
11012 if (DECL_ARGUMENTS (decl))
11013 DECL_ARGUMENTS (decl) = TREE_CHAIN (DECL_ARGUMENTS (decl));
11014 DECL_STATIC_FUNCTION_P (decl) = 1;
11017 /* Initialize the variables used during compilation of a C++
11018 function. */
11020 void
11021 cxx_push_function_context (struct function * f)
11023 struct language_function *p = GGC_CNEW (struct language_function);
11024 f->language = p;
11026 /* Whenever we start a new function, we destroy temporaries in the
11027 usual way. */
11028 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
11030 if (f->decl)
11032 tree fn = f->decl;
11034 if (DECL_SAVED_FUNCTION_DATA (fn))
11036 /* If we already parsed this function, and we're just expanding it
11037 now, restore saved state. */
11038 *cp_function_chain = *DECL_SAVED_FUNCTION_DATA (fn);
11040 /* We don't need the saved data anymore. Unless this is an inline
11041 function; we need the named return value info for
11042 declare_return_variable. */
11043 if (! DECL_INLINE (fn))
11044 DECL_SAVED_FUNCTION_DATA (fn) = NULL;
11049 /* Free the language-specific parts of F, now that we've finished
11050 compiling the function. */
11052 void
11053 cxx_pop_function_context (struct function * f)
11055 f->language = 0;
11058 /* Return which tree structure is used by T, or TS_CP_GENERIC if T is
11059 one of the language-independent trees. */
11061 enum cp_tree_node_structure_enum
11062 cp_tree_node_structure (union lang_tree_node * t)
11064 switch (TREE_CODE (&t->generic))
11066 case DEFAULT_ARG: return TS_CP_DEFAULT_ARG;
11067 case IDENTIFIER_NODE: return TS_CP_IDENTIFIER;
11068 case OVERLOAD: return TS_CP_OVERLOAD;
11069 case TEMPLATE_PARM_INDEX: return TS_CP_TPI;
11070 case TINST_LEVEL: return TS_CP_TINST_LEVEL;
11071 case PTRMEM_CST: return TS_CP_PTRMEM;
11072 case BASELINK: return TS_CP_BASELINK;
11073 default: return TS_CP_GENERIC;
11077 /* Build the void_list_node (void_type_node having been created). */
11078 tree
11079 build_void_list_node (void)
11081 tree t = build_tree_list (NULL_TREE, void_type_node);
11082 return t;
11085 bool
11086 cp_missing_noreturn_ok_p (tree decl)
11088 /* A missing noreturn is ok for the `main' function. */
11089 return DECL_MAIN_P (decl);
11092 /* Return the COMDAT group into which DECL should be placed. */
11094 const char *
11095 cxx_comdat_group (tree decl)
11097 tree name;
11099 /* Virtual tables, construction virtual tables, and virtual table
11100 tables all go in a single COMDAT group, named after the primary
11101 virtual table. */
11102 if (TREE_CODE (decl) == VAR_DECL && DECL_VTABLE_OR_VTT_P (decl))
11103 name = DECL_ASSEMBLER_NAME (CLASSTYPE_VTABLES (DECL_CONTEXT (decl)));
11104 /* For all other DECLs, the COMDAT group is the mangled name of the
11105 declaration itself. */
11106 else
11108 while (DECL_THUNK_P (decl))
11110 /* If TARGET_USE_LOCAL_THUNK_ALIAS_P, use_thunk puts the thunk
11111 into the same section as the target function. In that case
11112 we must return target's name. */
11113 tree target = THUNK_TARGET (decl);
11114 if (TARGET_USE_LOCAL_THUNK_ALIAS_P (target)
11115 && DECL_SECTION_NAME (target) != NULL
11116 && DECL_ONE_ONLY (target))
11117 decl = target;
11118 else
11119 break;
11121 name = DECL_ASSEMBLER_NAME (decl);
11124 return IDENTIFIER_POINTER (name);
11127 #include "gt-cp-decl.h"