Move *-*-gnu* pattern below *-*-linux*.
[official-gcc.git] / gcc / cp / decl.c
blob024bd52212159302f8ccf2dfb03c04d628fb22e9
1 /* Process declarations and variables for C compiler.
2 Copyright (C) 1988, 92-98, 1999 Free Software Foundation, Inc.
3 Contributed by Michael Tiemann (tiemann@cygnus.com)
5 This file is part of GNU CC.
7 GNU CC is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2, or (at your option)
10 any later version.
12 GNU CC is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with GNU CC; see the file COPYING. If not, write to
19 the Free Software Foundation, 59 Temple Place - Suite 330,
20 Boston, MA 02111-1307, USA. */
23 /* Process declarations and symbol lookup for C front end.
24 Also constructs types; the standard scalar types at initialization,
25 and structure, union, array and enum types when they are declared. */
27 /* ??? not all decl nodes are given the most useful possible
28 line numbers. For example, the CONST_DECLs for enum values. */
30 #include "config.h"
31 #include "system.h"
32 #include "tree.h"
33 #include "rtl.h"
34 #include "function.h"
35 #include "flags.h"
36 #include "cp-tree.h"
37 #include "decl.h"
38 #include "lex.h"
39 #include <signal.h>
40 #include "obstack.h"
41 #include "defaults.h"
42 #include "output.h"
43 #include "except.h"
44 #include "toplev.h"
45 #include "../hash.h"
46 #include "defaults.h"
48 #define obstack_chunk_alloc xmalloc
49 #define obstack_chunk_free free
51 extern struct obstack permanent_obstack;
52 extern struct obstack* saveable_obstack;
54 extern int current_class_depth;
56 extern tree static_ctors, static_dtors;
58 extern int static_labelno;
60 extern tree current_namespace;
61 extern tree global_namespace;
63 extern int (*valid_lang_attribute) PROTO ((tree, tree, tree, tree));
65 /* Obstack used for remembering local class declarations (like
66 enums and static (const) members. */
67 #include "stack.h"
68 struct obstack decl_obstack;
69 static struct stack_level *decl_stack;
71 #ifndef CHAR_TYPE_SIZE
72 #define CHAR_TYPE_SIZE BITS_PER_UNIT
73 #endif
75 #ifndef SHORT_TYPE_SIZE
76 #define SHORT_TYPE_SIZE (BITS_PER_UNIT * MIN ((UNITS_PER_WORD + 1) / 2, 2))
77 #endif
79 #ifndef INT_TYPE_SIZE
80 #define INT_TYPE_SIZE BITS_PER_WORD
81 #endif
83 #ifndef LONG_TYPE_SIZE
84 #define LONG_TYPE_SIZE BITS_PER_WORD
85 #endif
87 #ifndef LONG_LONG_TYPE_SIZE
88 #define LONG_LONG_TYPE_SIZE (BITS_PER_WORD * 2)
89 #endif
91 #ifndef WCHAR_UNSIGNED
92 #define WCHAR_UNSIGNED 0
93 #endif
95 #ifndef FLOAT_TYPE_SIZE
96 #define FLOAT_TYPE_SIZE BITS_PER_WORD
97 #endif
99 #ifndef DOUBLE_TYPE_SIZE
100 #define DOUBLE_TYPE_SIZE (BITS_PER_WORD * 2)
101 #endif
103 #ifndef LONG_DOUBLE_TYPE_SIZE
104 #define LONG_DOUBLE_TYPE_SIZE (BITS_PER_WORD * 2)
105 #endif
107 #ifndef BOOL_TYPE_SIZE
108 #ifdef SLOW_BYTE_ACCESS
109 #define BOOL_TYPE_SIZE ((SLOW_BYTE_ACCESS) ? (POINTER_SIZE) : (CHAR_TYPE_SIZE))
110 #else
111 #define BOOL_TYPE_SIZE CHAR_TYPE_SIZE
112 #endif
113 #endif
115 /* We let tm.h override the types used here, to handle trivial differences
116 such as the choice of unsigned int or long unsigned int for size_t.
117 When machines start needing nontrivial differences in the size type,
118 it would be best to do something here to figure out automatically
119 from other information what type to use. */
121 #ifndef SIZE_TYPE
122 #define SIZE_TYPE "long unsigned int"
123 #endif
125 #ifndef PTRDIFF_TYPE
126 #define PTRDIFF_TYPE "long int"
127 #endif
129 #ifndef WCHAR_TYPE
130 #define WCHAR_TYPE "int"
131 #endif
133 static tree grokparms PROTO((tree, int));
134 static const char *redeclaration_error_message PROTO((tree, tree));
136 static struct stack_level *push_decl_level PROTO((struct stack_level *,
137 struct obstack *));
138 static void push_binding_level PROTO((struct binding_level *, int,
139 int));
140 static void pop_binding_level PROTO((void));
141 static void suspend_binding_level PROTO((void));
142 static void resume_binding_level PROTO((struct binding_level *));
143 static struct binding_level *make_binding_level PROTO((void));
144 static void declare_namespace_level PROTO((void));
145 static void signal_catch PROTO((int)) ATTRIBUTE_NORETURN;
146 static void storedecls PROTO((tree));
147 static void require_complete_types_for_parms PROTO((tree));
148 static void push_overloaded_decl_1 PROTO((tree));
149 static int ambi_op_p PROTO((tree));
150 static int unary_op_p PROTO((tree));
151 static tree store_bindings PROTO((tree, tree));
152 static tree lookup_tag_reverse PROTO((tree, tree));
153 static tree obscure_complex_init PROTO((tree, tree));
154 static tree maybe_build_cleanup_1 PROTO((tree, tree));
155 static tree lookup_name_real PROTO((tree, int, int, int));
156 static void warn_extern_redeclared_static PROTO((tree, tree));
157 static void grok_reference_init PROTO((tree, tree, tree));
158 static tree grokfndecl PROTO((tree, tree, tree, tree, int,
159 enum overload_flags, tree,
160 tree, int, int, int, int, int, int, tree));
161 static tree grokvardecl PROTO((tree, tree, RID_BIT_TYPE *, int, int, tree));
162 static tree lookup_tag PROTO((enum tree_code, tree,
163 struct binding_level *, int));
164 static void set_identifier_type_value_with_scope
165 PROTO((tree, tree, struct binding_level *));
166 static void record_builtin_type PROTO((enum rid, const char *, tree));
167 static void record_unknown_type PROTO((tree, const char *));
168 static int member_function_or_else PROTO((tree, tree, const char *));
169 static void bad_specifiers PROTO((tree, const char *, int, int, int, int,
170 int));
171 static void lang_print_error_function PROTO((const char *));
172 static tree maybe_process_template_type_declaration PROTO((tree, int, struct binding_level*));
173 static void check_for_uninitialized_const_var PROTO((tree));
174 static unsigned long typename_hash PROTO((hash_table_key));
175 static boolean typename_compare PROTO((hash_table_key, hash_table_key));
176 static void push_binding PROTO((tree, tree, struct binding_level*));
177 static int add_binding PROTO((tree, tree));
178 static void pop_binding PROTO((tree, tree));
179 static tree local_variable_p PROTO((tree));
180 static tree find_binding PROTO((tree, tree));
181 static tree select_decl PROTO((tree, int));
182 static int lookup_flags PROTO((int, int));
183 static tree qualify_lookup PROTO((tree, int));
184 static tree record_builtin_java_type PROTO((const char *, int));
185 static const char *tag_name PROTO((enum tag_types code));
186 static void find_class_binding_level PROTO((void));
187 static struct binding_level *innermost_nonclass_level PROTO((void));
188 static tree poplevel_class PROTO((void));
189 static void warn_about_implicit_typename_lookup PROTO((tree, tree));
190 static int walk_namespaces_r PROTO((tree, walk_namespaces_fn, void *));
191 static int walk_globals_r PROTO((tree, void *));
192 static void add_decl_to_level PROTO((tree, struct binding_level *));
193 static tree make_label_decl PROTO((tree, int));
194 static void pop_label PROTO((tree));
195 static void pop_labels PROTO((tree));
196 static void maybe_deduce_size_from_array_init PROTO((tree, tree));
197 static void layout_var_decl PROTO((tree, tree *));
198 static void maybe_commonize_var PROTO((tree));
199 static tree build_cleanup_on_safe_obstack PROTO((tree));
200 static void check_initializer PROTO((tree, tree *));
201 static void make_rtl_for_nonlocal_decl PROTO((tree, tree, const char *));
203 #if defined (DEBUG_CP_BINDING_LEVELS)
204 static void indent PROTO((void));
205 #endif
207 /* A node which has tree code ERROR_MARK, and whose type is itself.
208 All erroneous expressions are replaced with this node. All functions
209 that accept nodes as arguments should avoid generating error messages
210 if this node is one of the arguments, since it is undesirable to get
211 multiple error messages from one error in the input. */
213 tree error_mark_node;
215 /* Erroneous argument lists can use this *IFF* they do not modify it. */
216 tree error_mark_list;
218 /* The following symbols are subsumed in the cp_global_trees array, and
219 listed here individually for documentation purposes.
221 C++ extensions
222 tree wchar_decl_node;
223 tree void_zero_node;
225 tree vtable_entry_type;
226 tree delta_type_node;
227 #if 0
228 Old rtti stuff.
229 tree __baselist_desc_type_node;
230 tree __i_desc_type_node, __m_desc_type_node;
231 tree __t_desc_array_type, __i_desc_array_type, __m_desc_array_type;
232 #endif
233 tree __t_desc_type_node;
234 #if 0
235 tree __tp_desc_type_node;
236 #endif
237 tree __access_mode_type_node;
238 tree __bltn_desc_type_node, __user_desc_type_node, __class_desc_type_node;
239 tree __ptr_desc_type_node, __attr_desc_type_node, __func_desc_type_node;
240 tree __ptmf_desc_type_node, __ptmd_desc_type_node;
241 #if 0
242 Not needed yet? May be needed one day?
243 tree __bltn_desc_array_type, __user_desc_array_type, __class_desc_array_type;
244 tree __ptr_desc_array_type, __attr_dec_array_type, __func_desc_array_type;
245 tree __ptmf_desc_array_type, __ptmd_desc_array_type;
246 #endif
248 tree class_star_type_node;
249 tree class_type_node, record_type_node, union_type_node, enum_type_node;
250 tree unknown_type_node;
252 Array type `vtable_entry_type[]'
254 tree vtbl_type_node;
255 tree vtbl_ptr_type_node;
257 Nnamespace std
259 tree std_node;
261 A FUNCTION_DECL which can call `abort'. Not necessarily the
262 one that the user will declare, but sufficient to be called
263 by routines that want to abort the program.
265 tree abort_fndecl;
267 The FUNCTION_DECL for the default `::operator delete'.
269 tree global_delete_fndecl;
271 Used by RTTI
272 tree type_info_type_node, tinfo_fn_id, tinfo_fn_type;
276 tree cp_global_trees[CPTI_MAX];
278 /* These can't be part of the above array, since they are declared
279 individually in tree.h, and used by the debug output routines. */
281 tree void_type_node;
282 tree char_type_node;
283 tree integer_type_node;
284 tree unsigned_type_node;
286 /* These can't be part of the above array, since they are declared
287 individially in tree.h and used by the target routines. */
289 tree ptr_type_node;
290 tree va_list_type_node;
292 /* Indicates that there is a type value in some namespace, although
293 that is not necessarily in scope at the moment. */
295 static tree global_type_node;
297 /* Namespace std. */
298 int in_std;
300 /* Expect only namespace names now. */
301 static int only_namespace_names;
303 /* In a destructor, the point at which all derived class destroying
304 has been done, just before any base class destroying will be done. */
306 tree dtor_label;
308 /* In a destructor, the last insn emitted after the start of the
309 function and the parms. */
311 static rtx last_dtor_insn;
313 /* In a constructor, the last insn emitted after the start of the
314 function and the parms, the exception specification and any
315 function-try-block. The constructor initializers are emitted after
316 this insn. */
318 static rtx last_parm_cleanup_insn;
320 /* In a constructor, the point at which we are ready to return
321 the pointer to the initialized object. */
323 tree ctor_label;
325 /* If original DECL_RESULT of current function was a register,
326 but due to being an addressable named return value, would up
327 on the stack, this variable holds the named return value's
328 original location. */
329 static rtx original_result_rtx;
331 /* Sequence of insns which represents base initialization. */
332 tree base_init_expr;
334 /* C++: Keep these around to reduce calls to `get_identifier'.
335 Identifiers for `this' in member functions and the auto-delete
336 parameter for destructors. */
337 tree this_identifier, in_charge_identifier;
338 tree ctor_identifier, dtor_identifier;
339 /* Used in pointer to member functions, in vtables, and in sigtables. */
340 tree pfn_identifier, index_identifier, delta_identifier, delta2_identifier;
341 tree pfn_or_delta2_identifier, tag_identifier;
342 tree vt_off_identifier;
344 /* Exception specifier used for throw(). */
345 tree empty_except_spec;
347 /* Nonzero if we're in a handler for a function-try-block. */
348 int in_function_try_handler;
350 struct named_label_list
352 struct binding_level *binding_level;
353 tree names_in_scope;
354 tree label_decl;
355 const char *filename_o_goto;
356 int lineno_o_goto;
357 struct named_label_list *next;
360 /* A list (chain of TREE_LIST nodes) of named label uses.
361 The TREE_PURPOSE field is the list of variables defined
362 in the label's scope defined at the point of use.
363 The TREE_VALUE field is the LABEL_DECL used.
364 The TREE_TYPE field holds `current_binding_level' at the
365 point of the label's use.
367 BWAHAHAAHAHahhahahahaah. No, no, no, said the little chicken.
369 Look at the pretty struct named_label_list. See the pretty struct
370 with the pretty named fields that describe what they do. See the
371 pretty lack of gratuitous casts. Notice the code got a lot cleaner.
373 Used only for jumps to as-yet undefined labels, since
374 jumps to defined labels can have their validity checked
375 by stmt.c. */
377 static struct named_label_list *named_label_uses = NULL;
379 /* A list of objects which have constructors or destructors
380 which reside in the global scope. The decl is stored in
381 the TREE_VALUE slot and the initializer is stored
382 in the TREE_PURPOSE slot. */
383 tree static_aggregates;
385 /* -- end of C++ */
387 /* Two expressions that are constants with value zero.
388 The first is of type `int', the second of type `void *'. */
390 tree integer_zero_node;
391 tree null_pointer_node;
393 /* The value for __null (NULL), namely, a zero of an integer type with
394 the same number of bits as a pointer. */
395 tree null_node;
397 /* A node for the integer constants 1, 2, and 3. */
399 tree integer_one_node, integer_two_node, integer_three_node;
401 /* While defining an enum type, this is 1 plus the last enumerator
402 constant value. */
404 static tree enum_next_value;
406 /* Nonzero means that there was overflow computing enum_next_value. */
408 static int enum_overflow;
410 /* Parsing a function declarator leaves a list of parameter names
411 or a chain or parameter decls here. */
413 tree last_function_parms;
415 /* Parsing a function declarator leaves here a chain of structure
416 and enum types declared in the parmlist. */
418 static tree last_function_parm_tags;
420 /* After parsing the declarator that starts a function definition,
421 `start_function' puts here the list of parameter names or chain of decls.
422 `store_parm_decls' finds it here. */
424 static tree current_function_parms;
426 /* Similar, for last_function_parm_tags. */
427 static tree current_function_parm_tags;
429 /* A list (chain of TREE_LIST nodes) of all LABEL_DECLs in the function
430 that have names. Here so we can clear out their names' definitions
431 at the end of the function. The TREE_VALUE is a LABEL_DECL; the
432 TREE_PURPOSE is the previous binding of the label. */
434 static tree named_labels;
436 /* The FUNCTION_DECL for the function currently being compiled,
437 or 0 if between functions. */
438 tree current_function_decl;
440 /* Set to 0 at beginning of a function definition, set to 1 if
441 a return statement that specifies a return value is seen. */
443 int current_function_returns_value;
445 /* Set to 0 at beginning of a function definition, set to 1 if
446 a return statement with no argument is seen. */
448 int current_function_returns_null;
450 /* Set to 0 at beginning of a function definition, and whenever
451 a label (case or named) is defined. Set to value of expression
452 returned from function when that value can be transformed into
453 a named return value. */
455 tree current_function_return_value;
457 /* Nonzero means give `double' the same size as `float'. */
459 extern int flag_short_double;
461 /* Nonzero means don't recognize any builtin functions. */
463 extern int flag_no_builtin;
465 /* Nonzero means don't recognize the non-ANSI builtin functions.
466 -ansi sets this. */
468 extern int flag_no_nonansi_builtin;
470 /* Nonzero means enable obscure ANSI features and disable GNU extensions
471 that might cause ANSI-compliant code to be miscompiled. */
473 extern int flag_ansi;
475 /* Nonzero if we want to support huge (> 2^(sizeof(short)*8-1) bytes)
476 objects. */
477 extern int flag_huge_objects;
479 /* Nonzero if we want to conserve space in the .o files. We do this
480 by putting uninitialized data and runtime initialized data into
481 .common instead of .data at the expense of not flagging multiple
482 definitions. */
483 extern int flag_conserve_space;
485 /* Pointers to the base and current top of the language name stack. */
487 extern tree *current_lang_base, *current_lang_stack;
489 /* C and C++ flags are in decl2.c. */
491 /* Set to 0 at beginning of a constructor, set to 1
492 if that function does an allocation before referencing its
493 instance variable. */
494 static int current_function_assigns_this;
495 int current_function_just_assigned_this;
497 /* Set to 0 at beginning of a function. Set non-zero when
498 store_parm_decls is called. Don't call store_parm_decls
499 if this flag is non-zero! */
500 int current_function_parms_stored;
502 /* Flag used when debugging spew.c */
504 extern int spew_debug;
506 /* This is a copy of the class_shadowed list of the previous class binding
507 contour when at global scope. It's used to reset IDENTIFIER_CLASS_VALUEs
508 when entering another class scope (i.e. a cache miss). */
509 extern tree previous_class_values;
511 /* A expression of value 0 with the same precision as a sizetype
512 node, but signed. */
513 tree signed_size_zero_node;
515 /* The name of the anonymous namespace, throughout this translation
516 unit. */
517 tree anonymous_namespace_name;
520 /* Allocate a level of searching. */
522 static
523 struct stack_level *
524 push_decl_level (stack, obstack)
525 struct stack_level *stack;
526 struct obstack *obstack;
528 struct stack_level tem;
529 tem.prev = stack;
531 return push_stack_level (obstack, (char *)&tem, sizeof (tem));
534 /* For each binding contour we allocate a binding_level structure
535 which records the names defined in that contour.
536 Contours include:
537 0) the global one
538 1) one for each function definition,
539 where internal declarations of the parameters appear.
540 2) one for each compound statement,
541 to record its declarations.
543 The current meaning of a name can be found by searching the levels
544 from the current one out to the global one.
546 Off to the side, may be the class_binding_level. This exists only
547 to catch class-local declarations. It is otherwise nonexistent.
549 Also there may be binding levels that catch cleanups that must be
550 run when exceptions occur. Thus, to see whether a name is bound in
551 the current scope, it is not enough to look in the
552 CURRENT_BINDING_LEVEL. You should use lookup_name_current_level
553 instead. */
555 /* Note that the information in the `names' component of the global contour
556 is duplicated in the IDENTIFIER_GLOBAL_VALUEs of all identifiers. */
558 struct binding_level
560 /* A chain of _DECL nodes for all variables, constants, functions,
561 and typedef types. These are in the reverse of the order
562 supplied. There may be OVERLOADs on this list, too, but they
563 are wrapped in TREE_LISTs; the TREE_VALUE is the OVERLOAD. */
564 tree names;
566 /* A list of structure, union and enum definitions, for looking up
567 tag names.
568 It is a chain of TREE_LIST nodes, each of whose TREE_PURPOSE is a name,
569 or NULL_TREE; and whose TREE_VALUE is a RECORD_TYPE, UNION_TYPE,
570 or ENUMERAL_TYPE node.
572 C++: the TREE_VALUE nodes can be simple types for
573 component_bindings. */
574 tree tags;
576 /* A list of USING_DECL nodes. */
577 tree usings;
579 /* A list of used namespaces. PURPOSE is the namespace,
580 VALUE the common ancestor with this binding_level's namespace. */
581 tree using_directives;
583 /* If this binding level is the binding level for a class, then
584 class_shadowed is a TREE_LIST. The TREE_PURPOSE of each node
585 is the name of an entity bound in the class; the TREE_VALUE is
586 the IDENTIFIER_CLASS_VALUE before we entered the class. Thus,
587 when leaving class scope, we can restore the
588 IDENTIFIER_CLASS_VALUE by walking this list. The TREE_TYPE is
589 the DECL bound by this name in the class. */
590 tree class_shadowed;
592 /* Similar to class_shadowed, but for IDENTIFIER_TYPE_VALUE, and
593 is used for all binding levels. */
594 tree type_shadowed;
596 /* A TREE_LIST. Each TREE_VALUE is the LABEL_DECL for a local
597 label in this scope. The TREE_PURPOSE is the previous value of
598 the IDENTIFIER_LABEL VALUE. */
599 tree shadowed_labels;
601 /* For each level (except not the global one),
602 a chain of BLOCK nodes for all the levels
603 that were entered and exited one level down. */
604 tree blocks;
606 /* The BLOCK node for this level, if one has been preallocated.
607 If 0, the BLOCK is allocated (if needed) when the level is popped. */
608 tree this_block;
610 /* The binding level which this one is contained in (inherits from). */
611 struct binding_level *level_chain;
613 /* List of decls in `names' that have incomplete
614 structure or union types. */
615 tree incomplete;
617 /* List of VAR_DECLS saved from a previous for statement.
618 These would be dead in ANSI-conforming code, but might
619 be referenced in ARM-era code. These are stored in a
620 TREE_LIST; the TREE_VALUE is the actual declaration. */
621 tree dead_vars_from_for;
623 /* 1 for the level that holds the parameters of a function.
624 2 for the level that holds a class declaration.
625 3 for levels that hold parameter declarations. */
626 unsigned parm_flag : 4;
628 /* 1 means make a BLOCK for this level regardless of all else.
629 2 for temporary binding contours created by the compiler. */
630 unsigned keep : 3;
632 /* Nonzero if this level "doesn't exist" for tags. */
633 unsigned tag_transparent : 1;
635 /* Nonzero if this level can safely have additional
636 cleanup-needing variables added to it. */
637 unsigned more_cleanups_ok : 1;
638 unsigned have_cleanups : 1;
640 /* Nonzero if this level is for storing the decls for template
641 parameters and generic decls; these decls will be discarded and
642 replaced with a TEMPLATE_DECL. */
643 unsigned pseudo_global : 1;
645 /* This is set for a namespace binding level. */
646 unsigned namespace_p : 1;
648 /* True if this level is that of a for-statement where we need to
649 worry about ambiguous (ARM or ANSI) scope rules. */
650 unsigned is_for_scope : 1;
652 /* True if this level corresponds to an EH region, as for a try block. */
653 unsigned eh_region : 1;
655 /* One bit left for this word. */
657 #if defined(DEBUG_CP_BINDING_LEVELS)
658 /* Binding depth at which this level began. */
659 unsigned binding_depth;
660 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
663 #define NULL_BINDING_LEVEL ((struct binding_level *) NULL)
665 /* The binding level currently in effect. */
667 static struct binding_level *current_binding_level;
669 /* The binding level of the current class, if any. */
671 static struct binding_level *class_binding_level;
673 /* A chain of binding_level structures awaiting reuse. */
675 static struct binding_level *free_binding_level;
677 /* The outermost binding level, for names of file scope.
678 This is created when the compiler is started and exists
679 through the entire run. */
681 static struct binding_level *global_binding_level;
683 /* Nonzero means unconditionally make a BLOCK for the next level pushed. */
685 static int keep_next_level_flag;
687 #if defined(DEBUG_CP_BINDING_LEVELS)
688 static int binding_depth = 0;
689 static int is_class_level = 0;
691 static void
692 indent ()
694 register unsigned i;
696 for (i = 0; i < binding_depth*2; i++)
697 putc (' ', stderr);
699 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
701 static tree pushdecl_with_scope PROTO((tree, struct binding_level *));
703 static void
704 push_binding_level (newlevel, tag_transparent, keep)
705 struct binding_level *newlevel;
706 int tag_transparent, keep;
708 /* Add this level to the front of the chain (stack) of levels that
709 are active. */
710 bzero ((char*) newlevel, sizeof (struct binding_level));
711 newlevel->level_chain = current_binding_level;
712 current_binding_level = newlevel;
713 newlevel->tag_transparent = tag_transparent;
714 newlevel->more_cleanups_ok = 1;
716 /* We are called before expand_start_bindings, but after
717 expand_eh_region_start for a try block; so we check this now,
718 before the EH block is covered up. */
719 newlevel->eh_region = is_eh_region ();
721 newlevel->keep = keep;
722 #if defined(DEBUG_CP_BINDING_LEVELS)
723 newlevel->binding_depth = binding_depth;
724 indent ();
725 fprintf (stderr, "push %s level 0x%08x line %d\n",
726 (is_class_level) ? "class" : "block", newlevel, lineno);
727 is_class_level = 0;
728 binding_depth++;
729 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
732 /* Find the innermost enclosing class scope, and reset
733 CLASS_BINDING_LEVEL appropriately. */
735 static void
736 find_class_binding_level ()
738 struct binding_level *level = current_binding_level;
740 while (level && level->parm_flag != 2)
741 level = level->level_chain;
742 if (level && level->parm_flag == 2)
743 class_binding_level = level;
744 else
745 class_binding_level = 0;
748 static void
749 pop_binding_level ()
751 if (global_binding_level)
753 /* Cannot pop a level, if there are none left to pop. */
754 if (current_binding_level == global_binding_level)
755 my_friendly_abort (123);
757 /* Pop the current level, and free the structure for reuse. */
758 #if defined(DEBUG_CP_BINDING_LEVELS)
759 binding_depth--;
760 indent ();
761 fprintf (stderr, "pop %s level 0x%08x line %d\n",
762 (is_class_level) ? "class" : "block",
763 current_binding_level, lineno);
764 if (is_class_level != (current_binding_level == class_binding_level))
766 indent ();
767 fprintf (stderr, "XXX is_class_level != (current_binding_level == class_binding_level)\n");
769 is_class_level = 0;
770 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
772 register struct binding_level *level = current_binding_level;
773 current_binding_level = current_binding_level->level_chain;
774 level->level_chain = free_binding_level;
775 #if 0 /* defined(DEBUG_CP_BINDING_LEVELS) */
776 if (level->binding_depth != binding_depth)
777 abort ();
778 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
779 free_binding_level = level;
780 find_class_binding_level ();
784 static void
785 suspend_binding_level ()
787 if (class_binding_level)
788 current_binding_level = class_binding_level;
790 if (global_binding_level)
792 /* Cannot suspend a level, if there are none left to suspend. */
793 if (current_binding_level == global_binding_level)
794 my_friendly_abort (123);
796 /* Suspend the current level. */
797 #if defined(DEBUG_CP_BINDING_LEVELS)
798 binding_depth--;
799 indent ();
800 fprintf (stderr, "suspend %s level 0x%08x line %d\n",
801 (is_class_level) ? "class" : "block",
802 current_binding_level, lineno);
803 if (is_class_level != (current_binding_level == class_binding_level))
805 indent ();
806 fprintf (stderr, "XXX is_class_level != (current_binding_level == class_binding_level)\n");
808 is_class_level = 0;
809 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
810 current_binding_level = current_binding_level->level_chain;
811 find_class_binding_level ();
814 static void
815 resume_binding_level (b)
816 struct binding_level *b;
818 /* Resuming binding levels is meant only for namespaces,
819 and those cannot nest into classes. */
820 my_friendly_assert(!class_binding_level, 386);
821 /* Also, resuming a non-directly nested namespace is a no-no. */
822 my_friendly_assert(b->level_chain == current_binding_level, 386);
823 current_binding_level = b;
824 #if defined(DEBUG_CP_BINDING_LEVELS)
825 b->binding_depth = binding_depth;
826 indent ();
827 fprintf (stderr, "resume %s level 0x%08x line %d\n",
828 (is_class_level) ? "class" : "block", b, lineno);
829 is_class_level = 0;
830 binding_depth++;
831 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
834 /* Create a new `struct binding_level'. */
836 static
837 struct binding_level *
838 make_binding_level ()
840 /* NOSTRICT */
841 return (struct binding_level *) xmalloc (sizeof (struct binding_level));
844 /* Nonzero if we are currently in the global binding level. */
847 global_bindings_p ()
849 return current_binding_level == global_binding_level;
852 /* Return the innermost binding level that is not for a class scope. */
854 static struct binding_level *
855 innermost_nonclass_level ()
857 struct binding_level *b;
859 b = current_binding_level;
860 while (b->parm_flag == 2)
861 b = b->level_chain;
863 return b;
866 /* Nonzero if we are currently in a toplevel binding level. This
867 means either the global binding level or a namespace in a toplevel
868 binding level. Since there are no non-toplevel namespace levels,
869 this really means any namespace or pseudo-global level. We also
870 include a class whose context is toplevel. */
873 toplevel_bindings_p ()
875 struct binding_level *b = innermost_nonclass_level ();
877 return b->namespace_p || b->pseudo_global;
880 /* Nonzero if this is a namespace scope, or if we are defining a class
881 which is itself at namespace scope, or whose enclosing class is
882 such a class, etc. */
885 namespace_bindings_p ()
887 struct binding_level *b = innermost_nonclass_level ();
889 return b->namespace_p;
892 /* If KEEP is non-zero, make a BLOCK node for the next binding level,
893 unconditionally. Otherwise, use the normal logic to decide whether
894 or not to create a BLOCK. */
896 void
897 keep_next_level (keep)
898 int keep;
900 keep_next_level_flag = keep;
903 /* Nonzero if the current level needs to have a BLOCK made. */
906 kept_level_p ()
908 return (current_binding_level->blocks != NULL_TREE
909 || current_binding_level->keep
910 || current_binding_level->names != NULL_TREE
911 || (current_binding_level->tags != NULL_TREE
912 && !current_binding_level->tag_transparent));
915 /* Identify this binding level as a level of parameters. */
917 void
918 declare_parm_level ()
920 current_binding_level->parm_flag = 1;
923 void
924 declare_pseudo_global_level ()
926 current_binding_level->pseudo_global = 1;
929 static void
930 declare_namespace_level ()
932 current_binding_level->namespace_p = 1;
936 pseudo_global_level_p ()
938 return current_binding_level->pseudo_global;
941 void
942 set_class_shadows (shadows)
943 tree shadows;
945 class_binding_level->class_shadowed = shadows;
948 /* Enter a new binding level.
949 If TAG_TRANSPARENT is nonzero, do so only for the name space of variables,
950 not for that of tags. */
952 void
953 pushlevel (tag_transparent)
954 int tag_transparent;
956 register struct binding_level *newlevel = NULL_BINDING_LEVEL;
958 /* If this is the top level of a function,
959 just make sure that NAMED_LABELS is 0.
960 They should have been set to 0 at the end of the previous function. */
962 if (current_binding_level == global_binding_level)
963 my_friendly_assert (named_labels == NULL_TREE, 134);
965 /* Reuse or create a struct for this binding level. */
967 #if defined(DEBUG_CP_BINDING_LEVELS)
968 if (0)
969 #else /* !defined(DEBUG_CP_BINDING_LEVELS) */
970 if (free_binding_level)
971 #endif /* !defined(DEBUG_CP_BINDING_LEVELS) */
973 newlevel = free_binding_level;
974 free_binding_level = free_binding_level->level_chain;
976 else
977 newlevel = make_binding_level ();
979 push_binding_level (newlevel, tag_transparent, keep_next_level_flag);
980 GNU_xref_start_scope ((HOST_WIDE_INT) newlevel);
981 keep_next_level_flag = 0;
984 void
985 note_level_for_for ()
987 current_binding_level->is_for_scope = 1;
990 void
991 pushlevel_temporary (tag_transparent)
992 int tag_transparent;
994 pushlevel (tag_transparent);
995 current_binding_level->keep = 2;
996 clear_last_expr ();
998 /* Note we don't call push_momentary() here. Otherwise, it would cause
999 cleanups to be allocated on the momentary obstack, and they will be
1000 overwritten by the next statement. */
1002 expand_start_bindings (0);
1005 /* For a binding between a name and an entity at a block scope,
1006 this is the `struct binding_level' for the block. */
1007 #define BINDING_LEVEL(NODE) \
1008 (((struct tree_binding*)NODE)->scope.level)
1010 /* These are currently unused, but permanent, CPLUS_BINDING nodes.
1011 They are kept here because they are allocated from the permanent
1012 obstack and cannot be easily freed. */
1013 static tree free_binding_nodes;
1015 /* Make DECL the innermost binding for ID. The LEVEL is the binding
1016 level at which this declaration is being bound. */
1018 static void
1019 push_binding (id, decl, level)
1020 tree id;
1021 tree decl;
1022 struct binding_level* level;
1024 tree binding;
1026 if (!free_binding_nodes)
1028 /* There are no free nodes, so we must build one here. */
1029 push_permanent_obstack ();
1030 binding = make_node (CPLUS_BINDING);
1031 pop_obstacks ();
1033 else
1035 /* There are nodes on the free list. Grab the first one. */
1036 binding = free_binding_nodes;
1038 /* And update the free list. */
1039 free_binding_nodes = TREE_CHAIN (free_binding_nodes);
1042 /* Now, fill in the binding information. */
1043 BINDING_VALUE (binding) = decl;
1044 BINDING_TYPE (binding) = NULL_TREE;
1045 BINDING_LEVEL (binding) = level;
1046 INHERITED_VALUE_BINDING_P (binding) = 0;
1047 LOCAL_BINDING_P (binding) = (level != class_binding_level);
1049 /* And put it on the front of the list of bindings for ID. */
1050 TREE_CHAIN (binding) = IDENTIFIER_BINDING (id);
1051 IDENTIFIER_BINDING (id) = binding;
1054 /* ID is already bound in the current scope. But, DECL is an
1055 additional binding for ID in the same scope. This is the `struct
1056 stat' hack whereby a non-typedef class-name or enum-name can be
1057 bound at the same level as some other kind of entity. It's the
1058 responsibility of the caller to check that inserting this name is
1059 legal here. Returns nonzero if the new binding was successful. */
1060 static int
1061 add_binding (id, decl)
1062 tree id;
1063 tree decl;
1065 tree binding = IDENTIFIER_BINDING (id);
1066 int ok = 1;
1068 if (TREE_CODE (decl) == TYPE_DECL && DECL_ARTIFICIAL (decl))
1069 /* The new name is the type name. */
1070 BINDING_TYPE (binding) = decl;
1071 else if (!BINDING_VALUE (binding))
1072 /* This situation arises when push_class_level_binding moves an
1073 inherited type-binding out of the way to make room for a new
1074 value binding. */
1075 BINDING_VALUE (binding) = decl;
1076 else if (TREE_CODE (BINDING_VALUE (binding)) == TYPE_DECL
1077 && DECL_ARTIFICIAL (BINDING_VALUE (binding)))
1079 /* The old binding was a type name. It was placed in
1080 BINDING_VALUE because it was thought, at the point it was
1081 declared, to be the only entity with such a name. Move the
1082 type name into the type slot; it is now hidden by the new
1083 binding. */
1084 BINDING_TYPE (binding) = BINDING_VALUE (binding);
1085 BINDING_VALUE (binding) = decl;
1086 INHERITED_VALUE_BINDING_P (binding) = 0;
1088 else if (TREE_CODE (BINDING_VALUE (binding)) == TYPE_DECL
1089 && TREE_CODE (decl) == TYPE_DECL
1090 && DECL_NAME (decl) == DECL_NAME (BINDING_VALUE (binding))
1091 && same_type_p (TREE_TYPE (decl),
1092 TREE_TYPE (BINDING_VALUE (binding))))
1093 /* We have two typedef-names, both naming the same type to have
1094 the same name. This is OK because of:
1096 [dcl.typedef]
1098 In a given scope, a typedef specifier can be used to redefine
1099 the name of any type declared in that scope to refer to the
1100 type to which it already refers. */
1101 ok = 0;
1102 else
1104 cp_error ("declaration of `%#D'", decl);
1105 cp_error_at ("conflicts with previous declaration `%#D'",
1106 BINDING_VALUE (binding));
1107 ok = 0;
1110 return ok;
1113 /* Add DECL to the list of things declared in B. */
1115 static void
1116 add_decl_to_level (decl, b)
1117 tree decl;
1118 struct binding_level *b;
1120 /* Only things that will live forever should go in the global
1121 binding level. */
1122 my_friendly_assert (!(b == global_binding_level
1123 && !TREE_PERMANENT (decl)),
1124 19990817);
1126 /* We build up the list in reverse order, and reverse it later if
1127 necessary. */
1128 TREE_CHAIN (decl) = b->names;
1129 b->names = decl;
1132 /* Bind DECL to ID in the current_binding_level, assumed to be a local
1133 binding level. If PUSH_USING is set in FLAGS, we know that DECL
1134 doesn't really belong to this binding level, that it got here
1135 through a using-declaration. */
1137 void
1138 push_local_binding (id, decl, flags)
1139 tree id;
1140 tree decl;
1141 int flags;
1143 struct binding_level *b;
1145 /* Skip over any local classes. This makes sense if we call
1146 push_local_binding with a friend decl of a local class. */
1147 b = current_binding_level;
1148 while (b->parm_flag == 2)
1149 b = b->level_chain;
1151 if (lookup_name_current_level (id))
1153 /* Supplement the existing binding. */
1154 if (!add_binding (id, decl))
1155 /* It didn't work. Something else must be bound at this
1156 level. Do not add DECL to the list of things to pop
1157 later. */
1158 return;
1160 else
1161 /* Create a new binding. */
1162 push_binding (id, decl, b);
1164 if (TREE_CODE (decl) == OVERLOAD || (flags & PUSH_USING))
1165 /* We must put the OVERLOAD into a TREE_LIST since the
1166 TREE_CHAIN of an OVERLOAD is already used. Similarly for
1167 decls that got here through a using-declaration. */
1168 decl = build_tree_list (NULL_TREE, decl);
1170 /* And put DECL on the list of things declared by the current
1171 binding level. */
1172 add_decl_to_level (decl, b);
1175 /* Bind DECL to ID in the class_binding_level. Returns nonzero if the
1176 binding was successful. */
1179 push_class_binding (id, decl)
1180 tree id;
1181 tree decl;
1183 int result = 1;
1184 tree binding = IDENTIFIER_BINDING (id);
1185 tree context;
1187 /* Note that we declared this value so that we can issue an error if
1188 this an illegal redeclaration of a name already used for some
1189 other purpose. */
1190 note_name_declared_in_class (id, decl);
1192 if (binding && BINDING_LEVEL (binding) == class_binding_level)
1193 /* Supplement the existing binding. */
1194 result = add_binding (id, decl);
1195 else
1196 /* Create a new binding. */
1197 push_binding (id, decl, class_binding_level);
1199 /* Update the IDENTIFIER_CLASS_VALUE for this ID to be the
1200 class-level declaration. Note that we do not use DECL here
1201 because of the possibility of the `struct stat' hack; if DECL is
1202 a class-name or enum-name we might prefer a field-name, or some
1203 such. */
1204 IDENTIFIER_CLASS_VALUE (id) = BINDING_VALUE (IDENTIFIER_BINDING (id));
1206 /* If this is a binding from a base class, mark it as such. */
1207 binding = IDENTIFIER_BINDING (id);
1208 if (BINDING_VALUE (binding) == decl && TREE_CODE (decl) != TREE_LIST)
1210 /* Any implicit typename must be from a base-class. The
1211 context for an implicit typename declaration is always
1212 the derived class in which the lookup was done, so the checks
1213 based on the context of DECL below will not trigger. */
1214 if (IMPLICIT_TYPENAME_TYPE_DECL_P (decl))
1215 INHERITED_VALUE_BINDING_P (binding) = 1;
1216 else
1218 if (TREE_CODE (decl) == OVERLOAD)
1219 context = DECL_REAL_CONTEXT (OVL_CURRENT (decl));
1220 else
1222 my_friendly_assert (TREE_CODE_CLASS (TREE_CODE (decl)) == 'd',
1224 context = DECL_REAL_CONTEXT (decl);
1227 if (is_properly_derived_from (current_class_type, context))
1228 INHERITED_VALUE_BINDING_P (binding) = 1;
1229 else
1230 INHERITED_VALUE_BINDING_P (binding) = 0;
1233 else if (BINDING_VALUE (binding) == decl)
1234 /* We only encounter a TREE_LIST when push_class_decls detects an
1235 ambiguity. Such an ambiguity can be overridden by a definition
1236 in this class. */
1237 INHERITED_VALUE_BINDING_P (binding) = 1;
1239 return result;
1242 /* Remove the binding for DECL which should be the innermost binding
1243 for ID. */
1245 static void
1246 pop_binding (id, decl)
1247 tree id;
1248 tree decl;
1250 tree binding;
1252 if (id == NULL_TREE)
1253 /* It's easiest to write the loops that call this function without
1254 checking whether or not the entities involved have names. We
1255 get here for such an entity. */
1256 return;
1258 /* Get the innermost binding for ID. */
1259 binding = IDENTIFIER_BINDING (id);
1261 /* The name should be bound. */
1262 my_friendly_assert (binding != NULL_TREE, 0);
1264 /* The DECL will be either the ordinary binding or the type
1265 binding for this identifier. Remove that binding. */
1266 if (BINDING_VALUE (binding) == decl)
1267 BINDING_VALUE (binding) = NULL_TREE;
1268 else if (BINDING_TYPE (binding) == decl)
1269 BINDING_TYPE (binding) = NULL_TREE;
1270 else
1271 my_friendly_abort (0);
1273 if (!BINDING_VALUE (binding) && !BINDING_TYPE (binding))
1275 /* We're completely done with the innermost binding for this
1276 identifier. Unhook it from the list of bindings. */
1277 IDENTIFIER_BINDING (id) = TREE_CHAIN (binding);
1279 /* And place it on the free list. */
1280 TREE_CHAIN (binding) = free_binding_nodes;
1281 free_binding_nodes = binding;
1285 /* When a label goes out of scope, check to see if that label was used
1286 in a valid manner, and issue any appropriate warnings or errors. */
1288 static void
1289 pop_label (link)
1290 tree link;
1292 tree label = TREE_VALUE (link);
1294 if (DECL_INITIAL (label) == NULL_TREE)
1296 cp_error_at ("label `%D' used but not defined", label);
1297 /* Avoid crashing later. */
1298 define_label (input_filename, 1, DECL_NAME (label));
1300 else if (warn_unused && !TREE_USED (label))
1301 cp_warning_at ("label `%D' defined but not used", label);
1303 SET_IDENTIFIER_LABEL_VALUE (DECL_NAME (label), TREE_PURPOSE (link));
1306 /* At the end of a function, all labels declared within the fucntion
1307 go out of scope. BLOCK is the top-level block for the
1308 function. */
1310 static void
1311 pop_labels (block)
1312 tree block;
1314 tree link;
1316 /* Clear out the definitions of all label names, since their scopes
1317 end here. */
1318 for (link = named_labels; link; link = TREE_CHAIN (link))
1320 pop_label (link);
1321 /* Put the labels into the "variables" of the top-level block,
1322 so debugger can see them. */
1323 TREE_CHAIN (TREE_VALUE (link)) = BLOCK_VARS (block);
1324 BLOCK_VARS (block) = TREE_VALUE (link);
1327 named_labels = NULL_TREE;
1330 /* Exit a binding level.
1331 Pop the level off, and restore the state of the identifier-decl mappings
1332 that were in effect when this level was entered.
1334 If KEEP == 1, this level had explicit declarations, so
1335 and create a "block" (a BLOCK node) for the level
1336 to record its declarations and subblocks for symbol table output.
1338 If FUNCTIONBODY is nonzero, this level is the body of a function,
1339 so create a block as if KEEP were set and also clear out all
1340 label names.
1342 If REVERSE is nonzero, reverse the order of decls before putting
1343 them into the BLOCK. */
1345 tree
1346 poplevel (keep, reverse, functionbody)
1347 int keep;
1348 int reverse;
1349 int functionbody;
1351 register tree link;
1352 /* The chain of decls was accumulated in reverse order.
1353 Put it into forward order, just for cleanliness. */
1354 tree decls;
1355 int tmp = functionbody;
1356 int real_functionbody = current_binding_level->keep == 2
1357 ? ((functionbody = 0), tmp) : functionbody;
1358 tree tags = functionbody >= 0 ? current_binding_level->tags : 0;
1359 tree subblocks = functionbody >= 0 ? current_binding_level->blocks : 0;
1360 tree block = NULL_TREE;
1361 tree decl;
1362 int block_previously_created;
1363 int leaving_for_scope;
1365 if (current_binding_level->parm_flag == 2)
1366 return poplevel_class ();
1368 my_friendly_assert (!current_binding_level->class_shadowed,
1369 19990414);
1371 /* We used to use KEEP == 2 to indicate that the new block should go
1372 at the beginning of the list of blocks at this binding level,
1373 rather than the end. This hack is no longer used. */
1374 my_friendly_assert (keep == 0 || keep == 1, 0);
1376 GNU_xref_end_scope ((HOST_WIDE_INT) current_binding_level,
1377 (HOST_WIDE_INT) current_binding_level->level_chain,
1378 current_binding_level->parm_flag,
1379 current_binding_level->keep);
1381 if (current_binding_level->keep == 1)
1382 keep = 1;
1384 /* Get the decls in the order they were written.
1385 Usually current_binding_level->names is in reverse order.
1386 But parameter decls were previously put in forward order. */
1388 if (reverse)
1389 current_binding_level->names
1390 = decls = nreverse (current_binding_level->names);
1391 else
1392 decls = current_binding_level->names;
1394 /* Output any nested inline functions within this block
1395 if they weren't already output. */
1397 for (decl = decls; decl; decl = TREE_CHAIN (decl))
1398 if (TREE_CODE (decl) == FUNCTION_DECL
1399 && ! TREE_ASM_WRITTEN (decl)
1400 && DECL_INITIAL (decl) != NULL_TREE
1401 && TREE_ADDRESSABLE (decl)
1402 && decl_function_context (decl) == current_function_decl)
1404 /* If this decl was copied from a file-scope decl
1405 on account of a block-scope extern decl,
1406 propagate TREE_ADDRESSABLE to the file-scope decl. */
1407 if (DECL_ABSTRACT_ORIGIN (decl) != NULL_TREE)
1408 TREE_ADDRESSABLE (DECL_ABSTRACT_ORIGIN (decl)) = 1;
1409 else
1411 push_function_context ();
1412 output_inline_function (decl);
1413 pop_function_context ();
1417 /* If there were any declarations or structure tags in that level,
1418 or if this level is a function body,
1419 create a BLOCK to record them for the life of this function. */
1421 block = NULL_TREE;
1422 block_previously_created = (current_binding_level->this_block != NULL_TREE);
1423 if (block_previously_created)
1424 block = current_binding_level->this_block;
1425 else if (keep == 1 || functionbody)
1426 block = make_node (BLOCK);
1427 if (block != NULL_TREE)
1429 if (block_previously_created)
1431 if (decls || tags || subblocks)
1433 if (BLOCK_VARS (block) || BLOCK_TYPE_TAGS (block))
1434 warning ("internal compiler error: debugging info corrupted");
1436 BLOCK_VARS (block) = decls;
1437 BLOCK_TYPE_TAGS (block) = tags;
1439 /* We can have previous subblocks and new subblocks when
1440 doing fixup_gotos with complex cleanups. We chain the new
1441 subblocks onto the end of any pre-existing subblocks. */
1442 BLOCK_SUBBLOCKS (block) = chainon (BLOCK_SUBBLOCKS (block),
1443 subblocks);
1445 /* If we created the block earlier on, and we are just
1446 diddling it now, then it already should have a proper
1447 BLOCK_END_NOTE value associated with it. */
1449 else
1451 BLOCK_VARS (block) = decls;
1452 BLOCK_TYPE_TAGS (block) = tags;
1453 BLOCK_SUBBLOCKS (block) = subblocks;
1454 /* Otherwise, for a new block, install a new BLOCK_END_NOTE
1455 value. */
1456 remember_end_note (block);
1460 /* In each subblock, record that this is its superior. */
1462 if (keep >= 0)
1463 for (link = subblocks; link; link = TREE_CHAIN (link))
1464 BLOCK_SUPERCONTEXT (link) = block;
1466 /* We still support the old for-scope rules, whereby the variables
1467 in a for-init statement were in scope after the for-statement
1468 ended. We only use the new rules in flag_new_for_scope is
1469 nonzero. */
1470 leaving_for_scope
1471 = current_binding_level->is_for_scope && flag_new_for_scope == 1;
1473 /* Remove declarations for all the DECLs in this level. */
1474 for (link = decls; link; link = TREE_CHAIN (link))
1476 if (leaving_for_scope && TREE_CODE (link) == VAR_DECL)
1478 tree outer_binding
1479 = TREE_CHAIN (IDENTIFIER_BINDING (DECL_NAME (link)));
1480 tree ns_binding;
1482 if (!outer_binding)
1483 ns_binding = IDENTIFIER_NAMESPACE_VALUE (DECL_NAME (link));
1484 else
1485 ns_binding = NULL_TREE;
1487 if (outer_binding
1488 && (BINDING_LEVEL (outer_binding)
1489 == current_binding_level->level_chain))
1490 /* We have something like:
1492 int i;
1493 for (int i; ;);
1495 and we are leaving the `for' scope. There's no reason to
1496 keep the binding of the inner `i' in this case. */
1497 pop_binding (DECL_NAME (link), link);
1498 else if ((outer_binding
1499 && (TREE_CODE (BINDING_VALUE (outer_binding))
1500 == TYPE_DECL))
1501 || (ns_binding
1502 && TREE_CODE (ns_binding) == TYPE_DECL))
1503 /* Here, we have something like:
1505 typedef int I;
1507 void f () {
1508 for (int I; ;);
1511 We must pop the for-scope binding so we know what's a
1512 type and what isn't. */
1513 pop_binding (DECL_NAME (link), link);
1514 else
1516 /* Mark this VAR_DECL as dead so that we can tell we left it
1517 there only for backward compatibility. */
1518 DECL_DEAD_FOR_LOCAL (link) = 1;
1520 /* Keep track of what should of have happenned when we
1521 popped the binding. */
1522 if (outer_binding && BINDING_VALUE (outer_binding))
1523 DECL_SHADOWED_FOR_VAR (link)
1524 = BINDING_VALUE (outer_binding);
1526 /* Add it to the list of dead variables in the next
1527 outermost binding to that we can remove these when we
1528 leave that binding. */
1529 current_binding_level->level_chain->dead_vars_from_for
1530 = tree_cons (NULL_TREE, link,
1531 current_binding_level->level_chain->
1532 dead_vars_from_for);
1534 /* Although we don't pop the CPLUS_BINDING, we do clear
1535 its BINDING_LEVEL since the level is going away now. */
1536 BINDING_LEVEL (IDENTIFIER_BINDING (DECL_NAME (link)))
1537 = 0;
1540 else
1542 /* Remove the binding. */
1543 decl = link;
1544 if (TREE_CODE (decl) == TREE_LIST)
1545 decl = TREE_VALUE (decl);
1546 if (TREE_CODE_CLASS (TREE_CODE (decl)) == 'd')
1547 pop_binding (DECL_NAME (decl), decl);
1548 else if (TREE_CODE (decl) == OVERLOAD)
1549 pop_binding (DECL_NAME (OVL_FUNCTION (decl)), decl);
1550 else
1551 my_friendly_abort (0);
1555 /* Remove declarations for any `for' variables from inner scopes
1556 that we kept around. */
1557 for (link = current_binding_level->dead_vars_from_for;
1558 link; link = TREE_CHAIN (link))
1559 pop_binding (DECL_NAME (TREE_VALUE (link)), TREE_VALUE (link));
1561 /* Restore the IDENTIFIER_TYPE_VALUEs. */
1562 for (link = current_binding_level->type_shadowed;
1563 link; link = TREE_CHAIN (link))
1564 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (link), TREE_VALUE (link));
1566 /* Restore the IDENTIFIER_LABEL_VALUEs for local labels. */
1567 for (link = current_binding_level->shadowed_labels;
1568 link;
1569 link = TREE_CHAIN (link))
1570 pop_label (link);
1572 /* There may be OVERLOADs (wrapped in TREE_LISTs) on the BLOCK_VARs
1573 list if a `using' declaration put them there. The debugging
1574 back-ends won't understand OVERLOAD, so we remove them here.
1575 Because the BLOCK_VARS are (temporarily) shared with
1576 CURRENT_BINDING_LEVEL->NAMES we must do this fixup after we have
1577 popped all the bindings. */
1578 if (block)
1580 tree* d;
1582 for (d = &BLOCK_VARS (block); *d; )
1584 if (TREE_CODE (*d) == TREE_LIST)
1585 *d = TREE_CHAIN (*d);
1586 else
1587 d = &TREE_CHAIN (*d);
1591 /* If the level being exited is the top level of a function,
1592 check over all the labels. */
1593 if (functionbody)
1595 /* Since this is the top level block of a function, the vars are
1596 the function's parameters. Don't leave them in the BLOCK
1597 because they are found in the FUNCTION_DECL instead. */
1598 BLOCK_VARS (block) = 0;
1599 pop_labels (block);
1602 /* Any uses of undefined labels now operate under constraints
1603 of next binding contour. */
1605 struct binding_level *level_chain;
1606 level_chain = current_binding_level->level_chain;
1607 if (level_chain)
1609 struct named_label_list *labels;
1610 for (labels = named_label_uses; labels; labels = labels->next)
1611 if (labels->binding_level == current_binding_level)
1613 labels->binding_level = level_chain;
1614 labels->names_in_scope = level_chain->names;
1619 tmp = current_binding_level->keep;
1621 pop_binding_level ();
1622 if (functionbody)
1623 DECL_INITIAL (current_function_decl) = block;
1624 else if (block)
1626 if (!block_previously_created)
1627 current_binding_level->blocks
1628 = chainon (current_binding_level->blocks, block);
1630 /* If we did not make a block for the level just exited,
1631 any blocks made for inner levels
1632 (since they cannot be recorded as subblocks in that level)
1633 must be carried forward so they will later become subblocks
1634 of something else. */
1635 else if (subblocks)
1636 current_binding_level->blocks
1637 = chainon (current_binding_level->blocks, subblocks);
1639 /* Take care of compiler's internal binding structures. */
1640 if (tmp == 2)
1642 expand_end_bindings (getdecls (), keep, 1);
1643 /* Each and every BLOCK node created here in `poplevel' is important
1644 (e.g. for proper debugging information) so if we created one
1645 earlier, mark it as "used". */
1646 if (block)
1647 TREE_USED (block) = 1;
1648 block = poplevel (keep, reverse, real_functionbody);
1651 /* Each and every BLOCK node created here in `poplevel' is important
1652 (e.g. for proper debugging information) so if we created one
1653 earlier, mark it as "used". */
1654 if (block)
1655 TREE_USED (block) = 1;
1656 return block;
1659 /* Delete the node BLOCK from the current binding level.
1660 This is used for the block inside a stmt expr ({...})
1661 so that the block can be reinserted where appropriate. */
1663 void
1664 delete_block (block)
1665 tree block;
1667 tree t;
1668 if (current_binding_level->blocks == block)
1669 current_binding_level->blocks = TREE_CHAIN (block);
1670 for (t = current_binding_level->blocks; t;)
1672 if (TREE_CHAIN (t) == block)
1673 TREE_CHAIN (t) = TREE_CHAIN (block);
1674 else
1675 t = TREE_CHAIN (t);
1677 TREE_CHAIN (block) = NULL_TREE;
1678 /* Clear TREE_USED which is always set by poplevel.
1679 The flag is set again if insert_block is called. */
1680 TREE_USED (block) = 0;
1683 /* Insert BLOCK at the end of the list of subblocks of the
1684 current binding level. This is used when a BIND_EXPR is expanded,
1685 to handle the BLOCK node inside the BIND_EXPR. */
1687 void
1688 insert_block (block)
1689 tree block;
1691 TREE_USED (block) = 1;
1692 current_binding_level->blocks
1693 = chainon (current_binding_level->blocks, block);
1696 /* Set the BLOCK node for the innermost scope
1697 (the one we are currently in). */
1699 void
1700 set_block (block)
1701 register tree block;
1703 current_binding_level->this_block = block;
1706 /* Do a pushlevel for class declarations. */
1708 void
1709 pushlevel_class ()
1711 register struct binding_level *newlevel;
1713 /* Reuse or create a struct for this binding level. */
1714 #if defined(DEBUG_CP_BINDING_LEVELS)
1715 if (0)
1716 #else /* !defined(DEBUG_CP_BINDING_LEVELS) */
1717 if (free_binding_level)
1718 #endif /* !defined(DEBUG_CP_BINDING_LEVELS) */
1720 newlevel = free_binding_level;
1721 free_binding_level = free_binding_level->level_chain;
1723 else
1724 newlevel = make_binding_level ();
1726 #if defined(DEBUG_CP_BINDING_LEVELS)
1727 is_class_level = 1;
1728 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
1730 push_binding_level (newlevel, 0, 0);
1732 decl_stack = push_decl_level (decl_stack, &decl_obstack);
1733 class_binding_level = current_binding_level;
1734 class_binding_level->parm_flag = 2;
1737 /* ...and a poplevel for class declarations. */
1739 static tree
1740 poplevel_class ()
1742 register struct binding_level *level = class_binding_level;
1743 tree shadowed;
1745 my_friendly_assert (level != 0, 354);
1747 decl_stack = pop_stack_level (decl_stack);
1748 /* If we're leaving a toplevel class, don't bother to do the setting
1749 of IDENTIFIER_CLASS_VALUE to NULL_TREE, since first of all this slot
1750 shouldn't even be used when current_class_type isn't set, and second,
1751 if we don't touch it here, we're able to use the cache effect if the
1752 next time we're entering a class scope, it is the same class. */
1753 if (current_class_depth != 1)
1755 struct binding_level* b;
1757 /* Clear out our IDENTIFIER_CLASS_VALUEs. */
1758 for (shadowed = level->class_shadowed;
1759 shadowed;
1760 shadowed = TREE_CHAIN (shadowed))
1761 IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (shadowed)) = NULL_TREE;
1763 /* Find the next enclosing class, and recreate
1764 IDENTIFIER_CLASS_VALUEs appropriate for that class. */
1765 b = level->level_chain;
1766 while (b && b->parm_flag != 2)
1767 b = b->level_chain;
1769 if (b)
1770 for (shadowed = b->class_shadowed;
1771 shadowed;
1772 shadowed = TREE_CHAIN (shadowed))
1774 tree t;
1776 t = IDENTIFIER_BINDING (TREE_PURPOSE (shadowed));
1777 while (t && BINDING_LEVEL (t) != b)
1778 t = TREE_CHAIN (t);
1780 if (t)
1781 IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (shadowed))
1782 = BINDING_VALUE (t);
1785 else
1786 /* Remember to save what IDENTIFIER's were bound in this scope so we
1787 can recover from cache misses. */
1789 previous_class_type = current_class_type;
1790 previous_class_values = class_binding_level->class_shadowed;
1792 for (shadowed = level->type_shadowed;
1793 shadowed;
1794 shadowed = TREE_CHAIN (shadowed))
1795 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (shadowed), TREE_VALUE (shadowed));
1797 /* Remove the bindings for all of the class-level declarations. */
1798 for (shadowed = level->class_shadowed;
1799 shadowed;
1800 shadowed = TREE_CHAIN (shadowed))
1801 pop_binding (TREE_PURPOSE (shadowed), TREE_TYPE (shadowed));
1803 GNU_xref_end_scope ((HOST_WIDE_INT) class_binding_level,
1804 (HOST_WIDE_INT) class_binding_level->level_chain,
1805 class_binding_level->parm_flag,
1806 class_binding_level->keep);
1808 /* Now, pop out of the binding level which we created up in the
1809 `pushlevel_class' routine. */
1810 #if defined(DEBUG_CP_BINDING_LEVELS)
1811 is_class_level = 1;
1812 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
1814 pop_binding_level ();
1816 return NULL_TREE;
1819 /* We are entering the scope of a class. Clear IDENTIFIER_CLASS_VALUE
1820 for any names in enclosing classes. */
1822 void
1823 clear_identifier_class_values ()
1825 tree t;
1827 if (!class_binding_level)
1828 return;
1830 for (t = class_binding_level->class_shadowed;
1832 t = TREE_CHAIN (t))
1833 IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (t)) = NULL_TREE;
1836 /* Returns non-zero if T is a virtual function table. */
1839 vtable_decl_p (t, data)
1840 tree t;
1841 void *data ATTRIBUTE_UNUSED;
1843 return (TREE_CODE (t) == VAR_DECL && DECL_VIRTUAL_P (t));
1846 /* Returns non-zero if T is a TYPE_DECL for a type with virtual
1847 functions. */
1850 vtype_decl_p (t, data)
1851 tree t;
1852 void *data ATTRIBUTE_UNUSED;
1854 return (TREE_CODE (t) == TYPE_DECL
1855 && TREE_TYPE (t) != error_mark_node
1856 && TYPE_LANG_SPECIFIC (TREE_TYPE (t))
1857 && CLASSTYPE_VSIZE (TREE_TYPE (t)));
1860 /* Return the declarations that are members of the namespace NS. */
1862 tree
1863 cp_namespace_decls (ns)
1864 tree ns;
1866 return NAMESPACE_LEVEL (ns)->names;
1869 /* Walk all the namespaces contained NAMESPACE, including NAMESPACE
1870 itself, calling F for each. The DATA is passed to F as well. */
1872 static int
1873 walk_namespaces_r (namespace, f, data)
1874 tree namespace;
1875 walk_namespaces_fn f;
1876 void *data;
1878 tree current;
1879 int result = 0;
1881 result |= (*f) (namespace, data);
1883 for (current = cp_namespace_decls (namespace);
1884 current;
1885 current = TREE_CHAIN (current))
1887 if (TREE_CODE (current) != NAMESPACE_DECL
1888 || DECL_NAMESPACE_ALIAS (current))
1889 continue;
1890 if (!DECL_LANG_SPECIFIC (current))
1892 /* Hmm. std. */
1893 my_friendly_assert (current == std_node, 393);
1894 continue;
1897 /* We found a namespace. */
1898 result |= walk_namespaces_r (current, f, data);
1901 return result;
1904 /* Walk all the namespaces, calling F for each. The DATA is passed to
1905 F as well. */
1908 walk_namespaces (f, data)
1909 walk_namespaces_fn f;
1910 void *data;
1912 return walk_namespaces_r (global_namespace, f, data);
1915 struct walk_globals_data {
1916 walk_globals_pred p;
1917 walk_globals_fn f;
1918 void *data;
1921 /* Walk the global declarations in NAMESPACE. Whenever one is found
1922 for which P returns non-zero, call F with its address. If any call
1923 to F returns a non-zero value, return a non-zero value. */
1925 static int
1926 walk_globals_r (namespace, data)
1927 tree namespace;
1928 void *data;
1930 struct walk_globals_data* wgd = (struct walk_globals_data *) data;
1931 walk_globals_pred p = wgd->p;
1932 walk_globals_fn f = wgd->f;
1933 void *d = wgd->data;
1934 tree *t;
1935 int result = 0;
1937 t = &NAMESPACE_LEVEL (namespace)->names;
1939 while (*t)
1941 tree glbl = *t;
1943 if ((*p) (glbl, d))
1944 result |= (*f) (t, d);
1946 /* If F changed *T, then *T still points at the next item to
1947 examine. */
1948 if (*t == glbl)
1949 t = &TREE_CHAIN (*t);
1952 return result;
1955 /* Walk the global declarations. Whenever one is found for which P
1956 returns non-zero, call F with its address. If any call to F
1957 returns a non-zero value, return a non-zero value. */
1960 walk_globals (p, f, data)
1961 walk_globals_pred p;
1962 walk_globals_fn f;
1963 void *data;
1965 struct walk_globals_data wgd;
1966 wgd.p = p;
1967 wgd.f = f;
1968 wgd.data = data;
1970 return walk_namespaces (walk_globals_r, &wgd);
1973 /* Call wrapup_globals_declarations for the globals in NAMESPACE. If
1974 DATA is non-NULL, this is the last time we will call
1975 wrapup_global_declarations for this NAMESPACE. */
1978 wrapup_globals_for_namespace (namespace, data)
1979 tree namespace;
1980 void *data;
1982 tree globals = cp_namespace_decls (namespace);
1983 int len = list_length (globals);
1984 tree *vec = (tree *) alloca (sizeof (tree) * len);
1985 int i;
1986 int result;
1987 tree decl;
1988 int last_time = (data != 0);
1990 if (last_time && namespace == global_namespace)
1991 /* Let compile_file handle the global namespace. */
1992 return 0;
1994 /* Process the decls in reverse order--earliest first.
1995 Put them into VEC from back to front, then take out from front. */
1997 for (i = 0, decl = globals; i < len; i++, decl = TREE_CHAIN (decl))
1998 vec[len - i - 1] = decl;
2000 if (last_time)
2002 check_global_declarations (vec, len);
2003 return 0;
2006 /* Temporarily mark vtables as external. That prevents
2007 wrapup_global_declarations from writing them out; we must process
2008 them ourselves in finish_vtable_vardecl. */
2009 for (i = 0; i < len; ++i)
2010 if (vtable_decl_p (vec[i], /*data=*/0) && !DECL_EXTERNAL (vec[i]))
2012 DECL_NOT_REALLY_EXTERN (vec[i]) = 1;
2013 DECL_EXTERNAL (vec[i]) = 1;
2016 /* Write out any globals that need to be output. */
2017 result = wrapup_global_declarations (vec, len);
2019 /* Undo the hack to DECL_EXTERNAL above. */
2020 for (i = 0; i < len; ++i)
2021 if (vtable_decl_p (vec[i], /*data=*/0)
2022 && DECL_NOT_REALLY_EXTERN (vec[i]))
2024 DECL_NOT_REALLY_EXTERN (vec[i]) = 0;
2025 DECL_EXTERNAL (vec[i]) = 0;
2028 return result;
2032 /* For debugging. */
2033 static int no_print_functions = 0;
2034 static int no_print_builtins = 0;
2036 void
2037 print_binding_level (lvl)
2038 struct binding_level *lvl;
2040 tree t;
2041 int i = 0, len;
2042 fprintf (stderr, " blocks=");
2043 fprintf (stderr, HOST_PTR_PRINTF, lvl->blocks);
2044 fprintf (stderr, " n_incomplete=%d parm_flag=%d keep=%d",
2045 list_length (lvl->incomplete), lvl->parm_flag, lvl->keep);
2046 if (lvl->tag_transparent)
2047 fprintf (stderr, " tag-transparent");
2048 if (lvl->more_cleanups_ok)
2049 fprintf (stderr, " more-cleanups-ok");
2050 if (lvl->have_cleanups)
2051 fprintf (stderr, " have-cleanups");
2052 fprintf (stderr, "\n");
2053 if (lvl->names)
2055 fprintf (stderr, " names:\t");
2056 /* We can probably fit 3 names to a line? */
2057 for (t = lvl->names; t; t = TREE_CHAIN (t))
2059 if (no_print_functions && (TREE_CODE (t) == FUNCTION_DECL))
2060 continue;
2061 if (no_print_builtins
2062 && (TREE_CODE (t) == TYPE_DECL)
2063 && (!strcmp (DECL_SOURCE_FILE (t),"<built-in>")))
2064 continue;
2066 /* Function decls tend to have longer names. */
2067 if (TREE_CODE (t) == FUNCTION_DECL)
2068 len = 3;
2069 else
2070 len = 2;
2071 i += len;
2072 if (i > 6)
2074 fprintf (stderr, "\n\t");
2075 i = len;
2077 print_node_brief (stderr, "", t, 0);
2078 if (t == error_mark_node)
2079 break;
2081 if (i)
2082 fprintf (stderr, "\n");
2084 if (lvl->tags)
2086 fprintf (stderr, " tags:\t");
2087 i = 0;
2088 for (t = lvl->tags; t; t = TREE_CHAIN (t))
2090 if (TREE_PURPOSE (t) == NULL_TREE)
2091 len = 3;
2092 else if (TREE_PURPOSE (t) == TYPE_IDENTIFIER (TREE_VALUE (t)))
2093 len = 2;
2094 else
2095 len = 4;
2096 i += len;
2097 if (i > 5)
2099 fprintf (stderr, "\n\t");
2100 i = len;
2102 if (TREE_PURPOSE (t) == NULL_TREE)
2104 print_node_brief (stderr, "<unnamed-typedef", TREE_VALUE (t), 0);
2105 fprintf (stderr, ">");
2107 else if (TREE_PURPOSE (t) == TYPE_IDENTIFIER (TREE_VALUE (t)))
2108 print_node_brief (stderr, "", TREE_VALUE (t), 0);
2109 else
2111 print_node_brief (stderr, "<typedef", TREE_PURPOSE (t), 0);
2112 print_node_brief (stderr, "", TREE_VALUE (t), 0);
2113 fprintf (stderr, ">");
2116 if (i)
2117 fprintf (stderr, "\n");
2119 if (lvl->class_shadowed)
2121 fprintf (stderr, " class-shadowed:");
2122 for (t = lvl->class_shadowed; t; t = TREE_CHAIN (t))
2124 fprintf (stderr, " %s ", IDENTIFIER_POINTER (TREE_PURPOSE (t)));
2126 fprintf (stderr, "\n");
2128 if (lvl->type_shadowed)
2130 fprintf (stderr, " type-shadowed:");
2131 for (t = lvl->type_shadowed; t; t = TREE_CHAIN (t))
2133 fprintf (stderr, " %s ", IDENTIFIER_POINTER (TREE_PURPOSE (t)));
2135 fprintf (stderr, "\n");
2139 void
2140 print_other_binding_stack (stack)
2141 struct binding_level *stack;
2143 struct binding_level *level;
2144 for (level = stack; level != global_binding_level; level = level->level_chain)
2146 fprintf (stderr, "binding level ");
2147 fprintf (stderr, HOST_PTR_PRINTF, level);
2148 fprintf (stderr, "\n");
2149 print_binding_level (level);
2153 void
2154 print_binding_stack ()
2156 struct binding_level *b;
2157 fprintf (stderr, "current_binding_level=");
2158 fprintf (stderr, HOST_PTR_PRINTF, current_binding_level);
2159 fprintf (stderr, "\nclass_binding_level=");
2160 fprintf (stderr, HOST_PTR_PRINTF, class_binding_level);
2161 fprintf (stderr, "\nglobal_binding_level=");
2162 fprintf (stderr, HOST_PTR_PRINTF, global_binding_level);
2163 fprintf (stderr, "\n");
2164 if (class_binding_level)
2166 for (b = class_binding_level; b; b = b->level_chain)
2167 if (b == current_binding_level)
2168 break;
2169 if (b)
2170 b = class_binding_level;
2171 else
2172 b = current_binding_level;
2174 else
2175 b = current_binding_level;
2176 print_other_binding_stack (b);
2177 fprintf (stderr, "global:\n");
2178 print_binding_level (global_binding_level);
2181 /* Namespace binding access routines: The namespace_bindings field of
2182 the identifier is polymorphic, with three possible values:
2183 NULL_TREE, a list of CPLUS_BINDINGS, or any other tree_node
2184 indicating the BINDING_VALUE of global_namespace. */
2186 /* Check whether the a binding for the name to scope is known.
2187 Assumes that the bindings of the name are already a list
2188 of bindings. Returns the binding found, or NULL_TREE. */
2190 static tree
2191 find_binding (name, scope)
2192 tree name;
2193 tree scope;
2195 tree iter, prev = NULL_TREE;
2197 scope = ORIGINAL_NAMESPACE (scope);
2199 for (iter = IDENTIFIER_NAMESPACE_BINDINGS (name); iter;
2200 iter = TREE_CHAIN (iter))
2202 my_friendly_assert (TREE_CODE (iter) == CPLUS_BINDING, 374);
2203 if (BINDING_SCOPE (iter) == scope)
2205 /* Move binding found to the front of the list, so
2206 subsequent lookups will find it faster. */
2207 if (prev)
2209 TREE_CHAIN (prev) = TREE_CHAIN (iter);
2210 TREE_CHAIN (iter) = IDENTIFIER_NAMESPACE_BINDINGS (name);
2211 IDENTIFIER_NAMESPACE_BINDINGS (name) = iter;
2213 return iter;
2215 prev = iter;
2217 return NULL_TREE;
2220 /* Always returns a binding for name in scope. If the
2221 namespace_bindings is not a list, convert it to one first.
2222 If no binding is found, make a new one. */
2224 tree
2225 binding_for_name (name, scope)
2226 tree name;
2227 tree scope;
2229 tree b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2230 tree result;
2232 scope = ORIGINAL_NAMESPACE (scope);
2234 if (b && TREE_CODE (b) != CPLUS_BINDING)
2236 /* Get rid of optimization for global scope. */
2237 IDENTIFIER_NAMESPACE_BINDINGS (name) = NULL_TREE;
2238 BINDING_VALUE (binding_for_name (name, global_namespace)) = b;
2239 b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2241 if (b && (result = find_binding (name, scope)))
2242 return result;
2243 /* Not found, make a new permanent one. */
2244 push_obstacks (&permanent_obstack, &permanent_obstack);
2245 result = make_node (CPLUS_BINDING);
2246 TREE_CHAIN (result) = b;
2247 IDENTIFIER_NAMESPACE_BINDINGS (name) = result;
2248 BINDING_SCOPE (result) = scope;
2249 BINDING_TYPE (result) = NULL_TREE;
2250 BINDING_VALUE (result) = NULL_TREE;
2251 pop_obstacks ();
2252 return result;
2255 /* Return the binding value for name in scope, considering that
2256 namespace_binding may or may not be a list of CPLUS_BINDINGS. */
2258 tree
2259 namespace_binding (name, scope)
2260 tree name;
2261 tree scope;
2263 tree b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2264 if (b == NULL_TREE)
2265 return NULL_TREE;
2266 if (scope == NULL_TREE)
2267 scope = global_namespace;
2268 if (TREE_CODE (b) != CPLUS_BINDING)
2269 return (scope == global_namespace) ? b : NULL_TREE;
2270 name = find_binding (name,scope);
2271 if (name == NULL_TREE)
2272 return name;
2273 return BINDING_VALUE (name);
2276 /* Set the binding value for name in scope. If modifying the binding
2277 of global_namespace is attempted, try to optimize it. */
2279 void
2280 set_namespace_binding (name, scope, val)
2281 tree name;
2282 tree scope;
2283 tree val;
2285 tree b;
2287 if (scope == NULL_TREE)
2288 scope = global_namespace;
2290 if (scope == global_namespace)
2292 b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2293 if (b == NULL_TREE || TREE_CODE (b) != CPLUS_BINDING)
2295 IDENTIFIER_NAMESPACE_BINDINGS (name) = val;
2296 return;
2299 b = binding_for_name (name, scope);
2300 BINDING_VALUE (b) = val;
2303 /* Push into the scope of the NAME namespace. If NAME is NULL_TREE, then we
2304 select a name that is unique to this compilation unit. */
2306 void
2307 push_namespace (name)
2308 tree name;
2310 tree d = NULL_TREE;
2311 int need_new = 1;
2312 int implicit_use = 0;
2313 int global = 0;
2314 if (!global_namespace)
2316 /* This must be ::. */
2317 my_friendly_assert (name == get_identifier ("::"), 377);
2318 global = 1;
2320 else if (!name)
2322 /* The name of anonymous namespace is unique for the translation
2323 unit. */
2324 if (!anonymous_namespace_name)
2325 anonymous_namespace_name = get_file_function_name ('N');
2326 name = anonymous_namespace_name;
2327 d = IDENTIFIER_NAMESPACE_VALUE (name);
2328 if (d)
2329 /* Reopening anonymous namespace. */
2330 need_new = 0;
2331 implicit_use = 1;
2333 else if (current_namespace == global_namespace
2334 && name == DECL_NAME (std_node))
2336 in_std++;
2337 return;
2339 else
2341 /* Check whether this is an extended namespace definition. */
2342 d = IDENTIFIER_NAMESPACE_VALUE (name);
2343 if (d != NULL_TREE && TREE_CODE (d) == NAMESPACE_DECL)
2345 need_new = 0;
2346 if (DECL_NAMESPACE_ALIAS (d))
2348 cp_error ("namespace alias `%D' not allowed here, assuming `%D'",
2349 d, DECL_NAMESPACE_ALIAS (d));
2350 d = DECL_NAMESPACE_ALIAS (d);
2355 if (need_new)
2357 /* Make a new namespace, binding the name to it. */
2358 d = build_lang_decl (NAMESPACE_DECL, name, void_type_node);
2359 /* The global namespace is not pushed, and the global binding
2360 level is set elsewhere. */
2361 if (!global)
2363 d = pushdecl (d);
2364 pushlevel (0);
2365 declare_namespace_level ();
2366 NAMESPACE_LEVEL (d) = current_binding_level;
2369 else
2370 resume_binding_level (NAMESPACE_LEVEL (d));
2372 if (implicit_use)
2373 do_using_directive (d);
2374 /* Enter the name space. */
2375 current_namespace = d;
2378 /* Pop from the scope of the current namespace. */
2380 void
2381 pop_namespace ()
2383 if (current_namespace == global_namespace)
2385 my_friendly_assert (in_std>0, 980421);
2386 in_std--;
2387 return;
2389 current_namespace = CP_DECL_CONTEXT (current_namespace);
2390 /* The binding level is not popped, as it might be re-opened later. */
2391 suspend_binding_level ();
2394 /* Push into the scope of the namespace NS, even if it is deeply
2395 nested within another namespace. */
2397 void
2398 push_nested_namespace (ns)
2399 tree ns;
2401 if (ns == global_namespace)
2402 push_to_top_level ();
2403 else
2405 push_nested_namespace (CP_DECL_CONTEXT (ns));
2406 push_namespace (DECL_NAME (ns));
2410 /* Pop back from the scope of the namespace NS, which was previously
2411 entered with push_nested_namespace. */
2413 void
2414 pop_nested_namespace (ns)
2415 tree ns;
2417 while (ns != global_namespace)
2419 pop_namespace ();
2420 ns = CP_DECL_CONTEXT (ns);
2423 pop_from_top_level ();
2427 /* Subroutines for reverting temporarily to top-level for instantiation
2428 of templates and such. We actually need to clear out the class- and
2429 local-value slots of all identifiers, so that only the global values
2430 are at all visible. Simply setting current_binding_level to the global
2431 scope isn't enough, because more binding levels may be pushed. */
2432 struct saved_scope {
2433 struct binding_level *old_binding_level;
2434 tree old_bindings;
2435 tree old_namespace;
2436 struct saved_scope *prev;
2437 tree class_name, class_type;
2438 tree access_specifier;
2439 tree function_decl;
2440 struct binding_level *class_bindings;
2441 tree *lang_base, *lang_stack, lang_name;
2442 int lang_stacksize;
2443 tree last_function_parms;
2444 tree template_parms;
2445 HOST_WIDE_INT processing_template_decl;
2446 tree previous_class_type, previous_class_values;
2447 int processing_specialization;
2448 int processing_explicit_instantiation;
2449 char *class_cache_firstobj;
2451 static struct saved_scope *current_saved_scope;
2453 /* A chain of the binding vecs created by store_bindings. We create a
2454 whole bunch of these during compilation, on permanent_obstack, so we
2455 can't just throw them away. */
2456 static tree free_binding_vecs;
2458 static tree
2459 store_bindings (names, old_bindings)
2460 tree names, old_bindings;
2462 tree t;
2463 for (t = names; t; t = TREE_CHAIN (t))
2465 tree binding, t1, id;
2467 if (TREE_CODE (t) == TREE_LIST)
2468 id = TREE_PURPOSE (t);
2469 else
2470 id = DECL_NAME (t);
2472 if (!id
2473 /* Note that we may have an IDENTIFIER_CLASS_VALUE even when
2474 we have no IDENTIFIER_BINDING if we have left the class
2475 scope, but cached the class-level declarations. */
2476 || !(IDENTIFIER_BINDING (id) || IDENTIFIER_CLASS_VALUE (id)))
2477 continue;
2479 for (t1 = old_bindings; t1; t1 = TREE_CHAIN (t1))
2480 if (TREE_VEC_ELT (t1, 0) == id)
2481 goto skip_it;
2483 if (free_binding_vecs)
2485 binding = free_binding_vecs;
2486 free_binding_vecs = TREE_CHAIN (free_binding_vecs);
2488 else
2489 binding = make_tree_vec (4);
2491 if (id)
2493 my_friendly_assert (TREE_CODE (id) == IDENTIFIER_NODE, 135);
2494 TREE_VEC_ELT (binding, 0) = id;
2495 TREE_VEC_ELT (binding, 1) = REAL_IDENTIFIER_TYPE_VALUE (id);
2496 TREE_VEC_ELT (binding, 2) = IDENTIFIER_BINDING (id);
2497 TREE_VEC_ELT (binding, 3) = IDENTIFIER_CLASS_VALUE (id);
2498 IDENTIFIER_BINDING (id) = NULL_TREE;
2499 IDENTIFIER_CLASS_VALUE (id) = NULL_TREE;
2501 TREE_CHAIN (binding) = old_bindings;
2502 old_bindings = binding;
2503 skip_it:
2506 return old_bindings;
2509 void
2510 maybe_push_to_top_level (pseudo)
2511 int pseudo;
2513 extern int current_lang_stacksize;
2514 struct saved_scope *s
2515 = (struct saved_scope *) xmalloc (sizeof (struct saved_scope));
2516 struct binding_level *b = current_binding_level;
2517 tree old_bindings = NULL_TREE;
2519 push_cp_function_context (NULL_TREE);
2521 if (previous_class_type)
2522 old_bindings = store_bindings (previous_class_values, old_bindings);
2524 /* Have to include global_binding_level, because class-level decls
2525 aren't listed anywhere useful. */
2526 for (; b; b = b->level_chain)
2528 tree t;
2530 /* Template IDs are inserted into the global level. If they were
2531 inserted into namespace level, finish_file wouldn't find them
2532 when doing pending instantiations. Therefore, don't stop at
2533 namespace level, but continue until :: . */
2534 if (b == global_binding_level || (pseudo && b->pseudo_global))
2535 break;
2537 old_bindings = store_bindings (b->names, old_bindings);
2538 /* We also need to check class_shadowed to save class-level type
2539 bindings, since pushclass doesn't fill in b->names. */
2540 if (b->parm_flag == 2)
2541 old_bindings = store_bindings (b->class_shadowed, old_bindings);
2543 /* Unwind type-value slots back to top level. */
2544 for (t = b->type_shadowed; t; t = TREE_CHAIN (t))
2545 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (t), TREE_VALUE (t));
2548 s->old_binding_level = current_binding_level;
2549 current_binding_level = b;
2551 s->old_namespace = current_namespace;
2552 s->class_name = current_class_name;
2553 s->class_type = current_class_type;
2554 s->access_specifier = current_access_specifier;
2555 s->function_decl = current_function_decl;
2556 s->class_bindings = class_binding_level;
2557 s->lang_stack = current_lang_stack;
2558 s->lang_base = current_lang_base;
2559 s->lang_stacksize = current_lang_stacksize;
2560 s->lang_name = current_lang_name;
2561 s->last_function_parms = last_function_parms;
2562 s->template_parms = current_template_parms;
2563 s->processing_template_decl = processing_template_decl;
2564 s->previous_class_type = previous_class_type;
2565 s->previous_class_values = previous_class_values;
2566 s->class_cache_firstobj = class_cache_firstobj;
2567 s->processing_specialization = processing_specialization;
2568 s->processing_explicit_instantiation = processing_explicit_instantiation;
2570 current_class_name = current_class_type = NULL_TREE;
2571 current_function_decl = NULL_TREE;
2572 class_binding_level = (struct binding_level *)0;
2573 current_lang_stacksize = 10;
2574 current_lang_stack = current_lang_base
2575 = (tree *) xmalloc (current_lang_stacksize * sizeof (tree));
2576 current_lang_name = lang_name_cplusplus;
2577 strict_prototype = strict_prototypes_lang_cplusplus;
2578 named_labels = NULL_TREE;
2579 previous_class_type = previous_class_values = NULL_TREE;
2580 class_cache_firstobj = 0;
2581 processing_specialization = 0;
2582 processing_explicit_instantiation = 0;
2583 current_template_parms = NULL_TREE;
2584 processing_template_decl = 0;
2585 current_namespace = global_namespace;
2587 s->prev = current_saved_scope;
2588 s->old_bindings = old_bindings;
2589 current_saved_scope = s;
2591 push_obstacks (&permanent_obstack, &permanent_obstack);
2594 void
2595 push_to_top_level ()
2597 maybe_push_to_top_level (0);
2600 void
2601 pop_from_top_level ()
2603 extern int current_lang_stacksize;
2604 struct saved_scope *s = current_saved_scope;
2605 tree t;
2607 /* Clear out class-level bindings cache. */
2608 if (previous_class_type)
2609 invalidate_class_lookup_cache ();
2611 pop_obstacks ();
2613 current_binding_level = s->old_binding_level;
2614 current_saved_scope = s->prev;
2615 for (t = s->old_bindings; t; )
2617 tree save = t;
2618 tree id = TREE_VEC_ELT (t, 0);
2619 if (id)
2621 SET_IDENTIFIER_TYPE_VALUE (id, TREE_VEC_ELT (t, 1));
2622 IDENTIFIER_BINDING (id) = TREE_VEC_ELT (t, 2);
2623 IDENTIFIER_CLASS_VALUE (id) = TREE_VEC_ELT (t, 3);
2625 t = TREE_CHAIN (t);
2626 TREE_CHAIN (save) = free_binding_vecs;
2627 free_binding_vecs = save;
2629 current_namespace = s->old_namespace;
2630 current_class_name = s->class_name;
2631 current_class_type = s->class_type;
2632 current_access_specifier = s->access_specifier;
2633 current_function_decl = s->function_decl;
2634 class_binding_level = s->class_bindings;
2635 free (current_lang_base);
2636 current_lang_base = s->lang_base;
2637 current_lang_stack = s->lang_stack;
2638 current_lang_name = s->lang_name;
2639 current_lang_stacksize = s->lang_stacksize;
2640 if (current_lang_name == lang_name_cplusplus)
2641 strict_prototype = strict_prototypes_lang_cplusplus;
2642 else if (current_lang_name == lang_name_c)
2643 strict_prototype = strict_prototypes_lang_c;
2644 last_function_parms = s->last_function_parms;
2645 current_template_parms = s->template_parms;
2646 processing_template_decl = s->processing_template_decl;
2647 previous_class_type = s->previous_class_type;
2648 previous_class_values = s->previous_class_values;
2649 processing_specialization = s->processing_specialization;
2650 processing_explicit_instantiation = s->processing_explicit_instantiation;
2651 class_cache_firstobj = s->class_cache_firstobj;
2653 free (s);
2655 pop_cp_function_context (NULL_TREE);
2658 /* Push a definition of struct, union or enum tag "name".
2659 into binding_level "b". "type" should be the type node,
2660 We assume that the tag "name" is not already defined.
2662 Note that the definition may really be just a forward reference.
2663 In that case, the TYPE_SIZE will be a NULL_TREE.
2665 C++ gratuitously puts all these tags in the name space. */
2667 /* When setting the IDENTIFIER_TYPE_VALUE field of an identifier ID,
2668 record the shadowed value for this binding contour. TYPE is
2669 the type that ID maps to. */
2671 static void
2672 set_identifier_type_value_with_scope (id, type, b)
2673 tree id;
2674 tree type;
2675 struct binding_level *b;
2677 if (!b->namespace_p)
2679 /* Shadow the marker, not the real thing, so that the marker
2680 gets restored later. */
2681 tree old_type_value = REAL_IDENTIFIER_TYPE_VALUE (id);
2682 b->type_shadowed
2683 = tree_cons (id, old_type_value, b->type_shadowed);
2685 else
2687 tree binding = binding_for_name (id, current_namespace);
2688 BINDING_TYPE (binding) = type;
2689 /* Store marker instead of real type. */
2690 type = global_type_node;
2692 SET_IDENTIFIER_TYPE_VALUE (id, type);
2695 /* As set_identifier_type_value_with_scope, but using current_binding_level. */
2697 void
2698 set_identifier_type_value (id, type)
2699 tree id;
2700 tree type;
2702 set_identifier_type_value_with_scope (id, type, current_binding_level);
2705 /* Return the type associated with id. */
2707 tree
2708 identifier_type_value (id)
2709 tree id;
2711 /* There is no type with that name, anywhere. */
2712 if (REAL_IDENTIFIER_TYPE_VALUE (id) == NULL_TREE)
2713 return NULL_TREE;
2714 /* This is not the type marker, but the real thing. */
2715 if (REAL_IDENTIFIER_TYPE_VALUE (id) != global_type_node)
2716 return REAL_IDENTIFIER_TYPE_VALUE (id);
2717 /* Have to search for it. It must be on the global level, now.
2718 Ask lookup_name not to return non-types. */
2719 id = lookup_name_real (id, 2, 1, 0);
2720 if (id)
2721 return TREE_TYPE (id);
2722 return NULL_TREE;
2725 /* Pop off extraneous binding levels left over due to syntax errors.
2727 We don't pop past namespaces, as they might be valid. */
2729 void
2730 pop_everything ()
2732 #ifdef DEBUG_CP_BINDING_LEVELS
2733 fprintf (stderr, "XXX entering pop_everything ()\n");
2734 #endif
2735 while (!toplevel_bindings_p ())
2737 if (current_binding_level->parm_flag == 2)
2738 pop_nested_class ();
2739 else
2740 poplevel (0, 0, 0);
2742 #ifdef DEBUG_CP_BINDING_LEVELS
2743 fprintf (stderr, "XXX leaving pop_everything ()\n");
2744 #endif
2747 /* The type TYPE is being declared. If it is a class template, or a
2748 specialization of a class template, do any processing required and
2749 perform error-checking. If IS_FRIEND is non-zero, this TYPE is
2750 being declared a friend. B is the binding level at which this TYPE
2751 should be bound.
2753 Returns the TYPE_DECL for TYPE, which may have been altered by this
2754 processing. */
2756 static tree
2757 maybe_process_template_type_declaration (type, globalize, b)
2758 tree type;
2759 int globalize;
2760 struct binding_level* b;
2762 tree decl = TYPE_NAME (type);
2764 if (processing_template_parmlist)
2765 /* You can't declare a new template type in a template parameter
2766 list. But, you can declare a non-template type:
2768 template <class A*> struct S;
2770 is a forward-declaration of `A'. */
2772 else
2774 maybe_check_template_type (type);
2776 my_friendly_assert (IS_AGGR_TYPE (type)
2777 || TREE_CODE (type) == ENUMERAL_TYPE, 0);
2780 if (processing_template_decl)
2782 /* This may change after the call to
2783 push_template_decl_real, but we want the original value. */
2784 tree name = DECL_NAME (decl);
2786 decl = push_template_decl_real (decl, globalize);
2787 /* If the current binding level is the binding level for the
2788 template parameters (see the comment in
2789 begin_template_parm_list) and the enclosing level is a class
2790 scope, and we're not looking at a friend, push the
2791 declaration of the member class into the class scope. In the
2792 friend case, push_template_decl will already have put the
2793 friend into global scope, if appropriate. */
2794 if (TREE_CODE (type) != ENUMERAL_TYPE
2795 && !globalize && b->pseudo_global
2796 && b->level_chain->parm_flag == 2)
2798 finish_member_declaration (CLASSTYPE_TI_TEMPLATE (type));
2799 /* Put this tag on the list of tags for the class, since
2800 that won't happen below because B is not the class
2801 binding level, but is instead the pseudo-global level. */
2802 b->level_chain->tags =
2803 saveable_tree_cons (name, type, b->level_chain->tags);
2804 if (TYPE_SIZE (current_class_type) == NULL_TREE)
2805 CLASSTYPE_TAGS (current_class_type) = b->level_chain->tags;
2810 return decl;
2813 /* In C++, you don't have to write `struct S' to refer to `S'; you
2814 can just use `S'. We accomplish this by creating a TYPE_DECL as
2815 if the user had written `typedef struct S S'. Create and return
2816 the TYPE_DECL for TYPE. */
2818 tree
2819 create_implicit_typedef (name, type)
2820 tree name;
2821 tree type;
2823 tree decl;
2825 decl = build_decl (TYPE_DECL, name, type);
2826 SET_DECL_ARTIFICIAL (decl);
2827 /* There are other implicit type declarations, like the one *within*
2828 a class that allows you to write `S::S'. We must distinguish
2829 amongst these. */
2830 SET_DECL_IMPLICIT_TYPEDEF_P (decl);
2831 TYPE_NAME (type) = decl;
2833 return decl;
2836 /* Push a tag name NAME for struct/class/union/enum type TYPE.
2837 Normally put it into the inner-most non-tag-transparent scope,
2838 but if GLOBALIZE is true, put it in the inner-most non-class scope.
2839 The latter is needed for implicit declarations. */
2841 void
2842 pushtag (name, type, globalize)
2843 tree name, type;
2844 int globalize;
2846 register struct binding_level *b;
2848 b = current_binding_level;
2849 while (b->tag_transparent
2850 || (globalize && b->parm_flag == 2))
2851 b = b->level_chain;
2853 if (toplevel_bindings_p ())
2854 b->tags = perm_tree_cons (name, type, b->tags);
2855 else
2856 b->tags = saveable_tree_cons (name, type, b->tags);
2858 if (name)
2860 /* Do C++ gratuitous typedefing. */
2861 if (IDENTIFIER_TYPE_VALUE (name) != type)
2863 register tree d = NULL_TREE;
2864 int in_class = 0;
2865 tree context = TYPE_CONTEXT (type);
2867 if (! context)
2869 tree cs = current_scope ();
2871 if (! globalize)
2872 context = cs;
2873 else if (cs != NULL_TREE
2874 && TREE_CODE_CLASS (TREE_CODE (cs)) == 't')
2875 /* When declaring a friend class of a local class, we want
2876 to inject the newly named class into the scope
2877 containing the local class, not the namespace scope. */
2878 context = hack_decl_function_context (get_type_decl (cs));
2880 if (!context)
2881 context = current_namespace;
2883 if ((b->pseudo_global && b->level_chain->parm_flag == 2)
2884 || b->parm_flag == 2)
2885 in_class = 1;
2887 if (current_lang_name == lang_name_java)
2888 TYPE_FOR_JAVA (type) = 1;
2890 d = create_implicit_typedef (name, type);
2891 DECL_CONTEXT (d) = FROB_CONTEXT (context);
2892 if (! in_class)
2893 set_identifier_type_value_with_scope (name, type, b);
2895 d = maybe_process_template_type_declaration (type,
2896 globalize, b);
2898 if (b->parm_flag == 2)
2900 if (!PROCESSING_REAL_TEMPLATE_DECL_P ())
2901 /* Put this TYPE_DECL on the TYPE_FIELDS list for the
2902 class. But if it's a member template class, we
2903 want the TEMPLATE_DECL, not the TYPE_DECL, so this
2904 is done later. */
2905 finish_member_declaration (d);
2906 else
2907 pushdecl_class_level (d);
2909 else
2910 d = pushdecl_with_scope (d, b);
2912 if (ANON_AGGRNAME_P (name))
2913 DECL_IGNORED_P (d) = 1;
2915 TYPE_CONTEXT (type) = DECL_CONTEXT (d);
2916 DECL_ASSEMBLER_NAME (d) = DECL_NAME (d);
2917 if (!uses_template_parms (type))
2918 DECL_ASSEMBLER_NAME (d)
2919 = get_identifier (build_overload_name (type, 1, 1));
2921 if (b->parm_flag == 2)
2923 if (TYPE_SIZE (current_class_type) == NULL_TREE)
2924 CLASSTYPE_TAGS (current_class_type) = b->tags;
2928 if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL)
2929 /* Use the canonical TYPE_DECL for this node. */
2930 TYPE_STUB_DECL (type) = TYPE_NAME (type);
2931 else
2933 /* Create a fake NULL-named TYPE_DECL node whose TREE_TYPE
2934 will be the tagged type we just added to the current
2935 binding level. This fake NULL-named TYPE_DECL node helps
2936 dwarfout.c to know when it needs to output a
2937 representation of a tagged type, and it also gives us a
2938 convenient place to record the "scope start" address for
2939 the tagged type. */
2941 tree d = build_decl (TYPE_DECL, NULL_TREE, type);
2942 TYPE_STUB_DECL (type) = pushdecl_with_scope (d, b);
2946 /* Counter used to create anonymous type names. */
2948 static int anon_cnt = 0;
2950 /* Return an IDENTIFIER which can be used as a name for
2951 anonymous structs and unions. */
2953 tree
2954 make_anon_name ()
2956 char buf[32];
2958 sprintf (buf, ANON_AGGRNAME_FORMAT, anon_cnt++);
2959 return get_identifier (buf);
2962 /* Clear the TREE_PURPOSE slot of tags which have anonymous typenames.
2963 This keeps dbxout from getting confused. */
2965 void
2966 clear_anon_tags ()
2968 register struct binding_level *b;
2969 register tree tags;
2970 static int last_cnt = 0;
2972 /* Fast out if no new anon names were declared. */
2973 if (last_cnt == anon_cnt)
2974 return;
2976 b = current_binding_level;
2977 while (b->tag_transparent)
2978 b = b->level_chain;
2979 tags = b->tags;
2980 while (tags)
2982 /* A NULL purpose means we have already processed all tags
2983 from here to the end of the list. */
2984 if (TREE_PURPOSE (tags) == NULL_TREE)
2985 break;
2986 if (ANON_AGGRNAME_P (TREE_PURPOSE (tags)))
2987 TREE_PURPOSE (tags) = NULL_TREE;
2988 tags = TREE_CHAIN (tags);
2990 last_cnt = anon_cnt;
2993 /* Subroutine of duplicate_decls: return truthvalue of whether
2994 or not types of these decls match.
2996 For C++, we must compare the parameter list so that `int' can match
2997 `int&' in a parameter position, but `int&' is not confused with
2998 `const int&'. */
3001 decls_match (newdecl, olddecl)
3002 tree newdecl, olddecl;
3004 int types_match;
3006 if (newdecl == olddecl)
3007 return 1;
3009 if (TREE_CODE (newdecl) != TREE_CODE (olddecl))
3010 /* If the two DECLs are not even the same kind of thing, we're not
3011 interested in their types. */
3012 return 0;
3014 if (TREE_CODE (newdecl) == FUNCTION_DECL)
3016 tree f1 = TREE_TYPE (newdecl);
3017 tree f2 = TREE_TYPE (olddecl);
3018 tree p1 = TYPE_ARG_TYPES (f1);
3019 tree p2 = TYPE_ARG_TYPES (f2);
3021 if (DECL_REAL_CONTEXT (newdecl) != DECL_REAL_CONTEXT (olddecl)
3022 && ! (DECL_LANGUAGE (newdecl) == lang_c
3023 && DECL_LANGUAGE (olddecl) == lang_c))
3024 return 0;
3026 /* When we parse a static member function definition,
3027 we put together a FUNCTION_DECL which thinks its type
3028 is METHOD_TYPE. Change that to FUNCTION_TYPE, and
3029 proceed. */
3030 if (TREE_CODE (f1) == METHOD_TYPE && DECL_STATIC_FUNCTION_P (olddecl))
3031 revert_static_member_fn (&newdecl, &f1, &p1);
3032 else if (TREE_CODE (f2) == METHOD_TYPE
3033 && DECL_STATIC_FUNCTION_P (newdecl))
3034 revert_static_member_fn (&olddecl, &f2, &p2);
3036 /* Here we must take care of the case where new default
3037 parameters are specified. Also, warn if an old
3038 declaration becomes ambiguous because default
3039 parameters may cause the two to be ambiguous. */
3040 if (TREE_CODE (f1) != TREE_CODE (f2))
3042 if (TREE_CODE (f1) == OFFSET_TYPE)
3043 cp_compiler_error ("`%D' redeclared as member function", newdecl);
3044 else
3045 cp_compiler_error ("`%D' redeclared as non-member function", newdecl);
3046 return 0;
3049 if (same_type_p (TREE_TYPE (f1), TREE_TYPE (f2)))
3051 if (! strict_prototypes_lang_c && DECL_LANGUAGE (olddecl) == lang_c
3052 && p2 == NULL_TREE)
3054 types_match = self_promoting_args_p (p1);
3055 if (p1 == void_list_node)
3056 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
3058 else if (!strict_prototypes_lang_c && DECL_LANGUAGE (olddecl)==lang_c
3059 && DECL_LANGUAGE (newdecl) == lang_c && p1 == NULL_TREE)
3061 types_match = self_promoting_args_p (p2);
3062 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
3064 else
3065 types_match = compparms (p1, p2);
3067 else
3068 types_match = 0;
3070 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
3072 if (!comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
3073 DECL_TEMPLATE_PARMS (olddecl)))
3074 return 0;
3076 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
3077 types_match = 1;
3078 else
3079 types_match = decls_match (DECL_TEMPLATE_RESULT (olddecl),
3080 DECL_TEMPLATE_RESULT (newdecl));
3082 else
3084 if (TREE_TYPE (newdecl) == error_mark_node)
3085 types_match = TREE_TYPE (olddecl) == error_mark_node;
3086 else if (TREE_TYPE (olddecl) == NULL_TREE)
3087 types_match = TREE_TYPE (newdecl) == NULL_TREE;
3088 else if (TREE_TYPE (newdecl) == NULL_TREE)
3089 types_match = 0;
3090 else
3091 types_match = comptypes (TREE_TYPE (newdecl),
3092 TREE_TYPE (olddecl),
3093 COMPARE_REDECLARATION);
3096 return types_match;
3099 /* If NEWDECL is `static' and an `extern' was seen previously,
3100 warn about it. (OLDDECL may be NULL_TREE; NAME contains
3101 information about previous usage as an `extern'.)
3103 Note that this does not apply to the C++ case of declaring
3104 a variable `extern const' and then later `const'.
3106 Don't complain about built-in functions, since they are beyond
3107 the user's control. */
3109 static void
3110 warn_extern_redeclared_static (newdecl, olddecl)
3111 tree newdecl, olddecl;
3113 tree name;
3115 static const char *explicit_extern_static_warning
3116 = "`%D' was declared `extern' and later `static'";
3117 static const char *implicit_extern_static_warning
3118 = "`%D' was declared implicitly `extern' and later `static'";
3120 if (TREE_CODE (newdecl) == TYPE_DECL)
3121 return;
3123 name = DECL_ASSEMBLER_NAME (newdecl);
3124 if (TREE_PUBLIC (name) && DECL_THIS_STATIC (newdecl))
3126 /* It's okay to redeclare an ANSI built-in function as static,
3127 or to declare a non-ANSI built-in function as anything. */
3128 if (! (TREE_CODE (newdecl) == FUNCTION_DECL
3129 && olddecl != NULL_TREE
3130 && TREE_CODE (olddecl) == FUNCTION_DECL
3131 && DECL_ARTIFICIAL (olddecl)))
3133 cp_pedwarn (IDENTIFIER_IMPLICIT_DECL (name)
3134 ? implicit_extern_static_warning
3135 : explicit_extern_static_warning, newdecl);
3136 if (olddecl != NULL_TREE)
3137 cp_pedwarn_at ("previous declaration of `%D'", olddecl);
3142 /* Handle when a new declaration NEWDECL has the same name as an old
3143 one OLDDECL in the same binding contour. Prints an error message
3144 if appropriate.
3146 If safely possible, alter OLDDECL to look like NEWDECL, and return 1.
3147 Otherwise, return 0. */
3150 duplicate_decls (newdecl, olddecl)
3151 tree newdecl, olddecl;
3153 extern struct obstack permanent_obstack;
3154 unsigned olddecl_uid = DECL_UID (olddecl);
3155 int olddecl_friend = 0, types_match = 0;
3156 int new_defines_function = 0;
3158 if (newdecl == olddecl)
3159 return 1;
3161 types_match = decls_match (newdecl, olddecl);
3163 /* If either the type of the new decl or the type of the old decl is an
3164 error_mark_node, then that implies that we have already issued an
3165 error (earlier) for some bogus type specification, and in that case,
3166 it is rather pointless to harass the user with yet more error message
3167 about the same declaration, so just pretend the types match here. */
3168 if (TREE_TYPE (newdecl) == error_mark_node
3169 || TREE_TYPE (olddecl) == error_mark_node)
3170 types_match = 1;
3172 /* Check for redeclaration and other discrepancies. */
3173 if (TREE_CODE (olddecl) == FUNCTION_DECL
3174 && DECL_ARTIFICIAL (olddecl))
3176 if (TREE_CODE (newdecl) != FUNCTION_DECL)
3178 /* If you declare a built-in or predefined function name as static,
3179 the old definition is overridden, but optionally warn this was a
3180 bad choice of name. */
3181 if (! TREE_PUBLIC (newdecl))
3183 if (warn_shadow)
3184 cp_warning ("shadowing %s function `%#D'",
3185 DECL_BUILT_IN (olddecl) ? "built-in" : "library",
3186 olddecl);
3187 /* Discard the old built-in function. */
3188 return 0;
3190 /* If the built-in is not ansi, then programs can override
3191 it even globally without an error. */
3192 else if (! DECL_BUILT_IN (olddecl))
3193 cp_warning ("library function `%#D' redeclared as non-function `%#D'",
3194 olddecl, newdecl);
3195 else
3197 cp_error ("declaration of `%#D'", newdecl);
3198 cp_error ("conflicts with built-in declaration `%#D'",
3199 olddecl);
3201 return 0;
3203 else if (!types_match)
3205 if ((DECL_LANGUAGE (newdecl) == lang_c
3206 && DECL_LANGUAGE (olddecl) == lang_c)
3207 || compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
3208 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
3210 /* A near match; override the builtin. */
3212 if (TREE_PUBLIC (newdecl))
3214 cp_warning ("new declaration `%#D'", newdecl);
3215 cp_warning ("ambiguates built-in declaration `%#D'",
3216 olddecl);
3218 else if (warn_shadow)
3219 cp_warning ("shadowing %s function `%#D'",
3220 DECL_BUILT_IN (olddecl) ? "built-in" : "library",
3221 olddecl);
3223 else
3224 /* Discard the old built-in function. */
3225 return 0;
3228 else if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
3230 if ((TREE_CODE (olddecl) == TYPE_DECL && DECL_ARTIFICIAL (olddecl)
3231 && TREE_CODE (newdecl) != TYPE_DECL
3232 && ! (TREE_CODE (newdecl) == TEMPLATE_DECL
3233 && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL))
3234 || (TREE_CODE (newdecl) == TYPE_DECL && DECL_ARTIFICIAL (newdecl)
3235 && TREE_CODE (olddecl) != TYPE_DECL
3236 && ! (TREE_CODE (olddecl) == TEMPLATE_DECL
3237 && (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl))
3238 == TYPE_DECL))))
3240 /* We do nothing special here, because C++ does such nasty
3241 things with TYPE_DECLs. Instead, just let the TYPE_DECL
3242 get shadowed, and know that if we need to find a TYPE_DECL
3243 for a given name, we can look in the IDENTIFIER_TYPE_VALUE
3244 slot of the identifier. */
3245 return 0;
3248 if ((TREE_CODE (newdecl) == FUNCTION_DECL
3249 && DECL_FUNCTION_TEMPLATE_P (olddecl))
3250 || (TREE_CODE (olddecl) == FUNCTION_DECL
3251 && DECL_FUNCTION_TEMPLATE_P (newdecl)))
3252 return 0;
3254 cp_error ("`%#D' redeclared as different kind of symbol", newdecl);
3255 if (TREE_CODE (olddecl) == TREE_LIST)
3256 olddecl = TREE_VALUE (olddecl);
3257 cp_error_at ("previous declaration of `%#D'", olddecl);
3259 /* New decl is completely inconsistent with the old one =>
3260 tell caller to replace the old one. */
3262 return 0;
3264 else if (!types_match)
3266 if (DECL_REAL_CONTEXT (newdecl) != DECL_REAL_CONTEXT (olddecl))
3267 /* These are certainly not duplicate declarations; they're
3268 from different scopes. */
3269 return 0;
3271 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
3273 /* The name of a class template may not be declared to refer to
3274 any other template, class, function, object, namespace, value,
3275 or type in the same scope. */
3276 if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == TYPE_DECL
3277 || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
3279 cp_error ("declaration of template `%#D'", newdecl);
3280 cp_error_at ("conflicts with previous declaration `%#D'",
3281 olddecl);
3283 else if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == FUNCTION_DECL
3284 && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
3285 && compparms (TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl))),
3286 TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl))))
3287 && comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
3288 DECL_TEMPLATE_PARMS (olddecl)))
3290 cp_error ("new declaration `%#D'", newdecl);
3291 cp_error_at ("ambiguates old declaration `%#D'", olddecl);
3293 return 0;
3295 if (TREE_CODE (newdecl) == FUNCTION_DECL)
3297 if (DECL_LANGUAGE (newdecl) == lang_c
3298 && DECL_LANGUAGE (olddecl) == lang_c)
3300 cp_error ("declaration of C function `%#D' conflicts with",
3301 newdecl);
3302 cp_error_at ("previous declaration `%#D' here", olddecl);
3304 else if (compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
3305 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
3307 cp_error ("new declaration `%#D'", newdecl);
3308 cp_error_at ("ambiguates old declaration `%#D'", olddecl);
3310 else
3311 return 0;
3314 /* Already complained about this, so don't do so again. */
3315 else if (current_class_type == NULL_TREE
3316 || IDENTIFIER_ERROR_LOCUS (DECL_ASSEMBLER_NAME (newdecl)) != current_class_type)
3318 cp_error ("conflicting types for `%#D'", newdecl);
3319 cp_error_at ("previous declaration as `%#D'", olddecl);
3322 else if (TREE_CODE (newdecl) == FUNCTION_DECL
3323 && ((DECL_TEMPLATE_SPECIALIZATION (olddecl)
3324 && (!DECL_TEMPLATE_INFO (newdecl)
3325 || (DECL_TI_TEMPLATE (newdecl)
3326 != DECL_TI_TEMPLATE (olddecl))))
3327 || (DECL_TEMPLATE_SPECIALIZATION (newdecl)
3328 && (!DECL_TEMPLATE_INFO (olddecl)
3329 || (DECL_TI_TEMPLATE (olddecl)
3330 != DECL_TI_TEMPLATE (newdecl))))))
3331 /* It's OK to have a template specialization and a non-template
3332 with the same type, or to have specializations of two
3333 different templates with the same type. Note that if one is a
3334 specialization, and the other is an instantiation of the same
3335 template, that we do not exit at this point. That situation
3336 can occur if we instantiate a template class, and then
3337 specialize one of its methods. This situation is legal, but
3338 the declarations must be merged in the usual way. */
3339 return 0;
3340 else if (TREE_CODE (newdecl) == FUNCTION_DECL
3341 && ((DECL_TEMPLATE_INSTANTIATION (olddecl)
3342 && !DECL_USE_TEMPLATE (newdecl))
3343 || (DECL_TEMPLATE_INSTANTIATION (newdecl)
3344 && !DECL_USE_TEMPLATE (olddecl))))
3345 /* One of the declarations is a template instantiation, and the
3346 other is not a template at all. That's OK. */
3347 return 0;
3348 else if (TREE_CODE (newdecl) == NAMESPACE_DECL
3349 && DECL_NAMESPACE_ALIAS (newdecl)
3350 && DECL_NAMESPACE_ALIAS (newdecl) == DECL_NAMESPACE_ALIAS (olddecl))
3351 /* Redeclaration of namespace alias, ignore it. */
3352 return 1;
3353 else
3355 const char *errmsg = redeclaration_error_message (newdecl, olddecl);
3356 if (errmsg)
3358 cp_error (errmsg, newdecl);
3359 if (DECL_NAME (olddecl) != NULL_TREE)
3360 cp_error_at ((DECL_INITIAL (olddecl)
3361 && namespace_bindings_p ())
3362 ? "`%#D' previously defined here"
3363 : "`%#D' previously declared here", olddecl);
3365 else if (TREE_CODE (olddecl) == FUNCTION_DECL
3366 && DECL_INITIAL (olddecl) != NULL_TREE
3367 && TYPE_ARG_TYPES (TREE_TYPE (olddecl)) == NULL_TREE
3368 && TYPE_ARG_TYPES (TREE_TYPE (newdecl)) != NULL_TREE)
3370 /* Prototype decl follows defn w/o prototype. */
3371 cp_warning_at ("prototype for `%#D'", newdecl);
3372 cp_warning_at ("follows non-prototype definition here", olddecl);
3374 else if (TREE_CODE (olddecl) == FUNCTION_DECL
3375 && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl))
3377 /* extern "C" int foo ();
3378 int foo () { bar (); }
3379 is OK. */
3380 if (current_lang_stack == current_lang_base)
3381 DECL_LANGUAGE (newdecl) = DECL_LANGUAGE (olddecl);
3382 else
3384 cp_error_at ("previous declaration of `%#D' with %L linkage",
3385 olddecl, DECL_LANGUAGE (olddecl));
3386 cp_error ("conflicts with new declaration with %L linkage",
3387 DECL_LANGUAGE (newdecl));
3391 if (DECL_LANG_SPECIFIC (olddecl) && DECL_USE_TEMPLATE (olddecl))
3393 else if (TREE_CODE (olddecl) == FUNCTION_DECL)
3395 tree t1 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
3396 tree t2 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
3397 int i = 1;
3399 if (TREE_CODE (TREE_TYPE (newdecl)) == METHOD_TYPE)
3400 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2);
3402 for (; t1 && t1 != void_list_node;
3403 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2), i++)
3404 if (TREE_PURPOSE (t1) && TREE_PURPOSE (t2))
3406 if (1 == simple_cst_equal (TREE_PURPOSE (t1),
3407 TREE_PURPOSE (t2)))
3409 if (pedantic)
3411 cp_pedwarn ("default argument given for parameter %d of `%#D'",
3412 i, newdecl);
3413 cp_pedwarn_at ("after previous specification in `%#D'",
3414 olddecl);
3417 else
3419 cp_error ("default argument given for parameter %d of `%#D'",
3420 i, newdecl);
3421 cp_error_at ("after previous specification in `%#D'",
3422 olddecl);
3426 if (DECL_THIS_INLINE (newdecl) && ! DECL_THIS_INLINE (olddecl)
3427 && TREE_ADDRESSABLE (olddecl) && warn_inline)
3429 cp_warning ("`%#D' was used before it was declared inline",
3430 newdecl);
3431 cp_warning_at ("previous non-inline declaration here",
3432 olddecl);
3437 /* If new decl is `static' and an `extern' was seen previously,
3438 warn about it. */
3439 warn_extern_redeclared_static (newdecl, olddecl);
3441 /* We have committed to returning 1 at this point. */
3442 if (TREE_CODE (newdecl) == FUNCTION_DECL)
3444 /* Now that functions must hold information normally held
3445 by field decls, there is extra work to do so that
3446 declaration information does not get destroyed during
3447 definition. */
3448 if (DECL_VINDEX (olddecl))
3449 DECL_VINDEX (newdecl) = DECL_VINDEX (olddecl);
3450 if (DECL_CONTEXT (olddecl))
3451 DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
3452 if (DECL_CLASS_CONTEXT (olddecl))
3453 DECL_CLASS_CONTEXT (newdecl) = DECL_CLASS_CONTEXT (olddecl);
3454 if (DECL_PENDING_INLINE_INFO (newdecl) == (struct pending_inline *)0)
3455 DECL_PENDING_INLINE_INFO (newdecl) = DECL_PENDING_INLINE_INFO (olddecl);
3456 DECL_STATIC_CONSTRUCTOR (newdecl) |= DECL_STATIC_CONSTRUCTOR (olddecl);
3457 DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
3458 DECL_ABSTRACT_VIRTUAL_P (newdecl) |= DECL_ABSTRACT_VIRTUAL_P (olddecl);
3459 DECL_VIRTUAL_P (newdecl) |= DECL_VIRTUAL_P (olddecl);
3460 DECL_NEEDS_FINAL_OVERRIDER_P (newdecl) |= DECL_NEEDS_FINAL_OVERRIDER_P (olddecl);
3461 new_defines_function = DECL_INITIAL (newdecl) != NULL_TREE;
3463 /* Optionally warn about more than one declaration for the same
3464 name, but don't warn about a function declaration followed by a
3465 definition. */
3466 if (warn_redundant_decls && ! DECL_ARTIFICIAL (olddecl)
3467 && !(new_defines_function && DECL_INITIAL (olddecl) == NULL_TREE)
3468 /* Don't warn about extern decl followed by definition. */
3469 && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl))
3470 /* Don't warn about friends, let add_friend take care of it. */
3471 && ! DECL_FRIEND_P (newdecl))
3473 cp_warning ("redundant redeclaration of `%D' in same scope", newdecl);
3474 cp_warning_at ("previous declaration of `%D'", olddecl);
3478 /* Deal with C++: must preserve virtual function table size. */
3479 if (TREE_CODE (olddecl) == TYPE_DECL)
3481 register tree newtype = TREE_TYPE (newdecl);
3482 register tree oldtype = TREE_TYPE (olddecl);
3484 if (newtype != error_mark_node && oldtype != error_mark_node
3485 && TYPE_LANG_SPECIFIC (newtype) && TYPE_LANG_SPECIFIC (oldtype))
3487 CLASSTYPE_VSIZE (newtype) = CLASSTYPE_VSIZE (oldtype);
3488 CLASSTYPE_FRIEND_CLASSES (newtype)
3489 = CLASSTYPE_FRIEND_CLASSES (oldtype);
3493 /* Copy all the DECL_... slots specified in the new decl
3494 except for any that we copy here from the old type. */
3495 DECL_MACHINE_ATTRIBUTES (newdecl)
3496 = merge_machine_decl_attributes (olddecl, newdecl);
3498 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
3500 if (! duplicate_decls (DECL_TEMPLATE_RESULT (newdecl),
3501 DECL_TEMPLATE_RESULT (olddecl)))
3502 cp_error ("invalid redeclaration of %D", newdecl);
3503 TREE_TYPE (olddecl) = TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl));
3504 DECL_TEMPLATE_SPECIALIZATIONS (olddecl)
3505 = chainon (DECL_TEMPLATE_SPECIALIZATIONS (olddecl),
3506 DECL_TEMPLATE_SPECIALIZATIONS (newdecl));
3508 return 1;
3511 if (types_match)
3513 /* Automatically handles default parameters. */
3514 tree oldtype = TREE_TYPE (olddecl);
3515 tree newtype;
3517 /* Make sure we put the new type in the same obstack as the old one. */
3518 if (oldtype)
3519 push_obstacks (TYPE_OBSTACK (oldtype), TYPE_OBSTACK (oldtype));
3520 else
3521 push_permanent_obstack ();
3523 /* Merge the data types specified in the two decls. */
3524 newtype = common_type (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
3526 if (TREE_CODE (newdecl) == VAR_DECL)
3527 DECL_THIS_EXTERN (newdecl) |= DECL_THIS_EXTERN (olddecl);
3528 /* Do this after calling `common_type' so that default
3529 parameters don't confuse us. */
3530 else if (TREE_CODE (newdecl) == FUNCTION_DECL
3531 && (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl))
3532 != TYPE_RAISES_EXCEPTIONS (TREE_TYPE (olddecl))))
3534 TREE_TYPE (newdecl) = build_exception_variant (newtype,
3535 TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl)));
3536 TREE_TYPE (olddecl) = build_exception_variant (newtype,
3537 TYPE_RAISES_EXCEPTIONS (oldtype));
3539 if ((pedantic || ! DECL_IN_SYSTEM_HEADER (olddecl))
3540 && DECL_SOURCE_LINE (olddecl) != 0
3541 && flag_exceptions
3542 && !comp_except_specs (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl)),
3543 TYPE_RAISES_EXCEPTIONS (TREE_TYPE (olddecl)), 1))
3545 cp_error ("declaration of `%F' throws different exceptions",
3546 newdecl);
3547 cp_error_at ("to previous declaration `%F'", olddecl);
3550 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
3552 /* Lay the type out, unless already done. */
3553 if (! same_type_p (newtype, oldtype)
3554 && TREE_TYPE (newdecl) != error_mark_node
3555 && !(processing_template_decl && uses_template_parms (newdecl)))
3556 layout_type (TREE_TYPE (newdecl));
3558 if ((TREE_CODE (newdecl) == VAR_DECL
3559 || TREE_CODE (newdecl) == PARM_DECL
3560 || TREE_CODE (newdecl) == RESULT_DECL
3561 || TREE_CODE (newdecl) == FIELD_DECL
3562 || TREE_CODE (newdecl) == TYPE_DECL)
3563 && !(processing_template_decl && uses_template_parms (newdecl)))
3564 layout_decl (newdecl, 0);
3566 /* Merge the type qualifiers. */
3567 if (TREE_READONLY (newdecl))
3568 TREE_READONLY (olddecl) = 1;
3569 if (TREE_THIS_VOLATILE (newdecl))
3570 TREE_THIS_VOLATILE (olddecl) = 1;
3572 /* Merge the initialization information. */
3573 if (DECL_INITIAL (newdecl) == NULL_TREE
3574 && DECL_INITIAL (olddecl) != NULL_TREE)
3576 DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
3577 DECL_SOURCE_FILE (newdecl) = DECL_SOURCE_FILE (olddecl);
3578 DECL_SOURCE_LINE (newdecl) = DECL_SOURCE_LINE (olddecl);
3579 if (CAN_HAVE_FULL_LANG_DECL_P (newdecl)
3580 && DECL_LANG_SPECIFIC (newdecl)
3581 && DECL_LANG_SPECIFIC (olddecl))
3582 DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
3585 /* Merge the section attribute.
3586 We want to issue an error if the sections conflict but that must be
3587 done later in decl_attributes since we are called before attributes
3588 are assigned. */
3589 if (DECL_SECTION_NAME (newdecl) == NULL_TREE)
3590 DECL_SECTION_NAME (newdecl) = DECL_SECTION_NAME (olddecl);
3592 /* Keep the old rtl since we can safely use it, unless it's the
3593 call to abort() used for abstract virtuals. */
3594 if ((DECL_LANG_SPECIFIC (olddecl)
3595 && !DECL_ABSTRACT_VIRTUAL_P (olddecl))
3596 || DECL_RTL (olddecl) != DECL_RTL (abort_fndecl))
3597 DECL_RTL (newdecl) = DECL_RTL (olddecl);
3599 pop_obstacks ();
3601 /* If cannot merge, then use the new type and qualifiers,
3602 and don't preserve the old rtl. */
3603 else
3605 /* Clean out any memory we had of the old declaration. */
3606 tree oldstatic = value_member (olddecl, static_aggregates);
3607 if (oldstatic)
3608 TREE_VALUE (oldstatic) = error_mark_node;
3610 TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
3611 TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
3612 TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
3613 TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
3616 /* Merge the storage class information. */
3617 DECL_WEAK (newdecl) |= DECL_WEAK (olddecl);
3618 DECL_ONE_ONLY (newdecl) |= DECL_ONE_ONLY (olddecl);
3619 TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
3620 TREE_STATIC (olddecl) = TREE_STATIC (newdecl) |= TREE_STATIC (olddecl);
3621 if (! DECL_EXTERNAL (olddecl))
3622 DECL_EXTERNAL (newdecl) = 0;
3624 if (DECL_LANG_SPECIFIC (newdecl) && DECL_LANG_SPECIFIC (olddecl))
3626 DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl);
3627 DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl);
3628 DECL_COMDAT (newdecl) |= DECL_COMDAT (olddecl);
3629 DECL_TEMPLATE_INSTANTIATED (newdecl)
3630 |= DECL_TEMPLATE_INSTANTIATED (olddecl);
3631 /* Don't really know how much of the language-specific
3632 values we should copy from old to new. */
3633 DECL_IN_AGGR_P (newdecl) = DECL_IN_AGGR_P (olddecl);
3634 DECL_ACCESS (newdecl) = DECL_ACCESS (olddecl);
3635 DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl);
3636 DECL_TEMPLATE_INFO (newdecl) = DECL_TEMPLATE_INFO (olddecl);
3637 olddecl_friend = DECL_FRIEND_P (olddecl);
3639 /* Only functions have DECL_BEFRIENDING_CLASSES. */
3640 if (TREE_CODE (newdecl) == FUNCTION_DECL
3641 || DECL_FUNCTION_TEMPLATE_P (newdecl))
3642 DECL_BEFRIENDING_CLASSES (newdecl)
3643 = chainon (DECL_BEFRIENDING_CLASSES (newdecl),
3644 DECL_BEFRIENDING_CLASSES (olddecl));
3647 if (TREE_CODE (newdecl) == FUNCTION_DECL)
3649 if (DECL_TEMPLATE_INSTANTIATION (olddecl)
3650 && !DECL_TEMPLATE_INSTANTIATION (newdecl))
3652 /* If newdecl is not a specialization, then it is not a
3653 template-related function at all. And that means that we
3654 shoud have exited above, returning 0. */
3655 my_friendly_assert (DECL_TEMPLATE_SPECIALIZATION (newdecl),
3658 if (TREE_USED (olddecl))
3659 /* From [temp.expl.spec]:
3661 If a template, a member template or the member of a class
3662 template is explicitly specialized then that
3663 specialization shall be declared before the first use of
3664 that specialization that would cause an implicit
3665 instantiation to take place, in every translation unit in
3666 which such a use occurs. */
3667 cp_error ("explicit specialization of %D after first use",
3668 olddecl);
3670 SET_DECL_TEMPLATE_SPECIALIZATION (olddecl);
3672 DECL_THIS_INLINE (newdecl) |= DECL_THIS_INLINE (olddecl);
3674 /* If either decl says `inline', this fn is inline, unless its
3675 definition was passed already. */
3676 if (DECL_INLINE (newdecl) && DECL_INITIAL (olddecl) == NULL_TREE)
3677 DECL_INLINE (olddecl) = 1;
3678 DECL_INLINE (newdecl) = DECL_INLINE (olddecl);
3680 if (! types_match)
3682 DECL_LANGUAGE (olddecl) = DECL_LANGUAGE (newdecl);
3683 DECL_ASSEMBLER_NAME (olddecl) = DECL_ASSEMBLER_NAME (newdecl);
3684 DECL_RTL (olddecl) = DECL_RTL (newdecl);
3686 if (! types_match || new_defines_function)
3688 /* These need to be copied so that the names are available.
3689 Note that if the types do match, we'll preserve inline
3690 info and other bits, but if not, we won't. */
3691 DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
3692 DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
3694 if (new_defines_function)
3695 /* If defining a function declared with other language
3696 linkage, use the previously declared language linkage. */
3697 DECL_LANGUAGE (newdecl) = DECL_LANGUAGE (olddecl);
3698 else if (types_match)
3700 /* If redeclaring a builtin function, and not a definition,
3701 it stays built in. */
3702 if (DECL_BUILT_IN (olddecl))
3704 DECL_BUILT_IN (newdecl) = 1;
3705 DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
3706 /* If we're keeping the built-in definition, keep the rtl,
3707 regardless of declaration matches. */
3708 DECL_RTL (newdecl) = DECL_RTL (olddecl);
3710 else
3711 DECL_FRAME_SIZE (newdecl) = DECL_FRAME_SIZE (olddecl);
3713 DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
3714 if ((DECL_SAVED_INSNS (newdecl) = DECL_SAVED_INSNS (olddecl)))
3715 /* Previously saved insns go together with
3716 the function's previous definition. */
3717 DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
3718 /* Don't clear out the arguments if we're redefining a function. */
3719 if (DECL_ARGUMENTS (olddecl))
3720 DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
3722 if (DECL_LANG_SPECIFIC (olddecl))
3723 DECL_MAIN_VARIANT (newdecl) = DECL_MAIN_VARIANT (olddecl);
3726 if (TREE_CODE (newdecl) == NAMESPACE_DECL)
3728 NAMESPACE_LEVEL (newdecl) = NAMESPACE_LEVEL (olddecl);
3731 /* Now preserve various other info from the definition. */
3732 TREE_ADDRESSABLE (newdecl) = TREE_ADDRESSABLE (olddecl);
3733 TREE_ASM_WRITTEN (newdecl) = TREE_ASM_WRITTEN (olddecl);
3734 DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
3735 DECL_ASSEMBLER_NAME (newdecl) = DECL_ASSEMBLER_NAME (olddecl);
3737 if (TREE_CODE (newdecl) == FUNCTION_DECL)
3739 int function_size;
3740 struct lang_decl *ol = DECL_LANG_SPECIFIC (olddecl);
3741 struct lang_decl *nl = DECL_LANG_SPECIFIC (newdecl);
3743 function_size = sizeof (struct tree_decl);
3745 bcopy ((char *) newdecl + sizeof (struct tree_common),
3746 (char *) olddecl + sizeof (struct tree_common),
3747 function_size - sizeof (struct tree_common));
3749 /* Can we safely free the storage used by newdecl? */
3751 #define ROUND(x) ((x + obstack_alignment_mask (&permanent_obstack)) \
3752 & ~ obstack_alignment_mask (&permanent_obstack))
3754 if (DECL_TEMPLATE_INSTANTIATION (newdecl))
3756 /* If newdecl is a template instantiation, it is possible that
3757 the following sequence of events has occurred:
3759 o A friend function was declared in a class template. The
3760 class template was instantiated.
3762 o The instantiation of the friend declaration was
3763 recorded on the instantiation list, and is newdecl.
3765 o Later, however, instantiate_class_template called pushdecl
3766 on the newdecl to perform name injection. But, pushdecl in
3767 turn called duplicate_decls when it discovered that another
3768 declaration of a global function with the same name already
3769 existed.
3771 o Here, in duplicate_decls, we decided to clobber newdecl.
3773 If we're going to do that, we'd better make sure that
3774 olddecl, and not newdecl, is on the list of
3775 instantiations so that if we try to do the instantiation
3776 again we won't get the clobbered declaration. */
3778 tree tmpl = DECL_TI_TEMPLATE (newdecl);
3779 tree decls = DECL_TEMPLATE_SPECIALIZATIONS (tmpl);
3781 for (; decls; decls = TREE_CHAIN (decls))
3782 if (TREE_VALUE (decls) == newdecl)
3783 TREE_VALUE (decls) = olddecl;
3786 if (((char *)newdecl + ROUND (function_size) == (char *)nl
3787 && ((char *)newdecl + ROUND (function_size)
3788 + ROUND (sizeof (struct lang_decl))
3789 == obstack_next_free (&permanent_obstack)))
3790 || ((char *)newdecl + ROUND (function_size)
3791 == obstack_next_free (&permanent_obstack)))
3793 DECL_MAIN_VARIANT (newdecl) = olddecl;
3794 DECL_LANG_SPECIFIC (olddecl) = ol;
3795 bcopy ((char *)nl, (char *)ol, sizeof (struct lang_decl));
3797 obstack_free (&permanent_obstack, newdecl);
3799 else if (LANG_DECL_PERMANENT (ol) && ol != nl)
3801 if (DECL_MAIN_VARIANT (olddecl) == olddecl)
3803 struct lang_decl *free_lang_decl = ol;
3805 /* Save these lang_decls that would otherwise be lost. */
3806 if (DECL_LANG_SPECIFIC (olddecl) == ol)
3807 abort ();
3809 free_lang_decl->u.next = free_lang_decl_chain;
3810 free_lang_decl_chain = free_lang_decl;
3812 else
3814 /* Storage leak. */;
3818 else
3820 bcopy ((char *) newdecl + sizeof (struct tree_common),
3821 (char *) olddecl + sizeof (struct tree_common),
3822 sizeof (struct tree_decl) - sizeof (struct tree_common)
3823 + tree_code_length [(int)TREE_CODE (newdecl)] * sizeof (char *));
3826 DECL_UID (olddecl) = olddecl_uid;
3827 if (olddecl_friend)
3828 DECL_FRIEND_P (olddecl) = 1;
3830 /* NEWDECL contains the merged attribute lists.
3831 Update OLDDECL to be the same. */
3832 DECL_MACHINE_ATTRIBUTES (olddecl) = DECL_MACHINE_ATTRIBUTES (newdecl);
3834 return 1;
3837 /* Record a decl-node X as belonging to the current lexical scope.
3838 Check for errors (such as an incompatible declaration for the same
3839 name already seen in the same scope).
3841 Returns either X or an old decl for the same name.
3842 If an old decl is returned, it may have been smashed
3843 to agree with what X says. */
3845 tree
3846 pushdecl (x)
3847 tree x;
3849 register tree t;
3850 register tree name = DECL_ASSEMBLER_NAME (x);
3851 int need_new_binding = 1;
3853 if (DECL_TEMPLATE_PARM_P (x))
3854 /* Template parameters have no context; they are not X::T even
3855 when declared within a class or namespace. */
3857 else
3859 if (current_function_decl && x != current_function_decl
3860 /* A local declaration for a function doesn't constitute
3861 nesting. */
3862 && (TREE_CODE (x) != FUNCTION_DECL || DECL_INITIAL (x))
3863 /* Don't change DECL_CONTEXT of virtual methods. */
3864 && (TREE_CODE (x) != FUNCTION_DECL || !DECL_VIRTUAL_P (x))
3865 && !DECL_CONTEXT (x))
3866 DECL_CONTEXT (x) = current_function_decl;
3867 if (!DECL_CONTEXT (x))
3868 DECL_CONTEXT (x) = FROB_CONTEXT (current_namespace);
3871 /* Type are looked up using the DECL_NAME, as that is what the rest of the
3872 compiler wants to use. */
3873 if (TREE_CODE (x) == TYPE_DECL || TREE_CODE (x) == VAR_DECL
3874 || TREE_CODE (x) == NAMESPACE_DECL)
3875 name = DECL_NAME (x);
3877 if (name)
3879 #if 0
3880 /* Not needed...see below. */
3881 char *file;
3882 int line;
3883 #endif
3884 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
3885 name = TREE_OPERAND (name, 0);
3887 /* Namespace-scoped variables are not found in the current level. */
3888 if (TREE_CODE (x) == VAR_DECL && DECL_NAMESPACE_SCOPE_P (x))
3889 t = namespace_binding (name, DECL_CONTEXT (x));
3890 else
3891 t = lookup_name_current_level (name);
3892 if (t == error_mark_node)
3894 /* error_mark_node is 0 for a while during initialization! */
3895 t = NULL_TREE;
3896 cp_error_at ("`%#D' used prior to declaration", x);
3899 else if (t != NULL_TREE)
3901 #if 0
3902 /* This is turned off until I have time to do it right (bpk). */
3903 /* With the code below that uses it... */
3904 file = DECL_SOURCE_FILE (t);
3905 line = DECL_SOURCE_LINE (t);
3906 #endif
3907 if (TREE_CODE (t) == PARM_DECL)
3909 if (DECL_CONTEXT (t) == NULL_TREE)
3910 fatal ("parse errors have confused me too much");
3912 /* Check for duplicate params. */
3913 if (duplicate_decls (x, t))
3914 return t;
3916 else if (((TREE_CODE (x) == FUNCTION_DECL && DECL_LANGUAGE (x) == lang_c)
3917 || DECL_FUNCTION_TEMPLATE_P (x))
3918 && is_overloaded_fn (t))
3919 /* Don't do anything just yet. */;
3920 else if (t == wchar_decl_node)
3922 if (pedantic && ! DECL_IN_SYSTEM_HEADER (x))
3923 cp_pedwarn ("redeclaration of wchar_t as `%T'", TREE_TYPE (x));
3925 /* Throw away the redeclaration. */
3926 return t;
3928 else if (TREE_CODE (t) != TREE_CODE (x))
3930 if (duplicate_decls (x, t))
3931 return t;
3933 else if (duplicate_decls (x, t))
3935 #if 0
3936 /* This is turned off until I have time to do it right (bpk). */
3938 /* Also warn if they did a prototype with `static' on it, but
3939 then later left the `static' off. */
3940 if (! TREE_PUBLIC (name) && TREE_PUBLIC (x))
3942 if (DECL_LANG_SPECIFIC (t) && DECL_FRIEND_P (t))
3943 return t;
3945 if (extra_warnings)
3947 cp_warning ("`static' missing from declaration of `%D'",
3949 warning_with_file_and_line (file, line,
3950 "previous declaration of `%s'",
3951 decl_as_string (t, 0));
3954 /* Now fix things so it'll do what they expect. */
3955 if (current_function_decl)
3956 TREE_PUBLIC (current_function_decl) = 0;
3958 /* Due to interference in memory reclamation (X may be
3959 obstack-deallocated at this point), we must guard against
3960 one really special case. [jason: This should be handled
3961 by start_function] */
3962 if (current_function_decl == x)
3963 current_function_decl = t;
3964 #endif
3965 if (TREE_CODE (t) == TYPE_DECL)
3966 SET_IDENTIFIER_TYPE_VALUE (name, TREE_TYPE (t));
3967 else if (TREE_CODE (t) == FUNCTION_DECL)
3968 check_default_args (t);
3970 return t;
3972 else if (DECL_MAIN_P (x))
3974 /* A redeclaration of main, but not a duplicate of the
3975 previous one.
3977 [basic.start.main]
3979 This function shall not be overloaded. */
3980 cp_error_at ("invalid redeclaration of `%D'", t);
3981 cp_error ("as `%D'", x);
3982 /* We don't try to push this declaration since that
3983 causes a crash. */
3984 return x;
3988 check_template_shadow (x);
3990 /* If this is a function conjured up by the backend, massage it
3991 so it looks friendly. */
3992 if (TREE_CODE (x) == FUNCTION_DECL
3993 && ! DECL_LANG_SPECIFIC (x))
3995 retrofit_lang_decl (x);
3996 DECL_LANGUAGE (x) = lang_c;
3999 if (TREE_CODE (x) == FUNCTION_DECL && ! DECL_FUNCTION_MEMBER_P (x))
4001 t = push_overloaded_decl (x, PUSH_LOCAL);
4002 if (t != x || DECL_LANGUAGE (x) == lang_c)
4003 return t;
4004 if (!namespace_bindings_p ())
4005 /* We do not need to create a binding for this name;
4006 push_overloaded_decl will have already done so if
4007 necessary. */
4008 need_new_binding = 0;
4010 else if (DECL_FUNCTION_TEMPLATE_P (x) && DECL_NAMESPACE_SCOPE_P (x))
4012 t = push_overloaded_decl (x, PUSH_GLOBAL);
4013 if (t == x)
4014 add_decl_to_level (x, NAMESPACE_LEVEL (CP_DECL_CONTEXT (t)));
4015 return t;
4018 /* If declaring a type as a typedef, copy the type (unless we're
4019 at line 0), and install this TYPE_DECL as the new type's typedef
4020 name. See the extensive comment in ../c-decl.c (pushdecl). */
4021 if (TREE_CODE (x) == TYPE_DECL)
4023 tree type = TREE_TYPE (x);
4024 if (DECL_SOURCE_LINE (x) == 0)
4026 if (TYPE_NAME (type) == 0)
4027 TYPE_NAME (type) = x;
4029 else if (type != error_mark_node && TYPE_NAME (type) != x
4030 /* We don't want to copy the type when all we're
4031 doing is making a TYPE_DECL for the purposes of
4032 inlining. */
4033 && (!TYPE_NAME (type)
4034 || TYPE_NAME (type) != DECL_ABSTRACT_ORIGIN (x)))
4036 push_obstacks (TYPE_OBSTACK (type), TYPE_OBSTACK (type));
4038 DECL_ORIGINAL_TYPE (x) = type;
4039 type = build_type_copy (type);
4040 TYPE_STUB_DECL (type) = TYPE_STUB_DECL (DECL_ORIGINAL_TYPE (x));
4041 TYPE_NAME (type) = x;
4042 TREE_TYPE (x) = type;
4044 pop_obstacks ();
4047 if (type != error_mark_node
4048 && TYPE_NAME (type)
4049 && TYPE_IDENTIFIER (type))
4050 set_identifier_type_value_with_scope (DECL_NAME (x), type,
4051 current_binding_level);
4055 /* Multiple external decls of the same identifier ought to match.
4057 We get warnings about inline functions where they are defined.
4058 We get warnings about other functions from push_overloaded_decl.
4060 Avoid duplicate warnings where they are used. */
4061 if (TREE_PUBLIC (x) && TREE_CODE (x) != FUNCTION_DECL)
4063 tree decl;
4065 if (IDENTIFIER_NAMESPACE_VALUE (name) != NULL_TREE
4066 && (DECL_EXTERNAL (IDENTIFIER_NAMESPACE_VALUE (name))
4067 || TREE_PUBLIC (IDENTIFIER_NAMESPACE_VALUE (name))))
4068 decl = IDENTIFIER_NAMESPACE_VALUE (name);
4069 else
4070 decl = NULL_TREE;
4072 if (decl
4073 /* If different sort of thing, we already gave an error. */
4074 && TREE_CODE (decl) == TREE_CODE (x)
4075 && !same_type_p (TREE_TYPE (x), TREE_TYPE (decl)))
4077 cp_pedwarn ("type mismatch with previous external decl", x);
4078 cp_pedwarn_at ("previous external decl of `%#D'", decl);
4082 /* This name is new in its binding level.
4083 Install the new declaration and return it. */
4084 if (namespace_bindings_p ())
4086 /* Install a global value. */
4088 /* If the first global decl has external linkage,
4089 warn if we later see static one. */
4090 if (IDENTIFIER_GLOBAL_VALUE (name) == NULL_TREE && TREE_PUBLIC (x))
4091 TREE_PUBLIC (name) = 1;
4093 if (!(TREE_CODE (x) == TYPE_DECL && DECL_ARTIFICIAL (x)
4094 && t != NULL_TREE))
4096 if (TREE_CODE (x) == FUNCTION_DECL)
4097 my_friendly_assert
4098 ((IDENTIFIER_GLOBAL_VALUE (name) == NULL_TREE)
4099 || (IDENTIFIER_GLOBAL_VALUE (name) == x), 378);
4100 SET_IDENTIFIER_NAMESPACE_VALUE (name, x);
4103 /* Don't forget if the function was used via an implicit decl. */
4104 if (IDENTIFIER_IMPLICIT_DECL (name)
4105 && TREE_USED (IDENTIFIER_IMPLICIT_DECL (name)))
4106 TREE_USED (x) = 1;
4108 /* Don't forget if its address was taken in that way. */
4109 if (IDENTIFIER_IMPLICIT_DECL (name)
4110 && TREE_ADDRESSABLE (IDENTIFIER_IMPLICIT_DECL (name)))
4111 TREE_ADDRESSABLE (x) = 1;
4113 /* Warn about mismatches against previous implicit decl. */
4114 if (IDENTIFIER_IMPLICIT_DECL (name) != NULL_TREE
4115 /* If this real decl matches the implicit, don't complain. */
4116 && ! (TREE_CODE (x) == FUNCTION_DECL
4117 && TREE_TYPE (TREE_TYPE (x)) == integer_type_node))
4118 cp_warning
4119 ("`%D' was previously implicitly declared to return `int'", x);
4121 /* If new decl is `static' and an `extern' was seen previously,
4122 warn about it. */
4123 if (x != NULL_TREE && t != NULL_TREE && decls_match (x, t))
4124 warn_extern_redeclared_static (x, t);
4126 else
4128 /* Here to install a non-global value. */
4129 tree oldlocal = IDENTIFIER_VALUE (name);
4130 tree oldglobal = IDENTIFIER_NAMESPACE_VALUE (name);
4132 if (need_new_binding)
4134 push_local_binding (name, x, 0);
4135 /* Because push_local_binding will hook X on to the
4136 current_binding_level's name list, we don't want to
4137 do that again below. */
4138 need_new_binding = 0;
4141 /* If this is a TYPE_DECL, push it into the type value slot. */
4142 if (TREE_CODE (x) == TYPE_DECL)
4143 set_identifier_type_value_with_scope (name, TREE_TYPE (x),
4144 current_binding_level);
4146 /* Clear out any TYPE_DECL shadowed by a namespace so that
4147 we won't think this is a type. The C struct hack doesn't
4148 go through namespaces. */
4149 if (TREE_CODE (x) == NAMESPACE_DECL)
4150 set_identifier_type_value_with_scope (name, NULL_TREE,
4151 current_binding_level);
4153 /* If this is an extern function declaration, see if we
4154 have a global definition or declaration for the function. */
4155 if (oldlocal == NULL_TREE
4156 && DECL_EXTERNAL (x)
4157 && oldglobal != NULL_TREE
4158 && TREE_CODE (x) == FUNCTION_DECL
4159 && TREE_CODE (oldglobal) == FUNCTION_DECL)
4161 /* We have one. Their types must agree. */
4162 if (decls_match (x, oldglobal))
4163 /* OK */;
4164 else
4166 cp_warning ("extern declaration of `%#D' doesn't match", x);
4167 cp_warning_at ("global declaration `%#D'", oldglobal);
4170 /* If we have a local external declaration,
4171 and no file-scope declaration has yet been seen,
4172 then if we later have a file-scope decl it must not be static. */
4173 if (oldlocal == NULL_TREE
4174 && oldglobal == NULL_TREE
4175 && DECL_EXTERNAL (x)
4176 && TREE_PUBLIC (x))
4177 TREE_PUBLIC (name) = 1;
4179 if (DECL_FROM_INLINE (x))
4180 /* Inline decls shadow nothing. */;
4182 /* Warn if shadowing an argument at the top level of the body. */
4183 else if (oldlocal != NULL_TREE && !DECL_EXTERNAL (x)
4184 && TREE_CODE (oldlocal) == PARM_DECL
4185 /* Don't complain if it's from an enclosing function. */
4186 && DECL_CONTEXT (oldlocal) == current_function_decl
4187 && TREE_CODE (x) != PARM_DECL)
4189 /* Go to where the parms should be and see if we
4190 find them there. */
4191 struct binding_level *b = current_binding_level->level_chain;
4193 if (cleanup_label)
4194 b = b->level_chain;
4196 /* ARM $8.3 */
4197 if (b->parm_flag == 1)
4198 cp_error ("declaration of `%#D' shadows a parameter", name);
4200 else if (warn_shadow && oldlocal != NULL_TREE
4201 && current_binding_level->is_for_scope
4202 && !DECL_DEAD_FOR_LOCAL (oldlocal))
4204 warning ("variable `%s' shadows local",
4205 IDENTIFIER_POINTER (name));
4206 cp_warning_at (" this is the shadowed declaration", oldlocal);
4208 /* Maybe warn if shadowing something else. */
4209 else if (warn_shadow && !DECL_EXTERNAL (x)
4210 /* No shadow warnings for internally generated vars. */
4211 && ! DECL_ARTIFICIAL (x)
4212 /* No shadow warnings for vars made for inlining. */
4213 && ! DECL_FROM_INLINE (x))
4215 const char *warnstring = NULL;
4217 if (oldlocal != NULL_TREE && TREE_CODE (oldlocal) == PARM_DECL)
4218 warnstring = "declaration of `%s' shadows a parameter";
4219 else if (IDENTIFIER_CLASS_VALUE (name) != NULL_TREE
4220 && current_class_ptr
4221 && !TREE_STATIC (name))
4222 warnstring = "declaration of `%s' shadows a member of `this'";
4223 else if (oldlocal != NULL_TREE)
4224 warnstring = "declaration of `%s' shadows previous local";
4225 else if (oldglobal != NULL_TREE)
4226 /* XXX shadow warnings in outer-more namespaces */
4227 warnstring = "declaration of `%s' shadows global declaration";
4229 if (warnstring)
4230 warning (warnstring, IDENTIFIER_POINTER (name));
4234 if (TREE_CODE (x) == FUNCTION_DECL)
4235 check_default_args (x);
4237 /* Keep count of variables in this level with incomplete type. */
4238 if (TREE_CODE (x) == VAR_DECL
4239 && TREE_TYPE (x) != error_mark_node
4240 && ((TYPE_SIZE (TREE_TYPE (x)) == NULL_TREE
4241 && PROMOTES_TO_AGGR_TYPE (TREE_TYPE (x), ARRAY_TYPE))
4242 /* RTTI TD entries are created while defining the type_info. */
4243 || (TYPE_LANG_SPECIFIC (TREE_TYPE (x))
4244 && TYPE_BEING_DEFINED (TREE_TYPE (x)))))
4245 current_binding_level->incomplete
4246 = tree_cons (NULL_TREE, x, current_binding_level->incomplete);
4249 if (need_new_binding)
4250 add_decl_to_level (x, current_binding_level);
4252 return x;
4255 /* Same as pushdecl, but define X in binding-level LEVEL. We rely on the
4256 caller to set DECL_CONTEXT properly. */
4258 static tree
4259 pushdecl_with_scope (x, level)
4260 tree x;
4261 struct binding_level *level;
4263 register struct binding_level *b;
4264 tree function_decl = current_function_decl;
4266 current_function_decl = NULL_TREE;
4267 if (level->parm_flag == 2)
4269 b = class_binding_level;
4270 class_binding_level = level;
4271 pushdecl_class_level (x);
4272 class_binding_level = b;
4274 else
4276 b = current_binding_level;
4277 current_binding_level = level;
4278 x = pushdecl (x);
4279 current_binding_level = b;
4281 current_function_decl = function_decl;
4282 return x;
4285 /* Like pushdecl, only it places X in the current namespace,
4286 if appropriate. */
4288 tree
4289 pushdecl_namespace_level (x)
4290 tree x;
4292 register struct binding_level *b = current_binding_level;
4293 register tree t;
4295 t = pushdecl_with_scope (x, NAMESPACE_LEVEL (current_namespace));
4297 /* Now, the type_shadowed stack may screw us. Munge it so it does
4298 what we want. */
4299 if (TREE_CODE (x) == TYPE_DECL)
4301 tree name = DECL_NAME (x);
4302 tree newval;
4303 tree *ptr = (tree *)0;
4304 for (; b != global_binding_level; b = b->level_chain)
4306 tree shadowed = b->type_shadowed;
4307 for (; shadowed; shadowed = TREE_CHAIN (shadowed))
4308 if (TREE_PURPOSE (shadowed) == name)
4310 ptr = &TREE_VALUE (shadowed);
4311 /* Can't break out of the loop here because sometimes
4312 a binding level will have duplicate bindings for
4313 PT names. It's gross, but I haven't time to fix it. */
4316 newval = TREE_TYPE (x);
4317 if (ptr == (tree *)0)
4319 /* @@ This shouldn't be needed. My test case "zstring.cc" trips
4320 up here if this is changed to an assertion. --KR */
4321 SET_IDENTIFIER_TYPE_VALUE (name, newval);
4323 else
4325 *ptr = newval;
4328 return t;
4331 /* Like pushdecl, only it places X in GLOBAL_BINDING_LEVEL,
4332 if appropriate. */
4334 tree
4335 pushdecl_top_level (x)
4336 tree x;
4338 tree cur_namespace = current_namespace;
4339 current_namespace = global_namespace;
4340 x = pushdecl_namespace_level (x);
4341 current_namespace = cur_namespace;
4342 return x;
4345 /* Make the declaration of X appear in CLASS scope. */
4347 void
4348 pushdecl_class_level (x)
4349 tree x;
4351 /* Don't use DECL_ASSEMBLER_NAME here! Everything that looks in class
4352 scope looks for the pre-mangled name. */
4353 register tree name;
4355 if (TREE_CODE (x) == OVERLOAD)
4356 x = OVL_CURRENT (x);
4357 name = DECL_NAME (x);
4359 if (name)
4361 push_class_level_binding (name, x);
4362 if (TREE_CODE (x) == TYPE_DECL)
4363 set_identifier_type_value (name, TREE_TYPE (x));
4365 else if (ANON_AGGR_TYPE_P (TREE_TYPE (x)))
4367 tree f;
4369 for (f = TYPE_FIELDS (TREE_TYPE (x));
4371 f = TREE_CHAIN (f))
4372 pushdecl_class_level (f);
4376 /* Enter DECL into the symbol table, if that's appropriate. Returns
4377 DECL, or a modified version thereof. */
4379 tree
4380 maybe_push_decl (decl)
4381 tree decl;
4383 tree type = TREE_TYPE (decl);
4385 /* Add this decl to the current binding level, but not if it comes
4386 from another scope, e.g. a static member variable. TEM may equal
4387 DECL or it may be a previous decl of the same name. */
4388 if ((TREE_CODE (decl) != PARM_DECL
4389 && DECL_CONTEXT (decl) != NULL_TREE
4390 /* Definitions of namespace members outside their namespace are
4391 possible. */
4392 && TREE_CODE (DECL_CONTEXT (decl)) != NAMESPACE_DECL)
4393 || (TREE_CODE (decl) == TEMPLATE_DECL && !namespace_bindings_p ())
4394 || TREE_CODE (type) == UNKNOWN_TYPE
4395 /* The declaration of a template specialization does not affect
4396 the functions available for overload resolution, so we do not
4397 call pushdecl. */
4398 || (TREE_CODE (decl) == FUNCTION_DECL
4399 && DECL_TEMPLATE_SPECIALIZATION (decl)))
4400 return decl;
4401 else
4402 return pushdecl (decl);
4405 #if 0
4406 /* This function is used to push the mangled decls for nested types into
4407 the appropriate scope. Previously pushdecl_top_level was used, but that
4408 is incorrect for members of local classes. */
4410 void
4411 pushdecl_nonclass_level (x)
4412 tree x;
4414 struct binding_level *b = current_binding_level;
4416 my_friendly_assert (b->parm_flag != 2, 180);
4418 #if 0
4419 /* Get out of template binding levels */
4420 while (b->pseudo_global)
4421 b = b->level_chain;
4422 #endif
4424 pushdecl_with_scope (x, b);
4426 #endif
4428 /* Make the declaration(s) of X appear in CLASS scope
4429 under the name NAME. */
4431 void
4432 push_class_level_binding (name, x)
4433 tree name;
4434 tree x;
4436 tree binding;
4437 /* The class_binding_level will be NULL if x is a template
4438 parameter name in a member template. */
4439 if (!class_binding_level)
4440 return;
4442 /* Make sure that this new member does not have the same name
4443 as a template parameter. */
4444 if (TYPE_BEING_DEFINED (current_class_type))
4445 check_template_shadow (x);
4447 /* If this declaration shadows a declaration from an enclosing
4448 class, then we will need to restore IDENTIFIER_CLASS_VALUE when
4449 we leave this class. Record the shadowed declaration here. */
4450 binding = IDENTIFIER_BINDING (name);
4451 if (binding
4452 && ((TREE_CODE (x) == OVERLOAD
4453 && BINDING_VALUE (binding)
4454 && is_overloaded_fn (BINDING_VALUE (binding)))
4455 || INHERITED_VALUE_BINDING_P (binding)))
4457 tree shadow;
4458 tree old_decl;
4460 /* If the old binding was from a base class, and was for a tag
4461 name, slide it over to make room for the new binding. The
4462 old binding is still visible if explicitly qualified with a
4463 class-key. */
4464 if (INHERITED_VALUE_BINDING_P (binding)
4465 && BINDING_VALUE (binding)
4466 && TREE_CODE (BINDING_VALUE (binding)) == TYPE_DECL
4467 && DECL_ARTIFICIAL (BINDING_VALUE (binding))
4468 && !(TREE_CODE (x) == TYPE_DECL && DECL_ARTIFICIAL (x)))
4470 old_decl = BINDING_TYPE (binding);
4471 BINDING_TYPE (binding) = BINDING_VALUE (binding);
4472 BINDING_VALUE (binding) = NULL_TREE;
4473 INHERITED_VALUE_BINDING_P (binding) = 0;
4475 else
4476 old_decl = BINDING_VALUE (binding);
4478 /* There was already a binding for X containing fewer
4479 functions than are named in X. Find the previous
4480 declaration of X on the class-shadowed list, and update it. */
4481 for (shadow = class_binding_level->class_shadowed;
4482 shadow;
4483 shadow = TREE_CHAIN (shadow))
4484 if (TREE_PURPOSE (shadow) == name
4485 && TREE_TYPE (shadow) == old_decl)
4487 BINDING_VALUE (binding) = x;
4488 INHERITED_VALUE_BINDING_P (binding) = 0;
4489 TREE_TYPE (shadow) = x;
4490 return;
4494 /* If we didn't replace an existing binding, put the binding on the
4495 stack of bindings for the identifier, and update
4496 IDENTIFIER_CLASS_VALUE. */
4497 if (push_class_binding (name, x))
4499 push_cache_obstack ();
4500 class_binding_level->class_shadowed
4501 = tree_cons (name, IDENTIFIER_CLASS_VALUE (name),
4502 class_binding_level->class_shadowed);
4503 pop_obstacks ();
4504 /* Record the value we are binding NAME to so that we can know
4505 what to pop later. */
4506 TREE_TYPE (class_binding_level->class_shadowed) = x;
4510 /* Insert another USING_DECL into the current binding level,
4511 returning this declaration. If this is a redeclaration,
4512 do nothing and return NULL_TREE. */
4514 tree
4515 push_using_decl (scope, name)
4516 tree scope;
4517 tree name;
4519 tree decl;
4521 my_friendly_assert (TREE_CODE (scope) == NAMESPACE_DECL, 383);
4522 my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 384);
4523 for (decl = current_binding_level->usings; decl; decl = TREE_CHAIN (decl))
4524 if (DECL_INITIAL (decl) == scope && DECL_NAME (decl) == name)
4525 break;
4526 if (decl)
4527 return NULL_TREE;
4528 decl = build_lang_decl (USING_DECL, name, void_type_node);
4529 DECL_INITIAL (decl) = scope;
4530 TREE_CHAIN (decl) = current_binding_level->usings;
4531 current_binding_level->usings = decl;
4532 return decl;
4535 /* Add namespace to using_directives. Return NULL_TREE if nothing was
4536 changed (i.e. there was already a directive), or the fresh
4537 TREE_LIST otherwise. */
4539 tree
4540 push_using_directive (used)
4541 tree used;
4543 tree ud = current_binding_level->using_directives;
4544 tree iter, ancestor;
4546 /* Check if we already have this. */
4547 if (purpose_member (used, ud) != NULL_TREE)
4548 return NULL_TREE;
4550 /* Recursively add all namespaces used. */
4551 for (iter = DECL_NAMESPACE_USING (used); iter; iter = TREE_CHAIN (iter))
4552 push_using_directive (TREE_PURPOSE (iter));
4554 ancestor = namespace_ancestor (current_decl_namespace (), used);
4555 ud = current_binding_level->using_directives;
4556 ud = perm_tree_cons (used, ancestor, ud);
4557 current_binding_level->using_directives = ud;
4558 return ud;
4561 /* DECL is a FUNCTION_DECL for a non-member function, which may have
4562 other definitions already in place. We get around this by making
4563 the value of the identifier point to a list of all the things that
4564 want to be referenced by that name. It is then up to the users of
4565 that name to decide what to do with that list.
4567 DECL may also be a TEMPLATE_DECL, with a FUNCTION_DECL in its DECL_RESULT
4568 slot. It is dealt with the same way.
4570 FLAGS is a bitwise-or of the following values:
4571 PUSH_LOCAL: Bind DECL in the current scope, rather than at
4572 namespace scope.
4573 PUSH_USING: DECL is being pushed as the result of a using
4574 declaration.
4576 The value returned may be a previous declaration if we guessed wrong
4577 about what language DECL should belong to (C or C++). Otherwise,
4578 it's always DECL (and never something that's not a _DECL). */
4580 tree
4581 push_overloaded_decl (decl, flags)
4582 tree decl;
4583 int flags;
4585 tree name = DECL_NAME (decl);
4586 tree old;
4587 tree new_binding;
4588 int doing_global = (namespace_bindings_p () || !(flags & PUSH_LOCAL));
4590 if (doing_global)
4591 old = namespace_binding (name, DECL_CONTEXT (decl));
4592 else
4593 old = lookup_name_current_level (name);
4595 if (old)
4597 if (TREE_CODE (old) == TYPE_DECL && DECL_ARTIFICIAL (old))
4599 tree t = TREE_TYPE (old);
4600 if (IS_AGGR_TYPE (t) && warn_shadow
4601 && (! DECL_IN_SYSTEM_HEADER (decl)
4602 || ! DECL_IN_SYSTEM_HEADER (old)))
4603 cp_warning ("`%#D' hides constructor for `%#T'", decl, t);
4604 old = NULL_TREE;
4606 else if (is_overloaded_fn (old))
4608 tree tmp;
4610 for (tmp = old; tmp; tmp = OVL_NEXT (tmp))
4612 tree fn = OVL_CURRENT (tmp);
4614 if (TREE_CODE (tmp) == OVERLOAD && OVL_USED (tmp)
4615 && !(flags & PUSH_USING)
4616 && compparms (TYPE_ARG_TYPES (TREE_TYPE (fn)),
4617 TYPE_ARG_TYPES (TREE_TYPE (decl))))
4618 cp_error ("`%#D' conflicts with previous using declaration `%#D'",
4619 decl, fn);
4621 if (duplicate_decls (decl, fn))
4622 return fn;
4625 else
4627 cp_error_at ("previous non-function declaration `%#D'", old);
4628 cp_error ("conflicts with function declaration `%#D'", decl);
4629 return decl;
4633 if (old || TREE_CODE (decl) == TEMPLATE_DECL)
4635 if (old && TREE_CODE (old) != OVERLOAD)
4636 new_binding = ovl_cons (decl, ovl_cons (old, NULL_TREE));
4637 else
4638 new_binding = ovl_cons (decl, old);
4639 if (flags & PUSH_USING)
4640 OVL_USED (new_binding) = 1;
4642 else
4643 /* NAME is not ambiguous. */
4644 new_binding = decl;
4646 if (doing_global)
4647 set_namespace_binding (name, current_namespace, new_binding);
4648 else
4650 /* We only create an OVERLOAD if there was a previous binding at
4651 this level, or if decl is a template. In the former case, we
4652 need to remove the old binding and replace it with the new
4653 binding. We must also run through the NAMES on the binding
4654 level where the name was bound to update the chain. */
4656 if (TREE_CODE (new_binding) == OVERLOAD && old)
4658 tree *d;
4660 for (d = &BINDING_LEVEL (IDENTIFIER_BINDING (name))->names;
4662 d = &TREE_CHAIN (*d))
4663 if (*d == old
4664 || (TREE_CODE (*d) == TREE_LIST
4665 && TREE_VALUE (*d) == old))
4667 if (TREE_CODE (*d) == TREE_LIST)
4668 /* Just replace the old binding with the new. */
4669 TREE_VALUE (*d) = new_binding;
4670 else
4671 /* Build a TREE_LIST to wrap the OVERLOAD. */
4672 *d = build_tree_list (NULL_TREE, new_binding);
4674 /* And update the CPLUS_BINDING node. */
4675 BINDING_VALUE (IDENTIFIER_BINDING (name))
4676 = new_binding;
4677 return decl;
4680 /* We should always find a previous binding in this case. */
4681 my_friendly_abort (0);
4684 /* Install the new binding. */
4685 push_local_binding (name, new_binding, flags);
4688 return decl;
4691 /* Generate an implicit declaration for identifier FUNCTIONID
4692 as a function of type int (). Print a warning if appropriate. */
4694 tree
4695 implicitly_declare (functionid)
4696 tree functionid;
4698 register tree decl;
4699 int temp = allocation_temporary_p ();
4701 push_obstacks_nochange ();
4703 /* Save the decl permanently so we can warn if definition follows.
4704 In ANSI C, warn_implicit is usually false, so the saves little space.
4705 But in C++, it's usually true, hence the extra code. */
4706 if (temp && (! warn_implicit || toplevel_bindings_p ()))
4707 end_temporary_allocation ();
4709 /* We used to reuse an old implicit decl here,
4710 but this loses with inline functions because it can clobber
4711 the saved decl chains. */
4712 decl = build_lang_decl (FUNCTION_DECL, functionid, default_function_type);
4714 DECL_EXTERNAL (decl) = 1;
4715 TREE_PUBLIC (decl) = 1;
4717 /* ANSI standard says implicit declarations are in the innermost block.
4718 So we record the decl in the standard fashion. */
4719 pushdecl (decl);
4720 rest_of_decl_compilation (decl, NULL_PTR, 0, 0);
4722 if (warn_implicit
4723 /* Only one warning per identifier. */
4724 && IDENTIFIER_IMPLICIT_DECL (functionid) == NULL_TREE)
4726 cp_pedwarn ("implicit declaration of function `%#D'", decl);
4729 SET_IDENTIFIER_IMPLICIT_DECL (functionid, decl);
4731 pop_obstacks ();
4733 return decl;
4736 /* Return zero if the declaration NEWDECL is valid
4737 when the declaration OLDDECL (assumed to be for the same name)
4738 has already been seen.
4739 Otherwise return an error message format string with a %s
4740 where the identifier should go. */
4742 static const char *
4743 redeclaration_error_message (newdecl, olddecl)
4744 tree newdecl, olddecl;
4746 if (TREE_CODE (newdecl) == TYPE_DECL)
4748 /* Because C++ can put things into name space for free,
4749 constructs like "typedef struct foo { ... } foo"
4750 would look like an erroneous redeclaration. */
4751 if (same_type_p (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
4752 return 0;
4753 else
4754 return "redefinition of `%#D'";
4756 else if (TREE_CODE (newdecl) == FUNCTION_DECL)
4758 /* If this is a pure function, its olddecl will actually be
4759 the original initialization to `0' (which we force to call
4760 abort()). Don't complain about redefinition in this case. */
4761 if (DECL_LANG_SPECIFIC (olddecl) && DECL_ABSTRACT_VIRTUAL_P (olddecl))
4762 return 0;
4764 /* If both functions come from different namespaces, this is not
4765 a redeclaration - this is a conflict with a used function. */
4766 if (DECL_NAMESPACE_SCOPE_P (olddecl)
4767 && DECL_CONTEXT (olddecl) != DECL_CONTEXT (newdecl))
4768 return "`%D' conflicts with used function";
4770 /* We'll complain about linkage mismatches in
4771 warn_extern_redeclared_static. */
4773 /* Defining the same name twice is no good. */
4774 if (DECL_INITIAL (olddecl) != NULL_TREE
4775 && DECL_INITIAL (newdecl) != NULL_TREE)
4777 if (DECL_NAME (olddecl) == NULL_TREE)
4778 return "`%#D' not declared in class";
4779 else
4780 return "redefinition of `%#D'";
4782 return 0;
4784 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
4786 if ((TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
4787 && DECL_INITIAL (DECL_TEMPLATE_RESULT (newdecl))
4788 && DECL_INITIAL (DECL_TEMPLATE_RESULT (olddecl)))
4789 || (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL
4790 && TYPE_SIZE (TREE_TYPE (newdecl))
4791 && TYPE_SIZE (TREE_TYPE (olddecl))))
4792 return "redefinition of `%#D'";
4793 return 0;
4795 else if (toplevel_bindings_p ())
4797 /* Objects declared at top level: */
4798 /* If at least one is a reference, it's ok. */
4799 if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl))
4800 return 0;
4801 /* Reject two definitions. */
4802 return "redefinition of `%#D'";
4804 else
4806 /* Objects declared with block scope: */
4807 /* Reject two definitions, and reject a definition
4808 together with an external reference. */
4809 if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl)))
4810 return "redeclaration of `%#D'";
4811 return 0;
4815 /* Create a new label, named ID. */
4817 static tree
4818 make_label_decl (id, local_p)
4819 tree id;
4820 int local_p;
4822 tree decl;
4824 if (building_stmt_tree ())
4825 push_permanent_obstack ();
4826 decl = build_decl (LABEL_DECL, id, void_type_node);
4827 if (building_stmt_tree ())
4828 pop_obstacks ();
4829 else
4830 /* Make sure every label has an rtx. */
4831 label_rtx (decl);
4833 DECL_CONTEXT (decl) = current_function_decl;
4834 DECL_MODE (decl) = VOIDmode;
4835 C_DECLARED_LABEL_FLAG (decl) = local_p;
4837 /* Say where one reference is to the label, for the sake of the
4838 error if it is not defined. */
4839 DECL_SOURCE_LINE (decl) = lineno;
4840 DECL_SOURCE_FILE (decl) = input_filename;
4842 /* Record the fact that this identifier is bound to this label. */
4843 SET_IDENTIFIER_LABEL_VALUE (id, decl);
4845 /* Record this label on the list of used labels so that we can check
4846 at the end of the function to see whether or not the label was
4847 actually defined. */
4848 if ((named_label_uses == NULL || named_label_uses->label_decl != decl)
4849 && (named_label_uses == NULL
4850 || named_label_uses->names_in_scope != current_binding_level->names
4851 || named_label_uses->label_decl != decl))
4853 struct named_label_list *new_ent;
4854 new_ent
4855 = (struct named_label_list*)oballoc (sizeof (struct named_label_list));
4856 new_ent->label_decl = decl;
4857 new_ent->names_in_scope = current_binding_level->names;
4858 new_ent->binding_level = current_binding_level;
4859 new_ent->lineno_o_goto = lineno;
4860 new_ent->filename_o_goto = input_filename;
4861 new_ent->next = named_label_uses;
4862 named_label_uses = new_ent;
4865 return decl;
4868 /* Look for a label named ID in the current function. If one cannot
4869 be found, create one. (We keep track of used, but undefined,
4870 labels, and complain about them at the end of a function.) */
4872 tree
4873 lookup_label (id)
4874 tree id;
4876 tree decl;
4878 /* You can't use labels at global scope. */
4879 if (current_function_decl == NULL_TREE)
4881 error ("label `%s' referenced outside of any function",
4882 IDENTIFIER_POINTER (id));
4883 return NULL_TREE;
4886 /* See if we've already got this label. */
4887 decl = IDENTIFIER_LABEL_VALUE (id);
4888 if (decl != NULL_TREE && DECL_CONTEXT (decl) == current_function_decl)
4889 return decl;
4891 /* Record this label on the list of labels used in this function.
4892 We do this before calling make_label_decl so that we get the
4893 IDENTIFIER_LABEL_VALUE before the new label is declared. */
4894 named_labels = tree_cons (IDENTIFIER_LABEL_VALUE (id), NULL_TREE,
4895 named_labels);
4896 /* We need a new label. */
4897 decl = make_label_decl (id, /*local_p=*/0);
4898 /* Now fill in the information we didn't have before. */
4899 TREE_VALUE (named_labels) = decl;
4901 return decl;
4904 /* Declare a local label named ID. */
4906 tree
4907 declare_local_label (id)
4908 tree id;
4910 tree decl;
4912 /* Add a new entry to the SHADOWED_LABELS list so that when we leave
4913 this scope we can restore the old value of
4914 IDENTIFIER_TYPE_VALUE. */
4915 current_binding_level->shadowed_labels
4916 = tree_cons (IDENTIFIER_LABEL_VALUE (id), NULL_TREE,
4917 current_binding_level->shadowed_labels);
4918 /* Look for the label. */
4919 decl = make_label_decl (id, /*local_p=*/1);
4920 /* Now fill in the information we didn't have before. */
4921 TREE_VALUE (current_binding_level->shadowed_labels) = decl;
4923 return decl;
4926 /* Define a label, specifying the location in the source file.
4927 Return the LABEL_DECL node for the label, if the definition is valid.
4928 Otherwise return 0. */
4930 tree
4931 define_label (filename, line, name)
4932 char *filename;
4933 int line;
4934 tree name;
4936 tree decl = lookup_label (name);
4938 /* After labels, make any new cleanups go into their
4939 own new (temporary) binding contour. */
4940 current_binding_level->more_cleanups_ok = 0;
4942 if (name == get_identifier ("wchar_t"))
4943 cp_pedwarn ("label named wchar_t");
4945 if (DECL_INITIAL (decl) != NULL_TREE)
4947 cp_error ("duplicate label `%D'", decl);
4948 return 0;
4950 else
4952 struct named_label_list *uses, *prev;
4953 int identified = 0;
4954 int saw_eh = 0;
4956 /* Mark label as having been defined. */
4957 DECL_INITIAL (decl) = error_mark_node;
4958 /* Say where in the source. */
4959 DECL_SOURCE_FILE (decl) = filename;
4960 DECL_SOURCE_LINE (decl) = line;
4962 prev = NULL;
4963 uses = named_label_uses;
4964 while (uses != NULL)
4965 if (uses->label_decl == decl)
4967 struct binding_level *b = current_binding_level;
4968 while (b)
4970 tree new_decls = b->names;
4971 tree old_decls = (b == uses->binding_level)
4972 ? uses->names_in_scope : NULL_TREE;
4973 while (new_decls != old_decls)
4975 if (TREE_CODE (new_decls) == VAR_DECL
4976 /* Don't complain about crossing initialization
4977 of internal entities. They can't be accessed,
4978 and they should be cleaned up
4979 by the time we get to the label. */
4980 && ! DECL_ARTIFICIAL (new_decls)
4981 && !(DECL_INITIAL (new_decls) == NULL_TREE
4982 && pod_type_p (TREE_TYPE (new_decls))))
4984 /* This is really only important if we're crossing
4985 an initialization. The POD stuff is just
4986 pedantry; why should it matter if the class
4987 contains a field of pointer to member type? */
4988 int problem = (DECL_INITIAL (new_decls)
4989 || (TYPE_NEEDS_CONSTRUCTING
4990 (TREE_TYPE (new_decls))));
4992 if (! identified)
4994 if (problem)
4996 cp_error ("jump to label `%D'", decl);
4997 error_with_file_and_line
4998 (uses->filename_o_goto,
4999 uses->lineno_o_goto, " from here");
5001 else
5003 cp_pedwarn ("jump to label `%D'", decl);
5004 pedwarn_with_file_and_line
5005 (uses->filename_o_goto,
5006 uses->lineno_o_goto, " from here");
5008 identified = 1;
5011 if (problem)
5012 cp_error_at (" crosses initialization of `%#D'",
5013 new_decls);
5014 else
5015 cp_pedwarn_at (" enters scope of non-POD `%#D'",
5016 new_decls);
5018 new_decls = TREE_CHAIN (new_decls);
5020 if (b == uses->binding_level)
5021 break;
5022 if (b->eh_region && ! saw_eh)
5024 if (! identified)
5026 cp_error ("jump to label `%D'", decl);
5027 error_with_file_and_line
5028 (uses->filename_o_goto,
5029 uses->lineno_o_goto, " from here");
5030 identified = 1;
5032 error (" enters exception handling block");
5033 saw_eh = 1;
5035 b = b->level_chain;
5038 if (prev != NULL)
5039 prev->next = uses->next;
5040 else
5041 named_label_uses = uses->next;
5043 uses = uses->next;
5045 else
5047 prev = uses;
5048 uses = uses->next;
5050 current_function_return_value = NULL_TREE;
5051 return decl;
5055 struct cp_switch
5057 struct binding_level *level;
5058 struct cp_switch *next;
5061 static struct cp_switch *switch_stack;
5063 void
5064 push_switch ()
5066 struct cp_switch *p
5067 = (struct cp_switch *) oballoc (sizeof (struct cp_switch));
5068 p->level = current_binding_level;
5069 p->next = switch_stack;
5070 switch_stack = p;
5073 void
5074 pop_switch ()
5076 switch_stack = switch_stack->next;
5079 /* Same, but for CASE labels. If DECL is NULL_TREE, it's the default. */
5080 /* XXX Note decl is never actually used. (bpk) */
5082 void
5083 define_case_label ()
5085 tree cleanup = last_cleanup_this_contour ();
5086 struct binding_level *b = current_binding_level;
5087 int identified = 0;
5089 if (cleanup)
5091 static int explained = 0;
5092 cp_warning_at ("destructor needed for `%#D'", TREE_PURPOSE (cleanup));
5093 warning ("where case label appears here");
5094 if (!explained)
5096 warning ("(enclose actions of previous case statements requiring");
5097 warning ("destructors in their own binding contours.)");
5098 explained = 1;
5102 for (; b && b != switch_stack->level; b = b->level_chain)
5104 tree new_decls = b->names;
5105 for (; new_decls; new_decls = TREE_CHAIN (new_decls))
5107 if (TREE_CODE (new_decls) == VAR_DECL
5108 /* Don't complain about crossing initialization
5109 of internal entities. They can't be accessed,
5110 and they should be cleaned up
5111 by the time we get to the label. */
5112 && ! DECL_ARTIFICIAL (new_decls)
5113 && ((DECL_INITIAL (new_decls) != NULL_TREE
5114 && DECL_INITIAL (new_decls) != error_mark_node)
5115 || TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (new_decls))))
5117 if (! identified)
5118 error ("jump to case label");
5119 identified = 1;
5120 cp_error_at (" crosses initialization of `%#D'",
5121 new_decls);
5126 /* After labels, make any new cleanups go into their
5127 own new (temporary) binding contour. */
5129 current_binding_level->more_cleanups_ok = 0;
5130 current_function_return_value = NULL_TREE;
5133 /* Return the list of declarations of the current level.
5134 Note that this list is in reverse order unless/until
5135 you nreverse it; and when you do nreverse it, you must
5136 store the result back using `storedecls' or you will lose. */
5138 tree
5139 getdecls ()
5141 return current_binding_level->names;
5144 /* Return the list of type-tags (for structs, etc) of the current level. */
5146 tree
5147 gettags ()
5149 return current_binding_level->tags;
5152 /* Store the list of declarations of the current level.
5153 This is done for the parameter declarations of a function being defined,
5154 after they are modified in the light of any missing parameters. */
5156 static void
5157 storedecls (decls)
5158 tree decls;
5160 current_binding_level->names = decls;
5163 /* Similarly, store the list of tags of the current level. */
5165 void
5166 storetags (tags)
5167 tree tags;
5169 current_binding_level->tags = tags;
5172 /* Given NAME, an IDENTIFIER_NODE,
5173 return the structure (or union or enum) definition for that name.
5174 Searches binding levels from BINDING_LEVEL up to the global level.
5175 If THISLEVEL_ONLY is nonzero, searches only the specified context
5176 (but skips any tag-transparent contexts to find one that is
5177 meaningful for tags).
5178 FORM says which kind of type the caller wants;
5179 it is RECORD_TYPE or UNION_TYPE or ENUMERAL_TYPE.
5180 If the wrong kind of type is found, and it's not a template, an error is
5181 reported. */
5183 static tree
5184 lookup_tag (form, name, binding_level, thislevel_only)
5185 enum tree_code form;
5186 tree name;
5187 struct binding_level *binding_level;
5188 int thislevel_only;
5190 register struct binding_level *level;
5191 /* Non-zero if, we should look past a pseudo-global level, even if
5192 THISLEVEL_ONLY. */
5193 int allow_pseudo_global = 1;
5195 for (level = binding_level; level; level = level->level_chain)
5197 register tree tail;
5198 if (ANON_AGGRNAME_P (name))
5199 for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
5201 /* There's no need for error checking here, because
5202 anon names are unique throughout the compilation. */
5203 if (TYPE_IDENTIFIER (TREE_VALUE (tail)) == name)
5204 return TREE_VALUE (tail);
5206 else if (level->namespace_p)
5207 /* Do namespace lookup. */
5208 for (tail = current_namespace; 1; tail = CP_DECL_CONTEXT (tail))
5210 tree old = binding_for_name (name, tail);
5212 /* If we just skipped past a pseudo global level, even
5213 though THISLEVEL_ONLY, and we find a template class
5214 declaration, then we use the _TYPE node for the
5215 template. See the example below. */
5216 if (thislevel_only && !allow_pseudo_global
5217 && old && BINDING_VALUE (old)
5218 && DECL_CLASS_TEMPLATE_P (BINDING_VALUE (old)))
5219 old = TREE_TYPE (BINDING_VALUE (old));
5220 else
5221 old = BINDING_TYPE (old);
5223 /* If it has an original type, it is a typedef, and we
5224 should not return it. */
5225 if (old && DECL_ORIGINAL_TYPE (TYPE_NAME (old)))
5226 old = NULL_TREE;
5227 if (old && TREE_CODE (old) != form
5228 && !(form != ENUMERAL_TYPE && TREE_CODE (old) == TEMPLATE_DECL))
5230 cp_error ("`%#D' redeclared as %C", old, form);
5231 return NULL_TREE;
5233 if (old)
5234 return old;
5235 if (thislevel_only || tail == global_namespace)
5236 return NULL_TREE;
5238 else
5239 for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
5241 if (TREE_PURPOSE (tail) == name)
5243 enum tree_code code = TREE_CODE (TREE_VALUE (tail));
5244 /* Should tighten this up; it'll probably permit
5245 UNION_TYPE and a struct template, for example. */
5246 if (code != form
5247 && !(form != ENUMERAL_TYPE && code == TEMPLATE_DECL))
5249 /* Definition isn't the kind we were looking for. */
5250 cp_error ("`%#D' redeclared as %C", TREE_VALUE (tail),
5251 form);
5252 return NULL_TREE;
5254 return TREE_VALUE (tail);
5257 if (thislevel_only && ! level->tag_transparent)
5259 if (level->pseudo_global && allow_pseudo_global)
5261 /* We must deal with cases like this:
5263 template <class T> struct S;
5264 template <class T> struct S {};
5266 When looking up `S', for the second declaration, we
5267 would like to find the first declaration. But, we
5268 are in the pseudo-global level created for the
5269 template parameters, rather than the (surrounding)
5270 namespace level. Thus, we keep going one more level,
5271 even though THISLEVEL_ONLY is non-zero. */
5272 allow_pseudo_global = 0;
5273 continue;
5275 else
5276 return NULL_TREE;
5279 return NULL_TREE;
5282 #if 0
5283 void
5284 set_current_level_tags_transparency (tags_transparent)
5285 int tags_transparent;
5287 current_binding_level->tag_transparent = tags_transparent;
5289 #endif
5291 /* Given a type, find the tag that was defined for it and return the tag name.
5292 Otherwise return 0. However, the value can never be 0
5293 in the cases in which this is used.
5295 C++: If NAME is non-zero, this is the new name to install. This is
5296 done when replacing anonymous tags with real tag names. */
5298 static tree
5299 lookup_tag_reverse (type, name)
5300 tree type;
5301 tree name;
5303 register struct binding_level *level;
5305 for (level = current_binding_level; level; level = level->level_chain)
5307 register tree tail;
5308 for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
5310 if (TREE_VALUE (tail) == type)
5312 if (name)
5313 TREE_PURPOSE (tail) = name;
5314 return TREE_PURPOSE (tail);
5318 return NULL_TREE;
5321 /* Look up NAME in the NAMESPACE. */
5323 tree
5324 lookup_namespace_name (namespace, name)
5325 tree namespace, name;
5327 struct tree_binding _b;
5328 tree val;
5329 tree template_id = NULL_TREE;
5331 my_friendly_assert (TREE_CODE (namespace) == NAMESPACE_DECL, 370);
5333 if (TREE_CODE (name) == NAMESPACE_DECL)
5334 /* This happens for A::B<int> when B is a namespace. */
5335 return name;
5336 else if (TREE_CODE (name) == TEMPLATE_DECL)
5338 /* This happens for A::B where B is a template, and there are no
5339 template arguments. */
5340 cp_error ("invalid use of `%D'", name);
5341 return error_mark_node;
5344 namespace = ORIGINAL_NAMESPACE (namespace);
5346 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
5348 template_id = name;
5349 name = TREE_OPERAND (name, 0);
5350 if (TREE_CODE (name) == OVERLOAD)
5351 name = DECL_NAME (OVL_CURRENT (name));
5352 else if (TREE_CODE_CLASS (TREE_CODE (name)) == 'd')
5353 name = DECL_NAME (name);
5356 my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 373);
5358 val = binding_init (&_b);
5359 if (!qualified_lookup_using_namespace (name, namespace, val, 0))
5360 return error_mark_node;
5362 if (BINDING_VALUE (val))
5364 val = BINDING_VALUE (val);
5366 if (template_id)
5368 if (DECL_CLASS_TEMPLATE_P (val))
5369 val = lookup_template_class (val,
5370 TREE_OPERAND (template_id, 1),
5371 /*in_decl=*/NULL_TREE,
5372 /*context=*/NULL_TREE,
5373 /*entering_scope=*/0);
5374 else if (DECL_FUNCTION_TEMPLATE_P (val)
5375 || TREE_CODE (val) == OVERLOAD)
5376 val = lookup_template_function (val,
5377 TREE_OPERAND (template_id, 1));
5378 else
5380 cp_error ("`%D::%D' is not a template",
5381 namespace, name);
5382 return error_mark_node;
5386 /* If we have a single function from a using decl, pull it out. */
5387 if (TREE_CODE (val) == OVERLOAD && ! really_overloaded_fn (val))
5388 val = OVL_FUNCTION (val);
5389 return val;
5392 cp_error ("`%D' undeclared in namespace `%D'", name, namespace);
5393 return error_mark_node;
5396 /* Hash a TYPENAME_TYPE. K is really of type `tree'. */
5398 static unsigned long
5399 typename_hash (k)
5400 hash_table_key k;
5402 unsigned long hash;
5403 tree t;
5405 t = (tree) k;
5406 hash = (((unsigned long) TYPE_CONTEXT (t))
5407 ^ ((unsigned long) DECL_NAME (TYPE_NAME (t))));
5409 return hash;
5412 /* Compare two TYPENAME_TYPEs. K1 and K2 are really of type `tree'. */
5414 static boolean
5415 typename_compare (k1, k2)
5416 hash_table_key k1;
5417 hash_table_key k2;
5419 tree t1;
5420 tree t2;
5421 tree d1;
5422 tree d2;
5424 t1 = (tree) k1;
5425 t2 = (tree) k2;
5426 d1 = TYPE_NAME (t1);
5427 d2 = TYPE_NAME (t2);
5429 return (DECL_NAME (d1) == DECL_NAME (d2)
5430 && same_type_p (TYPE_CONTEXT (t1), TYPE_CONTEXT (t2))
5431 && ((TREE_TYPE (t1) != NULL_TREE)
5432 == (TREE_TYPE (t2) != NULL_TREE))
5433 && same_type_p (TREE_TYPE (t1), TREE_TYPE (t2))
5434 && TYPENAME_TYPE_FULLNAME (t1) == TYPENAME_TYPE_FULLNAME (t2));
5437 /* Build a TYPENAME_TYPE. If the type is `typename T::t', CONTEXT is
5438 the type of `T', NAME is the IDENTIFIER_NODE for `t'. If BASE_TYPE
5439 is non-NULL, this type is being created by the implicit typename
5440 extension, and BASE_TYPE is a type named `t' in some base class of
5441 `T' which depends on template parameters.
5443 Returns the new TYPENAME_TYPE. */
5445 tree
5446 build_typename_type (context, name, fullname, base_type)
5447 tree context;
5448 tree name;
5449 tree fullname;
5450 tree base_type;
5452 tree t;
5453 tree d;
5454 struct hash_entry* e;
5456 static struct hash_table ht;
5458 push_obstacks (&permanent_obstack, &permanent_obstack);
5460 if (!ht.table
5461 && !hash_table_init (&ht, &hash_newfunc, &typename_hash,
5462 &typename_compare))
5463 fatal ("virtual memory exhausted");
5465 /* The FULLNAME needs to exist for the life of the hash table, i.e.,
5466 for the entire compilation. */
5467 if (!TREE_PERMANENT (fullname))
5468 fullname = copy_to_permanent (fullname);
5470 /* Build the TYPENAME_TYPE. */
5471 t = make_lang_type (TYPENAME_TYPE);
5472 TYPE_CONTEXT (t) = FROB_CONTEXT (context);
5473 TYPENAME_TYPE_FULLNAME (t) = fullname;
5474 TREE_TYPE (t) = base_type;
5476 /* Build the corresponding TYPE_DECL. */
5477 d = build_decl (TYPE_DECL, name, t);
5478 TYPE_NAME (TREE_TYPE (d)) = d;
5479 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
5480 DECL_CONTEXT (d) = FROB_CONTEXT (context);
5481 DECL_ARTIFICIAL (d) = 1;
5483 /* See if we already have this type. */
5484 e = hash_lookup (&ht, t, /*create=*/false, /*copy=*/0);
5485 if (e)
5487 /* This will free not only TREE_TYPE, but the lang-specific data
5488 and the TYPE_DECL as well. */
5489 obstack_free (&permanent_obstack, t);
5490 t = (tree) e->key;
5492 else
5493 /* Insert the type into the table. */
5494 hash_lookup (&ht, t, /*create=*/true, /*copy=*/0);
5496 pop_obstacks ();
5498 return t;
5501 tree
5502 make_typename_type (context, name)
5503 tree context, name;
5505 tree fullname;
5507 if (TREE_CODE_CLASS (TREE_CODE (name)) == 't')
5509 if (!(TYPE_LANG_SPECIFIC (name)
5510 && (CLASSTYPE_IS_TEMPLATE (name)
5511 || CLASSTYPE_USE_TEMPLATE (name))))
5512 name = TYPE_IDENTIFIER (name);
5513 else
5514 /* Create a TEMPLATE_ID_EXPR for the type. */
5515 name = build_nt (TEMPLATE_ID_EXPR,
5516 CLASSTYPE_TI_TEMPLATE (name),
5517 CLASSTYPE_TI_ARGS (name));
5519 else if (TREE_CODE (name) == TYPE_DECL)
5520 name = DECL_NAME (name);
5522 fullname = name;
5524 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
5526 name = TREE_OPERAND (name, 0);
5527 if (TREE_CODE (name) == TEMPLATE_DECL)
5528 name = TREE_OPERAND (fullname, 0) = DECL_NAME (name);
5530 if (TREE_CODE (name) != IDENTIFIER_NODE)
5531 my_friendly_abort (2000);
5533 if (TREE_CODE (context) == NAMESPACE_DECL)
5535 /* We can get here from typename_sub0 in the explicit_template_type
5536 expansion. Just fail. */
5537 cp_error ("no class template named `%#T' in `%#T'",
5538 name, context);
5539 return error_mark_node;
5542 if (! uses_template_parms (context)
5543 || currently_open_class (context))
5545 if (TREE_CODE (fullname) == TEMPLATE_ID_EXPR)
5547 tree tmpl = NULL_TREE;
5548 if (IS_AGGR_TYPE (context))
5549 tmpl = lookup_field (context, name, 0, 0);
5550 if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
5552 cp_error ("no class template named `%#T' in `%#T'",
5553 name, context);
5554 return error_mark_node;
5557 return lookup_template_class (tmpl,
5558 TREE_OPERAND (fullname, 1),
5559 NULL_TREE, context,
5560 /*entering_scope=*/0);
5562 else
5564 tree t;
5566 if (!IS_AGGR_TYPE (context))
5568 cp_error ("no type named `%#T' in `%#T'", name, context);
5569 return error_mark_node;
5572 t = lookup_field (context, name, 0, 1);
5573 if (t)
5574 return TREE_TYPE (t);
5578 /* If the CONTEXT is not a template type, then either the field is
5579 there now or its never going to be. */
5580 if (!uses_template_parms (context))
5582 cp_error ("no type named `%#T' in `%#T'", name, context);
5583 return error_mark_node;
5587 return build_typename_type (context, name, fullname, NULL_TREE);
5590 /* Select the right _DECL from multiple choices. */
5592 static tree
5593 select_decl (binding, flags)
5594 tree binding;
5595 int flags;
5597 tree val;
5598 val = BINDING_VALUE (binding);
5599 if (LOOKUP_NAMESPACES_ONLY (flags))
5601 /* We are not interested in types. */
5602 if (val && TREE_CODE (val) == NAMESPACE_DECL)
5603 return val;
5604 return NULL_TREE;
5607 /* If we could have a type and
5608 we have nothing or we need a type and have none. */
5609 if (BINDING_TYPE (binding)
5610 && (!val || ((flags & LOOKUP_PREFER_TYPES)
5611 && TREE_CODE (val) != TYPE_DECL)))
5612 val = TYPE_STUB_DECL (BINDING_TYPE (binding));
5613 /* Don't return non-types if we really prefer types. */
5614 else if (val && LOOKUP_TYPES_ONLY (flags) && TREE_CODE (val) != TYPE_DECL
5615 && (TREE_CODE (val) != TEMPLATE_DECL
5616 || !DECL_CLASS_TEMPLATE_P (val)))
5617 val = NULL_TREE;
5619 return val;
5622 /* Unscoped lookup of a global: iterate over current namespaces,
5623 considering using-directives. If SPACESP is non-NULL, store a list
5624 of the namespaces we've considered in it. */
5626 tree
5627 unqualified_namespace_lookup (name, flags, spacesp)
5628 tree name;
5629 int flags;
5630 tree *spacesp;
5632 struct tree_binding _binding;
5633 tree b = binding_init (&_binding);
5634 tree initial = current_decl_namespace();
5635 tree scope = initial;
5636 tree siter;
5637 struct binding_level *level;
5638 tree val = NULL_TREE;
5640 if (spacesp)
5641 *spacesp = NULL_TREE;
5643 for (; !val; scope = CP_DECL_CONTEXT (scope))
5645 if (spacesp)
5646 *spacesp = scratch_tree_cons (scope, NULL_TREE, *spacesp);
5647 val = binding_for_name (name, scope);
5649 /* Initialize binding for this context. */
5650 BINDING_VALUE (b) = BINDING_VALUE (val);
5651 BINDING_TYPE (b) = BINDING_TYPE (val);
5653 /* Add all _DECLs seen through local using-directives. */
5654 for (level = current_binding_level;
5655 !level->namespace_p;
5656 level = level->level_chain)
5657 if (!lookup_using_namespace (name, b, level->using_directives,
5658 scope, flags, spacesp))
5659 /* Give up because of error. */
5660 return error_mark_node;
5662 /* Add all _DECLs seen through global using-directives. */
5663 /* XXX local and global using lists should work equally. */
5664 siter = initial;
5665 while (1)
5667 if (!lookup_using_namespace (name, b, DECL_NAMESPACE_USING (siter),
5668 scope, flags, spacesp))
5669 /* Give up because of error. */
5670 return error_mark_node;
5671 if (siter == scope) break;
5672 siter = CP_DECL_CONTEXT (siter);
5675 val = select_decl (b, flags);
5676 if (scope == global_namespace)
5677 break;
5679 return val;
5682 /* Combine prefer_type and namespaces_only into flags. */
5684 static int
5685 lookup_flags (prefer_type, namespaces_only)
5686 int prefer_type, namespaces_only;
5688 if (namespaces_only)
5689 return LOOKUP_PREFER_NAMESPACES;
5690 if (prefer_type > 1)
5691 return LOOKUP_PREFER_TYPES;
5692 if (prefer_type > 0)
5693 return LOOKUP_PREFER_BOTH;
5694 return 0;
5697 /* Given a lookup that returned VAL, use FLAGS to decide if we want to
5698 ignore it or not. Subroutine of lookup_name_real. */
5700 static tree
5701 qualify_lookup (val, flags)
5702 tree val;
5703 int flags;
5705 if (val == NULL_TREE)
5706 return val;
5707 if ((flags & LOOKUP_PREFER_NAMESPACES) && TREE_CODE (val) == NAMESPACE_DECL)
5708 return val;
5709 if ((flags & LOOKUP_PREFER_TYPES)
5710 && (TREE_CODE (val) == TYPE_DECL
5711 || ((flags & LOOKUP_TEMPLATES_EXPECTED)
5712 && DECL_CLASS_TEMPLATE_P (val))))
5713 return val;
5714 if (flags & (LOOKUP_PREFER_NAMESPACES | LOOKUP_PREFER_TYPES))
5715 return NULL_TREE;
5716 return val;
5719 /* Any other BINDING overrides an implicit TYPENAME. Warn about
5720 that. */
5722 static void
5723 warn_about_implicit_typename_lookup (typename, binding)
5724 tree typename;
5725 tree binding;
5727 tree subtype = TREE_TYPE (TREE_TYPE (typename));
5728 tree name = DECL_NAME (typename);
5730 if (! (TREE_CODE (binding) == TEMPLATE_DECL
5731 && CLASSTYPE_TEMPLATE_INFO (subtype)
5732 && CLASSTYPE_TI_TEMPLATE (subtype) == binding)
5733 && ! (TREE_CODE (binding) == TYPE_DECL
5734 && same_type_p (TREE_TYPE (binding), subtype)))
5736 cp_warning ("lookup of `%D' finds `%#D'",
5737 name, binding);
5738 cp_warning (" instead of `%D' from dependent base class",
5739 typename);
5740 cp_warning (" (use `typename %T::%D' if that's what you meant)",
5741 constructor_name (current_class_type), name);
5745 /* Look up NAME in the current binding level and its superiors in the
5746 namespace of variables, functions and typedefs. Return a ..._DECL
5747 node of some kind representing its definition if there is only one
5748 such declaration, or return a TREE_LIST with all the overloaded
5749 definitions if there are many, or return 0 if it is undefined.
5751 If PREFER_TYPE is > 0, we prefer TYPE_DECLs or namespaces.
5752 If PREFER_TYPE is > 1, we reject non-type decls (e.g. namespaces).
5753 If PREFER_TYPE is -2, we're being called from yylex(). (UGLY)
5754 Otherwise we prefer non-TYPE_DECLs.
5756 If NONCLASS is non-zero, we don't look for the NAME in class scope,
5757 using IDENTIFIER_CLASS_VALUE. */
5759 static tree
5760 lookup_name_real (name, prefer_type, nonclass, namespaces_only)
5761 tree name;
5762 int prefer_type, nonclass, namespaces_only;
5764 tree t;
5765 tree val = NULL_TREE;
5766 int yylex = 0;
5767 tree from_obj = NULL_TREE;
5768 int flags;
5769 int val_is_implicit_typename = 0;
5771 /* Hack: copy flag set by parser, if set. */
5772 if (only_namespace_names)
5773 namespaces_only = 1;
5775 if (prefer_type == -2)
5777 extern int looking_for_typename;
5778 tree type = NULL_TREE;
5780 yylex = 1;
5781 prefer_type = looking_for_typename;
5783 flags = lookup_flags (prefer_type, namespaces_only);
5784 /* If the next thing is '<', class templates are types. */
5785 if (looking_for_template)
5786 flags |= LOOKUP_TEMPLATES_EXPECTED;
5788 /* std:: becomes :: for now. */
5789 if (got_scope == std_node)
5790 got_scope = void_type_node;
5792 if (got_scope)
5793 type = got_scope;
5794 else if (got_object != error_mark_node)
5795 type = got_object;
5797 if (type)
5799 if (type == error_mark_node)
5800 return error_mark_node;
5801 if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
5802 type = TREE_TYPE (type);
5804 if (TYPE_P (type))
5805 type = complete_type (type);
5807 if (TREE_CODE (type) == VOID_TYPE)
5808 type = global_namespace;
5809 if (TREE_CODE (type) == NAMESPACE_DECL)
5811 struct tree_binding b;
5812 val = binding_init (&b);
5813 flags |= LOOKUP_COMPLAIN;
5814 if (!qualified_lookup_using_namespace (name, type, val, flags))
5815 return NULL_TREE;
5816 val = select_decl (val, flags);
5818 else if (! IS_AGGR_TYPE (type)
5819 || TREE_CODE (type) == TEMPLATE_TYPE_PARM
5820 || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM
5821 || TREE_CODE (type) == TYPENAME_TYPE)
5822 /* Someone else will give an error about this if needed. */
5823 val = NULL_TREE;
5824 else if (type == current_class_type)
5825 val = IDENTIFIER_CLASS_VALUE (name);
5826 else
5827 val = lookup_member (type, name, 0, prefer_type);
5829 else
5830 val = NULL_TREE;
5832 if (got_scope)
5833 goto done;
5834 else if (got_object && val)
5835 from_obj = val;
5837 else
5839 flags = lookup_flags (prefer_type, namespaces_only);
5840 /* If we're not parsing, we need to complain. */
5841 flags |= LOOKUP_COMPLAIN;
5844 /* First, look in non-namespace scopes. */
5846 if (current_class_type == NULL_TREE)
5847 nonclass = 1;
5849 for (t = IDENTIFIER_BINDING (name); t; t = TREE_CHAIN (t))
5851 tree binding;
5853 if (!LOCAL_BINDING_P (t) && nonclass)
5854 /* We're not looking for class-scoped bindings, so keep going. */
5855 continue;
5857 /* If this is the kind of thing we're looking for, we're done. */
5858 if (qualify_lookup (BINDING_VALUE (t), flags))
5859 binding = BINDING_VALUE (t);
5860 else if ((flags & LOOKUP_PREFER_TYPES)
5861 && qualify_lookup (BINDING_TYPE (t), flags))
5862 binding = BINDING_TYPE (t);
5863 else
5864 binding = NULL_TREE;
5866 if (binding
5867 && (!val || !IMPLICIT_TYPENAME_TYPE_DECL_P (binding)))
5869 if (val_is_implicit_typename && !yylex)
5870 warn_about_implicit_typename_lookup (val, binding);
5871 val = binding;
5872 val_is_implicit_typename
5873 = IMPLICIT_TYPENAME_TYPE_DECL_P (val);
5874 if (!val_is_implicit_typename)
5875 break;
5879 /* Now lookup in namespace scopes. */
5880 if (!val || val_is_implicit_typename)
5882 t = unqualified_namespace_lookup (name, flags, 0);
5883 if (t)
5885 if (val_is_implicit_typename && !yylex)
5886 warn_about_implicit_typename_lookup (val, t);
5887 val = t;
5891 done:
5892 if (val)
5894 /* This should only warn about types used in qualified-ids. */
5895 if (from_obj && from_obj != val)
5897 if (looking_for_typename && TREE_CODE (from_obj) == TYPE_DECL
5898 && TREE_CODE (val) == TYPE_DECL
5899 && TREE_TYPE (from_obj) != TREE_TYPE (val))
5901 cp_pedwarn ("lookup of `%D' in the scope of `%#T' (`%#T')",
5902 name, got_object, TREE_TYPE (from_obj));
5903 cp_pedwarn (" does not match lookup in the current scope (`%#T')",
5904 TREE_TYPE (val));
5907 /* We don't change val to from_obj if got_object depends on
5908 template parms because that breaks implicit typename for
5909 destructor calls. */
5910 if (! uses_template_parms (got_object))
5911 val = from_obj;
5914 /* If we have a single function from a using decl, pull it out. */
5915 if (TREE_CODE (val) == OVERLOAD && ! really_overloaded_fn (val))
5916 val = OVL_FUNCTION (val);
5918 else if (from_obj)
5919 val = from_obj;
5921 return val;
5924 tree
5925 lookup_name_nonclass (name)
5926 tree name;
5928 return lookup_name_real (name, 0, 1, 0);
5931 tree
5932 lookup_function_nonclass (name, args)
5933 tree name;
5934 tree args;
5936 return lookup_arg_dependent (name, lookup_name_nonclass (name), args);
5939 tree
5940 lookup_name_namespace_only (name)
5941 tree name;
5943 /* type-or-namespace, nonclass, namespace_only */
5944 return lookup_name_real (name, 1, 1, 1);
5947 tree
5948 lookup_name (name, prefer_type)
5949 tree name;
5950 int prefer_type;
5952 return lookup_name_real (name, prefer_type, 0, 0);
5955 /* Similar to `lookup_name' but look only in the innermost non-class
5956 binding level. */
5958 tree
5959 lookup_name_current_level (name)
5960 tree name;
5962 struct binding_level *b;
5963 tree t = NULL_TREE;
5965 b = current_binding_level;
5966 while (b->parm_flag == 2)
5967 b = b->level_chain;
5969 if (b->namespace_p)
5971 t = IDENTIFIER_NAMESPACE_VALUE (name);
5973 /* extern "C" function() */
5974 if (t != NULL_TREE && TREE_CODE (t) == TREE_LIST)
5975 t = TREE_VALUE (t);
5977 else if (IDENTIFIER_BINDING (name)
5978 && LOCAL_BINDING_P (IDENTIFIER_BINDING (name)))
5980 while (1)
5982 if (BINDING_LEVEL (IDENTIFIER_BINDING (name)) == b)
5983 return IDENTIFIER_VALUE (name);
5985 if (b->keep == 2)
5986 b = b->level_chain;
5987 else
5988 break;
5992 return t;
5995 /* Like lookup_name_current_level, but for types. */
5997 tree
5998 lookup_type_current_level (name)
5999 tree name;
6001 register tree t = NULL_TREE;
6003 my_friendly_assert (! current_binding_level->namespace_p, 980716);
6005 if (REAL_IDENTIFIER_TYPE_VALUE (name) != NULL_TREE
6006 && REAL_IDENTIFIER_TYPE_VALUE (name) != global_type_node)
6008 struct binding_level *b = current_binding_level;
6009 while (1)
6011 if (purpose_member (name, b->type_shadowed))
6012 return REAL_IDENTIFIER_TYPE_VALUE (name);
6013 if (b->keep == 2)
6014 b = b->level_chain;
6015 else
6016 break;
6020 return t;
6023 void
6024 begin_only_namespace_names ()
6026 only_namespace_names = 1;
6029 void
6030 end_only_namespace_names ()
6032 only_namespace_names = 0;
6035 /* Arrange for the user to get a source line number, even when the
6036 compiler is going down in flames, so that she at least has a
6037 chance of working around problems in the compiler. We used to
6038 call error(), but that let the segmentation fault continue
6039 through; now, it's much more passive by asking them to send the
6040 maintainers mail about the problem. */
6042 static void
6043 signal_catch (sig)
6044 int sig ATTRIBUTE_UNUSED;
6046 signal (SIGSEGV, SIG_DFL);
6047 #ifdef SIGIOT
6048 signal (SIGIOT, SIG_DFL);
6049 #endif
6050 #ifdef SIGILL
6051 signal (SIGILL, SIG_DFL);
6052 #endif
6053 #ifdef SIGABRT
6054 signal (SIGABRT, SIG_DFL);
6055 #endif
6056 #ifdef SIGBUS
6057 signal (SIGBUS, SIG_DFL);
6058 #endif
6059 my_friendly_abort (0);
6062 #if 0
6063 /* Unused -- brendan 970107 */
6064 /* Array for holding types considered "built-in". These types
6065 are output in the module in which `main' is defined. */
6066 static tree *builtin_type_tdescs_arr;
6067 static int builtin_type_tdescs_len, builtin_type_tdescs_max;
6068 #endif
6070 /* Push the declarations of builtin types into the namespace.
6071 RID_INDEX, if < RID_MAX is the index of the builtin type
6072 in the array RID_POINTERS. NAME is the name used when looking
6073 up the builtin type. TYPE is the _TYPE node for the builtin type. */
6075 static void
6076 record_builtin_type (rid_index, name, type)
6077 enum rid rid_index;
6078 const char *name;
6079 tree type;
6081 tree rname = NULL_TREE, tname = NULL_TREE;
6082 tree tdecl = NULL_TREE;
6084 if ((int) rid_index < (int) RID_MAX)
6085 rname = ridpointers[(int) rid_index];
6086 if (name)
6087 tname = get_identifier (name);
6089 TYPE_BUILT_IN (type) = 1;
6091 if (tname)
6093 tdecl = pushdecl (build_decl (TYPE_DECL, tname, type));
6094 set_identifier_type_value (tname, NULL_TREE);
6095 if ((int) rid_index < (int) RID_MAX)
6096 /* Built-in types live in the global namespace. */
6097 SET_IDENTIFIER_GLOBAL_VALUE (tname, tdecl);
6099 if (rname != NULL_TREE)
6101 if (tname != NULL_TREE)
6103 set_identifier_type_value (rname, NULL_TREE);
6104 SET_IDENTIFIER_GLOBAL_VALUE (rname, tdecl);
6106 else
6108 tdecl = pushdecl (build_decl (TYPE_DECL, rname, type));
6109 set_identifier_type_value (rname, NULL_TREE);
6114 /* Record one of the standard Java types.
6115 * Declare it as having the given NAME.
6116 * If SIZE > 0, it is the size of one of the integral types;
6117 * otherwise it is the negative of the size of one of the other types. */
6119 static tree
6120 record_builtin_java_type (name, size)
6121 const char *name;
6122 int size;
6124 tree type, decl;
6125 if (size > 0)
6126 type = make_signed_type (size);
6127 else if (size > -32)
6128 { /* "__java_char" or ""__java_boolean". */
6129 type = make_unsigned_type (-size);
6130 /*if (size == -1) TREE_SET_CODE (type, BOOLEAN_TYPE);*/
6132 else
6133 { /* "__java_float" or ""__java_double". */
6134 type = make_node (REAL_TYPE);
6135 TYPE_PRECISION (type) = - size;
6136 layout_type (type);
6138 record_builtin_type (RID_MAX, name, type);
6139 decl = TYPE_NAME (type);
6141 /* Suppress generate debug symbol entries for these types,
6142 since for normal C++ they are just clutter.
6143 However, push_lang_context undoes this if extern "Java" is seen. */
6144 DECL_IGNORED_P (decl) = 1;
6146 TYPE_FOR_JAVA (type) = 1;
6147 return type;
6150 /* Push a type into the namespace so that the back-ends ignore it. */
6152 static void
6153 record_unknown_type (type, name)
6154 tree type;
6155 const char *name;
6157 tree decl = pushdecl (build_decl (TYPE_DECL, get_identifier (name), type));
6158 /* Make sure the "unknown type" typedecl gets ignored for debug info. */
6159 DECL_IGNORED_P (decl) = 1;
6160 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
6161 TYPE_SIZE (type) = TYPE_SIZE (void_type_node);
6162 TYPE_ALIGN (type) = 1;
6163 TYPE_MODE (type) = TYPE_MODE (void_type_node);
6166 /* Push overloaded decl, in global scope, with one argument so it
6167 can be used as a callback from define_function. */
6169 static void
6170 push_overloaded_decl_1 (x)
6171 tree x;
6173 push_overloaded_decl (x, PUSH_GLOBAL);
6176 #ifdef __GNUC__
6177 __inline
6178 #endif
6179 tree
6180 auto_function (name, type, code)
6181 tree name, type;
6182 enum built_in_function code;
6184 return define_function
6185 (IDENTIFIER_POINTER (name), type, code, push_overloaded_decl_1,
6186 IDENTIFIER_POINTER (build_decl_overload (name, TYPE_ARG_TYPES (type),
6187 0)));
6190 /* Create the predefined scalar types of C,
6191 and some nodes representing standard constants (0, 1, (void *)0).
6192 Initialize the global binding level.
6193 Make definitions for built-in primitive functions. */
6195 void
6196 init_decl_processing ()
6198 tree fields[20];
6199 int wchar_type_size;
6200 tree array_domain_type;
6202 /* Have to make these distinct before we try using them. */
6203 lang_name_cplusplus = get_identifier ("C++");
6204 lang_name_c = get_identifier ("C");
6205 lang_name_java = get_identifier ("Java");
6207 /* Enter the global namespace. */
6208 my_friendly_assert (global_namespace == NULL_TREE, 375);
6209 my_friendly_assert (current_lang_name == NULL_TREE, 375);
6210 current_lang_name = lang_name_cplusplus;
6211 push_namespace (get_identifier ("::"));
6212 global_namespace = current_namespace;
6213 current_lang_name = NULL_TREE;
6215 if (flag_strict_prototype == 2)
6216 flag_strict_prototype = pedantic;
6217 if (! flag_permissive && ! pedantic)
6218 flag_pedantic_errors = 1;
6220 strict_prototypes_lang_c = flag_strict_prototype;
6222 /* Initially, C. */
6223 current_lang_name = lang_name_c;
6225 current_function_decl = NULL_TREE;
6226 named_labels = NULL_TREE;
6227 named_label_uses = NULL;
6228 current_binding_level = NULL_BINDING_LEVEL;
6229 free_binding_level = NULL_BINDING_LEVEL;
6231 /* Because most segmentation signals can be traced back into user
6232 code, catch them and at least give the user a chance of working
6233 around compiler bugs. */
6234 signal (SIGSEGV, signal_catch);
6236 /* We will also catch aborts in the back-end through signal_catch and
6237 give the user a chance to see where the error might be, and to defeat
6238 aborts in the back-end when there have been errors previously in their
6239 code. */
6240 #ifdef SIGIOT
6241 signal (SIGIOT, signal_catch);
6242 #endif
6243 #ifdef SIGILL
6244 signal (SIGILL, signal_catch);
6245 #endif
6246 #ifdef SIGABRT
6247 signal (SIGABRT, signal_catch);
6248 #endif
6249 #ifdef SIGBUS
6250 signal (SIGBUS, signal_catch);
6251 #endif
6253 gcc_obstack_init (&decl_obstack);
6255 /* Must lay these out before anything else gets laid out. */
6256 error_mark_node = make_node (ERROR_MARK);
6257 TREE_PERMANENT (error_mark_node) = 1;
6258 TREE_TYPE (error_mark_node) = error_mark_node;
6259 error_mark_list = build_tree_list (error_mark_node, error_mark_node);
6260 TREE_TYPE (error_mark_list) = error_mark_node;
6262 /* Make the binding_level structure for global names. */
6263 pushlevel (0);
6264 global_binding_level = current_binding_level;
6265 /* The global level is the namespace level of ::. */
6266 NAMESPACE_LEVEL (global_namespace) = global_binding_level;
6267 declare_namespace_level ();
6269 this_identifier = get_identifier (THIS_NAME);
6270 in_charge_identifier = get_identifier (IN_CHARGE_NAME);
6271 ctor_identifier = get_identifier (CTOR_NAME);
6272 dtor_identifier = get_identifier (DTOR_NAME);
6273 pfn_identifier = get_identifier (VTABLE_PFN_NAME);
6274 index_identifier = get_identifier (VTABLE_INDEX_NAME);
6275 delta_identifier = get_identifier (VTABLE_DELTA_NAME);
6276 delta2_identifier = get_identifier (VTABLE_DELTA2_NAME);
6277 pfn_or_delta2_identifier = get_identifier ("__pfn_or_delta2");
6279 /* Define `int' and `char' first so that dbx will output them first. */
6281 integer_type_node = make_signed_type (INT_TYPE_SIZE);
6282 record_builtin_type (RID_INT, NULL_PTR, integer_type_node);
6284 /* Define `char', which is like either `signed char' or `unsigned char'
6285 but not the same as either. */
6287 char_type_node
6288 = (flag_signed_char
6289 ? make_signed_type (CHAR_TYPE_SIZE)
6290 : make_unsigned_type (CHAR_TYPE_SIZE));
6291 record_builtin_type (RID_CHAR, "char", char_type_node);
6293 /* `signed' is the same as `int' */
6294 record_builtin_type (RID_SIGNED, NULL_PTR, integer_type_node);
6296 long_integer_type_node = make_signed_type (LONG_TYPE_SIZE);
6297 record_builtin_type (RID_LONG, "long int", long_integer_type_node);
6299 unsigned_type_node = make_unsigned_type (INT_TYPE_SIZE);
6300 record_builtin_type (RID_UNSIGNED, "unsigned int", unsigned_type_node);
6302 long_unsigned_type_node = make_unsigned_type (LONG_TYPE_SIZE);
6303 record_builtin_type (RID_MAX, "long unsigned int", long_unsigned_type_node);
6304 record_builtin_type (RID_MAX, "unsigned long", long_unsigned_type_node);
6306 long_long_integer_type_node = make_signed_type (LONG_LONG_TYPE_SIZE);
6307 record_builtin_type (RID_MAX, "long long int", long_long_integer_type_node);
6309 long_long_unsigned_type_node = make_unsigned_type (LONG_LONG_TYPE_SIZE);
6310 record_builtin_type (RID_MAX, "long long unsigned int",
6311 long_long_unsigned_type_node);
6312 record_builtin_type (RID_MAX, "long long unsigned",
6313 long_long_unsigned_type_node);
6315 short_integer_type_node = make_signed_type (SHORT_TYPE_SIZE);
6316 record_builtin_type (RID_SHORT, "short int", short_integer_type_node);
6317 short_unsigned_type_node = make_unsigned_type (SHORT_TYPE_SIZE);
6318 record_builtin_type (RID_MAX, "short unsigned int", short_unsigned_type_node);
6319 record_builtin_type (RID_MAX, "unsigned short", short_unsigned_type_node);
6321 /* `unsigned long' is the standard type for sizeof.
6322 Note that stddef.h uses `unsigned long',
6323 and this must agree, even if long and int are the same size. */
6324 set_sizetype
6325 (TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (SIZE_TYPE))));
6327 ptrdiff_type_node
6328 = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (PTRDIFF_TYPE)));
6330 /* Define both `signed char' and `unsigned char'. */
6331 signed_char_type_node = make_signed_type (CHAR_TYPE_SIZE);
6332 record_builtin_type (RID_MAX, "signed char", signed_char_type_node);
6333 unsigned_char_type_node = make_unsigned_type (CHAR_TYPE_SIZE);
6334 record_builtin_type (RID_MAX, "unsigned char", unsigned_char_type_node);
6336 /* Create the widest literal types. */
6337 widest_integer_literal_type_node = make_signed_type (HOST_BITS_PER_WIDE_INT * 2);
6338 pushdecl (build_decl (TYPE_DECL, NULL_TREE,
6339 widest_integer_literal_type_node));
6341 widest_unsigned_literal_type_node = make_unsigned_type (HOST_BITS_PER_WIDE_INT * 2);
6342 pushdecl (build_decl (TYPE_DECL, NULL_TREE,
6343 widest_unsigned_literal_type_node));
6345 /* These are types that type_for_size and type_for_mode use. */
6346 intQI_type_node = make_signed_type (GET_MODE_BITSIZE (QImode));
6347 pushdecl (build_decl (TYPE_DECL, NULL_TREE, intQI_type_node));
6348 intHI_type_node = make_signed_type (GET_MODE_BITSIZE (HImode));
6349 pushdecl (build_decl (TYPE_DECL, NULL_TREE, intHI_type_node));
6350 intSI_type_node = make_signed_type (GET_MODE_BITSIZE (SImode));
6351 pushdecl (build_decl (TYPE_DECL, NULL_TREE, intSI_type_node));
6352 intDI_type_node = make_signed_type (GET_MODE_BITSIZE (DImode));
6353 pushdecl (build_decl (TYPE_DECL, NULL_TREE, intDI_type_node));
6354 #if HOST_BITS_PER_WIDE_INT >= 64
6355 intTI_type_node = make_signed_type (GET_MODE_BITSIZE (TImode));
6356 pushdecl (build_decl (TYPE_DECL, get_identifier ("__int128_t"), intTI_type_node));
6357 #endif
6358 unsigned_intQI_type_node = make_unsigned_type (GET_MODE_BITSIZE (QImode));
6359 pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intQI_type_node));
6360 unsigned_intHI_type_node = make_unsigned_type (GET_MODE_BITSIZE (HImode));
6361 pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intHI_type_node));
6362 unsigned_intSI_type_node = make_unsigned_type (GET_MODE_BITSIZE (SImode));
6363 pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intSI_type_node));
6364 unsigned_intDI_type_node = make_unsigned_type (GET_MODE_BITSIZE (DImode));
6365 pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intDI_type_node));
6366 #if HOST_BITS_PER_WIDE_INT >= 64
6367 unsigned_intTI_type_node = make_unsigned_type (GET_MODE_BITSIZE (TImode));
6368 pushdecl (build_decl (TYPE_DECL, get_identifier ("__uint128_t"), unsigned_intTI_type_node));
6369 #endif
6371 float_type_node = make_node (REAL_TYPE);
6372 TYPE_PRECISION (float_type_node) = FLOAT_TYPE_SIZE;
6373 record_builtin_type (RID_FLOAT, NULL_PTR, float_type_node);
6374 layout_type (float_type_node);
6376 double_type_node = make_node (REAL_TYPE);
6377 if (flag_short_double)
6378 TYPE_PRECISION (double_type_node) = FLOAT_TYPE_SIZE;
6379 else
6380 TYPE_PRECISION (double_type_node) = DOUBLE_TYPE_SIZE;
6381 record_builtin_type (RID_DOUBLE, NULL_PTR, double_type_node);
6382 layout_type (double_type_node);
6384 long_double_type_node = make_node (REAL_TYPE);
6385 TYPE_PRECISION (long_double_type_node) = LONG_DOUBLE_TYPE_SIZE;
6386 record_builtin_type (RID_MAX, "long double", long_double_type_node);
6387 layout_type (long_double_type_node);
6389 complex_integer_type_node = make_node (COMPLEX_TYPE);
6390 pushdecl (build_decl (TYPE_DECL, get_identifier ("complex int"),
6391 complex_integer_type_node));
6392 TREE_TYPE (complex_integer_type_node) = integer_type_node;
6393 layout_type (complex_integer_type_node);
6395 complex_float_type_node = make_node (COMPLEX_TYPE);
6396 pushdecl (build_decl (TYPE_DECL, get_identifier ("complex float"),
6397 complex_float_type_node));
6398 TREE_TYPE (complex_float_type_node) = float_type_node;
6399 layout_type (complex_float_type_node);
6401 complex_double_type_node = make_node (COMPLEX_TYPE);
6402 pushdecl (build_decl (TYPE_DECL, get_identifier ("complex double"),
6403 complex_double_type_node));
6404 TREE_TYPE (complex_double_type_node) = double_type_node;
6405 layout_type (complex_double_type_node);
6407 complex_long_double_type_node = make_node (COMPLEX_TYPE);
6408 pushdecl (build_decl (TYPE_DECL, get_identifier ("complex long double"),
6409 complex_long_double_type_node));
6410 TREE_TYPE (complex_long_double_type_node) = long_double_type_node;
6411 layout_type (complex_long_double_type_node);
6413 java_byte_type_node = record_builtin_java_type ("__java_byte", 8);
6414 java_short_type_node = record_builtin_java_type ("__java_short", 16);
6415 java_int_type_node = record_builtin_java_type ("__java_int", 32);
6416 java_long_type_node = record_builtin_java_type ("__java_long", 64);
6417 java_float_type_node = record_builtin_java_type ("__java_float", -32);
6418 java_double_type_node = record_builtin_java_type ("__java_double", -64);
6419 java_char_type_node = record_builtin_java_type ("__java_char", -16);
6420 java_boolean_type_node = record_builtin_java_type ("__java_boolean", -1);
6422 integer_zero_node = build_int_2 (0, 0);
6423 TREE_TYPE (integer_zero_node) = integer_type_node;
6424 integer_one_node = build_int_2 (1, 0);
6425 TREE_TYPE (integer_one_node) = integer_type_node;
6426 integer_two_node = build_int_2 (2, 0);
6427 TREE_TYPE (integer_two_node) = integer_type_node;
6428 integer_three_node = build_int_2 (3, 0);
6429 TREE_TYPE (integer_three_node) = integer_type_node;
6431 boolean_type_node = make_unsigned_type (BOOL_TYPE_SIZE);
6432 TREE_SET_CODE (boolean_type_node, BOOLEAN_TYPE);
6433 TYPE_MAX_VALUE (boolean_type_node) = build_int_2 (1, 0);
6434 TREE_TYPE (TYPE_MAX_VALUE (boolean_type_node)) = boolean_type_node;
6435 TYPE_PRECISION (boolean_type_node) = 1;
6436 record_builtin_type (RID_BOOL, "bool", boolean_type_node);
6437 boolean_false_node = build_int_2 (0, 0);
6438 TREE_TYPE (boolean_false_node) = boolean_type_node;
6439 boolean_true_node = build_int_2 (1, 0);
6440 TREE_TYPE (boolean_true_node) = boolean_type_node;
6442 /* These are needed by stor-layout.c. */
6443 size_zero_node = size_int (0);
6444 size_one_node = size_int (1);
6446 signed_size_zero_node = build_int_2 (0, 0);
6447 TREE_TYPE (signed_size_zero_node) = make_signed_type (TYPE_PRECISION (sizetype));
6449 void_type_node = make_node (VOID_TYPE);
6450 record_builtin_type (RID_VOID, NULL_PTR, void_type_node);
6451 layout_type (void_type_node); /* Uses integer_zero_node. */
6452 void_list_node = build_tree_list (NULL_TREE, void_type_node);
6453 TREE_PARMLIST (void_list_node) = 1;
6455 null_pointer_node = build_int_2 (0, 0);
6456 TREE_TYPE (null_pointer_node) = build_pointer_type (void_type_node);
6457 layout_type (TREE_TYPE (null_pointer_node));
6459 /* Used for expressions that do nothing, but are not errors. */
6460 void_zero_node = build_int_2 (0, 0);
6461 TREE_TYPE (void_zero_node) = void_type_node;
6463 string_type_node = build_pointer_type (char_type_node);
6464 const_string_type_node
6465 = build_pointer_type (build_qualified_type (char_type_node,
6466 TYPE_QUAL_CONST));
6467 empty_except_spec = build_tree_list (NULL_TREE, NULL_TREE);
6468 #if 0
6469 record_builtin_type (RID_MAX, NULL_PTR, string_type_node);
6470 #endif
6472 /* Make a type to be the domain of a few array types
6473 whose domains don't really matter.
6474 200 is small enough that it always fits in size_t
6475 and large enough that it can hold most function names for the
6476 initializations of __FUNCTION__ and __PRETTY_FUNCTION__. */
6477 array_domain_type = build_index_type (build_int_2 (200, 0));
6479 /* Make a type for arrays of characters.
6480 With luck nothing will ever really depend on the length of this
6481 array type. */
6482 char_array_type_node
6483 = build_array_type (char_type_node, array_domain_type);
6484 /* Likewise for arrays of ints. */
6485 int_array_type_node
6486 = build_array_type (integer_type_node, array_domain_type);
6488 /* This is just some anonymous class type. Nobody should ever
6489 need to look inside this envelope. */
6490 class_star_type_node = build_pointer_type (make_lang_type (RECORD_TYPE));
6492 if (flag_huge_objects)
6493 delta_type_node = long_integer_type_node;
6494 else
6495 delta_type_node = short_integer_type_node;
6497 default_function_type
6498 = build_function_type (integer_type_node, NULL_TREE);
6500 ptr_type_node = build_pointer_type (void_type_node);
6501 const_ptr_type_node
6502 = build_pointer_type (build_qualified_type (void_type_node,
6503 TYPE_QUAL_CONST));
6504 c_common_nodes_and_builtins (1, flag_no_builtin, flag_no_nonansi_builtin);
6506 void_ftype_ptr
6507 = build_exception_variant (void_ftype_ptr, empty_except_spec);
6509 /* C++ extensions */
6511 unknown_type_node = make_node (UNKNOWN_TYPE);
6512 record_unknown_type (unknown_type_node, "unknown type");
6514 /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node. */
6515 TREE_TYPE (unknown_type_node) = unknown_type_node;
6517 TREE_TYPE (null_node) = type_for_size (POINTER_SIZE, 0);
6519 /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
6520 result. */
6521 TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
6522 TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
6524 /* This is special for C++ so functions can be overloaded. */
6525 wchar_type_node
6526 = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (WCHAR_TYPE)));
6527 wchar_type_size = TYPE_PRECISION (wchar_type_node);
6528 signed_wchar_type_node = make_signed_type (wchar_type_size);
6529 unsigned_wchar_type_node = make_unsigned_type (wchar_type_size);
6530 wchar_type_node
6531 = TREE_UNSIGNED (wchar_type_node)
6532 ? unsigned_wchar_type_node
6533 : signed_wchar_type_node;
6534 record_builtin_type (RID_WCHAR, "__wchar_t", wchar_type_node);
6536 /* Artificial declaration of wchar_t -- can be bashed */
6537 wchar_decl_node = build_decl (TYPE_DECL, get_identifier ("wchar_t"),
6538 wchar_type_node);
6539 pushdecl (wchar_decl_node);
6541 /* This is for wide string constants. */
6542 wchar_array_type_node
6543 = build_array_type (wchar_type_node, array_domain_type);
6545 if (flag_vtable_thunks)
6547 /* Make sure we get a unique function type, so we can give
6548 its pointer type a name. (This wins for gdb.) */
6549 tree vfunc_type = make_node (FUNCTION_TYPE);
6550 TREE_TYPE (vfunc_type) = integer_type_node;
6551 TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
6552 layout_type (vfunc_type);
6554 vtable_entry_type = build_pointer_type (vfunc_type);
6556 else
6558 vtable_entry_type = make_lang_type (RECORD_TYPE);
6559 fields[0] = build_lang_decl (FIELD_DECL, delta_identifier,
6560 delta_type_node);
6561 fields[1] = build_lang_decl (FIELD_DECL, index_identifier,
6562 delta_type_node);
6563 fields[2] = build_lang_decl (FIELD_DECL, pfn_identifier,
6564 ptr_type_node);
6565 finish_builtin_type (vtable_entry_type, VTBL_PTR_TYPE, fields, 2,
6566 double_type_node);
6568 /* Make this part of an invisible union. */
6569 fields[3] = copy_node (fields[2]);
6570 TREE_TYPE (fields[3]) = delta_type_node;
6571 DECL_NAME (fields[3]) = delta2_identifier;
6572 DECL_MODE (fields[3]) = TYPE_MODE (delta_type_node);
6573 DECL_SIZE (fields[3]) = TYPE_SIZE (delta_type_node);
6574 TREE_UNSIGNED (fields[3]) = 0;
6575 TREE_CHAIN (fields[2]) = fields[3];
6576 vtable_entry_type = build_qualified_type (vtable_entry_type,
6577 TYPE_QUAL_CONST);
6579 record_builtin_type (RID_MAX, VTBL_PTR_TYPE, vtable_entry_type);
6581 vtbl_type_node
6582 = build_cplus_array_type (vtable_entry_type, NULL_TREE);
6583 layout_type (vtbl_type_node);
6584 vtbl_type_node = build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
6585 record_builtin_type (RID_MAX, NULL_PTR, vtbl_type_node);
6586 vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
6587 layout_type (vtbl_ptr_type_node);
6588 record_builtin_type (RID_MAX, NULL_PTR, vtbl_ptr_type_node);
6590 std_node = build_decl (NAMESPACE_DECL,
6591 get_identifier (flag_honor_std ? "fake std":"std"),
6592 void_type_node);
6593 pushdecl (std_node);
6595 global_type_node = make_node (LANG_TYPE);
6596 record_unknown_type (global_type_node, "global type");
6598 /* Now, C++. */
6599 current_lang_name = lang_name_cplusplus;
6602 tree bad_alloc_type_node, newtype, deltype;
6603 if (flag_honor_std)
6604 push_namespace (get_identifier ("std"));
6605 bad_alloc_type_node = xref_tag
6606 (class_type_node, get_identifier ("bad_alloc"), 1);
6607 if (flag_honor_std)
6608 pop_namespace ();
6609 newtype = build_exception_variant
6610 (ptr_ftype_sizetype, add_exception_specifier (NULL_TREE, bad_alloc_type_node, -1));
6611 deltype = build_exception_variant (void_ftype_ptr, empty_except_spec);
6612 auto_function (ansi_opname[(int) NEW_EXPR], newtype, NOT_BUILT_IN);
6613 auto_function (ansi_opname[(int) VEC_NEW_EXPR], newtype, NOT_BUILT_IN);
6614 global_delete_fndecl
6615 = auto_function (ansi_opname[(int) DELETE_EXPR], deltype, NOT_BUILT_IN);
6616 auto_function (ansi_opname[(int) VEC_DELETE_EXPR], deltype, NOT_BUILT_IN);
6619 abort_fndecl
6620 = define_function ("__pure_virtual", void_ftype,
6621 NOT_BUILT_IN, 0, 0);
6623 /* Perform other language dependent initializations. */
6624 init_class_processing ();
6625 init_init_processing ();
6626 init_search_processing ();
6627 if (flag_rtti)
6628 init_rtti_processing ();
6630 if (flag_exceptions)
6631 init_exception_processing ();
6632 if (flag_no_inline)
6634 flag_inline_functions = 0;
6637 if (! supports_one_only ())
6638 flag_weak = 0;
6640 /* Create the global bindings for __FUNCTION__ and __PRETTY_FUNCTION__. */
6641 declare_function_name ();
6643 /* Prepare to check format strings against argument lists. */
6644 init_function_format_info ();
6646 /* Show we use EH for cleanups. */
6647 using_eh_for_cleanups ();
6649 print_error_function = lang_print_error_function;
6650 lang_get_alias_set = &c_get_alias_set;
6651 valid_lang_attribute = cp_valid_lang_attribute;
6653 /* Maintain consistency. Perhaps we should just complain if they
6654 say -fwritable-strings? */
6655 if (flag_writable_strings)
6656 flag_const_strings = 0;
6659 /* Function to print any language-specific context for an error message. */
6661 static void
6662 lang_print_error_function (file)
6663 const char *file;
6665 default_print_error_function (file);
6666 maybe_print_template_context ();
6669 /* Make a definition for a builtin function named NAME and whose data type
6670 is TYPE. TYPE should be a function type with argument types.
6671 FUNCTION_CODE tells later passes how to compile calls to this function.
6672 See tree.h for its possible values.
6674 If LIBRARY_NAME is nonzero, use that for DECL_ASSEMBLER_NAME,
6675 the name to be called if we can't opencode the function. */
6677 tree
6678 define_function (name, type, function_code, pfn, library_name)
6679 const char *name;
6680 tree type;
6681 enum built_in_function function_code;
6682 void (*pfn) PROTO((tree));
6683 const char *library_name;
6685 tree decl = build_lang_decl (FUNCTION_DECL, get_identifier (name), type);
6686 DECL_EXTERNAL (decl) = 1;
6687 TREE_PUBLIC (decl) = 1;
6688 DECL_ARTIFICIAL (decl) = 1;
6690 my_friendly_assert (DECL_CONTEXT (decl) == NULL_TREE, 392);
6691 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
6693 /* Since `pushdecl' relies on DECL_ASSEMBLER_NAME instead of DECL_NAME,
6694 we cannot change DECL_ASSEMBLER_NAME until we have installed this
6695 function in the namespace. */
6696 if (pfn) (*pfn) (decl);
6697 if (library_name)
6698 DECL_ASSEMBLER_NAME (decl) = get_identifier (library_name);
6699 make_function_rtl (decl);
6700 if (function_code != NOT_BUILT_IN)
6702 DECL_BUILT_IN (decl) = 1;
6703 DECL_FUNCTION_CODE (decl) = function_code;
6705 return decl;
6708 tree
6709 builtin_function (name, type, code, libname)
6710 const char *name;
6711 tree type;
6712 enum built_in_function code;
6713 const char *libname;
6715 return define_function (name, type, code, (void (*) PROTO((tree)))pushdecl, libname);
6718 /* When we call finish_struct for an anonymous union, we create
6719 default copy constructors and such. But, an anonymous union
6720 shouldn't have such things; this function undoes the damage to the
6721 anonymous union type T.
6723 (The reason that we create the synthesized methods is that we don't
6724 distinguish `union { int i; }' from `typedef union { int i; } U'.
6725 The first is an anonymous union; the second is just an ordinary
6726 union type.) */
6728 void
6729 fixup_anonymous_aggr (t)
6730 tree t;
6732 tree *q;
6734 /* Wipe out memory of synthesized methods */
6735 TYPE_HAS_CONSTRUCTOR (t) = 0;
6736 TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
6737 TYPE_HAS_INIT_REF (t) = 0;
6738 TYPE_HAS_CONST_INIT_REF (t) = 0;
6739 TYPE_HAS_ASSIGN_REF (t) = 0;
6740 TYPE_HAS_CONST_ASSIGN_REF (t) = 0;
6742 /* Splice the implicitly generated functions out of the TYPE_METHODS
6743 list. */
6744 q = &TYPE_METHODS (t);
6745 while (*q)
6747 if (DECL_ARTIFICIAL (*q))
6748 *q = TREE_CHAIN (*q);
6749 else
6750 q = &TREE_CHAIN (*q);
6753 /* ANSI C++ June 5 1992 WP 9.5.3. Anonymous unions may not have
6754 function members. */
6755 if (TYPE_METHODS (t))
6756 error ("an anonymous union cannot have function members");
6759 /* Make sure that a declaration with no declarator is well-formed, i.e.
6760 just defines a tagged type or anonymous union.
6762 Returns the type defined, if any. */
6764 tree
6765 check_tag_decl (declspecs)
6766 tree declspecs;
6768 int found_type = 0;
6769 tree ob_modifier = NULL_TREE;
6770 register tree link;
6771 register tree t = NULL_TREE;
6773 for (link = declspecs; link; link = TREE_CHAIN (link))
6775 register tree value = TREE_VALUE (link);
6777 if (TYPE_P (value))
6779 ++found_type;
6781 if (IS_AGGR_TYPE (value) || TREE_CODE (value) == ENUMERAL_TYPE)
6783 my_friendly_assert (TYPE_MAIN_DECL (value) != NULL_TREE, 261);
6784 t = value;
6787 else if (value == ridpointers[(int) RID_FRIEND])
6789 if (current_class_type == NULL_TREE
6790 || current_scope () != current_class_type)
6791 ob_modifier = value;
6793 else if (value == ridpointers[(int) RID_STATIC]
6794 || value == ridpointers[(int) RID_EXTERN]
6795 || value == ridpointers[(int) RID_AUTO]
6796 || value == ridpointers[(int) RID_REGISTER]
6797 || value == ridpointers[(int) RID_INLINE]
6798 || value == ridpointers[(int) RID_VIRTUAL]
6799 || value == ridpointers[(int) RID_CONST]
6800 || value == ridpointers[(int) RID_VOLATILE]
6801 || value == ridpointers[(int) RID_EXPLICIT])
6802 ob_modifier = value;
6805 if (found_type > 1)
6806 error ("multiple types in one declaration");
6808 /* Inside a class, we might be in a friend or access declaration.
6809 Until we have a good way of detecting the latter, don't warn. */
6810 if (t == NULL_TREE && ! current_class_type)
6811 pedwarn ("declaration does not declare anything");
6813 /* Check for an anonymous union. We're careful
6814 accessing TYPE_IDENTIFIER because some built-in types, like
6815 pointer-to-member types, do not have TYPE_NAME. */
6816 else if (t && IS_AGGR_TYPE_CODE (TREE_CODE (t))
6817 && TYPE_NAME (t)
6818 && ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
6820 /* Anonymous unions are objects, so they can have specifiers. */;
6821 SET_ANON_AGGR_TYPE_P (t);
6823 if (TREE_CODE (t) != UNION_TYPE && pedantic && ! in_system_header)
6824 pedwarn ("ISO C++ prohibits anonymous structs");
6827 else if (ob_modifier)
6829 if (ob_modifier == ridpointers[(int) RID_INLINE]
6830 || ob_modifier == ridpointers[(int) RID_VIRTUAL])
6831 cp_error ("`%D' can only be specified for functions", ob_modifier);
6832 else if (ob_modifier == ridpointers[(int) RID_FRIEND])
6833 cp_error ("`%D' can only be specified inside a class", ob_modifier);
6834 else if (ob_modifier == ridpointers[(int) RID_EXPLICIT])
6835 cp_error ("`%D' can only be specified for constructors",
6836 ob_modifier);
6837 else
6838 cp_error ("`%D' can only be specified for objects and functions",
6839 ob_modifier);
6842 return t;
6845 /* Called when a declaration is seen that contains no names to declare.
6846 If its type is a reference to a structure, union or enum inherited
6847 from a containing scope, shadow that tag name for the current scope
6848 with a forward reference.
6849 If its type defines a new named structure or union
6850 or defines an enum, it is valid but we need not do anything here.
6851 Otherwise, it is an error.
6853 C++: may have to grok the declspecs to learn about static,
6854 complain for anonymous unions. */
6856 void
6857 shadow_tag (declspecs)
6858 tree declspecs;
6860 tree t = check_tag_decl (declspecs);
6862 if (t)
6863 maybe_process_partial_specialization (t);
6865 /* This is where the variables in an anonymous union are
6866 declared. An anonymous union declaration looks like:
6867 union { ... } ;
6868 because there is no declarator after the union, the parser
6869 sends that declaration here. */
6870 if (t && ANON_AGGR_TYPE_P (t))
6872 fixup_anonymous_aggr (t);
6874 if (TYPE_FIELDS (t))
6876 tree decl = grokdeclarator (NULL_TREE, declspecs, NORMAL, 0,
6877 NULL_TREE);
6878 finish_anon_union (decl);
6883 /* Decode a "typename", such as "int **", returning a ..._TYPE node. */
6885 tree
6886 groktypename (typename)
6887 tree typename;
6889 if (TREE_CODE (typename) != TREE_LIST)
6890 return typename;
6891 return grokdeclarator (TREE_VALUE (typename),
6892 TREE_PURPOSE (typename),
6893 TYPENAME, 0, NULL_TREE);
6896 /* Decode a declarator in an ordinary declaration or data definition.
6897 This is called as soon as the type information and variable name
6898 have been parsed, before parsing the initializer if any.
6899 Here we create the ..._DECL node, fill in its type,
6900 and put it on the list of decls for the current context.
6901 The ..._DECL node is returned as the value.
6903 Exception: for arrays where the length is not specified,
6904 the type is left null, to be filled in by `cp_finish_decl'.
6906 Function definitions do not come here; they go to start_function
6907 instead. However, external and forward declarations of functions
6908 do go through here. Structure field declarations are done by
6909 grokfield and not through here. */
6911 /* Set this to zero to debug not using the temporary obstack
6912 to parse initializers. */
6913 int debug_temp_inits = 1;
6915 tree
6916 start_decl (declarator, declspecs, initialized, attributes, prefix_attributes)
6917 tree declarator, declspecs;
6918 int initialized;
6919 tree attributes, prefix_attributes;
6921 register tree decl;
6922 register tree type, tem;
6923 tree context;
6924 extern int have_extern_spec;
6925 extern int used_extern_spec;
6926 tree attrlist;
6928 #if 0
6929 /* See code below that used this. */
6930 int init_written = initialized;
6931 #endif
6933 /* This should only be done once on the top most decl. */
6934 if (have_extern_spec && !used_extern_spec)
6936 declspecs = decl_tree_cons (NULL_TREE, get_identifier ("extern"),
6937 declspecs);
6938 used_extern_spec = 1;
6941 if (attributes || prefix_attributes)
6942 attrlist = build_scratch_list (attributes, prefix_attributes);
6943 else
6944 attrlist = NULL_TREE;
6946 decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
6947 attrlist);
6949 if (decl == NULL_TREE || TREE_CODE (decl) == VOID_TYPE)
6950 return NULL_TREE;
6952 type = TREE_TYPE (decl);
6954 if (type == error_mark_node)
6955 return NULL_TREE;
6957 /* Don't lose if destructors must be executed at file-level. */
6958 if (! processing_template_decl && TREE_STATIC (decl)
6959 && TYPE_NEEDS_DESTRUCTOR (complete_type (type))
6960 && !TREE_PERMANENT (decl))
6962 push_obstacks (&permanent_obstack, &permanent_obstack);
6963 decl = copy_node (decl);
6964 if (TREE_CODE (type) == ARRAY_TYPE)
6966 tree itype = TYPE_DOMAIN (type);
6967 if (itype && ! TREE_PERMANENT (itype))
6969 itype = build_index_type (copy_to_permanent (TYPE_MAX_VALUE (itype)));
6970 type = build_cplus_array_type (TREE_TYPE (type), itype);
6971 TREE_TYPE (decl) = type;
6974 pop_obstacks ();
6977 context
6978 = (TREE_CODE (decl) == FUNCTION_DECL && DECL_VIRTUAL_P (decl))
6979 ? DECL_CLASS_CONTEXT (decl)
6980 : DECL_CONTEXT (decl);
6982 if (initialized && context && TREE_CODE (context) == NAMESPACE_DECL
6983 && context != current_namespace && TREE_CODE (decl) == VAR_DECL)
6985 /* When parsing the initializer, lookup should use the object's
6986 namespace. */
6987 push_decl_namespace (context);
6990 /* We are only interested in class contexts, later. */
6991 if (context && TREE_CODE (context) == NAMESPACE_DECL)
6992 context = NULL_TREE;
6994 if (initialized)
6995 /* Is it valid for this decl to have an initializer at all?
6996 If not, set INITIALIZED to zero, which will indirectly
6997 tell `cp_finish_decl' to ignore the initializer once it is parsed. */
6998 switch (TREE_CODE (decl))
7000 case TYPE_DECL:
7001 /* typedef foo = bar means give foo the same type as bar.
7002 We haven't parsed bar yet, so `cp_finish_decl' will fix that up.
7003 Any other case of an initialization in a TYPE_DECL is an error. */
7004 if (pedantic || list_length (declspecs) > 1)
7006 cp_error ("typedef `%D' is initialized", decl);
7007 initialized = 0;
7009 break;
7011 case FUNCTION_DECL:
7012 cp_error ("function `%#D' is initialized like a variable", decl);
7013 initialized = 0;
7014 break;
7016 default:
7017 break;
7020 if (initialized)
7022 if (! toplevel_bindings_p ()
7023 && DECL_EXTERNAL (decl))
7024 cp_warning ("declaration of `%#D' has `extern' and is initialized",
7025 decl);
7026 DECL_EXTERNAL (decl) = 0;
7027 if (toplevel_bindings_p ())
7028 TREE_STATIC (decl) = 1;
7030 /* Tell `pushdecl' this is an initialized decl
7031 even though we don't yet have the initializer expression.
7032 Also tell `cp_finish_decl' it may store the real initializer. */
7033 DECL_INITIAL (decl) = error_mark_node;
7036 #ifdef SET_DEFAULT_DECL_ATTRIBUTES
7037 SET_DEFAULT_DECL_ATTRIBUTES (decl, attributes);
7038 #endif
7040 /* Set attributes here so if duplicate decl, will have proper attributes. */
7041 cplus_decl_attributes (decl, attributes, prefix_attributes);
7043 if (context && TYPE_SIZE (complete_type (context)) != NULL_TREE)
7045 push_nested_class (context, 2);
7047 if (TREE_CODE (decl) == VAR_DECL)
7049 tree field = lookup_field (context, DECL_NAME (decl), 0, 0);
7050 if (field == NULL_TREE || TREE_CODE (field) != VAR_DECL)
7051 cp_error ("`%#D' is not a static member of `%#T'", decl, context);
7052 else
7054 if (DECL_CONTEXT (field) != context)
7056 cp_pedwarn ("ANSI C++ does not permit `%T::%D' to be defined as `%T::%D'",
7057 DECL_CONTEXT (field), DECL_NAME (decl),
7058 context, DECL_NAME (decl));
7059 DECL_CONTEXT (decl) = DECL_CONTEXT (field);
7061 /* Static data member are tricky; an in-class initialization
7062 still doesn't provide a definition, so the in-class
7063 declaration will have DECL_EXTERNAL set, but will have an
7064 initialization. Thus, duplicate_decls won't warn
7065 about this situation, and so we check here. */
7066 if (DECL_INITIAL (decl) && DECL_INITIAL (field))
7067 cp_error ("duplicate initialization of %D", decl);
7068 if (duplicate_decls (decl, field))
7069 decl = field;
7072 else
7074 tree field = check_classfn (context, decl);
7075 if (field && duplicate_decls (decl, field))
7076 decl = field;
7079 /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set. */
7080 DECL_IN_AGGR_P (decl) = 0;
7081 if ((DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl))
7082 || CLASSTYPE_USE_TEMPLATE (context))
7084 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
7085 /* [temp.expl.spec] An explicit specialization of a static data
7086 member of a template is a definition if the declaration
7087 includes an initializer; otherwise, it is a declaration.
7089 We check for processing_specialization so this only applies
7090 to the new specialization syntax. */
7091 if (DECL_INITIAL (decl) == NULL_TREE && processing_specialization)
7092 DECL_EXTERNAL (decl) = 1;
7095 if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl))
7096 cp_pedwarn ("declaration of `%#D' outside of class is not definition",
7097 decl);
7100 /* Enter this declaration into the symbol table. */
7101 tem = maybe_push_decl (decl);
7103 if (processing_template_decl)
7105 if (at_function_scope_p ())
7106 push_permanent_obstack ();
7108 tem = push_template_decl (tem);
7109 /* In a a local scope, add a representation of this declaration
7110 to the statement tree. */
7111 if (at_function_scope_p ())
7113 add_decl_stmt (decl);
7114 pop_obstacks ();
7119 #if ! defined (ASM_OUTPUT_BSS) && ! defined (ASM_OUTPUT_ALIGNED_BSS)
7120 /* Tell the back-end to use or not use .common as appropriate. If we say
7121 -fconserve-space, we want this to save .data space, at the expense of
7122 wrong semantics. If we say -fno-conserve-space, we want this to
7123 produce errors about redefs; to do this we force variables into the
7124 data segment. */
7125 DECL_COMMON (tem) = flag_conserve_space || ! TREE_PUBLIC (tem);
7126 #endif
7128 if (! processing_template_decl)
7129 start_decl_1 (tem);
7131 /* Corresponding pop_obstacks is done in `cp_finish_decl'. */
7132 push_obstacks_nochange ();
7134 return tem;
7137 void
7138 start_decl_1 (decl)
7139 tree decl;
7141 tree type = TREE_TYPE (decl);
7142 int initialized = (DECL_INITIAL (decl) != NULL_TREE);
7144 if (type == error_mark_node)
7145 return;
7147 /* If this type of object needs a cleanup, and control may
7148 jump past it, make a new binding level so that it is cleaned
7149 up only when it is initialized first. */
7150 if (TYPE_NEEDS_DESTRUCTOR (type)
7151 && current_binding_level->more_cleanups_ok == 0)
7152 pushlevel_temporary (1);
7154 if (initialized)
7155 /* Is it valid for this decl to have an initializer at all?
7156 If not, set INITIALIZED to zero, which will indirectly
7157 tell `cp_finish_decl' to ignore the initializer once it is parsed. */
7159 /* Don't allow initializations for incomplete types except for
7160 arrays which might be completed by the initialization. */
7161 if (TYPE_SIZE (complete_type (type)) != NULL_TREE)
7162 ; /* A complete type is ok. */
7163 else if (TREE_CODE (type) != ARRAY_TYPE)
7165 cp_error ("variable `%#D' has initializer but incomplete type",
7166 decl);
7167 initialized = 0;
7168 type = TREE_TYPE (decl) = error_mark_node;
7170 else if (TYPE_SIZE (complete_type (TREE_TYPE (type))) == NULL_TREE)
7172 if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
7173 cp_error ("elements of array `%#D' have incomplete type", decl);
7174 /* else we already gave an error in start_decl. */
7175 initialized = 0;
7179 if (!initialized
7180 && TREE_CODE (decl) != TYPE_DECL
7181 && TREE_CODE (decl) != TEMPLATE_DECL
7182 && IS_AGGR_TYPE (type) && ! DECL_EXTERNAL (decl))
7184 if ((! processing_template_decl || ! uses_template_parms (type))
7185 && TYPE_SIZE (complete_type (type)) == NULL_TREE)
7187 cp_error ("aggregate `%#D' has incomplete type and cannot be initialized",
7188 decl);
7189 /* Change the type so that assemble_variable will give
7190 DECL an rtl we can live with: (mem (const_int 0)). */
7191 type = TREE_TYPE (decl) = error_mark_node;
7193 else
7195 /* If any base type in the hierarchy of TYPE needs a constructor,
7196 then we set initialized to 1. This way any nodes which are
7197 created for the purposes of initializing this aggregate
7198 will live as long as it does. This is necessary for global
7199 aggregates which do not have their initializers processed until
7200 the end of the file. */
7201 initialized = TYPE_NEEDS_CONSTRUCTING (type);
7205 if (! initialized)
7206 DECL_INITIAL (decl) = NULL_TREE;
7209 /* Handle initialization of references.
7210 These three arguments are from `cp_finish_decl', and have the
7211 same meaning here that they do there.
7213 Quotes on semantics can be found in ARM 8.4.3. */
7215 static void
7216 grok_reference_init (decl, type, init)
7217 tree decl, type, init;
7219 tree tmp;
7221 if (init == NULL_TREE)
7223 if ((DECL_LANG_SPECIFIC (decl) == 0
7224 || DECL_IN_AGGR_P (decl) == 0)
7225 && ! DECL_THIS_EXTERN (decl))
7227 cp_error ("`%D' declared as reference but not initialized", decl);
7228 if (TREE_CODE (decl) == VAR_DECL)
7229 SET_DECL_REFERENCE_SLOT (decl, error_mark_node);
7231 return;
7234 if (init == error_mark_node)
7235 return;
7237 if (TREE_CODE (type) == REFERENCE_TYPE
7238 && TREE_CODE (init) == CONSTRUCTOR)
7240 cp_error ("ANSI C++ forbids use of initializer list to initialize reference `%D'", decl);
7241 return;
7244 if (TREE_CODE (init) == TREE_LIST)
7245 init = build_compound_expr (init);
7247 if (TREE_CODE (TREE_TYPE (init)) == REFERENCE_TYPE)
7248 init = convert_from_reference (init);
7250 if (TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE
7251 && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
7253 /* Note: default conversion is only called in very special cases. */
7254 init = default_conversion (init);
7257 tmp = convert_to_reference
7258 (type, init, CONV_IMPLICIT,
7259 LOOKUP_SPECULATIVELY|LOOKUP_NORMAL|DIRECT_BIND, decl);
7261 if (tmp == error_mark_node)
7262 goto fail;
7263 else if (tmp != NULL_TREE)
7265 init = tmp;
7266 DECL_INITIAL (decl) = save_expr (init);
7268 else
7270 cp_error ("cannot initialize `%T' from `%T'", type, TREE_TYPE (init));
7271 goto fail;
7274 /* ?? Can this be optimized in some cases to
7275 hand back the DECL_INITIAL slot?? */
7276 if (TYPE_SIZE (TREE_TYPE (type)))
7278 init = convert_from_reference (decl);
7279 if (TREE_PERMANENT (decl))
7280 init = copy_to_permanent (init);
7281 SET_DECL_REFERENCE_SLOT (decl, init);
7284 if (TREE_STATIC (decl) && ! TREE_CONSTANT (DECL_INITIAL (decl)))
7286 expand_static_init (decl, DECL_INITIAL (decl));
7287 DECL_INITIAL (decl) = NULL_TREE;
7289 return;
7291 fail:
7292 if (TREE_CODE (decl) == VAR_DECL)
7293 SET_DECL_REFERENCE_SLOT (decl, error_mark_node);
7294 return;
7297 /* Fill in DECL_INITIAL with some magical value to prevent expand_decl from
7298 mucking with forces it does not comprehend (i.e. initialization with a
7299 constructor). If we are at global scope and won't go into COMMON, fill
7300 it in with a dummy CONSTRUCTOR to force the variable into .data;
7301 otherwise we can use error_mark_node. */
7303 static tree
7304 obscure_complex_init (decl, init)
7305 tree decl, init;
7307 if (! flag_no_inline && TREE_STATIC (decl))
7309 if (extract_init (decl, init))
7310 return NULL_TREE;
7313 #if ! defined (ASM_OUTPUT_BSS) && ! defined (ASM_OUTPUT_ALIGNED_BSS)
7314 if (toplevel_bindings_p () && ! DECL_COMMON (decl))
7315 DECL_INITIAL (decl) = build (CONSTRUCTOR, TREE_TYPE (decl), NULL_TREE,
7316 NULL_TREE);
7317 else
7318 #endif
7319 DECL_INITIAL (decl) = error_mark_node;
7321 return init;
7324 /* When parsing `int a[] = {1, 2};' we don't know the size of the
7325 array until we finish parsing the initializer. If that's the
7326 situation we're in, update DECL accordingly. */
7328 static void
7329 maybe_deduce_size_from_array_init (decl, init)
7330 tree decl;
7331 tree init;
7333 tree type = TREE_TYPE (decl);
7335 if (TREE_CODE (type) == ARRAY_TYPE
7336 && TYPE_DOMAIN (type) == NULL_TREE
7337 && TREE_CODE (decl) != TYPE_DECL)
7339 int do_default
7340 = (TREE_STATIC (decl)
7341 /* Even if pedantic, an external linkage array
7342 may have incomplete type at first. */
7343 ? pedantic && ! DECL_EXTERNAL (decl)
7344 : !DECL_EXTERNAL (decl));
7345 tree initializer = init ? init : DECL_INITIAL (decl);
7346 int failure = complete_array_type (type, initializer, do_default);
7348 if (failure == 1)
7349 cp_error ("initializer fails to determine size of `%D'", decl);
7351 if (failure == 2)
7353 if (do_default)
7354 cp_error ("array size missing in `%D'", decl);
7355 /* If a `static' var's size isn't known, make it extern as
7356 well as static, so it does not get allocated. If it's not
7357 `static', then don't mark it extern; finish_incomplete_decl
7358 will give it a default size and it will get allocated. */
7359 else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
7360 DECL_EXTERNAL (decl) = 1;
7363 if (pedantic && TYPE_DOMAIN (type) != NULL_TREE
7364 && tree_int_cst_lt (TYPE_MAX_VALUE (TYPE_DOMAIN (type)),
7365 integer_zero_node))
7366 cp_error ("zero-size array `%D'", decl);
7368 layout_decl (decl, 0);
7372 /* Set DECL_SIZE, DECL_ALIGN, etc. for DECL (a VAR_DECL), and issue
7373 any appropriate error messages regarding the layout. INITP is a
7374 pointer to the initializer for DECL; the initializer may be
7375 modified by this function. */
7377 static void
7378 layout_var_decl (decl, initp)
7379 tree decl;
7380 tree *initp;
7382 tree ttype = target_type (TREE_TYPE (decl));
7384 if (DECL_SIZE (decl) == NULL_TREE
7385 && TYPE_SIZE (complete_type (TREE_TYPE (decl))) != NULL_TREE)
7386 layout_decl (decl, 0);
7388 if (TREE_STATIC (decl) && DECL_SIZE (decl) == NULL_TREE)
7390 /* A static variable with an incomplete type:
7391 that is an error if it is initialized.
7392 Otherwise, let it through, but if it is not `extern'
7393 then it may cause an error message later. */
7394 if (DECL_INITIAL (decl) != NULL_TREE)
7395 cp_error ("storage size of `%D' isn't known", decl);
7396 *initp = NULL_TREE;
7398 else if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
7400 /* An automatic variable with an incomplete type: that is an error.
7401 Don't talk about array types here, since we took care of that
7402 message in grokdeclarator. */
7403 cp_error ("storage size of `%D' isn't known", decl);
7404 TREE_TYPE (decl) = error_mark_node;
7406 else if (!DECL_EXTERNAL (decl) && IS_AGGR_TYPE (ttype))
7407 /* Let debugger know it should output info for this type. */
7408 note_debug_info_needed (ttype);
7410 if (TREE_STATIC (decl) && DECL_CLASS_SCOPE_P (decl))
7411 note_debug_info_needed (DECL_CONTEXT (decl));
7413 if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
7414 && DECL_SIZE (decl) != NULL_TREE
7415 && ! TREE_CONSTANT (DECL_SIZE (decl)))
7417 if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
7418 constant_expression_warning (DECL_SIZE (decl));
7419 else
7420 cp_error ("storage size of `%D' isn't constant", decl);
7424 /* Return a cleanup for DECL, created on whatever obstack is
7425 appropriate. */
7427 static tree
7428 build_cleanup_on_safe_obstack (decl)
7429 tree decl;
7431 tree cleanup;
7432 tree type;
7433 int need_pop;
7435 type = TREE_TYPE (decl);
7437 /* Only variables get cleaned up. */
7438 if (TREE_CODE (decl) != VAR_DECL)
7439 return NULL_TREE;
7441 /* And only things with destructors need cleaning up. */
7442 if (!TYPE_NEEDS_DESTRUCTOR (type))
7443 return NULL_TREE;
7445 if (TREE_CODE (decl) == VAR_DECL &&
7446 (DECL_EXTERNAL (decl) || TREE_STATIC (decl)))
7447 /* We don't clean up things that aren't defined in this
7448 translation unit, or that need a static cleanup. The latter
7449 are handled by finish_file. */
7450 return NULL_TREE;
7452 /* Switch to an obstack that will live until the point where the
7453 cleanup code is actually expanded. */
7454 need_pop = suspend_momentary ();
7456 /* Compute the cleanup. */
7457 cleanup = maybe_build_cleanup (decl);
7459 /* Pop back to the obstack we were on before. */
7460 resume_momentary (need_pop);
7462 return cleanup;
7465 /* If a local static variable is declared in an inline function, or if
7466 we have a weak definition, we must endeavor to create only one
7467 instance of the variable at link-time. */
7469 static void
7470 maybe_commonize_var (decl)
7471 tree decl;
7473 /* Static data in a function with comdat linkage also has comdat
7474 linkage. */
7475 if (TREE_STATIC (decl)
7476 /* Don't mess with __FUNCTION__. */
7477 && ! TREE_ASM_WRITTEN (decl)
7478 && current_function_decl
7479 && DECL_CONTEXT (decl) == current_function_decl
7480 && (DECL_THIS_INLINE (current_function_decl)
7481 || DECL_TEMPLATE_INSTANTIATION (current_function_decl))
7482 && TREE_PUBLIC (current_function_decl))
7484 /* Rather than try to get this right with inlining, we suppress
7485 inlining of such functions. */
7486 current_function_cannot_inline
7487 = "function with static variable cannot be inline";
7489 /* If flag_weak, we don't need to mess with this, as we can just
7490 make the function weak, and let it refer to its unique local
7491 copy. This works because we don't allow the function to be
7492 inlined. */
7493 if (! flag_weak)
7495 if (DECL_INTERFACE_KNOWN (current_function_decl))
7497 TREE_PUBLIC (decl) = 1;
7498 DECL_EXTERNAL (decl) = DECL_EXTERNAL (current_function_decl);
7500 else if (DECL_INITIAL (decl) == NULL_TREE
7501 || DECL_INITIAL (decl) == error_mark_node)
7503 TREE_PUBLIC (decl) = 1;
7504 DECL_COMMON (decl) = 1;
7506 /* else we lose. We can only do this if we can use common,
7507 which we can't if it has been initialized. */
7509 if (TREE_PUBLIC (decl))
7510 DECL_ASSEMBLER_NAME (decl)
7511 = build_static_name (current_function_decl, DECL_NAME (decl));
7512 else if (! DECL_ARTIFICIAL (decl))
7514 cp_warning_at ("sorry: semantics of inline function static data `%#D' are wrong (you'll wind up with multiple copies)", decl);
7515 cp_warning_at (" you can work around this by removing the initializer", decl);
7519 else if (DECL_LANG_SPECIFIC (decl) && DECL_COMDAT (decl))
7520 /* Set it up again; we might have set DECL_INITIAL since the last
7521 time. */
7522 comdat_linkage (decl);
7525 /* Issue an error message if DECL is an uninitialized const variable. */
7527 static void
7528 check_for_uninitialized_const_var (decl)
7529 tree decl;
7531 tree type = TREE_TYPE (decl);
7533 /* ``Unless explicitly declared extern, a const object does not have
7534 external linkage and must be initialized. ($8.4; $12.1)'' ARM
7535 7.1.6 */
7536 if (TREE_CODE (decl) == VAR_DECL
7537 && TREE_CODE (type) != REFERENCE_TYPE
7538 && CP_TYPE_CONST_P (type)
7539 && !TYPE_NEEDS_CONSTRUCTING (type)
7540 && !DECL_INITIAL (decl))
7541 cp_error ("uninitialized const `%D'", decl);
7544 /* Verify INITP (the initializer for DECL), and record the
7545 initialization in DECL_INITIAL, if appropriate. The initializer
7546 may be modified by this function. */
7548 static void
7549 check_initializer (decl, initp)
7550 tree decl;
7551 tree *initp;
7553 tree init;
7554 tree type;
7556 if (TREE_CODE (decl) == FIELD_DECL)
7557 return;
7559 type = TREE_TYPE (decl);
7560 init = *initp;
7562 /* If `start_decl' didn't like having an initialization, ignore it now. */
7563 if (init != NULL_TREE && DECL_INITIAL (decl) == NULL_TREE)
7564 init = NULL_TREE;
7565 else if (DECL_EXTERNAL (decl))
7567 else if (TREE_CODE (type) == REFERENCE_TYPE)
7569 if (TREE_STATIC (decl))
7570 make_decl_rtl (decl, NULL_PTR, toplevel_bindings_p ());
7571 grok_reference_init (decl, type, init);
7572 init = NULL_TREE;
7575 /* Check for certain invalid initializations. */
7576 if (init)
7578 if (TYPE_SIZE (type) && !TREE_CONSTANT (TYPE_SIZE (type)))
7580 cp_error ("variable-sized object `%D' may not be initialized", decl);
7581 init = NULL_TREE;
7583 if (TREE_CODE (type) == ARRAY_TYPE
7584 && !TYPE_SIZE (complete_type (TREE_TYPE (type))))
7586 cp_error ("elements of array `%#D' have incomplete type", decl);
7587 init = NULL_TREE;
7591 if (TREE_CODE (decl) == CONST_DECL)
7593 my_friendly_assert (TREE_CODE (decl) != REFERENCE_TYPE, 148);
7595 DECL_INITIAL (decl) = init;
7597 /* This will keep us from needing to worry about our obstacks. */
7598 my_friendly_assert (init != NULL_TREE, 149);
7599 init = NULL_TREE;
7601 else if (init)
7603 if (TYPE_HAS_CONSTRUCTOR (type) || TYPE_NEEDS_CONSTRUCTING (type))
7605 if (TREE_CODE (type) == ARRAY_TYPE)
7606 init = digest_init (type, init, (tree *) 0);
7607 else if (TREE_CODE (init) == CONSTRUCTOR
7608 && TREE_HAS_CONSTRUCTOR (init))
7610 if (TYPE_NON_AGGREGATE_CLASS (type))
7612 cp_error ("`%D' must be initialized by constructor, not by `{...}'",
7613 decl);
7614 init = error_mark_node;
7616 else
7617 goto dont_use_constructor;
7620 else
7622 dont_use_constructor:
7623 if (TREE_CODE (init) != TREE_VEC)
7624 init = store_init_value (decl, init);
7627 if (init)
7628 /* We must hide the initializer so that expand_decl
7629 won't try to do something it does not understand. */
7630 init = obscure_complex_init (decl, init);
7632 else if (DECL_EXTERNAL (decl))
7634 else if (TREE_CODE_CLASS (TREE_CODE (type)) == 't'
7635 && (IS_AGGR_TYPE (type) || TYPE_NEEDS_CONSTRUCTING (type)))
7637 tree core_type = strip_array_types (type);
7639 if (! TYPE_NEEDS_CONSTRUCTING (core_type))
7641 if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type))
7642 cp_error ("structure `%D' with uninitialized const members", decl);
7643 if (CLASSTYPE_REF_FIELDS_NEED_INIT (core_type))
7644 cp_error ("structure `%D' with uninitialized reference members",
7645 decl);
7648 check_for_uninitialized_const_var (decl);
7650 if (TYPE_SIZE (type) != NULL_TREE
7651 && TYPE_NEEDS_CONSTRUCTING (type))
7652 init = obscure_complex_init (decl, NULL_TREE);
7655 else
7656 check_for_uninitialized_const_var (decl);
7658 /* Store the modified initializer for our caller. */
7659 *initp = init;
7662 /* If DECL is not a local variable, give it RTL. */
7664 static void
7665 make_rtl_for_nonlocal_decl (decl, init, asmspec)
7666 tree decl;
7667 tree init;
7668 const char *asmspec;
7670 int toplev;
7671 tree type;
7673 type = TREE_TYPE (decl);
7674 toplev = toplevel_bindings_p ();
7675 push_obstacks_nochange ();
7676 if (TREE_STATIC (decl)
7677 && TYPE_NEEDS_DESTRUCTOR (type)
7678 && allocation_temporary_p ())
7679 end_temporary_allocation ();
7681 if (TREE_CODE (decl) == VAR_DECL && DECL_VIRTUAL_P (decl))
7682 make_decl_rtl (decl, NULL_PTR, toplev);
7683 else if (TREE_CODE (decl) == VAR_DECL
7684 && TREE_READONLY (decl)
7685 && DECL_INITIAL (decl) != NULL_TREE
7686 && DECL_INITIAL (decl) != error_mark_node
7687 && ! EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl)))
7689 DECL_INITIAL (decl) = save_expr (DECL_INITIAL (decl));
7691 if (asmspec)
7692 DECL_ASSEMBLER_NAME (decl) = get_identifier (asmspec);
7694 if (! toplev
7695 && TREE_STATIC (decl)
7696 && ! TREE_SIDE_EFFECTS (decl)
7697 && ! TREE_PUBLIC (decl)
7698 && ! DECL_EXTERNAL (decl)
7699 && ! TYPE_NEEDS_DESTRUCTOR (type)
7700 && DECL_MODE (decl) != BLKmode)
7702 /* If this variable is really a constant, then fill its DECL_RTL
7703 slot with something which won't take up storage.
7704 If something later should take its address, we can always give
7705 it legitimate RTL at that time. */
7706 DECL_RTL (decl) = gen_reg_rtx (DECL_MODE (decl));
7707 store_expr (DECL_INITIAL (decl), DECL_RTL (decl), 0);
7708 TREE_ASM_WRITTEN (decl) = 1;
7710 else if (toplev && ! TREE_PUBLIC (decl))
7712 /* If this is a static const, change its apparent linkage
7713 if it belongs to a #pragma interface. */
7714 if (!interface_unknown)
7716 TREE_PUBLIC (decl) = 1;
7717 DECL_EXTERNAL (decl) = interface_only;
7719 make_decl_rtl (decl, asmspec, toplev);
7721 else
7722 rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
7724 else if (TREE_CODE (decl) == VAR_DECL
7725 && DECL_LANG_SPECIFIC (decl)
7726 && DECL_IN_AGGR_P (decl))
7728 my_friendly_assert (TREE_STATIC (decl), 19990828);
7730 if (init == NULL_TREE
7731 #ifdef DEFAULT_STATIC_DEFS
7732 /* If this code is dead, then users must
7733 explicitly declare static member variables
7734 outside the class def'n as well. */
7735 && TYPE_NEEDS_CONSTRUCTING (type)
7736 #endif
7739 DECL_EXTERNAL (decl) = 1;
7740 make_decl_rtl (decl, asmspec, 1);
7742 else
7743 rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
7745 else
7746 rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
7748 pop_obstacks ();
7751 /* The old ARM scoping rules injected variables declared in the
7752 initialization statement of a for-statement into the surrounding
7753 scope. We support this usage, in order to be backward-compatible.
7754 DECL is a just-declared VAR_DECL; if necessary inject its
7755 declaration into the surrounding scope. */
7757 void
7758 maybe_inject_for_scope_var (decl)
7759 tree decl;
7761 if (current_binding_level->is_for_scope)
7763 struct binding_level *outer
7764 = current_binding_level->level_chain;
7766 /* Check to see if the same name is already bound at the outer
7767 level, either because it was directly declared, or because a
7768 dead for-decl got preserved. In either case, the code would
7769 not have been valid under the ARM scope rules, so clear
7770 is_for_scope for the current_binding_level.
7772 Otherwise, we need to preserve the temp slot for decl to last
7773 into the outer binding level. */
7775 tree outer_binding
7776 = TREE_CHAIN (IDENTIFIER_BINDING (DECL_NAME (decl)));
7778 if (outer_binding && BINDING_LEVEL (outer_binding) == outer
7779 && (TREE_CODE (BINDING_VALUE (outer_binding))
7780 == VAR_DECL)
7781 && DECL_DEAD_FOR_LOCAL (BINDING_VALUE (outer_binding)))
7783 BINDING_VALUE (outer_binding)
7784 = DECL_SHADOWED_FOR_VAR (BINDING_VALUE (outer_binding));
7785 current_binding_level->is_for_scope = 0;
7787 else if (DECL_IN_MEMORY_P (decl))
7788 preserve_temp_slots (DECL_RTL (decl));
7792 /* Generate code to initialized DECL (a local variable). */
7794 void
7795 initialize_local_var (decl, init, flags)
7796 tree decl;
7797 tree init;
7798 int flags;
7800 tree type;
7801 tree cleanup;
7803 type = TREE_TYPE (decl);
7805 cleanup = build_cleanup_on_safe_obstack (decl);
7807 if (DECL_SIZE (decl) == NULL_TREE && !TREE_STATIC (decl))
7809 /* If we used it already as memory, it must stay in memory. */
7810 DECL_INITIAL (decl) = NULL_TREE;
7811 TREE_ADDRESSABLE (decl) = TREE_USED (decl);
7814 if (DECL_RTL (decl))
7815 /* Only a RESULT_DECL should have non-NULL RTL when arriving here.
7816 All other local variables are assigned RTL in this function. */
7817 my_friendly_assert (TREE_CODE (decl) == RESULT_DECL, 19990828);
7818 else
7819 /* Create RTL for this variable. */
7820 expand_decl (decl);
7822 expand_start_target_temps ();
7824 if (DECL_SIZE (decl) && type != error_mark_node)
7826 int already_used;
7828 /* Compute and store the initial value. */
7829 already_used = TREE_USED (decl) || TREE_USED (type);
7831 if (init || TYPE_NEEDS_CONSTRUCTING (type))
7833 emit_line_note (DECL_SOURCE_FILE (decl),
7834 DECL_SOURCE_LINE (decl));
7835 /* We call push_momentary here so that when
7836 finish_expr_stmt clears the momentary obstack it
7837 doesn't destory any momentary expressions we may
7838 have lying around. Although cp_finish_decl is
7839 usually called at the end of a declaration
7840 statement, it may also be called for a temporary
7841 object in the middle of an expression. */
7842 push_momentary ();
7843 finish_expr_stmt (build_aggr_init (decl, init, flags));
7844 pop_momentary ();
7846 else
7847 expand_decl_init (decl);
7849 /* Set this to 0 so we can tell whether an aggregate which was
7850 initialized was ever used. Don't do this if it has a
7851 destructor, so we don't complain about the 'resource
7852 allocation is initialization' idiom. Now set
7853 attribute((unused)) on types so decls of that type will be
7854 marked used. (see TREE_USED, above.) */
7855 if (TYPE_NEEDS_CONSTRUCTING (type)
7856 && ! already_used
7857 && cleanup == NULL_TREE
7858 && DECL_NAME (decl))
7859 TREE_USED (decl) = 0;
7860 else if (already_used)
7861 TREE_USED (decl) = 1;
7864 /* Cleanup any temporaries needed for the initial value. */
7865 expand_end_target_temps ();
7867 /* Record the cleanup required for this declaration. */
7868 if (DECL_SIZE (decl)
7869 && type != error_mark_node
7870 && cleanup
7871 && !expand_decl_cleanup (decl, cleanup))
7872 cp_error ("parser lost in parsing declaration of `%D'", decl);
7875 /* Finish processing of a declaration;
7876 install its line number and initial value.
7877 If the length of an array type is not known before,
7878 it must be determined now, from the initial value, or it is an error.
7880 Call `pop_obstacks' iff NEED_POP is nonzero.
7882 For C++, `cp_finish_decl' must be fairly evasive: it must keep initializers
7883 for aggregates that have constructors alive on the permanent obstack,
7884 so that the global initializing functions can be written at the end.
7886 INIT0 holds the value of an initializer that should be allowed to escape
7887 the normal rules.
7889 FLAGS is LOOKUP_ONLYCONVERTING is the = init syntax was used, else 0
7890 if the (init) syntax was used.
7892 For functions that take default parameters, DECL points to its
7893 "maximal" instantiation. `cp_finish_decl' must then also declared its
7894 subsequently lower and lower forms of instantiation, checking for
7895 ambiguity as it goes. This can be sped up later. */
7897 void
7898 cp_finish_decl (decl, init, asmspec_tree, need_pop, flags)
7899 tree decl, init;
7900 tree asmspec_tree;
7901 int need_pop;
7902 int flags;
7904 register tree type;
7905 tree ttype = NULL_TREE;
7906 int temporary = allocation_temporary_p ();
7907 const char *asmspec = NULL;
7908 int was_readonly = 0;
7910 /* If this is 0, then we did not change obstacks. */
7911 if (! decl)
7913 if (init)
7914 error ("assignment (not initialization) in declaration");
7915 return;
7918 /* If a name was specified, get the string. */
7919 if (asmspec_tree)
7920 asmspec = TREE_STRING_POINTER (asmspec_tree);
7922 if (init && TREE_CODE (init) == NAMESPACE_DECL)
7924 cp_error ("Cannot initialize `%D' to namespace `%D'",
7925 decl, init);
7926 init = NULL_TREE;
7929 if (current_class_type
7930 && DECL_REAL_CONTEXT (decl) == current_class_type
7931 && TYPE_BEING_DEFINED (current_class_type)
7932 && (DECL_INITIAL (decl) || init))
7933 DECL_DEFINED_IN_CLASS_P (decl) = 1;
7935 if (TREE_CODE (decl) == VAR_DECL
7936 && DECL_CONTEXT (decl)
7937 && TREE_CODE (DECL_CONTEXT (decl)) == NAMESPACE_DECL
7938 && DECL_CONTEXT (decl) != current_namespace
7939 && init)
7941 /* Leave the namespace of the object. */
7942 pop_decl_namespace ();
7945 type = complete_type (TREE_TYPE (decl));
7947 if (type == error_mark_node)
7949 if (toplevel_bindings_p () && temporary)
7950 end_temporary_allocation ();
7952 return;
7955 if (TYPE_HAS_MUTABLE_P (type))
7956 TREE_READONLY (decl) = 0;
7958 if (processing_template_decl)
7960 if (init && DECL_INITIAL (decl))
7961 DECL_INITIAL (decl) = copy_to_permanent (init);
7962 goto finish_end0;
7965 /* Parameters are handled by store_parm_decls, not cp_finish_decl. */
7966 my_friendly_assert (TREE_CODE (decl) != PARM_DECL, 19990828);
7968 /* Take care of TYPE_DECLs up front. */
7969 if (TREE_CODE (decl) == TYPE_DECL)
7971 if (init && DECL_INITIAL (decl))
7973 /* typedef foo = bar; store the type of bar as the type of foo. */
7974 TREE_TYPE (decl) = type = TREE_TYPE (init);
7975 DECL_INITIAL (decl) = init = NULL_TREE;
7977 if (type != error_mark_node
7978 && IS_AGGR_TYPE (type) && DECL_NAME (decl))
7980 if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
7981 cp_warning ("shadowing previous type declaration of `%#D'", decl);
7982 set_identifier_type_value (DECL_NAME (decl), type);
7983 CLASSTYPE_GOT_SEMICOLON (type) = 1;
7985 GNU_xref_decl (current_function_decl, decl);
7987 /* If we have installed this as the canonical typedef for this
7988 type, and that type has not been defined yet, delay emitting
7989 the debug information for it, as we will emit it later. */
7990 if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
7991 && TYPE_SIZE (TREE_TYPE (decl)) == NULL_TREE)
7992 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
7994 rest_of_decl_compilation (decl, NULL_PTR,
7995 DECL_CONTEXT (decl) == NULL_TREE, at_eof);
7996 goto finish_end;
7999 if (TREE_CODE (decl) != FUNCTION_DECL)
8000 ttype = target_type (type);
8002 if (! DECL_EXTERNAL (decl) && TREE_READONLY (decl)
8003 && TYPE_NEEDS_CONSTRUCTING (type))
8005 /* Currently, GNU C++ puts constants in text space, making them
8006 impossible to initialize. In the future, one would hope for
8007 an operating system which understood the difference between
8008 initialization and the running of a program. */
8009 was_readonly = 1;
8010 TREE_READONLY (decl) = 0;
8013 if (TREE_CODE (decl) == FIELD_DECL && asmspec)
8015 /* This must override the asm specifier which was placed by
8016 grokclassfn. Lay this out fresh. */
8017 DECL_RTL (TREE_TYPE (decl)) = NULL_RTX;
8018 DECL_ASSEMBLER_NAME (decl) = get_identifier (asmspec);
8019 make_decl_rtl (decl, asmspec, 0);
8022 check_initializer (decl, &init);
8024 GNU_xref_decl (current_function_decl, decl);
8026 /* For top-level declaration, the initial value was read in
8027 the temporary obstack. MAXINDEX, rtl, etc. to be made below
8028 must go in the permanent obstack; but don't discard the
8029 temporary data yet. */
8031 if (toplevel_bindings_p () && temporary)
8032 end_temporary_allocation ();
8034 /* Deduce size of array from initialization, if not already known. */
8035 maybe_deduce_size_from_array_init (decl, init);
8037 if (TREE_CODE (decl) == VAR_DECL)
8038 layout_var_decl (decl, &init);
8040 /* Output the assembler code and/or RTL code for variables and functions,
8041 unless the type is an undefined structure or union.
8042 If not, it will get done when the type is completed. */
8043 if (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == FUNCTION_DECL
8044 || TREE_CODE (decl) == RESULT_DECL)
8046 /* ??? FIXME: What about nested classes? */
8047 int toplev = toplevel_bindings_p ();
8049 if (TREE_CODE (decl) == VAR_DECL)
8050 maybe_commonize_var (decl);
8052 make_rtl_for_nonlocal_decl (decl, init, asmspec);
8054 if (TREE_CODE (type) == FUNCTION_TYPE
8055 || TREE_CODE (type) == METHOD_TYPE)
8056 abstract_virtuals_error (decl,
8057 strip_array_types (TREE_TYPE (type)));
8058 else
8059 abstract_virtuals_error (decl, strip_array_types (type));
8061 if (TREE_CODE (decl) == FUNCTION_DECL)
8063 else if (DECL_EXTERNAL (decl)
8064 && ! (DECL_LANG_SPECIFIC (decl)
8065 && DECL_NOT_REALLY_EXTERN (decl)))
8067 if (init)
8068 DECL_INITIAL (decl) = init;
8070 else if (TREE_STATIC (decl) && type != error_mark_node)
8072 /* Cleanups for static variables are handled by `finish_file'. */
8073 if (TYPE_NEEDS_CONSTRUCTING (type) || init != NULL_TREE
8074 || TYPE_NEEDS_DESTRUCTOR (type))
8075 expand_static_init (decl, init);
8077 else if (! toplev)
8079 /* This is a local declaration. */
8080 maybe_inject_for_scope_var (decl);
8081 /* Initialize the local variable. But, if we're building a
8082 statement-tree, we'll do the initialization when we
8083 expand the tree. */
8084 if (!building_stmt_tree ())
8085 initialize_local_var (decl, init, flags);
8086 else if (init || DECL_INITIAL (decl) == error_mark_node)
8087 DECL_INITIAL (decl) = init;
8089 finish_end0:
8091 /* Undo call to `pushclass' that was done in `start_decl'
8092 due to initialization of qualified member variable.
8093 I.e., Foo::x = 10; */
8095 tree context = DECL_REAL_CONTEXT (decl);
8096 if (context
8097 && TREE_CODE_CLASS (TREE_CODE (context)) == 't'
8098 && (TREE_CODE (decl) == VAR_DECL
8099 /* We also have a pushclass done that we need to undo here
8100 if we're at top level and declare a method. */
8101 || TREE_CODE (decl) == FUNCTION_DECL)
8102 /* If size hasn't been set, we're still defining it,
8103 and therefore inside the class body; don't pop
8104 the binding level.. */
8105 && TYPE_SIZE (context) != NULL_TREE
8106 && context == current_class_type)
8107 pop_nested_class ();
8111 finish_end:
8113 /* If requested, warn about definitions of large data objects. */
8115 if (warn_larger_than
8116 && ! processing_template_decl
8117 && (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == PARM_DECL)
8118 && !DECL_EXTERNAL (decl))
8120 register tree decl_size = DECL_SIZE (decl);
8122 if (decl_size && TREE_CODE (decl_size) == INTEGER_CST)
8124 unsigned units = TREE_INT_CST_LOW (decl_size) / BITS_PER_UNIT;
8126 if (units > larger_than_size)
8127 warning_with_decl (decl, "size of `%s' is %u bytes", units);
8131 if (need_pop)
8132 /* Resume permanent allocation, if not within a function. The
8133 corresponding push_obstacks_nochange is in start_decl,
8134 start_method, groktypename, and in grokfield. */
8135 pop_obstacks ();
8137 if (was_readonly)
8138 TREE_READONLY (decl) = 1;
8141 /* This is here for a midend callback from c-common.c */
8143 void
8144 finish_decl (decl, init, asmspec_tree)
8145 tree decl, init;
8146 tree asmspec_tree;
8148 cp_finish_decl (decl, init, asmspec_tree, 1, 0);
8151 void
8152 expand_static_init (decl, init)
8153 tree decl;
8154 tree init;
8156 tree oldstatic = value_member (decl, static_aggregates);
8158 if (oldstatic)
8160 if (TREE_PURPOSE (oldstatic) && init != NULL_TREE)
8161 cp_error ("multiple initializations given for `%D'", decl);
8163 else if (! toplevel_bindings_p ())
8165 /* Emit code to perform this initialization but once. */
8166 tree temp;
8167 tree if_stmt;
8168 tree assignment;
8169 tree temp_init;
8171 /* Remember this information until end of file. */
8172 push_obstacks (&permanent_obstack, &permanent_obstack);
8174 /* Emit code to perform this initialization but once. This code
8175 looks like:
8177 static int temp = 0;
8178 if (!temp) {
8179 // Do initialization.
8180 temp = 1;
8181 // Register variable for destruction at end of program.
8184 Note that the `temp' variable is only set to 1 *after* the
8185 initialization is complete. This ensures that an exception,
8186 thrown during the construction, will cause the variable to
8187 reinitialized when we pass through this code again, as per:
8189 [stmt.dcl]
8191 If the initialization exits by throwing an exception, the
8192 initialization is not complete, so it will be tried again
8193 the next time control enters the declaration.
8195 In theory, this process should be thread-safe, too; multiple
8196 threads should not be able to initialize the variable more
8197 than once. We don't yet attempt to ensure thread-safety. */
8198 temp = get_temp_name (integer_type_node, 1);
8199 rest_of_decl_compilation (temp, NULL_PTR, 0, 0);
8201 /* Begin the conditional initialization. */
8202 if_stmt = begin_if_stmt ();
8203 finish_if_stmt_cond (build_binary_op (EQ_EXPR, temp,
8204 integer_zero_node),
8205 if_stmt);
8207 /* Do the initialization itself. */
8208 if (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))
8209 || (init && TREE_CODE (init) == TREE_LIST))
8210 assignment = build_aggr_init (decl, init, 0);
8211 else if (init)
8212 assignment = build_modify_expr (decl, NOP_EXPR, init);
8213 else
8214 assignment = NULL_TREE;
8216 /* Once the assignment is complete, set TEMP to 1. Since the
8217 construction of the static object is complete at this point,
8218 we want to make sure TEMP is set to 1 even if a temporary
8219 constructed during the initialization throws an exception
8220 when it is destroyed. So, we combine the initialization and
8221 the assignment to TEMP into a single expression, ensuring
8222 that when we call finish_expr_stmt the cleanups will not be
8223 run until after TEMP is set to 1. */
8224 temp_init = build_modify_expr (temp, NOP_EXPR, integer_one_node);
8225 if (assignment)
8227 assignment = tree_cons (NULL_TREE, assignment,
8228 build_tree_list (NULL_TREE,
8229 temp_init));
8230 assignment = build_compound_expr (assignment);
8232 else
8233 assignment = temp_init;
8234 finish_expr_stmt (assignment);
8236 /* Use atexit to register a function for destroying this static
8237 variable. */
8238 if (TYPE_NEEDS_DESTRUCTOR (TREE_TYPE (decl)))
8240 tree cleanup, fcall;
8241 static tree Atexit = 0;
8242 int saved_flag_access_control;
8244 if (Atexit == 0)
8246 tree atexit_fndecl, PFV, pfvlist;
8247 /* Remember this information until end of file. */
8248 push_obstacks (&permanent_obstack, &permanent_obstack);
8249 PFV = build_pointer_type (build_function_type
8250 (void_type_node, void_list_node));
8252 pfvlist = tree_cons (NULL_TREE, PFV, void_list_node);
8254 push_lang_context (lang_name_c);
8255 /* Note that we do not call pushdecl for this function;
8256 there's no reason that this declaration should be
8257 accessible to anyone. */
8258 atexit_fndecl
8259 = define_function ("atexit",
8260 build_function_type (void_type_node,
8261 pfvlist),
8262 NOT_BUILT_IN,
8263 /*pfn=*/0,
8264 NULL_PTR);
8265 mark_used (atexit_fndecl);
8266 Atexit = default_conversion (atexit_fndecl);
8267 pop_lang_context ();
8268 pop_obstacks ();
8271 /* Call build_cleanup before we enter the anonymous function
8272 so that any access checks will be done relative to the
8273 current scope, rather than the scope of the anonymous
8274 function. */
8275 build_cleanup (decl);
8277 /* Now start the function. */
8278 cleanup = start_anon_func ();
8280 /* Now, recompute the cleanup. It may contain SAVE_EXPRs
8281 that refer to the original function, rather than the
8282 anonymous one. That will make the back-end think that
8283 nested functions are in use, which causes confusion. */
8284 saved_flag_access_control = flag_access_control;
8285 flag_access_control = 0;
8286 fcall = build_cleanup (decl);
8287 flag_access_control = saved_flag_access_control;
8289 /* Finish off the function. */
8290 expand_expr_stmt (fcall);
8291 end_anon_func ();
8293 /* Call atexit with the cleanup function. */
8294 mark_addressable (cleanup);
8295 cleanup = build_unary_op (ADDR_EXPR, cleanup, 0);
8296 fcall = build_function_call (Atexit,
8297 expr_tree_cons (NULL_TREE,
8298 cleanup,
8299 NULL_TREE));
8300 finish_expr_stmt (fcall);
8303 finish_then_clause (if_stmt);
8304 finish_if_stmt ();
8306 /* Resume old (possibly temporary) allocation. */
8307 pop_obstacks ();
8309 else
8311 /* This code takes into account memory allocation policy of
8312 `start_decl'. Namely, if TYPE_NEEDS_CONSTRUCTING does not
8313 hold for this object, then we must make permanent the storage
8314 currently in the temporary obstack. */
8315 if (!TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl)))
8316 preserve_initializer ();
8317 static_aggregates = perm_tree_cons (init, decl, static_aggregates);
8321 /* Finish the declaration of a catch-parameter. */
8323 void
8324 start_handler_parms (declspecs, declarator)
8325 tree declspecs;
8326 tree declarator;
8328 tree decl;
8329 if (declspecs)
8331 decl = grokdeclarator (declarator, declspecs, CATCHPARM,
8332 1, NULL_TREE);
8333 if (decl == NULL_TREE)
8334 error ("invalid catch parameter");
8336 else
8337 decl = NULL_TREE;
8338 expand_start_catch_block (decl);
8342 /* Make TYPE a complete type based on INITIAL_VALUE.
8343 Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
8344 2 if there was no information (in which case assume 0 if DO_DEFAULT). */
8347 complete_array_type (type, initial_value, do_default)
8348 tree type, initial_value;
8349 int do_default;
8351 register tree maxindex = NULL_TREE;
8352 int value = 0;
8354 /* Allocate on the same obstack as TYPE. */
8355 push_obstacks (TYPE_OBSTACK (type), TYPE_OBSTACK (type));
8357 if (initial_value)
8359 /* Note MAXINDEX is really the maximum index,
8360 one less than the size. */
8361 if (TREE_CODE (initial_value) == STRING_CST)
8363 int eltsize
8364 = int_size_in_bytes (TREE_TYPE (TREE_TYPE (initial_value)));
8365 maxindex = build_int_2 ((TREE_STRING_LENGTH (initial_value)
8366 / eltsize) - 1, 0);
8368 else if (TREE_CODE (initial_value) == CONSTRUCTOR)
8370 tree elts = CONSTRUCTOR_ELTS (initial_value);
8371 maxindex = size_binop (MINUS_EXPR, integer_zero_node, size_one_node);
8372 for (; elts; elts = TREE_CHAIN (elts))
8374 if (TREE_PURPOSE (elts))
8375 maxindex = TREE_PURPOSE (elts);
8376 else
8377 maxindex = size_binop (PLUS_EXPR, maxindex, size_one_node);
8379 maxindex = copy_node (maxindex);
8381 else
8383 /* Make an error message unless that happened already. */
8384 if (initial_value != error_mark_node)
8385 value = 1;
8386 else
8387 initial_value = NULL_TREE;
8389 /* Prevent further error messages. */
8390 maxindex = build_int_2 (0, 0);
8394 if (!maxindex)
8396 if (do_default)
8397 maxindex = build_int_2 (0, 0);
8398 value = 2;
8401 if (maxindex)
8403 tree itype;
8404 tree domain;
8406 domain = build_index_type (maxindex);
8407 TYPE_DOMAIN (type) = domain;
8409 if (! TREE_TYPE (maxindex))
8410 TREE_TYPE (maxindex) = domain;
8411 if (initial_value)
8412 itype = TREE_TYPE (initial_value);
8413 else
8414 itype = NULL;
8415 if (itype && !TYPE_DOMAIN (itype))
8416 TYPE_DOMAIN (itype) = domain;
8417 /* The type of the main variant should never be used for arrays
8418 of different sizes. It should only ever be completed with the
8419 size of the array. */
8420 if (! TYPE_DOMAIN (TYPE_MAIN_VARIANT (type)))
8421 TYPE_DOMAIN (TYPE_MAIN_VARIANT (type)) = domain;
8424 pop_obstacks();
8426 /* Lay out the type now that we can get the real answer. */
8428 layout_type (type);
8430 return value;
8433 /* Return zero if something is declared to be a member of type
8434 CTYPE when in the context of CUR_TYPE. STRING is the error
8435 message to print in that case. Otherwise, quietly return 1. */
8437 static int
8438 member_function_or_else (ctype, cur_type, string)
8439 tree ctype, cur_type;
8440 const char *string;
8442 if (ctype && ctype != cur_type)
8444 error (string, TYPE_NAME_STRING (ctype));
8445 return 0;
8447 return 1;
8450 /* Subroutine of `grokdeclarator'. */
8452 /* Generate errors possibly applicable for a given set of specifiers.
8453 This is for ARM $7.1.2. */
8455 static void
8456 bad_specifiers (object, type, virtualp, quals, inlinep, friendp, raises)
8457 tree object;
8458 const char *type;
8459 int virtualp, quals, friendp, raises, inlinep;
8461 if (virtualp)
8462 cp_error ("`%D' declared as a `virtual' %s", object, type);
8463 if (inlinep)
8464 cp_error ("`%D' declared as an `inline' %s", object, type);
8465 if (quals)
8466 cp_error ("`const' and `volatile' function specifiers on `%D' invalid in %s declaration",
8467 object, type);
8468 if (friendp)
8469 cp_error_at ("`%D' declared as a friend", object);
8470 if (raises)
8471 cp_error_at ("`%D' declared with an exception specification", object);
8474 /* CTYPE is class type, or null if non-class.
8475 TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
8476 or METHOD_TYPE.
8477 DECLARATOR is the function's name.
8478 VIRTUALP is truthvalue of whether the function is virtual or not.
8479 FLAGS are to be passed through to `grokclassfn'.
8480 QUALS are qualifiers indicating whether the function is `const'
8481 or `volatile'.
8482 RAISES is a list of exceptions that this function can raise.
8483 CHECK is 1 if we must find this method in CTYPE, 0 if we should
8484 not look, and -1 if we should not call `grokclassfn' at all.
8486 Returns `NULL_TREE' if something goes wrong, after issuing
8487 applicable error messages. */
8489 static tree
8490 grokfndecl (ctype, type, declarator, orig_declarator, virtualp, flags, quals,
8491 raises, check, friendp, publicp, inlinep, funcdef_flag,
8492 template_count, in_namespace)
8493 tree ctype, type;
8494 tree declarator;
8495 tree orig_declarator;
8496 int virtualp;
8497 enum overload_flags flags;
8498 tree quals, raises;
8499 int check, friendp, publicp, inlinep, funcdef_flag, template_count;
8500 tree in_namespace;
8502 tree cname, decl;
8503 int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
8504 int has_default_arg = 0;
8505 tree t;
8507 if (ctype)
8508 cname = TREE_CODE (TYPE_NAME (ctype)) == TYPE_DECL
8509 ? TYPE_IDENTIFIER (ctype) : TYPE_NAME (ctype);
8510 else
8511 cname = NULL_TREE;
8513 if (raises)
8515 type = build_exception_variant (type, raises);
8518 decl = build_lang_decl (FUNCTION_DECL, declarator, type);
8519 /* Propagate volatile out from type to decl. */
8520 if (TYPE_VOLATILE (type))
8521 TREE_THIS_VOLATILE (decl) = 1;
8523 /* If this decl has namespace scope, set that up. */
8524 if (in_namespace)
8525 set_decl_namespace (decl, in_namespace, friendp);
8526 else if (publicp && ! ctype)
8527 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
8529 /* `main' and builtins have implicit 'C' linkage. */
8530 if ((MAIN_NAME_P (declarator)
8531 || (IDENTIFIER_LENGTH (declarator) > 10
8532 && IDENTIFIER_POINTER (declarator)[0] == '_'
8533 && IDENTIFIER_POINTER (declarator)[1] == '_'
8534 && strncmp (IDENTIFIER_POINTER (declarator)+2, "builtin_", 8) == 0))
8535 && current_lang_name == lang_name_cplusplus
8536 && ctype == NULL_TREE
8537 /* NULL_TREE means global namespace. */
8538 && DECL_CONTEXT (decl) == NULL_TREE)
8539 DECL_LANGUAGE (decl) = lang_c;
8541 /* Should probably propagate const out from type to decl I bet (mrs). */
8542 if (staticp)
8544 DECL_STATIC_FUNCTION_P (decl) = 1;
8545 DECL_CONTEXT (decl) = ctype;
8548 if (ctype)
8549 DECL_CLASS_CONTEXT (decl) = ctype;
8551 if (ctype == NULL_TREE && DECL_MAIN_P (decl))
8553 if (processing_template_decl)
8554 error ("cannot declare `main' to be a template");
8555 if (inlinep)
8556 error ("cannot declare `main' to be inline");
8557 else if (! publicp)
8558 error ("cannot declare `main' to be static");
8559 inlinep = 0;
8560 publicp = 1;
8563 /* Members of anonymous types and local classes have no linkage; make
8564 them internal. */
8565 if (ctype && (ANON_AGGRNAME_P (TYPE_IDENTIFIER (ctype))
8566 || hack_decl_function_context (TYPE_MAIN_DECL (ctype))))
8567 publicp = 0;
8569 if (publicp)
8571 /* [basic.link]: A name with no linkage (notably, the name of a class
8572 or enumeration declared in a local scope) shall not be used to
8573 declare an entity with linkage.
8575 Only check this for public decls for now. */
8576 t = no_linkage_check (TREE_TYPE (decl));
8577 if (t)
8579 if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
8581 if (DECL_LANGUAGE (decl) == lang_c)
8582 /* Allow this; it's pretty common in C. */;
8583 else
8584 cp_pedwarn ("non-local function `%#D' uses anonymous type",
8585 decl);
8587 else
8588 cp_pedwarn ("non-local function `%#D' uses local type `%T'",
8589 decl, t);
8593 TREE_PUBLIC (decl) = publicp;
8594 if (! publicp)
8596 DECL_INTERFACE_KNOWN (decl) = 1;
8597 DECL_NOT_REALLY_EXTERN (decl) = 1;
8600 if (inlinep)
8601 DECL_THIS_INLINE (decl) = DECL_INLINE (decl) = 1;
8603 DECL_EXTERNAL (decl) = 1;
8604 if (quals != NULL_TREE && TREE_CODE (type) == FUNCTION_TYPE)
8606 cp_error ("%smember function `%D' cannot have `%T' method qualifier",
8607 (ctype ? "static " : "non-"), decl, TREE_VALUE (quals));
8608 quals = NULL_TREE;
8611 if (IDENTIFIER_OPNAME_P (DECL_NAME (decl)))
8612 grok_op_properties (decl, virtualp, check < 0);
8614 if (ctype && hack_decl_function_context (decl))
8615 DECL_NO_STATIC_CHAIN (decl) = 1;
8617 for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
8618 if (TREE_PURPOSE (t)
8619 && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
8621 has_default_arg = 1;
8622 break;
8625 if (friendp
8626 && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
8628 if (funcdef_flag)
8629 cp_error
8630 ("defining explicit specialization `%D' in friend declaration",
8631 orig_declarator);
8632 else
8634 if (PROCESSING_REAL_TEMPLATE_DECL_P ())
8636 /* Something like `template <class T> friend void f<T>()'. */
8637 cp_error ("template-id `%D' in declaration of primary template",
8638 orig_declarator);
8639 return NULL_TREE;
8643 /* A friend declaration of the form friend void f<>(). Record
8644 the information in the TEMPLATE_ID_EXPR. */
8645 SET_DECL_IMPLICIT_INSTANTIATION (decl);
8646 DECL_TEMPLATE_INFO (decl)
8647 = perm_tree_cons (TREE_OPERAND (orig_declarator, 0),
8648 TREE_OPERAND (orig_declarator, 1),
8649 NULL_TREE);
8651 if (has_default_arg)
8653 cp_error ("default arguments are not allowed in declaration of friend template specialization `%D'",
8654 decl);
8655 return NULL_TREE;
8658 if (inlinep)
8660 cp_error ("`inline' is not allowed in declaration of friend template specialization `%D'",
8661 decl);
8662 return NULL_TREE;
8667 if (has_default_arg)
8668 add_defarg_fn (decl);
8670 /* Plain overloading: will not be grok'd by grokclassfn. */
8671 if (! ctype && ! processing_template_decl
8672 && DECL_LANGUAGE (decl) != lang_c
8673 && (! DECL_USE_TEMPLATE (decl) || name_mangling_version < 1))
8674 set_mangled_name_for_decl (decl);
8676 if (funcdef_flag)
8677 /* Make the init_value nonzero so pushdecl knows this is not
8678 tentative. error_mark_node is replaced later with the BLOCK. */
8679 DECL_INITIAL (decl) = error_mark_node;
8681 /* Caller will do the rest of this. */
8682 if (check < 0)
8683 return decl;
8685 if (check && funcdef_flag)
8686 DECL_INITIAL (decl) = error_mark_node;
8688 if (flags == NO_SPECIAL && ctype && constructor_name (cname) == declarator)
8690 tree tmp;
8691 /* Just handle constructors here. We could do this
8692 inside the following if stmt, but I think
8693 that the code is more legible by breaking this
8694 case out. See comments below for what each of
8695 the following calls is supposed to do. */
8696 DECL_CONSTRUCTOR_P (decl) = 1;
8698 grokclassfn (ctype, decl, flags, quals);
8700 decl = check_explicit_specialization (orig_declarator, decl,
8701 template_count,
8702 2 * (funcdef_flag != 0) +
8703 4 * (friendp != 0));
8704 if (decl == error_mark_node)
8705 return NULL_TREE;
8707 if ((! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
8708 && check)
8710 tmp = check_classfn (ctype, decl);
8712 if (tmp && TREE_CODE (tmp) == TEMPLATE_DECL)
8713 tmp = DECL_TEMPLATE_RESULT(tmp);
8715 if (tmp && DECL_ARTIFICIAL (tmp))
8716 cp_error ("definition of implicitly-declared `%D'", tmp);
8717 if (tmp && duplicate_decls (decl, tmp))
8718 return tmp;
8720 if (! grok_ctor_properties (ctype, decl))
8721 return NULL_TREE;
8723 else
8725 tree tmp;
8727 /* Function gets the ugly name, field gets the nice one.
8728 This call may change the type of the function (because
8729 of default parameters)! */
8730 if (ctype != NULL_TREE)
8731 grokclassfn (ctype, decl, flags, quals);
8733 decl = check_explicit_specialization (orig_declarator, decl,
8734 template_count,
8735 2 * (funcdef_flag != 0) +
8736 4 * (friendp != 0));
8737 if (decl == error_mark_node)
8738 return NULL_TREE;
8740 if (ctype != NULL_TREE
8741 && (! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
8742 && check)
8744 tmp = check_classfn (ctype, decl);
8746 if (tmp && TREE_CODE (tmp) == TEMPLATE_DECL)
8747 tmp = DECL_TEMPLATE_RESULT (tmp);
8749 if (tmp && DECL_STATIC_FUNCTION_P (tmp)
8750 && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
8752 /* Remove the `this' parm added by grokclassfn.
8753 XXX Isn't this done in start_function, too? */
8754 revert_static_member_fn (&decl, NULL, NULL);
8755 last_function_parms = TREE_CHAIN (last_function_parms);
8757 if (tmp && DECL_ARTIFICIAL (tmp))
8758 cp_error ("definition of implicitly-declared `%D'", tmp);
8759 if (tmp)
8761 /* Attempt to merge the declarations. This can fail, in
8762 the case of some illegal specialization declarations. */
8763 if (!duplicate_decls (decl, tmp))
8764 cp_error ("no `%#D' member function declared in class `%T'",
8765 decl, ctype);
8766 return tmp;
8770 if (ctype == NULL_TREE || check)
8771 return decl;
8773 if (virtualp)
8775 DECL_VIRTUAL_P (decl) = 1;
8776 if (DECL_VINDEX (decl) == NULL_TREE)
8777 DECL_VINDEX (decl) = error_mark_node;
8778 IDENTIFIER_VIRTUAL_P (DECL_NAME (decl)) = 1;
8781 return decl;
8784 static tree
8785 grokvardecl (type, declarator, specbits_in, initialized, constp, in_namespace)
8786 tree type;
8787 tree declarator;
8788 RID_BIT_TYPE *specbits_in;
8789 int initialized;
8790 int constp;
8791 tree in_namespace;
8793 tree decl;
8794 RID_BIT_TYPE specbits;
8796 specbits = *specbits_in;
8798 if (TREE_CODE (type) == OFFSET_TYPE)
8800 /* If you declare a static member so that it
8801 can be initialized, the code will reach here. */
8802 tree basetype = TYPE_OFFSET_BASETYPE (type);
8803 type = TREE_TYPE (type);
8804 decl = build_lang_decl (VAR_DECL, declarator, type);
8805 DECL_CONTEXT (decl) = basetype;
8806 DECL_CLASS_CONTEXT (decl) = basetype;
8807 DECL_ASSEMBLER_NAME (decl) = build_static_name (basetype, declarator);
8809 else
8811 tree context;
8813 if (in_namespace)
8814 context = in_namespace;
8815 else if (namespace_bindings_p () || RIDBIT_SETP (RID_EXTERN, specbits))
8816 context = current_namespace;
8817 else
8818 context = NULL_TREE;
8820 if (processing_template_decl)
8822 /* If we're in a template, we need DECL_LANG_SPECIFIC so that
8823 we can call push_template_decl. */
8824 push_permanent_obstack ();
8825 decl = build_lang_decl (VAR_DECL, declarator,
8826 complete_type (type));
8827 pop_obstacks ();
8829 else
8830 decl = build_decl (VAR_DECL, declarator, complete_type (type));
8832 if (context)
8833 set_decl_namespace (decl, context, 0);
8835 context = DECL_CONTEXT (decl);
8836 if (declarator && context && current_lang_name != lang_name_c)
8837 DECL_ASSEMBLER_NAME (decl) = build_static_name (context, declarator);
8840 if (in_namespace)
8841 set_decl_namespace (decl, in_namespace, 0);
8843 if (RIDBIT_SETP (RID_EXTERN, specbits))
8845 DECL_THIS_EXTERN (decl) = 1;
8846 DECL_EXTERNAL (decl) = !initialized;
8849 /* In class context, static means one per class,
8850 public access, and static storage. */
8851 if (DECL_CLASS_SCOPE_P (decl))
8853 TREE_PUBLIC (decl) = 1;
8854 TREE_STATIC (decl) = 1;
8855 DECL_EXTERNAL (decl) = 0;
8857 /* At top level, either `static' or no s.c. makes a definition
8858 (perhaps tentative), and absence of `static' makes it public. */
8859 else if (toplevel_bindings_p ())
8861 TREE_PUBLIC (decl) = (RIDBIT_NOTSETP (RID_STATIC, specbits)
8862 && (DECL_THIS_EXTERN (decl) || ! constp));
8863 TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
8865 /* Not at top level, only `static' makes a static definition. */
8866 else
8868 TREE_STATIC (decl) = !! RIDBIT_SETP (RID_STATIC, specbits);
8869 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
8872 if (TREE_PUBLIC (decl))
8874 /* [basic.link]: A name with no linkage (notably, the name of a class
8875 or enumeration declared in a local scope) shall not be used to
8876 declare an entity with linkage.
8878 Only check this for public decls for now. */
8879 tree t = no_linkage_check (TREE_TYPE (decl));
8880 if (t)
8882 if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
8883 /* Ignore for now; `enum { foo } e' is pretty common. */;
8884 else
8885 cp_pedwarn ("non-local variable `%#D' uses local type `%T'",
8886 decl, t);
8890 return decl;
8893 /* Create and return a canonical pointer to member function type, for
8894 TYPE, which is a POINTER_TYPE to a METHOD_TYPE. */
8896 tree
8897 build_ptrmemfunc_type (type)
8898 tree type;
8900 tree fields[4];
8901 tree t;
8902 tree u;
8903 tree unqualified_variant = NULL_TREE;
8905 /* If a canonical type already exists for this type, use it. We use
8906 this method instead of type_hash_canon, because it only does a
8907 simple equality check on the list of field members. */
8909 if ((t = TYPE_GET_PTRMEMFUNC_TYPE (type)))
8910 return t;
8912 /* Make sure that we always have the unqualified pointer-to-member
8913 type first. */
8914 if (CP_TYPE_QUALS (type) != TYPE_UNQUALIFIED)
8915 unqualified_variant
8916 = build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type));
8918 push_obstacks (TYPE_OBSTACK (type), TYPE_OBSTACK (type));
8920 u = make_lang_type (UNION_TYPE);
8921 SET_IS_AGGR_TYPE (u, 0);
8922 fields[0] = build_lang_decl (FIELD_DECL, pfn_identifier, type);
8923 fields[1] = build_lang_decl (FIELD_DECL, delta2_identifier,
8924 delta_type_node);
8925 finish_builtin_type (u, "__ptrmemfunc_type", fields, 1, ptr_type_node);
8926 TYPE_NAME (u) = NULL_TREE;
8928 t = make_lang_type (RECORD_TYPE);
8930 /* Let the front-end know this is a pointer to member function... */
8931 TYPE_PTRMEMFUNC_FLAG (t) = 1;
8932 /* ... and not really an aggregate. */
8933 SET_IS_AGGR_TYPE (t, 0);
8935 fields[0] = build_lang_decl (FIELD_DECL, delta_identifier,
8936 delta_type_node);
8937 fields[1] = build_lang_decl (FIELD_DECL, index_identifier,
8938 delta_type_node);
8939 fields[2] = build_lang_decl (FIELD_DECL, pfn_or_delta2_identifier, u);
8940 finish_builtin_type (t, "__ptrmemfunc_type", fields, 2, ptr_type_node);
8942 pop_obstacks ();
8944 /* Zap out the name so that the back-end will give us the debugging
8945 information for this anonymous RECORD_TYPE. */
8946 TYPE_NAME (t) = NULL_TREE;
8948 /* If this is not the unqualified form of this pointer-to-member
8949 type, set the TYPE_MAIN_VARIANT for this type to be the
8950 unqualified type. Since they are actually RECORD_TYPEs that are
8951 not variants of each other, we must do this manually. */
8952 if (CP_TYPE_QUALS (type) != TYPE_UNQUALIFIED)
8954 t = build_qualified_type (t, CP_TYPE_QUALS (type));
8955 TYPE_MAIN_VARIANT (t) = unqualified_variant;
8956 TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (unqualified_variant);
8957 TYPE_NEXT_VARIANT (unqualified_variant) = t;
8960 /* Cache this pointer-to-member type so that we can find it again
8961 later. */
8962 TYPE_SET_PTRMEMFUNC_TYPE (type, t);
8964 /* Seems to be wanted. */
8965 CLASSTYPE_GOT_SEMICOLON (t) = 1;
8967 return t;
8970 /* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
8971 Check to see that the definition is valid. Issue appropriate error
8972 messages. Return 1 if the definition is particularly bad, or 0
8973 otherwise. */
8976 check_static_variable_definition (decl, type)
8977 tree decl;
8978 tree type;
8980 /* Motion 10 at San Diego: If a static const integral data member is
8981 initialized with an integral constant expression, the initializer
8982 may appear either in the declaration (within the class), or in
8983 the definition, but not both. If it appears in the class, the
8984 member is a member constant. The file-scope definition is always
8985 required. */
8986 if (CLASS_TYPE_P (type) || TREE_CODE (type) == REFERENCE_TYPE)
8988 cp_error ("in-class initialization of static data member of non-integral type `%T'",
8989 type);
8990 /* If we just return the declaration, crashes will sometimes
8991 occur. We therefore return void_type_node, as if this was a
8992 friend declaration, to cause callers to completely ignore
8993 this declaration. */
8994 return 1;
8996 else if (!CP_TYPE_CONST_P (type))
8997 cp_error ("ANSI C++ forbids in-class initialization of non-const static member `%D'",
8998 decl);
8999 else if (pedantic && !INTEGRAL_TYPE_P (type))
9000 cp_pedwarn ("ANSI C++ forbids initialization of member constant `%D' of non-integral type `%T'", decl, type);
9002 return 0;
9005 /* Given declspecs and a declarator,
9006 determine the name and type of the object declared
9007 and construct a ..._DECL node for it.
9008 (In one case we can return a ..._TYPE node instead.
9009 For invalid input we sometimes return 0.)
9011 DECLSPECS is a chain of tree_list nodes whose value fields
9012 are the storage classes and type specifiers.
9014 DECL_CONTEXT says which syntactic context this declaration is in:
9015 NORMAL for most contexts. Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
9016 FUNCDEF for a function definition. Like NORMAL but a few different
9017 error messages in each case. Return value may be zero meaning
9018 this definition is too screwy to try to parse.
9019 MEMFUNCDEF for a function definition. Like FUNCDEF but prepares to
9020 handle member functions (which have FIELD context).
9021 Return value may be zero meaning this definition is too screwy to
9022 try to parse.
9023 PARM for a parameter declaration (either within a function prototype
9024 or before a function body). Make a PARM_DECL, or return void_type_node.
9025 CATCHPARM for a parameter declaration before a catch clause.
9026 TYPENAME if for a typename (in a cast or sizeof).
9027 Don't make a DECL node; just return the ..._TYPE node.
9028 FIELD for a struct or union field; make a FIELD_DECL.
9029 BITFIELD for a field with specified width.
9030 INITIALIZED is 1 if the decl has an initializer.
9032 ATTRLIST is a TREE_LIST node with prefix attributes in TREE_VALUE and
9033 normal attributes in TREE_PURPOSE, or NULL_TREE.
9035 In the TYPENAME case, DECLARATOR is really an absolute declarator.
9036 It may also be so in the PARM case, for a prototype where the
9037 argument type is specified but not the name.
9039 This function is where the complicated C meanings of `static'
9040 and `extern' are interpreted.
9042 For C++, if there is any monkey business to do, the function which
9043 calls this one must do it, i.e., prepending instance variables,
9044 renaming overloaded function names, etc.
9046 Note that for this C++, it is an error to define a method within a class
9047 which does not belong to that class.
9049 Except in the case where SCOPE_REFs are implicitly known (such as
9050 methods within a class being redundantly qualified),
9051 declarations which involve SCOPE_REFs are returned as SCOPE_REFs
9052 (class_name::decl_name). The caller must also deal with this.
9054 If a constructor or destructor is seen, and the context is FIELD,
9055 then the type gains the attribute TREE_HAS_x. If such a declaration
9056 is erroneous, NULL_TREE is returned.
9058 QUALS is used only for FUNCDEF and MEMFUNCDEF cases. For a member
9059 function, these are the qualifiers to give to the `this' pointer.
9061 May return void_type_node if the declarator turned out to be a friend.
9062 See grokfield for details. */
9064 enum return_types { return_normal, return_ctor, return_dtor, return_conversion };
9066 tree
9067 grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
9068 tree declspecs;
9069 tree declarator;
9070 enum decl_context decl_context;
9071 int initialized;
9072 tree attrlist;
9074 RID_BIT_TYPE specbits;
9075 int nclasses = 0;
9076 tree spec;
9077 tree type = NULL_TREE;
9078 int longlong = 0;
9079 int constp;
9080 int restrictp;
9081 int volatilep;
9082 int type_quals;
9083 int virtualp, explicitp, friendp, inlinep, staticp;
9084 int explicit_int = 0;
9085 int explicit_char = 0;
9086 int defaulted_int = 0;
9087 tree typedef_decl = NULL_TREE;
9088 const char *name;
9089 tree typedef_type = NULL_TREE;
9090 int funcdef_flag = 0;
9091 enum tree_code innermost_code = ERROR_MARK;
9092 int bitfield = 0;
9093 #if 0
9094 /* See the code below that used this. */
9095 tree decl_machine_attr = NULL_TREE;
9096 #endif
9097 /* Set this to error_mark_node for FIELD_DECLs we could not handle properly.
9098 All FIELD_DECLs we build here have `init' put into their DECL_INITIAL. */
9099 tree init = NULL_TREE;
9101 /* Keep track of what sort of function is being processed
9102 so that we can warn about default return values, or explicit
9103 return values which do not match prescribed defaults. */
9104 enum return_types return_type = return_normal;
9106 tree dname = NULL_TREE;
9107 tree ctype = current_class_type;
9108 tree ctor_return_type = NULL_TREE;
9109 enum overload_flags flags = NO_SPECIAL;
9110 tree quals = NULL_TREE;
9111 tree raises = NULL_TREE;
9112 int template_count = 0;
9113 tree in_namespace = NULL_TREE;
9114 tree inner_attrs;
9115 int ignore_attrs;
9117 RIDBIT_RESET_ALL (specbits);
9118 if (decl_context == FUNCDEF)
9119 funcdef_flag = 1, decl_context = NORMAL;
9120 else if (decl_context == MEMFUNCDEF)
9121 funcdef_flag = -1, decl_context = FIELD;
9122 else if (decl_context == BITFIELD)
9123 bitfield = 1, decl_context = FIELD;
9125 /* Look inside a declarator for the name being declared
9126 and get it as a string, for an error message. */
9128 tree *next = &declarator;
9129 register tree decl;
9130 name = NULL;
9132 while (next && *next)
9134 decl = *next;
9135 switch (TREE_CODE (decl))
9137 case TREE_LIST:
9138 /* For attributes. */
9139 next = &TREE_VALUE (decl);
9140 break;
9142 case COND_EXPR:
9143 ctype = NULL_TREE;
9144 next = &TREE_OPERAND (decl, 0);
9145 break;
9147 case BIT_NOT_EXPR: /* For C++ destructors! */
9149 tree name = TREE_OPERAND (decl, 0);
9150 tree rename = NULL_TREE;
9152 my_friendly_assert (flags == NO_SPECIAL, 152);
9153 flags = DTOR_FLAG;
9154 return_type = return_dtor;
9155 if (TREE_CODE (name) == TYPE_DECL)
9156 TREE_OPERAND (decl, 0) = name = constructor_name (name);
9157 my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 153);
9158 if (ctype == NULL_TREE)
9160 if (current_class_type == NULL_TREE)
9162 error ("destructors must be member functions");
9163 flags = NO_SPECIAL;
9165 else
9167 tree t = constructor_name (current_class_name);
9168 if (t != name)
9169 rename = t;
9172 else
9174 tree t = constructor_name (ctype);
9175 if (t != name)
9176 rename = t;
9179 if (rename)
9181 cp_error ("destructor `%T' must match class name `%T'",
9182 name, rename);
9183 TREE_OPERAND (decl, 0) = rename;
9185 next = &name;
9187 break;
9189 case ADDR_EXPR: /* C++ reference declaration */
9190 /* Fall through. */
9191 case ARRAY_REF:
9192 case INDIRECT_REF:
9193 ctype = NULL_TREE;
9194 innermost_code = TREE_CODE (decl);
9195 next = &TREE_OPERAND (decl, 0);
9196 break;
9198 case CALL_EXPR:
9199 if (parmlist_is_exprlist (CALL_DECLARATOR_PARMS (decl)))
9201 /* This is actually a variable declaration using
9202 constructor syntax. We need to call start_decl and
9203 cp_finish_decl so we can get the variable
9204 initialized... */
9206 tree attributes, prefix_attributes;
9208 *next = TREE_OPERAND (decl, 0);
9209 init = CALL_DECLARATOR_PARMS (decl);
9211 if (attrlist)
9213 attributes = TREE_PURPOSE (attrlist);
9214 prefix_attributes = TREE_VALUE (attrlist);
9216 else
9218 attributes = NULL_TREE;
9219 prefix_attributes = NULL_TREE;
9222 decl = start_decl (declarator, declspecs, 1,
9223 attributes, prefix_attributes);
9224 if (decl)
9226 /* Look for __unused__ attribute */
9227 if (TREE_USED (TREE_TYPE (decl)))
9228 TREE_USED (decl) = 1;
9229 finish_decl (decl, init, NULL_TREE);
9231 else
9232 cp_error ("invalid declarator");
9233 return 0;
9235 innermost_code = TREE_CODE (decl);
9236 if (decl_context == FIELD && ctype == NULL_TREE)
9237 ctype = current_class_type;
9238 if (ctype
9239 && TREE_OPERAND (decl, 0)
9240 && (TREE_CODE (TREE_OPERAND (decl, 0)) == TYPE_DECL
9241 && ((DECL_NAME (TREE_OPERAND (decl, 0))
9242 == constructor_name_full (ctype))
9243 || (DECL_NAME (TREE_OPERAND (decl, 0))
9244 == constructor_name (ctype)))))
9245 TREE_OPERAND (decl, 0) = constructor_name (ctype);
9246 next = &TREE_OPERAND (decl, 0);
9247 decl = *next;
9248 if (ctype != NULL_TREE
9249 && decl != NULL_TREE && flags != DTOR_FLAG
9250 && decl == constructor_name (ctype))
9252 return_type = return_ctor;
9253 ctor_return_type = ctype;
9255 ctype = NULL_TREE;
9256 break;
9258 case TEMPLATE_ID_EXPR:
9260 tree fns = TREE_OPERAND (decl, 0);
9262 if (TREE_CODE (fns) == LOOKUP_EXPR)
9263 fns = TREE_OPERAND (fns, 0);
9265 dname = fns;
9266 if (TREE_CODE (dname) == COMPONENT_REF)
9267 dname = TREE_OPERAND (dname, 1);
9268 if (TREE_CODE (dname) != IDENTIFIER_NODE)
9270 my_friendly_assert (is_overloaded_fn (dname),
9271 19990331);
9272 dname = DECL_NAME (get_first_fn (dname));
9275 /* Fall through. */
9277 case IDENTIFIER_NODE:
9278 if (TREE_CODE (decl) == IDENTIFIER_NODE)
9279 dname = decl;
9281 next = 0;
9283 if (is_rid (dname))
9285 cp_error ("declarator-id missing; using reserved word `%D'",
9286 dname);
9287 name = IDENTIFIER_POINTER (dname);
9289 if (! IDENTIFIER_OPNAME_P (dname)
9290 /* GNU/Linux headers use '__op'. Arrgh. */
9291 || (IDENTIFIER_TYPENAME_P (dname) && ! TREE_TYPE (dname)))
9292 name = IDENTIFIER_POINTER (dname);
9293 else
9295 if (IDENTIFIER_TYPENAME_P (dname))
9297 my_friendly_assert (flags == NO_SPECIAL, 154);
9298 flags = TYPENAME_FLAG;
9299 ctor_return_type = TREE_TYPE (dname);
9300 return_type = return_conversion;
9302 name = operator_name_string (dname);
9304 break;
9306 /* C++ extension */
9307 case SCOPE_REF:
9309 /* Perform error checking, and decide on a ctype. */
9310 tree cname = TREE_OPERAND (decl, 0);
9311 if (cname == NULL_TREE)
9312 ctype = NULL_TREE;
9313 else if (TREE_CODE (cname) == NAMESPACE_DECL)
9315 ctype = NULL_TREE;
9316 in_namespace = TREE_OPERAND (decl, 0);
9317 TREE_OPERAND (decl, 0) = NULL_TREE;
9319 else if (! is_aggr_type (cname, 1))
9320 TREE_OPERAND (decl, 0) = NULL_TREE;
9321 /* Must test TREE_OPERAND (decl, 1), in case user gives
9322 us `typedef (class::memfunc)(int); memfunc *memfuncptr;' */
9323 else if (TREE_OPERAND (decl, 1)
9324 && TREE_CODE (TREE_OPERAND (decl, 1)) == INDIRECT_REF)
9325 ctype = cname;
9326 else if (TREE_CODE (cname) == TEMPLATE_TYPE_PARM
9327 || TREE_CODE (cname) == TEMPLATE_TEMPLATE_PARM)
9329 cp_error ("`%T::%D' is not a valid declarator", cname,
9330 TREE_OPERAND (decl, 1));
9331 cp_error (" perhaps you want `typename %T::%D' to make it a type",
9332 cname, TREE_OPERAND (decl, 1));
9333 return void_type_node;
9335 else if (ctype == NULL_TREE)
9336 ctype = cname;
9337 else if (TREE_COMPLEXITY (decl) == current_class_depth)
9338 TREE_OPERAND (decl, 0) = ctype;
9339 else
9341 if (! UNIQUELY_DERIVED_FROM_P (cname, ctype))
9343 cp_error ("type `%T' is not derived from type `%T'",
9344 cname, ctype);
9345 TREE_OPERAND (decl, 0) = NULL_TREE;
9347 else
9348 ctype = cname;
9351 if (ctype && TREE_CODE (TREE_OPERAND (decl, 1)) == TYPE_DECL
9352 && ((DECL_NAME (TREE_OPERAND (decl, 1))
9353 == constructor_name_full (ctype))
9354 || (DECL_NAME (TREE_OPERAND (decl, 1))
9355 == constructor_name (ctype))))
9356 TREE_OPERAND (decl, 1) = constructor_name (ctype);
9357 next = &TREE_OPERAND (decl, 1);
9358 decl = *next;
9359 if (ctype)
9361 if (TREE_CODE (decl) == IDENTIFIER_NODE
9362 && constructor_name (ctype) == decl)
9364 return_type = return_ctor;
9365 ctor_return_type = ctype;
9367 else if (TREE_CODE (decl) == BIT_NOT_EXPR
9368 && TREE_CODE (TREE_OPERAND (decl, 0)) == IDENTIFIER_NODE
9369 && (constructor_name (ctype) == TREE_OPERAND (decl, 0)
9370 || constructor_name_full (ctype) == TREE_OPERAND (decl, 0)))
9372 return_type = return_dtor;
9373 ctor_return_type = ctype;
9374 flags = DTOR_FLAG;
9375 TREE_OPERAND (decl, 0) = constructor_name (ctype);
9376 next = &TREE_OPERAND (decl, 0);
9380 break;
9382 case ERROR_MARK:
9383 next = 0;
9384 break;
9386 case TYPE_DECL:
9387 /* Parse error puts this typespec where
9388 a declarator should go. */
9389 cp_error ("`%T' specified as declarator-id", DECL_NAME (decl));
9390 if (TREE_TYPE (decl) == current_class_type)
9391 cp_error (" perhaps you want `%T' for a constructor",
9392 current_class_name);
9393 dname = DECL_NAME (decl);
9394 name = IDENTIFIER_POINTER (dname);
9396 /* Avoid giving two errors for this. */
9397 IDENTIFIER_CLASS_VALUE (dname) = NULL_TREE;
9399 declspecs = temp_tree_cons (NULL_TREE, integer_type_node,
9400 declspecs);
9401 *next = dname;
9402 next = 0;
9403 break;
9405 default:
9406 cp_compiler_error ("`%D' as declarator", decl);
9407 return 0; /* We used to do a 155 abort here. */
9410 if (name == NULL)
9411 name = "type name";
9414 /* A function definition's declarator must have the form of
9415 a function declarator. */
9417 if (funcdef_flag && innermost_code != CALL_EXPR)
9418 return 0;
9420 if (((dname && IDENTIFIER_OPNAME_P (dname)) || flags == TYPENAME_FLAG)
9421 && innermost_code != CALL_EXPR
9422 && ! (ctype && declspecs == NULL_TREE))
9424 cp_error ("declaration of `%D' as non-function", dname);
9425 return void_type_node;
9428 /* Anything declared one level down from the top level
9429 must be one of the parameters of a function
9430 (because the body is at least two levels down). */
9432 /* This heuristic cannot be applied to C++ nodes! Fixed, however,
9433 by not allowing C++ class definitions to specify their parameters
9434 with xdecls (must be spec.d in the parmlist).
9436 Since we now wait to push a class scope until we are sure that
9437 we are in a legitimate method context, we must set oldcname
9438 explicitly (since current_class_name is not yet alive).
9440 We also want to avoid calling this a PARM if it is in a namespace. */
9442 if (decl_context == NORMAL && !toplevel_bindings_p ())
9444 struct binding_level *b = current_binding_level;
9445 current_binding_level = b->level_chain;
9446 if (current_binding_level != 0 && toplevel_bindings_p ())
9447 decl_context = PARM;
9448 current_binding_level = b;
9451 /* Look through the decl specs and record which ones appear.
9452 Some typespecs are defined as built-in typenames.
9453 Others, the ones that are modifiers of other types,
9454 are represented by bits in SPECBITS: set the bits for
9455 the modifiers that appear. Storage class keywords are also in SPECBITS.
9457 If there is a typedef name or a type, store the type in TYPE.
9458 This includes builtin typedefs such as `int'.
9460 Set EXPLICIT_INT if the type is `int' or `char' and did not
9461 come from a user typedef.
9463 Set LONGLONG if `long' is mentioned twice.
9465 For C++, constructors and destructors have their own fast treatment. */
9467 for (spec = declspecs; spec; spec = TREE_CHAIN (spec))
9469 register int i;
9470 register tree id;
9472 /* Certain parse errors slip through. For example,
9473 `int class;' is not caught by the parser. Try
9474 weakly to recover here. */
9475 if (TREE_CODE (spec) != TREE_LIST)
9476 return 0;
9478 id = TREE_VALUE (spec);
9480 if (TREE_CODE (id) == IDENTIFIER_NODE)
9482 if (id == ridpointers[(int) RID_INT]
9483 || id == ridpointers[(int) RID_CHAR]
9484 || id == ridpointers[(int) RID_BOOL]
9485 || id == ridpointers[(int) RID_WCHAR])
9487 if (type)
9489 if (id == ridpointers[(int) RID_BOOL])
9490 error ("`bool' is now a keyword");
9491 else
9492 cp_error ("extraneous `%T' ignored", id);
9494 else
9496 if (id == ridpointers[(int) RID_INT])
9497 explicit_int = 1;
9498 else if (id == ridpointers[(int) RID_CHAR])
9499 explicit_char = 1;
9500 type = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (id));
9502 goto found;
9504 /* C++ aggregate types. */
9505 if (IDENTIFIER_HAS_TYPE_VALUE (id))
9507 if (type)
9508 cp_error ("multiple declarations `%T' and `%T'", type, id);
9509 else
9510 type = IDENTIFIER_TYPE_VALUE (id);
9511 goto found;
9514 for (i = (int) RID_FIRST_MODIFIER; i <= (int) RID_LAST_MODIFIER; i++)
9516 if (ridpointers[i] == id)
9518 if (i == (int) RID_LONG && RIDBIT_SETP (i, specbits))
9520 if (pedantic && ! in_system_header && warn_long_long)
9521 pedwarn ("ANSI C++ does not support `long long'");
9522 if (longlong)
9523 error ("`long long long' is too long for GCC");
9524 else
9525 longlong = 1;
9527 else if (RIDBIT_SETP (i, specbits))
9528 pedwarn ("duplicate `%s'", IDENTIFIER_POINTER (id));
9529 RIDBIT_SET (i, specbits);
9530 goto found;
9534 /* C++ aggregate types. */
9535 else if (TREE_CODE (id) == TYPE_DECL || TREE_CODE (id) == TEMPLATE_DECL)
9537 if (type)
9538 cp_error ("multiple declarations `%T' and `%T'", type,
9539 TREE_TYPE (id));
9540 else
9542 type = TREE_TYPE (id);
9543 TREE_VALUE (spec) = type;
9545 goto found;
9547 if (type)
9548 error ("two or more data types in declaration of `%s'", name);
9549 else if (TREE_CODE (id) == IDENTIFIER_NODE)
9551 register tree t = lookup_name (id, 1);
9552 if (!t || TREE_CODE (t) != TYPE_DECL)
9553 error ("`%s' fails to be a typedef or built in type",
9554 IDENTIFIER_POINTER (id));
9555 else
9557 type = TREE_TYPE (t);
9558 #if 0
9559 /* See the code below that used this. */
9560 decl_machine_attr = DECL_MACHINE_ATTRIBUTES (id);
9561 #endif
9562 typedef_decl = t;
9565 else if (id != error_mark_node)
9566 /* Can't change CLASS nodes into RECORD nodes here! */
9567 type = id;
9569 found: ;
9572 typedef_type = type;
9574 /* No type at all: default to `int', and set DEFAULTED_INT
9575 because it was not a user-defined typedef. */
9577 if (type == NULL_TREE
9578 && (RIDBIT_SETP (RID_SIGNED, specbits)
9579 || RIDBIT_SETP (RID_UNSIGNED, specbits)
9580 || RIDBIT_SETP (RID_LONG, specbits)
9581 || RIDBIT_SETP (RID_SHORT, specbits)))
9583 /* These imply 'int'. */
9584 type = integer_type_node;
9585 defaulted_int = 1;
9588 if (type == NULL_TREE)
9590 explicit_int = -1;
9591 if (return_type == return_dtor)
9592 type = void_type_node;
9593 else if (return_type == return_ctor)
9594 type = build_pointer_type (ctor_return_type);
9595 else if (return_type == return_conversion)
9596 type = ctor_return_type;
9597 else
9599 /* We handle `main' specially here, because 'main () { }' is so
9600 common. With no options, it is allowed. With -Wreturn-type,
9601 it is a warning. It is only an error with -pedantic-errors. */
9602 int is_main = (funcdef_flag
9603 && MAIN_NAME_P (dname)
9604 && ctype == NULL_TREE
9605 && in_namespace == NULL_TREE
9606 && current_namespace == global_namespace);
9608 if (in_system_header || flag_ms_extensions)
9609 /* Allow it, sigh. */;
9610 else if (pedantic || ! is_main)
9611 cp_pedwarn ("ANSI C++ forbids declaration `%D' with no type",
9612 dname);
9613 else if (warn_return_type)
9614 cp_warning ("ANSI C++ forbids declaration `%D' with no type",
9615 dname);
9617 type = integer_type_node;
9620 else if (return_type == return_dtor)
9622 error ("return type specification for destructor invalid");
9623 type = void_type_node;
9625 else if (return_type == return_ctor)
9627 error ("return type specification for constructor invalid");
9628 type = build_pointer_type (ctor_return_type);
9630 else if (return_type == return_conversion)
9632 if (!same_type_p (type, ctor_return_type))
9633 cp_error ("operator `%T' declared to return `%T'",
9634 ctor_return_type, type);
9635 else
9636 cp_pedwarn ("return type specified for `operator %T'",
9637 ctor_return_type);
9639 type = ctor_return_type;
9642 ctype = NULL_TREE;
9644 /* Now process the modifiers that were specified
9645 and check for invalid combinations. */
9647 /* Long double is a special combination. */
9649 if (RIDBIT_SETP (RID_LONG, specbits)
9650 && TYPE_MAIN_VARIANT (type) == double_type_node)
9652 RIDBIT_RESET (RID_LONG, specbits);
9653 type = build_qualified_type (long_double_type_node,
9654 CP_TYPE_QUALS (type));
9657 /* Check all other uses of type modifiers. */
9659 if (RIDBIT_SETP (RID_UNSIGNED, specbits)
9660 || RIDBIT_SETP (RID_SIGNED, specbits)
9661 || RIDBIT_SETP (RID_LONG, specbits)
9662 || RIDBIT_SETP (RID_SHORT, specbits))
9664 int ok = 0;
9666 if (TREE_CODE (type) == REAL_TYPE)
9667 error ("short, signed or unsigned invalid for `%s'", name);
9668 else if (TREE_CODE (type) != INTEGER_TYPE)
9669 error ("long, short, signed or unsigned invalid for `%s'", name);
9670 else if (RIDBIT_SETP (RID_LONG, specbits)
9671 && RIDBIT_SETP (RID_SHORT, specbits))
9672 error ("long and short specified together for `%s'", name);
9673 else if ((RIDBIT_SETP (RID_LONG, specbits)
9674 || RIDBIT_SETP (RID_SHORT, specbits))
9675 && explicit_char)
9676 error ("long or short specified with char for `%s'", name);
9677 else if ((RIDBIT_SETP (RID_LONG, specbits)
9678 || RIDBIT_SETP (RID_SHORT, specbits))
9679 && TREE_CODE (type) == REAL_TYPE)
9680 error ("long or short specified with floating type for `%s'", name);
9681 else if (RIDBIT_SETP (RID_SIGNED, specbits)
9682 && RIDBIT_SETP (RID_UNSIGNED, specbits))
9683 error ("signed and unsigned given together for `%s'", name);
9684 else
9686 ok = 1;
9687 if (!explicit_int && !defaulted_int && !explicit_char && pedantic)
9689 pedwarn ("long, short, signed or unsigned used invalidly for `%s'",
9690 name);
9691 if (flag_pedantic_errors)
9692 ok = 0;
9696 /* Discard the type modifiers if they are invalid. */
9697 if (! ok)
9699 RIDBIT_RESET (RID_UNSIGNED, specbits);
9700 RIDBIT_RESET (RID_SIGNED, specbits);
9701 RIDBIT_RESET (RID_LONG, specbits);
9702 RIDBIT_RESET (RID_SHORT, specbits);
9703 longlong = 0;
9707 if (RIDBIT_SETP (RID_COMPLEX, specbits)
9708 && TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
9710 error ("complex invalid for `%s'", name);
9711 RIDBIT_RESET (RID_COMPLEX, specbits);
9714 /* Decide whether an integer type is signed or not.
9715 Optionally treat bitfields as signed by default. */
9716 if (RIDBIT_SETP (RID_UNSIGNED, specbits)
9717 /* [class.bit]
9719 It is implementation-defined whether a plain (neither
9720 explicitly signed or unsigned) char, short, int, or long
9721 bit-field is signed or unsigned.
9723 Naturally, we extend this to long long as well. Note that
9724 this does not include wchar_t. */
9725 || (bitfield && !flag_signed_bitfields
9726 && RIDBIT_NOTSETP (RID_SIGNED, specbits)
9727 /* A typedef for plain `int' without `signed' can be
9728 controlled just like plain `int', but a typedef for
9729 `signed int' cannot be so controlled. */
9730 && !(typedef_decl
9731 && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
9732 && (TREE_CODE (type) == INTEGER_TYPE
9733 || TREE_CODE (type) == CHAR_TYPE)
9734 && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
9736 if (longlong)
9737 type = long_long_unsigned_type_node;
9738 else if (RIDBIT_SETP (RID_LONG, specbits))
9739 type = long_unsigned_type_node;
9740 else if (RIDBIT_SETP (RID_SHORT, specbits))
9741 type = short_unsigned_type_node;
9742 else if (type == char_type_node)
9743 type = unsigned_char_type_node;
9744 else if (typedef_decl)
9745 type = unsigned_type (type);
9746 else
9747 type = unsigned_type_node;
9749 else if (RIDBIT_SETP (RID_SIGNED, specbits)
9750 && type == char_type_node)
9751 type = signed_char_type_node;
9752 else if (longlong)
9753 type = long_long_integer_type_node;
9754 else if (RIDBIT_SETP (RID_LONG, specbits))
9755 type = long_integer_type_node;
9756 else if (RIDBIT_SETP (RID_SHORT, specbits))
9757 type = short_integer_type_node;
9759 if (RIDBIT_SETP (RID_COMPLEX, specbits))
9761 /* If we just have "complex", it is equivalent to
9762 "complex double", but if any modifiers at all are specified it is
9763 the complex form of TYPE. E.g, "complex short" is
9764 "complex short int". */
9766 if (defaulted_int && ! longlong
9767 && ! (RIDBIT_SETP (RID_LONG, specbits)
9768 || RIDBIT_SETP (RID_SHORT, specbits)
9769 || RIDBIT_SETP (RID_SIGNED, specbits)
9770 || RIDBIT_SETP (RID_UNSIGNED, specbits)))
9771 type = complex_double_type_node;
9772 else if (type == integer_type_node)
9773 type = complex_integer_type_node;
9774 else if (type == float_type_node)
9775 type = complex_float_type_node;
9776 else if (type == double_type_node)
9777 type = complex_double_type_node;
9778 else if (type == long_double_type_node)
9779 type = complex_long_double_type_node;
9780 else
9781 type = build_complex_type (type);
9784 if (return_type == return_conversion
9785 && (RIDBIT_SETP (RID_CONST, specbits)
9786 || RIDBIT_SETP (RID_VOLATILE, specbits)
9787 || RIDBIT_SETP (RID_RESTRICT, specbits)))
9788 cp_error ("qualifiers are not allowed on declaration of `operator %T'",
9789 ctor_return_type);
9791 /* Set CONSTP if this declaration is `const', whether by
9792 explicit specification or via a typedef.
9793 Likewise for VOLATILEP. */
9795 constp = !! RIDBIT_SETP (RID_CONST, specbits) + CP_TYPE_CONST_P (type);
9796 restrictp =
9797 !! RIDBIT_SETP (RID_RESTRICT, specbits) + CP_TYPE_RESTRICT_P (type);
9798 volatilep =
9799 !! RIDBIT_SETP (RID_VOLATILE, specbits) + CP_TYPE_VOLATILE_P (type);
9800 type_quals = ((constp ? TYPE_QUAL_CONST : 0)
9801 | (restrictp ? TYPE_QUAL_RESTRICT : 0)
9802 | (volatilep ? TYPE_QUAL_VOLATILE : 0));
9803 type = cp_build_qualified_type (type, type_quals);
9804 staticp = 0;
9805 inlinep = !! RIDBIT_SETP (RID_INLINE, specbits);
9806 virtualp = RIDBIT_SETP (RID_VIRTUAL, specbits);
9807 RIDBIT_RESET (RID_VIRTUAL, specbits);
9808 explicitp = RIDBIT_SETP (RID_EXPLICIT, specbits) != 0;
9809 RIDBIT_RESET (RID_EXPLICIT, specbits);
9811 if (RIDBIT_SETP (RID_STATIC, specbits))
9812 staticp = 1 + (decl_context == FIELD);
9814 if (virtualp && staticp == 2)
9816 cp_error ("member `%D' cannot be declared both virtual and static",
9817 dname);
9818 staticp = 0;
9820 friendp = RIDBIT_SETP (RID_FRIEND, specbits);
9821 RIDBIT_RESET (RID_FRIEND, specbits);
9823 /* $7.1.2, Function specifiers */
9824 if (friendp && explicitp)
9825 error ("only declarations of constructors can be `explicit'");
9827 if (RIDBIT_SETP (RID_MUTABLE, specbits))
9829 if (decl_context == PARM)
9831 error ("non-member `%s' cannot be declared `mutable'", name);
9832 RIDBIT_RESET (RID_MUTABLE, specbits);
9834 else if (friendp || decl_context == TYPENAME)
9836 error ("non-object member `%s' cannot be declared `mutable'", name);
9837 RIDBIT_RESET (RID_MUTABLE, specbits);
9841 /* Warn if two storage classes are given. Default to `auto'. */
9843 if (RIDBIT_ANY_SET (specbits))
9845 if (RIDBIT_SETP (RID_STATIC, specbits)) nclasses++;
9846 if (RIDBIT_SETP (RID_EXTERN, specbits)) nclasses++;
9847 if (decl_context == PARM && nclasses > 0)
9848 error ("storage class specifiers invalid in parameter declarations");
9849 if (RIDBIT_SETP (RID_TYPEDEF, specbits))
9851 if (decl_context == PARM)
9852 error ("typedef declaration invalid in parameter declaration");
9853 nclasses++;
9855 if (RIDBIT_SETP (RID_AUTO, specbits)) nclasses++;
9856 if (RIDBIT_SETP (RID_REGISTER, specbits)) nclasses++;
9859 /* Give error if `virtual' is used outside of class declaration. */
9860 if (virtualp
9861 && (current_class_name == NULL_TREE || decl_context != FIELD))
9863 error ("virtual outside class declaration");
9864 virtualp = 0;
9866 if (current_class_name == NULL_TREE && RIDBIT_SETP (RID_MUTABLE, specbits))
9868 error ("only members can be declared mutable");
9869 RIDBIT_RESET (RID_MUTABLE, specbits);
9872 /* Static anonymous unions are dealt with here. */
9873 if (staticp && decl_context == TYPENAME
9874 && TREE_CODE (declspecs) == TREE_LIST
9875 && ANON_AGGR_TYPE_P (TREE_VALUE (declspecs)))
9876 decl_context = FIELD;
9878 /* Warn about storage classes that are invalid for certain
9879 kinds of declarations (parameters, typenames, etc.). */
9881 if (nclasses > 1)
9882 error ("multiple storage classes in declaration of `%s'", name);
9883 else if (decl_context != NORMAL && nclasses > 0)
9885 if ((decl_context == PARM || decl_context == CATCHPARM)
9886 && (RIDBIT_SETP (RID_REGISTER, specbits)
9887 || RIDBIT_SETP (RID_AUTO, specbits)))
9889 else if (RIDBIT_SETP (RID_TYPEDEF, specbits))
9891 else if (decl_context == FIELD
9892 /* C++ allows static class elements */
9893 && RIDBIT_SETP (RID_STATIC, specbits))
9894 /* C++ also allows inlines and signed and unsigned elements,
9895 but in those cases we don't come in here. */
9897 else
9899 if (decl_context == FIELD)
9901 tree tmp = NULL_TREE;
9902 register int op = 0;
9904 if (declarator)
9906 /* Avoid trying to get an operand off an identifier node. */
9907 if (TREE_CODE (declarator) == IDENTIFIER_NODE)
9908 tmp = declarator;
9909 else
9910 tmp = TREE_OPERAND (declarator, 0);
9911 op = IDENTIFIER_OPNAME_P (tmp);
9913 error ("storage class specified for %s `%s'",
9914 op ? "member operator" : "field",
9915 op ? operator_name_string (tmp) : name);
9917 else
9918 error (((decl_context == PARM || decl_context == CATCHPARM)
9919 ? "storage class specified for parameter `%s'"
9920 : "storage class specified for typename"), name);
9921 RIDBIT_RESET (RID_REGISTER, specbits);
9922 RIDBIT_RESET (RID_AUTO, specbits);
9923 RIDBIT_RESET (RID_EXTERN, specbits);
9926 else if (RIDBIT_SETP (RID_EXTERN, specbits) && initialized && !funcdef_flag)
9928 if (toplevel_bindings_p ())
9930 /* It's common practice (and completely valid) to have a const
9931 be initialized and declared extern. */
9932 if (!(type_quals & TYPE_QUAL_CONST))
9933 warning ("`%s' initialized and declared `extern'", name);
9935 else
9936 error ("`%s' has both `extern' and initializer", name);
9938 else if (RIDBIT_SETP (RID_EXTERN, specbits) && funcdef_flag
9939 && ! toplevel_bindings_p ())
9940 error ("nested function `%s' declared `extern'", name);
9941 else if (toplevel_bindings_p ())
9943 if (RIDBIT_SETP (RID_AUTO, specbits))
9944 error ("top-level declaration of `%s' specifies `auto'", name);
9947 if (nclasses > 0 && friendp)
9948 error ("storage class specifiers invalid in friend function declarations");
9950 /* Now figure out the structure of the declarator proper.
9951 Descend through it, creating more complex types, until we reach
9952 the declared identifier (or NULL_TREE, in an absolute declarator). */
9954 inner_attrs = NULL_TREE;
9955 ignore_attrs = 0;
9957 while (declarator && TREE_CODE (declarator) != IDENTIFIER_NODE
9958 && TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
9960 /* Each level of DECLARATOR is either an ARRAY_REF (for ...[..]),
9961 an INDIRECT_REF (for *...),
9962 a CALL_EXPR (for ...(...)),
9963 an identifier (for the name being declared)
9964 or a null pointer (for the place in an absolute declarator
9965 where the name was omitted).
9966 For the last two cases, we have just exited the loop.
9968 For C++ it could also be
9969 a SCOPE_REF (for class :: ...). In this case, we have converted
9970 sensible names to types, and those are the values we use to
9971 qualify the member name.
9972 an ADDR_EXPR (for &...),
9973 a BIT_NOT_EXPR (for destructors)
9975 At this point, TYPE is the type of elements of an array,
9976 or for a function to return, or for a pointer to point to.
9977 After this sequence of ifs, TYPE is the type of the
9978 array or function or pointer, and DECLARATOR has had its
9979 outermost layer removed. */
9981 if (type == error_mark_node)
9983 if (TREE_CODE (declarator) == SCOPE_REF)
9984 declarator = TREE_OPERAND (declarator, 1);
9985 else
9986 declarator = TREE_OPERAND (declarator, 0);
9987 continue;
9989 if (quals != NULL_TREE
9990 && (declarator == NULL_TREE
9991 || TREE_CODE (declarator) != SCOPE_REF))
9993 if (ctype == NULL_TREE && TREE_CODE (type) == METHOD_TYPE)
9994 ctype = TYPE_METHOD_BASETYPE (type);
9995 if (ctype != NULL_TREE)
9997 tree dummy = build_decl (TYPE_DECL, NULL_TREE, type);
9998 ctype = grok_method_quals (ctype, dummy, quals);
9999 type = TREE_TYPE (dummy);
10000 quals = NULL_TREE;
10004 /* See the comment for the TREE_LIST case, below. */
10005 if (ignore_attrs)
10006 ignore_attrs = 0;
10007 else if (inner_attrs)
10009 decl_attributes (type, inner_attrs, NULL_TREE);
10010 inner_attrs = NULL_TREE;
10013 switch (TREE_CODE (declarator))
10015 case TREE_LIST:
10017 /* We encode a declarator with embedded attributes using
10018 a TREE_LIST. The attributes apply to the declarator
10019 directly inside them, so we have to skip an iteration
10020 before applying them to the type. If the declarator just
10021 inside is the declarator-id, we apply the attrs to the
10022 decl itself. */
10023 inner_attrs = TREE_PURPOSE (declarator);
10024 ignore_attrs = 1;
10025 declarator = TREE_VALUE (declarator);
10027 break;
10029 case ARRAY_REF:
10031 register tree itype = NULL_TREE;
10032 register tree size = TREE_OPERAND (declarator, 1);
10033 /* The index is a signed object `sizetype' bits wide. */
10034 tree index_type = signed_type (sizetype);
10036 declarator = TREE_OPERAND (declarator, 0);
10038 /* Check for some types that there cannot be arrays of. */
10040 if (TREE_CODE (type) == VOID_TYPE)
10042 cp_error ("declaration of `%D' as array of voids", dname);
10043 type = error_mark_node;
10046 if (TREE_CODE (type) == FUNCTION_TYPE)
10048 cp_error ("declaration of `%D' as array of functions", dname);
10049 type = error_mark_node;
10052 /* ARM $8.4.3: Since you can't have a pointer to a reference,
10053 you can't have arrays of references. If we allowed them,
10054 then we'd be saying x[i] is valid for an array x, but
10055 then you'd have to ask: what does `*(x + i)' mean? */
10056 if (TREE_CODE (type) == REFERENCE_TYPE)
10058 if (decl_context == TYPENAME)
10059 cp_error ("cannot make arrays of references");
10060 else
10061 cp_error ("declaration of `%D' as array of references",
10062 dname);
10063 type = error_mark_node;
10066 if (TREE_CODE (type) == OFFSET_TYPE)
10068 cp_error ("declaration of `%D' as array of data members",
10069 dname);
10070 type = error_mark_node;
10073 if (TREE_CODE (type) == METHOD_TYPE)
10075 cp_error ("declaration of `%D' as array of function members",
10076 dname);
10077 type = error_mark_node;
10080 if (size == error_mark_node)
10081 type = error_mark_node;
10082 else if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
10084 /* [dcl.array]
10086 the constant expressions that specify the bounds of
10087 the arrays can be omitted only for the first member
10088 of the sequence. */
10089 cp_error ("declaration of `%D' as multidimensional array",
10090 dname);
10091 cp_error ("must have bounds for all dimensions except the first");
10092 type = error_mark_node;
10095 if (type == error_mark_node)
10096 continue;
10098 /* VC++ spells a zero-sized array with []. */
10099 if (size == NULL_TREE && decl_context == FIELD && ! staticp
10100 && ! RIDBIT_SETP (RID_TYPEDEF, specbits))
10101 size = integer_zero_node;
10103 if (size)
10105 /* Must suspend_momentary here because the index
10106 type may need to live until the end of the function.
10107 For example, it is used in the declaration of a
10108 variable which requires destructing at the end of
10109 the function; then build_vec_delete will need this
10110 value. */
10111 int yes = suspend_momentary ();
10112 /* Might be a cast. */
10113 if (TREE_CODE (size) == NOP_EXPR
10114 && TREE_TYPE (size) == TREE_TYPE (TREE_OPERAND (size, 0)))
10115 size = TREE_OPERAND (size, 0);
10116 if (TREE_READONLY_DECL_P (size))
10117 size = decl_constant_value (size);
10119 /* If this involves a template parameter, it will be a
10120 constant at instantiation time, but we don't know
10121 what the value is yet. Even if no template
10122 parameters are involved, we may an expression that
10123 is not a constant; we don't even simplify `1 + 2'
10124 when processing a template. */
10125 if (processing_template_decl)
10127 /* Resolve a qualified reference to an enumerator or
10128 static const data member of ours. */
10129 if (TREE_CODE (size) == SCOPE_REF
10130 && TREE_OPERAND (size, 0) == current_class_type)
10132 tree t = lookup_field (current_class_type,
10133 TREE_OPERAND (size, 1), 0, 0);
10134 if (t)
10135 size = t;
10138 itype = build_index_type (build_min
10139 (MINUS_EXPR, sizetype, size, integer_one_node));
10140 goto dont_grok_size;
10143 if (TREE_CODE (TREE_TYPE (size)) != INTEGER_TYPE
10144 && TREE_CODE (TREE_TYPE (size)) != ENUMERAL_TYPE
10145 && TREE_CODE (TREE_TYPE (size)) != BOOLEAN_TYPE)
10147 cp_error ("size of array `%D' has non-integer type",
10148 dname);
10149 size = integer_one_node;
10151 if (pedantic && integer_zerop (size))
10152 cp_pedwarn ("ANSI C++ forbids zero-size array `%D'", dname);
10153 if (TREE_CONSTANT (size))
10155 int old_flag_pedantic_errors = flag_pedantic_errors;
10156 int old_pedantic = pedantic;
10157 pedantic = flag_pedantic_errors = 1;
10158 /* Always give overflow errors on array subscripts. */
10159 constant_expression_warning (size);
10160 pedantic = old_pedantic;
10161 flag_pedantic_errors = old_flag_pedantic_errors;
10162 if (INT_CST_LT (size, integer_zero_node))
10164 cp_error ("size of array `%D' is negative", dname);
10165 size = integer_one_node;
10168 else
10170 if (pedantic)
10172 if (dname)
10173 cp_pedwarn ("ANSI C++ forbids variable-size array `%D'",
10174 dname);
10175 else
10176 cp_pedwarn ("ANSI C++ forbids variable-size array");
10180 itype
10181 = fold (build_binary_op (MINUS_EXPR,
10182 cp_convert (index_type, size),
10183 cp_convert (index_type,
10184 integer_one_node)));
10185 if (! TREE_CONSTANT (itype))
10186 itype = variable_size (itype);
10187 else if (TREE_OVERFLOW (itype))
10189 error ("overflow in array dimension");
10190 TREE_OVERFLOW (itype) = 0;
10193 /* If we're a parm, we need to have a permanent type so
10194 mangling checks for re-use will work right. If both the
10195 element and index types are permanent, the array type
10196 will be, too. */
10197 if (decl_context == PARM
10198 && allocation_temporary_p () && TREE_PERMANENT (type))
10200 push_obstacks (&permanent_obstack, &permanent_obstack);
10201 itype = build_index_type (itype);
10202 pop_obstacks ();
10204 else
10205 itype = build_index_type (itype);
10207 dont_grok_size:
10208 resume_momentary (yes);
10211 type = build_cplus_array_type (type, itype);
10212 ctype = NULL_TREE;
10214 break;
10216 case CALL_EXPR:
10218 tree arg_types;
10219 int funcdecl_p;
10220 tree inner_parms = CALL_DECLARATOR_PARMS (declarator);
10221 tree inner_decl = TREE_OPERAND (declarator, 0);
10223 /* Declaring a function type.
10224 Make sure we have a valid type for the function to return. */
10226 /* We now know that the TYPE_QUALS don't apply to the
10227 decl, but to its return type. */
10228 type_quals = TYPE_UNQUALIFIED;
10230 /* Warn about some types functions can't return. */
10232 if (TREE_CODE (type) == FUNCTION_TYPE)
10234 error ("`%s' declared as function returning a function", name);
10235 type = integer_type_node;
10237 if (TREE_CODE (type) == ARRAY_TYPE)
10239 error ("`%s' declared as function returning an array", name);
10240 type = integer_type_node;
10243 if (inner_decl && TREE_CODE (inner_decl) == SCOPE_REF)
10244 inner_decl = TREE_OPERAND (inner_decl, 1);
10246 if (inner_decl && TREE_CODE (inner_decl) == TEMPLATE_ID_EXPR)
10247 inner_decl = dname;
10249 /* Pick up type qualifiers which should be applied to `this'. */
10250 quals = CALL_DECLARATOR_QUALS (declarator);
10252 /* Pick up the exception specifications. */
10253 raises = CALL_DECLARATOR_EXCEPTION_SPEC (declarator);
10255 /* Say it's a definition only for the CALL_EXPR
10256 closest to the identifier. */
10257 funcdecl_p
10258 = inner_decl
10259 && (TREE_CODE (inner_decl) == IDENTIFIER_NODE
10260 || TREE_CODE (inner_decl) == TEMPLATE_ID_EXPR
10261 || TREE_CODE (inner_decl) == BIT_NOT_EXPR);
10263 if (ctype == NULL_TREE
10264 && decl_context == FIELD
10265 && funcdecl_p
10266 && (friendp == 0 || dname == current_class_name))
10267 ctype = current_class_type;
10269 if (ctype && return_type == return_conversion)
10270 TYPE_HAS_CONVERSION (ctype) = 1;
10271 if (ctype && constructor_name (ctype) == dname)
10273 /* We are within a class's scope. If our declarator name
10274 is the same as the class name, and we are defining
10275 a function, then it is a constructor/destructor, and
10276 therefore returns a void type. */
10278 if (flags == DTOR_FLAG)
10280 /* ANSI C++ June 5 1992 WP 12.4.1. A destructor may
10281 not be declared const or volatile. A destructor
10282 may not be static. */
10283 if (staticp == 2)
10284 error ("destructor cannot be static member function");
10285 if (quals)
10287 cp_error ("destructors may not be `%s'",
10288 IDENTIFIER_POINTER (TREE_VALUE (quals)));
10289 quals = NULL_TREE;
10291 if (decl_context == FIELD)
10293 if (! member_function_or_else (ctype, current_class_type,
10294 "destructor for alien class `%s' cannot be a member"))
10295 return void_type_node;
10298 else /* It's a constructor. */
10300 if (explicitp == 1)
10301 explicitp = 2;
10302 /* ANSI C++ June 5 1992 WP 12.1.2. A constructor may
10303 not be declared const or volatile. A constructor may
10304 not be virtual. A constructor may not be static. */
10305 if (staticp == 2)
10306 error ("constructor cannot be static member function");
10307 if (virtualp)
10309 pedwarn ("constructors cannot be declared virtual");
10310 virtualp = 0;
10312 if (quals)
10314 cp_error ("constructors may not be `%s'",
10315 IDENTIFIER_POINTER (TREE_VALUE (quals)));
10316 quals = NULL_TREE;
10319 RID_BIT_TYPE tmp_bits;
10320 bcopy ((void*)&specbits, (void*)&tmp_bits, sizeof (RID_BIT_TYPE));
10321 RIDBIT_RESET (RID_INLINE, tmp_bits);
10322 RIDBIT_RESET (RID_STATIC, tmp_bits);
10323 if (RIDBIT_ANY_SET (tmp_bits))
10324 error ("return value type specifier for constructor ignored");
10326 type = build_pointer_type (ctype);
10327 if (decl_context == FIELD)
10329 if (! member_function_or_else (ctype, current_class_type,
10330 "constructor for alien class `%s' cannot be member"))
10331 return void_type_node;
10332 TYPE_HAS_CONSTRUCTOR (ctype) = 1;
10333 if (return_type != return_ctor)
10334 return NULL_TREE;
10337 if (decl_context == FIELD)
10338 staticp = 0;
10340 else if (friendp)
10342 if (initialized)
10343 error ("can't initialize friend function `%s'", name);
10344 if (virtualp)
10346 /* Cannot be both friend and virtual. */
10347 error ("virtual functions cannot be friends");
10348 RIDBIT_RESET (RID_FRIEND, specbits);
10349 friendp = 0;
10351 if (decl_context == NORMAL)
10352 error ("friend declaration not in class definition");
10353 if (current_function_decl && funcdef_flag)
10354 cp_error ("can't define friend function `%s' in a local class definition",
10355 name);
10358 /* Construct the function type and go to the next
10359 inner layer of declarator. */
10361 declarator = TREE_OPERAND (declarator, 0);
10363 /* FIXME: This is where default args should be fully
10364 processed. */
10366 arg_types = grokparms (inner_parms, funcdecl_p ? funcdef_flag : 0);
10368 if (declarator && flags == DTOR_FLAG)
10370 /* A destructor declared in the body of a class will
10371 be represented as a BIT_NOT_EXPR. But, we just
10372 want the underlying IDENTIFIER. */
10373 if (TREE_CODE (declarator) == BIT_NOT_EXPR)
10374 declarator = TREE_OPERAND (declarator, 0);
10376 if (strict_prototype == 0 && arg_types == NULL_TREE)
10377 arg_types = void_list_node;
10378 else if (arg_types == NULL_TREE
10379 || arg_types != void_list_node)
10381 cp_error ("destructors may not have parameters");
10382 arg_types = void_list_node;
10383 last_function_parms = NULL_TREE;
10387 /* ANSI says that `const int foo ();'
10388 does not make the function foo const. */
10389 type = build_function_type (type, arg_types);
10392 tree t;
10393 for (t = arg_types; t; t = TREE_CHAIN (t))
10394 if (TREE_PURPOSE (t)
10395 && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
10397 add_defarg_fn (type);
10398 break;
10402 break;
10404 case ADDR_EXPR:
10405 case INDIRECT_REF:
10406 /* Filter out pointers-to-references and references-to-references.
10407 We can get these if a TYPE_DECL is used. */
10409 if (TREE_CODE (type) == REFERENCE_TYPE)
10411 error ("cannot declare %s to references",
10412 TREE_CODE (declarator) == ADDR_EXPR
10413 ? "references" : "pointers");
10414 declarator = TREE_OPERAND (declarator, 0);
10415 continue;
10418 if (TREE_CODE (type) == OFFSET_TYPE
10419 && (TREE_CODE (TREE_TYPE (type)) == VOID_TYPE
10420 || TREE_CODE (TREE_TYPE (type)) == REFERENCE_TYPE))
10422 cp_error ("cannot declare pointer to `%#T' member",
10423 TREE_TYPE (type));
10424 type = TREE_TYPE (type);
10427 /* Merge any constancy or volatility into the target type
10428 for the pointer. */
10430 /* We now know that the TYPE_QUALS don't apply to the decl,
10431 but to the target of the pointer. */
10432 type_quals = TYPE_UNQUALIFIED;
10434 if (TREE_CODE (declarator) == ADDR_EXPR)
10436 if (TREE_CODE (type) == VOID_TYPE)
10437 error ("invalid type: `void &'");
10438 else
10439 type = build_reference_type (type);
10441 else if (TREE_CODE (type) == METHOD_TYPE)
10442 type = build_ptrmemfunc_type (build_pointer_type (type));
10443 else
10444 type = build_pointer_type (type);
10446 /* Process a list of type modifier keywords (such as
10447 const or volatile) that were given inside the `*' or `&'. */
10449 if (TREE_TYPE (declarator))
10451 register tree typemodlist;
10452 int erred = 0;
10454 constp = 0;
10455 volatilep = 0;
10456 restrictp = 0;
10457 for (typemodlist = TREE_TYPE (declarator); typemodlist;
10458 typemodlist = TREE_CHAIN (typemodlist))
10460 tree qualifier = TREE_VALUE (typemodlist);
10462 if (qualifier == ridpointers[(int) RID_CONST])
10463 constp++;
10464 else if (qualifier == ridpointers[(int) RID_VOLATILE])
10465 volatilep++;
10466 else if (qualifier == ridpointers[(int) RID_RESTRICT])
10467 restrictp++;
10468 else if (!erred)
10470 erred = 1;
10471 error ("invalid type modifier within pointer declarator");
10474 if (constp > 1)
10475 pedwarn ("duplicate `const'");
10476 if (volatilep > 1)
10477 pedwarn ("duplicate `volatile'");
10478 if (restrictp > 1)
10479 pedwarn ("duplicate `restrict'");
10481 type_quals = ((constp ? TYPE_QUAL_CONST : 0)
10482 | (restrictp ? TYPE_QUAL_RESTRICT : 0)
10483 | (volatilep ? TYPE_QUAL_VOLATILE : 0));
10484 if (TREE_CODE (declarator) == ADDR_EXPR
10485 && (constp || volatilep))
10487 if (constp)
10488 pedwarn ("discarding `const' applied to a reference");
10489 if (volatilep)
10490 pedwarn ("discarding `volatile' applied to a reference");
10491 type_quals &= ~(TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE);
10493 type = cp_build_qualified_type (type, type_quals);
10495 declarator = TREE_OPERAND (declarator, 0);
10496 ctype = NULL_TREE;
10497 break;
10499 case SCOPE_REF:
10501 /* We have converted type names to NULL_TREE if the
10502 name was bogus, or to a _TYPE node, if not.
10504 The variable CTYPE holds the type we will ultimately
10505 resolve to. The code here just needs to build
10506 up appropriate member types. */
10507 tree sname = TREE_OPERAND (declarator, 1);
10508 tree t;
10510 /* Destructors can have their visibilities changed as well. */
10511 if (TREE_CODE (sname) == BIT_NOT_EXPR)
10512 sname = TREE_OPERAND (sname, 0);
10514 if (TREE_COMPLEXITY (declarator) == 0)
10515 /* This needs to be here, in case we are called
10516 multiple times. */ ;
10517 else if (TREE_COMPLEXITY (declarator) == -1)
10518 /* Namespace member. */
10519 pop_decl_namespace ();
10520 else if (friendp && (TREE_COMPLEXITY (declarator) < 2))
10521 /* Don't fall out into global scope. Hides real bug? --eichin */ ;
10522 else if (! IS_AGGR_TYPE_CODE
10523 (TREE_CODE (TREE_OPERAND (declarator, 0))))
10525 else if (TREE_COMPLEXITY (declarator) == current_class_depth)
10527 /* Resolve any TYPENAME_TYPEs from the decl-specifier-seq
10528 that refer to ctype. They couldn't be resolved earlier
10529 because we hadn't pushed into the class yet.
10530 Example: resolve 'B<T>::type' in
10531 'B<typename B<T>::type> B<T>::f () { }'. */
10532 if (current_template_parms
10533 && uses_template_parms (type)
10534 && uses_template_parms (current_class_type))
10536 tree args = current_template_args ();
10537 type = tsubst (type, args, /*complain=*/1, NULL_TREE);
10540 /* This pop_nested_class corresponds to the
10541 push_nested_class used to push into class scope for
10542 parsing the argument list of a function decl, in
10543 qualified_id. */
10544 pop_nested_class ();
10545 TREE_COMPLEXITY (declarator) = current_class_depth;
10547 else
10548 my_friendly_abort (16);
10550 if (TREE_OPERAND (declarator, 0) == NULL_TREE)
10552 /* We had a reference to a global decl, or
10553 perhaps we were given a non-aggregate typedef,
10554 in which case we cleared this out, and should just
10555 keep going as though it wasn't there. */
10556 declarator = sname;
10557 continue;
10559 ctype = TREE_OPERAND (declarator, 0);
10561 t = ctype;
10562 while (t != NULL_TREE && CLASS_TYPE_P (t))
10564 if (CLASSTYPE_TEMPLATE_INFO (t) &&
10565 !CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
10566 template_count += 1;
10567 t = TYPE_MAIN_DECL (t);
10568 if (DECL_LANG_SPECIFIC (t))
10569 t = DECL_CLASS_CONTEXT (t);
10570 else
10571 t = NULL_TREE;
10574 if (sname == NULL_TREE)
10575 goto done_scoping;
10577 if (TREE_CODE (sname) == IDENTIFIER_NODE)
10579 /* This is the `standard' use of the scoping operator:
10580 basetype :: member . */
10582 if (ctype == current_class_type)
10584 /* class A {
10585 void A::f ();
10588 Is this ill-formed? */
10590 if (pedantic)
10591 cp_pedwarn ("extra qualification `%T::' on member `%s' ignored",
10592 ctype, name);
10594 else if (TREE_CODE (type) == FUNCTION_TYPE)
10596 if (current_class_type == NULL_TREE
10597 || friendp)
10598 type = build_cplus_method_type (ctype, TREE_TYPE (type),
10599 TYPE_ARG_TYPES (type));
10600 else
10602 cp_error ("cannot declare member function `%T::%s' within `%T'",
10603 ctype, name, current_class_type);
10604 return void_type_node;
10607 else if (RIDBIT_SETP (RID_TYPEDEF, specbits)
10608 || TYPE_SIZE (complete_type (ctype)) != NULL_TREE)
10610 /* Have to move this code elsewhere in this function.
10611 this code is used for i.e., typedef int A::M; M *pm;
10613 It is? How? jason 10/2/94 */
10615 if (current_class_type)
10617 cp_error ("cannot declare member `%T::%s' within `%T'",
10618 ctype, name, current_class_type);
10619 return void_type_node;
10621 type = build_offset_type (ctype, type);
10623 else if (uses_template_parms (ctype))
10625 if (TREE_CODE (type) == FUNCTION_TYPE)
10626 type
10627 = build_cplus_method_type (ctype, TREE_TYPE (type),
10628 TYPE_ARG_TYPES (type));
10630 else
10632 cp_error ("structure `%T' not yet defined", ctype);
10633 return error_mark_node;
10636 declarator = sname;
10638 else if (TREE_CODE (sname) == SCOPE_REF)
10639 my_friendly_abort (17);
10640 else
10642 done_scoping:
10643 declarator = TREE_OPERAND (declarator, 1);
10644 if (declarator && TREE_CODE (declarator) == CALL_EXPR)
10645 /* In this case, we will deal with it later. */
10647 else
10649 if (TREE_CODE (type) == FUNCTION_TYPE)
10650 type = build_cplus_method_type (ctype, TREE_TYPE (type),
10651 TYPE_ARG_TYPES (type));
10652 else
10653 type = build_offset_type (ctype, type);
10657 break;
10659 case BIT_NOT_EXPR:
10660 declarator = TREE_OPERAND (declarator, 0);
10661 break;
10663 case RECORD_TYPE:
10664 case UNION_TYPE:
10665 case ENUMERAL_TYPE:
10666 declarator = NULL_TREE;
10667 break;
10669 case ERROR_MARK:
10670 declarator = NULL_TREE;
10671 break;
10673 default:
10674 my_friendly_abort (158);
10678 /* See the comment for the TREE_LIST case, above. */
10679 if (inner_attrs)
10681 if (! ignore_attrs)
10682 decl_attributes (type, inner_attrs, NULL_TREE);
10683 else if (attrlist)
10684 TREE_VALUE (attrlist) = chainon (inner_attrs, TREE_VALUE (attrlist));
10685 else
10686 attrlist = build_decl_list (NULL_TREE, inner_attrs);
10689 /* Now TYPE has the actual type. */
10691 if (explicitp == 1)
10693 error ("only constructors can be declared `explicit'");
10694 explicitp = 0;
10697 if (RIDBIT_SETP (RID_MUTABLE, specbits))
10699 if (type_quals & TYPE_QUAL_CONST)
10701 error ("const `%s' cannot be declared `mutable'", name);
10702 RIDBIT_RESET (RID_MUTABLE, specbits);
10704 else if (staticp)
10706 error ("static `%s' cannot be declared `mutable'", name);
10707 RIDBIT_RESET (RID_MUTABLE, specbits);
10711 if (declarator == NULL_TREE
10712 || TREE_CODE (declarator) == IDENTIFIER_NODE
10713 || (TREE_CODE (declarator) == TEMPLATE_ID_EXPR
10714 && (TREE_CODE (type) == FUNCTION_TYPE
10715 || TREE_CODE (type) == METHOD_TYPE)))
10716 /* OK */;
10717 else if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
10719 cp_error ("template-id `%D' used as a declarator", declarator);
10720 declarator = dname;
10722 else
10723 /* Unexpected declarator format. */
10724 my_friendly_abort (990210);
10726 /* If this is declaring a typedef name, return a TYPE_DECL. */
10728 if (RIDBIT_SETP (RID_TYPEDEF, specbits) && decl_context != TYPENAME)
10730 tree decl;
10732 /* Note that the grammar rejects storage classes
10733 in typenames, fields or parameters. */
10734 if (current_lang_name == lang_name_java)
10735 TYPE_FOR_JAVA (type) = 1;
10737 if (decl_context == FIELD)
10739 if (declarator == constructor_name (current_class_type))
10740 cp_pedwarn ("ANSI C++ forbids nested type `%D' with same name as enclosing class",
10741 declarator);
10742 decl = build_lang_decl (TYPE_DECL, declarator, type);
10744 else
10746 /* Make sure this typedef lives as long as its type,
10747 since it might be used as a template parameter. */
10748 if (type != error_mark_node)
10749 push_obstacks (TYPE_OBSTACK (type), TYPE_OBSTACK (type));
10750 if (processing_template_decl)
10751 decl = build_lang_decl (TYPE_DECL, declarator, type);
10752 else
10753 decl = build_decl (TYPE_DECL, declarator, type);
10754 if (type != error_mark_node)
10755 pop_obstacks ();
10758 /* If the user declares "typedef struct {...} foo" then the
10759 struct will have an anonymous name. Fill that name in now.
10760 Nothing can refer to it, so nothing needs know about the name
10761 change. */
10762 if (type != error_mark_node
10763 && TYPE_NAME (type)
10764 && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
10765 && ANON_AGGRNAME_P (TYPE_IDENTIFIER (type))
10766 && CP_TYPE_QUALS (type) == TYPE_UNQUALIFIED)
10768 tree oldname = TYPE_NAME (type);
10769 tree t;
10771 /* Replace the anonymous name with the real name everywhere. */
10772 lookup_tag_reverse (type, declarator);
10773 for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
10774 if (TYPE_NAME (t) == oldname)
10775 TYPE_NAME (t) = decl;
10777 if (TYPE_LANG_SPECIFIC (type))
10778 TYPE_WAS_ANONYMOUS (type) = 1;
10780 /* If this is a typedef within a template class, the nested
10781 type is a (non-primary) template. The name for the
10782 template needs updating as well. */
10783 if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
10784 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type))
10785 = TYPE_IDENTIFIER (type);
10787 /* XXX Temporarily set the scope.
10788 When returning, start_decl expects it as NULL_TREE,
10789 and will then then set it using pushdecl. */
10790 my_friendly_assert (DECL_CONTEXT (decl) == NULL_TREE, 980404);
10791 if (current_class_type)
10792 DECL_CONTEXT (decl) = current_class_type;
10793 else
10794 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
10796 DECL_ASSEMBLER_NAME (decl) = DECL_NAME (decl);
10797 DECL_ASSEMBLER_NAME (decl)
10798 = get_identifier (build_overload_name (type, 1, 1));
10799 DECL_CONTEXT (decl) = NULL_TREE;
10801 /* FIXME remangle member functions; member functions of a
10802 type with external linkage have external linkage. */
10805 if (TREE_CODE (type) == OFFSET_TYPE || TREE_CODE (type) == METHOD_TYPE)
10807 cp_error_at ("typedef name may not be class-qualified", decl);
10808 return NULL_TREE;
10810 else if (quals)
10812 if (ctype == NULL_TREE)
10814 if (TREE_CODE (type) != METHOD_TYPE)
10815 cp_error_at ("invalid type qualifier for non-method type", decl);
10816 else
10817 ctype = TYPE_METHOD_BASETYPE (type);
10819 if (ctype != NULL_TREE)
10820 grok_method_quals (ctype, decl, quals);
10823 if (RIDBIT_SETP (RID_SIGNED, specbits)
10824 || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
10825 C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
10827 if (RIDBIT_SETP (RID_MUTABLE, specbits))
10828 error ("non-object member `%s' cannot be declared mutable", name);
10830 bad_specifiers (decl, "type", virtualp, quals != NULL_TREE,
10831 inlinep, friendp, raises != NULL_TREE);
10833 if (initialized)
10834 error ("typedef declaration includes an initializer");
10836 return decl;
10839 /* Detect the case of an array type of unspecified size
10840 which came, as such, direct from a typedef name.
10841 We must copy the type, so that each identifier gets
10842 a distinct type, so that each identifier's size can be
10843 controlled separately by its own initializer. */
10845 if (type == typedef_type && TREE_CODE (type) == ARRAY_TYPE
10846 && TYPE_DOMAIN (type) == NULL_TREE)
10848 type = build_cplus_array_type (TREE_TYPE (type), TYPE_DOMAIN (type));
10851 /* If this is a type name (such as, in a cast or sizeof),
10852 compute the type and return it now. */
10854 if (decl_context == TYPENAME)
10856 /* Note that the grammar rejects storage classes
10857 in typenames, fields or parameters. */
10858 if (type_quals != TYPE_UNQUALIFIED)
10859 type_quals = TYPE_UNQUALIFIED;
10861 /* Special case: "friend class foo" looks like a TYPENAME context. */
10862 if (friendp)
10864 if (type_quals != TYPE_UNQUALIFIED)
10866 cp_error ("type qualifiers specified for friend class declaration");
10867 type_quals = TYPE_UNQUALIFIED;
10869 if (inlinep)
10871 cp_error ("`inline' specified for friend class declaration");
10872 inlinep = 0;
10875 /* Only try to do this stuff if we didn't already give up. */
10876 if (type != integer_type_node)
10878 /* A friendly class? */
10879 if (current_class_type)
10880 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type));
10881 else
10882 error ("trying to make class `%s' a friend of global scope",
10883 TYPE_NAME_STRING (type));
10884 type = void_type_node;
10887 else if (quals)
10889 tree dummy = build_decl (TYPE_DECL, declarator, type);
10890 if (ctype == NULL_TREE)
10892 my_friendly_assert (TREE_CODE (type) == METHOD_TYPE, 159);
10893 ctype = TYPE_METHOD_BASETYPE (type);
10895 grok_method_quals (ctype, dummy, quals);
10896 type = TREE_TYPE (dummy);
10899 return type;
10901 else if (declarator == NULL_TREE && decl_context != PARM
10902 && decl_context != CATCHPARM
10903 && TREE_CODE (type) != UNION_TYPE
10904 && ! bitfield)
10906 cp_error ("abstract declarator `%T' used as declaration", type);
10907 declarator = make_anon_name ();
10910 /* `void' at top level (not within pointer)
10911 is allowed only in typedefs or type names.
10912 We don't complain about parms either, but that is because
10913 a better error message can be made later. */
10915 if (TREE_CODE (type) == VOID_TYPE && decl_context != PARM)
10917 if (! declarator)
10918 error ("unnamed variable or field declared void");
10919 else if (TREE_CODE (declarator) == IDENTIFIER_NODE)
10921 if (IDENTIFIER_OPNAME_P (declarator))
10922 my_friendly_abort (356);
10923 else
10924 error ("variable or field `%s' declared void", name);
10926 else
10927 error ("variable or field declared void");
10928 type = integer_type_node;
10931 /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
10932 or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE. */
10934 if (decl_context == PARM || decl_context == CATCHPARM)
10936 if (ctype || in_namespace)
10937 error ("cannot use `::' in parameter declaration");
10939 /* A parameter declared as an array of T is really a pointer to T.
10940 One declared as a function is really a pointer to a function.
10941 One declared as a member is really a pointer to member. */
10943 if (TREE_CODE (type) == ARRAY_TYPE)
10945 /* Transfer const-ness of array into that of type pointed to. */
10946 type = build_pointer_type (TREE_TYPE (type));
10947 type_quals = TYPE_UNQUALIFIED;
10949 else if (TREE_CODE (type) == FUNCTION_TYPE)
10950 type = build_pointer_type (type);
10951 else if (TREE_CODE (type) == OFFSET_TYPE)
10952 type = build_pointer_type (type);
10953 else if (TREE_CODE (type) == VOID_TYPE && declarator)
10955 error ("declaration of `%s' as void", name);
10956 return NULL_TREE;
10961 register tree decl;
10963 if (decl_context == PARM)
10965 decl = build_decl (PARM_DECL, declarator, type);
10967 bad_specifiers (decl, "parameter", virtualp, quals != NULL_TREE,
10968 inlinep, friendp, raises != NULL_TREE);
10970 /* Compute the type actually passed in the parmlist,
10971 for the case where there is no prototype.
10972 (For example, shorts and chars are passed as ints.)
10973 When there is a prototype, this is overridden later. */
10975 DECL_ARG_TYPE (decl) = type_promotes_to (type);
10977 else if (decl_context == FIELD)
10979 if (type == error_mark_node)
10981 /* Happens when declaring arrays of sizes which
10982 are error_mark_node, for example. */
10983 decl = NULL_TREE;
10985 else if (in_namespace && !friendp)
10987 /* Something like struct S { int N::j; }; */
10988 cp_error ("invalid use of `::'");
10989 decl = NULL_TREE;
10991 else if (TREE_CODE (type) == FUNCTION_TYPE)
10993 int publicp = 0;
10994 tree function_context;
10996 /* We catch the others as conflicts with the builtin
10997 typedefs. */
10998 if (friendp && declarator == ridpointers[(int) RID_SIGNED])
11000 cp_error ("function `%D' cannot be declared friend",
11001 declarator);
11002 friendp = 0;
11005 if (friendp == 0)
11007 if (ctype == NULL_TREE)
11008 ctype = current_class_type;
11010 if (ctype == NULL_TREE)
11012 cp_error ("can't make `%D' into a method -- not in a class",
11013 declarator);
11014 return void_type_node;
11017 /* ``A union may [ ... ] not [ have ] virtual functions.''
11018 ARM 9.5 */
11019 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
11021 cp_error ("function `%D' declared virtual inside a union",
11022 declarator);
11023 return void_type_node;
11026 if (declarator == ansi_opname[(int) NEW_EXPR]
11027 || declarator == ansi_opname[(int) VEC_NEW_EXPR]
11028 || declarator == ansi_opname[(int) DELETE_EXPR]
11029 || declarator == ansi_opname[(int) VEC_DELETE_EXPR])
11031 if (virtualp)
11033 cp_error ("`%D' cannot be declared virtual, since it is always static",
11034 declarator);
11035 virtualp = 0;
11038 else if (staticp < 2)
11039 type = build_cplus_method_type (ctype, TREE_TYPE (type),
11040 TYPE_ARG_TYPES (type));
11043 /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node. */
11044 function_context = (ctype != NULL_TREE) ?
11045 hack_decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
11046 publicp = (! friendp || ! staticp)
11047 && function_context == NULL_TREE;
11048 decl = grokfndecl (ctype, type,
11049 TREE_CODE (declarator) != TEMPLATE_ID_EXPR
11050 ? declarator : dname,
11051 declarator,
11052 virtualp, flags, quals, raises,
11053 friendp ? -1 : 0, friendp, publicp, inlinep,
11054 funcdef_flag, template_count, in_namespace);
11055 if (decl == NULL_TREE)
11056 return decl;
11057 #if 0
11058 /* This clobbers the attrs stored in `decl' from `attrlist'. */
11059 /* The decl and setting of decl_machine_attr is also turned off. */
11060 decl = build_decl_attribute_variant (decl, decl_machine_attr);
11061 #endif
11063 /* [class.conv.ctor]
11065 A constructor declared without the function-specifier
11066 explicit that can be called with a single parameter
11067 specifies a conversion from the type of its first
11068 parameter to the type of its class. Such a constructor
11069 is called a converting constructor. */
11070 if (explicitp == 2)
11071 DECL_NONCONVERTING_P (decl) = 1;
11072 else if (DECL_CONSTRUCTOR_P (decl))
11074 /* The constructor can be called with exactly one
11075 parameter if there is at least one parameter, and
11076 any subsequent parameters have default arguments.
11077 We don't look at the first parameter, which is
11078 really just the `this' parameter for the new
11079 object. */
11080 tree arg_types =
11081 TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)));
11083 /* Skip the `in_chrg' argument too, if present. */
11084 if (TYPE_USES_VIRTUAL_BASECLASSES (DECL_CONTEXT (decl)))
11085 arg_types = TREE_CHAIN (arg_types);
11087 if (arg_types == void_list_node
11088 || (arg_types
11089 && TREE_CHAIN (arg_types)
11090 && TREE_CHAIN (arg_types) != void_list_node
11091 && !TREE_PURPOSE (TREE_CHAIN (arg_types))))
11092 DECL_NONCONVERTING_P (decl) = 1;
11095 else if (TREE_CODE (type) == METHOD_TYPE)
11097 /* We only get here for friend declarations of
11098 members of other classes. */
11099 /* All method decls are public, so tell grokfndecl to set
11100 TREE_PUBLIC, also. */
11101 decl = grokfndecl (ctype, type, declarator, declarator,
11102 virtualp, flags, quals, raises,
11103 friendp ? -1 : 0, friendp, 1, 0, funcdef_flag,
11104 template_count, in_namespace);
11105 if (decl == NULL_TREE)
11106 return NULL_TREE;
11108 else if (!staticp && ! processing_template_decl
11109 && TYPE_SIZE (complete_type (type)) == NULL_TREE
11110 && (TREE_CODE (type) != ARRAY_TYPE || initialized == 0))
11112 if (declarator)
11113 cp_error ("field `%D' has incomplete type", declarator);
11114 else
11115 cp_error ("name `%T' has incomplete type", type);
11117 /* If we're instantiating a template, tell them which
11118 instantiation made the field's type be incomplete. */
11119 if (current_class_type
11120 && TYPE_NAME (current_class_type)
11121 && IDENTIFIER_TEMPLATE (TYPE_IDENTIFIER (current_class_type))
11122 && declspecs && TREE_VALUE (declspecs)
11123 && TREE_TYPE (TREE_VALUE (declspecs)) == type)
11124 cp_error (" in instantiation of template `%T'",
11125 current_class_type);
11127 type = error_mark_node;
11128 decl = NULL_TREE;
11130 else
11132 if (friendp)
11134 error ("`%s' is neither function nor method; cannot be declared friend",
11135 IDENTIFIER_POINTER (declarator));
11136 friendp = 0;
11138 decl = NULL_TREE;
11141 if (friendp)
11143 /* Friends are treated specially. */
11144 if (ctype == current_class_type)
11145 warning ("member functions are implicitly friends of their class");
11146 else
11148 tree t = NULL_TREE;
11149 if (decl && DECL_NAME (decl))
11151 if (template_class_depth (current_class_type) == 0)
11153 decl
11154 = check_explicit_specialization
11155 (declarator, decl,
11156 template_count, 2 * (funcdef_flag != 0) + 4);
11157 if (decl == error_mark_node)
11158 return error_mark_node;
11161 t = do_friend (ctype, declarator, decl,
11162 last_function_parms, attrlist, flags, quals,
11163 funcdef_flag);
11165 if (t && funcdef_flag)
11166 return t;
11168 return void_type_node;
11172 /* Structure field. It may not be a function, except for C++ */
11174 if (decl == NULL_TREE)
11176 if (initialized)
11178 if (!staticp)
11180 /* An attempt is being made to initialize a non-static
11181 member. But, from [class.mem]:
11183 4 A member-declarator can contain a
11184 constant-initializer only if it declares a static
11185 member (_class.static_) of integral or enumeration
11186 type, see _class.static.data_.
11188 This used to be relatively common practice, but
11189 the rest of the compiler does not correctly
11190 handle the initialization unless the member is
11191 static so we make it static below. */
11192 cp_pedwarn ("ANSI C++ forbids initialization of member `%D'",
11193 declarator);
11194 cp_pedwarn ("making `%D' static", declarator);
11195 staticp = 1;
11198 if (uses_template_parms (type))
11199 /* We'll check at instantiation time. */
11201 else if (check_static_variable_definition (declarator,
11202 type))
11203 /* If we just return the declaration, crashes
11204 will sometimes occur. We therefore return
11205 void_type_node, as if this was a friend
11206 declaration, to cause callers to completely
11207 ignore this declaration. */
11208 return void_type_node;
11211 /* 9.2p13 [class.mem] */
11212 if (declarator == constructor_name (current_class_type)
11213 /* Divergence from the standard: In extern "C", we
11214 allow non-static data members here, because C does
11215 and /usr/include/netinet/in.h uses that. */
11216 && (staticp || ! in_system_header))
11217 cp_pedwarn ("ANSI C++ forbids data member `%D' with same name as enclosing class",
11218 declarator);
11220 if (staticp)
11222 /* C++ allows static class members. All other work
11223 for this is done by grokfield. */
11224 decl = build_lang_decl (VAR_DECL, declarator, type);
11225 TREE_STATIC (decl) = 1;
11226 /* In class context, 'static' means public access. */
11227 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl) = 1;
11229 else
11231 decl = build_lang_decl (FIELD_DECL, declarator, type);
11232 if (RIDBIT_SETP (RID_MUTABLE, specbits))
11234 DECL_MUTABLE_P (decl) = 1;
11235 RIDBIT_RESET (RID_MUTABLE, specbits);
11239 bad_specifiers (decl, "field", virtualp, quals != NULL_TREE,
11240 inlinep, friendp, raises != NULL_TREE);
11243 else if (TREE_CODE (type) == FUNCTION_TYPE || TREE_CODE (type) == METHOD_TYPE)
11245 tree original_name;
11246 int publicp = 0;
11248 if (! declarator)
11249 return NULL_TREE;
11251 if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
11252 original_name = dname;
11253 else
11254 original_name = declarator;
11256 if (RIDBIT_SETP (RID_AUTO, specbits))
11257 error ("storage class `auto' invalid for function `%s'", name);
11258 else if (RIDBIT_SETP (RID_REGISTER, specbits))
11259 error ("storage class `register' invalid for function `%s'", name);
11261 /* Function declaration not at top level.
11262 Storage classes other than `extern' are not allowed
11263 and `extern' makes no difference. */
11264 if (! toplevel_bindings_p ()
11265 && (RIDBIT_SETP (RID_STATIC, specbits)
11266 || RIDBIT_SETP (RID_INLINE, specbits))
11267 && pedantic)
11269 if (RIDBIT_SETP (RID_STATIC, specbits))
11270 pedwarn ("storage class `static' invalid for function `%s' declared out of global scope", name);
11271 else
11272 pedwarn ("storage class `inline' invalid for function `%s' declared out of global scope", name);
11275 if (ctype == NULL_TREE)
11277 if (virtualp)
11279 error ("virtual non-class function `%s'", name);
11280 virtualp = 0;
11283 else if (TREE_CODE (type) == FUNCTION_TYPE && staticp < 2)
11284 type = build_cplus_method_type (ctype, TREE_TYPE (type),
11285 TYPE_ARG_TYPES (type));
11287 /* Record presence of `static'. */
11288 publicp = (ctype != NULL_TREE
11289 || RIDBIT_SETP (RID_EXTERN, specbits)
11290 || !RIDBIT_SETP (RID_STATIC, specbits));
11292 decl = grokfndecl (ctype, type, original_name, declarator,
11293 virtualp, flags, quals, raises,
11294 1, friendp,
11295 publicp, inlinep, funcdef_flag,
11296 template_count, in_namespace);
11297 if (decl == NULL_TREE)
11298 return NULL_TREE;
11300 if (staticp == 1)
11302 int illegal_static = 0;
11304 /* Don't allow a static member function in a class, and forbid
11305 declaring main to be static. */
11306 if (TREE_CODE (type) == METHOD_TYPE)
11308 cp_pedwarn ("cannot declare member function `%D' to have static linkage", decl);
11309 illegal_static = 1;
11311 else if (current_function_decl)
11313 /* FIXME need arm citation */
11314 error ("cannot declare static function inside another function");
11315 illegal_static = 1;
11318 if (illegal_static)
11320 staticp = 0;
11321 RIDBIT_RESET (RID_STATIC, specbits);
11325 else
11327 /* It's a variable. */
11329 /* An uninitialized decl with `extern' is a reference. */
11330 decl = grokvardecl (type, declarator, &specbits,
11331 initialized,
11332 (type_quals & TYPE_QUAL_CONST) != 0,
11333 in_namespace);
11334 bad_specifiers (decl, "variable", virtualp, quals != NULL_TREE,
11335 inlinep, friendp, raises != NULL_TREE);
11337 if (ctype)
11339 DECL_CONTEXT (decl) = ctype;
11340 if (staticp == 1)
11342 cp_pedwarn ("static member `%D' re-declared as static", decl);
11343 staticp = 0;
11344 RIDBIT_RESET (RID_STATIC, specbits);
11346 if (RIDBIT_SETP (RID_REGISTER, specbits) && TREE_STATIC (decl))
11348 cp_error ("static member `%D' declared `register'", decl);
11349 RIDBIT_RESET (RID_REGISTER, specbits);
11351 if (RIDBIT_SETP (RID_EXTERN, specbits) && pedantic)
11353 cp_pedwarn ("cannot explicitly declare member `%#D' to have extern linkage",
11354 decl);
11355 RIDBIT_RESET (RID_EXTERN, specbits);
11360 if (RIDBIT_SETP (RID_MUTABLE, specbits))
11362 error ("`%s' cannot be declared mutable", name);
11365 /* Record `register' declaration for warnings on &
11366 and in case doing stupid register allocation. */
11368 if (RIDBIT_SETP (RID_REGISTER, specbits))
11369 DECL_REGISTER (decl) = 1;
11371 if (RIDBIT_SETP (RID_EXTERN, specbits))
11372 DECL_THIS_EXTERN (decl) = 1;
11374 if (RIDBIT_SETP (RID_STATIC, specbits))
11375 DECL_THIS_STATIC (decl) = 1;
11377 /* Record constancy and volatility. There's no need to do this
11378 when processing a template; we'll do this for the instantiated
11379 declaration based on the type of DECL. */
11380 if (!processing_template_decl)
11381 c_apply_type_quals_to_decl (type_quals, decl);
11383 return decl;
11387 /* Tell if a parmlist/exprlist looks like an exprlist or a parmlist.
11388 An empty exprlist is a parmlist. An exprlist which
11389 contains only identifiers at the global level
11390 is a parmlist. Otherwise, it is an exprlist. */
11393 parmlist_is_exprlist (exprs)
11394 tree exprs;
11396 if (exprs == NULL_TREE || TREE_PARMLIST (exprs))
11397 return 0;
11399 if (toplevel_bindings_p ())
11401 /* At the global level, if these are all identifiers,
11402 then it is a parmlist. */
11403 while (exprs)
11405 if (TREE_CODE (TREE_VALUE (exprs)) != IDENTIFIER_NODE)
11406 return 1;
11407 exprs = TREE_CHAIN (exprs);
11409 return 0;
11411 return 1;
11414 /* Subroutine of start_function. Ensure that each of the parameter
11415 types (as listed in PARMS) is complete, as is required for a
11416 function definition. */
11418 static void
11419 require_complete_types_for_parms (parms)
11420 tree parms;
11422 while (parms)
11424 tree type = TREE_TYPE (parms);
11425 if (TYPE_SIZE (complete_type (type)) == NULL_TREE)
11427 if (DECL_NAME (parms))
11428 error ("parameter `%s' has incomplete type",
11429 IDENTIFIER_POINTER (DECL_NAME (parms)));
11430 else
11431 error ("parameter has incomplete type");
11432 TREE_TYPE (parms) = error_mark_node;
11434 else
11435 layout_decl (parms, 0);
11437 parms = TREE_CHAIN (parms);
11441 /* Returns DECL if DECL is a local variable (or parameter). Returns
11442 NULL_TREE otherwise. */
11444 static tree
11445 local_variable_p (t)
11446 tree t;
11448 if ((TREE_CODE (t) == VAR_DECL
11449 /* A VAR_DECL with a context that is a _TYPE is a static data
11450 member. */
11451 && !TYPE_P (CP_DECL_CONTEXT (t))
11452 /* Any other non-local variable must be at namespace scope. */
11453 && TREE_CODE (CP_DECL_CONTEXT (t)) != NAMESPACE_DECL)
11454 || (TREE_CODE (t) == PARM_DECL))
11455 return t;
11457 return NULL_TREE;
11460 /* Check that ARG, which is a default-argument expression for a
11461 parameter DECL, is legal. Returns ARG, or ERROR_MARK_NODE, if
11462 something goes wrong. DECL may also be a _TYPE node, rather than a
11463 DECL, if there is no DECL available. */
11465 tree
11466 check_default_argument (decl, arg)
11467 tree decl;
11468 tree arg;
11470 tree var;
11471 tree decl_type;
11473 if (TREE_CODE (arg) == DEFAULT_ARG)
11474 /* We get a DEFAULT_ARG when looking at an in-class declaration
11475 with a default argument. Ignore the argument for now; we'll
11476 deal with it after the class is complete. */
11477 return arg;
11479 if (processing_template_decl || uses_template_parms (arg))
11480 /* We don't do anything checking until instantiation-time. Note
11481 that there may be uninstantiated arguments even for an
11482 instantiated function, since default arguments are not
11483 instantiated until they are needed. */
11484 return arg;
11486 if (TYPE_P (decl))
11488 decl_type = decl;
11489 decl = NULL_TREE;
11491 else
11492 decl_type = TREE_TYPE (decl);
11494 if (arg == error_mark_node
11495 || decl == error_mark_node
11496 || TREE_TYPE (arg) == error_mark_node
11497 || decl_type == error_mark_node)
11498 /* Something already went wrong. There's no need to check
11499 further. */
11500 return error_mark_node;
11502 /* [dcl.fct.default]
11504 A default argument expression is implicitly converted to the
11505 parameter type. */
11506 if (!TREE_TYPE (arg)
11507 || !can_convert_arg (decl_type, TREE_TYPE (arg), arg))
11509 if (decl)
11510 cp_error ("default argument for `%#D' has type `%T'",
11511 decl, TREE_TYPE (arg));
11512 else
11513 cp_error ("default argument for parameter of type `%T' has type `%T'",
11514 decl_type, TREE_TYPE (arg));
11516 return error_mark_node;
11519 /* [dcl.fct.default]
11521 Local variables shall not be used in default argument
11522 expressions.
11524 The keyword `this' shall not be used in a default argument of a
11525 member function. */
11526 var = search_tree (arg, local_variable_p);
11527 if (var)
11529 cp_error ("default argument `%E' uses local variable `%D'",
11530 arg, var);
11531 return error_mark_node;
11534 /* All is well. */
11535 return arg;
11538 /* Decode the list of parameter types for a function type.
11539 Given the list of things declared inside the parens,
11540 return a list of types.
11542 The list we receive can have three kinds of elements:
11543 an IDENTIFIER_NODE for names given without types,
11544 a TREE_LIST node for arguments given as typespecs or names with typespecs,
11545 or void_type_node, to mark the end of an argument list
11546 when additional arguments are not permitted (... was not used).
11548 FUNCDEF_FLAG is nonzero for a function definition, 0 for
11549 a mere declaration. A nonempty identifier-list gets an error message
11550 when FUNCDEF_FLAG is zero.
11551 If FUNCDEF_FLAG is 1, then parameter types must be complete.
11552 If FUNCDEF_FLAG is -1, then parameter types may be incomplete.
11554 If all elements of the input list contain types,
11555 we return a list of the types.
11556 If all elements contain no type (except perhaps a void_type_node
11557 at the end), we return a null list.
11558 If some have types and some do not, it is an error, and we
11559 return a null list.
11561 Also set last_function_parms to either
11562 a list of names (IDENTIFIER_NODEs) or a chain of PARM_DECLs.
11563 A list of names is converted to a chain of PARM_DECLs
11564 by store_parm_decls so that ultimately it is always a chain of decls.
11566 Note that in C++, parameters can take default values. These default
11567 values are in the TREE_PURPOSE field of the TREE_LIST. It is
11568 an error to specify default values which are followed by parameters
11569 that have no default values, or an ELLIPSES. For simplicities sake,
11570 only parameters which are specified with their types can take on
11571 default values. */
11573 static tree
11574 grokparms (first_parm, funcdef_flag)
11575 tree first_parm;
11576 int funcdef_flag;
11578 tree result = NULL_TREE;
11579 tree decls = NULL_TREE;
11581 if (first_parm != NULL_TREE
11582 && TREE_CODE (TREE_VALUE (first_parm)) == IDENTIFIER_NODE)
11584 if (! funcdef_flag)
11585 pedwarn ("parameter names (without types) in function declaration");
11586 last_function_parms = first_parm;
11587 return NULL_TREE;
11589 else if (first_parm != NULL_TREE
11590 && TREE_CODE (TREE_VALUE (first_parm)) != TREE_LIST
11591 && TREE_CODE (TREE_VALUE (first_parm)) != VOID_TYPE)
11592 my_friendly_abort (145);
11593 else
11595 /* Types were specified. This is a list of declarators
11596 each represented as a TREE_LIST node. */
11597 register tree parm, chain;
11598 int any_init = 0, any_error = 0;
11600 if (first_parm != NULL_TREE)
11602 tree last_result = NULL_TREE;
11603 tree last_decl = NULL_TREE;
11605 for (parm = first_parm; parm != NULL_TREE; parm = chain)
11607 tree type = NULL_TREE, list_node = parm;
11608 register tree decl = TREE_VALUE (parm);
11609 tree init = TREE_PURPOSE (parm);
11611 chain = TREE_CHAIN (parm);
11612 /* @@ weak defense against parse errors. */
11613 if (TREE_CODE (decl) != VOID_TYPE
11614 && TREE_CODE (decl) != TREE_LIST)
11616 /* Give various messages as the need arises. */
11617 if (TREE_CODE (decl) == STRING_CST)
11618 cp_error ("invalid string constant `%E'", decl);
11619 else if (TREE_CODE (decl) == INTEGER_CST)
11620 error ("invalid integer constant in parameter list, did you forget to give parameter name?");
11621 continue;
11624 if (TREE_CODE (decl) != VOID_TYPE)
11626 decl = grokdeclarator (TREE_VALUE (decl),
11627 TREE_PURPOSE (decl),
11628 PARM, init != NULL_TREE,
11629 NULL_TREE);
11630 if (! decl || TREE_TYPE (decl) == error_mark_node)
11631 continue;
11633 /* Top-level qualifiers on the parameters are
11634 ignored for function types. */
11635 type = TYPE_MAIN_VARIANT (TREE_TYPE (decl));
11637 if (TREE_CODE (type) == VOID_TYPE)
11638 decl = void_type_node;
11639 else if (TREE_CODE (type) == METHOD_TYPE)
11641 if (DECL_NAME (decl))
11642 /* Cannot use the decl here because
11643 we don't have DECL_CONTEXT set up yet. */
11644 cp_error ("parameter `%D' invalidly declared method type",
11645 DECL_NAME (decl));
11646 else
11647 error ("parameter invalidly declared method type");
11648 type = build_pointer_type (type);
11649 TREE_TYPE (decl) = type;
11651 else if (TREE_CODE (type) == OFFSET_TYPE)
11653 if (DECL_NAME (decl))
11654 cp_error ("parameter `%D' invalidly declared offset type",
11655 DECL_NAME (decl));
11656 else
11657 error ("parameter invalidly declared offset type");
11658 type = build_pointer_type (type);
11659 TREE_TYPE (decl) = type;
11661 else if (abstract_virtuals_error (decl, type))
11662 any_error = 1; /* Seems like a good idea. */
11663 else if (POINTER_TYPE_P (type))
11665 tree t = type;
11666 while (POINTER_TYPE_P (t)
11667 || (TREE_CODE (t) == ARRAY_TYPE
11668 && TYPE_DOMAIN (t) != NULL_TREE))
11669 t = TREE_TYPE (t);
11670 if (TREE_CODE (t) == ARRAY_TYPE)
11671 cp_error ("parameter type `%T' includes %s to array of unknown bound",
11672 type,
11673 TYPE_PTR_P (type) ? "pointer" : "reference");
11677 if (TREE_CODE (decl) == VOID_TYPE)
11679 if (result == NULL_TREE)
11681 result = void_list_node;
11682 last_result = result;
11684 else
11686 TREE_CHAIN (last_result) = void_list_node;
11687 last_result = void_list_node;
11689 if (chain
11690 && (chain != void_list_node || TREE_CHAIN (chain)))
11691 error ("`void' in parameter list must be entire list");
11692 break;
11695 /* Since there is a prototype, args are passed in their own types. */
11696 DECL_ARG_TYPE (decl) = TREE_TYPE (decl);
11697 if (PROMOTE_PROTOTYPES
11698 && (TREE_CODE (type) == INTEGER_TYPE
11699 || TREE_CODE (type) == ENUMERAL_TYPE)
11700 && TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node))
11701 DECL_ARG_TYPE (decl) = integer_type_node;
11702 if (!any_error && init)
11704 any_init++;
11705 init = check_default_argument (decl, init);
11707 else
11708 init = NULL_TREE;
11710 if (decls == NULL_TREE)
11712 decls = decl;
11713 last_decl = decls;
11715 else
11717 TREE_CHAIN (last_decl) = decl;
11718 last_decl = decl;
11720 if (! current_function_decl && TREE_PERMANENT (list_node))
11722 TREE_PURPOSE (list_node) = init;
11723 TREE_VALUE (list_node) = type;
11724 TREE_CHAIN (list_node) = NULL_TREE;
11726 else
11727 list_node = saveable_tree_cons (init, type, NULL_TREE);
11728 if (result == NULL_TREE)
11730 result = list_node;
11731 last_result = result;
11733 else
11735 TREE_CHAIN (last_result) = list_node;
11736 last_result = list_node;
11739 if (last_result)
11740 TREE_CHAIN (last_result) = NULL_TREE;
11741 /* If there are no parameters, and the function does not end
11742 with `...', then last_decl will be NULL_TREE. */
11743 if (last_decl != NULL_TREE)
11744 TREE_CHAIN (last_decl) = NULL_TREE;
11748 last_function_parms = decls;
11750 return result;
11753 /* Called from the parser to update an element of TYPE_ARG_TYPES for some
11754 FUNCTION_TYPE with the newly parsed version of its default argument, which
11755 was previously digested as text. See snarf_defarg et al in lex.c. */
11757 void
11758 replace_defarg (arg, init)
11759 tree arg, init;
11761 if (! processing_template_decl
11762 && ! can_convert_arg (TREE_VALUE (arg), TREE_TYPE (init), init))
11763 cp_pedwarn ("invalid type `%T' for default argument to `%T'",
11764 TREE_TYPE (init), TREE_VALUE (arg));
11765 TREE_PURPOSE (arg) = init;
11769 copy_args_p (d)
11770 tree d;
11772 tree t = FUNCTION_ARG_CHAIN (d);
11773 if (DECL_CONSTRUCTOR_P (d)
11774 && TYPE_USES_VIRTUAL_BASECLASSES (DECL_CONTEXT (d)))
11775 t = TREE_CHAIN (t);
11776 if (t && TREE_CODE (TREE_VALUE (t)) == REFERENCE_TYPE
11777 && (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_VALUE (t)))
11778 == DECL_CLASS_CONTEXT (d))
11779 && (TREE_CHAIN (t) == NULL_TREE
11780 || TREE_CHAIN (t) == void_list_node
11781 || TREE_PURPOSE (TREE_CHAIN (t))))
11782 return 1;
11783 return 0;
11786 /* These memoizing functions keep track of special properties which
11787 a class may have. `grok_ctor_properties' notices whether a class
11788 has a constructor of the form X(X&), and also complains
11789 if the class has a constructor of the form X(X).
11790 `grok_op_properties' takes notice of the various forms of
11791 operator= which are defined, as well as what sorts of type conversion
11792 may apply. Both functions take a FUNCTION_DECL as an argument. */
11795 grok_ctor_properties (ctype, decl)
11796 tree ctype, decl;
11798 tree parmtypes = FUNCTION_ARG_CHAIN (decl);
11799 tree parmtype = parmtypes ? TREE_VALUE (parmtypes) : void_type_node;
11801 /* When a type has virtual baseclasses, a magical first int argument is
11802 added to any ctor so we can tell if the class has been initialized
11803 yet. This could screw things up in this function, so we deliberately
11804 ignore the leading int if we're in that situation. */
11805 if (TYPE_USES_VIRTUAL_BASECLASSES (ctype))
11807 my_friendly_assert (parmtypes
11808 && TREE_VALUE (parmtypes) == integer_type_node,
11809 980529);
11810 parmtypes = TREE_CHAIN (parmtypes);
11811 parmtype = TREE_VALUE (parmtypes);
11814 /* [class.copy]
11816 A non-template constructor for class X is a copy constructor if
11817 its first parameter is of type X&, const X&, volatile X& or const
11818 volatile X&, and either there are no other parameters or else all
11819 other parameters have default arguments. */
11820 if (TREE_CODE (parmtype) == REFERENCE_TYPE
11821 && TYPE_MAIN_VARIANT (TREE_TYPE (parmtype)) == ctype
11822 && (TREE_CHAIN (parmtypes) == NULL_TREE
11823 || TREE_CHAIN (parmtypes) == void_list_node
11824 || TREE_PURPOSE (TREE_CHAIN (parmtypes)))
11825 && !(DECL_TEMPLATE_INSTANTIATION (decl)
11826 && is_member_template (DECL_TI_TEMPLATE (decl))))
11828 TYPE_HAS_INIT_REF (ctype) = 1;
11829 if (CP_TYPE_CONST_P (TREE_TYPE (parmtype)))
11830 TYPE_HAS_CONST_INIT_REF (ctype) = 1;
11832 /* [class.copy]
11834 A declaration of a constructor for a class X is ill-formed if its
11835 first parameter is of type (optionally cv-qualified) X and either
11836 there are no other parameters or else all other parameters have
11837 default arguments.
11839 We *don't* complain about member template instantiations that
11840 have this form, though; they can occur as we try to decide what
11841 constructor to use during overload resolution. Since overload
11842 resolution will never prefer such a constructor to the
11843 non-template copy constructor (which is either explicitly or
11844 implicitly defined), there's no need to worry about their
11845 existence. Theoretically, they should never even be
11846 instantiated, but that's hard to forestall. */
11847 else if (TYPE_MAIN_VARIANT (parmtype) == ctype
11848 && (TREE_CHAIN (parmtypes) == NULL_TREE
11849 || TREE_CHAIN (parmtypes) == void_list_node
11850 || TREE_PURPOSE (TREE_CHAIN (parmtypes)))
11851 && !(DECL_TEMPLATE_INSTANTIATION (decl)
11852 && is_member_template (DECL_TI_TEMPLATE (decl))))
11854 cp_error ("invalid constructor; you probably meant `%T (const %T&)'",
11855 ctype, ctype);
11856 SET_IDENTIFIER_ERROR_LOCUS (DECL_NAME (decl), ctype);
11857 return 0;
11859 else if (TREE_CODE (parmtype) == VOID_TYPE
11860 || TREE_PURPOSE (parmtypes) != NULL_TREE)
11861 TYPE_HAS_DEFAULT_CONSTRUCTOR (ctype) = 1;
11863 return 1;
11866 /* An operator with this name can be either unary or binary. */
11868 static int
11869 ambi_op_p (name)
11870 tree name;
11872 return (name == ansi_opname [(int) INDIRECT_REF]
11873 || name == ansi_opname [(int) ADDR_EXPR]
11874 || name == ansi_opname [(int) NEGATE_EXPR]
11875 || name == ansi_opname[(int) POSTINCREMENT_EXPR]
11876 || name == ansi_opname[(int) POSTDECREMENT_EXPR]
11877 || name == ansi_opname [(int) CONVERT_EXPR]);
11880 /* An operator with this name can only be unary. */
11882 static int
11883 unary_op_p (name)
11884 tree name;
11886 return (name == ansi_opname [(int) TRUTH_NOT_EXPR]
11887 || name == ansi_opname [(int) BIT_NOT_EXPR]
11888 || name == ansi_opname [(int) COMPONENT_REF]
11889 || IDENTIFIER_TYPENAME_P (name));
11892 /* Do a little sanity-checking on how they declared their operator. */
11894 void
11895 grok_op_properties (decl, virtualp, friendp)
11896 tree decl;
11897 int virtualp, friendp;
11899 tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
11900 int methodp = (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE);
11901 tree name = DECL_NAME (decl);
11903 if (current_class_type == NULL_TREE)
11904 friendp = 1;
11906 if (! friendp)
11908 /* [class.copy]
11910 A user-declared copy assignment operator X::operator= is a
11911 non-static non-template member function of class X with
11912 exactly one parameter of type X, X&, const X&, volatile X& or
11913 const volatile X&. */
11914 if (name == ansi_opname[(int) MODIFY_EXPR]
11915 && !(DECL_TEMPLATE_INSTANTIATION (decl)
11916 && is_member_template (DECL_TI_TEMPLATE (decl))))
11918 else if (name == ansi_opname[(int) CALL_EXPR])
11919 TYPE_OVERLOADS_CALL_EXPR (current_class_type) = 1;
11920 else if (name == ansi_opname[(int) ARRAY_REF])
11921 TYPE_OVERLOADS_ARRAY_REF (current_class_type) = 1;
11922 else if (name == ansi_opname[(int) COMPONENT_REF]
11923 || name == ansi_opname[(int) MEMBER_REF])
11924 TYPE_OVERLOADS_ARROW (current_class_type) = 1;
11925 else if (name == ansi_opname[(int) NEW_EXPR])
11926 TYPE_GETS_NEW (current_class_type) |= 1;
11927 else if (name == ansi_opname[(int) DELETE_EXPR])
11928 TYPE_GETS_DELETE (current_class_type) |= 1;
11929 else if (name == ansi_opname[(int) VEC_NEW_EXPR])
11930 TYPE_GETS_NEW (current_class_type) |= 2;
11931 else if (name == ansi_opname[(int) VEC_DELETE_EXPR])
11932 TYPE_GETS_DELETE (current_class_type) |= 2;
11935 if (name == ansi_opname[(int) NEW_EXPR]
11936 || name == ansi_opname[(int) VEC_NEW_EXPR])
11938 /* When the compiler encounters the definition of A::operator new, it
11939 doesn't look at the class declaration to find out if it's static. */
11940 if (methodp)
11941 revert_static_member_fn (&decl, NULL, NULL);
11943 /* Take care of function decl if we had syntax errors. */
11944 if (argtypes == NULL_TREE)
11945 TREE_TYPE (decl)
11946 = build_function_type (ptr_type_node,
11947 hash_tree_chain (integer_type_node,
11948 void_list_node));
11949 else
11950 TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
11952 else if (name == ansi_opname[(int) DELETE_EXPR]
11953 || name == ansi_opname[(int) VEC_DELETE_EXPR])
11955 if (methodp)
11956 revert_static_member_fn (&decl, NULL, NULL);
11958 if (argtypes == NULL_TREE)
11959 TREE_TYPE (decl)
11960 = build_function_type (void_type_node,
11961 hash_tree_chain (ptr_type_node,
11962 void_list_node));
11963 else
11965 TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
11967 if (! friendp && name == ansi_opname[(int) VEC_DELETE_EXPR]
11968 && (TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)))
11969 != void_list_node))
11970 TYPE_VEC_DELETE_TAKES_SIZE (current_class_type) = 1;
11973 else
11975 /* An operator function must either be a non-static member function
11976 or have at least one parameter of a class, a reference to a class,
11977 an enumeration, or a reference to an enumeration. 13.4.0.6 */
11978 if (! methodp || DECL_STATIC_FUNCTION_P (decl))
11980 if (IDENTIFIER_TYPENAME_P (name)
11981 || name == ansi_opname[(int) CALL_EXPR]
11982 || name == ansi_opname[(int) MODIFY_EXPR]
11983 || name == ansi_opname[(int) COMPONENT_REF]
11984 || name == ansi_opname[(int) ARRAY_REF])
11985 cp_error ("`%D' must be a nonstatic member function", decl);
11986 else
11988 tree p = argtypes;
11990 if (DECL_STATIC_FUNCTION_P (decl))
11991 cp_error ("`%D' must be either a non-static member function or a non-member function", decl);
11993 if (p)
11994 for (; TREE_CODE (TREE_VALUE (p)) != VOID_TYPE ; p = TREE_CHAIN (p))
11996 tree arg = TREE_VALUE (p);
11997 if (TREE_CODE (arg) == REFERENCE_TYPE)
11998 arg = TREE_TYPE (arg);
12000 /* This lets bad template code slip through. */
12001 if (IS_AGGR_TYPE (arg)
12002 || TREE_CODE (arg) == ENUMERAL_TYPE
12003 || TREE_CODE (arg) == TEMPLATE_TYPE_PARM
12004 || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
12005 goto foundaggr;
12007 cp_error
12008 ("`%D' must have an argument of class or enumerated type",
12009 decl);
12010 foundaggr:
12015 if (name == ansi_opname[(int) CALL_EXPR])
12016 return; /* No restrictions on args. */
12018 if (IDENTIFIER_TYPENAME_P (name) && ! DECL_TEMPLATE_INFO (decl))
12020 tree t = TREE_TYPE (name);
12021 if (TREE_CODE (t) == VOID_TYPE)
12022 pedwarn ("void is not a valid type conversion operator");
12023 else if (! friendp)
12025 int ref = (TREE_CODE (t) == REFERENCE_TYPE);
12026 const char *what = 0;
12027 if (ref)
12028 t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
12030 if (t == current_class_type)
12031 what = "the same type";
12032 /* Don't force t to be complete here. */
12033 else if (IS_AGGR_TYPE (t)
12034 && TYPE_SIZE (t)
12035 && DERIVED_FROM_P (t, current_class_type))
12036 what = "a base class";
12038 if (what)
12039 warning ("conversion to %s%s will never use a type conversion operator",
12040 ref ? "a reference to " : "", what);
12044 if (name == ansi_opname[(int) MODIFY_EXPR])
12046 tree parmtype;
12048 if (list_length (argtypes) != 3 && methodp)
12050 cp_error ("`%D' must take exactly one argument", decl);
12051 return;
12053 parmtype = TREE_VALUE (TREE_CHAIN (argtypes));
12055 if (copy_assignment_arg_p (parmtype, virtualp)
12056 && ! friendp)
12058 TYPE_HAS_ASSIGN_REF (current_class_type) = 1;
12059 if (TREE_CODE (parmtype) != REFERENCE_TYPE
12060 || CP_TYPE_CONST_P (TREE_TYPE (parmtype)))
12061 TYPE_HAS_CONST_ASSIGN_REF (current_class_type) = 1;
12064 else if (name == ansi_opname[(int) COND_EXPR])
12066 /* 13.4.0.3 */
12067 cp_error ("ANSI C++ prohibits overloading operator ?:");
12069 else if (ambi_op_p (name))
12071 if (list_length (argtypes) == 2)
12072 /* prefix */;
12073 else if (list_length (argtypes) == 3)
12075 if ((name == ansi_opname[(int) POSTINCREMENT_EXPR]
12076 || name == ansi_opname[(int) POSTDECREMENT_EXPR])
12077 && ! processing_template_decl
12078 && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)), integer_type_node))
12080 if (methodp)
12081 cp_error ("postfix `%D' must take `int' as its argument",
12082 decl);
12083 else
12084 cp_error
12085 ("postfix `%D' must take `int' as its second argument",
12086 decl);
12089 else
12091 if (methodp)
12092 cp_error ("`%D' must take either zero or one argument", decl);
12093 else
12094 cp_error ("`%D' must take either one or two arguments", decl);
12097 /* More Effective C++ rule 6. */
12098 if (warn_ecpp
12099 && (name == ansi_opname[(int) POSTINCREMENT_EXPR]
12100 || name == ansi_opname[(int) POSTDECREMENT_EXPR]))
12102 tree arg = TREE_VALUE (argtypes);
12103 tree ret = TREE_TYPE (TREE_TYPE (decl));
12104 if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
12105 arg = TREE_TYPE (arg);
12106 arg = TYPE_MAIN_VARIANT (arg);
12107 if (list_length (argtypes) == 2)
12109 if (TREE_CODE (ret) != REFERENCE_TYPE
12110 || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)),
12111 arg))
12112 cp_warning ("prefix `%D' should return `%T'", decl,
12113 build_reference_type (arg));
12115 else
12117 if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
12118 cp_warning ("postfix `%D' should return `%T'", decl, arg);
12122 else if (unary_op_p (name))
12124 if (list_length (argtypes) != 2)
12126 if (methodp)
12127 cp_error ("`%D' must take `void'", decl);
12128 else
12129 cp_error ("`%D' must take exactly one argument", decl);
12132 else /* if (binary_op_p (name)) */
12134 if (list_length (argtypes) != 3)
12136 if (methodp)
12137 cp_error ("`%D' must take exactly one argument", decl);
12138 else
12139 cp_error ("`%D' must take exactly two arguments", decl);
12142 /* More Effective C++ rule 7. */
12143 if (warn_ecpp
12144 && (name == ansi_opname [TRUTH_ANDIF_EXPR]
12145 || name == ansi_opname [TRUTH_ORIF_EXPR]
12146 || name == ansi_opname [COMPOUND_EXPR]))
12147 cp_warning ("user-defined `%D' always evaluates both arguments",
12148 decl);
12151 /* Effective C++ rule 23. */
12152 if (warn_ecpp
12153 && list_length (argtypes) == 3
12154 && (name == ansi_opname [PLUS_EXPR]
12155 || name == ansi_opname [MINUS_EXPR]
12156 || name == ansi_opname [TRUNC_DIV_EXPR]
12157 || name == ansi_opname [MULT_EXPR])
12158 && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
12159 cp_warning ("`%D' should return by value", decl);
12161 /* 13.4.0.8 */
12162 if (argtypes)
12163 for (; argtypes != void_list_node ; argtypes = TREE_CHAIN (argtypes))
12164 if (TREE_PURPOSE (argtypes))
12166 TREE_PURPOSE (argtypes) = NULL_TREE;
12167 if (name == ansi_opname[(int) POSTINCREMENT_EXPR]
12168 || name == ansi_opname[(int) POSTDECREMENT_EXPR])
12170 if (pedantic)
12171 cp_pedwarn ("`%D' cannot have default arguments", decl);
12173 else
12174 cp_error ("`%D' cannot have default arguments", decl);
12179 static const char *
12180 tag_name (code)
12181 enum tag_types code;
12183 switch (code)
12185 case record_type:
12186 return "struct";
12187 case class_type:
12188 return "class";
12189 case union_type:
12190 return "union ";
12191 case enum_type:
12192 return "enum";
12193 default:
12194 my_friendly_abort (981122);
12198 /* Get the struct, enum or union (CODE says which) with tag NAME.
12199 Define the tag as a forward-reference if it is not defined.
12201 C++: If a class derivation is given, process it here, and report
12202 an error if multiple derivation declarations are not identical.
12204 If this is a definition, come in through xref_tag and only look in
12205 the current frame for the name (since C++ allows new names in any
12206 scope.) */
12208 tree
12209 xref_tag (code_type_node, name, globalize)
12210 tree code_type_node;
12211 tree name;
12212 int globalize;
12214 enum tag_types tag_code;
12215 enum tree_code code;
12216 int temp = 0;
12217 register tree ref, t;
12218 struct binding_level *b = current_binding_level;
12219 int got_type = 0;
12220 tree attributes = NULL_TREE;
12221 tree context = NULL_TREE;
12223 /* If we are called from the parser, code_type_node will sometimes be a
12224 TREE_LIST. This indicates that the user wrote
12225 "class __attribute__ ((foo)) bar". Extract the attributes so we can
12226 use them later. */
12227 if (TREE_CODE (code_type_node) == TREE_LIST)
12229 attributes = TREE_PURPOSE (code_type_node);
12230 code_type_node = TREE_VALUE (code_type_node);
12233 tag_code = (enum tag_types) TREE_INT_CST_LOW (code_type_node);
12234 switch (tag_code)
12236 case record_type:
12237 case class_type:
12238 code = RECORD_TYPE;
12239 break;
12240 case union_type:
12241 code = UNION_TYPE;
12242 break;
12243 case enum_type:
12244 code = ENUMERAL_TYPE;
12245 break;
12246 default:
12247 my_friendly_abort (18);
12250 /* If a cross reference is requested, look up the type
12251 already defined for this tag and return it. */
12252 if (TREE_CODE_CLASS (TREE_CODE (name)) == 't')
12254 t = name;
12255 name = TYPE_IDENTIFIER (t);
12256 got_type = 1;
12258 else
12259 t = IDENTIFIER_TYPE_VALUE (name);
12261 if (t && TREE_CODE (t) != code && TREE_CODE (t) != TEMPLATE_TYPE_PARM
12262 && TREE_CODE (t) != TEMPLATE_TEMPLATE_PARM)
12263 t = NULL_TREE;
12265 if (! globalize)
12267 /* If we know we are defining this tag, only look it up in
12268 this scope and don't try to find it as a type. */
12269 ref = lookup_tag (code, name, b, 1);
12271 else
12273 if (t)
12275 /* [dcl.type.elab] If the identifier resolves to a
12276 typedef-name or a template type-parameter, the
12277 elaborated-type-specifier is ill-formed. */
12278 if (t != TYPE_MAIN_VARIANT (t)
12279 || (CLASS_TYPE_P (t) && TYPE_WAS_ANONYMOUS (t)))
12280 cp_pedwarn ("using typedef-name `%D' after `%s'",
12281 TYPE_NAME (t), tag_name (tag_code));
12282 else if (TREE_CODE (t) == TEMPLATE_TYPE_PARM)
12283 cp_error ("using template type parameter `%T' after `%s'",
12284 t, tag_name (tag_code));
12286 ref = t;
12288 else
12289 ref = lookup_tag (code, name, b, 0);
12291 if (! ref)
12293 /* Try finding it as a type declaration. If that wins,
12294 use it. */
12295 ref = lookup_name (name, 1);
12297 if (ref != NULL_TREE
12298 && processing_template_decl
12299 && DECL_CLASS_TEMPLATE_P (ref)
12300 && template_class_depth (current_class_type) == 0)
12301 /* Since GLOBALIZE is true, we're declaring a global
12302 template, so we want this type. */
12303 ref = DECL_RESULT (ref);
12305 if (ref && TREE_CODE (ref) == TYPE_DECL
12306 && TREE_CODE (TREE_TYPE (ref)) == code)
12307 ref = TREE_TYPE (ref);
12308 else
12309 ref = NULL_TREE;
12312 if (ref && current_class_type
12313 && template_class_depth (current_class_type)
12314 && PROCESSING_REAL_TEMPLATE_DECL_P ())
12316 /* Since GLOBALIZE is non-zero, we are not looking at a
12317 definition of this tag. Since, in addition, we are currently
12318 processing a (member) template declaration of a template
12319 class, we must be very careful; consider:
12321 template <class X>
12322 struct S1
12324 template <class U>
12325 struct S2
12326 { template <class V>
12327 friend struct S1; };
12329 Here, the S2::S1 declaration should not be confused with the
12330 outer declaration. In particular, the inner version should
12331 have a template parameter of level 2, not level 1. This
12332 would be particularly important if the member declaration
12333 were instead:
12335 template <class V = U> friend struct S1;
12337 say, when we should tsubst into `U' when instantiating
12338 S2. On the other hand, when presented with:
12340 template <class T>
12341 struct S1 {
12342 template <class U>
12343 struct S2 {};
12344 template <class U>
12345 friend struct S2;
12348 we must find the inner binding eventually. We
12349 accomplish this by making sure that the new type we
12350 create to represent this declaration has the right
12351 TYPE_CONTEXT. */
12352 context = TYPE_CONTEXT (ref);
12353 ref = NULL_TREE;
12357 push_obstacks_nochange ();
12359 if (! ref)
12361 /* If no such tag is yet defined, create a forward-reference node
12362 and record it as the "definition".
12363 When a real declaration of this type is found,
12364 the forward-reference will be altered into a real type. */
12366 /* In C++, since these migrate into the global scope, we must
12367 build them on the permanent obstack. */
12369 temp = allocation_temporary_p ();
12370 if (temp)
12371 end_temporary_allocation ();
12373 if (code == ENUMERAL_TYPE)
12375 cp_error ("use of enum `%#D' without previous declaration", name);
12377 ref = make_node (ENUMERAL_TYPE);
12379 /* Give the type a default layout like unsigned int
12380 to avoid crashing if it does not get defined. */
12381 TYPE_MODE (ref) = TYPE_MODE (unsigned_type_node);
12382 TYPE_ALIGN (ref) = TYPE_ALIGN (unsigned_type_node);
12383 TREE_UNSIGNED (ref) = 1;
12384 TYPE_PRECISION (ref) = TYPE_PRECISION (unsigned_type_node);
12385 TYPE_MIN_VALUE (ref) = TYPE_MIN_VALUE (unsigned_type_node);
12386 TYPE_MAX_VALUE (ref) = TYPE_MAX_VALUE (unsigned_type_node);
12388 /* Enable us to recognize when a type is created in class context.
12389 To do nested classes correctly, this should probably be cleared
12390 out when we leave this classes scope. Currently this in only
12391 done in `start_enum'. */
12393 pushtag (name, ref, globalize);
12395 else
12397 struct binding_level *old_b = class_binding_level;
12399 ref = make_lang_type (code);
12400 TYPE_CONTEXT (ref) = context;
12402 #ifdef NONNESTED_CLASSES
12403 /* Class types don't nest the way enums do. */
12404 class_binding_level = (struct binding_level *)0;
12405 #endif
12406 pushtag (name, ref, globalize);
12407 class_binding_level = old_b;
12410 else
12412 /* If it no longer looks like a nested type, make sure it's
12413 in global scope.
12414 If it is not an IDENTIFIER, this is not a declaration */
12415 if (b->namespace_p && !class_binding_level
12416 && TREE_CODE (name) == IDENTIFIER_NODE)
12418 if (IDENTIFIER_NAMESPACE_VALUE (name) == NULL_TREE)
12419 SET_IDENTIFIER_NAMESPACE_VALUE (name, TYPE_NAME (ref));
12422 if (!globalize && processing_template_decl && IS_AGGR_TYPE (ref))
12423 redeclare_class_template (ref, current_template_parms);
12426 /* Until the type is defined, tentatively accept whatever
12427 structure tag the user hands us. */
12428 if (TYPE_SIZE (ref) == NULL_TREE
12429 && ref != current_class_type
12430 /* Have to check this, in case we have contradictory tag info. */
12431 && IS_AGGR_TYPE_CODE (TREE_CODE (ref)))
12433 if (tag_code == class_type)
12434 CLASSTYPE_DECLARED_CLASS (ref) = 1;
12435 else if (tag_code == record_type)
12436 CLASSTYPE_DECLARED_CLASS (ref) = 0;
12439 pop_obstacks ();
12441 TREE_TYPE (ref) = attributes;
12443 return ref;
12446 tree
12447 xref_tag_from_type (old, id, globalize)
12448 tree old, id;
12449 int globalize;
12451 tree code_type_node;
12453 if (TREE_CODE (old) == RECORD_TYPE)
12454 code_type_node = (CLASSTYPE_DECLARED_CLASS (old)
12455 ? class_type_node : record_type_node);
12456 else
12457 code_type_node = union_type_node;
12459 if (id == NULL_TREE)
12460 id = TYPE_IDENTIFIER (old);
12462 return xref_tag (code_type_node, id, globalize);
12465 /* REF is a type (named NAME), for which we have just seen some
12466 baseclasses. BINFO is a list of those baseclasses; the
12467 TREE_PURPOSE is an access_* node, and the TREE_VALUE is the type of
12468 the base-class. CODE_TYPE_NODE indicates whether REF is a class,
12469 struct, or union. */
12471 void
12472 xref_basetypes (code_type_node, name, ref, binfo)
12473 tree code_type_node;
12474 tree name, ref;
12475 tree binfo;
12477 /* In the declaration `A : X, Y, ... Z' we mark all the types
12478 (A, X, Y, ..., Z) so we can check for duplicates. */
12479 tree binfos;
12480 tree base;
12482 int i, len;
12483 enum tag_types tag_code = (enum tag_types) TREE_INT_CST_LOW (code_type_node);
12485 if (tag_code == union_type)
12487 cp_error ("derived union `%T' invalid", ref);
12488 return;
12491 len = list_length (binfo);
12492 push_obstacks (TYPE_OBSTACK (ref), TYPE_OBSTACK (ref));
12494 /* First, make sure that any templates in base-classes are
12495 instantiated. This ensures that if we call ourselves recursively
12496 we do not get confused about which classes are marked and which
12497 are not. */
12498 for (base = binfo; base; base = TREE_CHAIN (base))
12499 complete_type (TREE_VALUE (base));
12501 SET_CLASSTYPE_MARKED (ref);
12502 BINFO_BASETYPES (TYPE_BINFO (ref)) = binfos = make_tree_vec (len);
12504 for (i = 0; binfo; binfo = TREE_CHAIN (binfo))
12506 /* The base of a derived struct is public by default. */
12507 int via_public
12508 = (TREE_PURPOSE (binfo) == access_public_node
12509 || TREE_PURPOSE (binfo) == access_public_virtual_node
12510 || (tag_code != class_type
12511 && (TREE_PURPOSE (binfo) == access_default_node
12512 || TREE_PURPOSE (binfo) == access_default_virtual_node)));
12513 int via_protected
12514 = (TREE_PURPOSE (binfo) == access_protected_node
12515 || TREE_PURPOSE (binfo) == access_protected_virtual_node);
12516 int via_virtual
12517 = (TREE_PURPOSE (binfo) == access_private_virtual_node
12518 || TREE_PURPOSE (binfo) == access_protected_virtual_node
12519 || TREE_PURPOSE (binfo) == access_public_virtual_node
12520 || TREE_PURPOSE (binfo) == access_default_virtual_node);
12521 tree basetype = TREE_VALUE (binfo);
12522 tree base_binfo;
12524 if (basetype && TREE_CODE (basetype) == TYPE_DECL)
12525 basetype = TREE_TYPE (basetype);
12526 if (!basetype
12527 || (TREE_CODE (basetype) != RECORD_TYPE
12528 && TREE_CODE (basetype) != TYPENAME_TYPE
12529 && TREE_CODE (basetype) != TEMPLATE_TYPE_PARM
12530 && TREE_CODE (basetype) != TEMPLATE_TEMPLATE_PARM))
12532 cp_error ("base type `%T' fails to be a struct or class type",
12533 TREE_VALUE (binfo));
12534 continue;
12537 GNU_xref_hier (name, basetype, via_public, via_virtual, 0);
12539 /* This code replaces similar code in layout_basetypes.
12540 We put the complete_type first for implicit `typename'. */
12541 if (TYPE_SIZE (basetype) == NULL_TREE
12542 && ! (current_template_parms && uses_template_parms (basetype)))
12544 cp_error ("base class `%T' has incomplete type", basetype);
12545 continue;
12547 else
12549 if (CLASSTYPE_MARKED (basetype))
12551 if (basetype == ref)
12552 cp_error ("recursive type `%T' undefined", basetype);
12553 else
12554 cp_error ("duplicate base type `%T' invalid", basetype);
12555 continue;
12558 if (TYPE_FOR_JAVA (basetype)
12559 && current_lang_stack == current_lang_base)
12560 TYPE_FOR_JAVA (ref) = 1;
12562 /* Note that the BINFO records which describe individual
12563 inheritances are *not* shared in the lattice! They
12564 cannot be shared because a given baseclass may be
12565 inherited with different `accessibility' by different
12566 derived classes. (Each BINFO record describing an
12567 individual inheritance contains flags which say what
12568 the `accessibility' of that particular inheritance is.) */
12570 base_binfo
12571 = make_binfo (integer_zero_node, basetype,
12572 CLASS_TYPE_P (basetype)
12573 ? TYPE_BINFO_VTABLE (basetype) : NULL_TREE,
12574 CLASS_TYPE_P (basetype)
12575 ? TYPE_BINFO_VIRTUALS (basetype) : NULL_TREE);
12577 TREE_VEC_ELT (binfos, i) = base_binfo;
12578 TREE_VIA_PUBLIC (base_binfo) = via_public;
12579 TREE_VIA_PROTECTED (base_binfo) = via_protected;
12580 TREE_VIA_VIRTUAL (base_binfo) = via_virtual;
12581 BINFO_INHERITANCE_CHAIN (base_binfo) = TYPE_BINFO (ref);
12583 /* We need to unshare the binfos now so that lookups during class
12584 definition work. */
12585 unshare_base_binfos (base_binfo);
12587 SET_CLASSTYPE_MARKED (basetype);
12589 /* We are free to modify these bits because they are meaningless
12590 at top level, and BASETYPE is a top-level type. */
12591 if (via_virtual || TYPE_USES_VIRTUAL_BASECLASSES (basetype))
12593 TYPE_USES_VIRTUAL_BASECLASSES (ref) = 1;
12594 TYPE_USES_COMPLEX_INHERITANCE (ref) = 1;
12597 if (CLASS_TYPE_P (basetype))
12599 TYPE_GETS_NEW (ref) |= TYPE_GETS_NEW (basetype);
12600 TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
12603 i += 1;
12606 if (i)
12607 TREE_VEC_LENGTH (binfos) = i;
12608 else
12609 BINFO_BASETYPES (TYPE_BINFO (ref)) = NULL_TREE;
12611 if (i > 1)
12612 TYPE_USES_MULTIPLE_INHERITANCE (ref) = 1;
12613 else if (i == 1)
12615 tree basetype = BINFO_TYPE (TREE_VEC_ELT (binfos, 0));
12617 if (CLASS_TYPE_P (basetype))
12618 TYPE_USES_MULTIPLE_INHERITANCE (ref)
12619 = TYPE_USES_MULTIPLE_INHERITANCE (basetype);
12622 if (TYPE_USES_MULTIPLE_INHERITANCE (ref))
12623 TYPE_USES_COMPLEX_INHERITANCE (ref) = 1;
12625 /* Unmark all the types. */
12626 while (--i >= 0)
12627 CLEAR_CLASSTYPE_MARKED (BINFO_TYPE (TREE_VEC_ELT (binfos, i)));
12628 CLEAR_CLASSTYPE_MARKED (ref);
12630 /* Now that we know all the base-classes, set up the list of virtual
12631 bases. */
12632 CLASSTYPE_VBASECLASSES (ref) = get_vbase_types (ref);
12634 pop_obstacks ();
12638 /* Begin compiling the definition of an enumeration type.
12639 NAME is its name (or null if anonymous).
12640 Returns the type object, as yet incomplete.
12641 Also records info about it so that build_enumerator
12642 may be used to declare the individual values as they are read. */
12644 tree
12645 start_enum (name)
12646 tree name;
12648 register tree enumtype = NULL_TREE;
12649 struct binding_level *b = current_binding_level;
12651 /* We are wasting space here and putting these on the permanent_obstack so
12652 that typeid(local enum) will work correctly. */
12653 push_obstacks (&permanent_obstack, &permanent_obstack);
12655 /* If this is the real definition for a previous forward reference,
12656 fill in the contents in the same object that used to be the
12657 forward reference. */
12659 if (name != NULL_TREE)
12660 enumtype = lookup_tag (ENUMERAL_TYPE, name, b, 1);
12662 if (enumtype != NULL_TREE && TREE_CODE (enumtype) == ENUMERAL_TYPE)
12664 cp_error ("multiple definition of `%#T'", enumtype);
12665 cp_error_at ("previous definition here", enumtype);
12667 else
12669 enumtype = make_node (ENUMERAL_TYPE);
12670 pushtag (name, enumtype, 0);
12673 if (current_class_type)
12674 TREE_ADDRESSABLE (b->tags) = 1;
12676 /* We don't copy this value because build_enumerator needs to do it. */
12677 enum_next_value = integer_zero_node;
12678 enum_overflow = 0;
12680 GNU_xref_decl (current_function_decl, enumtype);
12681 return enumtype;
12684 /* After processing and defining all the values of an enumeration type,
12685 install their decls in the enumeration type and finish it off.
12686 ENUMTYPE is the type object and VALUES a list of name-value pairs.
12687 Returns ENUMTYPE. */
12689 tree
12690 finish_enum (enumtype)
12691 tree enumtype;
12693 register tree minnode = NULL_TREE, maxnode = NULL_TREE;
12694 /* Calculate the maximum value of any enumerator in this type. */
12696 tree values = TYPE_VALUES (enumtype);
12697 if (values)
12699 tree pair;
12701 for (pair = values; pair; pair = TREE_CHAIN (pair))
12703 tree decl;
12704 tree value;
12706 /* The TREE_VALUE is a CONST_DECL for this enumeration
12707 constant. */
12708 decl = TREE_VALUE (pair);
12710 /* The DECL_INITIAL will be NULL if we are processing a
12711 template declaration and this enumeration constant had no
12712 explicit initializer. */
12713 value = DECL_INITIAL (decl);
12714 if (value && !processing_template_decl)
12716 /* Set the TREE_TYPE for the VALUE as well. That's so
12717 that when we call decl_constant_value we get an
12718 entity of the right type (but with the constant
12719 value). Since we shouldn't ever call
12720 decl_constant_value on a template type, there's no
12721 reason to do that when processing_template_decl.
12722 And, if the expression is something like a
12723 TEMPLATE_PARM_INDEX or a CAST_EXPR doing so will
12724 wreak havoc on the intended type of the expression.
12726 Of course, there's also no point in trying to compute
12727 minimum or maximum values if we're in a template. */
12728 TREE_TYPE (value) = enumtype;
12730 if (!minnode)
12731 minnode = maxnode = value;
12732 else if (tree_int_cst_lt (maxnode, value))
12733 maxnode = value;
12734 else if (tree_int_cst_lt (value, minnode))
12735 minnode = value;
12738 if (processing_template_decl)
12739 /* If this is just a template, leave the CONST_DECL
12740 alone. That way tsubst_copy will find CONST_DECLs for
12741 CONST_DECLs, and not INTEGER_CSTs. */
12743 else
12744 /* In the list we're building up, we want the enumeration
12745 values, not the CONST_DECLs. */
12746 TREE_VALUE (pair) = value;
12749 else
12750 maxnode = minnode = integer_zero_node;
12752 TYPE_VALUES (enumtype) = nreverse (values);
12754 if (processing_template_decl)
12756 tree scope = current_scope ();
12757 if (scope && TREE_CODE (scope) == FUNCTION_DECL)
12758 add_tree (build_min (TAG_DEFN, enumtype));
12760 else
12762 int unsignedp = tree_int_cst_sgn (minnode) >= 0;
12763 int lowprec = min_precision (minnode, unsignedp);
12764 int highprec = min_precision (maxnode, unsignedp);
12765 int precision = MAX (lowprec, highprec);
12766 tree tem;
12768 TYPE_SIZE (enumtype) = NULL_TREE;
12770 /* Set TYPE_MIN_VALUE and TYPE_MAX_VALUE according to `precision'. */
12772 TYPE_PRECISION (enumtype) = precision;
12773 if (unsignedp)
12774 fixup_unsigned_type (enumtype);
12775 else
12776 fixup_signed_type (enumtype);
12778 if (flag_short_enums || (precision > TYPE_PRECISION (integer_type_node)))
12779 /* Use the width of the narrowest normal C type which is wide
12780 enough. */
12781 TYPE_PRECISION (enumtype) = TYPE_PRECISION (type_for_size
12782 (precision, 1));
12783 else
12784 TYPE_PRECISION (enumtype) = TYPE_PRECISION (integer_type_node);
12786 TYPE_SIZE (enumtype) = 0;
12787 layout_type (enumtype);
12789 /* Fix up all variant types of this enum type. */
12790 for (tem = TYPE_MAIN_VARIANT (enumtype); tem;
12791 tem = TYPE_NEXT_VARIANT (tem))
12793 TYPE_VALUES (tem) = TYPE_VALUES (enumtype);
12794 TYPE_MIN_VALUE (tem) = TYPE_MIN_VALUE (enumtype);
12795 TYPE_MAX_VALUE (tem) = TYPE_MAX_VALUE (enumtype);
12796 TYPE_SIZE (tem) = TYPE_SIZE (enumtype);
12797 TYPE_SIZE_UNIT (tem) = TYPE_SIZE_UNIT (enumtype);
12798 TYPE_MODE (tem) = TYPE_MODE (enumtype);
12799 TYPE_PRECISION (tem) = TYPE_PRECISION (enumtype);
12800 TYPE_ALIGN (tem) = TYPE_ALIGN (enumtype);
12801 TREE_UNSIGNED (tem) = TREE_UNSIGNED (enumtype);
12804 /* Finish debugging output for this type. */
12805 rest_of_type_compilation (enumtype, namespace_bindings_p ());
12808 /* In start_enum we pushed obstacks. Here, we must pop them. */
12809 pop_obstacks ();
12811 return enumtype;
12814 /* Build and install a CONST_DECL for an enumeration constant of the
12815 enumeration type TYPE whose NAME and VALUE (if any) are provided.
12816 Assignment of sequential values by default is handled here. */
12818 tree
12819 build_enumerator (name, value, type)
12820 tree name;
12821 tree value;
12822 tree type;
12824 tree decl, result;
12825 tree context;
12827 /* Remove no-op casts from the value. */
12828 if (value)
12829 STRIP_TYPE_NOPS (value);
12831 if (! processing_template_decl)
12833 /* Validate and default VALUE. */
12834 if (value != NULL_TREE)
12836 if (TREE_READONLY_DECL_P (value))
12837 value = decl_constant_value (value);
12839 if (TREE_CODE (value) == INTEGER_CST)
12841 value = default_conversion (value);
12842 constant_expression_warning (value);
12844 else
12846 cp_error ("enumerator value for `%D' not integer constant", name);
12847 value = NULL_TREE;
12851 /* Default based on previous value. */
12852 if (value == NULL_TREE && ! processing_template_decl)
12854 value = enum_next_value;
12855 if (enum_overflow)
12856 cp_error ("overflow in enumeration values at `%D'", name);
12859 /* Remove no-op casts from the value. */
12860 if (value)
12861 STRIP_TYPE_NOPS (value);
12862 #if 0
12863 /* To fix MAX_VAL enum consts. (bkoz) */
12864 TREE_TYPE (value) = integer_type_node;
12865 #endif
12868 /* We always have to copy here; not all INTEGER_CSTs are unshared.
12869 Even in other cases, we will later (in finish_enum) be setting the
12870 type of VALUE. */
12871 if (value != NULL_TREE)
12872 value = copy_node (value);
12874 /* C++ associates enums with global, function, or class declarations. */
12876 context = current_scope ();
12877 if (context && context == current_class_type)
12878 /* This enum declaration is local to the class. */
12879 decl = build_lang_decl (CONST_DECL, name, type);
12880 else
12881 /* It's a global enum, or it's local to a function. (Note local to
12882 a function could mean local to a class method. */
12883 decl = build_decl (CONST_DECL, name, type);
12885 DECL_CONTEXT (decl) = FROB_CONTEXT (context);
12886 DECL_INITIAL (decl) = value;
12887 TREE_READONLY (decl) = 1;
12889 if (context && context == current_class_type)
12890 /* In something like `struct S { enum E { i = 7 }; };' we put `i'
12891 on the TYPE_FIELDS list for `S'. (That's so that you can say
12892 things like `S::i' later.) */
12893 finish_member_declaration (decl);
12894 else
12896 pushdecl (decl);
12897 GNU_xref_decl (current_function_decl, decl);
12900 if (! processing_template_decl)
12902 /* Set basis for default for next value. */
12903 enum_next_value = build_binary_op_nodefault (PLUS_EXPR, value,
12904 integer_one_node, PLUS_EXPR);
12905 enum_overflow = tree_int_cst_lt (enum_next_value, value);
12908 result = saveable_tree_cons (name, decl, NULL_TREE);
12909 return result;
12913 static int function_depth;
12915 /* Create the FUNCTION_DECL for a function definition.
12916 DECLSPECS and DECLARATOR are the parts of the declaration;
12917 they describe the function's name and the type it returns,
12918 but twisted together in a fashion that parallels the syntax of C.
12920 If PRE_PARSED_P is non-zero then DECLARATOR is really the DECL for
12921 the function we are about to process; DECLSPECS are ignored. For
12922 example, we set PRE_PARSED_P when processing the definition of
12923 inline function that was defined in-class; the definition is
12924 actually processed when the class is complete. In this case,
12925 PRE_PARSED_P is 2. We also set PRE_PARSED_P when instanting the
12926 body of a template function, and when constructing thunk functions
12927 and such; in these cases PRE_PARSED_P is 1.
12929 This function creates a binding context for the function body
12930 as well as setting up the FUNCTION_DECL in current_function_decl.
12932 Returns 1 on success. If the DECLARATOR is not suitable for a function
12933 (it defines a datum instead), we return 0, which tells
12934 yyparse to report a parse error.
12936 For C++, we must first check whether that datum makes any sense.
12937 For example, "class A local_a(1,2);" means that variable local_a
12938 is an aggregate of type A, which should have a constructor
12939 applied to it with the argument list [1, 2].
12941 @@ There is currently no way to retrieve the storage
12942 @@ allocated to FUNCTION (or all of its parms) if we return
12943 @@ something we had previously. */
12946 start_function (declspecs, declarator, attrs, pre_parsed_p)
12947 tree declspecs, declarator, attrs;
12948 int pre_parsed_p;
12950 tree decl1;
12951 tree ctype = NULL_TREE;
12952 tree fntype;
12953 tree restype;
12954 extern int have_extern_spec;
12955 extern int used_extern_spec;
12956 int doing_friend = 0;
12958 /* Sanity check. */
12959 my_friendly_assert (TREE_CODE (TREE_VALUE (void_list_node)) == VOID_TYPE, 160);
12960 my_friendly_assert (TREE_CHAIN (void_list_node) == NULL_TREE, 161);
12962 /* Assume, until we see it does. */
12963 current_function_returns_value = 0;
12964 current_function_returns_null = 0;
12965 named_labels = 0;
12966 current_function_assigns_this = 0;
12967 current_function_just_assigned_this = 0;
12968 current_function_parms_stored = 0;
12969 original_result_rtx = NULL_RTX;
12970 base_init_expr = NULL_TREE;
12971 current_base_init_list = NULL_TREE;
12972 current_member_init_list = NULL_TREE;
12973 ctor_label = dtor_label = NULL_TREE;
12974 static_labelno = 0;
12975 in_function_try_handler = 0;
12977 clear_temp_name ();
12979 /* This should only be done once on the top most decl. */
12980 if (have_extern_spec && !used_extern_spec)
12982 declspecs = decl_tree_cons (NULL_TREE, get_identifier ("extern"), declspecs);
12983 used_extern_spec = 1;
12986 if (pre_parsed_p)
12988 decl1 = declarator;
12990 fntype = TREE_TYPE (decl1);
12991 if (TREE_CODE (fntype) == METHOD_TYPE)
12992 ctype = TYPE_METHOD_BASETYPE (fntype);
12994 /* ANSI C++ June 5 1992 WP 11.4.5. A friend function defined in a
12995 class is in the (lexical) scope of the class in which it is
12996 defined. */
12997 if (!ctype && DECL_FRIEND_P (decl1))
12999 ctype = DECL_CLASS_CONTEXT (decl1);
13001 /* CTYPE could be null here if we're dealing with a template;
13002 for example, `inline friend float foo()' inside a template
13003 will have no CTYPE set. */
13004 if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
13005 ctype = NULL_TREE;
13006 else
13007 doing_friend = 1;
13010 last_function_parms = DECL_ARGUMENTS (decl1);
13011 last_function_parm_tags = NULL_TREE;
13013 else
13015 decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, NULL_TREE);
13016 /* If the declarator is not suitable for a function definition,
13017 cause a syntax error. */
13018 if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL) return 0;
13020 fntype = TREE_TYPE (decl1);
13022 restype = TREE_TYPE (fntype);
13023 if (CLASS_TYPE_P (restype) && !CLASSTYPE_GOT_SEMICOLON (restype))
13025 cp_error ("semicolon missing after declaration of `%#T'", restype);
13026 shadow_tag (build_expr_list (NULL_TREE, restype));
13027 CLASSTYPE_GOT_SEMICOLON (restype) = 1;
13028 if (TREE_CODE (fntype) == FUNCTION_TYPE)
13029 fntype = build_function_type (integer_type_node,
13030 TYPE_ARG_TYPES (fntype));
13031 else
13032 fntype = build_cplus_method_type (build_type_variant (TYPE_METHOD_BASETYPE (fntype), TREE_READONLY (decl1), TREE_SIDE_EFFECTS (decl1)),
13033 integer_type_node,
13034 TYPE_ARG_TYPES (fntype));
13035 TREE_TYPE (decl1) = fntype;
13038 if (TREE_CODE (fntype) == METHOD_TYPE)
13039 ctype = TYPE_METHOD_BASETYPE (fntype);
13040 else if (DECL_MAIN_P (decl1))
13042 /* If this doesn't return integer_type, complain. */
13043 if (TREE_TYPE (TREE_TYPE (decl1)) != integer_type_node)
13045 if (pedantic || warn_return_type)
13046 pedwarn ("return type for `main' changed to `int'");
13047 TREE_TYPE (decl1) = fntype = default_function_type;
13052 /* Warn if function was previously implicitly declared
13053 (but not if we warned then). */
13054 if (! warn_implicit
13055 && IDENTIFIER_IMPLICIT_DECL (DECL_NAME (decl1)) != NULL_TREE)
13056 cp_warning_at ("`%D' implicitly declared before its definition", IDENTIFIER_IMPLICIT_DECL (DECL_NAME (decl1)));
13058 if (!building_stmt_tree ())
13059 announce_function (decl1);
13061 /* Set up current_class_type, and enter the scope of the class, if
13062 appropriate. */
13063 if (ctype)
13064 push_nested_class (ctype, 1);
13065 else if (DECL_STATIC_FUNCTION_P (decl1))
13066 push_nested_class (DECL_CONTEXT (decl1), 2);
13068 /* Now that we have entered the scope of the class, we must restore
13069 the bindings for any template parameters surrounding DECL1, if it
13070 is an inline member template. (Order is important; consider the
13071 case where a template parameter has the same name as a field of
13072 the class.) It is not until after this point that
13073 PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly. */
13074 if (pre_parsed_p == 2)
13075 maybe_begin_member_template_processing (decl1);
13077 /* Effective C++ rule 15. See also c_expand_return. */
13078 if (warn_ecpp
13079 && DECL_NAME (decl1) == ansi_opname[(int) MODIFY_EXPR]
13080 && TREE_CODE (TREE_TYPE (fntype)) == VOID_TYPE)
13081 cp_warning ("`operator=' should return a reference to `*this'");
13083 /* Make the init_value nonzero so pushdecl knows this is not tentative.
13084 error_mark_node is replaced below (in poplevel) with the BLOCK. */
13085 DECL_INITIAL (decl1) = error_mark_node;
13087 #ifdef SET_DEFAULT_DECL_ATTRIBUTES
13088 SET_DEFAULT_DECL_ATTRIBUTES (decl1, attrs);
13089 #endif
13091 /* This function exists in static storage.
13092 (This does not mean `static' in the C sense!) */
13093 TREE_STATIC (decl1) = 1;
13095 /* We must call push_template_decl after current_class_type is set
13096 up. (If we are processing inline definitions after exiting a
13097 class scope, current_class_type will be NULL_TREE until set above
13098 by push_nested_class.) */
13099 if (processing_template_decl)
13100 decl1 = push_template_decl (decl1);
13102 /* We are now in the scope of the function being defined. */
13103 current_function_decl = decl1;
13105 /* Save the parm names or decls from this function's declarator
13106 where store_parm_decls will find them. */
13107 current_function_parms = last_function_parms;
13108 current_function_parm_tags = last_function_parm_tags;
13110 if (! processing_template_decl)
13112 /* In a function definition, arg types must be complete. */
13113 require_complete_types_for_parms (current_function_parms);
13115 if (TYPE_SIZE (complete_type (TREE_TYPE (fntype))) == NULL_TREE)
13117 cp_error ("return-type `%#T' is an incomplete type",
13118 TREE_TYPE (fntype));
13120 /* Make it return void instead, but don't change the
13121 type of the DECL_RESULT, in case we have a named return value. */
13122 if (ctype)
13123 TREE_TYPE (decl1)
13124 = build_cplus_method_type (build_type_variant (ctype,
13125 TREE_READONLY (decl1),
13126 TREE_SIDE_EFFECTS (decl1)),
13127 void_type_node,
13128 FUNCTION_ARG_CHAIN (decl1));
13129 else
13130 TREE_TYPE (decl1)
13131 = build_function_type (void_type_node,
13132 TYPE_ARG_TYPES (TREE_TYPE (decl1)));
13133 DECL_RESULT (decl1)
13134 = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (TREE_TYPE (fntype)));
13135 TREE_READONLY (DECL_RESULT (decl1))
13136 = CP_TYPE_CONST_P (TREE_TYPE (fntype));
13137 TREE_THIS_VOLATILE (DECL_RESULT (decl1))
13138 = CP_TYPE_VOLATILE_P (TREE_TYPE (fntype));
13141 abstract_virtuals_error (decl1, TREE_TYPE (fntype));
13144 /* Record the decl so that the function name is defined.
13145 If we already have a decl for this name, and it is a FUNCTION_DECL,
13146 use the old decl. */
13147 if (!processing_template_decl && pre_parsed_p == 0)
13149 /* A specialization is not used to guide overload resolution. */
13150 if ((flag_guiding_decls
13151 || !DECL_TEMPLATE_SPECIALIZATION (decl1))
13152 && ! DECL_FUNCTION_MEMBER_P (decl1))
13153 decl1 = pushdecl (decl1);
13154 else
13156 /* We need to set the DECL_CONTEXT. */
13157 if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
13158 DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
13159 /* And make sure we have enough default args. */
13160 check_default_args (decl1);
13162 DECL_MAIN_VARIANT (decl1) = decl1;
13163 fntype = TREE_TYPE (decl1);
13166 current_function_decl = decl1;
13168 if (DECL_INTERFACE_KNOWN (decl1))
13170 tree ctx = hack_decl_function_context (decl1);
13172 if (DECL_NOT_REALLY_EXTERN (decl1))
13173 DECL_EXTERNAL (decl1) = 0;
13175 if (ctx != NULL_TREE && DECL_THIS_INLINE (ctx)
13176 && TREE_PUBLIC (ctx))
13177 /* This is a function in a local class in an extern inline
13178 function. */
13179 comdat_linkage (decl1);
13181 /* If this function belongs to an interface, it is public.
13182 If it belongs to someone else's interface, it is also external.
13183 This only affects inlines and template instantiations. */
13184 else if (interface_unknown == 0
13185 && (! DECL_TEMPLATE_INSTANTIATION (decl1)
13186 || flag_alt_external_templates))
13188 if (DECL_THIS_INLINE (decl1) || DECL_TEMPLATE_INSTANTIATION (decl1)
13189 || processing_template_decl)
13191 DECL_EXTERNAL (decl1)
13192 = (interface_only
13193 || (DECL_THIS_INLINE (decl1) && ! flag_implement_inlines
13194 && !DECL_VINDEX (decl1)));
13196 /* For WIN32 we also want to put these in linkonce sections. */
13197 maybe_make_one_only (decl1);
13199 else
13200 DECL_EXTERNAL (decl1) = 0;
13201 DECL_NOT_REALLY_EXTERN (decl1) = 0;
13202 DECL_INTERFACE_KNOWN (decl1) = 1;
13204 else if (interface_unknown && interface_only
13205 && (! DECL_TEMPLATE_INSTANTIATION (decl1)
13206 || flag_alt_external_templates))
13208 /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
13209 interface, we will have interface_only set but not
13210 interface_known. In that case, we don't want to use the normal
13211 heuristics because someone will supply a #pragma implementation
13212 elsewhere, and deducing it here would produce a conflict. */
13213 comdat_linkage (decl1);
13214 DECL_EXTERNAL (decl1) = 0;
13215 DECL_INTERFACE_KNOWN (decl1) = 1;
13216 DECL_DEFER_OUTPUT (decl1) = 1;
13218 else
13220 /* This is a definition, not a reference.
13221 So clear DECL_EXTERNAL. */
13222 DECL_EXTERNAL (decl1) = 0;
13224 if ((DECL_THIS_INLINE (decl1) || DECL_TEMPLATE_INSTANTIATION (decl1))
13225 && ! DECL_INTERFACE_KNOWN (decl1)
13226 /* Don't try to defer nested functions for now. */
13227 && ! hack_decl_function_context (decl1))
13228 DECL_DEFER_OUTPUT (decl1) = 1;
13229 else
13230 DECL_INTERFACE_KNOWN (decl1) = 1;
13233 if (ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1))
13235 if (TREE_CODE (fntype) == METHOD_TYPE)
13236 TREE_TYPE (decl1) = fntype
13237 = build_function_type (TREE_TYPE (fntype),
13238 TREE_CHAIN (TYPE_ARG_TYPES (fntype)));
13239 current_function_parms = TREE_CHAIN (current_function_parms);
13240 DECL_ARGUMENTS (decl1) = current_function_parms;
13241 ctype = NULL_TREE;
13243 restype = TREE_TYPE (fntype);
13245 if (ctype)
13247 /* If we're compiling a friend function, neither of the variables
13248 current_class_ptr nor current_class_type will have values. */
13249 if (! doing_friend)
13251 /* We know that this was set up by `grokclassfn'.
13252 We do not wait until `store_parm_decls', since evil
13253 parse errors may never get us to that point. Here
13254 we keep the consistency between `current_class_type'
13255 and `current_class_ptr'. */
13256 tree t = current_function_parms;
13257 int i;
13259 my_friendly_assert (t != NULL_TREE
13260 && TREE_CODE (t) == PARM_DECL, 162);
13261 my_friendly_assert (TREE_CODE (TREE_TYPE (t)) == POINTER_TYPE,
13262 19990811);
13264 if (! hack_decl_function_context (decl1))
13265 temporary_allocation ();
13266 i = suspend_momentary ();
13268 /* Normally, build_indirect_ref returns current_class_ref
13269 whenever current_class_ptr is dereferenced. This time,
13270 however, we want it to *create* current_class_ref, so we
13271 temporarily clear current_class_ptr to fool it. */
13272 current_class_ptr = NULL_TREE;
13273 current_class_ref = build_indirect_ref (t, NULL_PTR);
13274 current_class_ptr = t;
13276 resume_momentary (i);
13277 if (! hack_decl_function_context (decl1))
13278 end_temporary_allocation ();
13281 else
13282 current_class_ptr = current_class_ref = NULL_TREE;
13284 pushlevel (0);
13285 current_binding_level->parm_flag = 1;
13287 if (attrs)
13288 cplus_decl_attributes (decl1, NULL_TREE, attrs);
13290 if (!building_stmt_tree ())
13292 GNU_xref_function (decl1, current_function_parms);
13293 make_function_rtl (decl1);
13296 /* Promote the value to int before returning it. */
13297 if (C_PROMOTING_INTEGER_TYPE_P (restype))
13298 restype = type_promotes_to (restype);
13300 /* If this fcn was already referenced via a block-scope `extern' decl
13301 (or an implicit decl), propagate certain information about the usage. */
13302 if (TREE_ADDRESSABLE (DECL_ASSEMBLER_NAME (decl1)))
13303 TREE_ADDRESSABLE (decl1) = 1;
13305 if (DECL_RESULT (decl1) == NULL_TREE)
13307 DECL_RESULT (decl1)
13308 = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (restype));
13309 TREE_READONLY (DECL_RESULT (decl1)) = CP_TYPE_CONST_P (restype);
13310 TREE_THIS_VOLATILE (DECL_RESULT (decl1)) = CP_TYPE_VOLATILE_P (restype);
13313 /* Allocate further tree nodes temporarily during compilation
13314 of this function only. Tiemann moved up here from bottom of fn. */
13315 /* If this is a nested function, then we must continue to allocate RTL
13316 on the permanent obstack in case we need to inline it later. */
13317 if (! hack_decl_function_context (decl1))
13318 temporary_allocation ();
13320 /* Make sure that we always have a momntary obstack while we're in a
13321 function body. */
13322 push_momentary ();
13324 if (building_stmt_tree ())
13325 begin_stmt_tree (decl1);
13327 ++function_depth;
13329 if (DESTRUCTOR_NAME_P (DECL_ASSEMBLER_NAME (decl1))
13330 && DECL_LANGUAGE (decl1) == lang_cplusplus)
13332 dtor_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
13333 ctor_label = NULL_TREE;
13335 else
13337 dtor_label = NULL_TREE;
13338 if (DECL_CONSTRUCTOR_P (decl1))
13339 ctor_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
13342 return 1;
13345 /* Called after store_parm_decls for a function-try-block. We need to update
13346 last_parm_cleanup_insn so that the base initializers for a constructor
13347 are run within this block, not before it. */
13349 void
13350 expand_start_early_try_stmts ()
13352 expand_start_try_stmts ();
13353 last_parm_cleanup_insn = get_last_insn ();
13356 /* Store the parameter declarations into the current function declaration.
13357 This is called after parsing the parameter declarations, before
13358 digesting the body of the function.
13360 Also install to binding contour return value identifier, if any. */
13362 void
13363 store_parm_decls ()
13365 register tree fndecl = current_function_decl;
13366 register tree parm;
13367 int parms_have_cleanups = 0;
13368 tree cleanups = NULL_TREE;
13370 /* This is either a chain of PARM_DECLs (when a prototype is used). */
13371 tree specparms = current_function_parms;
13373 /* This is a list of types declared among parms in a prototype. */
13374 tree parmtags = current_function_parm_tags;
13376 /* This is a chain of any other decls that came in among the parm
13377 declarations. If a parm is declared with enum {foo, bar} x;
13378 then CONST_DECLs for foo and bar are put here. */
13379 tree nonparms = NULL_TREE;
13381 if (toplevel_bindings_p ())
13382 fatal ("parse errors have confused me too much");
13384 /* Initialize RTL machinery. */
13385 init_function_start (fndecl, input_filename, lineno);
13386 /* Even though we're inside a function body, we still don't want to
13387 call expand_expr to calculate the size of a variable-sized array.
13388 We haven't necessarily assigned RTL to all variables yet, so it's
13389 not safe to try to expand expressions involving them. */
13390 immediate_size_expand = 0;
13391 get_pending_sizes ();
13393 /* Create a binding level for the parms. */
13394 expand_start_bindings (0);
13396 if (specparms != NULL_TREE)
13398 /* This case is when the function was defined with an ANSI prototype.
13399 The parms already have decls, so we need not do anything here
13400 except record them as in effect
13401 and complain if any redundant old-style parm decls were written. */
13403 register tree next;
13405 /* Must clear this because it might contain TYPE_DECLs declared
13406 at class level. */
13407 storedecls (NULL_TREE);
13409 for (parm = nreverse (specparms); parm; parm = next)
13411 next = TREE_CHAIN (parm);
13412 if (TREE_CODE (parm) == PARM_DECL)
13414 tree cleanup;
13415 if (DECL_NAME (parm) == NULL_TREE)
13417 pushdecl (parm);
13419 else if (TREE_CODE (TREE_TYPE (parm)) == VOID_TYPE)
13420 cp_error ("parameter `%D' declared void", parm);
13421 else
13423 /* Now fill in DECL_REFERENCE_SLOT for any of the parm decls.
13424 A parameter is assumed not to have any side effects.
13425 If this should change for any reason, then this
13426 will have to wrap the bashed reference type in a save_expr.
13428 Also, if the parameter type is declared to be an X
13429 and there is an X(X&) constructor, we cannot lay it
13430 into the stack (any more), so we make this parameter
13431 look like it is really of reference type. Functions
13432 which pass parameters to this function will know to
13433 create a temporary in their frame, and pass a reference
13434 to that. */
13436 if (TREE_CODE (TREE_TYPE (parm)) == REFERENCE_TYPE
13437 && TYPE_SIZE (TREE_TYPE (TREE_TYPE (parm))))
13438 SET_DECL_REFERENCE_SLOT (parm, convert_from_reference (parm));
13440 pushdecl (parm);
13442 if (! building_stmt_tree ()
13443 && (cleanup = maybe_build_cleanup (parm), cleanup))
13445 expand_decl (parm);
13446 parms_have_cleanups = 1;
13448 /* Keep track of the cleanups. */
13449 cleanups = tree_cons (parm, cleanup, cleanups);
13452 else
13454 /* If we find an enum constant or a type tag,
13455 put it aside for the moment. */
13456 TREE_CHAIN (parm) = NULL_TREE;
13457 nonparms = chainon (nonparms, parm);
13461 /* Get the decls in their original chain order
13462 and record in the function. This is all and only the
13463 PARM_DECLs that were pushed into scope by the loop above. */
13464 DECL_ARGUMENTS (fndecl) = getdecls ();
13466 storetags (chainon (parmtags, gettags ()));
13468 else
13469 DECL_ARGUMENTS (fndecl) = NULL_TREE;
13471 /* Now store the final chain of decls for the arguments
13472 as the decl-chain of the current lexical scope.
13473 Put the enumerators in as well, at the front so that
13474 DECL_ARGUMENTS is not modified. */
13476 storedecls (chainon (nonparms, DECL_ARGUMENTS (fndecl)));
13478 /* Declare __FUNCTION__ and __PRETTY_FUNCTION__ for this function. */
13479 declare_function_name ();
13481 /* Initialize the RTL code for the function. */
13482 DECL_SAVED_INSNS (fndecl) = 0;
13483 if (! building_stmt_tree ())
13484 expand_function_start (fndecl, parms_have_cleanups);
13486 current_function_parms_stored = 1;
13488 /* If this function is `main', emit a call to `__main'
13489 to run global initializers, etc. */
13490 if (DECL_MAIN_P (fndecl) && !building_stmt_tree ())
13491 expand_main_function ();
13493 /* Now that we have initialized the parms, we can start their
13494 cleanups. We cannot do this before, since expand_decl_cleanup
13495 should not be called before the parm can be used. */
13496 if (cleanups && !building_stmt_tree ())
13498 for (cleanups = nreverse (cleanups); cleanups; cleanups = TREE_CHAIN (cleanups))
13500 if (! expand_decl_cleanup (TREE_PURPOSE (cleanups), TREE_VALUE (cleanups)))
13501 cp_error ("parser lost in parsing declaration of `%D'",
13502 TREE_PURPOSE (cleanups));
13506 /* Create a binding contour which can be used to catch
13507 cleanup-generated temporaries. Also, if the return value needs or
13508 has initialization, deal with that now. */
13509 if (parms_have_cleanups)
13511 pushlevel (0);
13512 if (!building_stmt_tree ())
13513 expand_start_bindings (0);
13516 if (! building_stmt_tree () && flag_exceptions)
13518 /* Do the starting of the exception specifications, if we have any. */
13519 if (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (current_function_decl)))
13520 expand_start_eh_spec ();
13523 last_parm_cleanup_insn = get_last_insn ();
13524 last_dtor_insn = get_last_insn ();
13527 /* Bind a name and initialization to the return value of
13528 the current function. */
13530 void
13531 store_return_init (decl)
13532 tree decl;
13534 /* If this named return value comes in a register, put it in a
13535 pseudo-register. */
13536 if (DECL_REGISTER (decl))
13538 original_result_rtx = DECL_RTL (decl);
13539 DECL_RTL (decl) = gen_reg_rtx (DECL_MODE (decl));
13544 /* Finish up a function declaration and compile that function
13545 all the way to assembler language output. The free the storage
13546 for the function definition.
13548 This is called after parsing the body of the function definition.
13549 LINENO is the current line number.
13551 FLAGS is a bitwise or of the following values:
13552 1 - CALL_POPLEVEL
13553 An extra call to poplevel (and expand_end_bindings) must be
13554 made to take care of the binding contour for the base
13555 initializers. This is only relevant for constructors.
13556 2 - INCLASS_INLINE
13557 We just finished processing the body of an in-class inline
13558 function definition. (This processing will have taken place
13559 after the class definition is complete.)
13561 NESTED is nonzero if we were in the middle of compiling another function
13562 when we started on this one. */
13564 void
13565 finish_function (lineno, flags, nested)
13566 int lineno;
13567 int flags;
13568 int nested;
13570 register tree fndecl = current_function_decl;
13571 tree fntype, ctype = NULL_TREE;
13572 rtx fn_last_parm_insn, insns;
13573 /* Label to use if this function is supposed to return a value. */
13574 tree no_return_label = NULL_TREE;
13575 tree decls = NULL_TREE;
13576 int call_poplevel = (flags & 1) != 0;
13577 int inclass_inline = (flags & 2) != 0;
13578 int expand_p;
13580 /* When we get some parse errors, we can end up without a
13581 current_function_decl, so cope. */
13582 if (fndecl == NULL_TREE)
13583 return;
13585 if (function_depth > 1)
13586 nested = 1;
13588 fntype = TREE_TYPE (fndecl);
13590 /* TREE_READONLY (fndecl) = 1;
13591 This caused &foo to be of type ptr-to-const-function
13592 which then got a warning when stored in a ptr-to-function variable. */
13594 /* This happens on strange parse errors. */
13595 if (! current_function_parms_stored)
13597 call_poplevel = 0;
13598 store_parm_decls ();
13601 if (building_stmt_tree ())
13603 if (DECL_CONSTRUCTOR_P (fndecl) && call_poplevel)
13605 decls = getdecls ();
13606 expand_end_bindings (decls, decls != NULL_TREE, 0);
13607 poplevel (decls != NULL_TREE, 0, 0);
13610 else
13612 if (write_symbols != NO_DEBUG /*&& TREE_CODE (fntype) != METHOD_TYPE*/)
13614 tree ttype = target_type (fntype);
13615 tree parmdecl;
13617 if (IS_AGGR_TYPE (ttype))
13618 /* Let debugger know it should output info for this type. */
13619 note_debug_info_needed (ttype);
13621 for (parmdecl = DECL_ARGUMENTS (fndecl); parmdecl; parmdecl = TREE_CHAIN (parmdecl))
13623 ttype = target_type (TREE_TYPE (parmdecl));
13624 if (IS_AGGR_TYPE (ttype))
13625 /* Let debugger know it should output info for this type. */
13626 note_debug_info_needed (ttype);
13630 /* Clean house because we will need to reorder insns here. */
13631 do_pending_stack_adjust ();
13633 if (dtor_label)
13635 tree binfo = TYPE_BINFO (current_class_type);
13636 tree cond = integer_one_node;
13637 tree exprstmt;
13638 tree in_charge_node = lookup_name (in_charge_identifier, 0);
13639 tree virtual_size;
13640 int ok_to_optimize_dtor = 0;
13641 int empty_dtor = get_last_insn () == last_dtor_insn;
13643 if (current_function_assigns_this)
13644 cond = build (NE_EXPR, boolean_type_node,
13645 current_class_ptr, integer_zero_node);
13646 else
13648 int n_baseclasses = CLASSTYPE_N_BASECLASSES (current_class_type);
13650 /* If this destructor is empty, then we don't need to check
13651 whether `this' is NULL in some cases. */
13652 if ((flag_this_is_variable & 1) == 0)
13653 ok_to_optimize_dtor = 1;
13654 else if (empty_dtor)
13655 ok_to_optimize_dtor
13656 = (n_baseclasses == 0
13657 || (n_baseclasses == 1
13658 && TYPE_HAS_DESTRUCTOR (TYPE_BINFO_BASETYPE (current_class_type, 0))));
13661 /* These initializations might go inline. Protect
13662 the binding level of the parms. */
13663 pushlevel (0);
13664 expand_start_bindings (0);
13666 if (current_function_assigns_this)
13668 current_function_assigns_this = 0;
13669 current_function_just_assigned_this = 0;
13672 /* Generate the code to call destructor on base class.
13673 If this destructor belongs to a class with virtual
13674 functions, then set the virtual function table
13675 pointer to represent the type of our base class. */
13677 /* This side-effect makes call to `build_delete' generate the
13678 code we have to have at the end of this destructor.
13679 `build_delete' will set the flag again. */
13680 TYPE_HAS_DESTRUCTOR (current_class_type) = 0;
13682 /* These are two cases where we cannot delegate deletion. */
13683 if (TYPE_USES_VIRTUAL_BASECLASSES (current_class_type)
13684 || TYPE_GETS_REG_DELETE (current_class_type))
13685 exprstmt = build_delete (current_class_type, current_class_ref, integer_zero_node,
13686 LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR|LOOKUP_NORMAL, 0);
13687 else
13688 exprstmt = build_delete (current_class_type, current_class_ref, in_charge_node,
13689 LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR|LOOKUP_NORMAL, 0);
13691 /* If we did not assign to this, then `this' is non-zero at
13692 the end of a destructor. As a special optimization, don't
13693 emit test if this is an empty destructor. If it does nothing,
13694 it does nothing. If it calls a base destructor, the base
13695 destructor will perform the test. */
13697 if (exprstmt != error_mark_node
13698 && (TREE_CODE (exprstmt) != NOP_EXPR
13699 || TREE_OPERAND (exprstmt, 0) != integer_zero_node
13700 || TYPE_USES_VIRTUAL_BASECLASSES (current_class_type)))
13702 expand_label (dtor_label);
13703 if (cond != integer_one_node)
13704 expand_start_cond (cond, 0);
13705 if (exprstmt != void_zero_node)
13706 /* Don't call `expand_expr_stmt' if we're not going to do
13707 anything, since -Wall will give a diagnostic. */
13708 expand_expr_stmt (exprstmt);
13710 /* Run destructor on all virtual baseclasses. */
13711 if (TYPE_USES_VIRTUAL_BASECLASSES (current_class_type))
13713 tree vbases = nreverse (copy_list (CLASSTYPE_VBASECLASSES (current_class_type)));
13714 expand_start_cond (build (BIT_AND_EXPR, integer_type_node,
13715 in_charge_node, integer_two_node), 0);
13716 while (vbases)
13718 if (TYPE_NEEDS_DESTRUCTOR (BINFO_TYPE (vbases)))
13720 tree vb = get_vbase
13721 (BINFO_TYPE (vbases),
13722 TYPE_BINFO (current_class_type));
13723 expand_expr_stmt
13724 (build_scoped_method_call
13725 (current_class_ref, vb, dtor_identifier,
13726 build_expr_list (NULL_TREE, integer_zero_node)));
13728 vbases = TREE_CHAIN (vbases);
13730 expand_end_cond ();
13733 do_pending_stack_adjust ();
13734 if (cond != integer_one_node)
13735 expand_end_cond ();
13738 virtual_size = c_sizeof (current_class_type);
13740 /* At the end, call delete if that's what's requested. */
13742 /* FDIS sez: At the point of definition of a virtual destructor
13743 (including an implicit definition), non-placement operator
13744 delete shall be looked up in the scope of the destructor's
13745 class and if found shall be accessible and unambiguous.
13747 This is somewhat unclear, but I take it to mean that if the
13748 class only defines placement deletes we don't do anything here.
13749 So we pass LOOKUP_SPECULATIVELY; delete_sanity will complain
13750 for us if they ever try to delete one of these. */
13752 if (TYPE_GETS_REG_DELETE (current_class_type)
13753 || TYPE_USES_VIRTUAL_BASECLASSES (current_class_type))
13754 exprstmt = build_op_delete_call
13755 (DELETE_EXPR, current_class_ptr, virtual_size,
13756 LOOKUP_NORMAL | LOOKUP_SPECULATIVELY, NULL_TREE);
13757 else
13758 exprstmt = NULL_TREE;
13760 if (exprstmt)
13762 cond = build (BIT_AND_EXPR, integer_type_node,
13763 in_charge_node, integer_one_node);
13764 expand_start_cond (cond, 0);
13765 expand_expr_stmt (exprstmt);
13766 expand_end_cond ();
13769 /* End of destructor. */
13770 expand_end_bindings (NULL_TREE, getdecls () != NULL_TREE, 0);
13771 poplevel (getdecls () != NULL_TREE, 0, 0);
13773 /* Back to the top of destructor. */
13774 /* Don't execute destructor code if `this' is NULL. */
13776 start_sequence ();
13778 /* If the dtor is empty, and we know there is not possible way we
13779 could use any vtable entries, before they are possibly set by
13780 a base class dtor, we don't have to setup the vtables, as we
13781 know that any base class dtoring will set up any vtables it
13782 needs. We avoid MI, because one base class dtor can do a
13783 virtual dispatch to an overridden function that would need to
13784 have a non-related vtable set up, we cannot avoid setting up
13785 vtables in that case. We could change this to see if there is
13786 just one vtable. */
13787 if (! empty_dtor || TYPE_USES_COMPLEX_INHERITANCE (current_class_type))
13789 /* Make all virtual function table pointers in non-virtual base
13790 classes point to CURRENT_CLASS_TYPE's virtual function
13791 tables. */
13792 expand_direct_vtbls_init (binfo, binfo, 1, 0, current_class_ptr);
13794 if (TYPE_USES_VIRTUAL_BASECLASSES (current_class_type))
13795 expand_indirect_vtbls_init (binfo, current_class_ref, current_class_ptr);
13798 if (! ok_to_optimize_dtor)
13800 cond = build_binary_op (NE_EXPR,
13801 current_class_ptr, integer_zero_node);
13802 expand_start_cond (cond, 0);
13805 insns = get_insns ();
13806 end_sequence ();
13808 fn_last_parm_insn = get_first_nonparm_insn ();
13809 if (fn_last_parm_insn == NULL_RTX)
13810 fn_last_parm_insn = get_last_insn ();
13811 else
13812 fn_last_parm_insn = previous_insn (fn_last_parm_insn);
13814 emit_insns_after (insns, fn_last_parm_insn);
13816 if (! ok_to_optimize_dtor)
13817 expand_end_cond ();
13819 else if (current_function_assigns_this)
13821 /* Does not need to call emit_base_init, because
13822 that is done (if needed) just after assignment to this
13823 is seen. */
13825 if (DECL_CONSTRUCTOR_P (current_function_decl))
13827 end_protect_partials ();
13828 expand_label (ctor_label);
13829 ctor_label = NULL_TREE;
13831 if (call_poplevel)
13833 decls = getdecls ();
13834 expand_end_bindings (decls, decls != NULL_TREE, 0);
13835 poplevel (decls != NULL_TREE, 0, 0);
13837 /* c_expand_return knows to return 'this' from a constructor. */
13838 c_expand_return (NULL_TREE);
13840 else if (TREE_CODE (TREE_TYPE (DECL_RESULT (current_function_decl))) != VOID_TYPE
13841 && return_label != NULL_RTX)
13842 no_return_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
13844 current_function_assigns_this = 0;
13845 current_function_just_assigned_this = 0;
13846 base_init_expr = NULL_TREE;
13848 else if (DECL_CONSTRUCTOR_P (fndecl))
13850 tree cond = NULL_TREE, thenclause = NULL_TREE;
13851 /* Allow constructor for a type to get a new instance of the object
13852 using `build_new'. */
13853 tree abstract_virtuals = CLASSTYPE_ABSTRACT_VIRTUALS (current_class_type);
13854 CLASSTYPE_ABSTRACT_VIRTUALS (current_class_type) = NULL_TREE;
13856 if (flag_this_is_variable > 0)
13858 cond = build_binary_op (EQ_EXPR,
13859 current_class_ptr, integer_zero_node);
13860 thenclause = build_modify_expr (current_class_ptr, NOP_EXPR,
13861 build_new (NULL_TREE, current_class_type, void_type_node, 0));
13864 CLASSTYPE_ABSTRACT_VIRTUALS (current_class_type) = abstract_virtuals;
13866 start_sequence ();
13868 if (flag_this_is_variable > 0)
13870 expand_start_cond (cond, 0);
13871 expand_expr_stmt (thenclause);
13872 expand_end_cond ();
13875 /* Emit insns from `emit_base_init' which sets up virtual
13876 function table pointer(s). */
13877 if (base_init_expr)
13879 expand_expr_stmt (base_init_expr);
13880 base_init_expr = NULL_TREE;
13883 insns = get_insns ();
13884 end_sequence ();
13886 /* This is where the body of the constructor begins. */
13888 emit_insns_after (insns, last_parm_cleanup_insn);
13890 end_protect_partials ();
13892 /* This is where the body of the constructor ends. */
13893 expand_label (ctor_label);
13894 ctor_label = NULL_TREE;
13896 if (call_poplevel)
13898 decls = getdecls ();
13899 expand_end_bindings (decls, decls != NULL_TREE, 0);
13900 poplevel (decls != NULL_TREE, 1, 0);
13903 /* c_expand_return knows to return 'this' from a constructor. */
13904 c_expand_return (NULL_TREE);
13906 current_function_assigns_this = 0;
13907 current_function_just_assigned_this = 0;
13909 else if (DECL_MAIN_P (fndecl))
13911 /* Make it so that `main' always returns 0 by default. */
13912 #ifdef VMS
13913 c_expand_return (integer_one_node);
13914 #else
13915 c_expand_return (integer_zero_node);
13916 #endif
13918 else if (return_label != NULL_RTX
13919 && current_function_return_value == NULL_TREE
13920 && ! DECL_NAME (DECL_RESULT (current_function_decl)))
13921 no_return_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
13923 if (flag_exceptions)
13924 expand_exception_blocks ();
13926 /* If this function is supposed to return a value, ensure that
13927 we do not fall into the cleanups by mistake. The end of our
13928 function will look like this:
13930 user code (may have return stmt somewhere)
13931 goto no_return_label
13932 cleanup_label:
13933 cleanups
13934 goto return_label
13935 no_return_label:
13936 NOTE_INSN_FUNCTION_END
13937 return_label:
13938 things for return
13940 If the user omits a return stmt in the USER CODE section, we
13941 will have a control path which reaches NOTE_INSN_FUNCTION_END.
13942 Otherwise, we won't. */
13943 if (no_return_label)
13945 DECL_CONTEXT (no_return_label) = fndecl;
13946 DECL_INITIAL (no_return_label) = error_mark_node;
13947 DECL_SOURCE_FILE (no_return_label) = input_filename;
13948 DECL_SOURCE_LINE (no_return_label) = lineno;
13949 expand_goto (no_return_label);
13952 if (cleanup_label)
13954 /* Remove the binding contour which is used
13955 to catch cleanup-generated temporaries. */
13956 expand_end_bindings (0, 0, 0);
13957 poplevel (0, 0, 0);
13959 /* Emit label at beginning of cleanup code for parameters. */
13960 emit_label (cleanup_label);
13963 /* Get return value into register if that's where it's supposed to be. */
13964 if (original_result_rtx)
13965 fixup_result_decl (DECL_RESULT (fndecl), original_result_rtx);
13967 /* Finish building code that will trigger warnings if users forget
13968 to make their functions return values. */
13969 if (no_return_label || cleanup_label)
13970 emit_jump (return_label);
13971 if (no_return_label)
13973 /* We don't need to call `expand_*_return' here because we
13974 don't need any cleanups here--this path of code is only
13975 for error checking purposes. */
13976 expand_label (no_return_label);
13979 /* We hard-wired immediate_size_expand to zero in
13980 start_function. Expand_function_end will decrement this
13981 variable. So, we set the variable to one here, so that after
13982 the decrement it will remain zero. */
13983 immediate_size_expand = 1;
13985 /* Generate rtl for function exit. */
13986 expand_function_end (input_filename, lineno, 1);
13989 /* We have to save this value here in case
13990 maybe_end_member_template_processing decides to pop all the
13991 template parameters. */
13992 expand_p = !building_stmt_tree ();
13994 /* If we're saving up tree structure, tie off the function now. */
13995 if (!expand_p)
13996 finish_stmt_tree (fndecl);
13998 /* This must come after expand_function_end because cleanups might
13999 have declarations (from inline functions) that need to go into
14000 this function's blocks. */
14001 if (current_binding_level->parm_flag != 1)
14002 my_friendly_abort (122);
14003 poplevel (1, 0, 1);
14005 /* If this is a in-class inline definition, we may have to pop the
14006 bindings for the template parameters that we added in
14007 maybe_begin_member_template_processing when start_function was
14008 called. */
14009 if (inclass_inline)
14010 maybe_end_member_template_processing ();
14012 /* Reset scope for C++: if we were in the scope of a class,
14013 then when we finish this function, we are not longer so.
14014 This cannot be done until we know for sure that no more
14015 class members will ever be referenced in this function
14016 (i.e., calls to destructors). */
14017 if (current_class_name)
14019 ctype = current_class_type;
14020 pop_nested_class ();
14023 /* Must mark the RESULT_DECL as being in this function. */
14024 DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
14026 /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
14027 to the FUNCTION_DECL node itself. */
14028 BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
14030 /* Undo the call to push_momentary in start_function. */
14031 pop_momentary ();
14033 if (expand_p)
14035 int saved_flag_keep_inline_functions =
14036 flag_keep_inline_functions;
14038 /* So we can tell if jump_optimize sets it to 1. */
14039 can_reach_end = 0;
14041 if (DECL_CONTEXT (fndecl) != NULL_TREE
14042 && hack_decl_function_context (fndecl))
14043 /* Trick rest_of_compilation into not deferring output of this
14044 function, even if it is inline, since the rtl_obstack for
14045 this function is the function_obstack of the enclosing
14046 function and will be deallocated when the enclosing
14047 function is gone. See save_tree_status. */
14048 flag_keep_inline_functions = 1;
14050 /* Run the optimizers and output the assembler code for this
14051 function. */
14053 if (DECL_ARTIFICIAL (fndecl))
14055 /* Do we really *want* to inline this synthesized method? */
14057 int save_fif = flag_inline_functions;
14058 flag_inline_functions = 1;
14060 /* Turn off DECL_INLINE for the moment so function_cannot_inline_p
14061 will check our size. */
14062 DECL_INLINE (fndecl) = 0;
14064 rest_of_compilation (fndecl);
14065 flag_inline_functions = save_fif;
14067 else
14068 rest_of_compilation (fndecl);
14070 flag_keep_inline_functions = saved_flag_keep_inline_functions;
14072 if (DECL_SAVED_INSNS (fndecl) && ! TREE_ASM_WRITTEN (fndecl))
14074 /* Set DECL_EXTERNAL so that assemble_external will be called as
14075 necessary. We'll clear it again in finish_file. */
14076 if (! DECL_EXTERNAL (fndecl))
14077 DECL_NOT_REALLY_EXTERN (fndecl) = 1;
14078 DECL_EXTERNAL (fndecl) = 1;
14079 mark_inline_for_output (fndecl);
14082 if (ctype && TREE_ASM_WRITTEN (fndecl))
14083 note_debug_info_needed (ctype);
14085 current_function_returns_null |= can_reach_end;
14087 /* Since we don't normally go through c_expand_return for constructors,
14088 this normally gets the wrong value.
14089 Also, named return values have their return codes emitted after
14090 NOTE_INSN_FUNCTION_END, confusing jump.c. */
14091 if (DECL_CONSTRUCTOR_P (fndecl)
14092 || DECL_NAME (DECL_RESULT (fndecl)) != NULL_TREE)
14093 current_function_returns_null = 0;
14095 if (TREE_THIS_VOLATILE (fndecl) && current_function_returns_null)
14096 cp_warning ("`noreturn' function `%D' does return", fndecl);
14097 else if ((warn_return_type || pedantic)
14098 && current_function_returns_null
14099 && TREE_CODE (TREE_TYPE (fntype)) != VOID_TYPE)
14101 /* If this function returns non-void and control can drop through,
14102 complain. */
14103 cp_warning ("control reaches end of non-void function `%D'", fndecl);
14105 /* With just -W, complain only if function returns both with
14106 and without a value. */
14107 else if (extra_warnings
14108 && current_function_returns_value && current_function_returns_null)
14109 warning ("this function may return with or without a value");
14112 --function_depth;
14114 /* Free all the tree nodes making up this function. */
14115 /* Switch back to allocating nodes permanently
14116 until we start another function. */
14117 if (! nested)
14118 permanent_allocation (1);
14120 if (DECL_SAVED_INSNS (fndecl) == 0)
14122 tree t;
14124 /* Stop pointing to the local nodes about to be freed. */
14125 /* But DECL_INITIAL must remain nonzero so we know this
14126 was an actual function definition. */
14127 DECL_INITIAL (fndecl) = error_mark_node;
14128 for (t = DECL_ARGUMENTS (fndecl); t; t = TREE_CHAIN (t))
14129 DECL_RTL (t) = DECL_INCOMING_RTL (t) = NULL_RTX;
14132 if (DECL_STATIC_CONSTRUCTOR (fndecl))
14133 static_ctors = perm_tree_cons (NULL_TREE, fndecl, static_ctors);
14134 if (DECL_STATIC_DESTRUCTOR (fndecl))
14135 static_dtors = perm_tree_cons (NULL_TREE, fndecl, static_dtors);
14137 if (! nested)
14139 /* Let the error reporting routines know that we're outside a
14140 function. For a nested function, this value is used in
14141 pop_cp_function_context and then reset via pop_function_context. */
14142 current_function_decl = NULL_TREE;
14145 named_label_uses = NULL;
14146 current_class_ptr = NULL_TREE;
14147 current_class_ref = NULL_TREE;
14150 /* Create the FUNCTION_DECL for a function definition.
14151 DECLSPECS and DECLARATOR are the parts of the declaration;
14152 they describe the return type and the name of the function,
14153 but twisted together in a fashion that parallels the syntax of C.
14155 This function creates a binding context for the function body
14156 as well as setting up the FUNCTION_DECL in current_function_decl.
14158 Returns a FUNCTION_DECL on success.
14160 If the DECLARATOR is not suitable for a function (it defines a datum
14161 instead), we return 0, which tells yyparse to report a parse error.
14163 May return void_type_node indicating that this method is actually
14164 a friend. See grokfield for more details.
14166 Came here with a `.pushlevel' .
14168 DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
14169 CHANGES TO CODE IN `grokfield'. */
14171 tree
14172 start_method (declspecs, declarator, attrlist)
14173 tree declarator, declspecs, attrlist;
14175 tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
14176 attrlist);
14178 /* Something too ugly to handle. */
14179 if (fndecl == NULL_TREE)
14180 return NULL_TREE;
14182 /* Pass friends other than inline friend functions back. */
14183 if (fndecl == void_type_node)
14184 return fndecl;
14186 if (TREE_CODE (fndecl) != FUNCTION_DECL)
14187 /* Not a function, tell parser to report parse error. */
14188 return NULL_TREE;
14190 if (DECL_IN_AGGR_P (fndecl))
14192 if (IDENTIFIER_ERROR_LOCUS (DECL_ASSEMBLER_NAME (fndecl)) != current_class_type)
14194 if (DECL_CONTEXT (fndecl)
14195 && TREE_CODE( DECL_CONTEXT (fndecl)) != NAMESPACE_DECL)
14196 cp_error ("`%D' is already defined in class %s", fndecl,
14197 TYPE_NAME_STRING (DECL_CONTEXT (fndecl)));
14199 return void_type_node;
14202 check_template_shadow (fndecl);
14204 DECL_THIS_INLINE (fndecl) = 1;
14206 if (flag_default_inline)
14207 DECL_INLINE (fndecl) = 1;
14209 /* We process method specializations in finish_struct_1. */
14210 if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
14211 fndecl = push_template_decl (fndecl);
14213 /* We read in the parameters on the maybepermanent_obstack,
14214 but we won't be getting back to them until after we
14215 may have clobbered them. So the call to preserve_data
14216 will keep them safe. */
14217 preserve_data ();
14219 if (! DECL_FRIEND_P (fndecl))
14221 if (TREE_CHAIN (fndecl))
14223 fndecl = copy_node (fndecl);
14224 TREE_CHAIN (fndecl) = NULL_TREE;
14227 if (DECL_CONSTRUCTOR_P (fndecl))
14229 if (! grok_ctor_properties (current_class_type, fndecl))
14230 return void_type_node;
14232 else if (IDENTIFIER_OPNAME_P (DECL_NAME (fndecl)))
14233 grok_op_properties (fndecl, DECL_VIRTUAL_P (fndecl), 0);
14236 cp_finish_decl (fndecl, NULL_TREE, NULL_TREE, 0, 0);
14238 /* Make a place for the parms */
14239 pushlevel (0);
14240 current_binding_level->parm_flag = 1;
14242 DECL_IN_AGGR_P (fndecl) = 1;
14243 return fndecl;
14246 /* Go through the motions of finishing a function definition.
14247 We don't compile this method until after the whole class has
14248 been processed.
14250 FINISH_METHOD must return something that looks as though it
14251 came from GROKFIELD (since we are defining a method, after all).
14253 This is called after parsing the body of the function definition.
14254 STMTS is the chain of statements that makes up the function body.
14256 DECL is the ..._DECL that `start_method' provided. */
14258 tree
14259 finish_method (decl)
14260 tree decl;
14262 register tree fndecl = decl;
14263 tree old_initial;
14265 register tree link;
14267 if (decl == void_type_node)
14268 return decl;
14270 old_initial = DECL_INITIAL (fndecl);
14272 /* Undo the level for the parms (from start_method).
14273 This is like poplevel, but it causes nothing to be
14274 saved. Saving information here confuses symbol-table
14275 output routines. Besides, this information will
14276 be correctly output when this method is actually
14277 compiled. */
14279 /* Clear out the meanings of the local variables of this level;
14280 also record in each decl which block it belongs to. */
14282 for (link = current_binding_level->names; link; link = TREE_CHAIN (link))
14284 if (DECL_NAME (link) != NULL_TREE)
14285 pop_binding (DECL_NAME (link), link);
14286 my_friendly_assert (TREE_CODE (link) != FUNCTION_DECL, 163);
14287 DECL_CONTEXT (link) = NULL_TREE;
14290 GNU_xref_end_scope ((HOST_WIDE_INT) current_binding_level,
14291 (HOST_WIDE_INT) current_binding_level->level_chain,
14292 current_binding_level->parm_flag,
14293 current_binding_level->keep);
14295 poplevel (0, 0, 0);
14297 DECL_INITIAL (fndecl) = old_initial;
14299 /* We used to check if the context of FNDECL was different from
14300 current_class_type as another way to get inside here. This didn't work
14301 for String.cc in libg++. */
14302 if (DECL_FRIEND_P (fndecl))
14304 CLASSTYPE_INLINE_FRIENDS (current_class_type)
14305 = tree_cons (NULL_TREE, fndecl, CLASSTYPE_INLINE_FRIENDS (current_class_type));
14306 decl = void_type_node;
14309 return decl;
14312 /* Called when a new struct TYPE is defined.
14313 If this structure or union completes the type of any previous
14314 variable declaration, lay it out and output its rtl. */
14316 void
14317 hack_incomplete_structures (type)
14318 tree type;
14320 tree *list;
14322 if (current_binding_level->incomplete == NULL_TREE)
14323 return;
14325 if (!type) /* Don't do this for class templates. */
14326 return;
14328 for (list = &current_binding_level->incomplete; *list; )
14330 tree decl = TREE_VALUE (*list);
14331 if ((decl && TREE_TYPE (decl) == type)
14332 || (TREE_TYPE (decl)
14333 && TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
14334 && TREE_TYPE (TREE_TYPE (decl)) == type))
14336 int toplevel = toplevel_bindings_p ();
14337 if (TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
14338 && TREE_TYPE (TREE_TYPE (decl)) == type)
14339 layout_type (TREE_TYPE (decl));
14340 layout_decl (decl, 0);
14341 rest_of_decl_compilation (decl, NULL_PTR, toplevel, 0);
14342 if (! toplevel)
14344 tree cleanup;
14345 expand_decl (decl);
14346 cleanup = maybe_build_cleanup (decl);
14347 expand_decl_init (decl);
14348 if (! expand_decl_cleanup (decl, cleanup))
14349 cp_error ("parser lost in parsing declaration of `%D'",
14350 decl);
14352 *list = TREE_CHAIN (*list);
14354 else
14355 list = &TREE_CHAIN (*list);
14359 /* If DECL is of a type which needs a cleanup, build that cleanup here.
14360 See build_delete for information about AUTO_DELETE.
14362 Don't build these on the momentary obstack; they must live
14363 the life of the binding contour. */
14365 static tree
14366 maybe_build_cleanup_1 (decl, auto_delete)
14367 tree decl, auto_delete;
14369 tree type = TREE_TYPE (decl);
14370 if (type != error_mark_node && TYPE_NEEDS_DESTRUCTOR (type))
14372 int temp = 0, flags = LOOKUP_NORMAL|LOOKUP_DESTRUCTOR;
14373 tree rval;
14375 if (TREE_CODE (decl) != PARM_DECL)
14376 temp = suspend_momentary ();
14378 if (TREE_CODE (type) == ARRAY_TYPE)
14379 rval = decl;
14380 else
14382 mark_addressable (decl);
14383 rval = build_unary_op (ADDR_EXPR, decl, 0);
14386 /* Optimize for space over speed here. */
14387 if (! TYPE_USES_VIRTUAL_BASECLASSES (type)
14388 || flag_expensive_optimizations)
14389 flags |= LOOKUP_NONVIRTUAL;
14391 rval = build_delete (TREE_TYPE (rval), rval, auto_delete, flags, 0);
14393 if (TYPE_USES_VIRTUAL_BASECLASSES (type)
14394 && ! TYPE_HAS_DESTRUCTOR (type))
14395 rval = build_compound_expr (expr_tree_cons (NULL_TREE, rval,
14396 build_expr_list (NULL_TREE, build_vbase_delete (type, decl))));
14398 if (TREE_CODE (decl) != PARM_DECL)
14399 resume_momentary (temp);
14401 return rval;
14403 return 0;
14406 /* If DECL is of a type which needs a cleanup, build that cleanup
14407 here. The cleanup does free the storage with a call to delete. */
14409 tree
14410 maybe_build_cleanup_and_delete (decl)
14411 tree decl;
14413 return maybe_build_cleanup_1 (decl, integer_three_node);
14416 /* If DECL is of a type which needs a cleanup, build that cleanup
14417 here. The cleanup does not free the storage with a call a delete. */
14419 tree
14420 maybe_build_cleanup (decl)
14421 tree decl;
14423 return maybe_build_cleanup_1 (decl, integer_two_node);
14426 /* Expand a C++ expression at the statement level.
14427 This is needed to ferret out nodes which have UNKNOWN_TYPE.
14428 The C++ type checker should get all of these out when
14429 expressions are combined with other, type-providing, expressions,
14430 leaving only orphan expressions, such as:
14432 &class::bar; / / takes its address, but does nothing with it. */
14434 void
14435 cplus_expand_expr_stmt (exp)
14436 tree exp;
14438 exp = require_complete_type_in_void (exp);
14440 if (TREE_CODE (exp) == FUNCTION_DECL)
14442 cp_warning ("reference, not call, to function `%D'", exp);
14443 warning ("at this point in file");
14446 #if 0
14447 /* We should do this eventually, but right now this causes regex.o from
14448 libg++ to miscompile, and tString to core dump. */
14449 exp = build1 (CLEANUP_POINT_EXPR, TREE_TYPE (exp), exp);
14450 #endif
14452 /* Strip unused implicit INDIRECT_REFs of references. */
14453 if (TREE_CODE (exp) == INDIRECT_REF
14454 && TREE_CODE (TREE_TYPE (TREE_OPERAND (exp, 0))) == REFERENCE_TYPE)
14455 exp = TREE_OPERAND (exp, 0);
14457 /* If we don't do this, we end up down inside expand_expr
14458 trying to do TYPE_MODE on the ERROR_MARK, and really
14459 go outside the bounds of the type. */
14460 if (exp != error_mark_node)
14461 expand_expr_stmt (break_out_cleanups (exp));
14464 /* When a stmt has been parsed, this function is called. */
14466 void
14467 finish_stmt ()
14469 if (!current_function_assigns_this
14470 && current_function_just_assigned_this)
14472 if (DECL_CONSTRUCTOR_P (current_function_decl))
14474 /* Constructors must wait until we are out of control
14475 zones before calling base constructors. */
14476 if (in_control_zone_p ())
14477 return;
14478 expand_expr_stmt (base_init_expr);
14479 check_base_init (current_class_type);
14481 current_function_assigns_this = 1;
14484 /* Always assume this statement was not an expression statement. If
14485 it actually was an expression statement, its our callers
14486 responsibility to fix this up. */
14487 last_expr_type = NULL_TREE;
14490 /* Change a static member function definition into a FUNCTION_TYPE, instead
14491 of the METHOD_TYPE that we create when it's originally parsed.
14493 WARNING: DO NOT pass &TREE_TYPE (decl) to FN or &TYPE_ARG_TYPES
14494 (TREE_TYPE (decl)) to ARGTYPES, as doing so will corrupt the types of
14495 other decls. Either pass the addresses of local variables or NULL. */
14497 void
14498 revert_static_member_fn (decl, fn, argtypes)
14499 tree *decl, *fn, *argtypes;
14501 tree tmp;
14502 tree function = fn ? *fn : TREE_TYPE (*decl);
14503 tree args = argtypes ? *argtypes : TYPE_ARG_TYPES (function);
14505 if (CP_TYPE_QUALS (TREE_TYPE (TREE_VALUE (args)))
14506 != TYPE_UNQUALIFIED)
14507 cp_error ("static member function `%#D' declared with type qualifiers",
14508 *decl);
14510 args = TREE_CHAIN (args);
14511 tmp = build_function_type (TREE_TYPE (function), args);
14512 tmp = build_qualified_type (tmp, CP_TYPE_QUALS (function));
14513 tmp = build_exception_variant (tmp,
14514 TYPE_RAISES_EXCEPTIONS (function));
14515 TREE_TYPE (*decl) = tmp;
14516 if (DECL_ARGUMENTS (*decl))
14517 DECL_ARGUMENTS (*decl) = TREE_CHAIN (DECL_ARGUMENTS (*decl));
14518 DECL_STATIC_FUNCTION_P (*decl) = 1;
14519 if (fn)
14520 *fn = tmp;
14521 if (argtypes)
14522 *argtypes = args;
14525 struct cp_function
14527 int returns_value;
14528 int returns_null;
14529 int assigns_this;
14530 int just_assigned_this;
14531 int parms_stored;
14532 int temp_name_counter;
14533 tree named_labels;
14534 struct named_label_list *named_label_uses;
14535 tree ctor_label;
14536 tree dtor_label;
14537 rtx last_dtor_insn;
14538 rtx last_parm_cleanup_insn;
14539 tree base_init_list;
14540 tree member_init_list;
14541 tree base_init_expr;
14542 tree current_class_ptr;
14543 tree current_class_ref;
14544 rtx result_rtx;
14545 struct cp_function *next;
14546 struct binding_level *binding_level;
14547 int static_labelno;
14548 int in_function_try_handler;
14549 int expanding_p;
14550 int stmts_are_full_exprs_p;
14551 tree last_tree;
14552 tree last_expr_type;
14555 static struct cp_function *cp_function_chain;
14557 extern int temp_name_counter;
14559 /* Save and reinitialize the variables
14560 used during compilation of a C++ function. */
14562 void
14563 push_cp_function_context (context)
14564 tree context;
14566 struct cp_function *p
14567 = (struct cp_function *) xmalloc (sizeof (struct cp_function));
14569 push_function_context_to (context);
14571 p->next = cp_function_chain;
14572 cp_function_chain = p;
14574 p->named_labels = named_labels;
14575 p->named_label_uses = named_label_uses;
14576 p->returns_value = current_function_returns_value;
14577 p->returns_null = current_function_returns_null;
14578 p->binding_level = current_binding_level;
14579 p->ctor_label = ctor_label;
14580 p->dtor_label = dtor_label;
14581 p->last_dtor_insn = last_dtor_insn;
14582 p->last_parm_cleanup_insn = last_parm_cleanup_insn;
14583 p->assigns_this = current_function_assigns_this;
14584 p->just_assigned_this = current_function_just_assigned_this;
14585 p->parms_stored = current_function_parms_stored;
14586 p->result_rtx = original_result_rtx;
14587 p->base_init_expr = base_init_expr;
14588 p->temp_name_counter = temp_name_counter;
14589 p->base_init_list = current_base_init_list;
14590 p->member_init_list = current_member_init_list;
14591 p->current_class_ptr = current_class_ptr;
14592 p->current_class_ref = current_class_ref;
14593 p->static_labelno = static_labelno;
14594 p->in_function_try_handler = in_function_try_handler;
14595 p->last_tree = last_tree;
14596 p->last_expr_type = last_expr_type;
14597 p->expanding_p = expanding_p;
14598 p->stmts_are_full_exprs_p = stmts_are_full_exprs_p;
14600 /* For now, we always assume we're expanding all the way to RTL
14601 unless we're explicitly doing otherwise. */
14602 expanding_p = 1;
14604 /* Whenever we start a new function, we destroy temporaries in the
14605 usual way. */
14606 stmts_are_full_exprs_p = 1;
14609 /* Restore the variables used during compilation of a C++ function. */
14611 void
14612 pop_cp_function_context (context)
14613 tree context;
14615 struct cp_function *p = cp_function_chain;
14617 pop_function_context_from (context);
14619 cp_function_chain = p->next;
14621 named_labels = p->named_labels;
14622 named_label_uses = p->named_label_uses;
14623 current_function_returns_value = p->returns_value;
14624 current_function_returns_null = p->returns_null;
14625 current_binding_level = p->binding_level;
14626 ctor_label = p->ctor_label;
14627 dtor_label = p->dtor_label;
14628 last_dtor_insn = p->last_dtor_insn;
14629 last_parm_cleanup_insn = p->last_parm_cleanup_insn;
14630 current_function_assigns_this = p->assigns_this;
14631 current_function_just_assigned_this = p->just_assigned_this;
14632 current_function_parms_stored = p->parms_stored;
14633 original_result_rtx = p->result_rtx;
14634 base_init_expr = p->base_init_expr;
14635 temp_name_counter = p->temp_name_counter;
14636 current_base_init_list = p->base_init_list;
14637 current_member_init_list = p->member_init_list;
14638 current_class_ptr = p->current_class_ptr;
14639 current_class_ref = p->current_class_ref;
14640 static_labelno = p->static_labelno;
14641 in_function_try_handler = p->in_function_try_handler;
14642 last_tree = p->last_tree;
14643 last_expr_type = p->last_expr_type;
14644 expanding_p = p->expanding_p;
14645 stmts_are_full_exprs_p = p->stmts_are_full_exprs_p;
14647 free (p);
14651 in_function_p ()
14653 return function_depth != 0;