]> gcc.gnu.org Git - gcc.git/blob - gcc/cp/decl.c
cp-tree.h (cp_tree_index): Add CPTI_DTOR_IDENTIFIER.
[gcc.git] / gcc / cp / decl.c
1 /* Process declarations and variables for C compiler.
2 Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000
3 Free Software Foundation, Inc.
4 Contributed by Michael Tiemann (tiemann@cygnus.com)
5
6 This file is part of GNU CC.
7
8 GNU CC is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2, or (at your option)
11 any later version.
12
13 GNU CC is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with GNU CC; see the file COPYING. If not, write to
20 the Free Software Foundation, 59 Temple Place - Suite 330,
21 Boston, MA 02111-1307, USA. */
22
23
24 /* Process declarations and symbol lookup for C front end.
25 Also constructs types; the standard scalar types at initialization,
26 and structure, union, array and enum types when they are declared. */
27
28 /* ??? not all decl nodes are given the most useful possible
29 line numbers. For example, the CONST_DECLs for enum values. */
30
31 #include "config.h"
32 #include "system.h"
33 #include "tree.h"
34 #include "rtl.h"
35 #include "flags.h"
36 #include "cp-tree.h"
37 #include "decl.h"
38 #include "lex.h"
39 #include <signal.h>
40 #include "defaults.h"
41 #include "output.h"
42 #include "except.h"
43 #include "toplev.h"
44 #include "../hash.h"
45 #include "defaults.h"
46 #include "ggc.h"
47
48 extern int current_class_depth;
49
50 extern tree static_ctors, static_dtors;
51
52 extern tree global_namespace;
53
54 extern int (*valid_lang_attribute) PARAMS ((tree, tree, tree, tree));
55
56 /* Use garbage collection. */
57
58 int ggc_p = 1;
59
60 #ifndef WCHAR_UNSIGNED
61 #define WCHAR_UNSIGNED 0
62 #endif
63
64 #ifndef CHAR_TYPE_SIZE
65 #define CHAR_TYPE_SIZE BITS_PER_UNIT
66 #endif
67
68 #ifndef BOOL_TYPE_SIZE
69 #ifdef SLOW_BYTE_ACCESS
70 /* In the new ABI, `bool' has size and alignment `1', on all
71 platforms. */
72 #define BOOL_TYPE_SIZE \
73 ((SLOW_BYTE_ACCESS && !flag_new_abi) ? (POINTER_SIZE) : (CHAR_TYPE_SIZE))
74 #else
75 #define BOOL_TYPE_SIZE CHAR_TYPE_SIZE
76 #endif
77 #endif
78
79 /* We let tm.h override the types used here, to handle trivial differences
80 such as the choice of unsigned int or long unsigned int for size_t.
81 When machines start needing nontrivial differences in the size type,
82 it would be best to do something here to figure out automatically
83 from other information what type to use. */
84
85 #ifndef SIZE_TYPE
86 #define SIZE_TYPE "long unsigned int"
87 #endif
88
89 #ifndef PTRDIFF_TYPE
90 #define PTRDIFF_TYPE "long int"
91 #endif
92
93 #ifndef WCHAR_TYPE
94 #define WCHAR_TYPE "int"
95 #endif
96
97 static tree grokparms PARAMS ((tree, int));
98 static const char *redeclaration_error_message PARAMS ((tree, tree));
99
100 static void push_binding_level PARAMS ((struct binding_level *, int,
101 int));
102 static void pop_binding_level PARAMS ((void));
103 static void suspend_binding_level PARAMS ((void));
104 static void resume_binding_level PARAMS ((struct binding_level *));
105 static struct binding_level *make_binding_level PARAMS ((void));
106 static void declare_namespace_level PARAMS ((void));
107 static void signal_catch PARAMS ((int)) ATTRIBUTE_NORETURN;
108 static void storedecls PARAMS ((tree));
109 static void require_complete_types_for_parms PARAMS ((tree));
110 static int ambi_op_p PARAMS ((tree));
111 static int unary_op_p PARAMS ((tree));
112 static tree store_bindings PARAMS ((tree, tree));
113 static tree lookup_tag_reverse PARAMS ((tree, tree));
114 static tree obscure_complex_init PARAMS ((tree, tree));
115 static tree maybe_build_cleanup_1 PARAMS ((tree, tree));
116 static tree lookup_name_real PARAMS ((tree, int, int, int));
117 static void warn_extern_redeclared_static PARAMS ((tree, tree));
118 static void grok_reference_init PARAMS ((tree, tree, tree));
119 static tree grokfndecl PARAMS ((tree, tree, tree, tree, int,
120 enum overload_flags, tree,
121 tree, int, int, int, int, int, int, tree));
122 static tree grokvardecl PARAMS ((tree, tree, RID_BIT_TYPE *, int, int, tree));
123 static tree lookup_tag PARAMS ((enum tree_code, tree,
124 struct binding_level *, int));
125 static void set_identifier_type_value_with_scope
126 PARAMS ((tree, tree, struct binding_level *));
127 static void record_builtin_type PARAMS ((enum rid, const char *, tree));
128 static void record_unknown_type PARAMS ((tree, const char *));
129 static tree build_library_fn_1 PARAMS ((tree, tree));
130 static int member_function_or_else PARAMS ((tree, tree, enum overload_flags));
131 static void bad_specifiers PARAMS ((tree, const char *, int, int, int, int,
132 int));
133 static void lang_print_error_function PARAMS ((const char *));
134 static tree maybe_process_template_type_declaration PARAMS ((tree, int, struct binding_level*));
135 static void check_for_uninitialized_const_var PARAMS ((tree));
136 static unsigned long typename_hash PARAMS ((hash_table_key));
137 static boolean typename_compare PARAMS ((hash_table_key, hash_table_key));
138 static void push_binding PARAMS ((tree, tree, struct binding_level*));
139 static int add_binding PARAMS ((tree, tree));
140 static void pop_binding PARAMS ((tree, tree));
141 static tree local_variable_p_walkfn PARAMS ((tree *, int *, void *));
142 static tree find_binding PARAMS ((tree, tree));
143 static tree select_decl PARAMS ((tree, int));
144 static int lookup_flags PARAMS ((int, int));
145 static tree qualify_lookup PARAMS ((tree, int));
146 static tree record_builtin_java_type PARAMS ((const char *, int));
147 static const char *tag_name PARAMS ((enum tag_types code));
148 static void find_class_binding_level PARAMS ((void));
149 static struct binding_level *innermost_nonclass_level PARAMS ((void));
150 static void warn_about_implicit_typename_lookup PARAMS ((tree, tree));
151 static int walk_namespaces_r PARAMS ((tree, walk_namespaces_fn, void *));
152 static int walk_globals_r PARAMS ((tree, void *));
153 static void add_decl_to_level PARAMS ((tree, struct binding_level *));
154 static tree make_label_decl PARAMS ((tree, int));
155 static void pop_label PARAMS ((tree));
156 static void pop_labels PARAMS ((tree));
157 static void maybe_deduce_size_from_array_init PARAMS ((tree, tree));
158 static void layout_var_decl PARAMS ((tree));
159 static void maybe_commonize_var PARAMS ((tree));
160 static tree check_initializer PARAMS ((tree, tree));
161 static void make_rtl_for_nonlocal_decl PARAMS ((tree, tree, const char *));
162 static void push_cp_function_context PARAMS ((struct function *));
163 static void pop_cp_function_context PARAMS ((struct function *));
164 static void mark_binding_level PARAMS ((void *));
165 static void mark_cp_function_context PARAMS ((struct function *));
166 static void mark_saved_scope PARAMS ((void *));
167 static void mark_lang_function PARAMS ((struct language_function *));
168 static void mark_stmt_tree PARAMS ((struct stmt_tree *));
169 static void save_function_data PARAMS ((tree));
170 static void check_function_type PARAMS ((tree));
171 static void destroy_local_var PARAMS ((tree));
172 static void finish_constructor_body PARAMS ((void));
173 static void finish_destructor_body PARAMS ((void));
174 static tree create_array_type_for_decl PARAMS ((tree, tree, tree));
175 static tree get_atexit_node PARAMS ((void));
176 static tree get_dso_handle_node PARAMS ((void));
177 static tree start_cleanup_fn PARAMS ((void));
178 static void end_cleanup_fn PARAMS ((void));
179 static tree cp_make_fname_decl PARAMS ((tree, const char *, int));
180 static void initialize_predefined_identifiers PARAMS ((void));
181 static tree check_special_function_return_type
182 PARAMS ((special_function_kind, tree, tree, tree));
183
184 #if defined (DEBUG_CP_BINDING_LEVELS)
185 static void indent PARAMS ((void));
186 #endif
187
188 /* Erroneous argument lists can use this *IFF* they do not modify it. */
189 tree error_mark_list;
190
191 /* The following symbols are subsumed in the cp_global_trees array, and
192 listed here individually for documentation purposes.
193
194 C++ extensions
195 tree wchar_decl_node;
196 tree void_zero_node;
197
198 tree vtable_entry_type;
199 tree delta_type_node;
200 #if 0
201 Old rtti stuff.
202 tree __baselist_desc_type_node;
203 tree __i_desc_type_node, __m_desc_type_node;
204 tree __t_desc_array_type, __i_desc_array_type, __m_desc_array_type;
205 #endif
206 tree __t_desc_type_node;
207 #if 0
208 tree __tp_desc_type_node;
209 #endif
210 tree ti_desc_type_node;
211 tree bltn_desc_type_node, ptr_desc_type_node;
212 tree ary_desc_type_node, func_desc_type_node, enum_desc_type_node;
213 tree class_desc_type_node, si_class_desc_type_node, vmi_class_desc_type_node;
214 tree ptmd_desc_type_node;
215 tree base_desc_type_node;
216 #if 0
217 Not needed yet? May be needed one day?
218 tree __bltn_desc_array_type, __user_desc_array_type, __class_desc_array_type;
219 tree __ptr_desc_array_type, __attr_dec_array_type, __func_desc_array_type;
220 tree __ptmf_desc_array_type, __ptmd_desc_array_type;
221 #endif
222
223 tree class_type_node, record_type_node, union_type_node, enum_type_node;
224 tree unknown_type_node;
225
226 Array type `vtable_entry_type[]'
227
228 tree vtbl_type_node;
229 tree vtbl_ptr_type_node;
230
231 Namespaces,
232
233 tree std_node;
234 tree abi_node;
235
236 A FUNCTION_DECL which can call `abort'. Not necessarily the
237 one that the user will declare, but sufficient to be called
238 by routines that want to abort the program.
239
240 tree abort_fndecl;
241
242 The FUNCTION_DECL for the default `::operator delete'.
243
244 tree global_delete_fndecl;
245
246 Used by RTTI
247 tree type_info_type_node, tinfo_decl_id, tinfo_decl_type;
248 tree tinfo_var_id;
249
250 */
251
252 tree cp_global_trees[CPTI_MAX];
253
254 /* Indicates that there is a type value in some namespace, although
255 that is not necessarily in scope at the moment. */
256
257 static tree global_type_node;
258
259 /* Namespace std. */
260 int in_std;
261
262 /* Expect only namespace names now. */
263 static int only_namespace_names;
264
265 /* If original DECL_RESULT of current function was a register,
266 but due to being an addressable named return value, would up
267 on the stack, this variable holds the named return value's
268 original location. */
269
270 #define original_result_rtx cp_function_chain->x_result_rtx
271
272 struct named_label_list
273 {
274 struct binding_level *binding_level;
275 tree names_in_scope;
276 tree label_decl;
277 const char *filename_o_goto;
278 int lineno_o_goto;
279 struct named_label_list *next;
280 };
281
282 /* Used only for jumps to as-yet undefined labels, since jumps to
283 defined labels can have their validity checked by stmt.c. */
284
285 #define named_label_uses cp_function_chain->x_named_label_uses
286
287 /* A list of objects which have constructors or destructors
288 which reside in the global scope. The decl is stored in
289 the TREE_VALUE slot and the initializer is stored
290 in the TREE_PURPOSE slot. */
291 tree static_aggregates;
292
293 /* -- end of C++ */
294
295 /* A node for the integer constants 2, and 3. */
296
297 tree integer_two_node, integer_three_node;
298
299 /* Parsing a function declarator leaves here a chain of structure
300 and enum types declared in the parmlist. */
301
302 static tree last_function_parm_tags;
303
304 /* Similar, for last_function_parm_tags. */
305 tree last_function_parms;
306 static tree current_function_parm_tags;
307
308 /* A list (chain of TREE_LIST nodes) of all LABEL_DECLs in the function
309 that have names. Here so we can clear out their names' definitions
310 at the end of the function. The TREE_VALUE is a LABEL_DECL; the
311 TREE_PURPOSE is the previous binding of the label. */
312
313 #define named_labels cp_function_chain->x_named_labels
314
315 /* Set to 0 at beginning of a function definition, and whenever
316 a label (case or named) is defined. Set to value of expression
317 returned from function when that value can be transformed into
318 a named return value. */
319
320 tree current_function_return_value;
321
322 /* Nonzero means use the ISO C99 dialect of C. */
323
324 int flag_isoc99;
325
326 /* Nonzero means give `double' the same size as `float'. */
327
328 extern int flag_short_double;
329
330 /* Nonzero means don't recognize any builtin functions. */
331
332 extern int flag_no_builtin;
333
334 /* Nonzero means don't recognize the non-ANSI builtin functions.
335 -ansi sets this. */
336
337 extern int flag_no_nonansi_builtin;
338
339 /* Nonzero if we want to support huge (> 2^(sizeof(short)*8-1) bytes)
340 objects. */
341 extern int flag_huge_objects;
342
343 /* Nonzero if we want to conserve space in the .o files. We do this
344 by putting uninitialized data and runtime initialized data into
345 .common instead of .data at the expense of not flagging multiple
346 definitions. */
347 extern int flag_conserve_space;
348 \f
349 /* C and C++ flags are in decl2.c. */
350
351 /* Flag used when debugging spew.c */
352
353 extern int spew_debug;
354
355 /* A expression of value 0 with the same precision as a sizetype
356 node, but signed. */
357 tree signed_size_zero_node;
358
359 /* The name of the anonymous namespace, throughout this translation
360 unit. */
361 tree anonymous_namespace_name;
362
363 \f
364 /* For each binding contour we allocate a binding_level structure
365 which records the names defined in that contour.
366 Contours include:
367 0) the global one
368 1) one for each function definition,
369 where internal declarations of the parameters appear.
370 2) one for each compound statement,
371 to record its declarations.
372
373 The current meaning of a name can be found by searching the levels
374 from the current one out to the global one.
375
376 Off to the side, may be the class_binding_level. This exists only
377 to catch class-local declarations. It is otherwise nonexistent.
378
379 Also there may be binding levels that catch cleanups that must be
380 run when exceptions occur. Thus, to see whether a name is bound in
381 the current scope, it is not enough to look in the
382 CURRENT_BINDING_LEVEL. You should use lookup_name_current_level
383 instead. */
384
385 /* Note that the information in the `names' component of the global contour
386 is duplicated in the IDENTIFIER_GLOBAL_VALUEs of all identifiers. */
387
388 struct binding_level
389 {
390 /* A chain of _DECL nodes for all variables, constants, functions,
391 and typedef types. These are in the reverse of the order
392 supplied. There may be OVERLOADs on this list, too, but they
393 are wrapped in TREE_LISTs; the TREE_VALUE is the OVERLOAD. */
394 tree names;
395
396 /* A list of structure, union and enum definitions, for looking up
397 tag names.
398 It is a chain of TREE_LIST nodes, each of whose TREE_PURPOSE is a name,
399 or NULL_TREE; and whose TREE_VALUE is a RECORD_TYPE, UNION_TYPE,
400 or ENUMERAL_TYPE node.
401
402 C++: the TREE_VALUE nodes can be simple types for
403 component_bindings. */
404 tree tags;
405
406 /* A list of USING_DECL nodes. */
407 tree usings;
408
409 /* A list of used namespaces. PURPOSE is the namespace,
410 VALUE the common ancestor with this binding_level's namespace. */
411 tree using_directives;
412
413 /* If this binding level is the binding level for a class, then
414 class_shadowed is a TREE_LIST. The TREE_PURPOSE of each node
415 is the name of an entity bound in the class; the TREE_VALUE is
416 the IDENTIFIER_CLASS_VALUE before we entered the class. Thus,
417 when leaving class scope, we can restore the
418 IDENTIFIER_CLASS_VALUE by walking this list. The TREE_TYPE is
419 the DECL bound by this name in the class. */
420 tree class_shadowed;
421
422 /* Similar to class_shadowed, but for IDENTIFIER_TYPE_VALUE, and
423 is used for all binding levels. */
424 tree type_shadowed;
425
426 /* A TREE_LIST. Each TREE_VALUE is the LABEL_DECL for a local
427 label in this scope. The TREE_PURPOSE is the previous value of
428 the IDENTIFIER_LABEL VALUE. */
429 tree shadowed_labels;
430
431 /* For each level (except not the global one),
432 a chain of BLOCK nodes for all the levels
433 that were entered and exited one level down. */
434 tree blocks;
435
436 /* The BLOCK node for this level, if one has been preallocated.
437 If 0, the BLOCK is allocated (if needed) when the level is popped. */
438 tree this_block;
439
440 /* The _TYPE node for this level, if parm_flag == 2. */
441 tree this_class;
442
443 /* The binding level which this one is contained in (inherits from). */
444 struct binding_level *level_chain;
445
446 /* List of decls in `names' that have incomplete
447 structure or union types. */
448 tree incomplete;
449
450 /* List of VAR_DECLS saved from a previous for statement.
451 These would be dead in ISO-conforming code, but might
452 be referenced in ARM-era code. These are stored in a
453 TREE_LIST; the TREE_VALUE is the actual declaration. */
454 tree dead_vars_from_for;
455
456 /* 1 for the level that holds the parameters of a function.
457 2 for the level that holds a class declaration. */
458 unsigned parm_flag : 2;
459
460 /* 1 means make a BLOCK for this level regardless of all else.
461 2 for temporary binding contours created by the compiler. */
462 unsigned keep : 2;
463
464 /* Nonzero if this level "doesn't exist" for tags. */
465 unsigned tag_transparent : 1;
466
467 /* Nonzero if this level can safely have additional
468 cleanup-needing variables added to it. */
469 unsigned more_cleanups_ok : 1;
470 unsigned have_cleanups : 1;
471
472 /* Nonzero if this scope is for storing the decls for template
473 parameters and generic decls; these decls will be discarded and
474 replaced with a TEMPLATE_DECL. */
475 unsigned template_parms_p : 1;
476
477 /* Nonzero if this scope corresponds to the `<>' in a
478 `template <>' clause. Whenever this flag is set,
479 TEMPLATE_PARMS_P will be set as well. */
480 unsigned template_spec_p : 1;
481
482 /* This is set for a namespace binding level. */
483 unsigned namespace_p : 1;
484
485 /* True if this level is that of a for-statement where we need to
486 worry about ambiguous (ARM or ISO) scope rules. */
487 unsigned is_for_scope : 1;
488
489 /* True if this level corresponds to an EH region, as for a try block. */
490 unsigned eh_region : 1;
491
492 /* Four bits left for this word. */
493
494 #if defined(DEBUG_CP_BINDING_LEVELS)
495 /* Binding depth at which this level began. */
496 unsigned binding_depth;
497 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
498 };
499
500 #define NULL_BINDING_LEVEL ((struct binding_level *) NULL)
501
502 /* The binding level currently in effect. */
503
504 #define current_binding_level \
505 (cfun \
506 ? cp_function_chain->bindings \
507 : scope_chain->bindings)
508
509 /* The binding level of the current class, if any. */
510
511 #define class_binding_level scope_chain->class_bindings
512
513 /* A chain of binding_level structures awaiting reuse. */
514
515 static struct binding_level *free_binding_level;
516
517 /* The outermost binding level, for names of file scope.
518 This is created when the compiler is started and exists
519 through the entire run. */
520
521 static struct binding_level *global_binding_level;
522
523 /* Nonzero means unconditionally make a BLOCK for the next level pushed. */
524
525 static int keep_next_level_flag;
526
527 #if defined(DEBUG_CP_BINDING_LEVELS)
528 static int binding_depth = 0;
529 static int is_class_level = 0;
530
531 static void
532 indent ()
533 {
534 register unsigned i;
535
536 for (i = 0; i < binding_depth*2; i++)
537 putc (' ', stderr);
538 }
539 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
540
541 static tree pushdecl_with_scope PARAMS ((tree, struct binding_level *));
542
543 static void
544 push_binding_level (newlevel, tag_transparent, keep)
545 struct binding_level *newlevel;
546 int tag_transparent, keep;
547 {
548 /* Add this level to the front of the chain (stack) of levels that
549 are active. */
550 bzero ((char*) newlevel, sizeof (struct binding_level));
551 newlevel->level_chain = current_binding_level;
552 current_binding_level = newlevel;
553 newlevel->tag_transparent = tag_transparent;
554 newlevel->more_cleanups_ok = 1;
555
556 /* We are called before expand_start_bindings, but after
557 expand_eh_region_start for a try block; so we check this now,
558 before the EH block is covered up. */
559 newlevel->eh_region = is_eh_region ();
560
561 newlevel->keep = keep;
562 #if defined(DEBUG_CP_BINDING_LEVELS)
563 newlevel->binding_depth = binding_depth;
564 indent ();
565 fprintf (stderr, "push %s level 0x%08x line %d\n",
566 (is_class_level) ? "class" : "block", newlevel, lineno);
567 is_class_level = 0;
568 binding_depth++;
569 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
570 }
571
572 /* Find the innermost enclosing class scope, and reset
573 CLASS_BINDING_LEVEL appropriately. */
574
575 static void
576 find_class_binding_level ()
577 {
578 struct binding_level *level = current_binding_level;
579
580 while (level && level->parm_flag != 2)
581 level = level->level_chain;
582 if (level && level->parm_flag == 2)
583 class_binding_level = level;
584 else
585 class_binding_level = 0;
586 }
587
588 static void
589 pop_binding_level ()
590 {
591 if (global_binding_level)
592 {
593 /* Cannot pop a level, if there are none left to pop. */
594 if (current_binding_level == global_binding_level)
595 my_friendly_abort (123);
596 }
597 /* Pop the current level, and free the structure for reuse. */
598 #if defined(DEBUG_CP_BINDING_LEVELS)
599 binding_depth--;
600 indent ();
601 fprintf (stderr, "pop %s level 0x%08x line %d\n",
602 (is_class_level) ? "class" : "block",
603 current_binding_level, lineno);
604 if (is_class_level != (current_binding_level == class_binding_level))
605 {
606 indent ();
607 fprintf (stderr, "XXX is_class_level != (current_binding_level == class_binding_level)\n");
608 }
609 is_class_level = 0;
610 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
611 {
612 register struct binding_level *level = current_binding_level;
613 current_binding_level = current_binding_level->level_chain;
614 level->level_chain = free_binding_level;
615 #if 0 /* defined(DEBUG_CP_BINDING_LEVELS) */
616 if (level->binding_depth != binding_depth)
617 abort ();
618 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
619 free_binding_level = level;
620 find_class_binding_level ();
621 }
622 }
623
624 static void
625 suspend_binding_level ()
626 {
627 if (class_binding_level)
628 current_binding_level = class_binding_level;
629
630 if (global_binding_level)
631 {
632 /* Cannot suspend a level, if there are none left to suspend. */
633 if (current_binding_level == global_binding_level)
634 my_friendly_abort (123);
635 }
636 /* Suspend the current level. */
637 #if defined(DEBUG_CP_BINDING_LEVELS)
638 binding_depth--;
639 indent ();
640 fprintf (stderr, "suspend %s level 0x%08x line %d\n",
641 (is_class_level) ? "class" : "block",
642 current_binding_level, lineno);
643 if (is_class_level != (current_binding_level == class_binding_level))
644 {
645 indent ();
646 fprintf (stderr, "XXX is_class_level != (current_binding_level == class_binding_level)\n");
647 }
648 is_class_level = 0;
649 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
650 current_binding_level = current_binding_level->level_chain;
651 find_class_binding_level ();
652 }
653
654 static void
655 resume_binding_level (b)
656 struct binding_level *b;
657 {
658 /* Resuming binding levels is meant only for namespaces,
659 and those cannot nest into classes. */
660 my_friendly_assert(!class_binding_level, 386);
661 /* Also, resuming a non-directly nested namespace is a no-no. */
662 my_friendly_assert(b->level_chain == current_binding_level, 386);
663 current_binding_level = b;
664 #if defined(DEBUG_CP_BINDING_LEVELS)
665 b->binding_depth = binding_depth;
666 indent ();
667 fprintf (stderr, "resume %s level 0x%08x line %d\n",
668 (is_class_level) ? "class" : "block", b, lineno);
669 is_class_level = 0;
670 binding_depth++;
671 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
672 }
673 \f
674 /* Create a new `struct binding_level'. */
675
676 static
677 struct binding_level *
678 make_binding_level ()
679 {
680 /* NOSTRICT */
681 return (struct binding_level *) xmalloc (sizeof (struct binding_level));
682 }
683
684 /* Nonzero if we are currently in the global binding level. */
685
686 int
687 global_bindings_p ()
688 {
689 return current_binding_level == global_binding_level;
690 }
691
692 /* Return the innermost binding level that is not for a class scope. */
693
694 static struct binding_level *
695 innermost_nonclass_level ()
696 {
697 struct binding_level *b;
698
699 b = current_binding_level;
700 while (b->parm_flag == 2)
701 b = b->level_chain;
702
703 return b;
704 }
705
706 /* Nonzero if we are currently in a toplevel binding level. This
707 means either the global binding level or a namespace in a toplevel
708 binding level. Since there are no non-toplevel namespace levels,
709 this really means any namespace or template parameter level. We
710 also include a class whose context is toplevel. */
711
712 int
713 toplevel_bindings_p ()
714 {
715 struct binding_level *b = innermost_nonclass_level ();
716
717 return b->namespace_p || b->template_parms_p;
718 }
719
720 /* Nonzero if this is a namespace scope, or if we are defining a class
721 which is itself at namespace scope, or whose enclosing class is
722 such a class, etc. */
723
724 int
725 namespace_bindings_p ()
726 {
727 struct binding_level *b = innermost_nonclass_level ();
728
729 return b->namespace_p;
730 }
731
732 /* If KEEP is non-zero, make a BLOCK node for the next binding level,
733 unconditionally. Otherwise, use the normal logic to decide whether
734 or not to create a BLOCK. */
735
736 void
737 keep_next_level (keep)
738 int keep;
739 {
740 keep_next_level_flag = keep;
741 }
742
743 /* Nonzero if the current level needs to have a BLOCK made. */
744
745 int
746 kept_level_p ()
747 {
748 return (current_binding_level->blocks != NULL_TREE
749 || current_binding_level->keep
750 || current_binding_level->names != NULL_TREE
751 || (current_binding_level->tags != NULL_TREE
752 && !current_binding_level->tag_transparent));
753 }
754
755 static void
756 declare_namespace_level ()
757 {
758 current_binding_level->namespace_p = 1;
759 }
760
761 /* Returns non-zero if this scope was created to store template
762 parameters. */
763
764 int
765 template_parm_scope_p ()
766 {
767 return current_binding_level->template_parms_p;
768 }
769
770 /* Returns the kind of template specialization we are currently
771 processing, given that it's declaration contained N_CLASS_SCOPES
772 explicit scope qualifications. */
773
774 tmpl_spec_kind
775 current_tmpl_spec_kind (n_class_scopes)
776 int n_class_scopes;
777 {
778 int n_template_parm_scopes = 0;
779 int seen_specialization_p = 0;
780 int innermost_specialization_p = 0;
781 struct binding_level *b;
782
783 /* Scan through the template parameter scopes. */
784 for (b = current_binding_level; b->template_parms_p; b = b->level_chain)
785 {
786 /* If we see a specialization scope inside a parameter scope,
787 then something is wrong. That corresponds to a declaration
788 like:
789
790 template <class T> template <> ...
791
792 which is always illegal since [temp.expl.spec] forbids the
793 specialization of a class member template if the enclosing
794 class templates are not explicitly specialized as well. */
795 if (b->template_spec_p)
796 {
797 if (n_template_parm_scopes == 0)
798 innermost_specialization_p = 1;
799 else
800 seen_specialization_p = 1;
801 }
802 else if (seen_specialization_p == 1)
803 return tsk_invalid_member_spec;
804
805 ++n_template_parm_scopes;
806 }
807
808 /* Handle explicit instantiations. */
809 if (processing_explicit_instantiation)
810 {
811 if (n_template_parm_scopes != 0)
812 /* We've seen a template parameter list during an explicit
813 instantiation. For example:
814
815 template <class T> template void f(int);
816
817 This is erroneous. */
818 return tsk_invalid_expl_inst;
819 else
820 return tsk_expl_inst;
821 }
822
823 if (n_template_parm_scopes < n_class_scopes)
824 /* We've not seen enough template headers to match all the
825 specialized classes present. For example:
826
827 template <class T> void R<T>::S<T>::f(int);
828
829 This is illegal; there needs to be one set of template
830 parameters for each class. */
831 return tsk_insufficient_parms;
832 else if (n_template_parm_scopes == n_class_scopes)
833 /* We're processing a non-template declaration (even though it may
834 be a member of a template class.) For example:
835
836 template <class T> void S<T>::f(int);
837
838 The `class T' maches the `S<T>', leaving no template headers
839 corresponding to the `f'. */
840 return tsk_none;
841 else if (n_template_parm_scopes > n_class_scopes + 1)
842 /* We've got too many template headers. For example:
843
844 template <> template <class T> void f (T);
845
846 There need to be more enclosing classes. */
847 return tsk_excessive_parms;
848 else
849 /* This must be a template. It's of the form:
850
851 template <class T> template <class U> void S<T>::f(U);
852
853 This is a specialization if the innermost level was a
854 specialization; otherwise it's just a definition of the
855 template. */
856 return innermost_specialization_p ? tsk_expl_spec : tsk_template;
857 }
858
859 void
860 set_class_shadows (shadows)
861 tree shadows;
862 {
863 class_binding_level->class_shadowed = shadows;
864 }
865
866 /* Enter a new binding level.
867 If TAG_TRANSPARENT is nonzero, do so only for the name space of variables,
868 not for that of tags. */
869
870 void
871 pushlevel (tag_transparent)
872 int tag_transparent;
873 {
874 struct binding_level *newlevel;
875
876 if (cfun && !doing_semantic_analysis_p ())
877 return;
878
879 /* Reuse or create a struct for this binding level. */
880 #if defined(DEBUG_CP_BINDING_LEVELS)
881 if (0)
882 #else /* !defined(DEBUG_CP_BINDING_LEVELS) */
883 if (free_binding_level)
884 #endif /* !defined(DEBUG_CP_BINDING_LEVELS) */
885 {
886 newlevel = free_binding_level;
887 free_binding_level = free_binding_level->level_chain;
888 }
889 else
890 newlevel = make_binding_level ();
891
892 push_binding_level (newlevel, tag_transparent, keep_next_level_flag);
893 GNU_xref_start_scope ((HOST_WIDE_INT) newlevel);
894 keep_next_level_flag = 0;
895 }
896
897 /* Enter a new scope. The KIND indicates what kind of scope is being
898 created. */
899
900 void
901 begin_scope (sk)
902 scope_kind sk;
903 {
904 pushlevel (0);
905
906 switch (sk)
907 {
908 case sk_template_spec:
909 current_binding_level->template_spec_p = 1;
910 /* Fall through. */
911
912 case sk_template_parms:
913 current_binding_level->template_parms_p = 1;
914 break;
915
916 default:
917 my_friendly_abort (20000309);
918 }
919 }
920
921 /* Exit the current scope. */
922
923 void
924 finish_scope ()
925 {
926 poplevel (0, 0, 0);
927 }
928
929 void
930 note_level_for_for ()
931 {
932 current_binding_level->is_for_scope = 1;
933 }
934
935 /* For a binding between a name and an entity at a block scope,
936 this is the `struct binding_level' for the block. */
937 #define BINDING_LEVEL(NODE) \
938 (((struct tree_binding*)NODE)->scope.level)
939
940 /* Make DECL the innermost binding for ID. The LEVEL is the binding
941 level at which this declaration is being bound. */
942
943 static void
944 push_binding (id, decl, level)
945 tree id;
946 tree decl;
947 struct binding_level* level;
948 {
949 tree binding;
950
951 binding = make_node (CPLUS_BINDING);
952
953 /* Now, fill in the binding information. */
954 BINDING_VALUE (binding) = decl;
955 BINDING_TYPE (binding) = NULL_TREE;
956 BINDING_LEVEL (binding) = level;
957 INHERITED_VALUE_BINDING_P (binding) = 0;
958 LOCAL_BINDING_P (binding) = (level != class_binding_level);
959 BINDING_HAS_LEVEL_P (binding) = 1;
960
961 /* And put it on the front of the list of bindings for ID. */
962 TREE_CHAIN (binding) = IDENTIFIER_BINDING (id);
963 IDENTIFIER_BINDING (id) = binding;
964 }
965
966 /* ID is already bound in the current scope. But, DECL is an
967 additional binding for ID in the same scope. This is the `struct
968 stat' hack whereby a non-typedef class-name or enum-name can be
969 bound at the same level as some other kind of entity. It's the
970 responsibility of the caller to check that inserting this name is
971 legal here. Returns nonzero if the new binding was successful. */
972 static int
973 add_binding (id, decl)
974 tree id;
975 tree decl;
976 {
977 tree binding = IDENTIFIER_BINDING (id);
978 int ok = 1;
979
980 if (TREE_CODE (decl) == TYPE_DECL && DECL_ARTIFICIAL (decl))
981 /* The new name is the type name. */
982 BINDING_TYPE (binding) = decl;
983 else if (!BINDING_VALUE (binding))
984 /* This situation arises when push_class_level_binding moves an
985 inherited type-binding out of the way to make room for a new
986 value binding. */
987 BINDING_VALUE (binding) = decl;
988 else if (TREE_CODE (BINDING_VALUE (binding)) == TYPE_DECL
989 && DECL_ARTIFICIAL (BINDING_VALUE (binding)))
990 {
991 /* The old binding was a type name. It was placed in
992 BINDING_VALUE because it was thought, at the point it was
993 declared, to be the only entity with such a name. Move the
994 type name into the type slot; it is now hidden by the new
995 binding. */
996 BINDING_TYPE (binding) = BINDING_VALUE (binding);
997 BINDING_VALUE (binding) = decl;
998 INHERITED_VALUE_BINDING_P (binding) = 0;
999 }
1000 else if (TREE_CODE (BINDING_VALUE (binding)) == TYPE_DECL
1001 && TREE_CODE (decl) == TYPE_DECL
1002 && DECL_NAME (decl) == DECL_NAME (BINDING_VALUE (binding))
1003 && same_type_p (TREE_TYPE (decl),
1004 TREE_TYPE (BINDING_VALUE (binding))))
1005 /* We have two typedef-names, both naming the same type to have
1006 the same name. This is OK because of:
1007
1008 [dcl.typedef]
1009
1010 In a given scope, a typedef specifier can be used to redefine
1011 the name of any type declared in that scope to refer to the
1012 type to which it already refers. */
1013 ok = 0;
1014 else
1015 {
1016 cp_error ("declaration of `%#D'", decl);
1017 cp_error_at ("conflicts with previous declaration `%#D'",
1018 BINDING_VALUE (binding));
1019 ok = 0;
1020 }
1021
1022 return ok;
1023 }
1024
1025 /* Add DECL to the list of things declared in B. */
1026
1027 static void
1028 add_decl_to_level (decl, b)
1029 tree decl;
1030 struct binding_level *b;
1031 {
1032 /* We build up the list in reverse order, and reverse it later if
1033 necessary. */
1034 TREE_CHAIN (decl) = b->names;
1035 b->names = decl;
1036 }
1037
1038 /* Bind DECL to ID in the current_binding_level, assumed to be a local
1039 binding level. If PUSH_USING is set in FLAGS, we know that DECL
1040 doesn't really belong to this binding level, that it got here
1041 through a using-declaration. */
1042
1043 void
1044 push_local_binding (id, decl, flags)
1045 tree id;
1046 tree decl;
1047 int flags;
1048 {
1049 struct binding_level *b;
1050
1051 /* Skip over any local classes. This makes sense if we call
1052 push_local_binding with a friend decl of a local class. */
1053 b = current_binding_level;
1054 while (b->parm_flag == 2)
1055 b = b->level_chain;
1056
1057 if (lookup_name_current_level (id))
1058 {
1059 /* Supplement the existing binding. */
1060 if (!add_binding (id, decl))
1061 /* It didn't work. Something else must be bound at this
1062 level. Do not add DECL to the list of things to pop
1063 later. */
1064 return;
1065 }
1066 else
1067 /* Create a new binding. */
1068 push_binding (id, decl, b);
1069
1070 if (TREE_CODE (decl) == OVERLOAD || (flags & PUSH_USING))
1071 /* We must put the OVERLOAD into a TREE_LIST since the
1072 TREE_CHAIN of an OVERLOAD is already used. Similarly for
1073 decls that got here through a using-declaration. */
1074 decl = build_tree_list (NULL_TREE, decl);
1075
1076 /* And put DECL on the list of things declared by the current
1077 binding level. */
1078 add_decl_to_level (decl, b);
1079 }
1080
1081 /* Bind DECL to ID in the class_binding_level. Returns nonzero if the
1082 binding was successful. */
1083
1084 int
1085 push_class_binding (id, decl)
1086 tree id;
1087 tree decl;
1088 {
1089 int result = 1;
1090 tree binding = IDENTIFIER_BINDING (id);
1091 tree context;
1092
1093 /* Note that we declared this value so that we can issue an error if
1094 this an illegal redeclaration of a name already used for some
1095 other purpose. */
1096 note_name_declared_in_class (id, decl);
1097
1098 if (binding && BINDING_LEVEL (binding) == class_binding_level)
1099 /* Supplement the existing binding. */
1100 result = add_binding (id, decl);
1101 else
1102 /* Create a new binding. */
1103 push_binding (id, decl, class_binding_level);
1104
1105 /* Update the IDENTIFIER_CLASS_VALUE for this ID to be the
1106 class-level declaration. Note that we do not use DECL here
1107 because of the possibility of the `struct stat' hack; if DECL is
1108 a class-name or enum-name we might prefer a field-name, or some
1109 such. */
1110 IDENTIFIER_CLASS_VALUE (id) = BINDING_VALUE (IDENTIFIER_BINDING (id));
1111
1112 /* If this is a binding from a base class, mark it as such. */
1113 binding = IDENTIFIER_BINDING (id);
1114 if (BINDING_VALUE (binding) == decl && TREE_CODE (decl) != TREE_LIST)
1115 {
1116 /* Any implicit typename must be from a base-class. The
1117 context for an implicit typename declaration is always
1118 the derived class in which the lookup was done, so the checks
1119 based on the context of DECL below will not trigger. */
1120 if (IMPLICIT_TYPENAME_TYPE_DECL_P (decl))
1121 INHERITED_VALUE_BINDING_P (binding) = 1;
1122 else
1123 {
1124 if (TREE_CODE (decl) == OVERLOAD)
1125 context = CP_DECL_CONTEXT (OVL_CURRENT (decl));
1126 else
1127 {
1128 my_friendly_assert (DECL_P (decl), 0);
1129 context = CP_DECL_CONTEXT (decl);
1130 }
1131
1132 if (is_properly_derived_from (current_class_type, context))
1133 INHERITED_VALUE_BINDING_P (binding) = 1;
1134 else
1135 INHERITED_VALUE_BINDING_P (binding) = 0;
1136 }
1137 }
1138 else if (BINDING_VALUE (binding) == decl)
1139 /* We only encounter a TREE_LIST when push_class_decls detects an
1140 ambiguity. Such an ambiguity can be overridden by a definition
1141 in this class. */
1142 INHERITED_VALUE_BINDING_P (binding) = 1;
1143
1144 return result;
1145 }
1146
1147 /* Remove the binding for DECL which should be the innermost binding
1148 for ID. */
1149
1150 static void
1151 pop_binding (id, decl)
1152 tree id;
1153 tree decl;
1154 {
1155 tree binding;
1156
1157 if (id == NULL_TREE)
1158 /* It's easiest to write the loops that call this function without
1159 checking whether or not the entities involved have names. We
1160 get here for such an entity. */
1161 return;
1162
1163 /* Get the innermost binding for ID. */
1164 binding = IDENTIFIER_BINDING (id);
1165
1166 /* The name should be bound. */
1167 my_friendly_assert (binding != NULL_TREE, 0);
1168
1169 /* The DECL will be either the ordinary binding or the type
1170 binding for this identifier. Remove that binding. */
1171 if (BINDING_VALUE (binding) == decl)
1172 BINDING_VALUE (binding) = NULL_TREE;
1173 else if (BINDING_TYPE (binding) == decl)
1174 BINDING_TYPE (binding) = NULL_TREE;
1175 else
1176 my_friendly_abort (0);
1177
1178 if (!BINDING_VALUE (binding) && !BINDING_TYPE (binding))
1179 /* We're completely done with the innermost binding for this
1180 identifier. Unhook it from the list of bindings. */
1181 IDENTIFIER_BINDING (id) = TREE_CHAIN (binding);
1182 }
1183
1184 /* When a label goes out of scope, check to see if that label was used
1185 in a valid manner, and issue any appropriate warnings or errors. */
1186
1187 static void
1188 pop_label (link)
1189 tree link;
1190 {
1191 tree label = TREE_VALUE (link);
1192
1193 if (!processing_template_decl && doing_semantic_analysis_p ())
1194 {
1195 if (DECL_INITIAL (label) == NULL_TREE)
1196 {
1197 cp_error_at ("label `%D' used but not defined", label);
1198 /* Avoid crashing later. */
1199 define_label (input_filename, 1, DECL_NAME (label));
1200 }
1201 else if (warn_unused && !TREE_USED (label))
1202 cp_warning_at ("label `%D' defined but not used", label);
1203 }
1204
1205 SET_IDENTIFIER_LABEL_VALUE (DECL_NAME (label), TREE_PURPOSE (link));
1206 }
1207
1208 /* At the end of a function, all labels declared within the fucntion
1209 go out of scope. BLOCK is the top-level block for the
1210 function. */
1211
1212 static void
1213 pop_labels (block)
1214 tree block;
1215 {
1216 tree link;
1217
1218 /* Clear out the definitions of all label names, since their scopes
1219 end here. */
1220 for (link = named_labels; link; link = TREE_CHAIN (link))
1221 {
1222 pop_label (link);
1223 /* Put the labels into the "variables" of the top-level block,
1224 so debugger can see them. */
1225 TREE_CHAIN (TREE_VALUE (link)) = BLOCK_VARS (block);
1226 BLOCK_VARS (block) = TREE_VALUE (link);
1227 }
1228
1229 named_labels = NULL_TREE;
1230 }
1231
1232 /* Exit a binding level.
1233 Pop the level off, and restore the state of the identifier-decl mappings
1234 that were in effect when this level was entered.
1235
1236 If KEEP == 1, this level had explicit declarations, so
1237 and create a "block" (a BLOCK node) for the level
1238 to record its declarations and subblocks for symbol table output.
1239
1240 If FUNCTIONBODY is nonzero, this level is the body of a function,
1241 so create a block as if KEEP were set and also clear out all
1242 label names.
1243
1244 If REVERSE is nonzero, reverse the order of decls before putting
1245 them into the BLOCK. */
1246
1247 tree
1248 poplevel (keep, reverse, functionbody)
1249 int keep;
1250 int reverse;
1251 int functionbody;
1252 {
1253 register tree link;
1254 /* The chain of decls was accumulated in reverse order.
1255 Put it into forward order, just for cleanliness. */
1256 tree decls;
1257 int tmp = functionbody;
1258 int real_functionbody;
1259 tree tags;
1260 tree subblocks;
1261 tree block = NULL_TREE;
1262 tree decl;
1263 int block_previously_created;
1264 int leaving_for_scope;
1265
1266 if (cfun && !doing_semantic_analysis_p ())
1267 return NULL_TREE;
1268
1269 my_friendly_assert (current_binding_level->parm_flag != 2,
1270 19990916);
1271
1272 real_functionbody = (current_binding_level->keep == 2
1273 ? ((functionbody = 0), tmp) : functionbody);
1274 tags = functionbody >= 0 ? current_binding_level->tags : 0;
1275 subblocks = functionbody >= 0 ? current_binding_level->blocks : 0;
1276
1277 my_friendly_assert (!current_binding_level->class_shadowed,
1278 19990414);
1279
1280 /* We used to use KEEP == 2 to indicate that the new block should go
1281 at the beginning of the list of blocks at this binding level,
1282 rather than the end. This hack is no longer used. */
1283 my_friendly_assert (keep == 0 || keep == 1, 0);
1284
1285 GNU_xref_end_scope ((HOST_WIDE_INT) current_binding_level,
1286 (HOST_WIDE_INT) current_binding_level->level_chain,
1287 current_binding_level->parm_flag,
1288 current_binding_level->keep);
1289
1290 if (current_binding_level->keep == 1)
1291 keep = 1;
1292
1293 /* Get the decls in the order they were written.
1294 Usually current_binding_level->names is in reverse order.
1295 But parameter decls were previously put in forward order. */
1296
1297 if (reverse)
1298 current_binding_level->names
1299 = decls = nreverse (current_binding_level->names);
1300 else
1301 decls = current_binding_level->names;
1302
1303 /* Output any nested inline functions within this block
1304 if they weren't already output. */
1305 for (decl = decls; decl; decl = TREE_CHAIN (decl))
1306 if (TREE_CODE (decl) == FUNCTION_DECL
1307 && ! TREE_ASM_WRITTEN (decl)
1308 && DECL_INITIAL (decl) != NULL_TREE
1309 && TREE_ADDRESSABLE (decl)
1310 && decl_function_context (decl) == current_function_decl)
1311 {
1312 /* If this decl was copied from a file-scope decl
1313 on account of a block-scope extern decl,
1314 propagate TREE_ADDRESSABLE to the file-scope decl. */
1315 if (DECL_ABSTRACT_ORIGIN (decl) != NULL_TREE)
1316 TREE_ADDRESSABLE (DECL_ABSTRACT_ORIGIN (decl)) = 1;
1317 else
1318 {
1319 push_function_context ();
1320 output_inline_function (decl);
1321 pop_function_context ();
1322 }
1323 }
1324
1325 /* When not in function-at-a-time mode, expand_end_bindings will
1326 warn about unused variables. But, in function-at-a-time mode
1327 expand_end_bindings is not passed the list of variables in the
1328 current scope, and therefore no warning is emitted. So, we
1329 explicitly warn here. */
1330 if (!processing_template_decl)
1331 warn_about_unused_variables (getdecls ());
1332
1333 /* If there were any declarations or structure tags in that level,
1334 or if this level is a function body,
1335 create a BLOCK to record them for the life of this function. */
1336 block = NULL_TREE;
1337 block_previously_created = (current_binding_level->this_block != NULL_TREE);
1338 if (block_previously_created)
1339 block = current_binding_level->this_block;
1340 else if (keep == 1 || functionbody)
1341 block = make_node (BLOCK);
1342 if (block != NULL_TREE)
1343 {
1344 if (block_previously_created)
1345 {
1346 if (decls || tags || subblocks)
1347 {
1348 if (BLOCK_VARS (block))
1349 warning ("internal compiler error: debugging info corrupted");
1350
1351 BLOCK_VARS (block) = decls;
1352
1353 /* We can have previous subblocks and new subblocks when
1354 doing fixup_gotos with complex cleanups. We chain the new
1355 subblocks onto the end of any pre-existing subblocks. */
1356 BLOCK_SUBBLOCKS (block) = chainon (BLOCK_SUBBLOCKS (block),
1357 subblocks);
1358 }
1359 }
1360 else
1361 {
1362 BLOCK_VARS (block) = decls;
1363 BLOCK_SUBBLOCKS (block) = subblocks;
1364 }
1365 }
1366
1367 /* In each subblock, record that this is its superior. */
1368 if (keep >= 0)
1369 for (link = subblocks; link; link = TREE_CHAIN (link))
1370 BLOCK_SUPERCONTEXT (link) = block;
1371
1372 /* We still support the old for-scope rules, whereby the variables
1373 in a for-init statement were in scope after the for-statement
1374 ended. We only use the new rules in flag_new_for_scope is
1375 nonzero. */
1376 leaving_for_scope
1377 = current_binding_level->is_for_scope && flag_new_for_scope == 1;
1378
1379 /* Remove declarations for all the DECLs in this level. */
1380 for (link = decls; link; link = TREE_CHAIN (link))
1381 {
1382 if (leaving_for_scope && TREE_CODE (link) == VAR_DECL)
1383 {
1384 tree outer_binding
1385 = TREE_CHAIN (IDENTIFIER_BINDING (DECL_NAME (link)));
1386 tree ns_binding;
1387
1388 if (!outer_binding)
1389 ns_binding = IDENTIFIER_NAMESPACE_VALUE (DECL_NAME (link));
1390 else
1391 ns_binding = NULL_TREE;
1392
1393 if (outer_binding
1394 && (BINDING_LEVEL (outer_binding)
1395 == current_binding_level->level_chain))
1396 /* We have something like:
1397
1398 int i;
1399 for (int i; ;);
1400
1401 and we are leaving the `for' scope. There's no reason to
1402 keep the binding of the inner `i' in this case. */
1403 pop_binding (DECL_NAME (link), link);
1404 else if ((outer_binding
1405 && (TREE_CODE (BINDING_VALUE (outer_binding))
1406 == TYPE_DECL))
1407 || (ns_binding
1408 && TREE_CODE (ns_binding) == TYPE_DECL))
1409 /* Here, we have something like:
1410
1411 typedef int I;
1412
1413 void f () {
1414 for (int I; ;);
1415 }
1416
1417 We must pop the for-scope binding so we know what's a
1418 type and what isn't. */
1419 pop_binding (DECL_NAME (link), link);
1420 else
1421 {
1422 /* Mark this VAR_DECL as dead so that we can tell we left it
1423 there only for backward compatibility. */
1424 DECL_DEAD_FOR_LOCAL (link) = 1;
1425
1426 /* Keep track of what should of have happenned when we
1427 popped the binding. */
1428 if (outer_binding && BINDING_VALUE (outer_binding))
1429 DECL_SHADOWED_FOR_VAR (link)
1430 = BINDING_VALUE (outer_binding);
1431
1432 /* Add it to the list of dead variables in the next
1433 outermost binding to that we can remove these when we
1434 leave that binding. */
1435 current_binding_level->level_chain->dead_vars_from_for
1436 = tree_cons (NULL_TREE, link,
1437 current_binding_level->level_chain->
1438 dead_vars_from_for);
1439
1440 /* Although we don't pop the CPLUS_BINDING, we do clear
1441 its BINDING_LEVEL since the level is going away now. */
1442 BINDING_LEVEL (IDENTIFIER_BINDING (DECL_NAME (link)))
1443 = 0;
1444 }
1445 }
1446 else
1447 {
1448 /* Remove the binding. */
1449 decl = link;
1450 if (TREE_CODE (decl) == TREE_LIST)
1451 decl = TREE_VALUE (decl);
1452 if (DECL_P (decl))
1453 pop_binding (DECL_NAME (decl), decl);
1454 else if (TREE_CODE (decl) == OVERLOAD)
1455 pop_binding (DECL_NAME (OVL_FUNCTION (decl)), decl);
1456 else
1457 my_friendly_abort (0);
1458 }
1459 }
1460
1461 /* Remove declarations for any `for' variables from inner scopes
1462 that we kept around. */
1463 for (link = current_binding_level->dead_vars_from_for;
1464 link; link = TREE_CHAIN (link))
1465 pop_binding (DECL_NAME (TREE_VALUE (link)), TREE_VALUE (link));
1466
1467 /* Restore the IDENTIFIER_TYPE_VALUEs. */
1468 for (link = current_binding_level->type_shadowed;
1469 link; link = TREE_CHAIN (link))
1470 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (link), TREE_VALUE (link));
1471
1472 /* Restore the IDENTIFIER_LABEL_VALUEs for local labels. */
1473 for (link = current_binding_level->shadowed_labels;
1474 link;
1475 link = TREE_CHAIN (link))
1476 pop_label (link);
1477
1478 /* There may be OVERLOADs (wrapped in TREE_LISTs) on the BLOCK_VARs
1479 list if a `using' declaration put them there. The debugging
1480 back-ends won't understand OVERLOAD, so we remove them here.
1481 Because the BLOCK_VARS are (temporarily) shared with
1482 CURRENT_BINDING_LEVEL->NAMES we must do this fixup after we have
1483 popped all the bindings. */
1484 if (block)
1485 {
1486 tree* d;
1487
1488 for (d = &BLOCK_VARS (block); *d; )
1489 {
1490 if (TREE_CODE (*d) == TREE_LIST)
1491 *d = TREE_CHAIN (*d);
1492 else
1493 d = &TREE_CHAIN (*d);
1494 }
1495 }
1496
1497 /* If the level being exited is the top level of a function,
1498 check over all the labels. */
1499 if (functionbody)
1500 {
1501 /* Since this is the top level block of a function, the vars are
1502 the function's parameters. Don't leave them in the BLOCK
1503 because they are found in the FUNCTION_DECL instead. */
1504 BLOCK_VARS (block) = 0;
1505 pop_labels (block);
1506 }
1507
1508 /* Any uses of undefined labels now operate under constraints
1509 of next binding contour. */
1510 if (cfun)
1511 {
1512 struct binding_level *level_chain;
1513 level_chain = current_binding_level->level_chain;
1514 if (level_chain)
1515 {
1516 struct named_label_list *labels;
1517 for (labels = named_label_uses; labels; labels = labels->next)
1518 if (labels->binding_level == current_binding_level)
1519 {
1520 labels->binding_level = level_chain;
1521 labels->names_in_scope = level_chain->names;
1522 }
1523 }
1524 }
1525
1526 tmp = current_binding_level->keep;
1527
1528 pop_binding_level ();
1529 if (functionbody)
1530 DECL_INITIAL (current_function_decl) = block;
1531 else if (block)
1532 {
1533 if (!block_previously_created)
1534 current_binding_level->blocks
1535 = chainon (current_binding_level->blocks, block);
1536 }
1537 /* If we did not make a block for the level just exited,
1538 any blocks made for inner levels
1539 (since they cannot be recorded as subblocks in that level)
1540 must be carried forward so they will later become subblocks
1541 of something else. */
1542 else if (subblocks)
1543 current_binding_level->blocks
1544 = chainon (current_binding_level->blocks, subblocks);
1545
1546 /* Each and every BLOCK node created here in `poplevel' is important
1547 (e.g. for proper debugging information) so if we created one
1548 earlier, mark it as "used". */
1549 if (block)
1550 TREE_USED (block) = 1;
1551
1552 /* Take care of compiler's internal binding structures. */
1553 if (tmp == 2)
1554 {
1555 tree scope_stmts;
1556
1557 scope_stmts
1558 = add_scope_stmt (/*begin_p=*/0, /*partial_p=*/1);
1559 if (block)
1560 {
1561 SCOPE_STMT_BLOCK (TREE_PURPOSE (scope_stmts)) = block;
1562 SCOPE_STMT_BLOCK (TREE_VALUE (scope_stmts)) = block;
1563 }
1564
1565 block = poplevel (keep, reverse, functionbody);
1566 }
1567
1568 return block;
1569 }
1570
1571 /* Delete the node BLOCK from the current binding level.
1572 This is used for the block inside a stmt expr ({...})
1573 so that the block can be reinserted where appropriate. */
1574
1575 void
1576 delete_block (block)
1577 tree block;
1578 {
1579 tree t;
1580 if (current_binding_level->blocks == block)
1581 current_binding_level->blocks = TREE_CHAIN (block);
1582 for (t = current_binding_level->blocks; t;)
1583 {
1584 if (TREE_CHAIN (t) == block)
1585 TREE_CHAIN (t) = TREE_CHAIN (block);
1586 else
1587 t = TREE_CHAIN (t);
1588 }
1589 TREE_CHAIN (block) = NULL_TREE;
1590 /* Clear TREE_USED which is always set by poplevel.
1591 The flag is set again if insert_block is called. */
1592 TREE_USED (block) = 0;
1593 }
1594
1595 /* Insert BLOCK at the end of the list of subblocks of the
1596 current binding level. This is used when a BIND_EXPR is expanded,
1597 to handle the BLOCK node inside the BIND_EXPR. */
1598
1599 void
1600 insert_block (block)
1601 tree block;
1602 {
1603 TREE_USED (block) = 1;
1604 current_binding_level->blocks
1605 = chainon (current_binding_level->blocks, block);
1606 }
1607
1608 /* Set the BLOCK node for the innermost scope
1609 (the one we are currently in). */
1610
1611 void
1612 set_block (block)
1613 register tree block;
1614 {
1615 current_binding_level->this_block = block;
1616 }
1617
1618 /* Do a pushlevel for class declarations. */
1619
1620 void
1621 pushlevel_class ()
1622 {
1623 register struct binding_level *newlevel;
1624
1625 /* Reuse or create a struct for this binding level. */
1626 #if defined(DEBUG_CP_BINDING_LEVELS)
1627 if (0)
1628 #else /* !defined(DEBUG_CP_BINDING_LEVELS) */
1629 if (free_binding_level)
1630 #endif /* !defined(DEBUG_CP_BINDING_LEVELS) */
1631 {
1632 newlevel = free_binding_level;
1633 free_binding_level = free_binding_level->level_chain;
1634 }
1635 else
1636 newlevel = make_binding_level ();
1637
1638 #if defined(DEBUG_CP_BINDING_LEVELS)
1639 is_class_level = 1;
1640 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
1641
1642 push_binding_level (newlevel, 0, 0);
1643
1644 class_binding_level = current_binding_level;
1645 class_binding_level->parm_flag = 2;
1646 class_binding_level->this_class = current_class_type;
1647 }
1648
1649 /* ...and a poplevel for class declarations. */
1650
1651 void
1652 poplevel_class ()
1653 {
1654 register struct binding_level *level = class_binding_level;
1655 tree shadowed;
1656
1657 my_friendly_assert (level != 0, 354);
1658
1659 /* If we're leaving a toplevel class, don't bother to do the setting
1660 of IDENTIFIER_CLASS_VALUE to NULL_TREE, since first of all this slot
1661 shouldn't even be used when current_class_type isn't set, and second,
1662 if we don't touch it here, we're able to use the cache effect if the
1663 next time we're entering a class scope, it is the same class. */
1664 if (current_class_depth != 1)
1665 {
1666 struct binding_level* b;
1667
1668 /* Clear out our IDENTIFIER_CLASS_VALUEs. */
1669 for (shadowed = level->class_shadowed;
1670 shadowed;
1671 shadowed = TREE_CHAIN (shadowed))
1672 IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (shadowed)) = NULL_TREE;
1673
1674 /* Find the next enclosing class, and recreate
1675 IDENTIFIER_CLASS_VALUEs appropriate for that class. */
1676 b = level->level_chain;
1677 while (b && b->parm_flag != 2)
1678 b = b->level_chain;
1679
1680 if (b)
1681 for (shadowed = b->class_shadowed;
1682 shadowed;
1683 shadowed = TREE_CHAIN (shadowed))
1684 {
1685 tree t;
1686
1687 t = IDENTIFIER_BINDING (TREE_PURPOSE (shadowed));
1688 while (t && BINDING_LEVEL (t) != b)
1689 t = TREE_CHAIN (t);
1690
1691 if (t)
1692 IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (shadowed))
1693 = BINDING_VALUE (t);
1694 }
1695 }
1696 else
1697 /* Remember to save what IDENTIFIER's were bound in this scope so we
1698 can recover from cache misses. */
1699 {
1700 previous_class_type = current_class_type;
1701 previous_class_values = class_binding_level->class_shadowed;
1702 }
1703 for (shadowed = level->type_shadowed;
1704 shadowed;
1705 shadowed = TREE_CHAIN (shadowed))
1706 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (shadowed), TREE_VALUE (shadowed));
1707
1708 /* Remove the bindings for all of the class-level declarations. */
1709 for (shadowed = level->class_shadowed;
1710 shadowed;
1711 shadowed = TREE_CHAIN (shadowed))
1712 pop_binding (TREE_PURPOSE (shadowed), TREE_TYPE (shadowed));
1713
1714 GNU_xref_end_scope ((HOST_WIDE_INT) class_binding_level,
1715 (HOST_WIDE_INT) class_binding_level->level_chain,
1716 class_binding_level->parm_flag,
1717 class_binding_level->keep);
1718
1719 /* Now, pop out of the binding level which we created up in the
1720 `pushlevel_class' routine. */
1721 #if defined(DEBUG_CP_BINDING_LEVELS)
1722 is_class_level = 1;
1723 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
1724
1725 pop_binding_level ();
1726 }
1727
1728 /* We are entering the scope of a class. Clear IDENTIFIER_CLASS_VALUE
1729 for any names in enclosing classes. */
1730
1731 void
1732 clear_identifier_class_values ()
1733 {
1734 tree t;
1735
1736 if (!class_binding_level)
1737 return;
1738
1739 for (t = class_binding_level->class_shadowed;
1740 t;
1741 t = TREE_CHAIN (t))
1742 IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (t)) = NULL_TREE;
1743 }
1744
1745 /* Returns non-zero if T is a virtual function table. */
1746
1747 int
1748 vtable_decl_p (t, data)
1749 tree t;
1750 void *data ATTRIBUTE_UNUSED;
1751 {
1752 return (TREE_CODE (t) == VAR_DECL && DECL_VIRTUAL_P (t));
1753 }
1754
1755 /* Returns non-zero if T is a TYPE_DECL for a type with virtual
1756 functions. */
1757
1758 int
1759 vtype_decl_p (t, data)
1760 tree t;
1761 void *data ATTRIBUTE_UNUSED;
1762 {
1763 return (TREE_CODE (t) == TYPE_DECL
1764 && TREE_CODE (TREE_TYPE (t)) == RECORD_TYPE
1765 && TYPE_POLYMORPHIC_P (TREE_TYPE (t)));
1766 }
1767
1768 /* Return the declarations that are members of the namespace NS. */
1769
1770 tree
1771 cp_namespace_decls (ns)
1772 tree ns;
1773 {
1774 return NAMESPACE_LEVEL (ns)->names;
1775 }
1776
1777 /* Walk all the namespaces contained NAMESPACE, including NAMESPACE
1778 itself, calling F for each. The DATA is passed to F as well. */
1779
1780 static int
1781 walk_namespaces_r (namespace, f, data)
1782 tree namespace;
1783 walk_namespaces_fn f;
1784 void *data;
1785 {
1786 tree current;
1787 int result = 0;
1788
1789 result |= (*f) (namespace, data);
1790
1791 for (current = cp_namespace_decls (namespace);
1792 current;
1793 current = TREE_CHAIN (current))
1794 {
1795 if (TREE_CODE (current) != NAMESPACE_DECL
1796 || DECL_NAMESPACE_ALIAS (current))
1797 continue;
1798 if (!DECL_LANG_SPECIFIC (current))
1799 {
1800 /* Hmm. std. */
1801 my_friendly_assert (current == std_node, 393);
1802 continue;
1803 }
1804
1805 /* We found a namespace. */
1806 result |= walk_namespaces_r (current, f, data);
1807 }
1808
1809 return result;
1810 }
1811
1812 /* Walk all the namespaces, calling F for each. The DATA is passed to
1813 F as well. */
1814
1815 int
1816 walk_namespaces (f, data)
1817 walk_namespaces_fn f;
1818 void *data;
1819 {
1820 return walk_namespaces_r (global_namespace, f, data);
1821 }
1822
1823 struct walk_globals_data {
1824 walk_globals_pred p;
1825 walk_globals_fn f;
1826 void *data;
1827 };
1828
1829 /* Walk the global declarations in NAMESPACE. Whenever one is found
1830 for which P returns non-zero, call F with its address. If any call
1831 to F returns a non-zero value, return a non-zero value. */
1832
1833 static int
1834 walk_globals_r (namespace, data)
1835 tree namespace;
1836 void *data;
1837 {
1838 struct walk_globals_data* wgd = (struct walk_globals_data *) data;
1839 walk_globals_pred p = wgd->p;
1840 walk_globals_fn f = wgd->f;
1841 void *d = wgd->data;
1842 tree *t;
1843 int result = 0;
1844
1845 t = &NAMESPACE_LEVEL (namespace)->names;
1846
1847 while (*t)
1848 {
1849 tree glbl = *t;
1850
1851 if ((*p) (glbl, d))
1852 result |= (*f) (t, d);
1853
1854 /* If F changed *T, then *T still points at the next item to
1855 examine. */
1856 if (*t == glbl)
1857 t = &TREE_CHAIN (*t);
1858 }
1859
1860 return result;
1861 }
1862
1863 /* Walk the global declarations. Whenever one is found for which P
1864 returns non-zero, call F with its address. If any call to F
1865 returns a non-zero value, return a non-zero value. */
1866
1867 int
1868 walk_globals (p, f, data)
1869 walk_globals_pred p;
1870 walk_globals_fn f;
1871 void *data;
1872 {
1873 struct walk_globals_data wgd;
1874 wgd.p = p;
1875 wgd.f = f;
1876 wgd.data = data;
1877
1878 return walk_namespaces (walk_globals_r, &wgd);
1879 }
1880
1881 /* Call wrapup_globals_declarations for the globals in NAMESPACE. If
1882 DATA is non-NULL, this is the last time we will call
1883 wrapup_global_declarations for this NAMESPACE. */
1884
1885 int
1886 wrapup_globals_for_namespace (namespace, data)
1887 tree namespace;
1888 void *data;
1889 {
1890 tree globals = cp_namespace_decls (namespace);
1891 int len = list_length (globals);
1892 tree *vec = (tree *) alloca (sizeof (tree) * len);
1893 int i;
1894 int result;
1895 tree decl;
1896 int last_time = (data != 0);
1897
1898 if (last_time && namespace == global_namespace)
1899 /* Let compile_file handle the global namespace. */
1900 return 0;
1901
1902 /* Process the decls in reverse order--earliest first.
1903 Put them into VEC from back to front, then take out from front. */
1904
1905 for (i = 0, decl = globals; i < len; i++, decl = TREE_CHAIN (decl))
1906 {
1907 /* Pretend we've output an unused static variable. This ensures
1908 that the toplevel __FUNCTION__ etc won't be emitted, unless
1909 needed. */
1910 if (TREE_CODE (decl) == VAR_DECL && DECL_ARTIFICIAL (decl)
1911 && !TREE_PUBLIC (decl) && !TREE_USED (decl))
1912 {
1913 TREE_ASM_WRITTEN (decl) = 1;
1914 DECL_IGNORED_P (decl) = 1;
1915 }
1916 vec[len - i - 1] = decl;
1917 }
1918
1919 if (last_time)
1920 {
1921 check_global_declarations (vec, len);
1922 return 0;
1923 }
1924
1925 /* Temporarily mark vtables as external. That prevents
1926 wrapup_global_declarations from writing them out; we must process
1927 them ourselves in finish_vtable_vardecl. */
1928 for (i = 0; i < len; ++i)
1929 if (vtable_decl_p (vec[i], /*data=*/0) && !DECL_EXTERNAL (vec[i]))
1930 {
1931 DECL_NOT_REALLY_EXTERN (vec[i]) = 1;
1932 DECL_EXTERNAL (vec[i]) = 1;
1933 }
1934
1935 /* Write out any globals that need to be output. */
1936 result = wrapup_global_declarations (vec, len);
1937
1938 /* Undo the hack to DECL_EXTERNAL above. */
1939 for (i = 0; i < len; ++i)
1940 if (vtable_decl_p (vec[i], /*data=*/0)
1941 && DECL_NOT_REALLY_EXTERN (vec[i]))
1942 {
1943 DECL_NOT_REALLY_EXTERN (vec[i]) = 0;
1944 DECL_EXTERNAL (vec[i]) = 0;
1945 }
1946
1947 return result;
1948 }
1949
1950 \f
1951 /* Mark ARG (which is really a struct binding_level **) for GC. */
1952
1953 static void
1954 mark_binding_level (arg)
1955 void *arg;
1956 {
1957 struct binding_level *lvl = *(struct binding_level **)arg;
1958
1959 while (lvl)
1960 {
1961 ggc_mark_tree (lvl->names);
1962 ggc_mark_tree (lvl->tags);
1963 ggc_mark_tree (lvl->usings);
1964 ggc_mark_tree (lvl->using_directives);
1965 ggc_mark_tree (lvl->class_shadowed);
1966 ggc_mark_tree (lvl->type_shadowed);
1967 ggc_mark_tree (lvl->shadowed_labels);
1968 ggc_mark_tree (lvl->blocks);
1969 ggc_mark_tree (lvl->this_block);
1970 ggc_mark_tree (lvl->this_class);
1971 ggc_mark_tree (lvl->incomplete);
1972 ggc_mark_tree (lvl->dead_vars_from_for);
1973
1974 lvl = lvl->level_chain;
1975 }
1976 }
1977 \f
1978 /* For debugging. */
1979 static int no_print_functions = 0;
1980 static int no_print_builtins = 0;
1981
1982 void
1983 print_binding_level (lvl)
1984 struct binding_level *lvl;
1985 {
1986 tree t;
1987 int i = 0, len;
1988 fprintf (stderr, " blocks=");
1989 fprintf (stderr, HOST_PTR_PRINTF, lvl->blocks);
1990 fprintf (stderr, " n_incomplete=%d parm_flag=%d keep=%d",
1991 list_length (lvl->incomplete), lvl->parm_flag, lvl->keep);
1992 if (lvl->tag_transparent)
1993 fprintf (stderr, " tag-transparent");
1994 if (lvl->more_cleanups_ok)
1995 fprintf (stderr, " more-cleanups-ok");
1996 if (lvl->have_cleanups)
1997 fprintf (stderr, " have-cleanups");
1998 fprintf (stderr, "\n");
1999 if (lvl->names)
2000 {
2001 fprintf (stderr, " names:\t");
2002 /* We can probably fit 3 names to a line? */
2003 for (t = lvl->names; t; t = TREE_CHAIN (t))
2004 {
2005 if (no_print_functions && (TREE_CODE (t) == FUNCTION_DECL))
2006 continue;
2007 if (no_print_builtins
2008 && (TREE_CODE (t) == TYPE_DECL)
2009 && (!strcmp (DECL_SOURCE_FILE (t),"<built-in>")))
2010 continue;
2011
2012 /* Function decls tend to have longer names. */
2013 if (TREE_CODE (t) == FUNCTION_DECL)
2014 len = 3;
2015 else
2016 len = 2;
2017 i += len;
2018 if (i > 6)
2019 {
2020 fprintf (stderr, "\n\t");
2021 i = len;
2022 }
2023 print_node_brief (stderr, "", t, 0);
2024 if (t == error_mark_node)
2025 break;
2026 }
2027 if (i)
2028 fprintf (stderr, "\n");
2029 }
2030 if (lvl->tags)
2031 {
2032 fprintf (stderr, " tags:\t");
2033 i = 0;
2034 for (t = lvl->tags; t; t = TREE_CHAIN (t))
2035 {
2036 if (TREE_PURPOSE (t) == NULL_TREE)
2037 len = 3;
2038 else if (TREE_PURPOSE (t) == TYPE_IDENTIFIER (TREE_VALUE (t)))
2039 len = 2;
2040 else
2041 len = 4;
2042 i += len;
2043 if (i > 5)
2044 {
2045 fprintf (stderr, "\n\t");
2046 i = len;
2047 }
2048 if (TREE_PURPOSE (t) == NULL_TREE)
2049 {
2050 print_node_brief (stderr, "<unnamed-typedef", TREE_VALUE (t), 0);
2051 fprintf (stderr, ">");
2052 }
2053 else if (TREE_PURPOSE (t) == TYPE_IDENTIFIER (TREE_VALUE (t)))
2054 print_node_brief (stderr, "", TREE_VALUE (t), 0);
2055 else
2056 {
2057 print_node_brief (stderr, "<typedef", TREE_PURPOSE (t), 0);
2058 print_node_brief (stderr, "", TREE_VALUE (t), 0);
2059 fprintf (stderr, ">");
2060 }
2061 }
2062 if (i)
2063 fprintf (stderr, "\n");
2064 }
2065 if (lvl->class_shadowed)
2066 {
2067 fprintf (stderr, " class-shadowed:");
2068 for (t = lvl->class_shadowed; t; t = TREE_CHAIN (t))
2069 {
2070 fprintf (stderr, " %s ", IDENTIFIER_POINTER (TREE_PURPOSE (t)));
2071 }
2072 fprintf (stderr, "\n");
2073 }
2074 if (lvl->type_shadowed)
2075 {
2076 fprintf (stderr, " type-shadowed:");
2077 for (t = lvl->type_shadowed; t; t = TREE_CHAIN (t))
2078 {
2079 fprintf (stderr, " %s ", IDENTIFIER_POINTER (TREE_PURPOSE (t)));
2080 }
2081 fprintf (stderr, "\n");
2082 }
2083 }
2084
2085 void
2086 print_other_binding_stack (stack)
2087 struct binding_level *stack;
2088 {
2089 struct binding_level *level;
2090 for (level = stack; level != global_binding_level; level = level->level_chain)
2091 {
2092 fprintf (stderr, "binding level ");
2093 fprintf (stderr, HOST_PTR_PRINTF, level);
2094 fprintf (stderr, "\n");
2095 print_binding_level (level);
2096 }
2097 }
2098
2099 void
2100 print_binding_stack ()
2101 {
2102 struct binding_level *b;
2103 fprintf (stderr, "current_binding_level=");
2104 fprintf (stderr, HOST_PTR_PRINTF, current_binding_level);
2105 fprintf (stderr, "\nclass_binding_level=");
2106 fprintf (stderr, HOST_PTR_PRINTF, class_binding_level);
2107 fprintf (stderr, "\nglobal_binding_level=");
2108 fprintf (stderr, HOST_PTR_PRINTF, global_binding_level);
2109 fprintf (stderr, "\n");
2110 if (class_binding_level)
2111 {
2112 for (b = class_binding_level; b; b = b->level_chain)
2113 if (b == current_binding_level)
2114 break;
2115 if (b)
2116 b = class_binding_level;
2117 else
2118 b = current_binding_level;
2119 }
2120 else
2121 b = current_binding_level;
2122 print_other_binding_stack (b);
2123 fprintf (stderr, "global:\n");
2124 print_binding_level (global_binding_level);
2125 }
2126
2127 /* Namespace binding access routines: The namespace_bindings field of
2128 the identifier is polymorphic, with three possible values:
2129 NULL_TREE, a list of CPLUS_BINDINGS, or any other tree_node
2130 indicating the BINDING_VALUE of global_namespace. */
2131
2132 /* Check whether the a binding for the name to scope is known.
2133 Assumes that the bindings of the name are already a list
2134 of bindings. Returns the binding found, or NULL_TREE. */
2135
2136 static tree
2137 find_binding (name, scope)
2138 tree name;
2139 tree scope;
2140 {
2141 tree iter, prev = NULL_TREE;
2142
2143 scope = ORIGINAL_NAMESPACE (scope);
2144
2145 for (iter = IDENTIFIER_NAMESPACE_BINDINGS (name); iter;
2146 iter = TREE_CHAIN (iter))
2147 {
2148 my_friendly_assert (TREE_CODE (iter) == CPLUS_BINDING, 374);
2149 if (BINDING_SCOPE (iter) == scope)
2150 {
2151 /* Move binding found to the front of the list, so
2152 subsequent lookups will find it faster. */
2153 if (prev)
2154 {
2155 TREE_CHAIN (prev) = TREE_CHAIN (iter);
2156 TREE_CHAIN (iter) = IDENTIFIER_NAMESPACE_BINDINGS (name);
2157 IDENTIFIER_NAMESPACE_BINDINGS (name) = iter;
2158 }
2159 return iter;
2160 }
2161 prev = iter;
2162 }
2163 return NULL_TREE;
2164 }
2165
2166 /* Always returns a binding for name in scope. If the
2167 namespace_bindings is not a list, convert it to one first.
2168 If no binding is found, make a new one. */
2169
2170 tree
2171 binding_for_name (name, scope)
2172 tree name;
2173 tree scope;
2174 {
2175 tree b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2176 tree result;
2177
2178 scope = ORIGINAL_NAMESPACE (scope);
2179
2180 if (b && TREE_CODE (b) != CPLUS_BINDING)
2181 {
2182 /* Get rid of optimization for global scope. */
2183 IDENTIFIER_NAMESPACE_BINDINGS (name) = NULL_TREE;
2184 BINDING_VALUE (binding_for_name (name, global_namespace)) = b;
2185 b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2186 }
2187 if (b && (result = find_binding (name, scope)))
2188 return result;
2189 /* Not found, make a new one. */
2190 result = make_node (CPLUS_BINDING);
2191 TREE_CHAIN (result) = b;
2192 IDENTIFIER_NAMESPACE_BINDINGS (name) = result;
2193 BINDING_SCOPE (result) = scope;
2194 BINDING_TYPE (result) = NULL_TREE;
2195 BINDING_VALUE (result) = NULL_TREE;
2196 return result;
2197 }
2198
2199 /* Return the binding value for name in scope, considering that
2200 namespace_binding may or may not be a list of CPLUS_BINDINGS. */
2201
2202 tree
2203 namespace_binding (name, scope)
2204 tree name;
2205 tree scope;
2206 {
2207 tree b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2208 if (b == NULL_TREE)
2209 return NULL_TREE;
2210 if (scope == NULL_TREE)
2211 scope = global_namespace;
2212 if (TREE_CODE (b) != CPLUS_BINDING)
2213 return (scope == global_namespace) ? b : NULL_TREE;
2214 name = find_binding (name,scope);
2215 if (name == NULL_TREE)
2216 return name;
2217 return BINDING_VALUE (name);
2218 }
2219
2220 /* Set the binding value for name in scope. If modifying the binding
2221 of global_namespace is attempted, try to optimize it. */
2222
2223 void
2224 set_namespace_binding (name, scope, val)
2225 tree name;
2226 tree scope;
2227 tree val;
2228 {
2229 tree b;
2230
2231 if (scope == NULL_TREE)
2232 scope = global_namespace;
2233
2234 if (scope == global_namespace)
2235 {
2236 b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2237 if (b == NULL_TREE || TREE_CODE (b) != CPLUS_BINDING)
2238 {
2239 IDENTIFIER_NAMESPACE_BINDINGS (name) = val;
2240 return;
2241 }
2242 }
2243 b = binding_for_name (name, scope);
2244 BINDING_VALUE (b) = val;
2245 }
2246
2247 /* Push into the scope of the NAME namespace. If NAME is NULL_TREE, then we
2248 select a name that is unique to this compilation unit. */
2249
2250 void
2251 push_namespace (name)
2252 tree name;
2253 {
2254 tree d = NULL_TREE;
2255 int need_new = 1;
2256 int implicit_use = 0;
2257 int global = 0;
2258 if (!global_namespace)
2259 {
2260 /* This must be ::. */
2261 my_friendly_assert (name == get_identifier ("::"), 377);
2262 global = 1;
2263 }
2264 else if (!name)
2265 {
2266 /* The name of anonymous namespace is unique for the translation
2267 unit. */
2268 if (!anonymous_namespace_name)
2269 anonymous_namespace_name = get_file_function_name ('N');
2270 name = anonymous_namespace_name;
2271 d = IDENTIFIER_NAMESPACE_VALUE (name);
2272 if (d)
2273 /* Reopening anonymous namespace. */
2274 need_new = 0;
2275 implicit_use = 1;
2276 }
2277 else if (current_namespace == global_namespace
2278 && name == DECL_NAME (std_node))
2279 {
2280 in_std++;
2281 return;
2282 }
2283 else
2284 {
2285 /* Check whether this is an extended namespace definition. */
2286 d = IDENTIFIER_NAMESPACE_VALUE (name);
2287 if (d != NULL_TREE && TREE_CODE (d) == NAMESPACE_DECL)
2288 {
2289 need_new = 0;
2290 if (DECL_NAMESPACE_ALIAS (d))
2291 {
2292 cp_error ("namespace alias `%D' not allowed here, assuming `%D'",
2293 d, DECL_NAMESPACE_ALIAS (d));
2294 d = DECL_NAMESPACE_ALIAS (d);
2295 }
2296 }
2297 }
2298
2299 if (need_new)
2300 {
2301 /* Make a new namespace, binding the name to it. */
2302 d = build_lang_decl (NAMESPACE_DECL, name, void_type_node);
2303 /* The global namespace is not pushed, and the global binding
2304 level is set elsewhere. */
2305 if (!global)
2306 {
2307 d = pushdecl (d);
2308 pushlevel (0);
2309 declare_namespace_level ();
2310 NAMESPACE_LEVEL (d) = current_binding_level;
2311 }
2312 }
2313 else
2314 resume_binding_level (NAMESPACE_LEVEL (d));
2315
2316 if (implicit_use)
2317 do_using_directive (d);
2318 /* Enter the name space. */
2319 current_namespace = d;
2320 }
2321
2322 /* Pop from the scope of the current namespace. */
2323
2324 void
2325 pop_namespace ()
2326 {
2327 if (current_namespace == global_namespace)
2328 {
2329 my_friendly_assert (in_std>0, 980421);
2330 in_std--;
2331 return;
2332 }
2333 current_namespace = CP_DECL_CONTEXT (current_namespace);
2334 /* The binding level is not popped, as it might be re-opened later. */
2335 suspend_binding_level ();
2336 }
2337
2338 /* Push into the scope of the namespace NS, even if it is deeply
2339 nested within another namespace. */
2340
2341 void
2342 push_nested_namespace (ns)
2343 tree ns;
2344 {
2345 if (ns == global_namespace)
2346 push_to_top_level ();
2347 else
2348 {
2349 push_nested_namespace (CP_DECL_CONTEXT (ns));
2350 push_namespace (DECL_NAME (ns));
2351 }
2352 }
2353
2354 /* Pop back from the scope of the namespace NS, which was previously
2355 entered with push_nested_namespace. */
2356
2357 void
2358 pop_nested_namespace (ns)
2359 tree ns;
2360 {
2361 while (ns != global_namespace)
2362 {
2363 pop_namespace ();
2364 ns = CP_DECL_CONTEXT (ns);
2365 }
2366
2367 pop_from_top_level ();
2368 }
2369
2370 \f
2371 /* Subroutines for reverting temporarily to top-level for instantiation
2372 of templates and such. We actually need to clear out the class- and
2373 local-value slots of all identifiers, so that only the global values
2374 are at all visible. Simply setting current_binding_level to the global
2375 scope isn't enough, because more binding levels may be pushed. */
2376 struct saved_scope *scope_chain;
2377
2378 /* Mark ST for GC. */
2379
2380 static void
2381 mark_stmt_tree (st)
2382 struct stmt_tree *st;
2383 {
2384 ggc_mark_tree (st->x_last_stmt);
2385 ggc_mark_tree (st->x_last_expr_type);
2386 }
2387
2388 /* Mark ARG (which is really a struct saved_scope **) for GC. */
2389
2390 static void
2391 mark_saved_scope (arg)
2392 void *arg;
2393 {
2394 struct saved_scope *t = *(struct saved_scope **)arg;
2395 while (t)
2396 {
2397 mark_binding_level (&t->class_bindings);
2398 ggc_mark_tree (t->old_bindings);
2399 ggc_mark_tree (t->old_namespace);
2400 ggc_mark_tree (t->class_name);
2401 ggc_mark_tree (t->class_type);
2402 ggc_mark_tree (t->access_specifier);
2403 ggc_mark_tree (t->function_decl);
2404 if (t->lang_base)
2405 ggc_mark_tree_varray (t->lang_base);
2406 ggc_mark_tree (t->lang_name);
2407 ggc_mark_tree (t->x_function_parms);
2408 ggc_mark_tree (t->template_parms);
2409 ggc_mark_tree (t->x_previous_class_type);
2410 ggc_mark_tree (t->x_previous_class_values);
2411 ggc_mark_tree (t->x_saved_tree);
2412 ggc_mark_tree (t->incomplete);
2413 ggc_mark_tree (t->lookups);
2414
2415 mark_stmt_tree (&t->x_stmt_tree);
2416 mark_binding_level (&t->bindings);
2417 t = t->prev;
2418 }
2419 }
2420
2421 static tree
2422 store_bindings (names, old_bindings)
2423 tree names, old_bindings;
2424 {
2425 tree t;
2426 for (t = names; t; t = TREE_CHAIN (t))
2427 {
2428 tree binding, t1, id;
2429
2430 if (TREE_CODE (t) == TREE_LIST)
2431 id = TREE_PURPOSE (t);
2432 else
2433 id = DECL_NAME (t);
2434
2435 if (!id
2436 /* Note that we may have an IDENTIFIER_CLASS_VALUE even when
2437 we have no IDENTIFIER_BINDING if we have left the class
2438 scope, but cached the class-level declarations. */
2439 || !(IDENTIFIER_BINDING (id) || IDENTIFIER_CLASS_VALUE (id)))
2440 continue;
2441
2442 for (t1 = old_bindings; t1; t1 = TREE_CHAIN (t1))
2443 if (TREE_VEC_ELT (t1, 0) == id)
2444 goto skip_it;
2445
2446 binding = make_tree_vec (4);
2447
2448 if (id)
2449 {
2450 my_friendly_assert (TREE_CODE (id) == IDENTIFIER_NODE, 135);
2451 TREE_VEC_ELT (binding, 0) = id;
2452 TREE_VEC_ELT (binding, 1) = REAL_IDENTIFIER_TYPE_VALUE (id);
2453 TREE_VEC_ELT (binding, 2) = IDENTIFIER_BINDING (id);
2454 TREE_VEC_ELT (binding, 3) = IDENTIFIER_CLASS_VALUE (id);
2455 IDENTIFIER_BINDING (id) = NULL_TREE;
2456 IDENTIFIER_CLASS_VALUE (id) = NULL_TREE;
2457 }
2458 TREE_CHAIN (binding) = old_bindings;
2459 old_bindings = binding;
2460 skip_it:
2461 ;
2462 }
2463 return old_bindings;
2464 }
2465
2466 void
2467 maybe_push_to_top_level (pseudo)
2468 int pseudo;
2469 {
2470 struct saved_scope *s;
2471 struct binding_level *b;
2472 tree old_bindings;
2473 int need_pop;
2474
2475 s = (struct saved_scope *) xcalloc (1, sizeof (struct saved_scope));
2476
2477 b = scope_chain ? current_binding_level : 0;
2478
2479 /* If we're in the middle of some function, save our state. */
2480 if (cfun)
2481 {
2482 need_pop = 1;
2483 push_function_context_to (NULL_TREE);
2484 }
2485 else
2486 need_pop = 0;
2487
2488 old_bindings = NULL_TREE;
2489 if (scope_chain && previous_class_type)
2490 old_bindings = store_bindings (previous_class_values, old_bindings);
2491
2492 /* Have to include global_binding_level, because class-level decls
2493 aren't listed anywhere useful. */
2494 for (; b; b = b->level_chain)
2495 {
2496 tree t;
2497
2498 /* Template IDs are inserted into the global level. If they were
2499 inserted into namespace level, finish_file wouldn't find them
2500 when doing pending instantiations. Therefore, don't stop at
2501 namespace level, but continue until :: . */
2502 if (b == global_binding_level || (pseudo && b->template_parms_p))
2503 break;
2504
2505 old_bindings = store_bindings (b->names, old_bindings);
2506 /* We also need to check class_shadowed to save class-level type
2507 bindings, since pushclass doesn't fill in b->names. */
2508 if (b->parm_flag == 2)
2509 old_bindings = store_bindings (b->class_shadowed, old_bindings);
2510
2511 /* Unwind type-value slots back to top level. */
2512 for (t = b->type_shadowed; t; t = TREE_CHAIN (t))
2513 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (t), TREE_VALUE (t));
2514 }
2515 s->prev = scope_chain;
2516 s->old_bindings = old_bindings;
2517 s->bindings = b;
2518 s->need_pop_function_context = need_pop;
2519 s->function_decl = current_function_decl;
2520
2521 scope_chain = s;
2522 current_function_decl = NULL_TREE;
2523 VARRAY_TREE_INIT (current_lang_base, 10, "current_lang_base");
2524 current_lang_stack = &VARRAY_TREE (current_lang_base, 0);
2525 current_lang_name = lang_name_cplusplus;
2526 strict_prototype = strict_prototypes_lang_cplusplus;
2527 current_namespace = global_namespace;
2528 }
2529
2530 void
2531 push_to_top_level ()
2532 {
2533 maybe_push_to_top_level (0);
2534 }
2535
2536 void
2537 pop_from_top_level ()
2538 {
2539 struct saved_scope *s = scope_chain;
2540 tree t;
2541
2542 /* Clear out class-level bindings cache. */
2543 if (previous_class_type)
2544 invalidate_class_lookup_cache ();
2545
2546 VARRAY_FREE (current_lang_base);
2547
2548 scope_chain = s->prev;
2549 for (t = s->old_bindings; t; t = TREE_CHAIN (t))
2550 {
2551 tree id = TREE_VEC_ELT (t, 0);
2552 if (id)
2553 {
2554 SET_IDENTIFIER_TYPE_VALUE (id, TREE_VEC_ELT (t, 1));
2555 IDENTIFIER_BINDING (id) = TREE_VEC_ELT (t, 2);
2556 IDENTIFIER_CLASS_VALUE (id) = TREE_VEC_ELT (t, 3);
2557 }
2558 }
2559
2560 if (current_lang_name == lang_name_cplusplus)
2561 strict_prototype = strict_prototypes_lang_cplusplus;
2562 else if (current_lang_name == lang_name_c)
2563 strict_prototype = strict_prototypes_lang_c;
2564
2565 /* If we were in the middle of compiling a function, restore our
2566 state. */
2567 if (s->need_pop_function_context)
2568 pop_function_context_from (NULL_TREE);
2569 current_function_decl = s->function_decl;
2570
2571 free (s);
2572 }
2573 \f
2574 /* Push a definition of struct, union or enum tag "name".
2575 into binding_level "b". "type" should be the type node,
2576 We assume that the tag "name" is not already defined.
2577
2578 Note that the definition may really be just a forward reference.
2579 In that case, the TYPE_SIZE will be a NULL_TREE.
2580
2581 C++ gratuitously puts all these tags in the name space. */
2582
2583 /* When setting the IDENTIFIER_TYPE_VALUE field of an identifier ID,
2584 record the shadowed value for this binding contour. TYPE is
2585 the type that ID maps to. */
2586
2587 static void
2588 set_identifier_type_value_with_scope (id, type, b)
2589 tree id;
2590 tree type;
2591 struct binding_level *b;
2592 {
2593 if (!b->namespace_p)
2594 {
2595 /* Shadow the marker, not the real thing, so that the marker
2596 gets restored later. */
2597 tree old_type_value = REAL_IDENTIFIER_TYPE_VALUE (id);
2598 b->type_shadowed
2599 = tree_cons (id, old_type_value, b->type_shadowed);
2600 }
2601 else
2602 {
2603 tree binding = binding_for_name (id, current_namespace);
2604 BINDING_TYPE (binding) = type;
2605 /* Store marker instead of real type. */
2606 type = global_type_node;
2607 }
2608 SET_IDENTIFIER_TYPE_VALUE (id, type);
2609 }
2610
2611 /* As set_identifier_type_value_with_scope, but using current_binding_level. */
2612
2613 void
2614 set_identifier_type_value (id, type)
2615 tree id;
2616 tree type;
2617 {
2618 set_identifier_type_value_with_scope (id, type, current_binding_level);
2619 }
2620
2621 /* Return the type associated with id. */
2622
2623 tree
2624 identifier_type_value (id)
2625 tree id;
2626 {
2627 /* There is no type with that name, anywhere. */
2628 if (REAL_IDENTIFIER_TYPE_VALUE (id) == NULL_TREE)
2629 return NULL_TREE;
2630 /* This is not the type marker, but the real thing. */
2631 if (REAL_IDENTIFIER_TYPE_VALUE (id) != global_type_node)
2632 return REAL_IDENTIFIER_TYPE_VALUE (id);
2633 /* Have to search for it. It must be on the global level, now.
2634 Ask lookup_name not to return non-types. */
2635 id = lookup_name_real (id, 2, 1, 0);
2636 if (id)
2637 return TREE_TYPE (id);
2638 return NULL_TREE;
2639 }
2640
2641 /* Pop off extraneous binding levels left over due to syntax errors.
2642
2643 We don't pop past namespaces, as they might be valid. */
2644
2645 void
2646 pop_everything ()
2647 {
2648 #ifdef DEBUG_CP_BINDING_LEVELS
2649 fprintf (stderr, "XXX entering pop_everything ()\n");
2650 #endif
2651 while (!toplevel_bindings_p ())
2652 {
2653 if (current_binding_level->parm_flag == 2)
2654 pop_nested_class ();
2655 else
2656 poplevel (0, 0, 0);
2657 }
2658 #ifdef DEBUG_CP_BINDING_LEVELS
2659 fprintf (stderr, "XXX leaving pop_everything ()\n");
2660 #endif
2661 }
2662
2663 /* The type TYPE is being declared. If it is a class template, or a
2664 specialization of a class template, do any processing required and
2665 perform error-checking. If IS_FRIEND is non-zero, this TYPE is
2666 being declared a friend. B is the binding level at which this TYPE
2667 should be bound.
2668
2669 Returns the TYPE_DECL for TYPE, which may have been altered by this
2670 processing. */
2671
2672 static tree
2673 maybe_process_template_type_declaration (type, globalize, b)
2674 tree type;
2675 int globalize;
2676 struct binding_level* b;
2677 {
2678 tree decl = TYPE_NAME (type);
2679
2680 if (processing_template_parmlist)
2681 /* You can't declare a new template type in a template parameter
2682 list. But, you can declare a non-template type:
2683
2684 template <class A*> struct S;
2685
2686 is a forward-declaration of `A'. */
2687 ;
2688 else
2689 {
2690 maybe_check_template_type (type);
2691
2692 my_friendly_assert (IS_AGGR_TYPE (type)
2693 || TREE_CODE (type) == ENUMERAL_TYPE, 0);
2694
2695
2696 if (processing_template_decl)
2697 {
2698 /* This may change after the call to
2699 push_template_decl_real, but we want the original value. */
2700 tree name = DECL_NAME (decl);
2701
2702 decl = push_template_decl_real (decl, globalize);
2703 /* If the current binding level is the binding level for the
2704 template parameters (see the comment in
2705 begin_template_parm_list) and the enclosing level is a class
2706 scope, and we're not looking at a friend, push the
2707 declaration of the member class into the class scope. In the
2708 friend case, push_template_decl will already have put the
2709 friend into global scope, if appropriate. */
2710 if (TREE_CODE (type) != ENUMERAL_TYPE
2711 && !globalize && b->template_parms_p
2712 && b->level_chain->parm_flag == 2)
2713 {
2714 finish_member_declaration (CLASSTYPE_TI_TEMPLATE (type));
2715 /* Put this tag on the list of tags for the class, since
2716 that won't happen below because B is not the class
2717 binding level, but is instead the pseudo-global level. */
2718 b->level_chain->tags =
2719 tree_cons (name, type, b->level_chain->tags);
2720 if (!COMPLETE_TYPE_P (current_class_type))
2721 CLASSTYPE_TAGS (current_class_type) = b->level_chain->tags;
2722 }
2723 }
2724 }
2725
2726 return decl;
2727 }
2728
2729 /* In C++, you don't have to write `struct S' to refer to `S'; you
2730 can just use `S'. We accomplish this by creating a TYPE_DECL as
2731 if the user had written `typedef struct S S'. Create and return
2732 the TYPE_DECL for TYPE. */
2733
2734 tree
2735 create_implicit_typedef (name, type)
2736 tree name;
2737 tree type;
2738 {
2739 tree decl;
2740
2741 decl = build_decl (TYPE_DECL, name, type);
2742 SET_DECL_ARTIFICIAL (decl);
2743 /* There are other implicit type declarations, like the one *within*
2744 a class that allows you to write `S::S'. We must distinguish
2745 amongst these. */
2746 SET_DECL_IMPLICIT_TYPEDEF_P (decl);
2747 TYPE_NAME (type) = decl;
2748
2749 return decl;
2750 }
2751
2752 /* Push a tag name NAME for struct/class/union/enum type TYPE.
2753 Normally put it into the inner-most non-tag-transparent scope,
2754 but if GLOBALIZE is true, put it in the inner-most non-class scope.
2755 The latter is needed for implicit declarations. */
2756
2757 void
2758 pushtag (name, type, globalize)
2759 tree name, type;
2760 int globalize;
2761 {
2762 register struct binding_level *b;
2763
2764 b = current_binding_level;
2765 while (b->tag_transparent
2766 || (globalize && b->parm_flag == 2))
2767 b = b->level_chain;
2768
2769 b->tags = tree_cons (name, type, b->tags);
2770
2771 if (name)
2772 {
2773 /* Do C++ gratuitous typedefing. */
2774 if (IDENTIFIER_TYPE_VALUE (name) != type)
2775 {
2776 register tree d = NULL_TREE;
2777 int in_class = 0;
2778 tree context = TYPE_CONTEXT (type);
2779
2780 if (! context)
2781 {
2782 tree cs = current_scope ();
2783
2784 if (! globalize)
2785 context = cs;
2786 else if (cs != NULL_TREE && TYPE_P (cs))
2787 /* When declaring a friend class of a local class, we want
2788 to inject the newly named class into the scope
2789 containing the local class, not the namespace scope. */
2790 context = decl_function_context (get_type_decl (cs));
2791 }
2792 if (!context)
2793 context = current_namespace;
2794
2795 if ((b->template_parms_p && b->level_chain->parm_flag == 2)
2796 || b->parm_flag == 2)
2797 in_class = 1;
2798
2799 if (current_lang_name == lang_name_java)
2800 TYPE_FOR_JAVA (type) = 1;
2801
2802 d = create_implicit_typedef (name, type);
2803 DECL_CONTEXT (d) = FROB_CONTEXT (context);
2804 if (! in_class)
2805 set_identifier_type_value_with_scope (name, type, b);
2806
2807 d = maybe_process_template_type_declaration (type,
2808 globalize, b);
2809
2810 if (b->parm_flag == 2)
2811 {
2812 if (!PROCESSING_REAL_TEMPLATE_DECL_P ())
2813 /* Put this TYPE_DECL on the TYPE_FIELDS list for the
2814 class. But if it's a member template class, we
2815 want the TEMPLATE_DECL, not the TYPE_DECL, so this
2816 is done later. */
2817 finish_member_declaration (d);
2818 else
2819 pushdecl_class_level (d);
2820 }
2821 else
2822 d = pushdecl_with_scope (d, b);
2823
2824 if (ANON_AGGRNAME_P (name))
2825 DECL_IGNORED_P (d) = 1;
2826
2827 TYPE_CONTEXT (type) = DECL_CONTEXT (d);
2828 DECL_ASSEMBLER_NAME (d) = DECL_NAME (d);
2829 if (!uses_template_parms (type))
2830 DECL_ASSEMBLER_NAME (d)
2831 = get_identifier (build_overload_name (type, 1, 1));
2832 }
2833 if (b->parm_flag == 2)
2834 {
2835 if (!COMPLETE_TYPE_P (current_class_type))
2836 CLASSTYPE_TAGS (current_class_type) = b->tags;
2837 }
2838 }
2839
2840 if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL)
2841 /* Use the canonical TYPE_DECL for this node. */
2842 TYPE_STUB_DECL (type) = TYPE_NAME (type);
2843 else
2844 {
2845 /* Create a fake NULL-named TYPE_DECL node whose TREE_TYPE
2846 will be the tagged type we just added to the current
2847 binding level. This fake NULL-named TYPE_DECL node helps
2848 dwarfout.c to know when it needs to output a
2849 representation of a tagged type, and it also gives us a
2850 convenient place to record the "scope start" address for
2851 the tagged type. */
2852
2853 tree d = build_decl (TYPE_DECL, NULL_TREE, type);
2854 TYPE_STUB_DECL (type) = pushdecl_with_scope (d, b);
2855 }
2856 }
2857
2858 /* Counter used to create anonymous type names. */
2859
2860 static int anon_cnt = 0;
2861
2862 /* Return an IDENTIFIER which can be used as a name for
2863 anonymous structs and unions. */
2864
2865 tree
2866 make_anon_name ()
2867 {
2868 char buf[32];
2869
2870 sprintf (buf, ANON_AGGRNAME_FORMAT, anon_cnt++);
2871 return get_identifier (buf);
2872 }
2873
2874 /* Clear the TREE_PURPOSE slot of tags which have anonymous typenames.
2875 This keeps dbxout from getting confused. */
2876
2877 void
2878 clear_anon_tags ()
2879 {
2880 register struct binding_level *b;
2881 register tree tags;
2882 static int last_cnt = 0;
2883
2884 /* Fast out if no new anon names were declared. */
2885 if (last_cnt == anon_cnt)
2886 return;
2887
2888 b = current_binding_level;
2889 while (b->tag_transparent)
2890 b = b->level_chain;
2891 tags = b->tags;
2892 while (tags)
2893 {
2894 /* A NULL purpose means we have already processed all tags
2895 from here to the end of the list. */
2896 if (TREE_PURPOSE (tags) == NULL_TREE)
2897 break;
2898 if (ANON_AGGRNAME_P (TREE_PURPOSE (tags)))
2899 TREE_PURPOSE (tags) = NULL_TREE;
2900 tags = TREE_CHAIN (tags);
2901 }
2902 last_cnt = anon_cnt;
2903 }
2904 \f
2905 /* Subroutine of duplicate_decls: return truthvalue of whether
2906 or not types of these decls match.
2907
2908 For C++, we must compare the parameter list so that `int' can match
2909 `int&' in a parameter position, but `int&' is not confused with
2910 `const int&'. */
2911
2912 int
2913 decls_match (newdecl, olddecl)
2914 tree newdecl, olddecl;
2915 {
2916 int types_match;
2917
2918 if (newdecl == olddecl)
2919 return 1;
2920
2921 if (TREE_CODE (newdecl) != TREE_CODE (olddecl))
2922 /* If the two DECLs are not even the same kind of thing, we're not
2923 interested in their types. */
2924 return 0;
2925
2926 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2927 {
2928 tree f1 = TREE_TYPE (newdecl);
2929 tree f2 = TREE_TYPE (olddecl);
2930 tree p1 = TYPE_ARG_TYPES (f1);
2931 tree p2 = TYPE_ARG_TYPES (f2);
2932
2933 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
2934 && ! (DECL_LANGUAGE (newdecl) == lang_c
2935 && DECL_LANGUAGE (olddecl) == lang_c))
2936 return 0;
2937
2938 if (TREE_CODE (f1) != TREE_CODE (f2))
2939 return 0;
2940
2941 if (same_type_p (TREE_TYPE (f1), TREE_TYPE (f2)))
2942 {
2943 if (! strict_prototypes_lang_c && DECL_LANGUAGE (olddecl) == lang_c
2944 && p2 == NULL_TREE)
2945 {
2946 types_match = self_promoting_args_p (p1);
2947 if (p1 == void_list_node)
2948 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
2949 }
2950 else if (!strict_prototypes_lang_c && DECL_LANGUAGE (olddecl)==lang_c
2951 && DECL_LANGUAGE (newdecl) == lang_c && p1 == NULL_TREE)
2952 {
2953 types_match = self_promoting_args_p (p2);
2954 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
2955 }
2956 else
2957 types_match = compparms (p1, p2);
2958 }
2959 else
2960 types_match = 0;
2961 }
2962 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
2963 {
2964 if (!comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
2965 DECL_TEMPLATE_PARMS (olddecl)))
2966 return 0;
2967
2968 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
2969 types_match = 1;
2970 else
2971 types_match = decls_match (DECL_TEMPLATE_RESULT (olddecl),
2972 DECL_TEMPLATE_RESULT (newdecl));
2973 }
2974 else
2975 {
2976 if (TREE_TYPE (newdecl) == error_mark_node)
2977 types_match = TREE_TYPE (olddecl) == error_mark_node;
2978 else if (TREE_TYPE (olddecl) == NULL_TREE)
2979 types_match = TREE_TYPE (newdecl) == NULL_TREE;
2980 else if (TREE_TYPE (newdecl) == NULL_TREE)
2981 types_match = 0;
2982 else
2983 types_match = comptypes (TREE_TYPE (newdecl),
2984 TREE_TYPE (olddecl),
2985 COMPARE_REDECLARATION);
2986 }
2987
2988 return types_match;
2989 }
2990
2991 /* If NEWDECL is `static' and an `extern' was seen previously,
2992 warn about it. OLDDECL is the previous declaration.
2993
2994 Note that this does not apply to the C++ case of declaring
2995 a variable `extern const' and then later `const'.
2996
2997 Don't complain about built-in functions, since they are beyond
2998 the user's control. */
2999
3000 static void
3001 warn_extern_redeclared_static (newdecl, olddecl)
3002 tree newdecl, olddecl;
3003 {
3004 static const char *explicit_extern_static_warning
3005 = "`%D' was declared `extern' and later `static'";
3006 static const char *implicit_extern_static_warning
3007 = "`%D' was declared implicitly `extern' and later `static'";
3008
3009 tree name;
3010
3011 if (TREE_CODE (newdecl) == TYPE_DECL
3012 || TREE_CODE (newdecl) == TEMPLATE_DECL)
3013 return;
3014
3015 /* Don't get confused by static member functions; that's a different
3016 use of `static'. */
3017 if (TREE_CODE (newdecl) == FUNCTION_DECL
3018 && DECL_STATIC_FUNCTION_P (newdecl))
3019 return;
3020
3021 /* If the old declaration was `static', or the new one isn't, then
3022 then everything is OK. */
3023 if (DECL_THIS_STATIC (olddecl) || !DECL_THIS_STATIC (newdecl))
3024 return;
3025
3026 /* It's OK to declare a builtin function as `static'. */
3027 if (TREE_CODE (olddecl) == FUNCTION_DECL
3028 && DECL_ARTIFICIAL (olddecl))
3029 return;
3030
3031 name = DECL_ASSEMBLER_NAME (newdecl);
3032 cp_pedwarn (IDENTIFIER_IMPLICIT_DECL (name)
3033 ? implicit_extern_static_warning
3034 : explicit_extern_static_warning, newdecl);
3035 cp_pedwarn_at ("previous declaration of `%D'", olddecl);
3036 }
3037
3038 /* Handle when a new declaration NEWDECL has the same name as an old
3039 one OLDDECL in the same binding contour. Prints an error message
3040 if appropriate.
3041
3042 If safely possible, alter OLDDECL to look like NEWDECL, and return 1.
3043 Otherwise, return 0. */
3044
3045 int
3046 duplicate_decls (newdecl, olddecl)
3047 tree newdecl, olddecl;
3048 {
3049 unsigned olddecl_uid = DECL_UID (olddecl);
3050 int olddecl_friend = 0, types_match = 0;
3051 int new_defines_function = 0;
3052
3053 if (newdecl == olddecl)
3054 return 1;
3055
3056 types_match = decls_match (newdecl, olddecl);
3057
3058 /* If either the type of the new decl or the type of the old decl is an
3059 error_mark_node, then that implies that we have already issued an
3060 error (earlier) for some bogus type specification, and in that case,
3061 it is rather pointless to harass the user with yet more error message
3062 about the same declaration, so just pretend the types match here. */
3063 if (TREE_TYPE (newdecl) == error_mark_node
3064 || TREE_TYPE (olddecl) == error_mark_node)
3065 types_match = 1;
3066
3067 /* Check for redeclaration and other discrepancies. */
3068 if (TREE_CODE (olddecl) == FUNCTION_DECL
3069 && DECL_ARTIFICIAL (olddecl))
3070 {
3071 if (TREE_CODE (newdecl) != FUNCTION_DECL)
3072 {
3073 /* If you declare a built-in or predefined function name as static,
3074 the old definition is overridden, but optionally warn this was a
3075 bad choice of name. */
3076 if (! TREE_PUBLIC (newdecl))
3077 {
3078 if (warn_shadow)
3079 cp_warning ("shadowing %s function `%#D'",
3080 DECL_BUILT_IN (olddecl) ? "built-in" : "library",
3081 olddecl);
3082 /* Discard the old built-in function. */
3083 return 0;
3084 }
3085 /* If the built-in is not ansi, then programs can override
3086 it even globally without an error. */
3087 else if (! DECL_BUILT_IN (olddecl))
3088 cp_warning ("library function `%#D' redeclared as non-function `%#D'",
3089 olddecl, newdecl);
3090 else
3091 {
3092 cp_error ("declaration of `%#D'", newdecl);
3093 cp_error ("conflicts with built-in declaration `%#D'",
3094 olddecl);
3095 }
3096 return 0;
3097 }
3098 else if (!types_match)
3099 {
3100 if ((DECL_LANGUAGE (newdecl) == lang_c
3101 && DECL_LANGUAGE (olddecl) == lang_c)
3102 || compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
3103 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
3104 {
3105 /* A near match; override the builtin. */
3106
3107 if (TREE_PUBLIC (newdecl))
3108 {
3109 cp_warning ("new declaration `%#D'", newdecl);
3110 cp_warning ("ambiguates built-in declaration `%#D'",
3111 olddecl);
3112 }
3113 else if (warn_shadow)
3114 cp_warning ("shadowing %s function `%#D'",
3115 DECL_BUILT_IN (olddecl) ? "built-in" : "library",
3116 olddecl);
3117 }
3118 else
3119 /* Discard the old built-in function. */
3120 return 0;
3121 }
3122
3123 if (DECL_THIS_STATIC (newdecl) && !DECL_THIS_STATIC (olddecl))
3124 {
3125 /* If a builtin function is redeclared as `static', merge
3126 the declarations, but make the original one static. */
3127 DECL_THIS_STATIC (olddecl) = 1;
3128 TREE_PUBLIC (olddecl) = 0;
3129
3130 /* Make the olddeclaration consistent with the new one so that
3131 all remnants of the builtin-ness of this function will be
3132 banished. */
3133 DECL_LANGUAGE (olddecl) = DECL_LANGUAGE (newdecl);
3134 DECL_RTL (olddecl) = DECL_RTL (newdecl);
3135 DECL_ASSEMBLER_NAME (olddecl) = DECL_ASSEMBLER_NAME (newdecl);
3136 SET_IDENTIFIER_GLOBAL_VALUE (DECL_ASSEMBLER_NAME (newdecl),
3137 newdecl);
3138 }
3139 }
3140 else if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
3141 {
3142 if ((TREE_CODE (olddecl) == TYPE_DECL && DECL_ARTIFICIAL (olddecl)
3143 && TREE_CODE (newdecl) != TYPE_DECL
3144 && ! (TREE_CODE (newdecl) == TEMPLATE_DECL
3145 && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL))
3146 || (TREE_CODE (newdecl) == TYPE_DECL && DECL_ARTIFICIAL (newdecl)
3147 && TREE_CODE (olddecl) != TYPE_DECL
3148 && ! (TREE_CODE (olddecl) == TEMPLATE_DECL
3149 && (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl))
3150 == TYPE_DECL))))
3151 {
3152 /* We do nothing special here, because C++ does such nasty
3153 things with TYPE_DECLs. Instead, just let the TYPE_DECL
3154 get shadowed, and know that if we need to find a TYPE_DECL
3155 for a given name, we can look in the IDENTIFIER_TYPE_VALUE
3156 slot of the identifier. */
3157 return 0;
3158 }
3159
3160 if ((TREE_CODE (newdecl) == FUNCTION_DECL
3161 && DECL_FUNCTION_TEMPLATE_P (olddecl))
3162 || (TREE_CODE (olddecl) == FUNCTION_DECL
3163 && DECL_FUNCTION_TEMPLATE_P (newdecl)))
3164 return 0;
3165
3166 cp_error ("`%#D' redeclared as different kind of symbol", newdecl);
3167 if (TREE_CODE (olddecl) == TREE_LIST)
3168 olddecl = TREE_VALUE (olddecl);
3169 cp_error_at ("previous declaration of `%#D'", olddecl);
3170
3171 /* New decl is completely inconsistent with the old one =>
3172 tell caller to replace the old one. */
3173
3174 return 0;
3175 }
3176 else if (!types_match)
3177 {
3178 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl))
3179 /* These are certainly not duplicate declarations; they're
3180 from different scopes. */
3181 return 0;
3182
3183 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
3184 {
3185 /* The name of a class template may not be declared to refer to
3186 any other template, class, function, object, namespace, value,
3187 or type in the same scope. */
3188 if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == TYPE_DECL
3189 || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
3190 {
3191 cp_error ("declaration of template `%#D'", newdecl);
3192 cp_error_at ("conflicts with previous declaration `%#D'",
3193 olddecl);
3194 }
3195 else if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == FUNCTION_DECL
3196 && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
3197 && compparms (TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl))),
3198 TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl))))
3199 && comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
3200 DECL_TEMPLATE_PARMS (olddecl)))
3201 {
3202 cp_error ("new declaration `%#D'", newdecl);
3203 cp_error_at ("ambiguates old declaration `%#D'", olddecl);
3204 }
3205 return 0;
3206 }
3207 if (TREE_CODE (newdecl) == FUNCTION_DECL)
3208 {
3209 if (DECL_LANGUAGE (newdecl) == lang_c
3210 && DECL_LANGUAGE (olddecl) == lang_c)
3211 {
3212 cp_error ("declaration of C function `%#D' conflicts with",
3213 newdecl);
3214 cp_error_at ("previous declaration `%#D' here", olddecl);
3215 }
3216 else if (compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
3217 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
3218 {
3219 cp_error ("new declaration `%#D'", newdecl);
3220 cp_error_at ("ambiguates old declaration `%#D'", olddecl);
3221 }
3222 else
3223 return 0;
3224 }
3225
3226 /* Already complained about this, so don't do so again. */
3227 else if (current_class_type == NULL_TREE
3228 || IDENTIFIER_ERROR_LOCUS (DECL_ASSEMBLER_NAME (newdecl)) != current_class_type)
3229 {
3230 cp_error ("conflicting types for `%#D'", newdecl);
3231 cp_error_at ("previous declaration as `%#D'", olddecl);
3232 }
3233 }
3234 else if (TREE_CODE (newdecl) == FUNCTION_DECL
3235 && ((DECL_TEMPLATE_SPECIALIZATION (olddecl)
3236 && (!DECL_TEMPLATE_INFO (newdecl)
3237 || (DECL_TI_TEMPLATE (newdecl)
3238 != DECL_TI_TEMPLATE (olddecl))))
3239 || (DECL_TEMPLATE_SPECIALIZATION (newdecl)
3240 && (!DECL_TEMPLATE_INFO (olddecl)
3241 || (DECL_TI_TEMPLATE (olddecl)
3242 != DECL_TI_TEMPLATE (newdecl))))))
3243 /* It's OK to have a template specialization and a non-template
3244 with the same type, or to have specializations of two
3245 different templates with the same type. Note that if one is a
3246 specialization, and the other is an instantiation of the same
3247 template, that we do not exit at this point. That situation
3248 can occur if we instantiate a template class, and then
3249 specialize one of its methods. This situation is legal, but
3250 the declarations must be merged in the usual way. */
3251 return 0;
3252 else if (TREE_CODE (newdecl) == FUNCTION_DECL
3253 && ((DECL_TEMPLATE_INSTANTIATION (olddecl)
3254 && !DECL_USE_TEMPLATE (newdecl))
3255 || (DECL_TEMPLATE_INSTANTIATION (newdecl)
3256 && !DECL_USE_TEMPLATE (olddecl))))
3257 /* One of the declarations is a template instantiation, and the
3258 other is not a template at all. That's OK. */
3259 return 0;
3260 else if (TREE_CODE (newdecl) == NAMESPACE_DECL
3261 && DECL_NAMESPACE_ALIAS (newdecl)
3262 && DECL_NAMESPACE_ALIAS (newdecl) == DECL_NAMESPACE_ALIAS (olddecl))
3263 /* Redeclaration of namespace alias, ignore it. */
3264 return 1;
3265 else
3266 {
3267 const char *errmsg = redeclaration_error_message (newdecl, olddecl);
3268 if (errmsg)
3269 {
3270 cp_error (errmsg, newdecl);
3271 if (DECL_NAME (olddecl) != NULL_TREE)
3272 cp_error_at ((DECL_INITIAL (olddecl)
3273 && namespace_bindings_p ())
3274 ? "`%#D' previously defined here"
3275 : "`%#D' previously declared here", olddecl);
3276 }
3277 else if (TREE_CODE (olddecl) == FUNCTION_DECL
3278 && DECL_INITIAL (olddecl) != NULL_TREE
3279 && TYPE_ARG_TYPES (TREE_TYPE (olddecl)) == NULL_TREE
3280 && TYPE_ARG_TYPES (TREE_TYPE (newdecl)) != NULL_TREE)
3281 {
3282 /* Prototype decl follows defn w/o prototype. */
3283 cp_warning_at ("prototype for `%#D'", newdecl);
3284 cp_warning_at ("follows non-prototype definition here", olddecl);
3285 }
3286 else if (TREE_CODE (olddecl) == FUNCTION_DECL
3287 && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl))
3288 {
3289 /* extern "C" int foo ();
3290 int foo () { bar (); }
3291 is OK. */
3292 if (current_lang_stack
3293 == &VARRAY_TREE (current_lang_base, 0))
3294 DECL_LANGUAGE (newdecl) = DECL_LANGUAGE (olddecl);
3295 else
3296 {
3297 cp_error_at ("previous declaration of `%#D' with %L linkage",
3298 olddecl, DECL_LANGUAGE (olddecl));
3299 cp_error ("conflicts with new declaration with %L linkage",
3300 DECL_LANGUAGE (newdecl));
3301 }
3302 }
3303
3304 if (DECL_LANG_SPECIFIC (olddecl) && DECL_USE_TEMPLATE (olddecl))
3305 ;
3306 else if (TREE_CODE (olddecl) == FUNCTION_DECL)
3307 {
3308 tree t1 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
3309 tree t2 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
3310 int i = 1;
3311
3312 if (TREE_CODE (TREE_TYPE (newdecl)) == METHOD_TYPE)
3313 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2);
3314
3315 for (; t1 && t1 != void_list_node;
3316 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2), i++)
3317 if (TREE_PURPOSE (t1) && TREE_PURPOSE (t2))
3318 {
3319 if (1 == simple_cst_equal (TREE_PURPOSE (t1),
3320 TREE_PURPOSE (t2)))
3321 {
3322 if (pedantic)
3323 {
3324 cp_pedwarn ("default argument given for parameter %d of `%#D'",
3325 i, newdecl);
3326 cp_pedwarn_at ("after previous specification in `%#D'",
3327 olddecl);
3328 }
3329 }
3330 else
3331 {
3332 cp_error ("default argument given for parameter %d of `%#D'",
3333 i, newdecl);
3334 cp_error_at ("after previous specification in `%#D'",
3335 olddecl);
3336 }
3337 }
3338
3339 if (DECL_THIS_INLINE (newdecl) && ! DECL_THIS_INLINE (olddecl)
3340 && TREE_ADDRESSABLE (olddecl) && warn_inline)
3341 {
3342 cp_warning ("`%#D' was used before it was declared inline",
3343 newdecl);
3344 cp_warning_at ("previous non-inline declaration here",
3345 olddecl);
3346 }
3347 }
3348 }
3349
3350 /* If new decl is `static' and an `extern' was seen previously,
3351 warn about it. */
3352 warn_extern_redeclared_static (newdecl, olddecl);
3353
3354 /* We have committed to returning 1 at this point. */
3355 if (TREE_CODE (newdecl) == FUNCTION_DECL)
3356 {
3357 /* Now that functions must hold information normally held
3358 by field decls, there is extra work to do so that
3359 declaration information does not get destroyed during
3360 definition. */
3361 if (DECL_VINDEX (olddecl))
3362 DECL_VINDEX (newdecl) = DECL_VINDEX (olddecl);
3363 if (DECL_VIRTUAL_CONTEXT (olddecl))
3364 DECL_VIRTUAL_CONTEXT (newdecl) = DECL_VIRTUAL_CONTEXT (olddecl);
3365 if (DECL_CONTEXT (olddecl))
3366 DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
3367 if (DECL_PENDING_INLINE_INFO (newdecl) == (struct pending_inline *)0)
3368 DECL_PENDING_INLINE_INFO (newdecl) = DECL_PENDING_INLINE_INFO (olddecl);
3369 DECL_STATIC_CONSTRUCTOR (newdecl) |= DECL_STATIC_CONSTRUCTOR (olddecl);
3370 DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
3371 DECL_PURE_VIRTUAL_P (newdecl) |= DECL_PURE_VIRTUAL_P (olddecl);
3372 DECL_VIRTUAL_P (newdecl) |= DECL_VIRTUAL_P (olddecl);
3373 DECL_NEEDS_FINAL_OVERRIDER_P (newdecl) |= DECL_NEEDS_FINAL_OVERRIDER_P (olddecl);
3374 DECL_THIS_STATIC (newdecl) |= DECL_THIS_STATIC (olddecl);
3375 new_defines_function = DECL_INITIAL (newdecl) != NULL_TREE;
3376
3377 /* Optionally warn about more than one declaration for the same
3378 name, but don't warn about a function declaration followed by a
3379 definition. */
3380 if (warn_redundant_decls && ! DECL_ARTIFICIAL (olddecl)
3381 && !(new_defines_function && DECL_INITIAL (olddecl) == NULL_TREE)
3382 /* Don't warn about extern decl followed by definition. */
3383 && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl))
3384 /* Don't warn about friends, let add_friend take care of it. */
3385 && ! DECL_FRIEND_P (newdecl))
3386 {
3387 cp_warning ("redundant redeclaration of `%D' in same scope", newdecl);
3388 cp_warning_at ("previous declaration of `%D'", olddecl);
3389 }
3390 }
3391
3392 /* Deal with C++: must preserve virtual function table size. */
3393 if (TREE_CODE (olddecl) == TYPE_DECL)
3394 {
3395 register tree newtype = TREE_TYPE (newdecl);
3396 register tree oldtype = TREE_TYPE (olddecl);
3397
3398 if (newtype != error_mark_node && oldtype != error_mark_node
3399 && TYPE_LANG_SPECIFIC (newtype) && TYPE_LANG_SPECIFIC (oldtype))
3400 {
3401 CLASSTYPE_VSIZE (newtype) = CLASSTYPE_VSIZE (oldtype);
3402 CLASSTYPE_FRIEND_CLASSES (newtype)
3403 = CLASSTYPE_FRIEND_CLASSES (oldtype);
3404 }
3405 }
3406
3407 /* Copy all the DECL_... slots specified in the new decl
3408 except for any that we copy here from the old type. */
3409 DECL_MACHINE_ATTRIBUTES (newdecl)
3410 = merge_machine_decl_attributes (olddecl, newdecl);
3411
3412 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
3413 {
3414 if (! duplicate_decls (DECL_TEMPLATE_RESULT (newdecl),
3415 DECL_TEMPLATE_RESULT (olddecl)))
3416 cp_error ("invalid redeclaration of %D", newdecl);
3417 TREE_TYPE (olddecl) = TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl));
3418 DECL_TEMPLATE_SPECIALIZATIONS (olddecl)
3419 = chainon (DECL_TEMPLATE_SPECIALIZATIONS (olddecl),
3420 DECL_TEMPLATE_SPECIALIZATIONS (newdecl));
3421
3422 return 1;
3423 }
3424
3425 if (types_match)
3426 {
3427 /* Automatically handles default parameters. */
3428 tree oldtype = TREE_TYPE (olddecl);
3429 tree newtype;
3430
3431 /* Merge the data types specified in the two decls. */
3432 newtype = common_type (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
3433
3434 if (TREE_CODE (newdecl) == VAR_DECL)
3435 DECL_THIS_EXTERN (newdecl) |= DECL_THIS_EXTERN (olddecl);
3436 /* Do this after calling `common_type' so that default
3437 parameters don't confuse us. */
3438 else if (TREE_CODE (newdecl) == FUNCTION_DECL
3439 && (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl))
3440 != TYPE_RAISES_EXCEPTIONS (TREE_TYPE (olddecl))))
3441 {
3442 TREE_TYPE (newdecl) = build_exception_variant (newtype,
3443 TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl)));
3444 TREE_TYPE (olddecl) = build_exception_variant (newtype,
3445 TYPE_RAISES_EXCEPTIONS (oldtype));
3446
3447 if ((pedantic || ! DECL_IN_SYSTEM_HEADER (olddecl))
3448 && DECL_SOURCE_LINE (olddecl) != 0
3449 && flag_exceptions
3450 && !comp_except_specs (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl)),
3451 TYPE_RAISES_EXCEPTIONS (TREE_TYPE (olddecl)), 1))
3452 {
3453 cp_error ("declaration of `%F' throws different exceptions",
3454 newdecl);
3455 cp_error_at ("than previous declaration `%F'", olddecl);
3456 }
3457 }
3458 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
3459
3460 /* Lay the type out, unless already done. */
3461 if (! same_type_p (newtype, oldtype)
3462 && TREE_TYPE (newdecl) != error_mark_node
3463 && !(processing_template_decl && uses_template_parms (newdecl)))
3464 layout_type (TREE_TYPE (newdecl));
3465
3466 if ((TREE_CODE (newdecl) == VAR_DECL
3467 || TREE_CODE (newdecl) == PARM_DECL
3468 || TREE_CODE (newdecl) == RESULT_DECL
3469 || TREE_CODE (newdecl) == FIELD_DECL
3470 || TREE_CODE (newdecl) == TYPE_DECL)
3471 && !(processing_template_decl && uses_template_parms (newdecl)))
3472 layout_decl (newdecl, 0);
3473
3474 /* Merge the type qualifiers. */
3475 if (TREE_READONLY (newdecl))
3476 TREE_READONLY (olddecl) = 1;
3477 if (TREE_THIS_VOLATILE (newdecl))
3478 TREE_THIS_VOLATILE (olddecl) = 1;
3479
3480 /* Merge the initialization information. */
3481 if (DECL_INITIAL (newdecl) == NULL_TREE
3482 && DECL_INITIAL (olddecl) != NULL_TREE)
3483 {
3484 DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
3485 DECL_SOURCE_FILE (newdecl) = DECL_SOURCE_FILE (olddecl);
3486 DECL_SOURCE_LINE (newdecl) = DECL_SOURCE_LINE (olddecl);
3487 if (CAN_HAVE_FULL_LANG_DECL_P (newdecl)
3488 && DECL_LANG_SPECIFIC (newdecl)
3489 && DECL_LANG_SPECIFIC (olddecl))
3490 DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
3491 }
3492
3493 /* Merge the section attribute.
3494 We want to issue an error if the sections conflict but that must be
3495 done later in decl_attributes since we are called before attributes
3496 are assigned. */
3497 if (DECL_SECTION_NAME (newdecl) == NULL_TREE)
3498 DECL_SECTION_NAME (newdecl) = DECL_SECTION_NAME (olddecl);
3499
3500 /* Keep the old rtl since we can safely use it. */
3501 DECL_RTL (newdecl) = DECL_RTL (olddecl);
3502
3503 if (TREE_CODE (newdecl) == FUNCTION_DECL)
3504 {
3505 DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (newdecl)
3506 |= DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (olddecl);
3507 DECL_NO_CHECK_MEMORY_USAGE (newdecl)
3508 |= DECL_NO_CHECK_MEMORY_USAGE (olddecl);
3509 DECL_NO_LIMIT_STACK (newdecl)
3510 |= DECL_NO_LIMIT_STACK (olddecl);
3511 }
3512 }
3513 /* If cannot merge, then use the new type and qualifiers,
3514 and don't preserve the old rtl. */
3515 else
3516 {
3517 /* Clean out any memory we had of the old declaration. */
3518 tree oldstatic = value_member (olddecl, static_aggregates);
3519 if (oldstatic)
3520 TREE_VALUE (oldstatic) = error_mark_node;
3521
3522 TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
3523 TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
3524 TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
3525 TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
3526 }
3527
3528 /* Merge the storage class information. */
3529 DECL_WEAK (newdecl) |= DECL_WEAK (olddecl);
3530 DECL_ONE_ONLY (newdecl) |= DECL_ONE_ONLY (olddecl);
3531 DECL_DEFER_OUTPUT (newdecl) |= DECL_DEFER_OUTPUT (olddecl);
3532 TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
3533 TREE_STATIC (olddecl) = TREE_STATIC (newdecl) |= TREE_STATIC (olddecl);
3534 if (! DECL_EXTERNAL (olddecl))
3535 DECL_EXTERNAL (newdecl) = 0;
3536
3537 if (DECL_LANG_SPECIFIC (newdecl) && DECL_LANG_SPECIFIC (olddecl))
3538 {
3539 DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl);
3540 DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl);
3541 DECL_COMDAT (newdecl) |= DECL_COMDAT (olddecl);
3542 DECL_TEMPLATE_INSTANTIATED (newdecl)
3543 |= DECL_TEMPLATE_INSTANTIATED (olddecl);
3544 /* Don't really know how much of the language-specific
3545 values we should copy from old to new. */
3546 DECL_IN_AGGR_P (newdecl) = DECL_IN_AGGR_P (olddecl);
3547 DECL_ACCESS (newdecl) = DECL_ACCESS (olddecl);
3548 DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl);
3549 DECL_TEMPLATE_INFO (newdecl) = DECL_TEMPLATE_INFO (olddecl);
3550 olddecl_friend = DECL_FRIEND_P (olddecl);
3551
3552 /* Only functions have DECL_BEFRIENDING_CLASSES. */
3553 if (TREE_CODE (newdecl) == FUNCTION_DECL
3554 || DECL_FUNCTION_TEMPLATE_P (newdecl))
3555 DECL_BEFRIENDING_CLASSES (newdecl)
3556 = chainon (DECL_BEFRIENDING_CLASSES (newdecl),
3557 DECL_BEFRIENDING_CLASSES (olddecl));
3558 }
3559
3560 if (TREE_CODE (newdecl) == FUNCTION_DECL)
3561 {
3562 if (DECL_TEMPLATE_INSTANTIATION (olddecl)
3563 && !DECL_TEMPLATE_INSTANTIATION (newdecl))
3564 {
3565 /* If newdecl is not a specialization, then it is not a
3566 template-related function at all. And that means that we
3567 shoud have exited above, returning 0. */
3568 my_friendly_assert (DECL_TEMPLATE_SPECIALIZATION (newdecl),
3569 0);
3570
3571 if (TREE_USED (olddecl))
3572 /* From [temp.expl.spec]:
3573
3574 If a template, a member template or the member of a class
3575 template is explicitly specialized then that
3576 specialization shall be declared before the first use of
3577 that specialization that would cause an implicit
3578 instantiation to take place, in every translation unit in
3579 which such a use occurs. */
3580 cp_error ("explicit specialization of %D after first use",
3581 olddecl);
3582
3583 SET_DECL_TEMPLATE_SPECIALIZATION (olddecl);
3584 }
3585 DECL_THIS_INLINE (newdecl) |= DECL_THIS_INLINE (olddecl);
3586
3587 /* If either decl says `inline', this fn is inline, unless its
3588 definition was passed already. */
3589 if (DECL_INLINE (newdecl) && DECL_INITIAL (olddecl) == NULL_TREE)
3590 DECL_INLINE (olddecl) = 1;
3591 DECL_INLINE (newdecl) = DECL_INLINE (olddecl);
3592
3593 if (! types_match)
3594 {
3595 DECL_LANGUAGE (olddecl) = DECL_LANGUAGE (newdecl);
3596 DECL_ASSEMBLER_NAME (olddecl) = DECL_ASSEMBLER_NAME (newdecl);
3597 DECL_RTL (olddecl) = DECL_RTL (newdecl);
3598 }
3599 if (! types_match || new_defines_function)
3600 {
3601 /* These need to be copied so that the names are available.
3602 Note that if the types do match, we'll preserve inline
3603 info and other bits, but if not, we won't. */
3604 DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
3605 DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
3606 }
3607 if (new_defines_function)
3608 /* If defining a function declared with other language
3609 linkage, use the previously declared language linkage. */
3610 DECL_LANGUAGE (newdecl) = DECL_LANGUAGE (olddecl);
3611 else if (types_match)
3612 {
3613 /* If redeclaring a builtin function, and not a definition,
3614 it stays built in. */
3615 if (DECL_BUILT_IN (olddecl))
3616 {
3617 DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
3618 DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
3619 /* If we're keeping the built-in definition, keep the rtl,
3620 regardless of declaration matches. */
3621 DECL_RTL (newdecl) = DECL_RTL (olddecl);
3622 }
3623 else
3624 DECL_FRAME_SIZE (newdecl) = DECL_FRAME_SIZE (olddecl);
3625
3626 DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
3627 if ((DECL_SAVED_INSNS (newdecl) = DECL_SAVED_INSNS (olddecl)))
3628 /* Previously saved insns go together with
3629 the function's previous definition. */
3630 DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
3631 /* Don't clear out the arguments if we're redefining a function. */
3632 if (DECL_ARGUMENTS (olddecl))
3633 DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
3634 }
3635 }
3636
3637 if (TREE_CODE (newdecl) == NAMESPACE_DECL)
3638 {
3639 NAMESPACE_LEVEL (newdecl) = NAMESPACE_LEVEL (olddecl);
3640 }
3641
3642 /* Now preserve various other info from the definition. */
3643 TREE_ADDRESSABLE (newdecl) = TREE_ADDRESSABLE (olddecl);
3644 TREE_ASM_WRITTEN (newdecl) = TREE_ASM_WRITTEN (olddecl);
3645 DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
3646 DECL_ASSEMBLER_NAME (newdecl) = DECL_ASSEMBLER_NAME (olddecl);
3647
3648 if (TREE_CODE (newdecl) == FUNCTION_DECL)
3649 {
3650 int function_size;
3651
3652 function_size = sizeof (struct tree_decl);
3653
3654 bcopy ((char *) newdecl + sizeof (struct tree_common),
3655 (char *) olddecl + sizeof (struct tree_common),
3656 function_size - sizeof (struct tree_common));
3657
3658 if (DECL_TEMPLATE_INSTANTIATION (newdecl))
3659 {
3660 /* If newdecl is a template instantiation, it is possible that
3661 the following sequence of events has occurred:
3662
3663 o A friend function was declared in a class template. The
3664 class template was instantiated.
3665
3666 o The instantiation of the friend declaration was
3667 recorded on the instantiation list, and is newdecl.
3668
3669 o Later, however, instantiate_class_template called pushdecl
3670 on the newdecl to perform name injection. But, pushdecl in
3671 turn called duplicate_decls when it discovered that another
3672 declaration of a global function with the same name already
3673 existed.
3674
3675 o Here, in duplicate_decls, we decided to clobber newdecl.
3676
3677 If we're going to do that, we'd better make sure that
3678 olddecl, and not newdecl, is on the list of
3679 instantiations so that if we try to do the instantiation
3680 again we won't get the clobbered declaration. */
3681
3682 tree tmpl = DECL_TI_TEMPLATE (newdecl);
3683 tree decls = DECL_TEMPLATE_SPECIALIZATIONS (tmpl);
3684
3685 for (; decls; decls = TREE_CHAIN (decls))
3686 if (TREE_VALUE (decls) == newdecl)
3687 TREE_VALUE (decls) = olddecl;
3688 }
3689 }
3690 else
3691 {
3692 bcopy ((char *) newdecl + sizeof (struct tree_common),
3693 (char *) olddecl + sizeof (struct tree_common),
3694 sizeof (struct tree_decl) - sizeof (struct tree_common)
3695 + tree_code_length [(int)TREE_CODE (newdecl)] * sizeof (char *));
3696 }
3697
3698 DECL_UID (olddecl) = olddecl_uid;
3699 if (olddecl_friend)
3700 DECL_FRIEND_P (olddecl) = 1;
3701
3702 /* NEWDECL contains the merged attribute lists.
3703 Update OLDDECL to be the same. */
3704 DECL_MACHINE_ATTRIBUTES (olddecl) = DECL_MACHINE_ATTRIBUTES (newdecl);
3705
3706 return 1;
3707 }
3708
3709 /* Record a decl-node X as belonging to the current lexical scope.
3710 Check for errors (such as an incompatible declaration for the same
3711 name already seen in the same scope).
3712
3713 Returns either X or an old decl for the same name.
3714 If an old decl is returned, it may have been smashed
3715 to agree with what X says. */
3716
3717 tree
3718 pushdecl (x)
3719 tree x;
3720 {
3721 register tree t;
3722 register tree name;
3723 int need_new_binding;
3724
3725 /* We shouldn't be calling pushdecl when we're generating RTL for a
3726 function that we already did semantic analysis on previously. */
3727 my_friendly_assert (!cfun || doing_semantic_analysis_p (),
3728 19990913);
3729
3730 name = DECL_ASSEMBLER_NAME (x);
3731 need_new_binding = 1;
3732
3733 if (DECL_TEMPLATE_PARM_P (x))
3734 /* Template parameters have no context; they are not X::T even
3735 when declared within a class or namespace. */
3736 ;
3737 else
3738 {
3739 if (current_function_decl && x != current_function_decl
3740 /* A local declaration for a function doesn't constitute
3741 nesting. */
3742 && !(TREE_CODE (x) == FUNCTION_DECL && !DECL_INITIAL (x))
3743 /* A local declaration for an `extern' variable is in the
3744 scoped of the current namespace, not the current
3745 function. */
3746 && !(TREE_CODE (x) == VAR_DECL && DECL_EXTERNAL (x))
3747 && !DECL_CONTEXT (x))
3748 DECL_CONTEXT (x) = current_function_decl;
3749 if (!DECL_CONTEXT (x))
3750 DECL_CONTEXT (x) = FROB_CONTEXT (current_namespace);
3751
3752 /* If this is the declaration for a namespace-scope function,
3753 but the declaration itself is in a local scope, mark the
3754 declaration. */
3755 if (TREE_CODE (x) == FUNCTION_DECL
3756 && DECL_NAMESPACE_SCOPE_P (x)
3757 && current_function_decl
3758 && x != current_function_decl)
3759 DECL_LOCAL_FUNCTION_P (x) = 1;
3760 }
3761
3762 /* Type are looked up using the DECL_NAME, as that is what the rest of the
3763 compiler wants to use. */
3764 if (TREE_CODE (x) == TYPE_DECL || TREE_CODE (x) == VAR_DECL
3765 || TREE_CODE (x) == NAMESPACE_DECL)
3766 name = DECL_NAME (x);
3767
3768 if (name)
3769 {
3770 #if 0
3771 /* Not needed...see below. */
3772 char *file;
3773 int line;
3774 #endif
3775 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
3776 name = TREE_OPERAND (name, 0);
3777
3778 /* Namespace-scoped variables are not found in the current level. */
3779 if (TREE_CODE (x) == VAR_DECL && DECL_NAMESPACE_SCOPE_P (x))
3780 t = namespace_binding (name, DECL_CONTEXT (x));
3781 else
3782 t = lookup_name_current_level (name);
3783 if (t == error_mark_node)
3784 {
3785 /* error_mark_node is 0 for a while during initialization! */
3786 t = NULL_TREE;
3787 cp_error_at ("`%#D' used prior to declaration", x);
3788 }
3789
3790 else if (t != NULL_TREE)
3791 {
3792 #if 0
3793 /* This is turned off until I have time to do it right (bpk). */
3794 /* With the code below that uses it... */
3795 file = DECL_SOURCE_FILE (t);
3796 line = DECL_SOURCE_LINE (t);
3797 #endif
3798 if (TREE_CODE (t) == PARM_DECL)
3799 {
3800 if (DECL_CONTEXT (t) == NULL_TREE)
3801 fatal ("parse errors have confused me too much");
3802
3803 /* Check for duplicate params. */
3804 if (duplicate_decls (x, t))
3805 return t;
3806 }
3807 else if (((TREE_CODE (x) == FUNCTION_DECL && DECL_LANGUAGE (x) == lang_c)
3808 || DECL_FUNCTION_TEMPLATE_P (x))
3809 && is_overloaded_fn (t))
3810 /* Don't do anything just yet. */;
3811 else if (t == wchar_decl_node)
3812 {
3813 if (pedantic && ! DECL_IN_SYSTEM_HEADER (x))
3814 cp_pedwarn ("redeclaration of wchar_t as `%T'", TREE_TYPE (x));
3815
3816 /* Throw away the redeclaration. */
3817 return t;
3818 }
3819 else if (TREE_CODE (t) != TREE_CODE (x))
3820 {
3821 if (duplicate_decls (x, t))
3822 return t;
3823 }
3824 else if (duplicate_decls (x, t))
3825 {
3826 #if 0
3827 /* This is turned off until I have time to do it right (bpk). */
3828
3829 /* Also warn if they did a prototype with `static' on it, but
3830 then later left the `static' off. */
3831 if (! TREE_PUBLIC (name) && TREE_PUBLIC (x))
3832 {
3833 if (DECL_LANG_SPECIFIC (t) && DECL_FRIEND_P (t))
3834 return t;
3835
3836 if (extra_warnings)
3837 {
3838 cp_warning ("`static' missing from declaration of `%D'",
3839 t);
3840 warning_with_file_and_line (file, line,
3841 "previous declaration of `%s'",
3842 decl_as_string (t, 0));
3843 }
3844
3845 /* Now fix things so it'll do what they expect. */
3846 if (current_function_decl)
3847 TREE_PUBLIC (current_function_decl) = 0;
3848 }
3849 /* Due to interference in memory reclamation (X may be
3850 obstack-deallocated at this point), we must guard against
3851 one really special case. [jason: This should be handled
3852 by start_function] */
3853 if (current_function_decl == x)
3854 current_function_decl = t;
3855 #endif
3856 if (TREE_CODE (t) == TYPE_DECL)
3857 SET_IDENTIFIER_TYPE_VALUE (name, TREE_TYPE (t));
3858 else if (TREE_CODE (t) == FUNCTION_DECL)
3859 check_default_args (t);
3860
3861 return t;
3862 }
3863 else if (DECL_MAIN_P (x))
3864 {
3865 /* A redeclaration of main, but not a duplicate of the
3866 previous one.
3867
3868 [basic.start.main]
3869
3870 This function shall not be overloaded. */
3871 cp_error_at ("invalid redeclaration of `%D'", t);
3872 cp_error ("as `%D'", x);
3873 /* We don't try to push this declaration since that
3874 causes a crash. */
3875 return x;
3876 }
3877 }
3878
3879 check_template_shadow (x);
3880
3881 /* If this is a function conjured up by the backend, massage it
3882 so it looks friendly. */
3883 if (TREE_CODE (x) == FUNCTION_DECL
3884 && ! DECL_LANG_SPECIFIC (x))
3885 {
3886 retrofit_lang_decl (x);
3887 DECL_LANGUAGE (x) = lang_c;
3888 }
3889
3890 if (TREE_CODE (x) == FUNCTION_DECL && ! DECL_FUNCTION_MEMBER_P (x))
3891 {
3892 t = push_overloaded_decl (x, PUSH_LOCAL);
3893 if (t != x)
3894 return t;
3895 if (!namespace_bindings_p ())
3896 /* We do not need to create a binding for this name;
3897 push_overloaded_decl will have already done so if
3898 necessary. */
3899 need_new_binding = 0;
3900 }
3901 else if (DECL_FUNCTION_TEMPLATE_P (x) && DECL_NAMESPACE_SCOPE_P (x))
3902 {
3903 t = push_overloaded_decl (x, PUSH_GLOBAL);
3904 if (t == x)
3905 add_decl_to_level (x, NAMESPACE_LEVEL (CP_DECL_CONTEXT (t)));
3906 return t;
3907 }
3908
3909 /* If declaring a type as a typedef, copy the type (unless we're
3910 at line 0), and install this TYPE_DECL as the new type's typedef
3911 name. See the extensive comment in ../c-decl.c (pushdecl). */
3912 if (TREE_CODE (x) == TYPE_DECL)
3913 {
3914 tree type = TREE_TYPE (x);
3915 if (DECL_SOURCE_LINE (x) == 0)
3916 {
3917 if (TYPE_NAME (type) == 0)
3918 TYPE_NAME (type) = x;
3919 }
3920 else if (type != error_mark_node && TYPE_NAME (type) != x
3921 /* We don't want to copy the type when all we're
3922 doing is making a TYPE_DECL for the purposes of
3923 inlining. */
3924 && (!TYPE_NAME (type)
3925 || TYPE_NAME (type) != DECL_ABSTRACT_ORIGIN (x)))
3926 {
3927 DECL_ORIGINAL_TYPE (x) = type;
3928 type = build_type_copy (type);
3929 TYPE_STUB_DECL (type) = TYPE_STUB_DECL (DECL_ORIGINAL_TYPE (x));
3930 TYPE_NAME (type) = x;
3931 TREE_TYPE (x) = type;
3932 }
3933
3934 if (type != error_mark_node
3935 && TYPE_NAME (type)
3936 && TYPE_IDENTIFIER (type))
3937 set_identifier_type_value_with_scope (DECL_NAME (x), type,
3938 current_binding_level);
3939
3940 }
3941
3942 /* Multiple external decls of the same identifier ought to match.
3943
3944 We get warnings about inline functions where they are defined.
3945 We get warnings about other functions from push_overloaded_decl.
3946
3947 Avoid duplicate warnings where they are used. */
3948 if (TREE_PUBLIC (x) && TREE_CODE (x) != FUNCTION_DECL)
3949 {
3950 tree decl;
3951
3952 if (IDENTIFIER_NAMESPACE_VALUE (name) != NULL_TREE
3953 && (DECL_EXTERNAL (IDENTIFIER_NAMESPACE_VALUE (name))
3954 || TREE_PUBLIC (IDENTIFIER_NAMESPACE_VALUE (name))))
3955 decl = IDENTIFIER_NAMESPACE_VALUE (name);
3956 else
3957 decl = NULL_TREE;
3958
3959 if (decl
3960 /* If different sort of thing, we already gave an error. */
3961 && TREE_CODE (decl) == TREE_CODE (x)
3962 && !same_type_p (TREE_TYPE (x), TREE_TYPE (decl)))
3963 {
3964 cp_pedwarn ("type mismatch with previous external decl", x);
3965 cp_pedwarn_at ("previous external decl of `%#D'", decl);
3966 }
3967 }
3968
3969 /* This name is new in its binding level.
3970 Install the new declaration and return it. */
3971 if (namespace_bindings_p ())
3972 {
3973 /* Install a global value. */
3974
3975 /* If the first global decl has external linkage,
3976 warn if we later see static one. */
3977 if (IDENTIFIER_GLOBAL_VALUE (name) == NULL_TREE && TREE_PUBLIC (x))
3978 TREE_PUBLIC (name) = 1;
3979
3980 if (!(TREE_CODE (x) == TYPE_DECL && DECL_ARTIFICIAL (x)
3981 && t != NULL_TREE)
3982 /* For an ordinary function, we create a binding from
3983 the mangled name (i.e., NAME) to the DECL. But, for
3984 an `extern "C"' function, the mangled name and the
3985 ordinary name are the same so we need not do this. */
3986 && !(TREE_CODE (x) == FUNCTION_DECL &&
3987 DECL_LANGUAGE (x) == lang_c))
3988 {
3989 if (TREE_CODE (x) == FUNCTION_DECL)
3990 my_friendly_assert
3991 ((IDENTIFIER_GLOBAL_VALUE (name) == NULL_TREE)
3992 || (IDENTIFIER_GLOBAL_VALUE (name) == x), 378);
3993 SET_IDENTIFIER_NAMESPACE_VALUE (name, x);
3994 }
3995
3996 /* Don't forget if the function was used via an implicit decl. */
3997 if (IDENTIFIER_IMPLICIT_DECL (name)
3998 && TREE_USED (IDENTIFIER_IMPLICIT_DECL (name)))
3999 TREE_USED (x) = 1;
4000
4001 /* Don't forget if its address was taken in that way. */
4002 if (IDENTIFIER_IMPLICIT_DECL (name)
4003 && TREE_ADDRESSABLE (IDENTIFIER_IMPLICIT_DECL (name)))
4004 TREE_ADDRESSABLE (x) = 1;
4005
4006 /* Warn about mismatches against previous implicit decl. */
4007 if (IDENTIFIER_IMPLICIT_DECL (name) != NULL_TREE
4008 /* If this real decl matches the implicit, don't complain. */
4009 && ! (TREE_CODE (x) == FUNCTION_DECL
4010 && TREE_TYPE (TREE_TYPE (x)) == integer_type_node))
4011 cp_warning
4012 ("`%D' was previously implicitly declared to return `int'", x);
4013
4014 /* If new decl is `static' and an `extern' was seen previously,
4015 warn about it. */
4016 if (x != NULL_TREE && t != NULL_TREE && decls_match (x, t))
4017 warn_extern_redeclared_static (x, t);
4018 }
4019 else
4020 {
4021 /* Here to install a non-global value. */
4022 tree oldlocal = IDENTIFIER_VALUE (name);
4023 tree oldglobal = IDENTIFIER_NAMESPACE_VALUE (name);
4024
4025 if (need_new_binding)
4026 {
4027 push_local_binding (name, x, 0);
4028 /* Because push_local_binding will hook X on to the
4029 current_binding_level's name list, we don't want to
4030 do that again below. */
4031 need_new_binding = 0;
4032 }
4033
4034 /* If this is a TYPE_DECL, push it into the type value slot. */
4035 if (TREE_CODE (x) == TYPE_DECL)
4036 set_identifier_type_value_with_scope (name, TREE_TYPE (x),
4037 current_binding_level);
4038
4039 /* Clear out any TYPE_DECL shadowed by a namespace so that
4040 we won't think this is a type. The C struct hack doesn't
4041 go through namespaces. */
4042 if (TREE_CODE (x) == NAMESPACE_DECL)
4043 set_identifier_type_value_with_scope (name, NULL_TREE,
4044 current_binding_level);
4045
4046 if (oldlocal)
4047 {
4048 tree d = oldlocal;
4049
4050 while (oldlocal
4051 && TREE_CODE (oldlocal) == VAR_DECL
4052 && DECL_DEAD_FOR_LOCAL (oldlocal))
4053 oldlocal = DECL_SHADOWED_FOR_VAR (oldlocal);
4054
4055 if (oldlocal == NULL_TREE)
4056 oldlocal = IDENTIFIER_NAMESPACE_VALUE (DECL_NAME (d));
4057 }
4058
4059 /* If this is an extern function declaration, see if we
4060 have a global definition or declaration for the function. */
4061 if (oldlocal == NULL_TREE
4062 && DECL_EXTERNAL (x)
4063 && oldglobal != NULL_TREE
4064 && TREE_CODE (x) == FUNCTION_DECL
4065 && TREE_CODE (oldglobal) == FUNCTION_DECL)
4066 {
4067 /* We have one. Their types must agree. */
4068 if (decls_match (x, oldglobal))
4069 /* OK */;
4070 else
4071 {
4072 cp_warning ("extern declaration of `%#D' doesn't match", x);
4073 cp_warning_at ("global declaration `%#D'", oldglobal);
4074 }
4075 }
4076 /* If we have a local external declaration,
4077 and no file-scope declaration has yet been seen,
4078 then if we later have a file-scope decl it must not be static. */
4079 if (oldlocal == NULL_TREE
4080 && oldglobal == NULL_TREE
4081 && DECL_EXTERNAL (x)
4082 && TREE_PUBLIC (x))
4083 TREE_PUBLIC (name) = 1;
4084
4085 /* Warn if shadowing an argument at the top level of the body. */
4086 if (oldlocal != NULL_TREE && !DECL_EXTERNAL (x)
4087 /* Inline decls shadow nothing. */
4088 && !DECL_FROM_INLINE (x)
4089 && TREE_CODE (oldlocal) == PARM_DECL
4090 /* Don't complain if it's from an enclosing function. */
4091 && DECL_CONTEXT (oldlocal) == current_function_decl
4092 && TREE_CODE (x) != PARM_DECL)
4093 {
4094 /* Go to where the parms should be and see if we
4095 find them there. */
4096 struct binding_level *b = current_binding_level->level_chain;
4097
4098 if (cleanup_label)
4099 b = b->level_chain;
4100
4101 /* ARM $8.3 */
4102 if (b->parm_flag == 1)
4103 cp_error ("declaration of `%#D' shadows a parameter", name);
4104 }
4105
4106 /* Maybe warn if shadowing something else. */
4107 if (warn_shadow && !DECL_EXTERNAL (x)
4108 /* Inline decls shadow nothing. */
4109 && !DECL_FROM_INLINE (x)
4110 /* No shadow warnings for internally generated vars. */
4111 && ! DECL_ARTIFICIAL (x)
4112 /* No shadow warnings for vars made for inlining. */
4113 && ! DECL_FROM_INLINE (x))
4114 {
4115 if (oldlocal != NULL_TREE && TREE_CODE (oldlocal) == PARM_DECL)
4116 warning ("declaration of `%s' shadows a parameter",
4117 IDENTIFIER_POINTER (name));
4118 else if (IDENTIFIER_CLASS_VALUE (name) != NULL_TREE
4119 && current_class_ptr
4120 && !TREE_STATIC (name))
4121 warning ("declaration of `%s' shadows a member of `this'",
4122 IDENTIFIER_POINTER (name));
4123 else if (oldlocal != NULL_TREE)
4124 warning ("declaration of `%s' shadows previous local",
4125 IDENTIFIER_POINTER (name));
4126 else if (oldglobal != NULL_TREE)
4127 /* XXX shadow warnings in outer-more namespaces */
4128 warning ("declaration of `%s' shadows global declaration",
4129 IDENTIFIER_POINTER (name));
4130 }
4131 }
4132
4133 if (TREE_CODE (x) == FUNCTION_DECL)
4134 check_default_args (x);
4135
4136 /* Keep count of variables in this level with incomplete type. */
4137 if (TREE_CODE (x) == VAR_DECL
4138 && TREE_TYPE (x) != error_mark_node
4139 && ((!COMPLETE_TYPE_P (TREE_TYPE (x))
4140 && PROMOTES_TO_AGGR_TYPE (TREE_TYPE (x), ARRAY_TYPE))
4141 /* RTTI TD entries are created while defining the type_info. */
4142 || (TYPE_LANG_SPECIFIC (TREE_TYPE (x))
4143 && TYPE_BEING_DEFINED (TREE_TYPE (x)))))
4144 {
4145 if (namespace_bindings_p ())
4146 namespace_scope_incomplete
4147 = tree_cons (NULL_TREE, x, namespace_scope_incomplete);
4148 else
4149 current_binding_level->incomplete
4150 = tree_cons (NULL_TREE, x, current_binding_level->incomplete);
4151 }
4152 }
4153
4154 if (need_new_binding)
4155 add_decl_to_level (x,
4156 DECL_NAMESPACE_SCOPE_P (x)
4157 ? NAMESPACE_LEVEL (CP_DECL_CONTEXT (x))
4158 : current_binding_level);
4159
4160 return x;
4161 }
4162
4163 /* Same as pushdecl, but define X in binding-level LEVEL. We rely on the
4164 caller to set DECL_CONTEXT properly. */
4165
4166 static tree
4167 pushdecl_with_scope (x, level)
4168 tree x;
4169 struct binding_level *level;
4170 {
4171 register struct binding_level *b;
4172 tree function_decl = current_function_decl;
4173
4174 current_function_decl = NULL_TREE;
4175 if (level->parm_flag == 2)
4176 {
4177 b = class_binding_level;
4178 class_binding_level = level;
4179 pushdecl_class_level (x);
4180 class_binding_level = b;
4181 }
4182 else
4183 {
4184 b = current_binding_level;
4185 current_binding_level = level;
4186 x = pushdecl (x);
4187 current_binding_level = b;
4188 }
4189 current_function_decl = function_decl;
4190 return x;
4191 }
4192
4193 /* Like pushdecl, only it places X in the current namespace,
4194 if appropriate. */
4195
4196 tree
4197 pushdecl_namespace_level (x)
4198 tree x;
4199 {
4200 register struct binding_level *b = current_binding_level;
4201 register tree t;
4202
4203 t = pushdecl_with_scope (x, NAMESPACE_LEVEL (current_namespace));
4204
4205 /* Now, the type_shadowed stack may screw us. Munge it so it does
4206 what we want. */
4207 if (TREE_CODE (x) == TYPE_DECL)
4208 {
4209 tree name = DECL_NAME (x);
4210 tree newval;
4211 tree *ptr = (tree *)0;
4212 for (; b != global_binding_level; b = b->level_chain)
4213 {
4214 tree shadowed = b->type_shadowed;
4215 for (; shadowed; shadowed = TREE_CHAIN (shadowed))
4216 if (TREE_PURPOSE (shadowed) == name)
4217 {
4218 ptr = &TREE_VALUE (shadowed);
4219 /* Can't break out of the loop here because sometimes
4220 a binding level will have duplicate bindings for
4221 PT names. It's gross, but I haven't time to fix it. */
4222 }
4223 }
4224 newval = TREE_TYPE (x);
4225 if (ptr == (tree *)0)
4226 {
4227 /* @@ This shouldn't be needed. My test case "zstring.cc" trips
4228 up here if this is changed to an assertion. --KR */
4229 SET_IDENTIFIER_TYPE_VALUE (name, newval);
4230 }
4231 else
4232 {
4233 *ptr = newval;
4234 }
4235 }
4236 return t;
4237 }
4238
4239 /* Like pushdecl, only it places X in GLOBAL_BINDING_LEVEL,
4240 if appropriate. */
4241
4242 tree
4243 pushdecl_top_level (x)
4244 tree x;
4245 {
4246 push_to_top_level ();
4247 x = pushdecl_namespace_level (x);
4248 pop_from_top_level ();
4249 return x;
4250 }
4251
4252 /* Make the declaration of X appear in CLASS scope. */
4253
4254 void
4255 pushdecl_class_level (x)
4256 tree x;
4257 {
4258 /* Don't use DECL_ASSEMBLER_NAME here! Everything that looks in class
4259 scope looks for the pre-mangled name. */
4260 register tree name;
4261
4262 if (TREE_CODE (x) == OVERLOAD)
4263 x = OVL_CURRENT (x);
4264 name = DECL_NAME (x);
4265
4266 if (name)
4267 {
4268 push_class_level_binding (name, x);
4269 if (TREE_CODE (x) == TYPE_DECL)
4270 set_identifier_type_value (name, TREE_TYPE (x));
4271 }
4272 else if (ANON_AGGR_TYPE_P (TREE_TYPE (x)))
4273 {
4274 tree f;
4275
4276 for (f = TYPE_FIELDS (TREE_TYPE (x));
4277 f;
4278 f = TREE_CHAIN (f))
4279 pushdecl_class_level (f);
4280 }
4281 }
4282
4283 /* Enter DECL into the symbol table, if that's appropriate. Returns
4284 DECL, or a modified version thereof. */
4285
4286 tree
4287 maybe_push_decl (decl)
4288 tree decl;
4289 {
4290 tree type = TREE_TYPE (decl);
4291
4292 /* Add this decl to the current binding level, but not if it comes
4293 from another scope, e.g. a static member variable. TEM may equal
4294 DECL or it may be a previous decl of the same name. */
4295 if (decl == error_mark_node
4296 || (TREE_CODE (decl) != PARM_DECL
4297 && DECL_CONTEXT (decl) != NULL_TREE
4298 /* Definitions of namespace members outside their namespace are
4299 possible. */
4300 && TREE_CODE (DECL_CONTEXT (decl)) != NAMESPACE_DECL)
4301 || (TREE_CODE (decl) == TEMPLATE_DECL && !namespace_bindings_p ())
4302 || TREE_CODE (type) == UNKNOWN_TYPE
4303 /* The declaration of a template specialization does not affect
4304 the functions available for overload resolution, so we do not
4305 call pushdecl. */
4306 || (TREE_CODE (decl) == FUNCTION_DECL
4307 && DECL_TEMPLATE_SPECIALIZATION (decl)))
4308 return decl;
4309 else
4310 return pushdecl (decl);
4311 }
4312
4313 /* Make the declaration(s) of X appear in CLASS scope
4314 under the name NAME. */
4315
4316 void
4317 push_class_level_binding (name, x)
4318 tree name;
4319 tree x;
4320 {
4321 tree binding;
4322 /* The class_binding_level will be NULL if x is a template
4323 parameter name in a member template. */
4324 if (!class_binding_level)
4325 return;
4326
4327 /* Make sure that this new member does not have the same name
4328 as a template parameter. */
4329 if (TYPE_BEING_DEFINED (current_class_type))
4330 check_template_shadow (x);
4331
4332 /* If this declaration shadows a declaration from an enclosing
4333 class, then we will need to restore IDENTIFIER_CLASS_VALUE when
4334 we leave this class. Record the shadowed declaration here. */
4335 binding = IDENTIFIER_BINDING (name);
4336 if (binding
4337 && ((TREE_CODE (x) == OVERLOAD
4338 && BINDING_VALUE (binding)
4339 && is_overloaded_fn (BINDING_VALUE (binding)))
4340 || INHERITED_VALUE_BINDING_P (binding)))
4341 {
4342 tree shadow;
4343 tree old_decl;
4344
4345 /* If the old binding was from a base class, and was for a tag
4346 name, slide it over to make room for the new binding. The
4347 old binding is still visible if explicitly qualified with a
4348 class-key. */
4349 if (INHERITED_VALUE_BINDING_P (binding)
4350 && BINDING_VALUE (binding)
4351 && TREE_CODE (BINDING_VALUE (binding)) == TYPE_DECL
4352 && DECL_ARTIFICIAL (BINDING_VALUE (binding))
4353 && !(TREE_CODE (x) == TYPE_DECL && DECL_ARTIFICIAL (x)))
4354 {
4355 old_decl = BINDING_TYPE (binding);
4356 BINDING_TYPE (binding) = BINDING_VALUE (binding);
4357 BINDING_VALUE (binding) = NULL_TREE;
4358 INHERITED_VALUE_BINDING_P (binding) = 0;
4359 }
4360 else
4361 old_decl = BINDING_VALUE (binding);
4362
4363 /* There was already a binding for X containing fewer
4364 functions than are named in X. Find the previous
4365 declaration of X on the class-shadowed list, and update it. */
4366 for (shadow = class_binding_level->class_shadowed;
4367 shadow;
4368 shadow = TREE_CHAIN (shadow))
4369 if (TREE_PURPOSE (shadow) == name
4370 && TREE_TYPE (shadow) == old_decl)
4371 {
4372 BINDING_VALUE (binding) = x;
4373 INHERITED_VALUE_BINDING_P (binding) = 0;
4374 TREE_TYPE (shadow) = x;
4375 return;
4376 }
4377 }
4378
4379 /* If we didn't replace an existing binding, put the binding on the
4380 stack of bindings for the identifier, and update
4381 IDENTIFIER_CLASS_VALUE. */
4382 if (push_class_binding (name, x))
4383 {
4384 class_binding_level->class_shadowed
4385 = tree_cons (name, IDENTIFIER_CLASS_VALUE (name),
4386 class_binding_level->class_shadowed);
4387 /* Record the value we are binding NAME to so that we can know
4388 what to pop later. */
4389 TREE_TYPE (class_binding_level->class_shadowed) = x;
4390 }
4391 }
4392
4393 /* Insert another USING_DECL into the current binding level,
4394 returning this declaration. If this is a redeclaration,
4395 do nothing and return NULL_TREE. */
4396
4397 tree
4398 push_using_decl (scope, name)
4399 tree scope;
4400 tree name;
4401 {
4402 tree decl;
4403
4404 my_friendly_assert (TREE_CODE (scope) == NAMESPACE_DECL, 383);
4405 my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 384);
4406 for (decl = current_binding_level->usings; decl; decl = TREE_CHAIN (decl))
4407 if (DECL_INITIAL (decl) == scope && DECL_NAME (decl) == name)
4408 break;
4409 if (decl)
4410 return NULL_TREE;
4411 decl = build_lang_decl (USING_DECL, name, void_type_node);
4412 DECL_INITIAL (decl) = scope;
4413 TREE_CHAIN (decl) = current_binding_level->usings;
4414 current_binding_level->usings = decl;
4415 return decl;
4416 }
4417
4418 /* Add namespace to using_directives. Return NULL_TREE if nothing was
4419 changed (i.e. there was already a directive), or the fresh
4420 TREE_LIST otherwise. */
4421
4422 tree
4423 push_using_directive (used)
4424 tree used;
4425 {
4426 tree ud = current_binding_level->using_directives;
4427 tree iter, ancestor;
4428
4429 /* Check if we already have this. */
4430 if (purpose_member (used, ud) != NULL_TREE)
4431 return NULL_TREE;
4432
4433 /* Recursively add all namespaces used. */
4434 for (iter = DECL_NAMESPACE_USING (used); iter; iter = TREE_CHAIN (iter))
4435 push_using_directive (TREE_PURPOSE (iter));
4436
4437 ancestor = namespace_ancestor (current_decl_namespace (), used);
4438 ud = current_binding_level->using_directives;
4439 ud = tree_cons (used, ancestor, ud);
4440 current_binding_level->using_directives = ud;
4441 return ud;
4442 }
4443
4444 /* DECL is a FUNCTION_DECL for a non-member function, which may have
4445 other definitions already in place. We get around this by making
4446 the value of the identifier point to a list of all the things that
4447 want to be referenced by that name. It is then up to the users of
4448 that name to decide what to do with that list.
4449
4450 DECL may also be a TEMPLATE_DECL, with a FUNCTION_DECL in its
4451 DECL_TEMPLATE_RESULT. It is dealt with the same way.
4452
4453 FLAGS is a bitwise-or of the following values:
4454 PUSH_LOCAL: Bind DECL in the current scope, rather than at
4455 namespace scope.
4456 PUSH_USING: DECL is being pushed as the result of a using
4457 declaration.
4458
4459 The value returned may be a previous declaration if we guessed wrong
4460 about what language DECL should belong to (C or C++). Otherwise,
4461 it's always DECL (and never something that's not a _DECL). */
4462
4463 tree
4464 push_overloaded_decl (decl, flags)
4465 tree decl;
4466 int flags;
4467 {
4468 tree name = DECL_NAME (decl);
4469 tree old;
4470 tree new_binding;
4471 int doing_global = (namespace_bindings_p () || !(flags & PUSH_LOCAL));
4472
4473 if (doing_global)
4474 old = namespace_binding (name, DECL_CONTEXT (decl));
4475 else
4476 old = lookup_name_current_level (name);
4477
4478 if (old)
4479 {
4480 if (TREE_CODE (old) == TYPE_DECL && DECL_ARTIFICIAL (old))
4481 {
4482 tree t = TREE_TYPE (old);
4483 if (IS_AGGR_TYPE (t) && warn_shadow
4484 && (! DECL_IN_SYSTEM_HEADER (decl)
4485 || ! DECL_IN_SYSTEM_HEADER (old)))
4486 cp_warning ("`%#D' hides constructor for `%#T'", decl, t);
4487 old = NULL_TREE;
4488 }
4489 else if (is_overloaded_fn (old))
4490 {
4491 tree tmp;
4492
4493 for (tmp = old; tmp; tmp = OVL_NEXT (tmp))
4494 {
4495 tree fn = OVL_CURRENT (tmp);
4496
4497 if (TREE_CODE (tmp) == OVERLOAD && OVL_USED (tmp)
4498 && !(flags & PUSH_USING)
4499 && compparms (TYPE_ARG_TYPES (TREE_TYPE (fn)),
4500 TYPE_ARG_TYPES (TREE_TYPE (decl))))
4501 cp_error ("`%#D' conflicts with previous using declaration `%#D'",
4502 decl, fn);
4503
4504 if (duplicate_decls (decl, fn))
4505 return fn;
4506 }
4507 }
4508 else
4509 {
4510 cp_error_at ("previous non-function declaration `%#D'", old);
4511 cp_error ("conflicts with function declaration `%#D'", decl);
4512 return decl;
4513 }
4514 }
4515
4516 if (old || TREE_CODE (decl) == TEMPLATE_DECL)
4517 {
4518 if (old && TREE_CODE (old) != OVERLOAD)
4519 new_binding = ovl_cons (decl, ovl_cons (old, NULL_TREE));
4520 else
4521 new_binding = ovl_cons (decl, old);
4522 if (flags & PUSH_USING)
4523 OVL_USED (new_binding) = 1;
4524 }
4525 else
4526 /* NAME is not ambiguous. */
4527 new_binding = decl;
4528
4529 if (doing_global)
4530 set_namespace_binding (name, current_namespace, new_binding);
4531 else
4532 {
4533 /* We only create an OVERLOAD if there was a previous binding at
4534 this level, or if decl is a template. In the former case, we
4535 need to remove the old binding and replace it with the new
4536 binding. We must also run through the NAMES on the binding
4537 level where the name was bound to update the chain. */
4538
4539 if (TREE_CODE (new_binding) == OVERLOAD && old)
4540 {
4541 tree *d;
4542
4543 for (d = &BINDING_LEVEL (IDENTIFIER_BINDING (name))->names;
4544 *d;
4545 d = &TREE_CHAIN (*d))
4546 if (*d == old
4547 || (TREE_CODE (*d) == TREE_LIST
4548 && TREE_VALUE (*d) == old))
4549 {
4550 if (TREE_CODE (*d) == TREE_LIST)
4551 /* Just replace the old binding with the new. */
4552 TREE_VALUE (*d) = new_binding;
4553 else
4554 /* Build a TREE_LIST to wrap the OVERLOAD. */
4555 *d = tree_cons (NULL_TREE, new_binding,
4556 TREE_CHAIN (*d));
4557
4558 /* And update the CPLUS_BINDING node. */
4559 BINDING_VALUE (IDENTIFIER_BINDING (name))
4560 = new_binding;
4561 return decl;
4562 }
4563
4564 /* We should always find a previous binding in this case. */
4565 my_friendly_abort (0);
4566 }
4567
4568 /* Install the new binding. */
4569 push_local_binding (name, new_binding, flags);
4570 }
4571
4572 return decl;
4573 }
4574 \f
4575 /* Generate an implicit declaration for identifier FUNCTIONID
4576 as a function of type int (). Print a warning if appropriate. */
4577
4578 tree
4579 implicitly_declare (functionid)
4580 tree functionid;
4581 {
4582 register tree decl;
4583
4584 /* We used to reuse an old implicit decl here,
4585 but this loses with inline functions because it can clobber
4586 the saved decl chains. */
4587 decl = build_lang_decl (FUNCTION_DECL, functionid, default_function_type);
4588
4589 DECL_EXTERNAL (decl) = 1;
4590 TREE_PUBLIC (decl) = 1;
4591
4592 /* ISO standard says implicit declarations are in the innermost block.
4593 So we record the decl in the standard fashion. */
4594 pushdecl (decl);
4595 rest_of_decl_compilation (decl, NULL_PTR, 0, 0);
4596
4597 if (warn_implicit
4598 /* Only one warning per identifier. */
4599 && IDENTIFIER_IMPLICIT_DECL (functionid) == NULL_TREE)
4600 {
4601 cp_pedwarn ("implicit declaration of function `%#D'", decl);
4602 }
4603
4604 SET_IDENTIFIER_IMPLICIT_DECL (functionid, decl);
4605
4606 return decl;
4607 }
4608
4609 /* Return zero if the declaration NEWDECL is valid
4610 when the declaration OLDDECL (assumed to be for the same name)
4611 has already been seen.
4612 Otherwise return an error message format string with a %s
4613 where the identifier should go. */
4614
4615 static const char *
4616 redeclaration_error_message (newdecl, olddecl)
4617 tree newdecl, olddecl;
4618 {
4619 if (TREE_CODE (newdecl) == TYPE_DECL)
4620 {
4621 /* Because C++ can put things into name space for free,
4622 constructs like "typedef struct foo { ... } foo"
4623 would look like an erroneous redeclaration. */
4624 if (same_type_p (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
4625 return 0;
4626 else
4627 return "redefinition of `%#D'";
4628 }
4629 else if (TREE_CODE (newdecl) == FUNCTION_DECL)
4630 {
4631 /* If this is a pure function, its olddecl will actually be
4632 the original initialization to `0' (which we force to call
4633 abort()). Don't complain about redefinition in this case. */
4634 if (DECL_LANG_SPECIFIC (olddecl) && DECL_PURE_VIRTUAL_P (olddecl))
4635 return 0;
4636
4637 /* If both functions come from different namespaces, this is not
4638 a redeclaration - this is a conflict with a used function. */
4639 if (DECL_NAMESPACE_SCOPE_P (olddecl)
4640 && DECL_CONTEXT (olddecl) != DECL_CONTEXT (newdecl))
4641 return "`%D' conflicts with used function";
4642
4643 /* We'll complain about linkage mismatches in
4644 warn_extern_redeclared_static. */
4645
4646 /* Defining the same name twice is no good. */
4647 if (DECL_INITIAL (olddecl) != NULL_TREE
4648 && DECL_INITIAL (newdecl) != NULL_TREE)
4649 {
4650 if (DECL_NAME (olddecl) == NULL_TREE)
4651 return "`%#D' not declared in class";
4652 else
4653 return "redefinition of `%#D'";
4654 }
4655 return 0;
4656 }
4657 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
4658 {
4659 if ((TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
4660 && DECL_INITIAL (DECL_TEMPLATE_RESULT (newdecl))
4661 && DECL_INITIAL (DECL_TEMPLATE_RESULT (olddecl)))
4662 || (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL
4663 && COMPLETE_TYPE_P (TREE_TYPE (newdecl))
4664 && COMPLETE_TYPE_P (TREE_TYPE (olddecl))))
4665 return "redefinition of `%#D'";
4666 return 0;
4667 }
4668 else if (toplevel_bindings_p () || DECL_NAMESPACE_SCOPE_P (newdecl))
4669 {
4670 /* Objects declared at top level: */
4671 /* If at least one is a reference, it's ok. */
4672 if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl))
4673 return 0;
4674 /* Reject two definitions. */
4675 return "redefinition of `%#D'";
4676 }
4677 else
4678 {
4679 /* Objects declared with block scope: */
4680 /* Reject two definitions, and reject a definition
4681 together with an external reference. */
4682 if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl)))
4683 return "redeclaration of `%#D'";
4684 return 0;
4685 }
4686 }
4687 \f
4688 /* Create a new label, named ID. */
4689
4690 static tree
4691 make_label_decl (id, local_p)
4692 tree id;
4693 int local_p;
4694 {
4695 tree decl;
4696
4697 decl = build_decl (LABEL_DECL, id, void_type_node);
4698 if (expanding_p)
4699 /* Make sure every label has an rtx. */
4700 label_rtx (decl);
4701
4702 DECL_CONTEXT (decl) = current_function_decl;
4703 DECL_MODE (decl) = VOIDmode;
4704 C_DECLARED_LABEL_FLAG (decl) = local_p;
4705
4706 /* Say where one reference is to the label, for the sake of the
4707 error if it is not defined. */
4708 DECL_SOURCE_LINE (decl) = lineno;
4709 DECL_SOURCE_FILE (decl) = input_filename;
4710
4711 /* Record the fact that this identifier is bound to this label. */
4712 SET_IDENTIFIER_LABEL_VALUE (id, decl);
4713
4714 /* Record this label on the list of used labels so that we can check
4715 at the end of the function to see whether or not the label was
4716 actually defined. */
4717 if ((named_label_uses == NULL || named_label_uses->label_decl != decl)
4718 && (named_label_uses == NULL
4719 || named_label_uses->names_in_scope != current_binding_level->names
4720 || named_label_uses->label_decl != decl))
4721 {
4722 struct named_label_list *new_ent;
4723 new_ent
4724 = (struct named_label_list*)oballoc (sizeof (struct named_label_list));
4725 new_ent->label_decl = decl;
4726 new_ent->names_in_scope = current_binding_level->names;
4727 new_ent->binding_level = current_binding_level;
4728 new_ent->lineno_o_goto = lineno;
4729 new_ent->filename_o_goto = input_filename;
4730 new_ent->next = named_label_uses;
4731 named_label_uses = new_ent;
4732 }
4733
4734 return decl;
4735 }
4736
4737 /* Look for a label named ID in the current function. If one cannot
4738 be found, create one. (We keep track of used, but undefined,
4739 labels, and complain about them at the end of a function.) */
4740
4741 tree
4742 lookup_label (id)
4743 tree id;
4744 {
4745 tree decl;
4746
4747 /* You can't use labels at global scope. */
4748 if (current_function_decl == NULL_TREE)
4749 {
4750 error ("label `%s' referenced outside of any function",
4751 IDENTIFIER_POINTER (id));
4752 return NULL_TREE;
4753 }
4754
4755 /* See if we've already got this label. */
4756 decl = IDENTIFIER_LABEL_VALUE (id);
4757 if (decl != NULL_TREE && DECL_CONTEXT (decl) == current_function_decl)
4758 return decl;
4759
4760 /* Record this label on the list of labels used in this function.
4761 We do this before calling make_label_decl so that we get the
4762 IDENTIFIER_LABEL_VALUE before the new label is declared. */
4763 named_labels = tree_cons (IDENTIFIER_LABEL_VALUE (id), NULL_TREE,
4764 named_labels);
4765 /* We need a new label. */
4766 decl = make_label_decl (id, /*local_p=*/0);
4767 /* Now fill in the information we didn't have before. */
4768 TREE_VALUE (named_labels) = decl;
4769
4770 return decl;
4771 }
4772
4773 /* Declare a local label named ID. */
4774
4775 tree
4776 declare_local_label (id)
4777 tree id;
4778 {
4779 tree decl;
4780
4781 /* Add a new entry to the SHADOWED_LABELS list so that when we leave
4782 this scope we can restore the old value of
4783 IDENTIFIER_TYPE_VALUE. */
4784 current_binding_level->shadowed_labels
4785 = tree_cons (IDENTIFIER_LABEL_VALUE (id), NULL_TREE,
4786 current_binding_level->shadowed_labels);
4787 /* Look for the label. */
4788 decl = make_label_decl (id, /*local_p=*/1);
4789 /* Now fill in the information we didn't have before. */
4790 TREE_VALUE (current_binding_level->shadowed_labels) = decl;
4791
4792 return decl;
4793 }
4794
4795 /* Define a label, specifying the location in the source file.
4796 Return the LABEL_DECL node for the label, if the definition is valid.
4797 Otherwise return 0. */
4798
4799 tree
4800 define_label (filename, line, name)
4801 char *filename;
4802 int line;
4803 tree name;
4804 {
4805 tree decl = lookup_label (name);
4806
4807 /* After labels, make any new cleanups go into their
4808 own new (temporary) binding contour. */
4809 current_binding_level->more_cleanups_ok = 0;
4810
4811 if (name == get_identifier ("wchar_t"))
4812 cp_pedwarn ("label named wchar_t");
4813
4814 if (DECL_INITIAL (decl) != NULL_TREE)
4815 {
4816 cp_error ("duplicate label `%D'", decl);
4817 return 0;
4818 }
4819 else
4820 {
4821 struct named_label_list *uses, *prev;
4822 int identified = 0;
4823 int saw_eh = 0;
4824
4825 /* Mark label as having been defined. */
4826 DECL_INITIAL (decl) = error_mark_node;
4827 /* Say where in the source. */
4828 DECL_SOURCE_FILE (decl) = filename;
4829 DECL_SOURCE_LINE (decl) = line;
4830
4831 prev = NULL;
4832 uses = named_label_uses;
4833 while (uses != NULL)
4834 if (uses->label_decl == decl)
4835 {
4836 struct binding_level *b = current_binding_level;
4837 while (b)
4838 {
4839 tree new_decls = b->names;
4840 tree old_decls = (b == uses->binding_level)
4841 ? uses->names_in_scope : NULL_TREE;
4842 while (new_decls != old_decls)
4843 {
4844 if (TREE_CODE (new_decls) == VAR_DECL
4845 /* Don't complain about crossing initialization
4846 of internal entities. They can't be accessed,
4847 and they should be cleaned up
4848 by the time we get to the label. */
4849 && ! DECL_ARTIFICIAL (new_decls)
4850 && !(DECL_INITIAL (new_decls) == NULL_TREE
4851 && pod_type_p (TREE_TYPE (new_decls))))
4852 {
4853 /* This is really only important if we're crossing
4854 an initialization. The POD stuff is just
4855 pedantry; why should it matter if the class
4856 contains a field of pointer to member type? */
4857 int problem = (DECL_INITIAL (new_decls)
4858 || (TYPE_NEEDS_CONSTRUCTING
4859 (TREE_TYPE (new_decls))));
4860
4861 if (! identified)
4862 {
4863 if (problem)
4864 {
4865 cp_error ("jump to label `%D'", decl);
4866 error_with_file_and_line
4867 (uses->filename_o_goto,
4868 uses->lineno_o_goto, " from here");
4869 }
4870 else
4871 {
4872 cp_pedwarn ("jump to label `%D'", decl);
4873 pedwarn_with_file_and_line
4874 (uses->filename_o_goto,
4875 uses->lineno_o_goto, " from here");
4876 }
4877 identified = 1;
4878 }
4879
4880 if (problem)
4881 cp_error_at (" crosses initialization of `%#D'",
4882 new_decls);
4883 else
4884 cp_pedwarn_at (" enters scope of non-POD `%#D'",
4885 new_decls);
4886 }
4887 new_decls = TREE_CHAIN (new_decls);
4888 }
4889 if (b == uses->binding_level)
4890 break;
4891 if (b->eh_region && ! saw_eh)
4892 {
4893 if (! identified)
4894 {
4895 cp_error ("jump to label `%D'", decl);
4896 error_with_file_and_line
4897 (uses->filename_o_goto,
4898 uses->lineno_o_goto, " from here");
4899 identified = 1;
4900 }
4901 error (" enters exception handling block");
4902 saw_eh = 1;
4903 }
4904 b = b->level_chain;
4905 }
4906
4907 if (prev != NULL)
4908 prev->next = uses->next;
4909 else
4910 named_label_uses = uses->next;
4911
4912 uses = uses->next;
4913 }
4914 else
4915 {
4916 prev = uses;
4917 uses = uses->next;
4918 }
4919 current_function_return_value = NULL_TREE;
4920 return decl;
4921 }
4922 }
4923
4924 struct cp_switch
4925 {
4926 struct binding_level *level;
4927 struct cp_switch *next;
4928 };
4929
4930 static struct cp_switch *switch_stack;
4931
4932 void
4933 push_switch ()
4934 {
4935 struct cp_switch *p
4936 = (struct cp_switch *) xmalloc (sizeof (struct cp_switch));
4937 p->level = current_binding_level;
4938 p->next = switch_stack;
4939 switch_stack = p;
4940 }
4941
4942 void
4943 pop_switch ()
4944 {
4945 struct cp_switch *cs;
4946
4947 cs = switch_stack;
4948 switch_stack = switch_stack->next;
4949 free (cs);
4950 }
4951
4952 /* Note that we've seen a definition of a case label, and complain if this
4953 is a bad place for one. */
4954
4955 void
4956 define_case_label ()
4957 {
4958 tree cleanup = last_cleanup_this_contour ();
4959 struct binding_level *b = current_binding_level;
4960 int identified = 0;
4961
4962 if (! switch_stack)
4963 /* Don't crash; we'll complain in do_case. */
4964 return;
4965
4966 if (cleanup)
4967 {
4968 static int explained = 0;
4969 cp_warning_at ("destructor needed for `%#D'", TREE_PURPOSE (cleanup));
4970 warning ("where case label appears here");
4971 if (!explained)
4972 {
4973 warning ("(enclose actions of previous case statements requiring");
4974 warning ("destructors in their own binding contours.)");
4975 explained = 1;
4976 }
4977 }
4978
4979 for (; b && b != switch_stack->level; b = b->level_chain)
4980 {
4981 tree new_decls = b->names;
4982 for (; new_decls; new_decls = TREE_CHAIN (new_decls))
4983 {
4984 if (TREE_CODE (new_decls) == VAR_DECL
4985 /* Don't complain about crossing initialization
4986 of internal entities. They can't be accessed,
4987 and they should be cleaned up
4988 by the time we get to the label. */
4989 && ! DECL_ARTIFICIAL (new_decls)
4990 && ((DECL_INITIAL (new_decls) != NULL_TREE
4991 && DECL_INITIAL (new_decls) != error_mark_node)
4992 || TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (new_decls))))
4993 {
4994 if (! identified)
4995 error ("jump to case label");
4996 identified = 1;
4997 cp_error_at (" crosses initialization of `%#D'",
4998 new_decls);
4999 }
5000 }
5001 }
5002
5003 /* After labels, make any new cleanups go into their
5004 own new (temporary) binding contour. */
5005
5006 current_binding_level->more_cleanups_ok = 0;
5007 current_function_return_value = NULL_TREE;
5008 }
5009 \f
5010 /* Return the list of declarations of the current level.
5011 Note that this list is in reverse order unless/until
5012 you nreverse it; and when you do nreverse it, you must
5013 store the result back using `storedecls' or you will lose. */
5014
5015 tree
5016 getdecls ()
5017 {
5018 return current_binding_level->names;
5019 }
5020
5021 /* Return the list of type-tags (for structs, etc) of the current level. */
5022
5023 tree
5024 gettags ()
5025 {
5026 return current_binding_level->tags;
5027 }
5028
5029 /* Store the list of declarations of the current level.
5030 This is done for the parameter declarations of a function being defined,
5031 after they are modified in the light of any missing parameters. */
5032
5033 static void
5034 storedecls (decls)
5035 tree decls;
5036 {
5037 current_binding_level->names = decls;
5038 }
5039
5040 /* Similarly, store the list of tags of the current level. */
5041
5042 void
5043 storetags (tags)
5044 tree tags;
5045 {
5046 current_binding_level->tags = tags;
5047 }
5048 \f
5049 /* Given NAME, an IDENTIFIER_NODE,
5050 return the structure (or union or enum) definition for that name.
5051 Searches binding levels from BINDING_LEVEL up to the global level.
5052 If THISLEVEL_ONLY is nonzero, searches only the specified context
5053 (but skips any tag-transparent contexts to find one that is
5054 meaningful for tags).
5055 FORM says which kind of type the caller wants;
5056 it is RECORD_TYPE or UNION_TYPE or ENUMERAL_TYPE.
5057 If the wrong kind of type is found, and it's not a template, an error is
5058 reported. */
5059
5060 static tree
5061 lookup_tag (form, name, binding_level, thislevel_only)
5062 enum tree_code form;
5063 tree name;
5064 struct binding_level *binding_level;
5065 int thislevel_only;
5066 {
5067 register struct binding_level *level;
5068 /* Non-zero if, we should look past a template parameter level, even
5069 if THISLEVEL_ONLY. */
5070 int allow_template_parms_p = 1;
5071
5072 for (level = binding_level; level; level = level->level_chain)
5073 {
5074 register tree tail;
5075 if (ANON_AGGRNAME_P (name))
5076 for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
5077 {
5078 /* There's no need for error checking here, because
5079 anon names are unique throughout the compilation. */
5080 if (TYPE_IDENTIFIER (TREE_VALUE (tail)) == name)
5081 return TREE_VALUE (tail);
5082 }
5083 else if (level->namespace_p)
5084 /* Do namespace lookup. */
5085 for (tail = current_namespace; 1; tail = CP_DECL_CONTEXT (tail))
5086 {
5087 tree old = binding_for_name (name, tail);
5088
5089 /* If we just skipped past a template parameter level,
5090 even though THISLEVEL_ONLY, and we find a template
5091 class declaration, then we use the _TYPE node for the
5092 template. See the example below. */
5093 if (thislevel_only && !allow_template_parms_p
5094 && old && BINDING_VALUE (old)
5095 && DECL_CLASS_TEMPLATE_P (BINDING_VALUE (old)))
5096 old = TREE_TYPE (BINDING_VALUE (old));
5097 else
5098 old = BINDING_TYPE (old);
5099
5100 /* If it has an original type, it is a typedef, and we
5101 should not return it. */
5102 if (old && DECL_ORIGINAL_TYPE (TYPE_NAME (old)))
5103 old = NULL_TREE;
5104 if (old && TREE_CODE (old) != form
5105 && !(form != ENUMERAL_TYPE && TREE_CODE (old) == TEMPLATE_DECL))
5106 {
5107 cp_error ("`%#D' redeclared as %C", old, form);
5108 return NULL_TREE;
5109 }
5110 if (old)
5111 return old;
5112 if (thislevel_only || tail == global_namespace)
5113 return NULL_TREE;
5114 }
5115 else
5116 for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
5117 {
5118 if (TREE_PURPOSE (tail) == name)
5119 {
5120 enum tree_code code = TREE_CODE (TREE_VALUE (tail));
5121 /* Should tighten this up; it'll probably permit
5122 UNION_TYPE and a struct template, for example. */
5123 if (code != form
5124 && !(form != ENUMERAL_TYPE && code == TEMPLATE_DECL))
5125 {
5126 /* Definition isn't the kind we were looking for. */
5127 cp_error ("`%#D' redeclared as %C", TREE_VALUE (tail),
5128 form);
5129 return NULL_TREE;
5130 }
5131 return TREE_VALUE (tail);
5132 }
5133 }
5134 if (thislevel_only && ! level->tag_transparent)
5135 {
5136 if (level->template_parms_p && allow_template_parms_p)
5137 {
5138 /* We must deal with cases like this:
5139
5140 template <class T> struct S;
5141 template <class T> struct S {};
5142
5143 When looking up `S', for the second declaration, we
5144 would like to find the first declaration. But, we
5145 are in the pseudo-global level created for the
5146 template parameters, rather than the (surrounding)
5147 namespace level. Thus, we keep going one more level,
5148 even though THISLEVEL_ONLY is non-zero. */
5149 allow_template_parms_p = 0;
5150 continue;
5151 }
5152 else
5153 return NULL_TREE;
5154 }
5155 }
5156 return NULL_TREE;
5157 }
5158
5159 #if 0
5160 void
5161 set_current_level_tags_transparency (tags_transparent)
5162 int tags_transparent;
5163 {
5164 current_binding_level->tag_transparent = tags_transparent;
5165 }
5166 #endif
5167
5168 /* Given a type, find the tag that was defined for it and return the tag name.
5169 Otherwise return 0. However, the value can never be 0
5170 in the cases in which this is used.
5171
5172 C++: If NAME is non-zero, this is the new name to install. This is
5173 done when replacing anonymous tags with real tag names. */
5174
5175 static tree
5176 lookup_tag_reverse (type, name)
5177 tree type;
5178 tree name;
5179 {
5180 register struct binding_level *level;
5181
5182 for (level = current_binding_level; level; level = level->level_chain)
5183 {
5184 register tree tail;
5185 for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
5186 {
5187 if (TREE_VALUE (tail) == type)
5188 {
5189 if (name)
5190 TREE_PURPOSE (tail) = name;
5191 return TREE_PURPOSE (tail);
5192 }
5193 }
5194 }
5195 return NULL_TREE;
5196 }
5197 \f
5198 /* Look up NAME in the NAMESPACE. */
5199
5200 tree
5201 lookup_namespace_name (namespace, name)
5202 tree namespace, name;
5203 {
5204 tree val;
5205 tree template_id = NULL_TREE;
5206
5207 my_friendly_assert (TREE_CODE (namespace) == NAMESPACE_DECL, 370);
5208
5209 if (TREE_CODE (name) == NAMESPACE_DECL)
5210 /* This happens for A::B<int> when B is a namespace. */
5211 return name;
5212 else if (TREE_CODE (name) == TEMPLATE_DECL)
5213 {
5214 /* This happens for A::B where B is a template, and there are no
5215 template arguments. */
5216 cp_error ("invalid use of `%D'", name);
5217 return error_mark_node;
5218 }
5219
5220 namespace = ORIGINAL_NAMESPACE (namespace);
5221
5222 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
5223 {
5224 template_id = name;
5225 name = TREE_OPERAND (name, 0);
5226 if (TREE_CODE (name) == OVERLOAD)
5227 name = DECL_NAME (OVL_CURRENT (name));
5228 else if (DECL_P (name))
5229 name = DECL_NAME (name);
5230 }
5231
5232 my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 373);
5233
5234 val = make_node (CPLUS_BINDING);
5235 if (!qualified_lookup_using_namespace (name, namespace, val, 0))
5236 return error_mark_node;
5237
5238 if (BINDING_VALUE (val))
5239 {
5240 val = BINDING_VALUE (val);
5241
5242 if (template_id)
5243 {
5244 if (DECL_CLASS_TEMPLATE_P (val))
5245 val = lookup_template_class (val,
5246 TREE_OPERAND (template_id, 1),
5247 /*in_decl=*/NULL_TREE,
5248 /*context=*/NULL_TREE,
5249 /*entering_scope=*/0);
5250 else if (DECL_FUNCTION_TEMPLATE_P (val)
5251 || TREE_CODE (val) == OVERLOAD)
5252 val = lookup_template_function (val,
5253 TREE_OPERAND (template_id, 1));
5254 else
5255 {
5256 cp_error ("`%D::%D' is not a template",
5257 namespace, name);
5258 return error_mark_node;
5259 }
5260 }
5261
5262 /* If we have a single function from a using decl, pull it out. */
5263 if (TREE_CODE (val) == OVERLOAD && ! really_overloaded_fn (val))
5264 val = OVL_FUNCTION (val);
5265 return val;
5266 }
5267
5268 cp_error ("`%D' undeclared in namespace `%D'", name, namespace);
5269 return error_mark_node;
5270 }
5271
5272 /* Hash a TYPENAME_TYPE. K is really of type `tree'. */
5273
5274 static unsigned long
5275 typename_hash (k)
5276 hash_table_key k;
5277 {
5278 unsigned long hash;
5279 tree t;
5280
5281 t = (tree) k;
5282 hash = (((unsigned long) TYPE_CONTEXT (t))
5283 ^ ((unsigned long) DECL_NAME (TYPE_NAME (t))));
5284
5285 return hash;
5286 }
5287
5288 /* Compare two TYPENAME_TYPEs. K1 and K2 are really of type `tree'. */
5289
5290 static boolean
5291 typename_compare (k1, k2)
5292 hash_table_key k1;
5293 hash_table_key k2;
5294 {
5295 tree t1;
5296 tree t2;
5297 tree d1;
5298 tree d2;
5299
5300 t1 = (tree) k1;
5301 t2 = (tree) k2;
5302 d1 = TYPE_NAME (t1);
5303 d2 = TYPE_NAME (t2);
5304
5305 return (DECL_NAME (d1) == DECL_NAME (d2)
5306 && same_type_p (TYPE_CONTEXT (t1), TYPE_CONTEXT (t2))
5307 && ((TREE_TYPE (t1) != NULL_TREE)
5308 == (TREE_TYPE (t2) != NULL_TREE))
5309 && same_type_p (TREE_TYPE (t1), TREE_TYPE (t2))
5310 && TYPENAME_TYPE_FULLNAME (t1) == TYPENAME_TYPE_FULLNAME (t2));
5311 }
5312
5313 /* Build a TYPENAME_TYPE. If the type is `typename T::t', CONTEXT is
5314 the type of `T', NAME is the IDENTIFIER_NODE for `t'. If BASE_TYPE
5315 is non-NULL, this type is being created by the implicit typename
5316 extension, and BASE_TYPE is a type named `t' in some base class of
5317 `T' which depends on template parameters.
5318
5319 Returns the new TYPENAME_TYPE. */
5320
5321 tree
5322 build_typename_type (context, name, fullname, base_type)
5323 tree context;
5324 tree name;
5325 tree fullname;
5326 tree base_type;
5327 {
5328 tree t;
5329 tree d;
5330 struct hash_entry* e;
5331
5332 static struct hash_table ht;
5333
5334 if (!ht.table)
5335 {
5336 static struct hash_table *h = &ht;
5337 if (!hash_table_init (&ht, &hash_newfunc, &typename_hash,
5338 &typename_compare))
5339 fatal ("virtual memory exhausted");
5340 ggc_add_tree_hash_table_root (&h, 1);
5341 }
5342
5343 /* Build the TYPENAME_TYPE. */
5344 t = make_aggr_type (TYPENAME_TYPE);
5345 TYPE_CONTEXT (t) = FROB_CONTEXT (context);
5346 TYPENAME_TYPE_FULLNAME (t) = fullname;
5347 TREE_TYPE (t) = base_type;
5348
5349 /* Build the corresponding TYPE_DECL. */
5350 d = build_decl (TYPE_DECL, name, t);
5351 TYPE_NAME (TREE_TYPE (d)) = d;
5352 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
5353 DECL_CONTEXT (d) = FROB_CONTEXT (context);
5354 DECL_ARTIFICIAL (d) = 1;
5355
5356 /* See if we already have this type. */
5357 e = hash_lookup (&ht, t, /*create=*/false, /*copy=*/0);
5358 if (e)
5359 t = (tree) e->key;
5360 else
5361 /* Insert the type into the table. */
5362 hash_lookup (&ht, t, /*create=*/true, /*copy=*/0);
5363
5364 return t;
5365 }
5366
5367 /* Resolve `typename CONTEXT::NAME'. Returns an appropriate type,
5368 unless an error occurs, in which case error_mark_node is returned.
5369 If COMPLAIN zero, don't complain about any errors that occur. */
5370
5371 tree
5372 make_typename_type (context, name, complain)
5373 tree context, name;
5374 int complain;
5375 {
5376 tree fullname;
5377
5378 if (TYPE_P (name))
5379 {
5380 if (!(TYPE_LANG_SPECIFIC (name)
5381 && (CLASSTYPE_IS_TEMPLATE (name)
5382 || CLASSTYPE_USE_TEMPLATE (name))))
5383 name = TYPE_IDENTIFIER (name);
5384 else
5385 /* Create a TEMPLATE_ID_EXPR for the type. */
5386 name = build_nt (TEMPLATE_ID_EXPR,
5387 CLASSTYPE_TI_TEMPLATE (name),
5388 CLASSTYPE_TI_ARGS (name));
5389 }
5390 else if (TREE_CODE (name) == TYPE_DECL)
5391 name = DECL_NAME (name);
5392
5393 fullname = name;
5394
5395 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
5396 {
5397 name = TREE_OPERAND (name, 0);
5398 if (TREE_CODE (name) == TEMPLATE_DECL)
5399 name = TREE_OPERAND (fullname, 0) = DECL_NAME (name);
5400 }
5401 if (TREE_CODE (name) != IDENTIFIER_NODE)
5402 my_friendly_abort (2000);
5403
5404 if (TREE_CODE (context) == NAMESPACE_DECL)
5405 {
5406 /* We can get here from typename_sub0 in the explicit_template_type
5407 expansion. Just fail. */
5408 if (complain)
5409 cp_error ("no class template named `%#T' in `%#T'",
5410 name, context);
5411 return error_mark_node;
5412 }
5413
5414 if (! uses_template_parms (context)
5415 || currently_open_class (context))
5416 {
5417 if (TREE_CODE (fullname) == TEMPLATE_ID_EXPR)
5418 {
5419 tree tmpl = NULL_TREE;
5420 if (IS_AGGR_TYPE (context))
5421 tmpl = lookup_field (context, name, 0, 0);
5422 if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
5423 {
5424 if (complain)
5425 cp_error ("no class template named `%#T' in `%#T'",
5426 name, context);
5427 return error_mark_node;
5428 }
5429
5430 return lookup_template_class (tmpl,
5431 TREE_OPERAND (fullname, 1),
5432 NULL_TREE, context,
5433 /*entering_scope=*/0);
5434 }
5435 else
5436 {
5437 tree t;
5438
5439 if (!IS_AGGR_TYPE (context))
5440 {
5441 if (complain)
5442 cp_error ("no type named `%#T' in `%#T'", name, context);
5443 return error_mark_node;
5444 }
5445
5446 t = lookup_field (context, name, 0, 1);
5447 if (t)
5448 return TREE_TYPE (t);
5449 }
5450 }
5451
5452 /* If the CONTEXT is not a template type, then either the field is
5453 there now or its never going to be. */
5454 if (!uses_template_parms (context))
5455 {
5456 if (complain)
5457 cp_error ("no type named `%#T' in `%#T'", name, context);
5458 return error_mark_node;
5459 }
5460
5461
5462 return build_typename_type (context, name, fullname, NULL_TREE);
5463 }
5464
5465 /* Select the right _DECL from multiple choices. */
5466
5467 static tree
5468 select_decl (binding, flags)
5469 tree binding;
5470 int flags;
5471 {
5472 tree val;
5473 val = BINDING_VALUE (binding);
5474 if (LOOKUP_NAMESPACES_ONLY (flags))
5475 {
5476 /* We are not interested in types. */
5477 if (val && TREE_CODE (val) == NAMESPACE_DECL)
5478 return val;
5479 return NULL_TREE;
5480 }
5481
5482 /* If we could have a type and
5483 we have nothing or we need a type and have none. */
5484 if (BINDING_TYPE (binding)
5485 && (!val || ((flags & LOOKUP_PREFER_TYPES)
5486 && TREE_CODE (val) != TYPE_DECL)))
5487 val = TYPE_STUB_DECL (BINDING_TYPE (binding));
5488 /* Don't return non-types if we really prefer types. */
5489 else if (val && LOOKUP_TYPES_ONLY (flags) && TREE_CODE (val) != TYPE_DECL
5490 && (TREE_CODE (val) != TEMPLATE_DECL
5491 || !DECL_CLASS_TEMPLATE_P (val)))
5492 val = NULL_TREE;
5493
5494 return val;
5495 }
5496
5497 /* Unscoped lookup of a global: iterate over current namespaces,
5498 considering using-directives. If SPACESP is non-NULL, store a list
5499 of the namespaces we've considered in it. */
5500
5501 tree
5502 unqualified_namespace_lookup (name, flags, spacesp)
5503 tree name;
5504 int flags;
5505 tree *spacesp;
5506 {
5507 tree b = make_node (CPLUS_BINDING);
5508 tree initial = current_decl_namespace();
5509 tree scope = initial;
5510 tree siter;
5511 struct binding_level *level;
5512 tree val = NULL_TREE;
5513
5514 if (spacesp)
5515 *spacesp = NULL_TREE;
5516
5517 for (; !val; scope = CP_DECL_CONTEXT (scope))
5518 {
5519 if (spacesp)
5520 *spacesp = tree_cons (scope, NULL_TREE, *spacesp);
5521 val = binding_for_name (name, scope);
5522
5523 /* Initialize binding for this context. */
5524 BINDING_VALUE (b) = BINDING_VALUE (val);
5525 BINDING_TYPE (b) = BINDING_TYPE (val);
5526
5527 /* Add all _DECLs seen through local using-directives. */
5528 for (level = current_binding_level;
5529 !level->namespace_p;
5530 level = level->level_chain)
5531 if (!lookup_using_namespace (name, b, level->using_directives,
5532 scope, flags, spacesp))
5533 /* Give up because of error. */
5534 return error_mark_node;
5535
5536 /* Add all _DECLs seen through global using-directives. */
5537 /* XXX local and global using lists should work equally. */
5538 siter = initial;
5539 while (1)
5540 {
5541 if (!lookup_using_namespace (name, b, DECL_NAMESPACE_USING (siter),
5542 scope, flags, spacesp))
5543 /* Give up because of error. */
5544 return error_mark_node;
5545 if (siter == scope) break;
5546 siter = CP_DECL_CONTEXT (siter);
5547 }
5548
5549 val = select_decl (b, flags);
5550 if (scope == global_namespace)
5551 break;
5552 }
5553 return val;
5554 }
5555
5556 /* Combine prefer_type and namespaces_only into flags. */
5557
5558 static int
5559 lookup_flags (prefer_type, namespaces_only)
5560 int prefer_type, namespaces_only;
5561 {
5562 if (namespaces_only)
5563 return LOOKUP_PREFER_NAMESPACES;
5564 if (prefer_type > 1)
5565 return LOOKUP_PREFER_TYPES;
5566 if (prefer_type > 0)
5567 return LOOKUP_PREFER_BOTH;
5568 return 0;
5569 }
5570
5571 /* Given a lookup that returned VAL, use FLAGS to decide if we want to
5572 ignore it or not. Subroutine of lookup_name_real. */
5573
5574 static tree
5575 qualify_lookup (val, flags)
5576 tree val;
5577 int flags;
5578 {
5579 if (val == NULL_TREE)
5580 return val;
5581 if ((flags & LOOKUP_PREFER_NAMESPACES) && TREE_CODE (val) == NAMESPACE_DECL)
5582 return val;
5583 if ((flags & LOOKUP_PREFER_TYPES)
5584 && (TREE_CODE (val) == TYPE_DECL
5585 || ((flags & LOOKUP_TEMPLATES_EXPECTED)
5586 && DECL_CLASS_TEMPLATE_P (val))))
5587 return val;
5588 if (flags & (LOOKUP_PREFER_NAMESPACES | LOOKUP_PREFER_TYPES))
5589 return NULL_TREE;
5590 return val;
5591 }
5592
5593 /* Any other BINDING overrides an implicit TYPENAME. Warn about
5594 that. */
5595
5596 static void
5597 warn_about_implicit_typename_lookup (typename, binding)
5598 tree typename;
5599 tree binding;
5600 {
5601 tree subtype = TREE_TYPE (TREE_TYPE (typename));
5602 tree name = DECL_NAME (typename);
5603
5604 if (! (TREE_CODE (binding) == TEMPLATE_DECL
5605 && CLASSTYPE_TEMPLATE_INFO (subtype)
5606 && CLASSTYPE_TI_TEMPLATE (subtype) == binding)
5607 && ! (TREE_CODE (binding) == TYPE_DECL
5608 && same_type_p (TREE_TYPE (binding), subtype)))
5609 {
5610 cp_warning ("lookup of `%D' finds `%#D'",
5611 name, binding);
5612 cp_warning (" instead of `%D' from dependent base class",
5613 typename);
5614 cp_warning (" (use `typename %T::%D' if that's what you meant)",
5615 constructor_name (current_class_type), name);
5616 }
5617 }
5618
5619 /* Look up NAME in the current binding level and its superiors in the
5620 namespace of variables, functions and typedefs. Return a ..._DECL
5621 node of some kind representing its definition if there is only one
5622 such declaration, or return a TREE_LIST with all the overloaded
5623 definitions if there are many, or return 0 if it is undefined.
5624
5625 If PREFER_TYPE is > 0, we prefer TYPE_DECLs or namespaces.
5626 If PREFER_TYPE is > 1, we reject non-type decls (e.g. namespaces).
5627 If PREFER_TYPE is -2, we're being called from yylex(). (UGLY)
5628 Otherwise we prefer non-TYPE_DECLs.
5629
5630 If NONCLASS is non-zero, we don't look for the NAME in class scope,
5631 using IDENTIFIER_CLASS_VALUE. */
5632
5633 static tree
5634 lookup_name_real (name, prefer_type, nonclass, namespaces_only)
5635 tree name;
5636 int prefer_type, nonclass, namespaces_only;
5637 {
5638 tree t;
5639 tree val = NULL_TREE;
5640 int yylex = 0;
5641 tree from_obj = NULL_TREE;
5642 int flags;
5643 int val_is_implicit_typename = 0;
5644
5645 /* Hack: copy flag set by parser, if set. */
5646 if (only_namespace_names)
5647 namespaces_only = 1;
5648
5649 if (prefer_type == -2)
5650 {
5651 extern int looking_for_typename;
5652 tree type = NULL_TREE;
5653
5654 yylex = 1;
5655 prefer_type = looking_for_typename;
5656
5657 flags = lookup_flags (prefer_type, namespaces_only);
5658 /* If the next thing is '<', class templates are types. */
5659 if (looking_for_template)
5660 flags |= LOOKUP_TEMPLATES_EXPECTED;
5661
5662 /* std:: becomes :: for now. */
5663 if (got_scope == std_node)
5664 got_scope = void_type_node;
5665
5666 if (got_scope)
5667 type = got_scope;
5668 else if (got_object != error_mark_node)
5669 type = got_object;
5670
5671 if (type)
5672 {
5673 if (type == error_mark_node)
5674 return error_mark_node;
5675 if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
5676 type = TREE_TYPE (type);
5677
5678 if (TYPE_P (type))
5679 type = complete_type (type);
5680
5681 if (TREE_CODE (type) == VOID_TYPE)
5682 type = global_namespace;
5683 if (TREE_CODE (type) == NAMESPACE_DECL)
5684 {
5685 val = make_node (CPLUS_BINDING);
5686 flags |= LOOKUP_COMPLAIN;
5687 if (!qualified_lookup_using_namespace (name, type, val, flags))
5688 return NULL_TREE;
5689 val = select_decl (val, flags);
5690 }
5691 else if (! IS_AGGR_TYPE (type)
5692 || TREE_CODE (type) == TEMPLATE_TYPE_PARM
5693 || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM
5694 || TREE_CODE (type) == TYPENAME_TYPE)
5695 /* Someone else will give an error about this if needed. */
5696 val = NULL_TREE;
5697 else if (type == current_class_type)
5698 val = IDENTIFIER_CLASS_VALUE (name);
5699 else
5700 {
5701 val = lookup_member (type, name, 0, prefer_type);
5702 type_access_control (type, val);
5703 }
5704 }
5705 else
5706 val = NULL_TREE;
5707
5708 if (got_scope)
5709 goto done;
5710 else if (got_object && val)
5711 from_obj = val;
5712 }
5713 else
5714 {
5715 flags = lookup_flags (prefer_type, namespaces_only);
5716 /* If we're not parsing, we need to complain. */
5717 flags |= LOOKUP_COMPLAIN;
5718 }
5719
5720 /* First, look in non-namespace scopes. */
5721
5722 if (current_class_type == NULL_TREE)
5723 nonclass = 1;
5724
5725 for (t = IDENTIFIER_BINDING (name); t; t = TREE_CHAIN (t))
5726 {
5727 tree binding;
5728
5729 if (!LOCAL_BINDING_P (t) && nonclass)
5730 /* We're not looking for class-scoped bindings, so keep going. */
5731 continue;
5732
5733 /* If this is the kind of thing we're looking for, we're done. */
5734 if (qualify_lookup (BINDING_VALUE (t), flags))
5735 binding = BINDING_VALUE (t);
5736 else if ((flags & LOOKUP_PREFER_TYPES)
5737 && qualify_lookup (BINDING_TYPE (t), flags))
5738 binding = BINDING_TYPE (t);
5739 else
5740 binding = NULL_TREE;
5741
5742 /* Handle access control on types from enclosing or base classes. */
5743 if (binding && ! yylex
5744 && BINDING_LEVEL (t) && BINDING_LEVEL (t)->parm_flag == 2)
5745 type_access_control (BINDING_LEVEL (t)->this_class, binding);
5746
5747 if (binding
5748 && (!val || !IMPLICIT_TYPENAME_TYPE_DECL_P (binding)))
5749 {
5750 if (val_is_implicit_typename && !yylex)
5751 warn_about_implicit_typename_lookup (val, binding);
5752 val = binding;
5753 val_is_implicit_typename
5754 = IMPLICIT_TYPENAME_TYPE_DECL_P (val);
5755 if (!val_is_implicit_typename)
5756 break;
5757 }
5758 }
5759
5760 /* Now lookup in namespace scopes. */
5761 if (!val || val_is_implicit_typename)
5762 {
5763 t = unqualified_namespace_lookup (name, flags, 0);
5764 if (t)
5765 {
5766 if (val_is_implicit_typename && !yylex)
5767 warn_about_implicit_typename_lookup (val, t);
5768 val = t;
5769 }
5770 }
5771
5772 done:
5773 if (val)
5774 {
5775 /* This should only warn about types used in qualified-ids. */
5776 if (from_obj && from_obj != val)
5777 {
5778 if (looking_for_typename && TREE_CODE (from_obj) == TYPE_DECL
5779 && TREE_CODE (val) == TYPE_DECL
5780 && TREE_TYPE (from_obj) != TREE_TYPE (val))
5781 {
5782 cp_pedwarn ("lookup of `%D' in the scope of `%#T' (`%#T')",
5783 name, got_object, TREE_TYPE (from_obj));
5784 cp_pedwarn (" does not match lookup in the current scope (`%#T')",
5785 TREE_TYPE (val));
5786 }
5787
5788 /* We don't change val to from_obj if got_object depends on
5789 template parms because that breaks implicit typename for
5790 destructor calls. */
5791 if (! uses_template_parms (got_object))
5792 val = from_obj;
5793 }
5794
5795 /* If we have a single function from a using decl, pull it out. */
5796 if (TREE_CODE (val) == OVERLOAD && ! really_overloaded_fn (val))
5797 val = OVL_FUNCTION (val);
5798 }
5799 else if (from_obj)
5800 val = from_obj;
5801
5802 return val;
5803 }
5804
5805 tree
5806 lookup_name_nonclass (name)
5807 tree name;
5808 {
5809 return lookup_name_real (name, 0, 1, 0);
5810 }
5811
5812 tree
5813 lookup_function_nonclass (name, args)
5814 tree name;
5815 tree args;
5816 {
5817 return lookup_arg_dependent (name, lookup_name_nonclass (name), args);
5818 }
5819
5820 tree
5821 lookup_name_namespace_only (name)
5822 tree name;
5823 {
5824 /* type-or-namespace, nonclass, namespace_only */
5825 return lookup_name_real (name, 1, 1, 1);
5826 }
5827
5828 tree
5829 lookup_name (name, prefer_type)
5830 tree name;
5831 int prefer_type;
5832 {
5833 return lookup_name_real (name, prefer_type, 0, 0);
5834 }
5835
5836 /* Similar to `lookup_name' but look only in the innermost non-class
5837 binding level. */
5838
5839 tree
5840 lookup_name_current_level (name)
5841 tree name;
5842 {
5843 struct binding_level *b;
5844 tree t = NULL_TREE;
5845
5846 b = current_binding_level;
5847 while (b->parm_flag == 2)
5848 b = b->level_chain;
5849
5850 if (b->namespace_p)
5851 {
5852 t = IDENTIFIER_NAMESPACE_VALUE (name);
5853
5854 /* extern "C" function() */
5855 if (t != NULL_TREE && TREE_CODE (t) == TREE_LIST)
5856 t = TREE_VALUE (t);
5857 }
5858 else if (IDENTIFIER_BINDING (name)
5859 && LOCAL_BINDING_P (IDENTIFIER_BINDING (name)))
5860 {
5861 while (1)
5862 {
5863 if (BINDING_LEVEL (IDENTIFIER_BINDING (name)) == b)
5864 return IDENTIFIER_VALUE (name);
5865
5866 if (b->keep == 2)
5867 b = b->level_chain;
5868 else
5869 break;
5870 }
5871 }
5872
5873 return t;
5874 }
5875
5876 /* Like lookup_name_current_level, but for types. */
5877
5878 tree
5879 lookup_type_current_level (name)
5880 tree name;
5881 {
5882 register tree t = NULL_TREE;
5883
5884 my_friendly_assert (! current_binding_level->namespace_p, 980716);
5885
5886 if (REAL_IDENTIFIER_TYPE_VALUE (name) != NULL_TREE
5887 && REAL_IDENTIFIER_TYPE_VALUE (name) != global_type_node)
5888 {
5889 struct binding_level *b = current_binding_level;
5890 while (1)
5891 {
5892 if (purpose_member (name, b->type_shadowed))
5893 return REAL_IDENTIFIER_TYPE_VALUE (name);
5894 if (b->keep == 2)
5895 b = b->level_chain;
5896 else
5897 break;
5898 }
5899 }
5900
5901 return t;
5902 }
5903
5904 void
5905 begin_only_namespace_names ()
5906 {
5907 only_namespace_names = 1;
5908 }
5909
5910 void
5911 end_only_namespace_names ()
5912 {
5913 only_namespace_names = 0;
5914 }
5915 \f
5916 /* Arrange for the user to get a source line number, even when the
5917 compiler is going down in flames, so that she at least has a
5918 chance of working around problems in the compiler. We used to
5919 call error(), but that let the segmentation fault continue
5920 through; now, it's much more passive by asking them to send the
5921 maintainers mail about the problem. */
5922
5923 static void
5924 signal_catch (sig)
5925 int sig ATTRIBUTE_UNUSED;
5926 {
5927 signal (SIGSEGV, SIG_DFL);
5928 #ifdef SIGIOT
5929 signal (SIGIOT, SIG_DFL);
5930 #endif
5931 #ifdef SIGILL
5932 signal (SIGILL, SIG_DFL);
5933 #endif
5934 #ifdef SIGABRT
5935 signal (SIGABRT, SIG_DFL);
5936 #endif
5937 #ifdef SIGBUS
5938 signal (SIGBUS, SIG_DFL);
5939 #endif
5940 my_friendly_abort (0);
5941 }
5942
5943 /* Push the declarations of builtin types into the namespace.
5944 RID_INDEX, if < RID_MAX is the index of the builtin type
5945 in the array RID_POINTERS. NAME is the name used when looking
5946 up the builtin type. TYPE is the _TYPE node for the builtin type. */
5947
5948 static void
5949 record_builtin_type (rid_index, name, type)
5950 enum rid rid_index;
5951 const char *name;
5952 tree type;
5953 {
5954 tree rname = NULL_TREE, tname = NULL_TREE;
5955 tree tdecl = NULL_TREE;
5956
5957 if ((int) rid_index < (int) RID_MAX)
5958 rname = ridpointers[(int) rid_index];
5959 if (name)
5960 tname = get_identifier (name);
5961
5962 TYPE_BUILT_IN (type) = 1;
5963
5964 if (tname)
5965 {
5966 tdecl = pushdecl (build_decl (TYPE_DECL, tname, type));
5967 set_identifier_type_value (tname, NULL_TREE);
5968 if ((int) rid_index < (int) RID_MAX)
5969 /* Built-in types live in the global namespace. */
5970 SET_IDENTIFIER_GLOBAL_VALUE (tname, tdecl);
5971 }
5972 if (rname != NULL_TREE)
5973 {
5974 if (tname != NULL_TREE)
5975 {
5976 set_identifier_type_value (rname, NULL_TREE);
5977 SET_IDENTIFIER_GLOBAL_VALUE (rname, tdecl);
5978 }
5979 else
5980 {
5981 tdecl = pushdecl (build_decl (TYPE_DECL, rname, type));
5982 set_identifier_type_value (rname, NULL_TREE);
5983 }
5984 }
5985 }
5986
5987 /* Record one of the standard Java types.
5988 * Declare it as having the given NAME.
5989 * If SIZE > 0, it is the size of one of the integral types;
5990 * otherwise it is the negative of the size of one of the other types. */
5991
5992 static tree
5993 record_builtin_java_type (name, size)
5994 const char *name;
5995 int size;
5996 {
5997 tree type, decl;
5998 if (size > 0)
5999 type = make_signed_type (size);
6000 else if (size > -32)
6001 { /* "__java_char" or ""__java_boolean". */
6002 type = make_unsigned_type (-size);
6003 /*if (size == -1) TREE_SET_CODE (type, BOOLEAN_TYPE);*/
6004 }
6005 else
6006 { /* "__java_float" or ""__java_double". */
6007 type = make_node (REAL_TYPE);
6008 TYPE_PRECISION (type) = - size;
6009 layout_type (type);
6010 }
6011 record_builtin_type (RID_MAX, name, type);
6012 decl = TYPE_NAME (type);
6013
6014 /* Suppress generate debug symbol entries for these types,
6015 since for normal C++ they are just clutter.
6016 However, push_lang_context undoes this if extern "Java" is seen. */
6017 DECL_IGNORED_P (decl) = 1;
6018
6019 TYPE_FOR_JAVA (type) = 1;
6020 return type;
6021 }
6022
6023 /* Push a type into the namespace so that the back-ends ignore it. */
6024
6025 static void
6026 record_unknown_type (type, name)
6027 tree type;
6028 const char *name;
6029 {
6030 tree decl = pushdecl (build_decl (TYPE_DECL, get_identifier (name), type));
6031 /* Make sure the "unknown type" typedecl gets ignored for debug info. */
6032 DECL_IGNORED_P (decl) = 1;
6033 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
6034 TYPE_SIZE (type) = TYPE_SIZE (void_type_node);
6035 TYPE_ALIGN (type) = 1;
6036 TYPE_MODE (type) = TYPE_MODE (void_type_node);
6037 }
6038
6039 /* An string for which we should create an IDENTIFIER_NODE at
6040 startup. */
6041
6042 typedef struct predefined_identifier
6043 {
6044 /* The name of the identifier. */
6045 const char *name;
6046 /* The place where the IDENTIFIER_NODE should be stored. */
6047 tree *node;
6048 } predefined_identifier;
6049
6050 /* Create all the predefined identifiers. */
6051
6052 static void
6053 initialize_predefined_identifiers ()
6054 {
6055 struct predefined_identifier *pid;
6056
6057 /* A table of identifiers to create at startup. */
6058 static predefined_identifier predefined_identifiers[] = {
6059 { "C++", &lang_name_cplusplus },
6060 { "C", &lang_name_c },
6061 { "Java", &lang_name_java },
6062 { CTOR_NAME, &ctor_identifier },
6063 { "__base_ctor", &base_ctor_identifier },
6064 { "__comp_ctor", &complete_ctor_identifier },
6065 { DTOR_NAME, &dtor_identifier },
6066 { "__comp_dtor", &complete_dtor_identifier },
6067 { "__base_dtor", &base_dtor_identifier },
6068 { "__deleting_dtor", &deleting_dtor_identifier },
6069 { VTABLE_DELTA2_NAME, &delta2_identifier },
6070 { VTABLE_DELTA_NAME, &delta_identifier },
6071 { IN_CHARGE_NAME, &in_charge_identifier },
6072 { VTABLE_INDEX_NAME, &index_identifier },
6073 { "nelts", &nelts_identifier },
6074 { THIS_NAME, &this_identifier },
6075 { VTABLE_PFN_NAME, &pfn_identifier },
6076 { "__pfn_or_delta2", &pfn_or_delta2_identifier },
6077 { "_vptr", &vptr_identifier },
6078 { NULL, NULL }
6079 };
6080
6081 for (pid = predefined_identifiers; pid->name; ++pid)
6082 *pid->node = get_identifier (pid->name);
6083 }
6084
6085 /* Create the predefined scalar types of C,
6086 and some nodes representing standard constants (0, 1, (void *)0).
6087 Initialize the global binding level.
6088 Make definitions for built-in primitive functions. */
6089
6090 void
6091 init_decl_processing ()
6092 {
6093 tree fields[20];
6094 int wchar_type_size;
6095 tree array_domain_type;
6096
6097 /* Check to see that the user did not specify an invalid combination
6098 of command-line options. */
6099 if (flag_new_abi && !flag_vtable_thunks)
6100 fatal ("the new ABI requires vtable thunks");
6101
6102 /* Create all the identifiers we need. */
6103 initialize_predefined_identifiers ();
6104
6105 /* Let the back-end now how to save and restore language-specific
6106 per-function globals. */
6107 init_lang_status = &push_cp_function_context;
6108 free_lang_status = &pop_cp_function_context;
6109 mark_lang_status = &mark_cp_function_context;
6110
6111 cp_parse_init ();
6112 init_decl2 ();
6113 init_pt ();
6114
6115 /* Create the global variables. */
6116 push_to_top_level ();
6117
6118 /* Enter the global namespace. */
6119 my_friendly_assert (global_namespace == NULL_TREE, 375);
6120 push_namespace (get_identifier ("::"));
6121 global_namespace = current_namespace;
6122 current_lang_name = NULL_TREE;
6123
6124 /* Adjust various flags based on command-line settings. */
6125 if (flag_strict_prototype == 2)
6126 flag_strict_prototype = pedantic;
6127 if (! flag_permissive && ! pedantic)
6128 flag_pedantic_errors = 1;
6129 if (!flag_no_inline)
6130 flag_inline_trees = 1;
6131
6132 strict_prototypes_lang_c = flag_strict_prototype;
6133
6134 /* Initially, C. */
6135 current_lang_name = lang_name_c;
6136
6137 current_function_decl = NULL_TREE;
6138 current_binding_level = NULL_BINDING_LEVEL;
6139 free_binding_level = NULL_BINDING_LEVEL;
6140
6141 /* Because most segmentation signals can be traced back into user
6142 code, catch them and at least give the user a chance of working
6143 around compiler bugs. */
6144 signal (SIGSEGV, signal_catch);
6145
6146 /* We will also catch aborts in the back-end through signal_catch and
6147 give the user a chance to see where the error might be, and to defeat
6148 aborts in the back-end when there have been errors previously in their
6149 code. */
6150 #ifdef SIGIOT
6151 signal (SIGIOT, signal_catch);
6152 #endif
6153 #ifdef SIGILL
6154 signal (SIGILL, signal_catch);
6155 #endif
6156 #ifdef SIGABRT
6157 signal (SIGABRT, signal_catch);
6158 #endif
6159 #ifdef SIGBUS
6160 signal (SIGBUS, signal_catch);
6161 #endif
6162
6163 build_common_tree_nodes (flag_signed_char);
6164
6165 error_mark_list = build_tree_list (error_mark_node, error_mark_node);
6166 TREE_TYPE (error_mark_list) = error_mark_node;
6167
6168 /* Make the binding_level structure for global names. */
6169 pushlevel (0);
6170 global_binding_level = current_binding_level;
6171 /* The global level is the namespace level of ::. */
6172 NAMESPACE_LEVEL (global_namespace) = global_binding_level;
6173 declare_namespace_level ();
6174
6175 /* Define `int' and `char' first so that dbx will output them first. */
6176 record_builtin_type (RID_INT, NULL_PTR, integer_type_node);
6177 record_builtin_type (RID_CHAR, "char", char_type_node);
6178
6179 /* `signed' is the same as `int' */
6180 record_builtin_type (RID_SIGNED, NULL_PTR, integer_type_node);
6181 record_builtin_type (RID_LONG, "long int", long_integer_type_node);
6182 record_builtin_type (RID_UNSIGNED, "unsigned int", unsigned_type_node);
6183 record_builtin_type (RID_MAX, "long unsigned int", long_unsigned_type_node);
6184 record_builtin_type (RID_MAX, "unsigned long", long_unsigned_type_node);
6185 record_builtin_type (RID_MAX, "long long int", long_long_integer_type_node);
6186 record_builtin_type (RID_MAX, "long long unsigned int",
6187 long_long_unsigned_type_node);
6188 record_builtin_type (RID_MAX, "long long unsigned",
6189 long_long_unsigned_type_node);
6190 record_builtin_type (RID_SHORT, "short int", short_integer_type_node);
6191 record_builtin_type (RID_MAX, "short unsigned int", short_unsigned_type_node);
6192 record_builtin_type (RID_MAX, "unsigned short", short_unsigned_type_node);
6193
6194 ptrdiff_type_node
6195 = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (PTRDIFF_TYPE)));
6196
6197 /* Define both `signed char' and `unsigned char'. */
6198 record_builtin_type (RID_MAX, "signed char", signed_char_type_node);
6199 record_builtin_type (RID_MAX, "unsigned char", unsigned_char_type_node);
6200
6201 /* `unsigned long' is the standard type for sizeof.
6202 Note that stddef.h uses `unsigned long',
6203 and this must agree, even if long and int are the same size. */
6204 set_sizetype
6205 (TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (SIZE_TYPE))));
6206
6207 /* Create the widest literal types. */
6208 widest_integer_literal_type_node = make_signed_type (HOST_BITS_PER_WIDE_INT * 2);
6209 pushdecl (build_decl (TYPE_DECL, NULL_TREE,
6210 widest_integer_literal_type_node));
6211
6212 widest_unsigned_literal_type_node = make_unsigned_type (HOST_BITS_PER_WIDE_INT * 2);
6213 pushdecl (build_decl (TYPE_DECL, NULL_TREE,
6214 widest_unsigned_literal_type_node));
6215
6216 /* These are types that type_for_size and type_for_mode use. */
6217 pushdecl (build_decl (TYPE_DECL, NULL_TREE, intQI_type_node));
6218 pushdecl (build_decl (TYPE_DECL, NULL_TREE, intHI_type_node));
6219 pushdecl (build_decl (TYPE_DECL, NULL_TREE, intSI_type_node));
6220 pushdecl (build_decl (TYPE_DECL, NULL_TREE, intDI_type_node));
6221 #if HOST_BITS_PER_WIDE_INT >= 64
6222 pushdecl (build_decl (TYPE_DECL, get_identifier ("__int128_t"), intTI_type_node));
6223 #endif
6224 pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intQI_type_node));
6225 pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intHI_type_node));
6226 pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intSI_type_node));
6227 pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intDI_type_node));
6228 #if HOST_BITS_PER_WIDE_INT >= 64
6229 pushdecl (build_decl (TYPE_DECL, get_identifier ("__uint128_t"), unsigned_intTI_type_node));
6230 #endif
6231
6232 build_common_tree_nodes_2 (flag_short_double);
6233
6234 java_byte_type_node = record_builtin_java_type ("__java_byte", 8);
6235 java_short_type_node = record_builtin_java_type ("__java_short", 16);
6236 java_int_type_node = record_builtin_java_type ("__java_int", 32);
6237 java_long_type_node = record_builtin_java_type ("__java_long", 64);
6238 java_float_type_node = record_builtin_java_type ("__java_float", -32);
6239 java_double_type_node = record_builtin_java_type ("__java_double", -64);
6240 java_char_type_node = record_builtin_java_type ("__java_char", -16);
6241 java_boolean_type_node = record_builtin_java_type ("__java_boolean", -1);
6242
6243 integer_two_node = build_int_2 (2, 0);
6244 TREE_TYPE (integer_two_node) = integer_type_node;
6245 integer_three_node = build_int_2 (3, 0);
6246 TREE_TYPE (integer_three_node) = integer_type_node;
6247
6248 boolean_type_node = make_unsigned_type (BOOL_TYPE_SIZE);
6249 TREE_SET_CODE (boolean_type_node, BOOLEAN_TYPE);
6250 TYPE_MAX_VALUE (boolean_type_node) = build_int_2 (1, 0);
6251 TREE_TYPE (TYPE_MAX_VALUE (boolean_type_node)) = boolean_type_node;
6252 TYPE_PRECISION (boolean_type_node) = 1;
6253 record_builtin_type (RID_BOOL, "bool", boolean_type_node);
6254 boolean_false_node = build_int_2 (0, 0);
6255 TREE_TYPE (boolean_false_node) = boolean_type_node;
6256 boolean_true_node = build_int_2 (1, 0);
6257 TREE_TYPE (boolean_true_node) = boolean_type_node;
6258
6259 signed_size_zero_node = build_int_2 (0, 0);
6260 record_builtin_type (RID_FLOAT, NULL_PTR, float_type_node);
6261 record_builtin_type (RID_DOUBLE, NULL_PTR, double_type_node);
6262 record_builtin_type (RID_MAX, "long double", long_double_type_node);
6263
6264 pushdecl (build_decl (TYPE_DECL, get_identifier ("complex int"),
6265 complex_integer_type_node));
6266 pushdecl (build_decl (TYPE_DECL, get_identifier ("complex float"),
6267 complex_float_type_node));
6268 pushdecl (build_decl (TYPE_DECL, get_identifier ("complex double"),
6269 complex_double_type_node));
6270 pushdecl (build_decl (TYPE_DECL, get_identifier ("complex long double"),
6271 complex_long_double_type_node));
6272
6273 TREE_TYPE (signed_size_zero_node) = make_signed_type (TYPE_PRECISION (sizetype));
6274
6275 record_builtin_type (RID_VOID, NULL_PTR, void_type_node);
6276 void_list_node = build_tree_list (NULL_TREE, void_type_node);
6277 TREE_PARMLIST (void_list_node) = 1;
6278
6279 /* Used for expressions that do nothing, but are not errors. */
6280 void_zero_node = build_int_2 (0, 0);
6281 TREE_TYPE (void_zero_node) = void_type_node;
6282
6283 string_type_node = build_pointer_type (char_type_node);
6284 const_string_type_node
6285 = build_pointer_type (build_qualified_type (char_type_node,
6286 TYPE_QUAL_CONST));
6287 empty_except_spec = build_tree_list (NULL_TREE, NULL_TREE);
6288 #if 0
6289 record_builtin_type (RID_MAX, NULL_PTR, string_type_node);
6290 #endif
6291
6292 /* Make a type to be the domain of a few array types
6293 whose domains don't really matter.
6294 200 is small enough that it always fits in size_t. */
6295 array_domain_type = build_index_type (build_int_2 (200, 0));
6296
6297 /* Make a type for arrays of characters.
6298 With luck nothing will ever really depend on the length of this
6299 array type. */
6300 char_array_type_node
6301 = build_array_type (char_type_node, array_domain_type);
6302 /* Likewise for arrays of ints. */
6303 int_array_type_node
6304 = build_array_type (integer_type_node, array_domain_type);
6305
6306 if (flag_new_abi)
6307 delta_type_node = ptrdiff_type_node;
6308 else if (flag_huge_objects)
6309 delta_type_node = long_integer_type_node;
6310 else
6311 delta_type_node = short_integer_type_node;
6312
6313 if (flag_new_abi)
6314 vtable_index_type = ptrdiff_type_node;
6315 else
6316 vtable_index_type = delta_type_node;
6317
6318 default_function_type
6319 = build_function_type (integer_type_node, NULL_TREE);
6320
6321 ptr_type_node = build_pointer_type (void_type_node);
6322 const_ptr_type_node
6323 = build_pointer_type (build_qualified_type (void_type_node,
6324 TYPE_QUAL_CONST));
6325 c_common_nodes_and_builtins (1, flag_no_builtin, flag_no_nonansi_builtin);
6326 lang_type_promotes_to = convert_type_from_ellipsis;
6327
6328 void_ftype_ptr
6329 = build_exception_variant (void_ftype_ptr, empty_except_spec);
6330
6331 /* C++ extensions */
6332
6333 unknown_type_node = make_node (UNKNOWN_TYPE);
6334 record_unknown_type (unknown_type_node, "unknown type");
6335
6336 /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node. */
6337 TREE_TYPE (unknown_type_node) = unknown_type_node;
6338
6339 TREE_TYPE (null_node) = type_for_size (POINTER_SIZE, 0);
6340
6341 /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
6342 result. */
6343 TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
6344 TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
6345
6346 /* This is special for C++ so functions can be overloaded. */
6347 wchar_type_node = get_identifier (flag_short_wchar
6348 ? "short unsigned int"
6349 : WCHAR_TYPE);
6350 wchar_type_node = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (wchar_type_node));
6351 wchar_type_size = TYPE_PRECISION (wchar_type_node);
6352 signed_wchar_type_node = make_signed_type (wchar_type_size);
6353 unsigned_wchar_type_node = make_unsigned_type (wchar_type_size);
6354 wchar_type_node
6355 = TREE_UNSIGNED (wchar_type_node)
6356 ? unsigned_wchar_type_node
6357 : signed_wchar_type_node;
6358 record_builtin_type (RID_WCHAR, "__wchar_t", wchar_type_node);
6359
6360 /* Artificial declaration of wchar_t -- can be bashed */
6361 wchar_decl_node = build_decl (TYPE_DECL, get_identifier ("wchar_t"),
6362 wchar_type_node);
6363 pushdecl (wchar_decl_node);
6364
6365 /* This is for wide string constants. */
6366 wchar_array_type_node
6367 = build_array_type (wchar_type_node, array_domain_type);
6368
6369 if (flag_vtable_thunks)
6370 {
6371 /* Make sure we get a unique function type, so we can give
6372 its pointer type a name. (This wins for gdb.) */
6373 tree vfunc_type = make_node (FUNCTION_TYPE);
6374 TREE_TYPE (vfunc_type) = integer_type_node;
6375 TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
6376 layout_type (vfunc_type);
6377
6378 vtable_entry_type = build_pointer_type (vfunc_type);
6379 }
6380 else
6381 {
6382 vtable_entry_type = make_aggr_type (RECORD_TYPE);
6383 fields[0] = build_lang_decl (FIELD_DECL, delta_identifier,
6384 delta_type_node);
6385 fields[1] = build_lang_decl (FIELD_DECL, index_identifier,
6386 delta_type_node);
6387 fields[2] = build_lang_decl (FIELD_DECL, pfn_identifier,
6388 ptr_type_node);
6389 finish_builtin_type (vtable_entry_type, VTBL_PTR_TYPE, fields, 2,
6390 double_type_node);
6391
6392 /* Make this part of an invisible union. */
6393 fields[3] = copy_node (fields[2]);
6394 TREE_TYPE (fields[3]) = delta_type_node;
6395 DECL_NAME (fields[3]) = delta2_identifier;
6396 DECL_MODE (fields[3]) = TYPE_MODE (delta_type_node);
6397 DECL_SIZE (fields[3]) = TYPE_SIZE (delta_type_node);
6398 DECL_SIZE_UNIT (fields[3]) = TYPE_SIZE_UNIT (delta_type_node);
6399 TREE_UNSIGNED (fields[3]) = 0;
6400 TREE_CHAIN (fields[2]) = fields[3];
6401 vtable_entry_type = build_qualified_type (vtable_entry_type,
6402 TYPE_QUAL_CONST);
6403 }
6404 record_builtin_type (RID_MAX, VTBL_PTR_TYPE, vtable_entry_type);
6405
6406 vtbl_type_node
6407 = build_cplus_array_type (vtable_entry_type, NULL_TREE);
6408 layout_type (vtbl_type_node);
6409 vtbl_type_node = build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
6410 record_builtin_type (RID_MAX, NULL_PTR, vtbl_type_node);
6411 vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
6412 layout_type (vtbl_ptr_type_node);
6413 record_builtin_type (RID_MAX, NULL_PTR, vtbl_ptr_type_node);
6414
6415 std_node = build_decl (NAMESPACE_DECL,
6416 get_identifier (flag_honor_std ? "fake std":"std"),
6417 void_type_node);
6418 pushdecl (std_node);
6419
6420 if (flag_new_abi)
6421 {
6422 push_namespace (get_identifier ("__cxxabiv1"));
6423 abi_node = current_namespace;
6424 pop_namespace ();
6425 }
6426
6427 global_type_node = make_node (LANG_TYPE);
6428 record_unknown_type (global_type_node, "global type");
6429
6430 /* Now, C++. */
6431 current_lang_name = lang_name_cplusplus;
6432
6433 {
6434 tree bad_alloc_type_node, newtype, deltype;
6435 if (flag_honor_std)
6436 push_namespace (get_identifier ("std"));
6437 bad_alloc_type_node = xref_tag
6438 (class_type_node, get_identifier ("bad_alloc"), 1);
6439 if (flag_honor_std)
6440 pop_namespace ();
6441 newtype = build_exception_variant
6442 (ptr_ftype_sizetype, add_exception_specifier (NULL_TREE, bad_alloc_type_node, -1));
6443 deltype = build_exception_variant (void_ftype_ptr, empty_except_spec);
6444 push_cp_library_fn (ansi_opname[(int) NEW_EXPR], newtype);
6445 push_cp_library_fn (ansi_opname[(int) VEC_NEW_EXPR], newtype);
6446 global_delete_fndecl = push_cp_library_fn (ansi_opname[(int) DELETE_EXPR],
6447 deltype);
6448 push_cp_library_fn (ansi_opname[(int) VEC_DELETE_EXPR], deltype);
6449 }
6450
6451 abort_fndecl
6452 = build_library_fn_ptr ("__pure_virtual", void_ftype);
6453
6454 /* Perform other language dependent initializations. */
6455 init_class_processing ();
6456 init_init_processing ();
6457 init_search_processing ();
6458 init_rtti_processing ();
6459
6460 if (flag_exceptions)
6461 init_exception_processing ();
6462 if (flag_no_inline)
6463 {
6464 flag_inline_functions = 0;
6465 }
6466
6467 if (! supports_one_only ())
6468 flag_weak = 0;
6469
6470 /* Create the global bindings for __FUNCTION__ and __PRETTY_FUNCTION__. */
6471 make_fname_decl = cp_make_fname_decl;
6472 declare_function_name ();
6473
6474 /* Prepare to check format strings against argument lists. */
6475 init_function_format_info ();
6476
6477 /* Show we use EH for cleanups. */
6478 using_eh_for_cleanups ();
6479
6480 print_error_function = lang_print_error_function;
6481 lang_get_alias_set = &c_get_alias_set;
6482 valid_lang_attribute = cp_valid_lang_attribute;
6483
6484 /* Maintain consistency. Perhaps we should just complain if they
6485 say -fwritable-strings? */
6486 if (flag_writable_strings)
6487 flag_const_strings = 0;
6488
6489 /* Add GC roots for all of our global variables. */
6490 ggc_add_tree_root (c_global_trees, sizeof c_global_trees / sizeof(tree));
6491 ggc_add_tree_root (cp_global_trees, sizeof cp_global_trees / sizeof(tree));
6492 ggc_add_tree_root (&integer_three_node, 1);
6493 ggc_add_tree_root (&integer_two_node, 1);
6494 ggc_add_tree_root (&signed_size_zero_node, 1);
6495 ggc_add_tree_root (&size_one_node, 1);
6496 ggc_add_tree_root (&size_zero_node, 1);
6497 ggc_add_root (&global_binding_level, 1, sizeof global_binding_level,
6498 mark_binding_level);
6499 ggc_add_root (&scope_chain, 1, sizeof scope_chain, &mark_saved_scope);
6500 ggc_add_tree_root (&static_ctors, 1);
6501 ggc_add_tree_root (&static_dtors, 1);
6502 ggc_add_tree_root (&lastiddecl, 1);
6503
6504 ggc_add_tree_root (&last_function_parm_tags, 1);
6505 ggc_add_tree_root (&current_function_return_value, 1);
6506 ggc_add_tree_root (&current_function_parms, 1);
6507 ggc_add_tree_root (&current_function_parm_tags, 1);
6508 ggc_add_tree_root (&last_function_parms, 1);
6509 ggc_add_tree_root (&error_mark_list, 1);
6510
6511 ggc_add_tree_root (&global_namespace, 1);
6512 ggc_add_tree_root (&global_type_node, 1);
6513 ggc_add_tree_root (&anonymous_namespace_name, 1);
6514
6515 ggc_add_tree_root (&got_object, 1);
6516 ggc_add_tree_root (&got_scope, 1);
6517
6518 ggc_add_tree_root (&current_lang_name, 1);
6519 ggc_add_tree_root (&static_aggregates, 1);
6520 }
6521
6522 /* Create the VAR_DECL for __FUNCTION__ etc. ID is the name to give the
6523 decl, NAME is the initialization string and TYPE_DEP indicates whether
6524 NAME depended on the type of the function. We make use of that to detect
6525 __PRETTY_FUNCTION__ inside a template fn. Because we build a tree for
6526 the function before emitting any of it, we don't need to treat the
6527 VAR_DECL specially. We can decide whether to emit it later, if it was
6528 used. */
6529
6530 static tree
6531 cp_make_fname_decl (id, name, type_dep)
6532 tree id;
6533 const char *name;
6534 int type_dep;
6535 {
6536 tree decl, type, init;
6537 size_t length = strlen (name);
6538 tree domain = NULL_TREE;
6539
6540 if (!processing_template_decl)
6541 type_dep = 0;
6542 if (!type_dep)
6543 domain = build_index_type (build_int_2 (length, 0));
6544
6545 type = build_cplus_array_type
6546 (build_qualified_type (char_type_node, TYPE_QUAL_CONST),
6547 domain);
6548
6549 decl = build_lang_decl (VAR_DECL, id, type);
6550 TREE_STATIC (decl) = 1;
6551 TREE_READONLY (decl) = 1;
6552 DECL_SOURCE_LINE (decl) = 0;
6553 DECL_ARTIFICIAL (decl) = 1;
6554 DECL_IN_SYSTEM_HEADER (decl) = 1;
6555 pushdecl (decl);
6556 if (processing_template_decl)
6557 decl = push_template_decl (decl);
6558 if (type_dep)
6559 {
6560 init = build (FUNCTION_NAME, type);
6561 DECL_PRETTY_FUNCTION_P (decl) = 1;
6562 }
6563 else
6564 {
6565 init = build_string (length + 1, name);
6566 TREE_TYPE (init) = type;
6567 }
6568 DECL_INITIAL (decl) = init;
6569 cp_finish_decl (decl, init, NULL_TREE, LOOKUP_ONLYCONVERTING);
6570
6571 /* We will have to make sure we only emit this, if it is actually used. */
6572 return decl;
6573 }
6574
6575 /* Function to print any language-specific context for an error message. */
6576
6577 static void
6578 lang_print_error_function (file)
6579 const char *file;
6580 {
6581 default_print_error_function (file);
6582 maybe_print_template_context ();
6583 }
6584
6585 /* Entry point for the benefit of c_common_nodes_and_builtins.
6586
6587 Make a definition for a builtin function named NAME and whose data type
6588 is TYPE. TYPE should be a function type with argument types.
6589
6590 CLASS and CODE tell later passes how to compile calls to this function.
6591 See tree.h for possible values.
6592
6593 If LIBNAME is nonzero, use that for DECL_ASSEMBLER_NAME,
6594 the name to be called if we can't opencode the function. */
6595
6596 tree
6597 builtin_function (name, type, code, class, libname)
6598 const char *name;
6599 tree type;
6600 int code;
6601 enum built_in_class class;
6602 const char *libname;
6603 {
6604 tree decl = build_library_fn_1 (get_identifier (name), type);
6605 DECL_BUILT_IN_CLASS (decl) = class;
6606 DECL_FUNCTION_CODE (decl) = code;
6607
6608 my_friendly_assert (DECL_CONTEXT (decl) == NULL_TREE, 392);
6609
6610 /* Since `pushdecl' relies on DECL_ASSEMBLER_NAME instead of DECL_NAME,
6611 we cannot change DECL_ASSEMBLER_NAME until we have installed this
6612 function in the namespace. */
6613 pushdecl (decl);
6614 if (libname)
6615 DECL_ASSEMBLER_NAME (decl) = get_identifier (libname);
6616 make_function_rtl (decl);
6617 return decl;
6618 }
6619
6620 /* Generate a FUNCTION_DECL with the typical flags for a runtime library
6621 function. Not called directly. */
6622
6623 static tree
6624 build_library_fn_1 (name, type)
6625 tree name;
6626 tree type;
6627 {
6628 tree fn = build_lang_decl (FUNCTION_DECL, name, type);
6629 DECL_EXTERNAL (fn) = 1;
6630 TREE_PUBLIC (fn) = 1;
6631 DECL_ARTIFICIAL (fn) = 1;
6632 TREE_NOTHROW (fn) = 1;
6633 return fn;
6634 }
6635
6636 /* Returns the _DECL for a library function with C linkage.
6637 We assume that such functions never throw; if this is incorrect,
6638 callers should unset TREE_NOTHROW. */
6639
6640 tree
6641 build_library_fn (name, type)
6642 tree name;
6643 tree type;
6644 {
6645 tree fn = build_library_fn_1 (name, type);
6646 make_function_rtl (fn);
6647 return fn;
6648 }
6649
6650 /* Returns the _DECL for a library function with C++ linkage. */
6651
6652 tree
6653 build_cp_library_fn (name, type)
6654 tree name;
6655 tree type;
6656 {
6657 tree fn = build_library_fn_1 (name, type);
6658 TREE_NOTHROW (fn) = TYPE_NOTHROW_P (type);
6659 set_mangled_name_for_decl (fn);
6660 make_function_rtl (fn);
6661 return fn;
6662 }
6663
6664 /* Like build_library_fn, but takes a C string instead of an
6665 IDENTIFIER_NODE. */
6666
6667 tree
6668 build_library_fn_ptr (name, type)
6669 const char *name;
6670 tree type;
6671 {
6672 return build_library_fn (get_identifier (name), type);
6673 }
6674
6675 /* Like build_cp_library_fn, but takes a C string instead of an
6676 IDENTIFIER_NODE. */
6677
6678 tree
6679 build_cp_library_fn_ptr (name, type)
6680 const char *name;
6681 tree type;
6682 {
6683 return build_cp_library_fn (get_identifier (name), type);
6684 }
6685
6686 /* Like build_library_fn, but also pushes the function so that we will
6687 be able to find it via IDENTIFIER_GLOBAL_VALUE. */
6688
6689 tree
6690 push_library_fn (name, type)
6691 tree name, type;
6692 {
6693 tree fn = build_library_fn (name, type);
6694 pushdecl_top_level (fn);
6695 return fn;
6696 }
6697
6698 /* Like build_cp_library_fn, but also pushes the function so that it
6699 will be found by normal lookup. */
6700
6701 tree
6702 push_cp_library_fn (name, type)
6703 tree name;
6704 tree type;
6705 {
6706 tree fn = build_cp_library_fn (name, type);
6707 pushdecl (fn);
6708 return fn;
6709 }
6710
6711 /* Like push_library_fn, but takes a TREE_LIST of parm types rather than
6712 a FUNCTION_TYPE. */
6713
6714 tree
6715 push_void_library_fn (name, parmtypes)
6716 tree name, parmtypes;
6717 {
6718 tree type = build_function_type (void_type_node, parmtypes);
6719 return push_library_fn (name, type);
6720 }
6721
6722 /* Like push_library_fn, but also note that this function throws
6723 and does not return. Used for __throw_foo and the like. */
6724
6725 tree
6726 push_throw_library_fn (name, type)
6727 tree name, type;
6728 {
6729 tree fn = push_library_fn (name, type);
6730 TREE_THIS_VOLATILE (fn) = 1;
6731 TREE_NOTHROW (fn) = 0;
6732 return fn;
6733 }
6734 \f
6735 /* When we call finish_struct for an anonymous union, we create
6736 default copy constructors and such. But, an anonymous union
6737 shouldn't have such things; this function undoes the damage to the
6738 anonymous union type T.
6739
6740 (The reason that we create the synthesized methods is that we don't
6741 distinguish `union { int i; }' from `typedef union { int i; } U'.
6742 The first is an anonymous union; the second is just an ordinary
6743 union type.) */
6744
6745 void
6746 fixup_anonymous_aggr (t)
6747 tree t;
6748 {
6749 tree *q;
6750
6751 /* Wipe out memory of synthesized methods */
6752 TYPE_HAS_CONSTRUCTOR (t) = 0;
6753 TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
6754 TYPE_HAS_INIT_REF (t) = 0;
6755 TYPE_HAS_CONST_INIT_REF (t) = 0;
6756 TYPE_HAS_ASSIGN_REF (t) = 0;
6757 TYPE_HAS_CONST_ASSIGN_REF (t) = 0;
6758
6759 /* Splice the implicitly generated functions out of the TYPE_METHODS
6760 list. */
6761 q = &TYPE_METHODS (t);
6762 while (*q)
6763 {
6764 if (DECL_ARTIFICIAL (*q))
6765 *q = TREE_CHAIN (*q);
6766 else
6767 q = &TREE_CHAIN (*q);
6768 }
6769
6770 /* ISO C++ 9.5.3. Anonymous unions may not have function members. */
6771 if (TYPE_METHODS (t))
6772 error ("an anonymous union cannot have function members");
6773 }
6774
6775 /* Make sure that a declaration with no declarator is well-formed, i.e.
6776 just defines a tagged type or anonymous union.
6777
6778 Returns the type defined, if any. */
6779
6780 tree
6781 check_tag_decl (declspecs)
6782 tree declspecs;
6783 {
6784 int found_type = 0;
6785 int saw_friend = 0;
6786 tree ob_modifier = NULL_TREE;
6787 register tree link;
6788 register tree t = NULL_TREE;
6789
6790 for (link = declspecs; link; link = TREE_CHAIN (link))
6791 {
6792 register tree value = TREE_VALUE (link);
6793
6794 if (TYPE_P (value)
6795 || (TREE_CODE (value) == IDENTIFIER_NODE
6796 && IDENTIFIER_GLOBAL_VALUE (value)
6797 && TYPE_P (IDENTIFIER_GLOBAL_VALUE (value))))
6798 {
6799 ++found_type;
6800
6801 if (IS_AGGR_TYPE (value) || TREE_CODE (value) == ENUMERAL_TYPE)
6802 {
6803 my_friendly_assert (TYPE_MAIN_DECL (value) != NULL_TREE, 261);
6804 t = value;
6805 }
6806 }
6807 else if (value == ridpointers[(int) RID_FRIEND])
6808 {
6809 if (current_class_type == NULL_TREE
6810 || current_scope () != current_class_type)
6811 ob_modifier = value;
6812 else
6813 saw_friend = 1;
6814 }
6815 else if (value == ridpointers[(int) RID_STATIC]
6816 || value == ridpointers[(int) RID_EXTERN]
6817 || value == ridpointers[(int) RID_AUTO]
6818 || value == ridpointers[(int) RID_REGISTER]
6819 || value == ridpointers[(int) RID_INLINE]
6820 || value == ridpointers[(int) RID_VIRTUAL]
6821 || value == ridpointers[(int) RID_CONST]
6822 || value == ridpointers[(int) RID_VOLATILE]
6823 || value == ridpointers[(int) RID_EXPLICIT])
6824 ob_modifier = value;
6825 }
6826
6827 if (found_type > 1)
6828 error ("multiple types in one declaration");
6829
6830 if (t == NULL_TREE && ! saw_friend)
6831 pedwarn ("declaration does not declare anything");
6832
6833 /* Check for an anonymous union. We're careful
6834 accessing TYPE_IDENTIFIER because some built-in types, like
6835 pointer-to-member types, do not have TYPE_NAME. */
6836 else if (t && IS_AGGR_TYPE_CODE (TREE_CODE (t))
6837 && TYPE_NAME (t)
6838 && ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
6839 {
6840 /* Anonymous unions are objects, so they can have specifiers. */;
6841 SET_ANON_AGGR_TYPE_P (t);
6842
6843 if (TREE_CODE (t) != UNION_TYPE && pedantic && ! in_system_header)
6844 pedwarn ("ISO C++ prohibits anonymous structs");
6845 }
6846
6847 else if (ob_modifier)
6848 {
6849 if (ob_modifier == ridpointers[(int) RID_INLINE]
6850 || ob_modifier == ridpointers[(int) RID_VIRTUAL])
6851 cp_error ("`%D' can only be specified for functions", ob_modifier);
6852 else if (ob_modifier == ridpointers[(int) RID_FRIEND])
6853 cp_error ("`%D' can only be specified inside a class", ob_modifier);
6854 else if (ob_modifier == ridpointers[(int) RID_EXPLICIT])
6855 cp_error ("`%D' can only be specified for constructors",
6856 ob_modifier);
6857 else
6858 cp_error ("`%D' can only be specified for objects and functions",
6859 ob_modifier);
6860 }
6861
6862 return t;
6863 }
6864
6865 /* Called when a declaration is seen that contains no names to declare.
6866 If its type is a reference to a structure, union or enum inherited
6867 from a containing scope, shadow that tag name for the current scope
6868 with a forward reference.
6869 If its type defines a new named structure or union
6870 or defines an enum, it is valid but we need not do anything here.
6871 Otherwise, it is an error.
6872
6873 C++: may have to grok the declspecs to learn about static,
6874 complain for anonymous unions. */
6875
6876 void
6877 shadow_tag (declspecs)
6878 tree declspecs;
6879 {
6880 tree t = check_tag_decl (declspecs);
6881
6882 if (t)
6883 maybe_process_partial_specialization (t);
6884
6885 /* This is where the variables in an anonymous union are
6886 declared. An anonymous union declaration looks like:
6887 union { ... } ;
6888 because there is no declarator after the union, the parser
6889 sends that declaration here. */
6890 if (t && ANON_AGGR_TYPE_P (t))
6891 {
6892 fixup_anonymous_aggr (t);
6893
6894 if (TYPE_FIELDS (t))
6895 {
6896 tree decl = grokdeclarator (NULL_TREE, declspecs, NORMAL, 0,
6897 NULL_TREE);
6898 finish_anon_union (decl);
6899 }
6900 }
6901 }
6902 \f
6903 /* Decode a "typename", such as "int **", returning a ..._TYPE node. */
6904
6905 tree
6906 groktypename (typename)
6907 tree typename;
6908 {
6909 if (TREE_CODE (typename) != TREE_LIST)
6910 return typename;
6911 return grokdeclarator (TREE_VALUE (typename),
6912 TREE_PURPOSE (typename),
6913 TYPENAME, 0, NULL_TREE);
6914 }
6915
6916 /* Decode a declarator in an ordinary declaration or data definition.
6917 This is called as soon as the type information and variable name
6918 have been parsed, before parsing the initializer if any.
6919 Here we create the ..._DECL node, fill in its type,
6920 and put it on the list of decls for the current context.
6921 The ..._DECL node is returned as the value.
6922
6923 Exception: for arrays where the length is not specified,
6924 the type is left null, to be filled in by `cp_finish_decl'.
6925
6926 Function definitions do not come here; they go to start_function
6927 instead. However, external and forward declarations of functions
6928 do go through here. Structure field declarations are done by
6929 grokfield and not through here. */
6930
6931 tree
6932 start_decl (declarator, declspecs, initialized, attributes, prefix_attributes)
6933 tree declarator, declspecs;
6934 int initialized;
6935 tree attributes, prefix_attributes;
6936 {
6937 register tree decl;
6938 register tree type, tem;
6939 tree context;
6940 extern int have_extern_spec;
6941 extern int used_extern_spec;
6942 tree attrlist;
6943
6944 #if 0
6945 /* See code below that used this. */
6946 int init_written = initialized;
6947 #endif
6948
6949 /* This should only be done once on the top most decl. */
6950 if (have_extern_spec && !used_extern_spec)
6951 {
6952 declspecs = decl_tree_cons (NULL_TREE, get_identifier ("extern"),
6953 declspecs);
6954 used_extern_spec = 1;
6955 }
6956
6957 if (attributes || prefix_attributes)
6958 attrlist = build_tree_list (attributes, prefix_attributes);
6959 else
6960 attrlist = NULL_TREE;
6961
6962 decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
6963 attrlist);
6964
6965 if (decl == NULL_TREE || TREE_CODE (decl) == VOID_TYPE)
6966 return NULL_TREE;
6967
6968 type = TREE_TYPE (decl);
6969
6970 if (type == error_mark_node)
6971 return NULL_TREE;
6972
6973 context = DECL_CONTEXT (decl);
6974
6975 if (initialized && context && TREE_CODE (context) == NAMESPACE_DECL
6976 && context != current_namespace && TREE_CODE (decl) == VAR_DECL)
6977 {
6978 /* When parsing the initializer, lookup should use the object's
6979 namespace. */
6980 push_decl_namespace (context);
6981 }
6982
6983 /* We are only interested in class contexts, later. */
6984 if (context && TREE_CODE (context) == NAMESPACE_DECL)
6985 context = NULL_TREE;
6986
6987 if (initialized)
6988 /* Is it valid for this decl to have an initializer at all?
6989 If not, set INITIALIZED to zero, which will indirectly
6990 tell `cp_finish_decl' to ignore the initializer once it is parsed. */
6991 switch (TREE_CODE (decl))
6992 {
6993 case TYPE_DECL:
6994 /* typedef foo = bar means give foo the same type as bar.
6995 We haven't parsed bar yet, so `cp_finish_decl' will fix that up.
6996 Any other case of an initialization in a TYPE_DECL is an error. */
6997 if (pedantic || list_length (declspecs) > 1)
6998 {
6999 cp_error ("typedef `%D' is initialized", decl);
7000 initialized = 0;
7001 }
7002 break;
7003
7004 case FUNCTION_DECL:
7005 cp_error ("function `%#D' is initialized like a variable", decl);
7006 initialized = 0;
7007 break;
7008
7009 default:
7010 break;
7011 }
7012
7013 if (initialized)
7014 {
7015 if (! toplevel_bindings_p ()
7016 && DECL_EXTERNAL (decl))
7017 cp_warning ("declaration of `%#D' has `extern' and is initialized",
7018 decl);
7019 DECL_EXTERNAL (decl) = 0;
7020 if (toplevel_bindings_p ())
7021 TREE_STATIC (decl) = 1;
7022
7023 /* Tell `pushdecl' this is an initialized decl
7024 even though we don't yet have the initializer expression.
7025 Also tell `cp_finish_decl' it may store the real initializer. */
7026 DECL_INITIAL (decl) = error_mark_node;
7027 }
7028
7029 #ifdef SET_DEFAULT_DECL_ATTRIBUTES
7030 SET_DEFAULT_DECL_ATTRIBUTES (decl, attributes);
7031 #endif
7032
7033 /* Set attributes here so if duplicate decl, will have proper attributes. */
7034 cplus_decl_attributes (decl, attributes, prefix_attributes);
7035
7036 if (context && COMPLETE_TYPE_P (complete_type (context)))
7037 {
7038 push_nested_class (context, 2);
7039
7040 if (TREE_CODE (decl) == VAR_DECL)
7041 {
7042 tree field = lookup_field (context, DECL_NAME (decl), 0, 0);
7043 if (field == NULL_TREE || TREE_CODE (field) != VAR_DECL)
7044 cp_error ("`%#D' is not a static member of `%#T'", decl, context);
7045 else
7046 {
7047 if (DECL_CONTEXT (field) != context)
7048 {
7049 cp_pedwarn ("ISO C++ does not permit `%T::%D' to be defined as `%T::%D'",
7050 DECL_CONTEXT (field), DECL_NAME (decl),
7051 context, DECL_NAME (decl));
7052 DECL_CONTEXT (decl) = DECL_CONTEXT (field);
7053 }
7054 /* Static data member are tricky; an in-class initialization
7055 still doesn't provide a definition, so the in-class
7056 declaration will have DECL_EXTERNAL set, but will have an
7057 initialization. Thus, duplicate_decls won't warn
7058 about this situation, and so we check here. */
7059 if (DECL_INITIAL (decl) && DECL_INITIAL (field))
7060 cp_error ("duplicate initialization of %D", decl);
7061 if (duplicate_decls (decl, field))
7062 decl = field;
7063 }
7064 }
7065 else
7066 {
7067 tree field = check_classfn (context, decl);
7068 if (field && duplicate_decls (decl, field))
7069 decl = field;
7070 }
7071
7072 /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set. */
7073 DECL_IN_AGGR_P (decl) = 0;
7074 if ((DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl))
7075 || CLASSTYPE_USE_TEMPLATE (context))
7076 {
7077 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
7078 /* [temp.expl.spec] An explicit specialization of a static data
7079 member of a template is a definition if the declaration
7080 includes an initializer; otherwise, it is a declaration.
7081
7082 We check for processing_specialization so this only applies
7083 to the new specialization syntax. */
7084 if (DECL_INITIAL (decl) == NULL_TREE && processing_specialization)
7085 DECL_EXTERNAL (decl) = 1;
7086 }
7087
7088 if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl))
7089 cp_pedwarn ("declaration of `%#D' outside of class is not definition",
7090 decl);
7091 }
7092
7093 /* Enter this declaration into the symbol table. */
7094 tem = maybe_push_decl (decl);
7095
7096 if (processing_template_decl)
7097 tem = push_template_decl (tem);
7098
7099 #if ! defined (ASM_OUTPUT_BSS) && ! defined (ASM_OUTPUT_ALIGNED_BSS)
7100 /* Tell the back-end to use or not use .common as appropriate. If we say
7101 -fconserve-space, we want this to save .data space, at the expense of
7102 wrong semantics. If we say -fno-conserve-space, we want this to
7103 produce errors about redefs; to do this we force variables into the
7104 data segment. */
7105 DECL_COMMON (tem) = flag_conserve_space || ! TREE_PUBLIC (tem);
7106 #endif
7107
7108 if (! processing_template_decl)
7109 start_decl_1 (tem);
7110
7111 return tem;
7112 }
7113
7114 void
7115 start_decl_1 (decl)
7116 tree decl;
7117 {
7118 tree type = TREE_TYPE (decl);
7119 int initialized = (DECL_INITIAL (decl) != NULL_TREE);
7120
7121 if (type == error_mark_node)
7122 return;
7123
7124 /* If this type of object needs a cleanup, but we're not allowed to
7125 add any more objects with cleanups to the current scope, create a
7126 new binding level. */
7127 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
7128 && current_binding_level->more_cleanups_ok == 0)
7129 {
7130 keep_next_level (2);
7131 pushlevel (1);
7132 clear_last_expr ();
7133 add_scope_stmt (/*begin_p=*/1, /*partial_p=*/1);
7134 }
7135
7136 if (initialized)
7137 /* Is it valid for this decl to have an initializer at all?
7138 If not, set INITIALIZED to zero, which will indirectly
7139 tell `cp_finish_decl' to ignore the initializer once it is parsed. */
7140 {
7141 /* Don't allow initializations for incomplete types except for
7142 arrays which might be completed by the initialization. */
7143 if (COMPLETE_TYPE_P (complete_type (type)))
7144 ; /* A complete type is ok. */
7145 else if (TREE_CODE (type) != ARRAY_TYPE)
7146 {
7147 cp_error ("variable `%#D' has initializer but incomplete type",
7148 decl);
7149 initialized = 0;
7150 type = TREE_TYPE (decl) = error_mark_node;
7151 }
7152 else if (!COMPLETE_TYPE_P (complete_type (TREE_TYPE (type))))
7153 {
7154 if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
7155 cp_error ("elements of array `%#D' have incomplete type", decl);
7156 /* else we already gave an error in start_decl. */
7157 initialized = 0;
7158 }
7159 }
7160
7161 if (!initialized
7162 && TREE_CODE (decl) != TYPE_DECL
7163 && TREE_CODE (decl) != TEMPLATE_DECL
7164 && type != error_mark_node
7165 && IS_AGGR_TYPE (type)
7166 && ! DECL_EXTERNAL (decl))
7167 {
7168 if ((! processing_template_decl || ! uses_template_parms (type))
7169 && !COMPLETE_TYPE_P (complete_type (type)))
7170 {
7171 cp_error ("aggregate `%#D' has incomplete type and cannot be initialized",
7172 decl);
7173 /* Change the type so that assemble_variable will give
7174 DECL an rtl we can live with: (mem (const_int 0)). */
7175 type = TREE_TYPE (decl) = error_mark_node;
7176 }
7177 else
7178 {
7179 /* If any base type in the hierarchy of TYPE needs a constructor,
7180 then we set initialized to 1. This way any nodes which are
7181 created for the purposes of initializing this aggregate
7182 will live as long as it does. This is necessary for global
7183 aggregates which do not have their initializers processed until
7184 the end of the file. */
7185 initialized = TYPE_NEEDS_CONSTRUCTING (type);
7186 }
7187 }
7188
7189 if (! initialized)
7190 DECL_INITIAL (decl) = NULL_TREE;
7191 }
7192
7193 /* Handle initialization of references.
7194 These three arguments are from `cp_finish_decl', and have the
7195 same meaning here that they do there.
7196
7197 Quotes on semantics can be found in ARM 8.4.3. */
7198
7199 static void
7200 grok_reference_init (decl, type, init)
7201 tree decl, type, init;
7202 {
7203 tree tmp;
7204
7205 if (init == NULL_TREE)
7206 {
7207 if ((DECL_LANG_SPECIFIC (decl) == 0
7208 || DECL_IN_AGGR_P (decl) == 0)
7209 && ! DECL_THIS_EXTERN (decl))
7210 cp_error ("`%D' declared as reference but not initialized", decl);
7211 return;
7212 }
7213
7214 if (init == error_mark_node)
7215 return;
7216
7217 if (TREE_CODE (init) == CONSTRUCTOR)
7218 {
7219 cp_error ("ISO C++ forbids use of initializer list to initialize reference `%D'", decl);
7220 return;
7221 }
7222
7223 if (TREE_CODE (init) == TREE_LIST)
7224 init = build_compound_expr (init);
7225
7226 if (TREE_CODE (TREE_TYPE (init)) == REFERENCE_TYPE)
7227 init = convert_from_reference (init);
7228
7229 if (TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE
7230 && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
7231 {
7232 /* Note: default conversion is only called in very special cases. */
7233 init = default_conversion (init);
7234 }
7235
7236 /* Convert INIT to the reference type TYPE. This may involve the
7237 creation of a temporary, whose lifetime must be the same as that
7238 of the reference. If so, a DECL_STMT for the temporary will be
7239 added just after the DECL_STMT for DECL. That's why we don't set
7240 DECL_INITIAL for local references (instead assigning to them
7241 explicitly); we need to allow the temporary to be initialized
7242 first. */
7243 tmp = convert_to_reference
7244 (type, init, CONV_IMPLICIT,
7245 LOOKUP_SPECULATIVELY|LOOKUP_NORMAL|DIRECT_BIND, decl);
7246
7247 if (tmp == error_mark_node)
7248 return;
7249 else if (tmp != NULL_TREE)
7250 {
7251 init = tmp;
7252 tmp = save_expr (tmp);
7253 if (building_stmt_tree ())
7254 {
7255 /* Initialize the declaration. */
7256 tmp = build (INIT_EXPR, TREE_TYPE (decl), decl, tmp);
7257 finish_expr_stmt (tmp);
7258 }
7259 else
7260 DECL_INITIAL (decl) = tmp;
7261 }
7262 else
7263 {
7264 cp_error ("cannot initialize `%T' from `%T'", type, TREE_TYPE (init));
7265 return;
7266 }
7267
7268 if (TREE_STATIC (decl) && ! TREE_CONSTANT (DECL_INITIAL (decl)))
7269 {
7270 expand_static_init (decl, DECL_INITIAL (decl));
7271 DECL_INITIAL (decl) = NULL_TREE;
7272 }
7273 return;
7274 }
7275
7276 /* Fill in DECL_INITIAL with some magical value to prevent expand_decl from
7277 mucking with forces it does not comprehend (i.e. initialization with a
7278 constructor). If we are at global scope and won't go into COMMON, fill
7279 it in with a dummy CONSTRUCTOR to force the variable into .data;
7280 otherwise we can use error_mark_node. */
7281
7282 static tree
7283 obscure_complex_init (decl, init)
7284 tree decl, init;
7285 {
7286 if (! flag_no_inline && TREE_STATIC (decl))
7287 {
7288 if (extract_init (decl, init))
7289 return NULL_TREE;
7290 }
7291
7292 #if ! defined (ASM_OUTPUT_BSS) && ! defined (ASM_OUTPUT_ALIGNED_BSS)
7293 if (toplevel_bindings_p () && ! DECL_COMMON (decl))
7294 DECL_INITIAL (decl) = build (CONSTRUCTOR, TREE_TYPE (decl), NULL_TREE,
7295 NULL_TREE);
7296 else
7297 #endif
7298 DECL_INITIAL (decl) = error_mark_node;
7299
7300 return init;
7301 }
7302
7303 /* When parsing `int a[] = {1, 2};' we don't know the size of the
7304 array until we finish parsing the initializer. If that's the
7305 situation we're in, update DECL accordingly. */
7306
7307 static void
7308 maybe_deduce_size_from_array_init (decl, init)
7309 tree decl;
7310 tree init;
7311 {
7312 tree type = TREE_TYPE (decl);
7313
7314 if (TREE_CODE (type) == ARRAY_TYPE
7315 && TYPE_DOMAIN (type) == NULL_TREE
7316 && TREE_CODE (decl) != TYPE_DECL)
7317 {
7318 int do_default
7319 = (TREE_STATIC (decl)
7320 /* Even if pedantic, an external linkage array
7321 may have incomplete type at first. */
7322 ? pedantic && ! DECL_EXTERNAL (decl)
7323 : !DECL_EXTERNAL (decl));
7324 tree initializer = init ? init : DECL_INITIAL (decl);
7325 int failure = complete_array_type (type, initializer, do_default);
7326
7327 if (failure == 1)
7328 cp_error ("initializer fails to determine size of `%D'", decl);
7329
7330 if (failure == 2)
7331 {
7332 if (do_default)
7333 cp_error ("array size missing in `%D'", decl);
7334 /* If a `static' var's size isn't known, make it extern as
7335 well as static, so it does not get allocated. If it's not
7336 `static', then don't mark it extern; finish_incomplete_decl
7337 will give it a default size and it will get allocated. */
7338 else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
7339 DECL_EXTERNAL (decl) = 1;
7340 }
7341
7342 if (pedantic && TYPE_DOMAIN (type) != NULL_TREE
7343 && tree_int_cst_lt (TYPE_MAX_VALUE (TYPE_DOMAIN (type)),
7344 integer_zero_node))
7345 cp_error ("zero-size array `%D'", decl);
7346
7347 layout_decl (decl, 0);
7348 }
7349 }
7350
7351 /* Set DECL_SIZE, DECL_ALIGN, etc. for DECL (a VAR_DECL), and issue
7352 any appropriate error messages regarding the layout. */
7353
7354 static void
7355 layout_var_decl (decl)
7356 tree decl;
7357 {
7358 tree type = TREE_TYPE (decl);
7359 #if 0
7360 tree ttype = target_type (type);
7361 #endif
7362
7363 /* If we haven't already layed out this declaration, do so now.
7364 Note that we must not call complete type for an external object
7365 because it's type might involve templates that we are not
7366 supposed to isntantiate yet. (And it's perfectly legal to say
7367 `extern X x' for some incomplete type `X'.) */
7368 if (!DECL_EXTERNAL (decl))
7369 complete_type (type);
7370 if (!DECL_SIZE (decl) && COMPLETE_TYPE_P (type))
7371 layout_decl (decl, 0);
7372
7373 if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
7374 {
7375 /* An automatic variable with an incomplete type: that is an error.
7376 Don't talk about array types here, since we took care of that
7377 message in grokdeclarator. */
7378 cp_error ("storage size of `%D' isn't known", decl);
7379 TREE_TYPE (decl) = error_mark_node;
7380 }
7381 #if 0
7382 /* Keep this code around in case we later want to control debug info
7383 based on whether a type is "used". (jason 1999-11-11) */
7384
7385 else if (!DECL_EXTERNAL (decl) && IS_AGGR_TYPE (ttype))
7386 /* Let debugger know it should output info for this type. */
7387 note_debug_info_needed (ttype);
7388
7389 if (TREE_STATIC (decl) && DECL_CLASS_SCOPE_P (decl))
7390 note_debug_info_needed (DECL_CONTEXT (decl));
7391 #endif
7392
7393 if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
7394 && DECL_SIZE (decl) != NULL_TREE
7395 && ! TREE_CONSTANT (DECL_SIZE (decl)))
7396 {
7397 if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
7398 constant_expression_warning (DECL_SIZE (decl));
7399 else
7400 cp_error ("storage size of `%D' isn't constant", decl);
7401 }
7402 }
7403
7404 /* If a local static variable is declared in an inline function, or if
7405 we have a weak definition, we must endeavor to create only one
7406 instance of the variable at link-time. */
7407
7408 static void
7409 maybe_commonize_var (decl)
7410 tree decl;
7411 {
7412 /* Static data in a function with comdat linkage also has comdat
7413 linkage. */
7414 if (TREE_STATIC (decl)
7415 /* Don't mess with __FUNCTION__. */
7416 && ! DECL_ARTIFICIAL (decl)
7417 && current_function_decl
7418 && DECL_CONTEXT (decl) == current_function_decl
7419 && (DECL_THIS_INLINE (current_function_decl)
7420 || DECL_TEMPLATE_INSTANTIATION (current_function_decl))
7421 && TREE_PUBLIC (current_function_decl))
7422 {
7423 /* Rather than try to get this right with inlining, we suppress
7424 inlining of such functions. */
7425 current_function_cannot_inline
7426 = "function with static variable cannot be inline";
7427
7428 /* If flag_weak, we don't need to mess with this, as we can just
7429 make the function weak, and let it refer to its unique local
7430 copy. This works because we don't allow the function to be
7431 inlined. */
7432 if (! flag_weak)
7433 {
7434 if (DECL_INTERFACE_KNOWN (current_function_decl))
7435 {
7436 TREE_PUBLIC (decl) = 1;
7437 DECL_EXTERNAL (decl) = DECL_EXTERNAL (current_function_decl);
7438 }
7439 else if (DECL_INITIAL (decl) == NULL_TREE
7440 || DECL_INITIAL (decl) == error_mark_node)
7441 {
7442 TREE_PUBLIC (decl) = 1;
7443 DECL_COMMON (decl) = 1;
7444 }
7445 /* else we lose. We can only do this if we can use common,
7446 which we can't if it has been initialized. */
7447
7448 if (TREE_PUBLIC (decl))
7449 DECL_ASSEMBLER_NAME (decl)
7450 = build_static_name (current_function_decl, DECL_NAME (decl));
7451 else
7452 {
7453 cp_warning_at ("sorry: semantics of inline function static data `%#D' are wrong (you'll wind up with multiple copies)", decl);
7454 cp_warning_at (" you can work around this by removing the initializer", decl);
7455 }
7456 }
7457 }
7458 else if (DECL_LANG_SPECIFIC (decl) && DECL_COMDAT (decl))
7459 /* Set it up again; we might have set DECL_INITIAL since the last
7460 time. */
7461 comdat_linkage (decl);
7462 }
7463
7464 /* Issue an error message if DECL is an uninitialized const variable. */
7465
7466 static void
7467 check_for_uninitialized_const_var (decl)
7468 tree decl;
7469 {
7470 tree type = TREE_TYPE (decl);
7471
7472 /* ``Unless explicitly declared extern, a const object does not have
7473 external linkage and must be initialized. ($8.4; $12.1)'' ARM
7474 7.1.6 */
7475 if (TREE_CODE (decl) == VAR_DECL
7476 && TREE_CODE (type) != REFERENCE_TYPE
7477 && CP_TYPE_CONST_P (type)
7478 && !TYPE_NEEDS_CONSTRUCTING (type)
7479 && !DECL_INITIAL (decl))
7480 cp_error ("uninitialized const `%D'", decl);
7481 }
7482
7483 /* Verify INIT (the initializer for DECL), and record the
7484 initialization in DECL_INITIAL, if appropriate. Returns a new
7485 value for INIT. */
7486
7487 static tree
7488 check_initializer (decl, init)
7489 tree decl;
7490 tree init;
7491 {
7492 tree type;
7493
7494 if (TREE_CODE (decl) == FIELD_DECL)
7495 return init;
7496
7497 type = TREE_TYPE (decl);
7498
7499 /* If `start_decl' didn't like having an initialization, ignore it now. */
7500 if (init != NULL_TREE && DECL_INITIAL (decl) == NULL_TREE)
7501 init = NULL_TREE;
7502
7503 /* Check the initializer. */
7504 if (init)
7505 {
7506 /* Things that are going to be initialized need to have complete
7507 type. */
7508 TREE_TYPE (decl) = type = complete_type (TREE_TYPE (decl));
7509
7510 if (type == error_mark_node)
7511 /* We will have already complained. */
7512 init = NULL_TREE;
7513 else if (COMPLETE_TYPE_P (type) && !TREE_CONSTANT (TYPE_SIZE (type)))
7514 {
7515 cp_error ("variable-sized object `%D' may not be initialized", decl);
7516 init = NULL_TREE;
7517 }
7518 else if (TREE_CODE (type) == ARRAY_TYPE
7519 && !COMPLETE_TYPE_P (TREE_TYPE (type)))
7520 {
7521 cp_error ("elements of array `%#D' have incomplete type", decl);
7522 init = NULL_TREE;
7523 }
7524 else if (!COMPLETE_TYPE_P (type))
7525 {
7526 cp_error ("`%D' has incomplete type", decl);
7527 TREE_TYPE (decl) = error_mark_node;
7528 init = NULL_TREE;
7529 }
7530 }
7531
7532 if (TREE_CODE (decl) == CONST_DECL)
7533 {
7534 my_friendly_assert (TREE_CODE (decl) != REFERENCE_TYPE, 148);
7535
7536 DECL_INITIAL (decl) = init;
7537
7538 /* This will keep us from needing to worry about our obstacks. */
7539 my_friendly_assert (init != NULL_TREE, 149);
7540 init = NULL_TREE;
7541 }
7542 else if (!DECL_EXTERNAL (decl) && TREE_CODE (type) == REFERENCE_TYPE)
7543 {
7544 if (TREE_STATIC (decl))
7545 make_decl_rtl (decl, NULL_PTR, toplevel_bindings_p ());
7546 grok_reference_init (decl, type, init);
7547 init = NULL_TREE;
7548 }
7549 else if (init)
7550 {
7551 if (TYPE_HAS_CONSTRUCTOR (type) || TYPE_NEEDS_CONSTRUCTING (type))
7552 {
7553 if (TREE_CODE (type) == ARRAY_TYPE)
7554 init = digest_init (type, init, (tree *) 0);
7555 else if (TREE_CODE (init) == CONSTRUCTOR
7556 && TREE_HAS_CONSTRUCTOR (init))
7557 {
7558 if (TYPE_NON_AGGREGATE_CLASS (type))
7559 {
7560 cp_error ("`%D' must be initialized by constructor, not by `{...}'",
7561 decl);
7562 init = error_mark_node;
7563 }
7564 else
7565 goto dont_use_constructor;
7566 }
7567 }
7568 else
7569 {
7570 dont_use_constructor:
7571 if (TREE_CODE (init) != TREE_VEC)
7572 init = store_init_value (decl, init);
7573 }
7574
7575 if (init)
7576 /* We must hide the initializer so that expand_decl
7577 won't try to do something it does not understand. */
7578 init = obscure_complex_init (decl, init);
7579 }
7580 else if (DECL_EXTERNAL (decl))
7581 ;
7582 else if (TYPE_P (type)
7583 && (IS_AGGR_TYPE (type) || TYPE_NEEDS_CONSTRUCTING (type)))
7584 {
7585 tree core_type = strip_array_types (type);
7586
7587 if (! TYPE_NEEDS_CONSTRUCTING (core_type))
7588 {
7589 if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type))
7590 cp_error ("structure `%D' with uninitialized const members", decl);
7591 if (CLASSTYPE_REF_FIELDS_NEED_INIT (core_type))
7592 cp_error ("structure `%D' with uninitialized reference members",
7593 decl);
7594 }
7595
7596 check_for_uninitialized_const_var (decl);
7597
7598 if (COMPLETE_TYPE_P (type) && TYPE_NEEDS_CONSTRUCTING (type))
7599 init = obscure_complex_init (decl, NULL_TREE);
7600
7601 }
7602 else
7603 check_for_uninitialized_const_var (decl);
7604
7605 return init;
7606 }
7607
7608 /* If DECL is not a local variable, give it RTL. */
7609
7610 static void
7611 make_rtl_for_nonlocal_decl (decl, init, asmspec)
7612 tree decl;
7613 tree init;
7614 const char *asmspec;
7615 {
7616 int toplev;
7617 tree type;
7618
7619 type = TREE_TYPE (decl);
7620 toplev = toplevel_bindings_p ();
7621
7622 /* Handle non-variables up front. */
7623 if (TREE_CODE (decl) != VAR_DECL)
7624 {
7625 rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
7626 return;
7627 }
7628
7629 /* Set the DECL_ASSEMBLER_NAME for the variable. */
7630 if (asmspec)
7631 DECL_ASSEMBLER_NAME (decl) = get_identifier (asmspec);
7632
7633 if (DECL_VIRTUAL_P (decl))
7634 make_decl_rtl (decl, NULL_PTR, toplev);
7635 else if (TREE_READONLY (decl)
7636 && DECL_INITIAL (decl) != NULL_TREE
7637 && DECL_INITIAL (decl) != error_mark_node
7638 && ! EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl)))
7639 {
7640 DECL_INITIAL (decl) = save_expr (DECL_INITIAL (decl));
7641
7642 if (toplev && ! TREE_PUBLIC (decl))
7643 {
7644 /* If this is a static const, change its apparent linkage
7645 if it belongs to a #pragma interface. */
7646 if (!interface_unknown)
7647 {
7648 TREE_PUBLIC (decl) = 1;
7649 DECL_EXTERNAL (decl) = interface_only;
7650 }
7651 make_decl_rtl (decl, asmspec, toplev);
7652 }
7653 else if (toplev)
7654 rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
7655 }
7656 else if (DECL_LANG_SPECIFIC (decl) && DECL_IN_AGGR_P (decl))
7657 {
7658 my_friendly_assert (TREE_STATIC (decl), 19990828);
7659
7660 if (init == NULL_TREE
7661 #ifdef DEFAULT_STATIC_DEFS
7662 /* If this code is dead, then users must
7663 explicitly declare static member variables
7664 outside the class def'n as well. */
7665 && TYPE_NEEDS_CONSTRUCTING (type)
7666 #endif
7667 )
7668 {
7669 DECL_EXTERNAL (decl) = 1;
7670 make_decl_rtl (decl, asmspec, 1);
7671 }
7672 else
7673 rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
7674 }
7675 else if (TREE_CODE (CP_DECL_CONTEXT (decl)) == NAMESPACE_DECL
7676 || (TREE_CODE (decl) == VAR_DECL && TREE_STATIC (decl)))
7677 rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
7678 }
7679
7680 /* Create RTL for the local static variable DECL. */
7681
7682 void
7683 make_rtl_for_local_static (decl)
7684 tree decl;
7685 {
7686 const char *asmspec = NULL;
7687
7688 /* If we inlined this variable, we could see it's declaration
7689 again. */
7690 if (DECL_RTL (decl))
7691 return;
7692
7693 if (DECL_ASSEMBLER_NAME (decl) != DECL_NAME (decl))
7694 {
7695 /* The only way this situaton can occur is if the
7696 user specified a name for this DECL using the
7697 `attribute' syntax. */
7698 asmspec = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
7699 DECL_ASSEMBLER_NAME (decl) = DECL_NAME (decl);
7700 }
7701
7702 rest_of_decl_compilation (decl, asmspec, /*top_level=*/0, /*at_end=*/0);
7703 }
7704
7705 /* The old ARM scoping rules injected variables declared in the
7706 initialization statement of a for-statement into the surrounding
7707 scope. We support this usage, in order to be backward-compatible.
7708 DECL is a just-declared VAR_DECL; if necessary inject its
7709 declaration into the surrounding scope. */
7710
7711 void
7712 maybe_inject_for_scope_var (decl)
7713 tree decl;
7714 {
7715 if (current_binding_level->is_for_scope)
7716 {
7717 struct binding_level *outer
7718 = current_binding_level->level_chain;
7719
7720 /* Check to see if the same name is already bound at the outer
7721 level, either because it was directly declared, or because a
7722 dead for-decl got preserved. In either case, the code would
7723 not have been valid under the ARM scope rules, so clear
7724 is_for_scope for the current_binding_level.
7725
7726 Otherwise, we need to preserve the temp slot for decl to last
7727 into the outer binding level. */
7728
7729 tree outer_binding
7730 = TREE_CHAIN (IDENTIFIER_BINDING (DECL_NAME (decl)));
7731
7732 if (outer_binding && BINDING_LEVEL (outer_binding) == outer
7733 && (TREE_CODE (BINDING_VALUE (outer_binding))
7734 == VAR_DECL)
7735 && DECL_DEAD_FOR_LOCAL (BINDING_VALUE (outer_binding)))
7736 {
7737 BINDING_VALUE (outer_binding)
7738 = DECL_SHADOWED_FOR_VAR (BINDING_VALUE (outer_binding));
7739 current_binding_level->is_for_scope = 0;
7740 }
7741 else if (DECL_IN_MEMORY_P (decl))
7742 preserve_temp_slots (DECL_RTL (decl));
7743 }
7744 }
7745
7746 /* Generate code to initialize DECL (a local variable). */
7747
7748 void
7749 initialize_local_var (decl, init, flags)
7750 tree decl;
7751 tree init;
7752 int flags;
7753 {
7754 tree type = TREE_TYPE (decl);
7755
7756 /* If the type is bogus, don't bother initializing the variable. */
7757 if (type == error_mark_node)
7758 return;
7759
7760 if (DECL_SIZE (decl) == NULL_TREE && !TREE_STATIC (decl))
7761 {
7762 /* If we used it already as memory, it must stay in memory. */
7763 DECL_INITIAL (decl) = NULL_TREE;
7764 TREE_ADDRESSABLE (decl) = TREE_USED (decl);
7765 }
7766
7767 /* Local statics are handled differently from ordinary automatic
7768 variables. */
7769 if (TREE_STATIC (decl))
7770 {
7771 if (TYPE_NEEDS_CONSTRUCTING (type) || init != NULL_TREE
7772 || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
7773 expand_static_init (decl, init);
7774 return;
7775 }
7776
7777 if (DECL_SIZE (decl) && type != error_mark_node)
7778 {
7779 int already_used;
7780
7781 /* Compute and store the initial value. */
7782 already_used = TREE_USED (decl) || TREE_USED (type);
7783
7784 if (init || TYPE_NEEDS_CONSTRUCTING (type))
7785 {
7786 int saved_stmts_are_full_exprs_p;
7787
7788 emit_line_note (DECL_SOURCE_FILE (decl),
7789 DECL_SOURCE_LINE (decl));
7790 saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p;
7791 stmts_are_full_exprs_p = 1;
7792 finish_expr_stmt (build_aggr_init (decl, init, flags));
7793 stmts_are_full_exprs_p = saved_stmts_are_full_exprs_p;
7794 }
7795
7796 /* Set this to 0 so we can tell whether an aggregate which was
7797 initialized was ever used. Don't do this if it has a
7798 destructor, so we don't complain about the 'resource
7799 allocation is initialization' idiom. Now set
7800 attribute((unused)) on types so decls of that type will be
7801 marked used. (see TREE_USED, above.) */
7802 if (TYPE_NEEDS_CONSTRUCTING (type)
7803 && ! already_used
7804 && TYPE_HAS_TRIVIAL_DESTRUCTOR (type)
7805 && DECL_NAME (decl))
7806 TREE_USED (decl) = 0;
7807 else if (already_used)
7808 TREE_USED (decl) = 1;
7809 }
7810 }
7811
7812 /* Generate code to destroy DECL (a local variable). */
7813
7814 static void
7815 destroy_local_var (decl)
7816 tree decl;
7817 {
7818 tree type = TREE_TYPE (decl);
7819 tree cleanup;
7820
7821 /* Only variables get cleaned up. */
7822 if (TREE_CODE (decl) != VAR_DECL)
7823 return;
7824
7825 /* And only things with destructors need cleaning up. */
7826 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
7827 return;
7828
7829 if (TREE_CODE (decl) == VAR_DECL &&
7830 (DECL_EXTERNAL (decl) || TREE_STATIC (decl)))
7831 /* We don't clean up things that aren't defined in this
7832 translation unit, or that need a static cleanup. The latter
7833 are handled by finish_file. */
7834 return;
7835
7836 /* Compute the cleanup. */
7837 cleanup = maybe_build_cleanup (decl);
7838
7839 /* Record the cleanup required for this declaration. */
7840 if (DECL_SIZE (decl) && TREE_TYPE (decl) != error_mark_node
7841 && cleanup)
7842 finish_decl_cleanup (decl, cleanup);
7843 }
7844
7845 /* Let the back-end know about DECL. */
7846
7847 void
7848 emit_local_var (decl)
7849 tree decl;
7850 {
7851 /* Create RTL for this variable. */
7852 if (DECL_RTL (decl))
7853 /* Only a RESULT_DECL should have non-NULL RTL when arriving here.
7854 All other local variables are assigned RTL in this function. */
7855 my_friendly_assert (TREE_CODE (decl) == RESULT_DECL,
7856 19990828);
7857 else
7858 {
7859 if (DECL_ASSEMBLER_NAME (decl) != DECL_NAME (decl))
7860 /* The user must have specified an assembler name for this
7861 variable. Set that up now. */
7862 rest_of_decl_compilation
7863 (decl, IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)),
7864 /*top_level=*/0, /*at_end=*/0);
7865 else
7866 expand_decl (decl);
7867 }
7868
7869 /* Actually do the initialization. */
7870 expand_start_target_temps ();
7871 expand_decl_init (decl);
7872 expand_end_target_temps ();
7873 }
7874
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.
7879
7880 INIT0 holds the value of an initializer that should be allowed to escape
7881 the normal rules.
7882
7883 FLAGS is LOOKUP_ONLYCONVERTING if the = init syntax was used, else 0
7884 if the (init) syntax was used. */
7885
7886 void
7887 cp_finish_decl (decl, init, asmspec_tree, flags)
7888 tree decl, init;
7889 tree asmspec_tree;
7890 int flags;
7891 {
7892 register tree type;
7893 tree ttype = NULL_TREE;
7894 const char *asmspec = NULL;
7895 int was_readonly = 0;
7896
7897 if (! decl)
7898 {
7899 if (init)
7900 error ("assignment (not initialization) in declaration");
7901 return;
7902 }
7903
7904 /* If a name was specified, get the string. */
7905 if (asmspec_tree)
7906 asmspec = TREE_STRING_POINTER (asmspec_tree);
7907
7908 if (init && TREE_CODE (init) == NAMESPACE_DECL)
7909 {
7910 cp_error ("cannot initialize `%D' to namespace `%D'",
7911 decl, init);
7912 init = NULL_TREE;
7913 }
7914
7915 if (current_class_type
7916 && CP_DECL_CONTEXT (decl) == current_class_type
7917 && TYPE_BEING_DEFINED (current_class_type)
7918 && (DECL_INITIAL (decl) || init))
7919 DECL_DEFINED_IN_CLASS_P (decl) = 1;
7920
7921 if (TREE_CODE (decl) == VAR_DECL
7922 && DECL_CONTEXT (decl)
7923 && TREE_CODE (DECL_CONTEXT (decl)) == NAMESPACE_DECL
7924 && DECL_CONTEXT (decl) != current_namespace
7925 && init)
7926 {
7927 /* Leave the namespace of the object. */
7928 pop_decl_namespace ();
7929 }
7930
7931 type = TREE_TYPE (decl);
7932
7933 if (type == error_mark_node)
7934 return;
7935
7936 /* Add this declaration to the statement-tree. */
7937 if (building_stmt_tree () && at_function_scope_p ())
7938 add_decl_stmt (decl);
7939
7940 if (TYPE_HAS_MUTABLE_P (type))
7941 TREE_READONLY (decl) = 0;
7942
7943 if (processing_template_decl)
7944 {
7945 if (init && DECL_INITIAL (decl))
7946 DECL_INITIAL (decl) = init;
7947 goto finish_end0;
7948 }
7949
7950 /* Parameters are handled by store_parm_decls, not cp_finish_decl. */
7951 my_friendly_assert (TREE_CODE (decl) != PARM_DECL, 19990828);
7952
7953 /* Take care of TYPE_DECLs up front. */
7954 if (TREE_CODE (decl) == TYPE_DECL)
7955 {
7956 if (init && DECL_INITIAL (decl))
7957 {
7958 /* typedef foo = bar; store the type of bar as the type of foo. */
7959 TREE_TYPE (decl) = type = TREE_TYPE (init);
7960 DECL_INITIAL (decl) = init = NULL_TREE;
7961 }
7962 if (type != error_mark_node
7963 && IS_AGGR_TYPE (type) && DECL_NAME (decl))
7964 {
7965 if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
7966 cp_warning ("shadowing previous type declaration of `%#D'", decl);
7967 set_identifier_type_value (DECL_NAME (decl), type);
7968 CLASSTYPE_GOT_SEMICOLON (type) = 1;
7969 }
7970 GNU_xref_decl (current_function_decl, decl);
7971
7972 /* If we have installed this as the canonical typedef for this
7973 type, and that type has not been defined yet, delay emitting
7974 the debug information for it, as we will emit it later. */
7975 if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
7976 && !COMPLETE_TYPE_P (TREE_TYPE (decl)))
7977 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
7978
7979 rest_of_decl_compilation (decl, NULL_PTR,
7980 DECL_CONTEXT (decl) == NULL_TREE, at_eof);
7981 goto finish_end;
7982 }
7983
7984 if (TREE_CODE (decl) != FUNCTION_DECL)
7985 ttype = target_type (type);
7986
7987 if (! DECL_EXTERNAL (decl) && TREE_READONLY (decl)
7988 && TYPE_NEEDS_CONSTRUCTING (type))
7989 {
7990 /* Currently, GNU C++ puts constants in text space, making them
7991 impossible to initialize. In the future, one would hope for
7992 an operating system which understood the difference between
7993 initialization and the running of a program. */
7994 was_readonly = 1;
7995 TREE_READONLY (decl) = 0;
7996 }
7997
7998 if (TREE_CODE (decl) == FIELD_DECL && asmspec)
7999 {
8000 /* This must override the asm specifier which was placed by
8001 grokclassfn. Lay this out fresh. */
8002 DECL_RTL (TREE_TYPE (decl)) = NULL_RTX;
8003 DECL_ASSEMBLER_NAME (decl) = get_identifier (asmspec);
8004 make_decl_rtl (decl, asmspec, 0);
8005 }
8006
8007 /* Deduce size of array from initialization, if not already known. */
8008 maybe_deduce_size_from_array_init (decl, init);
8009 init = check_initializer (decl, init);
8010
8011 GNU_xref_decl (current_function_decl, decl);
8012
8013 if (TREE_CODE (decl) == VAR_DECL)
8014 layout_var_decl (decl);
8015
8016 /* Output the assembler code and/or RTL code for variables and functions,
8017 unless the type is an undefined structure or union.
8018 If not, it will get done when the type is completed. */
8019 if (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == FUNCTION_DECL
8020 || TREE_CODE (decl) == RESULT_DECL)
8021 {
8022 if (TREE_CODE (decl) == VAR_DECL)
8023 maybe_commonize_var (decl);
8024
8025 make_rtl_for_nonlocal_decl (decl, init, asmspec);
8026
8027 if (TREE_CODE (type) == FUNCTION_TYPE
8028 || TREE_CODE (type) == METHOD_TYPE)
8029 abstract_virtuals_error (decl,
8030 strip_array_types (TREE_TYPE (type)));
8031 else
8032 abstract_virtuals_error (decl, strip_array_types (type));
8033
8034 if (TREE_CODE (decl) == FUNCTION_DECL)
8035 ;
8036 else if (DECL_EXTERNAL (decl)
8037 && ! (DECL_LANG_SPECIFIC (decl)
8038 && DECL_NOT_REALLY_EXTERN (decl)))
8039 {
8040 if (init)
8041 DECL_INITIAL (decl) = init;
8042 }
8043 else if (TREE_CODE (CP_DECL_CONTEXT (decl)) == FUNCTION_DECL)
8044 {
8045 /* This is a local declaration. */
8046 if (doing_semantic_analysis_p ())
8047 maybe_inject_for_scope_var (decl);
8048 /* Initialize the local variable. But, if we're building a
8049 statement-tree, we'll do the initialization when we
8050 expand the tree. */
8051 if (processing_template_decl)
8052 {
8053 if (init || DECL_INITIAL (decl) == error_mark_node)
8054 DECL_INITIAL (decl) = init;
8055 }
8056 else
8057 {
8058 /* If we're not building RTL, then we need to do so
8059 now. */
8060 if (!building_stmt_tree ())
8061 emit_local_var (decl);
8062 /* Initialize the variable. */
8063 initialize_local_var (decl, init, flags);
8064 /* Clean up the variable. */
8065 destroy_local_var (decl);
8066 }
8067 }
8068 else if (TREE_STATIC (decl) && type != error_mark_node)
8069 {
8070 /* Cleanups for static variables are handled by `finish_file'. */
8071 if (TYPE_NEEDS_CONSTRUCTING (type) || init != NULL_TREE
8072 || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
8073 expand_static_init (decl, init);
8074 }
8075 finish_end0:
8076
8077 /* Undo call to `pushclass' that was done in `start_decl'
8078 due to initialization of qualified member variable.
8079 I.e., Foo::x = 10; */
8080 {
8081 tree context = CP_DECL_CONTEXT (decl);
8082 if (context
8083 && TYPE_P (context)
8084 && (TREE_CODE (decl) == VAR_DECL
8085 /* We also have a pushclass done that we need to undo here
8086 if we're at top level and declare a method. */
8087 || TREE_CODE (decl) == FUNCTION_DECL)
8088 /* If size hasn't been set, we're still defining it,
8089 and therefore inside the class body; don't pop
8090 the binding level.. */
8091 && COMPLETE_TYPE_P (context)
8092 && context == current_class_type)
8093 pop_nested_class ();
8094 }
8095 }
8096
8097 finish_end:
8098
8099 if (was_readonly)
8100 TREE_READONLY (decl) = 1;
8101 }
8102
8103 /* This is here for a midend callback from c-common.c */
8104
8105 void
8106 finish_decl (decl, init, asmspec_tree)
8107 tree decl, init;
8108 tree asmspec_tree;
8109 {
8110 cp_finish_decl (decl, init, asmspec_tree, 0);
8111 }
8112
8113 /* Returns a declaration for a VAR_DECL as if:
8114
8115 extern "C" TYPE NAME;
8116
8117 had been seen. Used to create compiler-generated global
8118 variables. */
8119
8120 tree
8121 declare_global_var (name, type)
8122 tree name;
8123 tree type;
8124 {
8125 tree decl;
8126
8127 push_to_top_level ();
8128 decl = build_decl (VAR_DECL, name, type);
8129 TREE_PUBLIC (decl) = 1;
8130 DECL_EXTERNAL (decl) = 1;
8131 DECL_ARTIFICIAL (decl) = 1;
8132 pushdecl (decl);
8133 cp_finish_decl (decl, NULL_TREE, NULL_TREE, 0);
8134 pop_from_top_level ();
8135
8136 return decl;
8137 }
8138
8139 /* Returns a pointer to the `atexit' function. Note that if
8140 FLAG_USE_CXA_ATEXIT is non-zero, then this will actually be the new
8141 `__cxa_atexit' function specified in the IA64 C++ ABI. */
8142
8143 static tree
8144 get_atexit_node ()
8145 {
8146 tree atexit_fndecl;
8147 tree arg_types;
8148 tree fn_type;
8149 tree fn_ptr_type;
8150 const char *name;
8151
8152 if (atexit_node)
8153 return atexit_node;
8154
8155 if (flag_use_cxa_atexit)
8156 {
8157 /* The declaration for `__cxa_atexit' is:
8158
8159 int __cxa_atexit (void (*)(void *), void *, void *)
8160
8161 We build up the argument types and then then function type
8162 itself. */
8163
8164 /* First, build the pointer-to-function type for the first
8165 argument. */
8166 arg_types = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
8167 fn_type = build_function_type (void_type_node, arg_types);
8168 fn_ptr_type = build_pointer_type (fn_type);
8169 /* Then, build the rest of the argument types. */
8170 arg_types = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
8171 arg_types = tree_cons (NULL_TREE, ptr_type_node, arg_types);
8172 arg_types = tree_cons (NULL_TREE, fn_ptr_type, arg_types);
8173 /* And the final __cxa_atexit type. */
8174 fn_type = build_function_type (integer_type_node, arg_types);
8175 fn_ptr_type = build_pointer_type (fn_type);
8176 name = "__cxa_atexit";
8177 }
8178 else
8179 {
8180 /* The declaration for `atexit' is:
8181
8182 int atexit (void (*)());
8183
8184 We build up the argument types and then then function type
8185 itself. */
8186 fn_type = build_function_type (void_type_node, void_list_node);
8187 fn_ptr_type = build_pointer_type (fn_type);
8188 arg_types = tree_cons (NULL_TREE, fn_ptr_type, void_list_node);
8189 /* Build the final atexit type. */
8190 fn_type = build_function_type (integer_type_node, arg_types);
8191 name = "atexit";
8192 }
8193
8194 /* Now, build the function declaration. */
8195 push_lang_context (lang_name_c);
8196 atexit_fndecl = build_library_fn_ptr (name, fn_type);
8197 mark_used (atexit_fndecl);
8198 pop_lang_context ();
8199 atexit_node = default_conversion (atexit_fndecl);
8200
8201 return atexit_node;
8202 }
8203
8204 /* Returns the __dso_handle VAR_DECL. */
8205
8206 static tree
8207 get_dso_handle_node ()
8208 {
8209 if (dso_handle_node)
8210 return dso_handle_node;
8211
8212 /* Declare the variable. */
8213 dso_handle_node = declare_global_var (get_identifier ("__dso_handle"),
8214 ptr_type_node);
8215
8216 return dso_handle_node;
8217 }
8218
8219 /* Begin a new function with internal linkage whose job will be simply
8220 to destroy some particular variable. */
8221
8222 static tree
8223 start_cleanup_fn ()
8224 {
8225 static int counter = 0;
8226 int old_interface_unknown = interface_unknown;
8227 char name[32];
8228 tree parmtypes;
8229 tree fntype;
8230 tree fndecl;
8231
8232 push_to_top_level ();
8233
8234 /* No need to mangle this. */
8235 push_lang_context (lang_name_c);
8236
8237 interface_unknown = 1;
8238
8239 /* Build the parameter-types. */
8240 parmtypes = void_list_node;
8241 /* Functions passed to __cxa_atexit take an additional parameter.
8242 We'll just ignore it. After we implement the new calling
8243 convention for destructors, we can eliminate the use of
8244 additional cleanup functions entirely in the -fnew-abi case. */
8245 if (flag_use_cxa_atexit)
8246 parmtypes = tree_cons (NULL_TREE, ptr_type_node, parmtypes);
8247 /* Build the function type itself. */
8248 fntype = build_function_type (void_type_node, parmtypes);
8249 /* Build the name of the function. */
8250 sprintf (name, "__tcf_%d", counter++);
8251 /* Build the function declaration. */
8252 fndecl = build_lang_decl (FUNCTION_DECL, get_identifier (name), fntype);
8253 /* It's a function with internal linkage, generated by the
8254 compiler. */
8255 TREE_PUBLIC (fndecl) = 0;
8256 DECL_ARTIFICIAL (fndecl) = 1;
8257 /* Build the parameter. */
8258 if (flag_use_cxa_atexit)
8259 {
8260 tree parmdecl;
8261
8262 parmdecl = build_decl (PARM_DECL, NULL_TREE, ptr_type_node);
8263 DECL_CONTEXT (parmdecl) = fndecl;
8264 DECL_ARG_TYPE (parmdecl) = ptr_type_node;
8265 TREE_USED (parmdecl) = 1;
8266 DECL_ARGUMENTS (fndecl) = parmdecl;
8267 }
8268
8269 pushdecl (fndecl);
8270 start_function (/*specs=*/NULL_TREE, fndecl, NULL_TREE, SF_PRE_PARSED);
8271 do_pushlevel ();
8272
8273 interface_unknown = old_interface_unknown;
8274
8275 pop_lang_context ();
8276
8277 return current_function_decl;
8278 }
8279
8280 /* Finish the cleanup function begun by start_cleanup_fn. */
8281
8282 static void
8283 end_cleanup_fn ()
8284 {
8285 do_poplevel ();
8286
8287 expand_body (finish_function (0));
8288
8289 pop_from_top_level ();
8290 }
8291
8292 /* Generate code to handle the destruction of DECL, an object with
8293 static storage duration. */
8294
8295 void
8296 register_dtor_fn (decl)
8297 tree decl;
8298 {
8299 tree cleanup;
8300 tree compound_stmt;
8301 tree args;
8302 tree fcall;
8303
8304 int saved_flag_access_control;
8305
8306 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
8307 return;
8308
8309 /* Call build_cleanup before we enter the anonymous function so that
8310 any access checks will be done relative to the current scope,
8311 rather than the scope of the anonymous function. */
8312 build_cleanup (decl);
8313
8314 /* Now start the function. */
8315 cleanup = start_cleanup_fn ();
8316
8317 /* Now, recompute the cleanup. It may contain SAVE_EXPRs that refer
8318 to the original function, rather than the anonymous one. That
8319 will make the back-end think that nested functions are in use,
8320 which causes confusion. */
8321 saved_flag_access_control = flag_access_control;
8322 flag_access_control = 0;
8323 fcall = build_cleanup (decl);
8324 flag_access_control = saved_flag_access_control;
8325
8326 /* Create the body of the anonymous function. */
8327 compound_stmt = begin_compound_stmt (/*has_no_scope=*/0);
8328 finish_expr_stmt (fcall);
8329 finish_compound_stmt (/*has_no_scope=*/0, compound_stmt);
8330 end_cleanup_fn ();
8331
8332 /* Call atexit with the cleanup function. */
8333 mark_addressable (cleanup);
8334 cleanup = build_unary_op (ADDR_EXPR, cleanup, 0);
8335 if (flag_use_cxa_atexit)
8336 {
8337 args = tree_cons (NULL_TREE, get_dso_handle_node (), NULL_TREE);
8338 args = tree_cons (NULL_TREE, null_pointer_node, args);
8339 args = tree_cons (NULL_TREE, cleanup, args);
8340 }
8341 else
8342 args = tree_cons (NULL_TREE, cleanup, NULL_TREE);
8343 finish_expr_stmt (build_function_call (get_atexit_node (), args));
8344 }
8345
8346 void
8347 expand_static_init (decl, init)
8348 tree decl;
8349 tree init;
8350 {
8351 tree oldstatic = value_member (decl, static_aggregates);
8352
8353 if (oldstatic)
8354 {
8355 if (TREE_PURPOSE (oldstatic) && init != NULL_TREE)
8356 cp_error ("multiple initializations given for `%D'", decl);
8357 }
8358 else if (! toplevel_bindings_p ())
8359 {
8360 /* Emit code to perform this initialization but once. */
8361 tree temp;
8362 tree if_stmt;
8363 tree then_clause;
8364 tree assignment;
8365 tree temp_init;
8366
8367 /* Emit code to perform this initialization but once. This code
8368 looks like:
8369
8370 static int temp = 0;
8371 if (!temp) {
8372 // Do initialization.
8373 temp = 1;
8374 // Register variable for destruction at end of program.
8375 }
8376
8377 Note that the `temp' variable is only set to 1 *after* the
8378 initialization is complete. This ensures that an exception,
8379 thrown during the construction, will cause the variable to
8380 reinitialized when we pass through this code again, as per:
8381
8382 [stmt.dcl]
8383
8384 If the initialization exits by throwing an exception, the
8385 initialization is not complete, so it will be tried again
8386 the next time control enters the declaration.
8387
8388 In theory, this process should be thread-safe, too; multiple
8389 threads should not be able to initialize the variable more
8390 than once. We don't yet attempt to ensure thread-safety. */
8391 temp = get_temp_name (integer_type_node, 1);
8392 rest_of_decl_compilation (temp, NULL_PTR, 0, 0);
8393
8394 /* Begin the conditional initialization. */
8395 if_stmt = begin_if_stmt ();
8396 finish_if_stmt_cond (build_binary_op (EQ_EXPR, temp,
8397 integer_zero_node),
8398 if_stmt);
8399 then_clause = begin_compound_stmt (/*has_no_scope=*/0);
8400
8401 /* Do the initialization itself. */
8402 if (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))
8403 || (init && TREE_CODE (init) == TREE_LIST))
8404 assignment = build_aggr_init (decl, init, 0);
8405 else if (init)
8406 /* The initialization we're doing here is just a bitwise
8407 copy. */
8408 assignment = build (INIT_EXPR, TREE_TYPE (decl), decl, init);
8409 else
8410 assignment = NULL_TREE;
8411
8412 /* Once the assignment is complete, set TEMP to 1. Since the
8413 construction of the static object is complete at this point,
8414 we want to make sure TEMP is set to 1 even if a temporary
8415 constructed during the initialization throws an exception
8416 when it is destroyed. So, we combine the initialization and
8417 the assignment to TEMP into a single expression, ensuring
8418 that when we call finish_expr_stmt the cleanups will not be
8419 run until after TEMP is set to 1. */
8420 temp_init = build_modify_expr (temp, NOP_EXPR, integer_one_node);
8421 if (assignment)
8422 {
8423 assignment = tree_cons (NULL_TREE, assignment,
8424 build_tree_list (NULL_TREE,
8425 temp_init));
8426 assignment = build_compound_expr (assignment);
8427 }
8428 else
8429 assignment = temp_init;
8430 finish_expr_stmt (assignment);
8431
8432 /* Use atexit to register a function for destroying this static
8433 variable. */
8434 register_dtor_fn (decl);
8435
8436 finish_compound_stmt (/*has_no_scope=*/0, then_clause);
8437 finish_then_clause (if_stmt);
8438 finish_if_stmt ();
8439 }
8440 else
8441 static_aggregates = tree_cons (init, decl, static_aggregates);
8442 }
8443
8444 /* Finish the declaration of a catch-parameter. */
8445
8446 tree
8447 start_handler_parms (declspecs, declarator)
8448 tree declspecs;
8449 tree declarator;
8450 {
8451 tree decl;
8452 if (declspecs)
8453 {
8454 decl = grokdeclarator (declarator, declspecs, CATCHPARM,
8455 1, NULL_TREE);
8456 if (decl == NULL_TREE)
8457 error ("invalid catch parameter");
8458 }
8459 else
8460 decl = NULL_TREE;
8461
8462 return decl;
8463 }
8464
8465 \f
8466 /* Make TYPE a complete type based on INITIAL_VALUE.
8467 Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
8468 2 if there was no information (in which case assume 0 if DO_DEFAULT). */
8469
8470 int
8471 complete_array_type (type, initial_value, do_default)
8472 tree type, initial_value;
8473 int do_default;
8474 {
8475 register tree maxindex = NULL_TREE;
8476 int value = 0;
8477
8478 if (initial_value)
8479 {
8480 /* Note MAXINDEX is really the maximum index,
8481 one less than the size. */
8482 if (TREE_CODE (initial_value) == STRING_CST)
8483 {
8484 int eltsize
8485 = int_size_in_bytes (TREE_TYPE (TREE_TYPE (initial_value)));
8486 maxindex = build_int_2 ((TREE_STRING_LENGTH (initial_value)
8487 / eltsize) - 1, 0);
8488 }
8489 else if (TREE_CODE (initial_value) == CONSTRUCTOR)
8490 {
8491 tree elts = CONSTRUCTOR_ELTS (initial_value);
8492
8493 maxindex = ssize_int (-1);
8494 for (; elts; elts = TREE_CHAIN (elts))
8495 {
8496 if (TREE_PURPOSE (elts))
8497 maxindex = TREE_PURPOSE (elts);
8498 else
8499 maxindex = size_binop (PLUS_EXPR, maxindex, ssize_int (1));
8500 }
8501 maxindex = copy_node (maxindex);
8502 }
8503 else
8504 {
8505 /* Make an error message unless that happened already. */
8506 if (initial_value != error_mark_node)
8507 value = 1;
8508 else
8509 initial_value = NULL_TREE;
8510
8511 /* Prevent further error messages. */
8512 maxindex = build_int_2 (0, 0);
8513 }
8514 }
8515
8516 if (!maxindex)
8517 {
8518 if (do_default)
8519 maxindex = build_int_2 (0, 0);
8520 value = 2;
8521 }
8522
8523 if (maxindex)
8524 {
8525 tree itype;
8526 tree domain;
8527
8528 domain = build_index_type (maxindex);
8529 TYPE_DOMAIN (type) = domain;
8530
8531 if (! TREE_TYPE (maxindex))
8532 TREE_TYPE (maxindex) = domain;
8533 if (initial_value)
8534 itype = TREE_TYPE (initial_value);
8535 else
8536 itype = NULL;
8537 if (itype && !TYPE_DOMAIN (itype))
8538 TYPE_DOMAIN (itype) = domain;
8539 /* The type of the main variant should never be used for arrays
8540 of different sizes. It should only ever be completed with the
8541 size of the array. */
8542 if (! TYPE_DOMAIN (TYPE_MAIN_VARIANT (type)))
8543 TYPE_DOMAIN (TYPE_MAIN_VARIANT (type)) = domain;
8544 }
8545
8546 /* Lay out the type now that we can get the real answer. */
8547
8548 layout_type (type);
8549
8550 return value;
8551 }
8552 \f
8553 /* Return zero if something is declared to be a member of type
8554 CTYPE when in the context of CUR_TYPE. STRING is the error
8555 message to print in that case. Otherwise, quietly return 1. */
8556
8557 static int
8558 member_function_or_else (ctype, cur_type, flags)
8559 tree ctype, cur_type;
8560 enum overload_flags flags;
8561 {
8562 if (ctype && ctype != cur_type)
8563 {
8564 if (flags == DTOR_FLAG)
8565 error ("destructor for alien class `%s' cannot be a member",
8566 TYPE_NAME_STRING (ctype));
8567 else
8568 error ("constructor for alien class `%s' cannot be a member",
8569 TYPE_NAME_STRING (ctype));
8570 return 0;
8571 }
8572 return 1;
8573 }
8574 \f
8575 /* Subroutine of `grokdeclarator'. */
8576
8577 /* Generate errors possibly applicable for a given set of specifiers.
8578 This is for ARM $7.1.2. */
8579
8580 static void
8581 bad_specifiers (object, type, virtualp, quals, inlinep, friendp, raises)
8582 tree object;
8583 const char *type;
8584 int virtualp, quals, friendp, raises, inlinep;
8585 {
8586 if (virtualp)
8587 cp_error ("`%D' declared as a `virtual' %s", object, type);
8588 if (inlinep)
8589 cp_error ("`%D' declared as an `inline' %s", object, type);
8590 if (quals)
8591 cp_error ("`const' and `volatile' function specifiers on `%D' invalid in %s declaration",
8592 object, type);
8593 if (friendp)
8594 cp_error_at ("`%D' declared as a friend", object);
8595 if (raises)
8596 cp_error_at ("`%D' declared with an exception specification", object);
8597 }
8598
8599 /* CTYPE is class type, or null if non-class.
8600 TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
8601 or METHOD_TYPE.
8602 DECLARATOR is the function's name.
8603 VIRTUALP is truthvalue of whether the function is virtual or not.
8604 FLAGS are to be passed through to `grokclassfn'.
8605 QUALS are qualifiers indicating whether the function is `const'
8606 or `volatile'.
8607 RAISES is a list of exceptions that this function can raise.
8608 CHECK is 1 if we must find this method in CTYPE, 0 if we should
8609 not look, and -1 if we should not call `grokclassfn' at all.
8610
8611 Returns `NULL_TREE' if something goes wrong, after issuing
8612 applicable error messages. */
8613
8614 static tree
8615 grokfndecl (ctype, type, declarator, orig_declarator, virtualp, flags, quals,
8616 raises, check, friendp, publicp, inlinep, funcdef_flag,
8617 template_count, in_namespace)
8618 tree ctype, type;
8619 tree declarator;
8620 tree orig_declarator;
8621 int virtualp;
8622 enum overload_flags flags;
8623 tree quals, raises;
8624 int check, friendp, publicp, inlinep, funcdef_flag, template_count;
8625 tree in_namespace;
8626 {
8627 tree cname, decl;
8628 int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
8629 int has_default_arg = 0;
8630 tree t;
8631
8632 if (ctype)
8633 cname = TREE_CODE (TYPE_NAME (ctype)) == TYPE_DECL
8634 ? TYPE_IDENTIFIER (ctype) : TYPE_NAME (ctype);
8635 else
8636 cname = NULL_TREE;
8637
8638 if (raises)
8639 {
8640 type = build_exception_variant (type, raises);
8641 }
8642
8643 decl = build_lang_decl (FUNCTION_DECL, declarator, type);
8644 /* Propagate volatile out from type to decl. */
8645 if (TYPE_VOLATILE (type))
8646 TREE_THIS_VOLATILE (decl) = 1;
8647
8648 /* If this decl has namespace scope, set that up. */
8649 if (in_namespace)
8650 set_decl_namespace (decl, in_namespace, friendp);
8651 else if (publicp && ! ctype)
8652 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
8653
8654 /* `main' and builtins have implicit 'C' linkage. */
8655 if ((MAIN_NAME_P (declarator)
8656 || (IDENTIFIER_LENGTH (declarator) > 10
8657 && IDENTIFIER_POINTER (declarator)[0] == '_'
8658 && IDENTIFIER_POINTER (declarator)[1] == '_'
8659 && strncmp (IDENTIFIER_POINTER (declarator)+2, "builtin_", 8) == 0))
8660 && current_lang_name == lang_name_cplusplus
8661 && ctype == NULL_TREE
8662 /* NULL_TREE means global namespace. */
8663 && DECL_CONTEXT (decl) == NULL_TREE)
8664 DECL_LANGUAGE (decl) = lang_c;
8665
8666 /* Should probably propagate const out from type to decl I bet (mrs). */
8667 if (staticp)
8668 {
8669 DECL_STATIC_FUNCTION_P (decl) = 1;
8670 DECL_CONTEXT (decl) = ctype;
8671 }
8672
8673 if (ctype)
8674 DECL_CONTEXT (decl) = ctype;
8675
8676 if (ctype == NULL_TREE && DECL_MAIN_P (decl))
8677 {
8678 if (processing_template_decl)
8679 error ("cannot declare `::main' to be a template");
8680 if (inlinep)
8681 error ("cannot declare `::main' to be inline");
8682 else if (! publicp)
8683 error ("cannot declare `::main' to be static");
8684 inlinep = 0;
8685 publicp = 1;
8686 }
8687
8688 /* Members of anonymous types and local classes have no linkage; make
8689 them internal. */
8690 if (ctype && (ANON_AGGRNAME_P (TYPE_IDENTIFIER (ctype))
8691 || decl_function_context (TYPE_MAIN_DECL (ctype))))
8692 publicp = 0;
8693
8694 if (publicp)
8695 {
8696 /* [basic.link]: A name with no linkage (notably, the name of a class
8697 or enumeration declared in a local scope) shall not be used to
8698 declare an entity with linkage.
8699
8700 Only check this for public decls for now. */
8701 t = no_linkage_check (TREE_TYPE (decl));
8702 if (t)
8703 {
8704 if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
8705 {
8706 if (DECL_LANGUAGE (decl) == lang_c)
8707 /* Allow this; it's pretty common in C. */;
8708 else
8709 cp_pedwarn ("non-local function `%#D' uses anonymous type",
8710 decl);
8711 }
8712 else
8713 cp_pedwarn ("non-local function `%#D' uses local type `%T'",
8714 decl, t);
8715 }
8716 }
8717
8718 TREE_PUBLIC (decl) = publicp;
8719 if (! publicp)
8720 {
8721 DECL_INTERFACE_KNOWN (decl) = 1;
8722 DECL_NOT_REALLY_EXTERN (decl) = 1;
8723 }
8724
8725 if (inlinep)
8726 DECL_THIS_INLINE (decl) = DECL_INLINE (decl) = 1;
8727
8728 DECL_EXTERNAL (decl) = 1;
8729 if (quals != NULL_TREE && TREE_CODE (type) == FUNCTION_TYPE)
8730 {
8731 cp_error ("%smember function `%D' cannot have `%T' method qualifier",
8732 (ctype ? "static " : "non-"), decl, TREE_VALUE (quals));
8733 quals = NULL_TREE;
8734 }
8735
8736 if (IDENTIFIER_OPNAME_P (DECL_NAME (decl)))
8737 grok_op_properties (decl, virtualp, check < 0);
8738
8739 if (ctype && decl_function_context (decl))
8740 DECL_NO_STATIC_CHAIN (decl) = 1;
8741
8742 for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
8743 if (TREE_PURPOSE (t)
8744 && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
8745 {
8746 has_default_arg = 1;
8747 break;
8748 }
8749
8750 if (friendp
8751 && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
8752 {
8753 if (funcdef_flag)
8754 cp_error
8755 ("defining explicit specialization `%D' in friend declaration",
8756 orig_declarator);
8757 else
8758 {
8759 if (PROCESSING_REAL_TEMPLATE_DECL_P ())
8760 {
8761 /* Something like `template <class T> friend void f<T>()'. */
8762 cp_error ("invalid use of template-id `%D' in declaration of primary template",
8763 orig_declarator);
8764 return NULL_TREE;
8765 }
8766
8767
8768 /* A friend declaration of the form friend void f<>(). Record
8769 the information in the TEMPLATE_ID_EXPR. */
8770 SET_DECL_IMPLICIT_INSTANTIATION (decl);
8771 DECL_TEMPLATE_INFO (decl)
8772 = tree_cons (TREE_OPERAND (orig_declarator, 0),
8773 TREE_OPERAND (orig_declarator, 1),
8774 NULL_TREE);
8775
8776 if (has_default_arg)
8777 {
8778 cp_error ("default arguments are not allowed in declaration of friend template specialization `%D'",
8779 decl);
8780 return NULL_TREE;
8781 }
8782
8783 if (inlinep)
8784 {
8785 cp_error ("`inline' is not allowed in declaration of friend template specialization `%D'",
8786 decl);
8787 return NULL_TREE;
8788 }
8789 }
8790 }
8791
8792 if (has_default_arg)
8793 add_defarg_fn (decl);
8794
8795 /* Plain overloading: will not be grok'd by grokclassfn. */
8796 if (! ctype && ! processing_template_decl
8797 && DECL_LANGUAGE (decl) != lang_c
8798 && (! DECL_USE_TEMPLATE (decl) || name_mangling_version < 1))
8799 set_mangled_name_for_decl (decl);
8800
8801 if (funcdef_flag)
8802 /* Make the init_value nonzero so pushdecl knows this is not
8803 tentative. error_mark_node is replaced later with the BLOCK. */
8804 DECL_INITIAL (decl) = error_mark_node;
8805
8806 if (TYPE_NOTHROW_P (type) || nothrow_libfn_p (decl))
8807 TREE_NOTHROW (decl) = 1;
8808
8809 /* Caller will do the rest of this. */
8810 if (check < 0)
8811 return decl;
8812
8813 if (flags == NO_SPECIAL && ctype && constructor_name (cname) == declarator)
8814 DECL_CONSTRUCTOR_P (decl) = 1;
8815
8816 /* Function gets the ugly name, field gets the nice one. This call
8817 may change the type of the function (because of default
8818 parameters)! */
8819 if (ctype != NULL_TREE)
8820 grokclassfn (ctype, decl, flags, quals);
8821
8822 decl = check_explicit_specialization (orig_declarator, decl,
8823 template_count,
8824 2 * (funcdef_flag != 0) +
8825 4 * (friendp != 0));
8826 if (decl == error_mark_node)
8827 return NULL_TREE;
8828
8829 if (ctype != NULL_TREE
8830 && (! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
8831 && check)
8832 {
8833 tree old_decl;
8834
8835 old_decl = check_classfn (ctype, decl);
8836
8837 if (old_decl && TREE_CODE (old_decl) == TEMPLATE_DECL)
8838 /* Because grokfndecl is always supposed to return a
8839 FUNCTION_DECL, we pull out the DECL_TEMPLATE_RESULT
8840 here. We depend on our callers to figure out that its
8841 really a template that's being returned. */
8842 old_decl = DECL_TEMPLATE_RESULT (old_decl);
8843
8844 if (old_decl && DECL_STATIC_FUNCTION_P (old_decl)
8845 && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
8846 {
8847 /* Remove the `this' parm added by grokclassfn.
8848 XXX Isn't this done in start_function, too? */
8849 revert_static_member_fn (decl);
8850 last_function_parms = TREE_CHAIN (last_function_parms);
8851 }
8852 if (old_decl && DECL_ARTIFICIAL (old_decl))
8853 cp_error ("definition of implicitly-declared `%D'", old_decl);
8854
8855 if (old_decl)
8856 {
8857 /* Since we've smashed OLD_DECL to its
8858 DECL_TEMPLATE_RESULT, we must do the same to DECL. */
8859 if (TREE_CODE (decl) == TEMPLATE_DECL)
8860 decl = DECL_TEMPLATE_RESULT (decl);
8861
8862 /* Attempt to merge the declarations. This can fail, in
8863 the case of some illegal specialization declarations. */
8864 if (!duplicate_decls (decl, old_decl))
8865 cp_error ("no `%#D' member function declared in class `%T'",
8866 decl, ctype);
8867 return old_decl;
8868 }
8869 }
8870
8871 if (DECL_CONSTRUCTOR_P (decl) && !grok_ctor_properties (ctype, decl))
8872 return NULL_TREE;
8873
8874 if (ctype == NULL_TREE || check)
8875 return decl;
8876
8877 if (virtualp)
8878 {
8879 DECL_VIRTUAL_P (decl) = 1;
8880 if (DECL_VINDEX (decl) == NULL_TREE)
8881 DECL_VINDEX (decl) = error_mark_node;
8882 IDENTIFIER_VIRTUAL_P (DECL_NAME (decl)) = 1;
8883 }
8884
8885 return decl;
8886 }
8887
8888 static tree
8889 grokvardecl (type, declarator, specbits_in, initialized, constp, in_namespace)
8890 tree type;
8891 tree declarator;
8892 RID_BIT_TYPE *specbits_in;
8893 int initialized;
8894 int constp;
8895 tree in_namespace;
8896 {
8897 tree decl;
8898 RID_BIT_TYPE specbits;
8899
8900 specbits = *specbits_in;
8901
8902 if (TREE_CODE (type) == OFFSET_TYPE)
8903 {
8904 /* If you declare a static member so that it
8905 can be initialized, the code will reach here. */
8906 tree basetype = TYPE_OFFSET_BASETYPE (type);
8907 type = TREE_TYPE (type);
8908 decl = build_lang_decl (VAR_DECL, declarator, type);
8909 DECL_CONTEXT (decl) = basetype;
8910 DECL_ASSEMBLER_NAME (decl) = build_static_name (basetype, declarator);
8911 }
8912 else
8913 {
8914 tree context;
8915
8916 if (in_namespace)
8917 context = in_namespace;
8918 else if (namespace_bindings_p () || RIDBIT_SETP (RID_EXTERN, specbits))
8919 context = current_namespace;
8920 else
8921 context = NULL_TREE;
8922
8923 if (processing_template_decl)
8924 /* If we're in a template, we need DECL_LANG_SPECIFIC so that
8925 we can call push_template_decl. */
8926 decl = build_lang_decl (VAR_DECL, declarator, type);
8927 else
8928 decl = build_decl (VAR_DECL, declarator, type);
8929
8930 if (context)
8931 set_decl_namespace (decl, context, 0);
8932
8933 context = DECL_CONTEXT (decl);
8934 if (declarator && context && current_lang_name != lang_name_c)
8935 DECL_ASSEMBLER_NAME (decl) = build_static_name (context, declarator);
8936 }
8937
8938 if (in_namespace)
8939 set_decl_namespace (decl, in_namespace, 0);
8940
8941 if (RIDBIT_SETP (RID_EXTERN, specbits))
8942 {
8943 DECL_THIS_EXTERN (decl) = 1;
8944 DECL_EXTERNAL (decl) = !initialized;
8945 }
8946
8947 /* In class context, static means one per class,
8948 public access, and static storage. */
8949 if (DECL_CLASS_SCOPE_P (decl))
8950 {
8951 TREE_PUBLIC (decl) = 1;
8952 TREE_STATIC (decl) = 1;
8953 DECL_EXTERNAL (decl) = 0;
8954 }
8955 /* At top level, either `static' or no s.c. makes a definition
8956 (perhaps tentative), and absence of `static' makes it public. */
8957 else if (toplevel_bindings_p ())
8958 {
8959 TREE_PUBLIC (decl) = (RIDBIT_NOTSETP (RID_STATIC, specbits)
8960 && (DECL_THIS_EXTERN (decl) || ! constp));
8961 TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
8962 }
8963 /* Not at top level, only `static' makes a static definition. */
8964 else
8965 {
8966 TREE_STATIC (decl) = !! RIDBIT_SETP (RID_STATIC, specbits);
8967 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
8968 }
8969
8970 if (TREE_PUBLIC (decl))
8971 {
8972 /* [basic.link]: A name with no linkage (notably, the name of a class
8973 or enumeration declared in a local scope) shall not be used to
8974 declare an entity with linkage.
8975
8976 Only check this for public decls for now. */
8977 tree t = no_linkage_check (TREE_TYPE (decl));
8978 if (t)
8979 {
8980 if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
8981 /* Ignore for now; `enum { foo } e' is pretty common. */;
8982 else
8983 cp_pedwarn ("non-local variable `%#D' uses local type `%T'",
8984 decl, t);
8985 }
8986 }
8987
8988 return decl;
8989 }
8990
8991 /* Create and return a canonical pointer to member function type, for
8992 TYPE, which is a POINTER_TYPE to a METHOD_TYPE. */
8993
8994 tree
8995 build_ptrmemfunc_type (type)
8996 tree type;
8997 {
8998 tree fields[4];
8999 tree t;
9000 tree u;
9001 tree unqualified_variant = NULL_TREE;
9002
9003 /* If a canonical type already exists for this type, use it. We use
9004 this method instead of type_hash_canon, because it only does a
9005 simple equality check on the list of field members. */
9006
9007 if ((t = TYPE_GET_PTRMEMFUNC_TYPE (type)))
9008 return t;
9009
9010 /* Make sure that we always have the unqualified pointer-to-member
9011 type first. */
9012 if (CP_TYPE_QUALS (type) != TYPE_UNQUALIFIED)
9013 unqualified_variant
9014 = build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type));
9015
9016 t = make_aggr_type (RECORD_TYPE);
9017 /* Let the front-end know this is a pointer to member function... */
9018 TYPE_PTRMEMFUNC_FLAG (t) = 1;
9019 /* ... and not really an aggregate. */
9020 SET_IS_AGGR_TYPE (t, 0);
9021
9022 if (!flag_new_abi)
9023 {
9024 u = make_aggr_type (UNION_TYPE);
9025 SET_IS_AGGR_TYPE (u, 0);
9026 fields[0] = build_lang_decl (FIELD_DECL, pfn_identifier, type);
9027 fields[1] = build_lang_decl (FIELD_DECL, delta2_identifier,
9028 delta_type_node);
9029 finish_builtin_type (u, "__ptrmemfunc_type", fields, 1, ptr_type_node);
9030 TYPE_NAME (u) = NULL_TREE;
9031
9032 fields[0] = build_lang_decl (FIELD_DECL, delta_identifier,
9033 delta_type_node);
9034 fields[1] = build_lang_decl (FIELD_DECL, index_identifier,
9035 delta_type_node);
9036 fields[2] = build_lang_decl (FIELD_DECL, pfn_or_delta2_identifier, u);
9037 finish_builtin_type (t, "__ptrmemfunc_type", fields, 2, ptr_type_node);
9038 }
9039 else
9040 {
9041 fields[0] = build_lang_decl (FIELD_DECL, pfn_identifier, type);
9042 fields[1] = build_lang_decl (FIELD_DECL, delta_identifier,
9043 delta_type_node);
9044 finish_builtin_type (t, "__ptrmemfunc_type", fields, 1, ptr_type_node);
9045 }
9046
9047 /* Zap out the name so that the back-end will give us the debugging
9048 information for this anonymous RECORD_TYPE. */
9049 TYPE_NAME (t) = NULL_TREE;
9050
9051 /* If this is not the unqualified form of this pointer-to-member
9052 type, set the TYPE_MAIN_VARIANT for this type to be the
9053 unqualified type. Since they are actually RECORD_TYPEs that are
9054 not variants of each other, we must do this manually. */
9055 if (CP_TYPE_QUALS (type) != TYPE_UNQUALIFIED)
9056 {
9057 t = build_qualified_type (t, CP_TYPE_QUALS (type));
9058 TYPE_MAIN_VARIANT (t) = unqualified_variant;
9059 TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (unqualified_variant);
9060 TYPE_NEXT_VARIANT (unqualified_variant) = t;
9061 }
9062
9063 /* Cache this pointer-to-member type so that we can find it again
9064 later. */
9065 TYPE_SET_PTRMEMFUNC_TYPE (type, t);
9066
9067 /* Seems to be wanted. */
9068 CLASSTYPE_GOT_SEMICOLON (t) = 1;
9069
9070 return t;
9071 }
9072
9073 /* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
9074 Check to see that the definition is valid. Issue appropriate error
9075 messages. Return 1 if the definition is particularly bad, or 0
9076 otherwise. */
9077
9078 int
9079 check_static_variable_definition (decl, type)
9080 tree decl;
9081 tree type;
9082 {
9083 /* Motion 10 at San Diego: If a static const integral data member is
9084 initialized with an integral constant expression, the initializer
9085 may appear either in the declaration (within the class), or in
9086 the definition, but not both. If it appears in the class, the
9087 member is a member constant. The file-scope definition is always
9088 required. */
9089 if (CLASS_TYPE_P (type) || TREE_CODE (type) == REFERENCE_TYPE)
9090 {
9091 cp_error ("invalid in-class initialization of static data member of non-integral type `%T'",
9092 type);
9093 /* If we just return the declaration, crashes will sometimes
9094 occur. We therefore return void_type_node, as if this was a
9095 friend declaration, to cause callers to completely ignore
9096 this declaration. */
9097 return 1;
9098 }
9099 else if (!CP_TYPE_CONST_P (type))
9100 cp_error ("ISO C++ forbids in-class initialization of non-const static member `%D'",
9101 decl);
9102 else if (pedantic && !INTEGRAL_TYPE_P (type))
9103 cp_pedwarn ("ISO C++ forbids initialization of member constant `%D' of non-integral type `%T'", decl, type);
9104
9105 return 0;
9106 }
9107
9108 /* Given the SIZE (i.e., number of elements) in an array, compute an
9109 appropriate index type for the array. If non-NULL, NAME is the
9110 name of the thing being declared. */
9111
9112 tree
9113 compute_array_index_type (name, size)
9114 tree name;
9115 tree size;
9116 {
9117 tree itype;
9118
9119 /* The size might be the result of a cast. */
9120 STRIP_TYPE_NOPS (size);
9121
9122 /* It might be a const variable or enumeration constant. */
9123 if (TREE_READONLY_DECL_P (size))
9124 size = decl_constant_value (size);
9125
9126 /* If this involves a template parameter, it will be a constant at
9127 instantiation time, but we don't know what the value is yet.
9128 Even if no template parameters are involved, we may an expression
9129 that is not a constant; we don't even simplify `1 + 2' when
9130 processing a template. */
9131 if (processing_template_decl)
9132 {
9133 /* Resolve a qualified reference to an enumerator or static
9134 const data member of ours. */
9135 if (TREE_CODE (size) == SCOPE_REF
9136 && TREE_OPERAND (size, 0) == current_class_type)
9137 {
9138 tree t = lookup_field (current_class_type,
9139 TREE_OPERAND (size, 1), 0, 0);
9140 if (t)
9141 size = t;
9142 }
9143
9144 return build_index_type (build_min (MINUS_EXPR, sizetype,
9145 size, integer_one_node));
9146 }
9147
9148 /* The array bound must be an integer type. */
9149 if (TREE_CODE (TREE_TYPE (size)) != INTEGER_TYPE
9150 && TREE_CODE (TREE_TYPE (size)) != ENUMERAL_TYPE
9151 && TREE_CODE (TREE_TYPE (size)) != BOOLEAN_TYPE)
9152 {
9153 if (name)
9154 cp_error ("size of array `%D' has non-integer type", name);
9155 else
9156 cp_error ("size of array has non-integer type");
9157 size = integer_one_node;
9158 }
9159
9160 /* Normally, the array-bound will be a constant. */
9161 if (TREE_CONSTANT (size))
9162 {
9163 /* Check to see if the array bound overflowed. Make that an
9164 error, no matter how generous we're being. */
9165 int old_flag_pedantic_errors = flag_pedantic_errors;
9166 int old_pedantic = pedantic;
9167 pedantic = flag_pedantic_errors = 1;
9168 constant_expression_warning (size);
9169 pedantic = old_pedantic;
9170 flag_pedantic_errors = old_flag_pedantic_errors;
9171
9172 /* An array must have a positive number of elements. */
9173 if (INT_CST_LT (size, integer_zero_node))
9174 {
9175 if (name)
9176 cp_error ("size of array `%D' is negative", name);
9177 else
9178 cp_error ("size of array is negative");
9179 size = integer_one_node;
9180 }
9181 /* Except that an extension we allow zero-sized arrays. We
9182 always allow them in system headers because glibc uses
9183 them. */
9184 else if (integer_zerop (size) && pedantic && !in_system_header)
9185 {
9186 if (name)
9187 cp_pedwarn ("ISO C++ forbids zero-size array `%D'", name);
9188 else
9189 cp_pedwarn ("ISO C++ forbids zero-size array");
9190 }
9191 }
9192
9193 /* Compute the index of the largest element in the array. It is
9194 one less than the number of elements in the array. */
9195 itype
9196 = fold (build_binary_op (MINUS_EXPR,
9197 cp_convert (ssizetype, size),
9198 cp_convert (ssizetype,
9199 integer_one_node)));
9200
9201 /* Check for variable-sized arrays. We allow such things as an
9202 extension, even though they are not allowed in ANSI/ISO C++. */
9203 if (!TREE_CONSTANT (itype))
9204 {
9205 if (pedantic)
9206 {
9207 if (name)
9208 cp_pedwarn ("ISO C++ forbids variable-size array `%D'",
9209 name);
9210 else
9211 cp_pedwarn ("ISO C++ forbids variable-size array");
9212 }
9213
9214 /* Create a variable-sized array index type. */
9215 itype = variable_size (itype);
9216 }
9217 /* Make sure that there was no overflow when creating to a signed
9218 index type. (For example, on a 32-bit machine, an array with
9219 size 2^32 - 1 is too big.) */
9220 else if (TREE_OVERFLOW (itype))
9221 {
9222 error ("overflow in array dimension");
9223 TREE_OVERFLOW (itype) = 0;
9224 }
9225
9226 /* Create and return the appropriate index type. */
9227 return build_index_type (itype);
9228 }
9229
9230 /* Returns an ARRAY_TYPE for an array with SIZE elements of the
9231 indicated TYPE. If non-NULL, NAME is the NAME of the declaration
9232 with this type. */
9233
9234 static tree
9235 create_array_type_for_decl (name, type, size)
9236 tree name;
9237 tree type;
9238 tree size;
9239 {
9240 tree itype = NULL_TREE;
9241 const char* error_msg;
9242
9243 /* If things have already gone awry, bail now. */
9244 if (type == error_mark_node || size == error_mark_node)
9245 return error_mark_node;
9246
9247 /* Assume that everything will go OK. */
9248 error_msg = NULL;
9249
9250 /* There are some types which cannot be array elements. */
9251 switch (TREE_CODE (type))
9252 {
9253 case VOID_TYPE:
9254 error_msg = "array of void";
9255 break;
9256
9257 case FUNCTION_TYPE:
9258 error_msg = "array of functions";
9259 break;
9260
9261 case REFERENCE_TYPE:
9262 error_msg = "array of references";
9263 break;
9264
9265 case OFFSET_TYPE:
9266 error_msg = "array of data members";
9267 break;
9268
9269 case METHOD_TYPE:
9270 error_msg = "array of function members";
9271 break;
9272
9273 default:
9274 break;
9275 }
9276
9277 /* If something went wrong, issue an error-message and return. */
9278 if (error_msg)
9279 {
9280 if (name)
9281 cp_error ("declaration of `%D' as %s", name, error_msg);
9282 else
9283 cp_error ("creating %s", error_msg);
9284
9285 return error_mark_node;
9286 }
9287
9288 /* [dcl.array]
9289
9290 The constant expressions that specify the bounds of the arrays
9291 can be omitted only for the first member of the sequence. */
9292 if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
9293 {
9294 cp_error ("declaration of `%D' as multidimensional array must have bounds for all dimensions except the first",
9295 name);
9296
9297 return error_mark_node;
9298 }
9299
9300 /* Figure out the index type for the array. */
9301 if (size)
9302 itype = compute_array_index_type (name, size);
9303
9304 return build_cplus_array_type (type, itype);
9305 }
9306
9307 /* Check that it's OK to declare a function with the indicated TYPE.
9308 SFK indicates the kind of special function (if any) that this
9309 function is. CTYPE is the class of which this function is a
9310 member. OPTYPE is the type given in a conversion operator
9311 declaration. Returns the actual return type of the function; that
9312 may be different than TYPE if an error occurs, or for certain
9313 special functions. */
9314
9315 static tree
9316 check_special_function_return_type (sfk, type, ctype, optype)
9317 special_function_kind sfk;
9318 tree type;
9319 tree ctype;
9320 tree optype;
9321 {
9322 switch (sfk)
9323 {
9324 case sfk_constructor:
9325 if (type)
9326 cp_error ("return type specification for constructor invalid");
9327
9328 /* In the old ABI, we return `this'; in the new ABI we don't
9329 bother. */
9330 type = flag_new_abi ? void_type_node : build_pointer_type (ctype);
9331 break;
9332
9333 case sfk_destructor:
9334 if (type)
9335 cp_error ("return type specification for destructor invalid");
9336 type = void_type_node;
9337 break;
9338
9339 case sfk_conversion:
9340 if (type && !same_type_p (type, optype))
9341 cp_error ("operator `%T' declared to return `%T'", optype, type);
9342 else if (type)
9343 cp_pedwarn ("return type specified for `operator %T'", optype);
9344 type = optype;
9345 break;
9346
9347 default:
9348 my_friendly_abort (20000408);
9349 break;
9350 }
9351
9352 return type;
9353 }
9354
9355 /* Given declspecs and a declarator,
9356 determine the name and type of the object declared
9357 and construct a ..._DECL node for it.
9358 (In one case we can return a ..._TYPE node instead.
9359 For invalid input we sometimes return 0.)
9360
9361 DECLSPECS is a chain of tree_list nodes whose value fields
9362 are the storage classes and type specifiers.
9363
9364 DECL_CONTEXT says which syntactic context this declaration is in:
9365 NORMAL for most contexts. Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
9366 FUNCDEF for a function definition. Like NORMAL but a few different
9367 error messages in each case. Return value may be zero meaning
9368 this definition is too screwy to try to parse.
9369 MEMFUNCDEF for a function definition. Like FUNCDEF but prepares to
9370 handle member functions (which have FIELD context).
9371 Return value may be zero meaning this definition is too screwy to
9372 try to parse.
9373 PARM for a parameter declaration (either within a function prototype
9374 or before a function body). Make a PARM_DECL, or return void_type_node.
9375 CATCHPARM for a parameter declaration before a catch clause.
9376 TYPENAME if for a typename (in a cast or sizeof).
9377 Don't make a DECL node; just return the ..._TYPE node.
9378 FIELD for a struct or union field; make a FIELD_DECL.
9379 BITFIELD for a field with specified width.
9380 INITIALIZED is 1 if the decl has an initializer.
9381
9382 ATTRLIST is a TREE_LIST node with prefix attributes in TREE_VALUE and
9383 normal attributes in TREE_PURPOSE, or NULL_TREE.
9384
9385 In the TYPENAME case, DECLARATOR is really an abstract declarator.
9386 It may also be so in the PARM case, for a prototype where the
9387 argument type is specified but not the name.
9388
9389 This function is where the complicated C meanings of `static'
9390 and `extern' are interpreted.
9391
9392 For C++, if there is any monkey business to do, the function which
9393 calls this one must do it, i.e., prepending instance variables,
9394 renaming overloaded function names, etc.
9395
9396 Note that for this C++, it is an error to define a method within a class
9397 which does not belong to that class.
9398
9399 Except in the case where SCOPE_REFs are implicitly known (such as
9400 methods within a class being redundantly qualified),
9401 declarations which involve SCOPE_REFs are returned as SCOPE_REFs
9402 (class_name::decl_name). The caller must also deal with this.
9403
9404 If a constructor or destructor is seen, and the context is FIELD,
9405 then the type gains the attribute TREE_HAS_x. If such a declaration
9406 is erroneous, NULL_TREE is returned.
9407
9408 QUALS is used only for FUNCDEF and MEMFUNCDEF cases. For a member
9409 function, these are the qualifiers to give to the `this' pointer. We
9410 apply TYPE_QUAL_RESTRICT to the this ptr, not the object.
9411
9412 May return void_type_node if the declarator turned out to be a friend.
9413 See grokfield for details. */
9414
9415 tree
9416 grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
9417 tree declspecs;
9418 tree declarator;
9419 enum decl_context decl_context;
9420 int initialized;
9421 tree attrlist;
9422 {
9423 RID_BIT_TYPE specbits;
9424 int nclasses = 0;
9425 tree spec;
9426 tree type = NULL_TREE;
9427 int longlong = 0;
9428 int constp;
9429 int restrictp;
9430 int volatilep;
9431 int type_quals;
9432 int virtualp, explicitp, friendp, inlinep, staticp;
9433 int explicit_int = 0;
9434 int explicit_char = 0;
9435 int defaulted_int = 0;
9436 tree typedef_decl = NULL_TREE;
9437 const char *name;
9438 tree typedef_type = NULL_TREE;
9439 int funcdef_flag = 0;
9440 enum tree_code innermost_code = ERROR_MARK;
9441 int bitfield = 0;
9442 #if 0
9443 /* See the code below that used this. */
9444 tree decl_machine_attr = NULL_TREE;
9445 #endif
9446 /* Set this to error_mark_node for FIELD_DECLs we could not handle properly.
9447 All FIELD_DECLs we build here have `init' put into their DECL_INITIAL. */
9448 tree init = NULL_TREE;
9449
9450 /* Keep track of what sort of function is being processed
9451 so that we can warn about default return values, or explicit
9452 return values which do not match prescribed defaults. */
9453 special_function_kind sfk = sfk_none;
9454
9455 tree dname = NULL_TREE;
9456 tree ctype = current_class_type;
9457 tree ctor_return_type = NULL_TREE;
9458 enum overload_flags flags = NO_SPECIAL;
9459 tree quals = NULL_TREE;
9460 tree raises = NULL_TREE;
9461 int template_count = 0;
9462 tree in_namespace = NULL_TREE;
9463 tree inner_attrs;
9464 int ignore_attrs;
9465
9466 RIDBIT_RESET_ALL (specbits);
9467 if (decl_context == FUNCDEF)
9468 funcdef_flag = 1, decl_context = NORMAL;
9469 else if (decl_context == MEMFUNCDEF)
9470 funcdef_flag = -1, decl_context = FIELD;
9471 else if (decl_context == BITFIELD)
9472 bitfield = 1, decl_context = FIELD;
9473
9474 /* Look inside a declarator for the name being declared
9475 and get it as a string, for an error message. */
9476 {
9477 tree *next = &declarator;
9478 register tree decl;
9479 name = NULL;
9480
9481 while (next && *next)
9482 {
9483 decl = *next;
9484 switch (TREE_CODE (decl))
9485 {
9486 case TREE_LIST:
9487 /* For attributes. */
9488 next = &TREE_VALUE (decl);
9489 break;
9490
9491 case COND_EXPR:
9492 ctype = NULL_TREE;
9493 next = &TREE_OPERAND (decl, 0);
9494 break;
9495
9496 case BIT_NOT_EXPR: /* For C++ destructors! */
9497 {
9498 tree name = TREE_OPERAND (decl, 0);
9499 tree rename = NULL_TREE;
9500
9501 my_friendly_assert (flags == NO_SPECIAL, 152);
9502 flags = DTOR_FLAG;
9503 sfk = sfk_destructor;
9504 if (TREE_CODE (name) == TYPE_DECL)
9505 TREE_OPERAND (decl, 0) = name = constructor_name (name);
9506 my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 153);
9507 if (ctype == NULL_TREE)
9508 {
9509 if (current_class_type == NULL_TREE)
9510 {
9511 error ("destructors must be member functions");
9512 flags = NO_SPECIAL;
9513 }
9514 else
9515 {
9516 tree t = constructor_name (current_class_name);
9517 if (t != name)
9518 rename = t;
9519 }
9520 }
9521 else
9522 {
9523 tree t = constructor_name (ctype);
9524 if (t != name)
9525 rename = t;
9526 }
9527
9528 if (rename)
9529 {
9530 cp_error ("destructor `%T' must match class name `%T'",
9531 name, rename);
9532 TREE_OPERAND (decl, 0) = rename;
9533 }
9534 next = &name;
9535 }
9536 break;
9537
9538 case ADDR_EXPR: /* C++ reference declaration */
9539 /* Fall through. */
9540 case ARRAY_REF:
9541 case INDIRECT_REF:
9542 ctype = NULL_TREE;
9543 innermost_code = TREE_CODE (decl);
9544 next = &TREE_OPERAND (decl, 0);
9545 break;
9546
9547 case CALL_EXPR:
9548 if (parmlist_is_exprlist (CALL_DECLARATOR_PARMS (decl)))
9549 {
9550 /* This is actually a variable declaration using
9551 constructor syntax. We need to call start_decl and
9552 cp_finish_decl so we can get the variable
9553 initialized... */
9554
9555 tree attributes, prefix_attributes;
9556
9557 *next = TREE_OPERAND (decl, 0);
9558 init = CALL_DECLARATOR_PARMS (decl);
9559
9560 if (attrlist)
9561 {
9562 attributes = TREE_PURPOSE (attrlist);
9563 prefix_attributes = TREE_VALUE (attrlist);
9564 }
9565 else
9566 {
9567 attributes = NULL_TREE;
9568 prefix_attributes = NULL_TREE;
9569 }
9570
9571 decl = start_decl (declarator, declspecs, 1,
9572 attributes, prefix_attributes);
9573 decl_type_access_control (decl);
9574 if (decl)
9575 {
9576 /* Look for __unused__ attribute */
9577 if (TREE_USED (TREE_TYPE (decl)))
9578 TREE_USED (decl) = 1;
9579 finish_decl (decl, init, NULL_TREE);
9580 }
9581 else
9582 cp_error ("invalid declarator");
9583 return 0;
9584 }
9585 innermost_code = TREE_CODE (decl);
9586 if (decl_context == FIELD && ctype == NULL_TREE)
9587 ctype = current_class_type;
9588 if (ctype
9589 && TREE_OPERAND (decl, 0)
9590 && (TREE_CODE (TREE_OPERAND (decl, 0)) == TYPE_DECL
9591 && ((DECL_NAME (TREE_OPERAND (decl, 0))
9592 == constructor_name_full (ctype))
9593 || (DECL_NAME (TREE_OPERAND (decl, 0))
9594 == constructor_name (ctype)))))
9595 TREE_OPERAND (decl, 0) = constructor_name (ctype);
9596 next = &TREE_OPERAND (decl, 0);
9597 decl = *next;
9598 if (ctype != NULL_TREE
9599 && decl != NULL_TREE && flags != DTOR_FLAG
9600 && decl == constructor_name (ctype))
9601 {
9602 sfk = sfk_constructor;
9603 ctor_return_type = ctype;
9604 }
9605 ctype = NULL_TREE;
9606 break;
9607
9608 case TEMPLATE_ID_EXPR:
9609 {
9610 tree fns = TREE_OPERAND (decl, 0);
9611
9612 if (TREE_CODE (fns) == LOOKUP_EXPR)
9613 fns = TREE_OPERAND (fns, 0);
9614
9615 dname = fns;
9616 if (TREE_CODE (dname) == COMPONENT_REF)
9617 dname = TREE_OPERAND (dname, 1);
9618 if (TREE_CODE (dname) != IDENTIFIER_NODE)
9619 {
9620 my_friendly_assert (is_overloaded_fn (dname),
9621 19990331);
9622 dname = DECL_NAME (get_first_fn (dname));
9623 }
9624 }
9625 /* Fall through. */
9626
9627 case IDENTIFIER_NODE:
9628 if (TREE_CODE (decl) == IDENTIFIER_NODE)
9629 dname = decl;
9630
9631 next = 0;
9632
9633 if (is_rid (dname))
9634 {
9635 cp_error ("declarator-id missing; using reserved word `%D'",
9636 dname);
9637 name = IDENTIFIER_POINTER (dname);
9638 }
9639 if (! IDENTIFIER_OPNAME_P (dname)
9640 /* GNU/Linux headers use '__op'. Arrgh. */
9641 || (IDENTIFIER_TYPENAME_P (dname) && ! TREE_TYPE (dname)))
9642 name = IDENTIFIER_POINTER (dname);
9643 else
9644 {
9645 if (IDENTIFIER_TYPENAME_P (dname))
9646 {
9647 my_friendly_assert (flags == NO_SPECIAL, 154);
9648 flags = TYPENAME_FLAG;
9649 ctor_return_type = TREE_TYPE (dname);
9650 sfk = sfk_conversion;
9651 }
9652 name = operator_name_string (dname);
9653 }
9654 break;
9655
9656 /* C++ extension */
9657 case SCOPE_REF:
9658 {
9659 /* Perform error checking, and decide on a ctype. */
9660 tree cname = TREE_OPERAND (decl, 0);
9661 if (cname == NULL_TREE)
9662 ctype = NULL_TREE;
9663 else if (TREE_CODE (cname) == NAMESPACE_DECL)
9664 {
9665 ctype = NULL_TREE;
9666 in_namespace = TREE_OPERAND (decl, 0);
9667 TREE_OPERAND (decl, 0) = NULL_TREE;
9668 }
9669 else if (! is_aggr_type (cname, 1))
9670 TREE_OPERAND (decl, 0) = NULL_TREE;
9671 /* Must test TREE_OPERAND (decl, 1), in case user gives
9672 us `typedef (class::memfunc)(int); memfunc *memfuncptr;' */
9673 else if (TREE_OPERAND (decl, 1)
9674 && TREE_CODE (TREE_OPERAND (decl, 1)) == INDIRECT_REF)
9675 ctype = cname;
9676 else if (TREE_CODE (cname) == TEMPLATE_TYPE_PARM
9677 || TREE_CODE (cname) == TEMPLATE_TEMPLATE_PARM)
9678 {
9679 cp_error ("`%T::%D' is not a valid declarator", cname,
9680 TREE_OPERAND (decl, 1));
9681 cp_error (" perhaps you want `typename %T::%D' to make it a type",
9682 cname, TREE_OPERAND (decl, 1));
9683 return void_type_node;
9684 }
9685 else if (ctype == NULL_TREE)
9686 ctype = cname;
9687 else if (TREE_COMPLEXITY (decl) == current_class_depth)
9688 TREE_OPERAND (decl, 0) = ctype;
9689 else
9690 {
9691 if (! UNIQUELY_DERIVED_FROM_P (cname, ctype))
9692 {
9693 cp_error ("type `%T' is not derived from type `%T'",
9694 cname, ctype);
9695 TREE_OPERAND (decl, 0) = NULL_TREE;
9696 }
9697 else
9698 ctype = cname;
9699 }
9700
9701 if (ctype && TREE_CODE (TREE_OPERAND (decl, 1)) == TYPE_DECL
9702 && ((DECL_NAME (TREE_OPERAND (decl, 1))
9703 == constructor_name_full (ctype))
9704 || (DECL_NAME (TREE_OPERAND (decl, 1))
9705 == constructor_name (ctype))))
9706 TREE_OPERAND (decl, 1) = constructor_name (ctype);
9707 next = &TREE_OPERAND (decl, 1);
9708 decl = *next;
9709 if (ctype)
9710 {
9711 if (TREE_CODE (decl) == IDENTIFIER_NODE
9712 && constructor_name (ctype) == decl)
9713 {
9714 sfk = sfk_constructor;
9715 ctor_return_type = ctype;
9716 }
9717 else if (TREE_CODE (decl) == BIT_NOT_EXPR
9718 && TREE_CODE (TREE_OPERAND (decl, 0)) == IDENTIFIER_NODE
9719 && (constructor_name (ctype) == TREE_OPERAND (decl, 0)
9720 || constructor_name_full (ctype) == TREE_OPERAND (decl, 0)))
9721 {
9722 sfk = sfk_destructor;
9723 ctor_return_type = ctype;
9724 flags = DTOR_FLAG;
9725 TREE_OPERAND (decl, 0) = constructor_name (ctype);
9726 next = &TREE_OPERAND (decl, 0);
9727 }
9728 }
9729 }
9730 break;
9731
9732 case ERROR_MARK:
9733 next = 0;
9734 break;
9735
9736 case TYPE_DECL:
9737 /* Parse error puts this typespec where
9738 a declarator should go. */
9739 cp_error ("`%T' specified as declarator-id", DECL_NAME (decl));
9740 if (TREE_TYPE (decl) == current_class_type)
9741 cp_error (" perhaps you want `%T' for a constructor",
9742 current_class_name);
9743 dname = DECL_NAME (decl);
9744 name = IDENTIFIER_POINTER (dname);
9745
9746 /* Avoid giving two errors for this. */
9747 IDENTIFIER_CLASS_VALUE (dname) = NULL_TREE;
9748
9749 declspecs = tree_cons (NULL_TREE, integer_type_node, declspecs);
9750 *next = dname;
9751 next = 0;
9752 break;
9753
9754 default:
9755 cp_compiler_error ("`%D' as declarator", decl);
9756 return 0; /* We used to do a 155 abort here. */
9757 }
9758 }
9759 }
9760
9761 /* A function definition's declarator must have the form of
9762 a function declarator. */
9763
9764 if (funcdef_flag && innermost_code != CALL_EXPR)
9765 return 0;
9766
9767 if (((dname && IDENTIFIER_OPNAME_P (dname)) || flags == TYPENAME_FLAG)
9768 && innermost_code != CALL_EXPR
9769 && ! (ctype && declspecs == NULL_TREE))
9770 {
9771 cp_error ("declaration of `%D' as non-function", dname);
9772 return void_type_node;
9773 }
9774
9775 /* Anything declared one level down from the top level
9776 must be one of the parameters of a function
9777 (because the body is at least two levels down). */
9778
9779 /* This heuristic cannot be applied to C++ nodes! Fixed, however,
9780 by not allowing C++ class definitions to specify their parameters
9781 with xdecls (must be spec.d in the parmlist).
9782
9783 Since we now wait to push a class scope until we are sure that
9784 we are in a legitimate method context, we must set oldcname
9785 explicitly (since current_class_name is not yet alive).
9786
9787 We also want to avoid calling this a PARM if it is in a namespace. */
9788
9789 if (decl_context == NORMAL && !toplevel_bindings_p ())
9790 {
9791 struct binding_level *b = current_binding_level;
9792 current_binding_level = b->level_chain;
9793 if (current_binding_level != 0 && toplevel_bindings_p ())
9794 decl_context = PARM;
9795 current_binding_level = b;
9796 }
9797
9798 if (name == NULL)
9799 name = decl_context == PARM ? "parameter" : "type name";
9800
9801 /* Look through the decl specs and record which ones appear.
9802 Some typespecs are defined as built-in typenames.
9803 Others, the ones that are modifiers of other types,
9804 are represented by bits in SPECBITS: set the bits for
9805 the modifiers that appear. Storage class keywords are also in SPECBITS.
9806
9807 If there is a typedef name or a type, store the type in TYPE.
9808 This includes builtin typedefs such as `int'.
9809
9810 Set EXPLICIT_INT if the type is `int' or `char' and did not
9811 come from a user typedef.
9812
9813 Set LONGLONG if `long' is mentioned twice.
9814
9815 For C++, constructors and destructors have their own fast treatment. */
9816
9817 for (spec = declspecs; spec; spec = TREE_CHAIN (spec))
9818 {
9819 register int i;
9820 register tree id;
9821
9822 /* Certain parse errors slip through. For example,
9823 `int class;' is not caught by the parser. Try
9824 weakly to recover here. */
9825 if (TREE_CODE (spec) != TREE_LIST)
9826 return 0;
9827
9828 id = TREE_VALUE (spec);
9829
9830 if (TREE_CODE (id) == IDENTIFIER_NODE)
9831 {
9832 if (id == ridpointers[(int) RID_INT]
9833 || id == ridpointers[(int) RID_CHAR]
9834 || id == ridpointers[(int) RID_BOOL]
9835 || id == ridpointers[(int) RID_WCHAR])
9836 {
9837 if (type)
9838 {
9839 if (id == ridpointers[(int) RID_BOOL])
9840 error ("`bool' is now a keyword");
9841 else
9842 cp_error ("extraneous `%T' ignored", id);
9843 }
9844 else
9845 {
9846 if (id == ridpointers[(int) RID_INT])
9847 explicit_int = 1;
9848 else if (id == ridpointers[(int) RID_CHAR])
9849 explicit_char = 1;
9850 type = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (id));
9851 }
9852 goto found;
9853 }
9854 /* C++ aggregate types. */
9855 if (IDENTIFIER_HAS_TYPE_VALUE (id))
9856 {
9857 if (type)
9858 cp_error ("multiple declarations `%T' and `%T'", type, id);
9859 else
9860 type = IDENTIFIER_TYPE_VALUE (id);
9861 goto found;
9862 }
9863
9864 for (i = (int) RID_FIRST_MODIFIER; i <= (int) RID_LAST_MODIFIER; i++)
9865 {
9866 if (ridpointers[i] == id)
9867 {
9868 if (i == (int) RID_LONG && RIDBIT_SETP (i, specbits))
9869 {
9870 if (pedantic && ! in_system_header && warn_long_long)
9871 pedwarn ("ISO C++ does not support `long long'");
9872 if (longlong)
9873 error ("`long long long' is too long for GCC");
9874 else
9875 longlong = 1;
9876 }
9877 else if (RIDBIT_SETP (i, specbits))
9878 pedwarn ("duplicate `%s'", IDENTIFIER_POINTER (id));
9879 RIDBIT_SET (i, specbits);
9880 goto found;
9881 }
9882 }
9883 }
9884 /* C++ aggregate types. */
9885 else if (TREE_CODE (id) == TYPE_DECL || TREE_CODE (id) == TEMPLATE_DECL)
9886 {
9887 if (type)
9888 cp_error ("multiple declarations `%T' and `%T'", type,
9889 TREE_TYPE (id));
9890 else
9891 {
9892 type = TREE_TYPE (id);
9893 TREE_VALUE (spec) = type;
9894 }
9895 goto found;
9896 }
9897 if (type)
9898 error ("two or more data types in declaration of `%s'", name);
9899 else if (TREE_CODE (id) == IDENTIFIER_NODE)
9900 {
9901 register tree t = lookup_name (id, 1);
9902 if (!t || TREE_CODE (t) != TYPE_DECL)
9903 error ("`%s' fails to be a typedef or built in type",
9904 IDENTIFIER_POINTER (id));
9905 else
9906 {
9907 type = TREE_TYPE (t);
9908 #if 0
9909 /* See the code below that used this. */
9910 decl_machine_attr = DECL_MACHINE_ATTRIBUTES (id);
9911 #endif
9912 typedef_decl = t;
9913 }
9914 }
9915 else if (id != error_mark_node)
9916 /* Can't change CLASS nodes into RECORD nodes here! */
9917 type = id;
9918
9919 found: ;
9920 }
9921
9922 typedef_type = type;
9923
9924 /* No type at all: default to `int', and set DEFAULTED_INT
9925 because it was not a user-defined typedef. */
9926
9927 if (type == NULL_TREE
9928 && (RIDBIT_SETP (RID_SIGNED, specbits)
9929 || RIDBIT_SETP (RID_UNSIGNED, specbits)
9930 || RIDBIT_SETP (RID_LONG, specbits)
9931 || RIDBIT_SETP (RID_SHORT, specbits)))
9932 {
9933 /* These imply 'int'. */
9934 type = integer_type_node;
9935 defaulted_int = 1;
9936 }
9937
9938 if (sfk != sfk_none)
9939 type = check_special_function_return_type (sfk, type,
9940 ctor_return_type,
9941 ctor_return_type);
9942 else if (type == NULL_TREE)
9943 {
9944 int is_main;
9945
9946 explicit_int = -1;
9947
9948 /* We handle `main' specially here, because 'main () { }' is so
9949 common. With no options, it is allowed. With -Wreturn-type,
9950 it is a warning. It is only an error with -pedantic-errors. */
9951 is_main = (funcdef_flag
9952 && MAIN_NAME_P (dname)
9953 && ctype == NULL_TREE
9954 && in_namespace == NULL_TREE
9955 && current_namespace == global_namespace);
9956
9957 if (in_system_header || flag_ms_extensions)
9958 /* Allow it, sigh. */;
9959 else if (pedantic || ! is_main)
9960 cp_pedwarn ("ISO C++ forbids declaration of `%s' with no type",
9961 name);
9962 else if (warn_return_type)
9963 cp_warning ("ISO C++ forbids declaration of `%s' with no type",
9964 name);
9965
9966 type = integer_type_node;
9967 }
9968
9969 ctype = NULL_TREE;
9970
9971 /* Now process the modifiers that were specified
9972 and check for invalid combinations. */
9973
9974 /* Long double is a special combination. */
9975
9976 if (RIDBIT_SETP (RID_LONG, specbits)
9977 && TYPE_MAIN_VARIANT (type) == double_type_node)
9978 {
9979 RIDBIT_RESET (RID_LONG, specbits);
9980 type = build_qualified_type (long_double_type_node,
9981 CP_TYPE_QUALS (type));
9982 }
9983
9984 /* Check all other uses of type modifiers. */
9985
9986 if (RIDBIT_SETP (RID_UNSIGNED, specbits)
9987 || RIDBIT_SETP (RID_SIGNED, specbits)
9988 || RIDBIT_SETP (RID_LONG, specbits)
9989 || RIDBIT_SETP (RID_SHORT, specbits))
9990 {
9991 int ok = 0;
9992
9993 if (TREE_CODE (type) == REAL_TYPE)
9994 error ("short, signed or unsigned invalid for `%s'", name);
9995 else if (TREE_CODE (type) != INTEGER_TYPE)
9996 error ("long, short, signed or unsigned invalid for `%s'", name);
9997 else if (RIDBIT_SETP (RID_LONG, specbits)
9998 && RIDBIT_SETP (RID_SHORT, specbits))
9999 error ("long and short specified together for `%s'", name);
10000 else if ((RIDBIT_SETP (RID_LONG, specbits)
10001 || RIDBIT_SETP (RID_SHORT, specbits))
10002 && explicit_char)
10003 error ("long or short specified with char for `%s'", name);
10004 else if ((RIDBIT_SETP (RID_LONG, specbits)
10005 || RIDBIT_SETP (RID_SHORT, specbits))
10006 && TREE_CODE (type) == REAL_TYPE)
10007 error ("long or short specified with floating type for `%s'", name);
10008 else if (RIDBIT_SETP (RID_SIGNED, specbits)
10009 && RIDBIT_SETP (RID_UNSIGNED, specbits))
10010 error ("signed and unsigned given together for `%s'", name);
10011 else
10012 {
10013 ok = 1;
10014 if (!explicit_int && !defaulted_int && !explicit_char && pedantic)
10015 {
10016 pedwarn ("long, short, signed or unsigned used invalidly for `%s'",
10017 name);
10018 if (flag_pedantic_errors)
10019 ok = 0;
10020 }
10021 }
10022
10023 /* Discard the type modifiers if they are invalid. */
10024 if (! ok)
10025 {
10026 RIDBIT_RESET (RID_UNSIGNED, specbits);
10027 RIDBIT_RESET (RID_SIGNED, specbits);
10028 RIDBIT_RESET (RID_LONG, specbits);
10029 RIDBIT_RESET (RID_SHORT, specbits);
10030 longlong = 0;
10031 }
10032 }
10033
10034 if (RIDBIT_SETP (RID_COMPLEX, specbits)
10035 && TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
10036 {
10037 error ("complex invalid for `%s'", name);
10038 RIDBIT_RESET (RID_COMPLEX, specbits);
10039 }
10040
10041 /* Decide whether an integer type is signed or not.
10042 Optionally treat bitfields as signed by default. */
10043 if (RIDBIT_SETP (RID_UNSIGNED, specbits)
10044 /* [class.bit]
10045
10046 It is implementation-defined whether a plain (neither
10047 explicitly signed or unsigned) char, short, int, or long
10048 bit-field is signed or unsigned.
10049
10050 Naturally, we extend this to long long as well. Note that
10051 this does not include wchar_t. */
10052 || (bitfield && !flag_signed_bitfields
10053 && RIDBIT_NOTSETP (RID_SIGNED, specbits)
10054 /* A typedef for plain `int' without `signed' can be
10055 controlled just like plain `int', but a typedef for
10056 `signed int' cannot be so controlled. */
10057 && !(typedef_decl
10058 && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
10059 && (TREE_CODE (type) == INTEGER_TYPE
10060 || TREE_CODE (type) == CHAR_TYPE)
10061 && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
10062 {
10063 if (longlong)
10064 type = long_long_unsigned_type_node;
10065 else if (RIDBIT_SETP (RID_LONG, specbits))
10066 type = long_unsigned_type_node;
10067 else if (RIDBIT_SETP (RID_SHORT, specbits))
10068 type = short_unsigned_type_node;
10069 else if (type == char_type_node)
10070 type = unsigned_char_type_node;
10071 else if (typedef_decl)
10072 type = unsigned_type (type);
10073 else
10074 type = unsigned_type_node;
10075 }
10076 else if (RIDBIT_SETP (RID_SIGNED, specbits)
10077 && type == char_type_node)
10078 type = signed_char_type_node;
10079 else if (longlong)
10080 type = long_long_integer_type_node;
10081 else if (RIDBIT_SETP (RID_LONG, specbits))
10082 type = long_integer_type_node;
10083 else if (RIDBIT_SETP (RID_SHORT, specbits))
10084 type = short_integer_type_node;
10085
10086 if (RIDBIT_SETP (RID_COMPLEX, specbits))
10087 {
10088 /* If we just have "complex", it is equivalent to
10089 "complex double", but if any modifiers at all are specified it is
10090 the complex form of TYPE. E.g, "complex short" is
10091 "complex short int". */
10092
10093 if (defaulted_int && ! longlong
10094 && ! (RIDBIT_SETP (RID_LONG, specbits)
10095 || RIDBIT_SETP (RID_SHORT, specbits)
10096 || RIDBIT_SETP (RID_SIGNED, specbits)
10097 || RIDBIT_SETP (RID_UNSIGNED, specbits)))
10098 type = complex_double_type_node;
10099 else if (type == integer_type_node)
10100 type = complex_integer_type_node;
10101 else if (type == float_type_node)
10102 type = complex_float_type_node;
10103 else if (type == double_type_node)
10104 type = complex_double_type_node;
10105 else if (type == long_double_type_node)
10106 type = complex_long_double_type_node;
10107 else
10108 type = build_complex_type (type);
10109 }
10110
10111 if (sfk == sfk_conversion
10112 && (RIDBIT_SETP (RID_CONST, specbits)
10113 || RIDBIT_SETP (RID_VOLATILE, specbits)
10114 || RIDBIT_SETP (RID_RESTRICT, specbits)))
10115 cp_error ("qualifiers are not allowed on declaration of `operator %T'",
10116 ctor_return_type);
10117
10118 /* Set CONSTP if this declaration is `const', whether by
10119 explicit specification or via a typedef.
10120 Likewise for VOLATILEP. */
10121
10122 constp = !! RIDBIT_SETP (RID_CONST, specbits) + CP_TYPE_CONST_P (type);
10123 restrictp =
10124 !! RIDBIT_SETP (RID_RESTRICT, specbits) + CP_TYPE_RESTRICT_P (type);
10125 volatilep =
10126 !! RIDBIT_SETP (RID_VOLATILE, specbits) + CP_TYPE_VOLATILE_P (type);
10127 type_quals = ((constp ? TYPE_QUAL_CONST : 0)
10128 | (restrictp ? TYPE_QUAL_RESTRICT : 0)
10129 | (volatilep ? TYPE_QUAL_VOLATILE : 0));
10130 type = cp_build_qualified_type (type, type_quals);
10131 staticp = 0;
10132 inlinep = !! RIDBIT_SETP (RID_INLINE, specbits);
10133 virtualp = RIDBIT_SETP (RID_VIRTUAL, specbits);
10134 RIDBIT_RESET (RID_VIRTUAL, specbits);
10135 explicitp = RIDBIT_SETP (RID_EXPLICIT, specbits) != 0;
10136 RIDBIT_RESET (RID_EXPLICIT, specbits);
10137
10138 if (RIDBIT_SETP (RID_STATIC, specbits))
10139 staticp = 1 + (decl_context == FIELD);
10140
10141 if (virtualp && staticp == 2)
10142 {
10143 cp_error ("member `%D' cannot be declared both virtual and static",
10144 dname);
10145 staticp = 0;
10146 }
10147 friendp = RIDBIT_SETP (RID_FRIEND, specbits);
10148 RIDBIT_RESET (RID_FRIEND, specbits);
10149
10150 /* Warn if two storage classes are given. Default to `auto'. */
10151
10152 if (RIDBIT_ANY_SET (specbits))
10153 {
10154 if (RIDBIT_SETP (RID_STATIC, specbits)) nclasses++;
10155 if (RIDBIT_SETP (RID_EXTERN, specbits)) nclasses++;
10156 if (decl_context == PARM && nclasses > 0)
10157 error ("storage class specifiers invalid in parameter declarations");
10158 if (RIDBIT_SETP (RID_TYPEDEF, specbits))
10159 {
10160 if (decl_context == PARM)
10161 error ("typedef declaration invalid in parameter declaration");
10162 nclasses++;
10163 }
10164 if (RIDBIT_SETP (RID_AUTO, specbits)) nclasses++;
10165 if (RIDBIT_SETP (RID_REGISTER, specbits)) nclasses++;
10166 }
10167
10168 /* Give error if `virtual' is used outside of class declaration. */
10169 if (virtualp
10170 && (current_class_name == NULL_TREE || decl_context != FIELD))
10171 {
10172 error ("virtual outside class declaration");
10173 virtualp = 0;
10174 }
10175
10176 /* Static anonymous unions are dealt with here. */
10177 if (staticp && decl_context == TYPENAME
10178 && TREE_CODE (declspecs) == TREE_LIST
10179 && ANON_AGGR_TYPE_P (TREE_VALUE (declspecs)))
10180 decl_context = FIELD;
10181
10182 /* Warn about storage classes that are invalid for certain
10183 kinds of declarations (parameters, typenames, etc.). */
10184
10185 if (nclasses > 1)
10186 error ("multiple storage classes in declaration of `%s'", name);
10187 else if (decl_context != NORMAL && nclasses > 0)
10188 {
10189 if ((decl_context == PARM || decl_context == CATCHPARM)
10190 && (RIDBIT_SETP (RID_REGISTER, specbits)
10191 || RIDBIT_SETP (RID_AUTO, specbits)))
10192 ;
10193 else if (RIDBIT_SETP (RID_TYPEDEF, specbits))
10194 ;
10195 else if (decl_context == FIELD
10196 /* C++ allows static class elements */
10197 && RIDBIT_SETP (RID_STATIC, specbits))
10198 /* C++ also allows inlines and signed and unsigned elements,
10199 but in those cases we don't come in here. */
10200 ;
10201 else
10202 {
10203 if (decl_context == FIELD)
10204 {
10205 tree tmp = NULL_TREE;
10206 register int op = 0;
10207
10208 if (declarator)
10209 {
10210 /* Avoid trying to get an operand off an identifier node. */
10211 if (TREE_CODE (declarator) == IDENTIFIER_NODE)
10212 tmp = declarator;
10213 else
10214 tmp = TREE_OPERAND (declarator, 0);
10215 op = IDENTIFIER_OPNAME_P (tmp);
10216 }
10217 error ("storage class specified for %s `%s'",
10218 op ? "member operator" : "field",
10219 op ? operator_name_string (tmp) : name);
10220 }
10221 else
10222 {
10223 if (decl_context == PARM || decl_context == CATCHPARM)
10224 error ("storage class specified for parameter `%s'", name);
10225 else
10226 error ("storage class specified for typename");
10227 }
10228 RIDBIT_RESET (RID_REGISTER, specbits);
10229 RIDBIT_RESET (RID_AUTO, specbits);
10230 RIDBIT_RESET (RID_EXTERN, specbits);
10231 }
10232 }
10233 else if (RIDBIT_SETP (RID_EXTERN, specbits) && initialized && !funcdef_flag)
10234 {
10235 if (toplevel_bindings_p ())
10236 {
10237 /* It's common practice (and completely valid) to have a const
10238 be initialized and declared extern. */
10239 if (!(type_quals & TYPE_QUAL_CONST))
10240 warning ("`%s' initialized and declared `extern'", name);
10241 }
10242 else
10243 error ("`%s' has both `extern' and initializer", name);
10244 }
10245 else if (RIDBIT_SETP (RID_EXTERN, specbits) && funcdef_flag
10246 && ! toplevel_bindings_p ())
10247 error ("nested function `%s' declared `extern'", name);
10248 else if (toplevel_bindings_p ())
10249 {
10250 if (RIDBIT_SETP (RID_AUTO, specbits))
10251 error ("top-level declaration of `%s' specifies `auto'", name);
10252 }
10253
10254 if (nclasses > 0 && friendp)
10255 error ("storage class specifiers invalid in friend function declarations");
10256
10257 /* Now figure out the structure of the declarator proper.
10258 Descend through it, creating more complex types, until we reach
10259 the declared identifier (or NULL_TREE, in an absolute declarator). */
10260
10261 inner_attrs = NULL_TREE;
10262 ignore_attrs = 0;
10263
10264 while (declarator && TREE_CODE (declarator) != IDENTIFIER_NODE
10265 && TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
10266 {
10267 /* Each level of DECLARATOR is either an ARRAY_REF (for ...[..]),
10268 an INDIRECT_REF (for *...),
10269 a CALL_EXPR (for ...(...)),
10270 an identifier (for the name being declared)
10271 or a null pointer (for the place in an absolute declarator
10272 where the name was omitted).
10273 For the last two cases, we have just exited the loop.
10274
10275 For C++ it could also be
10276 a SCOPE_REF (for class :: ...). In this case, we have converted
10277 sensible names to types, and those are the values we use to
10278 qualify the member name.
10279 an ADDR_EXPR (for &...),
10280 a BIT_NOT_EXPR (for destructors)
10281
10282 At this point, TYPE is the type of elements of an array,
10283 or for a function to return, or for a pointer to point to.
10284 After this sequence of ifs, TYPE is the type of the
10285 array or function or pointer, and DECLARATOR has had its
10286 outermost layer removed. */
10287
10288 if (type == error_mark_node)
10289 {
10290 if (TREE_CODE (declarator) == SCOPE_REF)
10291 declarator = TREE_OPERAND (declarator, 1);
10292 else
10293 declarator = TREE_OPERAND (declarator, 0);
10294 continue;
10295 }
10296 if (quals != NULL_TREE
10297 && (declarator == NULL_TREE
10298 || TREE_CODE (declarator) != SCOPE_REF))
10299 {
10300 if (ctype == NULL_TREE && TREE_CODE (type) == METHOD_TYPE)
10301 ctype = TYPE_METHOD_BASETYPE (type);
10302 if (ctype != NULL_TREE)
10303 {
10304 tree dummy = build_decl (TYPE_DECL, NULL_TREE, type);
10305 grok_method_quals (ctype, dummy, quals);
10306 type = TREE_TYPE (dummy);
10307 ctype = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (type)));
10308 quals = NULL_TREE;
10309 }
10310 }
10311
10312 /* See the comment for the TREE_LIST case, below. */
10313 if (ignore_attrs)
10314 ignore_attrs = 0;
10315 else if (inner_attrs)
10316 {
10317 decl_attributes (type, inner_attrs, NULL_TREE);
10318 inner_attrs = NULL_TREE;
10319 }
10320
10321 switch (TREE_CODE (declarator))
10322 {
10323 case TREE_LIST:
10324 {
10325 /* We encode a declarator with embedded attributes using
10326 a TREE_LIST. The attributes apply to the declarator
10327 directly inside them, so we have to skip an iteration
10328 before applying them to the type. If the declarator just
10329 inside is the declarator-id, we apply the attrs to the
10330 decl itself. */
10331 inner_attrs = TREE_PURPOSE (declarator);
10332 ignore_attrs = 1;
10333 declarator = TREE_VALUE (declarator);
10334 }
10335 break;
10336
10337 case ARRAY_REF:
10338 {
10339 register tree size;
10340
10341 size = TREE_OPERAND (declarator, 1);
10342
10343 /* VC++ spells a zero-sized array with []. */
10344 if (size == NULL_TREE && decl_context == FIELD && ! staticp
10345 && ! RIDBIT_SETP (RID_TYPEDEF, specbits))
10346 size = integer_zero_node;
10347
10348 declarator = TREE_OPERAND (declarator, 0);
10349
10350 type = create_array_type_for_decl (dname, type, size);
10351 ctype = NULL_TREE;
10352 }
10353 break;
10354
10355 case CALL_EXPR:
10356 {
10357 tree arg_types;
10358 int funcdecl_p;
10359 tree inner_parms = CALL_DECLARATOR_PARMS (declarator);
10360 tree inner_decl = TREE_OPERAND (declarator, 0);
10361
10362 /* Declaring a function type.
10363 Make sure we have a valid type for the function to return. */
10364
10365 /* We now know that the TYPE_QUALS don't apply to the
10366 decl, but to its return type. */
10367 type_quals = TYPE_UNQUALIFIED;
10368
10369 /* Warn about some types functions can't return. */
10370
10371 if (TREE_CODE (type) == FUNCTION_TYPE)
10372 {
10373 error ("`%s' declared as function returning a function", name);
10374 type = integer_type_node;
10375 }
10376 if (TREE_CODE (type) == ARRAY_TYPE)
10377 {
10378 error ("`%s' declared as function returning an array", name);
10379 type = integer_type_node;
10380 }
10381
10382 if (inner_decl && TREE_CODE (inner_decl) == SCOPE_REF)
10383 inner_decl = TREE_OPERAND (inner_decl, 1);
10384
10385 if (inner_decl && TREE_CODE (inner_decl) == TEMPLATE_ID_EXPR)
10386 inner_decl = dname;
10387
10388 /* Pick up type qualifiers which should be applied to `this'. */
10389 quals = CALL_DECLARATOR_QUALS (declarator);
10390
10391 /* Pick up the exception specifications. */
10392 raises = CALL_DECLARATOR_EXCEPTION_SPEC (declarator);
10393
10394 /* Say it's a definition only for the CALL_EXPR
10395 closest to the identifier. */
10396 funcdecl_p
10397 = inner_decl
10398 && (TREE_CODE (inner_decl) == IDENTIFIER_NODE
10399 || TREE_CODE (inner_decl) == TEMPLATE_ID_EXPR
10400 || TREE_CODE (inner_decl) == BIT_NOT_EXPR);
10401
10402 if (ctype == NULL_TREE
10403 && decl_context == FIELD
10404 && funcdecl_p
10405 && (friendp == 0 || dname == current_class_name))
10406 ctype = current_class_type;
10407
10408 if (ctype && sfk == sfk_conversion)
10409 TYPE_HAS_CONVERSION (ctype) = 1;
10410 if (ctype && constructor_name (ctype) == dname)
10411 {
10412 /* We are within a class's scope. If our declarator name
10413 is the same as the class name, and we are defining
10414 a function, then it is a constructor/destructor, and
10415 therefore returns a void type. */
10416
10417 if (flags == DTOR_FLAG)
10418 {
10419 /* ISO C++ 12.4/2. A destructor may not be
10420 declared const or volatile. A destructor may
10421 not be static. */
10422 if (staticp == 2)
10423 error ("destructor cannot be static member function");
10424 if (quals)
10425 {
10426 cp_error ("destructors may not be `%s'",
10427 IDENTIFIER_POINTER (TREE_VALUE (quals)));
10428 quals = NULL_TREE;
10429 }
10430 if (decl_context == FIELD)
10431 {
10432 if (! member_function_or_else (ctype,
10433 current_class_type,
10434 flags))
10435 return void_type_node;
10436 }
10437 }
10438 else /* It's a constructor. */
10439 {
10440 if (explicitp == 1)
10441 explicitp = 2;
10442 /* ISO C++ 12.1. A constructor may not be
10443 declared const or volatile. A constructor may
10444 not be virtual. A constructor may not be
10445 static. */
10446 if (staticp == 2)
10447 error ("constructor cannot be static member function");
10448 if (virtualp)
10449 {
10450 pedwarn ("constructors cannot be declared virtual");
10451 virtualp = 0;
10452 }
10453 if (quals)
10454 {
10455 cp_error ("constructors may not be `%s'",
10456 IDENTIFIER_POINTER (TREE_VALUE (quals)));
10457 quals = NULL_TREE;
10458 }
10459 {
10460 RID_BIT_TYPE tmp_bits;
10461 bcopy ((void*)&specbits, (void*)&tmp_bits, sizeof (RID_BIT_TYPE));
10462 RIDBIT_RESET (RID_INLINE, tmp_bits);
10463 RIDBIT_RESET (RID_STATIC, tmp_bits);
10464 if (RIDBIT_ANY_SET (tmp_bits))
10465 error ("return value type specifier for constructor ignored");
10466 }
10467 if (decl_context == FIELD)
10468 {
10469 if (! member_function_or_else (ctype,
10470 current_class_type,
10471 flags))
10472 return void_type_node;
10473 TYPE_HAS_CONSTRUCTOR (ctype) = 1;
10474 if (sfk != sfk_constructor)
10475 return NULL_TREE;
10476 }
10477 }
10478 if (decl_context == FIELD)
10479 staticp = 0;
10480 }
10481 else if (friendp)
10482 {
10483 if (initialized)
10484 error ("can't initialize friend function `%s'", name);
10485 if (virtualp)
10486 {
10487 /* Cannot be both friend and virtual. */
10488 error ("virtual functions cannot be friends");
10489 RIDBIT_RESET (RID_FRIEND, specbits);
10490 friendp = 0;
10491 }
10492 if (decl_context == NORMAL)
10493 error ("friend declaration not in class definition");
10494 if (current_function_decl && funcdef_flag)
10495 cp_error ("can't define friend function `%s' in a local class definition",
10496 name);
10497 }
10498
10499 /* Construct the function type and go to the next
10500 inner layer of declarator. */
10501
10502 declarator = TREE_OPERAND (declarator, 0);
10503
10504 /* FIXME: This is where default args should be fully
10505 processed. */
10506
10507 arg_types = grokparms (inner_parms, funcdecl_p ? funcdef_flag : 0);
10508
10509 if (declarator && flags == DTOR_FLAG)
10510 {
10511 /* A destructor declared in the body of a class will
10512 be represented as a BIT_NOT_EXPR. But, we just
10513 want the underlying IDENTIFIER. */
10514 if (TREE_CODE (declarator) == BIT_NOT_EXPR)
10515 declarator = TREE_OPERAND (declarator, 0);
10516
10517 if (strict_prototype == 0 && arg_types == NULL_TREE)
10518 arg_types = void_list_node;
10519 else if (arg_types == NULL_TREE
10520 || arg_types != void_list_node)
10521 {
10522 cp_error ("destructors may not have parameters");
10523 arg_types = void_list_node;
10524 last_function_parms = NULL_TREE;
10525 }
10526 }
10527
10528 /* ANSI says that `const int foo ();'
10529 does not make the function foo const. */
10530 type = build_function_type (type, arg_types);
10531
10532 {
10533 tree t;
10534 for (t = arg_types; t; t = TREE_CHAIN (t))
10535 if (TREE_PURPOSE (t)
10536 && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
10537 {
10538 add_defarg_fn (type);
10539 break;
10540 }
10541 }
10542 }
10543 break;
10544
10545 case ADDR_EXPR:
10546 case INDIRECT_REF:
10547 /* Filter out pointers-to-references and references-to-references.
10548 We can get these if a TYPE_DECL is used. */
10549
10550 if (TREE_CODE (type) == REFERENCE_TYPE)
10551 {
10552 error ("cannot declare %s to references",
10553 TREE_CODE (declarator) == ADDR_EXPR
10554 ? "references" : "pointers");
10555 declarator = TREE_OPERAND (declarator, 0);
10556 continue;
10557 }
10558
10559 if (TREE_CODE (type) == OFFSET_TYPE
10560 && (TREE_CODE (TREE_TYPE (type)) == VOID_TYPE
10561 || TREE_CODE (TREE_TYPE (type)) == REFERENCE_TYPE))
10562 {
10563 cp_error ("cannot declare pointer to `%#T' member",
10564 TREE_TYPE (type));
10565 type = TREE_TYPE (type);
10566 }
10567
10568 /* Merge any constancy or volatility into the target type
10569 for the pointer. */
10570
10571 /* We now know that the TYPE_QUALS don't apply to the decl,
10572 but to the target of the pointer. */
10573 type_quals = TYPE_UNQUALIFIED;
10574
10575 if (TREE_CODE (declarator) == ADDR_EXPR)
10576 {
10577 if (TREE_CODE (type) == VOID_TYPE)
10578 error ("invalid type: `void &'");
10579 else
10580 type = build_reference_type (type);
10581 }
10582 else if (TREE_CODE (type) == METHOD_TYPE)
10583 type = build_ptrmemfunc_type (build_pointer_type (type));
10584 else
10585 type = build_pointer_type (type);
10586
10587 /* Process a list of type modifier keywords (such as
10588 const or volatile) that were given inside the `*' or `&'. */
10589
10590 if (TREE_TYPE (declarator))
10591 {
10592 register tree typemodlist;
10593 int erred = 0;
10594
10595 constp = 0;
10596 volatilep = 0;
10597 restrictp = 0;
10598 for (typemodlist = TREE_TYPE (declarator); typemodlist;
10599 typemodlist = TREE_CHAIN (typemodlist))
10600 {
10601 tree qualifier = TREE_VALUE (typemodlist);
10602
10603 if (qualifier == ridpointers[(int) RID_CONST])
10604 constp++;
10605 else if (qualifier == ridpointers[(int) RID_VOLATILE])
10606 volatilep++;
10607 else if (qualifier == ridpointers[(int) RID_RESTRICT])
10608 restrictp++;
10609 else if (!erred)
10610 {
10611 erred = 1;
10612 error ("invalid type modifier within pointer declarator");
10613 }
10614 }
10615 if (constp > 1)
10616 pedwarn ("duplicate `const'");
10617 if (volatilep > 1)
10618 pedwarn ("duplicate `volatile'");
10619 if (restrictp > 1)
10620 pedwarn ("duplicate `restrict'");
10621
10622 type_quals = ((constp ? TYPE_QUAL_CONST : 0)
10623 | (restrictp ? TYPE_QUAL_RESTRICT : 0)
10624 | (volatilep ? TYPE_QUAL_VOLATILE : 0));
10625 if (TREE_CODE (declarator) == ADDR_EXPR
10626 && (constp || volatilep))
10627 {
10628 if (constp)
10629 pedwarn ("discarding `const' applied to a reference");
10630 if (volatilep)
10631 pedwarn ("discarding `volatile' applied to a reference");
10632 type_quals &= ~(TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE);
10633 }
10634 type = cp_build_qualified_type (type, type_quals);
10635 }
10636 declarator = TREE_OPERAND (declarator, 0);
10637 ctype = NULL_TREE;
10638 break;
10639
10640 case SCOPE_REF:
10641 {
10642 /* We have converted type names to NULL_TREE if the
10643 name was bogus, or to a _TYPE node, if not.
10644
10645 The variable CTYPE holds the type we will ultimately
10646 resolve to. The code here just needs to build
10647 up appropriate member types. */
10648 tree sname = TREE_OPERAND (declarator, 1);
10649 tree t;
10650
10651 /* Destructors can have their visibilities changed as well. */
10652 if (TREE_CODE (sname) == BIT_NOT_EXPR)
10653 sname = TREE_OPERAND (sname, 0);
10654
10655 if (TREE_COMPLEXITY (declarator) == 0)
10656 /* This needs to be here, in case we are called
10657 multiple times. */ ;
10658 else if (TREE_COMPLEXITY (declarator) == -1)
10659 /* Namespace member. */
10660 pop_decl_namespace ();
10661 else if (friendp && (TREE_COMPLEXITY (declarator) < 2))
10662 /* Don't fall out into global scope. Hides real bug? --eichin */ ;
10663 else if (! IS_AGGR_TYPE_CODE
10664 (TREE_CODE (TREE_OPERAND (declarator, 0))))
10665 ;
10666 else if (TREE_COMPLEXITY (declarator) == current_class_depth)
10667 {
10668 /* Resolve any TYPENAME_TYPEs from the decl-specifier-seq
10669 that refer to ctype. They couldn't be resolved earlier
10670 because we hadn't pushed into the class yet.
10671 Example: resolve 'B<T>::type' in
10672 'B<typename B<T>::type> B<T>::f () { }'. */
10673 if (current_template_parms
10674 && uses_template_parms (type)
10675 && uses_template_parms (current_class_type))
10676 {
10677 tree args = current_template_args ();
10678 type = tsubst (type, args, /*complain=*/1, NULL_TREE);
10679 }
10680
10681 /* This pop_nested_class corresponds to the
10682 push_nested_class used to push into class scope for
10683 parsing the argument list of a function decl, in
10684 qualified_id. */
10685 pop_nested_class ();
10686 TREE_COMPLEXITY (declarator) = current_class_depth;
10687 }
10688 else
10689 my_friendly_abort (16);
10690
10691 if (TREE_OPERAND (declarator, 0) == NULL_TREE)
10692 {
10693 /* We had a reference to a global decl, or
10694 perhaps we were given a non-aggregate typedef,
10695 in which case we cleared this out, and should just
10696 keep going as though it wasn't there. */
10697 declarator = sname;
10698 continue;
10699 }
10700 ctype = TREE_OPERAND (declarator, 0);
10701
10702 t = ctype;
10703 while (t != NULL_TREE && CLASS_TYPE_P (t))
10704 {
10705 /* You're supposed to have one `template <...>'
10706 for every template class, but you don't need one
10707 for a full specialization. For example:
10708
10709 template <class T> struct S{};
10710 template <> struct S<int> { void f(); };
10711 void S<int>::f () {}
10712
10713 is correct; there shouldn't be a `template <>' for
10714 the definition of `S<int>::f'. */
10715 if (CLASSTYPE_TEMPLATE_INFO (t)
10716 && (CLASSTYPE_TEMPLATE_INSTANTIATION (t)
10717 || uses_template_parms (CLASSTYPE_TI_ARGS (t))))
10718 template_count += 1;
10719
10720 t = TYPE_MAIN_DECL (t);
10721 if (DECL_LANG_SPECIFIC (t))
10722 t = DECL_CONTEXT (t);
10723 else
10724 t = NULL_TREE;
10725 }
10726
10727 if (sname == NULL_TREE)
10728 goto done_scoping;
10729
10730 if (TREE_CODE (sname) == IDENTIFIER_NODE)
10731 {
10732 /* This is the `standard' use of the scoping operator:
10733 basetype :: member . */
10734
10735 if (ctype == current_class_type)
10736 {
10737 /* class A {
10738 void A::f ();
10739 };
10740
10741 Is this ill-formed? */
10742
10743 if (pedantic)
10744 cp_pedwarn ("extra qualification `%T::' on member `%s' ignored",
10745 ctype, name);
10746 }
10747 else if (TREE_CODE (type) == FUNCTION_TYPE)
10748 {
10749 if (current_class_type == NULL_TREE
10750 || friendp)
10751 type = build_cplus_method_type (ctype, TREE_TYPE (type),
10752 TYPE_ARG_TYPES (type));
10753 else
10754 {
10755 cp_error ("cannot declare member function `%T::%s' within `%T'",
10756 ctype, name, current_class_type);
10757 return void_type_node;
10758 }
10759 }
10760 else if (RIDBIT_SETP (RID_TYPEDEF, specbits)
10761 || COMPLETE_TYPE_P (complete_type (ctype)))
10762 {
10763 /* Have to move this code elsewhere in this function.
10764 this code is used for i.e., typedef int A::M; M *pm;
10765
10766 It is? How? jason 10/2/94 */
10767
10768 if (current_class_type)
10769 {
10770 cp_error ("cannot declare member `%T::%s' within `%T'",
10771 ctype, name, current_class_type);
10772 return void_type_node;
10773 }
10774 type = build_offset_type (ctype, type);
10775 }
10776 else if (uses_template_parms (ctype))
10777 {
10778 if (TREE_CODE (type) == FUNCTION_TYPE)
10779 type
10780 = build_cplus_method_type (ctype, TREE_TYPE (type),
10781 TYPE_ARG_TYPES (type));
10782 }
10783 else
10784 {
10785 cp_error ("structure `%T' not yet defined", ctype);
10786 return error_mark_node;
10787 }
10788
10789 declarator = sname;
10790 }
10791 else if (TREE_CODE (sname) == SCOPE_REF)
10792 my_friendly_abort (17);
10793 else
10794 {
10795 done_scoping:
10796 declarator = TREE_OPERAND (declarator, 1);
10797 if (declarator && TREE_CODE (declarator) == CALL_EXPR)
10798 /* In this case, we will deal with it later. */
10799 ;
10800 else
10801 {
10802 if (TREE_CODE (type) == FUNCTION_TYPE)
10803 type = build_cplus_method_type (ctype, TREE_TYPE (type),
10804 TYPE_ARG_TYPES (type));
10805 else
10806 type = build_offset_type (ctype, type);
10807 }
10808 }
10809 }
10810 break;
10811
10812 case BIT_NOT_EXPR:
10813 declarator = TREE_OPERAND (declarator, 0);
10814 break;
10815
10816 case RECORD_TYPE:
10817 case UNION_TYPE:
10818 case ENUMERAL_TYPE:
10819 declarator = NULL_TREE;
10820 break;
10821
10822 case ERROR_MARK:
10823 declarator = NULL_TREE;
10824 break;
10825
10826 default:
10827 my_friendly_abort (158);
10828 }
10829 }
10830
10831 /* See the comment for the TREE_LIST case, above. */
10832 if (inner_attrs)
10833 {
10834 if (! ignore_attrs)
10835 decl_attributes (type, inner_attrs, NULL_TREE);
10836 else if (attrlist)
10837 TREE_VALUE (attrlist) = chainon (inner_attrs, TREE_VALUE (attrlist));
10838 else
10839 attrlist = build_decl_list (NULL_TREE, inner_attrs);
10840 }
10841
10842 /* Now TYPE has the actual type. */
10843
10844 if (explicitp == 1 || (explicitp && friendp))
10845 {
10846 /* [dcl.fct.spec] The explicit specifier shall only be used in
10847 declarations of constructors within a class definition. */
10848 error ("only declarations of constructors can be `explicit'");
10849 explicitp = 0;
10850 }
10851
10852 if (RIDBIT_SETP (RID_MUTABLE, specbits))
10853 {
10854 if (current_class_name == NULL_TREE || decl_context == PARM || friendp)
10855 {
10856 error ("non-member `%s' cannot be declared `mutable'", name);
10857 RIDBIT_RESET (RID_MUTABLE, specbits);
10858 }
10859 else if (decl_context == TYPENAME || RIDBIT_SETP (RID_TYPEDEF, specbits))
10860 {
10861 error ("non-object member `%s' cannot be declared `mutable'", name);
10862 RIDBIT_RESET (RID_MUTABLE, specbits);
10863 }
10864 else if (TREE_CODE (type) == FUNCTION_TYPE
10865 || TREE_CODE (type) == METHOD_TYPE)
10866 {
10867 error ("function `%s' cannot be declared `mutable'", name);
10868 RIDBIT_RESET (RID_MUTABLE, specbits);
10869 }
10870 else if (staticp)
10871 {
10872 error ("static `%s' cannot be declared `mutable'", name);
10873 RIDBIT_RESET (RID_MUTABLE, specbits);
10874 }
10875 else if (type_quals & TYPE_QUAL_CONST)
10876 {
10877 error ("const `%s' cannot be declared `mutable'", name);
10878 RIDBIT_RESET (RID_MUTABLE, specbits);
10879 }
10880 }
10881
10882 if (declarator == NULL_TREE
10883 || TREE_CODE (declarator) == IDENTIFIER_NODE
10884 || (TREE_CODE (declarator) == TEMPLATE_ID_EXPR
10885 && (TREE_CODE (type) == FUNCTION_TYPE
10886 || TREE_CODE (type) == METHOD_TYPE)))
10887 /* OK */;
10888 else if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
10889 {
10890 cp_error ("template-id `%D' used as a declarator", declarator);
10891 declarator = dname;
10892 }
10893 else
10894 /* Unexpected declarator format. */
10895 my_friendly_abort (990210);
10896
10897 /* If this is declaring a typedef name, return a TYPE_DECL. */
10898
10899 if (RIDBIT_SETP (RID_TYPEDEF, specbits) && decl_context != TYPENAME)
10900 {
10901 tree decl;
10902
10903 /* Note that the grammar rejects storage classes
10904 in typenames, fields or parameters. */
10905 if (current_lang_name == lang_name_java)
10906 TYPE_FOR_JAVA (type) = 1;
10907
10908 if (decl_context == FIELD)
10909 {
10910 if (declarator == constructor_name (current_class_type))
10911 cp_pedwarn ("ISO C++ forbids nested type `%D' with same name as enclosing class",
10912 declarator);
10913 decl = build_lang_decl (TYPE_DECL, declarator, type);
10914 }
10915 else
10916 {
10917 /* Make sure this typedef lives as long as its type,
10918 since it might be used as a template parameter. */
10919 if (processing_template_decl)
10920 decl = build_lang_decl (TYPE_DECL, declarator, type);
10921 else
10922 decl = build_decl (TYPE_DECL, declarator, type);
10923 }
10924
10925 /* If the user declares "typedef struct {...} foo" then the
10926 struct will have an anonymous name. Fill that name in now.
10927 Nothing can refer to it, so nothing needs know about the name
10928 change. */
10929 if (type != error_mark_node
10930 && declarator
10931 && TYPE_NAME (type)
10932 && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
10933 && ANON_AGGRNAME_P (TYPE_IDENTIFIER (type))
10934 && CP_TYPE_QUALS (type) == TYPE_UNQUALIFIED)
10935 {
10936 tree oldname = TYPE_NAME (type);
10937 tree t;
10938
10939 /* Replace the anonymous name with the real name everywhere. */
10940 lookup_tag_reverse (type, declarator);
10941 for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
10942 if (TYPE_NAME (t) == oldname)
10943 TYPE_NAME (t) = decl;
10944
10945 if (TYPE_LANG_SPECIFIC (type))
10946 TYPE_WAS_ANONYMOUS (type) = 1;
10947
10948 /* If this is a typedef within a template class, the nested
10949 type is a (non-primary) template. The name for the
10950 template needs updating as well. */
10951 if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
10952 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type))
10953 = TYPE_IDENTIFIER (type);
10954
10955 /* XXX Temporarily set the scope.
10956 When returning, start_decl expects it as NULL_TREE,
10957 and will then then set it using pushdecl. */
10958 my_friendly_assert (DECL_CONTEXT (decl) == NULL_TREE, 980404);
10959 if (current_class_type)
10960 DECL_CONTEXT (decl) = current_class_type;
10961 else
10962 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
10963
10964 DECL_ASSEMBLER_NAME (decl) = DECL_NAME (decl);
10965 DECL_ASSEMBLER_NAME (decl)
10966 = get_identifier (build_overload_name (type, 1, 1));
10967 DECL_CONTEXT (decl) = NULL_TREE;
10968
10969 /* FIXME remangle member functions; member functions of a
10970 type with external linkage have external linkage. */
10971 }
10972
10973 if (TREE_CODE (type) == OFFSET_TYPE || TREE_CODE (type) == METHOD_TYPE)
10974 {
10975 cp_error_at ("typedef name may not be class-qualified", decl);
10976 return NULL_TREE;
10977 }
10978 else if (quals)
10979 {
10980 if (ctype == NULL_TREE)
10981 {
10982 if (TREE_CODE (type) != METHOD_TYPE)
10983 cp_error_at ("invalid type qualifier for non-member function type", decl);
10984 else
10985 ctype = TYPE_METHOD_BASETYPE (type);
10986 }
10987 if (ctype != NULL_TREE)
10988 grok_method_quals (ctype, decl, quals);
10989 }
10990
10991 if (RIDBIT_SETP (RID_SIGNED, specbits)
10992 || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
10993 C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
10994
10995 bad_specifiers (decl, "type", virtualp, quals != NULL_TREE,
10996 inlinep, friendp, raises != NULL_TREE);
10997
10998 if (initialized)
10999 error ("typedef declaration includes an initializer");
11000
11001 return decl;
11002 }
11003
11004 /* Detect the case of an array type of unspecified size
11005 which came, as such, direct from a typedef name.
11006 We must copy the type, so that each identifier gets
11007 a distinct type, so that each identifier's size can be
11008 controlled separately by its own initializer. */
11009
11010 if (type == typedef_type && TREE_CODE (type) == ARRAY_TYPE
11011 && TYPE_DOMAIN (type) == NULL_TREE)
11012 {
11013 type = build_cplus_array_type (TREE_TYPE (type), TYPE_DOMAIN (type));
11014 }
11015
11016 /* If this is a type name (such as, in a cast or sizeof),
11017 compute the type and return it now. */
11018
11019 if (decl_context == TYPENAME)
11020 {
11021 /* Note that the grammar rejects storage classes
11022 in typenames, fields or parameters. */
11023 if (type_quals != TYPE_UNQUALIFIED)
11024 type_quals = TYPE_UNQUALIFIED;
11025
11026 /* Special case: "friend class foo" looks like a TYPENAME context. */
11027 if (friendp)
11028 {
11029 if (type_quals != TYPE_UNQUALIFIED)
11030 {
11031 cp_error ("type qualifiers specified for friend class declaration");
11032 type_quals = TYPE_UNQUALIFIED;
11033 }
11034 if (inlinep)
11035 {
11036 cp_error ("`inline' specified for friend class declaration");
11037 inlinep = 0;
11038 }
11039
11040 /* Only try to do this stuff if we didn't already give up. */
11041 if (type != integer_type_node)
11042 {
11043 /* A friendly class? */
11044 if (current_class_type)
11045 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type));
11046 else
11047 error ("trying to make class `%s' a friend of global scope",
11048 TYPE_NAME_STRING (type));
11049 type = void_type_node;
11050 }
11051 }
11052 else if (quals)
11053 {
11054 if (ctype == NULL_TREE)
11055 {
11056 if (TREE_CODE (type) != METHOD_TYPE)
11057 cp_error ("invalid qualifiers on non-member function type");
11058 else
11059 ctype = TYPE_METHOD_BASETYPE (type);
11060 }
11061 if (ctype)
11062 {
11063 tree dummy = build_decl (TYPE_DECL, declarator, type);
11064 grok_method_quals (ctype, dummy, quals);
11065 type = TREE_TYPE (dummy);
11066 }
11067 }
11068
11069 return type;
11070 }
11071 else if (declarator == NULL_TREE && decl_context != PARM
11072 && decl_context != CATCHPARM
11073 && TREE_CODE (type) != UNION_TYPE
11074 && ! bitfield)
11075 {
11076 cp_error ("abstract declarator `%T' used as declaration", type);
11077 declarator = make_anon_name ();
11078 }
11079
11080 /* `void' at top level (not within pointer)
11081 is allowed only in typedefs or type names.
11082 We don't complain about parms either, but that is because
11083 a better error message can be made later. */
11084
11085 if (TREE_CODE (type) == VOID_TYPE && decl_context != PARM)
11086 {
11087 if (! declarator)
11088 error ("unnamed variable or field declared void");
11089 else if (TREE_CODE (declarator) == IDENTIFIER_NODE)
11090 {
11091 if (IDENTIFIER_OPNAME_P (declarator))
11092 my_friendly_abort (356);
11093 else
11094 error ("variable or field `%s' declared void", name);
11095 }
11096 else
11097 error ("variable or field declared void");
11098 type = integer_type_node;
11099 }
11100
11101 /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
11102 or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE. */
11103
11104 if (decl_context == PARM || decl_context == CATCHPARM)
11105 {
11106 if (ctype || in_namespace)
11107 error ("cannot use `::' in parameter declaration");
11108
11109 /* A parameter declared as an array of T is really a pointer to T.
11110 One declared as a function is really a pointer to a function.
11111 One declared as a member is really a pointer to member. */
11112
11113 if (TREE_CODE (type) == ARRAY_TYPE)
11114 {
11115 /* Transfer const-ness of array into that of type pointed to. */
11116 type = build_pointer_type (TREE_TYPE (type));
11117 type_quals = TYPE_UNQUALIFIED;
11118 }
11119 else if (TREE_CODE (type) == FUNCTION_TYPE)
11120 type = build_pointer_type (type);
11121 else if (TREE_CODE (type) == OFFSET_TYPE)
11122 type = build_pointer_type (type);
11123 else if (TREE_CODE (type) == VOID_TYPE && declarator)
11124 {
11125 error ("declaration of `%s' as void", name);
11126 return NULL_TREE;
11127 }
11128 }
11129
11130 {
11131 register tree decl;
11132
11133 if (decl_context == PARM)
11134 {
11135 decl = build_decl (PARM_DECL, declarator, type);
11136
11137 bad_specifiers (decl, "parameter", virtualp, quals != NULL_TREE,
11138 inlinep, friendp, raises != NULL_TREE);
11139
11140 /* Compute the type actually passed in the parmlist,
11141 for the case where there is no prototype.
11142 (For example, shorts and chars are passed as ints.)
11143 When there is a prototype, this is overridden later. */
11144
11145 DECL_ARG_TYPE (decl) = type_promotes_to (type);
11146 }
11147 else if (decl_context == FIELD)
11148 {
11149 if (type == error_mark_node)
11150 {
11151 /* Happens when declaring arrays of sizes which
11152 are error_mark_node, for example. */
11153 decl = NULL_TREE;
11154 }
11155 else if (in_namespace && !friendp)
11156 {
11157 /* Something like struct S { int N::j; }; */
11158 cp_error ("invalid use of `::'");
11159 decl = NULL_TREE;
11160 }
11161 else if (TREE_CODE (type) == FUNCTION_TYPE)
11162 {
11163 int publicp = 0;
11164 tree function_context;
11165
11166 /* We catch the others as conflicts with the builtin
11167 typedefs. */
11168 if (friendp && declarator == ridpointers[(int) RID_SIGNED])
11169 {
11170 cp_error ("function `%D' cannot be declared friend",
11171 declarator);
11172 friendp = 0;
11173 }
11174
11175 if (friendp == 0)
11176 {
11177 if (ctype == NULL_TREE)
11178 ctype = current_class_type;
11179
11180 if (ctype == NULL_TREE)
11181 {
11182 cp_error ("can't make `%D' into a method -- not in a class",
11183 declarator);
11184 return void_type_node;
11185 }
11186
11187 /* ``A union may [ ... ] not [ have ] virtual functions.''
11188 ARM 9.5 */
11189 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
11190 {
11191 cp_error ("function `%D' declared virtual inside a union",
11192 declarator);
11193 return void_type_node;
11194 }
11195
11196 if (declarator == ansi_opname[(int) NEW_EXPR]
11197 || declarator == ansi_opname[(int) VEC_NEW_EXPR]
11198 || declarator == ansi_opname[(int) DELETE_EXPR]
11199 || declarator == ansi_opname[(int) VEC_DELETE_EXPR])
11200 {
11201 if (virtualp)
11202 {
11203 cp_error ("`%D' cannot be declared virtual, since it is always static",
11204 declarator);
11205 virtualp = 0;
11206 }
11207 }
11208 else if (staticp < 2)
11209 type = build_cplus_method_type (ctype, TREE_TYPE (type),
11210 TYPE_ARG_TYPES (type));
11211 }
11212
11213 /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node. */
11214 function_context = (ctype != NULL_TREE) ?
11215 decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
11216 publicp = (! friendp || ! staticp)
11217 && function_context == NULL_TREE;
11218 decl = grokfndecl (ctype, type,
11219 TREE_CODE (declarator) != TEMPLATE_ID_EXPR
11220 ? declarator : dname,
11221 declarator,
11222 virtualp, flags, quals, raises,
11223 friendp ? -1 : 0, friendp, publicp, inlinep,
11224 funcdef_flag, template_count, in_namespace);
11225 if (decl == NULL_TREE)
11226 return decl;
11227 #if 0
11228 /* This clobbers the attrs stored in `decl' from `attrlist'. */
11229 /* The decl and setting of decl_machine_attr is also turned off. */
11230 decl = build_decl_attribute_variant (decl, decl_machine_attr);
11231 #endif
11232
11233 /* [class.conv.ctor]
11234
11235 A constructor declared without the function-specifier
11236 explicit that can be called with a single parameter
11237 specifies a conversion from the type of its first
11238 parameter to the type of its class. Such a constructor
11239 is called a converting constructor. */
11240 if (explicitp == 2)
11241 DECL_NONCONVERTING_P (decl) = 1;
11242 else if (DECL_CONSTRUCTOR_P (decl))
11243 {
11244 /* The constructor can be called with exactly one
11245 parameter if there is at least one parameter, and
11246 any subsequent parameters have default arguments.
11247 We don't look at the first parameter, which is
11248 really just the `this' parameter for the new
11249 object. */
11250 tree arg_types =
11251 TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)));
11252
11253 /* Skip the `in_chrg' argument too, if present. */
11254 if (DECL_HAS_IN_CHARGE_PARM_P (decl))
11255 arg_types = TREE_CHAIN (arg_types);
11256
11257 if (arg_types == void_list_node
11258 || (arg_types
11259 && TREE_CHAIN (arg_types)
11260 && TREE_CHAIN (arg_types) != void_list_node
11261 && !TREE_PURPOSE (TREE_CHAIN (arg_types))))
11262 DECL_NONCONVERTING_P (decl) = 1;
11263 }
11264 }
11265 else if (TREE_CODE (type) == METHOD_TYPE)
11266 {
11267 /* We only get here for friend declarations of
11268 members of other classes. */
11269 /* All method decls are public, so tell grokfndecl to set
11270 TREE_PUBLIC, also. */
11271 decl = grokfndecl (ctype, type, declarator, declarator,
11272 virtualp, flags, quals, raises,
11273 friendp ? -1 : 0, friendp, 1, 0, funcdef_flag,
11274 template_count, in_namespace);
11275 if (decl == NULL_TREE)
11276 return NULL_TREE;
11277 }
11278 else if (!staticp && ! processing_template_decl
11279 && !COMPLETE_TYPE_P (complete_type (type))
11280 && (TREE_CODE (type) != ARRAY_TYPE || initialized == 0))
11281 {
11282 if (declarator)
11283 cp_error ("field `%D' has incomplete type", declarator);
11284 else
11285 cp_error ("name `%T' has incomplete type", type);
11286
11287 /* If we're instantiating a template, tell them which
11288 instantiation made the field's type be incomplete. */
11289 if (current_class_type
11290 && TYPE_NAME (current_class_type)
11291 && IDENTIFIER_TEMPLATE (TYPE_IDENTIFIER (current_class_type))
11292 && declspecs && TREE_VALUE (declspecs)
11293 && TREE_TYPE (TREE_VALUE (declspecs)) == type)
11294 cp_error (" in instantiation of template `%T'",
11295 current_class_type);
11296
11297 type = error_mark_node;
11298 decl = NULL_TREE;
11299 }
11300 else
11301 {
11302 if (friendp)
11303 {
11304 error ("`%s' is neither function nor member function; cannot be declared friend",
11305 IDENTIFIER_POINTER (declarator));
11306 friendp = 0;
11307 }
11308 decl = NULL_TREE;
11309 }
11310
11311 if (friendp)
11312 {
11313 /* Friends are treated specially. */
11314 if (ctype == current_class_type)
11315 warning ("member functions are implicitly friends of their class");
11316 else
11317 {
11318 tree t = NULL_TREE;
11319 if (decl && DECL_NAME (decl))
11320 {
11321 if (template_class_depth (current_class_type) == 0)
11322 {
11323 decl
11324 = check_explicit_specialization
11325 (declarator, decl,
11326 template_count, 2 * (funcdef_flag != 0) + 4);
11327 if (decl == error_mark_node)
11328 return error_mark_node;
11329 }
11330
11331 t = do_friend (ctype, declarator, decl,
11332 last_function_parms, attrlist, flags, quals,
11333 funcdef_flag);
11334 }
11335 if (t && funcdef_flag)
11336 return t;
11337
11338 return void_type_node;
11339 }
11340 }
11341
11342 /* Structure field. It may not be a function, except for C++ */
11343
11344 if (decl == NULL_TREE)
11345 {
11346 if (initialized)
11347 {
11348 if (!staticp)
11349 {
11350 /* An attempt is being made to initialize a non-static
11351 member. But, from [class.mem]:
11352
11353 4 A member-declarator can contain a
11354 constant-initializer only if it declares a static
11355 member (_class.static_) of integral or enumeration
11356 type, see _class.static.data_.
11357
11358 This used to be relatively common practice, but
11359 the rest of the compiler does not correctly
11360 handle the initialization unless the member is
11361 static so we make it static below. */
11362 cp_pedwarn ("ISO C++ forbids initialization of member `%D'",
11363 declarator);
11364 cp_pedwarn ("making `%D' static", declarator);
11365 staticp = 1;
11366 }
11367
11368 if (uses_template_parms (type))
11369 /* We'll check at instantiation time. */
11370 ;
11371 else if (check_static_variable_definition (declarator,
11372 type))
11373 /* If we just return the declaration, crashes
11374 will sometimes occur. We therefore return
11375 void_type_node, as if this was a friend
11376 declaration, to cause callers to completely
11377 ignore this declaration. */
11378 return void_type_node;
11379 }
11380
11381 /* 9.2p13 [class.mem] */
11382 if (declarator == constructor_name (current_class_type)
11383 /* Divergence from the standard: In extern "C", we
11384 allow non-static data members here, because C does
11385 and /usr/include/netinet/in.h uses that. */
11386 && (staticp || ! in_system_header))
11387 cp_pedwarn ("ISO C++ forbids data member `%D' with same name as enclosing class",
11388 declarator);
11389
11390 if (staticp)
11391 {
11392 /* C++ allows static class members. All other work
11393 for this is done by grokfield. */
11394 decl = build_lang_decl (VAR_DECL, declarator, type);
11395 TREE_STATIC (decl) = 1;
11396 /* In class context, 'static' means public access. */
11397 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl) = 1;
11398 }
11399 else
11400 {
11401 decl = build_lang_decl (FIELD_DECL, declarator, type);
11402 if (RIDBIT_SETP (RID_MUTABLE, specbits))
11403 {
11404 DECL_MUTABLE_P (decl) = 1;
11405 RIDBIT_RESET (RID_MUTABLE, specbits);
11406 }
11407 }
11408
11409 bad_specifiers (decl, "field", virtualp, quals != NULL_TREE,
11410 inlinep, friendp, raises != NULL_TREE);
11411 }
11412 }
11413 else if (TREE_CODE (type) == FUNCTION_TYPE || TREE_CODE (type) == METHOD_TYPE)
11414 {
11415 tree original_name;
11416 int publicp = 0;
11417
11418 if (! declarator)
11419 return NULL_TREE;
11420
11421 if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
11422 original_name = dname;
11423 else
11424 original_name = declarator;
11425
11426 if (RIDBIT_SETP (RID_AUTO, specbits))
11427 error ("storage class `auto' invalid for function `%s'", name);
11428 else if (RIDBIT_SETP (RID_REGISTER, specbits))
11429 error ("storage class `register' invalid for function `%s'", name);
11430
11431 /* Function declaration not at top level.
11432 Storage classes other than `extern' are not allowed
11433 and `extern' makes no difference. */
11434 if (! toplevel_bindings_p ()
11435 && (RIDBIT_SETP (RID_STATIC, specbits)
11436 || RIDBIT_SETP (RID_INLINE, specbits))
11437 && pedantic)
11438 {
11439 if (RIDBIT_SETP (RID_STATIC, specbits))
11440 pedwarn ("storage class `static' invalid for function `%s' declared out of global scope", name);
11441 else
11442 pedwarn ("storage class `inline' invalid for function `%s' declared out of global scope", name);
11443 }
11444
11445 if (ctype == NULL_TREE)
11446 {
11447 if (virtualp)
11448 {
11449 error ("virtual non-class function `%s'", name);
11450 virtualp = 0;
11451 }
11452 }
11453 else if (TREE_CODE (type) == FUNCTION_TYPE && staticp < 2)
11454 type = build_cplus_method_type (ctype, TREE_TYPE (type),
11455 TYPE_ARG_TYPES (type));
11456
11457 /* Record presence of `static'. */
11458 publicp = (ctype != NULL_TREE
11459 || RIDBIT_SETP (RID_EXTERN, specbits)
11460 || !RIDBIT_SETP (RID_STATIC, specbits));
11461
11462 decl = grokfndecl (ctype, type, original_name, declarator,
11463 virtualp, flags, quals, raises,
11464 1, friendp,
11465 publicp, inlinep, funcdef_flag,
11466 template_count, in_namespace);
11467 if (decl == NULL_TREE)
11468 return NULL_TREE;
11469
11470 if (staticp == 1)
11471 {
11472 int illegal_static = 0;
11473
11474 /* Don't allow a static member function in a class, and forbid
11475 declaring main to be static. */
11476 if (TREE_CODE (type) == METHOD_TYPE)
11477 {
11478 cp_pedwarn ("cannot declare member function `%D' to have static linkage", decl);
11479 illegal_static = 1;
11480 }
11481 else if (current_function_decl)
11482 {
11483 /* FIXME need arm citation */
11484 error ("cannot declare static function inside another function");
11485 illegal_static = 1;
11486 }
11487
11488 if (illegal_static)
11489 {
11490 staticp = 0;
11491 RIDBIT_RESET (RID_STATIC, specbits);
11492 }
11493 }
11494 }
11495 else
11496 {
11497 /* It's a variable. */
11498
11499 /* An uninitialized decl with `extern' is a reference. */
11500 decl = grokvardecl (type, declarator, &specbits,
11501 initialized,
11502 (type_quals & TYPE_QUAL_CONST) != 0,
11503 in_namespace);
11504 bad_specifiers (decl, "variable", virtualp, quals != NULL_TREE,
11505 inlinep, friendp, raises != NULL_TREE);
11506
11507 if (ctype)
11508 {
11509 DECL_CONTEXT (decl) = ctype;
11510 if (staticp == 1)
11511 {
11512 cp_pedwarn ("static member `%D' re-declared as static", decl);
11513 staticp = 0;
11514 RIDBIT_RESET (RID_STATIC, specbits);
11515 }
11516 if (RIDBIT_SETP (RID_REGISTER, specbits) && TREE_STATIC (decl))
11517 {
11518 cp_error ("static member `%D' declared `register'", decl);
11519 RIDBIT_RESET (RID_REGISTER, specbits);
11520 }
11521 if (RIDBIT_SETP (RID_EXTERN, specbits) && pedantic)
11522 {
11523 cp_pedwarn ("cannot explicitly declare member `%#D' to have extern linkage",
11524 decl);
11525 RIDBIT_RESET (RID_EXTERN, specbits);
11526 }
11527 }
11528 }
11529
11530 my_friendly_assert (!RIDBIT_SETP (RID_MUTABLE, specbits), 19990927);
11531
11532 /* Record `register' declaration for warnings on &
11533 and in case doing stupid register allocation. */
11534
11535 if (RIDBIT_SETP (RID_REGISTER, specbits))
11536 DECL_REGISTER (decl) = 1;
11537
11538 if (RIDBIT_SETP (RID_EXTERN, specbits))
11539 DECL_THIS_EXTERN (decl) = 1;
11540
11541 if (RIDBIT_SETP (RID_STATIC, specbits))
11542 DECL_THIS_STATIC (decl) = 1;
11543
11544 /* Record constancy and volatility. There's no need to do this
11545 when processing a template; we'll do this for the instantiated
11546 declaration based on the type of DECL. */
11547 if (!processing_template_decl)
11548 c_apply_type_quals_to_decl (type_quals, decl);
11549
11550 return decl;
11551 }
11552 }
11553 \f
11554 /* Tell if a parmlist/exprlist looks like an exprlist or a parmlist.
11555 An empty exprlist is a parmlist. An exprlist which
11556 contains only identifiers at the global level
11557 is a parmlist. Otherwise, it is an exprlist. */
11558
11559 int
11560 parmlist_is_exprlist (exprs)
11561 tree exprs;
11562 {
11563 if (exprs == NULL_TREE || TREE_PARMLIST (exprs))
11564 return 0;
11565
11566 if (toplevel_bindings_p ())
11567 {
11568 /* At the global level, if these are all identifiers,
11569 then it is a parmlist. */
11570 while (exprs)
11571 {
11572 if (TREE_CODE (TREE_VALUE (exprs)) != IDENTIFIER_NODE)
11573 return 1;
11574 exprs = TREE_CHAIN (exprs);
11575 }
11576 return 0;
11577 }
11578 return 1;
11579 }
11580
11581 /* Subroutine of start_function. Ensure that each of the parameter
11582 types (as listed in PARMS) is complete, as is required for a
11583 function definition. */
11584
11585 static void
11586 require_complete_types_for_parms (parms)
11587 tree parms;
11588 {
11589 for (; parms; parms = TREE_CHAIN (parms))
11590 {
11591 tree type = TREE_TYPE (parms);
11592
11593 /* Try to complete the TYPE. */
11594 type = complete_type (type);
11595
11596 if (type == error_mark_node)
11597 continue;
11598
11599 if (!COMPLETE_TYPE_P (type))
11600 {
11601 if (DECL_NAME (parms))
11602 error ("parameter `%s' has incomplete type",
11603 IDENTIFIER_POINTER (DECL_NAME (parms)));
11604 else
11605 error ("parameter has incomplete type");
11606 TREE_TYPE (parms) = error_mark_node;
11607 }
11608 else
11609 layout_decl (parms, 0);
11610 }
11611 }
11612
11613 /* Returns non-zero if T is a local variable. */
11614
11615 int
11616 local_variable_p (t)
11617 tree t;
11618 {
11619 if ((TREE_CODE (t) == VAR_DECL
11620 /* A VAR_DECL with a context that is a _TYPE is a static data
11621 member. */
11622 && !TYPE_P (CP_DECL_CONTEXT (t))
11623 /* Any other non-local variable must be at namespace scope. */
11624 && !DECL_NAMESPACE_SCOPE_P (t))
11625 || (TREE_CODE (t) == PARM_DECL))
11626 return 1;
11627
11628 return 0;
11629 }
11630
11631 /* Returns non-zero if T is an automatic local variable or a label.
11632 (These are the declarations that need to be remapped when the code
11633 containing them is duplicated.) */
11634
11635 int
11636 nonstatic_local_decl_p (t)
11637 tree t;
11638 {
11639 return ((local_variable_p (t) && !TREE_STATIC (t))
11640 || TREE_CODE (t) == LABEL_DECL
11641 || TREE_CODE (t) == RESULT_DECL);
11642 }
11643
11644 /* Like local_variable_p, but suitable for use as a tree-walking
11645 function. */
11646
11647 static tree
11648 local_variable_p_walkfn (tp, walk_subtrees, data)
11649 tree *tp;
11650 int *walk_subtrees ATTRIBUTE_UNUSED;
11651 void *data ATTRIBUTE_UNUSED;
11652 {
11653 return ((local_variable_p (*tp) && !DECL_ARTIFICIAL (*tp))
11654 ? *tp : NULL_TREE);
11655 }
11656
11657 /* Check that ARG, which is a default-argument expression for a
11658 parameter DECL, is legal. Returns ARG, or ERROR_MARK_NODE, if
11659 something goes wrong. DECL may also be a _TYPE node, rather than a
11660 DECL, if there is no DECL available. */
11661
11662 tree
11663 check_default_argument (decl, arg)
11664 tree decl;
11665 tree arg;
11666 {
11667 tree var;
11668 tree decl_type;
11669
11670 if (TREE_CODE (arg) == DEFAULT_ARG)
11671 /* We get a DEFAULT_ARG when looking at an in-class declaration
11672 with a default argument. Ignore the argument for now; we'll
11673 deal with it after the class is complete. */
11674 return arg;
11675
11676 if (processing_template_decl || uses_template_parms (arg))
11677 /* We don't do anything checking until instantiation-time. Note
11678 that there may be uninstantiated arguments even for an
11679 instantiated function, since default arguments are not
11680 instantiated until they are needed. */
11681 return arg;
11682
11683 if (TYPE_P (decl))
11684 {
11685 decl_type = decl;
11686 decl = NULL_TREE;
11687 }
11688 else
11689 decl_type = TREE_TYPE (decl);
11690
11691 if (arg == error_mark_node
11692 || decl == error_mark_node
11693 || TREE_TYPE (arg) == error_mark_node
11694 || decl_type == error_mark_node)
11695 /* Something already went wrong. There's no need to check
11696 further. */
11697 return error_mark_node;
11698
11699 /* [dcl.fct.default]
11700
11701 A default argument expression is implicitly converted to the
11702 parameter type. */
11703 if (!TREE_TYPE (arg)
11704 || !can_convert_arg (decl_type, TREE_TYPE (arg), arg))
11705 {
11706 if (decl)
11707 cp_error ("default argument for `%#D' has type `%T'",
11708 decl, TREE_TYPE (arg));
11709 else
11710 cp_error ("default argument for parameter of type `%T' has type `%T'",
11711 decl_type, TREE_TYPE (arg));
11712
11713 return error_mark_node;
11714 }
11715
11716 /* [dcl.fct.default]
11717
11718 Local variables shall not be used in default argument
11719 expressions.
11720
11721 The keyword `this' shall not be used in a default argument of a
11722 member function. */
11723 var = walk_tree (&arg, local_variable_p_walkfn, NULL);
11724 if (var)
11725 {
11726 cp_error ("default argument `%E' uses local variable `%D'",
11727 arg, var);
11728 return error_mark_node;
11729 }
11730
11731 /* All is well. */
11732 return arg;
11733 }
11734
11735 /* Decode the list of parameter types for a function type.
11736 Given the list of things declared inside the parens,
11737 return a list of types.
11738
11739 The list we receive can have three kinds of elements:
11740 an IDENTIFIER_NODE for names given without types,
11741 a TREE_LIST node for arguments given as typespecs or names with typespecs,
11742 or void_type_node, to mark the end of an argument list
11743 when additional arguments are not permitted (... was not used).
11744
11745 FUNCDEF_FLAG is nonzero for a function definition, 0 for
11746 a mere declaration. A nonempty identifier-list gets an error message
11747 when FUNCDEF_FLAG is zero.
11748 If FUNCDEF_FLAG is 1, then parameter types must be complete.
11749 If FUNCDEF_FLAG is -1, then parameter types may be incomplete.
11750
11751 If all elements of the input list contain types,
11752 we return a list of the types.
11753 If all elements contain no type (except perhaps a void_type_node
11754 at the end), we return a null list.
11755 If some have types and some do not, it is an error, and we
11756 return a null list.
11757
11758 Also set last_function_parms to either
11759 a list of names (IDENTIFIER_NODEs) or a chain of PARM_DECLs.
11760 A list of names is converted to a chain of PARM_DECLs
11761 by store_parm_decls so that ultimately it is always a chain of decls.
11762
11763 Note that in C++, parameters can take default values. These default
11764 values are in the TREE_PURPOSE field of the TREE_LIST. It is
11765 an error to specify default values which are followed by parameters
11766 that have no default values, or an ELLIPSES. For simplicities sake,
11767 only parameters which are specified with their types can take on
11768 default values. */
11769
11770 static tree
11771 grokparms (first_parm, funcdef_flag)
11772 tree first_parm;
11773 int funcdef_flag;
11774 {
11775 tree result = NULL_TREE;
11776 tree decls = NULL_TREE;
11777
11778 if (first_parm != NULL_TREE
11779 && TREE_CODE (TREE_VALUE (first_parm)) == IDENTIFIER_NODE)
11780 {
11781 if (! funcdef_flag)
11782 pedwarn ("parameter names (without types) in function declaration");
11783 last_function_parms = first_parm;
11784 return NULL_TREE;
11785 }
11786 else if (first_parm != NULL_TREE
11787 && TREE_CODE (TREE_VALUE (first_parm)) != TREE_LIST
11788 && TREE_CODE (TREE_VALUE (first_parm)) != VOID_TYPE)
11789 my_friendly_abort (145);
11790 else
11791 {
11792 /* Types were specified. This is a list of declarators
11793 each represented as a TREE_LIST node. */
11794 register tree parm, chain;
11795 int any_init = 0, any_error = 0;
11796
11797 if (first_parm != NULL_TREE)
11798 {
11799 tree last_result = NULL_TREE;
11800 tree last_decl = NULL_TREE;
11801
11802 for (parm = first_parm; parm != NULL_TREE; parm = chain)
11803 {
11804 tree type = NULL_TREE, list_node = parm;
11805 register tree decl = TREE_VALUE (parm);
11806 tree init = TREE_PURPOSE (parm);
11807
11808 chain = TREE_CHAIN (parm);
11809 /* @@ weak defense against parse errors. */
11810 if (TREE_CODE (decl) != VOID_TYPE
11811 && TREE_CODE (decl) != TREE_LIST)
11812 {
11813 /* Give various messages as the need arises. */
11814 if (TREE_CODE (decl) == STRING_CST)
11815 cp_error ("invalid string constant `%E'", decl);
11816 else if (TREE_CODE (decl) == INTEGER_CST)
11817 error ("invalid integer constant in parameter list, did you forget to give parameter name?");
11818 continue;
11819 }
11820
11821 if (TREE_CODE (decl) != VOID_TYPE)
11822 {
11823 decl = grokdeclarator (TREE_VALUE (decl),
11824 TREE_PURPOSE (decl),
11825 PARM, init != NULL_TREE,
11826 NULL_TREE);
11827 if (! decl || TREE_TYPE (decl) == error_mark_node)
11828 continue;
11829
11830 /* Top-level qualifiers on the parameters are
11831 ignored for function types. */
11832 type = TYPE_MAIN_VARIANT (TREE_TYPE (decl));
11833
11834 if (TREE_CODE (type) == VOID_TYPE)
11835 decl = void_type_node;
11836 else if (TREE_CODE (type) == METHOD_TYPE)
11837 {
11838 if (DECL_NAME (decl))
11839 /* Cannot use the decl here because
11840 we don't have DECL_CONTEXT set up yet. */
11841 cp_error ("parameter `%D' invalidly declared method type",
11842 DECL_NAME (decl));
11843 else
11844 error ("parameter invalidly declared method type");
11845 type = build_pointer_type (type);
11846 TREE_TYPE (decl) = type;
11847 }
11848 else if (TREE_CODE (type) == OFFSET_TYPE)
11849 {
11850 if (DECL_NAME (decl))
11851 cp_error ("parameter `%D' invalidly declared offset type",
11852 DECL_NAME (decl));
11853 else
11854 error ("parameter invalidly declared offset type");
11855 type = build_pointer_type (type);
11856 TREE_TYPE (decl) = type;
11857 }
11858 else if (abstract_virtuals_error (decl, type))
11859 any_error = 1; /* Seems like a good idea. */
11860 else if (POINTER_TYPE_P (type))
11861 {
11862 tree t = type;
11863 while (POINTER_TYPE_P (t)
11864 || (TREE_CODE (t) == ARRAY_TYPE
11865 && TYPE_DOMAIN (t) != NULL_TREE))
11866 t = TREE_TYPE (t);
11867 if (TREE_CODE (t) == ARRAY_TYPE)
11868 cp_error ("parameter type `%T' includes %s to array of unknown bound",
11869 type,
11870 TYPE_PTR_P (type) ? "pointer" : "reference");
11871 }
11872 }
11873
11874 if (TREE_CODE (decl) == VOID_TYPE)
11875 {
11876 if (result == NULL_TREE)
11877 {
11878 result = void_list_node;
11879 last_result = result;
11880 }
11881 else
11882 {
11883 TREE_CHAIN (last_result) = void_list_node;
11884 last_result = void_list_node;
11885 }
11886 if (chain
11887 && (chain != void_list_node || TREE_CHAIN (chain)))
11888 error ("`void' in parameter list must be entire list");
11889 break;
11890 }
11891
11892 /* Since there is a prototype, args are passed in their own types. */
11893 DECL_ARG_TYPE (decl) = TREE_TYPE (decl);
11894 if (PROMOTE_PROTOTYPES
11895 && (TREE_CODE (type) == INTEGER_TYPE
11896 || TREE_CODE (type) == ENUMERAL_TYPE)
11897 && TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node))
11898 DECL_ARG_TYPE (decl) = integer_type_node;
11899 if (!any_error && init)
11900 {
11901 any_init++;
11902 init = check_default_argument (decl, init);
11903 }
11904 else
11905 init = NULL_TREE;
11906
11907 if (decls == NULL_TREE)
11908 {
11909 decls = decl;
11910 last_decl = decls;
11911 }
11912 else
11913 {
11914 TREE_CHAIN (last_decl) = decl;
11915 last_decl = decl;
11916 }
11917 list_node = tree_cons (init, type, NULL_TREE);
11918 if (result == NULL_TREE)
11919 {
11920 result = list_node;
11921 last_result = result;
11922 }
11923 else
11924 {
11925 TREE_CHAIN (last_result) = list_node;
11926 last_result = list_node;
11927 }
11928 }
11929 if (last_result)
11930 TREE_CHAIN (last_result) = NULL_TREE;
11931 /* If there are no parameters, and the function does not end
11932 with `...', then last_decl will be NULL_TREE. */
11933 if (last_decl != NULL_TREE)
11934 TREE_CHAIN (last_decl) = NULL_TREE;
11935 }
11936 }
11937
11938 last_function_parms = decls;
11939
11940 return result;
11941 }
11942
11943 /* Called from the parser to update an element of TYPE_ARG_TYPES for some
11944 FUNCTION_TYPE with the newly parsed version of its default argument, which
11945 was previously digested as text. See snarf_defarg et al in lex.c. */
11946
11947 void
11948 replace_defarg (arg, init)
11949 tree arg, init;
11950 {
11951 if (! processing_template_decl
11952 && ! can_convert_arg (TREE_VALUE (arg), TREE_TYPE (init), init))
11953 cp_pedwarn ("invalid type `%T' for default argument to `%T'",
11954 TREE_TYPE (init), TREE_VALUE (arg));
11955 TREE_PURPOSE (arg) = init;
11956 }
11957 \f
11958 /* D is a constructor or overloaded `operator='. Returns non-zero if
11959 D's arguments allow it to be a copy constructor, or copy assignment
11960 operator. */
11961
11962 int
11963 copy_args_p (d)
11964 tree d;
11965 {
11966 tree t;
11967
11968 if (!DECL_FUNCTION_MEMBER_P (d))
11969 return 0;
11970
11971 t = FUNCTION_ARG_CHAIN (d);
11972 if (DECL_CONSTRUCTOR_P (d) && DECL_HAS_IN_CHARGE_PARM_P (d))
11973 t = TREE_CHAIN (t);
11974 if (t && TREE_CODE (TREE_VALUE (t)) == REFERENCE_TYPE
11975 && (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_VALUE (t)))
11976 == DECL_CONTEXT (d))
11977 && (TREE_CHAIN (t) == NULL_TREE
11978 || TREE_CHAIN (t) == void_list_node
11979 || TREE_PURPOSE (TREE_CHAIN (t))))
11980 return 1;
11981 return 0;
11982 }
11983
11984 /* These memoizing functions keep track of special properties which
11985 a class may have. `grok_ctor_properties' notices whether a class
11986 has a constructor of the form X(X&), and also complains
11987 if the class has a constructor of the form X(X).
11988 `grok_op_properties' takes notice of the various forms of
11989 operator= which are defined, as well as what sorts of type conversion
11990 may apply. Both functions take a FUNCTION_DECL as an argument. */
11991
11992 int
11993 grok_ctor_properties (ctype, decl)
11994 tree ctype, decl;
11995 {
11996 tree parmtypes = FUNCTION_ARG_CHAIN (decl);
11997 tree parmtype = parmtypes ? TREE_VALUE (parmtypes) : void_type_node;
11998
11999 /* When a type has virtual baseclasses, a magical first int argument is
12000 added to any ctor so we can tell if the class has been initialized
12001 yet. This could screw things up in this function, so we deliberately
12002 ignore the leading int if we're in that situation. */
12003 if (DECL_HAS_IN_CHARGE_PARM_P (decl))
12004 {
12005 my_friendly_assert (parmtypes
12006 && TREE_VALUE (parmtypes) == integer_type_node,
12007 980529);
12008 parmtypes = TREE_CHAIN (parmtypes);
12009 parmtype = TREE_VALUE (parmtypes);
12010 }
12011
12012 /* [class.copy]
12013
12014 A non-template constructor for class X is a copy constructor if
12015 its first parameter is of type X&, const X&, volatile X& or const
12016 volatile X&, and either there are no other parameters or else all
12017 other parameters have default arguments. */
12018 if (TREE_CODE (parmtype) == REFERENCE_TYPE
12019 && TYPE_MAIN_VARIANT (TREE_TYPE (parmtype)) == ctype
12020 && (TREE_CHAIN (parmtypes) == NULL_TREE
12021 || TREE_CHAIN (parmtypes) == void_list_node
12022 || TREE_PURPOSE (TREE_CHAIN (parmtypes)))
12023 && !(DECL_TEMPLATE_INSTANTIATION (decl)
12024 && is_member_template (DECL_TI_TEMPLATE (decl))))
12025 {
12026 TYPE_HAS_INIT_REF (ctype) = 1;
12027 if (CP_TYPE_CONST_P (TREE_TYPE (parmtype)))
12028 TYPE_HAS_CONST_INIT_REF (ctype) = 1;
12029 }
12030 /* [class.copy]
12031
12032 A declaration of a constructor for a class X is ill-formed if its
12033 first parameter is of type (optionally cv-qualified) X and either
12034 there are no other parameters or else all other parameters have
12035 default arguments.
12036
12037 We *don't* complain about member template instantiations that
12038 have this form, though; they can occur as we try to decide what
12039 constructor to use during overload resolution. Since overload
12040 resolution will never prefer such a constructor to the
12041 non-template copy constructor (which is either explicitly or
12042 implicitly defined), there's no need to worry about their
12043 existence. Theoretically, they should never even be
12044 instantiated, but that's hard to forestall. */
12045 else if (TYPE_MAIN_VARIANT (parmtype) == ctype
12046 && (TREE_CHAIN (parmtypes) == NULL_TREE
12047 || TREE_CHAIN (parmtypes) == void_list_node
12048 || TREE_PURPOSE (TREE_CHAIN (parmtypes)))
12049 && !(DECL_TEMPLATE_INSTANTIATION (decl)
12050 && is_member_template (DECL_TI_TEMPLATE (decl))))
12051 {
12052 cp_error ("invalid constructor; you probably meant `%T (const %T&)'",
12053 ctype, ctype);
12054 SET_IDENTIFIER_ERROR_LOCUS (DECL_NAME (decl), ctype);
12055 return 0;
12056 }
12057 else if (TREE_CODE (parmtype) == VOID_TYPE
12058 || TREE_PURPOSE (parmtypes) != NULL_TREE)
12059 TYPE_HAS_DEFAULT_CONSTRUCTOR (ctype) = 1;
12060
12061 return 1;
12062 }
12063
12064 /* An operator with this name can be either unary or binary. */
12065
12066 static int
12067 ambi_op_p (name)
12068 tree name;
12069 {
12070 return (name == ansi_opname [(int) INDIRECT_REF]
12071 || name == ansi_opname [(int) ADDR_EXPR]
12072 || name == ansi_opname [(int) NEGATE_EXPR]
12073 || name == ansi_opname[(int) POSTINCREMENT_EXPR]
12074 || name == ansi_opname[(int) POSTDECREMENT_EXPR]
12075 || name == ansi_opname [(int) CONVERT_EXPR]);
12076 }
12077
12078 /* An operator with this name can only be unary. */
12079
12080 static int
12081 unary_op_p (name)
12082 tree name;
12083 {
12084 return (name == ansi_opname [(int) TRUTH_NOT_EXPR]
12085 || name == ansi_opname [(int) BIT_NOT_EXPR]
12086 || name == ansi_opname [(int) COMPONENT_REF]
12087 || IDENTIFIER_TYPENAME_P (name));
12088 }
12089
12090 /* Do a little sanity-checking on how they declared their operator. */
12091
12092 void
12093 grok_op_properties (decl, virtualp, friendp)
12094 tree decl;
12095 int virtualp, friendp;
12096 {
12097 tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
12098 int methodp = (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE);
12099 tree name = DECL_NAME (decl);
12100
12101 if (current_class_type == NULL_TREE)
12102 friendp = 1;
12103
12104 if (! friendp)
12105 {
12106 /* [class.copy]
12107
12108 A user-declared copy assignment operator X::operator= is a
12109 non-static non-template member function of class X with
12110 exactly one parameter of type X, X&, const X&, volatile X& or
12111 const volatile X&. */
12112 if (name == ansi_opname[(int) MODIFY_EXPR]
12113 && !(DECL_TEMPLATE_INSTANTIATION (decl)
12114 && is_member_template (DECL_TI_TEMPLATE (decl))))
12115 ;
12116 else if (name == ansi_opname[(int) CALL_EXPR])
12117 TYPE_OVERLOADS_CALL_EXPR (current_class_type) = 1;
12118 else if (name == ansi_opname[(int) ARRAY_REF])
12119 TYPE_OVERLOADS_ARRAY_REF (current_class_type) = 1;
12120 else if (name == ansi_opname[(int) COMPONENT_REF]
12121 || name == ansi_opname[(int) MEMBER_REF])
12122 TYPE_OVERLOADS_ARROW (current_class_type) = 1;
12123 else if (name == ansi_opname[(int) NEW_EXPR])
12124 TYPE_HAS_NEW_OPERATOR (current_class_type) = 1;
12125 else if (name == ansi_opname[(int) DELETE_EXPR])
12126 TYPE_GETS_DELETE (current_class_type) |= 1;
12127 else if (name == ansi_opname[(int) VEC_NEW_EXPR])
12128 TYPE_HAS_ARRAY_NEW_OPERATOR (current_class_type) = 1;
12129 else if (name == ansi_opname[(int) VEC_DELETE_EXPR])
12130 TYPE_GETS_DELETE (current_class_type) |= 2;
12131 }
12132
12133 if (name == ansi_opname[(int) NEW_EXPR]
12134 || name == ansi_opname[(int) VEC_NEW_EXPR])
12135 {
12136 /* When the compiler encounters the definition of A::operator new, it
12137 doesn't look at the class declaration to find out if it's static. */
12138 if (methodp)
12139 revert_static_member_fn (decl);
12140
12141 /* Take care of function decl if we had syntax errors. */
12142 if (argtypes == NULL_TREE)
12143 TREE_TYPE (decl)
12144 = build_function_type (ptr_type_node,
12145 hash_tree_chain (integer_type_node,
12146 void_list_node));
12147 else
12148 TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
12149 }
12150 else if (name == ansi_opname[(int) DELETE_EXPR]
12151 || name == ansi_opname[(int) VEC_DELETE_EXPR])
12152 {
12153 if (methodp)
12154 revert_static_member_fn (decl);
12155
12156 if (argtypes == NULL_TREE)
12157 TREE_TYPE (decl)
12158 = build_function_type (void_type_node,
12159 hash_tree_chain (ptr_type_node,
12160 void_list_node));
12161 else
12162 TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
12163 }
12164 else
12165 {
12166 /* An operator function must either be a non-static member function
12167 or have at least one parameter of a class, a reference to a class,
12168 an enumeration, or a reference to an enumeration. 13.4.0.6 */
12169 if (! methodp || DECL_STATIC_FUNCTION_P (decl))
12170 {
12171 if (IDENTIFIER_TYPENAME_P (name)
12172 || name == ansi_opname[(int) CALL_EXPR]
12173 || name == ansi_opname[(int) MODIFY_EXPR]
12174 || name == ansi_opname[(int) COMPONENT_REF]
12175 || name == ansi_opname[(int) ARRAY_REF])
12176 cp_error ("`%D' must be a nonstatic member function", decl);
12177 else
12178 {
12179 tree p = argtypes;
12180
12181 if (DECL_STATIC_FUNCTION_P (decl))
12182 cp_error ("`%D' must be either a non-static member function or a non-member function", decl);
12183
12184 if (p)
12185 for (; TREE_CODE (TREE_VALUE (p)) != VOID_TYPE ; p = TREE_CHAIN (p))
12186 {
12187 tree arg = TREE_VALUE (p);
12188 if (TREE_CODE (arg) == REFERENCE_TYPE)
12189 arg = TREE_TYPE (arg);
12190
12191 /* This lets bad template code slip through. */
12192 if (IS_AGGR_TYPE (arg)
12193 || TREE_CODE (arg) == ENUMERAL_TYPE
12194 || TREE_CODE (arg) == TEMPLATE_TYPE_PARM
12195 || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
12196 goto foundaggr;
12197 }
12198 cp_error
12199 ("`%D' must have an argument of class or enumerated type",
12200 decl);
12201 foundaggr:
12202 ;
12203 }
12204 }
12205
12206 if (name == ansi_opname[(int) CALL_EXPR])
12207 return; /* No restrictions on args. */
12208
12209 if (IDENTIFIER_TYPENAME_P (name) && ! DECL_TEMPLATE_INFO (decl))
12210 {
12211 tree t = TREE_TYPE (name);
12212 if (! friendp)
12213 {
12214 int ref = (TREE_CODE (t) == REFERENCE_TYPE);
12215 const char *what = 0;
12216
12217 if (ref)
12218 t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
12219
12220 if (TREE_CODE (t) == VOID_TYPE)
12221 what = "void";
12222 else if (t == current_class_type)
12223 what = "the same type";
12224 /* Don't force t to be complete here. */
12225 else if (IS_AGGR_TYPE (t)
12226 && COMPLETE_TYPE_P (t)
12227 && DERIVED_FROM_P (t, current_class_type))
12228 what = "a base class";
12229
12230 if (what)
12231 warning ("conversion to %s%s will never use a type conversion operator",
12232 ref ? "a reference to " : "", what);
12233 }
12234 }
12235
12236 if (name == ansi_opname[(int) MODIFY_EXPR])
12237 {
12238 tree parmtype;
12239
12240 if (list_length (argtypes) != 3 && methodp)
12241 {
12242 cp_error ("`%D' must take exactly one argument", decl);
12243 return;
12244 }
12245 parmtype = TREE_VALUE (TREE_CHAIN (argtypes));
12246
12247 if (copy_assignment_arg_p (parmtype, virtualp)
12248 && ! friendp)
12249 {
12250 TYPE_HAS_ASSIGN_REF (current_class_type) = 1;
12251 if (TREE_CODE (parmtype) != REFERENCE_TYPE
12252 || CP_TYPE_CONST_P (TREE_TYPE (parmtype)))
12253 TYPE_HAS_CONST_ASSIGN_REF (current_class_type) = 1;
12254 }
12255 }
12256 else if (name == ansi_opname[(int) COND_EXPR])
12257 {
12258 /* 13.4.0.3 */
12259 cp_error ("ISO C++ prohibits overloading operator ?:");
12260 }
12261 else if (ambi_op_p (name))
12262 {
12263 if (list_length (argtypes) == 2)
12264 /* prefix */;
12265 else if (list_length (argtypes) == 3)
12266 {
12267 if ((name == ansi_opname[(int) POSTINCREMENT_EXPR]
12268 || name == ansi_opname[(int) POSTDECREMENT_EXPR])
12269 && ! processing_template_decl
12270 && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)), integer_type_node))
12271 {
12272 if (methodp)
12273 cp_error ("postfix `%D' must take `int' as its argument",
12274 decl);
12275 else
12276 cp_error
12277 ("postfix `%D' must take `int' as its second argument",
12278 decl);
12279 }
12280 }
12281 else
12282 {
12283 if (methodp)
12284 cp_error ("`%D' must take either zero or one argument", decl);
12285 else
12286 cp_error ("`%D' must take either one or two arguments", decl);
12287 }
12288
12289 /* More Effective C++ rule 6. */
12290 if (warn_ecpp
12291 && (name == ansi_opname[(int) POSTINCREMENT_EXPR]
12292 || name == ansi_opname[(int) POSTDECREMENT_EXPR]))
12293 {
12294 tree arg = TREE_VALUE (argtypes);
12295 tree ret = TREE_TYPE (TREE_TYPE (decl));
12296 if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
12297 arg = TREE_TYPE (arg);
12298 arg = TYPE_MAIN_VARIANT (arg);
12299 if (list_length (argtypes) == 2)
12300 {
12301 if (TREE_CODE (ret) != REFERENCE_TYPE
12302 || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)),
12303 arg))
12304 cp_warning ("prefix `%D' should return `%T'", decl,
12305 build_reference_type (arg));
12306 }
12307 else
12308 {
12309 if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
12310 cp_warning ("postfix `%D' should return `%T'", decl, arg);
12311 }
12312 }
12313 }
12314 else if (unary_op_p (name))
12315 {
12316 if (list_length (argtypes) != 2)
12317 {
12318 if (methodp)
12319 cp_error ("`%D' must take `void'", decl);
12320 else
12321 cp_error ("`%D' must take exactly one argument", decl);
12322 }
12323 }
12324 else /* if (binary_op_p (name)) */
12325 {
12326 if (list_length (argtypes) != 3)
12327 {
12328 if (methodp)
12329 cp_error ("`%D' must take exactly one argument", decl);
12330 else
12331 cp_error ("`%D' must take exactly two arguments", decl);
12332 }
12333
12334 /* More Effective C++ rule 7. */
12335 if (warn_ecpp
12336 && (name == ansi_opname [TRUTH_ANDIF_EXPR]
12337 || name == ansi_opname [TRUTH_ORIF_EXPR]
12338 || name == ansi_opname [COMPOUND_EXPR]))
12339 cp_warning ("user-defined `%D' always evaluates both arguments",
12340 decl);
12341 }
12342
12343 /* Effective C++ rule 23. */
12344 if (warn_ecpp
12345 && list_length (argtypes) == 3
12346 && (name == ansi_opname [PLUS_EXPR]
12347 || name == ansi_opname [MINUS_EXPR]
12348 || name == ansi_opname [TRUNC_DIV_EXPR]
12349 || name == ansi_opname [MULT_EXPR])
12350 && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
12351 cp_warning ("`%D' should return by value", decl);
12352
12353 /* 13.4.0.8 */
12354 if (argtypes)
12355 for (; argtypes != void_list_node ; argtypes = TREE_CHAIN (argtypes))
12356 if (TREE_PURPOSE (argtypes))
12357 {
12358 TREE_PURPOSE (argtypes) = NULL_TREE;
12359 if (name == ansi_opname[(int) POSTINCREMENT_EXPR]
12360 || name == ansi_opname[(int) POSTDECREMENT_EXPR])
12361 {
12362 if (pedantic)
12363 cp_pedwarn ("`%D' cannot have default arguments", decl);
12364 }
12365 else
12366 cp_error ("`%D' cannot have default arguments", decl);
12367 }
12368 }
12369 }
12370 \f
12371 static const char *
12372 tag_name (code)
12373 enum tag_types code;
12374 {
12375 switch (code)
12376 {
12377 case record_type:
12378 return "struct";
12379 case class_type:
12380 return "class";
12381 case union_type:
12382 return "union ";
12383 case enum_type:
12384 return "enum";
12385 default:
12386 my_friendly_abort (981122);
12387 }
12388 }
12389
12390 /* Get the struct, enum or union (CODE says which) with tag NAME.
12391 Define the tag as a forward-reference if it is not defined.
12392
12393 C++: If a class derivation is given, process it here, and report
12394 an error if multiple derivation declarations are not identical.
12395
12396 If this is a definition, come in through xref_tag and only look in
12397 the current frame for the name (since C++ allows new names in any
12398 scope.) */
12399
12400 tree
12401 xref_tag (code_type_node, name, globalize)
12402 tree code_type_node;
12403 tree name;
12404 int globalize;
12405 {
12406 enum tag_types tag_code;
12407 enum tree_code code;
12408 register tree ref, t;
12409 struct binding_level *b = current_binding_level;
12410 int got_type = 0;
12411 tree attributes = NULL_TREE;
12412 tree context = NULL_TREE;
12413
12414 /* If we are called from the parser, code_type_node will sometimes be a
12415 TREE_LIST. This indicates that the user wrote
12416 "class __attribute__ ((foo)) bar". Extract the attributes so we can
12417 use them later. */
12418 if (TREE_CODE (code_type_node) == TREE_LIST)
12419 {
12420 attributes = TREE_PURPOSE (code_type_node);
12421 code_type_node = TREE_VALUE (code_type_node);
12422 }
12423
12424 tag_code = (enum tag_types) tree_low_cst (code_type_node, 1);
12425 switch (tag_code)
12426 {
12427 case record_type:
12428 case class_type:
12429 code = RECORD_TYPE;
12430 break;
12431 case union_type:
12432 code = UNION_TYPE;
12433 break;
12434 case enum_type:
12435 code = ENUMERAL_TYPE;
12436 break;
12437 default:
12438 my_friendly_abort (18);
12439 }
12440
12441 /* If a cross reference is requested, look up the type
12442 already defined for this tag and return it. */
12443 if (TYPE_P (name))
12444 {
12445 t = name;
12446 name = TYPE_IDENTIFIER (t);
12447 got_type = 1;
12448 }
12449 else
12450 t = IDENTIFIER_TYPE_VALUE (name);
12451
12452 if (t && TREE_CODE (t) != code && TREE_CODE (t) != TEMPLATE_TYPE_PARM
12453 && TREE_CODE (t) != TEMPLATE_TEMPLATE_PARM)
12454 t = NULL_TREE;
12455
12456 if (! globalize)
12457 {
12458 /* If we know we are defining this tag, only look it up in
12459 this scope and don't try to find it as a type. */
12460 ref = lookup_tag (code, name, b, 1);
12461 }
12462 else
12463 {
12464 if (t)
12465 {
12466 /* [dcl.type.elab] If the identifier resolves to a
12467 typedef-name or a template type-parameter, the
12468 elaborated-type-specifier is ill-formed. */
12469 if (t != TYPE_MAIN_VARIANT (t)
12470 || (CLASS_TYPE_P (t) && TYPE_WAS_ANONYMOUS (t)))
12471 cp_pedwarn ("using typedef-name `%D' after `%s'",
12472 TYPE_NAME (t), tag_name (tag_code));
12473 else if (TREE_CODE (t) == TEMPLATE_TYPE_PARM)
12474 cp_error ("using template type parameter `%T' after `%s'",
12475 t, tag_name (tag_code));
12476
12477 ref = t;
12478 }
12479 else
12480 ref = lookup_tag (code, name, b, 0);
12481
12482 if (! ref)
12483 {
12484 /* Try finding it as a type declaration. If that wins,
12485 use it. */
12486 ref = lookup_name (name, 1);
12487
12488 if (ref != NULL_TREE
12489 && processing_template_decl
12490 && DECL_CLASS_TEMPLATE_P (ref)
12491 && template_class_depth (current_class_type) == 0)
12492 /* Since GLOBALIZE is true, we're declaring a global
12493 template, so we want this type. */
12494 ref = DECL_TEMPLATE_RESULT (ref);
12495
12496 if (ref && TREE_CODE (ref) == TYPE_DECL
12497 && TREE_CODE (TREE_TYPE (ref)) == code)
12498 ref = TREE_TYPE (ref);
12499 else
12500 ref = NULL_TREE;
12501 }
12502
12503 if (ref && current_class_type
12504 && template_class_depth (current_class_type)
12505 && PROCESSING_REAL_TEMPLATE_DECL_P ())
12506 {
12507 /* Since GLOBALIZE is non-zero, we are not looking at a
12508 definition of this tag. Since, in addition, we are currently
12509 processing a (member) template declaration of a template
12510 class, we must be very careful; consider:
12511
12512 template <class X>
12513 struct S1
12514
12515 template <class U>
12516 struct S2
12517 { template <class V>
12518 friend struct S1; };
12519
12520 Here, the S2::S1 declaration should not be confused with the
12521 outer declaration. In particular, the inner version should
12522 have a template parameter of level 2, not level 1. This
12523 would be particularly important if the member declaration
12524 were instead:
12525
12526 template <class V = U> friend struct S1;
12527
12528 say, when we should tsubst into `U' when instantiating
12529 S2. On the other hand, when presented with:
12530
12531 template <class T>
12532 struct S1 {
12533 template <class U>
12534 struct S2 {};
12535 template <class U>
12536 friend struct S2;
12537 };
12538
12539 we must find the inner binding eventually. We
12540 accomplish this by making sure that the new type we
12541 create to represent this declaration has the right
12542 TYPE_CONTEXT. */
12543 context = TYPE_CONTEXT (ref);
12544 ref = NULL_TREE;
12545 }
12546 }
12547
12548 if (! ref)
12549 {
12550 /* If no such tag is yet defined, create a forward-reference node
12551 and record it as the "definition".
12552 When a real declaration of this type is found,
12553 the forward-reference will be altered into a real type. */
12554 if (code == ENUMERAL_TYPE)
12555 {
12556 cp_error ("use of enum `%#D' without previous declaration", name);
12557
12558 ref = make_node (ENUMERAL_TYPE);
12559
12560 /* Give the type a default layout like unsigned int
12561 to avoid crashing if it does not get defined. */
12562 TYPE_MODE (ref) = TYPE_MODE (unsigned_type_node);
12563 TYPE_ALIGN (ref) = TYPE_ALIGN (unsigned_type_node);
12564 TREE_UNSIGNED (ref) = 1;
12565 TYPE_PRECISION (ref) = TYPE_PRECISION (unsigned_type_node);
12566 TYPE_MIN_VALUE (ref) = TYPE_MIN_VALUE (unsigned_type_node);
12567 TYPE_MAX_VALUE (ref) = TYPE_MAX_VALUE (unsigned_type_node);
12568
12569 /* Enable us to recognize when a type is created in class context.
12570 To do nested classes correctly, this should probably be cleared
12571 out when we leave this classes scope. Currently this in only
12572 done in `start_enum'. */
12573
12574 pushtag (name, ref, globalize);
12575 }
12576 else
12577 {
12578 struct binding_level *old_b = class_binding_level;
12579
12580 ref = make_aggr_type (code);
12581 TYPE_CONTEXT (ref) = context;
12582
12583 #ifdef NONNESTED_CLASSES
12584 /* Class types don't nest the way enums do. */
12585 class_binding_level = (struct binding_level *)0;
12586 #endif
12587 pushtag (name, ref, globalize);
12588 class_binding_level = old_b;
12589 }
12590 }
12591 else
12592 {
12593 if (!globalize && processing_template_decl && IS_AGGR_TYPE (ref))
12594 redeclare_class_template (ref, current_template_parms);
12595 }
12596
12597 /* Until the type is defined, tentatively accept whatever
12598 structure tag the user hands us. */
12599 if (!COMPLETE_TYPE_P (ref)
12600 && ref != current_class_type
12601 /* Have to check this, in case we have contradictory tag info. */
12602 && IS_AGGR_TYPE_CODE (TREE_CODE (ref)))
12603 {
12604 if (tag_code == class_type)
12605 CLASSTYPE_DECLARED_CLASS (ref) = 1;
12606 else if (tag_code == record_type)
12607 CLASSTYPE_DECLARED_CLASS (ref) = 0;
12608 }
12609
12610 TREE_TYPE (ref) = attributes;
12611
12612 return ref;
12613 }
12614
12615 tree
12616 xref_tag_from_type (old, id, globalize)
12617 tree old, id;
12618 int globalize;
12619 {
12620 tree code_type_node;
12621
12622 if (TREE_CODE (old) == RECORD_TYPE)
12623 code_type_node = (CLASSTYPE_DECLARED_CLASS (old)
12624 ? class_type_node : record_type_node);
12625 else
12626 code_type_node = union_type_node;
12627
12628 if (id == NULL_TREE)
12629 id = TYPE_IDENTIFIER (old);
12630
12631 return xref_tag (code_type_node, id, globalize);
12632 }
12633
12634 /* REF is a type (named NAME), for which we have just seen some
12635 baseclasses. BINFO is a list of those baseclasses; the
12636 TREE_PURPOSE is an access_* node, and the TREE_VALUE is the type of
12637 the base-class. CODE_TYPE_NODE indicates whether REF is a class,
12638 struct, or union. */
12639
12640 void
12641 xref_basetypes (code_type_node, name, ref, binfo)
12642 tree code_type_node;
12643 tree name, ref;
12644 tree binfo;
12645 {
12646 /* In the declaration `A : X, Y, ... Z' we mark all the types
12647 (A, X, Y, ..., Z) so we can check for duplicates. */
12648 tree binfos;
12649 tree base;
12650
12651 int i, len;
12652 enum tag_types tag_code = (enum tag_types) tree_low_cst (code_type_node, 1);
12653
12654 if (tag_code == union_type)
12655 {
12656 cp_error ("derived union `%T' invalid", ref);
12657 return;
12658 }
12659
12660 len = list_length (binfo);
12661
12662 /* First, make sure that any templates in base-classes are
12663 instantiated. This ensures that if we call ourselves recursively
12664 we do not get confused about which classes are marked and which
12665 are not. */
12666 for (base = binfo; base; base = TREE_CHAIN (base))
12667 complete_type (TREE_VALUE (base));
12668
12669 SET_CLASSTYPE_MARKED (ref);
12670 BINFO_BASETYPES (TYPE_BINFO (ref)) = binfos = make_tree_vec (len);
12671
12672 for (i = 0; binfo; binfo = TREE_CHAIN (binfo))
12673 {
12674 /* The base of a derived struct is public by default. */
12675 int via_public
12676 = (TREE_PURPOSE (binfo) == access_public_node
12677 || TREE_PURPOSE (binfo) == access_public_virtual_node
12678 || (tag_code != class_type
12679 && (TREE_PURPOSE (binfo) == access_default_node
12680 || TREE_PURPOSE (binfo) == access_default_virtual_node)));
12681 int via_protected
12682 = (TREE_PURPOSE (binfo) == access_protected_node
12683 || TREE_PURPOSE (binfo) == access_protected_virtual_node);
12684 int via_virtual
12685 = (TREE_PURPOSE (binfo) == access_private_virtual_node
12686 || TREE_PURPOSE (binfo) == access_protected_virtual_node
12687 || TREE_PURPOSE (binfo) == access_public_virtual_node
12688 || TREE_PURPOSE (binfo) == access_default_virtual_node);
12689 tree basetype = TREE_VALUE (binfo);
12690 tree base_binfo;
12691
12692 if (basetype && TREE_CODE (basetype) == TYPE_DECL)
12693 basetype = TREE_TYPE (basetype);
12694 if (!basetype
12695 || (TREE_CODE (basetype) != RECORD_TYPE
12696 && TREE_CODE (basetype) != TYPENAME_TYPE
12697 && TREE_CODE (basetype) != TEMPLATE_TYPE_PARM
12698 && TREE_CODE (basetype) != TEMPLATE_TEMPLATE_PARM))
12699 {
12700 cp_error ("base type `%T' fails to be a struct or class type",
12701 TREE_VALUE (binfo));
12702 continue;
12703 }
12704
12705 GNU_xref_hier (name, basetype, via_public, via_virtual, 0);
12706
12707 /* This code replaces similar code in layout_basetypes.
12708 We put the complete_type first for implicit `typename'. */
12709 if (!COMPLETE_TYPE_P (basetype)
12710 && ! (current_template_parms && uses_template_parms (basetype)))
12711 {
12712 cp_error ("base class `%T' has incomplete type", basetype);
12713 continue;
12714 }
12715 else
12716 {
12717 if (CLASSTYPE_MARKED (basetype))
12718 {
12719 if (basetype == ref)
12720 cp_error ("recursive type `%T' undefined", basetype);
12721 else
12722 cp_error ("duplicate base type `%T' invalid", basetype);
12723 continue;
12724 }
12725
12726 if (TYPE_FOR_JAVA (basetype)
12727 && (current_lang_stack
12728 == &VARRAY_TREE (current_lang_base, 0)))
12729 TYPE_FOR_JAVA (ref) = 1;
12730
12731 /* Note that the BINFO records which describe individual
12732 inheritances are *not* shared in the lattice! They
12733 cannot be shared because a given baseclass may be
12734 inherited with different `accessibility' by different
12735 derived classes. (Each BINFO record describing an
12736 individual inheritance contains flags which say what
12737 the `accessibility' of that particular inheritance is.) */
12738
12739 base_binfo
12740 = make_binfo (size_zero_node, basetype,
12741 CLASS_TYPE_P (basetype)
12742 ? TYPE_BINFO_VTABLE (basetype) : NULL_TREE,
12743 CLASS_TYPE_P (basetype)
12744 ? TYPE_BINFO_VIRTUALS (basetype) : NULL_TREE);
12745
12746 TREE_VEC_ELT (binfos, i) = base_binfo;
12747 TREE_VIA_PUBLIC (base_binfo) = via_public;
12748 TREE_VIA_PROTECTED (base_binfo) = via_protected;
12749 TREE_VIA_VIRTUAL (base_binfo) = via_virtual;
12750 BINFO_INHERITANCE_CHAIN (base_binfo) = TYPE_BINFO (ref);
12751
12752 /* We need to unshare the binfos now so that lookups during class
12753 definition work. */
12754 unshare_base_binfos (base_binfo);
12755
12756 SET_CLASSTYPE_MARKED (basetype);
12757
12758 /* We are free to modify these bits because they are meaningless
12759 at top level, and BASETYPE is a top-level type. */
12760 if (via_virtual || TYPE_USES_VIRTUAL_BASECLASSES (basetype))
12761 {
12762 TYPE_USES_VIRTUAL_BASECLASSES (ref) = 1;
12763 /* Converting to a virtual base class requires looking
12764 up the offset of the virtual base. */
12765 TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (ref) = 1;
12766 }
12767
12768 if (CLASS_TYPE_P (basetype))
12769 {
12770 TYPE_HAS_NEW_OPERATOR (ref)
12771 |= TYPE_HAS_NEW_OPERATOR (basetype);
12772 TYPE_HAS_ARRAY_NEW_OPERATOR (ref)
12773 |= TYPE_HAS_ARRAY_NEW_OPERATOR (basetype);
12774 TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
12775 /* If the base-class uses multiple inheritance, so do we. */
12776 TYPE_USES_MULTIPLE_INHERITANCE (ref)
12777 |= TYPE_USES_MULTIPLE_INHERITANCE (basetype);
12778 /* Likewise, if converting to a base of the base may require
12779 code, then we may need to generate code to convert to a
12780 base as well. */
12781 TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (ref)
12782 |= TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (basetype);
12783 }
12784
12785 i += 1;
12786 }
12787 }
12788 if (i)
12789 TREE_VEC_LENGTH (binfos) = i;
12790 else
12791 BINFO_BASETYPES (TYPE_BINFO (ref)) = NULL_TREE;
12792
12793 if (i > 1)
12794 {
12795 TYPE_USES_MULTIPLE_INHERITANCE (ref) = 1;
12796 /* If there is more than one non-empty they cannot be at the same
12797 address. */
12798 TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (ref) = 1;
12799 }
12800
12801 /* Unmark all the types. */
12802 while (--i >= 0)
12803 CLEAR_CLASSTYPE_MARKED (BINFO_TYPE (TREE_VEC_ELT (binfos, i)));
12804 CLEAR_CLASSTYPE_MARKED (ref);
12805
12806 /* Now that we know all the base-classes, set up the list of virtual
12807 bases. */
12808 get_vbase_types (ref);
12809 }
12810
12811 \f
12812 /* Begin compiling the definition of an enumeration type.
12813 NAME is its name (or null if anonymous).
12814 Returns the type object, as yet incomplete.
12815 Also records info about it so that build_enumerator
12816 may be used to declare the individual values as they are read. */
12817
12818 tree
12819 start_enum (name)
12820 tree name;
12821 {
12822 register tree enumtype = NULL_TREE;
12823 struct binding_level *b = current_binding_level;
12824
12825 /* If this is the real definition for a previous forward reference,
12826 fill in the contents in the same object that used to be the
12827 forward reference. */
12828
12829 if (name != NULL_TREE)
12830 enumtype = lookup_tag (ENUMERAL_TYPE, name, b, 1);
12831
12832 if (enumtype != NULL_TREE && TREE_CODE (enumtype) == ENUMERAL_TYPE)
12833 {
12834 cp_error ("multiple definition of `%#T'", enumtype);
12835 cp_error_at ("previous definition here", enumtype);
12836 /* Clear out TYPE_VALUES, and start again. */
12837 TYPE_VALUES (enumtype) = NULL_TREE;
12838 }
12839 else
12840 {
12841 enumtype = make_node (ENUMERAL_TYPE);
12842 pushtag (name, enumtype, 0);
12843 }
12844
12845 if (current_class_type)
12846 TREE_ADDRESSABLE (b->tags) = 1;
12847
12848 GNU_xref_decl (current_function_decl, enumtype);
12849 return enumtype;
12850 }
12851
12852 /* After processing and defining all the values of an enumeration type,
12853 install their decls in the enumeration type and finish it off.
12854 ENUMTYPE is the type object and VALUES a list of name-value pairs.
12855 Returns ENUMTYPE. */
12856
12857 tree
12858 finish_enum (enumtype)
12859 tree enumtype;
12860 {
12861 register tree minnode = NULL_TREE, maxnode = NULL_TREE;
12862 /* Calculate the maximum value of any enumerator in this type. */
12863
12864 tree values = TYPE_VALUES (enumtype);
12865 if (values)
12866 {
12867 tree pair;
12868
12869 for (pair = values; pair; pair = TREE_CHAIN (pair))
12870 {
12871 tree decl;
12872 tree value;
12873
12874 /* The TREE_VALUE is a CONST_DECL for this enumeration
12875 constant. */
12876 decl = TREE_VALUE (pair);
12877
12878 /* [dcl.enum]
12879
12880 Following the closing brace of an enum-specifier, each
12881 enumerator has the type of its enumeration. Prior to the
12882 closing brace, the type of each enumerator is the type of
12883 its initializing value. */
12884 TREE_TYPE (decl) = enumtype;
12885
12886 /* The DECL_INITIAL will be NULL if we are processing a
12887 template declaration and this enumeration constant had no
12888 explicit initializer. */
12889 value = DECL_INITIAL (decl);
12890 if (value && !processing_template_decl)
12891 {
12892 /* Set the TREE_TYPE for the VALUE as well. That's so
12893 that when we call decl_constant_value we get an
12894 entity of the right type (but with the constant
12895 value). Since we shouldn't ever call
12896 decl_constant_value on a template type, there's no
12897 reason to do that when processing_template_decl.
12898 And, if the expression is something like a
12899 TEMPLATE_PARM_INDEX or a CAST_EXPR doing so will
12900 wreak havoc on the intended type of the expression.
12901
12902 Of course, there's also no point in trying to compute
12903 minimum or maximum values if we're in a template. */
12904 TREE_TYPE (value) = enumtype;
12905
12906 if (!minnode)
12907 minnode = maxnode = value;
12908 else if (tree_int_cst_lt (maxnode, value))
12909 maxnode = value;
12910 else if (tree_int_cst_lt (value, minnode))
12911 minnode = value;
12912 }
12913
12914 if (processing_template_decl)
12915 /* If this is just a template, leave the CONST_DECL
12916 alone. That way tsubst_copy will find CONST_DECLs for
12917 CONST_DECLs, and not INTEGER_CSTs. */
12918 ;
12919 else
12920 /* In the list we're building up, we want the enumeration
12921 values, not the CONST_DECLs. */
12922 TREE_VALUE (pair) = value;
12923 }
12924 }
12925 else
12926 maxnode = minnode = integer_zero_node;
12927
12928 TYPE_VALUES (enumtype) = nreverse (values);
12929
12930 if (processing_template_decl)
12931 {
12932 tree scope = current_scope ();
12933 if (scope && TREE_CODE (scope) == FUNCTION_DECL)
12934 add_tree (build_min (TAG_DEFN, enumtype));
12935 }
12936 else
12937 {
12938 int unsignedp = tree_int_cst_sgn (minnode) >= 0;
12939 int lowprec = min_precision (minnode, unsignedp);
12940 int highprec = min_precision (maxnode, unsignedp);
12941 int precision = MAX (lowprec, highprec);
12942 tree tem;
12943
12944 TYPE_SIZE (enumtype) = NULL_TREE;
12945
12946 /* Set TYPE_MIN_VALUE and TYPE_MAX_VALUE according to `precision'. */
12947
12948 TYPE_PRECISION (enumtype) = precision;
12949 if (unsignedp)
12950 fixup_unsigned_type (enumtype);
12951 else
12952 fixup_signed_type (enumtype);
12953
12954 if (flag_short_enums || (precision > TYPE_PRECISION (integer_type_node)))
12955 /* Use the width of the narrowest normal C type which is wide
12956 enough. */
12957 TYPE_PRECISION (enumtype) = TYPE_PRECISION (type_for_size
12958 (precision, 1));
12959 else
12960 TYPE_PRECISION (enumtype) = TYPE_PRECISION (integer_type_node);
12961
12962 TYPE_SIZE (enumtype) = 0;
12963 layout_type (enumtype);
12964
12965 /* Fix up all variant types of this enum type. */
12966 for (tem = TYPE_MAIN_VARIANT (enumtype); tem;
12967 tem = TYPE_NEXT_VARIANT (tem))
12968 {
12969 TYPE_VALUES (tem) = TYPE_VALUES (enumtype);
12970 TYPE_MIN_VALUE (tem) = TYPE_MIN_VALUE (enumtype);
12971 TYPE_MAX_VALUE (tem) = TYPE_MAX_VALUE (enumtype);
12972 TYPE_SIZE (tem) = TYPE_SIZE (enumtype);
12973 TYPE_SIZE_UNIT (tem) = TYPE_SIZE_UNIT (enumtype);
12974 TYPE_MODE (tem) = TYPE_MODE (enumtype);
12975 TYPE_PRECISION (tem) = TYPE_PRECISION (enumtype);
12976 TYPE_ALIGN (tem) = TYPE_ALIGN (enumtype);
12977 TREE_UNSIGNED (tem) = TREE_UNSIGNED (enumtype);
12978 }
12979
12980 /* Finish debugging output for this type. */
12981 rest_of_type_compilation (enumtype, namespace_bindings_p ());
12982 }
12983
12984 return enumtype;
12985 }
12986
12987 /* Build and install a CONST_DECL for an enumeration constant of the
12988 enumeration type ENUMTYPE whose NAME and VALUE (if any) are provided.
12989 Assignment of sequential values by default is handled here. */
12990
12991 void
12992 build_enumerator (name, value, enumtype)
12993 tree name;
12994 tree value;
12995 tree enumtype;
12996 {
12997 tree decl;
12998 tree context;
12999 tree type;
13000 tree values;
13001
13002 /* Remove no-op casts from the value. */
13003 if (value)
13004 STRIP_TYPE_NOPS (value);
13005
13006 if (! processing_template_decl)
13007 {
13008 /* Validate and default VALUE. */
13009 if (value != NULL_TREE)
13010 {
13011 if (TREE_READONLY_DECL_P (value))
13012 value = decl_constant_value (value);
13013
13014 if (TREE_CODE (value) == INTEGER_CST)
13015 {
13016 value = default_conversion (value);
13017 constant_expression_warning (value);
13018 }
13019 else
13020 {
13021 cp_error ("enumerator value for `%D' not integer constant", name);
13022 value = NULL_TREE;
13023 }
13024 }
13025
13026 /* Default based on previous value. */
13027 if (value == NULL_TREE && ! processing_template_decl)
13028 {
13029 tree prev_value;
13030
13031 if (TYPE_VALUES (enumtype))
13032 {
13033 /* The next value is the previous value ... */
13034 prev_value = DECL_INITIAL (TREE_VALUE (TYPE_VALUES (enumtype)));
13035 /* ... plus one. */
13036 value = build_binary_op (PLUS_EXPR,
13037 prev_value,
13038 integer_one_node);
13039
13040 if (tree_int_cst_lt (value, prev_value))
13041 cp_error ("overflow in enumeration values at `%D'", name);
13042 }
13043 else
13044 value = integer_zero_node;
13045 }
13046
13047 /* Remove no-op casts from the value. */
13048 if (value)
13049 STRIP_TYPE_NOPS (value);
13050 #if 0
13051 /* To fix MAX_VAL enum consts. (bkoz) */
13052 TREE_TYPE (value) = integer_type_node;
13053 #endif
13054 }
13055
13056 /* We always have to copy here; not all INTEGER_CSTs are unshared.
13057 Even in other cases, we will later (in finish_enum) be setting
13058 the type of VALUE. But, we don't need to make a copy if this
13059 VALUE is one of the enumeration constants for this same
13060 enumeration type. */
13061 for (values = TYPE_VALUES (enumtype); values; values = TREE_CHAIN (values))
13062 if (TREE_VALUE (values) == value)
13063 break;
13064 /* If we didn't break out of the loop, then we do need a copy. */
13065 if (!values && value)
13066 value = copy_node (value);
13067
13068 /* C++ associates enums with global, function, or class declarations. */
13069 context = current_scope ();
13070
13071 /* Build the actual enumeration constant. Note that the enumeration
13072 constants have the type of their initializers until the
13073 enumeration is complete:
13074
13075 [ dcl.enum ]
13076
13077 Following the closing brace of an enum-specifier, each enumer-
13078 ator has the type of its enumeration. Prior to the closing
13079 brace, the type of each enumerator is the type of its
13080 initializing value.
13081
13082 In finish_enum we will reset the type. Of course, if we're
13083 processing a template, there may be no value. */
13084 type = value ? TREE_TYPE (value) : NULL_TREE;
13085
13086 if (context && context == current_class_type)
13087 /* This enum declaration is local to the class. We need the full
13088 lang_decl so that we can record DECL_CLASS_CONTEXT, for example. */
13089 decl = build_lang_decl (CONST_DECL, name, type);
13090 else
13091 /* It's a global enum, or it's local to a function. (Note local to
13092 a function could mean local to a class method. */
13093 decl = build_decl (CONST_DECL, name, type);
13094
13095 DECL_CONTEXT (decl) = FROB_CONTEXT (context);
13096 DECL_INITIAL (decl) = value;
13097 TREE_READONLY (decl) = 1;
13098
13099 if (context && context == current_class_type)
13100 /* In something like `struct S { enum E { i = 7 }; };' we put `i'
13101 on the TYPE_FIELDS list for `S'. (That's so that you can say
13102 things like `S::i' later.) */
13103 finish_member_declaration (decl);
13104 else
13105 {
13106 pushdecl (decl);
13107 GNU_xref_decl (current_function_decl, decl);
13108 }
13109
13110 /* Add this enumeration constant to the list for this type. */
13111 TYPE_VALUES (enumtype) = tree_cons (name, decl, TYPE_VALUES (enumtype));
13112 }
13113
13114 \f
13115 static int function_depth;
13116
13117 /* We're defining DECL. Make sure that it's type is OK. */
13118
13119 static void
13120 check_function_type (decl)
13121 tree decl;
13122 {
13123 tree fntype = TREE_TYPE (decl);
13124 tree return_type = complete_type (TREE_TYPE (fntype));
13125
13126 /* In a function definition, arg types must be complete. */
13127 require_complete_types_for_parms (current_function_parms);
13128
13129 if (!COMPLETE_OR_VOID_TYPE_P (return_type))
13130 {
13131 cp_error ("return type `%#T' is incomplete", TREE_TYPE (fntype));
13132
13133 /* Make it return void instead, but don't change the
13134 type of the DECL_RESULT, in case we have a named return value. */
13135 if (TREE_CODE (fntype) == METHOD_TYPE)
13136 {
13137 tree ctype = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (fntype)));
13138 TREE_TYPE (decl)
13139 = build_cplus_method_type (ctype,
13140 void_type_node,
13141 FUNCTION_ARG_CHAIN (decl));
13142 }
13143 else
13144 TREE_TYPE (decl)
13145 = build_function_type (void_type_node,
13146 TYPE_ARG_TYPES (TREE_TYPE (decl)));
13147 TREE_TYPE (decl)
13148 = build_exception_variant (fntype,
13149 TYPE_RAISES_EXCEPTIONS (fntype));
13150 }
13151 else
13152 abstract_virtuals_error (decl, TREE_TYPE (fntype));
13153 }
13154
13155 /* Create the FUNCTION_DECL for a function definition.
13156 DECLSPECS and DECLARATOR are the parts of the declaration;
13157 they describe the function's name and the type it returns,
13158 but twisted together in a fashion that parallels the syntax of C.
13159
13160 FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
13161 DECLARATOR is really the DECL for the function we are about to
13162 process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
13163 indicating that the function is an inline defined in-class, and
13164 SF_EXPAND indicating that we should generate RTL for this
13165 function.
13166
13167 This function creates a binding context for the function body
13168 as well as setting up the FUNCTION_DECL in current_function_decl.
13169
13170 Returns 1 on success. If the DECLARATOR is not suitable for a function
13171 (it defines a datum instead), we return 0, which tells
13172 yyparse to report a parse error.
13173
13174 For C++, we must first check whether that datum makes any sense.
13175 For example, "class A local_a(1,2);" means that variable local_a
13176 is an aggregate of type A, which should have a constructor
13177 applied to it with the argument list [1, 2]. */
13178
13179 int
13180 start_function (declspecs, declarator, attrs, flags)
13181 tree declspecs, declarator, attrs;
13182 int flags;
13183 {
13184 tree decl1;
13185 tree ctype = NULL_TREE;
13186 tree fntype;
13187 tree restype;
13188 extern int have_extern_spec;
13189 extern int used_extern_spec;
13190 int doing_friend = 0;
13191 struct binding_level *bl;
13192
13193 /* Sanity check. */
13194 my_friendly_assert (TREE_CODE (TREE_VALUE (void_list_node)) == VOID_TYPE, 160);
13195 my_friendly_assert (TREE_CHAIN (void_list_node) == NULL_TREE, 161);
13196
13197 /* This should only be done once on the top most decl. */
13198 if (have_extern_spec && !used_extern_spec)
13199 {
13200 declspecs = decl_tree_cons (NULL_TREE, get_identifier ("extern"), declspecs);
13201 used_extern_spec = 1;
13202 }
13203
13204 if (flags & SF_PRE_PARSED)
13205 {
13206 decl1 = declarator;
13207
13208 fntype = TREE_TYPE (decl1);
13209 if (TREE_CODE (fntype) == METHOD_TYPE)
13210 ctype = TYPE_METHOD_BASETYPE (fntype);
13211
13212 /* ISO C++ 11.4/5. A friend function defined in a class is in
13213 the (lexical) scope of the class in which it is defined. */
13214 if (!ctype && DECL_FRIEND_P (decl1))
13215 {
13216 ctype = DECL_FRIEND_CONTEXT (decl1);
13217
13218 /* CTYPE could be null here if we're dealing with a template;
13219 for example, `inline friend float foo()' inside a template
13220 will have no CTYPE set. */
13221 if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
13222 ctype = NULL_TREE;
13223 else
13224 doing_friend = 1;
13225 }
13226
13227 last_function_parms = DECL_ARGUMENTS (decl1);
13228 last_function_parm_tags = NULL_TREE;
13229 }
13230 else
13231 {
13232 decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, NULL_TREE);
13233 /* If the declarator is not suitable for a function definition,
13234 cause a syntax error. */
13235 if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL) return 0;
13236
13237 fntype = TREE_TYPE (decl1);
13238
13239 restype = TREE_TYPE (fntype);
13240 if (CLASS_TYPE_P (restype) && !CLASSTYPE_GOT_SEMICOLON (restype))
13241 {
13242 cp_error ("semicolon missing after declaration of `%#T'", restype);
13243 shadow_tag (build_tree_list (NULL_TREE, restype));
13244 CLASSTYPE_GOT_SEMICOLON (restype) = 1;
13245 if (TREE_CODE (fntype) == FUNCTION_TYPE)
13246 fntype = build_function_type (integer_type_node,
13247 TYPE_ARG_TYPES (fntype));
13248 else
13249 fntype = build_cplus_method_type (build_type_variant (TYPE_METHOD_BASETYPE (fntype), TREE_READONLY (decl1), TREE_SIDE_EFFECTS (decl1)),
13250 integer_type_node,
13251 TYPE_ARG_TYPES (fntype));
13252 TREE_TYPE (decl1) = fntype;
13253 }
13254
13255 if (TREE_CODE (fntype) == METHOD_TYPE)
13256 ctype = TYPE_METHOD_BASETYPE (fntype);
13257 else if (DECL_MAIN_P (decl1))
13258 {
13259 /* If this doesn't return integer_type, complain. */
13260 if (TREE_TYPE (TREE_TYPE (decl1)) != integer_type_node)
13261 {
13262 if (pedantic || warn_return_type)
13263 pedwarn ("return type for `main' changed to `int'");
13264 TREE_TYPE (decl1) = fntype = default_function_type;
13265 }
13266 }
13267 }
13268
13269 /* Sometimes we don't notice that a function is a static member, and
13270 build a METHOD_TYPE for it. Fix that up now. */
13271 if (ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1)
13272 && TREE_CODE (TREE_TYPE (decl1)) == METHOD_TYPE)
13273 {
13274 revert_static_member_fn (decl1);
13275 last_function_parms = TREE_CHAIN (last_function_parms);
13276 ctype = NULL_TREE;
13277 }
13278
13279 /* Warn if function was previously implicitly declared
13280 (but not if we warned then). */
13281 if (! warn_implicit
13282 && IDENTIFIER_IMPLICIT_DECL (DECL_NAME (decl1)) != NULL_TREE)
13283 cp_warning_at ("`%D' implicitly declared before its definition", IDENTIFIER_IMPLICIT_DECL (DECL_NAME (decl1)));
13284
13285 /* Set up current_class_type, and enter the scope of the class, if
13286 appropriate. */
13287 if (ctype)
13288 push_nested_class (ctype, 1);
13289 else if (DECL_STATIC_FUNCTION_P (decl1))
13290 push_nested_class (DECL_CONTEXT (decl1), 2);
13291
13292 /* Now that we have entered the scope of the class, we must restore
13293 the bindings for any template parameters surrounding DECL1, if it
13294 is an inline member template. (Order is important; consider the
13295 case where a template parameter has the same name as a field of
13296 the class.) It is not until after this point that
13297 PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly. */
13298 if (flags & SF_INCLASS_INLINE)
13299 maybe_begin_member_template_processing (decl1);
13300
13301 /* Effective C++ rule 15. See also c_expand_return. */
13302 if (warn_ecpp
13303 && DECL_NAME (decl1) == ansi_opname[(int) MODIFY_EXPR]
13304 && TREE_CODE (TREE_TYPE (fntype)) == VOID_TYPE)
13305 cp_warning ("`operator=' should return a reference to `*this'");
13306
13307 /* Make the init_value nonzero so pushdecl knows this is not tentative.
13308 error_mark_node is replaced below (in poplevel) with the BLOCK. */
13309 if (!DECL_INITIAL (decl1))
13310 DECL_INITIAL (decl1) = error_mark_node;
13311
13312 #ifdef SET_DEFAULT_DECL_ATTRIBUTES
13313 SET_DEFAULT_DECL_ATTRIBUTES (decl1, attrs);
13314 #endif
13315
13316 /* This function exists in static storage.
13317 (This does not mean `static' in the C sense!) */
13318 TREE_STATIC (decl1) = 1;
13319
13320 /* We must call push_template_decl after current_class_type is set
13321 up. (If we are processing inline definitions after exiting a
13322 class scope, current_class_type will be NULL_TREE until set above
13323 by push_nested_class.) */
13324 if (processing_template_decl)
13325 decl1 = push_template_decl (decl1);
13326
13327 /* We are now in the scope of the function being defined. */
13328 current_function_decl = decl1;
13329
13330 /* Save the parm names or decls from this function's declarator
13331 where store_parm_decls will find them. */
13332 current_function_parms = last_function_parms;
13333 current_function_parm_tags = last_function_parm_tags;
13334
13335 /* Make sure the parameter and return types are reasonable. When
13336 you declare a function, these types can be incomplete, but they
13337 must be complete when you define the function. */
13338 if (! processing_template_decl)
13339 check_function_type (decl1);
13340
13341 /* Build the return declaration for the function. */
13342 restype = TREE_TYPE (fntype);
13343 if (!processing_template_decl)
13344 {
13345 if (!DECL_RESULT (decl1))
13346 {
13347 DECL_RESULT (decl1)
13348 = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (restype));
13349 c_apply_type_quals_to_decl (CP_TYPE_QUALS (restype),
13350 DECL_RESULT (decl1));
13351 }
13352 }
13353 else
13354 /* Just use `void'. Nobody will ever look at this anyhow. */
13355 DECL_RESULT (decl1) = build_decl (RESULT_DECL, 0, void_type_node);
13356
13357 /* Initialize RTL machinery. We cannot do this until
13358 CURRENT_FUNCTION_DECL and DECL_RESULT are set up. We do this
13359 even when processing a template; this is how we get
13360 CFUN set up, and our per-function variables initialized. */
13361 bl = current_binding_level;
13362 init_function_start (decl1, input_filename, lineno);
13363 current_binding_level = bl;
13364 expanding_p = (flags & SF_EXPAND) != 0;
13365
13366 /* Even though we're inside a function body, we still don't want to
13367 call expand_expr to calculate the size of a variable-sized array.
13368 We haven't necessarily assigned RTL to all variables yet, so it's
13369 not safe to try to expand expressions involving them. */
13370 immediate_size_expand = 0;
13371 cfun->x_dont_save_pending_sizes_p = 1;
13372
13373 /* If we're building a statement-tree, start the tree now. */
13374 if (processing_template_decl || !expanding_p)
13375 begin_stmt_tree (&DECL_SAVED_TREE (decl1));
13376
13377 /* Let the user know we're compiling this function. */
13378 if (processing_template_decl || !building_stmt_tree ())
13379 announce_function (decl1);
13380
13381 /* Record the decl so that the function name is defined.
13382 If we already have a decl for this name, and it is a FUNCTION_DECL,
13383 use the old decl. */
13384 if (!processing_template_decl && !(flags & SF_PRE_PARSED))
13385 {
13386 /* A specialization is not used to guide overload resolution. */
13387 if ((flag_guiding_decls
13388 || !DECL_TEMPLATE_SPECIALIZATION (decl1))
13389 && ! DECL_FUNCTION_MEMBER_P (decl1))
13390 decl1 = pushdecl (decl1);
13391 else
13392 {
13393 /* We need to set the DECL_CONTEXT. */
13394 if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
13395 DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
13396 /* And make sure we have enough default args. */
13397 check_default_args (decl1);
13398 }
13399 fntype = TREE_TYPE (decl1);
13400 }
13401
13402 /* Reset these in case the call to pushdecl changed them. */
13403 current_function_decl = decl1;
13404 cfun->decl = decl1;
13405
13406 /* Initialize the per-function data. */
13407 if (!DECL_PENDING_INLINE_P (decl1) && DECL_SAVED_FUNCTION_DATA (decl1))
13408 {
13409 /* If we already parsed this function, and we're just expanding it
13410 now, restore saved state. */
13411 struct binding_level *bl = current_binding_level;
13412 *cp_function_chain = *DECL_SAVED_FUNCTION_DATA (decl1);
13413 current_binding_level = bl;
13414
13415 /* This function is being processed in whole-function mode; we
13416 already did semantic analysis. */
13417 cfun->x_whole_function_mode_p = 1;
13418
13419 /* If we decided that we didn't want to inline this function,
13420 make sure the back-end knows that. */
13421 if (!current_function_cannot_inline)
13422 current_function_cannot_inline = cp_function_chain->cannot_inline;
13423
13424 /* We don't need the saved data anymore. */
13425 free (DECL_SAVED_FUNCTION_DATA (decl1));
13426 DECL_SAVED_FUNCTION_DATA (decl1) = NULL;
13427 }
13428 else if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1))
13429 {
13430 /* We know that this was set up by `grokclassfn'. We do not
13431 wait until `store_parm_decls', since evil parse errors may
13432 never get us to that point. Here we keep the consistency
13433 between `current_class_type' and `current_class_ptr'. */
13434 tree t = DECL_ARGUMENTS (decl1);
13435
13436 my_friendly_assert (t != NULL_TREE && TREE_CODE (t) == PARM_DECL,
13437 162);
13438 my_friendly_assert (TREE_CODE (TREE_TYPE (t)) == POINTER_TYPE,
13439 19990811);
13440
13441 cp_function_chain->x_current_class_ref
13442 = build_indirect_ref (t, NULL_PTR);
13443 cp_function_chain->x_current_class_ptr = t;
13444
13445 /* Constructors and destructors need to know whether they're "in
13446 charge" of initializing virtual base classes. */
13447 if (DECL_HAS_IN_CHARGE_PARM_P (decl1))
13448 current_in_charge_parm = TREE_CHAIN (t);
13449 }
13450
13451 if (DECL_INTERFACE_KNOWN (decl1))
13452 {
13453 tree ctx = decl_function_context (decl1);
13454
13455 if (DECL_NOT_REALLY_EXTERN (decl1))
13456 DECL_EXTERNAL (decl1) = 0;
13457
13458 if (ctx != NULL_TREE && DECL_THIS_INLINE (ctx)
13459 && TREE_PUBLIC (ctx))
13460 /* This is a function in a local class in an extern inline
13461 function. */
13462 comdat_linkage (decl1);
13463 }
13464 /* If this function belongs to an interface, it is public.
13465 If it belongs to someone else's interface, it is also external.
13466 This only affects inlines and template instantiations. */
13467 else if (interface_unknown == 0
13468 && (! DECL_TEMPLATE_INSTANTIATION (decl1)
13469 || flag_alt_external_templates))
13470 {
13471 if (DECL_THIS_INLINE (decl1) || DECL_TEMPLATE_INSTANTIATION (decl1)
13472 || processing_template_decl)
13473 {
13474 DECL_EXTERNAL (decl1)
13475 = (interface_only
13476 || (DECL_THIS_INLINE (decl1) && ! flag_implement_inlines
13477 && !DECL_VINDEX (decl1)));
13478
13479 /* For WIN32 we also want to put these in linkonce sections. */
13480 maybe_make_one_only (decl1);
13481 }
13482 else
13483 DECL_EXTERNAL (decl1) = 0;
13484 DECL_NOT_REALLY_EXTERN (decl1) = 0;
13485 DECL_INTERFACE_KNOWN (decl1) = 1;
13486 }
13487 else if (interface_unknown && interface_only
13488 && (! DECL_TEMPLATE_INSTANTIATION (decl1)
13489 || flag_alt_external_templates))
13490 {
13491 /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
13492 interface, we will have interface_only set but not
13493 interface_known. In that case, we don't want to use the normal
13494 heuristics because someone will supply a #pragma implementation
13495 elsewhere, and deducing it here would produce a conflict. */
13496 comdat_linkage (decl1);
13497 DECL_EXTERNAL (decl1) = 0;
13498 DECL_INTERFACE_KNOWN (decl1) = 1;
13499 DECL_DEFER_OUTPUT (decl1) = 1;
13500 }
13501 else
13502 {
13503 /* This is a definition, not a reference.
13504 So clear DECL_EXTERNAL. */
13505 DECL_EXTERNAL (decl1) = 0;
13506
13507 if ((DECL_THIS_INLINE (decl1) || DECL_TEMPLATE_INSTANTIATION (decl1))
13508 && ! DECL_INTERFACE_KNOWN (decl1)
13509 /* Don't try to defer nested functions for now. */
13510 && ! decl_function_context (decl1))
13511 DECL_DEFER_OUTPUT (decl1) = 1;
13512 else
13513 DECL_INTERFACE_KNOWN (decl1) = 1;
13514 }
13515
13516 if (doing_semantic_analysis_p ())
13517 {
13518 pushlevel (0);
13519 current_binding_level->parm_flag = 1;
13520 }
13521
13522 if (attrs)
13523 cplus_decl_attributes (decl1, NULL_TREE, attrs);
13524
13525 if (!building_stmt_tree ())
13526 {
13527 GNU_xref_function (decl1, current_function_parms);
13528 make_function_rtl (decl1);
13529 }
13530
13531 /* Promote the value to int before returning it. */
13532 if (C_PROMOTING_INTEGER_TYPE_P (restype))
13533 restype = type_promotes_to (restype);
13534
13535 /* If this fcn was already referenced via a block-scope `extern' decl
13536 (or an implicit decl), propagate certain information about the usage. */
13537 if (TREE_ADDRESSABLE (DECL_ASSEMBLER_NAME (decl1)))
13538 TREE_ADDRESSABLE (decl1) = 1;
13539
13540 if (DECL_RESULT (decl1) == NULL_TREE)
13541 {
13542 DECL_RESULT (decl1)
13543 = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (restype));
13544 TREE_READONLY (DECL_RESULT (decl1)) = CP_TYPE_CONST_P (restype);
13545 TREE_THIS_VOLATILE (DECL_RESULT (decl1)) = CP_TYPE_VOLATILE_P (restype);
13546 }
13547
13548 ++function_depth;
13549
13550 if (DESTRUCTOR_NAME_P (DECL_ASSEMBLER_NAME (decl1))
13551 && DECL_LANGUAGE (decl1) == lang_cplusplus)
13552 {
13553 dtor_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
13554 DECL_CONTEXT (dtor_label) = current_function_decl;
13555 }
13556 /* Under the old ABI we return `this' from constructors, so we make
13557 ordinary `return' statements in constructors jump to CTOR_LABEL;
13558 from there we return `this'. Under the new ABI, we don't bother
13559 with any of this. By not setting CTOR_LABEL the remainder of the
13560 machinery is automatically disabled. */
13561 else if (!flag_new_abi && DECL_CONSTRUCTOR_P (decl1))
13562 {
13563 ctor_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
13564 DECL_CONTEXT (ctor_label) = current_function_decl;
13565 }
13566
13567 return 1;
13568 }
13569 \f
13570 /* Called after store_parm_decls for a function-try-block. */
13571
13572 void
13573 expand_start_early_try_stmts ()
13574 {
13575 expand_start_try_stmts ();
13576 }
13577
13578 /* Store the parameter declarations into the current function declaration.
13579 This is called after parsing the parameter declarations, before
13580 digesting the body of the function.
13581
13582 Also install to binding contour return value identifier, if any. */
13583
13584 void
13585 store_parm_decls ()
13586 {
13587 register tree fndecl = current_function_decl;
13588 register tree parm;
13589 int parms_have_cleanups = 0;
13590 tree cleanups = NULL_TREE;
13591
13592 /* This is a list of types declared among parms in a prototype. */
13593 tree parmtags = current_function_parm_tags;
13594
13595 /* This is a chain of any other decls that came in among the parm
13596 declarations. If a parm is declared with enum {foo, bar} x;
13597 then CONST_DECLs for foo and bar are put here. */
13598 tree nonparms = NULL_TREE;
13599
13600 /* Create a binding level for the parms. */
13601 if (!building_stmt_tree ())
13602 expand_start_bindings (2);
13603
13604 if (current_function_parms)
13605 {
13606 /* This case is when the function was defined with an ANSI prototype.
13607 The parms already have decls, so we need not do anything here
13608 except record them as in effect
13609 and complain if any redundant old-style parm decls were written. */
13610
13611 tree specparms = current_function_parms;
13612 tree next;
13613
13614 if (doing_semantic_analysis_p ())
13615 {
13616 /* Must clear this because it might contain TYPE_DECLs declared
13617 at class level. */
13618 storedecls (NULL_TREE);
13619
13620 /* If we're doing semantic analysis, then we'll call pushdecl
13621 for each of these. We must do them in reverse order so that
13622 they end in the correct forward order. */
13623 specparms = nreverse (specparms);
13624 }
13625
13626 for (parm = specparms; parm; parm = next)
13627 {
13628 next = TREE_CHAIN (parm);
13629 if (TREE_CODE (parm) == PARM_DECL)
13630 {
13631 tree type = TREE_TYPE (parm);
13632
13633 if (doing_semantic_analysis_p ())
13634 {
13635 tree cleanup;
13636
13637 if (DECL_NAME (parm) == NULL_TREE
13638 || TREE_CODE (parm) != VOID_TYPE)
13639 pushdecl (parm);
13640 else
13641 cp_error ("parameter `%D' declared void", parm);
13642
13643 cleanup = (processing_template_decl
13644 ? NULL_TREE
13645 : maybe_build_cleanup (parm));
13646
13647 if (cleanup)
13648 cleanups = tree_cons (parm, cleanup, cleanups);
13649 }
13650 else if (type != error_mark_node
13651 && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
13652 parms_have_cleanups = 1;
13653 }
13654 else
13655 {
13656 /* If we find an enum constant or a type tag,
13657 put it aside for the moment. */
13658 TREE_CHAIN (parm) = NULL_TREE;
13659 nonparms = chainon (nonparms, parm);
13660 }
13661 }
13662
13663 if (doing_semantic_analysis_p ())
13664 {
13665 /* Get the decls in their original chain order
13666 and record in the function. This is all and only the
13667 PARM_DECLs that were pushed into scope by the loop above. */
13668 DECL_ARGUMENTS (fndecl) = getdecls ();
13669 storetags (chainon (parmtags, gettags ()));
13670 }
13671 }
13672 else
13673 DECL_ARGUMENTS (fndecl) = NULL_TREE;
13674
13675 /* Now store the final chain of decls for the arguments
13676 as the decl-chain of the current lexical scope.
13677 Put the enumerators in as well, at the front so that
13678 DECL_ARGUMENTS is not modified. */
13679 if (doing_semantic_analysis_p ())
13680 storedecls (chainon (nonparms, DECL_ARGUMENTS (fndecl)));
13681
13682 /* Initialize the RTL code for the function. */
13683 DECL_SAVED_INSNS (fndecl) = 0;
13684 if (! building_stmt_tree ())
13685 expand_function_start (fndecl, parms_have_cleanups);
13686
13687 current_function_parms_stored = 1;
13688
13689 /* If this function is `main', emit a call to `__main'
13690 to run global initializers, etc. */
13691 if (DECL_MAIN_P (fndecl) && !building_stmt_tree ())
13692 expand_main_function ();
13693
13694 /* Now that we have initialized the parms, we can start their
13695 cleanups. We cannot do this before, since expand_decl_cleanup
13696 should not be called before the parm can be used. */
13697 while (cleanups)
13698 {
13699 finish_decl_cleanup (TREE_PURPOSE (cleanups),
13700 TREE_VALUE (cleanups));
13701 cleanups = TREE_CHAIN (cleanups);
13702 }
13703
13704 /* Create a binding contour which can be used to catch
13705 cleanup-generated temporaries. Also, if the return value needs or
13706 has initialization, deal with that now. */
13707 if (parms_have_cleanups)
13708 {
13709 pushlevel (0);
13710 if (!building_stmt_tree ())
13711 expand_start_bindings (2);
13712 }
13713
13714 /* Do the starting of the exception specifications, if we have any. */
13715 if (flag_exceptions && !processing_template_decl
13716 && flag_enforce_eh_specs
13717 && building_stmt_tree ()
13718 && TYPE_RAISES_EXCEPTIONS (TREE_TYPE (current_function_decl)))
13719 current_eh_spec_try_block = expand_start_eh_spec ();
13720 }
13721
13722 /* Bind a name and initialization to the return value of
13723 the current function. */
13724
13725 void
13726 store_return_init (decl)
13727 tree decl;
13728 {
13729 /* If this named return value comes in a register, put it in a
13730 pseudo-register. */
13731 if (DECL_REGISTER (decl))
13732 {
13733 original_result_rtx = DECL_RTL (decl);
13734 /* Note that the mode of the old DECL_RTL may be wider than the
13735 mode of DECL_RESULT, depending on the calling conventions for
13736 the processor. For example, on the Alpha, a 32-bit integer
13737 is returned in a DImode register -- the DECL_RESULT has
13738 SImode but the DECL_RTL for the DECL_RESULT has DImode. So,
13739 here, we use the mode the back-end has already assigned for
13740 the return value. */
13741 DECL_RTL (decl) = gen_reg_rtx (GET_MODE (original_result_rtx));
13742 }
13743 }
13744
13745 \f
13746 /* We have finished doing semantic analysis on DECL, but have not yet
13747 generated RTL for its body. Save away our current state, so that
13748 when we want to generate RTL later we know what to do. */
13749
13750 static void
13751 save_function_data (decl)
13752 tree decl;
13753 {
13754 struct language_function *f;
13755
13756 /* Save the language-specific per-function data so that we can
13757 get it back when we really expand this function. */
13758 my_friendly_assert (!DECL_PENDING_INLINE_P (decl),
13759 19990908);
13760
13761 /* Make a copy. */
13762 f = ((struct language_function *)
13763 xmalloc (sizeof (struct language_function)));
13764 bcopy ((char *) cp_function_chain, (char *) f,
13765 sizeof (struct language_function));
13766 DECL_SAVED_FUNCTION_DATA (decl) = f;
13767
13768 /* Clear out the bits we don't need. */
13769 f->x_base_init_list = NULL_TREE;
13770 f->x_member_init_list = NULL_TREE;
13771 f->x_stmt_tree.x_last_stmt = NULL_TREE;
13772 f->x_stmt_tree.x_last_expr_type = NULL_TREE;
13773 f->x_result_rtx = NULL_RTX;
13774 f->x_named_label_uses = NULL;
13775 f->bindings = NULL;
13776
13777 /* When we get back here again, we will be expanding. */
13778 f->x_expanding_p = 1;
13779
13780 /* If we've already decided that we cannot inline this function, we
13781 must remember that fact when we actually go to expand the
13782 function. */
13783 f->cannot_inline = current_function_cannot_inline;
13784 }
13785
13786 /* At the end of every constructor we generate to code to return
13787 `this'. Do that now. */
13788
13789 static void
13790 finish_constructor_body ()
13791 {
13792 /* Any return from a constructor will end up here. */
13793 if (ctor_label)
13794 add_tree (build_min_nt (LABEL_STMT, ctor_label));
13795
13796 /* Clear CTOR_LABEL so that finish_return_stmt knows to really
13797 generate the return, rather than a goto to CTOR_LABEL. */
13798 ctor_label = NULL_TREE;
13799 /* In check_return_expr we translate an empty return from a
13800 constructor to a return of `this'. */
13801 finish_return_stmt (NULL_TREE);
13802 /* Mark the end of the constructor. */
13803 add_tree (build_min_nt (CTOR_STMT));
13804 }
13805
13806 /* At the end of every destructor we generate code to restore virtual
13807 function tables to the values desired by base classes and to call
13808 to base class destructors. Do that now. */
13809
13810 static void
13811 finish_destructor_body ()
13812 {
13813 tree compound_stmt;
13814 tree in_charge;
13815 tree virtual_size;
13816 tree exprstmt;
13817
13818 /* Create a block to contain all the extra code. */
13819 compound_stmt = begin_compound_stmt (/*has_no_scope=*/0);
13820
13821 /* Any return from a destructor will end up here. */
13822 add_tree (build_min_nt (LABEL_STMT, dtor_label));
13823
13824 /* Generate the code to call destructor on base class. If this
13825 destructor belongs to a class with virtual functions, then set
13826 the virtual function table pointer to represent the type of our
13827 base class. */
13828
13829 /* This side-effect makes call to `build_delete' generate the code
13830 we have to have at the end of this destructor. `build_delete'
13831 will set the flag again. */
13832 TYPE_HAS_DESTRUCTOR (current_class_type) = 0;
13833
13834 /* These are two cases where we cannot delegate deletion. */
13835 if (TYPE_USES_VIRTUAL_BASECLASSES (current_class_type)
13836 || TYPE_GETS_REG_DELETE (current_class_type))
13837 in_charge = integer_zero_node;
13838 else
13839 in_charge = current_in_charge_parm;
13840
13841 exprstmt = build_delete (current_class_type,
13842 current_class_ref,
13843 in_charge,
13844 LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR|LOOKUP_NORMAL,
13845 0);
13846
13847 if (exprstmt != error_mark_node
13848 && (TREE_CODE (exprstmt) != NOP_EXPR
13849 || TREE_OPERAND (exprstmt, 0) != integer_zero_node
13850 || TYPE_USES_VIRTUAL_BASECLASSES (current_class_type)))
13851 {
13852 if (exprstmt != void_zero_node)
13853 /* Don't call `expand_expr_stmt' if we're not going to do
13854 anything, since -Wall will give a diagnostic. */
13855 finish_expr_stmt (exprstmt);
13856
13857 /* Run destructors for all virtual baseclasses. */
13858 if (TYPE_USES_VIRTUAL_BASECLASSES (current_class_type))
13859 {
13860 tree vbases = nreverse (copy_list (CLASSTYPE_VBASECLASSES (current_class_type)));
13861 tree if_stmt = begin_if_stmt ();
13862 finish_if_stmt_cond (build (BIT_AND_EXPR, integer_type_node,
13863 current_in_charge_parm,
13864 integer_two_node),
13865 if_stmt);
13866
13867 while (vbases)
13868 {
13869 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (BINFO_TYPE (vbases)))
13870 {
13871 tree vb = get_vbase
13872 (BINFO_TYPE (vbases),
13873 TYPE_BINFO (current_class_type));
13874 finish_expr_stmt
13875 (build_scoped_method_call
13876 (current_class_ref, vb, dtor_identifier,
13877 build_tree_list (NULL_TREE, integer_zero_node)));
13878 }
13879 vbases = TREE_CHAIN (vbases);
13880 }
13881
13882 finish_then_clause (if_stmt);
13883 finish_if_stmt ();
13884 }
13885 }
13886
13887 virtual_size = c_sizeof (current_class_type);
13888
13889 /* At the end, call delete if that's what's requested. */
13890
13891 /* FDIS sez: At the point of definition of a virtual destructor
13892 (including an implicit definition), non-placement operator delete
13893 shall be looked up in the scope of the destructor's class and if
13894 found shall be accessible and unambiguous.
13895
13896 This is somewhat unclear, but I take it to mean that if the class
13897 only defines placement deletes we don't do anything here. So we
13898 pass LOOKUP_SPECULATIVELY; delete_sanity will complain for us if
13899 they ever try to delete one of these. */
13900 if (TYPE_GETS_REG_DELETE (current_class_type)
13901 || TYPE_USES_VIRTUAL_BASECLASSES (current_class_type))
13902 {
13903 tree if_stmt;
13904
13905 exprstmt = build_op_delete_call
13906 (DELETE_EXPR, current_class_ptr, virtual_size,
13907 LOOKUP_NORMAL | LOOKUP_SPECULATIVELY, NULL_TREE);
13908
13909 if_stmt = begin_if_stmt ();
13910 finish_if_stmt_cond (build (BIT_AND_EXPR, integer_type_node,
13911 current_in_charge_parm,
13912 integer_one_node),
13913 if_stmt);
13914 finish_expr_stmt (exprstmt);
13915 finish_then_clause (if_stmt);
13916 finish_if_stmt ();
13917 }
13918
13919 /* Close the block we started above. */
13920 finish_compound_stmt (/*has_no_scope=*/0, compound_stmt);
13921 }
13922
13923 /* Finish up a function declaration and compile that function
13924 all the way to assembler language output. The free the storage
13925 for the function definition.
13926
13927 FLAGS is a bitwise or of the following values:
13928 1 - CALL_POPLEVEL
13929 An extra call to poplevel (and expand_end_bindings) must be
13930 made to take care of the binding contour for the base
13931 initializers. This is only relevant for constructors.
13932 2 - INCLASS_INLINE
13933 We just finished processing the body of an in-class inline
13934 function definition. (This processing will have taken place
13935 after the class definition is complete.) */
13936
13937 tree
13938 finish_function (flags)
13939 int flags;
13940 {
13941 register tree fndecl = current_function_decl;
13942 tree fntype, ctype = NULL_TREE;
13943 /* Label to use if this function is supposed to return a value. */
13944 tree no_return_label = NULL_TREE;
13945 int call_poplevel = (flags & 1) != 0;
13946 int inclass_inline = (flags & 2) != 0;
13947 int expand_p;
13948 int nested;
13949 int current_line = lineno;
13950
13951 /* When we get some parse errors, we can end up without a
13952 current_function_decl, so cope. */
13953 if (fndecl == NULL_TREE)
13954 return error_mark_node;
13955
13956 nested = function_depth > 1;
13957 fntype = TREE_TYPE (fndecl);
13958
13959 /* TREE_READONLY (fndecl) = 1;
13960 This caused &foo to be of type ptr-to-const-function
13961 which then got a warning when stored in a ptr-to-function variable. */
13962
13963 /* This happens on strange parse errors. */
13964 if (! current_function_parms_stored)
13965 {
13966 call_poplevel = 0;
13967 store_parm_decls ();
13968 }
13969
13970 /* For a cloned function, we've already got all the code we need;
13971 there's no need to add any extra bits. */
13972 if (building_stmt_tree () && DECL_CLONED_FUNCTION_P (fndecl))
13973 ;
13974 else if (building_stmt_tree ())
13975 {
13976 if (DECL_CONSTRUCTOR_P (fndecl))
13977 {
13978 finish_constructor_body ();
13979 if (call_poplevel)
13980 do_poplevel ();
13981 }
13982 else if (DECL_DESTRUCTOR_P (fndecl) && !processing_template_decl)
13983 finish_destructor_body ();
13984 else if (DECL_MAIN_P (fndecl))
13985 {
13986 /* Make it so that `main' always returns 0 by default. */
13987 #ifdef VMS
13988 finish_return_stmt (integer_one_node);
13989 #else
13990 finish_return_stmt (integer_zero_node);
13991 #endif
13992 }
13993
13994 /* Finish dealing with exception specifiers. */
13995 if (flag_exceptions && !processing_template_decl
13996 && flag_enforce_eh_specs
13997 && TYPE_RAISES_EXCEPTIONS (TREE_TYPE (current_function_decl)))
13998 expand_end_eh_spec (TYPE_RAISES_EXCEPTIONS
13999 (TREE_TYPE (current_function_decl)),
14000 current_eh_spec_try_block);
14001 }
14002 else
14003 {
14004 #if 0
14005 if (write_symbols != NO_DEBUG /*&& TREE_CODE (fntype) != METHOD_TYPE*/)
14006 {
14007 /* Keep this code around in case we later want to control debug info
14008 based on whether a type is "used". (jason 1999-11-11) */
14009
14010 tree ttype = target_type (fntype);
14011 tree parmdecl;
14012
14013 if (IS_AGGR_TYPE (ttype))
14014 /* Let debugger know it should output info for this type. */
14015 note_debug_info_needed (ttype);
14016
14017 for (parmdecl = DECL_ARGUMENTS (fndecl); parmdecl; parmdecl = TREE_CHAIN (parmdecl))
14018 {
14019 ttype = target_type (TREE_TYPE (parmdecl));
14020 if (IS_AGGR_TYPE (ttype))
14021 /* Let debugger know it should output info for this type. */
14022 note_debug_info_needed (ttype);
14023 }
14024 }
14025 #endif
14026
14027 /* Clean house because we will need to reorder insns here. */
14028 do_pending_stack_adjust ();
14029
14030 if (dtor_label)
14031 ;
14032 else if (DECL_CONSTRUCTOR_P (fndecl))
14033 {
14034 if (call_poplevel)
14035 do_poplevel ();
14036 }
14037 else if (return_label != NULL_RTX
14038 && flag_this_is_variable <= 0
14039 && current_function_return_value == NULL_TREE
14040 && ! DECL_NAME (DECL_RESULT (current_function_decl)))
14041 no_return_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
14042
14043 if (flag_exceptions)
14044 expand_exception_blocks ();
14045
14046 /* If this function is supposed to return a value, ensure that
14047 we do not fall into the cleanups by mistake. The end of our
14048 function will look like this:
14049
14050 user code (may have return stmt somewhere)
14051 goto no_return_label
14052 cleanup_label:
14053 cleanups
14054 goto return_label
14055 no_return_label:
14056 NOTE_INSN_FUNCTION_END
14057 return_label:
14058 things for return
14059
14060 If the user omits a return stmt in the USER CODE section, we
14061 will have a control path which reaches NOTE_INSN_FUNCTION_END.
14062 Otherwise, we won't. */
14063 if (no_return_label)
14064 {
14065 DECL_CONTEXT (no_return_label) = fndecl;
14066 DECL_INITIAL (no_return_label) = error_mark_node;
14067 DECL_SOURCE_FILE (no_return_label) = input_filename;
14068 DECL_SOURCE_LINE (no_return_label) = current_line;
14069 expand_goto (no_return_label);
14070 }
14071
14072 if (cleanup_label)
14073 {
14074 /* Remove the binding contour which is used
14075 to catch cleanup-generated temporaries. */
14076 expand_end_bindings (0, 0, 0);
14077 poplevel (0, 0, 0);
14078
14079 /* Emit label at beginning of cleanup code for parameters. */
14080 emit_label (cleanup_label);
14081 }
14082
14083 /* Get return value into register if that's where it's supposed
14084 to be. */
14085 if (original_result_rtx)
14086 fixup_result_decl (DECL_RESULT (fndecl), original_result_rtx);
14087
14088 /* Finish building code that will trigger warnings if users forget
14089 to make their functions return values. */
14090 if (no_return_label || cleanup_label)
14091 emit_jump (return_label);
14092 if (no_return_label)
14093 {
14094 /* We don't need to call `expand_*_return' here because we
14095 don't need any cleanups here--this path of code is only
14096 for error checking purposes. */
14097 expand_label (no_return_label);
14098 }
14099
14100 /* We hard-wired immediate_size_expand to zero in
14101 start_function. Expand_function_end will decrement this
14102 variable. So, we set the variable to one here, so that after
14103 the decrement it will remain zero. */
14104 immediate_size_expand = 1;
14105
14106 /* Generate rtl for function exit. */
14107 expand_function_end (input_filename, current_line, 1);
14108 }
14109
14110 /* We have to save this value here in case
14111 maybe_end_member_template_processing decides to pop all the
14112 template parameters. */
14113 expand_p = !building_stmt_tree ();
14114
14115 /* If we're saving up tree structure, tie off the function now. */
14116 if (!expand_p)
14117 finish_stmt_tree (&DECL_SAVED_TREE (fndecl));
14118
14119 /* This must come after expand_function_end because cleanups might
14120 have declarations (from inline functions) that need to go into
14121 this function's blocks. */
14122 if (doing_semantic_analysis_p ())
14123 {
14124 if (current_binding_level->parm_flag != 1)
14125 my_friendly_abort (122);
14126 poplevel (1, 0, 1);
14127 }
14128
14129 /* Remember that we were in class scope. */
14130 if (current_class_name)
14131 ctype = current_class_type;
14132
14133 /* Must mark the RESULT_DECL as being in this function. */
14134 DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
14135
14136 /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
14137 to the FUNCTION_DECL node itself. */
14138 BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
14139
14140 /* Save away current state, if appropriate. */
14141 if (!expanding_p && !processing_template_decl)
14142 save_function_data (fndecl);
14143
14144 /* If this function calls `setjmp' it cannot be inlined. When
14145 `longjmp' is called it is not guaranteed to restore the value of
14146 local variables that have been modified since the call to
14147 `setjmp'. So, if were to inline this function into some caller
14148 `c', then when we `longjmp', we might not restore all variables
14149 in `c'. (It might seem, at first blush, that there's no way for
14150 this function to modify local variables in `c', but their
14151 addresses may have been stored somewhere accessible to this
14152 function.) */
14153 if (!expanding_p && !processing_template_decl && calls_setjmp_p (fndecl))
14154 DECL_UNINLINABLE (fndecl) = 1;
14155
14156 if (expand_p)
14157 {
14158 int returns_null;
14159 int returns_value;
14160
14161 /* So we can tell if jump_optimize sets it to 1. */
14162 can_reach_end = 0;
14163
14164 /* Before we call rest_of_compilation (which will pop the
14165 CURRENT_FUNCTION), we must save these values. */
14166 returns_null = current_function_returns_null;
14167 returns_value = current_function_returns_value;
14168
14169 /* If this is a nested function (like a template instantiation
14170 that we're compiling in the midst of compiling something
14171 else), push a new GC context. That will keep local variables
14172 on the stack from being collected while we're doing the
14173 compilation of this function. */
14174 if (function_depth > 1)
14175 ggc_push_context ();
14176
14177 /* Run the optimizers and output the assembler code for this
14178 function. */
14179 if (DECL_ARTIFICIAL (fndecl))
14180 {
14181 /* Do we really *want* to inline this synthesized method? */
14182
14183 int save_fif = flag_inline_functions;
14184 flag_inline_functions = 1;
14185
14186 /* Turn off DECL_INLINE for the moment so function_cannot_inline_p
14187 will check our size. */
14188 DECL_INLINE (fndecl) = 0;
14189
14190 rest_of_compilation (fndecl);
14191 flag_inline_functions = save_fif;
14192 }
14193 else
14194 rest_of_compilation (fndecl);
14195
14196 /* Undo the call to ggc_push_context above. */
14197 if (function_depth > 1)
14198 ggc_pop_context ();
14199
14200 if (DECL_SAVED_INSNS (fndecl) && ! TREE_ASM_WRITTEN (fndecl))
14201 {
14202 /* Set DECL_EXTERNAL so that assemble_external will be called as
14203 necessary. We'll clear it again in finish_file. */
14204 if (! DECL_EXTERNAL (fndecl))
14205 DECL_NOT_REALLY_EXTERN (fndecl) = 1;
14206 DECL_EXTERNAL (fndecl) = 1;
14207 defer_fn (fndecl);
14208 }
14209
14210 #if 0
14211 /* Keep this code around in case we later want to control debug info
14212 based on whether a type is "used". (jason 1999-11-11) */
14213
14214 if (ctype && TREE_ASM_WRITTEN (fndecl))
14215 note_debug_info_needed (ctype);
14216 #endif
14217
14218 returns_null |= can_reach_end;
14219
14220 /* Since we don't normally go through c_expand_return for constructors,
14221 this normally gets the wrong value.
14222 Also, named return values have their return codes emitted after
14223 NOTE_INSN_FUNCTION_END, confusing jump.c. */
14224 if (DECL_CONSTRUCTOR_P (fndecl)
14225 || DECL_NAME (DECL_RESULT (fndecl)) != NULL_TREE)
14226 returns_null = 0;
14227
14228 if (TREE_THIS_VOLATILE (fndecl) && returns_null)
14229 cp_warning ("`noreturn' function `%D' does return", fndecl);
14230 else if ((warn_return_type || pedantic)
14231 && returns_null
14232 && TREE_CODE (TREE_TYPE (fntype)) != VOID_TYPE)
14233 {
14234 /* If this function returns non-void and control can drop through,
14235 complain. */
14236 cp_warning ("control reaches end of non-void function `%D'", fndecl);
14237 }
14238 /* With just -W, complain only if function returns both with
14239 and without a value. */
14240 else if (extra_warnings && returns_value && returns_null)
14241 warning ("this function may return with or without a value");
14242 }
14243 else
14244 {
14245 /* Clear out memory we no longer need. */
14246 free_after_parsing (cfun);
14247 /* Since we never call rest_of_compilation, we never clear
14248 CFUN. Do so explicitly. */
14249 free_after_compilation (cfun);
14250 cfun = NULL;
14251 }
14252
14253 /* If this is a in-class inline definition, we may have to pop the
14254 bindings for the template parameters that we added in
14255 maybe_begin_member_template_processing when start_function was
14256 called. */
14257 if (inclass_inline)
14258 maybe_end_member_template_processing ();
14259
14260 /* Leave the scope of the class. */
14261 if (ctype)
14262 pop_nested_class ();
14263
14264 --function_depth;
14265
14266 if (!DECL_SAVED_INSNS (fndecl) && !DECL_SAVED_FUNCTION_DATA (fndecl)
14267 && !(flag_inline_trees && DECL_INLINE (fndecl)))
14268 {
14269 tree t;
14270
14271 /* Stop pointing to the local nodes about to be freed. */
14272 /* But DECL_INITIAL must remain nonzero so we know this
14273 was an actual function definition. */
14274 DECL_INITIAL (fndecl) = error_mark_node;
14275 for (t = DECL_ARGUMENTS (fndecl); t; t = TREE_CHAIN (t))
14276 DECL_RTL (t) = DECL_INCOMING_RTL (t) = NULL_RTX;
14277 }
14278
14279 if (DECL_STATIC_CONSTRUCTOR (fndecl))
14280 static_ctors = tree_cons (NULL_TREE, fndecl, static_ctors);
14281 if (DECL_STATIC_DESTRUCTOR (fndecl))
14282 static_dtors = tree_cons (NULL_TREE, fndecl, static_dtors);
14283
14284 /* Clean up. */
14285 if (! nested)
14286 {
14287 /* Let the error reporting routines know that we're outside a
14288 function. For a nested function, this value is used in
14289 pop_cp_function_context and then reset via pop_function_context. */
14290 current_function_decl = NULL_TREE;
14291 /* We don't really care about obstacks, but the middle-end
14292 sometimes cares on what obstck things are located. */
14293 permanent_allocation (1);
14294 }
14295
14296 return fndecl;
14297 }
14298 \f
14299 /* Create the FUNCTION_DECL for a function definition.
14300 DECLSPECS and DECLARATOR are the parts of the declaration;
14301 they describe the return type and the name of the function,
14302 but twisted together in a fashion that parallels the syntax of C.
14303
14304 This function creates a binding context for the function body
14305 as well as setting up the FUNCTION_DECL in current_function_decl.
14306
14307 Returns a FUNCTION_DECL on success.
14308
14309 If the DECLARATOR is not suitable for a function (it defines a datum
14310 instead), we return 0, which tells yyparse to report a parse error.
14311
14312 May return void_type_node indicating that this method is actually
14313 a friend. See grokfield for more details.
14314
14315 Came here with a `.pushlevel' .
14316
14317 DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
14318 CHANGES TO CODE IN `grokfield'. */
14319
14320 tree
14321 start_method (declspecs, declarator, attrlist)
14322 tree declarator, declspecs, attrlist;
14323 {
14324 tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
14325 attrlist);
14326
14327 /* Something too ugly to handle. */
14328 if (fndecl == NULL_TREE)
14329 return NULL_TREE;
14330
14331 /* Pass friends other than inline friend functions back. */
14332 if (fndecl == void_type_node)
14333 return fndecl;
14334
14335 if (TREE_CODE (fndecl) != FUNCTION_DECL)
14336 /* Not a function, tell parser to report parse error. */
14337 return NULL_TREE;
14338
14339 if (DECL_IN_AGGR_P (fndecl))
14340 {
14341 if (IDENTIFIER_ERROR_LOCUS (DECL_ASSEMBLER_NAME (fndecl)) != current_class_type)
14342 {
14343 if (DECL_CONTEXT (fndecl)
14344 && TREE_CODE( DECL_CONTEXT (fndecl)) != NAMESPACE_DECL)
14345 cp_error ("`%D' is already defined in class %s", fndecl,
14346 TYPE_NAME_STRING (DECL_CONTEXT (fndecl)));
14347 }
14348 return void_type_node;
14349 }
14350
14351 check_template_shadow (fndecl);
14352
14353 DECL_THIS_INLINE (fndecl) = 1;
14354
14355 if (flag_default_inline)
14356 DECL_INLINE (fndecl) = 1;
14357
14358 /* We process method specializations in finish_struct_1. */
14359 if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
14360 fndecl = push_template_decl (fndecl);
14361
14362 if (! DECL_FRIEND_P (fndecl))
14363 {
14364 if (TREE_CHAIN (fndecl))
14365 {
14366 fndecl = copy_node (fndecl);
14367 TREE_CHAIN (fndecl) = NULL_TREE;
14368 }
14369
14370 if (DECL_CONSTRUCTOR_P (fndecl))
14371 {
14372 if (! grok_ctor_properties (current_class_type, fndecl))
14373 return void_type_node;
14374 }
14375 else if (IDENTIFIER_OPNAME_P (DECL_NAME (fndecl)))
14376 grok_op_properties (fndecl, DECL_VIRTUAL_P (fndecl), 0);
14377 }
14378
14379 cp_finish_decl (fndecl, NULL_TREE, NULL_TREE, 0);
14380
14381 /* Make a place for the parms */
14382 pushlevel (0);
14383 current_binding_level->parm_flag = 1;
14384
14385 DECL_IN_AGGR_P (fndecl) = 1;
14386 return fndecl;
14387 }
14388
14389 /* Go through the motions of finishing a function definition.
14390 We don't compile this method until after the whole class has
14391 been processed.
14392
14393 FINISH_METHOD must return something that looks as though it
14394 came from GROKFIELD (since we are defining a method, after all).
14395
14396 This is called after parsing the body of the function definition.
14397 STMTS is the chain of statements that makes up the function body.
14398
14399 DECL is the ..._DECL that `start_method' provided. */
14400
14401 tree
14402 finish_method (decl)
14403 tree decl;
14404 {
14405 register tree fndecl = decl;
14406 tree old_initial;
14407
14408 register tree link;
14409
14410 if (decl == void_type_node)
14411 return decl;
14412
14413 old_initial = DECL_INITIAL (fndecl);
14414
14415 /* Undo the level for the parms (from start_method).
14416 This is like poplevel, but it causes nothing to be
14417 saved. Saving information here confuses symbol-table
14418 output routines. Besides, this information will
14419 be correctly output when this method is actually
14420 compiled. */
14421
14422 /* Clear out the meanings of the local variables of this level;
14423 also record in each decl which block it belongs to. */
14424
14425 for (link = current_binding_level->names; link; link = TREE_CHAIN (link))
14426 {
14427 if (DECL_NAME (link) != NULL_TREE)
14428 pop_binding (DECL_NAME (link), link);
14429 my_friendly_assert (TREE_CODE (link) != FUNCTION_DECL, 163);
14430 DECL_CONTEXT (link) = NULL_TREE;
14431 }
14432
14433 GNU_xref_end_scope ((HOST_WIDE_INT) current_binding_level,
14434 (HOST_WIDE_INT) current_binding_level->level_chain,
14435 current_binding_level->parm_flag,
14436 current_binding_level->keep);
14437
14438 poplevel (0, 0, 0);
14439
14440 DECL_INITIAL (fndecl) = old_initial;
14441
14442 /* We used to check if the context of FNDECL was different from
14443 current_class_type as another way to get inside here. This didn't work
14444 for String.cc in libg++. */
14445 if (DECL_FRIEND_P (fndecl))
14446 {
14447 CLASSTYPE_INLINE_FRIENDS (current_class_type)
14448 = tree_cons (NULL_TREE, fndecl, CLASSTYPE_INLINE_FRIENDS (current_class_type));
14449 decl = void_type_node;
14450 }
14451
14452 return decl;
14453 }
14454 \f
14455 /* Called when a new struct TYPE is defined.
14456 If this structure or union completes the type of any previous
14457 variable declaration, lay it out and output its rtl. */
14458
14459 void
14460 hack_incomplete_structures (type)
14461 tree type;
14462 {
14463 tree *list;
14464 struct binding_level *level;
14465
14466 if (!type) /* Don't do this for class templates. */
14467 return;
14468
14469 if (namespace_bindings_p ())
14470 {
14471 level = 0;
14472 list = &namespace_scope_incomplete;
14473 }
14474 else
14475 {
14476 level = innermost_nonclass_level ();
14477 list = &level->incomplete;
14478 }
14479
14480 while (1)
14481 {
14482 while (*list)
14483 {
14484 tree decl = TREE_VALUE (*list);
14485 if ((decl && TREE_TYPE (decl) == type)
14486 || (TREE_TYPE (decl)
14487 && TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
14488 && TREE_TYPE (TREE_TYPE (decl)) == type))
14489 {
14490 int toplevel = toplevel_bindings_p ();
14491 if (TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
14492 && TREE_TYPE (TREE_TYPE (decl)) == type)
14493 layout_type (TREE_TYPE (decl));
14494 layout_decl (decl, 0);
14495 rest_of_decl_compilation (decl, NULL_PTR, toplevel, 0);
14496 if (! toplevel)
14497 {
14498 tree cleanup;
14499 expand_decl (decl);
14500 cleanup = maybe_build_cleanup (decl);
14501 expand_decl_init (decl);
14502 if (! expand_decl_cleanup (decl, cleanup))
14503 cp_error ("parser lost in parsing declaration of `%D'",
14504 decl);
14505 }
14506 *list = TREE_CHAIN (*list);
14507 }
14508 else
14509 list = &TREE_CHAIN (*list);
14510 }
14511
14512 /* Keep looking through artificial binding levels generated
14513 for local variables. */
14514 if (level && level->keep == 2)
14515 {
14516 level = level->level_chain;
14517 list = &level->incomplete;
14518 }
14519 else
14520 break;
14521 }
14522 }
14523
14524 /* If DECL is of a type which needs a cleanup, build that cleanup here.
14525 See build_delete for information about AUTO_DELETE. */
14526
14527 static tree
14528 maybe_build_cleanup_1 (decl, auto_delete)
14529 tree decl, auto_delete;
14530 {
14531 tree type = TREE_TYPE (decl);
14532 if (type != error_mark_node && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
14533 {
14534 int flags = LOOKUP_NORMAL|LOOKUP_DESTRUCTOR;
14535 tree rval;
14536
14537 if (TREE_CODE (type) == ARRAY_TYPE)
14538 rval = decl;
14539 else
14540 {
14541 mark_addressable (decl);
14542 rval = build_unary_op (ADDR_EXPR, decl, 0);
14543 }
14544
14545 /* Optimize for space over speed here. */
14546 if (! TYPE_USES_VIRTUAL_BASECLASSES (type)
14547 || flag_expensive_optimizations)
14548 flags |= LOOKUP_NONVIRTUAL;
14549
14550 rval = build_delete (TREE_TYPE (rval), rval, auto_delete, flags, 0);
14551
14552 if (TYPE_USES_VIRTUAL_BASECLASSES (type)
14553 && ! TYPE_HAS_DESTRUCTOR (type))
14554 rval = build_compound_expr (tree_cons (NULL_TREE, rval,
14555 build_tree_list (NULL_TREE, build_vbase_delete (type, decl))));
14556
14557 return rval;
14558 }
14559 return 0;
14560 }
14561
14562 /* If DECL is of a type which needs a cleanup, build that cleanup
14563 here. The cleanup does free the storage with a call to delete. */
14564
14565 tree
14566 maybe_build_cleanup_and_delete (decl)
14567 tree decl;
14568 {
14569 return maybe_build_cleanup_1 (decl, integer_three_node);
14570 }
14571
14572 /* If DECL is of a type which needs a cleanup, build that cleanup
14573 here. The cleanup does not free the storage with a call a delete. */
14574
14575 tree
14576 maybe_build_cleanup (decl)
14577 tree decl;
14578 {
14579 return maybe_build_cleanup_1 (decl, integer_two_node);
14580 }
14581 \f
14582 /* Expand a C++ expression at the statement level.
14583 This is needed to ferret out nodes which have UNKNOWN_TYPE.
14584 The C++ type checker should get all of these out when
14585 expressions are combined with other, type-providing, expressions,
14586 leaving only orphan expressions, such as:
14587
14588 &class::bar; / / takes its address, but does nothing with it. */
14589
14590 void
14591 cplus_expand_expr_stmt (exp)
14592 tree exp;
14593 {
14594 #if 0
14595 /* We should do this eventually, but right now this causes regex.o from
14596 libg++ to miscompile, and tString to core dump. */
14597 exp = build1 (CLEANUP_POINT_EXPR, TREE_TYPE (exp), exp);
14598 #endif
14599
14600 /* If we don't do this, we end up down inside expand_expr
14601 trying to do TYPE_MODE on the ERROR_MARK, and really
14602 go outside the bounds of the type. */
14603 if (exp != error_mark_node)
14604 expand_expr_stmt (exp);
14605 }
14606
14607 /* When a stmt has been parsed, this function is called. */
14608
14609 void
14610 finish_stmt ()
14611 {
14612 /* Always assume this statement was not an expression statement. If
14613 it actually was an expression statement, its our callers
14614 responsibility to fix this up. */
14615 last_expr_type = NULL_TREE;
14616 }
14617
14618 /* DECL was originally constructed as a non-static member function,
14619 but turned out to be static. Update it accordingly. */
14620
14621 void
14622 revert_static_member_fn (decl)
14623 tree decl;
14624 {
14625 tree tmp;
14626 tree function = TREE_TYPE (decl);
14627 tree args = TYPE_ARG_TYPES (function);
14628
14629 if (CP_TYPE_QUALS (TREE_TYPE (TREE_VALUE (args)))
14630 != TYPE_UNQUALIFIED)
14631 cp_error ("static member function `%#D' declared with type qualifiers",
14632 *decl);
14633
14634 args = TREE_CHAIN (args);
14635 tmp = build_function_type (TREE_TYPE (function), args);
14636 tmp = build_qualified_type (tmp, CP_TYPE_QUALS (function));
14637 tmp = build_exception_variant (tmp,
14638 TYPE_RAISES_EXCEPTIONS (function));
14639 TREE_TYPE (decl) = tmp;
14640 if (DECL_ARGUMENTS (decl))
14641 DECL_ARGUMENTS (decl) = TREE_CHAIN (DECL_ARGUMENTS (decl));
14642 DECL_STATIC_FUNCTION_P (decl) = 1;
14643 }
14644
14645 /* Initialize the variables used during compilation of a C++
14646 function. */
14647
14648 static void
14649 push_cp_function_context (f)
14650 struct function *f;
14651 {
14652 struct language_function *p
14653 = ((struct language_function *)
14654 xcalloc (1, sizeof (struct language_function)));
14655 f->language = p;
14656
14657 /* It takes an explicit call to expand_body to generate RTL for a
14658 function. */
14659 expanding_p = 0;
14660
14661 /* Whenever we start a new function, we destroy temporaries in the
14662 usual way. */
14663 stmts_are_full_exprs_p = 1;
14664 }
14665
14666 /* Free the language-specific parts of F, now that we've finished
14667 compiling the function. */
14668
14669 static void
14670 pop_cp_function_context (f)
14671 struct function *f;
14672 {
14673 if (f->language)
14674 free (f->language);
14675 f->language = 0;
14676 }
14677
14678 /* Mark P for GC. */
14679
14680 static void
14681 mark_lang_function (p)
14682 struct language_function *p;
14683 {
14684 if (!p)
14685 return;
14686
14687 ggc_mark_tree (p->x_named_labels);
14688 ggc_mark_tree (p->x_ctor_label);
14689 ggc_mark_tree (p->x_dtor_label);
14690 ggc_mark_tree (p->x_base_init_list);
14691 ggc_mark_tree (p->x_member_init_list);
14692 ggc_mark_tree (p->x_current_class_ptr);
14693 ggc_mark_tree (p->x_current_class_ref);
14694 ggc_mark_tree (p->x_eh_spec_try_block);
14695 ggc_mark_tree (p->x_scope_stmt_stack);
14696
14697 ggc_mark_rtx (p->x_result_rtx);
14698
14699 mark_stmt_tree (&p->x_stmt_tree);
14700 mark_binding_level (&p->bindings);
14701 }
14702
14703 /* Mark the language-specific data in F for GC. */
14704
14705 static void
14706 mark_cp_function_context (f)
14707 struct function *f;
14708 {
14709 mark_lang_function (f->language);
14710 }
14711
14712 void
14713 lang_mark_false_label_stack (l)
14714 struct label_node *l;
14715 {
14716 /* C++ doesn't use false_label_stack. It better be NULL. */
14717 my_friendly_assert (l == NULL, 19990904);
14718 }
14719
14720 void
14721 lang_mark_tree (t)
14722 tree t;
14723 {
14724 enum tree_code code = TREE_CODE (t);
14725 if (code == IDENTIFIER_NODE)
14726 {
14727 struct lang_identifier *li = (struct lang_identifier *) t;
14728 struct lang_id2 *li2 = li->x;
14729 ggc_mark_tree (li->namespace_bindings);
14730 ggc_mark_tree (li->bindings);
14731 ggc_mark_tree (li->class_value);
14732 ggc_mark_tree (li->class_template_info);
14733
14734 if (li2)
14735 {
14736 ggc_mark_tree (li2->label_value);
14737 ggc_mark_tree (li2->implicit_decl);
14738 ggc_mark_tree (li2->error_locus);
14739 }
14740 }
14741 else if (code == CPLUS_BINDING)
14742 {
14743 if (BINDING_HAS_LEVEL_P (t))
14744 mark_binding_level (&BINDING_LEVEL (t));
14745 else
14746 ggc_mark_tree (BINDING_SCOPE (t));
14747 ggc_mark_tree (BINDING_VALUE (t));
14748 }
14749 else if (code == OVERLOAD)
14750 ggc_mark_tree (OVL_FUNCTION (t));
14751 else if (code == TEMPLATE_PARM_INDEX)
14752 ggc_mark_tree (TEMPLATE_PARM_DECL (t));
14753 else if (TREE_CODE_CLASS (code) == 'd')
14754 {
14755 struct lang_decl *ld = DECL_LANG_SPECIFIC (t);
14756
14757 if (ld)
14758 {
14759 ggc_mark (ld);
14760 if (!DECL_GLOBAL_CTOR_P (t) && !DECL_GLOBAL_DTOR_P (t))
14761 ggc_mark_tree (ld->decl_flags.u2.access);
14762 ggc_mark_tree (ld->decl_flags.context);
14763 if (TREE_CODE (t) != NAMESPACE_DECL)
14764 ggc_mark_tree (ld->decl_flags.u.template_info);
14765 else
14766 mark_binding_level (&NAMESPACE_LEVEL (t));
14767 if (CAN_HAVE_FULL_LANG_DECL_P (t))
14768 {
14769 ggc_mark_tree (ld->befriending_classes);
14770 ggc_mark_tree (ld->saved_tree);
14771 ggc_mark_tree (ld->cloned_function);
14772 if (TREE_CODE (t) == TYPE_DECL)
14773 ggc_mark_tree (ld->u.sorted_fields);
14774 else if (TREE_CODE (t) == FUNCTION_DECL
14775 && !DECL_PENDING_INLINE_P (t))
14776 mark_lang_function (DECL_SAVED_FUNCTION_DATA (t));
14777 }
14778 }
14779 }
14780 else if (TREE_CODE_CLASS (code) == 't')
14781 {
14782 struct lang_type *lt = TYPE_LANG_SPECIFIC (t);
14783
14784 if (lt && !(TREE_CODE (t) == POINTER_TYPE
14785 && TREE_CODE (TREE_TYPE (t)) == METHOD_TYPE))
14786 {
14787 ggc_mark (lt);
14788 ggc_mark_tree (lt->vfields);
14789 ggc_mark_tree (lt->vbases);
14790 ggc_mark_tree (lt->tags);
14791 ggc_mark_tree (lt->search_slot);
14792 ggc_mark_tree (lt->size);
14793 ggc_mark_tree (lt->pure_virtuals);
14794 ggc_mark_tree (lt->friend_classes);
14795 ggc_mark_tree (lt->rtti);
14796 ggc_mark_tree (lt->methods);
14797 ggc_mark_tree (lt->template_info);
14798 ggc_mark_tree (lt->befriending_classes);
14799 }
14800 else if (lt)
14801 /* In the case of pointer-to-member function types, the
14802 TYPE_LANG_SPECIFIC is really just a tree. */
14803 ggc_mark_tree ((tree) lt);
14804 }
14805 }
This page took 0.653933 seconds and 6 git commands to generate.