]> gcc.gnu.org Git - gcc.git/blob - gcc/cp/decl.c
cp-tree.h (scratch_tree_cons): Remove.
[gcc.git] / gcc / cp / decl.c
1 /* Process declarations and variables for C compiler.
2 Copyright (C) 1988, 92-98, 1999 Free Software Foundation, Inc.
3 Contributed by Michael Tiemann (tiemann@cygnus.com)
4
5 This file is part of GNU CC.
6
7 GNU CC is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2, or (at your option)
10 any later version.
11
12 GNU CC is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with GNU CC; see the file COPYING. If not, write to
19 the Free Software Foundation, 59 Temple Place - Suite 330,
20 Boston, MA 02111-1307, USA. */
21
22
23 /* Process declarations and symbol lookup for C front end.
24 Also constructs types; the standard scalar types at initialization,
25 and structure, union, array and enum types when they are declared. */
26
27 /* ??? not all decl nodes are given the most useful possible
28 line numbers. For example, the CONST_DECLs for enum values. */
29
30 #include "config.h"
31 #include "system.h"
32 #include "tree.h"
33 #include "rtl.h"
34 #include "flags.h"
35 #include "cp-tree.h"
36 #include "decl.h"
37 #include "lex.h"
38 #include <signal.h>
39 #include "obstack.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 #define obstack_chunk_alloc xmalloc
49 #define obstack_chunk_free free
50
51 extern struct obstack permanent_obstack;
52 extern struct obstack* saveable_obstack;
53
54 extern int current_class_depth;
55
56 extern tree static_ctors, static_dtors;
57
58 extern tree global_namespace;
59
60 extern int (*valid_lang_attribute) PROTO ((tree, tree, tree, tree));
61
62 /* Use garbage collection. */
63
64 int ggc_p = 1;
65
66 /* Obstack used for remembering local class declarations (like
67 enums and static (const) members. */
68 #include "stack.h"
69 struct obstack decl_obstack;
70 static struct stack_level *decl_stack;
71
72 #ifndef CHAR_TYPE_SIZE
73 #define CHAR_TYPE_SIZE BITS_PER_UNIT
74 #endif
75
76 #ifndef SHORT_TYPE_SIZE
77 #define SHORT_TYPE_SIZE (BITS_PER_UNIT * MIN ((UNITS_PER_WORD + 1) / 2, 2))
78 #endif
79
80 #ifndef INT_TYPE_SIZE
81 #define INT_TYPE_SIZE BITS_PER_WORD
82 #endif
83
84 #ifndef LONG_TYPE_SIZE
85 #define LONG_TYPE_SIZE BITS_PER_WORD
86 #endif
87
88 #ifndef LONG_LONG_TYPE_SIZE
89 #define LONG_LONG_TYPE_SIZE (BITS_PER_WORD * 2)
90 #endif
91
92 #ifndef WCHAR_UNSIGNED
93 #define WCHAR_UNSIGNED 0
94 #endif
95
96 #ifndef FLOAT_TYPE_SIZE
97 #define FLOAT_TYPE_SIZE BITS_PER_WORD
98 #endif
99
100 #ifndef DOUBLE_TYPE_SIZE
101 #define DOUBLE_TYPE_SIZE (BITS_PER_WORD * 2)
102 #endif
103
104 #ifndef LONG_DOUBLE_TYPE_SIZE
105 #define LONG_DOUBLE_TYPE_SIZE (BITS_PER_WORD * 2)
106 #endif
107
108 #ifndef BOOL_TYPE_SIZE
109 #ifdef SLOW_BYTE_ACCESS
110 #define BOOL_TYPE_SIZE ((SLOW_BYTE_ACCESS) ? (POINTER_SIZE) : (CHAR_TYPE_SIZE))
111 #else
112 #define BOOL_TYPE_SIZE CHAR_TYPE_SIZE
113 #endif
114 #endif
115
116 /* We let tm.h override the types used here, to handle trivial differences
117 such as the choice of unsigned int or long unsigned int for size_t.
118 When machines start needing nontrivial differences in the size type,
119 it would be best to do something here to figure out automatically
120 from other information what type to use. */
121
122 #ifndef SIZE_TYPE
123 #define SIZE_TYPE "long unsigned int"
124 #endif
125
126 #ifndef PTRDIFF_TYPE
127 #define PTRDIFF_TYPE "long int"
128 #endif
129
130 #ifndef WCHAR_TYPE
131 #define WCHAR_TYPE "int"
132 #endif
133
134 static tree grokparms PROTO((tree, int));
135 static const char *redeclaration_error_message PROTO((tree, tree));
136
137 static struct stack_level *push_decl_level PROTO((struct stack_level *,
138 struct obstack *));
139 static void push_binding_level PROTO((struct binding_level *, int,
140 int));
141 static void pop_binding_level PROTO((void));
142 static void suspend_binding_level PROTO((void));
143 static void resume_binding_level PROTO((struct binding_level *));
144 static struct binding_level *make_binding_level PROTO((void));
145 static void declare_namespace_level PROTO((void));
146 static void signal_catch PROTO((int)) ATTRIBUTE_NORETURN;
147 static void storedecls PROTO((tree));
148 static void require_complete_types_for_parms PROTO((tree));
149 static void push_overloaded_decl_1 PROTO((tree));
150 static int ambi_op_p PROTO((tree));
151 static int unary_op_p PROTO((tree));
152 static tree store_bindings PROTO((tree, tree));
153 static tree lookup_tag_reverse PROTO((tree, tree));
154 static tree obscure_complex_init PROTO((tree, tree));
155 static tree maybe_build_cleanup_1 PROTO((tree, tree));
156 static tree lookup_name_real PROTO((tree, int, int, int));
157 static void warn_extern_redeclared_static PROTO((tree, tree));
158 static void grok_reference_init PROTO((tree, tree, tree));
159 static tree grokfndecl PROTO((tree, tree, tree, tree, int,
160 enum overload_flags, tree,
161 tree, int, int, int, int, int, int, tree));
162 static tree grokvardecl PROTO((tree, tree, RID_BIT_TYPE *, int, int, tree));
163 static tree lookup_tag PROTO((enum tree_code, tree,
164 struct binding_level *, int));
165 static void set_identifier_type_value_with_scope
166 PROTO((tree, tree, struct binding_level *));
167 static void record_builtin_type PROTO((enum rid, const char *, tree));
168 static void record_unknown_type PROTO((tree, const char *));
169 static int member_function_or_else PROTO((tree, tree, const char *));
170 static void bad_specifiers PROTO((tree, const char *, int, int, int, int,
171 int));
172 static void lang_print_error_function PROTO((const char *));
173 static tree maybe_process_template_type_declaration PROTO((tree, int, struct binding_level*));
174 static void check_for_uninitialized_const_var PROTO((tree));
175 static unsigned long typename_hash PROTO((hash_table_key));
176 static boolean typename_compare PROTO((hash_table_key, hash_table_key));
177 static void push_binding PROTO((tree, tree, struct binding_level*));
178 static int add_binding PROTO((tree, tree));
179 static void pop_binding PROTO((tree, tree));
180 static tree local_variable_p PROTO((tree));
181 static tree find_binding PROTO((tree, tree));
182 static tree select_decl PROTO((tree, int));
183 static int lookup_flags PROTO((int, int));
184 static tree qualify_lookup PROTO((tree, int));
185 static tree record_builtin_java_type PROTO((const char *, int));
186 static const char *tag_name PROTO((enum tag_types code));
187 static void find_class_binding_level PROTO((void));
188 static struct binding_level *innermost_nonclass_level PROTO((void));
189 static tree poplevel_class PROTO((void));
190 static void warn_about_implicit_typename_lookup PROTO((tree, tree));
191 static int walk_namespaces_r PROTO((tree, walk_namespaces_fn, void *));
192 static int walk_globals_r PROTO((tree, void *));
193 static void add_decl_to_level PROTO((tree, struct binding_level *));
194 static tree make_label_decl PROTO((tree, int));
195 static void pop_label PROTO((tree));
196 static void pop_labels PROTO((tree));
197 static void maybe_deduce_size_from_array_init PROTO((tree, tree));
198 static tree layout_var_decl PROTO((tree, tree));
199 static void maybe_commonize_var PROTO((tree));
200 static tree build_cleanup_on_safe_obstack PROTO((tree));
201 static tree check_initializer PROTO((tree, tree));
202 static void make_rtl_for_nonlocal_decl PROTO((tree, tree, const char *));
203 static void push_cp_function_context PROTO((struct function *));
204 static void pop_cp_function_context PROTO((struct function *));
205 static void mark_binding_level PROTO((void *));
206 static void mark_cp_function_context PROTO((struct function *));
207 static void mark_saved_scope PROTO((void *));
208
209 #if defined (DEBUG_CP_BINDING_LEVELS)
210 static void indent PROTO((void));
211 #endif
212
213 /* A node which has tree code ERROR_MARK, and whose type is itself.
214 All erroneous expressions are replaced with this node. All functions
215 that accept nodes as arguments should avoid generating error messages
216 if this node is one of the arguments, since it is undesirable to get
217 multiple error messages from one error in the input. */
218
219 tree error_mark_node;
220
221 /* Erroneous argument lists can use this *IFF* they do not modify it. */
222 tree error_mark_list;
223
224 /* The following symbols are subsumed in the cp_global_trees array, and
225 listed here individually for documentation purposes.
226
227 C++ extensions
228 tree wchar_decl_node;
229 tree void_zero_node;
230
231 tree vtable_entry_type;
232 tree delta_type_node;
233 #if 0
234 Old rtti stuff.
235 tree __baselist_desc_type_node;
236 tree __i_desc_type_node, __m_desc_type_node;
237 tree __t_desc_array_type, __i_desc_array_type, __m_desc_array_type;
238 #endif
239 tree __t_desc_type_node;
240 #if 0
241 tree __tp_desc_type_node;
242 #endif
243 tree __access_mode_type_node;
244 tree __bltn_desc_type_node, __user_desc_type_node, __class_desc_type_node;
245 tree __ptr_desc_type_node, __attr_desc_type_node, __func_desc_type_node;
246 tree __ptmf_desc_type_node, __ptmd_desc_type_node;
247 #if 0
248 Not needed yet? May be needed one day?
249 tree __bltn_desc_array_type, __user_desc_array_type, __class_desc_array_type;
250 tree __ptr_desc_array_type, __attr_dec_array_type, __func_desc_array_type;
251 tree __ptmf_desc_array_type, __ptmd_desc_array_type;
252 #endif
253
254 tree class_star_type_node;
255 tree class_type_node, record_type_node, union_type_node, enum_type_node;
256 tree unknown_type_node;
257
258 Array type `vtable_entry_type[]'
259
260 tree vtbl_type_node;
261 tree vtbl_ptr_type_node;
262
263 Nnamespace std
264
265 tree std_node;
266
267 A FUNCTION_DECL which can call `abort'. Not necessarily the
268 one that the user will declare, but sufficient to be called
269 by routines that want to abort the program.
270
271 tree abort_fndecl;
272
273 The FUNCTION_DECL for the default `::operator delete'.
274
275 tree global_delete_fndecl;
276
277 Used by RTTI
278 tree type_info_type_node, tinfo_fn_id, tinfo_fn_type;
279
280 */
281
282 tree cp_global_trees[CPTI_MAX];
283
284 /* These can't be part of the above array, since they are declared
285 individually in tree.h, and used by the debug output routines. */
286
287 tree void_type_node;
288 tree char_type_node;
289 tree integer_type_node;
290 tree unsigned_type_node;
291
292 /* These can't be part of the above array, since they are declared
293 individially in tree.h and used by the target routines. */
294
295 tree ptr_type_node;
296 tree va_list_type_node;
297 tree null_pointer_node;
298
299 /* Indicates that there is a type value in some namespace, although
300 that is not necessarily in scope at the moment. */
301
302 static tree global_type_node;
303
304 /* Namespace std. */
305 int in_std;
306
307 /* Expect only namespace names now. */
308 static int only_namespace_names;
309
310 /* In a destructor, the last insn emitted after the start of the
311 function and the parms. */
312
313 #define last_dtor_insn cp_function_chain->x_last_dtor_insn
314
315 /* In a constructor, the last insn emitted after the start of the
316 function and the parms, the exception specification and any
317 function-try-block. The constructor initializers are emitted after
318 this insn. */
319
320 #define last_parm_cleanup_insn cp_function_chain->x_last_parm_cleanup_insn
321
322 /* If original DECL_RESULT of current function was a register,
323 but due to being an addressable named return value, would up
324 on the stack, this variable holds the named return value's
325 original location. */
326
327 #define original_result_rtx cp_function_chain->x_result_rtx
328
329 struct named_label_list
330 {
331 struct binding_level *binding_level;
332 tree names_in_scope;
333 tree label_decl;
334 const char *filename_o_goto;
335 int lineno_o_goto;
336 struct named_label_list *next;
337 };
338
339 /* A list (chain of TREE_LIST nodes) of named label uses.
340 The TREE_PURPOSE field is the list of variables defined
341 in the label's scope defined at the point of use.
342 The TREE_VALUE field is the LABEL_DECL used.
343 The TREE_TYPE field holds `current_binding_level' at the
344 point of the label's use.
345
346 BWAHAHAAHAHahhahahahaah. No, no, no, said the little chicken.
347
348 Look at the pretty struct named_label_list. See the pretty struct
349 with the pretty named fields that describe what they do. See the
350 pretty lack of gratuitous casts. Notice the code got a lot cleaner.
351
352 Used only for jumps to as-yet undefined labels, since
353 jumps to defined labels can have their validity checked
354 by stmt.c. */
355
356 #define named_label_uses cp_function_chain->named_label_uses
357
358 /* A list of objects which have constructors or destructors
359 which reside in the global scope. The decl is stored in
360 the TREE_VALUE slot and the initializer is stored
361 in the TREE_PURPOSE slot. */
362 tree static_aggregates;
363
364 /* -- end of C++ */
365
366 /* An expression of type `int' for the constant zero. */
367
368 tree integer_zero_node;
369
370 /* A node for the integer constants 1, 2, and 3. */
371
372 tree integer_one_node, integer_two_node, integer_three_node;
373
374 /* While defining an enum type, this is 1 plus the last enumerator
375 constant value. */
376
377 static tree enum_next_value;
378
379 /* Nonzero means that there was overflow computing enum_next_value. */
380
381 static int enum_overflow;
382
383 /* Parsing a function declarator leaves here a chain of structure
384 and enum types declared in the parmlist. */
385
386 static tree last_function_parm_tags;
387
388 /* Similar, for last_function_parm_tags. */
389 tree last_function_parms;
390 static tree current_function_parm_tags;
391
392 /* A list (chain of TREE_LIST nodes) of all LABEL_DECLs in the function
393 that have names. Here so we can clear out their names' definitions
394 at the end of the function. The TREE_VALUE is a LABEL_DECL; the
395 TREE_PURPOSE is the previous binding of the label. */
396
397 #define named_labels cp_function_chain->x_named_labels
398
399 /* The FUNCTION_DECL for the function currently being compiled,
400 or 0 if between functions. */
401 tree current_function_decl;
402
403 /* Set to 0 at beginning of a function definition, and whenever
404 a label (case or named) is defined. Set to value of expression
405 returned from function when that value can be transformed into
406 a named return value. */
407
408 tree current_function_return_value;
409
410 /* Nonzero means give `double' the same size as `float'. */
411
412 extern int flag_short_double;
413
414 /* Nonzero means don't recognize any builtin functions. */
415
416 extern int flag_no_builtin;
417
418 /* Nonzero means don't recognize the non-ANSI builtin functions.
419 -ansi sets this. */
420
421 extern int flag_no_nonansi_builtin;
422
423 /* Nonzero means enable obscure ANSI features and disable GNU extensions
424 that might cause ANSI-compliant code to be miscompiled. */
425
426 extern int flag_ansi;
427
428 /* Nonzero if we want to support huge (> 2^(sizeof(short)*8-1) bytes)
429 objects. */
430 extern int flag_huge_objects;
431
432 /* Nonzero if we want to conserve space in the .o files. We do this
433 by putting uninitialized data and runtime initialized data into
434 .common instead of .data at the expense of not flagging multiple
435 definitions. */
436 extern int flag_conserve_space;
437 \f
438 /* C and C++ flags are in decl2.c. */
439
440 /* Set to 0 at beginning of a constructor, set to 1
441 if that function does an allocation before referencing its
442 instance variable. */
443 #define current_function_assigns_this cp_function_chain->assigns_this
444 #define current_function_just_assigned_this \
445 cp_function_chain->just_assigned_this
446
447 /* Flag used when debugging spew.c */
448
449 extern int spew_debug;
450
451 /* A expression of value 0 with the same precision as a sizetype
452 node, but signed. */
453 tree signed_size_zero_node;
454
455 /* The name of the anonymous namespace, throughout this translation
456 unit. */
457 tree anonymous_namespace_name;
458
459 \f
460 /* Allocate a level of searching. */
461
462 static
463 struct stack_level *
464 push_decl_level (stack, obstack)
465 struct stack_level *stack;
466 struct obstack *obstack;
467 {
468 struct stack_level tem;
469 tem.prev = stack;
470
471 return push_stack_level (obstack, (char *)&tem, sizeof (tem));
472 }
473 \f
474 /* For each binding contour we allocate a binding_level structure
475 which records the names defined in that contour.
476 Contours include:
477 0) the global one
478 1) one for each function definition,
479 where internal declarations of the parameters appear.
480 2) one for each compound statement,
481 to record its declarations.
482
483 The current meaning of a name can be found by searching the levels
484 from the current one out to the global one.
485
486 Off to the side, may be the class_binding_level. This exists only
487 to catch class-local declarations. It is otherwise nonexistent.
488
489 Also there may be binding levels that catch cleanups that must be
490 run when exceptions occur. Thus, to see whether a name is bound in
491 the current scope, it is not enough to look in the
492 CURRENT_BINDING_LEVEL. You should use lookup_name_current_level
493 instead. */
494
495 /* Note that the information in the `names' component of the global contour
496 is duplicated in the IDENTIFIER_GLOBAL_VALUEs of all identifiers. */
497
498 struct binding_level
499 {
500 /* A chain of _DECL nodes for all variables, constants, functions,
501 and typedef types. These are in the reverse of the order
502 supplied. There may be OVERLOADs on this list, too, but they
503 are wrapped in TREE_LISTs; the TREE_VALUE is the OVERLOAD. */
504 tree names;
505
506 /* A list of structure, union and enum definitions, for looking up
507 tag names.
508 It is a chain of TREE_LIST nodes, each of whose TREE_PURPOSE is a name,
509 or NULL_TREE; and whose TREE_VALUE is a RECORD_TYPE, UNION_TYPE,
510 or ENUMERAL_TYPE node.
511
512 C++: the TREE_VALUE nodes can be simple types for
513 component_bindings. */
514 tree tags;
515
516 /* A list of USING_DECL nodes. */
517 tree usings;
518
519 /* A list of used namespaces. PURPOSE is the namespace,
520 VALUE the common ancestor with this binding_level's namespace. */
521 tree using_directives;
522
523 /* If this binding level is the binding level for a class, then
524 class_shadowed is a TREE_LIST. The TREE_PURPOSE of each node
525 is the name of an entity bound in the class; the TREE_VALUE is
526 the IDENTIFIER_CLASS_VALUE before we entered the class. Thus,
527 when leaving class scope, we can restore the
528 IDENTIFIER_CLASS_VALUE by walking this list. The TREE_TYPE is
529 the DECL bound by this name in the class. */
530 tree class_shadowed;
531
532 /* Similar to class_shadowed, but for IDENTIFIER_TYPE_VALUE, and
533 is used for all binding levels. */
534 tree type_shadowed;
535
536 /* A TREE_LIST. Each TREE_VALUE is the LABEL_DECL for a local
537 label in this scope. The TREE_PURPOSE is the previous value of
538 the IDENTIFIER_LABEL VALUE. */
539 tree shadowed_labels;
540
541 /* For each level (except not the global one),
542 a chain of BLOCK nodes for all the levels
543 that were entered and exited one level down. */
544 tree blocks;
545
546 /* The BLOCK node for this level, if one has been preallocated.
547 If 0, the BLOCK is allocated (if needed) when the level is popped. */
548 tree this_block;
549
550 /* The binding level which this one is contained in (inherits from). */
551 struct binding_level *level_chain;
552
553 /* List of decls in `names' that have incomplete
554 structure or union types. */
555 tree incomplete;
556
557 /* List of VAR_DECLS saved from a previous for statement.
558 These would be dead in ANSI-conforming code, but might
559 be referenced in ARM-era code. These are stored in a
560 TREE_LIST; the TREE_VALUE is the actual declaration. */
561 tree dead_vars_from_for;
562
563 /* 1 for the level that holds the parameters of a function.
564 2 for the level that holds a class declaration.
565 3 for levels that hold parameter declarations. */
566 unsigned parm_flag : 4;
567
568 /* 1 means make a BLOCK for this level regardless of all else.
569 2 for temporary binding contours created by the compiler. */
570 unsigned keep : 3;
571
572 /* Nonzero if this level "doesn't exist" for tags. */
573 unsigned tag_transparent : 1;
574
575 /* Nonzero if this level can safely have additional
576 cleanup-needing variables added to it. */
577 unsigned more_cleanups_ok : 1;
578 unsigned have_cleanups : 1;
579
580 /* Nonzero if this level is for storing the decls for template
581 parameters and generic decls; these decls will be discarded and
582 replaced with a TEMPLATE_DECL. */
583 unsigned pseudo_global : 1;
584
585 /* This is set for a namespace binding level. */
586 unsigned namespace_p : 1;
587
588 /* True if this level is that of a for-statement where we need to
589 worry about ambiguous (ARM or ANSI) scope rules. */
590 unsigned is_for_scope : 1;
591
592 /* True if this level corresponds to an EH region, as for a try block. */
593 unsigned eh_region : 1;
594
595 /* One bit left for this word. */
596
597 #if defined(DEBUG_CP_BINDING_LEVELS)
598 /* Binding depth at which this level began. */
599 unsigned binding_depth;
600 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
601 };
602
603 #define NULL_BINDING_LEVEL ((struct binding_level *) NULL)
604
605 /* The binding level currently in effect. */
606
607 #define current_binding_level cp_function_chain->binding_level
608
609 /* The binding level of the current class, if any. */
610
611 #define class_binding_level scope_chain->class_bindings
612
613 /* A chain of binding_level structures awaiting reuse. */
614
615 static struct binding_level *free_binding_level;
616
617 /* The outermost binding level, for names of file scope.
618 This is created when the compiler is started and exists
619 through the entire run. */
620
621 static struct binding_level *global_binding_level;
622
623 /* Nonzero means unconditionally make a BLOCK for the next level pushed. */
624
625 static int keep_next_level_flag;
626
627 #if defined(DEBUG_CP_BINDING_LEVELS)
628 static int binding_depth = 0;
629 static int is_class_level = 0;
630
631 static void
632 indent ()
633 {
634 register unsigned i;
635
636 for (i = 0; i < binding_depth*2; i++)
637 putc (' ', stderr);
638 }
639 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
640
641 static tree pushdecl_with_scope PROTO((tree, struct binding_level *));
642
643 static void
644 push_binding_level (newlevel, tag_transparent, keep)
645 struct binding_level *newlevel;
646 int tag_transparent, keep;
647 {
648 /* Add this level to the front of the chain (stack) of levels that
649 are active. */
650 bzero ((char*) newlevel, sizeof (struct binding_level));
651 newlevel->level_chain = current_binding_level;
652 current_binding_level = newlevel;
653 newlevel->tag_transparent = tag_transparent;
654 newlevel->more_cleanups_ok = 1;
655
656 /* We are called before expand_start_bindings, but after
657 expand_eh_region_start for a try block; so we check this now,
658 before the EH block is covered up. */
659 newlevel->eh_region = is_eh_region ();
660
661 newlevel->keep = keep;
662 #if defined(DEBUG_CP_BINDING_LEVELS)
663 newlevel->binding_depth = binding_depth;
664 indent ();
665 fprintf (stderr, "push %s level 0x%08x line %d\n",
666 (is_class_level) ? "class" : "block", newlevel, lineno);
667 is_class_level = 0;
668 binding_depth++;
669 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
670 }
671
672 /* Find the innermost enclosing class scope, and reset
673 CLASS_BINDING_LEVEL appropriately. */
674
675 static void
676 find_class_binding_level ()
677 {
678 struct binding_level *level = current_binding_level;
679
680 while (level && level->parm_flag != 2)
681 level = level->level_chain;
682 if (level && level->parm_flag == 2)
683 class_binding_level = level;
684 else
685 class_binding_level = 0;
686 }
687
688 static void
689 pop_binding_level ()
690 {
691 if (global_binding_level)
692 {
693 /* Cannot pop a level, if there are none left to pop. */
694 if (current_binding_level == global_binding_level)
695 my_friendly_abort (123);
696 }
697 /* Pop the current level, and free the structure for reuse. */
698 #if defined(DEBUG_CP_BINDING_LEVELS)
699 binding_depth--;
700 indent ();
701 fprintf (stderr, "pop %s level 0x%08x line %d\n",
702 (is_class_level) ? "class" : "block",
703 current_binding_level, lineno);
704 if (is_class_level != (current_binding_level == class_binding_level))
705 {
706 indent ();
707 fprintf (stderr, "XXX is_class_level != (current_binding_level == class_binding_level)\n");
708 }
709 is_class_level = 0;
710 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
711 {
712 register struct binding_level *level = current_binding_level;
713 current_binding_level = current_binding_level->level_chain;
714 level->level_chain = free_binding_level;
715 #if 0 /* defined(DEBUG_CP_BINDING_LEVELS) */
716 if (level->binding_depth != binding_depth)
717 abort ();
718 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
719 free_binding_level = level;
720 find_class_binding_level ();
721 }
722 }
723
724 static void
725 suspend_binding_level ()
726 {
727 if (class_binding_level)
728 current_binding_level = class_binding_level;
729
730 if (global_binding_level)
731 {
732 /* Cannot suspend a level, if there are none left to suspend. */
733 if (current_binding_level == global_binding_level)
734 my_friendly_abort (123);
735 }
736 /* Suspend the current level. */
737 #if defined(DEBUG_CP_BINDING_LEVELS)
738 binding_depth--;
739 indent ();
740 fprintf (stderr, "suspend %s level 0x%08x line %d\n",
741 (is_class_level) ? "class" : "block",
742 current_binding_level, lineno);
743 if (is_class_level != (current_binding_level == class_binding_level))
744 {
745 indent ();
746 fprintf (stderr, "XXX is_class_level != (current_binding_level == class_binding_level)\n");
747 }
748 is_class_level = 0;
749 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
750 current_binding_level = current_binding_level->level_chain;
751 find_class_binding_level ();
752 }
753
754 static void
755 resume_binding_level (b)
756 struct binding_level *b;
757 {
758 /* Resuming binding levels is meant only for namespaces,
759 and those cannot nest into classes. */
760 my_friendly_assert(!class_binding_level, 386);
761 /* Also, resuming a non-directly nested namespace is a no-no. */
762 my_friendly_assert(b->level_chain == current_binding_level, 386);
763 current_binding_level = b;
764 #if defined(DEBUG_CP_BINDING_LEVELS)
765 b->binding_depth = binding_depth;
766 indent ();
767 fprintf (stderr, "resume %s level 0x%08x line %d\n",
768 (is_class_level) ? "class" : "block", b, lineno);
769 is_class_level = 0;
770 binding_depth++;
771 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
772 }
773 \f
774 /* Create a new `struct binding_level'. */
775
776 static
777 struct binding_level *
778 make_binding_level ()
779 {
780 /* NOSTRICT */
781 return (struct binding_level *) xmalloc (sizeof (struct binding_level));
782 }
783
784 /* Nonzero if we are currently in the global binding level. */
785
786 int
787 global_bindings_p ()
788 {
789 return current_binding_level == global_binding_level;
790 }
791
792 /* Return the innermost binding level that is not for a class scope. */
793
794 static struct binding_level *
795 innermost_nonclass_level ()
796 {
797 struct binding_level *b;
798
799 b = current_binding_level;
800 while (b->parm_flag == 2)
801 b = b->level_chain;
802
803 return b;
804 }
805
806 /* Nonzero if we are currently in a toplevel binding level. This
807 means either the global binding level or a namespace in a toplevel
808 binding level. Since there are no non-toplevel namespace levels,
809 this really means any namespace or pseudo-global level. We also
810 include a class whose context is toplevel. */
811
812 int
813 toplevel_bindings_p ()
814 {
815 struct binding_level *b = innermost_nonclass_level ();
816
817 return b->namespace_p || b->pseudo_global;
818 }
819
820 /* Nonzero if this is a namespace scope, or if we are defining a class
821 which is itself at namespace scope, or whose enclosing class is
822 such a class, etc. */
823
824 int
825 namespace_bindings_p ()
826 {
827 struct binding_level *b = innermost_nonclass_level ();
828
829 return b->namespace_p;
830 }
831
832 /* If KEEP is non-zero, make a BLOCK node for the next binding level,
833 unconditionally. Otherwise, use the normal logic to decide whether
834 or not to create a BLOCK. */
835
836 void
837 keep_next_level (keep)
838 int keep;
839 {
840 keep_next_level_flag = keep;
841 }
842
843 /* Nonzero if the current level needs to have a BLOCK made. */
844
845 int
846 kept_level_p ()
847 {
848 return (current_binding_level->blocks != NULL_TREE
849 || current_binding_level->keep
850 || current_binding_level->names != NULL_TREE
851 || (current_binding_level->tags != NULL_TREE
852 && !current_binding_level->tag_transparent));
853 }
854
855 /* Identify this binding level as a level of parameters. */
856
857 void
858 declare_parm_level ()
859 {
860 current_binding_level->parm_flag = 1;
861 }
862
863 void
864 declare_pseudo_global_level ()
865 {
866 current_binding_level->pseudo_global = 1;
867 }
868
869 static void
870 declare_namespace_level ()
871 {
872 current_binding_level->namespace_p = 1;
873 }
874
875 int
876 pseudo_global_level_p ()
877 {
878 return current_binding_level->pseudo_global;
879 }
880
881 void
882 set_class_shadows (shadows)
883 tree shadows;
884 {
885 class_binding_level->class_shadowed = shadows;
886 }
887
888 /* Enter a new binding level.
889 If TAG_TRANSPARENT is nonzero, do so only for the name space of variables,
890 not for that of tags. */
891
892 void
893 pushlevel (tag_transparent)
894 int tag_transparent;
895 {
896 register struct binding_level *newlevel = NULL_BINDING_LEVEL;
897
898 /* If this is the top level of a function,
899 just make sure that NAMED_LABELS is 0.
900 They should have been set to 0 at the end of the previous function. */
901
902 if (current_binding_level == global_binding_level)
903 my_friendly_assert (named_labels == NULL_TREE, 134);
904
905 /* Reuse or create a struct for this binding level. */
906
907 #if defined(DEBUG_CP_BINDING_LEVELS)
908 if (0)
909 #else /* !defined(DEBUG_CP_BINDING_LEVELS) */
910 if (free_binding_level)
911 #endif /* !defined(DEBUG_CP_BINDING_LEVELS) */
912 {
913 newlevel = free_binding_level;
914 free_binding_level = free_binding_level->level_chain;
915 }
916 else
917 newlevel = make_binding_level ();
918
919 push_binding_level (newlevel, tag_transparent, keep_next_level_flag);
920 GNU_xref_start_scope ((HOST_WIDE_INT) newlevel);
921 keep_next_level_flag = 0;
922 }
923
924 void
925 note_level_for_for ()
926 {
927 current_binding_level->is_for_scope = 1;
928 }
929
930 void
931 pushlevel_temporary (tag_transparent)
932 int tag_transparent;
933 {
934 pushlevel (tag_transparent);
935 current_binding_level->keep = 2;
936 clear_last_expr ();
937
938 /* Note we don't call push_momentary() here. Otherwise, it would cause
939 cleanups to be allocated on the momentary obstack, and they will be
940 overwritten by the next statement. */
941
942 expand_start_bindings (0);
943 }
944
945 /* For a binding between a name and an entity at a block scope,
946 this is the `struct binding_level' for the block. */
947 #define BINDING_LEVEL(NODE) \
948 (((struct tree_binding*)NODE)->scope.level)
949
950 /* Make DECL the innermost binding for ID. The LEVEL is the binding
951 level at which this declaration is being bound. */
952
953 static void
954 push_binding (id, decl, level)
955 tree id;
956 tree decl;
957 struct binding_level* level;
958 {
959 tree binding;
960
961 binding = make_node (CPLUS_BINDING);
962
963 /* Now, fill in the binding information. */
964 BINDING_VALUE (binding) = decl;
965 BINDING_TYPE (binding) = NULL_TREE;
966 BINDING_LEVEL (binding) = level;
967 INHERITED_VALUE_BINDING_P (binding) = 0;
968 LOCAL_BINDING_P (binding) = (level != class_binding_level);
969 BINDING_HAS_LEVEL_P (binding) = 1;
970
971 /* And put it on the front of the list of bindings for ID. */
972 TREE_CHAIN (binding) = IDENTIFIER_BINDING (id);
973 IDENTIFIER_BINDING (id) = binding;
974 }
975
976 /* ID is already bound in the current scope. But, DECL is an
977 additional binding for ID in the same scope. This is the `struct
978 stat' hack whereby a non-typedef class-name or enum-name can be
979 bound at the same level as some other kind of entity. It's the
980 responsibility of the caller to check that inserting this name is
981 legal here. Returns nonzero if the new binding was successful. */
982 static int
983 add_binding (id, decl)
984 tree id;
985 tree decl;
986 {
987 tree binding = IDENTIFIER_BINDING (id);
988 int ok = 1;
989
990 if (TREE_CODE (decl) == TYPE_DECL && DECL_ARTIFICIAL (decl))
991 /* The new name is the type name. */
992 BINDING_TYPE (binding) = decl;
993 else if (!BINDING_VALUE (binding))
994 /* This situation arises when push_class_level_binding moves an
995 inherited type-binding out of the way to make room for a new
996 value binding. */
997 BINDING_VALUE (binding) = decl;
998 else if (TREE_CODE (BINDING_VALUE (binding)) == TYPE_DECL
999 && DECL_ARTIFICIAL (BINDING_VALUE (binding)))
1000 {
1001 /* The old binding was a type name. It was placed in
1002 BINDING_VALUE because it was thought, at the point it was
1003 declared, to be the only entity with such a name. Move the
1004 type name into the type slot; it is now hidden by the new
1005 binding. */
1006 BINDING_TYPE (binding) = BINDING_VALUE (binding);
1007 BINDING_VALUE (binding) = decl;
1008 INHERITED_VALUE_BINDING_P (binding) = 0;
1009 }
1010 else if (TREE_CODE (BINDING_VALUE (binding)) == TYPE_DECL
1011 && TREE_CODE (decl) == TYPE_DECL
1012 && DECL_NAME (decl) == DECL_NAME (BINDING_VALUE (binding))
1013 && same_type_p (TREE_TYPE (decl),
1014 TREE_TYPE (BINDING_VALUE (binding))))
1015 /* We have two typedef-names, both naming the same type to have
1016 the same name. This is OK because of:
1017
1018 [dcl.typedef]
1019
1020 In a given scope, a typedef specifier can be used to redefine
1021 the name of any type declared in that scope to refer to the
1022 type to which it already refers. */
1023 ok = 0;
1024 else
1025 {
1026 cp_error ("declaration of `%#D'", decl);
1027 cp_error_at ("conflicts with previous declaration `%#D'",
1028 BINDING_VALUE (binding));
1029 ok = 0;
1030 }
1031
1032 return ok;
1033 }
1034
1035 /* Add DECL to the list of things declared in B. */
1036
1037 static void
1038 add_decl_to_level (decl, b)
1039 tree decl;
1040 struct binding_level *b;
1041 {
1042 /* Only things that will live forever should go in the global
1043 binding level. */
1044 my_friendly_assert (!(b == global_binding_level
1045 && !TREE_PERMANENT (decl)),
1046 19990817);
1047
1048 /* We build up the list in reverse order, and reverse it later if
1049 necessary. */
1050 TREE_CHAIN (decl) = b->names;
1051 b->names = decl;
1052 }
1053
1054 /* Bind DECL to ID in the current_binding_level, assumed to be a local
1055 binding level. If PUSH_USING is set in FLAGS, we know that DECL
1056 doesn't really belong to this binding level, that it got here
1057 through a using-declaration. */
1058
1059 void
1060 push_local_binding (id, decl, flags)
1061 tree id;
1062 tree decl;
1063 int flags;
1064 {
1065 struct binding_level *b;
1066
1067 /* Skip over any local classes. This makes sense if we call
1068 push_local_binding with a friend decl of a local class. */
1069 b = current_binding_level;
1070 while (b->parm_flag == 2)
1071 b = b->level_chain;
1072
1073 if (lookup_name_current_level (id))
1074 {
1075 /* Supplement the existing binding. */
1076 if (!add_binding (id, decl))
1077 /* It didn't work. Something else must be bound at this
1078 level. Do not add DECL to the list of things to pop
1079 later. */
1080 return;
1081 }
1082 else
1083 /* Create a new binding. */
1084 push_binding (id, decl, b);
1085
1086 if (TREE_CODE (decl) == OVERLOAD || (flags & PUSH_USING))
1087 /* We must put the OVERLOAD into a TREE_LIST since the
1088 TREE_CHAIN of an OVERLOAD is already used. Similarly for
1089 decls that got here through a using-declaration. */
1090 decl = build_tree_list (NULL_TREE, decl);
1091
1092 /* And put DECL on the list of things declared by the current
1093 binding level. */
1094 add_decl_to_level (decl, b);
1095 }
1096
1097 /* Bind DECL to ID in the class_binding_level. Returns nonzero if the
1098 binding was successful. */
1099
1100 int
1101 push_class_binding (id, decl)
1102 tree id;
1103 tree decl;
1104 {
1105 int result = 1;
1106 tree binding = IDENTIFIER_BINDING (id);
1107 tree context;
1108
1109 /* Note that we declared this value so that we can issue an error if
1110 this an illegal redeclaration of a name already used for some
1111 other purpose. */
1112 note_name_declared_in_class (id, decl);
1113
1114 if (binding && BINDING_LEVEL (binding) == class_binding_level)
1115 /* Supplement the existing binding. */
1116 result = add_binding (id, decl);
1117 else
1118 /* Create a new binding. */
1119 push_binding (id, decl, class_binding_level);
1120
1121 /* Update the IDENTIFIER_CLASS_VALUE for this ID to be the
1122 class-level declaration. Note that we do not use DECL here
1123 because of the possibility of the `struct stat' hack; if DECL is
1124 a class-name or enum-name we might prefer a field-name, or some
1125 such. */
1126 IDENTIFIER_CLASS_VALUE (id) = BINDING_VALUE (IDENTIFIER_BINDING (id));
1127
1128 /* If this is a binding from a base class, mark it as such. */
1129 binding = IDENTIFIER_BINDING (id);
1130 if (BINDING_VALUE (binding) == decl && TREE_CODE (decl) != TREE_LIST)
1131 {
1132 /* Any implicit typename must be from a base-class. The
1133 context for an implicit typename declaration is always
1134 the derived class in which the lookup was done, so the checks
1135 based on the context of DECL below will not trigger. */
1136 if (IMPLICIT_TYPENAME_TYPE_DECL_P (decl))
1137 INHERITED_VALUE_BINDING_P (binding) = 1;
1138 else
1139 {
1140 if (TREE_CODE (decl) == OVERLOAD)
1141 context = DECL_REAL_CONTEXT (OVL_CURRENT (decl));
1142 else
1143 {
1144 my_friendly_assert (TREE_CODE_CLASS (TREE_CODE (decl)) == 'd',
1145 0);
1146 context = DECL_REAL_CONTEXT (decl);
1147 }
1148
1149 if (is_properly_derived_from (current_class_type, context))
1150 INHERITED_VALUE_BINDING_P (binding) = 1;
1151 else
1152 INHERITED_VALUE_BINDING_P (binding) = 0;
1153 }
1154 }
1155 else if (BINDING_VALUE (binding) == decl)
1156 /* We only encounter a TREE_LIST when push_class_decls detects an
1157 ambiguity. Such an ambiguity can be overridden by a definition
1158 in this class. */
1159 INHERITED_VALUE_BINDING_P (binding) = 1;
1160
1161 return result;
1162 }
1163
1164 /* Remove the binding for DECL which should be the innermost binding
1165 for ID. */
1166
1167 static void
1168 pop_binding (id, decl)
1169 tree id;
1170 tree decl;
1171 {
1172 tree binding;
1173
1174 if (id == NULL_TREE)
1175 /* It's easiest to write the loops that call this function without
1176 checking whether or not the entities involved have names. We
1177 get here for such an entity. */
1178 return;
1179
1180 /* Get the innermost binding for ID. */
1181 binding = IDENTIFIER_BINDING (id);
1182
1183 /* The name should be bound. */
1184 my_friendly_assert (binding != NULL_TREE, 0);
1185
1186 /* The DECL will be either the ordinary binding or the type
1187 binding for this identifier. Remove that binding. */
1188 if (BINDING_VALUE (binding) == decl)
1189 BINDING_VALUE (binding) = NULL_TREE;
1190 else if (BINDING_TYPE (binding) == decl)
1191 BINDING_TYPE (binding) = NULL_TREE;
1192 else
1193 my_friendly_abort (0);
1194
1195 if (!BINDING_VALUE (binding) && !BINDING_TYPE (binding))
1196 /* We're completely done with the innermost binding for this
1197 identifier. Unhook it from the list of bindings. */
1198 IDENTIFIER_BINDING (id) = TREE_CHAIN (binding);
1199 }
1200
1201 /* When a label goes out of scope, check to see if that label was used
1202 in a valid manner, and issue any appropriate warnings or errors. */
1203
1204 static void
1205 pop_label (link)
1206 tree link;
1207 {
1208 tree label = TREE_VALUE (link);
1209
1210 if (DECL_INITIAL (label) == NULL_TREE)
1211 {
1212 cp_error_at ("label `%D' used but not defined", label);
1213 /* Avoid crashing later. */
1214 define_label (input_filename, 1, DECL_NAME (label));
1215 }
1216 else if (warn_unused && !TREE_USED (label))
1217 cp_warning_at ("label `%D' defined but not used", label);
1218
1219 SET_IDENTIFIER_LABEL_VALUE (DECL_NAME (label), TREE_PURPOSE (link));
1220 }
1221
1222 /* At the end of a function, all labels declared within the fucntion
1223 go out of scope. BLOCK is the top-level block for the
1224 function. */
1225
1226 static void
1227 pop_labels (block)
1228 tree block;
1229 {
1230 tree link;
1231
1232 /* Clear out the definitions of all label names, since their scopes
1233 end here. */
1234 for (link = named_labels; link; link = TREE_CHAIN (link))
1235 {
1236 pop_label (link);
1237 /* Put the labels into the "variables" of the top-level block,
1238 so debugger can see them. */
1239 TREE_CHAIN (TREE_VALUE (link)) = BLOCK_VARS (block);
1240 BLOCK_VARS (block) = TREE_VALUE (link);
1241 }
1242
1243 named_labels = NULL_TREE;
1244 }
1245
1246 /* Exit a binding level.
1247 Pop the level off, and restore the state of the identifier-decl mappings
1248 that were in effect when this level was entered.
1249
1250 If KEEP == 1, this level had explicit declarations, so
1251 and create a "block" (a BLOCK node) for the level
1252 to record its declarations and subblocks for symbol table output.
1253
1254 If FUNCTIONBODY is nonzero, this level is the body of a function,
1255 so create a block as if KEEP were set and also clear out all
1256 label names.
1257
1258 If REVERSE is nonzero, reverse the order of decls before putting
1259 them into the BLOCK. */
1260
1261 tree
1262 poplevel (keep, reverse, functionbody)
1263 int keep;
1264 int reverse;
1265 int functionbody;
1266 {
1267 register tree link;
1268 /* The chain of decls was accumulated in reverse order.
1269 Put it into forward order, just for cleanliness. */
1270 tree decls;
1271 int tmp = functionbody;
1272 int real_functionbody = current_binding_level->keep == 2
1273 ? ((functionbody = 0), tmp) : functionbody;
1274 tree tags = functionbody >= 0 ? current_binding_level->tags : 0;
1275 tree subblocks = functionbody >= 0 ? current_binding_level->blocks : 0;
1276 tree block = NULL_TREE;
1277 tree decl;
1278 int block_previously_created;
1279 int leaving_for_scope;
1280
1281 if (current_binding_level->parm_flag == 2)
1282 return poplevel_class ();
1283
1284 my_friendly_assert (!current_binding_level->class_shadowed,
1285 19990414);
1286
1287 /* We used to use KEEP == 2 to indicate that the new block should go
1288 at the beginning of the list of blocks at this binding level,
1289 rather than the end. This hack is no longer used. */
1290 my_friendly_assert (keep == 0 || keep == 1, 0);
1291
1292 GNU_xref_end_scope ((HOST_WIDE_INT) current_binding_level,
1293 (HOST_WIDE_INT) current_binding_level->level_chain,
1294 current_binding_level->parm_flag,
1295 current_binding_level->keep);
1296
1297 if (current_binding_level->keep == 1)
1298 keep = 1;
1299
1300 /* Get the decls in the order they were written.
1301 Usually current_binding_level->names is in reverse order.
1302 But parameter decls were previously put in forward order. */
1303
1304 if (reverse)
1305 current_binding_level->names
1306 = decls = nreverse (current_binding_level->names);
1307 else
1308 decls = current_binding_level->names;
1309
1310 /* Output any nested inline functions within this block
1311 if they weren't already output. */
1312
1313 for (decl = decls; decl; decl = TREE_CHAIN (decl))
1314 if (TREE_CODE (decl) == FUNCTION_DECL
1315 && ! TREE_ASM_WRITTEN (decl)
1316 && DECL_INITIAL (decl) != NULL_TREE
1317 && TREE_ADDRESSABLE (decl)
1318 && decl_function_context (decl) == current_function_decl)
1319 {
1320 /* If this decl was copied from a file-scope decl
1321 on account of a block-scope extern decl,
1322 propagate TREE_ADDRESSABLE to the file-scope decl. */
1323 if (DECL_ABSTRACT_ORIGIN (decl) != NULL_TREE)
1324 TREE_ADDRESSABLE (DECL_ABSTRACT_ORIGIN (decl)) = 1;
1325 else
1326 {
1327 push_function_context ();
1328 output_inline_function (decl);
1329 pop_function_context ();
1330 }
1331 }
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
1337 block = NULL_TREE;
1338 block_previously_created = (current_binding_level->this_block != NULL_TREE);
1339 if (block_previously_created)
1340 block = current_binding_level->this_block;
1341 else if (keep == 1 || functionbody)
1342 block = make_node (BLOCK);
1343 if (block != NULL_TREE)
1344 {
1345 if (block_previously_created)
1346 {
1347 if (decls || tags || subblocks)
1348 {
1349 if (BLOCK_VARS (block) || BLOCK_TYPE_TAGS (block))
1350 warning ("internal compiler error: debugging info corrupted");
1351
1352 BLOCK_VARS (block) = decls;
1353 BLOCK_TYPE_TAGS (block) = tags;
1354
1355 /* We can have previous subblocks and new subblocks when
1356 doing fixup_gotos with complex cleanups. We chain the new
1357 subblocks onto the end of any pre-existing subblocks. */
1358 BLOCK_SUBBLOCKS (block) = chainon (BLOCK_SUBBLOCKS (block),
1359 subblocks);
1360 }
1361 /* If we created the block earlier on, and we are just
1362 diddling it now, then it already should have a proper
1363 BLOCK_END_NOTE value associated with it. */
1364 }
1365 else
1366 {
1367 BLOCK_VARS (block) = decls;
1368 BLOCK_TYPE_TAGS (block) = tags;
1369 BLOCK_SUBBLOCKS (block) = subblocks;
1370 /* Otherwise, for a new block, install a new BLOCK_END_NOTE
1371 value. */
1372 remember_end_note (block);
1373 }
1374 }
1375
1376 /* In each subblock, record that this is its superior. */
1377
1378 if (keep >= 0)
1379 for (link = subblocks; link; link = TREE_CHAIN (link))
1380 BLOCK_SUPERCONTEXT (link) = block;
1381
1382 /* We still support the old for-scope rules, whereby the variables
1383 in a for-init statement were in scope after the for-statement
1384 ended. We only use the new rules in flag_new_for_scope is
1385 nonzero. */
1386 leaving_for_scope
1387 = current_binding_level->is_for_scope && flag_new_for_scope == 1;
1388
1389 /* Remove declarations for all the DECLs in this level. */
1390 for (link = decls; link; link = TREE_CHAIN (link))
1391 {
1392 if (leaving_for_scope && TREE_CODE (link) == VAR_DECL)
1393 {
1394 tree outer_binding
1395 = TREE_CHAIN (IDENTIFIER_BINDING (DECL_NAME (link)));
1396 tree ns_binding;
1397
1398 if (!outer_binding)
1399 ns_binding = IDENTIFIER_NAMESPACE_VALUE (DECL_NAME (link));
1400 else
1401 ns_binding = NULL_TREE;
1402
1403 if (outer_binding
1404 && (BINDING_LEVEL (outer_binding)
1405 == current_binding_level->level_chain))
1406 /* We have something like:
1407
1408 int i;
1409 for (int i; ;);
1410
1411 and we are leaving the `for' scope. There's no reason to
1412 keep the binding of the inner `i' in this case. */
1413 pop_binding (DECL_NAME (link), link);
1414 else if ((outer_binding
1415 && (TREE_CODE (BINDING_VALUE (outer_binding))
1416 == TYPE_DECL))
1417 || (ns_binding
1418 && TREE_CODE (ns_binding) == TYPE_DECL))
1419 /* Here, we have something like:
1420
1421 typedef int I;
1422
1423 void f () {
1424 for (int I; ;);
1425 }
1426
1427 We must pop the for-scope binding so we know what's a
1428 type and what isn't. */
1429 pop_binding (DECL_NAME (link), link);
1430 else
1431 {
1432 /* Mark this VAR_DECL as dead so that we can tell we left it
1433 there only for backward compatibility. */
1434 DECL_DEAD_FOR_LOCAL (link) = 1;
1435
1436 /* Keep track of what should of have happenned when we
1437 popped the binding. */
1438 if (outer_binding && BINDING_VALUE (outer_binding))
1439 DECL_SHADOWED_FOR_VAR (link)
1440 = BINDING_VALUE (outer_binding);
1441
1442 /* Add it to the list of dead variables in the next
1443 outermost binding to that we can remove these when we
1444 leave that binding. */
1445 current_binding_level->level_chain->dead_vars_from_for
1446 = tree_cons (NULL_TREE, link,
1447 current_binding_level->level_chain->
1448 dead_vars_from_for);
1449
1450 /* Although we don't pop the CPLUS_BINDING, we do clear
1451 its BINDING_LEVEL since the level is going away now. */
1452 BINDING_LEVEL (IDENTIFIER_BINDING (DECL_NAME (link)))
1453 = 0;
1454 }
1455 }
1456 else
1457 {
1458 /* Remove the binding. */
1459 decl = link;
1460 if (TREE_CODE (decl) == TREE_LIST)
1461 decl = TREE_VALUE (decl);
1462 if (TREE_CODE_CLASS (TREE_CODE (decl)) == 'd')
1463 pop_binding (DECL_NAME (decl), decl);
1464 else if (TREE_CODE (decl) == OVERLOAD)
1465 pop_binding (DECL_NAME (OVL_FUNCTION (decl)), decl);
1466 else
1467 my_friendly_abort (0);
1468 }
1469 }
1470
1471 /* Remove declarations for any `for' variables from inner scopes
1472 that we kept around. */
1473 for (link = current_binding_level->dead_vars_from_for;
1474 link; link = TREE_CHAIN (link))
1475 pop_binding (DECL_NAME (TREE_VALUE (link)), TREE_VALUE (link));
1476
1477 /* Restore the IDENTIFIER_TYPE_VALUEs. */
1478 for (link = current_binding_level->type_shadowed;
1479 link; link = TREE_CHAIN (link))
1480 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (link), TREE_VALUE (link));
1481
1482 /* Restore the IDENTIFIER_LABEL_VALUEs for local labels. */
1483 for (link = current_binding_level->shadowed_labels;
1484 link;
1485 link = TREE_CHAIN (link))
1486 pop_label (link);
1487
1488 /* There may be OVERLOADs (wrapped in TREE_LISTs) on the BLOCK_VARs
1489 list if a `using' declaration put them there. The debugging
1490 back-ends won't understand OVERLOAD, so we remove them here.
1491 Because the BLOCK_VARS are (temporarily) shared with
1492 CURRENT_BINDING_LEVEL->NAMES we must do this fixup after we have
1493 popped all the bindings. */
1494 if (block)
1495 {
1496 tree* d;
1497
1498 for (d = &BLOCK_VARS (block); *d; )
1499 {
1500 if (TREE_CODE (*d) == TREE_LIST)
1501 *d = TREE_CHAIN (*d);
1502 else
1503 d = &TREE_CHAIN (*d);
1504 }
1505 }
1506
1507 /* If the level being exited is the top level of a function,
1508 check over all the labels. */
1509 if (functionbody)
1510 {
1511 /* Since this is the top level block of a function, the vars are
1512 the function's parameters. Don't leave them in the BLOCK
1513 because they are found in the FUNCTION_DECL instead. */
1514 BLOCK_VARS (block) = 0;
1515 pop_labels (block);
1516 }
1517
1518 /* Any uses of undefined labels now operate under constraints
1519 of next binding contour. */
1520 {
1521 struct binding_level *level_chain;
1522 level_chain = current_binding_level->level_chain;
1523 if (level_chain)
1524 {
1525 struct named_label_list *labels;
1526 for (labels = named_label_uses; labels; labels = labels->next)
1527 if (labels->binding_level == current_binding_level)
1528 {
1529 labels->binding_level = level_chain;
1530 labels->names_in_scope = level_chain->names;
1531 }
1532 }
1533 }
1534
1535 tmp = current_binding_level->keep;
1536
1537 pop_binding_level ();
1538 if (functionbody)
1539 DECL_INITIAL (current_function_decl) = block;
1540 else if (block)
1541 {
1542 if (!block_previously_created)
1543 current_binding_level->blocks
1544 = chainon (current_binding_level->blocks, block);
1545 }
1546 /* If we did not make a block for the level just exited,
1547 any blocks made for inner levels
1548 (since they cannot be recorded as subblocks in that level)
1549 must be carried forward so they will later become subblocks
1550 of something else. */
1551 else if (subblocks)
1552 current_binding_level->blocks
1553 = chainon (current_binding_level->blocks, subblocks);
1554
1555 /* Take care of compiler's internal binding structures. */
1556 if (tmp == 2)
1557 {
1558 expand_end_bindings (getdecls (), keep, 1);
1559 /* Each and every BLOCK node created here in `poplevel' is important
1560 (e.g. for proper debugging information) so if we created one
1561 earlier, mark it as "used". */
1562 if (block)
1563 TREE_USED (block) = 1;
1564 block = poplevel (keep, reverse, real_functionbody);
1565 }
1566
1567 /* Each and every BLOCK node created here in `poplevel' is important
1568 (e.g. for proper debugging information) so if we created one
1569 earlier, mark it as "used". */
1570 if (block)
1571 TREE_USED (block) = 1;
1572 return block;
1573 }
1574
1575 /* Delete the node BLOCK from the current binding level.
1576 This is used for the block inside a stmt expr ({...})
1577 so that the block can be reinserted where appropriate. */
1578
1579 void
1580 delete_block (block)
1581 tree block;
1582 {
1583 tree t;
1584 if (current_binding_level->blocks == block)
1585 current_binding_level->blocks = TREE_CHAIN (block);
1586 for (t = current_binding_level->blocks; t;)
1587 {
1588 if (TREE_CHAIN (t) == block)
1589 TREE_CHAIN (t) = TREE_CHAIN (block);
1590 else
1591 t = TREE_CHAIN (t);
1592 }
1593 TREE_CHAIN (block) = NULL_TREE;
1594 /* Clear TREE_USED which is always set by poplevel.
1595 The flag is set again if insert_block is called. */
1596 TREE_USED (block) = 0;
1597 }
1598
1599 /* Insert BLOCK at the end of the list of subblocks of the
1600 current binding level. This is used when a BIND_EXPR is expanded,
1601 to handle the BLOCK node inside the BIND_EXPR. */
1602
1603 void
1604 insert_block (block)
1605 tree block;
1606 {
1607 TREE_USED (block) = 1;
1608 current_binding_level->blocks
1609 = chainon (current_binding_level->blocks, block);
1610 }
1611
1612 /* Set the BLOCK node for the innermost scope
1613 (the one we are currently in). */
1614
1615 void
1616 set_block (block)
1617 register tree block;
1618 {
1619 current_binding_level->this_block = block;
1620 }
1621
1622 /* Do a pushlevel for class declarations. */
1623
1624 void
1625 pushlevel_class ()
1626 {
1627 register struct binding_level *newlevel;
1628
1629 /* Reuse or create a struct for this binding level. */
1630 #if defined(DEBUG_CP_BINDING_LEVELS)
1631 if (0)
1632 #else /* !defined(DEBUG_CP_BINDING_LEVELS) */
1633 if (free_binding_level)
1634 #endif /* !defined(DEBUG_CP_BINDING_LEVELS) */
1635 {
1636 newlevel = free_binding_level;
1637 free_binding_level = free_binding_level->level_chain;
1638 }
1639 else
1640 newlevel = make_binding_level ();
1641
1642 #if defined(DEBUG_CP_BINDING_LEVELS)
1643 is_class_level = 1;
1644 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
1645
1646 push_binding_level (newlevel, 0, 0);
1647
1648 decl_stack = push_decl_level (decl_stack, &decl_obstack);
1649 class_binding_level = current_binding_level;
1650 class_binding_level->parm_flag = 2;
1651 }
1652
1653 /* ...and a poplevel for class declarations. */
1654
1655 static tree
1656 poplevel_class ()
1657 {
1658 register struct binding_level *level = class_binding_level;
1659 tree shadowed;
1660
1661 my_friendly_assert (level != 0, 354);
1662
1663 decl_stack = pop_stack_level (decl_stack);
1664 /* If we're leaving a toplevel class, don't bother to do the setting
1665 of IDENTIFIER_CLASS_VALUE to NULL_TREE, since first of all this slot
1666 shouldn't even be used when current_class_type isn't set, and second,
1667 if we don't touch it here, we're able to use the cache effect if the
1668 next time we're entering a class scope, it is the same class. */
1669 if (current_class_depth != 1)
1670 {
1671 struct binding_level* b;
1672
1673 /* Clear out our IDENTIFIER_CLASS_VALUEs. */
1674 for (shadowed = level->class_shadowed;
1675 shadowed;
1676 shadowed = TREE_CHAIN (shadowed))
1677 IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (shadowed)) = NULL_TREE;
1678
1679 /* Find the next enclosing class, and recreate
1680 IDENTIFIER_CLASS_VALUEs appropriate for that class. */
1681 b = level->level_chain;
1682 while (b && b->parm_flag != 2)
1683 b = b->level_chain;
1684
1685 if (b)
1686 for (shadowed = b->class_shadowed;
1687 shadowed;
1688 shadowed = TREE_CHAIN (shadowed))
1689 {
1690 tree t;
1691
1692 t = IDENTIFIER_BINDING (TREE_PURPOSE (shadowed));
1693 while (t && BINDING_LEVEL (t) != b)
1694 t = TREE_CHAIN (t);
1695
1696 if (t)
1697 IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (shadowed))
1698 = BINDING_VALUE (t);
1699 }
1700 }
1701 else
1702 /* Remember to save what IDENTIFIER's were bound in this scope so we
1703 can recover from cache misses. */
1704 {
1705 previous_class_type = current_class_type;
1706 previous_class_values = class_binding_level->class_shadowed;
1707 }
1708 for (shadowed = level->type_shadowed;
1709 shadowed;
1710 shadowed = TREE_CHAIN (shadowed))
1711 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (shadowed), TREE_VALUE (shadowed));
1712
1713 /* Remove the bindings for all of the class-level declarations. */
1714 for (shadowed = level->class_shadowed;
1715 shadowed;
1716 shadowed = TREE_CHAIN (shadowed))
1717 pop_binding (TREE_PURPOSE (shadowed), TREE_TYPE (shadowed));
1718
1719 GNU_xref_end_scope ((HOST_WIDE_INT) class_binding_level,
1720 (HOST_WIDE_INT) class_binding_level->level_chain,
1721 class_binding_level->parm_flag,
1722 class_binding_level->keep);
1723
1724 /* Now, pop out of the binding level which we created up in the
1725 `pushlevel_class' routine. */
1726 #if defined(DEBUG_CP_BINDING_LEVELS)
1727 is_class_level = 1;
1728 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
1729
1730 pop_binding_level ();
1731
1732 return NULL_TREE;
1733 }
1734
1735 /* We are entering the scope of a class. Clear IDENTIFIER_CLASS_VALUE
1736 for any names in enclosing classes. */
1737
1738 void
1739 clear_identifier_class_values ()
1740 {
1741 tree t;
1742
1743 if (!class_binding_level)
1744 return;
1745
1746 for (t = class_binding_level->class_shadowed;
1747 t;
1748 t = TREE_CHAIN (t))
1749 IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (t)) = NULL_TREE;
1750 }
1751
1752 /* Returns non-zero if T is a virtual function table. */
1753
1754 int
1755 vtable_decl_p (t, data)
1756 tree t;
1757 void *data ATTRIBUTE_UNUSED;
1758 {
1759 return (TREE_CODE (t) == VAR_DECL && DECL_VIRTUAL_P (t));
1760 }
1761
1762 /* Returns non-zero if T is a TYPE_DECL for a type with virtual
1763 functions. */
1764
1765 int
1766 vtype_decl_p (t, data)
1767 tree t;
1768 void *data ATTRIBUTE_UNUSED;
1769 {
1770 return (TREE_CODE (t) == TYPE_DECL
1771 && TREE_TYPE (t) != error_mark_node
1772 && TYPE_LANG_SPECIFIC (TREE_TYPE (t))
1773 && CLASSTYPE_VSIZE (TREE_TYPE (t)));
1774 }
1775
1776 /* Return the declarations that are members of the namespace NS. */
1777
1778 tree
1779 cp_namespace_decls (ns)
1780 tree ns;
1781 {
1782 return NAMESPACE_LEVEL (ns)->names;
1783 }
1784
1785 /* Walk all the namespaces contained NAMESPACE, including NAMESPACE
1786 itself, calling F for each. The DATA is passed to F as well. */
1787
1788 static int
1789 walk_namespaces_r (namespace, f, data)
1790 tree namespace;
1791 walk_namespaces_fn f;
1792 void *data;
1793 {
1794 tree current;
1795 int result = 0;
1796
1797 result |= (*f) (namespace, data);
1798
1799 for (current = cp_namespace_decls (namespace);
1800 current;
1801 current = TREE_CHAIN (current))
1802 {
1803 if (TREE_CODE (current) != NAMESPACE_DECL
1804 || DECL_NAMESPACE_ALIAS (current))
1805 continue;
1806 if (!DECL_LANG_SPECIFIC (current))
1807 {
1808 /* Hmm. std. */
1809 my_friendly_assert (current == std_node, 393);
1810 continue;
1811 }
1812
1813 /* We found a namespace. */
1814 result |= walk_namespaces_r (current, f, data);
1815 }
1816
1817 return result;
1818 }
1819
1820 /* Walk all the namespaces, calling F for each. The DATA is passed to
1821 F as well. */
1822
1823 int
1824 walk_namespaces (f, data)
1825 walk_namespaces_fn f;
1826 void *data;
1827 {
1828 return walk_namespaces_r (global_namespace, f, data);
1829 }
1830
1831 struct walk_globals_data {
1832 walk_globals_pred p;
1833 walk_globals_fn f;
1834 void *data;
1835 };
1836
1837 /* Walk the global declarations in NAMESPACE. Whenever one is found
1838 for which P returns non-zero, call F with its address. If any call
1839 to F returns a non-zero value, return a non-zero value. */
1840
1841 static int
1842 walk_globals_r (namespace, data)
1843 tree namespace;
1844 void *data;
1845 {
1846 struct walk_globals_data* wgd = (struct walk_globals_data *) data;
1847 walk_globals_pred p = wgd->p;
1848 walk_globals_fn f = wgd->f;
1849 void *d = wgd->data;
1850 tree *t;
1851 int result = 0;
1852
1853 t = &NAMESPACE_LEVEL (namespace)->names;
1854
1855 while (*t)
1856 {
1857 tree glbl = *t;
1858
1859 if ((*p) (glbl, d))
1860 result |= (*f) (t, d);
1861
1862 /* If F changed *T, then *T still points at the next item to
1863 examine. */
1864 if (*t == glbl)
1865 t = &TREE_CHAIN (*t);
1866 }
1867
1868 return result;
1869 }
1870
1871 /* Walk the global declarations. Whenever one is found for which P
1872 returns non-zero, call F with its address. If any call to F
1873 returns a non-zero value, return a non-zero value. */
1874
1875 int
1876 walk_globals (p, f, data)
1877 walk_globals_pred p;
1878 walk_globals_fn f;
1879 void *data;
1880 {
1881 struct walk_globals_data wgd;
1882 wgd.p = p;
1883 wgd.f = f;
1884 wgd.data = data;
1885
1886 return walk_namespaces (walk_globals_r, &wgd);
1887 }
1888
1889 /* Call wrapup_globals_declarations for the globals in NAMESPACE. If
1890 DATA is non-NULL, this is the last time we will call
1891 wrapup_global_declarations for this NAMESPACE. */
1892
1893 int
1894 wrapup_globals_for_namespace (namespace, data)
1895 tree namespace;
1896 void *data;
1897 {
1898 tree globals = cp_namespace_decls (namespace);
1899 int len = list_length (globals);
1900 tree *vec = (tree *) alloca (sizeof (tree) * len);
1901 int i;
1902 int result;
1903 tree decl;
1904 int last_time = (data != 0);
1905
1906 if (last_time && namespace == global_namespace)
1907 /* Let compile_file handle the global namespace. */
1908 return 0;
1909
1910 /* Process the decls in reverse order--earliest first.
1911 Put them into VEC from back to front, then take out from front. */
1912
1913 for (i = 0, decl = globals; i < len; i++, decl = TREE_CHAIN (decl))
1914 vec[len - i - 1] = decl;
1915
1916 if (last_time)
1917 {
1918 check_global_declarations (vec, len);
1919 return 0;
1920 }
1921
1922 /* Temporarily mark vtables as external. That prevents
1923 wrapup_global_declarations from writing them out; we must process
1924 them ourselves in finish_vtable_vardecl. */
1925 for (i = 0; i < len; ++i)
1926 if (vtable_decl_p (vec[i], /*data=*/0) && !DECL_EXTERNAL (vec[i]))
1927 {
1928 DECL_NOT_REALLY_EXTERN (vec[i]) = 1;
1929 DECL_EXTERNAL (vec[i]) = 1;
1930 }
1931
1932 /* Write out any globals that need to be output. */
1933 result = wrapup_global_declarations (vec, len);
1934
1935 /* Undo the hack to DECL_EXTERNAL above. */
1936 for (i = 0; i < len; ++i)
1937 if (vtable_decl_p (vec[i], /*data=*/0)
1938 && DECL_NOT_REALLY_EXTERN (vec[i]))
1939 {
1940 DECL_NOT_REALLY_EXTERN (vec[i]) = 0;
1941 DECL_EXTERNAL (vec[i]) = 0;
1942 }
1943
1944 return result;
1945 }
1946
1947 \f
1948 /* Mark ARG (which is really a struct binding_level **) for GC. */
1949
1950 static void
1951 mark_binding_level (arg)
1952 void *arg;
1953 {
1954 struct binding_level *lvl = *(struct binding_level **)arg;
1955
1956 while (lvl)
1957 {
1958 ggc_mark_tree (lvl->names);
1959 ggc_mark_tree (lvl->tags);
1960 ggc_mark_tree (lvl->usings);
1961 ggc_mark_tree (lvl->using_directives);
1962 ggc_mark_tree (lvl->class_shadowed);
1963 ggc_mark_tree (lvl->type_shadowed);
1964 ggc_mark_tree (lvl->shadowed_labels);
1965 ggc_mark_tree (lvl->blocks);
1966 ggc_mark_tree (lvl->this_block);
1967 ggc_mark_tree (lvl->incomplete);
1968 ggc_mark_tree (lvl->dead_vars_from_for);
1969
1970 lvl = lvl->level_chain;
1971 }
1972 }
1973 \f
1974 /* For debugging. */
1975 static int no_print_functions = 0;
1976 static int no_print_builtins = 0;
1977
1978 void
1979 print_binding_level (lvl)
1980 struct binding_level *lvl;
1981 {
1982 tree t;
1983 int i = 0, len;
1984 fprintf (stderr, " blocks=");
1985 fprintf (stderr, HOST_PTR_PRINTF, lvl->blocks);
1986 fprintf (stderr, " n_incomplete=%d parm_flag=%d keep=%d",
1987 list_length (lvl->incomplete), lvl->parm_flag, lvl->keep);
1988 if (lvl->tag_transparent)
1989 fprintf (stderr, " tag-transparent");
1990 if (lvl->more_cleanups_ok)
1991 fprintf (stderr, " more-cleanups-ok");
1992 if (lvl->have_cleanups)
1993 fprintf (stderr, " have-cleanups");
1994 fprintf (stderr, "\n");
1995 if (lvl->names)
1996 {
1997 fprintf (stderr, " names:\t");
1998 /* We can probably fit 3 names to a line? */
1999 for (t = lvl->names; t; t = TREE_CHAIN (t))
2000 {
2001 if (no_print_functions && (TREE_CODE (t) == FUNCTION_DECL))
2002 continue;
2003 if (no_print_builtins
2004 && (TREE_CODE (t) == TYPE_DECL)
2005 && (!strcmp (DECL_SOURCE_FILE (t),"<built-in>")))
2006 continue;
2007
2008 /* Function decls tend to have longer names. */
2009 if (TREE_CODE (t) == FUNCTION_DECL)
2010 len = 3;
2011 else
2012 len = 2;
2013 i += len;
2014 if (i > 6)
2015 {
2016 fprintf (stderr, "\n\t");
2017 i = len;
2018 }
2019 print_node_brief (stderr, "", t, 0);
2020 if (t == error_mark_node)
2021 break;
2022 }
2023 if (i)
2024 fprintf (stderr, "\n");
2025 }
2026 if (lvl->tags)
2027 {
2028 fprintf (stderr, " tags:\t");
2029 i = 0;
2030 for (t = lvl->tags; t; t = TREE_CHAIN (t))
2031 {
2032 if (TREE_PURPOSE (t) == NULL_TREE)
2033 len = 3;
2034 else if (TREE_PURPOSE (t) == TYPE_IDENTIFIER (TREE_VALUE (t)))
2035 len = 2;
2036 else
2037 len = 4;
2038 i += len;
2039 if (i > 5)
2040 {
2041 fprintf (stderr, "\n\t");
2042 i = len;
2043 }
2044 if (TREE_PURPOSE (t) == NULL_TREE)
2045 {
2046 print_node_brief (stderr, "<unnamed-typedef", TREE_VALUE (t), 0);
2047 fprintf (stderr, ">");
2048 }
2049 else if (TREE_PURPOSE (t) == TYPE_IDENTIFIER (TREE_VALUE (t)))
2050 print_node_brief (stderr, "", TREE_VALUE (t), 0);
2051 else
2052 {
2053 print_node_brief (stderr, "<typedef", TREE_PURPOSE (t), 0);
2054 print_node_brief (stderr, "", TREE_VALUE (t), 0);
2055 fprintf (stderr, ">");
2056 }
2057 }
2058 if (i)
2059 fprintf (stderr, "\n");
2060 }
2061 if (lvl->class_shadowed)
2062 {
2063 fprintf (stderr, " class-shadowed:");
2064 for (t = lvl->class_shadowed; t; t = TREE_CHAIN (t))
2065 {
2066 fprintf (stderr, " %s ", IDENTIFIER_POINTER (TREE_PURPOSE (t)));
2067 }
2068 fprintf (stderr, "\n");
2069 }
2070 if (lvl->type_shadowed)
2071 {
2072 fprintf (stderr, " type-shadowed:");
2073 for (t = lvl->type_shadowed; t; t = TREE_CHAIN (t))
2074 {
2075 fprintf (stderr, " %s ", IDENTIFIER_POINTER (TREE_PURPOSE (t)));
2076 }
2077 fprintf (stderr, "\n");
2078 }
2079 }
2080
2081 void
2082 print_other_binding_stack (stack)
2083 struct binding_level *stack;
2084 {
2085 struct binding_level *level;
2086 for (level = stack; level != global_binding_level; level = level->level_chain)
2087 {
2088 fprintf (stderr, "binding level ");
2089 fprintf (stderr, HOST_PTR_PRINTF, level);
2090 fprintf (stderr, "\n");
2091 print_binding_level (level);
2092 }
2093 }
2094
2095 void
2096 print_binding_stack ()
2097 {
2098 struct binding_level *b;
2099 fprintf (stderr, "current_binding_level=");
2100 fprintf (stderr, HOST_PTR_PRINTF, current_binding_level);
2101 fprintf (stderr, "\nclass_binding_level=");
2102 fprintf (stderr, HOST_PTR_PRINTF, class_binding_level);
2103 fprintf (stderr, "\nglobal_binding_level=");
2104 fprintf (stderr, HOST_PTR_PRINTF, global_binding_level);
2105 fprintf (stderr, "\n");
2106 if (class_binding_level)
2107 {
2108 for (b = class_binding_level; b; b = b->level_chain)
2109 if (b == current_binding_level)
2110 break;
2111 if (b)
2112 b = class_binding_level;
2113 else
2114 b = current_binding_level;
2115 }
2116 else
2117 b = current_binding_level;
2118 print_other_binding_stack (b);
2119 fprintf (stderr, "global:\n");
2120 print_binding_level (global_binding_level);
2121 }
2122
2123 /* Namespace binding access routines: The namespace_bindings field of
2124 the identifier is polymorphic, with three possible values:
2125 NULL_TREE, a list of CPLUS_BINDINGS, or any other tree_node
2126 indicating the BINDING_VALUE of global_namespace. */
2127
2128 /* Check whether the a binding for the name to scope is known.
2129 Assumes that the bindings of the name are already a list
2130 of bindings. Returns the binding found, or NULL_TREE. */
2131
2132 static tree
2133 find_binding (name, scope)
2134 tree name;
2135 tree scope;
2136 {
2137 tree iter, prev = NULL_TREE;
2138
2139 scope = ORIGINAL_NAMESPACE (scope);
2140
2141 for (iter = IDENTIFIER_NAMESPACE_BINDINGS (name); iter;
2142 iter = TREE_CHAIN (iter))
2143 {
2144 my_friendly_assert (TREE_CODE (iter) == CPLUS_BINDING, 374);
2145 if (BINDING_SCOPE (iter) == scope)
2146 {
2147 /* Move binding found to the front of the list, so
2148 subsequent lookups will find it faster. */
2149 if (prev)
2150 {
2151 TREE_CHAIN (prev) = TREE_CHAIN (iter);
2152 TREE_CHAIN (iter) = IDENTIFIER_NAMESPACE_BINDINGS (name);
2153 IDENTIFIER_NAMESPACE_BINDINGS (name) = iter;
2154 }
2155 return iter;
2156 }
2157 prev = iter;
2158 }
2159 return NULL_TREE;
2160 }
2161
2162 /* Always returns a binding for name in scope. If the
2163 namespace_bindings is not a list, convert it to one first.
2164 If no binding is found, make a new one. */
2165
2166 tree
2167 binding_for_name (name, scope)
2168 tree name;
2169 tree scope;
2170 {
2171 tree b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2172 tree result;
2173
2174 scope = ORIGINAL_NAMESPACE (scope);
2175
2176 if (b && TREE_CODE (b) != CPLUS_BINDING)
2177 {
2178 /* Get rid of optimization for global scope. */
2179 IDENTIFIER_NAMESPACE_BINDINGS (name) = NULL_TREE;
2180 BINDING_VALUE (binding_for_name (name, global_namespace)) = b;
2181 b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2182 }
2183 if (b && (result = find_binding (name, scope)))
2184 return result;
2185 /* Not found, make a new permanent one. */
2186 push_obstacks (&permanent_obstack, &permanent_obstack);
2187 result = make_node (CPLUS_BINDING);
2188 TREE_CHAIN (result) = b;
2189 IDENTIFIER_NAMESPACE_BINDINGS (name) = result;
2190 BINDING_SCOPE (result) = scope;
2191 BINDING_TYPE (result) = NULL_TREE;
2192 BINDING_VALUE (result) = NULL_TREE;
2193 pop_obstacks ();
2194 return result;
2195 }
2196
2197 /* Return the binding value for name in scope, considering that
2198 namespace_binding may or may not be a list of CPLUS_BINDINGS. */
2199
2200 tree
2201 namespace_binding (name, scope)
2202 tree name;
2203 tree scope;
2204 {
2205 tree b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2206 if (b == NULL_TREE)
2207 return NULL_TREE;
2208 if (scope == NULL_TREE)
2209 scope = global_namespace;
2210 if (TREE_CODE (b) != CPLUS_BINDING)
2211 return (scope == global_namespace) ? b : NULL_TREE;
2212 name = find_binding (name,scope);
2213 if (name == NULL_TREE)
2214 return name;
2215 return BINDING_VALUE (name);
2216 }
2217
2218 /* Set the binding value for name in scope. If modifying the binding
2219 of global_namespace is attempted, try to optimize it. */
2220
2221 void
2222 set_namespace_binding (name, scope, val)
2223 tree name;
2224 tree scope;
2225 tree val;
2226 {
2227 tree b;
2228
2229 if (scope == NULL_TREE)
2230 scope = global_namespace;
2231
2232 if (scope == global_namespace)
2233 {
2234 b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2235 if (b == NULL_TREE || TREE_CODE (b) != CPLUS_BINDING)
2236 {
2237 IDENTIFIER_NAMESPACE_BINDINGS (name) = val;
2238 return;
2239 }
2240 }
2241 b = binding_for_name (name, scope);
2242 BINDING_VALUE (b) = val;
2243 }
2244
2245 /* Push into the scope of the NAME namespace. If NAME is NULL_TREE, then we
2246 select a name that is unique to this compilation unit. */
2247
2248 void
2249 push_namespace (name)
2250 tree name;
2251 {
2252 tree d = NULL_TREE;
2253 int need_new = 1;
2254 int implicit_use = 0;
2255 int global = 0;
2256 if (!global_namespace)
2257 {
2258 /* This must be ::. */
2259 my_friendly_assert (name == get_identifier ("::"), 377);
2260 global = 1;
2261 }
2262 else if (!name)
2263 {
2264 /* The name of anonymous namespace is unique for the translation
2265 unit. */
2266 if (!anonymous_namespace_name)
2267 anonymous_namespace_name = get_file_function_name ('N');
2268 name = anonymous_namespace_name;
2269 d = IDENTIFIER_NAMESPACE_VALUE (name);
2270 if (d)
2271 /* Reopening anonymous namespace. */
2272 need_new = 0;
2273 implicit_use = 1;
2274 }
2275 else if (current_namespace == global_namespace
2276 && name == DECL_NAME (std_node))
2277 {
2278 in_std++;
2279 return;
2280 }
2281 else
2282 {
2283 /* Check whether this is an extended namespace definition. */
2284 d = IDENTIFIER_NAMESPACE_VALUE (name);
2285 if (d != NULL_TREE && TREE_CODE (d) == NAMESPACE_DECL)
2286 {
2287 need_new = 0;
2288 if (DECL_NAMESPACE_ALIAS (d))
2289 {
2290 cp_error ("namespace alias `%D' not allowed here, assuming `%D'",
2291 d, DECL_NAMESPACE_ALIAS (d));
2292 d = DECL_NAMESPACE_ALIAS (d);
2293 }
2294 }
2295 }
2296
2297 if (need_new)
2298 {
2299 /* Make a new namespace, binding the name to it. */
2300 d = build_lang_decl (NAMESPACE_DECL, name, void_type_node);
2301 /* The global namespace is not pushed, and the global binding
2302 level is set elsewhere. */
2303 if (!global)
2304 {
2305 d = pushdecl (d);
2306 pushlevel (0);
2307 declare_namespace_level ();
2308 NAMESPACE_LEVEL (d) = current_binding_level;
2309 }
2310 }
2311 else
2312 resume_binding_level (NAMESPACE_LEVEL (d));
2313
2314 if (implicit_use)
2315 do_using_directive (d);
2316 /* Enter the name space. */
2317 current_namespace = d;
2318 }
2319
2320 /* Pop from the scope of the current namespace. */
2321
2322 void
2323 pop_namespace ()
2324 {
2325 if (current_namespace == global_namespace)
2326 {
2327 my_friendly_assert (in_std>0, 980421);
2328 in_std--;
2329 return;
2330 }
2331 current_namespace = CP_DECL_CONTEXT (current_namespace);
2332 /* The binding level is not popped, as it might be re-opened later. */
2333 suspend_binding_level ();
2334 }
2335
2336 /* Push into the scope of the namespace NS, even if it is deeply
2337 nested within another namespace. */
2338
2339 void
2340 push_nested_namespace (ns)
2341 tree ns;
2342 {
2343 if (ns == global_namespace)
2344 push_to_top_level ();
2345 else
2346 {
2347 push_nested_namespace (CP_DECL_CONTEXT (ns));
2348 push_namespace (DECL_NAME (ns));
2349 }
2350 }
2351
2352 /* Pop back from the scope of the namespace NS, which was previously
2353 entered with push_nested_namespace. */
2354
2355 void
2356 pop_nested_namespace (ns)
2357 tree ns;
2358 {
2359 while (ns != global_namespace)
2360 {
2361 pop_namespace ();
2362 ns = CP_DECL_CONTEXT (ns);
2363 }
2364
2365 pop_from_top_level ();
2366 }
2367
2368 \f
2369 /* Subroutines for reverting temporarily to top-level for instantiation
2370 of templates and such. We actually need to clear out the class- and
2371 local-value slots of all identifiers, so that only the global values
2372 are at all visible. Simply setting current_binding_level to the global
2373 scope isn't enough, because more binding levels may be pushed. */
2374 struct saved_scope *scope_chain;
2375
2376 /* Mark ARG (which is really a struct saved_scope **) for GC. */
2377
2378 static void
2379 mark_saved_scope (arg)
2380 void *arg;
2381 {
2382 struct saved_scope *t = *(struct saved_scope **)arg;
2383 while (t)
2384 {
2385 mark_binding_level (&t->class_bindings);
2386 ggc_mark_tree (t->old_bindings);
2387 ggc_mark_tree (t->old_namespace);
2388 ggc_mark_tree (t->class_name);
2389 ggc_mark_tree (t->class_type);
2390 ggc_mark_tree (t->access_specifier);
2391 if (t->lang_base)
2392 ggc_mark_tree_varray (t->lang_base);
2393 ggc_mark_tree (t->lang_name);
2394 ggc_mark_tree (t->x_function_parms);
2395 ggc_mark_tree (t->template_parms);
2396 ggc_mark_tree (t->x_previous_class_type);
2397 ggc_mark_tree (t->x_previous_class_values);
2398 t = t->prev;
2399 }
2400 }
2401
2402 static tree
2403 store_bindings (names, old_bindings)
2404 tree names, old_bindings;
2405 {
2406 tree t;
2407 for (t = names; t; t = TREE_CHAIN (t))
2408 {
2409 tree binding, t1, id;
2410
2411 if (TREE_CODE (t) == TREE_LIST)
2412 id = TREE_PURPOSE (t);
2413 else
2414 id = DECL_NAME (t);
2415
2416 if (!id
2417 /* Note that we may have an IDENTIFIER_CLASS_VALUE even when
2418 we have no IDENTIFIER_BINDING if we have left the class
2419 scope, but cached the class-level declarations. */
2420 || !(IDENTIFIER_BINDING (id) || IDENTIFIER_CLASS_VALUE (id)))
2421 continue;
2422
2423 for (t1 = old_bindings; t1; t1 = TREE_CHAIN (t1))
2424 if (TREE_VEC_ELT (t1, 0) == id)
2425 goto skip_it;
2426
2427 binding = make_tree_vec (4);
2428
2429 if (id)
2430 {
2431 my_friendly_assert (TREE_CODE (id) == IDENTIFIER_NODE, 135);
2432 TREE_VEC_ELT (binding, 0) = id;
2433 TREE_VEC_ELT (binding, 1) = REAL_IDENTIFIER_TYPE_VALUE (id);
2434 TREE_VEC_ELT (binding, 2) = IDENTIFIER_BINDING (id);
2435 TREE_VEC_ELT (binding, 3) = IDENTIFIER_CLASS_VALUE (id);
2436 IDENTIFIER_BINDING (id) = NULL_TREE;
2437 IDENTIFIER_CLASS_VALUE (id) = NULL_TREE;
2438 }
2439 TREE_CHAIN (binding) = old_bindings;
2440 old_bindings = binding;
2441 skip_it:
2442 ;
2443 }
2444 return old_bindings;
2445 }
2446
2447 void
2448 maybe_push_to_top_level (pseudo)
2449 int pseudo;
2450 {
2451 struct saved_scope *s
2452 = (struct saved_scope *) xcalloc (1, sizeof (struct saved_scope));
2453 struct binding_level *b;
2454 tree old_bindings = NULL_TREE;
2455
2456 b = scope_chain ? current_binding_level : 0;
2457
2458 push_function_context_to (NULL_TREE);
2459
2460 if (scope_chain && previous_class_type)
2461 old_bindings = store_bindings (previous_class_values, old_bindings);
2462
2463 /* Have to include global_binding_level, because class-level decls
2464 aren't listed anywhere useful. */
2465 for (; b; b = b->level_chain)
2466 {
2467 tree t;
2468
2469 /* Template IDs are inserted into the global level. If they were
2470 inserted into namespace level, finish_file wouldn't find them
2471 when doing pending instantiations. Therefore, don't stop at
2472 namespace level, but continue until :: . */
2473 if (b == global_binding_level || (pseudo && b->pseudo_global))
2474 break;
2475
2476 old_bindings = store_bindings (b->names, old_bindings);
2477 /* We also need to check class_shadowed to save class-level type
2478 bindings, since pushclass doesn't fill in b->names. */
2479 if (b->parm_flag == 2)
2480 old_bindings = store_bindings (b->class_shadowed, old_bindings);
2481
2482 /* Unwind type-value slots back to top level. */
2483 for (t = b->type_shadowed; t; t = TREE_CHAIN (t))
2484 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (t), TREE_VALUE (t));
2485 }
2486 current_binding_level = b;
2487
2488 s->prev = scope_chain;
2489 s->old_bindings = old_bindings;
2490
2491 scope_chain = s;
2492 current_function_decl = NULL_TREE;
2493 VARRAY_TREE_INIT (current_lang_base, 10, "current_lang_base");
2494 current_lang_stack = &VARRAY_TREE (current_lang_base, 0);
2495 current_lang_name = lang_name_cplusplus;
2496 strict_prototype = strict_prototypes_lang_cplusplus;
2497 named_labels = NULL_TREE;
2498 current_namespace = global_namespace;
2499
2500 push_obstacks (&permanent_obstack, &permanent_obstack);
2501 }
2502
2503 void
2504 push_to_top_level ()
2505 {
2506 maybe_push_to_top_level (0);
2507 }
2508
2509 void
2510 pop_from_top_level ()
2511 {
2512 struct saved_scope *s = scope_chain;
2513 tree t;
2514
2515 /* Clear out class-level bindings cache. */
2516 if (previous_class_type)
2517 invalidate_class_lookup_cache ();
2518
2519 pop_obstacks ();
2520
2521 VARRAY_FREE (current_lang_base);
2522
2523 scope_chain = s->prev;
2524 for (t = s->old_bindings; t; t = TREE_CHAIN (t))
2525 {
2526 tree id = TREE_VEC_ELT (t, 0);
2527 if (id)
2528 {
2529 SET_IDENTIFIER_TYPE_VALUE (id, TREE_VEC_ELT (t, 1));
2530 IDENTIFIER_BINDING (id) = TREE_VEC_ELT (t, 2);
2531 IDENTIFIER_CLASS_VALUE (id) = TREE_VEC_ELT (t, 3);
2532 }
2533 }
2534
2535 if (current_lang_name == lang_name_cplusplus)
2536 strict_prototype = strict_prototypes_lang_cplusplus;
2537 else if (current_lang_name == lang_name_c)
2538 strict_prototype = strict_prototypes_lang_c;
2539
2540 free (s);
2541
2542 pop_function_context_from (NULL_TREE);
2543 }
2544 \f
2545 /* Push a definition of struct, union or enum tag "name".
2546 into binding_level "b". "type" should be the type node,
2547 We assume that the tag "name" is not already defined.
2548
2549 Note that the definition may really be just a forward reference.
2550 In that case, the TYPE_SIZE will be a NULL_TREE.
2551
2552 C++ gratuitously puts all these tags in the name space. */
2553
2554 /* When setting the IDENTIFIER_TYPE_VALUE field of an identifier ID,
2555 record the shadowed value for this binding contour. TYPE is
2556 the type that ID maps to. */
2557
2558 static void
2559 set_identifier_type_value_with_scope (id, type, b)
2560 tree id;
2561 tree type;
2562 struct binding_level *b;
2563 {
2564 if (!b->namespace_p)
2565 {
2566 /* Shadow the marker, not the real thing, so that the marker
2567 gets restored later. */
2568 tree old_type_value = REAL_IDENTIFIER_TYPE_VALUE (id);
2569 b->type_shadowed
2570 = tree_cons (id, old_type_value, b->type_shadowed);
2571 }
2572 else
2573 {
2574 tree binding = binding_for_name (id, current_namespace);
2575 BINDING_TYPE (binding) = type;
2576 /* Store marker instead of real type. */
2577 type = global_type_node;
2578 }
2579 SET_IDENTIFIER_TYPE_VALUE (id, type);
2580 }
2581
2582 /* As set_identifier_type_value_with_scope, but using current_binding_level. */
2583
2584 void
2585 set_identifier_type_value (id, type)
2586 tree id;
2587 tree type;
2588 {
2589 set_identifier_type_value_with_scope (id, type, current_binding_level);
2590 }
2591
2592 /* Return the type associated with id. */
2593
2594 tree
2595 identifier_type_value (id)
2596 tree id;
2597 {
2598 /* There is no type with that name, anywhere. */
2599 if (REAL_IDENTIFIER_TYPE_VALUE (id) == NULL_TREE)
2600 return NULL_TREE;
2601 /* This is not the type marker, but the real thing. */
2602 if (REAL_IDENTIFIER_TYPE_VALUE (id) != global_type_node)
2603 return REAL_IDENTIFIER_TYPE_VALUE (id);
2604 /* Have to search for it. It must be on the global level, now.
2605 Ask lookup_name not to return non-types. */
2606 id = lookup_name_real (id, 2, 1, 0);
2607 if (id)
2608 return TREE_TYPE (id);
2609 return NULL_TREE;
2610 }
2611
2612 /* Pop off extraneous binding levels left over due to syntax errors.
2613
2614 We don't pop past namespaces, as they might be valid. */
2615
2616 void
2617 pop_everything ()
2618 {
2619 #ifdef DEBUG_CP_BINDING_LEVELS
2620 fprintf (stderr, "XXX entering pop_everything ()\n");
2621 #endif
2622 while (!toplevel_bindings_p ())
2623 {
2624 if (current_binding_level->parm_flag == 2)
2625 pop_nested_class ();
2626 else
2627 poplevel (0, 0, 0);
2628 }
2629 #ifdef DEBUG_CP_BINDING_LEVELS
2630 fprintf (stderr, "XXX leaving pop_everything ()\n");
2631 #endif
2632 }
2633
2634 /* The type TYPE is being declared. If it is a class template, or a
2635 specialization of a class template, do any processing required and
2636 perform error-checking. If IS_FRIEND is non-zero, this TYPE is
2637 being declared a friend. B is the binding level at which this TYPE
2638 should be bound.
2639
2640 Returns the TYPE_DECL for TYPE, which may have been altered by this
2641 processing. */
2642
2643 static tree
2644 maybe_process_template_type_declaration (type, globalize, b)
2645 tree type;
2646 int globalize;
2647 struct binding_level* b;
2648 {
2649 tree decl = TYPE_NAME (type);
2650
2651 if (processing_template_parmlist)
2652 /* You can't declare a new template type in a template parameter
2653 list. But, you can declare a non-template type:
2654
2655 template <class A*> struct S;
2656
2657 is a forward-declaration of `A'. */
2658 ;
2659 else
2660 {
2661 maybe_check_template_type (type);
2662
2663 my_friendly_assert (IS_AGGR_TYPE (type)
2664 || TREE_CODE (type) == ENUMERAL_TYPE, 0);
2665
2666
2667 if (processing_template_decl)
2668 {
2669 /* This may change after the call to
2670 push_template_decl_real, but we want the original value. */
2671 tree name = DECL_NAME (decl);
2672
2673 decl = push_template_decl_real (decl, globalize);
2674 /* If the current binding level is the binding level for the
2675 template parameters (see the comment in
2676 begin_template_parm_list) and the enclosing level is a class
2677 scope, and we're not looking at a friend, push the
2678 declaration of the member class into the class scope. In the
2679 friend case, push_template_decl will already have put the
2680 friend into global scope, if appropriate. */
2681 if (TREE_CODE (type) != ENUMERAL_TYPE
2682 && !globalize && b->pseudo_global
2683 && b->level_chain->parm_flag == 2)
2684 {
2685 finish_member_declaration (CLASSTYPE_TI_TEMPLATE (type));
2686 /* Put this tag on the list of tags for the class, since
2687 that won't happen below because B is not the class
2688 binding level, but is instead the pseudo-global level. */
2689 b->level_chain->tags =
2690 tree_cons (name, type, b->level_chain->tags);
2691 if (TYPE_SIZE (current_class_type) == NULL_TREE)
2692 CLASSTYPE_TAGS (current_class_type) = b->level_chain->tags;
2693 }
2694 }
2695 }
2696
2697 return decl;
2698 }
2699
2700 /* In C++, you don't have to write `struct S' to refer to `S'; you
2701 can just use `S'. We accomplish this by creating a TYPE_DECL as
2702 if the user had written `typedef struct S S'. Create and return
2703 the TYPE_DECL for TYPE. */
2704
2705 tree
2706 create_implicit_typedef (name, type)
2707 tree name;
2708 tree type;
2709 {
2710 tree decl;
2711
2712 decl = build_decl (TYPE_DECL, name, type);
2713 SET_DECL_ARTIFICIAL (decl);
2714 /* There are other implicit type declarations, like the one *within*
2715 a class that allows you to write `S::S'. We must distinguish
2716 amongst these. */
2717 SET_DECL_IMPLICIT_TYPEDEF_P (decl);
2718 TYPE_NAME (type) = decl;
2719
2720 return decl;
2721 }
2722
2723 /* Push a tag name NAME for struct/class/union/enum type TYPE.
2724 Normally put it into the inner-most non-tag-transparent scope,
2725 but if GLOBALIZE is true, put it in the inner-most non-class scope.
2726 The latter is needed for implicit declarations. */
2727
2728 void
2729 pushtag (name, type, globalize)
2730 tree name, type;
2731 int globalize;
2732 {
2733 register struct binding_level *b;
2734
2735 b = current_binding_level;
2736 while (b->tag_transparent
2737 || (globalize && b->parm_flag == 2))
2738 b = b->level_chain;
2739
2740 b->tags = tree_cons (name, type, b->tags);
2741
2742 if (name)
2743 {
2744 /* Do C++ gratuitous typedefing. */
2745 if (IDENTIFIER_TYPE_VALUE (name) != type)
2746 {
2747 register tree d = NULL_TREE;
2748 int in_class = 0;
2749 tree context = TYPE_CONTEXT (type);
2750
2751 if (! context)
2752 {
2753 tree cs = current_scope ();
2754
2755 if (! globalize)
2756 context = cs;
2757 else if (cs != NULL_TREE
2758 && TREE_CODE_CLASS (TREE_CODE (cs)) == 't')
2759 /* When declaring a friend class of a local class, we want
2760 to inject the newly named class into the scope
2761 containing the local class, not the namespace scope. */
2762 context = hack_decl_function_context (get_type_decl (cs));
2763 }
2764 if (!context)
2765 context = current_namespace;
2766
2767 if ((b->pseudo_global && b->level_chain->parm_flag == 2)
2768 || b->parm_flag == 2)
2769 in_class = 1;
2770
2771 if (current_lang_name == lang_name_java)
2772 TYPE_FOR_JAVA (type) = 1;
2773
2774 d = create_implicit_typedef (name, type);
2775 DECL_CONTEXT (d) = FROB_CONTEXT (context);
2776 if (! in_class)
2777 set_identifier_type_value_with_scope (name, type, b);
2778
2779 d = maybe_process_template_type_declaration (type,
2780 globalize, b);
2781
2782 if (b->parm_flag == 2)
2783 {
2784 if (!PROCESSING_REAL_TEMPLATE_DECL_P ())
2785 /* Put this TYPE_DECL on the TYPE_FIELDS list for the
2786 class. But if it's a member template class, we
2787 want the TEMPLATE_DECL, not the TYPE_DECL, so this
2788 is done later. */
2789 finish_member_declaration (d);
2790 else
2791 pushdecl_class_level (d);
2792 }
2793 else
2794 d = pushdecl_with_scope (d, b);
2795
2796 if (ANON_AGGRNAME_P (name))
2797 DECL_IGNORED_P (d) = 1;
2798
2799 TYPE_CONTEXT (type) = DECL_CONTEXT (d);
2800 DECL_ASSEMBLER_NAME (d) = DECL_NAME (d);
2801 if (!uses_template_parms (type))
2802 DECL_ASSEMBLER_NAME (d)
2803 = get_identifier (build_overload_name (type, 1, 1));
2804 }
2805 if (b->parm_flag == 2)
2806 {
2807 if (TYPE_SIZE (current_class_type) == NULL_TREE)
2808 CLASSTYPE_TAGS (current_class_type) = b->tags;
2809 }
2810 }
2811
2812 if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL)
2813 /* Use the canonical TYPE_DECL for this node. */
2814 TYPE_STUB_DECL (type) = TYPE_NAME (type);
2815 else
2816 {
2817 /* Create a fake NULL-named TYPE_DECL node whose TREE_TYPE
2818 will be the tagged type we just added to the current
2819 binding level. This fake NULL-named TYPE_DECL node helps
2820 dwarfout.c to know when it needs to output a
2821 representation of a tagged type, and it also gives us a
2822 convenient place to record the "scope start" address for
2823 the tagged type. */
2824
2825 tree d = build_decl (TYPE_DECL, NULL_TREE, type);
2826 TYPE_STUB_DECL (type) = pushdecl_with_scope (d, b);
2827 }
2828 }
2829
2830 /* Counter used to create anonymous type names. */
2831
2832 static int anon_cnt = 0;
2833
2834 /* Return an IDENTIFIER which can be used as a name for
2835 anonymous structs and unions. */
2836
2837 tree
2838 make_anon_name ()
2839 {
2840 char buf[32];
2841
2842 sprintf (buf, ANON_AGGRNAME_FORMAT, anon_cnt++);
2843 return get_identifier (buf);
2844 }
2845
2846 /* Clear the TREE_PURPOSE slot of tags which have anonymous typenames.
2847 This keeps dbxout from getting confused. */
2848
2849 void
2850 clear_anon_tags ()
2851 {
2852 register struct binding_level *b;
2853 register tree tags;
2854 static int last_cnt = 0;
2855
2856 /* Fast out if no new anon names were declared. */
2857 if (last_cnt == anon_cnt)
2858 return;
2859
2860 b = current_binding_level;
2861 while (b->tag_transparent)
2862 b = b->level_chain;
2863 tags = b->tags;
2864 while (tags)
2865 {
2866 /* A NULL purpose means we have already processed all tags
2867 from here to the end of the list. */
2868 if (TREE_PURPOSE (tags) == NULL_TREE)
2869 break;
2870 if (ANON_AGGRNAME_P (TREE_PURPOSE (tags)))
2871 TREE_PURPOSE (tags) = NULL_TREE;
2872 tags = TREE_CHAIN (tags);
2873 }
2874 last_cnt = anon_cnt;
2875 }
2876 \f
2877 /* Subroutine of duplicate_decls: return truthvalue of whether
2878 or not types of these decls match.
2879
2880 For C++, we must compare the parameter list so that `int' can match
2881 `int&' in a parameter position, but `int&' is not confused with
2882 `const int&'. */
2883
2884 int
2885 decls_match (newdecl, olddecl)
2886 tree newdecl, olddecl;
2887 {
2888 int types_match;
2889
2890 if (newdecl == olddecl)
2891 return 1;
2892
2893 if (TREE_CODE (newdecl) != TREE_CODE (olddecl))
2894 /* If the two DECLs are not even the same kind of thing, we're not
2895 interested in their types. */
2896 return 0;
2897
2898 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2899 {
2900 tree f1 = TREE_TYPE (newdecl);
2901 tree f2 = TREE_TYPE (olddecl);
2902 tree p1 = TYPE_ARG_TYPES (f1);
2903 tree p2 = TYPE_ARG_TYPES (f2);
2904
2905 if (DECL_REAL_CONTEXT (newdecl) != DECL_REAL_CONTEXT (olddecl)
2906 && ! (DECL_LANGUAGE (newdecl) == lang_c
2907 && DECL_LANGUAGE (olddecl) == lang_c))
2908 return 0;
2909
2910 /* When we parse a static member function definition,
2911 we put together a FUNCTION_DECL which thinks its type
2912 is METHOD_TYPE. Change that to FUNCTION_TYPE, and
2913 proceed. */
2914 if (TREE_CODE (f1) == METHOD_TYPE && DECL_STATIC_FUNCTION_P (olddecl))
2915 revert_static_member_fn (&newdecl, &f1, &p1);
2916 else if (TREE_CODE (f2) == METHOD_TYPE
2917 && DECL_STATIC_FUNCTION_P (newdecl))
2918 revert_static_member_fn (&olddecl, &f2, &p2);
2919
2920 /* Here we must take care of the case where new default
2921 parameters are specified. Also, warn if an old
2922 declaration becomes ambiguous because default
2923 parameters may cause the two to be ambiguous. */
2924 if (TREE_CODE (f1) != TREE_CODE (f2))
2925 {
2926 if (TREE_CODE (f1) == OFFSET_TYPE)
2927 cp_compiler_error ("`%D' redeclared as member function", newdecl);
2928 else
2929 cp_compiler_error ("`%D' redeclared as non-member function", newdecl);
2930 return 0;
2931 }
2932
2933 if (same_type_p (TREE_TYPE (f1), TREE_TYPE (f2)))
2934 {
2935 if (! strict_prototypes_lang_c && DECL_LANGUAGE (olddecl) == lang_c
2936 && p2 == NULL_TREE)
2937 {
2938 types_match = self_promoting_args_p (p1);
2939 if (p1 == void_list_node)
2940 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
2941 }
2942 else if (!strict_prototypes_lang_c && DECL_LANGUAGE (olddecl)==lang_c
2943 && DECL_LANGUAGE (newdecl) == lang_c && p1 == NULL_TREE)
2944 {
2945 types_match = self_promoting_args_p (p2);
2946 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
2947 }
2948 else
2949 types_match = compparms (p1, p2);
2950 }
2951 else
2952 types_match = 0;
2953 }
2954 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
2955 {
2956 if (!comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
2957 DECL_TEMPLATE_PARMS (olddecl)))
2958 return 0;
2959
2960 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
2961 types_match = 1;
2962 else
2963 types_match = decls_match (DECL_TEMPLATE_RESULT (olddecl),
2964 DECL_TEMPLATE_RESULT (newdecl));
2965 }
2966 else
2967 {
2968 if (TREE_TYPE (newdecl) == error_mark_node)
2969 types_match = TREE_TYPE (olddecl) == error_mark_node;
2970 else if (TREE_TYPE (olddecl) == NULL_TREE)
2971 types_match = TREE_TYPE (newdecl) == NULL_TREE;
2972 else if (TREE_TYPE (newdecl) == NULL_TREE)
2973 types_match = 0;
2974 else
2975 types_match = comptypes (TREE_TYPE (newdecl),
2976 TREE_TYPE (olddecl),
2977 COMPARE_REDECLARATION);
2978 }
2979
2980 return types_match;
2981 }
2982
2983 /* If NEWDECL is `static' and an `extern' was seen previously,
2984 warn about it. (OLDDECL may be NULL_TREE; NAME contains
2985 information about previous usage as an `extern'.)
2986
2987 Note that this does not apply to the C++ case of declaring
2988 a variable `extern const' and then later `const'.
2989
2990 Don't complain about built-in functions, since they are beyond
2991 the user's control. */
2992
2993 static void
2994 warn_extern_redeclared_static (newdecl, olddecl)
2995 tree newdecl, olddecl;
2996 {
2997 tree name;
2998
2999 static const char *explicit_extern_static_warning
3000 = "`%D' was declared `extern' and later `static'";
3001 static const char *implicit_extern_static_warning
3002 = "`%D' was declared implicitly `extern' and later `static'";
3003
3004 if (TREE_CODE (newdecl) == TYPE_DECL)
3005 return;
3006
3007 name = DECL_ASSEMBLER_NAME (newdecl);
3008 if (TREE_PUBLIC (name) && DECL_THIS_STATIC (newdecl))
3009 {
3010 /* It's okay to redeclare an ANSI built-in function as static,
3011 or to declare a non-ANSI built-in function as anything. */
3012 if (! (TREE_CODE (newdecl) == FUNCTION_DECL
3013 && olddecl != NULL_TREE
3014 && TREE_CODE (olddecl) == FUNCTION_DECL
3015 && DECL_ARTIFICIAL (olddecl)))
3016 {
3017 cp_pedwarn (IDENTIFIER_IMPLICIT_DECL (name)
3018 ? implicit_extern_static_warning
3019 : explicit_extern_static_warning, newdecl);
3020 if (olddecl != NULL_TREE)
3021 cp_pedwarn_at ("previous declaration of `%D'", olddecl);
3022 }
3023 }
3024 }
3025
3026 /* Handle when a new declaration NEWDECL has the same name as an old
3027 one OLDDECL in the same binding contour. Prints an error message
3028 if appropriate.
3029
3030 If safely possible, alter OLDDECL to look like NEWDECL, and return 1.
3031 Otherwise, return 0. */
3032
3033 int
3034 duplicate_decls (newdecl, olddecl)
3035 tree newdecl, olddecl;
3036 {
3037 unsigned olddecl_uid = DECL_UID (olddecl);
3038 int olddecl_friend = 0, types_match = 0;
3039 int new_defines_function = 0;
3040
3041 if (newdecl == olddecl)
3042 return 1;
3043
3044 types_match = decls_match (newdecl, olddecl);
3045
3046 /* If either the type of the new decl or the type of the old decl is an
3047 error_mark_node, then that implies that we have already issued an
3048 error (earlier) for some bogus type specification, and in that case,
3049 it is rather pointless to harass the user with yet more error message
3050 about the same declaration, so just pretend the types match here. */
3051 if (TREE_TYPE (newdecl) == error_mark_node
3052 || TREE_TYPE (olddecl) == error_mark_node)
3053 types_match = 1;
3054
3055 /* Check for redeclaration and other discrepancies. */
3056 if (TREE_CODE (olddecl) == FUNCTION_DECL
3057 && DECL_ARTIFICIAL (olddecl))
3058 {
3059 if (TREE_CODE (newdecl) != FUNCTION_DECL)
3060 {
3061 /* If you declare a built-in or predefined function name as static,
3062 the old definition is overridden, but optionally warn this was a
3063 bad choice of name. */
3064 if (! TREE_PUBLIC (newdecl))
3065 {
3066 if (warn_shadow)
3067 cp_warning ("shadowing %s function `%#D'",
3068 DECL_BUILT_IN (olddecl) ? "built-in" : "library",
3069 olddecl);
3070 /* Discard the old built-in function. */
3071 return 0;
3072 }
3073 /* If the built-in is not ansi, then programs can override
3074 it even globally without an error. */
3075 else if (! DECL_BUILT_IN (olddecl))
3076 cp_warning ("library function `%#D' redeclared as non-function `%#D'",
3077 olddecl, newdecl);
3078 else
3079 {
3080 cp_error ("declaration of `%#D'", newdecl);
3081 cp_error ("conflicts with built-in declaration `%#D'",
3082 olddecl);
3083 }
3084 return 0;
3085 }
3086 else if (!types_match)
3087 {
3088 if ((DECL_LANGUAGE (newdecl) == lang_c
3089 && DECL_LANGUAGE (olddecl) == lang_c)
3090 || compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
3091 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
3092 {
3093 /* A near match; override the builtin. */
3094
3095 if (TREE_PUBLIC (newdecl))
3096 {
3097 cp_warning ("new declaration `%#D'", newdecl);
3098 cp_warning ("ambiguates built-in declaration `%#D'",
3099 olddecl);
3100 }
3101 else if (warn_shadow)
3102 cp_warning ("shadowing %s function `%#D'",
3103 DECL_BUILT_IN (olddecl) ? "built-in" : "library",
3104 olddecl);
3105 }
3106 else
3107 /* Discard the old built-in function. */
3108 return 0;
3109 }
3110 }
3111 else if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
3112 {
3113 if ((TREE_CODE (olddecl) == TYPE_DECL && DECL_ARTIFICIAL (olddecl)
3114 && TREE_CODE (newdecl) != TYPE_DECL
3115 && ! (TREE_CODE (newdecl) == TEMPLATE_DECL
3116 && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL))
3117 || (TREE_CODE (newdecl) == TYPE_DECL && DECL_ARTIFICIAL (newdecl)
3118 && TREE_CODE (olddecl) != TYPE_DECL
3119 && ! (TREE_CODE (olddecl) == TEMPLATE_DECL
3120 && (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl))
3121 == TYPE_DECL))))
3122 {
3123 /* We do nothing special here, because C++ does such nasty
3124 things with TYPE_DECLs. Instead, just let the TYPE_DECL
3125 get shadowed, and know that if we need to find a TYPE_DECL
3126 for a given name, we can look in the IDENTIFIER_TYPE_VALUE
3127 slot of the identifier. */
3128 return 0;
3129 }
3130
3131 if ((TREE_CODE (newdecl) == FUNCTION_DECL
3132 && DECL_FUNCTION_TEMPLATE_P (olddecl))
3133 || (TREE_CODE (olddecl) == FUNCTION_DECL
3134 && DECL_FUNCTION_TEMPLATE_P (newdecl)))
3135 return 0;
3136
3137 cp_error ("`%#D' redeclared as different kind of symbol", newdecl);
3138 if (TREE_CODE (olddecl) == TREE_LIST)
3139 olddecl = TREE_VALUE (olddecl);
3140 cp_error_at ("previous declaration of `%#D'", olddecl);
3141
3142 /* New decl is completely inconsistent with the old one =>
3143 tell caller to replace the old one. */
3144
3145 return 0;
3146 }
3147 else if (!types_match)
3148 {
3149 if (DECL_REAL_CONTEXT (newdecl) != DECL_REAL_CONTEXT (olddecl))
3150 /* These are certainly not duplicate declarations; they're
3151 from different scopes. */
3152 return 0;
3153
3154 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
3155 {
3156 /* The name of a class template may not be declared to refer to
3157 any other template, class, function, object, namespace, value,
3158 or type in the same scope. */
3159 if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == TYPE_DECL
3160 || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
3161 {
3162 cp_error ("declaration of template `%#D'", newdecl);
3163 cp_error_at ("conflicts with previous declaration `%#D'",
3164 olddecl);
3165 }
3166 else if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == FUNCTION_DECL
3167 && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
3168 && compparms (TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl))),
3169 TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl))))
3170 && comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
3171 DECL_TEMPLATE_PARMS (olddecl)))
3172 {
3173 cp_error ("new declaration `%#D'", newdecl);
3174 cp_error_at ("ambiguates old declaration `%#D'", olddecl);
3175 }
3176 return 0;
3177 }
3178 if (TREE_CODE (newdecl) == FUNCTION_DECL)
3179 {
3180 if (DECL_LANGUAGE (newdecl) == lang_c
3181 && DECL_LANGUAGE (olddecl) == lang_c)
3182 {
3183 cp_error ("declaration of C function `%#D' conflicts with",
3184 newdecl);
3185 cp_error_at ("previous declaration `%#D' here", olddecl);
3186 }
3187 else if (compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
3188 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
3189 {
3190 cp_error ("new declaration `%#D'", newdecl);
3191 cp_error_at ("ambiguates old declaration `%#D'", olddecl);
3192 }
3193 else
3194 return 0;
3195 }
3196
3197 /* Already complained about this, so don't do so again. */
3198 else if (current_class_type == NULL_TREE
3199 || IDENTIFIER_ERROR_LOCUS (DECL_ASSEMBLER_NAME (newdecl)) != current_class_type)
3200 {
3201 cp_error ("conflicting types for `%#D'", newdecl);
3202 cp_error_at ("previous declaration as `%#D'", olddecl);
3203 }
3204 }
3205 else if (TREE_CODE (newdecl) == FUNCTION_DECL
3206 && ((DECL_TEMPLATE_SPECIALIZATION (olddecl)
3207 && (!DECL_TEMPLATE_INFO (newdecl)
3208 || (DECL_TI_TEMPLATE (newdecl)
3209 != DECL_TI_TEMPLATE (olddecl))))
3210 || (DECL_TEMPLATE_SPECIALIZATION (newdecl)
3211 && (!DECL_TEMPLATE_INFO (olddecl)
3212 || (DECL_TI_TEMPLATE (olddecl)
3213 != DECL_TI_TEMPLATE (newdecl))))))
3214 /* It's OK to have a template specialization and a non-template
3215 with the same type, or to have specializations of two
3216 different templates with the same type. Note that if one is a
3217 specialization, and the other is an instantiation of the same
3218 template, that we do not exit at this point. That situation
3219 can occur if we instantiate a template class, and then
3220 specialize one of its methods. This situation is legal, but
3221 the declarations must be merged in the usual way. */
3222 return 0;
3223 else if (TREE_CODE (newdecl) == FUNCTION_DECL
3224 && ((DECL_TEMPLATE_INSTANTIATION (olddecl)
3225 && !DECL_USE_TEMPLATE (newdecl))
3226 || (DECL_TEMPLATE_INSTANTIATION (newdecl)
3227 && !DECL_USE_TEMPLATE (olddecl))))
3228 /* One of the declarations is a template instantiation, and the
3229 other is not a template at all. That's OK. */
3230 return 0;
3231 else if (TREE_CODE (newdecl) == NAMESPACE_DECL
3232 && DECL_NAMESPACE_ALIAS (newdecl)
3233 && DECL_NAMESPACE_ALIAS (newdecl) == DECL_NAMESPACE_ALIAS (olddecl))
3234 /* Redeclaration of namespace alias, ignore it. */
3235 return 1;
3236 else
3237 {
3238 const char *errmsg = redeclaration_error_message (newdecl, olddecl);
3239 if (errmsg)
3240 {
3241 cp_error (errmsg, newdecl);
3242 if (DECL_NAME (olddecl) != NULL_TREE)
3243 cp_error_at ((DECL_INITIAL (olddecl)
3244 && namespace_bindings_p ())
3245 ? "`%#D' previously defined here"
3246 : "`%#D' previously declared here", olddecl);
3247 }
3248 else if (TREE_CODE (olddecl) == FUNCTION_DECL
3249 && DECL_INITIAL (olddecl) != NULL_TREE
3250 && TYPE_ARG_TYPES (TREE_TYPE (olddecl)) == NULL_TREE
3251 && TYPE_ARG_TYPES (TREE_TYPE (newdecl)) != NULL_TREE)
3252 {
3253 /* Prototype decl follows defn w/o prototype. */
3254 cp_warning_at ("prototype for `%#D'", newdecl);
3255 cp_warning_at ("follows non-prototype definition here", olddecl);
3256 }
3257 else if (TREE_CODE (olddecl) == FUNCTION_DECL
3258 && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl))
3259 {
3260 /* extern "C" int foo ();
3261 int foo () { bar (); }
3262 is OK. */
3263 if (current_lang_stack
3264 == &VARRAY_TREE (current_lang_base, 0))
3265 DECL_LANGUAGE (newdecl) = DECL_LANGUAGE (olddecl);
3266 else
3267 {
3268 cp_error_at ("previous declaration of `%#D' with %L linkage",
3269 olddecl, DECL_LANGUAGE (olddecl));
3270 cp_error ("conflicts with new declaration with %L linkage",
3271 DECL_LANGUAGE (newdecl));
3272 }
3273 }
3274
3275 if (DECL_LANG_SPECIFIC (olddecl) && DECL_USE_TEMPLATE (olddecl))
3276 ;
3277 else if (TREE_CODE (olddecl) == FUNCTION_DECL)
3278 {
3279 tree t1 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
3280 tree t2 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
3281 int i = 1;
3282
3283 if (TREE_CODE (TREE_TYPE (newdecl)) == METHOD_TYPE)
3284 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2);
3285
3286 for (; t1 && t1 != void_list_node;
3287 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2), i++)
3288 if (TREE_PURPOSE (t1) && TREE_PURPOSE (t2))
3289 {
3290 if (1 == simple_cst_equal (TREE_PURPOSE (t1),
3291 TREE_PURPOSE (t2)))
3292 {
3293 if (pedantic)
3294 {
3295 cp_pedwarn ("default argument given for parameter %d of `%#D'",
3296 i, newdecl);
3297 cp_pedwarn_at ("after previous specification in `%#D'",
3298 olddecl);
3299 }
3300 }
3301 else
3302 {
3303 cp_error ("default argument given for parameter %d of `%#D'",
3304 i, newdecl);
3305 cp_error_at ("after previous specification in `%#D'",
3306 olddecl);
3307 }
3308 }
3309
3310 if (DECL_THIS_INLINE (newdecl) && ! DECL_THIS_INLINE (olddecl)
3311 && TREE_ADDRESSABLE (olddecl) && warn_inline)
3312 {
3313 cp_warning ("`%#D' was used before it was declared inline",
3314 newdecl);
3315 cp_warning_at ("previous non-inline declaration here",
3316 olddecl);
3317 }
3318 }
3319 }
3320
3321 /* If new decl is `static' and an `extern' was seen previously,
3322 warn about it. */
3323 warn_extern_redeclared_static (newdecl, olddecl);
3324
3325 /* We have committed to returning 1 at this point. */
3326 if (TREE_CODE (newdecl) == FUNCTION_DECL)
3327 {
3328 /* Now that functions must hold information normally held
3329 by field decls, there is extra work to do so that
3330 declaration information does not get destroyed during
3331 definition. */
3332 if (DECL_VINDEX (olddecl))
3333 DECL_VINDEX (newdecl) = DECL_VINDEX (olddecl);
3334 if (DECL_CONTEXT (olddecl))
3335 DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
3336 if (DECL_CLASS_CONTEXT (olddecl))
3337 DECL_CLASS_CONTEXT (newdecl) = DECL_CLASS_CONTEXT (olddecl);
3338 if (DECL_PENDING_INLINE_INFO (newdecl) == (struct pending_inline *)0)
3339 DECL_PENDING_INLINE_INFO (newdecl) = DECL_PENDING_INLINE_INFO (olddecl);
3340 DECL_STATIC_CONSTRUCTOR (newdecl) |= DECL_STATIC_CONSTRUCTOR (olddecl);
3341 DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
3342 DECL_ABSTRACT_VIRTUAL_P (newdecl) |= DECL_ABSTRACT_VIRTUAL_P (olddecl);
3343 DECL_VIRTUAL_P (newdecl) |= DECL_VIRTUAL_P (olddecl);
3344 DECL_NEEDS_FINAL_OVERRIDER_P (newdecl) |= DECL_NEEDS_FINAL_OVERRIDER_P (olddecl);
3345 new_defines_function = DECL_INITIAL (newdecl) != NULL_TREE;
3346
3347 /* Optionally warn about more than one declaration for the same
3348 name, but don't warn about a function declaration followed by a
3349 definition. */
3350 if (warn_redundant_decls && ! DECL_ARTIFICIAL (olddecl)
3351 && !(new_defines_function && DECL_INITIAL (olddecl) == NULL_TREE)
3352 /* Don't warn about extern decl followed by definition. */
3353 && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl))
3354 /* Don't warn about friends, let add_friend take care of it. */
3355 && ! DECL_FRIEND_P (newdecl))
3356 {
3357 cp_warning ("redundant redeclaration of `%D' in same scope", newdecl);
3358 cp_warning_at ("previous declaration of `%D'", olddecl);
3359 }
3360 }
3361
3362 /* Deal with C++: must preserve virtual function table size. */
3363 if (TREE_CODE (olddecl) == TYPE_DECL)
3364 {
3365 register tree newtype = TREE_TYPE (newdecl);
3366 register tree oldtype = TREE_TYPE (olddecl);
3367
3368 if (newtype != error_mark_node && oldtype != error_mark_node
3369 && TYPE_LANG_SPECIFIC (newtype) && TYPE_LANG_SPECIFIC (oldtype))
3370 {
3371 CLASSTYPE_VSIZE (newtype) = CLASSTYPE_VSIZE (oldtype);
3372 CLASSTYPE_FRIEND_CLASSES (newtype)
3373 = CLASSTYPE_FRIEND_CLASSES (oldtype);
3374 }
3375 }
3376
3377 /* Copy all the DECL_... slots specified in the new decl
3378 except for any that we copy here from the old type. */
3379 DECL_MACHINE_ATTRIBUTES (newdecl)
3380 = merge_machine_decl_attributes (olddecl, newdecl);
3381
3382 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
3383 {
3384 if (! duplicate_decls (DECL_TEMPLATE_RESULT (newdecl),
3385 DECL_TEMPLATE_RESULT (olddecl)))
3386 cp_error ("invalid redeclaration of %D", newdecl);
3387 TREE_TYPE (olddecl) = TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl));
3388 DECL_TEMPLATE_SPECIALIZATIONS (olddecl)
3389 = chainon (DECL_TEMPLATE_SPECIALIZATIONS (olddecl),
3390 DECL_TEMPLATE_SPECIALIZATIONS (newdecl));
3391
3392 return 1;
3393 }
3394
3395 if (types_match)
3396 {
3397 /* Automatically handles default parameters. */
3398 tree oldtype = TREE_TYPE (olddecl);
3399 tree newtype;
3400
3401 /* Make sure we put the new type in the same obstack as the old one. */
3402 if (oldtype)
3403 push_obstacks (TYPE_OBSTACK (oldtype), TYPE_OBSTACK (oldtype));
3404 else
3405 push_permanent_obstack ();
3406
3407 /* Merge the data types specified in the two decls. */
3408 newtype = common_type (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
3409
3410 if (TREE_CODE (newdecl) == VAR_DECL)
3411 DECL_THIS_EXTERN (newdecl) |= DECL_THIS_EXTERN (olddecl);
3412 /* Do this after calling `common_type' so that default
3413 parameters don't confuse us. */
3414 else if (TREE_CODE (newdecl) == FUNCTION_DECL
3415 && (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl))
3416 != TYPE_RAISES_EXCEPTIONS (TREE_TYPE (olddecl))))
3417 {
3418 TREE_TYPE (newdecl) = build_exception_variant (newtype,
3419 TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl)));
3420 TREE_TYPE (olddecl) = build_exception_variant (newtype,
3421 TYPE_RAISES_EXCEPTIONS (oldtype));
3422
3423 if ((pedantic || ! DECL_IN_SYSTEM_HEADER (olddecl))
3424 && DECL_SOURCE_LINE (olddecl) != 0
3425 && flag_exceptions
3426 && !comp_except_specs (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl)),
3427 TYPE_RAISES_EXCEPTIONS (TREE_TYPE (olddecl)), 1))
3428 {
3429 cp_error ("declaration of `%F' throws different exceptions",
3430 newdecl);
3431 cp_error_at ("to previous declaration `%F'", olddecl);
3432 }
3433 }
3434 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
3435
3436 /* Lay the type out, unless already done. */
3437 if (! same_type_p (newtype, oldtype)
3438 && TREE_TYPE (newdecl) != error_mark_node
3439 && !(processing_template_decl && uses_template_parms (newdecl)))
3440 layout_type (TREE_TYPE (newdecl));
3441
3442 if ((TREE_CODE (newdecl) == VAR_DECL
3443 || TREE_CODE (newdecl) == PARM_DECL
3444 || TREE_CODE (newdecl) == RESULT_DECL
3445 || TREE_CODE (newdecl) == FIELD_DECL
3446 || TREE_CODE (newdecl) == TYPE_DECL)
3447 && !(processing_template_decl && uses_template_parms (newdecl)))
3448 layout_decl (newdecl, 0);
3449
3450 /* Merge the type qualifiers. */
3451 if (TREE_READONLY (newdecl))
3452 TREE_READONLY (olddecl) = 1;
3453 if (TREE_THIS_VOLATILE (newdecl))
3454 TREE_THIS_VOLATILE (olddecl) = 1;
3455
3456 /* Merge the initialization information. */
3457 if (DECL_INITIAL (newdecl) == NULL_TREE
3458 && DECL_INITIAL (olddecl) != NULL_TREE)
3459 {
3460 DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
3461 DECL_SOURCE_FILE (newdecl) = DECL_SOURCE_FILE (olddecl);
3462 DECL_SOURCE_LINE (newdecl) = DECL_SOURCE_LINE (olddecl);
3463 if (CAN_HAVE_FULL_LANG_DECL_P (newdecl)
3464 && DECL_LANG_SPECIFIC (newdecl)
3465 && DECL_LANG_SPECIFIC (olddecl))
3466 DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
3467 }
3468
3469 /* Merge the section attribute.
3470 We want to issue an error if the sections conflict but that must be
3471 done later in decl_attributes since we are called before attributes
3472 are assigned. */
3473 if (DECL_SECTION_NAME (newdecl) == NULL_TREE)
3474 DECL_SECTION_NAME (newdecl) = DECL_SECTION_NAME (olddecl);
3475
3476 /* Keep the old rtl since we can safely use it, unless it's the
3477 call to abort() used for abstract virtuals. */
3478 if ((DECL_LANG_SPECIFIC (olddecl)
3479 && !DECL_ABSTRACT_VIRTUAL_P (olddecl))
3480 || DECL_RTL (olddecl) != DECL_RTL (abort_fndecl))
3481 DECL_RTL (newdecl) = DECL_RTL (olddecl);
3482
3483 pop_obstacks ();
3484 }
3485 /* If cannot merge, then use the new type and qualifiers,
3486 and don't preserve the old rtl. */
3487 else
3488 {
3489 /* Clean out any memory we had of the old declaration. */
3490 tree oldstatic = value_member (olddecl, static_aggregates);
3491 if (oldstatic)
3492 TREE_VALUE (oldstatic) = error_mark_node;
3493
3494 TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
3495 TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
3496 TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
3497 TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
3498 }
3499
3500 /* Merge the storage class information. */
3501 DECL_WEAK (newdecl) |= DECL_WEAK (olddecl);
3502 DECL_ONE_ONLY (newdecl) |= DECL_ONE_ONLY (olddecl);
3503 TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
3504 TREE_STATIC (olddecl) = TREE_STATIC (newdecl) |= TREE_STATIC (olddecl);
3505 if (! DECL_EXTERNAL (olddecl))
3506 DECL_EXTERNAL (newdecl) = 0;
3507
3508 if (DECL_LANG_SPECIFIC (newdecl) && DECL_LANG_SPECIFIC (olddecl))
3509 {
3510 DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl);
3511 DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl);
3512 DECL_COMDAT (newdecl) |= DECL_COMDAT (olddecl);
3513 DECL_TEMPLATE_INSTANTIATED (newdecl)
3514 |= DECL_TEMPLATE_INSTANTIATED (olddecl);
3515 /* Don't really know how much of the language-specific
3516 values we should copy from old to new. */
3517 DECL_IN_AGGR_P (newdecl) = DECL_IN_AGGR_P (olddecl);
3518 DECL_ACCESS (newdecl) = DECL_ACCESS (olddecl);
3519 DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl);
3520 DECL_TEMPLATE_INFO (newdecl) = DECL_TEMPLATE_INFO (olddecl);
3521 olddecl_friend = DECL_FRIEND_P (olddecl);
3522
3523 /* Only functions have DECL_BEFRIENDING_CLASSES. */
3524 if (TREE_CODE (newdecl) == FUNCTION_DECL
3525 || DECL_FUNCTION_TEMPLATE_P (newdecl))
3526 DECL_BEFRIENDING_CLASSES (newdecl)
3527 = chainon (DECL_BEFRIENDING_CLASSES (newdecl),
3528 DECL_BEFRIENDING_CLASSES (olddecl));
3529 }
3530
3531 if (TREE_CODE (newdecl) == FUNCTION_DECL)
3532 {
3533 if (DECL_TEMPLATE_INSTANTIATION (olddecl)
3534 && !DECL_TEMPLATE_INSTANTIATION (newdecl))
3535 {
3536 /* If newdecl is not a specialization, then it is not a
3537 template-related function at all. And that means that we
3538 shoud have exited above, returning 0. */
3539 my_friendly_assert (DECL_TEMPLATE_SPECIALIZATION (newdecl),
3540 0);
3541
3542 if (TREE_USED (olddecl))
3543 /* From [temp.expl.spec]:
3544
3545 If a template, a member template or the member of a class
3546 template is explicitly specialized then that
3547 specialization shall be declared before the first use of
3548 that specialization that would cause an implicit
3549 instantiation to take place, in every translation unit in
3550 which such a use occurs. */
3551 cp_error ("explicit specialization of %D after first use",
3552 olddecl);
3553
3554 SET_DECL_TEMPLATE_SPECIALIZATION (olddecl);
3555 }
3556 DECL_THIS_INLINE (newdecl) |= DECL_THIS_INLINE (olddecl);
3557
3558 /* If either decl says `inline', this fn is inline, unless its
3559 definition was passed already. */
3560 if (DECL_INLINE (newdecl) && DECL_INITIAL (olddecl) == NULL_TREE)
3561 DECL_INLINE (olddecl) = 1;
3562 DECL_INLINE (newdecl) = DECL_INLINE (olddecl);
3563
3564 if (! types_match)
3565 {
3566 DECL_LANGUAGE (olddecl) = DECL_LANGUAGE (newdecl);
3567 DECL_ASSEMBLER_NAME (olddecl) = DECL_ASSEMBLER_NAME (newdecl);
3568 DECL_RTL (olddecl) = DECL_RTL (newdecl);
3569 }
3570 if (! types_match || new_defines_function)
3571 {
3572 /* These need to be copied so that the names are available.
3573 Note that if the types do match, we'll preserve inline
3574 info and other bits, but if not, we won't. */
3575 DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
3576 DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
3577 }
3578 if (new_defines_function)
3579 /* If defining a function declared with other language
3580 linkage, use the previously declared language linkage. */
3581 DECL_LANGUAGE (newdecl) = DECL_LANGUAGE (olddecl);
3582 else if (types_match)
3583 {
3584 /* If redeclaring a builtin function, and not a definition,
3585 it stays built in. */
3586 if (DECL_BUILT_IN (olddecl))
3587 {
3588 DECL_BUILT_IN (newdecl) = 1;
3589 DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
3590 /* If we're keeping the built-in definition, keep the rtl,
3591 regardless of declaration matches. */
3592 DECL_RTL (newdecl) = DECL_RTL (olddecl);
3593 }
3594 else
3595 DECL_FRAME_SIZE (newdecl) = DECL_FRAME_SIZE (olddecl);
3596
3597 DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
3598 if ((DECL_SAVED_INSNS (newdecl) = DECL_SAVED_INSNS (olddecl)))
3599 /* Previously saved insns go together with
3600 the function's previous definition. */
3601 DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
3602 /* Don't clear out the arguments if we're redefining a function. */
3603 if (DECL_ARGUMENTS (olddecl))
3604 DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
3605 }
3606 if (DECL_LANG_SPECIFIC (olddecl))
3607 DECL_MAIN_VARIANT (newdecl) = DECL_MAIN_VARIANT (olddecl);
3608 }
3609
3610 if (TREE_CODE (newdecl) == NAMESPACE_DECL)
3611 {
3612 NAMESPACE_LEVEL (newdecl) = NAMESPACE_LEVEL (olddecl);
3613 }
3614
3615 /* Now preserve various other info from the definition. */
3616 TREE_ADDRESSABLE (newdecl) = TREE_ADDRESSABLE (olddecl);
3617 TREE_ASM_WRITTEN (newdecl) = TREE_ASM_WRITTEN (olddecl);
3618 DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
3619 DECL_ASSEMBLER_NAME (newdecl) = DECL_ASSEMBLER_NAME (olddecl);
3620
3621 if (TREE_CODE (newdecl) == FUNCTION_DECL)
3622 {
3623 int function_size;
3624
3625 function_size = sizeof (struct tree_decl);
3626
3627 bcopy ((char *) newdecl + sizeof (struct tree_common),
3628 (char *) olddecl + sizeof (struct tree_common),
3629 function_size - sizeof (struct tree_common));
3630
3631 if (DECL_TEMPLATE_INSTANTIATION (newdecl))
3632 {
3633 /* If newdecl is a template instantiation, it is possible that
3634 the following sequence of events has occurred:
3635
3636 o A friend function was declared in a class template. The
3637 class template was instantiated.
3638
3639 o The instantiation of the friend declaration was
3640 recorded on the instantiation list, and is newdecl.
3641
3642 o Later, however, instantiate_class_template called pushdecl
3643 on the newdecl to perform name injection. But, pushdecl in
3644 turn called duplicate_decls when it discovered that another
3645 declaration of a global function with the same name already
3646 existed.
3647
3648 o Here, in duplicate_decls, we decided to clobber newdecl.
3649
3650 If we're going to do that, we'd better make sure that
3651 olddecl, and not newdecl, is on the list of
3652 instantiations so that if we try to do the instantiation
3653 again we won't get the clobbered declaration. */
3654
3655 tree tmpl = DECL_TI_TEMPLATE (newdecl);
3656 tree decls = DECL_TEMPLATE_SPECIALIZATIONS (tmpl);
3657
3658 for (; decls; decls = TREE_CHAIN (decls))
3659 if (TREE_VALUE (decls) == newdecl)
3660 TREE_VALUE (decls) = olddecl;
3661 }
3662 }
3663 else
3664 {
3665 bcopy ((char *) newdecl + sizeof (struct tree_common),
3666 (char *) olddecl + sizeof (struct tree_common),
3667 sizeof (struct tree_decl) - sizeof (struct tree_common)
3668 + tree_code_length [(int)TREE_CODE (newdecl)] * sizeof (char *));
3669 }
3670
3671 DECL_UID (olddecl) = olddecl_uid;
3672 if (olddecl_friend)
3673 DECL_FRIEND_P (olddecl) = 1;
3674
3675 /* NEWDECL contains the merged attribute lists.
3676 Update OLDDECL to be the same. */
3677 DECL_MACHINE_ATTRIBUTES (olddecl) = DECL_MACHINE_ATTRIBUTES (newdecl);
3678
3679 return 1;
3680 }
3681
3682 /* Record a decl-node X as belonging to the current lexical scope.
3683 Check for errors (such as an incompatible declaration for the same
3684 name already seen in the same scope).
3685
3686 Returns either X or an old decl for the same name.
3687 If an old decl is returned, it may have been smashed
3688 to agree with what X says. */
3689
3690 tree
3691 pushdecl (x)
3692 tree x;
3693 {
3694 register tree t;
3695 register tree name = DECL_ASSEMBLER_NAME (x);
3696 int need_new_binding = 1;
3697
3698 if (DECL_TEMPLATE_PARM_P (x))
3699 /* Template parameters have no context; they are not X::T even
3700 when declared within a class or namespace. */
3701 ;
3702 else
3703 {
3704 if (current_function_decl && x != current_function_decl
3705 /* A local declaration for a function doesn't constitute
3706 nesting. */
3707 && (TREE_CODE (x) != FUNCTION_DECL || DECL_INITIAL (x))
3708 /* Don't change DECL_CONTEXT of virtual methods. */
3709 && (TREE_CODE (x) != FUNCTION_DECL || !DECL_VIRTUAL_P (x))
3710 && !DECL_CONTEXT (x))
3711 DECL_CONTEXT (x) = current_function_decl;
3712 if (!DECL_CONTEXT (x))
3713 DECL_CONTEXT (x) = FROB_CONTEXT (current_namespace);
3714 }
3715
3716 /* Type are looked up using the DECL_NAME, as that is what the rest of the
3717 compiler wants to use. */
3718 if (TREE_CODE (x) == TYPE_DECL || TREE_CODE (x) == VAR_DECL
3719 || TREE_CODE (x) == NAMESPACE_DECL)
3720 name = DECL_NAME (x);
3721
3722 if (name)
3723 {
3724 #if 0
3725 /* Not needed...see below. */
3726 char *file;
3727 int line;
3728 #endif
3729 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
3730 name = TREE_OPERAND (name, 0);
3731
3732 /* Namespace-scoped variables are not found in the current level. */
3733 if (TREE_CODE (x) == VAR_DECL && DECL_NAMESPACE_SCOPE_P (x))
3734 t = namespace_binding (name, DECL_CONTEXT (x));
3735 else
3736 t = lookup_name_current_level (name);
3737 if (t == error_mark_node)
3738 {
3739 /* error_mark_node is 0 for a while during initialization! */
3740 t = NULL_TREE;
3741 cp_error_at ("`%#D' used prior to declaration", x);
3742 }
3743
3744 else if (t != NULL_TREE)
3745 {
3746 #if 0
3747 /* This is turned off until I have time to do it right (bpk). */
3748 /* With the code below that uses it... */
3749 file = DECL_SOURCE_FILE (t);
3750 line = DECL_SOURCE_LINE (t);
3751 #endif
3752 if (TREE_CODE (t) == PARM_DECL)
3753 {
3754 if (DECL_CONTEXT (t) == NULL_TREE)
3755 fatal ("parse errors have confused me too much");
3756
3757 /* Check for duplicate params. */
3758 if (duplicate_decls (x, t))
3759 return t;
3760 }
3761 else if (((TREE_CODE (x) == FUNCTION_DECL && DECL_LANGUAGE (x) == lang_c)
3762 || DECL_FUNCTION_TEMPLATE_P (x))
3763 && is_overloaded_fn (t))
3764 /* Don't do anything just yet. */;
3765 else if (t == wchar_decl_node)
3766 {
3767 if (pedantic && ! DECL_IN_SYSTEM_HEADER (x))
3768 cp_pedwarn ("redeclaration of wchar_t as `%T'", TREE_TYPE (x));
3769
3770 /* Throw away the redeclaration. */
3771 return t;
3772 }
3773 else if (TREE_CODE (t) != TREE_CODE (x))
3774 {
3775 if (duplicate_decls (x, t))
3776 return t;
3777 }
3778 else if (duplicate_decls (x, t))
3779 {
3780 #if 0
3781 /* This is turned off until I have time to do it right (bpk). */
3782
3783 /* Also warn if they did a prototype with `static' on it, but
3784 then later left the `static' off. */
3785 if (! TREE_PUBLIC (name) && TREE_PUBLIC (x))
3786 {
3787 if (DECL_LANG_SPECIFIC (t) && DECL_FRIEND_P (t))
3788 return t;
3789
3790 if (extra_warnings)
3791 {
3792 cp_warning ("`static' missing from declaration of `%D'",
3793 t);
3794 warning_with_file_and_line (file, line,
3795 "previous declaration of `%s'",
3796 decl_as_string (t, 0));
3797 }
3798
3799 /* Now fix things so it'll do what they expect. */
3800 if (current_function_decl)
3801 TREE_PUBLIC (current_function_decl) = 0;
3802 }
3803 /* Due to interference in memory reclamation (X may be
3804 obstack-deallocated at this point), we must guard against
3805 one really special case. [jason: This should be handled
3806 by start_function] */
3807 if (current_function_decl == x)
3808 current_function_decl = t;
3809 #endif
3810 if (TREE_CODE (t) == TYPE_DECL)
3811 SET_IDENTIFIER_TYPE_VALUE (name, TREE_TYPE (t));
3812 else if (TREE_CODE (t) == FUNCTION_DECL)
3813 check_default_args (t);
3814
3815 return t;
3816 }
3817 else if (DECL_MAIN_P (x))
3818 {
3819 /* A redeclaration of main, but not a duplicate of the
3820 previous one.
3821
3822 [basic.start.main]
3823
3824 This function shall not be overloaded. */
3825 cp_error_at ("invalid redeclaration of `%D'", t);
3826 cp_error ("as `%D'", x);
3827 /* We don't try to push this declaration since that
3828 causes a crash. */
3829 return x;
3830 }
3831 }
3832
3833 check_template_shadow (x);
3834
3835 /* If this is a function conjured up by the backend, massage it
3836 so it looks friendly. */
3837 if (TREE_CODE (x) == FUNCTION_DECL
3838 && ! DECL_LANG_SPECIFIC (x))
3839 {
3840 retrofit_lang_decl (x);
3841 DECL_LANGUAGE (x) = lang_c;
3842 }
3843
3844 if (TREE_CODE (x) == FUNCTION_DECL && ! DECL_FUNCTION_MEMBER_P (x))
3845 {
3846 t = push_overloaded_decl (x, PUSH_LOCAL);
3847 if (t != x || DECL_LANGUAGE (x) == lang_c)
3848 return t;
3849 if (!namespace_bindings_p ())
3850 /* We do not need to create a binding for this name;
3851 push_overloaded_decl will have already done so if
3852 necessary. */
3853 need_new_binding = 0;
3854 }
3855 else if (DECL_FUNCTION_TEMPLATE_P (x) && DECL_NAMESPACE_SCOPE_P (x))
3856 {
3857 t = push_overloaded_decl (x, PUSH_GLOBAL);
3858 if (t == x)
3859 add_decl_to_level (x, NAMESPACE_LEVEL (CP_DECL_CONTEXT (t)));
3860 return t;
3861 }
3862
3863 /* If declaring a type as a typedef, copy the type (unless we're
3864 at line 0), and install this TYPE_DECL as the new type's typedef
3865 name. See the extensive comment in ../c-decl.c (pushdecl). */
3866 if (TREE_CODE (x) == TYPE_DECL)
3867 {
3868 tree type = TREE_TYPE (x);
3869 if (DECL_SOURCE_LINE (x) == 0)
3870 {
3871 if (TYPE_NAME (type) == 0)
3872 TYPE_NAME (type) = x;
3873 }
3874 else if (type != error_mark_node && TYPE_NAME (type) != x
3875 /* We don't want to copy the type when all we're
3876 doing is making a TYPE_DECL for the purposes of
3877 inlining. */
3878 && (!TYPE_NAME (type)
3879 || TYPE_NAME (type) != DECL_ABSTRACT_ORIGIN (x)))
3880 {
3881 push_obstacks (TYPE_OBSTACK (type), TYPE_OBSTACK (type));
3882
3883 DECL_ORIGINAL_TYPE (x) = type;
3884 type = build_type_copy (type);
3885 TYPE_STUB_DECL (type) = TYPE_STUB_DECL (DECL_ORIGINAL_TYPE (x));
3886 TYPE_NAME (type) = x;
3887 TREE_TYPE (x) = type;
3888
3889 pop_obstacks ();
3890 }
3891
3892 if (type != error_mark_node
3893 && TYPE_NAME (type)
3894 && TYPE_IDENTIFIER (type))
3895 set_identifier_type_value_with_scope (DECL_NAME (x), type,
3896 current_binding_level);
3897
3898 }
3899
3900 /* Multiple external decls of the same identifier ought to match.
3901
3902 We get warnings about inline functions where they are defined.
3903 We get warnings about other functions from push_overloaded_decl.
3904
3905 Avoid duplicate warnings where they are used. */
3906 if (TREE_PUBLIC (x) && TREE_CODE (x) != FUNCTION_DECL)
3907 {
3908 tree decl;
3909
3910 if (IDENTIFIER_NAMESPACE_VALUE (name) != NULL_TREE
3911 && (DECL_EXTERNAL (IDENTIFIER_NAMESPACE_VALUE (name))
3912 || TREE_PUBLIC (IDENTIFIER_NAMESPACE_VALUE (name))))
3913 decl = IDENTIFIER_NAMESPACE_VALUE (name);
3914 else
3915 decl = NULL_TREE;
3916
3917 if (decl
3918 /* If different sort of thing, we already gave an error. */
3919 && TREE_CODE (decl) == TREE_CODE (x)
3920 && !same_type_p (TREE_TYPE (x), TREE_TYPE (decl)))
3921 {
3922 cp_pedwarn ("type mismatch with previous external decl", x);
3923 cp_pedwarn_at ("previous external decl of `%#D'", decl);
3924 }
3925 }
3926
3927 /* This name is new in its binding level.
3928 Install the new declaration and return it. */
3929 if (namespace_bindings_p ())
3930 {
3931 /* Install a global value. */
3932
3933 /* If the first global decl has external linkage,
3934 warn if we later see static one. */
3935 if (IDENTIFIER_GLOBAL_VALUE (name) == NULL_TREE && TREE_PUBLIC (x))
3936 TREE_PUBLIC (name) = 1;
3937
3938 if (!(TREE_CODE (x) == TYPE_DECL && DECL_ARTIFICIAL (x)
3939 && t != NULL_TREE))
3940 {
3941 if (TREE_CODE (x) == FUNCTION_DECL)
3942 my_friendly_assert
3943 ((IDENTIFIER_GLOBAL_VALUE (name) == NULL_TREE)
3944 || (IDENTIFIER_GLOBAL_VALUE (name) == x), 378);
3945 SET_IDENTIFIER_NAMESPACE_VALUE (name, x);
3946 }
3947
3948 /* Don't forget if the function was used via an implicit decl. */
3949 if (IDENTIFIER_IMPLICIT_DECL (name)
3950 && TREE_USED (IDENTIFIER_IMPLICIT_DECL (name)))
3951 TREE_USED (x) = 1;
3952
3953 /* Don't forget if its address was taken in that way. */
3954 if (IDENTIFIER_IMPLICIT_DECL (name)
3955 && TREE_ADDRESSABLE (IDENTIFIER_IMPLICIT_DECL (name)))
3956 TREE_ADDRESSABLE (x) = 1;
3957
3958 /* Warn about mismatches against previous implicit decl. */
3959 if (IDENTIFIER_IMPLICIT_DECL (name) != NULL_TREE
3960 /* If this real decl matches the implicit, don't complain. */
3961 && ! (TREE_CODE (x) == FUNCTION_DECL
3962 && TREE_TYPE (TREE_TYPE (x)) == integer_type_node))
3963 cp_warning
3964 ("`%D' was previously implicitly declared to return `int'", x);
3965
3966 /* If new decl is `static' and an `extern' was seen previously,
3967 warn about it. */
3968 if (x != NULL_TREE && t != NULL_TREE && decls_match (x, t))
3969 warn_extern_redeclared_static (x, t);
3970 }
3971 else
3972 {
3973 /* Here to install a non-global value. */
3974 tree oldlocal = IDENTIFIER_VALUE (name);
3975 tree oldglobal = IDENTIFIER_NAMESPACE_VALUE (name);
3976
3977 if (need_new_binding)
3978 {
3979 push_local_binding (name, x, 0);
3980 /* Because push_local_binding will hook X on to the
3981 current_binding_level's name list, we don't want to
3982 do that again below. */
3983 need_new_binding = 0;
3984 }
3985
3986 /* If this is a TYPE_DECL, push it into the type value slot. */
3987 if (TREE_CODE (x) == TYPE_DECL)
3988 set_identifier_type_value_with_scope (name, TREE_TYPE (x),
3989 current_binding_level);
3990
3991 /* Clear out any TYPE_DECL shadowed by a namespace so that
3992 we won't think this is a type. The C struct hack doesn't
3993 go through namespaces. */
3994 if (TREE_CODE (x) == NAMESPACE_DECL)
3995 set_identifier_type_value_with_scope (name, NULL_TREE,
3996 current_binding_level);
3997
3998 /* If this is an extern function declaration, see if we
3999 have a global definition or declaration for the function. */
4000 if (oldlocal == NULL_TREE
4001 && DECL_EXTERNAL (x)
4002 && oldglobal != NULL_TREE
4003 && TREE_CODE (x) == FUNCTION_DECL
4004 && TREE_CODE (oldglobal) == FUNCTION_DECL)
4005 {
4006 /* We have one. Their types must agree. */
4007 if (decls_match (x, oldglobal))
4008 /* OK */;
4009 else
4010 {
4011 cp_warning ("extern declaration of `%#D' doesn't match", x);
4012 cp_warning_at ("global declaration `%#D'", oldglobal);
4013 }
4014 }
4015 /* If we have a local external declaration,
4016 and no file-scope declaration has yet been seen,
4017 then if we later have a file-scope decl it must not be static. */
4018 if (oldlocal == NULL_TREE
4019 && oldglobal == NULL_TREE
4020 && DECL_EXTERNAL (x)
4021 && TREE_PUBLIC (x))
4022 TREE_PUBLIC (name) = 1;
4023
4024 if (DECL_FROM_INLINE (x))
4025 /* Inline decls shadow nothing. */;
4026
4027 /* Warn if shadowing an argument at the top level of the body. */
4028 else if (oldlocal != NULL_TREE && !DECL_EXTERNAL (x)
4029 && TREE_CODE (oldlocal) == PARM_DECL
4030 /* Don't complain if it's from an enclosing function. */
4031 && DECL_CONTEXT (oldlocal) == current_function_decl
4032 && TREE_CODE (x) != PARM_DECL)
4033 {
4034 /* Go to where the parms should be and see if we
4035 find them there. */
4036 struct binding_level *b = current_binding_level->level_chain;
4037
4038 if (cleanup_label)
4039 b = b->level_chain;
4040
4041 /* ARM $8.3 */
4042 if (b->parm_flag == 1)
4043 cp_error ("declaration of `%#D' shadows a parameter", name);
4044 }
4045 else if (warn_shadow && oldlocal != NULL_TREE
4046 && current_binding_level->is_for_scope
4047 && !DECL_DEAD_FOR_LOCAL (oldlocal))
4048 {
4049 warning ("variable `%s' shadows local",
4050 IDENTIFIER_POINTER (name));
4051 cp_warning_at (" this is the shadowed declaration", oldlocal);
4052 }
4053 /* Maybe warn if shadowing something else. */
4054 else if (warn_shadow && !DECL_EXTERNAL (x)
4055 /* No shadow warnings for internally generated vars. */
4056 && ! DECL_ARTIFICIAL (x)
4057 /* No shadow warnings for vars made for inlining. */
4058 && ! DECL_FROM_INLINE (x))
4059 {
4060 const char *warnstring = NULL;
4061
4062 if (oldlocal != NULL_TREE && TREE_CODE (oldlocal) == PARM_DECL)
4063 warnstring = "declaration of `%s' shadows a parameter";
4064 else if (IDENTIFIER_CLASS_VALUE (name) != NULL_TREE
4065 && current_class_ptr
4066 && !TREE_STATIC (name))
4067 warnstring = "declaration of `%s' shadows a member of `this'";
4068 else if (oldlocal != NULL_TREE)
4069 warnstring = "declaration of `%s' shadows previous local";
4070 else if (oldglobal != NULL_TREE)
4071 /* XXX shadow warnings in outer-more namespaces */
4072 warnstring = "declaration of `%s' shadows global declaration";
4073
4074 if (warnstring)
4075 warning (warnstring, IDENTIFIER_POINTER (name));
4076 }
4077 }
4078
4079 if (TREE_CODE (x) == FUNCTION_DECL)
4080 check_default_args (x);
4081
4082 /* Keep count of variables in this level with incomplete type. */
4083 if (TREE_CODE (x) == VAR_DECL
4084 && TREE_TYPE (x) != error_mark_node
4085 && ((TYPE_SIZE (TREE_TYPE (x)) == NULL_TREE
4086 && PROMOTES_TO_AGGR_TYPE (TREE_TYPE (x), ARRAY_TYPE))
4087 /* RTTI TD entries are created while defining the type_info. */
4088 || (TYPE_LANG_SPECIFIC (TREE_TYPE (x))
4089 && TYPE_BEING_DEFINED (TREE_TYPE (x)))))
4090 current_binding_level->incomplete
4091 = tree_cons (NULL_TREE, x, current_binding_level->incomplete);
4092 }
4093
4094 if (need_new_binding)
4095 add_decl_to_level (x, current_binding_level);
4096
4097 return x;
4098 }
4099
4100 /* Same as pushdecl, but define X in binding-level LEVEL. We rely on the
4101 caller to set DECL_CONTEXT properly. */
4102
4103 static tree
4104 pushdecl_with_scope (x, level)
4105 tree x;
4106 struct binding_level *level;
4107 {
4108 register struct binding_level *b;
4109 tree function_decl = current_function_decl;
4110
4111 current_function_decl = NULL_TREE;
4112 if (level->parm_flag == 2)
4113 {
4114 b = class_binding_level;
4115 class_binding_level = level;
4116 pushdecl_class_level (x);
4117 class_binding_level = b;
4118 }
4119 else
4120 {
4121 b = current_binding_level;
4122 current_binding_level = level;
4123 x = pushdecl (x);
4124 current_binding_level = b;
4125 }
4126 current_function_decl = function_decl;
4127 return x;
4128 }
4129
4130 /* Like pushdecl, only it places X in the current namespace,
4131 if appropriate. */
4132
4133 tree
4134 pushdecl_namespace_level (x)
4135 tree x;
4136 {
4137 register struct binding_level *b = current_binding_level;
4138 register tree t;
4139
4140 t = pushdecl_with_scope (x, NAMESPACE_LEVEL (current_namespace));
4141
4142 /* Now, the type_shadowed stack may screw us. Munge it so it does
4143 what we want. */
4144 if (TREE_CODE (x) == TYPE_DECL)
4145 {
4146 tree name = DECL_NAME (x);
4147 tree newval;
4148 tree *ptr = (tree *)0;
4149 for (; b != global_binding_level; b = b->level_chain)
4150 {
4151 tree shadowed = b->type_shadowed;
4152 for (; shadowed; shadowed = TREE_CHAIN (shadowed))
4153 if (TREE_PURPOSE (shadowed) == name)
4154 {
4155 ptr = &TREE_VALUE (shadowed);
4156 /* Can't break out of the loop here because sometimes
4157 a binding level will have duplicate bindings for
4158 PT names. It's gross, but I haven't time to fix it. */
4159 }
4160 }
4161 newval = TREE_TYPE (x);
4162 if (ptr == (tree *)0)
4163 {
4164 /* @@ This shouldn't be needed. My test case "zstring.cc" trips
4165 up here if this is changed to an assertion. --KR */
4166 SET_IDENTIFIER_TYPE_VALUE (name, newval);
4167 }
4168 else
4169 {
4170 *ptr = newval;
4171 }
4172 }
4173 return t;
4174 }
4175
4176 /* Like pushdecl, only it places X in GLOBAL_BINDING_LEVEL,
4177 if appropriate. */
4178
4179 tree
4180 pushdecl_top_level (x)
4181 tree x;
4182 {
4183 tree cur_namespace = current_namespace;
4184 current_namespace = global_namespace;
4185 x = pushdecl_namespace_level (x);
4186 current_namespace = cur_namespace;
4187 return x;
4188 }
4189
4190 /* Make the declaration of X appear in CLASS scope. */
4191
4192 void
4193 pushdecl_class_level (x)
4194 tree x;
4195 {
4196 /* Don't use DECL_ASSEMBLER_NAME here! Everything that looks in class
4197 scope looks for the pre-mangled name. */
4198 register tree name;
4199
4200 if (TREE_CODE (x) == OVERLOAD)
4201 x = OVL_CURRENT (x);
4202 name = DECL_NAME (x);
4203
4204 if (name)
4205 {
4206 push_class_level_binding (name, x);
4207 if (TREE_CODE (x) == TYPE_DECL)
4208 set_identifier_type_value (name, TREE_TYPE (x));
4209 }
4210 else if (ANON_AGGR_TYPE_P (TREE_TYPE (x)))
4211 {
4212 tree f;
4213
4214 for (f = TYPE_FIELDS (TREE_TYPE (x));
4215 f;
4216 f = TREE_CHAIN (f))
4217 pushdecl_class_level (f);
4218 }
4219 }
4220
4221 /* Enter DECL into the symbol table, if that's appropriate. Returns
4222 DECL, or a modified version thereof. */
4223
4224 tree
4225 maybe_push_decl (decl)
4226 tree decl;
4227 {
4228 tree type = TREE_TYPE (decl);
4229
4230 /* Add this decl to the current binding level, but not if it comes
4231 from another scope, e.g. a static member variable. TEM may equal
4232 DECL or it may be a previous decl of the same name. */
4233 if ((TREE_CODE (decl) != PARM_DECL
4234 && DECL_CONTEXT (decl) != NULL_TREE
4235 /* Definitions of namespace members outside their namespace are
4236 possible. */
4237 && TREE_CODE (DECL_CONTEXT (decl)) != NAMESPACE_DECL)
4238 || (TREE_CODE (decl) == TEMPLATE_DECL && !namespace_bindings_p ())
4239 || TREE_CODE (type) == UNKNOWN_TYPE
4240 /* The declaration of a template specialization does not affect
4241 the functions available for overload resolution, so we do not
4242 call pushdecl. */
4243 || (TREE_CODE (decl) == FUNCTION_DECL
4244 && DECL_TEMPLATE_SPECIALIZATION (decl)))
4245 return decl;
4246 else
4247 return pushdecl (decl);
4248 }
4249
4250 #if 0
4251 /* This function is used to push the mangled decls for nested types into
4252 the appropriate scope. Previously pushdecl_top_level was used, but that
4253 is incorrect for members of local classes. */
4254
4255 void
4256 pushdecl_nonclass_level (x)
4257 tree x;
4258 {
4259 struct binding_level *b = current_binding_level;
4260
4261 my_friendly_assert (b->parm_flag != 2, 180);
4262
4263 #if 0
4264 /* Get out of template binding levels */
4265 while (b->pseudo_global)
4266 b = b->level_chain;
4267 #endif
4268
4269 pushdecl_with_scope (x, b);
4270 }
4271 #endif
4272
4273 /* Make the declaration(s) of X appear in CLASS scope
4274 under the name NAME. */
4275
4276 void
4277 push_class_level_binding (name, x)
4278 tree name;
4279 tree x;
4280 {
4281 tree binding;
4282 /* The class_binding_level will be NULL if x is a template
4283 parameter name in a member template. */
4284 if (!class_binding_level)
4285 return;
4286
4287 /* Make sure that this new member does not have the same name
4288 as a template parameter. */
4289 if (TYPE_BEING_DEFINED (current_class_type))
4290 check_template_shadow (x);
4291
4292 /* If this declaration shadows a declaration from an enclosing
4293 class, then we will need to restore IDENTIFIER_CLASS_VALUE when
4294 we leave this class. Record the shadowed declaration here. */
4295 binding = IDENTIFIER_BINDING (name);
4296 if (binding
4297 && ((TREE_CODE (x) == OVERLOAD
4298 && BINDING_VALUE (binding)
4299 && is_overloaded_fn (BINDING_VALUE (binding)))
4300 || INHERITED_VALUE_BINDING_P (binding)))
4301 {
4302 tree shadow;
4303 tree old_decl;
4304
4305 /* If the old binding was from a base class, and was for a tag
4306 name, slide it over to make room for the new binding. The
4307 old binding is still visible if explicitly qualified with a
4308 class-key. */
4309 if (INHERITED_VALUE_BINDING_P (binding)
4310 && BINDING_VALUE (binding)
4311 && TREE_CODE (BINDING_VALUE (binding)) == TYPE_DECL
4312 && DECL_ARTIFICIAL (BINDING_VALUE (binding))
4313 && !(TREE_CODE (x) == TYPE_DECL && DECL_ARTIFICIAL (x)))
4314 {
4315 old_decl = BINDING_TYPE (binding);
4316 BINDING_TYPE (binding) = BINDING_VALUE (binding);
4317 BINDING_VALUE (binding) = NULL_TREE;
4318 INHERITED_VALUE_BINDING_P (binding) = 0;
4319 }
4320 else
4321 old_decl = BINDING_VALUE (binding);
4322
4323 /* There was already a binding for X containing fewer
4324 functions than are named in X. Find the previous
4325 declaration of X on the class-shadowed list, and update it. */
4326 for (shadow = class_binding_level->class_shadowed;
4327 shadow;
4328 shadow = TREE_CHAIN (shadow))
4329 if (TREE_PURPOSE (shadow) == name
4330 && TREE_TYPE (shadow) == old_decl)
4331 {
4332 BINDING_VALUE (binding) = x;
4333 INHERITED_VALUE_BINDING_P (binding) = 0;
4334 TREE_TYPE (shadow) = x;
4335 return;
4336 }
4337 }
4338
4339 /* If we didn't replace an existing binding, put the binding on the
4340 stack of bindings for the identifier, and update
4341 IDENTIFIER_CLASS_VALUE. */
4342 if (push_class_binding (name, x))
4343 {
4344 push_cache_obstack ();
4345 class_binding_level->class_shadowed
4346 = tree_cons (name, IDENTIFIER_CLASS_VALUE (name),
4347 class_binding_level->class_shadowed);
4348 pop_obstacks ();
4349 /* Record the value we are binding NAME to so that we can know
4350 what to pop later. */
4351 TREE_TYPE (class_binding_level->class_shadowed) = x;
4352 }
4353 }
4354
4355 /* Insert another USING_DECL into the current binding level,
4356 returning this declaration. If this is a redeclaration,
4357 do nothing and return NULL_TREE. */
4358
4359 tree
4360 push_using_decl (scope, name)
4361 tree scope;
4362 tree name;
4363 {
4364 tree decl;
4365
4366 my_friendly_assert (TREE_CODE (scope) == NAMESPACE_DECL, 383);
4367 my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 384);
4368 for (decl = current_binding_level->usings; decl; decl = TREE_CHAIN (decl))
4369 if (DECL_INITIAL (decl) == scope && DECL_NAME (decl) == name)
4370 break;
4371 if (decl)
4372 return NULL_TREE;
4373 decl = build_lang_decl (USING_DECL, name, void_type_node);
4374 DECL_INITIAL (decl) = scope;
4375 TREE_CHAIN (decl) = current_binding_level->usings;
4376 current_binding_level->usings = decl;
4377 return decl;
4378 }
4379
4380 /* Add namespace to using_directives. Return NULL_TREE if nothing was
4381 changed (i.e. there was already a directive), or the fresh
4382 TREE_LIST otherwise. */
4383
4384 tree
4385 push_using_directive (used)
4386 tree used;
4387 {
4388 tree ud = current_binding_level->using_directives;
4389 tree iter, ancestor;
4390
4391 /* Check if we already have this. */
4392 if (purpose_member (used, ud) != NULL_TREE)
4393 return NULL_TREE;
4394
4395 /* Recursively add all namespaces used. */
4396 for (iter = DECL_NAMESPACE_USING (used); iter; iter = TREE_CHAIN (iter))
4397 push_using_directive (TREE_PURPOSE (iter));
4398
4399 ancestor = namespace_ancestor (current_decl_namespace (), used);
4400 ud = current_binding_level->using_directives;
4401 ud = tree_cons (used, ancestor, ud);
4402 current_binding_level->using_directives = ud;
4403 return ud;
4404 }
4405
4406 /* DECL is a FUNCTION_DECL for a non-member function, which may have
4407 other definitions already in place. We get around this by making
4408 the value of the identifier point to a list of all the things that
4409 want to be referenced by that name. It is then up to the users of
4410 that name to decide what to do with that list.
4411
4412 DECL may also be a TEMPLATE_DECL, with a FUNCTION_DECL in its DECL_RESULT
4413 slot. It is dealt with the same way.
4414
4415 FLAGS is a bitwise-or of the following values:
4416 PUSH_LOCAL: Bind DECL in the current scope, rather than at
4417 namespace scope.
4418 PUSH_USING: DECL is being pushed as the result of a using
4419 declaration.
4420
4421 The value returned may be a previous declaration if we guessed wrong
4422 about what language DECL should belong to (C or C++). Otherwise,
4423 it's always DECL (and never something that's not a _DECL). */
4424
4425 tree
4426 push_overloaded_decl (decl, flags)
4427 tree decl;
4428 int flags;
4429 {
4430 tree name = DECL_NAME (decl);
4431 tree old;
4432 tree new_binding;
4433 int doing_global = (namespace_bindings_p () || !(flags & PUSH_LOCAL));
4434
4435 if (doing_global)
4436 old = namespace_binding (name, DECL_CONTEXT (decl));
4437 else
4438 old = lookup_name_current_level (name);
4439
4440 if (old)
4441 {
4442 if (TREE_CODE (old) == TYPE_DECL && DECL_ARTIFICIAL (old))
4443 {
4444 tree t = TREE_TYPE (old);
4445 if (IS_AGGR_TYPE (t) && warn_shadow
4446 && (! DECL_IN_SYSTEM_HEADER (decl)
4447 || ! DECL_IN_SYSTEM_HEADER (old)))
4448 cp_warning ("`%#D' hides constructor for `%#T'", decl, t);
4449 old = NULL_TREE;
4450 }
4451 else if (is_overloaded_fn (old))
4452 {
4453 tree tmp;
4454
4455 for (tmp = old; tmp; tmp = OVL_NEXT (tmp))
4456 {
4457 tree fn = OVL_CURRENT (tmp);
4458
4459 if (TREE_CODE (tmp) == OVERLOAD && OVL_USED (tmp)
4460 && !(flags & PUSH_USING)
4461 && compparms (TYPE_ARG_TYPES (TREE_TYPE (fn)),
4462 TYPE_ARG_TYPES (TREE_TYPE (decl))))
4463 cp_error ("`%#D' conflicts with previous using declaration `%#D'",
4464 decl, fn);
4465
4466 if (duplicate_decls (decl, fn))
4467 return fn;
4468 }
4469 }
4470 else
4471 {
4472 cp_error_at ("previous non-function declaration `%#D'", old);
4473 cp_error ("conflicts with function declaration `%#D'", decl);
4474 return decl;
4475 }
4476 }
4477
4478 if (old || TREE_CODE (decl) == TEMPLATE_DECL)
4479 {
4480 if (old && TREE_CODE (old) != OVERLOAD)
4481 new_binding = ovl_cons (decl, ovl_cons (old, NULL_TREE));
4482 else
4483 new_binding = ovl_cons (decl, old);
4484 if (flags & PUSH_USING)
4485 OVL_USED (new_binding) = 1;
4486 }
4487 else
4488 /* NAME is not ambiguous. */
4489 new_binding = decl;
4490
4491 if (doing_global)
4492 set_namespace_binding (name, current_namespace, new_binding);
4493 else
4494 {
4495 /* We only create an OVERLOAD if there was a previous binding at
4496 this level, or if decl is a template. In the former case, we
4497 need to remove the old binding and replace it with the new
4498 binding. We must also run through the NAMES on the binding
4499 level where the name was bound to update the chain. */
4500
4501 if (TREE_CODE (new_binding) == OVERLOAD && old)
4502 {
4503 tree *d;
4504
4505 for (d = &BINDING_LEVEL (IDENTIFIER_BINDING (name))->names;
4506 *d;
4507 d = &TREE_CHAIN (*d))
4508 if (*d == old
4509 || (TREE_CODE (*d) == TREE_LIST
4510 && TREE_VALUE (*d) == old))
4511 {
4512 if (TREE_CODE (*d) == TREE_LIST)
4513 /* Just replace the old binding with the new. */
4514 TREE_VALUE (*d) = new_binding;
4515 else
4516 /* Build a TREE_LIST to wrap the OVERLOAD. */
4517 *d = build_tree_list (NULL_TREE, new_binding);
4518
4519 /* And update the CPLUS_BINDING node. */
4520 BINDING_VALUE (IDENTIFIER_BINDING (name))
4521 = new_binding;
4522 return decl;
4523 }
4524
4525 /* We should always find a previous binding in this case. */
4526 my_friendly_abort (0);
4527 }
4528
4529 /* Install the new binding. */
4530 push_local_binding (name, new_binding, flags);
4531 }
4532
4533 return decl;
4534 }
4535 \f
4536 /* Generate an implicit declaration for identifier FUNCTIONID
4537 as a function of type int (). Print a warning if appropriate. */
4538
4539 tree
4540 implicitly_declare (functionid)
4541 tree functionid;
4542 {
4543 register tree decl;
4544 int temp = allocation_temporary_p ();
4545
4546 push_obstacks_nochange ();
4547
4548 /* Save the decl permanently so we can warn if definition follows.
4549 In ANSI C, warn_implicit is usually false, so the saves little space.
4550 But in C++, it's usually true, hence the extra code. */
4551 if (temp && (! warn_implicit || toplevel_bindings_p ()))
4552 end_temporary_allocation ();
4553
4554 /* We used to reuse an old implicit decl here,
4555 but this loses with inline functions because it can clobber
4556 the saved decl chains. */
4557 decl = build_lang_decl (FUNCTION_DECL, functionid, default_function_type);
4558
4559 DECL_EXTERNAL (decl) = 1;
4560 TREE_PUBLIC (decl) = 1;
4561
4562 /* ANSI standard says implicit declarations are in the innermost block.
4563 So we record the decl in the standard fashion. */
4564 pushdecl (decl);
4565 rest_of_decl_compilation (decl, NULL_PTR, 0, 0);
4566
4567 if (warn_implicit
4568 /* Only one warning per identifier. */
4569 && IDENTIFIER_IMPLICIT_DECL (functionid) == NULL_TREE)
4570 {
4571 cp_pedwarn ("implicit declaration of function `%#D'", decl);
4572 }
4573
4574 SET_IDENTIFIER_IMPLICIT_DECL (functionid, decl);
4575
4576 pop_obstacks ();
4577
4578 return decl;
4579 }
4580
4581 /* Return zero if the declaration NEWDECL is valid
4582 when the declaration OLDDECL (assumed to be for the same name)
4583 has already been seen.
4584 Otherwise return an error message format string with a %s
4585 where the identifier should go. */
4586
4587 static const char *
4588 redeclaration_error_message (newdecl, olddecl)
4589 tree newdecl, olddecl;
4590 {
4591 if (TREE_CODE (newdecl) == TYPE_DECL)
4592 {
4593 /* Because C++ can put things into name space for free,
4594 constructs like "typedef struct foo { ... } foo"
4595 would look like an erroneous redeclaration. */
4596 if (same_type_p (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
4597 return 0;
4598 else
4599 return "redefinition of `%#D'";
4600 }
4601 else if (TREE_CODE (newdecl) == FUNCTION_DECL)
4602 {
4603 /* If this is a pure function, its olddecl will actually be
4604 the original initialization to `0' (which we force to call
4605 abort()). Don't complain about redefinition in this case. */
4606 if (DECL_LANG_SPECIFIC (olddecl) && DECL_ABSTRACT_VIRTUAL_P (olddecl))
4607 return 0;
4608
4609 /* If both functions come from different namespaces, this is not
4610 a redeclaration - this is a conflict with a used function. */
4611 if (DECL_NAMESPACE_SCOPE_P (olddecl)
4612 && DECL_CONTEXT (olddecl) != DECL_CONTEXT (newdecl))
4613 return "`%D' conflicts with used function";
4614
4615 /* We'll complain about linkage mismatches in
4616 warn_extern_redeclared_static. */
4617
4618 /* Defining the same name twice is no good. */
4619 if (DECL_INITIAL (olddecl) != NULL_TREE
4620 && DECL_INITIAL (newdecl) != NULL_TREE)
4621 {
4622 if (DECL_NAME (olddecl) == NULL_TREE)
4623 return "`%#D' not declared in class";
4624 else
4625 return "redefinition of `%#D'";
4626 }
4627 return 0;
4628 }
4629 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
4630 {
4631 if ((TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
4632 && DECL_INITIAL (DECL_TEMPLATE_RESULT (newdecl))
4633 && DECL_INITIAL (DECL_TEMPLATE_RESULT (olddecl)))
4634 || (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL
4635 && TYPE_SIZE (TREE_TYPE (newdecl))
4636 && TYPE_SIZE (TREE_TYPE (olddecl))))
4637 return "redefinition of `%#D'";
4638 return 0;
4639 }
4640 else if (toplevel_bindings_p ())
4641 {
4642 /* Objects declared at top level: */
4643 /* If at least one is a reference, it's ok. */
4644 if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl))
4645 return 0;
4646 /* Reject two definitions. */
4647 return "redefinition of `%#D'";
4648 }
4649 else
4650 {
4651 /* Objects declared with block scope: */
4652 /* Reject two definitions, and reject a definition
4653 together with an external reference. */
4654 if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl)))
4655 return "redeclaration of `%#D'";
4656 return 0;
4657 }
4658 }
4659 \f
4660 /* Create a new label, named ID. */
4661
4662 static tree
4663 make_label_decl (id, local_p)
4664 tree id;
4665 int local_p;
4666 {
4667 tree decl;
4668
4669 if (building_stmt_tree ())
4670 push_permanent_obstack ();
4671 decl = build_decl (LABEL_DECL, id, void_type_node);
4672 if (building_stmt_tree ())
4673 pop_obstacks ();
4674 else
4675 /* Make sure every label has an rtx. */
4676 label_rtx (decl);
4677
4678 DECL_CONTEXT (decl) = current_function_decl;
4679 DECL_MODE (decl) = VOIDmode;
4680 C_DECLARED_LABEL_FLAG (decl) = local_p;
4681
4682 /* Say where one reference is to the label, for the sake of the
4683 error if it is not defined. */
4684 DECL_SOURCE_LINE (decl) = lineno;
4685 DECL_SOURCE_FILE (decl) = input_filename;
4686
4687 /* Record the fact that this identifier is bound to this label. */
4688 SET_IDENTIFIER_LABEL_VALUE (id, decl);
4689
4690 /* Record this label on the list of used labels so that we can check
4691 at the end of the function to see whether or not the label was
4692 actually defined. */
4693 if ((named_label_uses == NULL || named_label_uses->label_decl != decl)
4694 && (named_label_uses == NULL
4695 || named_label_uses->names_in_scope != current_binding_level->names
4696 || named_label_uses->label_decl != decl))
4697 {
4698 struct named_label_list *new_ent;
4699 new_ent
4700 = (struct named_label_list*)oballoc (sizeof (struct named_label_list));
4701 new_ent->label_decl = decl;
4702 new_ent->names_in_scope = current_binding_level->names;
4703 new_ent->binding_level = current_binding_level;
4704 new_ent->lineno_o_goto = lineno;
4705 new_ent->filename_o_goto = input_filename;
4706 new_ent->next = named_label_uses;
4707 named_label_uses = new_ent;
4708 }
4709
4710 return decl;
4711 }
4712
4713 /* Look for a label named ID in the current function. If one cannot
4714 be found, create one. (We keep track of used, but undefined,
4715 labels, and complain about them at the end of a function.) */
4716
4717 tree
4718 lookup_label (id)
4719 tree id;
4720 {
4721 tree decl;
4722
4723 /* You can't use labels at global scope. */
4724 if (current_function_decl == NULL_TREE)
4725 {
4726 error ("label `%s' referenced outside of any function",
4727 IDENTIFIER_POINTER (id));
4728 return NULL_TREE;
4729 }
4730
4731 /* See if we've already got this label. */
4732 decl = IDENTIFIER_LABEL_VALUE (id);
4733 if (decl != NULL_TREE && DECL_CONTEXT (decl) == current_function_decl)
4734 return decl;
4735
4736 /* Record this label on the list of labels used in this function.
4737 We do this before calling make_label_decl so that we get the
4738 IDENTIFIER_LABEL_VALUE before the new label is declared. */
4739 named_labels = tree_cons (IDENTIFIER_LABEL_VALUE (id), NULL_TREE,
4740 named_labels);
4741 /* We need a new label. */
4742 decl = make_label_decl (id, /*local_p=*/0);
4743 /* Now fill in the information we didn't have before. */
4744 TREE_VALUE (named_labels) = decl;
4745
4746 return decl;
4747 }
4748
4749 /* Declare a local label named ID. */
4750
4751 tree
4752 declare_local_label (id)
4753 tree id;
4754 {
4755 tree decl;
4756
4757 /* Add a new entry to the SHADOWED_LABELS list so that when we leave
4758 this scope we can restore the old value of
4759 IDENTIFIER_TYPE_VALUE. */
4760 current_binding_level->shadowed_labels
4761 = tree_cons (IDENTIFIER_LABEL_VALUE (id), NULL_TREE,
4762 current_binding_level->shadowed_labels);
4763 /* Look for the label. */
4764 decl = make_label_decl (id, /*local_p=*/1);
4765 /* Now fill in the information we didn't have before. */
4766 TREE_VALUE (current_binding_level->shadowed_labels) = decl;
4767
4768 return decl;
4769 }
4770
4771 /* Define a label, specifying the location in the source file.
4772 Return the LABEL_DECL node for the label, if the definition is valid.
4773 Otherwise return 0. */
4774
4775 tree
4776 define_label (filename, line, name)
4777 char *filename;
4778 int line;
4779 tree name;
4780 {
4781 tree decl = lookup_label (name);
4782
4783 /* After labels, make any new cleanups go into their
4784 own new (temporary) binding contour. */
4785 current_binding_level->more_cleanups_ok = 0;
4786
4787 if (name == get_identifier ("wchar_t"))
4788 cp_pedwarn ("label named wchar_t");
4789
4790 if (DECL_INITIAL (decl) != NULL_TREE)
4791 {
4792 cp_error ("duplicate label `%D'", decl);
4793 return 0;
4794 }
4795 else
4796 {
4797 struct named_label_list *uses, *prev;
4798 int identified = 0;
4799 int saw_eh = 0;
4800
4801 /* Mark label as having been defined. */
4802 DECL_INITIAL (decl) = error_mark_node;
4803 /* Say where in the source. */
4804 DECL_SOURCE_FILE (decl) = filename;
4805 DECL_SOURCE_LINE (decl) = line;
4806
4807 prev = NULL;
4808 uses = named_label_uses;
4809 while (uses != NULL)
4810 if (uses->label_decl == decl)
4811 {
4812 struct binding_level *b = current_binding_level;
4813 while (b)
4814 {
4815 tree new_decls = b->names;
4816 tree old_decls = (b == uses->binding_level)
4817 ? uses->names_in_scope : NULL_TREE;
4818 while (new_decls != old_decls)
4819 {
4820 if (TREE_CODE (new_decls) == VAR_DECL
4821 /* Don't complain about crossing initialization
4822 of internal entities. They can't be accessed,
4823 and they should be cleaned up
4824 by the time we get to the label. */
4825 && ! DECL_ARTIFICIAL (new_decls)
4826 && !(DECL_INITIAL (new_decls) == NULL_TREE
4827 && pod_type_p (TREE_TYPE (new_decls))))
4828 {
4829 /* This is really only important if we're crossing
4830 an initialization. The POD stuff is just
4831 pedantry; why should it matter if the class
4832 contains a field of pointer to member type? */
4833 int problem = (DECL_INITIAL (new_decls)
4834 || (TYPE_NEEDS_CONSTRUCTING
4835 (TREE_TYPE (new_decls))));
4836
4837 if (! identified)
4838 {
4839 if (problem)
4840 {
4841 cp_error ("jump to label `%D'", decl);
4842 error_with_file_and_line
4843 (uses->filename_o_goto,
4844 uses->lineno_o_goto, " from here");
4845 }
4846 else
4847 {
4848 cp_pedwarn ("jump to label `%D'", decl);
4849 pedwarn_with_file_and_line
4850 (uses->filename_o_goto,
4851 uses->lineno_o_goto, " from here");
4852 }
4853 identified = 1;
4854 }
4855
4856 if (problem)
4857 cp_error_at (" crosses initialization of `%#D'",
4858 new_decls);
4859 else
4860 cp_pedwarn_at (" enters scope of non-POD `%#D'",
4861 new_decls);
4862 }
4863 new_decls = TREE_CHAIN (new_decls);
4864 }
4865 if (b == uses->binding_level)
4866 break;
4867 if (b->eh_region && ! saw_eh)
4868 {
4869 if (! identified)
4870 {
4871 cp_error ("jump to label `%D'", decl);
4872 error_with_file_and_line
4873 (uses->filename_o_goto,
4874 uses->lineno_o_goto, " from here");
4875 identified = 1;
4876 }
4877 error (" enters exception handling block");
4878 saw_eh = 1;
4879 }
4880 b = b->level_chain;
4881 }
4882
4883 if (prev != NULL)
4884 prev->next = uses->next;
4885 else
4886 named_label_uses = uses->next;
4887
4888 uses = uses->next;
4889 }
4890 else
4891 {
4892 prev = uses;
4893 uses = uses->next;
4894 }
4895 current_function_return_value = NULL_TREE;
4896 return decl;
4897 }
4898 }
4899
4900 struct cp_switch
4901 {
4902 struct binding_level *level;
4903 struct cp_switch *next;
4904 };
4905
4906 static struct cp_switch *switch_stack;
4907
4908 void
4909 push_switch ()
4910 {
4911 struct cp_switch *p
4912 = (struct cp_switch *) oballoc (sizeof (struct cp_switch));
4913 p->level = current_binding_level;
4914 p->next = switch_stack;
4915 switch_stack = p;
4916 }
4917
4918 void
4919 pop_switch ()
4920 {
4921 switch_stack = switch_stack->next;
4922 }
4923
4924 /* Same, but for CASE labels. If DECL is NULL_TREE, it's the default. */
4925 /* XXX Note decl is never actually used. (bpk) */
4926
4927 void
4928 define_case_label ()
4929 {
4930 tree cleanup = last_cleanup_this_contour ();
4931 struct binding_level *b = current_binding_level;
4932 int identified = 0;
4933
4934 if (cleanup)
4935 {
4936 static int explained = 0;
4937 cp_warning_at ("destructor needed for `%#D'", TREE_PURPOSE (cleanup));
4938 warning ("where case label appears here");
4939 if (!explained)
4940 {
4941 warning ("(enclose actions of previous case statements requiring");
4942 warning ("destructors in their own binding contours.)");
4943 explained = 1;
4944 }
4945 }
4946
4947 for (; b && b != switch_stack->level; b = b->level_chain)
4948 {
4949 tree new_decls = b->names;
4950 for (; new_decls; new_decls = TREE_CHAIN (new_decls))
4951 {
4952 if (TREE_CODE (new_decls) == VAR_DECL
4953 /* Don't complain about crossing initialization
4954 of internal entities. They can't be accessed,
4955 and they should be cleaned up
4956 by the time we get to the label. */
4957 && ! DECL_ARTIFICIAL (new_decls)
4958 && ((DECL_INITIAL (new_decls) != NULL_TREE
4959 && DECL_INITIAL (new_decls) != error_mark_node)
4960 || TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (new_decls))))
4961 {
4962 if (! identified)
4963 error ("jump to case label");
4964 identified = 1;
4965 cp_error_at (" crosses initialization of `%#D'",
4966 new_decls);
4967 }
4968 }
4969 }
4970
4971 /* After labels, make any new cleanups go into their
4972 own new (temporary) binding contour. */
4973
4974 current_binding_level->more_cleanups_ok = 0;
4975 current_function_return_value = NULL_TREE;
4976 }
4977 \f
4978 /* Return the list of declarations of the current level.
4979 Note that this list is in reverse order unless/until
4980 you nreverse it; and when you do nreverse it, you must
4981 store the result back using `storedecls' or you will lose. */
4982
4983 tree
4984 getdecls ()
4985 {
4986 return current_binding_level->names;
4987 }
4988
4989 /* Return the list of type-tags (for structs, etc) of the current level. */
4990
4991 tree
4992 gettags ()
4993 {
4994 return current_binding_level->tags;
4995 }
4996
4997 /* Store the list of declarations of the current level.
4998 This is done for the parameter declarations of a function being defined,
4999 after they are modified in the light of any missing parameters. */
5000
5001 static void
5002 storedecls (decls)
5003 tree decls;
5004 {
5005 current_binding_level->names = decls;
5006 }
5007
5008 /* Similarly, store the list of tags of the current level. */
5009
5010 void
5011 storetags (tags)
5012 tree tags;
5013 {
5014 current_binding_level->tags = tags;
5015 }
5016 \f
5017 /* Given NAME, an IDENTIFIER_NODE,
5018 return the structure (or union or enum) definition for that name.
5019 Searches binding levels from BINDING_LEVEL up to the global level.
5020 If THISLEVEL_ONLY is nonzero, searches only the specified context
5021 (but skips any tag-transparent contexts to find one that is
5022 meaningful for tags).
5023 FORM says which kind of type the caller wants;
5024 it is RECORD_TYPE or UNION_TYPE or ENUMERAL_TYPE.
5025 If the wrong kind of type is found, and it's not a template, an error is
5026 reported. */
5027
5028 static tree
5029 lookup_tag (form, name, binding_level, thislevel_only)
5030 enum tree_code form;
5031 tree name;
5032 struct binding_level *binding_level;
5033 int thislevel_only;
5034 {
5035 register struct binding_level *level;
5036 /* Non-zero if, we should look past a pseudo-global level, even if
5037 THISLEVEL_ONLY. */
5038 int allow_pseudo_global = 1;
5039
5040 for (level = binding_level; level; level = level->level_chain)
5041 {
5042 register tree tail;
5043 if (ANON_AGGRNAME_P (name))
5044 for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
5045 {
5046 /* There's no need for error checking here, because
5047 anon names are unique throughout the compilation. */
5048 if (TYPE_IDENTIFIER (TREE_VALUE (tail)) == name)
5049 return TREE_VALUE (tail);
5050 }
5051 else if (level->namespace_p)
5052 /* Do namespace lookup. */
5053 for (tail = current_namespace; 1; tail = CP_DECL_CONTEXT (tail))
5054 {
5055 tree old = binding_for_name (name, tail);
5056
5057 /* If we just skipped past a pseudo global level, even
5058 though THISLEVEL_ONLY, and we find a template class
5059 declaration, then we use the _TYPE node for the
5060 template. See the example below. */
5061 if (thislevel_only && !allow_pseudo_global
5062 && old && BINDING_VALUE (old)
5063 && DECL_CLASS_TEMPLATE_P (BINDING_VALUE (old)))
5064 old = TREE_TYPE (BINDING_VALUE (old));
5065 else
5066 old = BINDING_TYPE (old);
5067
5068 /* If it has an original type, it is a typedef, and we
5069 should not return it. */
5070 if (old && DECL_ORIGINAL_TYPE (TYPE_NAME (old)))
5071 old = NULL_TREE;
5072 if (old && TREE_CODE (old) != form
5073 && !(form != ENUMERAL_TYPE && TREE_CODE (old) == TEMPLATE_DECL))
5074 {
5075 cp_error ("`%#D' redeclared as %C", old, form);
5076 return NULL_TREE;
5077 }
5078 if (old)
5079 return old;
5080 if (thislevel_only || tail == global_namespace)
5081 return NULL_TREE;
5082 }
5083 else
5084 for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
5085 {
5086 if (TREE_PURPOSE (tail) == name)
5087 {
5088 enum tree_code code = TREE_CODE (TREE_VALUE (tail));
5089 /* Should tighten this up; it'll probably permit
5090 UNION_TYPE and a struct template, for example. */
5091 if (code != form
5092 && !(form != ENUMERAL_TYPE && code == TEMPLATE_DECL))
5093 {
5094 /* Definition isn't the kind we were looking for. */
5095 cp_error ("`%#D' redeclared as %C", TREE_VALUE (tail),
5096 form);
5097 return NULL_TREE;
5098 }
5099 return TREE_VALUE (tail);
5100 }
5101 }
5102 if (thislevel_only && ! level->tag_transparent)
5103 {
5104 if (level->pseudo_global && allow_pseudo_global)
5105 {
5106 /* We must deal with cases like this:
5107
5108 template <class T> struct S;
5109 template <class T> struct S {};
5110
5111 When looking up `S', for the second declaration, we
5112 would like to find the first declaration. But, we
5113 are in the pseudo-global level created for the
5114 template parameters, rather than the (surrounding)
5115 namespace level. Thus, we keep going one more level,
5116 even though THISLEVEL_ONLY is non-zero. */
5117 allow_pseudo_global = 0;
5118 continue;
5119 }
5120 else
5121 return NULL_TREE;
5122 }
5123 }
5124 return NULL_TREE;
5125 }
5126
5127 #if 0
5128 void
5129 set_current_level_tags_transparency (tags_transparent)
5130 int tags_transparent;
5131 {
5132 current_binding_level->tag_transparent = tags_transparent;
5133 }
5134 #endif
5135
5136 /* Given a type, find the tag that was defined for it and return the tag name.
5137 Otherwise return 0. However, the value can never be 0
5138 in the cases in which this is used.
5139
5140 C++: If NAME is non-zero, this is the new name to install. This is
5141 done when replacing anonymous tags with real tag names. */
5142
5143 static tree
5144 lookup_tag_reverse (type, name)
5145 tree type;
5146 tree name;
5147 {
5148 register struct binding_level *level;
5149
5150 for (level = current_binding_level; level; level = level->level_chain)
5151 {
5152 register tree tail;
5153 for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
5154 {
5155 if (TREE_VALUE (tail) == type)
5156 {
5157 if (name)
5158 TREE_PURPOSE (tail) = name;
5159 return TREE_PURPOSE (tail);
5160 }
5161 }
5162 }
5163 return NULL_TREE;
5164 }
5165 \f
5166 /* Look up NAME in the NAMESPACE. */
5167
5168 tree
5169 lookup_namespace_name (namespace, name)
5170 tree namespace, name;
5171 {
5172 tree val;
5173 tree template_id = NULL_TREE;
5174
5175 my_friendly_assert (TREE_CODE (namespace) == NAMESPACE_DECL, 370);
5176
5177 if (TREE_CODE (name) == NAMESPACE_DECL)
5178 /* This happens for A::B<int> when B is a namespace. */
5179 return name;
5180 else if (TREE_CODE (name) == TEMPLATE_DECL)
5181 {
5182 /* This happens for A::B where B is a template, and there are no
5183 template arguments. */
5184 cp_error ("invalid use of `%D'", name);
5185 return error_mark_node;
5186 }
5187
5188 namespace = ORIGINAL_NAMESPACE (namespace);
5189
5190 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
5191 {
5192 template_id = name;
5193 name = TREE_OPERAND (name, 0);
5194 if (TREE_CODE (name) == OVERLOAD)
5195 name = DECL_NAME (OVL_CURRENT (name));
5196 else if (TREE_CODE_CLASS (TREE_CODE (name)) == 'd')
5197 name = DECL_NAME (name);
5198 }
5199
5200 my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 373);
5201
5202 val = make_node (CPLUS_BINDING);
5203 if (!qualified_lookup_using_namespace (name, namespace, val, 0))
5204 return error_mark_node;
5205
5206 if (BINDING_VALUE (val))
5207 {
5208 val = BINDING_VALUE (val);
5209
5210 if (template_id)
5211 {
5212 if (DECL_CLASS_TEMPLATE_P (val))
5213 val = lookup_template_class (val,
5214 TREE_OPERAND (template_id, 1),
5215 /*in_decl=*/NULL_TREE,
5216 /*context=*/NULL_TREE,
5217 /*entering_scope=*/0);
5218 else if (DECL_FUNCTION_TEMPLATE_P (val)
5219 || TREE_CODE (val) == OVERLOAD)
5220 val = lookup_template_function (val,
5221 TREE_OPERAND (template_id, 1));
5222 else
5223 {
5224 cp_error ("`%D::%D' is not a template",
5225 namespace, name);
5226 return error_mark_node;
5227 }
5228 }
5229
5230 /* If we have a single function from a using decl, pull it out. */
5231 if (TREE_CODE (val) == OVERLOAD && ! really_overloaded_fn (val))
5232 val = OVL_FUNCTION (val);
5233 return val;
5234 }
5235
5236 cp_error ("`%D' undeclared in namespace `%D'", name, namespace);
5237 return error_mark_node;
5238 }
5239
5240 /* Hash a TYPENAME_TYPE. K is really of type `tree'. */
5241
5242 static unsigned long
5243 typename_hash (k)
5244 hash_table_key k;
5245 {
5246 unsigned long hash;
5247 tree t;
5248
5249 t = (tree) k;
5250 hash = (((unsigned long) TYPE_CONTEXT (t))
5251 ^ ((unsigned long) DECL_NAME (TYPE_NAME (t))));
5252
5253 return hash;
5254 }
5255
5256 /* Compare two TYPENAME_TYPEs. K1 and K2 are really of type `tree'. */
5257
5258 static boolean
5259 typename_compare (k1, k2)
5260 hash_table_key k1;
5261 hash_table_key k2;
5262 {
5263 tree t1;
5264 tree t2;
5265 tree d1;
5266 tree d2;
5267
5268 t1 = (tree) k1;
5269 t2 = (tree) k2;
5270 d1 = TYPE_NAME (t1);
5271 d2 = TYPE_NAME (t2);
5272
5273 return (DECL_NAME (d1) == DECL_NAME (d2)
5274 && same_type_p (TYPE_CONTEXT (t1), TYPE_CONTEXT (t2))
5275 && ((TREE_TYPE (t1) != NULL_TREE)
5276 == (TREE_TYPE (t2) != NULL_TREE))
5277 && same_type_p (TREE_TYPE (t1), TREE_TYPE (t2))
5278 && TYPENAME_TYPE_FULLNAME (t1) == TYPENAME_TYPE_FULLNAME (t2));
5279 }
5280
5281 /* Build a TYPENAME_TYPE. If the type is `typename T::t', CONTEXT is
5282 the type of `T', NAME is the IDENTIFIER_NODE for `t'. If BASE_TYPE
5283 is non-NULL, this type is being created by the implicit typename
5284 extension, and BASE_TYPE is a type named `t' in some base class of
5285 `T' which depends on template parameters.
5286
5287 Returns the new TYPENAME_TYPE. */
5288
5289 tree
5290 build_typename_type (context, name, fullname, base_type)
5291 tree context;
5292 tree name;
5293 tree fullname;
5294 tree base_type;
5295 {
5296 tree t;
5297 tree d;
5298 struct hash_entry* e;
5299
5300 static struct hash_table ht;
5301
5302 push_obstacks (&permanent_obstack, &permanent_obstack);
5303
5304 if (!ht.table)
5305 {
5306 static struct hash_table *h = &ht;
5307 if (!hash_table_init (&ht, &hash_newfunc, &typename_hash,
5308 &typename_compare))
5309 fatal ("virtual memory exhausted");
5310 ggc_add_tree_hash_table_root (&h, 1);
5311 }
5312
5313 /* Build the TYPENAME_TYPE. */
5314 t = make_lang_type (TYPENAME_TYPE);
5315 TYPE_CONTEXT (t) = FROB_CONTEXT (context);
5316 TYPENAME_TYPE_FULLNAME (t) = fullname;
5317 TREE_TYPE (t) = base_type;
5318
5319 /* Build the corresponding TYPE_DECL. */
5320 d = build_decl (TYPE_DECL, name, t);
5321 TYPE_NAME (TREE_TYPE (d)) = d;
5322 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
5323 DECL_CONTEXT (d) = FROB_CONTEXT (context);
5324 DECL_ARTIFICIAL (d) = 1;
5325
5326 /* See if we already have this type. */
5327 e = hash_lookup (&ht, t, /*create=*/false, /*copy=*/0);
5328 if (e)
5329 t = (tree) e->key;
5330 else
5331 /* Insert the type into the table. */
5332 hash_lookup (&ht, t, /*create=*/true, /*copy=*/0);
5333
5334 pop_obstacks ();
5335
5336 return t;
5337 }
5338
5339 tree
5340 make_typename_type (context, name)
5341 tree context, name;
5342 {
5343 tree fullname;
5344
5345 if (TREE_CODE_CLASS (TREE_CODE (name)) == 't')
5346 {
5347 if (!(TYPE_LANG_SPECIFIC (name)
5348 && (CLASSTYPE_IS_TEMPLATE (name)
5349 || CLASSTYPE_USE_TEMPLATE (name))))
5350 name = TYPE_IDENTIFIER (name);
5351 else
5352 /* Create a TEMPLATE_ID_EXPR for the type. */
5353 name = build_nt (TEMPLATE_ID_EXPR,
5354 CLASSTYPE_TI_TEMPLATE (name),
5355 CLASSTYPE_TI_ARGS (name));
5356 }
5357 else if (TREE_CODE (name) == TYPE_DECL)
5358 name = DECL_NAME (name);
5359
5360 fullname = name;
5361
5362 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
5363 {
5364 name = TREE_OPERAND (name, 0);
5365 if (TREE_CODE (name) == TEMPLATE_DECL)
5366 name = TREE_OPERAND (fullname, 0) = DECL_NAME (name);
5367 }
5368 if (TREE_CODE (name) != IDENTIFIER_NODE)
5369 my_friendly_abort (2000);
5370
5371 if (TREE_CODE (context) == NAMESPACE_DECL)
5372 {
5373 /* We can get here from typename_sub0 in the explicit_template_type
5374 expansion. Just fail. */
5375 cp_error ("no class template named `%#T' in `%#T'",
5376 name, context);
5377 return error_mark_node;
5378 }
5379
5380 if (! uses_template_parms (context)
5381 || currently_open_class (context))
5382 {
5383 if (TREE_CODE (fullname) == TEMPLATE_ID_EXPR)
5384 {
5385 tree tmpl = NULL_TREE;
5386 if (IS_AGGR_TYPE (context))
5387 tmpl = lookup_field (context, name, 0, 0);
5388 if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
5389 {
5390 cp_error ("no class template named `%#T' in `%#T'",
5391 name, context);
5392 return error_mark_node;
5393 }
5394
5395 return lookup_template_class (tmpl,
5396 TREE_OPERAND (fullname, 1),
5397 NULL_TREE, context,
5398 /*entering_scope=*/0);
5399 }
5400 else
5401 {
5402 tree t;
5403
5404 if (!IS_AGGR_TYPE (context))
5405 {
5406 cp_error ("no type named `%#T' in `%#T'", name, context);
5407 return error_mark_node;
5408 }
5409
5410 t = lookup_field (context, name, 0, 1);
5411 if (t)
5412 return TREE_TYPE (t);
5413 }
5414 }
5415
5416 /* If the CONTEXT is not a template type, then either the field is
5417 there now or its never going to be. */
5418 if (!uses_template_parms (context))
5419 {
5420 cp_error ("no type named `%#T' in `%#T'", name, context);
5421 return error_mark_node;
5422 }
5423
5424
5425 return build_typename_type (context, name, fullname, NULL_TREE);
5426 }
5427
5428 /* Select the right _DECL from multiple choices. */
5429
5430 static tree
5431 select_decl (binding, flags)
5432 tree binding;
5433 int flags;
5434 {
5435 tree val;
5436 val = BINDING_VALUE (binding);
5437 if (LOOKUP_NAMESPACES_ONLY (flags))
5438 {
5439 /* We are not interested in types. */
5440 if (val && TREE_CODE (val) == NAMESPACE_DECL)
5441 return val;
5442 return NULL_TREE;
5443 }
5444
5445 /* If we could have a type and
5446 we have nothing or we need a type and have none. */
5447 if (BINDING_TYPE (binding)
5448 && (!val || ((flags & LOOKUP_PREFER_TYPES)
5449 && TREE_CODE (val) != TYPE_DECL)))
5450 val = TYPE_STUB_DECL (BINDING_TYPE (binding));
5451 /* Don't return non-types if we really prefer types. */
5452 else if (val && LOOKUP_TYPES_ONLY (flags) && TREE_CODE (val) != TYPE_DECL
5453 && (TREE_CODE (val) != TEMPLATE_DECL
5454 || !DECL_CLASS_TEMPLATE_P (val)))
5455 val = NULL_TREE;
5456
5457 return val;
5458 }
5459
5460 /* Unscoped lookup of a global: iterate over current namespaces,
5461 considering using-directives. If SPACESP is non-NULL, store a list
5462 of the namespaces we've considered in it. */
5463
5464 tree
5465 unqualified_namespace_lookup (name, flags, spacesp)
5466 tree name;
5467 int flags;
5468 tree *spacesp;
5469 {
5470 tree b = make_node (CPLUS_BINDING);
5471 tree initial = current_decl_namespace();
5472 tree scope = initial;
5473 tree siter;
5474 struct binding_level *level;
5475 tree val = NULL_TREE;
5476
5477 if (spacesp)
5478 *spacesp = NULL_TREE;
5479
5480 for (; !val; scope = CP_DECL_CONTEXT (scope))
5481 {
5482 if (spacesp)
5483 *spacesp = tree_cons (scope, NULL_TREE, *spacesp);
5484 val = binding_for_name (name, scope);
5485
5486 /* Initialize binding for this context. */
5487 BINDING_VALUE (b) = BINDING_VALUE (val);
5488 BINDING_TYPE (b) = BINDING_TYPE (val);
5489
5490 /* Add all _DECLs seen through local using-directives. */
5491 for (level = current_binding_level;
5492 !level->namespace_p;
5493 level = level->level_chain)
5494 if (!lookup_using_namespace (name, b, level->using_directives,
5495 scope, flags, spacesp))
5496 /* Give up because of error. */
5497 return error_mark_node;
5498
5499 /* Add all _DECLs seen through global using-directives. */
5500 /* XXX local and global using lists should work equally. */
5501 siter = initial;
5502 while (1)
5503 {
5504 if (!lookup_using_namespace (name, b, DECL_NAMESPACE_USING (siter),
5505 scope, flags, spacesp))
5506 /* Give up because of error. */
5507 return error_mark_node;
5508 if (siter == scope) break;
5509 siter = CP_DECL_CONTEXT (siter);
5510 }
5511
5512 val = select_decl (b, flags);
5513 if (scope == global_namespace)
5514 break;
5515 }
5516 return val;
5517 }
5518
5519 /* Combine prefer_type and namespaces_only into flags. */
5520
5521 static int
5522 lookup_flags (prefer_type, namespaces_only)
5523 int prefer_type, namespaces_only;
5524 {
5525 if (namespaces_only)
5526 return LOOKUP_PREFER_NAMESPACES;
5527 if (prefer_type > 1)
5528 return LOOKUP_PREFER_TYPES;
5529 if (prefer_type > 0)
5530 return LOOKUP_PREFER_BOTH;
5531 return 0;
5532 }
5533
5534 /* Given a lookup that returned VAL, use FLAGS to decide if we want to
5535 ignore it or not. Subroutine of lookup_name_real. */
5536
5537 static tree
5538 qualify_lookup (val, flags)
5539 tree val;
5540 int flags;
5541 {
5542 if (val == NULL_TREE)
5543 return val;
5544 if ((flags & LOOKUP_PREFER_NAMESPACES) && TREE_CODE (val) == NAMESPACE_DECL)
5545 return val;
5546 if ((flags & LOOKUP_PREFER_TYPES)
5547 && (TREE_CODE (val) == TYPE_DECL
5548 || ((flags & LOOKUP_TEMPLATES_EXPECTED)
5549 && DECL_CLASS_TEMPLATE_P (val))))
5550 return val;
5551 if (flags & (LOOKUP_PREFER_NAMESPACES | LOOKUP_PREFER_TYPES))
5552 return NULL_TREE;
5553 return val;
5554 }
5555
5556 /* Any other BINDING overrides an implicit TYPENAME. Warn about
5557 that. */
5558
5559 static void
5560 warn_about_implicit_typename_lookup (typename, binding)
5561 tree typename;
5562 tree binding;
5563 {
5564 tree subtype = TREE_TYPE (TREE_TYPE (typename));
5565 tree name = DECL_NAME (typename);
5566
5567 if (! (TREE_CODE (binding) == TEMPLATE_DECL
5568 && CLASSTYPE_TEMPLATE_INFO (subtype)
5569 && CLASSTYPE_TI_TEMPLATE (subtype) == binding)
5570 && ! (TREE_CODE (binding) == TYPE_DECL
5571 && same_type_p (TREE_TYPE (binding), subtype)))
5572 {
5573 cp_warning ("lookup of `%D' finds `%#D'",
5574 name, binding);
5575 cp_warning (" instead of `%D' from dependent base class",
5576 typename);
5577 cp_warning (" (use `typename %T::%D' if that's what you meant)",
5578 constructor_name (current_class_type), name);
5579 }
5580 }
5581
5582 /* Look up NAME in the current binding level and its superiors in the
5583 namespace of variables, functions and typedefs. Return a ..._DECL
5584 node of some kind representing its definition if there is only one
5585 such declaration, or return a TREE_LIST with all the overloaded
5586 definitions if there are many, or return 0 if it is undefined.
5587
5588 If PREFER_TYPE is > 0, we prefer TYPE_DECLs or namespaces.
5589 If PREFER_TYPE is > 1, we reject non-type decls (e.g. namespaces).
5590 If PREFER_TYPE is -2, we're being called from yylex(). (UGLY)
5591 Otherwise we prefer non-TYPE_DECLs.
5592
5593 If NONCLASS is non-zero, we don't look for the NAME in class scope,
5594 using IDENTIFIER_CLASS_VALUE. */
5595
5596 static tree
5597 lookup_name_real (name, prefer_type, nonclass, namespaces_only)
5598 tree name;
5599 int prefer_type, nonclass, namespaces_only;
5600 {
5601 tree t;
5602 tree val = NULL_TREE;
5603 int yylex = 0;
5604 tree from_obj = NULL_TREE;
5605 int flags;
5606 int val_is_implicit_typename = 0;
5607
5608 /* Hack: copy flag set by parser, if set. */
5609 if (only_namespace_names)
5610 namespaces_only = 1;
5611
5612 if (prefer_type == -2)
5613 {
5614 extern int looking_for_typename;
5615 tree type = NULL_TREE;
5616
5617 yylex = 1;
5618 prefer_type = looking_for_typename;
5619
5620 flags = lookup_flags (prefer_type, namespaces_only);
5621 /* If the next thing is '<', class templates are types. */
5622 if (looking_for_template)
5623 flags |= LOOKUP_TEMPLATES_EXPECTED;
5624
5625 /* std:: becomes :: for now. */
5626 if (got_scope == std_node)
5627 got_scope = void_type_node;
5628
5629 if (got_scope)
5630 type = got_scope;
5631 else if (got_object != error_mark_node)
5632 type = got_object;
5633
5634 if (type)
5635 {
5636 if (type == error_mark_node)
5637 return error_mark_node;
5638 if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
5639 type = TREE_TYPE (type);
5640
5641 if (TYPE_P (type))
5642 type = complete_type (type);
5643
5644 if (TREE_CODE (type) == VOID_TYPE)
5645 type = global_namespace;
5646 if (TREE_CODE (type) == NAMESPACE_DECL)
5647 {
5648 val = make_node (CPLUS_BINDING);
5649 flags |= LOOKUP_COMPLAIN;
5650 if (!qualified_lookup_using_namespace (name, type, val, flags))
5651 return NULL_TREE;
5652 val = select_decl (val, flags);
5653 }
5654 else if (! IS_AGGR_TYPE (type)
5655 || TREE_CODE (type) == TEMPLATE_TYPE_PARM
5656 || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM
5657 || TREE_CODE (type) == TYPENAME_TYPE)
5658 /* Someone else will give an error about this if needed. */
5659 val = NULL_TREE;
5660 else if (type == current_class_type)
5661 val = IDENTIFIER_CLASS_VALUE (name);
5662 else
5663 val = lookup_member (type, name, 0, prefer_type);
5664 }
5665 else
5666 val = NULL_TREE;
5667
5668 if (got_scope)
5669 goto done;
5670 else if (got_object && val)
5671 from_obj = val;
5672 }
5673 else
5674 {
5675 flags = lookup_flags (prefer_type, namespaces_only);
5676 /* If we're not parsing, we need to complain. */
5677 flags |= LOOKUP_COMPLAIN;
5678 }
5679
5680 /* First, look in non-namespace scopes. */
5681
5682 if (current_class_type == NULL_TREE)
5683 nonclass = 1;
5684
5685 for (t = IDENTIFIER_BINDING (name); t; t = TREE_CHAIN (t))
5686 {
5687 tree binding;
5688
5689 if (!LOCAL_BINDING_P (t) && nonclass)
5690 /* We're not looking for class-scoped bindings, so keep going. */
5691 continue;
5692
5693 /* If this is the kind of thing we're looking for, we're done. */
5694 if (qualify_lookup (BINDING_VALUE (t), flags))
5695 binding = BINDING_VALUE (t);
5696 else if ((flags & LOOKUP_PREFER_TYPES)
5697 && qualify_lookup (BINDING_TYPE (t), flags))
5698 binding = BINDING_TYPE (t);
5699 else
5700 binding = NULL_TREE;
5701
5702 if (binding
5703 && (!val || !IMPLICIT_TYPENAME_TYPE_DECL_P (binding)))
5704 {
5705 if (val_is_implicit_typename && !yylex)
5706 warn_about_implicit_typename_lookup (val, binding);
5707 val = binding;
5708 val_is_implicit_typename
5709 = IMPLICIT_TYPENAME_TYPE_DECL_P (val);
5710 if (!val_is_implicit_typename)
5711 break;
5712 }
5713 }
5714
5715 /* Now lookup in namespace scopes. */
5716 if (!val || val_is_implicit_typename)
5717 {
5718 t = unqualified_namespace_lookup (name, flags, 0);
5719 if (t)
5720 {
5721 if (val_is_implicit_typename && !yylex)
5722 warn_about_implicit_typename_lookup (val, t);
5723 val = t;
5724 }
5725 }
5726
5727 done:
5728 if (val)
5729 {
5730 /* This should only warn about types used in qualified-ids. */
5731 if (from_obj && from_obj != val)
5732 {
5733 if (looking_for_typename && TREE_CODE (from_obj) == TYPE_DECL
5734 && TREE_CODE (val) == TYPE_DECL
5735 && TREE_TYPE (from_obj) != TREE_TYPE (val))
5736 {
5737 cp_pedwarn ("lookup of `%D' in the scope of `%#T' (`%#T')",
5738 name, got_object, TREE_TYPE (from_obj));
5739 cp_pedwarn (" does not match lookup in the current scope (`%#T')",
5740 TREE_TYPE (val));
5741 }
5742
5743 /* We don't change val to from_obj if got_object depends on
5744 template parms because that breaks implicit typename for
5745 destructor calls. */
5746 if (! uses_template_parms (got_object))
5747 val = from_obj;
5748 }
5749
5750 /* If we have a single function from a using decl, pull it out. */
5751 if (TREE_CODE (val) == OVERLOAD && ! really_overloaded_fn (val))
5752 val = OVL_FUNCTION (val);
5753 }
5754 else if (from_obj)
5755 val = from_obj;
5756
5757 return val;
5758 }
5759
5760 tree
5761 lookup_name_nonclass (name)
5762 tree name;
5763 {
5764 return lookup_name_real (name, 0, 1, 0);
5765 }
5766
5767 tree
5768 lookup_function_nonclass (name, args)
5769 tree name;
5770 tree args;
5771 {
5772 return lookup_arg_dependent (name, lookup_name_nonclass (name), args);
5773 }
5774
5775 tree
5776 lookup_name_namespace_only (name)
5777 tree name;
5778 {
5779 /* type-or-namespace, nonclass, namespace_only */
5780 return lookup_name_real (name, 1, 1, 1);
5781 }
5782
5783 tree
5784 lookup_name (name, prefer_type)
5785 tree name;
5786 int prefer_type;
5787 {
5788 return lookup_name_real (name, prefer_type, 0, 0);
5789 }
5790
5791 /* Similar to `lookup_name' but look only in the innermost non-class
5792 binding level. */
5793
5794 tree
5795 lookup_name_current_level (name)
5796 tree name;
5797 {
5798 struct binding_level *b;
5799 tree t = NULL_TREE;
5800
5801 b = current_binding_level;
5802 while (b->parm_flag == 2)
5803 b = b->level_chain;
5804
5805 if (b->namespace_p)
5806 {
5807 t = IDENTIFIER_NAMESPACE_VALUE (name);
5808
5809 /* extern "C" function() */
5810 if (t != NULL_TREE && TREE_CODE (t) == TREE_LIST)
5811 t = TREE_VALUE (t);
5812 }
5813 else if (IDENTIFIER_BINDING (name)
5814 && LOCAL_BINDING_P (IDENTIFIER_BINDING (name)))
5815 {
5816 while (1)
5817 {
5818 if (BINDING_LEVEL (IDENTIFIER_BINDING (name)) == b)
5819 return IDENTIFIER_VALUE (name);
5820
5821 if (b->keep == 2)
5822 b = b->level_chain;
5823 else
5824 break;
5825 }
5826 }
5827
5828 return t;
5829 }
5830
5831 /* Like lookup_name_current_level, but for types. */
5832
5833 tree
5834 lookup_type_current_level (name)
5835 tree name;
5836 {
5837 register tree t = NULL_TREE;
5838
5839 my_friendly_assert (! current_binding_level->namespace_p, 980716);
5840
5841 if (REAL_IDENTIFIER_TYPE_VALUE (name) != NULL_TREE
5842 && REAL_IDENTIFIER_TYPE_VALUE (name) != global_type_node)
5843 {
5844 struct binding_level *b = current_binding_level;
5845 while (1)
5846 {
5847 if (purpose_member (name, b->type_shadowed))
5848 return REAL_IDENTIFIER_TYPE_VALUE (name);
5849 if (b->keep == 2)
5850 b = b->level_chain;
5851 else
5852 break;
5853 }
5854 }
5855
5856 return t;
5857 }
5858
5859 void
5860 begin_only_namespace_names ()
5861 {
5862 only_namespace_names = 1;
5863 }
5864
5865 void
5866 end_only_namespace_names ()
5867 {
5868 only_namespace_names = 0;
5869 }
5870 \f
5871 /* Arrange for the user to get a source line number, even when the
5872 compiler is going down in flames, so that she at least has a
5873 chance of working around problems in the compiler. We used to
5874 call error(), but that let the segmentation fault continue
5875 through; now, it's much more passive by asking them to send the
5876 maintainers mail about the problem. */
5877
5878 static void
5879 signal_catch (sig)
5880 int sig ATTRIBUTE_UNUSED;
5881 {
5882 signal (SIGSEGV, SIG_DFL);
5883 #ifdef SIGIOT
5884 signal (SIGIOT, SIG_DFL);
5885 #endif
5886 #ifdef SIGILL
5887 signal (SIGILL, SIG_DFL);
5888 #endif
5889 #ifdef SIGABRT
5890 signal (SIGABRT, SIG_DFL);
5891 #endif
5892 #ifdef SIGBUS
5893 signal (SIGBUS, SIG_DFL);
5894 #endif
5895 my_friendly_abort (0);
5896 }
5897
5898 /* Push the declarations of builtin types into the namespace.
5899 RID_INDEX, if < RID_MAX is the index of the builtin type
5900 in the array RID_POINTERS. NAME is the name used when looking
5901 up the builtin type. TYPE is the _TYPE node for the builtin type. */
5902
5903 static void
5904 record_builtin_type (rid_index, name, type)
5905 enum rid rid_index;
5906 const char *name;
5907 tree type;
5908 {
5909 tree rname = NULL_TREE, tname = NULL_TREE;
5910 tree tdecl = NULL_TREE;
5911
5912 if ((int) rid_index < (int) RID_MAX)
5913 rname = ridpointers[(int) rid_index];
5914 if (name)
5915 tname = get_identifier (name);
5916
5917 TYPE_BUILT_IN (type) = 1;
5918
5919 if (tname)
5920 {
5921 tdecl = pushdecl (build_decl (TYPE_DECL, tname, type));
5922 set_identifier_type_value (tname, NULL_TREE);
5923 if ((int) rid_index < (int) RID_MAX)
5924 /* Built-in types live in the global namespace. */
5925 SET_IDENTIFIER_GLOBAL_VALUE (tname, tdecl);
5926 }
5927 if (rname != NULL_TREE)
5928 {
5929 if (tname != NULL_TREE)
5930 {
5931 set_identifier_type_value (rname, NULL_TREE);
5932 SET_IDENTIFIER_GLOBAL_VALUE (rname, tdecl);
5933 }
5934 else
5935 {
5936 tdecl = pushdecl (build_decl (TYPE_DECL, rname, type));
5937 set_identifier_type_value (rname, NULL_TREE);
5938 }
5939 }
5940 }
5941
5942 /* Record one of the standard Java types.
5943 * Declare it as having the given NAME.
5944 * If SIZE > 0, it is the size of one of the integral types;
5945 * otherwise it is the negative of the size of one of the other types. */
5946
5947 static tree
5948 record_builtin_java_type (name, size)
5949 const char *name;
5950 int size;
5951 {
5952 tree type, decl;
5953 if (size > 0)
5954 type = make_signed_type (size);
5955 else if (size > -32)
5956 { /* "__java_char" or ""__java_boolean". */
5957 type = make_unsigned_type (-size);
5958 /*if (size == -1) TREE_SET_CODE (type, BOOLEAN_TYPE);*/
5959 }
5960 else
5961 { /* "__java_float" or ""__java_double". */
5962 type = make_node (REAL_TYPE);
5963 TYPE_PRECISION (type) = - size;
5964 layout_type (type);
5965 }
5966 record_builtin_type (RID_MAX, name, type);
5967 decl = TYPE_NAME (type);
5968
5969 /* Suppress generate debug symbol entries for these types,
5970 since for normal C++ they are just clutter.
5971 However, push_lang_context undoes this if extern "Java" is seen. */
5972 DECL_IGNORED_P (decl) = 1;
5973
5974 TYPE_FOR_JAVA (type) = 1;
5975 return type;
5976 }
5977
5978 /* Push a type into the namespace so that the back-ends ignore it. */
5979
5980 static void
5981 record_unknown_type (type, name)
5982 tree type;
5983 const char *name;
5984 {
5985 tree decl = pushdecl (build_decl (TYPE_DECL, get_identifier (name), type));
5986 /* Make sure the "unknown type" typedecl gets ignored for debug info. */
5987 DECL_IGNORED_P (decl) = 1;
5988 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
5989 TYPE_SIZE (type) = TYPE_SIZE (void_type_node);
5990 TYPE_ALIGN (type) = 1;
5991 TYPE_MODE (type) = TYPE_MODE (void_type_node);
5992 }
5993
5994 /* Push overloaded decl, in global scope, with one argument so it
5995 can be used as a callback from define_function. */
5996
5997 static void
5998 push_overloaded_decl_1 (x)
5999 tree x;
6000 {
6001 push_overloaded_decl (x, PUSH_GLOBAL);
6002 }
6003
6004 #ifdef __GNUC__
6005 __inline
6006 #endif
6007 tree
6008 auto_function (name, type, code)
6009 tree name, type;
6010 enum built_in_function code;
6011 {
6012 return define_function
6013 (IDENTIFIER_POINTER (name), type, code, push_overloaded_decl_1,
6014 IDENTIFIER_POINTER (build_decl_overload (name, TYPE_ARG_TYPES (type),
6015 0)));
6016 }
6017
6018 /* Create the predefined scalar types of C,
6019 and some nodes representing standard constants (0, 1, (void *)0).
6020 Initialize the global binding level.
6021 Make definitions for built-in primitive functions. */
6022
6023 void
6024 init_decl_processing ()
6025 {
6026 tree fields[20];
6027 int wchar_type_size;
6028 tree array_domain_type;
6029
6030 /* Have to make these distinct before we try using them. */
6031 lang_name_cplusplus = get_identifier ("C++");
6032 lang_name_c = get_identifier ("C");
6033 lang_name_java = get_identifier ("Java");
6034
6035 /* Let the back-end now how to save and restore language-specific
6036 per-function globals. */
6037 save_lang_status = &push_cp_function_context;
6038 restore_lang_status = &pop_cp_function_context;
6039 mark_lang_status = &mark_cp_function_context;
6040
6041 cp_parse_init ();
6042 init_decl2 ();
6043 init_pt ();
6044
6045 /* Create the global variables. */
6046 push_to_top_level ();
6047
6048 /* Enter the global namespace. */
6049 my_friendly_assert (global_namespace == NULL_TREE, 375);
6050 push_namespace (get_identifier ("::"));
6051 global_namespace = current_namespace;
6052 current_lang_name = NULL_TREE;
6053
6054 if (flag_strict_prototype == 2)
6055 flag_strict_prototype = pedantic;
6056 if (! flag_permissive && ! pedantic)
6057 flag_pedantic_errors = 1;
6058
6059 strict_prototypes_lang_c = flag_strict_prototype;
6060
6061 /* Initially, C. */
6062 current_lang_name = lang_name_c;
6063
6064 current_function_decl = NULL_TREE;
6065 named_labels = NULL_TREE;
6066 named_label_uses = NULL;
6067 current_binding_level = NULL_BINDING_LEVEL;
6068 free_binding_level = NULL_BINDING_LEVEL;
6069
6070 /* Because most segmentation signals can be traced back into user
6071 code, catch them and at least give the user a chance of working
6072 around compiler bugs. */
6073 signal (SIGSEGV, signal_catch);
6074
6075 /* We will also catch aborts in the back-end through signal_catch and
6076 give the user a chance to see where the error might be, and to defeat
6077 aborts in the back-end when there have been errors previously in their
6078 code. */
6079 #ifdef SIGIOT
6080 signal (SIGIOT, signal_catch);
6081 #endif
6082 #ifdef SIGILL
6083 signal (SIGILL, signal_catch);
6084 #endif
6085 #ifdef SIGABRT
6086 signal (SIGABRT, signal_catch);
6087 #endif
6088 #ifdef SIGBUS
6089 signal (SIGBUS, signal_catch);
6090 #endif
6091
6092 gcc_obstack_init (&decl_obstack);
6093
6094 /* Must lay these out before anything else gets laid out. */
6095 error_mark_node = make_node (ERROR_MARK);
6096 TREE_PERMANENT (error_mark_node) = 1;
6097 TREE_TYPE (error_mark_node) = error_mark_node;
6098 error_mark_list = build_tree_list (error_mark_node, error_mark_node);
6099 TREE_TYPE (error_mark_list) = error_mark_node;
6100
6101 /* Make the binding_level structure for global names. */
6102 pushlevel (0);
6103 global_binding_level = current_binding_level;
6104 /* The global level is the namespace level of ::. */
6105 NAMESPACE_LEVEL (global_namespace) = global_binding_level;
6106 declare_namespace_level ();
6107
6108 this_identifier = get_identifier (THIS_NAME);
6109 in_charge_identifier = get_identifier (IN_CHARGE_NAME);
6110 ctor_identifier = get_identifier (CTOR_NAME);
6111 dtor_identifier = get_identifier (DTOR_NAME);
6112 pfn_identifier = get_identifier (VTABLE_PFN_NAME);
6113 index_identifier = get_identifier (VTABLE_INDEX_NAME);
6114 delta_identifier = get_identifier (VTABLE_DELTA_NAME);
6115 delta2_identifier = get_identifier (VTABLE_DELTA2_NAME);
6116 pfn_or_delta2_identifier = get_identifier ("__pfn_or_delta2");
6117
6118 /* Define `int' and `char' first so that dbx will output them first. */
6119
6120 integer_type_node = make_signed_type (INT_TYPE_SIZE);
6121 record_builtin_type (RID_INT, NULL_PTR, integer_type_node);
6122
6123 /* Define `char', which is like either `signed char' or `unsigned char'
6124 but not the same as either. */
6125
6126 char_type_node
6127 = (flag_signed_char
6128 ? make_signed_type (CHAR_TYPE_SIZE)
6129 : make_unsigned_type (CHAR_TYPE_SIZE));
6130 record_builtin_type (RID_CHAR, "char", char_type_node);
6131
6132 /* `signed' is the same as `int' */
6133 record_builtin_type (RID_SIGNED, NULL_PTR, integer_type_node);
6134
6135 long_integer_type_node = make_signed_type (LONG_TYPE_SIZE);
6136 record_builtin_type (RID_LONG, "long int", long_integer_type_node);
6137
6138 unsigned_type_node = make_unsigned_type (INT_TYPE_SIZE);
6139 record_builtin_type (RID_UNSIGNED, "unsigned int", unsigned_type_node);
6140
6141 long_unsigned_type_node = make_unsigned_type (LONG_TYPE_SIZE);
6142 record_builtin_type (RID_MAX, "long unsigned int", long_unsigned_type_node);
6143 record_builtin_type (RID_MAX, "unsigned long", long_unsigned_type_node);
6144
6145 long_long_integer_type_node = make_signed_type (LONG_LONG_TYPE_SIZE);
6146 record_builtin_type (RID_MAX, "long long int", long_long_integer_type_node);
6147
6148 long_long_unsigned_type_node = make_unsigned_type (LONG_LONG_TYPE_SIZE);
6149 record_builtin_type (RID_MAX, "long long unsigned int",
6150 long_long_unsigned_type_node);
6151 record_builtin_type (RID_MAX, "long long unsigned",
6152 long_long_unsigned_type_node);
6153
6154 short_integer_type_node = make_signed_type (SHORT_TYPE_SIZE);
6155 record_builtin_type (RID_SHORT, "short int", short_integer_type_node);
6156 short_unsigned_type_node = make_unsigned_type (SHORT_TYPE_SIZE);
6157 record_builtin_type (RID_MAX, "short unsigned int", short_unsigned_type_node);
6158 record_builtin_type (RID_MAX, "unsigned short", short_unsigned_type_node);
6159
6160 /* `unsigned long' is the standard type for sizeof.
6161 Note that stddef.h uses `unsigned long',
6162 and this must agree, even if long and int are the same size. */
6163 set_sizetype
6164 (TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (SIZE_TYPE))));
6165
6166 ptrdiff_type_node
6167 = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (PTRDIFF_TYPE)));
6168
6169 /* Define both `signed char' and `unsigned char'. */
6170 signed_char_type_node = make_signed_type (CHAR_TYPE_SIZE);
6171 record_builtin_type (RID_MAX, "signed char", signed_char_type_node);
6172 unsigned_char_type_node = make_unsigned_type (CHAR_TYPE_SIZE);
6173 record_builtin_type (RID_MAX, "unsigned char", unsigned_char_type_node);
6174
6175 /* Create the widest literal types. */
6176 widest_integer_literal_type_node = make_signed_type (HOST_BITS_PER_WIDE_INT * 2);
6177 pushdecl (build_decl (TYPE_DECL, NULL_TREE,
6178 widest_integer_literal_type_node));
6179
6180 widest_unsigned_literal_type_node = make_unsigned_type (HOST_BITS_PER_WIDE_INT * 2);
6181 pushdecl (build_decl (TYPE_DECL, NULL_TREE,
6182 widest_unsigned_literal_type_node));
6183
6184 /* These are types that type_for_size and type_for_mode use. */
6185 intQI_type_node = make_signed_type (GET_MODE_BITSIZE (QImode));
6186 pushdecl (build_decl (TYPE_DECL, NULL_TREE, intQI_type_node));
6187 intHI_type_node = make_signed_type (GET_MODE_BITSIZE (HImode));
6188 pushdecl (build_decl (TYPE_DECL, NULL_TREE, intHI_type_node));
6189 intSI_type_node = make_signed_type (GET_MODE_BITSIZE (SImode));
6190 pushdecl (build_decl (TYPE_DECL, NULL_TREE, intSI_type_node));
6191 intDI_type_node = make_signed_type (GET_MODE_BITSIZE (DImode));
6192 pushdecl (build_decl (TYPE_DECL, NULL_TREE, intDI_type_node));
6193 #if HOST_BITS_PER_WIDE_INT >= 64
6194 intTI_type_node = make_signed_type (GET_MODE_BITSIZE (TImode));
6195 pushdecl (build_decl (TYPE_DECL, get_identifier ("__int128_t"), intTI_type_node));
6196 #endif
6197 unsigned_intQI_type_node = make_unsigned_type (GET_MODE_BITSIZE (QImode));
6198 pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intQI_type_node));
6199 unsigned_intHI_type_node = make_unsigned_type (GET_MODE_BITSIZE (HImode));
6200 pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intHI_type_node));
6201 unsigned_intSI_type_node = make_unsigned_type (GET_MODE_BITSIZE (SImode));
6202 pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intSI_type_node));
6203 unsigned_intDI_type_node = make_unsigned_type (GET_MODE_BITSIZE (DImode));
6204 pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intDI_type_node));
6205 #if HOST_BITS_PER_WIDE_INT >= 64
6206 unsigned_intTI_type_node = make_unsigned_type (GET_MODE_BITSIZE (TImode));
6207 pushdecl (build_decl (TYPE_DECL, get_identifier ("__uint128_t"), unsigned_intTI_type_node));
6208 #endif
6209
6210 float_type_node = make_node (REAL_TYPE);
6211 TYPE_PRECISION (float_type_node) = FLOAT_TYPE_SIZE;
6212 record_builtin_type (RID_FLOAT, NULL_PTR, float_type_node);
6213 layout_type (float_type_node);
6214
6215 double_type_node = make_node (REAL_TYPE);
6216 if (flag_short_double)
6217 TYPE_PRECISION (double_type_node) = FLOAT_TYPE_SIZE;
6218 else
6219 TYPE_PRECISION (double_type_node) = DOUBLE_TYPE_SIZE;
6220 record_builtin_type (RID_DOUBLE, NULL_PTR, double_type_node);
6221 layout_type (double_type_node);
6222
6223 long_double_type_node = make_node (REAL_TYPE);
6224 TYPE_PRECISION (long_double_type_node) = LONG_DOUBLE_TYPE_SIZE;
6225 record_builtin_type (RID_MAX, "long double", long_double_type_node);
6226 layout_type (long_double_type_node);
6227
6228 complex_integer_type_node = make_node (COMPLEX_TYPE);
6229 pushdecl (build_decl (TYPE_DECL, get_identifier ("complex int"),
6230 complex_integer_type_node));
6231 TREE_TYPE (complex_integer_type_node) = integer_type_node;
6232 layout_type (complex_integer_type_node);
6233
6234 complex_float_type_node = make_node (COMPLEX_TYPE);
6235 pushdecl (build_decl (TYPE_DECL, get_identifier ("complex float"),
6236 complex_float_type_node));
6237 TREE_TYPE (complex_float_type_node) = float_type_node;
6238 layout_type (complex_float_type_node);
6239
6240 complex_double_type_node = make_node (COMPLEX_TYPE);
6241 pushdecl (build_decl (TYPE_DECL, get_identifier ("complex double"),
6242 complex_double_type_node));
6243 TREE_TYPE (complex_double_type_node) = double_type_node;
6244 layout_type (complex_double_type_node);
6245
6246 complex_long_double_type_node = make_node (COMPLEX_TYPE);
6247 pushdecl (build_decl (TYPE_DECL, get_identifier ("complex long double"),
6248 complex_long_double_type_node));
6249 TREE_TYPE (complex_long_double_type_node) = long_double_type_node;
6250 layout_type (complex_long_double_type_node);
6251
6252 java_byte_type_node = record_builtin_java_type ("__java_byte", 8);
6253 java_short_type_node = record_builtin_java_type ("__java_short", 16);
6254 java_int_type_node = record_builtin_java_type ("__java_int", 32);
6255 java_long_type_node = record_builtin_java_type ("__java_long", 64);
6256 java_float_type_node = record_builtin_java_type ("__java_float", -32);
6257 java_double_type_node = record_builtin_java_type ("__java_double", -64);
6258 java_char_type_node = record_builtin_java_type ("__java_char", -16);
6259 java_boolean_type_node = record_builtin_java_type ("__java_boolean", -1);
6260
6261 integer_zero_node = build_int_2 (0, 0);
6262 TREE_TYPE (integer_zero_node) = integer_type_node;
6263 integer_one_node = build_int_2 (1, 0);
6264 TREE_TYPE (integer_one_node) = integer_type_node;
6265 integer_two_node = build_int_2 (2, 0);
6266 TREE_TYPE (integer_two_node) = integer_type_node;
6267 integer_three_node = build_int_2 (3, 0);
6268 TREE_TYPE (integer_three_node) = integer_type_node;
6269
6270 boolean_type_node = make_unsigned_type (BOOL_TYPE_SIZE);
6271 TREE_SET_CODE (boolean_type_node, BOOLEAN_TYPE);
6272 TYPE_MAX_VALUE (boolean_type_node) = build_int_2 (1, 0);
6273 TREE_TYPE (TYPE_MAX_VALUE (boolean_type_node)) = boolean_type_node;
6274 TYPE_PRECISION (boolean_type_node) = 1;
6275 record_builtin_type (RID_BOOL, "bool", boolean_type_node);
6276 boolean_false_node = build_int_2 (0, 0);
6277 TREE_TYPE (boolean_false_node) = boolean_type_node;
6278 boolean_true_node = build_int_2 (1, 0);
6279 TREE_TYPE (boolean_true_node) = boolean_type_node;
6280
6281 /* These are needed by stor-layout.c. */
6282 size_zero_node = size_int (0);
6283 size_one_node = size_int (1);
6284
6285 signed_size_zero_node = build_int_2 (0, 0);
6286 TREE_TYPE (signed_size_zero_node) = make_signed_type (TYPE_PRECISION (sizetype));
6287
6288 void_type_node = make_node (VOID_TYPE);
6289 record_builtin_type (RID_VOID, NULL_PTR, void_type_node);
6290 layout_type (void_type_node); /* Uses integer_zero_node. */
6291 void_list_node = build_tree_list (NULL_TREE, void_type_node);
6292 TREE_PARMLIST (void_list_node) = 1;
6293
6294 null_pointer_node = build_int_2 (0, 0);
6295 TREE_TYPE (null_pointer_node) = build_pointer_type (void_type_node);
6296 layout_type (TREE_TYPE (null_pointer_node));
6297
6298 /* Used for expressions that do nothing, but are not errors. */
6299 void_zero_node = build_int_2 (0, 0);
6300 TREE_TYPE (void_zero_node) = void_type_node;
6301
6302 string_type_node = build_pointer_type (char_type_node);
6303 const_string_type_node
6304 = build_pointer_type (build_qualified_type (char_type_node,
6305 TYPE_QUAL_CONST));
6306 empty_except_spec = build_tree_list (NULL_TREE, NULL_TREE);
6307 #if 0
6308 record_builtin_type (RID_MAX, NULL_PTR, string_type_node);
6309 #endif
6310
6311 /* Make a type to be the domain of a few array types
6312 whose domains don't really matter.
6313 200 is small enough that it always fits in size_t
6314 and large enough that it can hold most function names for the
6315 initializations of __FUNCTION__ and __PRETTY_FUNCTION__. */
6316 array_domain_type = build_index_type (build_int_2 (200, 0));
6317
6318 /* Make a type for arrays of characters.
6319 With luck nothing will ever really depend on the length of this
6320 array type. */
6321 char_array_type_node
6322 = build_array_type (char_type_node, array_domain_type);
6323 /* Likewise for arrays of ints. */
6324 int_array_type_node
6325 = build_array_type (integer_type_node, array_domain_type);
6326
6327 /* This is just some anonymous class type. Nobody should ever
6328 need to look inside this envelope. */
6329 class_star_type_node = build_pointer_type (make_lang_type (RECORD_TYPE));
6330
6331 if (flag_huge_objects)
6332 delta_type_node = long_integer_type_node;
6333 else
6334 delta_type_node = short_integer_type_node;
6335
6336 default_function_type
6337 = build_function_type (integer_type_node, NULL_TREE);
6338
6339 ptr_type_node = build_pointer_type (void_type_node);
6340 const_ptr_type_node
6341 = build_pointer_type (build_qualified_type (void_type_node,
6342 TYPE_QUAL_CONST));
6343 c_common_nodes_and_builtins (1, flag_no_builtin, flag_no_nonansi_builtin);
6344
6345 void_ftype_ptr
6346 = build_exception_variant (void_ftype_ptr, empty_except_spec);
6347
6348 /* C++ extensions */
6349
6350 unknown_type_node = make_node (UNKNOWN_TYPE);
6351 record_unknown_type (unknown_type_node, "unknown type");
6352
6353 /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node. */
6354 TREE_TYPE (unknown_type_node) = unknown_type_node;
6355
6356 TREE_TYPE (null_node) = type_for_size (POINTER_SIZE, 0);
6357
6358 /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
6359 result. */
6360 TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
6361 TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
6362
6363 /* This is special for C++ so functions can be overloaded. */
6364 wchar_type_node
6365 = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (WCHAR_TYPE)));
6366 wchar_type_size = TYPE_PRECISION (wchar_type_node);
6367 signed_wchar_type_node = make_signed_type (wchar_type_size);
6368 unsigned_wchar_type_node = make_unsigned_type (wchar_type_size);
6369 wchar_type_node
6370 = TREE_UNSIGNED (wchar_type_node)
6371 ? unsigned_wchar_type_node
6372 : signed_wchar_type_node;
6373 record_builtin_type (RID_WCHAR, "__wchar_t", wchar_type_node);
6374
6375 /* Artificial declaration of wchar_t -- can be bashed */
6376 wchar_decl_node = build_decl (TYPE_DECL, get_identifier ("wchar_t"),
6377 wchar_type_node);
6378 pushdecl (wchar_decl_node);
6379
6380 /* This is for wide string constants. */
6381 wchar_array_type_node
6382 = build_array_type (wchar_type_node, array_domain_type);
6383
6384 if (flag_vtable_thunks)
6385 {
6386 /* Make sure we get a unique function type, so we can give
6387 its pointer type a name. (This wins for gdb.) */
6388 tree vfunc_type = make_node (FUNCTION_TYPE);
6389 TREE_TYPE (vfunc_type) = integer_type_node;
6390 TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
6391 layout_type (vfunc_type);
6392
6393 vtable_entry_type = build_pointer_type (vfunc_type);
6394 }
6395 else
6396 {
6397 vtable_entry_type = make_lang_type (RECORD_TYPE);
6398 fields[0] = build_lang_decl (FIELD_DECL, delta_identifier,
6399 delta_type_node);
6400 fields[1] = build_lang_decl (FIELD_DECL, index_identifier,
6401 delta_type_node);
6402 fields[2] = build_lang_decl (FIELD_DECL, pfn_identifier,
6403 ptr_type_node);
6404 finish_builtin_type (vtable_entry_type, VTBL_PTR_TYPE, fields, 2,
6405 double_type_node);
6406
6407 /* Make this part of an invisible union. */
6408 fields[3] = copy_node (fields[2]);
6409 TREE_TYPE (fields[3]) = delta_type_node;
6410 DECL_NAME (fields[3]) = delta2_identifier;
6411 DECL_MODE (fields[3]) = TYPE_MODE (delta_type_node);
6412 DECL_SIZE (fields[3]) = TYPE_SIZE (delta_type_node);
6413 TREE_UNSIGNED (fields[3]) = 0;
6414 TREE_CHAIN (fields[2]) = fields[3];
6415 vtable_entry_type = build_qualified_type (vtable_entry_type,
6416 TYPE_QUAL_CONST);
6417 }
6418 record_builtin_type (RID_MAX, VTBL_PTR_TYPE, vtable_entry_type);
6419
6420 vtbl_type_node
6421 = build_cplus_array_type (vtable_entry_type, NULL_TREE);
6422 layout_type (vtbl_type_node);
6423 vtbl_type_node = build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
6424 record_builtin_type (RID_MAX, NULL_PTR, vtbl_type_node);
6425 vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
6426 layout_type (vtbl_ptr_type_node);
6427 record_builtin_type (RID_MAX, NULL_PTR, vtbl_ptr_type_node);
6428
6429 std_node = build_decl (NAMESPACE_DECL,
6430 get_identifier (flag_honor_std ? "fake std":"std"),
6431 void_type_node);
6432 pushdecl (std_node);
6433
6434 global_type_node = make_node (LANG_TYPE);
6435 record_unknown_type (global_type_node, "global type");
6436
6437 /* Now, C++. */
6438 current_lang_name = lang_name_cplusplus;
6439
6440 {
6441 tree bad_alloc_type_node, newtype, deltype;
6442 if (flag_honor_std)
6443 push_namespace (get_identifier ("std"));
6444 bad_alloc_type_node = xref_tag
6445 (class_type_node, get_identifier ("bad_alloc"), 1);
6446 if (flag_honor_std)
6447 pop_namespace ();
6448 newtype = build_exception_variant
6449 (ptr_ftype_sizetype, add_exception_specifier (NULL_TREE, bad_alloc_type_node, -1));
6450 deltype = build_exception_variant (void_ftype_ptr, empty_except_spec);
6451 auto_function (ansi_opname[(int) NEW_EXPR], newtype, NOT_BUILT_IN);
6452 auto_function (ansi_opname[(int) VEC_NEW_EXPR], newtype, NOT_BUILT_IN);
6453 global_delete_fndecl
6454 = auto_function (ansi_opname[(int) DELETE_EXPR], deltype, NOT_BUILT_IN);
6455 auto_function (ansi_opname[(int) VEC_DELETE_EXPR], deltype, NOT_BUILT_IN);
6456 }
6457
6458 abort_fndecl
6459 = define_function ("__pure_virtual", void_ftype,
6460 NOT_BUILT_IN, 0, 0);
6461
6462 /* Perform other language dependent initializations. */
6463 init_class_processing ();
6464 init_init_processing ();
6465 init_search_processing ();
6466 if (flag_rtti)
6467 init_rtti_processing ();
6468
6469 if (flag_exceptions)
6470 init_exception_processing ();
6471 if (flag_no_inline)
6472 {
6473 flag_inline_functions = 0;
6474 }
6475
6476 if (! supports_one_only ())
6477 flag_weak = 0;
6478
6479 /* Create the global bindings for __FUNCTION__ and __PRETTY_FUNCTION__. */
6480 declare_function_name ();
6481
6482 /* Prepare to check format strings against argument lists. */
6483 init_function_format_info ();
6484
6485 /* Show we use EH for cleanups. */
6486 using_eh_for_cleanups ();
6487
6488 print_error_function = lang_print_error_function;
6489 lang_get_alias_set = &c_get_alias_set;
6490 valid_lang_attribute = cp_valid_lang_attribute;
6491
6492 /* Maintain consistency. Perhaps we should just complain if they
6493 say -fwritable-strings? */
6494 if (flag_writable_strings)
6495 flag_const_strings = 0;
6496
6497 /* Add GC roots for all of our global variables. */
6498 ggc_add_tree_root (c_global_trees, sizeof c_global_trees / sizeof(tree));
6499 ggc_add_tree_root (cp_global_trees, sizeof cp_global_trees / sizeof(tree));
6500 ggc_add_tree_root (&char_type_node, 1);
6501 ggc_add_tree_root (&error_mark_node, 1);
6502 ggc_add_tree_root (&integer_type_node, 1);
6503 ggc_add_tree_root (&integer_three_node, 1);
6504 ggc_add_tree_root (&integer_two_node, 1);
6505 ggc_add_tree_root (&integer_one_node, 1);
6506 ggc_add_tree_root (&integer_zero_node, 1);
6507 ggc_add_tree_root (&signed_size_zero_node, 1);
6508 ggc_add_tree_root (&size_one_node, 1);
6509 ggc_add_tree_root (&size_zero_node, 1);
6510 ggc_add_tree_root (&unsigned_type_node, 1);
6511 ggc_add_tree_root (&ptr_type_node, 1);
6512 ggc_add_tree_root (&null_pointer_node, 1);
6513 ggc_add_tree_root (&va_list_type_node, 1);
6514 ggc_add_tree_root (&void_type_node, 1);
6515 ggc_add_root (&global_binding_level, 1, sizeof global_binding_level,
6516 mark_binding_level);
6517 ggc_add_root (&scope_chain, 1, sizeof scope_chain, &mark_saved_scope);
6518 ggc_add_tree_root (&static_ctors, 1);
6519 ggc_add_tree_root (&static_dtors, 1);
6520 ggc_add_tree_root (&lastiddecl, 1);
6521
6522 ggc_add_tree_root (&enum_next_value, 1);
6523 ggc_add_tree_root (&last_function_parm_tags, 1);
6524 ggc_add_tree_root (&current_function_return_value, 1);
6525 ggc_add_tree_root (&current_function_parms, 1);
6526 ggc_add_tree_root (&current_function_parm_tags, 1);
6527 ggc_add_tree_root (&last_function_parms, 1);
6528 ggc_add_tree_root (&error_mark_list, 1);
6529
6530 ggc_add_tree_root (&global_namespace, 1);
6531 ggc_add_tree_root (&global_type_node, 1);
6532 ggc_add_tree_root (&anonymous_namespace_name, 1);
6533
6534 ggc_add_tree_root (&got_object, 1);
6535 ggc_add_tree_root (&got_scope, 1);
6536
6537 ggc_add_tree_root (&current_lang_name, 1);
6538 ggc_add_tree_root (&static_aggregates, 1);
6539 }
6540
6541 /* Function to print any language-specific context for an error message. */
6542
6543 static void
6544 lang_print_error_function (file)
6545 const char *file;
6546 {
6547 default_print_error_function (file);
6548 maybe_print_template_context ();
6549 }
6550
6551 /* Make a definition for a builtin function named NAME and whose data type
6552 is TYPE. TYPE should be a function type with argument types.
6553 FUNCTION_CODE tells later passes how to compile calls to this function.
6554 See tree.h for its possible values.
6555
6556 If LIBRARY_NAME is nonzero, use that for DECL_ASSEMBLER_NAME,
6557 the name to be called if we can't opencode the function. */
6558
6559 tree
6560 define_function (name, type, function_code, pfn, library_name)
6561 const char *name;
6562 tree type;
6563 enum built_in_function function_code;
6564 void (*pfn) PROTO((tree));
6565 const char *library_name;
6566 {
6567 tree decl = build_lang_decl (FUNCTION_DECL, get_identifier (name), type);
6568 DECL_EXTERNAL (decl) = 1;
6569 TREE_PUBLIC (decl) = 1;
6570 DECL_ARTIFICIAL (decl) = 1;
6571
6572 my_friendly_assert (DECL_CONTEXT (decl) == NULL_TREE, 392);
6573 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
6574
6575 /* Since `pushdecl' relies on DECL_ASSEMBLER_NAME instead of DECL_NAME,
6576 we cannot change DECL_ASSEMBLER_NAME until we have installed this
6577 function in the namespace. */
6578 if (pfn) (*pfn) (decl);
6579 if (library_name)
6580 DECL_ASSEMBLER_NAME (decl) = get_identifier (library_name);
6581 make_function_rtl (decl);
6582 if (function_code != NOT_BUILT_IN)
6583 {
6584 DECL_BUILT_IN (decl) = 1;
6585 DECL_FUNCTION_CODE (decl) = function_code;
6586 }
6587 return decl;
6588 }
6589
6590 tree
6591 builtin_function (name, type, code, libname)
6592 const char *name;
6593 tree type;
6594 enum built_in_function code;
6595 const char *libname;
6596 {
6597 return define_function (name, type, code, (void (*) PROTO((tree)))pushdecl, libname);
6598 }
6599 \f
6600 /* When we call finish_struct for an anonymous union, we create
6601 default copy constructors and such. But, an anonymous union
6602 shouldn't have such things; this function undoes the damage to the
6603 anonymous union type T.
6604
6605 (The reason that we create the synthesized methods is that we don't
6606 distinguish `union { int i; }' from `typedef union { int i; } U'.
6607 The first is an anonymous union; the second is just an ordinary
6608 union type.) */
6609
6610 void
6611 fixup_anonymous_aggr (t)
6612 tree t;
6613 {
6614 tree *q;
6615
6616 /* Wipe out memory of synthesized methods */
6617 TYPE_HAS_CONSTRUCTOR (t) = 0;
6618 TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
6619 TYPE_HAS_INIT_REF (t) = 0;
6620 TYPE_HAS_CONST_INIT_REF (t) = 0;
6621 TYPE_HAS_ASSIGN_REF (t) = 0;
6622 TYPE_HAS_CONST_ASSIGN_REF (t) = 0;
6623
6624 /* Splice the implicitly generated functions out of the TYPE_METHODS
6625 list. */
6626 q = &TYPE_METHODS (t);
6627 while (*q)
6628 {
6629 if (DECL_ARTIFICIAL (*q))
6630 *q = TREE_CHAIN (*q);
6631 else
6632 q = &TREE_CHAIN (*q);
6633 }
6634
6635 /* ANSI C++ June 5 1992 WP 9.5.3. Anonymous unions may not have
6636 function members. */
6637 if (TYPE_METHODS (t))
6638 error ("an anonymous union cannot have function members");
6639 }
6640
6641 /* Make sure that a declaration with no declarator is well-formed, i.e.
6642 just defines a tagged type or anonymous union.
6643
6644 Returns the type defined, if any. */
6645
6646 tree
6647 check_tag_decl (declspecs)
6648 tree declspecs;
6649 {
6650 int found_type = 0;
6651 tree ob_modifier = NULL_TREE;
6652 register tree link;
6653 register tree t = NULL_TREE;
6654
6655 for (link = declspecs; link; link = TREE_CHAIN (link))
6656 {
6657 register tree value = TREE_VALUE (link);
6658
6659 if (TYPE_P (value))
6660 {
6661 ++found_type;
6662
6663 if (IS_AGGR_TYPE (value) || TREE_CODE (value) == ENUMERAL_TYPE)
6664 {
6665 my_friendly_assert (TYPE_MAIN_DECL (value) != NULL_TREE, 261);
6666 t = value;
6667 }
6668 }
6669 else if (value == ridpointers[(int) RID_FRIEND])
6670 {
6671 if (current_class_type == NULL_TREE
6672 || current_scope () != current_class_type)
6673 ob_modifier = value;
6674 }
6675 else if (value == ridpointers[(int) RID_STATIC]
6676 || value == ridpointers[(int) RID_EXTERN]
6677 || value == ridpointers[(int) RID_AUTO]
6678 || value == ridpointers[(int) RID_REGISTER]
6679 || value == ridpointers[(int) RID_INLINE]
6680 || value == ridpointers[(int) RID_VIRTUAL]
6681 || value == ridpointers[(int) RID_CONST]
6682 || value == ridpointers[(int) RID_VOLATILE]
6683 || value == ridpointers[(int) RID_EXPLICIT])
6684 ob_modifier = value;
6685 }
6686
6687 if (found_type > 1)
6688 error ("multiple types in one declaration");
6689
6690 /* Inside a class, we might be in a friend or access declaration.
6691 Until we have a good way of detecting the latter, don't warn. */
6692 if (t == NULL_TREE && ! current_class_type)
6693 pedwarn ("declaration does not declare anything");
6694
6695 /* Check for an anonymous union. We're careful
6696 accessing TYPE_IDENTIFIER because some built-in types, like
6697 pointer-to-member types, do not have TYPE_NAME. */
6698 else if (t && IS_AGGR_TYPE_CODE (TREE_CODE (t))
6699 && TYPE_NAME (t)
6700 && ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
6701 {
6702 /* Anonymous unions are objects, so they can have specifiers. */;
6703 SET_ANON_AGGR_TYPE_P (t);
6704
6705 if (TREE_CODE (t) != UNION_TYPE && pedantic && ! in_system_header)
6706 pedwarn ("ISO C++ prohibits anonymous structs");
6707 }
6708
6709 else if (ob_modifier)
6710 {
6711 if (ob_modifier == ridpointers[(int) RID_INLINE]
6712 || ob_modifier == ridpointers[(int) RID_VIRTUAL])
6713 cp_error ("`%D' can only be specified for functions", ob_modifier);
6714 else if (ob_modifier == ridpointers[(int) RID_FRIEND])
6715 cp_error ("`%D' can only be specified inside a class", ob_modifier);
6716 else if (ob_modifier == ridpointers[(int) RID_EXPLICIT])
6717 cp_error ("`%D' can only be specified for constructors",
6718 ob_modifier);
6719 else
6720 cp_error ("`%D' can only be specified for objects and functions",
6721 ob_modifier);
6722 }
6723
6724 return t;
6725 }
6726
6727 /* Called when a declaration is seen that contains no names to declare.
6728 If its type is a reference to a structure, union or enum inherited
6729 from a containing scope, shadow that tag name for the current scope
6730 with a forward reference.
6731 If its type defines a new named structure or union
6732 or defines an enum, it is valid but we need not do anything here.
6733 Otherwise, it is an error.
6734
6735 C++: may have to grok the declspecs to learn about static,
6736 complain for anonymous unions. */
6737
6738 void
6739 shadow_tag (declspecs)
6740 tree declspecs;
6741 {
6742 tree t = check_tag_decl (declspecs);
6743
6744 if (t)
6745 maybe_process_partial_specialization (t);
6746
6747 /* This is where the variables in an anonymous union are
6748 declared. An anonymous union declaration looks like:
6749 union { ... } ;
6750 because there is no declarator after the union, the parser
6751 sends that declaration here. */
6752 if (t && ANON_AGGR_TYPE_P (t))
6753 {
6754 fixup_anonymous_aggr (t);
6755
6756 if (TYPE_FIELDS (t))
6757 {
6758 tree decl = grokdeclarator (NULL_TREE, declspecs, NORMAL, 0,
6759 NULL_TREE);
6760 finish_anon_union (decl);
6761 }
6762 }
6763 }
6764 \f
6765 /* Decode a "typename", such as "int **", returning a ..._TYPE node. */
6766
6767 tree
6768 groktypename (typename)
6769 tree typename;
6770 {
6771 if (TREE_CODE (typename) != TREE_LIST)
6772 return typename;
6773 return grokdeclarator (TREE_VALUE (typename),
6774 TREE_PURPOSE (typename),
6775 TYPENAME, 0, NULL_TREE);
6776 }
6777
6778 /* Decode a declarator in an ordinary declaration or data definition.
6779 This is called as soon as the type information and variable name
6780 have been parsed, before parsing the initializer if any.
6781 Here we create the ..._DECL node, fill in its type,
6782 and put it on the list of decls for the current context.
6783 The ..._DECL node is returned as the value.
6784
6785 Exception: for arrays where the length is not specified,
6786 the type is left null, to be filled in by `cp_finish_decl'.
6787
6788 Function definitions do not come here; they go to start_function
6789 instead. However, external and forward declarations of functions
6790 do go through here. Structure field declarations are done by
6791 grokfield and not through here. */
6792
6793 /* Set this to zero to debug not using the temporary obstack
6794 to parse initializers. */
6795 int debug_temp_inits = 1;
6796
6797 tree
6798 start_decl (declarator, declspecs, initialized, attributes, prefix_attributes)
6799 tree declarator, declspecs;
6800 int initialized;
6801 tree attributes, prefix_attributes;
6802 {
6803 register tree decl;
6804 register tree type, tem;
6805 tree context;
6806 extern int have_extern_spec;
6807 extern int used_extern_spec;
6808 tree attrlist;
6809
6810 #if 0
6811 /* See code below that used this. */
6812 int init_written = initialized;
6813 #endif
6814
6815 /* This should only be done once on the top most decl. */
6816 if (have_extern_spec && !used_extern_spec)
6817 {
6818 declspecs = decl_tree_cons (NULL_TREE, get_identifier ("extern"),
6819 declspecs);
6820 used_extern_spec = 1;
6821 }
6822
6823 if (attributes || prefix_attributes)
6824 attrlist = build_scratch_list (attributes, prefix_attributes);
6825 else
6826 attrlist = NULL_TREE;
6827
6828 decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
6829 attrlist);
6830
6831 if (decl == NULL_TREE || TREE_CODE (decl) == VOID_TYPE)
6832 return NULL_TREE;
6833
6834 type = TREE_TYPE (decl);
6835
6836 if (type == error_mark_node)
6837 return NULL_TREE;
6838
6839 /* Don't lose if destructors must be executed at file-level. */
6840 if (! processing_template_decl && TREE_STATIC (decl)
6841 && TYPE_NEEDS_DESTRUCTOR (complete_type (type))
6842 && !TREE_PERMANENT (decl))
6843 {
6844 push_obstacks (&permanent_obstack, &permanent_obstack);
6845 decl = copy_node (decl);
6846 if (TREE_CODE (type) == ARRAY_TYPE)
6847 {
6848 tree itype = TYPE_DOMAIN (type);
6849 if (itype && ! TREE_PERMANENT (itype))
6850 {
6851 itype = build_index_type (TYPE_MAX_VALUE (itype));
6852 type = build_cplus_array_type (TREE_TYPE (type), itype);
6853 TREE_TYPE (decl) = type;
6854 }
6855 }
6856 pop_obstacks ();
6857 }
6858
6859 context
6860 = (TREE_CODE (decl) == FUNCTION_DECL && DECL_VIRTUAL_P (decl))
6861 ? DECL_CLASS_CONTEXT (decl)
6862 : DECL_CONTEXT (decl);
6863
6864 if (initialized && context && TREE_CODE (context) == NAMESPACE_DECL
6865 && context != current_namespace && TREE_CODE (decl) == VAR_DECL)
6866 {
6867 /* When parsing the initializer, lookup should use the object's
6868 namespace. */
6869 push_decl_namespace (context);
6870 }
6871
6872 /* We are only interested in class contexts, later. */
6873 if (context && TREE_CODE (context) == NAMESPACE_DECL)
6874 context = NULL_TREE;
6875
6876 if (initialized)
6877 /* Is it valid for this decl to have an initializer at all?
6878 If not, set INITIALIZED to zero, which will indirectly
6879 tell `cp_finish_decl' to ignore the initializer once it is parsed. */
6880 switch (TREE_CODE (decl))
6881 {
6882 case TYPE_DECL:
6883 /* typedef foo = bar means give foo the same type as bar.
6884 We haven't parsed bar yet, so `cp_finish_decl' will fix that up.
6885 Any other case of an initialization in a TYPE_DECL is an error. */
6886 if (pedantic || list_length (declspecs) > 1)
6887 {
6888 cp_error ("typedef `%D' is initialized", decl);
6889 initialized = 0;
6890 }
6891 break;
6892
6893 case FUNCTION_DECL:
6894 cp_error ("function `%#D' is initialized like a variable", decl);
6895 initialized = 0;
6896 break;
6897
6898 default:
6899 break;
6900 }
6901
6902 if (initialized)
6903 {
6904 if (! toplevel_bindings_p ()
6905 && DECL_EXTERNAL (decl))
6906 cp_warning ("declaration of `%#D' has `extern' and is initialized",
6907 decl);
6908 DECL_EXTERNAL (decl) = 0;
6909 if (toplevel_bindings_p ())
6910 TREE_STATIC (decl) = 1;
6911
6912 /* Tell `pushdecl' this is an initialized decl
6913 even though we don't yet have the initializer expression.
6914 Also tell `cp_finish_decl' it may store the real initializer. */
6915 DECL_INITIAL (decl) = error_mark_node;
6916 }
6917
6918 #ifdef SET_DEFAULT_DECL_ATTRIBUTES
6919 SET_DEFAULT_DECL_ATTRIBUTES (decl, attributes);
6920 #endif
6921
6922 /* Set attributes here so if duplicate decl, will have proper attributes. */
6923 cplus_decl_attributes (decl, attributes, prefix_attributes);
6924
6925 if (context && TYPE_SIZE (complete_type (context)) != NULL_TREE)
6926 {
6927 push_nested_class (context, 2);
6928
6929 if (TREE_CODE (decl) == VAR_DECL)
6930 {
6931 tree field = lookup_field (context, DECL_NAME (decl), 0, 0);
6932 if (field == NULL_TREE || TREE_CODE (field) != VAR_DECL)
6933 cp_error ("`%#D' is not a static member of `%#T'", decl, context);
6934 else
6935 {
6936 if (DECL_CONTEXT (field) != context)
6937 {
6938 cp_pedwarn ("ANSI C++ does not permit `%T::%D' to be defined as `%T::%D'",
6939 DECL_CONTEXT (field), DECL_NAME (decl),
6940 context, DECL_NAME (decl));
6941 DECL_CONTEXT (decl) = DECL_CONTEXT (field);
6942 }
6943 /* Static data member are tricky; an in-class initialization
6944 still doesn't provide a definition, so the in-class
6945 declaration will have DECL_EXTERNAL set, but will have an
6946 initialization. Thus, duplicate_decls won't warn
6947 about this situation, and so we check here. */
6948 if (DECL_INITIAL (decl) && DECL_INITIAL (field))
6949 cp_error ("duplicate initialization of %D", decl);
6950 if (duplicate_decls (decl, field))
6951 decl = field;
6952 }
6953 }
6954 else
6955 {
6956 tree field = check_classfn (context, decl);
6957 if (field && duplicate_decls (decl, field))
6958 decl = field;
6959 }
6960
6961 /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set. */
6962 DECL_IN_AGGR_P (decl) = 0;
6963 if ((DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl))
6964 || CLASSTYPE_USE_TEMPLATE (context))
6965 {
6966 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
6967 /* [temp.expl.spec] An explicit specialization of a static data
6968 member of a template is a definition if the declaration
6969 includes an initializer; otherwise, it is a declaration.
6970
6971 We check for processing_specialization so this only applies
6972 to the new specialization syntax. */
6973 if (DECL_INITIAL (decl) == NULL_TREE && processing_specialization)
6974 DECL_EXTERNAL (decl) = 1;
6975 }
6976
6977 if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl))
6978 cp_pedwarn ("declaration of `%#D' outside of class is not definition",
6979 decl);
6980 }
6981
6982 /* Enter this declaration into the symbol table. */
6983 tem = maybe_push_decl (decl);
6984
6985 if (processing_template_decl)
6986 {
6987 if (at_function_scope_p ())
6988 push_permanent_obstack ();
6989
6990 tem = push_template_decl (tem);
6991 /* In a a local scope, add a representation of this declaration
6992 to the statement tree. */
6993 if (at_function_scope_p ())
6994 {
6995 add_decl_stmt (decl);
6996 pop_obstacks ();
6997 }
6998 }
6999
7000
7001 #if ! defined (ASM_OUTPUT_BSS) && ! defined (ASM_OUTPUT_ALIGNED_BSS)
7002 /* Tell the back-end to use or not use .common as appropriate. If we say
7003 -fconserve-space, we want this to save .data space, at the expense of
7004 wrong semantics. If we say -fno-conserve-space, we want this to
7005 produce errors about redefs; to do this we force variables into the
7006 data segment. */
7007 DECL_COMMON (tem) = flag_conserve_space || ! TREE_PUBLIC (tem);
7008 #endif
7009
7010 if (! processing_template_decl)
7011 start_decl_1 (tem);
7012
7013 /* Corresponding pop_obstacks is done in `cp_finish_decl'. */
7014 push_obstacks_nochange ();
7015
7016 return tem;
7017 }
7018
7019 void
7020 start_decl_1 (decl)
7021 tree decl;
7022 {
7023 tree type = TREE_TYPE (decl);
7024 int initialized = (DECL_INITIAL (decl) != NULL_TREE);
7025
7026 if (type == error_mark_node)
7027 return;
7028
7029 /* If this type of object needs a cleanup, and control may
7030 jump past it, make a new binding level so that it is cleaned
7031 up only when it is initialized first. */
7032 if (TYPE_NEEDS_DESTRUCTOR (type)
7033 && current_binding_level->more_cleanups_ok == 0)
7034 pushlevel_temporary (1);
7035
7036 if (initialized)
7037 /* Is it valid for this decl to have an initializer at all?
7038 If not, set INITIALIZED to zero, which will indirectly
7039 tell `cp_finish_decl' to ignore the initializer once it is parsed. */
7040 {
7041 /* Don't allow initializations for incomplete types except for
7042 arrays which might be completed by the initialization. */
7043 if (TYPE_SIZE (complete_type (type)) != NULL_TREE)
7044 ; /* A complete type is ok. */
7045 else if (TREE_CODE (type) != ARRAY_TYPE)
7046 {
7047 cp_error ("variable `%#D' has initializer but incomplete type",
7048 decl);
7049 initialized = 0;
7050 type = TREE_TYPE (decl) = error_mark_node;
7051 }
7052 else if (TYPE_SIZE (complete_type (TREE_TYPE (type))) == NULL_TREE)
7053 {
7054 if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
7055 cp_error ("elements of array `%#D' have incomplete type", decl);
7056 /* else we already gave an error in start_decl. */
7057 initialized = 0;
7058 }
7059 }
7060
7061 if (!initialized
7062 && TREE_CODE (decl) != TYPE_DECL
7063 && TREE_CODE (decl) != TEMPLATE_DECL
7064 && IS_AGGR_TYPE (type) && ! DECL_EXTERNAL (decl))
7065 {
7066 if ((! processing_template_decl || ! uses_template_parms (type))
7067 && TYPE_SIZE (complete_type (type)) == NULL_TREE)
7068 {
7069 cp_error ("aggregate `%#D' has incomplete type and cannot be initialized",
7070 decl);
7071 /* Change the type so that assemble_variable will give
7072 DECL an rtl we can live with: (mem (const_int 0)). */
7073 type = TREE_TYPE (decl) = error_mark_node;
7074 }
7075 else
7076 {
7077 /* If any base type in the hierarchy of TYPE needs a constructor,
7078 then we set initialized to 1. This way any nodes which are
7079 created for the purposes of initializing this aggregate
7080 will live as long as it does. This is necessary for global
7081 aggregates which do not have their initializers processed until
7082 the end of the file. */
7083 initialized = TYPE_NEEDS_CONSTRUCTING (type);
7084 }
7085 }
7086
7087 if (! initialized)
7088 DECL_INITIAL (decl) = NULL_TREE;
7089 }
7090
7091 /* Handle initialization of references.
7092 These three arguments are from `cp_finish_decl', and have the
7093 same meaning here that they do there.
7094
7095 Quotes on semantics can be found in ARM 8.4.3. */
7096
7097 static void
7098 grok_reference_init (decl, type, init)
7099 tree decl, type, init;
7100 {
7101 tree tmp;
7102
7103 if (init == NULL_TREE)
7104 {
7105 if ((DECL_LANG_SPECIFIC (decl) == 0
7106 || DECL_IN_AGGR_P (decl) == 0)
7107 && ! DECL_THIS_EXTERN (decl))
7108 {
7109 cp_error ("`%D' declared as reference but not initialized", decl);
7110 if (TREE_CODE (decl) == VAR_DECL)
7111 SET_DECL_REFERENCE_SLOT (decl, error_mark_node);
7112 }
7113 return;
7114 }
7115
7116 if (init == error_mark_node)
7117 return;
7118
7119 if (TREE_CODE (type) == REFERENCE_TYPE
7120 && TREE_CODE (init) == CONSTRUCTOR)
7121 {
7122 cp_error ("ANSI C++ forbids use of initializer list to initialize reference `%D'", decl);
7123 return;
7124 }
7125
7126 if (TREE_CODE (init) == TREE_LIST)
7127 init = build_compound_expr (init);
7128
7129 if (TREE_CODE (TREE_TYPE (init)) == REFERENCE_TYPE)
7130 init = convert_from_reference (init);
7131
7132 if (TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE
7133 && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
7134 {
7135 /* Note: default conversion is only called in very special cases. */
7136 init = default_conversion (init);
7137 }
7138
7139 tmp = convert_to_reference
7140 (type, init, CONV_IMPLICIT,
7141 LOOKUP_SPECULATIVELY|LOOKUP_NORMAL|DIRECT_BIND, decl);
7142
7143 if (tmp == error_mark_node)
7144 goto fail;
7145 else if (tmp != NULL_TREE)
7146 {
7147 init = tmp;
7148 DECL_INITIAL (decl) = save_expr (init);
7149 }
7150 else
7151 {
7152 cp_error ("cannot initialize `%T' from `%T'", type, TREE_TYPE (init));
7153 goto fail;
7154 }
7155
7156 /* ?? Can this be optimized in some cases to
7157 hand back the DECL_INITIAL slot?? */
7158 if (TYPE_SIZE (TREE_TYPE (type)))
7159 {
7160 init = convert_from_reference (decl);
7161 SET_DECL_REFERENCE_SLOT (decl, init);
7162 }
7163
7164 if (TREE_STATIC (decl) && ! TREE_CONSTANT (DECL_INITIAL (decl)))
7165 {
7166 expand_static_init (decl, DECL_INITIAL (decl));
7167 DECL_INITIAL (decl) = NULL_TREE;
7168 }
7169 return;
7170
7171 fail:
7172 if (TREE_CODE (decl) == VAR_DECL)
7173 SET_DECL_REFERENCE_SLOT (decl, error_mark_node);
7174 return;
7175 }
7176
7177 /* Fill in DECL_INITIAL with some magical value to prevent expand_decl from
7178 mucking with forces it does not comprehend (i.e. initialization with a
7179 constructor). If we are at global scope and won't go into COMMON, fill
7180 it in with a dummy CONSTRUCTOR to force the variable into .data;
7181 otherwise we can use error_mark_node. */
7182
7183 static tree
7184 obscure_complex_init (decl, init)
7185 tree decl, init;
7186 {
7187 if (! flag_no_inline && TREE_STATIC (decl))
7188 {
7189 if (extract_init (decl, init))
7190 return NULL_TREE;
7191 }
7192
7193 #if ! defined (ASM_OUTPUT_BSS) && ! defined (ASM_OUTPUT_ALIGNED_BSS)
7194 if (toplevel_bindings_p () && ! DECL_COMMON (decl))
7195 DECL_INITIAL (decl) = build (CONSTRUCTOR, TREE_TYPE (decl), NULL_TREE,
7196 NULL_TREE);
7197 else
7198 #endif
7199 DECL_INITIAL (decl) = error_mark_node;
7200
7201 return init;
7202 }
7203
7204 /* When parsing `int a[] = {1, 2};' we don't know the size of the
7205 array until we finish parsing the initializer. If that's the
7206 situation we're in, update DECL accordingly. */
7207
7208 static void
7209 maybe_deduce_size_from_array_init (decl, init)
7210 tree decl;
7211 tree init;
7212 {
7213 tree type = TREE_TYPE (decl);
7214
7215 if (TREE_CODE (type) == ARRAY_TYPE
7216 && TYPE_DOMAIN (type) == NULL_TREE
7217 && TREE_CODE (decl) != TYPE_DECL)
7218 {
7219 int do_default
7220 = (TREE_STATIC (decl)
7221 /* Even if pedantic, an external linkage array
7222 may have incomplete type at first. */
7223 ? pedantic && ! DECL_EXTERNAL (decl)
7224 : !DECL_EXTERNAL (decl));
7225 tree initializer = init ? init : DECL_INITIAL (decl);
7226 int failure = complete_array_type (type, initializer, do_default);
7227
7228 if (failure == 1)
7229 cp_error ("initializer fails to determine size of `%D'", decl);
7230
7231 if (failure == 2)
7232 {
7233 if (do_default)
7234 cp_error ("array size missing in `%D'", decl);
7235 /* If a `static' var's size isn't known, make it extern as
7236 well as static, so it does not get allocated. If it's not
7237 `static', then don't mark it extern; finish_incomplete_decl
7238 will give it a default size and it will get allocated. */
7239 else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
7240 DECL_EXTERNAL (decl) = 1;
7241 }
7242
7243 if (pedantic && TYPE_DOMAIN (type) != NULL_TREE
7244 && tree_int_cst_lt (TYPE_MAX_VALUE (TYPE_DOMAIN (type)),
7245 integer_zero_node))
7246 cp_error ("zero-size array `%D'", decl);
7247
7248 layout_decl (decl, 0);
7249 }
7250 }
7251
7252 /* Set DECL_SIZE, DECL_ALIGN, etc. for DECL (a VAR_DECL), and issue
7253 any appropriate error messages regarding the layout. INIT is a
7254 the initializer for DECL; returns a modified version. */
7255
7256 static tree
7257 layout_var_decl (decl, init)
7258 tree decl;
7259 tree init;
7260 {
7261 tree ttype = target_type (TREE_TYPE (decl));
7262
7263 /* If we haven't already layed out this declaration, and we know its
7264 type, do so now. Note that we must not call complete type for an
7265 external object because it's type might involve templates that we
7266 are not supposed to isntantiate yet. */
7267 if (!DECL_EXTERNAL (decl)
7268 && DECL_SIZE (decl) == NULL_TREE
7269 && TYPE_SIZE (complete_type (TREE_TYPE (decl))) != NULL_TREE)
7270 layout_decl (decl, 0);
7271
7272 if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
7273 {
7274 /* An automatic variable with an incomplete type: that is an error.
7275 Don't talk about array types here, since we took care of that
7276 message in grokdeclarator. */
7277 cp_error ("storage size of `%D' isn't known", decl);
7278 TREE_TYPE (decl) = error_mark_node;
7279 }
7280 else if (!DECL_EXTERNAL (decl) && IS_AGGR_TYPE (ttype))
7281 /* Let debugger know it should output info for this type. */
7282 note_debug_info_needed (ttype);
7283
7284 if (TREE_STATIC (decl) && DECL_CLASS_SCOPE_P (decl))
7285 note_debug_info_needed (DECL_CONTEXT (decl));
7286
7287 if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
7288 && DECL_SIZE (decl) != NULL_TREE
7289 && ! TREE_CONSTANT (DECL_SIZE (decl)))
7290 {
7291 if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
7292 constant_expression_warning (DECL_SIZE (decl));
7293 else
7294 cp_error ("storage size of `%D' isn't constant", decl);
7295 }
7296
7297 return init;
7298 }
7299
7300 /* Return a cleanup for DECL, created on whatever obstack is
7301 appropriate. */
7302
7303 static tree
7304 build_cleanup_on_safe_obstack (decl)
7305 tree decl;
7306 {
7307 tree cleanup;
7308 tree type;
7309 int need_pop;
7310
7311 type = TREE_TYPE (decl);
7312
7313 /* Only variables get cleaned up. */
7314 if (TREE_CODE (decl) != VAR_DECL)
7315 return NULL_TREE;
7316
7317 /* And only things with destructors need cleaning up. */
7318 if (!TYPE_NEEDS_DESTRUCTOR (type))
7319 return NULL_TREE;
7320
7321 if (TREE_CODE (decl) == VAR_DECL &&
7322 (DECL_EXTERNAL (decl) || TREE_STATIC (decl)))
7323 /* We don't clean up things that aren't defined in this
7324 translation unit, or that need a static cleanup. The latter
7325 are handled by finish_file. */
7326 return NULL_TREE;
7327
7328 /* Switch to an obstack that will live until the point where the
7329 cleanup code is actually expanded. */
7330 need_pop = suspend_momentary ();
7331
7332 /* Compute the cleanup. */
7333 cleanup = maybe_build_cleanup (decl);
7334
7335 /* Pop back to the obstack we were on before. */
7336 resume_momentary (need_pop);
7337
7338 return cleanup;
7339 }
7340
7341 /* If a local static variable is declared in an inline function, or if
7342 we have a weak definition, we must endeavor to create only one
7343 instance of the variable at link-time. */
7344
7345 static void
7346 maybe_commonize_var (decl)
7347 tree decl;
7348 {
7349 /* Static data in a function with comdat linkage also has comdat
7350 linkage. */
7351 if (TREE_STATIC (decl)
7352 /* Don't mess with __FUNCTION__. */
7353 && ! TREE_ASM_WRITTEN (decl)
7354 && current_function_decl
7355 && DECL_CONTEXT (decl) == current_function_decl
7356 && (DECL_THIS_INLINE (current_function_decl)
7357 || DECL_TEMPLATE_INSTANTIATION (current_function_decl))
7358 && TREE_PUBLIC (current_function_decl))
7359 {
7360 /* Rather than try to get this right with inlining, we suppress
7361 inlining of such functions. */
7362 current_function_cannot_inline
7363 = "function with static variable cannot be inline";
7364
7365 /* If flag_weak, we don't need to mess with this, as we can just
7366 make the function weak, and let it refer to its unique local
7367 copy. This works because we don't allow the function to be
7368 inlined. */
7369 if (! flag_weak)
7370 {
7371 if (DECL_INTERFACE_KNOWN (current_function_decl))
7372 {
7373 TREE_PUBLIC (decl) = 1;
7374 DECL_EXTERNAL (decl) = DECL_EXTERNAL (current_function_decl);
7375 }
7376 else if (DECL_INITIAL (decl) == NULL_TREE
7377 || DECL_INITIAL (decl) == error_mark_node)
7378 {
7379 TREE_PUBLIC (decl) = 1;
7380 DECL_COMMON (decl) = 1;
7381 }
7382 /* else we lose. We can only do this if we can use common,
7383 which we can't if it has been initialized. */
7384
7385 if (TREE_PUBLIC (decl))
7386 DECL_ASSEMBLER_NAME (decl)
7387 = build_static_name (current_function_decl, DECL_NAME (decl));
7388 else if (! DECL_ARTIFICIAL (decl))
7389 {
7390 cp_warning_at ("sorry: semantics of inline function static data `%#D' are wrong (you'll wind up with multiple copies)", decl);
7391 cp_warning_at (" you can work around this by removing the initializer", decl);
7392 }
7393 }
7394 }
7395 else if (DECL_LANG_SPECIFIC (decl) && DECL_COMDAT (decl))
7396 /* Set it up again; we might have set DECL_INITIAL since the last
7397 time. */
7398 comdat_linkage (decl);
7399 }
7400
7401 /* Issue an error message if DECL is an uninitialized const variable. */
7402
7403 static void
7404 check_for_uninitialized_const_var (decl)
7405 tree decl;
7406 {
7407 tree type = TREE_TYPE (decl);
7408
7409 /* ``Unless explicitly declared extern, a const object does not have
7410 external linkage and must be initialized. ($8.4; $12.1)'' ARM
7411 7.1.6 */
7412 if (TREE_CODE (decl) == VAR_DECL
7413 && TREE_CODE (type) != REFERENCE_TYPE
7414 && CP_TYPE_CONST_P (type)
7415 && !TYPE_NEEDS_CONSTRUCTING (type)
7416 && !DECL_INITIAL (decl))
7417 cp_error ("uninitialized const `%D'", decl);
7418 }
7419
7420 /* Verify INIT (the initializer for DECL), and record the
7421 initialization in DECL_INITIAL, if appropriate. Returns a new
7422 value for INIT. */
7423
7424 static tree
7425 check_initializer (decl, init)
7426 tree decl;
7427 tree init;
7428 {
7429 tree type;
7430
7431 if (TREE_CODE (decl) == FIELD_DECL)
7432 return init;
7433
7434 type = TREE_TYPE (decl);
7435
7436 /* If `start_decl' didn't like having an initialization, ignore it now. */
7437 if (init != NULL_TREE && DECL_INITIAL (decl) == NULL_TREE)
7438 init = NULL_TREE;
7439
7440 /* Check the initializer. */
7441 if (init)
7442 {
7443 /* Things that are going to be initialized need to have complete
7444 type. */
7445 TREE_TYPE (decl) = type = complete_type (TREE_TYPE (decl));
7446
7447 if (type == error_mark_node)
7448 /* We will have already complained. */
7449 init = NULL_TREE;
7450 else if (TYPE_SIZE (type) && !TREE_CONSTANT (TYPE_SIZE (type)))
7451 {
7452 cp_error ("variable-sized object `%D' may not be initialized", decl);
7453 init = NULL_TREE;
7454 }
7455 else if (TREE_CODE (type) == ARRAY_TYPE
7456 && !TYPE_SIZE (TREE_TYPE (type)))
7457 {
7458 cp_error ("elements of array `%#D' have incomplete type", decl);
7459 init = NULL_TREE;
7460 }
7461 else if (!TYPE_SIZE (type))
7462 {
7463 cp_error ("`%D' has incomplete type", decl);
7464 TREE_TYPE (decl) = error_mark_node;
7465 init = NULL_TREE;
7466 }
7467 }
7468
7469 if (TREE_CODE (decl) == CONST_DECL)
7470 {
7471 my_friendly_assert (TREE_CODE (decl) != REFERENCE_TYPE, 148);
7472
7473 DECL_INITIAL (decl) = init;
7474
7475 /* This will keep us from needing to worry about our obstacks. */
7476 my_friendly_assert (init != NULL_TREE, 149);
7477 init = NULL_TREE;
7478 }
7479 else if (!DECL_EXTERNAL (decl) && TREE_CODE (type) == REFERENCE_TYPE)
7480 {
7481 if (TREE_STATIC (decl))
7482 make_decl_rtl (decl, NULL_PTR, toplevel_bindings_p ());
7483 grok_reference_init (decl, type, init);
7484 init = NULL_TREE;
7485 }
7486 else if (init)
7487 {
7488 if (TYPE_HAS_CONSTRUCTOR (type) || TYPE_NEEDS_CONSTRUCTING (type))
7489 {
7490 if (TREE_CODE (type) == ARRAY_TYPE)
7491 init = digest_init (type, init, (tree *) 0);
7492 else if (TREE_CODE (init) == CONSTRUCTOR
7493 && TREE_HAS_CONSTRUCTOR (init))
7494 {
7495 if (TYPE_NON_AGGREGATE_CLASS (type))
7496 {
7497 cp_error ("`%D' must be initialized by constructor, not by `{...}'",
7498 decl);
7499 init = error_mark_node;
7500 }
7501 else
7502 goto dont_use_constructor;
7503 }
7504 }
7505 else
7506 {
7507 dont_use_constructor:
7508 if (TREE_CODE (init) != TREE_VEC)
7509 init = store_init_value (decl, init);
7510 }
7511
7512 if (init)
7513 /* We must hide the initializer so that expand_decl
7514 won't try to do something it does not understand. */
7515 init = obscure_complex_init (decl, init);
7516 }
7517 else if (DECL_EXTERNAL (decl))
7518 ;
7519 else if (TREE_CODE_CLASS (TREE_CODE (type)) == 't'
7520 && (IS_AGGR_TYPE (type) || TYPE_NEEDS_CONSTRUCTING (type)))
7521 {
7522 tree core_type = strip_array_types (type);
7523
7524 if (! TYPE_NEEDS_CONSTRUCTING (core_type))
7525 {
7526 if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type))
7527 cp_error ("structure `%D' with uninitialized const members", decl);
7528 if (CLASSTYPE_REF_FIELDS_NEED_INIT (core_type))
7529 cp_error ("structure `%D' with uninitialized reference members",
7530 decl);
7531 }
7532
7533 check_for_uninitialized_const_var (decl);
7534
7535 if (TYPE_SIZE (type) != NULL_TREE
7536 && TYPE_NEEDS_CONSTRUCTING (type))
7537 init = obscure_complex_init (decl, NULL_TREE);
7538
7539 }
7540 else
7541 check_for_uninitialized_const_var (decl);
7542
7543 return init;
7544 }
7545
7546 /* If DECL is not a local variable, give it RTL. */
7547
7548 static void
7549 make_rtl_for_nonlocal_decl (decl, init, asmspec)
7550 tree decl;
7551 tree init;
7552 const char *asmspec;
7553 {
7554 int toplev;
7555 tree type;
7556
7557 type = TREE_TYPE (decl);
7558 toplev = toplevel_bindings_p ();
7559 push_obstacks_nochange ();
7560 if (TREE_STATIC (decl)
7561 && TYPE_NEEDS_DESTRUCTOR (type)
7562 && allocation_temporary_p ())
7563 end_temporary_allocation ();
7564
7565 if (TREE_CODE (decl) == VAR_DECL && DECL_VIRTUAL_P (decl))
7566 make_decl_rtl (decl, NULL_PTR, toplev);
7567 else if (TREE_CODE (decl) == VAR_DECL
7568 && TREE_READONLY (decl)
7569 && DECL_INITIAL (decl) != NULL_TREE
7570 && DECL_INITIAL (decl) != error_mark_node
7571 && ! EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl)))
7572 {
7573 DECL_INITIAL (decl) = save_expr (DECL_INITIAL (decl));
7574
7575 if (asmspec)
7576 DECL_ASSEMBLER_NAME (decl) = get_identifier (asmspec);
7577
7578 if (! toplev
7579 && TREE_STATIC (decl)
7580 && ! TREE_SIDE_EFFECTS (decl)
7581 && ! TREE_PUBLIC (decl)
7582 && ! DECL_EXTERNAL (decl)
7583 && ! TYPE_NEEDS_DESTRUCTOR (type)
7584 && DECL_MODE (decl) != BLKmode)
7585 {
7586 /* If this variable is really a constant, then fill its DECL_RTL
7587 slot with something which won't take up storage.
7588 If something later should take its address, we can always give
7589 it legitimate RTL at that time. */
7590 DECL_RTL (decl) = gen_reg_rtx (DECL_MODE (decl));
7591 store_expr (DECL_INITIAL (decl), DECL_RTL (decl), 0);
7592 TREE_ASM_WRITTEN (decl) = 1;
7593 }
7594 else if (toplev && ! TREE_PUBLIC (decl))
7595 {
7596 /* If this is a static const, change its apparent linkage
7597 if it belongs to a #pragma interface. */
7598 if (!interface_unknown)
7599 {
7600 TREE_PUBLIC (decl) = 1;
7601 DECL_EXTERNAL (decl) = interface_only;
7602 }
7603 make_decl_rtl (decl, asmspec, toplev);
7604 }
7605 else
7606 rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
7607 }
7608 else if (TREE_CODE (decl) == VAR_DECL
7609 && DECL_LANG_SPECIFIC (decl)
7610 && DECL_IN_AGGR_P (decl))
7611 {
7612 my_friendly_assert (TREE_STATIC (decl), 19990828);
7613
7614 if (init == NULL_TREE
7615 #ifdef DEFAULT_STATIC_DEFS
7616 /* If this code is dead, then users must
7617 explicitly declare static member variables
7618 outside the class def'n as well. */
7619 && TYPE_NEEDS_CONSTRUCTING (type)
7620 #endif
7621 )
7622 {
7623 DECL_EXTERNAL (decl) = 1;
7624 make_decl_rtl (decl, asmspec, 1);
7625 }
7626 else
7627 rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
7628 }
7629 else
7630 rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
7631
7632 pop_obstacks ();
7633 }
7634
7635 /* The old ARM scoping rules injected variables declared in the
7636 initialization statement of a for-statement into the surrounding
7637 scope. We support this usage, in order to be backward-compatible.
7638 DECL is a just-declared VAR_DECL; if necessary inject its
7639 declaration into the surrounding scope. */
7640
7641 void
7642 maybe_inject_for_scope_var (decl)
7643 tree decl;
7644 {
7645 if (current_binding_level->is_for_scope)
7646 {
7647 struct binding_level *outer
7648 = current_binding_level->level_chain;
7649
7650 /* Check to see if the same name is already bound at the outer
7651 level, either because it was directly declared, or because a
7652 dead for-decl got preserved. In either case, the code would
7653 not have been valid under the ARM scope rules, so clear
7654 is_for_scope for the current_binding_level.
7655
7656 Otherwise, we need to preserve the temp slot for decl to last
7657 into the outer binding level. */
7658
7659 tree outer_binding
7660 = TREE_CHAIN (IDENTIFIER_BINDING (DECL_NAME (decl)));
7661
7662 if (outer_binding && BINDING_LEVEL (outer_binding) == outer
7663 && (TREE_CODE (BINDING_VALUE (outer_binding))
7664 == VAR_DECL)
7665 && DECL_DEAD_FOR_LOCAL (BINDING_VALUE (outer_binding)))
7666 {
7667 BINDING_VALUE (outer_binding)
7668 = DECL_SHADOWED_FOR_VAR (BINDING_VALUE (outer_binding));
7669 current_binding_level->is_for_scope = 0;
7670 }
7671 else if (DECL_IN_MEMORY_P (decl))
7672 preserve_temp_slots (DECL_RTL (decl));
7673 }
7674 }
7675
7676 /* Generate code to initialized DECL (a local variable). */
7677
7678 void
7679 initialize_local_var (decl, init, flags)
7680 tree decl;
7681 tree init;
7682 int flags;
7683 {
7684 tree type;
7685 tree cleanup;
7686
7687 type = complete_type (TREE_TYPE (decl));
7688
7689 cleanup = build_cleanup_on_safe_obstack (decl);
7690
7691 if (DECL_SIZE (decl) == NULL_TREE && !TREE_STATIC (decl))
7692 {
7693 /* If we used it already as memory, it must stay in memory. */
7694 DECL_INITIAL (decl) = NULL_TREE;
7695 TREE_ADDRESSABLE (decl) = TREE_USED (decl);
7696 }
7697
7698 if (DECL_RTL (decl))
7699 /* Only a RESULT_DECL should have non-NULL RTL when arriving here.
7700 All other local variables are assigned RTL in this function. */
7701 my_friendly_assert (TREE_CODE (decl) == RESULT_DECL, 19990828);
7702 else
7703 /* Create RTL for this variable. */
7704 expand_decl (decl);
7705
7706 expand_start_target_temps ();
7707
7708 if (DECL_SIZE (decl) && type != error_mark_node)
7709 {
7710 int already_used;
7711
7712 /* Compute and store the initial value. */
7713 already_used = TREE_USED (decl) || TREE_USED (type);
7714
7715 if (init || TYPE_NEEDS_CONSTRUCTING (type))
7716 {
7717 emit_line_note (DECL_SOURCE_FILE (decl),
7718 DECL_SOURCE_LINE (decl));
7719 /* We call push_momentary here so that when
7720 finish_expr_stmt clears the momentary obstack it
7721 doesn't destory any momentary expressions we may
7722 have lying around. Although cp_finish_decl is
7723 usually called at the end of a declaration
7724 statement, it may also be called for a temporary
7725 object in the middle of an expression. */
7726 push_momentary ();
7727 finish_expr_stmt (build_aggr_init (decl, init, flags));
7728 pop_momentary ();
7729 }
7730 else
7731 expand_decl_init (decl);
7732
7733 /* Set this to 0 so we can tell whether an aggregate which was
7734 initialized was ever used. Don't do this if it has a
7735 destructor, so we don't complain about the 'resource
7736 allocation is initialization' idiom. Now set
7737 attribute((unused)) on types so decls of that type will be
7738 marked used. (see TREE_USED, above.) */
7739 if (TYPE_NEEDS_CONSTRUCTING (type)
7740 && ! already_used
7741 && cleanup == NULL_TREE
7742 && DECL_NAME (decl))
7743 TREE_USED (decl) = 0;
7744 else if (already_used)
7745 TREE_USED (decl) = 1;
7746 }
7747
7748 /* Cleanup any temporaries needed for the initial value. */
7749 expand_end_target_temps ();
7750
7751 /* Record the cleanup required for this declaration. */
7752 if (DECL_SIZE (decl)
7753 && type != error_mark_node
7754 && cleanup
7755 && !expand_decl_cleanup (decl, cleanup))
7756 cp_error ("parser lost in parsing declaration of `%D'", decl);
7757 }
7758
7759 /* Finish processing of a declaration;
7760 install its line number and initial value.
7761 If the length of an array type is not known before,
7762 it must be determined now, from the initial value, or it is an error.
7763
7764 Call `pop_obstacks' iff NEED_POP is nonzero.
7765
7766 For C++, `cp_finish_decl' must be fairly evasive: it must keep initializers
7767 for aggregates that have constructors alive on the permanent obstack,
7768 so that the global initializing functions can be written at the end.
7769
7770 INIT0 holds the value of an initializer that should be allowed to escape
7771 the normal rules.
7772
7773 FLAGS is LOOKUP_ONLYCONVERTING is the = init syntax was used, else 0
7774 if the (init) syntax was used.
7775
7776 For functions that take default parameters, DECL points to its
7777 "maximal" instantiation. `cp_finish_decl' must then also declared its
7778 subsequently lower and lower forms of instantiation, checking for
7779 ambiguity as it goes. This can be sped up later. */
7780
7781 void
7782 cp_finish_decl (decl, init, asmspec_tree, need_pop, flags)
7783 tree decl, init;
7784 tree asmspec_tree;
7785 int need_pop;
7786 int flags;
7787 {
7788 register tree type;
7789 tree ttype = NULL_TREE;
7790 int temporary = allocation_temporary_p ();
7791 const char *asmspec = NULL;
7792 int was_readonly = 0;
7793
7794 /* If this is 0, then we did not change obstacks. */
7795 if (! decl)
7796 {
7797 if (init)
7798 error ("assignment (not initialization) in declaration");
7799 return;
7800 }
7801
7802 /* If a name was specified, get the string. */
7803 if (asmspec_tree)
7804 asmspec = TREE_STRING_POINTER (asmspec_tree);
7805
7806 if (init && TREE_CODE (init) == NAMESPACE_DECL)
7807 {
7808 cp_error ("Cannot initialize `%D' to namespace `%D'",
7809 decl, init);
7810 init = NULL_TREE;
7811 }
7812
7813 if (current_class_type
7814 && DECL_REAL_CONTEXT (decl) == current_class_type
7815 && TYPE_BEING_DEFINED (current_class_type)
7816 && (DECL_INITIAL (decl) || init))
7817 DECL_DEFINED_IN_CLASS_P (decl) = 1;
7818
7819 if (TREE_CODE (decl) == VAR_DECL
7820 && DECL_CONTEXT (decl)
7821 && TREE_CODE (DECL_CONTEXT (decl)) == NAMESPACE_DECL
7822 && DECL_CONTEXT (decl) != current_namespace
7823 && init)
7824 {
7825 /* Leave the namespace of the object. */
7826 pop_decl_namespace ();
7827 }
7828
7829 type = TREE_TYPE (decl);
7830
7831 if (type == error_mark_node)
7832 {
7833 if (toplevel_bindings_p () && temporary)
7834 end_temporary_allocation ();
7835
7836 return;
7837 }
7838
7839 if (TYPE_HAS_MUTABLE_P (type))
7840 TREE_READONLY (decl) = 0;
7841
7842 if (processing_template_decl)
7843 {
7844 if (init && DECL_INITIAL (decl))
7845 DECL_INITIAL (decl) = init;
7846 goto finish_end0;
7847 }
7848
7849 /* Parameters are handled by store_parm_decls, not cp_finish_decl. */
7850 my_friendly_assert (TREE_CODE (decl) != PARM_DECL, 19990828);
7851
7852 /* Take care of TYPE_DECLs up front. */
7853 if (TREE_CODE (decl) == TYPE_DECL)
7854 {
7855 if (init && DECL_INITIAL (decl))
7856 {
7857 /* typedef foo = bar; store the type of bar as the type of foo. */
7858 TREE_TYPE (decl) = type = TREE_TYPE (init);
7859 DECL_INITIAL (decl) = init = NULL_TREE;
7860 }
7861 if (type != error_mark_node
7862 && IS_AGGR_TYPE (type) && DECL_NAME (decl))
7863 {
7864 if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
7865 cp_warning ("shadowing previous type declaration of `%#D'", decl);
7866 set_identifier_type_value (DECL_NAME (decl), type);
7867 CLASSTYPE_GOT_SEMICOLON (type) = 1;
7868 }
7869 GNU_xref_decl (current_function_decl, decl);
7870
7871 /* If we have installed this as the canonical typedef for this
7872 type, and that type has not been defined yet, delay emitting
7873 the debug information for it, as we will emit it later. */
7874 if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
7875 && TYPE_SIZE (TREE_TYPE (decl)) == NULL_TREE)
7876 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
7877
7878 rest_of_decl_compilation (decl, NULL_PTR,
7879 DECL_CONTEXT (decl) == NULL_TREE, at_eof);
7880 goto finish_end;
7881 }
7882
7883 if (TREE_CODE (decl) != FUNCTION_DECL)
7884 ttype = target_type (type);
7885
7886 if (! DECL_EXTERNAL (decl) && TREE_READONLY (decl)
7887 && TYPE_NEEDS_CONSTRUCTING (type))
7888 {
7889 /* Currently, GNU C++ puts constants in text space, making them
7890 impossible to initialize. In the future, one would hope for
7891 an operating system which understood the difference between
7892 initialization and the running of a program. */
7893 was_readonly = 1;
7894 TREE_READONLY (decl) = 0;
7895 }
7896
7897 if (TREE_CODE (decl) == FIELD_DECL && asmspec)
7898 {
7899 /* This must override the asm specifier which was placed by
7900 grokclassfn. Lay this out fresh. */
7901 DECL_RTL (TREE_TYPE (decl)) = NULL_RTX;
7902 DECL_ASSEMBLER_NAME (decl) = get_identifier (asmspec);
7903 make_decl_rtl (decl, asmspec, 0);
7904 }
7905
7906 /* Deduce size of array from initialization, if not already known. */
7907 maybe_deduce_size_from_array_init (decl, init);
7908 init = check_initializer (decl, init);
7909
7910 GNU_xref_decl (current_function_decl, decl);
7911
7912 /* For top-level declaration, the initial value was read in
7913 the temporary obstack. MAXINDEX, rtl, etc. to be made below
7914 must go in the permanent obstack; but don't discard the
7915 temporary data yet. */
7916
7917 if (toplevel_bindings_p () && temporary)
7918 end_temporary_allocation ();
7919
7920 if (TREE_CODE (decl) == VAR_DECL)
7921 init = layout_var_decl (decl, init);
7922
7923 /* Output the assembler code and/or RTL code for variables and functions,
7924 unless the type is an undefined structure or union.
7925 If not, it will get done when the type is completed. */
7926 if (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == FUNCTION_DECL
7927 || TREE_CODE (decl) == RESULT_DECL)
7928 {
7929 /* ??? FIXME: What about nested classes? */
7930 int toplev = toplevel_bindings_p ();
7931
7932 if (TREE_CODE (decl) == VAR_DECL)
7933 maybe_commonize_var (decl);
7934
7935 make_rtl_for_nonlocal_decl (decl, init, asmspec);
7936
7937 if (TREE_CODE (type) == FUNCTION_TYPE
7938 || TREE_CODE (type) == METHOD_TYPE)
7939 abstract_virtuals_error (decl,
7940 strip_array_types (TREE_TYPE (type)));
7941 else
7942 abstract_virtuals_error (decl, strip_array_types (type));
7943
7944 if (TREE_CODE (decl) == FUNCTION_DECL)
7945 ;
7946 else if (DECL_EXTERNAL (decl)
7947 && ! (DECL_LANG_SPECIFIC (decl)
7948 && DECL_NOT_REALLY_EXTERN (decl)))
7949 {
7950 if (init)
7951 DECL_INITIAL (decl) = init;
7952 }
7953 else if (TREE_STATIC (decl) && type != error_mark_node)
7954 {
7955 /* Cleanups for static variables are handled by `finish_file'. */
7956 if (TYPE_NEEDS_CONSTRUCTING (type) || init != NULL_TREE
7957 || TYPE_NEEDS_DESTRUCTOR (type))
7958 expand_static_init (decl, init);
7959 }
7960 else if (! toplev)
7961 {
7962 /* This is a local declaration. */
7963 maybe_inject_for_scope_var (decl);
7964 /* Initialize the local variable. But, if we're building a
7965 statement-tree, we'll do the initialization when we
7966 expand the tree. */
7967 if (!building_stmt_tree ())
7968 initialize_local_var (decl, init, flags);
7969 else if (init || DECL_INITIAL (decl) == error_mark_node)
7970 DECL_INITIAL (decl) = init;
7971 }
7972 finish_end0:
7973
7974 /* Undo call to `pushclass' that was done in `start_decl'
7975 due to initialization of qualified member variable.
7976 I.e., Foo::x = 10; */
7977 {
7978 tree context = DECL_REAL_CONTEXT (decl);
7979 if (context
7980 && TREE_CODE_CLASS (TREE_CODE (context)) == 't'
7981 && (TREE_CODE (decl) == VAR_DECL
7982 /* We also have a pushclass done that we need to undo here
7983 if we're at top level and declare a method. */
7984 || TREE_CODE (decl) == FUNCTION_DECL)
7985 /* If size hasn't been set, we're still defining it,
7986 and therefore inside the class body; don't pop
7987 the binding level.. */
7988 && TYPE_SIZE (context) != NULL_TREE
7989 && context == current_class_type)
7990 pop_nested_class ();
7991 }
7992 }
7993
7994 finish_end:
7995
7996 /* If requested, warn about definitions of large data objects. */
7997
7998 if (warn_larger_than
7999 && ! processing_template_decl
8000 && (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == PARM_DECL)
8001 && !DECL_EXTERNAL (decl))
8002 {
8003 register tree decl_size = DECL_SIZE (decl);
8004
8005 if (decl_size && TREE_CODE (decl_size) == INTEGER_CST)
8006 {
8007 unsigned units = TREE_INT_CST_LOW (decl_size) / BITS_PER_UNIT;
8008
8009 if (units > larger_than_size)
8010 warning_with_decl (decl, "size of `%s' is %u bytes", units);
8011 }
8012 }
8013
8014 if (need_pop)
8015 /* Resume permanent allocation, if not within a function. The
8016 corresponding push_obstacks_nochange is in start_decl,
8017 start_method, groktypename, and in grokfield. */
8018 pop_obstacks ();
8019
8020 if (was_readonly)
8021 TREE_READONLY (decl) = 1;
8022 }
8023
8024 /* This is here for a midend callback from c-common.c */
8025
8026 void
8027 finish_decl (decl, init, asmspec_tree)
8028 tree decl, init;
8029 tree asmspec_tree;
8030 {
8031 cp_finish_decl (decl, init, asmspec_tree, 1, 0);
8032 }
8033
8034 void
8035 expand_static_init (decl, init)
8036 tree decl;
8037 tree init;
8038 {
8039 tree oldstatic = value_member (decl, static_aggregates);
8040
8041 if (oldstatic)
8042 {
8043 if (TREE_PURPOSE (oldstatic) && init != NULL_TREE)
8044 cp_error ("multiple initializations given for `%D'", decl);
8045 }
8046 else if (! toplevel_bindings_p ())
8047 {
8048 /* Emit code to perform this initialization but once. */
8049 tree temp;
8050 tree if_stmt;
8051 tree assignment;
8052 tree temp_init;
8053
8054 /* Remember this information until end of file. */
8055 push_obstacks (&permanent_obstack, &permanent_obstack);
8056
8057 /* Emit code to perform this initialization but once. This code
8058 looks like:
8059
8060 static int temp = 0;
8061 if (!temp) {
8062 // Do initialization.
8063 temp = 1;
8064 // Register variable for destruction at end of program.
8065 }
8066
8067 Note that the `temp' variable is only set to 1 *after* the
8068 initialization is complete. This ensures that an exception,
8069 thrown during the construction, will cause the variable to
8070 reinitialized when we pass through this code again, as per:
8071
8072 [stmt.dcl]
8073
8074 If the initialization exits by throwing an exception, the
8075 initialization is not complete, so it will be tried again
8076 the next time control enters the declaration.
8077
8078 In theory, this process should be thread-safe, too; multiple
8079 threads should not be able to initialize the variable more
8080 than once. We don't yet attempt to ensure thread-safety. */
8081 temp = get_temp_name (integer_type_node, 1);
8082 rest_of_decl_compilation (temp, NULL_PTR, 0, 0);
8083
8084 /* Begin the conditional initialization. */
8085 if_stmt = begin_if_stmt ();
8086 finish_if_stmt_cond (build_binary_op (EQ_EXPR, temp,
8087 integer_zero_node),
8088 if_stmt);
8089
8090 /* Do the initialization itself. */
8091 if (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))
8092 || (init && TREE_CODE (init) == TREE_LIST))
8093 assignment = build_aggr_init (decl, init, 0);
8094 else if (init)
8095 /* The initialization we're doing here is just a bitwise
8096 copy. */
8097 assignment = build (INIT_EXPR, TREE_TYPE (decl), decl, init);
8098 else
8099 assignment = NULL_TREE;
8100
8101 /* Once the assignment is complete, set TEMP to 1. Since the
8102 construction of the static object is complete at this point,
8103 we want to make sure TEMP is set to 1 even if a temporary
8104 constructed during the initialization throws an exception
8105 when it is destroyed. So, we combine the initialization and
8106 the assignment to TEMP into a single expression, ensuring
8107 that when we call finish_expr_stmt the cleanups will not be
8108 run until after TEMP is set to 1. */
8109 temp_init = build_modify_expr (temp, NOP_EXPR, integer_one_node);
8110 if (assignment)
8111 {
8112 assignment = tree_cons (NULL_TREE, assignment,
8113 build_tree_list (NULL_TREE,
8114 temp_init));
8115 assignment = build_compound_expr (assignment);
8116 }
8117 else
8118 assignment = temp_init;
8119 finish_expr_stmt (assignment);
8120
8121 /* Use atexit to register a function for destroying this static
8122 variable. */
8123 if (TYPE_NEEDS_DESTRUCTOR (TREE_TYPE (decl)))
8124 {
8125 tree cleanup, fcall;
8126 static tree Atexit = 0;
8127 int saved_flag_access_control;
8128
8129 if (Atexit == 0)
8130 {
8131 tree atexit_fndecl, PFV, pfvlist;
8132
8133 ggc_add_tree_root (&Atexit, 1);
8134
8135 /* Remember this information until end of file. */
8136 push_obstacks (&permanent_obstack, &permanent_obstack);
8137 PFV = build_pointer_type (build_function_type
8138 (void_type_node, void_list_node));
8139
8140 pfvlist = tree_cons (NULL_TREE, PFV, void_list_node);
8141
8142 push_lang_context (lang_name_c);
8143 /* Note that we do not call pushdecl for this function;
8144 there's no reason that this declaration should be
8145 accessible to anyone. */
8146 atexit_fndecl
8147 = define_function ("atexit",
8148 build_function_type (void_type_node,
8149 pfvlist),
8150 NOT_BUILT_IN,
8151 /*pfn=*/0,
8152 NULL_PTR);
8153 mark_used (atexit_fndecl);
8154 Atexit = default_conversion (atexit_fndecl);
8155 pop_lang_context ();
8156 pop_obstacks ();
8157 }
8158
8159 /* Call build_cleanup before we enter the anonymous function
8160 so that any access checks will be done relative to the
8161 current scope, rather than the scope of the anonymous
8162 function. */
8163 build_cleanup (decl);
8164
8165 /* Now start the function. */
8166 cleanup = start_anon_func ();
8167
8168 /* Now, recompute the cleanup. It may contain SAVE_EXPRs
8169 that refer to the original function, rather than the
8170 anonymous one. That will make the back-end think that
8171 nested functions are in use, which causes confusion. */
8172 saved_flag_access_control = flag_access_control;
8173 flag_access_control = 0;
8174 fcall = build_cleanup (decl);
8175 flag_access_control = saved_flag_access_control;
8176
8177 /* Finish off the function. */
8178 expand_expr_stmt (fcall);
8179 end_anon_func ();
8180
8181 /* Call atexit with the cleanup function. */
8182 mark_addressable (cleanup);
8183 cleanup = build_unary_op (ADDR_EXPR, cleanup, 0);
8184 fcall = build_function_call (Atexit,
8185 tree_cons (NULL_TREE,
8186 cleanup,
8187 NULL_TREE));
8188 finish_expr_stmt (fcall);
8189 }
8190
8191 finish_then_clause (if_stmt);
8192 finish_if_stmt ();
8193
8194 /* Resume old (possibly temporary) allocation. */
8195 pop_obstacks ();
8196 }
8197 else
8198 {
8199 /* This code takes into account memory allocation policy of
8200 `start_decl'. Namely, if TYPE_NEEDS_CONSTRUCTING does not
8201 hold for this object, then we must make permanent the storage
8202 currently in the temporary obstack. */
8203 if (!TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl)))
8204 preserve_initializer ();
8205 static_aggregates = tree_cons (init, decl, static_aggregates);
8206 }
8207 }
8208
8209 /* Finish the declaration of a catch-parameter. */
8210
8211 void
8212 start_handler_parms (declspecs, declarator)
8213 tree declspecs;
8214 tree declarator;
8215 {
8216 tree decl;
8217 if (declspecs)
8218 {
8219 decl = grokdeclarator (declarator, declspecs, CATCHPARM,
8220 1, NULL_TREE);
8221 if (decl == NULL_TREE)
8222 error ("invalid catch parameter");
8223 }
8224 else
8225 decl = NULL_TREE;
8226 expand_start_catch_block (decl);
8227 }
8228
8229 \f
8230 /* Make TYPE a complete type based on INITIAL_VALUE.
8231 Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
8232 2 if there was no information (in which case assume 0 if DO_DEFAULT). */
8233
8234 int
8235 complete_array_type (type, initial_value, do_default)
8236 tree type, initial_value;
8237 int do_default;
8238 {
8239 register tree maxindex = NULL_TREE;
8240 int value = 0;
8241
8242 /* Allocate on the same obstack as TYPE. */
8243 push_obstacks (TYPE_OBSTACK (type), TYPE_OBSTACK (type));
8244
8245 if (initial_value)
8246 {
8247 /* Note MAXINDEX is really the maximum index,
8248 one less than the size. */
8249 if (TREE_CODE (initial_value) == STRING_CST)
8250 {
8251 int eltsize
8252 = int_size_in_bytes (TREE_TYPE (TREE_TYPE (initial_value)));
8253 maxindex = build_int_2 ((TREE_STRING_LENGTH (initial_value)
8254 / eltsize) - 1, 0);
8255 }
8256 else if (TREE_CODE (initial_value) == CONSTRUCTOR)
8257 {
8258 tree elts = CONSTRUCTOR_ELTS (initial_value);
8259 maxindex = size_binop (MINUS_EXPR, integer_zero_node, size_one_node);
8260 for (; elts; elts = TREE_CHAIN (elts))
8261 {
8262 if (TREE_PURPOSE (elts))
8263 maxindex = TREE_PURPOSE (elts);
8264 else
8265 maxindex = size_binop (PLUS_EXPR, maxindex, size_one_node);
8266 }
8267 maxindex = copy_node (maxindex);
8268 }
8269 else
8270 {
8271 /* Make an error message unless that happened already. */
8272 if (initial_value != error_mark_node)
8273 value = 1;
8274 else
8275 initial_value = NULL_TREE;
8276
8277 /* Prevent further error messages. */
8278 maxindex = build_int_2 (0, 0);
8279 }
8280 }
8281
8282 if (!maxindex)
8283 {
8284 if (do_default)
8285 maxindex = build_int_2 (0, 0);
8286 value = 2;
8287 }
8288
8289 if (maxindex)
8290 {
8291 tree itype;
8292 tree domain;
8293
8294 domain = build_index_type (maxindex);
8295 TYPE_DOMAIN (type) = domain;
8296
8297 if (! TREE_TYPE (maxindex))
8298 TREE_TYPE (maxindex) = domain;
8299 if (initial_value)
8300 itype = TREE_TYPE (initial_value);
8301 else
8302 itype = NULL;
8303 if (itype && !TYPE_DOMAIN (itype))
8304 TYPE_DOMAIN (itype) = domain;
8305 /* The type of the main variant should never be used for arrays
8306 of different sizes. It should only ever be completed with the
8307 size of the array. */
8308 if (! TYPE_DOMAIN (TYPE_MAIN_VARIANT (type)))
8309 TYPE_DOMAIN (TYPE_MAIN_VARIANT (type)) = domain;
8310 }
8311
8312 pop_obstacks();
8313
8314 /* Lay out the type now that we can get the real answer. */
8315
8316 layout_type (type);
8317
8318 return value;
8319 }
8320 \f
8321 /* Return zero if something is declared to be a member of type
8322 CTYPE when in the context of CUR_TYPE. STRING is the error
8323 message to print in that case. Otherwise, quietly return 1. */
8324
8325 static int
8326 member_function_or_else (ctype, cur_type, string)
8327 tree ctype, cur_type;
8328 const char *string;
8329 {
8330 if (ctype && ctype != cur_type)
8331 {
8332 error (string, TYPE_NAME_STRING (ctype));
8333 return 0;
8334 }
8335 return 1;
8336 }
8337 \f
8338 /* Subroutine of `grokdeclarator'. */
8339
8340 /* Generate errors possibly applicable for a given set of specifiers.
8341 This is for ARM $7.1.2. */
8342
8343 static void
8344 bad_specifiers (object, type, virtualp, quals, inlinep, friendp, raises)
8345 tree object;
8346 const char *type;
8347 int virtualp, quals, friendp, raises, inlinep;
8348 {
8349 if (virtualp)
8350 cp_error ("`%D' declared as a `virtual' %s", object, type);
8351 if (inlinep)
8352 cp_error ("`%D' declared as an `inline' %s", object, type);
8353 if (quals)
8354 cp_error ("`const' and `volatile' function specifiers on `%D' invalid in %s declaration",
8355 object, type);
8356 if (friendp)
8357 cp_error_at ("`%D' declared as a friend", object);
8358 if (raises)
8359 cp_error_at ("`%D' declared with an exception specification", object);
8360 }
8361
8362 /* CTYPE is class type, or null if non-class.
8363 TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
8364 or METHOD_TYPE.
8365 DECLARATOR is the function's name.
8366 VIRTUALP is truthvalue of whether the function is virtual or not.
8367 FLAGS are to be passed through to `grokclassfn'.
8368 QUALS are qualifiers indicating whether the function is `const'
8369 or `volatile'.
8370 RAISES is a list of exceptions that this function can raise.
8371 CHECK is 1 if we must find this method in CTYPE, 0 if we should
8372 not look, and -1 if we should not call `grokclassfn' at all.
8373
8374 Returns `NULL_TREE' if something goes wrong, after issuing
8375 applicable error messages. */
8376
8377 static tree
8378 grokfndecl (ctype, type, declarator, orig_declarator, virtualp, flags, quals,
8379 raises, check, friendp, publicp, inlinep, funcdef_flag,
8380 template_count, in_namespace)
8381 tree ctype, type;
8382 tree declarator;
8383 tree orig_declarator;
8384 int virtualp;
8385 enum overload_flags flags;
8386 tree quals, raises;
8387 int check, friendp, publicp, inlinep, funcdef_flag, template_count;
8388 tree in_namespace;
8389 {
8390 tree cname, decl;
8391 int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
8392 int has_default_arg = 0;
8393 tree t;
8394
8395 if (ctype)
8396 cname = TREE_CODE (TYPE_NAME (ctype)) == TYPE_DECL
8397 ? TYPE_IDENTIFIER (ctype) : TYPE_NAME (ctype);
8398 else
8399 cname = NULL_TREE;
8400
8401 if (raises)
8402 {
8403 type = build_exception_variant (type, raises);
8404 }
8405
8406 decl = build_lang_decl (FUNCTION_DECL, declarator, type);
8407 /* Propagate volatile out from type to decl. */
8408 if (TYPE_VOLATILE (type))
8409 TREE_THIS_VOLATILE (decl) = 1;
8410
8411 /* If this decl has namespace scope, set that up. */
8412 if (in_namespace)
8413 set_decl_namespace (decl, in_namespace, friendp);
8414 else if (publicp && ! ctype)
8415 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
8416
8417 /* `main' and builtins have implicit 'C' linkage. */
8418 if ((MAIN_NAME_P (declarator)
8419 || (IDENTIFIER_LENGTH (declarator) > 10
8420 && IDENTIFIER_POINTER (declarator)[0] == '_'
8421 && IDENTIFIER_POINTER (declarator)[1] == '_'
8422 && strncmp (IDENTIFIER_POINTER (declarator)+2, "builtin_", 8) == 0))
8423 && current_lang_name == lang_name_cplusplus
8424 && ctype == NULL_TREE
8425 /* NULL_TREE means global namespace. */
8426 && DECL_CONTEXT (decl) == NULL_TREE)
8427 DECL_LANGUAGE (decl) = lang_c;
8428
8429 /* Should probably propagate const out from type to decl I bet (mrs). */
8430 if (staticp)
8431 {
8432 DECL_STATIC_FUNCTION_P (decl) = 1;
8433 DECL_CONTEXT (decl) = ctype;
8434 }
8435
8436 if (ctype)
8437 DECL_CLASS_CONTEXT (decl) = ctype;
8438
8439 if (ctype == NULL_TREE && DECL_MAIN_P (decl))
8440 {
8441 if (processing_template_decl)
8442 error ("cannot declare `main' to be a template");
8443 if (inlinep)
8444 error ("cannot declare `main' to be inline");
8445 else if (! publicp)
8446 error ("cannot declare `main' to be static");
8447 inlinep = 0;
8448 publicp = 1;
8449 }
8450
8451 /* Members of anonymous types and local classes have no linkage; make
8452 them internal. */
8453 if (ctype && (ANON_AGGRNAME_P (TYPE_IDENTIFIER (ctype))
8454 || hack_decl_function_context (TYPE_MAIN_DECL (ctype))))
8455 publicp = 0;
8456
8457 if (publicp)
8458 {
8459 /* [basic.link]: A name with no linkage (notably, the name of a class
8460 or enumeration declared in a local scope) shall not be used to
8461 declare an entity with linkage.
8462
8463 Only check this for public decls for now. */
8464 t = no_linkage_check (TREE_TYPE (decl));
8465 if (t)
8466 {
8467 if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
8468 {
8469 if (DECL_LANGUAGE (decl) == lang_c)
8470 /* Allow this; it's pretty common in C. */;
8471 else
8472 cp_pedwarn ("non-local function `%#D' uses anonymous type",
8473 decl);
8474 }
8475 else
8476 cp_pedwarn ("non-local function `%#D' uses local type `%T'",
8477 decl, t);
8478 }
8479 }
8480
8481 TREE_PUBLIC (decl) = publicp;
8482 if (! publicp)
8483 {
8484 DECL_INTERFACE_KNOWN (decl) = 1;
8485 DECL_NOT_REALLY_EXTERN (decl) = 1;
8486 }
8487
8488 if (inlinep)
8489 DECL_THIS_INLINE (decl) = DECL_INLINE (decl) = 1;
8490
8491 DECL_EXTERNAL (decl) = 1;
8492 if (quals != NULL_TREE && TREE_CODE (type) == FUNCTION_TYPE)
8493 {
8494 cp_error ("%smember function `%D' cannot have `%T' method qualifier",
8495 (ctype ? "static " : "non-"), decl, TREE_VALUE (quals));
8496 quals = NULL_TREE;
8497 }
8498
8499 if (IDENTIFIER_OPNAME_P (DECL_NAME (decl)))
8500 grok_op_properties (decl, virtualp, check < 0);
8501
8502 if (ctype && hack_decl_function_context (decl))
8503 DECL_NO_STATIC_CHAIN (decl) = 1;
8504
8505 for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
8506 if (TREE_PURPOSE (t)
8507 && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
8508 {
8509 has_default_arg = 1;
8510 break;
8511 }
8512
8513 if (friendp
8514 && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
8515 {
8516 if (funcdef_flag)
8517 cp_error
8518 ("defining explicit specialization `%D' in friend declaration",
8519 orig_declarator);
8520 else
8521 {
8522 if (PROCESSING_REAL_TEMPLATE_DECL_P ())
8523 {
8524 /* Something like `template <class T> friend void f<T>()'. */
8525 cp_error ("template-id `%D' in declaration of primary template",
8526 orig_declarator);
8527 return NULL_TREE;
8528 }
8529
8530
8531 /* A friend declaration of the form friend void f<>(). Record
8532 the information in the TEMPLATE_ID_EXPR. */
8533 SET_DECL_IMPLICIT_INSTANTIATION (decl);
8534 DECL_TEMPLATE_INFO (decl)
8535 = tree_cons (TREE_OPERAND (orig_declarator, 0),
8536 TREE_OPERAND (orig_declarator, 1),
8537 NULL_TREE);
8538
8539 if (has_default_arg)
8540 {
8541 cp_error ("default arguments are not allowed in declaration of friend template specialization `%D'",
8542 decl);
8543 return NULL_TREE;
8544 }
8545
8546 if (inlinep)
8547 {
8548 cp_error ("`inline' is not allowed in declaration of friend template specialization `%D'",
8549 decl);
8550 return NULL_TREE;
8551 }
8552 }
8553 }
8554
8555 if (has_default_arg)
8556 add_defarg_fn (decl);
8557
8558 /* Plain overloading: will not be grok'd by grokclassfn. */
8559 if (! ctype && ! processing_template_decl
8560 && DECL_LANGUAGE (decl) != lang_c
8561 && (! DECL_USE_TEMPLATE (decl) || name_mangling_version < 1))
8562 set_mangled_name_for_decl (decl);
8563
8564 if (funcdef_flag)
8565 /* Make the init_value nonzero so pushdecl knows this is not
8566 tentative. error_mark_node is replaced later with the BLOCK. */
8567 DECL_INITIAL (decl) = error_mark_node;
8568
8569 /* Caller will do the rest of this. */
8570 if (check < 0)
8571 return decl;
8572
8573 if (check && funcdef_flag)
8574 DECL_INITIAL (decl) = error_mark_node;
8575
8576 if (flags == NO_SPECIAL && ctype && constructor_name (cname) == declarator)
8577 {
8578 tree tmp;
8579 /* Just handle constructors here. We could do this
8580 inside the following if stmt, but I think
8581 that the code is more legible by breaking this
8582 case out. See comments below for what each of
8583 the following calls is supposed to do. */
8584 DECL_CONSTRUCTOR_P (decl) = 1;
8585
8586 grokclassfn (ctype, decl, flags, quals);
8587
8588 decl = check_explicit_specialization (orig_declarator, decl,
8589 template_count,
8590 2 * (funcdef_flag != 0) +
8591 4 * (friendp != 0));
8592 if (decl == error_mark_node)
8593 return NULL_TREE;
8594
8595 if ((! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
8596 && check)
8597 {
8598 tmp = check_classfn (ctype, decl);
8599
8600 if (tmp && TREE_CODE (tmp) == TEMPLATE_DECL)
8601 tmp = DECL_TEMPLATE_RESULT(tmp);
8602
8603 if (tmp && DECL_ARTIFICIAL (tmp))
8604 cp_error ("definition of implicitly-declared `%D'", tmp);
8605 if (tmp && duplicate_decls (decl, tmp))
8606 return tmp;
8607 }
8608 if (! grok_ctor_properties (ctype, decl))
8609 return NULL_TREE;
8610 }
8611 else
8612 {
8613 tree tmp;
8614
8615 /* Function gets the ugly name, field gets the nice one.
8616 This call may change the type of the function (because
8617 of default parameters)! */
8618 if (ctype != NULL_TREE)
8619 grokclassfn (ctype, decl, flags, quals);
8620
8621 decl = check_explicit_specialization (orig_declarator, decl,
8622 template_count,
8623 2 * (funcdef_flag != 0) +
8624 4 * (friendp != 0));
8625 if (decl == error_mark_node)
8626 return NULL_TREE;
8627
8628 if (ctype != NULL_TREE
8629 && (! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
8630 && check)
8631 {
8632 tmp = check_classfn (ctype, decl);
8633
8634 if (tmp && TREE_CODE (tmp) == TEMPLATE_DECL)
8635 tmp = DECL_TEMPLATE_RESULT (tmp);
8636
8637 if (tmp && DECL_STATIC_FUNCTION_P (tmp)
8638 && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
8639 {
8640 /* Remove the `this' parm added by grokclassfn.
8641 XXX Isn't this done in start_function, too? */
8642 revert_static_member_fn (&decl, NULL, NULL);
8643 last_function_parms = TREE_CHAIN (last_function_parms);
8644 }
8645 if (tmp && DECL_ARTIFICIAL (tmp))
8646 cp_error ("definition of implicitly-declared `%D'", tmp);
8647 if (tmp)
8648 {
8649 /* Attempt to merge the declarations. This can fail, in
8650 the case of some illegal specialization declarations. */
8651 if (!duplicate_decls (decl, tmp))
8652 cp_error ("no `%#D' member function declared in class `%T'",
8653 decl, ctype);
8654 return tmp;
8655 }
8656 }
8657
8658 if (ctype == NULL_TREE || check)
8659 return decl;
8660
8661 if (virtualp)
8662 {
8663 DECL_VIRTUAL_P (decl) = 1;
8664 if (DECL_VINDEX (decl) == NULL_TREE)
8665 DECL_VINDEX (decl) = error_mark_node;
8666 IDENTIFIER_VIRTUAL_P (DECL_NAME (decl)) = 1;
8667 }
8668 }
8669 return decl;
8670 }
8671
8672 static tree
8673 grokvardecl (type, declarator, specbits_in, initialized, constp, in_namespace)
8674 tree type;
8675 tree declarator;
8676 RID_BIT_TYPE *specbits_in;
8677 int initialized;
8678 int constp;
8679 tree in_namespace;
8680 {
8681 tree decl;
8682 RID_BIT_TYPE specbits;
8683
8684 specbits = *specbits_in;
8685
8686 if (TREE_CODE (type) == OFFSET_TYPE)
8687 {
8688 /* If you declare a static member so that it
8689 can be initialized, the code will reach here. */
8690 tree basetype = TYPE_OFFSET_BASETYPE (type);
8691 type = TREE_TYPE (type);
8692 decl = build_lang_decl (VAR_DECL, declarator, type);
8693 DECL_CONTEXT (decl) = basetype;
8694 DECL_CLASS_CONTEXT (decl) = basetype;
8695 DECL_ASSEMBLER_NAME (decl) = build_static_name (basetype, declarator);
8696 }
8697 else
8698 {
8699 tree context;
8700
8701 if (in_namespace)
8702 context = in_namespace;
8703 else if (namespace_bindings_p () || RIDBIT_SETP (RID_EXTERN, specbits))
8704 context = current_namespace;
8705 else
8706 context = NULL_TREE;
8707
8708 if (processing_template_decl)
8709 {
8710 /* If we're in a template, we need DECL_LANG_SPECIFIC so that
8711 we can call push_template_decl. */
8712 push_permanent_obstack ();
8713 decl = build_lang_decl (VAR_DECL, declarator, type);
8714 pop_obstacks ();
8715 }
8716 else
8717 decl = build_decl (VAR_DECL, declarator, type);
8718
8719 if (context)
8720 set_decl_namespace (decl, context, 0);
8721
8722 context = DECL_CONTEXT (decl);
8723 if (declarator && context && current_lang_name != lang_name_c)
8724 DECL_ASSEMBLER_NAME (decl) = build_static_name (context, declarator);
8725 }
8726
8727 if (in_namespace)
8728 set_decl_namespace (decl, in_namespace, 0);
8729
8730 if (RIDBIT_SETP (RID_EXTERN, specbits))
8731 {
8732 DECL_THIS_EXTERN (decl) = 1;
8733 DECL_EXTERNAL (decl) = !initialized;
8734 }
8735
8736 /* In class context, static means one per class,
8737 public access, and static storage. */
8738 if (DECL_CLASS_SCOPE_P (decl))
8739 {
8740 TREE_PUBLIC (decl) = 1;
8741 TREE_STATIC (decl) = 1;
8742 DECL_EXTERNAL (decl) = 0;
8743 }
8744 /* At top level, either `static' or no s.c. makes a definition
8745 (perhaps tentative), and absence of `static' makes it public. */
8746 else if (toplevel_bindings_p ())
8747 {
8748 TREE_PUBLIC (decl) = (RIDBIT_NOTSETP (RID_STATIC, specbits)
8749 && (DECL_THIS_EXTERN (decl) || ! constp));
8750 TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
8751 }
8752 /* Not at top level, only `static' makes a static definition. */
8753 else
8754 {
8755 TREE_STATIC (decl) = !! RIDBIT_SETP (RID_STATIC, specbits);
8756 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
8757 }
8758
8759 if (TREE_PUBLIC (decl))
8760 {
8761 /* [basic.link]: A name with no linkage (notably, the name of a class
8762 or enumeration declared in a local scope) shall not be used to
8763 declare an entity with linkage.
8764
8765 Only check this for public decls for now. */
8766 tree t = no_linkage_check (TREE_TYPE (decl));
8767 if (t)
8768 {
8769 if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
8770 /* Ignore for now; `enum { foo } e' is pretty common. */;
8771 else
8772 cp_pedwarn ("non-local variable `%#D' uses local type `%T'",
8773 decl, t);
8774 }
8775 }
8776
8777 return decl;
8778 }
8779
8780 /* Create and return a canonical pointer to member function type, for
8781 TYPE, which is a POINTER_TYPE to a METHOD_TYPE. */
8782
8783 tree
8784 build_ptrmemfunc_type (type)
8785 tree type;
8786 {
8787 tree fields[4];
8788 tree t;
8789 tree u;
8790 tree unqualified_variant = NULL_TREE;
8791
8792 /* If a canonical type already exists for this type, use it. We use
8793 this method instead of type_hash_canon, because it only does a
8794 simple equality check on the list of field members. */
8795
8796 if ((t = TYPE_GET_PTRMEMFUNC_TYPE (type)))
8797 return t;
8798
8799 /* Make sure that we always have the unqualified pointer-to-member
8800 type first. */
8801 if (CP_TYPE_QUALS (type) != TYPE_UNQUALIFIED)
8802 unqualified_variant
8803 = build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type));
8804
8805 push_obstacks (TYPE_OBSTACK (type), TYPE_OBSTACK (type));
8806
8807 u = make_lang_type (UNION_TYPE);
8808 SET_IS_AGGR_TYPE (u, 0);
8809 fields[0] = build_lang_decl (FIELD_DECL, pfn_identifier, type);
8810 fields[1] = build_lang_decl (FIELD_DECL, delta2_identifier,
8811 delta_type_node);
8812 finish_builtin_type (u, "__ptrmemfunc_type", fields, 1, ptr_type_node);
8813 TYPE_NAME (u) = NULL_TREE;
8814
8815 t = make_lang_type (RECORD_TYPE);
8816
8817 /* Let the front-end know this is a pointer to member function... */
8818 TYPE_PTRMEMFUNC_FLAG (t) = 1;
8819 /* ... and not really an aggregate. */
8820 SET_IS_AGGR_TYPE (t, 0);
8821
8822 fields[0] = build_lang_decl (FIELD_DECL, delta_identifier,
8823 delta_type_node);
8824 fields[1] = build_lang_decl (FIELD_DECL, index_identifier,
8825 delta_type_node);
8826 fields[2] = build_lang_decl (FIELD_DECL, pfn_or_delta2_identifier, u);
8827 finish_builtin_type (t, "__ptrmemfunc_type", fields, 2, ptr_type_node);
8828
8829 pop_obstacks ();
8830
8831 /* Zap out the name so that the back-end will give us the debugging
8832 information for this anonymous RECORD_TYPE. */
8833 TYPE_NAME (t) = NULL_TREE;
8834
8835 /* If this is not the unqualified form of this pointer-to-member
8836 type, set the TYPE_MAIN_VARIANT for this type to be the
8837 unqualified type. Since they are actually RECORD_TYPEs that are
8838 not variants of each other, we must do this manually. */
8839 if (CP_TYPE_QUALS (type) != TYPE_UNQUALIFIED)
8840 {
8841 t = build_qualified_type (t, CP_TYPE_QUALS (type));
8842 TYPE_MAIN_VARIANT (t) = unqualified_variant;
8843 TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (unqualified_variant);
8844 TYPE_NEXT_VARIANT (unqualified_variant) = t;
8845 }
8846
8847 /* Cache this pointer-to-member type so that we can find it again
8848 later. */
8849 TYPE_SET_PTRMEMFUNC_TYPE (type, t);
8850
8851 /* Seems to be wanted. */
8852 CLASSTYPE_GOT_SEMICOLON (t) = 1;
8853
8854 return t;
8855 }
8856
8857 /* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
8858 Check to see that the definition is valid. Issue appropriate error
8859 messages. Return 1 if the definition is particularly bad, or 0
8860 otherwise. */
8861
8862 int
8863 check_static_variable_definition (decl, type)
8864 tree decl;
8865 tree type;
8866 {
8867 /* Motion 10 at San Diego: If a static const integral data member is
8868 initialized with an integral constant expression, the initializer
8869 may appear either in the declaration (within the class), or in
8870 the definition, but not both. If it appears in the class, the
8871 member is a member constant. The file-scope definition is always
8872 required. */
8873 if (CLASS_TYPE_P (type) || TREE_CODE (type) == REFERENCE_TYPE)
8874 {
8875 cp_error ("in-class initialization of static data member of non-integral type `%T'",
8876 type);
8877 /* If we just return the declaration, crashes will sometimes
8878 occur. We therefore return void_type_node, as if this was a
8879 friend declaration, to cause callers to completely ignore
8880 this declaration. */
8881 return 1;
8882 }
8883 else if (!CP_TYPE_CONST_P (type))
8884 cp_error ("ANSI C++ forbids in-class initialization of non-const static member `%D'",
8885 decl);
8886 else if (pedantic && !INTEGRAL_TYPE_P (type))
8887 cp_pedwarn ("ANSI C++ forbids initialization of member constant `%D' of non-integral type `%T'", decl, type);
8888
8889 return 0;
8890 }
8891
8892 /* Given declspecs and a declarator,
8893 determine the name and type of the object declared
8894 and construct a ..._DECL node for it.
8895 (In one case we can return a ..._TYPE node instead.
8896 For invalid input we sometimes return 0.)
8897
8898 DECLSPECS is a chain of tree_list nodes whose value fields
8899 are the storage classes and type specifiers.
8900
8901 DECL_CONTEXT says which syntactic context this declaration is in:
8902 NORMAL for most contexts. Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
8903 FUNCDEF for a function definition. Like NORMAL but a few different
8904 error messages in each case. Return value may be zero meaning
8905 this definition is too screwy to try to parse.
8906 MEMFUNCDEF for a function definition. Like FUNCDEF but prepares to
8907 handle member functions (which have FIELD context).
8908 Return value may be zero meaning this definition is too screwy to
8909 try to parse.
8910 PARM for a parameter declaration (either within a function prototype
8911 or before a function body). Make a PARM_DECL, or return void_type_node.
8912 CATCHPARM for a parameter declaration before a catch clause.
8913 TYPENAME if for a typename (in a cast or sizeof).
8914 Don't make a DECL node; just return the ..._TYPE node.
8915 FIELD for a struct or union field; make a FIELD_DECL.
8916 BITFIELD for a field with specified width.
8917 INITIALIZED is 1 if the decl has an initializer.
8918
8919 ATTRLIST is a TREE_LIST node with prefix attributes in TREE_VALUE and
8920 normal attributes in TREE_PURPOSE, or NULL_TREE.
8921
8922 In the TYPENAME case, DECLARATOR is really an absolute declarator.
8923 It may also be so in the PARM case, for a prototype where the
8924 argument type is specified but not the name.
8925
8926 This function is where the complicated C meanings of `static'
8927 and `extern' are interpreted.
8928
8929 For C++, if there is any monkey business to do, the function which
8930 calls this one must do it, i.e., prepending instance variables,
8931 renaming overloaded function names, etc.
8932
8933 Note that for this C++, it is an error to define a method within a class
8934 which does not belong to that class.
8935
8936 Except in the case where SCOPE_REFs are implicitly known (such as
8937 methods within a class being redundantly qualified),
8938 declarations which involve SCOPE_REFs are returned as SCOPE_REFs
8939 (class_name::decl_name). The caller must also deal with this.
8940
8941 If a constructor or destructor is seen, and the context is FIELD,
8942 then the type gains the attribute TREE_HAS_x. If such a declaration
8943 is erroneous, NULL_TREE is returned.
8944
8945 QUALS is used only for FUNCDEF and MEMFUNCDEF cases. For a member
8946 function, these are the qualifiers to give to the `this' pointer.
8947
8948 May return void_type_node if the declarator turned out to be a friend.
8949 See grokfield for details. */
8950
8951 enum return_types { return_normal, return_ctor, return_dtor, return_conversion };
8952
8953 tree
8954 grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
8955 tree declspecs;
8956 tree declarator;
8957 enum decl_context decl_context;
8958 int initialized;
8959 tree attrlist;
8960 {
8961 RID_BIT_TYPE specbits;
8962 int nclasses = 0;
8963 tree spec;
8964 tree type = NULL_TREE;
8965 int longlong = 0;
8966 int constp;
8967 int restrictp;
8968 int volatilep;
8969 int type_quals;
8970 int virtualp, explicitp, friendp, inlinep, staticp;
8971 int explicit_int = 0;
8972 int explicit_char = 0;
8973 int defaulted_int = 0;
8974 tree typedef_decl = NULL_TREE;
8975 const char *name;
8976 tree typedef_type = NULL_TREE;
8977 int funcdef_flag = 0;
8978 enum tree_code innermost_code = ERROR_MARK;
8979 int bitfield = 0;
8980 #if 0
8981 /* See the code below that used this. */
8982 tree decl_machine_attr = NULL_TREE;
8983 #endif
8984 /* Set this to error_mark_node for FIELD_DECLs we could not handle properly.
8985 All FIELD_DECLs we build here have `init' put into their DECL_INITIAL. */
8986 tree init = NULL_TREE;
8987
8988 /* Keep track of what sort of function is being processed
8989 so that we can warn about default return values, or explicit
8990 return values which do not match prescribed defaults. */
8991 enum return_types return_type = return_normal;
8992
8993 tree dname = NULL_TREE;
8994 tree ctype = current_class_type;
8995 tree ctor_return_type = NULL_TREE;
8996 enum overload_flags flags = NO_SPECIAL;
8997 tree quals = NULL_TREE;
8998 tree raises = NULL_TREE;
8999 int template_count = 0;
9000 tree in_namespace = NULL_TREE;
9001 tree inner_attrs;
9002 int ignore_attrs;
9003
9004 RIDBIT_RESET_ALL (specbits);
9005 if (decl_context == FUNCDEF)
9006 funcdef_flag = 1, decl_context = NORMAL;
9007 else if (decl_context == MEMFUNCDEF)
9008 funcdef_flag = -1, decl_context = FIELD;
9009 else if (decl_context == BITFIELD)
9010 bitfield = 1, decl_context = FIELD;
9011
9012 /* Look inside a declarator for the name being declared
9013 and get it as a string, for an error message. */
9014 {
9015 tree *next = &declarator;
9016 register tree decl;
9017 name = NULL;
9018
9019 while (next && *next)
9020 {
9021 decl = *next;
9022 switch (TREE_CODE (decl))
9023 {
9024 case TREE_LIST:
9025 /* For attributes. */
9026 next = &TREE_VALUE (decl);
9027 break;
9028
9029 case COND_EXPR:
9030 ctype = NULL_TREE;
9031 next = &TREE_OPERAND (decl, 0);
9032 break;
9033
9034 case BIT_NOT_EXPR: /* For C++ destructors! */
9035 {
9036 tree name = TREE_OPERAND (decl, 0);
9037 tree rename = NULL_TREE;
9038
9039 my_friendly_assert (flags == NO_SPECIAL, 152);
9040 flags = DTOR_FLAG;
9041 return_type = return_dtor;
9042 if (TREE_CODE (name) == TYPE_DECL)
9043 TREE_OPERAND (decl, 0) = name = constructor_name (name);
9044 my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 153);
9045 if (ctype == NULL_TREE)
9046 {
9047 if (current_class_type == NULL_TREE)
9048 {
9049 error ("destructors must be member functions");
9050 flags = NO_SPECIAL;
9051 }
9052 else
9053 {
9054 tree t = constructor_name (current_class_name);
9055 if (t != name)
9056 rename = t;
9057 }
9058 }
9059 else
9060 {
9061 tree t = constructor_name (ctype);
9062 if (t != name)
9063 rename = t;
9064 }
9065
9066 if (rename)
9067 {
9068 cp_error ("destructor `%T' must match class name `%T'",
9069 name, rename);
9070 TREE_OPERAND (decl, 0) = rename;
9071 }
9072 next = &name;
9073 }
9074 break;
9075
9076 case ADDR_EXPR: /* C++ reference declaration */
9077 /* Fall through. */
9078 case ARRAY_REF:
9079 case INDIRECT_REF:
9080 ctype = NULL_TREE;
9081 innermost_code = TREE_CODE (decl);
9082 next = &TREE_OPERAND (decl, 0);
9083 break;
9084
9085 case CALL_EXPR:
9086 if (parmlist_is_exprlist (CALL_DECLARATOR_PARMS (decl)))
9087 {
9088 /* This is actually a variable declaration using
9089 constructor syntax. We need to call start_decl and
9090 cp_finish_decl so we can get the variable
9091 initialized... */
9092
9093 tree attributes, prefix_attributes;
9094
9095 *next = TREE_OPERAND (decl, 0);
9096 init = CALL_DECLARATOR_PARMS (decl);
9097
9098 if (attrlist)
9099 {
9100 attributes = TREE_PURPOSE (attrlist);
9101 prefix_attributes = TREE_VALUE (attrlist);
9102 }
9103 else
9104 {
9105 attributes = NULL_TREE;
9106 prefix_attributes = NULL_TREE;
9107 }
9108
9109 decl = start_decl (declarator, declspecs, 1,
9110 attributes, prefix_attributes);
9111 if (decl)
9112 {
9113 /* Look for __unused__ attribute */
9114 if (TREE_USED (TREE_TYPE (decl)))
9115 TREE_USED (decl) = 1;
9116 finish_decl (decl, init, NULL_TREE);
9117 }
9118 else
9119 cp_error ("invalid declarator");
9120 return 0;
9121 }
9122 innermost_code = TREE_CODE (decl);
9123 if (decl_context == FIELD && ctype == NULL_TREE)
9124 ctype = current_class_type;
9125 if (ctype
9126 && TREE_OPERAND (decl, 0)
9127 && (TREE_CODE (TREE_OPERAND (decl, 0)) == TYPE_DECL
9128 && ((DECL_NAME (TREE_OPERAND (decl, 0))
9129 == constructor_name_full (ctype))
9130 || (DECL_NAME (TREE_OPERAND (decl, 0))
9131 == constructor_name (ctype)))))
9132 TREE_OPERAND (decl, 0) = constructor_name (ctype);
9133 next = &TREE_OPERAND (decl, 0);
9134 decl = *next;
9135 if (ctype != NULL_TREE
9136 && decl != NULL_TREE && flags != DTOR_FLAG
9137 && decl == constructor_name (ctype))
9138 {
9139 return_type = return_ctor;
9140 ctor_return_type = ctype;
9141 }
9142 ctype = NULL_TREE;
9143 break;
9144
9145 case TEMPLATE_ID_EXPR:
9146 {
9147 tree fns = TREE_OPERAND (decl, 0);
9148
9149 if (TREE_CODE (fns) == LOOKUP_EXPR)
9150 fns = TREE_OPERAND (fns, 0);
9151
9152 dname = fns;
9153 if (TREE_CODE (dname) == COMPONENT_REF)
9154 dname = TREE_OPERAND (dname, 1);
9155 if (TREE_CODE (dname) != IDENTIFIER_NODE)
9156 {
9157 my_friendly_assert (is_overloaded_fn (dname),
9158 19990331);
9159 dname = DECL_NAME (get_first_fn (dname));
9160 }
9161 }
9162 /* Fall through. */
9163
9164 case IDENTIFIER_NODE:
9165 if (TREE_CODE (decl) == IDENTIFIER_NODE)
9166 dname = decl;
9167
9168 next = 0;
9169
9170 if (is_rid (dname))
9171 {
9172 cp_error ("declarator-id missing; using reserved word `%D'",
9173 dname);
9174 name = IDENTIFIER_POINTER (dname);
9175 }
9176 if (! IDENTIFIER_OPNAME_P (dname)
9177 /* GNU/Linux headers use '__op'. Arrgh. */
9178 || (IDENTIFIER_TYPENAME_P (dname) && ! TREE_TYPE (dname)))
9179 name = IDENTIFIER_POINTER (dname);
9180 else
9181 {
9182 if (IDENTIFIER_TYPENAME_P (dname))
9183 {
9184 my_friendly_assert (flags == NO_SPECIAL, 154);
9185 flags = TYPENAME_FLAG;
9186 ctor_return_type = TREE_TYPE (dname);
9187 return_type = return_conversion;
9188 }
9189 name = operator_name_string (dname);
9190 }
9191 break;
9192
9193 /* C++ extension */
9194 case SCOPE_REF:
9195 {
9196 /* Perform error checking, and decide on a ctype. */
9197 tree cname = TREE_OPERAND (decl, 0);
9198 if (cname == NULL_TREE)
9199 ctype = NULL_TREE;
9200 else if (TREE_CODE (cname) == NAMESPACE_DECL)
9201 {
9202 ctype = NULL_TREE;
9203 in_namespace = TREE_OPERAND (decl, 0);
9204 TREE_OPERAND (decl, 0) = NULL_TREE;
9205 }
9206 else if (! is_aggr_type (cname, 1))
9207 TREE_OPERAND (decl, 0) = NULL_TREE;
9208 /* Must test TREE_OPERAND (decl, 1), in case user gives
9209 us `typedef (class::memfunc)(int); memfunc *memfuncptr;' */
9210 else if (TREE_OPERAND (decl, 1)
9211 && TREE_CODE (TREE_OPERAND (decl, 1)) == INDIRECT_REF)
9212 ctype = cname;
9213 else if (TREE_CODE (cname) == TEMPLATE_TYPE_PARM
9214 || TREE_CODE (cname) == TEMPLATE_TEMPLATE_PARM)
9215 {
9216 cp_error ("`%T::%D' is not a valid declarator", cname,
9217 TREE_OPERAND (decl, 1));
9218 cp_error (" perhaps you want `typename %T::%D' to make it a type",
9219 cname, TREE_OPERAND (decl, 1));
9220 return void_type_node;
9221 }
9222 else if (ctype == NULL_TREE)
9223 ctype = cname;
9224 else if (TREE_COMPLEXITY (decl) == current_class_depth)
9225 TREE_OPERAND (decl, 0) = ctype;
9226 else
9227 {
9228 if (! UNIQUELY_DERIVED_FROM_P (cname, ctype))
9229 {
9230 cp_error ("type `%T' is not derived from type `%T'",
9231 cname, ctype);
9232 TREE_OPERAND (decl, 0) = NULL_TREE;
9233 }
9234 else
9235 ctype = cname;
9236 }
9237
9238 if (ctype && TREE_CODE (TREE_OPERAND (decl, 1)) == TYPE_DECL
9239 && ((DECL_NAME (TREE_OPERAND (decl, 1))
9240 == constructor_name_full (ctype))
9241 || (DECL_NAME (TREE_OPERAND (decl, 1))
9242 == constructor_name (ctype))))
9243 TREE_OPERAND (decl, 1) = constructor_name (ctype);
9244 next = &TREE_OPERAND (decl, 1);
9245 decl = *next;
9246 if (ctype)
9247 {
9248 if (TREE_CODE (decl) == IDENTIFIER_NODE
9249 && constructor_name (ctype) == decl)
9250 {
9251 return_type = return_ctor;
9252 ctor_return_type = ctype;
9253 }
9254 else if (TREE_CODE (decl) == BIT_NOT_EXPR
9255 && TREE_CODE (TREE_OPERAND (decl, 0)) == IDENTIFIER_NODE
9256 && (constructor_name (ctype) == TREE_OPERAND (decl, 0)
9257 || constructor_name_full (ctype) == TREE_OPERAND (decl, 0)))
9258 {
9259 return_type = return_dtor;
9260 ctor_return_type = ctype;
9261 flags = DTOR_FLAG;
9262 TREE_OPERAND (decl, 0) = constructor_name (ctype);
9263 next = &TREE_OPERAND (decl, 0);
9264 }
9265 }
9266 }
9267 break;
9268
9269 case ERROR_MARK:
9270 next = 0;
9271 break;
9272
9273 case TYPE_DECL:
9274 /* Parse error puts this typespec where
9275 a declarator should go. */
9276 cp_error ("`%T' specified as declarator-id", DECL_NAME (decl));
9277 if (TREE_TYPE (decl) == current_class_type)
9278 cp_error (" perhaps you want `%T' for a constructor",
9279 current_class_name);
9280 dname = DECL_NAME (decl);
9281 name = IDENTIFIER_POINTER (dname);
9282
9283 /* Avoid giving two errors for this. */
9284 IDENTIFIER_CLASS_VALUE (dname) = NULL_TREE;
9285
9286 declspecs = temp_tree_cons (NULL_TREE, integer_type_node,
9287 declspecs);
9288 *next = dname;
9289 next = 0;
9290 break;
9291
9292 default:
9293 cp_compiler_error ("`%D' as declarator", decl);
9294 return 0; /* We used to do a 155 abort here. */
9295 }
9296 }
9297 if (name == NULL)
9298 name = "type name";
9299 }
9300
9301 /* A function definition's declarator must have the form of
9302 a function declarator. */
9303
9304 if (funcdef_flag && innermost_code != CALL_EXPR)
9305 return 0;
9306
9307 if (((dname && IDENTIFIER_OPNAME_P (dname)) || flags == TYPENAME_FLAG)
9308 && innermost_code != CALL_EXPR
9309 && ! (ctype && declspecs == NULL_TREE))
9310 {
9311 cp_error ("declaration of `%D' as non-function", dname);
9312 return void_type_node;
9313 }
9314
9315 /* Anything declared one level down from the top level
9316 must be one of the parameters of a function
9317 (because the body is at least two levels down). */
9318
9319 /* This heuristic cannot be applied to C++ nodes! Fixed, however,
9320 by not allowing C++ class definitions to specify their parameters
9321 with xdecls (must be spec.d in the parmlist).
9322
9323 Since we now wait to push a class scope until we are sure that
9324 we are in a legitimate method context, we must set oldcname
9325 explicitly (since current_class_name is not yet alive).
9326
9327 We also want to avoid calling this a PARM if it is in a namespace. */
9328
9329 if (decl_context == NORMAL && !toplevel_bindings_p ())
9330 {
9331 struct binding_level *b = current_binding_level;
9332 current_binding_level = b->level_chain;
9333 if (current_binding_level != 0 && toplevel_bindings_p ())
9334 decl_context = PARM;
9335 current_binding_level = b;
9336 }
9337
9338 /* Look through the decl specs and record which ones appear.
9339 Some typespecs are defined as built-in typenames.
9340 Others, the ones that are modifiers of other types,
9341 are represented by bits in SPECBITS: set the bits for
9342 the modifiers that appear. Storage class keywords are also in SPECBITS.
9343
9344 If there is a typedef name or a type, store the type in TYPE.
9345 This includes builtin typedefs such as `int'.
9346
9347 Set EXPLICIT_INT if the type is `int' or `char' and did not
9348 come from a user typedef.
9349
9350 Set LONGLONG if `long' is mentioned twice.
9351
9352 For C++, constructors and destructors have their own fast treatment. */
9353
9354 for (spec = declspecs; spec; spec = TREE_CHAIN (spec))
9355 {
9356 register int i;
9357 register tree id;
9358
9359 /* Certain parse errors slip through. For example,
9360 `int class;' is not caught by the parser. Try
9361 weakly to recover here. */
9362 if (TREE_CODE (spec) != TREE_LIST)
9363 return 0;
9364
9365 id = TREE_VALUE (spec);
9366
9367 if (TREE_CODE (id) == IDENTIFIER_NODE)
9368 {
9369 if (id == ridpointers[(int) RID_INT]
9370 || id == ridpointers[(int) RID_CHAR]
9371 || id == ridpointers[(int) RID_BOOL]
9372 || id == ridpointers[(int) RID_WCHAR])
9373 {
9374 if (type)
9375 {
9376 if (id == ridpointers[(int) RID_BOOL])
9377 error ("`bool' is now a keyword");
9378 else
9379 cp_error ("extraneous `%T' ignored", id);
9380 }
9381 else
9382 {
9383 if (id == ridpointers[(int) RID_INT])
9384 explicit_int = 1;
9385 else if (id == ridpointers[(int) RID_CHAR])
9386 explicit_char = 1;
9387 type = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (id));
9388 }
9389 goto found;
9390 }
9391 /* C++ aggregate types. */
9392 if (IDENTIFIER_HAS_TYPE_VALUE (id))
9393 {
9394 if (type)
9395 cp_error ("multiple declarations `%T' and `%T'", type, id);
9396 else
9397 type = IDENTIFIER_TYPE_VALUE (id);
9398 goto found;
9399 }
9400
9401 for (i = (int) RID_FIRST_MODIFIER; i <= (int) RID_LAST_MODIFIER; i++)
9402 {
9403 if (ridpointers[i] == id)
9404 {
9405 if (i == (int) RID_LONG && RIDBIT_SETP (i, specbits))
9406 {
9407 if (pedantic && ! in_system_header && warn_long_long)
9408 pedwarn ("ANSI C++ does not support `long long'");
9409 if (longlong)
9410 error ("`long long long' is too long for GCC");
9411 else
9412 longlong = 1;
9413 }
9414 else if (RIDBIT_SETP (i, specbits))
9415 pedwarn ("duplicate `%s'", IDENTIFIER_POINTER (id));
9416 RIDBIT_SET (i, specbits);
9417 goto found;
9418 }
9419 }
9420 }
9421 /* C++ aggregate types. */
9422 else if (TREE_CODE (id) == TYPE_DECL || TREE_CODE (id) == TEMPLATE_DECL)
9423 {
9424 if (type)
9425 cp_error ("multiple declarations `%T' and `%T'", type,
9426 TREE_TYPE (id));
9427 else
9428 {
9429 type = TREE_TYPE (id);
9430 TREE_VALUE (spec) = type;
9431 }
9432 goto found;
9433 }
9434 if (type)
9435 error ("two or more data types in declaration of `%s'", name);
9436 else if (TREE_CODE (id) == IDENTIFIER_NODE)
9437 {
9438 register tree t = lookup_name (id, 1);
9439 if (!t || TREE_CODE (t) != TYPE_DECL)
9440 error ("`%s' fails to be a typedef or built in type",
9441 IDENTIFIER_POINTER (id));
9442 else
9443 {
9444 type = TREE_TYPE (t);
9445 #if 0
9446 /* See the code below that used this. */
9447 decl_machine_attr = DECL_MACHINE_ATTRIBUTES (id);
9448 #endif
9449 typedef_decl = t;
9450 }
9451 }
9452 else if (id != error_mark_node)
9453 /* Can't change CLASS nodes into RECORD nodes here! */
9454 type = id;
9455
9456 found: ;
9457 }
9458
9459 typedef_type = type;
9460
9461 /* No type at all: default to `int', and set DEFAULTED_INT
9462 because it was not a user-defined typedef. */
9463
9464 if (type == NULL_TREE
9465 && (RIDBIT_SETP (RID_SIGNED, specbits)
9466 || RIDBIT_SETP (RID_UNSIGNED, specbits)
9467 || RIDBIT_SETP (RID_LONG, specbits)
9468 || RIDBIT_SETP (RID_SHORT, specbits)))
9469 {
9470 /* These imply 'int'. */
9471 type = integer_type_node;
9472 defaulted_int = 1;
9473 }
9474
9475 if (type == NULL_TREE)
9476 {
9477 explicit_int = -1;
9478 if (return_type == return_dtor)
9479 type = void_type_node;
9480 else if (return_type == return_ctor)
9481 type = build_pointer_type (ctor_return_type);
9482 else if (return_type == return_conversion)
9483 type = ctor_return_type;
9484 else
9485 {
9486 /* We handle `main' specially here, because 'main () { }' is so
9487 common. With no options, it is allowed. With -Wreturn-type,
9488 it is a warning. It is only an error with -pedantic-errors. */
9489 int is_main = (funcdef_flag
9490 && MAIN_NAME_P (dname)
9491 && ctype == NULL_TREE
9492 && in_namespace == NULL_TREE
9493 && current_namespace == global_namespace);
9494
9495 if (in_system_header || flag_ms_extensions)
9496 /* Allow it, sigh. */;
9497 else if (pedantic || ! is_main)
9498 cp_pedwarn ("ANSI C++ forbids declaration `%D' with no type",
9499 dname);
9500 else if (warn_return_type)
9501 cp_warning ("ANSI C++ forbids declaration `%D' with no type",
9502 dname);
9503
9504 type = integer_type_node;
9505 }
9506 }
9507 else if (return_type == return_dtor)
9508 {
9509 error ("return type specification for destructor invalid");
9510 type = void_type_node;
9511 }
9512 else if (return_type == return_ctor)
9513 {
9514 error ("return type specification for constructor invalid");
9515 type = build_pointer_type (ctor_return_type);
9516 }
9517 else if (return_type == return_conversion)
9518 {
9519 if (!same_type_p (type, ctor_return_type))
9520 cp_error ("operator `%T' declared to return `%T'",
9521 ctor_return_type, type);
9522 else
9523 cp_pedwarn ("return type specified for `operator %T'",
9524 ctor_return_type);
9525
9526 type = ctor_return_type;
9527 }
9528
9529 ctype = NULL_TREE;
9530
9531 /* Now process the modifiers that were specified
9532 and check for invalid combinations. */
9533
9534 /* Long double is a special combination. */
9535
9536 if (RIDBIT_SETP (RID_LONG, specbits)
9537 && TYPE_MAIN_VARIANT (type) == double_type_node)
9538 {
9539 RIDBIT_RESET (RID_LONG, specbits);
9540 type = build_qualified_type (long_double_type_node,
9541 CP_TYPE_QUALS (type));
9542 }
9543
9544 /* Check all other uses of type modifiers. */
9545
9546 if (RIDBIT_SETP (RID_UNSIGNED, specbits)
9547 || RIDBIT_SETP (RID_SIGNED, specbits)
9548 || RIDBIT_SETP (RID_LONG, specbits)
9549 || RIDBIT_SETP (RID_SHORT, specbits))
9550 {
9551 int ok = 0;
9552
9553 if (TREE_CODE (type) == REAL_TYPE)
9554 error ("short, signed or unsigned invalid for `%s'", name);
9555 else if (TREE_CODE (type) != INTEGER_TYPE)
9556 error ("long, short, signed or unsigned invalid for `%s'", name);
9557 else if (RIDBIT_SETP (RID_LONG, specbits)
9558 && RIDBIT_SETP (RID_SHORT, specbits))
9559 error ("long and short specified together for `%s'", name);
9560 else if ((RIDBIT_SETP (RID_LONG, specbits)
9561 || RIDBIT_SETP (RID_SHORT, specbits))
9562 && explicit_char)
9563 error ("long or short specified with char for `%s'", name);
9564 else if ((RIDBIT_SETP (RID_LONG, specbits)
9565 || RIDBIT_SETP (RID_SHORT, specbits))
9566 && TREE_CODE (type) == REAL_TYPE)
9567 error ("long or short specified with floating type for `%s'", name);
9568 else if (RIDBIT_SETP (RID_SIGNED, specbits)
9569 && RIDBIT_SETP (RID_UNSIGNED, specbits))
9570 error ("signed and unsigned given together for `%s'", name);
9571 else
9572 {
9573 ok = 1;
9574 if (!explicit_int && !defaulted_int && !explicit_char && pedantic)
9575 {
9576 pedwarn ("long, short, signed or unsigned used invalidly for `%s'",
9577 name);
9578 if (flag_pedantic_errors)
9579 ok = 0;
9580 }
9581 }
9582
9583 /* Discard the type modifiers if they are invalid. */
9584 if (! ok)
9585 {
9586 RIDBIT_RESET (RID_UNSIGNED, specbits);
9587 RIDBIT_RESET (RID_SIGNED, specbits);
9588 RIDBIT_RESET (RID_LONG, specbits);
9589 RIDBIT_RESET (RID_SHORT, specbits);
9590 longlong = 0;
9591 }
9592 }
9593
9594 if (RIDBIT_SETP (RID_COMPLEX, specbits)
9595 && TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
9596 {
9597 error ("complex invalid for `%s'", name);
9598 RIDBIT_RESET (RID_COMPLEX, specbits);
9599 }
9600
9601 /* Decide whether an integer type is signed or not.
9602 Optionally treat bitfields as signed by default. */
9603 if (RIDBIT_SETP (RID_UNSIGNED, specbits)
9604 /* [class.bit]
9605
9606 It is implementation-defined whether a plain (neither
9607 explicitly signed or unsigned) char, short, int, or long
9608 bit-field is signed or unsigned.
9609
9610 Naturally, we extend this to long long as well. Note that
9611 this does not include wchar_t. */
9612 || (bitfield && !flag_signed_bitfields
9613 && RIDBIT_NOTSETP (RID_SIGNED, specbits)
9614 /* A typedef for plain `int' without `signed' can be
9615 controlled just like plain `int', but a typedef for
9616 `signed int' cannot be so controlled. */
9617 && !(typedef_decl
9618 && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
9619 && (TREE_CODE (type) == INTEGER_TYPE
9620 || TREE_CODE (type) == CHAR_TYPE)
9621 && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
9622 {
9623 if (longlong)
9624 type = long_long_unsigned_type_node;
9625 else if (RIDBIT_SETP (RID_LONG, specbits))
9626 type = long_unsigned_type_node;
9627 else if (RIDBIT_SETP (RID_SHORT, specbits))
9628 type = short_unsigned_type_node;
9629 else if (type == char_type_node)
9630 type = unsigned_char_type_node;
9631 else if (typedef_decl)
9632 type = unsigned_type (type);
9633 else
9634 type = unsigned_type_node;
9635 }
9636 else if (RIDBIT_SETP (RID_SIGNED, specbits)
9637 && type == char_type_node)
9638 type = signed_char_type_node;
9639 else if (longlong)
9640 type = long_long_integer_type_node;
9641 else if (RIDBIT_SETP (RID_LONG, specbits))
9642 type = long_integer_type_node;
9643 else if (RIDBIT_SETP (RID_SHORT, specbits))
9644 type = short_integer_type_node;
9645
9646 if (RIDBIT_SETP (RID_COMPLEX, specbits))
9647 {
9648 /* If we just have "complex", it is equivalent to
9649 "complex double", but if any modifiers at all are specified it is
9650 the complex form of TYPE. E.g, "complex short" is
9651 "complex short int". */
9652
9653 if (defaulted_int && ! longlong
9654 && ! (RIDBIT_SETP (RID_LONG, specbits)
9655 || RIDBIT_SETP (RID_SHORT, specbits)
9656 || RIDBIT_SETP (RID_SIGNED, specbits)
9657 || RIDBIT_SETP (RID_UNSIGNED, specbits)))
9658 type = complex_double_type_node;
9659 else if (type == integer_type_node)
9660 type = complex_integer_type_node;
9661 else if (type == float_type_node)
9662 type = complex_float_type_node;
9663 else if (type == double_type_node)
9664 type = complex_double_type_node;
9665 else if (type == long_double_type_node)
9666 type = complex_long_double_type_node;
9667 else
9668 type = build_complex_type (type);
9669 }
9670
9671 if (return_type == return_conversion
9672 && (RIDBIT_SETP (RID_CONST, specbits)
9673 || RIDBIT_SETP (RID_VOLATILE, specbits)
9674 || RIDBIT_SETP (RID_RESTRICT, specbits)))
9675 cp_error ("qualifiers are not allowed on declaration of `operator %T'",
9676 ctor_return_type);
9677
9678 /* Set CONSTP if this declaration is `const', whether by
9679 explicit specification or via a typedef.
9680 Likewise for VOLATILEP. */
9681
9682 constp = !! RIDBIT_SETP (RID_CONST, specbits) + CP_TYPE_CONST_P (type);
9683 restrictp =
9684 !! RIDBIT_SETP (RID_RESTRICT, specbits) + CP_TYPE_RESTRICT_P (type);
9685 volatilep =
9686 !! RIDBIT_SETP (RID_VOLATILE, specbits) + CP_TYPE_VOLATILE_P (type);
9687 type_quals = ((constp ? TYPE_QUAL_CONST : 0)
9688 | (restrictp ? TYPE_QUAL_RESTRICT : 0)
9689 | (volatilep ? TYPE_QUAL_VOLATILE : 0));
9690 type = cp_build_qualified_type (type, type_quals);
9691 staticp = 0;
9692 inlinep = !! RIDBIT_SETP (RID_INLINE, specbits);
9693 virtualp = RIDBIT_SETP (RID_VIRTUAL, specbits);
9694 RIDBIT_RESET (RID_VIRTUAL, specbits);
9695 explicitp = RIDBIT_SETP (RID_EXPLICIT, specbits) != 0;
9696 RIDBIT_RESET (RID_EXPLICIT, specbits);
9697
9698 if (RIDBIT_SETP (RID_STATIC, specbits))
9699 staticp = 1 + (decl_context == FIELD);
9700
9701 if (virtualp && staticp == 2)
9702 {
9703 cp_error ("member `%D' cannot be declared both virtual and static",
9704 dname);
9705 staticp = 0;
9706 }
9707 friendp = RIDBIT_SETP (RID_FRIEND, specbits);
9708 RIDBIT_RESET (RID_FRIEND, specbits);
9709
9710 /* $7.1.2, Function specifiers */
9711 if (friendp && explicitp)
9712 error ("only declarations of constructors can be `explicit'");
9713
9714 if (RIDBIT_SETP (RID_MUTABLE, specbits))
9715 {
9716 if (decl_context == PARM)
9717 {
9718 error ("non-member `%s' cannot be declared `mutable'", name);
9719 RIDBIT_RESET (RID_MUTABLE, specbits);
9720 }
9721 else if (friendp || decl_context == TYPENAME)
9722 {
9723 error ("non-object member `%s' cannot be declared `mutable'", name);
9724 RIDBIT_RESET (RID_MUTABLE, specbits);
9725 }
9726 }
9727
9728 /* Warn if two storage classes are given. Default to `auto'. */
9729
9730 if (RIDBIT_ANY_SET (specbits))
9731 {
9732 if (RIDBIT_SETP (RID_STATIC, specbits)) nclasses++;
9733 if (RIDBIT_SETP (RID_EXTERN, specbits)) nclasses++;
9734 if (decl_context == PARM && nclasses > 0)
9735 error ("storage class specifiers invalid in parameter declarations");
9736 if (RIDBIT_SETP (RID_TYPEDEF, specbits))
9737 {
9738 if (decl_context == PARM)
9739 error ("typedef declaration invalid in parameter declaration");
9740 nclasses++;
9741 }
9742 if (RIDBIT_SETP (RID_AUTO, specbits)) nclasses++;
9743 if (RIDBIT_SETP (RID_REGISTER, specbits)) nclasses++;
9744 }
9745
9746 /* Give error if `virtual' is used outside of class declaration. */
9747 if (virtualp
9748 && (current_class_name == NULL_TREE || decl_context != FIELD))
9749 {
9750 error ("virtual outside class declaration");
9751 virtualp = 0;
9752 }
9753 if (current_class_name == NULL_TREE && RIDBIT_SETP (RID_MUTABLE, specbits))
9754 {
9755 error ("only members can be declared mutable");
9756 RIDBIT_RESET (RID_MUTABLE, specbits);
9757 }
9758
9759 /* Static anonymous unions are dealt with here. */
9760 if (staticp && decl_context == TYPENAME
9761 && TREE_CODE (declspecs) == TREE_LIST
9762 && ANON_AGGR_TYPE_P (TREE_VALUE (declspecs)))
9763 decl_context = FIELD;
9764
9765 /* Warn about storage classes that are invalid for certain
9766 kinds of declarations (parameters, typenames, etc.). */
9767
9768 if (nclasses > 1)
9769 error ("multiple storage classes in declaration of `%s'", name);
9770 else if (decl_context != NORMAL && nclasses > 0)
9771 {
9772 if ((decl_context == PARM || decl_context == CATCHPARM)
9773 && (RIDBIT_SETP (RID_REGISTER, specbits)
9774 || RIDBIT_SETP (RID_AUTO, specbits)))
9775 ;
9776 else if (RIDBIT_SETP (RID_TYPEDEF, specbits))
9777 ;
9778 else if (decl_context == FIELD
9779 /* C++ allows static class elements */
9780 && RIDBIT_SETP (RID_STATIC, specbits))
9781 /* C++ also allows inlines and signed and unsigned elements,
9782 but in those cases we don't come in here. */
9783 ;
9784 else
9785 {
9786 if (decl_context == FIELD)
9787 {
9788 tree tmp = NULL_TREE;
9789 register int op = 0;
9790
9791 if (declarator)
9792 {
9793 /* Avoid trying to get an operand off an identifier node. */
9794 if (TREE_CODE (declarator) == IDENTIFIER_NODE)
9795 tmp = declarator;
9796 else
9797 tmp = TREE_OPERAND (declarator, 0);
9798 op = IDENTIFIER_OPNAME_P (tmp);
9799 }
9800 error ("storage class specified for %s `%s'",
9801 op ? "member operator" : "field",
9802 op ? operator_name_string (tmp) : name);
9803 }
9804 else
9805 error (((decl_context == PARM || decl_context == CATCHPARM)
9806 ? "storage class specified for parameter `%s'"
9807 : "storage class specified for typename"), name);
9808 RIDBIT_RESET (RID_REGISTER, specbits);
9809 RIDBIT_RESET (RID_AUTO, specbits);
9810 RIDBIT_RESET (RID_EXTERN, specbits);
9811 }
9812 }
9813 else if (RIDBIT_SETP (RID_EXTERN, specbits) && initialized && !funcdef_flag)
9814 {
9815 if (toplevel_bindings_p ())
9816 {
9817 /* It's common practice (and completely valid) to have a const
9818 be initialized and declared extern. */
9819 if (!(type_quals & TYPE_QUAL_CONST))
9820 warning ("`%s' initialized and declared `extern'", name);
9821 }
9822 else
9823 error ("`%s' has both `extern' and initializer", name);
9824 }
9825 else if (RIDBIT_SETP (RID_EXTERN, specbits) && funcdef_flag
9826 && ! toplevel_bindings_p ())
9827 error ("nested function `%s' declared `extern'", name);
9828 else if (toplevel_bindings_p ())
9829 {
9830 if (RIDBIT_SETP (RID_AUTO, specbits))
9831 error ("top-level declaration of `%s' specifies `auto'", name);
9832 }
9833
9834 if (nclasses > 0 && friendp)
9835 error ("storage class specifiers invalid in friend function declarations");
9836
9837 /* Now figure out the structure of the declarator proper.
9838 Descend through it, creating more complex types, until we reach
9839 the declared identifier (or NULL_TREE, in an absolute declarator). */
9840
9841 inner_attrs = NULL_TREE;
9842 ignore_attrs = 0;
9843
9844 while (declarator && TREE_CODE (declarator) != IDENTIFIER_NODE
9845 && TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
9846 {
9847 /* Each level of DECLARATOR is either an ARRAY_REF (for ...[..]),
9848 an INDIRECT_REF (for *...),
9849 a CALL_EXPR (for ...(...)),
9850 an identifier (for the name being declared)
9851 or a null pointer (for the place in an absolute declarator
9852 where the name was omitted).
9853 For the last two cases, we have just exited the loop.
9854
9855 For C++ it could also be
9856 a SCOPE_REF (for class :: ...). In this case, we have converted
9857 sensible names to types, and those are the values we use to
9858 qualify the member name.
9859 an ADDR_EXPR (for &...),
9860 a BIT_NOT_EXPR (for destructors)
9861
9862 At this point, TYPE is the type of elements of an array,
9863 or for a function to return, or for a pointer to point to.
9864 After this sequence of ifs, TYPE is the type of the
9865 array or function or pointer, and DECLARATOR has had its
9866 outermost layer removed. */
9867
9868 if (type == error_mark_node)
9869 {
9870 if (TREE_CODE (declarator) == SCOPE_REF)
9871 declarator = TREE_OPERAND (declarator, 1);
9872 else
9873 declarator = TREE_OPERAND (declarator, 0);
9874 continue;
9875 }
9876 if (quals != NULL_TREE
9877 && (declarator == NULL_TREE
9878 || TREE_CODE (declarator) != SCOPE_REF))
9879 {
9880 if (ctype == NULL_TREE && TREE_CODE (type) == METHOD_TYPE)
9881 ctype = TYPE_METHOD_BASETYPE (type);
9882 if (ctype != NULL_TREE)
9883 {
9884 tree dummy = build_decl (TYPE_DECL, NULL_TREE, type);
9885 ctype = grok_method_quals (ctype, dummy, quals);
9886 type = TREE_TYPE (dummy);
9887 quals = NULL_TREE;
9888 }
9889 }
9890
9891 /* See the comment for the TREE_LIST case, below. */
9892 if (ignore_attrs)
9893 ignore_attrs = 0;
9894 else if (inner_attrs)
9895 {
9896 decl_attributes (type, inner_attrs, NULL_TREE);
9897 inner_attrs = NULL_TREE;
9898 }
9899
9900 switch (TREE_CODE (declarator))
9901 {
9902 case TREE_LIST:
9903 {
9904 /* We encode a declarator with embedded attributes using
9905 a TREE_LIST. The attributes apply to the declarator
9906 directly inside them, so we have to skip an iteration
9907 before applying them to the type. If the declarator just
9908 inside is the declarator-id, we apply the attrs to the
9909 decl itself. */
9910 inner_attrs = TREE_PURPOSE (declarator);
9911 ignore_attrs = 1;
9912 declarator = TREE_VALUE (declarator);
9913 }
9914 break;
9915
9916 case ARRAY_REF:
9917 {
9918 register tree itype = NULL_TREE;
9919 register tree size = TREE_OPERAND (declarator, 1);
9920 /* The index is a signed object `sizetype' bits wide. */
9921 tree index_type = signed_type (sizetype);
9922
9923 declarator = TREE_OPERAND (declarator, 0);
9924
9925 /* Check for some types that there cannot be arrays of. */
9926
9927 if (TREE_CODE (type) == VOID_TYPE)
9928 {
9929 cp_error ("declaration of `%D' as array of voids", dname);
9930 type = error_mark_node;
9931 }
9932
9933 if (TREE_CODE (type) == FUNCTION_TYPE)
9934 {
9935 cp_error ("declaration of `%D' as array of functions", dname);
9936 type = error_mark_node;
9937 }
9938
9939 /* ARM $8.4.3: Since you can't have a pointer to a reference,
9940 you can't have arrays of references. If we allowed them,
9941 then we'd be saying x[i] is valid for an array x, but
9942 then you'd have to ask: what does `*(x + i)' mean? */
9943 if (TREE_CODE (type) == REFERENCE_TYPE)
9944 {
9945 if (decl_context == TYPENAME)
9946 cp_error ("cannot make arrays of references");
9947 else
9948 cp_error ("declaration of `%D' as array of references",
9949 dname);
9950 type = error_mark_node;
9951 }
9952
9953 if (TREE_CODE (type) == OFFSET_TYPE)
9954 {
9955 cp_error ("declaration of `%D' as array of data members",
9956 dname);
9957 type = error_mark_node;
9958 }
9959
9960 if (TREE_CODE (type) == METHOD_TYPE)
9961 {
9962 cp_error ("declaration of `%D' as array of function members",
9963 dname);
9964 type = error_mark_node;
9965 }
9966
9967 if (size == error_mark_node)
9968 type = error_mark_node;
9969 else if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
9970 {
9971 /* [dcl.array]
9972
9973 the constant expressions that specify the bounds of
9974 the arrays can be omitted only for the first member
9975 of the sequence. */
9976 cp_error ("declaration of `%D' as multidimensional array",
9977 dname);
9978 cp_error ("must have bounds for all dimensions except the first");
9979 type = error_mark_node;
9980 }
9981
9982 if (type == error_mark_node)
9983 continue;
9984
9985 /* VC++ spells a zero-sized array with []. */
9986 if (size == NULL_TREE && decl_context == FIELD && ! staticp
9987 && ! RIDBIT_SETP (RID_TYPEDEF, specbits))
9988 size = integer_zero_node;
9989
9990 if (size)
9991 {
9992 /* Must suspend_momentary here because the index
9993 type may need to live until the end of the function.
9994 For example, it is used in the declaration of a
9995 variable which requires destructing at the end of
9996 the function; then build_vec_delete will need this
9997 value. */
9998 int yes = suspend_momentary ();
9999 /* Might be a cast. */
10000 if (TREE_CODE (size) == NOP_EXPR
10001 && TREE_TYPE (size) == TREE_TYPE (TREE_OPERAND (size, 0)))
10002 size = TREE_OPERAND (size, 0);
10003 if (TREE_READONLY_DECL_P (size))
10004 size = decl_constant_value (size);
10005
10006 /* If this involves a template parameter, it will be a
10007 constant at instantiation time, but we don't know
10008 what the value is yet. Even if no template
10009 parameters are involved, we may an expression that
10010 is not a constant; we don't even simplify `1 + 2'
10011 when processing a template. */
10012 if (processing_template_decl)
10013 {
10014 /* Resolve a qualified reference to an enumerator or
10015 static const data member of ours. */
10016 if (TREE_CODE (size) == SCOPE_REF
10017 && TREE_OPERAND (size, 0) == current_class_type)
10018 {
10019 tree t = lookup_field (current_class_type,
10020 TREE_OPERAND (size, 1), 0, 0);
10021 if (t)
10022 size = t;
10023 }
10024
10025 itype = build_index_type (build_min
10026 (MINUS_EXPR, sizetype, size, integer_one_node));
10027 goto dont_grok_size;
10028 }
10029
10030 if (TREE_CODE (TREE_TYPE (size)) != INTEGER_TYPE
10031 && TREE_CODE (TREE_TYPE (size)) != ENUMERAL_TYPE
10032 && TREE_CODE (TREE_TYPE (size)) != BOOLEAN_TYPE)
10033 {
10034 cp_error ("size of array `%D' has non-integer type",
10035 dname);
10036 size = integer_one_node;
10037 }
10038 if (pedantic && integer_zerop (size))
10039 cp_pedwarn ("ANSI C++ forbids zero-size array `%D'", dname);
10040 if (TREE_CONSTANT (size))
10041 {
10042 int old_flag_pedantic_errors = flag_pedantic_errors;
10043 int old_pedantic = pedantic;
10044 pedantic = flag_pedantic_errors = 1;
10045 /* Always give overflow errors on array subscripts. */
10046 constant_expression_warning (size);
10047 pedantic = old_pedantic;
10048 flag_pedantic_errors = old_flag_pedantic_errors;
10049 if (INT_CST_LT (size, integer_zero_node))
10050 {
10051 cp_error ("size of array `%D' is negative", dname);
10052 size = integer_one_node;
10053 }
10054 }
10055 else
10056 {
10057 if (pedantic)
10058 {
10059 if (dname)
10060 cp_pedwarn ("ANSI C++ forbids variable-size array `%D'",
10061 dname);
10062 else
10063 cp_pedwarn ("ANSI C++ forbids variable-size array");
10064 }
10065 }
10066
10067 itype
10068 = fold (build_binary_op (MINUS_EXPR,
10069 cp_convert (index_type, size),
10070 cp_convert (index_type,
10071 integer_one_node)));
10072 if (! TREE_CONSTANT (itype))
10073 itype = variable_size (itype);
10074 else if (TREE_OVERFLOW (itype))
10075 {
10076 error ("overflow in array dimension");
10077 TREE_OVERFLOW (itype) = 0;
10078 }
10079
10080 /* If we're a parm, we need to have a permanent type so
10081 mangling checks for re-use will work right. If both the
10082 element and index types are permanent, the array type
10083 will be, too. */
10084 if (decl_context == PARM
10085 && allocation_temporary_p () && TREE_PERMANENT (type))
10086 {
10087 push_obstacks (&permanent_obstack, &permanent_obstack);
10088 itype = build_index_type (itype);
10089 pop_obstacks ();
10090 }
10091 else
10092 itype = build_index_type (itype);
10093
10094 dont_grok_size:
10095 resume_momentary (yes);
10096 }
10097
10098 type = build_cplus_array_type (type, itype);
10099 ctype = NULL_TREE;
10100 }
10101 break;
10102
10103 case CALL_EXPR:
10104 {
10105 tree arg_types;
10106 int funcdecl_p;
10107 tree inner_parms = CALL_DECLARATOR_PARMS (declarator);
10108 tree inner_decl = TREE_OPERAND (declarator, 0);
10109
10110 /* Declaring a function type.
10111 Make sure we have a valid type for the function to return. */
10112
10113 /* We now know that the TYPE_QUALS don't apply to the
10114 decl, but to its return type. */
10115 type_quals = TYPE_UNQUALIFIED;
10116
10117 /* Warn about some types functions can't return. */
10118
10119 if (TREE_CODE (type) == FUNCTION_TYPE)
10120 {
10121 error ("`%s' declared as function returning a function", name);
10122 type = integer_type_node;
10123 }
10124 if (TREE_CODE (type) == ARRAY_TYPE)
10125 {
10126 error ("`%s' declared as function returning an array", name);
10127 type = integer_type_node;
10128 }
10129
10130 if (inner_decl && TREE_CODE (inner_decl) == SCOPE_REF)
10131 inner_decl = TREE_OPERAND (inner_decl, 1);
10132
10133 if (inner_decl && TREE_CODE (inner_decl) == TEMPLATE_ID_EXPR)
10134 inner_decl = dname;
10135
10136 /* Pick up type qualifiers which should be applied to `this'. */
10137 quals = CALL_DECLARATOR_QUALS (declarator);
10138
10139 /* Pick up the exception specifications. */
10140 raises = CALL_DECLARATOR_EXCEPTION_SPEC (declarator);
10141
10142 /* Say it's a definition only for the CALL_EXPR
10143 closest to the identifier. */
10144 funcdecl_p
10145 = inner_decl
10146 && (TREE_CODE (inner_decl) == IDENTIFIER_NODE
10147 || TREE_CODE (inner_decl) == TEMPLATE_ID_EXPR
10148 || TREE_CODE (inner_decl) == BIT_NOT_EXPR);
10149
10150 if (ctype == NULL_TREE
10151 && decl_context == FIELD
10152 && funcdecl_p
10153 && (friendp == 0 || dname == current_class_name))
10154 ctype = current_class_type;
10155
10156 if (ctype && return_type == return_conversion)
10157 TYPE_HAS_CONVERSION (ctype) = 1;
10158 if (ctype && constructor_name (ctype) == dname)
10159 {
10160 /* We are within a class's scope. If our declarator name
10161 is the same as the class name, and we are defining
10162 a function, then it is a constructor/destructor, and
10163 therefore returns a void type. */
10164
10165 if (flags == DTOR_FLAG)
10166 {
10167 /* ANSI C++ June 5 1992 WP 12.4.1. A destructor may
10168 not be declared const or volatile. A destructor
10169 may not be static. */
10170 if (staticp == 2)
10171 error ("destructor cannot be static member function");
10172 if (quals)
10173 {
10174 cp_error ("destructors may not be `%s'",
10175 IDENTIFIER_POINTER (TREE_VALUE (quals)));
10176 quals = NULL_TREE;
10177 }
10178 if (decl_context == FIELD)
10179 {
10180 if (! member_function_or_else (ctype, current_class_type,
10181 "destructor for alien class `%s' cannot be a member"))
10182 return void_type_node;
10183 }
10184 }
10185 else /* It's a constructor. */
10186 {
10187 if (explicitp == 1)
10188 explicitp = 2;
10189 /* ANSI C++ June 5 1992 WP 12.1.2. A constructor may
10190 not be declared const or volatile. A constructor may
10191 not be virtual. A constructor may not be static. */
10192 if (staticp == 2)
10193 error ("constructor cannot be static member function");
10194 if (virtualp)
10195 {
10196 pedwarn ("constructors cannot be declared virtual");
10197 virtualp = 0;
10198 }
10199 if (quals)
10200 {
10201 cp_error ("constructors may not be `%s'",
10202 IDENTIFIER_POINTER (TREE_VALUE (quals)));
10203 quals = NULL_TREE;
10204 }
10205 {
10206 RID_BIT_TYPE tmp_bits;
10207 bcopy ((void*)&specbits, (void*)&tmp_bits, sizeof (RID_BIT_TYPE));
10208 RIDBIT_RESET (RID_INLINE, tmp_bits);
10209 RIDBIT_RESET (RID_STATIC, tmp_bits);
10210 if (RIDBIT_ANY_SET (tmp_bits))
10211 error ("return value type specifier for constructor ignored");
10212 }
10213 type = build_pointer_type (ctype);
10214 if (decl_context == FIELD)
10215 {
10216 if (! member_function_or_else (ctype, current_class_type,
10217 "constructor for alien class `%s' cannot be member"))
10218 return void_type_node;
10219 TYPE_HAS_CONSTRUCTOR (ctype) = 1;
10220 if (return_type != return_ctor)
10221 return NULL_TREE;
10222 }
10223 }
10224 if (decl_context == FIELD)
10225 staticp = 0;
10226 }
10227 else if (friendp)
10228 {
10229 if (initialized)
10230 error ("can't initialize friend function `%s'", name);
10231 if (virtualp)
10232 {
10233 /* Cannot be both friend and virtual. */
10234 error ("virtual functions cannot be friends");
10235 RIDBIT_RESET (RID_FRIEND, specbits);
10236 friendp = 0;
10237 }
10238 if (decl_context == NORMAL)
10239 error ("friend declaration not in class definition");
10240 if (current_function_decl && funcdef_flag)
10241 cp_error ("can't define friend function `%s' in a local class definition",
10242 name);
10243 }
10244
10245 /* Construct the function type and go to the next
10246 inner layer of declarator. */
10247
10248 declarator = TREE_OPERAND (declarator, 0);
10249
10250 /* FIXME: This is where default args should be fully
10251 processed. */
10252
10253 arg_types = grokparms (inner_parms, funcdecl_p ? funcdef_flag : 0);
10254
10255 if (declarator && flags == DTOR_FLAG)
10256 {
10257 /* A destructor declared in the body of a class will
10258 be represented as a BIT_NOT_EXPR. But, we just
10259 want the underlying IDENTIFIER. */
10260 if (TREE_CODE (declarator) == BIT_NOT_EXPR)
10261 declarator = TREE_OPERAND (declarator, 0);
10262
10263 if (strict_prototype == 0 && arg_types == NULL_TREE)
10264 arg_types = void_list_node;
10265 else if (arg_types == NULL_TREE
10266 || arg_types != void_list_node)
10267 {
10268 cp_error ("destructors may not have parameters");
10269 arg_types = void_list_node;
10270 last_function_parms = NULL_TREE;
10271 }
10272 }
10273
10274 /* ANSI says that `const int foo ();'
10275 does not make the function foo const. */
10276 type = build_function_type (type, arg_types);
10277
10278 {
10279 tree t;
10280 for (t = arg_types; t; t = TREE_CHAIN (t))
10281 if (TREE_PURPOSE (t)
10282 && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
10283 {
10284 add_defarg_fn (type);
10285 break;
10286 }
10287 }
10288 }
10289 break;
10290
10291 case ADDR_EXPR:
10292 case INDIRECT_REF:
10293 /* Filter out pointers-to-references and references-to-references.
10294 We can get these if a TYPE_DECL is used. */
10295
10296 if (TREE_CODE (type) == REFERENCE_TYPE)
10297 {
10298 error ("cannot declare %s to references",
10299 TREE_CODE (declarator) == ADDR_EXPR
10300 ? "references" : "pointers");
10301 declarator = TREE_OPERAND (declarator, 0);
10302 continue;
10303 }
10304
10305 if (TREE_CODE (type) == OFFSET_TYPE
10306 && (TREE_CODE (TREE_TYPE (type)) == VOID_TYPE
10307 || TREE_CODE (TREE_TYPE (type)) == REFERENCE_TYPE))
10308 {
10309 cp_error ("cannot declare pointer to `%#T' member",
10310 TREE_TYPE (type));
10311 type = TREE_TYPE (type);
10312 }
10313
10314 /* Merge any constancy or volatility into the target type
10315 for the pointer. */
10316
10317 /* We now know that the TYPE_QUALS don't apply to the decl,
10318 but to the target of the pointer. */
10319 type_quals = TYPE_UNQUALIFIED;
10320
10321 if (TREE_CODE (declarator) == ADDR_EXPR)
10322 {
10323 if (TREE_CODE (type) == VOID_TYPE)
10324 error ("invalid type: `void &'");
10325 else
10326 type = build_reference_type (type);
10327 }
10328 else if (TREE_CODE (type) == METHOD_TYPE)
10329 type = build_ptrmemfunc_type (build_pointer_type (type));
10330 else
10331 type = build_pointer_type (type);
10332
10333 /* Process a list of type modifier keywords (such as
10334 const or volatile) that were given inside the `*' or `&'. */
10335
10336 if (TREE_TYPE (declarator))
10337 {
10338 register tree typemodlist;
10339 int erred = 0;
10340
10341 constp = 0;
10342 volatilep = 0;
10343 restrictp = 0;
10344 for (typemodlist = TREE_TYPE (declarator); typemodlist;
10345 typemodlist = TREE_CHAIN (typemodlist))
10346 {
10347 tree qualifier = TREE_VALUE (typemodlist);
10348
10349 if (qualifier == ridpointers[(int) RID_CONST])
10350 constp++;
10351 else if (qualifier == ridpointers[(int) RID_VOLATILE])
10352 volatilep++;
10353 else if (qualifier == ridpointers[(int) RID_RESTRICT])
10354 restrictp++;
10355 else if (!erred)
10356 {
10357 erred = 1;
10358 error ("invalid type modifier within pointer declarator");
10359 }
10360 }
10361 if (constp > 1)
10362 pedwarn ("duplicate `const'");
10363 if (volatilep > 1)
10364 pedwarn ("duplicate `volatile'");
10365 if (restrictp > 1)
10366 pedwarn ("duplicate `restrict'");
10367
10368 type_quals = ((constp ? TYPE_QUAL_CONST : 0)
10369 | (restrictp ? TYPE_QUAL_RESTRICT : 0)
10370 | (volatilep ? TYPE_QUAL_VOLATILE : 0));
10371 if (TREE_CODE (declarator) == ADDR_EXPR
10372 && (constp || volatilep))
10373 {
10374 if (constp)
10375 pedwarn ("discarding `const' applied to a reference");
10376 if (volatilep)
10377 pedwarn ("discarding `volatile' applied to a reference");
10378 type_quals &= ~(TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE);
10379 }
10380 type = cp_build_qualified_type (type, type_quals);
10381 }
10382 declarator = TREE_OPERAND (declarator, 0);
10383 ctype = NULL_TREE;
10384 break;
10385
10386 case SCOPE_REF:
10387 {
10388 /* We have converted type names to NULL_TREE if the
10389 name was bogus, or to a _TYPE node, if not.
10390
10391 The variable CTYPE holds the type we will ultimately
10392 resolve to. The code here just needs to build
10393 up appropriate member types. */
10394 tree sname = TREE_OPERAND (declarator, 1);
10395 tree t;
10396
10397 /* Destructors can have their visibilities changed as well. */
10398 if (TREE_CODE (sname) == BIT_NOT_EXPR)
10399 sname = TREE_OPERAND (sname, 0);
10400
10401 if (TREE_COMPLEXITY (declarator) == 0)
10402 /* This needs to be here, in case we are called
10403 multiple times. */ ;
10404 else if (TREE_COMPLEXITY (declarator) == -1)
10405 /* Namespace member. */
10406 pop_decl_namespace ();
10407 else if (friendp && (TREE_COMPLEXITY (declarator) < 2))
10408 /* Don't fall out into global scope. Hides real bug? --eichin */ ;
10409 else if (! IS_AGGR_TYPE_CODE
10410 (TREE_CODE (TREE_OPERAND (declarator, 0))))
10411 ;
10412 else if (TREE_COMPLEXITY (declarator) == current_class_depth)
10413 {
10414 /* Resolve any TYPENAME_TYPEs from the decl-specifier-seq
10415 that refer to ctype. They couldn't be resolved earlier
10416 because we hadn't pushed into the class yet.
10417 Example: resolve 'B<T>::type' in
10418 'B<typename B<T>::type> B<T>::f () { }'. */
10419 if (current_template_parms
10420 && uses_template_parms (type)
10421 && uses_template_parms (current_class_type))
10422 {
10423 tree args = current_template_args ();
10424 type = tsubst (type, args, /*complain=*/1, NULL_TREE);
10425 }
10426
10427 /* This pop_nested_class corresponds to the
10428 push_nested_class used to push into class scope for
10429 parsing the argument list of a function decl, in
10430 qualified_id. */
10431 pop_nested_class ();
10432 TREE_COMPLEXITY (declarator) = current_class_depth;
10433 }
10434 else
10435 my_friendly_abort (16);
10436
10437 if (TREE_OPERAND (declarator, 0) == NULL_TREE)
10438 {
10439 /* We had a reference to a global decl, or
10440 perhaps we were given a non-aggregate typedef,
10441 in which case we cleared this out, and should just
10442 keep going as though it wasn't there. */
10443 declarator = sname;
10444 continue;
10445 }
10446 ctype = TREE_OPERAND (declarator, 0);
10447
10448 t = ctype;
10449 while (t != NULL_TREE && CLASS_TYPE_P (t))
10450 {
10451 if (CLASSTYPE_TEMPLATE_INFO (t) &&
10452 !CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
10453 template_count += 1;
10454 t = TYPE_MAIN_DECL (t);
10455 if (DECL_LANG_SPECIFIC (t))
10456 t = DECL_CLASS_CONTEXT (t);
10457 else
10458 t = NULL_TREE;
10459 }
10460
10461 if (sname == NULL_TREE)
10462 goto done_scoping;
10463
10464 if (TREE_CODE (sname) == IDENTIFIER_NODE)
10465 {
10466 /* This is the `standard' use of the scoping operator:
10467 basetype :: member . */
10468
10469 if (ctype == current_class_type)
10470 {
10471 /* class A {
10472 void A::f ();
10473 };
10474
10475 Is this ill-formed? */
10476
10477 if (pedantic)
10478 cp_pedwarn ("extra qualification `%T::' on member `%s' ignored",
10479 ctype, name);
10480 }
10481 else if (TREE_CODE (type) == FUNCTION_TYPE)
10482 {
10483 if (current_class_type == NULL_TREE
10484 || friendp)
10485 type = build_cplus_method_type (ctype, TREE_TYPE (type),
10486 TYPE_ARG_TYPES (type));
10487 else
10488 {
10489 cp_error ("cannot declare member function `%T::%s' within `%T'",
10490 ctype, name, current_class_type);
10491 return void_type_node;
10492 }
10493 }
10494 else if (RIDBIT_SETP (RID_TYPEDEF, specbits)
10495 || TYPE_SIZE (complete_type (ctype)) != NULL_TREE)
10496 {
10497 /* Have to move this code elsewhere in this function.
10498 this code is used for i.e., typedef int A::M; M *pm;
10499
10500 It is? How? jason 10/2/94 */
10501
10502 if (current_class_type)
10503 {
10504 cp_error ("cannot declare member `%T::%s' within `%T'",
10505 ctype, name, current_class_type);
10506 return void_type_node;
10507 }
10508 type = build_offset_type (ctype, type);
10509 }
10510 else if (uses_template_parms (ctype))
10511 {
10512 if (TREE_CODE (type) == FUNCTION_TYPE)
10513 type
10514 = build_cplus_method_type (ctype, TREE_TYPE (type),
10515 TYPE_ARG_TYPES (type));
10516 }
10517 else
10518 {
10519 cp_error ("structure `%T' not yet defined", ctype);
10520 return error_mark_node;
10521 }
10522
10523 declarator = sname;
10524 }
10525 else if (TREE_CODE (sname) == SCOPE_REF)
10526 my_friendly_abort (17);
10527 else
10528 {
10529 done_scoping:
10530 declarator = TREE_OPERAND (declarator, 1);
10531 if (declarator && TREE_CODE (declarator) == CALL_EXPR)
10532 /* In this case, we will deal with it later. */
10533 ;
10534 else
10535 {
10536 if (TREE_CODE (type) == FUNCTION_TYPE)
10537 type = build_cplus_method_type (ctype, TREE_TYPE (type),
10538 TYPE_ARG_TYPES (type));
10539 else
10540 type = build_offset_type (ctype, type);
10541 }
10542 }
10543 }
10544 break;
10545
10546 case BIT_NOT_EXPR:
10547 declarator = TREE_OPERAND (declarator, 0);
10548 break;
10549
10550 case RECORD_TYPE:
10551 case UNION_TYPE:
10552 case ENUMERAL_TYPE:
10553 declarator = NULL_TREE;
10554 break;
10555
10556 case ERROR_MARK:
10557 declarator = NULL_TREE;
10558 break;
10559
10560 default:
10561 my_friendly_abort (158);
10562 }
10563 }
10564
10565 /* See the comment for the TREE_LIST case, above. */
10566 if (inner_attrs)
10567 {
10568 if (! ignore_attrs)
10569 decl_attributes (type, inner_attrs, NULL_TREE);
10570 else if (attrlist)
10571 TREE_VALUE (attrlist) = chainon (inner_attrs, TREE_VALUE (attrlist));
10572 else
10573 attrlist = build_decl_list (NULL_TREE, inner_attrs);
10574 }
10575
10576 /* Now TYPE has the actual type. */
10577
10578 if (explicitp == 1)
10579 {
10580 error ("only constructors can be declared `explicit'");
10581 explicitp = 0;
10582 }
10583
10584 if (RIDBIT_SETP (RID_MUTABLE, specbits))
10585 {
10586 if (type_quals & TYPE_QUAL_CONST)
10587 {
10588 error ("const `%s' cannot be declared `mutable'", name);
10589 RIDBIT_RESET (RID_MUTABLE, specbits);
10590 }
10591 else if (staticp)
10592 {
10593 error ("static `%s' cannot be declared `mutable'", name);
10594 RIDBIT_RESET (RID_MUTABLE, specbits);
10595 }
10596 }
10597
10598 if (declarator == NULL_TREE
10599 || TREE_CODE (declarator) == IDENTIFIER_NODE
10600 || (TREE_CODE (declarator) == TEMPLATE_ID_EXPR
10601 && (TREE_CODE (type) == FUNCTION_TYPE
10602 || TREE_CODE (type) == METHOD_TYPE)))
10603 /* OK */;
10604 else if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
10605 {
10606 cp_error ("template-id `%D' used as a declarator", declarator);
10607 declarator = dname;
10608 }
10609 else
10610 /* Unexpected declarator format. */
10611 my_friendly_abort (990210);
10612
10613 /* If this is declaring a typedef name, return a TYPE_DECL. */
10614
10615 if (RIDBIT_SETP (RID_TYPEDEF, specbits) && decl_context != TYPENAME)
10616 {
10617 tree decl;
10618
10619 /* Note that the grammar rejects storage classes
10620 in typenames, fields or parameters. */
10621 if (current_lang_name == lang_name_java)
10622 TYPE_FOR_JAVA (type) = 1;
10623
10624 if (decl_context == FIELD)
10625 {
10626 if (declarator == constructor_name (current_class_type))
10627 cp_pedwarn ("ANSI C++ forbids nested type `%D' with same name as enclosing class",
10628 declarator);
10629 decl = build_lang_decl (TYPE_DECL, declarator, type);
10630 }
10631 else
10632 {
10633 /* Make sure this typedef lives as long as its type,
10634 since it might be used as a template parameter. */
10635 if (type != error_mark_node)
10636 push_obstacks (TYPE_OBSTACK (type), TYPE_OBSTACK (type));
10637 if (processing_template_decl)
10638 decl = build_lang_decl (TYPE_DECL, declarator, type);
10639 else
10640 decl = build_decl (TYPE_DECL, declarator, type);
10641 if (type != error_mark_node)
10642 pop_obstacks ();
10643 }
10644
10645 /* If the user declares "typedef struct {...} foo" then the
10646 struct will have an anonymous name. Fill that name in now.
10647 Nothing can refer to it, so nothing needs know about the name
10648 change. */
10649 if (type != error_mark_node
10650 && TYPE_NAME (type)
10651 && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
10652 && ANON_AGGRNAME_P (TYPE_IDENTIFIER (type))
10653 && CP_TYPE_QUALS (type) == TYPE_UNQUALIFIED)
10654 {
10655 tree oldname = TYPE_NAME (type);
10656 tree t;
10657
10658 /* Replace the anonymous name with the real name everywhere. */
10659 lookup_tag_reverse (type, declarator);
10660 for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
10661 if (TYPE_NAME (t) == oldname)
10662 TYPE_NAME (t) = decl;
10663
10664 if (TYPE_LANG_SPECIFIC (type))
10665 TYPE_WAS_ANONYMOUS (type) = 1;
10666
10667 /* If this is a typedef within a template class, the nested
10668 type is a (non-primary) template. The name for the
10669 template needs updating as well. */
10670 if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
10671 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type))
10672 = TYPE_IDENTIFIER (type);
10673
10674 /* XXX Temporarily set the scope.
10675 When returning, start_decl expects it as NULL_TREE,
10676 and will then then set it using pushdecl. */
10677 my_friendly_assert (DECL_CONTEXT (decl) == NULL_TREE, 980404);
10678 if (current_class_type)
10679 DECL_CONTEXT (decl) = current_class_type;
10680 else
10681 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
10682
10683 DECL_ASSEMBLER_NAME (decl) = DECL_NAME (decl);
10684 DECL_ASSEMBLER_NAME (decl)
10685 = get_identifier (build_overload_name (type, 1, 1));
10686 DECL_CONTEXT (decl) = NULL_TREE;
10687
10688 /* FIXME remangle member functions; member functions of a
10689 type with external linkage have external linkage. */
10690 }
10691
10692 if (TREE_CODE (type) == OFFSET_TYPE || TREE_CODE (type) == METHOD_TYPE)
10693 {
10694 cp_error_at ("typedef name may not be class-qualified", decl);
10695 return NULL_TREE;
10696 }
10697 else if (quals)
10698 {
10699 if (ctype == NULL_TREE)
10700 {
10701 if (TREE_CODE (type) != METHOD_TYPE)
10702 cp_error_at ("invalid type qualifier for non-method type", decl);
10703 else
10704 ctype = TYPE_METHOD_BASETYPE (type);
10705 }
10706 if (ctype != NULL_TREE)
10707 grok_method_quals (ctype, decl, quals);
10708 }
10709
10710 if (RIDBIT_SETP (RID_SIGNED, specbits)
10711 || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
10712 C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
10713
10714 if (RIDBIT_SETP (RID_MUTABLE, specbits))
10715 error ("non-object member `%s' cannot be declared mutable", name);
10716
10717 bad_specifiers (decl, "type", virtualp, quals != NULL_TREE,
10718 inlinep, friendp, raises != NULL_TREE);
10719
10720 if (initialized)
10721 error ("typedef declaration includes an initializer");
10722
10723 return decl;
10724 }
10725
10726 /* Detect the case of an array type of unspecified size
10727 which came, as such, direct from a typedef name.
10728 We must copy the type, so that each identifier gets
10729 a distinct type, so that each identifier's size can be
10730 controlled separately by its own initializer. */
10731
10732 if (type == typedef_type && TREE_CODE (type) == ARRAY_TYPE
10733 && TYPE_DOMAIN (type) == NULL_TREE)
10734 {
10735 type = build_cplus_array_type (TREE_TYPE (type), TYPE_DOMAIN (type));
10736 }
10737
10738 /* If this is a type name (such as, in a cast or sizeof),
10739 compute the type and return it now. */
10740
10741 if (decl_context == TYPENAME)
10742 {
10743 /* Note that the grammar rejects storage classes
10744 in typenames, fields or parameters. */
10745 if (type_quals != TYPE_UNQUALIFIED)
10746 type_quals = TYPE_UNQUALIFIED;
10747
10748 /* Special case: "friend class foo" looks like a TYPENAME context. */
10749 if (friendp)
10750 {
10751 if (type_quals != TYPE_UNQUALIFIED)
10752 {
10753 cp_error ("type qualifiers specified for friend class declaration");
10754 type_quals = TYPE_UNQUALIFIED;
10755 }
10756 if (inlinep)
10757 {
10758 cp_error ("`inline' specified for friend class declaration");
10759 inlinep = 0;
10760 }
10761
10762 /* Only try to do this stuff if we didn't already give up. */
10763 if (type != integer_type_node)
10764 {
10765 /* A friendly class? */
10766 if (current_class_type)
10767 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type));
10768 else
10769 error ("trying to make class `%s' a friend of global scope",
10770 TYPE_NAME_STRING (type));
10771 type = void_type_node;
10772 }
10773 }
10774 else if (quals)
10775 {
10776 tree dummy = build_decl (TYPE_DECL, declarator, type);
10777 if (ctype == NULL_TREE)
10778 {
10779 my_friendly_assert (TREE_CODE (type) == METHOD_TYPE, 159);
10780 ctype = TYPE_METHOD_BASETYPE (type);
10781 }
10782 grok_method_quals (ctype, dummy, quals);
10783 type = TREE_TYPE (dummy);
10784 }
10785
10786 return type;
10787 }
10788 else if (declarator == NULL_TREE && decl_context != PARM
10789 && decl_context != CATCHPARM
10790 && TREE_CODE (type) != UNION_TYPE
10791 && ! bitfield)
10792 {
10793 cp_error ("abstract declarator `%T' used as declaration", type);
10794 declarator = make_anon_name ();
10795 }
10796
10797 /* `void' at top level (not within pointer)
10798 is allowed only in typedefs or type names.
10799 We don't complain about parms either, but that is because
10800 a better error message can be made later. */
10801
10802 if (TREE_CODE (type) == VOID_TYPE && decl_context != PARM)
10803 {
10804 if (! declarator)
10805 error ("unnamed variable or field declared void");
10806 else if (TREE_CODE (declarator) == IDENTIFIER_NODE)
10807 {
10808 if (IDENTIFIER_OPNAME_P (declarator))
10809 my_friendly_abort (356);
10810 else
10811 error ("variable or field `%s' declared void", name);
10812 }
10813 else
10814 error ("variable or field declared void");
10815 type = integer_type_node;
10816 }
10817
10818 /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
10819 or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE. */
10820
10821 if (decl_context == PARM || decl_context == CATCHPARM)
10822 {
10823 if (ctype || in_namespace)
10824 error ("cannot use `::' in parameter declaration");
10825
10826 /* A parameter declared as an array of T is really a pointer to T.
10827 One declared as a function is really a pointer to a function.
10828 One declared as a member is really a pointer to member. */
10829
10830 if (TREE_CODE (type) == ARRAY_TYPE)
10831 {
10832 /* Transfer const-ness of array into that of type pointed to. */
10833 type = build_pointer_type (TREE_TYPE (type));
10834 type_quals = TYPE_UNQUALIFIED;
10835 }
10836 else if (TREE_CODE (type) == FUNCTION_TYPE)
10837 type = build_pointer_type (type);
10838 else if (TREE_CODE (type) == OFFSET_TYPE)
10839 type = build_pointer_type (type);
10840 else if (TREE_CODE (type) == VOID_TYPE && declarator)
10841 {
10842 error ("declaration of `%s' as void", name);
10843 return NULL_TREE;
10844 }
10845 }
10846
10847 {
10848 register tree decl;
10849
10850 if (decl_context == PARM)
10851 {
10852 decl = build_decl (PARM_DECL, declarator, type);
10853
10854 bad_specifiers (decl, "parameter", virtualp, quals != NULL_TREE,
10855 inlinep, friendp, raises != NULL_TREE);
10856
10857 /* Compute the type actually passed in the parmlist,
10858 for the case where there is no prototype.
10859 (For example, shorts and chars are passed as ints.)
10860 When there is a prototype, this is overridden later. */
10861
10862 DECL_ARG_TYPE (decl) = type_promotes_to (type);
10863 }
10864 else if (decl_context == FIELD)
10865 {
10866 if (type == error_mark_node)
10867 {
10868 /* Happens when declaring arrays of sizes which
10869 are error_mark_node, for example. */
10870 decl = NULL_TREE;
10871 }
10872 else if (in_namespace && !friendp)
10873 {
10874 /* Something like struct S { int N::j; }; */
10875 cp_error ("invalid use of `::'");
10876 decl = NULL_TREE;
10877 }
10878 else if (TREE_CODE (type) == FUNCTION_TYPE)
10879 {
10880 int publicp = 0;
10881 tree function_context;
10882
10883 /* We catch the others as conflicts with the builtin
10884 typedefs. */
10885 if (friendp && declarator == ridpointers[(int) RID_SIGNED])
10886 {
10887 cp_error ("function `%D' cannot be declared friend",
10888 declarator);
10889 friendp = 0;
10890 }
10891
10892 if (friendp == 0)
10893 {
10894 if (ctype == NULL_TREE)
10895 ctype = current_class_type;
10896
10897 if (ctype == NULL_TREE)
10898 {
10899 cp_error ("can't make `%D' into a method -- not in a class",
10900 declarator);
10901 return void_type_node;
10902 }
10903
10904 /* ``A union may [ ... ] not [ have ] virtual functions.''
10905 ARM 9.5 */
10906 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
10907 {
10908 cp_error ("function `%D' declared virtual inside a union",
10909 declarator);
10910 return void_type_node;
10911 }
10912
10913 if (declarator == ansi_opname[(int) NEW_EXPR]
10914 || declarator == ansi_opname[(int) VEC_NEW_EXPR]
10915 || declarator == ansi_opname[(int) DELETE_EXPR]
10916 || declarator == ansi_opname[(int) VEC_DELETE_EXPR])
10917 {
10918 if (virtualp)
10919 {
10920 cp_error ("`%D' cannot be declared virtual, since it is always static",
10921 declarator);
10922 virtualp = 0;
10923 }
10924 }
10925 else if (staticp < 2)
10926 type = build_cplus_method_type (ctype, TREE_TYPE (type),
10927 TYPE_ARG_TYPES (type));
10928 }
10929
10930 /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node. */
10931 function_context = (ctype != NULL_TREE) ?
10932 hack_decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
10933 publicp = (! friendp || ! staticp)
10934 && function_context == NULL_TREE;
10935 decl = grokfndecl (ctype, type,
10936 TREE_CODE (declarator) != TEMPLATE_ID_EXPR
10937 ? declarator : dname,
10938 declarator,
10939 virtualp, flags, quals, raises,
10940 friendp ? -1 : 0, friendp, publicp, inlinep,
10941 funcdef_flag, template_count, in_namespace);
10942 if (decl == NULL_TREE)
10943 return decl;
10944 #if 0
10945 /* This clobbers the attrs stored in `decl' from `attrlist'. */
10946 /* The decl and setting of decl_machine_attr is also turned off. */
10947 decl = build_decl_attribute_variant (decl, decl_machine_attr);
10948 #endif
10949
10950 /* [class.conv.ctor]
10951
10952 A constructor declared without the function-specifier
10953 explicit that can be called with a single parameter
10954 specifies a conversion from the type of its first
10955 parameter to the type of its class. Such a constructor
10956 is called a converting constructor. */
10957 if (explicitp == 2)
10958 DECL_NONCONVERTING_P (decl) = 1;
10959 else if (DECL_CONSTRUCTOR_P (decl))
10960 {
10961 /* The constructor can be called with exactly one
10962 parameter if there is at least one parameter, and
10963 any subsequent parameters have default arguments.
10964 We don't look at the first parameter, which is
10965 really just the `this' parameter for the new
10966 object. */
10967 tree arg_types =
10968 TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)));
10969
10970 /* Skip the `in_chrg' argument too, if present. */
10971 if (TYPE_USES_VIRTUAL_BASECLASSES (DECL_CONTEXT (decl)))
10972 arg_types = TREE_CHAIN (arg_types);
10973
10974 if (arg_types == void_list_node
10975 || (arg_types
10976 && TREE_CHAIN (arg_types)
10977 && TREE_CHAIN (arg_types) != void_list_node
10978 && !TREE_PURPOSE (TREE_CHAIN (arg_types))))
10979 DECL_NONCONVERTING_P (decl) = 1;
10980 }
10981 }
10982 else if (TREE_CODE (type) == METHOD_TYPE)
10983 {
10984 /* We only get here for friend declarations of
10985 members of other classes. */
10986 /* All method decls are public, so tell grokfndecl to set
10987 TREE_PUBLIC, also. */
10988 decl = grokfndecl (ctype, type, declarator, declarator,
10989 virtualp, flags, quals, raises,
10990 friendp ? -1 : 0, friendp, 1, 0, funcdef_flag,
10991 template_count, in_namespace);
10992 if (decl == NULL_TREE)
10993 return NULL_TREE;
10994 }
10995 else if (!staticp && ! processing_template_decl
10996 && TYPE_SIZE (complete_type (type)) == NULL_TREE
10997 && (TREE_CODE (type) != ARRAY_TYPE || initialized == 0))
10998 {
10999 if (declarator)
11000 cp_error ("field `%D' has incomplete type", declarator);
11001 else
11002 cp_error ("name `%T' has incomplete type", type);
11003
11004 /* If we're instantiating a template, tell them which
11005 instantiation made the field's type be incomplete. */
11006 if (current_class_type
11007 && TYPE_NAME (current_class_type)
11008 && IDENTIFIER_TEMPLATE (TYPE_IDENTIFIER (current_class_type))
11009 && declspecs && TREE_VALUE (declspecs)
11010 && TREE_TYPE (TREE_VALUE (declspecs)) == type)
11011 cp_error (" in instantiation of template `%T'",
11012 current_class_type);
11013
11014 type = error_mark_node;
11015 decl = NULL_TREE;
11016 }
11017 else
11018 {
11019 if (friendp)
11020 {
11021 error ("`%s' is neither function nor method; cannot be declared friend",
11022 IDENTIFIER_POINTER (declarator));
11023 friendp = 0;
11024 }
11025 decl = NULL_TREE;
11026 }
11027
11028 if (friendp)
11029 {
11030 /* Friends are treated specially. */
11031 if (ctype == current_class_type)
11032 warning ("member functions are implicitly friends of their class");
11033 else
11034 {
11035 tree t = NULL_TREE;
11036 if (decl && DECL_NAME (decl))
11037 {
11038 if (template_class_depth (current_class_type) == 0)
11039 {
11040 decl
11041 = check_explicit_specialization
11042 (declarator, decl,
11043 template_count, 2 * (funcdef_flag != 0) + 4);
11044 if (decl == error_mark_node)
11045 return error_mark_node;
11046 }
11047
11048 t = do_friend (ctype, declarator, decl,
11049 last_function_parms, attrlist, flags, quals,
11050 funcdef_flag);
11051 }
11052 if (t && funcdef_flag)
11053 return t;
11054
11055 return void_type_node;
11056 }
11057 }
11058
11059 /* Structure field. It may not be a function, except for C++ */
11060
11061 if (decl == NULL_TREE)
11062 {
11063 if (initialized)
11064 {
11065 if (!staticp)
11066 {
11067 /* An attempt is being made to initialize a non-static
11068 member. But, from [class.mem]:
11069
11070 4 A member-declarator can contain a
11071 constant-initializer only if it declares a static
11072 member (_class.static_) of integral or enumeration
11073 type, see _class.static.data_.
11074
11075 This used to be relatively common practice, but
11076 the rest of the compiler does not correctly
11077 handle the initialization unless the member is
11078 static so we make it static below. */
11079 cp_pedwarn ("ANSI C++ forbids initialization of member `%D'",
11080 declarator);
11081 cp_pedwarn ("making `%D' static", declarator);
11082 staticp = 1;
11083 }
11084
11085 if (uses_template_parms (type))
11086 /* We'll check at instantiation time. */
11087 ;
11088 else if (check_static_variable_definition (declarator,
11089 type))
11090 /* If we just return the declaration, crashes
11091 will sometimes occur. We therefore return
11092 void_type_node, as if this was a friend
11093 declaration, to cause callers to completely
11094 ignore this declaration. */
11095 return void_type_node;
11096 }
11097
11098 /* 9.2p13 [class.mem] */
11099 if (declarator == constructor_name (current_class_type)
11100 /* Divergence from the standard: In extern "C", we
11101 allow non-static data members here, because C does
11102 and /usr/include/netinet/in.h uses that. */
11103 && (staticp || ! in_system_header))
11104 cp_pedwarn ("ANSI C++ forbids data member `%D' with same name as enclosing class",
11105 declarator);
11106
11107 if (staticp)
11108 {
11109 /* C++ allows static class members. All other work
11110 for this is done by grokfield. */
11111 decl = build_lang_decl (VAR_DECL, declarator, type);
11112 TREE_STATIC (decl) = 1;
11113 /* In class context, 'static' means public access. */
11114 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl) = 1;
11115 }
11116 else
11117 {
11118 decl = build_lang_decl (FIELD_DECL, declarator, type);
11119 if (RIDBIT_SETP (RID_MUTABLE, specbits))
11120 {
11121 DECL_MUTABLE_P (decl) = 1;
11122 RIDBIT_RESET (RID_MUTABLE, specbits);
11123 }
11124 }
11125
11126 bad_specifiers (decl, "field", virtualp, quals != NULL_TREE,
11127 inlinep, friendp, raises != NULL_TREE);
11128 }
11129 }
11130 else if (TREE_CODE (type) == FUNCTION_TYPE || TREE_CODE (type) == METHOD_TYPE)
11131 {
11132 tree original_name;
11133 int publicp = 0;
11134
11135 if (! declarator)
11136 return NULL_TREE;
11137
11138 if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
11139 original_name = dname;
11140 else
11141 original_name = declarator;
11142
11143 if (RIDBIT_SETP (RID_AUTO, specbits))
11144 error ("storage class `auto' invalid for function `%s'", name);
11145 else if (RIDBIT_SETP (RID_REGISTER, specbits))
11146 error ("storage class `register' invalid for function `%s'", name);
11147
11148 /* Function declaration not at top level.
11149 Storage classes other than `extern' are not allowed
11150 and `extern' makes no difference. */
11151 if (! toplevel_bindings_p ()
11152 && (RIDBIT_SETP (RID_STATIC, specbits)
11153 || RIDBIT_SETP (RID_INLINE, specbits))
11154 && pedantic)
11155 {
11156 if (RIDBIT_SETP (RID_STATIC, specbits))
11157 pedwarn ("storage class `static' invalid for function `%s' declared out of global scope", name);
11158 else
11159 pedwarn ("storage class `inline' invalid for function `%s' declared out of global scope", name);
11160 }
11161
11162 if (ctype == NULL_TREE)
11163 {
11164 if (virtualp)
11165 {
11166 error ("virtual non-class function `%s'", name);
11167 virtualp = 0;
11168 }
11169 }
11170 else if (TREE_CODE (type) == FUNCTION_TYPE && staticp < 2)
11171 type = build_cplus_method_type (ctype, TREE_TYPE (type),
11172 TYPE_ARG_TYPES (type));
11173
11174 /* Record presence of `static'. */
11175 publicp = (ctype != NULL_TREE
11176 || RIDBIT_SETP (RID_EXTERN, specbits)
11177 || !RIDBIT_SETP (RID_STATIC, specbits));
11178
11179 decl = grokfndecl (ctype, type, original_name, declarator,
11180 virtualp, flags, quals, raises,
11181 1, friendp,
11182 publicp, inlinep, funcdef_flag,
11183 template_count, in_namespace);
11184 if (decl == NULL_TREE)
11185 return NULL_TREE;
11186
11187 if (staticp == 1)
11188 {
11189 int illegal_static = 0;
11190
11191 /* Don't allow a static member function in a class, and forbid
11192 declaring main to be static. */
11193 if (TREE_CODE (type) == METHOD_TYPE)
11194 {
11195 cp_pedwarn ("cannot declare member function `%D' to have static linkage", decl);
11196 illegal_static = 1;
11197 }
11198 else if (current_function_decl)
11199 {
11200 /* FIXME need arm citation */
11201 error ("cannot declare static function inside another function");
11202 illegal_static = 1;
11203 }
11204
11205 if (illegal_static)
11206 {
11207 staticp = 0;
11208 RIDBIT_RESET (RID_STATIC, specbits);
11209 }
11210 }
11211 }
11212 else
11213 {
11214 /* It's a variable. */
11215
11216 /* An uninitialized decl with `extern' is a reference. */
11217 decl = grokvardecl (type, declarator, &specbits,
11218 initialized,
11219 (type_quals & TYPE_QUAL_CONST) != 0,
11220 in_namespace);
11221 bad_specifiers (decl, "variable", virtualp, quals != NULL_TREE,
11222 inlinep, friendp, raises != NULL_TREE);
11223
11224 if (ctype)
11225 {
11226 DECL_CONTEXT (decl) = ctype;
11227 if (staticp == 1)
11228 {
11229 cp_pedwarn ("static member `%D' re-declared as static", decl);
11230 staticp = 0;
11231 RIDBIT_RESET (RID_STATIC, specbits);
11232 }
11233 if (RIDBIT_SETP (RID_REGISTER, specbits) && TREE_STATIC (decl))
11234 {
11235 cp_error ("static member `%D' declared `register'", decl);
11236 RIDBIT_RESET (RID_REGISTER, specbits);
11237 }
11238 if (RIDBIT_SETP (RID_EXTERN, specbits) && pedantic)
11239 {
11240 cp_pedwarn ("cannot explicitly declare member `%#D' to have extern linkage",
11241 decl);
11242 RIDBIT_RESET (RID_EXTERN, specbits);
11243 }
11244 }
11245 }
11246
11247 if (RIDBIT_SETP (RID_MUTABLE, specbits))
11248 {
11249 error ("`%s' cannot be declared mutable", name);
11250 }
11251
11252 /* Record `register' declaration for warnings on &
11253 and in case doing stupid register allocation. */
11254
11255 if (RIDBIT_SETP (RID_REGISTER, specbits))
11256 DECL_REGISTER (decl) = 1;
11257
11258 if (RIDBIT_SETP (RID_EXTERN, specbits))
11259 DECL_THIS_EXTERN (decl) = 1;
11260
11261 if (RIDBIT_SETP (RID_STATIC, specbits))
11262 DECL_THIS_STATIC (decl) = 1;
11263
11264 /* Record constancy and volatility. There's no need to do this
11265 when processing a template; we'll do this for the instantiated
11266 declaration based on the type of DECL. */
11267 if (!processing_template_decl)
11268 c_apply_type_quals_to_decl (type_quals, decl);
11269
11270 return decl;
11271 }
11272 }
11273 \f
11274 /* Tell if a parmlist/exprlist looks like an exprlist or a parmlist.
11275 An empty exprlist is a parmlist. An exprlist which
11276 contains only identifiers at the global level
11277 is a parmlist. Otherwise, it is an exprlist. */
11278
11279 int
11280 parmlist_is_exprlist (exprs)
11281 tree exprs;
11282 {
11283 if (exprs == NULL_TREE || TREE_PARMLIST (exprs))
11284 return 0;
11285
11286 if (toplevel_bindings_p ())
11287 {
11288 /* At the global level, if these are all identifiers,
11289 then it is a parmlist. */
11290 while (exprs)
11291 {
11292 if (TREE_CODE (TREE_VALUE (exprs)) != IDENTIFIER_NODE)
11293 return 1;
11294 exprs = TREE_CHAIN (exprs);
11295 }
11296 return 0;
11297 }
11298 return 1;
11299 }
11300
11301 /* Subroutine of start_function. Ensure that each of the parameter
11302 types (as listed in PARMS) is complete, as is required for a
11303 function definition. */
11304
11305 static void
11306 require_complete_types_for_parms (parms)
11307 tree parms;
11308 {
11309 while (parms)
11310 {
11311 tree type = TREE_TYPE (parms);
11312 if (TYPE_SIZE (complete_type (type)) == NULL_TREE)
11313 {
11314 if (DECL_NAME (parms))
11315 error ("parameter `%s' has incomplete type",
11316 IDENTIFIER_POINTER (DECL_NAME (parms)));
11317 else
11318 error ("parameter has incomplete type");
11319 TREE_TYPE (parms) = error_mark_node;
11320 }
11321 else
11322 layout_decl (parms, 0);
11323
11324 parms = TREE_CHAIN (parms);
11325 }
11326 }
11327
11328 /* Returns DECL if DECL is a local variable (or parameter). Returns
11329 NULL_TREE otherwise. */
11330
11331 static tree
11332 local_variable_p (t)
11333 tree t;
11334 {
11335 if ((TREE_CODE (t) == VAR_DECL
11336 /* A VAR_DECL with a context that is a _TYPE is a static data
11337 member. */
11338 && !TYPE_P (CP_DECL_CONTEXT (t))
11339 /* Any other non-local variable must be at namespace scope. */
11340 && TREE_CODE (CP_DECL_CONTEXT (t)) != NAMESPACE_DECL)
11341 || (TREE_CODE (t) == PARM_DECL))
11342 return t;
11343
11344 return NULL_TREE;
11345 }
11346
11347 /* Check that ARG, which is a default-argument expression for a
11348 parameter DECL, is legal. Returns ARG, or ERROR_MARK_NODE, if
11349 something goes wrong. DECL may also be a _TYPE node, rather than a
11350 DECL, if there is no DECL available. */
11351
11352 tree
11353 check_default_argument (decl, arg)
11354 tree decl;
11355 tree arg;
11356 {
11357 tree var;
11358 tree decl_type;
11359
11360 if (TREE_CODE (arg) == DEFAULT_ARG)
11361 /* We get a DEFAULT_ARG when looking at an in-class declaration
11362 with a default argument. Ignore the argument for now; we'll
11363 deal with it after the class is complete. */
11364 return arg;
11365
11366 if (processing_template_decl || uses_template_parms (arg))
11367 /* We don't do anything checking until instantiation-time. Note
11368 that there may be uninstantiated arguments even for an
11369 instantiated function, since default arguments are not
11370 instantiated until they are needed. */
11371 return arg;
11372
11373 if (TYPE_P (decl))
11374 {
11375 decl_type = decl;
11376 decl = NULL_TREE;
11377 }
11378 else
11379 decl_type = TREE_TYPE (decl);
11380
11381 if (arg == error_mark_node
11382 || decl == error_mark_node
11383 || TREE_TYPE (arg) == error_mark_node
11384 || decl_type == error_mark_node)
11385 /* Something already went wrong. There's no need to check
11386 further. */
11387 return error_mark_node;
11388
11389 /* [dcl.fct.default]
11390
11391 A default argument expression is implicitly converted to the
11392 parameter type. */
11393 if (!TREE_TYPE (arg)
11394 || !can_convert_arg (decl_type, TREE_TYPE (arg), arg))
11395 {
11396 if (decl)
11397 cp_error ("default argument for `%#D' has type `%T'",
11398 decl, TREE_TYPE (arg));
11399 else
11400 cp_error ("default argument for parameter of type `%T' has type `%T'",
11401 decl_type, TREE_TYPE (arg));
11402
11403 return error_mark_node;
11404 }
11405
11406 /* [dcl.fct.default]
11407
11408 Local variables shall not be used in default argument
11409 expressions.
11410
11411 The keyword `this' shall not be used in a default argument of a
11412 member function. */
11413 var = search_tree (arg, local_variable_p);
11414 if (var)
11415 {
11416 cp_error ("default argument `%E' uses local variable `%D'",
11417 arg, var);
11418 return error_mark_node;
11419 }
11420
11421 /* All is well. */
11422 return arg;
11423 }
11424
11425 /* Decode the list of parameter types for a function type.
11426 Given the list of things declared inside the parens,
11427 return a list of types.
11428
11429 The list we receive can have three kinds of elements:
11430 an IDENTIFIER_NODE for names given without types,
11431 a TREE_LIST node for arguments given as typespecs or names with typespecs,
11432 or void_type_node, to mark the end of an argument list
11433 when additional arguments are not permitted (... was not used).
11434
11435 FUNCDEF_FLAG is nonzero for a function definition, 0 for
11436 a mere declaration. A nonempty identifier-list gets an error message
11437 when FUNCDEF_FLAG is zero.
11438 If FUNCDEF_FLAG is 1, then parameter types must be complete.
11439 If FUNCDEF_FLAG is -1, then parameter types may be incomplete.
11440
11441 If all elements of the input list contain types,
11442 we return a list of the types.
11443 If all elements contain no type (except perhaps a void_type_node
11444 at the end), we return a null list.
11445 If some have types and some do not, it is an error, and we
11446 return a null list.
11447
11448 Also set last_function_parms to either
11449 a list of names (IDENTIFIER_NODEs) or a chain of PARM_DECLs.
11450 A list of names is converted to a chain of PARM_DECLs
11451 by store_parm_decls so that ultimately it is always a chain of decls.
11452
11453 Note that in C++, parameters can take default values. These default
11454 values are in the TREE_PURPOSE field of the TREE_LIST. It is
11455 an error to specify default values which are followed by parameters
11456 that have no default values, or an ELLIPSES. For simplicities sake,
11457 only parameters which are specified with their types can take on
11458 default values. */
11459
11460 static tree
11461 grokparms (first_parm, funcdef_flag)
11462 tree first_parm;
11463 int funcdef_flag;
11464 {
11465 tree result = NULL_TREE;
11466 tree decls = NULL_TREE;
11467
11468 if (first_parm != NULL_TREE
11469 && TREE_CODE (TREE_VALUE (first_parm)) == IDENTIFIER_NODE)
11470 {
11471 if (! funcdef_flag)
11472 pedwarn ("parameter names (without types) in function declaration");
11473 last_function_parms = first_parm;
11474 return NULL_TREE;
11475 }
11476 else if (first_parm != NULL_TREE
11477 && TREE_CODE (TREE_VALUE (first_parm)) != TREE_LIST
11478 && TREE_CODE (TREE_VALUE (first_parm)) != VOID_TYPE)
11479 my_friendly_abort (145);
11480 else
11481 {
11482 /* Types were specified. This is a list of declarators
11483 each represented as a TREE_LIST node. */
11484 register tree parm, chain;
11485 int any_init = 0, any_error = 0;
11486
11487 if (first_parm != NULL_TREE)
11488 {
11489 tree last_result = NULL_TREE;
11490 tree last_decl = NULL_TREE;
11491
11492 for (parm = first_parm; parm != NULL_TREE; parm = chain)
11493 {
11494 tree type = NULL_TREE, list_node = parm;
11495 register tree decl = TREE_VALUE (parm);
11496 tree init = TREE_PURPOSE (parm);
11497
11498 chain = TREE_CHAIN (parm);
11499 /* @@ weak defense against parse errors. */
11500 if (TREE_CODE (decl) != VOID_TYPE
11501 && TREE_CODE (decl) != TREE_LIST)
11502 {
11503 /* Give various messages as the need arises. */
11504 if (TREE_CODE (decl) == STRING_CST)
11505 cp_error ("invalid string constant `%E'", decl);
11506 else if (TREE_CODE (decl) == INTEGER_CST)
11507 error ("invalid integer constant in parameter list, did you forget to give parameter name?");
11508 continue;
11509 }
11510
11511 if (TREE_CODE (decl) != VOID_TYPE)
11512 {
11513 decl = grokdeclarator (TREE_VALUE (decl),
11514 TREE_PURPOSE (decl),
11515 PARM, init != NULL_TREE,
11516 NULL_TREE);
11517 if (! decl || TREE_TYPE (decl) == error_mark_node)
11518 continue;
11519
11520 /* Top-level qualifiers on the parameters are
11521 ignored for function types. */
11522 type = TYPE_MAIN_VARIANT (TREE_TYPE (decl));
11523
11524 if (TREE_CODE (type) == VOID_TYPE)
11525 decl = void_type_node;
11526 else if (TREE_CODE (type) == METHOD_TYPE)
11527 {
11528 if (DECL_NAME (decl))
11529 /* Cannot use the decl here because
11530 we don't have DECL_CONTEXT set up yet. */
11531 cp_error ("parameter `%D' invalidly declared method type",
11532 DECL_NAME (decl));
11533 else
11534 error ("parameter invalidly declared method type");
11535 type = build_pointer_type (type);
11536 TREE_TYPE (decl) = type;
11537 }
11538 else if (TREE_CODE (type) == OFFSET_TYPE)
11539 {
11540 if (DECL_NAME (decl))
11541 cp_error ("parameter `%D' invalidly declared offset type",
11542 DECL_NAME (decl));
11543 else
11544 error ("parameter invalidly declared offset type");
11545 type = build_pointer_type (type);
11546 TREE_TYPE (decl) = type;
11547 }
11548 else if (abstract_virtuals_error (decl, type))
11549 any_error = 1; /* Seems like a good idea. */
11550 else if (POINTER_TYPE_P (type))
11551 {
11552 tree t = type;
11553 while (POINTER_TYPE_P (t)
11554 || (TREE_CODE (t) == ARRAY_TYPE
11555 && TYPE_DOMAIN (t) != NULL_TREE))
11556 t = TREE_TYPE (t);
11557 if (TREE_CODE (t) == ARRAY_TYPE)
11558 cp_error ("parameter type `%T' includes %s to array of unknown bound",
11559 type,
11560 TYPE_PTR_P (type) ? "pointer" : "reference");
11561 }
11562 }
11563
11564 if (TREE_CODE (decl) == VOID_TYPE)
11565 {
11566 if (result == NULL_TREE)
11567 {
11568 result = void_list_node;
11569 last_result = result;
11570 }
11571 else
11572 {
11573 TREE_CHAIN (last_result) = void_list_node;
11574 last_result = void_list_node;
11575 }
11576 if (chain
11577 && (chain != void_list_node || TREE_CHAIN (chain)))
11578 error ("`void' in parameter list must be entire list");
11579 break;
11580 }
11581
11582 /* Since there is a prototype, args are passed in their own types. */
11583 DECL_ARG_TYPE (decl) = TREE_TYPE (decl);
11584 if (PROMOTE_PROTOTYPES
11585 && (TREE_CODE (type) == INTEGER_TYPE
11586 || TREE_CODE (type) == ENUMERAL_TYPE)
11587 && TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node))
11588 DECL_ARG_TYPE (decl) = integer_type_node;
11589 if (!any_error && init)
11590 {
11591 any_init++;
11592 init = check_default_argument (decl, init);
11593 }
11594 else
11595 init = NULL_TREE;
11596
11597 if (decls == NULL_TREE)
11598 {
11599 decls = decl;
11600 last_decl = decls;
11601 }
11602 else
11603 {
11604 TREE_CHAIN (last_decl) = decl;
11605 last_decl = decl;
11606 }
11607 if (! current_function_decl && TREE_PERMANENT (list_node))
11608 {
11609 TREE_PURPOSE (list_node) = init;
11610 TREE_VALUE (list_node) = type;
11611 TREE_CHAIN (list_node) = NULL_TREE;
11612 }
11613 else
11614 list_node = tree_cons (init, type, NULL_TREE);
11615 if (result == NULL_TREE)
11616 {
11617 result = list_node;
11618 last_result = result;
11619 }
11620 else
11621 {
11622 TREE_CHAIN (last_result) = list_node;
11623 last_result = list_node;
11624 }
11625 }
11626 if (last_result)
11627 TREE_CHAIN (last_result) = NULL_TREE;
11628 /* If there are no parameters, and the function does not end
11629 with `...', then last_decl will be NULL_TREE. */
11630 if (last_decl != NULL_TREE)
11631 TREE_CHAIN (last_decl) = NULL_TREE;
11632 }
11633 }
11634
11635 last_function_parms = decls;
11636
11637 return result;
11638 }
11639
11640 /* Called from the parser to update an element of TYPE_ARG_TYPES for some
11641 FUNCTION_TYPE with the newly parsed version of its default argument, which
11642 was previously digested as text. See snarf_defarg et al in lex.c. */
11643
11644 void
11645 replace_defarg (arg, init)
11646 tree arg, init;
11647 {
11648 if (! processing_template_decl
11649 && ! can_convert_arg (TREE_VALUE (arg), TREE_TYPE (init), init))
11650 cp_pedwarn ("invalid type `%T' for default argument to `%T'",
11651 TREE_TYPE (init), TREE_VALUE (arg));
11652 TREE_PURPOSE (arg) = init;
11653 }
11654 \f
11655 int
11656 copy_args_p (d)
11657 tree d;
11658 {
11659 tree t = FUNCTION_ARG_CHAIN (d);
11660 if (DECL_CONSTRUCTOR_P (d)
11661 && TYPE_USES_VIRTUAL_BASECLASSES (DECL_CONTEXT (d)))
11662 t = TREE_CHAIN (t);
11663 if (t && TREE_CODE (TREE_VALUE (t)) == REFERENCE_TYPE
11664 && (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_VALUE (t)))
11665 == DECL_CLASS_CONTEXT (d))
11666 && (TREE_CHAIN (t) == NULL_TREE
11667 || TREE_CHAIN (t) == void_list_node
11668 || TREE_PURPOSE (TREE_CHAIN (t))))
11669 return 1;
11670 return 0;
11671 }
11672
11673 /* These memoizing functions keep track of special properties which
11674 a class may have. `grok_ctor_properties' notices whether a class
11675 has a constructor of the form X(X&), and also complains
11676 if the class has a constructor of the form X(X).
11677 `grok_op_properties' takes notice of the various forms of
11678 operator= which are defined, as well as what sorts of type conversion
11679 may apply. Both functions take a FUNCTION_DECL as an argument. */
11680
11681 int
11682 grok_ctor_properties (ctype, decl)
11683 tree ctype, decl;
11684 {
11685 tree parmtypes = FUNCTION_ARG_CHAIN (decl);
11686 tree parmtype = parmtypes ? TREE_VALUE (parmtypes) : void_type_node;
11687
11688 /* When a type has virtual baseclasses, a magical first int argument is
11689 added to any ctor so we can tell if the class has been initialized
11690 yet. This could screw things up in this function, so we deliberately
11691 ignore the leading int if we're in that situation. */
11692 if (TYPE_USES_VIRTUAL_BASECLASSES (ctype))
11693 {
11694 my_friendly_assert (parmtypes
11695 && TREE_VALUE (parmtypes) == integer_type_node,
11696 980529);
11697 parmtypes = TREE_CHAIN (parmtypes);
11698 parmtype = TREE_VALUE (parmtypes);
11699 }
11700
11701 /* [class.copy]
11702
11703 A non-template constructor for class X is a copy constructor if
11704 its first parameter is of type X&, const X&, volatile X& or const
11705 volatile X&, and either there are no other parameters or else all
11706 other parameters have default arguments. */
11707 if (TREE_CODE (parmtype) == REFERENCE_TYPE
11708 && TYPE_MAIN_VARIANT (TREE_TYPE (parmtype)) == ctype
11709 && (TREE_CHAIN (parmtypes) == NULL_TREE
11710 || TREE_CHAIN (parmtypes) == void_list_node
11711 || TREE_PURPOSE (TREE_CHAIN (parmtypes)))
11712 && !(DECL_TEMPLATE_INSTANTIATION (decl)
11713 && is_member_template (DECL_TI_TEMPLATE (decl))))
11714 {
11715 TYPE_HAS_INIT_REF (ctype) = 1;
11716 if (CP_TYPE_CONST_P (TREE_TYPE (parmtype)))
11717 TYPE_HAS_CONST_INIT_REF (ctype) = 1;
11718 }
11719 /* [class.copy]
11720
11721 A declaration of a constructor for a class X is ill-formed if its
11722 first parameter is of type (optionally cv-qualified) X and either
11723 there are no other parameters or else all other parameters have
11724 default arguments.
11725
11726 We *don't* complain about member template instantiations that
11727 have this form, though; they can occur as we try to decide what
11728 constructor to use during overload resolution. Since overload
11729 resolution will never prefer such a constructor to the
11730 non-template copy constructor (which is either explicitly or
11731 implicitly defined), there's no need to worry about their
11732 existence. Theoretically, they should never even be
11733 instantiated, but that's hard to forestall. */
11734 else if (TYPE_MAIN_VARIANT (parmtype) == ctype
11735 && (TREE_CHAIN (parmtypes) == NULL_TREE
11736 || TREE_CHAIN (parmtypes) == void_list_node
11737 || TREE_PURPOSE (TREE_CHAIN (parmtypes)))
11738 && !(DECL_TEMPLATE_INSTANTIATION (decl)
11739 && is_member_template (DECL_TI_TEMPLATE (decl))))
11740 {
11741 cp_error ("invalid constructor; you probably meant `%T (const %T&)'",
11742 ctype, ctype);
11743 SET_IDENTIFIER_ERROR_LOCUS (DECL_NAME (decl), ctype);
11744 return 0;
11745 }
11746 else if (TREE_CODE (parmtype) == VOID_TYPE
11747 || TREE_PURPOSE (parmtypes) != NULL_TREE)
11748 TYPE_HAS_DEFAULT_CONSTRUCTOR (ctype) = 1;
11749
11750 return 1;
11751 }
11752
11753 /* An operator with this name can be either unary or binary. */
11754
11755 static int
11756 ambi_op_p (name)
11757 tree name;
11758 {
11759 return (name == ansi_opname [(int) INDIRECT_REF]
11760 || name == ansi_opname [(int) ADDR_EXPR]
11761 || name == ansi_opname [(int) NEGATE_EXPR]
11762 || name == ansi_opname[(int) POSTINCREMENT_EXPR]
11763 || name == ansi_opname[(int) POSTDECREMENT_EXPR]
11764 || name == ansi_opname [(int) CONVERT_EXPR]);
11765 }
11766
11767 /* An operator with this name can only be unary. */
11768
11769 static int
11770 unary_op_p (name)
11771 tree name;
11772 {
11773 return (name == ansi_opname [(int) TRUTH_NOT_EXPR]
11774 || name == ansi_opname [(int) BIT_NOT_EXPR]
11775 || name == ansi_opname [(int) COMPONENT_REF]
11776 || IDENTIFIER_TYPENAME_P (name));
11777 }
11778
11779 /* Do a little sanity-checking on how they declared their operator. */
11780
11781 void
11782 grok_op_properties (decl, virtualp, friendp)
11783 tree decl;
11784 int virtualp, friendp;
11785 {
11786 tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
11787 int methodp = (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE);
11788 tree name = DECL_NAME (decl);
11789
11790 if (current_class_type == NULL_TREE)
11791 friendp = 1;
11792
11793 if (! friendp)
11794 {
11795 /* [class.copy]
11796
11797 A user-declared copy assignment operator X::operator= is a
11798 non-static non-template member function of class X with
11799 exactly one parameter of type X, X&, const X&, volatile X& or
11800 const volatile X&. */
11801 if (name == ansi_opname[(int) MODIFY_EXPR]
11802 && !(DECL_TEMPLATE_INSTANTIATION (decl)
11803 && is_member_template (DECL_TI_TEMPLATE (decl))))
11804 ;
11805 else if (name == ansi_opname[(int) CALL_EXPR])
11806 TYPE_OVERLOADS_CALL_EXPR (current_class_type) = 1;
11807 else if (name == ansi_opname[(int) ARRAY_REF])
11808 TYPE_OVERLOADS_ARRAY_REF (current_class_type) = 1;
11809 else if (name == ansi_opname[(int) COMPONENT_REF]
11810 || name == ansi_opname[(int) MEMBER_REF])
11811 TYPE_OVERLOADS_ARROW (current_class_type) = 1;
11812 else if (name == ansi_opname[(int) NEW_EXPR])
11813 TYPE_GETS_NEW (current_class_type) |= 1;
11814 else if (name == ansi_opname[(int) DELETE_EXPR])
11815 TYPE_GETS_DELETE (current_class_type) |= 1;
11816 else if (name == ansi_opname[(int) VEC_NEW_EXPR])
11817 TYPE_GETS_NEW (current_class_type) |= 2;
11818 else if (name == ansi_opname[(int) VEC_DELETE_EXPR])
11819 TYPE_GETS_DELETE (current_class_type) |= 2;
11820 }
11821
11822 if (name == ansi_opname[(int) NEW_EXPR]
11823 || name == ansi_opname[(int) VEC_NEW_EXPR])
11824 {
11825 /* When the compiler encounters the definition of A::operator new, it
11826 doesn't look at the class declaration to find out if it's static. */
11827 if (methodp)
11828 revert_static_member_fn (&decl, NULL, NULL);
11829
11830 /* Take care of function decl if we had syntax errors. */
11831 if (argtypes == NULL_TREE)
11832 TREE_TYPE (decl)
11833 = build_function_type (ptr_type_node,
11834 hash_tree_chain (integer_type_node,
11835 void_list_node));
11836 else
11837 TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
11838 }
11839 else if (name == ansi_opname[(int) DELETE_EXPR]
11840 || name == ansi_opname[(int) VEC_DELETE_EXPR])
11841 {
11842 if (methodp)
11843 revert_static_member_fn (&decl, NULL, NULL);
11844
11845 if (argtypes == NULL_TREE)
11846 TREE_TYPE (decl)
11847 = build_function_type (void_type_node,
11848 hash_tree_chain (ptr_type_node,
11849 void_list_node));
11850 else
11851 {
11852 TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
11853
11854 if (! friendp && name == ansi_opname[(int) VEC_DELETE_EXPR]
11855 && (TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)))
11856 != void_list_node))
11857 TYPE_VEC_DELETE_TAKES_SIZE (current_class_type) = 1;
11858 }
11859 }
11860 else
11861 {
11862 /* An operator function must either be a non-static member function
11863 or have at least one parameter of a class, a reference to a class,
11864 an enumeration, or a reference to an enumeration. 13.4.0.6 */
11865 if (! methodp || DECL_STATIC_FUNCTION_P (decl))
11866 {
11867 if (IDENTIFIER_TYPENAME_P (name)
11868 || name == ansi_opname[(int) CALL_EXPR]
11869 || name == ansi_opname[(int) MODIFY_EXPR]
11870 || name == ansi_opname[(int) COMPONENT_REF]
11871 || name == ansi_opname[(int) ARRAY_REF])
11872 cp_error ("`%D' must be a nonstatic member function", decl);
11873 else
11874 {
11875 tree p = argtypes;
11876
11877 if (DECL_STATIC_FUNCTION_P (decl))
11878 cp_error ("`%D' must be either a non-static member function or a non-member function", decl);
11879
11880 if (p)
11881 for (; TREE_CODE (TREE_VALUE (p)) != VOID_TYPE ; p = TREE_CHAIN (p))
11882 {
11883 tree arg = TREE_VALUE (p);
11884 if (TREE_CODE (arg) == REFERENCE_TYPE)
11885 arg = TREE_TYPE (arg);
11886
11887 /* This lets bad template code slip through. */
11888 if (IS_AGGR_TYPE (arg)
11889 || TREE_CODE (arg) == ENUMERAL_TYPE
11890 || TREE_CODE (arg) == TEMPLATE_TYPE_PARM
11891 || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
11892 goto foundaggr;
11893 }
11894 cp_error
11895 ("`%D' must have an argument of class or enumerated type",
11896 decl);
11897 foundaggr:
11898 ;
11899 }
11900 }
11901
11902 if (name == ansi_opname[(int) CALL_EXPR])
11903 return; /* No restrictions on args. */
11904
11905 if (IDENTIFIER_TYPENAME_P (name) && ! DECL_TEMPLATE_INFO (decl))
11906 {
11907 tree t = TREE_TYPE (name);
11908 if (TREE_CODE (t) == VOID_TYPE)
11909 pedwarn ("void is not a valid type conversion operator");
11910 else if (! friendp)
11911 {
11912 int ref = (TREE_CODE (t) == REFERENCE_TYPE);
11913 const char *what = 0;
11914 if (ref)
11915 t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
11916
11917 if (t == current_class_type)
11918 what = "the same type";
11919 /* Don't force t to be complete here. */
11920 else if (IS_AGGR_TYPE (t)
11921 && TYPE_SIZE (t)
11922 && DERIVED_FROM_P (t, current_class_type))
11923 what = "a base class";
11924
11925 if (what)
11926 warning ("conversion to %s%s will never use a type conversion operator",
11927 ref ? "a reference to " : "", what);
11928 }
11929 }
11930
11931 if (name == ansi_opname[(int) MODIFY_EXPR])
11932 {
11933 tree parmtype;
11934
11935 if (list_length (argtypes) != 3 && methodp)
11936 {
11937 cp_error ("`%D' must take exactly one argument", decl);
11938 return;
11939 }
11940 parmtype = TREE_VALUE (TREE_CHAIN (argtypes));
11941
11942 if (copy_assignment_arg_p (parmtype, virtualp)
11943 && ! friendp)
11944 {
11945 TYPE_HAS_ASSIGN_REF (current_class_type) = 1;
11946 if (TREE_CODE (parmtype) != REFERENCE_TYPE
11947 || CP_TYPE_CONST_P (TREE_TYPE (parmtype)))
11948 TYPE_HAS_CONST_ASSIGN_REF (current_class_type) = 1;
11949 }
11950 }
11951 else if (name == ansi_opname[(int) COND_EXPR])
11952 {
11953 /* 13.4.0.3 */
11954 cp_error ("ANSI C++ prohibits overloading operator ?:");
11955 }
11956 else if (ambi_op_p (name))
11957 {
11958 if (list_length (argtypes) == 2)
11959 /* prefix */;
11960 else if (list_length (argtypes) == 3)
11961 {
11962 if ((name == ansi_opname[(int) POSTINCREMENT_EXPR]
11963 || name == ansi_opname[(int) POSTDECREMENT_EXPR])
11964 && ! processing_template_decl
11965 && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)), integer_type_node))
11966 {
11967 if (methodp)
11968 cp_error ("postfix `%D' must take `int' as its argument",
11969 decl);
11970 else
11971 cp_error
11972 ("postfix `%D' must take `int' as its second argument",
11973 decl);
11974 }
11975 }
11976 else
11977 {
11978 if (methodp)
11979 cp_error ("`%D' must take either zero or one argument", decl);
11980 else
11981 cp_error ("`%D' must take either one or two arguments", decl);
11982 }
11983
11984 /* More Effective C++ rule 6. */
11985 if (warn_ecpp
11986 && (name == ansi_opname[(int) POSTINCREMENT_EXPR]
11987 || name == ansi_opname[(int) POSTDECREMENT_EXPR]))
11988 {
11989 tree arg = TREE_VALUE (argtypes);
11990 tree ret = TREE_TYPE (TREE_TYPE (decl));
11991 if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
11992 arg = TREE_TYPE (arg);
11993 arg = TYPE_MAIN_VARIANT (arg);
11994 if (list_length (argtypes) == 2)
11995 {
11996 if (TREE_CODE (ret) != REFERENCE_TYPE
11997 || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)),
11998 arg))
11999 cp_warning ("prefix `%D' should return `%T'", decl,
12000 build_reference_type (arg));
12001 }
12002 else
12003 {
12004 if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
12005 cp_warning ("postfix `%D' should return `%T'", decl, arg);
12006 }
12007 }
12008 }
12009 else if (unary_op_p (name))
12010 {
12011 if (list_length (argtypes) != 2)
12012 {
12013 if (methodp)
12014 cp_error ("`%D' must take `void'", decl);
12015 else
12016 cp_error ("`%D' must take exactly one argument", decl);
12017 }
12018 }
12019 else /* if (binary_op_p (name)) */
12020 {
12021 if (list_length (argtypes) != 3)
12022 {
12023 if (methodp)
12024 cp_error ("`%D' must take exactly one argument", decl);
12025 else
12026 cp_error ("`%D' must take exactly two arguments", decl);
12027 }
12028
12029 /* More Effective C++ rule 7. */
12030 if (warn_ecpp
12031 && (name == ansi_opname [TRUTH_ANDIF_EXPR]
12032 || name == ansi_opname [TRUTH_ORIF_EXPR]
12033 || name == ansi_opname [COMPOUND_EXPR]))
12034 cp_warning ("user-defined `%D' always evaluates both arguments",
12035 decl);
12036 }
12037
12038 /* Effective C++ rule 23. */
12039 if (warn_ecpp
12040 && list_length (argtypes) == 3
12041 && (name == ansi_opname [PLUS_EXPR]
12042 || name == ansi_opname [MINUS_EXPR]
12043 || name == ansi_opname [TRUNC_DIV_EXPR]
12044 || name == ansi_opname [MULT_EXPR])
12045 && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
12046 cp_warning ("`%D' should return by value", decl);
12047
12048 /* 13.4.0.8 */
12049 if (argtypes)
12050 for (; argtypes != void_list_node ; argtypes = TREE_CHAIN (argtypes))
12051 if (TREE_PURPOSE (argtypes))
12052 {
12053 TREE_PURPOSE (argtypes) = NULL_TREE;
12054 if (name == ansi_opname[(int) POSTINCREMENT_EXPR]
12055 || name == ansi_opname[(int) POSTDECREMENT_EXPR])
12056 {
12057 if (pedantic)
12058 cp_pedwarn ("`%D' cannot have default arguments", decl);
12059 }
12060 else
12061 cp_error ("`%D' cannot have default arguments", decl);
12062 }
12063 }
12064 }
12065 \f
12066 static const char *
12067 tag_name (code)
12068 enum tag_types code;
12069 {
12070 switch (code)
12071 {
12072 case record_type:
12073 return "struct";
12074 case class_type:
12075 return "class";
12076 case union_type:
12077 return "union ";
12078 case enum_type:
12079 return "enum";
12080 default:
12081 my_friendly_abort (981122);
12082 }
12083 }
12084
12085 /* Get the struct, enum or union (CODE says which) with tag NAME.
12086 Define the tag as a forward-reference if it is not defined.
12087
12088 C++: If a class derivation is given, process it here, and report
12089 an error if multiple derivation declarations are not identical.
12090
12091 If this is a definition, come in through xref_tag and only look in
12092 the current frame for the name (since C++ allows new names in any
12093 scope.) */
12094
12095 tree
12096 xref_tag (code_type_node, name, globalize)
12097 tree code_type_node;
12098 tree name;
12099 int globalize;
12100 {
12101 enum tag_types tag_code;
12102 enum tree_code code;
12103 int temp = 0;
12104 register tree ref, t;
12105 struct binding_level *b = current_binding_level;
12106 int got_type = 0;
12107 tree attributes = NULL_TREE;
12108 tree context = NULL_TREE;
12109
12110 /* If we are called from the parser, code_type_node will sometimes be a
12111 TREE_LIST. This indicates that the user wrote
12112 "class __attribute__ ((foo)) bar". Extract the attributes so we can
12113 use them later. */
12114 if (TREE_CODE (code_type_node) == TREE_LIST)
12115 {
12116 attributes = TREE_PURPOSE (code_type_node);
12117 code_type_node = TREE_VALUE (code_type_node);
12118 }
12119
12120 tag_code = (enum tag_types) TREE_INT_CST_LOW (code_type_node);
12121 switch (tag_code)
12122 {
12123 case record_type:
12124 case class_type:
12125 code = RECORD_TYPE;
12126 break;
12127 case union_type:
12128 code = UNION_TYPE;
12129 break;
12130 case enum_type:
12131 code = ENUMERAL_TYPE;
12132 break;
12133 default:
12134 my_friendly_abort (18);
12135 }
12136
12137 /* If a cross reference is requested, look up the type
12138 already defined for this tag and return it. */
12139 if (TREE_CODE_CLASS (TREE_CODE (name)) == 't')
12140 {
12141 t = name;
12142 name = TYPE_IDENTIFIER (t);
12143 got_type = 1;
12144 }
12145 else
12146 t = IDENTIFIER_TYPE_VALUE (name);
12147
12148 if (t && TREE_CODE (t) != code && TREE_CODE (t) != TEMPLATE_TYPE_PARM
12149 && TREE_CODE (t) != TEMPLATE_TEMPLATE_PARM)
12150 t = NULL_TREE;
12151
12152 if (! globalize)
12153 {
12154 /* If we know we are defining this tag, only look it up in
12155 this scope and don't try to find it as a type. */
12156 ref = lookup_tag (code, name, b, 1);
12157 }
12158 else
12159 {
12160 if (t)
12161 {
12162 /* [dcl.type.elab] If the identifier resolves to a
12163 typedef-name or a template type-parameter, the
12164 elaborated-type-specifier is ill-formed. */
12165 if (t != TYPE_MAIN_VARIANT (t)
12166 || (CLASS_TYPE_P (t) && TYPE_WAS_ANONYMOUS (t)))
12167 cp_pedwarn ("using typedef-name `%D' after `%s'",
12168 TYPE_NAME (t), tag_name (tag_code));
12169 else if (TREE_CODE (t) == TEMPLATE_TYPE_PARM)
12170 cp_error ("using template type parameter `%T' after `%s'",
12171 t, tag_name (tag_code));
12172
12173 ref = t;
12174 }
12175 else
12176 ref = lookup_tag (code, name, b, 0);
12177
12178 if (! ref)
12179 {
12180 /* Try finding it as a type declaration. If that wins,
12181 use it. */
12182 ref = lookup_name (name, 1);
12183
12184 if (ref != NULL_TREE
12185 && processing_template_decl
12186 && DECL_CLASS_TEMPLATE_P (ref)
12187 && template_class_depth (current_class_type) == 0)
12188 /* Since GLOBALIZE is true, we're declaring a global
12189 template, so we want this type. */
12190 ref = DECL_RESULT (ref);
12191
12192 if (ref && TREE_CODE (ref) == TYPE_DECL
12193 && TREE_CODE (TREE_TYPE (ref)) == code)
12194 ref = TREE_TYPE (ref);
12195 else
12196 ref = NULL_TREE;
12197 }
12198
12199 if (ref && current_class_type
12200 && template_class_depth (current_class_type)
12201 && PROCESSING_REAL_TEMPLATE_DECL_P ())
12202 {
12203 /* Since GLOBALIZE is non-zero, we are not looking at a
12204 definition of this tag. Since, in addition, we are currently
12205 processing a (member) template declaration of a template
12206 class, we must be very careful; consider:
12207
12208 template <class X>
12209 struct S1
12210
12211 template <class U>
12212 struct S2
12213 { template <class V>
12214 friend struct S1; };
12215
12216 Here, the S2::S1 declaration should not be confused with the
12217 outer declaration. In particular, the inner version should
12218 have a template parameter of level 2, not level 1. This
12219 would be particularly important if the member declaration
12220 were instead:
12221
12222 template <class V = U> friend struct S1;
12223
12224 say, when we should tsubst into `U' when instantiating
12225 S2. On the other hand, when presented with:
12226
12227 template <class T>
12228 struct S1 {
12229 template <class U>
12230 struct S2 {};
12231 template <class U>
12232 friend struct S2;
12233 };
12234
12235 we must find the inner binding eventually. We
12236 accomplish this by making sure that the new type we
12237 create to represent this declaration has the right
12238 TYPE_CONTEXT. */
12239 context = TYPE_CONTEXT (ref);
12240 ref = NULL_TREE;
12241 }
12242 }
12243
12244 push_obstacks_nochange ();
12245
12246 if (! ref)
12247 {
12248 /* If no such tag is yet defined, create a forward-reference node
12249 and record it as the "definition".
12250 When a real declaration of this type is found,
12251 the forward-reference will be altered into a real type. */
12252
12253 /* In C++, since these migrate into the global scope, we must
12254 build them on the permanent obstack. */
12255
12256 temp = allocation_temporary_p ();
12257 if (temp)
12258 end_temporary_allocation ();
12259
12260 if (code == ENUMERAL_TYPE)
12261 {
12262 cp_error ("use of enum `%#D' without previous declaration", name);
12263
12264 ref = make_node (ENUMERAL_TYPE);
12265
12266 /* Give the type a default layout like unsigned int
12267 to avoid crashing if it does not get defined. */
12268 TYPE_MODE (ref) = TYPE_MODE (unsigned_type_node);
12269 TYPE_ALIGN (ref) = TYPE_ALIGN (unsigned_type_node);
12270 TREE_UNSIGNED (ref) = 1;
12271 TYPE_PRECISION (ref) = TYPE_PRECISION (unsigned_type_node);
12272 TYPE_MIN_VALUE (ref) = TYPE_MIN_VALUE (unsigned_type_node);
12273 TYPE_MAX_VALUE (ref) = TYPE_MAX_VALUE (unsigned_type_node);
12274
12275 /* Enable us to recognize when a type is created in class context.
12276 To do nested classes correctly, this should probably be cleared
12277 out when we leave this classes scope. Currently this in only
12278 done in `start_enum'. */
12279
12280 pushtag (name, ref, globalize);
12281 }
12282 else
12283 {
12284 struct binding_level *old_b = class_binding_level;
12285
12286 ref = make_lang_type (code);
12287 TYPE_CONTEXT (ref) = context;
12288
12289 #ifdef NONNESTED_CLASSES
12290 /* Class types don't nest the way enums do. */
12291 class_binding_level = (struct binding_level *)0;
12292 #endif
12293 pushtag (name, ref, globalize);
12294 class_binding_level = old_b;
12295 }
12296 }
12297 else
12298 {
12299 /* If it no longer looks like a nested type, make sure it's
12300 in global scope.
12301 If it is not an IDENTIFIER, this is not a declaration */
12302 if (b->namespace_p && !class_binding_level
12303 && TREE_CODE (name) == IDENTIFIER_NODE)
12304 {
12305 if (IDENTIFIER_NAMESPACE_VALUE (name) == NULL_TREE)
12306 SET_IDENTIFIER_NAMESPACE_VALUE (name, TYPE_NAME (ref));
12307 }
12308
12309 if (!globalize && processing_template_decl && IS_AGGR_TYPE (ref))
12310 redeclare_class_template (ref, current_template_parms);
12311 }
12312
12313 /* Until the type is defined, tentatively accept whatever
12314 structure tag the user hands us. */
12315 if (TYPE_SIZE (ref) == NULL_TREE
12316 && ref != current_class_type
12317 /* Have to check this, in case we have contradictory tag info. */
12318 && IS_AGGR_TYPE_CODE (TREE_CODE (ref)))
12319 {
12320 if (tag_code == class_type)
12321 CLASSTYPE_DECLARED_CLASS (ref) = 1;
12322 else if (tag_code == record_type)
12323 CLASSTYPE_DECLARED_CLASS (ref) = 0;
12324 }
12325
12326 pop_obstacks ();
12327
12328 TREE_TYPE (ref) = attributes;
12329
12330 return ref;
12331 }
12332
12333 tree
12334 xref_tag_from_type (old, id, globalize)
12335 tree old, id;
12336 int globalize;
12337 {
12338 tree code_type_node;
12339
12340 if (TREE_CODE (old) == RECORD_TYPE)
12341 code_type_node = (CLASSTYPE_DECLARED_CLASS (old)
12342 ? class_type_node : record_type_node);
12343 else
12344 code_type_node = union_type_node;
12345
12346 if (id == NULL_TREE)
12347 id = TYPE_IDENTIFIER (old);
12348
12349 return xref_tag (code_type_node, id, globalize);
12350 }
12351
12352 /* REF is a type (named NAME), for which we have just seen some
12353 baseclasses. BINFO is a list of those baseclasses; the
12354 TREE_PURPOSE is an access_* node, and the TREE_VALUE is the type of
12355 the base-class. CODE_TYPE_NODE indicates whether REF is a class,
12356 struct, or union. */
12357
12358 void
12359 xref_basetypes (code_type_node, name, ref, binfo)
12360 tree code_type_node;
12361 tree name, ref;
12362 tree binfo;
12363 {
12364 /* In the declaration `A : X, Y, ... Z' we mark all the types
12365 (A, X, Y, ..., Z) so we can check for duplicates. */
12366 tree binfos;
12367 tree base;
12368
12369 int i, len;
12370 enum tag_types tag_code = (enum tag_types) TREE_INT_CST_LOW (code_type_node);
12371
12372 if (tag_code == union_type)
12373 {
12374 cp_error ("derived union `%T' invalid", ref);
12375 return;
12376 }
12377
12378 len = list_length (binfo);
12379 push_obstacks (TYPE_OBSTACK (ref), TYPE_OBSTACK (ref));
12380
12381 /* First, make sure that any templates in base-classes are
12382 instantiated. This ensures that if we call ourselves recursively
12383 we do not get confused about which classes are marked and which
12384 are not. */
12385 for (base = binfo; base; base = TREE_CHAIN (base))
12386 complete_type (TREE_VALUE (base));
12387
12388 SET_CLASSTYPE_MARKED (ref);
12389 BINFO_BASETYPES (TYPE_BINFO (ref)) = binfos = make_tree_vec (len);
12390
12391 for (i = 0; binfo; binfo = TREE_CHAIN (binfo))
12392 {
12393 /* The base of a derived struct is public by default. */
12394 int via_public
12395 = (TREE_PURPOSE (binfo) == access_public_node
12396 || TREE_PURPOSE (binfo) == access_public_virtual_node
12397 || (tag_code != class_type
12398 && (TREE_PURPOSE (binfo) == access_default_node
12399 || TREE_PURPOSE (binfo) == access_default_virtual_node)));
12400 int via_protected
12401 = (TREE_PURPOSE (binfo) == access_protected_node
12402 || TREE_PURPOSE (binfo) == access_protected_virtual_node);
12403 int via_virtual
12404 = (TREE_PURPOSE (binfo) == access_private_virtual_node
12405 || TREE_PURPOSE (binfo) == access_protected_virtual_node
12406 || TREE_PURPOSE (binfo) == access_public_virtual_node
12407 || TREE_PURPOSE (binfo) == access_default_virtual_node);
12408 tree basetype = TREE_VALUE (binfo);
12409 tree base_binfo;
12410
12411 if (basetype && TREE_CODE (basetype) == TYPE_DECL)
12412 basetype = TREE_TYPE (basetype);
12413 if (!basetype
12414 || (TREE_CODE (basetype) != RECORD_TYPE
12415 && TREE_CODE (basetype) != TYPENAME_TYPE
12416 && TREE_CODE (basetype) != TEMPLATE_TYPE_PARM
12417 && TREE_CODE (basetype) != TEMPLATE_TEMPLATE_PARM))
12418 {
12419 cp_error ("base type `%T' fails to be a struct or class type",
12420 TREE_VALUE (binfo));
12421 continue;
12422 }
12423
12424 GNU_xref_hier (name, basetype, via_public, via_virtual, 0);
12425
12426 /* This code replaces similar code in layout_basetypes.
12427 We put the complete_type first for implicit `typename'. */
12428 if (TYPE_SIZE (basetype) == NULL_TREE
12429 && ! (current_template_parms && uses_template_parms (basetype)))
12430 {
12431 cp_error ("base class `%T' has incomplete type", basetype);
12432 continue;
12433 }
12434 else
12435 {
12436 if (CLASSTYPE_MARKED (basetype))
12437 {
12438 if (basetype == ref)
12439 cp_error ("recursive type `%T' undefined", basetype);
12440 else
12441 cp_error ("duplicate base type `%T' invalid", basetype);
12442 continue;
12443 }
12444
12445 if (TYPE_FOR_JAVA (basetype)
12446 && (current_lang_stack
12447 == &VARRAY_TREE (current_lang_base, 0)))
12448 TYPE_FOR_JAVA (ref) = 1;
12449
12450 /* Note that the BINFO records which describe individual
12451 inheritances are *not* shared in the lattice! They
12452 cannot be shared because a given baseclass may be
12453 inherited with different `accessibility' by different
12454 derived classes. (Each BINFO record describing an
12455 individual inheritance contains flags which say what
12456 the `accessibility' of that particular inheritance is.) */
12457
12458 base_binfo
12459 = make_binfo (integer_zero_node, basetype,
12460 CLASS_TYPE_P (basetype)
12461 ? TYPE_BINFO_VTABLE (basetype) : NULL_TREE,
12462 CLASS_TYPE_P (basetype)
12463 ? TYPE_BINFO_VIRTUALS (basetype) : NULL_TREE);
12464
12465 TREE_VEC_ELT (binfos, i) = base_binfo;
12466 TREE_VIA_PUBLIC (base_binfo) = via_public;
12467 TREE_VIA_PROTECTED (base_binfo) = via_protected;
12468 TREE_VIA_VIRTUAL (base_binfo) = via_virtual;
12469 BINFO_INHERITANCE_CHAIN (base_binfo) = TYPE_BINFO (ref);
12470
12471 /* We need to unshare the binfos now so that lookups during class
12472 definition work. */
12473 unshare_base_binfos (base_binfo);
12474
12475 SET_CLASSTYPE_MARKED (basetype);
12476
12477 /* We are free to modify these bits because they are meaningless
12478 at top level, and BASETYPE is a top-level type. */
12479 if (via_virtual || TYPE_USES_VIRTUAL_BASECLASSES (basetype))
12480 {
12481 TYPE_USES_VIRTUAL_BASECLASSES (ref) = 1;
12482 TYPE_USES_COMPLEX_INHERITANCE (ref) = 1;
12483 }
12484
12485 if (CLASS_TYPE_P (basetype))
12486 {
12487 TYPE_GETS_NEW (ref) |= TYPE_GETS_NEW (basetype);
12488 TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
12489 }
12490
12491 i += 1;
12492 }
12493 }
12494 if (i)
12495 TREE_VEC_LENGTH (binfos) = i;
12496 else
12497 BINFO_BASETYPES (TYPE_BINFO (ref)) = NULL_TREE;
12498
12499 if (i > 1)
12500 TYPE_USES_MULTIPLE_INHERITANCE (ref) = 1;
12501 else if (i == 1)
12502 {
12503 tree basetype = BINFO_TYPE (TREE_VEC_ELT (binfos, 0));
12504
12505 if (CLASS_TYPE_P (basetype))
12506 TYPE_USES_MULTIPLE_INHERITANCE (ref)
12507 = TYPE_USES_MULTIPLE_INHERITANCE (basetype);
12508 }
12509
12510 if (TYPE_USES_MULTIPLE_INHERITANCE (ref))
12511 TYPE_USES_COMPLEX_INHERITANCE (ref) = 1;
12512
12513 /* Unmark all the types. */
12514 while (--i >= 0)
12515 CLEAR_CLASSTYPE_MARKED (BINFO_TYPE (TREE_VEC_ELT (binfos, i)));
12516 CLEAR_CLASSTYPE_MARKED (ref);
12517
12518 /* Now that we know all the base-classes, set up the list of virtual
12519 bases. */
12520 CLASSTYPE_VBASECLASSES (ref) = get_vbase_types (ref);
12521
12522 pop_obstacks ();
12523 }
12524
12525 \f
12526 /* Begin compiling the definition of an enumeration type.
12527 NAME is its name (or null if anonymous).
12528 Returns the type object, as yet incomplete.
12529 Also records info about it so that build_enumerator
12530 may be used to declare the individual values as they are read. */
12531
12532 tree
12533 start_enum (name)
12534 tree name;
12535 {
12536 register tree enumtype = NULL_TREE;
12537 struct binding_level *b = current_binding_level;
12538
12539 /* We are wasting space here and putting these on the permanent_obstack so
12540 that typeid(local enum) will work correctly. */
12541 push_obstacks (&permanent_obstack, &permanent_obstack);
12542
12543 /* If this is the real definition for a previous forward reference,
12544 fill in the contents in the same object that used to be the
12545 forward reference. */
12546
12547 if (name != NULL_TREE)
12548 enumtype = lookup_tag (ENUMERAL_TYPE, name, b, 1);
12549
12550 if (enumtype != NULL_TREE && TREE_CODE (enumtype) == ENUMERAL_TYPE)
12551 {
12552 cp_error ("multiple definition of `%#T'", enumtype);
12553 cp_error_at ("previous definition here", enumtype);
12554 }
12555 else
12556 {
12557 enumtype = make_node (ENUMERAL_TYPE);
12558 pushtag (name, enumtype, 0);
12559 }
12560
12561 if (current_class_type)
12562 TREE_ADDRESSABLE (b->tags) = 1;
12563
12564 /* We don't copy this value because build_enumerator needs to do it. */
12565 enum_next_value = integer_zero_node;
12566 enum_overflow = 0;
12567
12568 GNU_xref_decl (current_function_decl, enumtype);
12569 return enumtype;
12570 }
12571
12572 /* After processing and defining all the values of an enumeration type,
12573 install their decls in the enumeration type and finish it off.
12574 ENUMTYPE is the type object and VALUES a list of name-value pairs.
12575 Returns ENUMTYPE. */
12576
12577 tree
12578 finish_enum (enumtype)
12579 tree enumtype;
12580 {
12581 register tree minnode = NULL_TREE, maxnode = NULL_TREE;
12582 /* Calculate the maximum value of any enumerator in this type. */
12583
12584 tree values = TYPE_VALUES (enumtype);
12585 if (values)
12586 {
12587 tree pair;
12588
12589 for (pair = values; pair; pair = TREE_CHAIN (pair))
12590 {
12591 tree decl;
12592 tree value;
12593
12594 /* The TREE_VALUE is a CONST_DECL for this enumeration
12595 constant. */
12596 decl = TREE_VALUE (pair);
12597
12598 /* The DECL_INITIAL will be NULL if we are processing a
12599 template declaration and this enumeration constant had no
12600 explicit initializer. */
12601 value = DECL_INITIAL (decl);
12602 if (value && !processing_template_decl)
12603 {
12604 /* Set the TREE_TYPE for the VALUE as well. That's so
12605 that when we call decl_constant_value we get an
12606 entity of the right type (but with the constant
12607 value). Since we shouldn't ever call
12608 decl_constant_value on a template type, there's no
12609 reason to do that when processing_template_decl.
12610 And, if the expression is something like a
12611 TEMPLATE_PARM_INDEX or a CAST_EXPR doing so will
12612 wreak havoc on the intended type of the expression.
12613
12614 Of course, there's also no point in trying to compute
12615 minimum or maximum values if we're in a template. */
12616 TREE_TYPE (value) = enumtype;
12617
12618 if (!minnode)
12619 minnode = maxnode = value;
12620 else if (tree_int_cst_lt (maxnode, value))
12621 maxnode = value;
12622 else if (tree_int_cst_lt (value, minnode))
12623 minnode = value;
12624 }
12625
12626 if (processing_template_decl)
12627 /* If this is just a template, leave the CONST_DECL
12628 alone. That way tsubst_copy will find CONST_DECLs for
12629 CONST_DECLs, and not INTEGER_CSTs. */
12630 ;
12631 else
12632 /* In the list we're building up, we want the enumeration
12633 values, not the CONST_DECLs. */
12634 TREE_VALUE (pair) = value;
12635 }
12636 }
12637 else
12638 maxnode = minnode = integer_zero_node;
12639
12640 TYPE_VALUES (enumtype) = nreverse (values);
12641
12642 if (processing_template_decl)
12643 {
12644 tree scope = current_scope ();
12645 if (scope && TREE_CODE (scope) == FUNCTION_DECL)
12646 add_tree (build_min (TAG_DEFN, enumtype));
12647 }
12648 else
12649 {
12650 int unsignedp = tree_int_cst_sgn (minnode) >= 0;
12651 int lowprec = min_precision (minnode, unsignedp);
12652 int highprec = min_precision (maxnode, unsignedp);
12653 int precision = MAX (lowprec, highprec);
12654 tree tem;
12655
12656 TYPE_SIZE (enumtype) = NULL_TREE;
12657
12658 /* Set TYPE_MIN_VALUE and TYPE_MAX_VALUE according to `precision'. */
12659
12660 TYPE_PRECISION (enumtype) = precision;
12661 if (unsignedp)
12662 fixup_unsigned_type (enumtype);
12663 else
12664 fixup_signed_type (enumtype);
12665
12666 if (flag_short_enums || (precision > TYPE_PRECISION (integer_type_node)))
12667 /* Use the width of the narrowest normal C type which is wide
12668 enough. */
12669 TYPE_PRECISION (enumtype) = TYPE_PRECISION (type_for_size
12670 (precision, 1));
12671 else
12672 TYPE_PRECISION (enumtype) = TYPE_PRECISION (integer_type_node);
12673
12674 TYPE_SIZE (enumtype) = 0;
12675 layout_type (enumtype);
12676
12677 /* Fix up all variant types of this enum type. */
12678 for (tem = TYPE_MAIN_VARIANT (enumtype); tem;
12679 tem = TYPE_NEXT_VARIANT (tem))
12680 {
12681 TYPE_VALUES (tem) = TYPE_VALUES (enumtype);
12682 TYPE_MIN_VALUE (tem) = TYPE_MIN_VALUE (enumtype);
12683 TYPE_MAX_VALUE (tem) = TYPE_MAX_VALUE (enumtype);
12684 TYPE_SIZE (tem) = TYPE_SIZE (enumtype);
12685 TYPE_SIZE_UNIT (tem) = TYPE_SIZE_UNIT (enumtype);
12686 TYPE_MODE (tem) = TYPE_MODE (enumtype);
12687 TYPE_PRECISION (tem) = TYPE_PRECISION (enumtype);
12688 TYPE_ALIGN (tem) = TYPE_ALIGN (enumtype);
12689 TREE_UNSIGNED (tem) = TREE_UNSIGNED (enumtype);
12690 }
12691
12692 /* Finish debugging output for this type. */
12693 rest_of_type_compilation (enumtype, namespace_bindings_p ());
12694 }
12695
12696 /* In start_enum we pushed obstacks. Here, we must pop them. */
12697 pop_obstacks ();
12698
12699 return enumtype;
12700 }
12701
12702 /* Build and install a CONST_DECL for an enumeration constant of the
12703 enumeration type TYPE whose NAME and VALUE (if any) are provided.
12704 Assignment of sequential values by default is handled here. */
12705
12706 tree
12707 build_enumerator (name, value, type)
12708 tree name;
12709 tree value;
12710 tree type;
12711 {
12712 tree decl, result;
12713 tree context;
12714
12715 /* Remove no-op casts from the value. */
12716 if (value)
12717 STRIP_TYPE_NOPS (value);
12718
12719 if (! processing_template_decl)
12720 {
12721 /* Validate and default VALUE. */
12722 if (value != NULL_TREE)
12723 {
12724 if (TREE_READONLY_DECL_P (value))
12725 value = decl_constant_value (value);
12726
12727 if (TREE_CODE (value) == INTEGER_CST)
12728 {
12729 value = default_conversion (value);
12730 constant_expression_warning (value);
12731 }
12732 else
12733 {
12734 cp_error ("enumerator value for `%D' not integer constant", name);
12735 value = NULL_TREE;
12736 }
12737 }
12738
12739 /* Default based on previous value. */
12740 if (value == NULL_TREE && ! processing_template_decl)
12741 {
12742 value = enum_next_value;
12743 if (enum_overflow)
12744 cp_error ("overflow in enumeration values at `%D'", name);
12745 }
12746
12747 /* Remove no-op casts from the value. */
12748 if (value)
12749 STRIP_TYPE_NOPS (value);
12750 #if 0
12751 /* To fix MAX_VAL enum consts. (bkoz) */
12752 TREE_TYPE (value) = integer_type_node;
12753 #endif
12754 }
12755
12756 /* We always have to copy here; not all INTEGER_CSTs are unshared.
12757 Even in other cases, we will later (in finish_enum) be setting the
12758 type of VALUE. */
12759 if (value != NULL_TREE)
12760 value = copy_node (value);
12761
12762 /* C++ associates enums with global, function, or class declarations. */
12763
12764 context = current_scope ();
12765 if (context && context == current_class_type)
12766 /* This enum declaration is local to the class. */
12767 decl = build_lang_decl (CONST_DECL, name, type);
12768 else
12769 /* It's a global enum, or it's local to a function. (Note local to
12770 a function could mean local to a class method. */
12771 decl = build_decl (CONST_DECL, name, type);
12772
12773 DECL_CONTEXT (decl) = FROB_CONTEXT (context);
12774 DECL_INITIAL (decl) = value;
12775 TREE_READONLY (decl) = 1;
12776
12777 if (context && context == current_class_type)
12778 /* In something like `struct S { enum E { i = 7 }; };' we put `i'
12779 on the TYPE_FIELDS list for `S'. (That's so that you can say
12780 things like `S::i' later.) */
12781 finish_member_declaration (decl);
12782 else
12783 {
12784 pushdecl (decl);
12785 GNU_xref_decl (current_function_decl, decl);
12786 }
12787
12788 if (! processing_template_decl)
12789 {
12790 /* Set basis for default for next value. */
12791 enum_next_value = build_binary_op_nodefault (PLUS_EXPR, value,
12792 integer_one_node, PLUS_EXPR);
12793 enum_overflow = tree_int_cst_lt (enum_next_value, value);
12794 }
12795
12796 result = tree_cons (name, decl, NULL_TREE);
12797 return result;
12798 }
12799
12800 \f
12801 static int function_depth;
12802
12803 /* Create the FUNCTION_DECL for a function definition.
12804 DECLSPECS and DECLARATOR are the parts of the declaration;
12805 they describe the function's name and the type it returns,
12806 but twisted together in a fashion that parallels the syntax of C.
12807
12808 If PRE_PARSED_P is non-zero then DECLARATOR is really the DECL for
12809 the function we are about to process; DECLSPECS are ignored. For
12810 example, we set PRE_PARSED_P when processing the definition of
12811 inline function that was defined in-class; the definition is
12812 actually processed when the class is complete. In this case,
12813 PRE_PARSED_P is 2. We also set PRE_PARSED_P when instanting the
12814 body of a template function, and when constructing thunk functions
12815 and such; in these cases PRE_PARSED_P is 1.
12816
12817 This function creates a binding context for the function body
12818 as well as setting up the FUNCTION_DECL in current_function_decl.
12819
12820 Returns 1 on success. If the DECLARATOR is not suitable for a function
12821 (it defines a datum instead), we return 0, which tells
12822 yyparse to report a parse error.
12823
12824 For C++, we must first check whether that datum makes any sense.
12825 For example, "class A local_a(1,2);" means that variable local_a
12826 is an aggregate of type A, which should have a constructor
12827 applied to it with the argument list [1, 2]. */
12828
12829 int
12830 start_function (declspecs, declarator, attrs, pre_parsed_p)
12831 tree declspecs, declarator, attrs;
12832 int pre_parsed_p;
12833 {
12834 tree decl1;
12835 tree ctype = NULL_TREE;
12836 tree fntype;
12837 tree restype;
12838 extern int have_extern_spec;
12839 extern int used_extern_spec;
12840 int doing_friend = 0;
12841
12842 /* Sanity check. */
12843 my_friendly_assert (TREE_CODE (TREE_VALUE (void_list_node)) == VOID_TYPE, 160);
12844 my_friendly_assert (TREE_CHAIN (void_list_node) == NULL_TREE, 161);
12845
12846 /* Assume, until we see it does. */
12847 current_function_returns_value = 0;
12848 current_function_returns_null = 0;
12849 named_labels = 0;
12850 current_function_assigns_this = 0;
12851 current_function_just_assigned_this = 0;
12852 current_function_parms_stored = 0;
12853 last_dtor_insn = NULL_RTX;
12854 last_parm_cleanup_insn = NULL_RTX;
12855 original_result_rtx = NULL_RTX;
12856 base_init_expr = NULL_TREE;
12857 current_base_init_list = NULL_TREE;
12858 current_member_init_list = NULL_TREE;
12859 ctor_label = dtor_label = NULL_TREE;
12860 static_labelno = 0;
12861 in_function_try_handler = 0;
12862
12863 clear_temp_name ();
12864
12865 /* This should only be done once on the top most decl. */
12866 if (have_extern_spec && !used_extern_spec)
12867 {
12868 declspecs = decl_tree_cons (NULL_TREE, get_identifier ("extern"), declspecs);
12869 used_extern_spec = 1;
12870 }
12871
12872 if (pre_parsed_p)
12873 {
12874 decl1 = declarator;
12875
12876 fntype = TREE_TYPE (decl1);
12877 if (TREE_CODE (fntype) == METHOD_TYPE)
12878 ctype = TYPE_METHOD_BASETYPE (fntype);
12879
12880 /* ANSI C++ June 5 1992 WP 11.4.5. A friend function defined in a
12881 class is in the (lexical) scope of the class in which it is
12882 defined. */
12883 if (!ctype && DECL_FRIEND_P (decl1))
12884 {
12885 ctype = DECL_CLASS_CONTEXT (decl1);
12886
12887 /* CTYPE could be null here if we're dealing with a template;
12888 for example, `inline friend float foo()' inside a template
12889 will have no CTYPE set. */
12890 if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
12891 ctype = NULL_TREE;
12892 else
12893 doing_friend = 1;
12894 }
12895
12896 last_function_parms = DECL_ARGUMENTS (decl1);
12897 last_function_parm_tags = NULL_TREE;
12898 }
12899 else
12900 {
12901 decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, NULL_TREE);
12902 /* If the declarator is not suitable for a function definition,
12903 cause a syntax error. */
12904 if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL) return 0;
12905
12906 fntype = TREE_TYPE (decl1);
12907
12908 restype = TREE_TYPE (fntype);
12909 if (CLASS_TYPE_P (restype) && !CLASSTYPE_GOT_SEMICOLON (restype))
12910 {
12911 cp_error ("semicolon missing after declaration of `%#T'", restype);
12912 shadow_tag (build_expr_list (NULL_TREE, restype));
12913 CLASSTYPE_GOT_SEMICOLON (restype) = 1;
12914 if (TREE_CODE (fntype) == FUNCTION_TYPE)
12915 fntype = build_function_type (integer_type_node,
12916 TYPE_ARG_TYPES (fntype));
12917 else
12918 fntype = build_cplus_method_type (build_type_variant (TYPE_METHOD_BASETYPE (fntype), TREE_READONLY (decl1), TREE_SIDE_EFFECTS (decl1)),
12919 integer_type_node,
12920 TYPE_ARG_TYPES (fntype));
12921 TREE_TYPE (decl1) = fntype;
12922 }
12923
12924 if (TREE_CODE (fntype) == METHOD_TYPE)
12925 ctype = TYPE_METHOD_BASETYPE (fntype);
12926 else if (DECL_MAIN_P (decl1))
12927 {
12928 /* If this doesn't return integer_type, complain. */
12929 if (TREE_TYPE (TREE_TYPE (decl1)) != integer_type_node)
12930 {
12931 if (pedantic || warn_return_type)
12932 pedwarn ("return type for `main' changed to `int'");
12933 TREE_TYPE (decl1) = fntype = default_function_type;
12934 }
12935 }
12936 }
12937
12938 /* Warn if function was previously implicitly declared
12939 (but not if we warned then). */
12940 if (! warn_implicit
12941 && IDENTIFIER_IMPLICIT_DECL (DECL_NAME (decl1)) != NULL_TREE)
12942 cp_warning_at ("`%D' implicitly declared before its definition", IDENTIFIER_IMPLICIT_DECL (DECL_NAME (decl1)));
12943
12944 if (!building_stmt_tree ())
12945 announce_function (decl1);
12946
12947 /* Set up current_class_type, and enter the scope of the class, if
12948 appropriate. */
12949 if (ctype)
12950 push_nested_class (ctype, 1);
12951 else if (DECL_STATIC_FUNCTION_P (decl1))
12952 push_nested_class (DECL_CONTEXT (decl1), 2);
12953
12954 /* Now that we have entered the scope of the class, we must restore
12955 the bindings for any template parameters surrounding DECL1, if it
12956 is an inline member template. (Order is important; consider the
12957 case where a template parameter has the same name as a field of
12958 the class.) It is not until after this point that
12959 PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly. */
12960 if (pre_parsed_p == 2)
12961 maybe_begin_member_template_processing (decl1);
12962
12963 /* Effective C++ rule 15. See also c_expand_return. */
12964 if (warn_ecpp
12965 && DECL_NAME (decl1) == ansi_opname[(int) MODIFY_EXPR]
12966 && TREE_CODE (TREE_TYPE (fntype)) == VOID_TYPE)
12967 cp_warning ("`operator=' should return a reference to `*this'");
12968
12969 /* Make the init_value nonzero so pushdecl knows this is not tentative.
12970 error_mark_node is replaced below (in poplevel) with the BLOCK. */
12971 DECL_INITIAL (decl1) = error_mark_node;
12972
12973 #ifdef SET_DEFAULT_DECL_ATTRIBUTES
12974 SET_DEFAULT_DECL_ATTRIBUTES (decl1, attrs);
12975 #endif
12976
12977 /* This function exists in static storage.
12978 (This does not mean `static' in the C sense!) */
12979 TREE_STATIC (decl1) = 1;
12980
12981 /* We must call push_template_decl after current_class_type is set
12982 up. (If we are processing inline definitions after exiting a
12983 class scope, current_class_type will be NULL_TREE until set above
12984 by push_nested_class.) */
12985 if (processing_template_decl)
12986 decl1 = push_template_decl (decl1);
12987
12988 /* We are now in the scope of the function being defined. */
12989 current_function_decl = decl1;
12990
12991 /* Save the parm names or decls from this function's declarator
12992 where store_parm_decls will find them. */
12993 current_function_parms = last_function_parms;
12994 current_function_parm_tags = last_function_parm_tags;
12995
12996 if (! processing_template_decl)
12997 {
12998 /* In a function definition, arg types must be complete. */
12999 require_complete_types_for_parms (current_function_parms);
13000
13001 if (TYPE_SIZE (complete_type (TREE_TYPE (fntype))) == NULL_TREE)
13002 {
13003 cp_error ("return-type `%#T' is an incomplete type",
13004 TREE_TYPE (fntype));
13005
13006 /* Make it return void instead, but don't change the
13007 type of the DECL_RESULT, in case we have a named return value. */
13008 if (ctype)
13009 TREE_TYPE (decl1)
13010 = build_cplus_method_type (build_type_variant (ctype,
13011 TREE_READONLY (decl1),
13012 TREE_SIDE_EFFECTS (decl1)),
13013 void_type_node,
13014 FUNCTION_ARG_CHAIN (decl1));
13015 else
13016 TREE_TYPE (decl1)
13017 = build_function_type (void_type_node,
13018 TYPE_ARG_TYPES (TREE_TYPE (decl1)));
13019 DECL_RESULT (decl1)
13020 = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (TREE_TYPE (fntype)));
13021 TREE_READONLY (DECL_RESULT (decl1))
13022 = CP_TYPE_CONST_P (TREE_TYPE (fntype));
13023 TREE_THIS_VOLATILE (DECL_RESULT (decl1))
13024 = CP_TYPE_VOLATILE_P (TREE_TYPE (fntype));
13025 }
13026
13027 abstract_virtuals_error (decl1, TREE_TYPE (fntype));
13028 }
13029
13030 /* Record the decl so that the function name is defined.
13031 If we already have a decl for this name, and it is a FUNCTION_DECL,
13032 use the old decl. */
13033 if (!processing_template_decl && pre_parsed_p == 0)
13034 {
13035 /* A specialization is not used to guide overload resolution. */
13036 if ((flag_guiding_decls
13037 || !DECL_TEMPLATE_SPECIALIZATION (decl1))
13038 && ! DECL_FUNCTION_MEMBER_P (decl1))
13039 decl1 = pushdecl (decl1);
13040 else
13041 {
13042 /* We need to set the DECL_CONTEXT. */
13043 if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
13044 DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
13045 /* And make sure we have enough default args. */
13046 check_default_args (decl1);
13047 }
13048 DECL_MAIN_VARIANT (decl1) = decl1;
13049 fntype = TREE_TYPE (decl1);
13050 }
13051
13052 current_function_decl = decl1;
13053
13054 if (DECL_INTERFACE_KNOWN (decl1))
13055 {
13056 tree ctx = hack_decl_function_context (decl1);
13057
13058 if (DECL_NOT_REALLY_EXTERN (decl1))
13059 DECL_EXTERNAL (decl1) = 0;
13060
13061 if (ctx != NULL_TREE && DECL_THIS_INLINE (ctx)
13062 && TREE_PUBLIC (ctx))
13063 /* This is a function in a local class in an extern inline
13064 function. */
13065 comdat_linkage (decl1);
13066 }
13067 /* If this function belongs to an interface, it is public.
13068 If it belongs to someone else's interface, it is also external.
13069 This only affects inlines and template instantiations. */
13070 else if (interface_unknown == 0
13071 && (! DECL_TEMPLATE_INSTANTIATION (decl1)
13072 || flag_alt_external_templates))
13073 {
13074 if (DECL_THIS_INLINE (decl1) || DECL_TEMPLATE_INSTANTIATION (decl1)
13075 || processing_template_decl)
13076 {
13077 DECL_EXTERNAL (decl1)
13078 = (interface_only
13079 || (DECL_THIS_INLINE (decl1) && ! flag_implement_inlines
13080 && !DECL_VINDEX (decl1)));
13081
13082 /* For WIN32 we also want to put these in linkonce sections. */
13083 maybe_make_one_only (decl1);
13084 }
13085 else
13086 DECL_EXTERNAL (decl1) = 0;
13087 DECL_NOT_REALLY_EXTERN (decl1) = 0;
13088 DECL_INTERFACE_KNOWN (decl1) = 1;
13089 }
13090 else if (interface_unknown && interface_only
13091 && (! DECL_TEMPLATE_INSTANTIATION (decl1)
13092 || flag_alt_external_templates))
13093 {
13094 /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
13095 interface, we will have interface_only set but not
13096 interface_known. In that case, we don't want to use the normal
13097 heuristics because someone will supply a #pragma implementation
13098 elsewhere, and deducing it here would produce a conflict. */
13099 comdat_linkage (decl1);
13100 DECL_EXTERNAL (decl1) = 0;
13101 DECL_INTERFACE_KNOWN (decl1) = 1;
13102 DECL_DEFER_OUTPUT (decl1) = 1;
13103 }
13104 else
13105 {
13106 /* This is a definition, not a reference.
13107 So clear DECL_EXTERNAL. */
13108 DECL_EXTERNAL (decl1) = 0;
13109
13110 if ((DECL_THIS_INLINE (decl1) || DECL_TEMPLATE_INSTANTIATION (decl1))
13111 && ! DECL_INTERFACE_KNOWN (decl1)
13112 /* Don't try to defer nested functions for now. */
13113 && ! hack_decl_function_context (decl1))
13114 DECL_DEFER_OUTPUT (decl1) = 1;
13115 else
13116 DECL_INTERFACE_KNOWN (decl1) = 1;
13117 }
13118
13119 if (ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1))
13120 {
13121 if (TREE_CODE (fntype) == METHOD_TYPE)
13122 TREE_TYPE (decl1) = fntype
13123 = build_function_type (TREE_TYPE (fntype),
13124 TREE_CHAIN (TYPE_ARG_TYPES (fntype)));
13125 current_function_parms = TREE_CHAIN (current_function_parms);
13126 DECL_ARGUMENTS (decl1) = current_function_parms;
13127 ctype = NULL_TREE;
13128 }
13129 restype = TREE_TYPE (fntype);
13130
13131 if (ctype)
13132 {
13133 /* If we're compiling a friend function, neither of the variables
13134 current_class_ptr nor current_class_type will have values. */
13135 if (! doing_friend)
13136 {
13137 /* We know that this was set up by `grokclassfn'.
13138 We do not wait until `store_parm_decls', since evil
13139 parse errors may never get us to that point. Here
13140 we keep the consistency between `current_class_type'
13141 and `current_class_ptr'. */
13142 tree t = current_function_parms;
13143 int i;
13144
13145 my_friendly_assert (t != NULL_TREE
13146 && TREE_CODE (t) == PARM_DECL, 162);
13147 my_friendly_assert (TREE_CODE (TREE_TYPE (t)) == POINTER_TYPE,
13148 19990811);
13149
13150 if (! hack_decl_function_context (decl1))
13151 temporary_allocation ();
13152 i = suspend_momentary ();
13153
13154 /* Normally, build_indirect_ref returns current_class_ref
13155 whenever current_class_ptr is dereferenced. This time,
13156 however, we want it to *create* current_class_ref, so we
13157 temporarily clear current_class_ptr to fool it. */
13158 current_class_ptr = NULL_TREE;
13159 current_class_ref = build_indirect_ref (t, NULL_PTR);
13160 current_class_ptr = t;
13161
13162 resume_momentary (i);
13163 if (! hack_decl_function_context (decl1))
13164 end_temporary_allocation ();
13165 }
13166 }
13167 else
13168 current_class_ptr = current_class_ref = NULL_TREE;
13169
13170 pushlevel (0);
13171 current_binding_level->parm_flag = 1;
13172
13173 if (attrs)
13174 cplus_decl_attributes (decl1, NULL_TREE, attrs);
13175
13176 if (!building_stmt_tree ())
13177 {
13178 GNU_xref_function (decl1, current_function_parms);
13179 make_function_rtl (decl1);
13180 }
13181
13182 /* Promote the value to int before returning it. */
13183 if (C_PROMOTING_INTEGER_TYPE_P (restype))
13184 restype = type_promotes_to (restype);
13185
13186 /* If this fcn was already referenced via a block-scope `extern' decl
13187 (or an implicit decl), propagate certain information about the usage. */
13188 if (TREE_ADDRESSABLE (DECL_ASSEMBLER_NAME (decl1)))
13189 TREE_ADDRESSABLE (decl1) = 1;
13190
13191 if (DECL_RESULT (decl1) == NULL_TREE)
13192 {
13193 DECL_RESULT (decl1)
13194 = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (restype));
13195 TREE_READONLY (DECL_RESULT (decl1)) = CP_TYPE_CONST_P (restype);
13196 TREE_THIS_VOLATILE (DECL_RESULT (decl1)) = CP_TYPE_VOLATILE_P (restype);
13197 }
13198
13199 /* Allocate further tree nodes temporarily during compilation
13200 of this function only. Tiemann moved up here from bottom of fn. */
13201 /* If this is a nested function, then we must continue to allocate RTL
13202 on the permanent obstack in case we need to inline it later. */
13203 if (! hack_decl_function_context (decl1))
13204 temporary_allocation ();
13205
13206 /* Make sure that we always have a momntary obstack while we're in a
13207 function body. */
13208 push_momentary ();
13209
13210 if (building_stmt_tree ())
13211 begin_stmt_tree (decl1);
13212
13213 ++function_depth;
13214
13215 if (DESTRUCTOR_NAME_P (DECL_ASSEMBLER_NAME (decl1))
13216 && DECL_LANGUAGE (decl1) == lang_cplusplus)
13217 {
13218 dtor_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
13219 ctor_label = NULL_TREE;
13220 }
13221 else
13222 {
13223 dtor_label = NULL_TREE;
13224 if (DECL_CONSTRUCTOR_P (decl1))
13225 ctor_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
13226 }
13227
13228 return 1;
13229 }
13230 \f
13231 /* Called after store_parm_decls for a function-try-block. We need to update
13232 last_parm_cleanup_insn so that the base initializers for a constructor
13233 are run within this block, not before it. */
13234
13235 void
13236 expand_start_early_try_stmts ()
13237 {
13238 expand_start_try_stmts ();
13239 last_parm_cleanup_insn = get_last_insn ();
13240 }
13241
13242 /* Store the parameter declarations into the current function declaration.
13243 This is called after parsing the parameter declarations, before
13244 digesting the body of the function.
13245
13246 Also install to binding contour return value identifier, if any. */
13247
13248 void
13249 store_parm_decls ()
13250 {
13251 register tree fndecl = current_function_decl;
13252 register tree parm;
13253 int parms_have_cleanups = 0;
13254 tree cleanups = NULL_TREE;
13255
13256 /* This is either a chain of PARM_DECLs (when a prototype is used). */
13257 tree specparms = current_function_parms;
13258
13259 /* This is a list of types declared among parms in a prototype. */
13260 tree parmtags = current_function_parm_tags;
13261
13262 /* This is a chain of any other decls that came in among the parm
13263 declarations. If a parm is declared with enum {foo, bar} x;
13264 then CONST_DECLs for foo and bar are put here. */
13265 tree nonparms = NULL_TREE;
13266
13267 if (toplevel_bindings_p ())
13268 fatal ("parse errors have confused me too much");
13269
13270 /* Initialize RTL machinery. */
13271 init_function_start (fndecl, input_filename, lineno);
13272 /* Even though we're inside a function body, we still don't want to
13273 call expand_expr to calculate the size of a variable-sized array.
13274 We haven't necessarily assigned RTL to all variables yet, so it's
13275 not safe to try to expand expressions involving them. */
13276 immediate_size_expand = 0;
13277 get_pending_sizes ();
13278
13279 /* Create a binding level for the parms. */
13280 expand_start_bindings (0);
13281
13282 if (specparms != NULL_TREE)
13283 {
13284 /* This case is when the function was defined with an ANSI prototype.
13285 The parms already have decls, so we need not do anything here
13286 except record them as in effect
13287 and complain if any redundant old-style parm decls were written. */
13288
13289 register tree next;
13290
13291 /* Must clear this because it might contain TYPE_DECLs declared
13292 at class level. */
13293 storedecls (NULL_TREE);
13294
13295 for (parm = nreverse (specparms); parm; parm = next)
13296 {
13297 next = TREE_CHAIN (parm);
13298 if (TREE_CODE (parm) == PARM_DECL)
13299 {
13300 tree cleanup;
13301 if (DECL_NAME (parm) == NULL_TREE)
13302 {
13303 pushdecl (parm);
13304 }
13305 else if (TREE_CODE (TREE_TYPE (parm)) == VOID_TYPE)
13306 cp_error ("parameter `%D' declared void", parm);
13307 else
13308 {
13309 /* Now fill in DECL_REFERENCE_SLOT for any of the parm decls.
13310 A parameter is assumed not to have any side effects.
13311 If this should change for any reason, then this
13312 will have to wrap the bashed reference type in a save_expr.
13313
13314 Also, if the parameter type is declared to be an X
13315 and there is an X(X&) constructor, we cannot lay it
13316 into the stack (any more), so we make this parameter
13317 look like it is really of reference type. Functions
13318 which pass parameters to this function will know to
13319 create a temporary in their frame, and pass a reference
13320 to that. */
13321
13322 if (TREE_CODE (TREE_TYPE (parm)) == REFERENCE_TYPE
13323 && TYPE_SIZE (TREE_TYPE (TREE_TYPE (parm))))
13324 SET_DECL_REFERENCE_SLOT (parm, convert_from_reference (parm));
13325
13326 pushdecl (parm);
13327 }
13328 if (! building_stmt_tree ()
13329 && (cleanup = maybe_build_cleanup (parm), cleanup))
13330 {
13331 expand_decl (parm);
13332 parms_have_cleanups = 1;
13333
13334 /* Keep track of the cleanups. */
13335 cleanups = tree_cons (parm, cleanup, cleanups);
13336 }
13337 }
13338 else
13339 {
13340 /* If we find an enum constant or a type tag,
13341 put it aside for the moment. */
13342 TREE_CHAIN (parm) = NULL_TREE;
13343 nonparms = chainon (nonparms, parm);
13344 }
13345 }
13346
13347 /* Get the decls in their original chain order
13348 and record in the function. This is all and only the
13349 PARM_DECLs that were pushed into scope by the loop above. */
13350 DECL_ARGUMENTS (fndecl) = getdecls ();
13351
13352 storetags (chainon (parmtags, gettags ()));
13353 }
13354 else
13355 DECL_ARGUMENTS (fndecl) = NULL_TREE;
13356
13357 /* Now store the final chain of decls for the arguments
13358 as the decl-chain of the current lexical scope.
13359 Put the enumerators in as well, at the front so that
13360 DECL_ARGUMENTS is not modified. */
13361
13362 storedecls (chainon (nonparms, DECL_ARGUMENTS (fndecl)));
13363
13364 /* Declare __FUNCTION__ and __PRETTY_FUNCTION__ for this function. */
13365 declare_function_name ();
13366
13367 /* Initialize the RTL code for the function. */
13368 DECL_SAVED_INSNS (fndecl) = 0;
13369 if (! building_stmt_tree ())
13370 expand_function_start (fndecl, parms_have_cleanups);
13371
13372 current_function_parms_stored = 1;
13373
13374 /* If this function is `main', emit a call to `__main'
13375 to run global initializers, etc. */
13376 if (DECL_MAIN_P (fndecl) && !building_stmt_tree ())
13377 expand_main_function ();
13378
13379 /* Now that we have initialized the parms, we can start their
13380 cleanups. We cannot do this before, since expand_decl_cleanup
13381 should not be called before the parm can be used. */
13382 if (cleanups && !building_stmt_tree ())
13383 {
13384 for (cleanups = nreverse (cleanups); cleanups; cleanups = TREE_CHAIN (cleanups))
13385 {
13386 if (! expand_decl_cleanup (TREE_PURPOSE (cleanups), TREE_VALUE (cleanups)))
13387 cp_error ("parser lost in parsing declaration of `%D'",
13388 TREE_PURPOSE (cleanups));
13389 }
13390 }
13391
13392 /* Create a binding contour which can be used to catch
13393 cleanup-generated temporaries. Also, if the return value needs or
13394 has initialization, deal with that now. */
13395 if (parms_have_cleanups)
13396 {
13397 pushlevel (0);
13398 if (!building_stmt_tree ())
13399 expand_start_bindings (0);
13400 }
13401
13402 if (! building_stmt_tree () && flag_exceptions)
13403 {
13404 /* Do the starting of the exception specifications, if we have any. */
13405 if (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (current_function_decl)))
13406 expand_start_eh_spec ();
13407 }
13408
13409 last_parm_cleanup_insn = get_last_insn ();
13410 last_dtor_insn = get_last_insn ();
13411 }
13412
13413 /* Bind a name and initialization to the return value of
13414 the current function. */
13415
13416 void
13417 store_return_init (decl)
13418 tree decl;
13419 {
13420 /* If this named return value comes in a register, put it in a
13421 pseudo-register. */
13422 if (DECL_REGISTER (decl))
13423 {
13424 original_result_rtx = DECL_RTL (decl);
13425 DECL_RTL (decl) = gen_reg_rtx (DECL_MODE (decl));
13426 }
13427 }
13428
13429 \f
13430 /* Finish up a function declaration and compile that function
13431 all the way to assembler language output. The free the storage
13432 for the function definition.
13433
13434 This is called after parsing the body of the function definition.
13435 LINENO is the current line number.
13436
13437 FLAGS is a bitwise or of the following values:
13438 1 - CALL_POPLEVEL
13439 An extra call to poplevel (and expand_end_bindings) must be
13440 made to take care of the binding contour for the base
13441 initializers. This is only relevant for constructors.
13442 2 - INCLASS_INLINE
13443 We just finished processing the body of an in-class inline
13444 function definition. (This processing will have taken place
13445 after the class definition is complete.) */
13446
13447 void
13448 finish_function (lineno, flags)
13449 int lineno;
13450 int flags;
13451 {
13452 register tree fndecl = current_function_decl;
13453 tree fntype, ctype = NULL_TREE;
13454 rtx fn_last_parm_insn, insns;
13455 /* Label to use if this function is supposed to return a value. */
13456 tree no_return_label = NULL_TREE;
13457 tree decls = NULL_TREE;
13458 int call_poplevel = (flags & 1) != 0;
13459 int inclass_inline = (flags & 2) != 0;
13460 int expand_p;
13461 int nested;
13462
13463 /* When we get some parse errors, we can end up without a
13464 current_function_decl, so cope. */
13465 if (fndecl == NULL_TREE)
13466 return;
13467
13468 nested = function_depth > 1;
13469 fntype = TREE_TYPE (fndecl);
13470
13471 /* TREE_READONLY (fndecl) = 1;
13472 This caused &foo to be of type ptr-to-const-function
13473 which then got a warning when stored in a ptr-to-function variable. */
13474
13475 /* This happens on strange parse errors. */
13476 if (! current_function_parms_stored)
13477 {
13478 call_poplevel = 0;
13479 store_parm_decls ();
13480 }
13481
13482 if (building_stmt_tree ())
13483 {
13484 if (DECL_CONSTRUCTOR_P (fndecl) && call_poplevel)
13485 {
13486 decls = getdecls ();
13487 expand_end_bindings (decls, decls != NULL_TREE, 0);
13488 poplevel (decls != NULL_TREE, 0, 0);
13489 }
13490
13491 /* Because we do not call expand_function_end, we won't call
13492 expand_end_bindings to match the call to
13493 expand_start_bindings we did in store_parm_decls. Therefore,
13494 we explicitly call expand_end_bindings here. However, we
13495 really shouldn't be calling expand_start_bindings at all when
13496 building_stmt_tree; it's conceptually an RTL-generation
13497 function, rather than a front-end function. */
13498 expand_end_bindings (0, 0, 0);
13499 }
13500 else
13501 {
13502 if (write_symbols != NO_DEBUG /*&& TREE_CODE (fntype) != METHOD_TYPE*/)
13503 {
13504 tree ttype = target_type (fntype);
13505 tree parmdecl;
13506
13507 if (IS_AGGR_TYPE (ttype))
13508 /* Let debugger know it should output info for this type. */
13509 note_debug_info_needed (ttype);
13510
13511 for (parmdecl = DECL_ARGUMENTS (fndecl); parmdecl; parmdecl = TREE_CHAIN (parmdecl))
13512 {
13513 ttype = target_type (TREE_TYPE (parmdecl));
13514 if (IS_AGGR_TYPE (ttype))
13515 /* Let debugger know it should output info for this type. */
13516 note_debug_info_needed (ttype);
13517 }
13518 }
13519
13520 /* Clean house because we will need to reorder insns here. */
13521 do_pending_stack_adjust ();
13522
13523 if (dtor_label)
13524 {
13525 tree binfo = TYPE_BINFO (current_class_type);
13526 tree cond = integer_one_node;
13527 tree exprstmt;
13528 tree in_charge_node = lookup_name (in_charge_identifier, 0);
13529 tree virtual_size;
13530 int ok_to_optimize_dtor = 0;
13531 int empty_dtor = get_last_insn () == last_dtor_insn;
13532
13533 if (current_function_assigns_this)
13534 cond = build (NE_EXPR, boolean_type_node,
13535 current_class_ptr, integer_zero_node);
13536 else
13537 {
13538 int n_baseclasses = CLASSTYPE_N_BASECLASSES (current_class_type);
13539
13540 /* If this destructor is empty, then we don't need to check
13541 whether `this' is NULL in some cases. */
13542 if ((flag_this_is_variable & 1) == 0)
13543 ok_to_optimize_dtor = 1;
13544 else if (empty_dtor)
13545 ok_to_optimize_dtor
13546 = (n_baseclasses == 0
13547 || (n_baseclasses == 1
13548 && TYPE_HAS_DESTRUCTOR (TYPE_BINFO_BASETYPE (current_class_type, 0))));
13549 }
13550
13551 /* These initializations might go inline. Protect
13552 the binding level of the parms. */
13553 pushlevel (0);
13554 expand_start_bindings (0);
13555
13556 if (current_function_assigns_this)
13557 {
13558 current_function_assigns_this = 0;
13559 current_function_just_assigned_this = 0;
13560 }
13561
13562 /* Generate the code to call destructor on base class.
13563 If this destructor belongs to a class with virtual
13564 functions, then set the virtual function table
13565 pointer to represent the type of our base class. */
13566
13567 /* This side-effect makes call to `build_delete' generate the
13568 code we have to have at the end of this destructor.
13569 `build_delete' will set the flag again. */
13570 TYPE_HAS_DESTRUCTOR (current_class_type) = 0;
13571
13572 /* These are two cases where we cannot delegate deletion. */
13573 if (TYPE_USES_VIRTUAL_BASECLASSES (current_class_type)
13574 || TYPE_GETS_REG_DELETE (current_class_type))
13575 exprstmt = build_delete (current_class_type, current_class_ref, integer_zero_node,
13576 LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR|LOOKUP_NORMAL, 0);
13577 else
13578 exprstmt = build_delete (current_class_type, current_class_ref, in_charge_node,
13579 LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR|LOOKUP_NORMAL, 0);
13580
13581 /* If we did not assign to this, then `this' is non-zero at
13582 the end of a destructor. As a special optimization, don't
13583 emit test if this is an empty destructor. If it does nothing,
13584 it does nothing. If it calls a base destructor, the base
13585 destructor will perform the test. */
13586
13587 if (exprstmt != error_mark_node
13588 && (TREE_CODE (exprstmt) != NOP_EXPR
13589 || TREE_OPERAND (exprstmt, 0) != integer_zero_node
13590 || TYPE_USES_VIRTUAL_BASECLASSES (current_class_type)))
13591 {
13592 expand_label (dtor_label);
13593 if (cond != integer_one_node)
13594 expand_start_cond (cond, 0);
13595 if (exprstmt != void_zero_node)
13596 /* Don't call `expand_expr_stmt' if we're not going to do
13597 anything, since -Wall will give a diagnostic. */
13598 expand_expr_stmt (exprstmt);
13599
13600 /* Run destructor on all virtual baseclasses. */
13601 if (TYPE_USES_VIRTUAL_BASECLASSES (current_class_type))
13602 {
13603 tree vbases = nreverse (copy_list (CLASSTYPE_VBASECLASSES (current_class_type)));
13604 expand_start_cond (build (BIT_AND_EXPR, integer_type_node,
13605 in_charge_node, integer_two_node), 0);
13606 while (vbases)
13607 {
13608 if (TYPE_NEEDS_DESTRUCTOR (BINFO_TYPE (vbases)))
13609 {
13610 tree vb = get_vbase
13611 (BINFO_TYPE (vbases),
13612 TYPE_BINFO (current_class_type));
13613 expand_expr_stmt
13614 (build_scoped_method_call
13615 (current_class_ref, vb, dtor_identifier,
13616 build_expr_list (NULL_TREE, integer_zero_node)));
13617 }
13618 vbases = TREE_CHAIN (vbases);
13619 }
13620 expand_end_cond ();
13621 }
13622
13623 do_pending_stack_adjust ();
13624 if (cond != integer_one_node)
13625 expand_end_cond ();
13626 }
13627
13628 virtual_size = c_sizeof (current_class_type);
13629
13630 /* At the end, call delete if that's what's requested. */
13631
13632 /* FDIS sez: At the point of definition of a virtual destructor
13633 (including an implicit definition), non-placement operator
13634 delete shall be looked up in the scope of the destructor's
13635 class and if found shall be accessible and unambiguous.
13636
13637 This is somewhat unclear, but I take it to mean that if the
13638 class only defines placement deletes we don't do anything here.
13639 So we pass LOOKUP_SPECULATIVELY; delete_sanity will complain
13640 for us if they ever try to delete one of these. */
13641
13642 if (TYPE_GETS_REG_DELETE (current_class_type)
13643 || TYPE_USES_VIRTUAL_BASECLASSES (current_class_type))
13644 exprstmt = build_op_delete_call
13645 (DELETE_EXPR, current_class_ptr, virtual_size,
13646 LOOKUP_NORMAL | LOOKUP_SPECULATIVELY, NULL_TREE);
13647 else
13648 exprstmt = NULL_TREE;
13649
13650 if (exprstmt)
13651 {
13652 cond = build (BIT_AND_EXPR, integer_type_node,
13653 in_charge_node, integer_one_node);
13654 expand_start_cond (cond, 0);
13655 expand_expr_stmt (exprstmt);
13656 expand_end_cond ();
13657 }
13658
13659 /* End of destructor. */
13660 expand_end_bindings (NULL_TREE, getdecls () != NULL_TREE, 0);
13661 poplevel (getdecls () != NULL_TREE, 0, 0);
13662
13663 /* Back to the top of destructor. */
13664 /* Don't execute destructor code if `this' is NULL. */
13665
13666 start_sequence ();
13667
13668 /* If the dtor is empty, and we know there is not possible way we
13669 could use any vtable entries, before they are possibly set by
13670 a base class dtor, we don't have to setup the vtables, as we
13671 know that any base class dtoring will set up any vtables it
13672 needs. We avoid MI, because one base class dtor can do a
13673 virtual dispatch to an overridden function that would need to
13674 have a non-related vtable set up, we cannot avoid setting up
13675 vtables in that case. We could change this to see if there is
13676 just one vtable. */
13677 if (! empty_dtor || TYPE_USES_COMPLEX_INHERITANCE (current_class_type))
13678 {
13679 /* Make all virtual function table pointers in non-virtual base
13680 classes point to CURRENT_CLASS_TYPE's virtual function
13681 tables. */
13682 expand_direct_vtbls_init (binfo, binfo, 1, 0, current_class_ptr);
13683
13684 if (TYPE_USES_VIRTUAL_BASECLASSES (current_class_type))
13685 expand_indirect_vtbls_init (binfo, current_class_ref, current_class_ptr);
13686 }
13687
13688 if (! ok_to_optimize_dtor)
13689 {
13690 cond = build_binary_op (NE_EXPR,
13691 current_class_ptr, integer_zero_node);
13692 expand_start_cond (cond, 0);
13693 }
13694
13695 insns = get_insns ();
13696 end_sequence ();
13697
13698 fn_last_parm_insn = get_first_nonparm_insn ();
13699 if (fn_last_parm_insn == NULL_RTX)
13700 fn_last_parm_insn = get_last_insn ();
13701 else
13702 fn_last_parm_insn = previous_insn (fn_last_parm_insn);
13703
13704 emit_insns_after (insns, fn_last_parm_insn);
13705
13706 if (! ok_to_optimize_dtor)
13707 expand_end_cond ();
13708 }
13709 else if (current_function_assigns_this)
13710 {
13711 /* Does not need to call emit_base_init, because
13712 that is done (if needed) just after assignment to this
13713 is seen. */
13714
13715 if (DECL_CONSTRUCTOR_P (current_function_decl))
13716 {
13717 end_protect_partials ();
13718 expand_label (ctor_label);
13719 ctor_label = NULL_TREE;
13720
13721 if (call_poplevel)
13722 {
13723 decls = getdecls ();
13724 expand_end_bindings (decls, decls != NULL_TREE, 0);
13725 poplevel (decls != NULL_TREE, 0, 0);
13726 }
13727 /* c_expand_return knows to return 'this' from a constructor. */
13728 c_expand_return (NULL_TREE);
13729 }
13730 else if (TREE_CODE (TREE_TYPE (DECL_RESULT (current_function_decl))) != VOID_TYPE
13731 && return_label != NULL_RTX)
13732 no_return_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
13733
13734 current_function_assigns_this = 0;
13735 current_function_just_assigned_this = 0;
13736 base_init_expr = NULL_TREE;
13737 }
13738 else if (DECL_CONSTRUCTOR_P (fndecl))
13739 {
13740 tree cond = NULL_TREE, thenclause = NULL_TREE;
13741 /* Allow constructor for a type to get a new instance of the object
13742 using `build_new'. */
13743 tree abstract_virtuals = CLASSTYPE_ABSTRACT_VIRTUALS (current_class_type);
13744 CLASSTYPE_ABSTRACT_VIRTUALS (current_class_type) = NULL_TREE;
13745
13746 if (flag_this_is_variable > 0)
13747 {
13748 cond = build_binary_op (EQ_EXPR,
13749 current_class_ptr, integer_zero_node);
13750 thenclause = build_modify_expr (current_class_ptr, NOP_EXPR,
13751 build_new (NULL_TREE, current_class_type, void_type_node, 0));
13752 }
13753
13754 CLASSTYPE_ABSTRACT_VIRTUALS (current_class_type) = abstract_virtuals;
13755
13756 start_sequence ();
13757
13758 if (flag_this_is_variable > 0)
13759 {
13760 expand_start_cond (cond, 0);
13761 expand_expr_stmt (thenclause);
13762 expand_end_cond ();
13763 }
13764
13765 /* Emit insns from `emit_base_init' which sets up virtual
13766 function table pointer(s). */
13767 if (base_init_expr)
13768 {
13769 expand_expr_stmt (base_init_expr);
13770 base_init_expr = NULL_TREE;
13771 }
13772
13773 insns = get_insns ();
13774 end_sequence ();
13775
13776 /* This is where the body of the constructor begins. */
13777
13778 emit_insns_after (insns, last_parm_cleanup_insn);
13779
13780 end_protect_partials ();
13781
13782 /* This is where the body of the constructor ends. */
13783 expand_label (ctor_label);
13784 ctor_label = NULL_TREE;
13785
13786 if (call_poplevel)
13787 {
13788 decls = getdecls ();
13789 expand_end_bindings (decls, decls != NULL_TREE, 0);
13790 poplevel (decls != NULL_TREE, 1, 0);
13791 }
13792
13793 /* c_expand_return knows to return 'this' from a constructor. */
13794 c_expand_return (NULL_TREE);
13795
13796 current_function_assigns_this = 0;
13797 current_function_just_assigned_this = 0;
13798 }
13799 else if (DECL_MAIN_P (fndecl))
13800 {
13801 /* Make it so that `main' always returns 0 by default. */
13802 #ifdef VMS
13803 c_expand_return (integer_one_node);
13804 #else
13805 c_expand_return (integer_zero_node);
13806 #endif
13807 }
13808 else if (return_label != NULL_RTX
13809 && current_function_return_value == NULL_TREE
13810 && ! DECL_NAME (DECL_RESULT (current_function_decl)))
13811 no_return_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
13812
13813 if (flag_exceptions)
13814 expand_exception_blocks ();
13815
13816 /* If this function is supposed to return a value, ensure that
13817 we do not fall into the cleanups by mistake. The end of our
13818 function will look like this:
13819
13820 user code (may have return stmt somewhere)
13821 goto no_return_label
13822 cleanup_label:
13823 cleanups
13824 goto return_label
13825 no_return_label:
13826 NOTE_INSN_FUNCTION_END
13827 return_label:
13828 things for return
13829
13830 If the user omits a return stmt in the USER CODE section, we
13831 will have a control path which reaches NOTE_INSN_FUNCTION_END.
13832 Otherwise, we won't. */
13833 if (no_return_label)
13834 {
13835 DECL_CONTEXT (no_return_label) = fndecl;
13836 DECL_INITIAL (no_return_label) = error_mark_node;
13837 DECL_SOURCE_FILE (no_return_label) = input_filename;
13838 DECL_SOURCE_LINE (no_return_label) = lineno;
13839 expand_goto (no_return_label);
13840 }
13841
13842 if (cleanup_label)
13843 {
13844 /* Remove the binding contour which is used
13845 to catch cleanup-generated temporaries. */
13846 expand_end_bindings (0, 0, 0);
13847 poplevel (0, 0, 0);
13848
13849 /* Emit label at beginning of cleanup code for parameters. */
13850 emit_label (cleanup_label);
13851 }
13852
13853 /* Get return value into register if that's where it's supposed to be. */
13854 if (original_result_rtx)
13855 fixup_result_decl (DECL_RESULT (fndecl), original_result_rtx);
13856
13857 /* Finish building code that will trigger warnings if users forget
13858 to make their functions return values. */
13859 if (no_return_label || cleanup_label)
13860 emit_jump (return_label);
13861 if (no_return_label)
13862 {
13863 /* We don't need to call `expand_*_return' here because we
13864 don't need any cleanups here--this path of code is only
13865 for error checking purposes. */
13866 expand_label (no_return_label);
13867 }
13868
13869 /* We hard-wired immediate_size_expand to zero in
13870 start_function. Expand_function_end will decrement this
13871 variable. So, we set the variable to one here, so that after
13872 the decrement it will remain zero. */
13873 immediate_size_expand = 1;
13874
13875 /* Generate rtl for function exit. */
13876 expand_function_end (input_filename, lineno, 1);
13877 }
13878
13879 /* We have to save this value here in case
13880 maybe_end_member_template_processing decides to pop all the
13881 template parameters. */
13882 expand_p = !building_stmt_tree ();
13883
13884 /* If we're saving up tree structure, tie off the function now. */
13885 if (!expand_p)
13886 finish_stmt_tree (fndecl);
13887
13888 /* This must come after expand_function_end because cleanups might
13889 have declarations (from inline functions) that need to go into
13890 this function's blocks. */
13891 if (current_binding_level->parm_flag != 1)
13892 my_friendly_abort (122);
13893 poplevel (1, 0, 1);
13894
13895 /* If this is a in-class inline definition, we may have to pop the
13896 bindings for the template parameters that we added in
13897 maybe_begin_member_template_processing when start_function was
13898 called. */
13899 if (inclass_inline)
13900 maybe_end_member_template_processing ();
13901
13902 /* Reset scope for C++: if we were in the scope of a class,
13903 then when we finish this function, we are not longer so.
13904 This cannot be done until we know for sure that no more
13905 class members will ever be referenced in this function
13906 (i.e., calls to destructors). */
13907 if (current_class_name)
13908 {
13909 ctype = current_class_type;
13910 pop_nested_class ();
13911 }
13912
13913 /* Must mark the RESULT_DECL as being in this function. */
13914 DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
13915
13916 /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
13917 to the FUNCTION_DECL node itself. */
13918 BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
13919
13920 /* Undo the call to push_momentary in start_function. */
13921 pop_momentary ();
13922
13923 if (expand_p)
13924 {
13925 int saved_flag_keep_inline_functions =
13926 flag_keep_inline_functions;
13927
13928 /* So we can tell if jump_optimize sets it to 1. */
13929 can_reach_end = 0;
13930
13931 if (DECL_CONTEXT (fndecl) != NULL_TREE
13932 && hack_decl_function_context (fndecl))
13933 /* Trick rest_of_compilation into not deferring output of this
13934 function, even if it is inline, since the rtl_obstack for
13935 this function is the function_obstack of the enclosing
13936 function and will be deallocated when the enclosing
13937 function is gone. See save_tree_status. */
13938 flag_keep_inline_functions = 1;
13939
13940 /* If this is a nested function (like a template instantiation
13941 that we're compiling in the midst of compiling something
13942 else), push a new GC context. That will keep local variables
13943 on the stack from being collected while we're doing the
13944 compilation of this function. */
13945 if (function_depth > 1)
13946 ggc_push_context ();
13947
13948 /* Run the optimizers and output the assembler code for this
13949 function. */
13950 if (DECL_ARTIFICIAL (fndecl))
13951 {
13952 /* Do we really *want* to inline this synthesized method? */
13953
13954 int save_fif = flag_inline_functions;
13955 flag_inline_functions = 1;
13956
13957 /* Turn off DECL_INLINE for the moment so function_cannot_inline_p
13958 will check our size. */
13959 DECL_INLINE (fndecl) = 0;
13960
13961 rest_of_compilation (fndecl);
13962 flag_inline_functions = save_fif;
13963 }
13964 else
13965 rest_of_compilation (fndecl);
13966
13967 /* Undo the call to ggc_push_context above. */
13968 if (function_depth > 1)
13969 ggc_pop_context ();
13970
13971 flag_keep_inline_functions = saved_flag_keep_inline_functions;
13972
13973 if (DECL_SAVED_INSNS (fndecl) && ! TREE_ASM_WRITTEN (fndecl))
13974 {
13975 /* Set DECL_EXTERNAL so that assemble_external will be called as
13976 necessary. We'll clear it again in finish_file. */
13977 if (! DECL_EXTERNAL (fndecl))
13978 DECL_NOT_REALLY_EXTERN (fndecl) = 1;
13979 DECL_EXTERNAL (fndecl) = 1;
13980 mark_inline_for_output (fndecl);
13981 }
13982
13983 if (ctype && TREE_ASM_WRITTEN (fndecl))
13984 note_debug_info_needed (ctype);
13985
13986 current_function_returns_null |= can_reach_end;
13987
13988 /* Since we don't normally go through c_expand_return for constructors,
13989 this normally gets the wrong value.
13990 Also, named return values have their return codes emitted after
13991 NOTE_INSN_FUNCTION_END, confusing jump.c. */
13992 if (DECL_CONSTRUCTOR_P (fndecl)
13993 || DECL_NAME (DECL_RESULT (fndecl)) != NULL_TREE)
13994 current_function_returns_null = 0;
13995
13996 if (TREE_THIS_VOLATILE (fndecl) && current_function_returns_null)
13997 cp_warning ("`noreturn' function `%D' does return", fndecl);
13998 else if ((warn_return_type || pedantic)
13999 && current_function_returns_null
14000 && TREE_CODE (TREE_TYPE (fntype)) != VOID_TYPE)
14001 {
14002 /* If this function returns non-void and control can drop through,
14003 complain. */
14004 cp_warning ("control reaches end of non-void function `%D'", fndecl);
14005 }
14006 /* With just -W, complain only if function returns both with
14007 and without a value. */
14008 else if (extra_warnings
14009 && current_function_returns_value && current_function_returns_null)
14010 warning ("this function may return with or without a value");
14011 }
14012
14013 --function_depth;
14014
14015 /* Free all the tree nodes making up this function. */
14016 /* Switch back to allocating nodes permanently
14017 until we start another function. */
14018 if (! nested)
14019 permanent_allocation (1);
14020
14021 if (DECL_SAVED_INSNS (fndecl) == 0)
14022 {
14023 tree t;
14024
14025 /* Stop pointing to the local nodes about to be freed. */
14026 /* But DECL_INITIAL must remain nonzero so we know this
14027 was an actual function definition. */
14028 DECL_INITIAL (fndecl) = error_mark_node;
14029 for (t = DECL_ARGUMENTS (fndecl); t; t = TREE_CHAIN (t))
14030 DECL_RTL (t) = DECL_INCOMING_RTL (t) = NULL_RTX;
14031 }
14032
14033 if (DECL_STATIC_CONSTRUCTOR (fndecl))
14034 static_ctors = tree_cons (NULL_TREE, fndecl, static_ctors);
14035 if (DECL_STATIC_DESTRUCTOR (fndecl))
14036 static_dtors = tree_cons (NULL_TREE, fndecl, static_dtors);
14037
14038 if (! nested)
14039 {
14040 /* Let the error reporting routines know that we're outside a
14041 function. For a nested function, this value is used in
14042 pop_cp_function_context and then reset via pop_function_context. */
14043 current_function_decl = NULL_TREE;
14044 }
14045
14046 named_label_uses = NULL;
14047 current_class_ptr = NULL_TREE;
14048 current_class_ref = NULL_TREE;
14049 }
14050 \f
14051 /* Create the FUNCTION_DECL for a function definition.
14052 DECLSPECS and DECLARATOR are the parts of the declaration;
14053 they describe the return type and the name of the function,
14054 but twisted together in a fashion that parallels the syntax of C.
14055
14056 This function creates a binding context for the function body
14057 as well as setting up the FUNCTION_DECL in current_function_decl.
14058
14059 Returns a FUNCTION_DECL on success.
14060
14061 If the DECLARATOR is not suitable for a function (it defines a datum
14062 instead), we return 0, which tells yyparse to report a parse error.
14063
14064 May return void_type_node indicating that this method is actually
14065 a friend. See grokfield for more details.
14066
14067 Came here with a `.pushlevel' .
14068
14069 DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
14070 CHANGES TO CODE IN `grokfield'. */
14071
14072 tree
14073 start_method (declspecs, declarator, attrlist)
14074 tree declarator, declspecs, attrlist;
14075 {
14076 tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
14077 attrlist);
14078
14079 /* Something too ugly to handle. */
14080 if (fndecl == NULL_TREE)
14081 return NULL_TREE;
14082
14083 /* Pass friends other than inline friend functions back. */
14084 if (fndecl == void_type_node)
14085 return fndecl;
14086
14087 if (TREE_CODE (fndecl) != FUNCTION_DECL)
14088 /* Not a function, tell parser to report parse error. */
14089 return NULL_TREE;
14090
14091 if (DECL_IN_AGGR_P (fndecl))
14092 {
14093 if (IDENTIFIER_ERROR_LOCUS (DECL_ASSEMBLER_NAME (fndecl)) != current_class_type)
14094 {
14095 if (DECL_CONTEXT (fndecl)
14096 && TREE_CODE( DECL_CONTEXT (fndecl)) != NAMESPACE_DECL)
14097 cp_error ("`%D' is already defined in class %s", fndecl,
14098 TYPE_NAME_STRING (DECL_CONTEXT (fndecl)));
14099 }
14100 return void_type_node;
14101 }
14102
14103 check_template_shadow (fndecl);
14104
14105 DECL_THIS_INLINE (fndecl) = 1;
14106
14107 if (flag_default_inline)
14108 DECL_INLINE (fndecl) = 1;
14109
14110 /* We process method specializations in finish_struct_1. */
14111 if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
14112 fndecl = push_template_decl (fndecl);
14113
14114 /* We read in the parameters on the maybepermanent_obstack,
14115 but we won't be getting back to them until after we
14116 may have clobbered them. So the call to preserve_data
14117 will keep them safe. */
14118 preserve_data ();
14119
14120 if (! DECL_FRIEND_P (fndecl))
14121 {
14122 if (TREE_CHAIN (fndecl))
14123 {
14124 fndecl = copy_node (fndecl);
14125 TREE_CHAIN (fndecl) = NULL_TREE;
14126 }
14127
14128 if (DECL_CONSTRUCTOR_P (fndecl))
14129 {
14130 if (! grok_ctor_properties (current_class_type, fndecl))
14131 return void_type_node;
14132 }
14133 else if (IDENTIFIER_OPNAME_P (DECL_NAME (fndecl)))
14134 grok_op_properties (fndecl, DECL_VIRTUAL_P (fndecl), 0);
14135 }
14136
14137 cp_finish_decl (fndecl, NULL_TREE, NULL_TREE, 0, 0);
14138
14139 /* Make a place for the parms */
14140 pushlevel (0);
14141 current_binding_level->parm_flag = 1;
14142
14143 DECL_IN_AGGR_P (fndecl) = 1;
14144 return fndecl;
14145 }
14146
14147 /* Go through the motions of finishing a function definition.
14148 We don't compile this method until after the whole class has
14149 been processed.
14150
14151 FINISH_METHOD must return something that looks as though it
14152 came from GROKFIELD (since we are defining a method, after all).
14153
14154 This is called after parsing the body of the function definition.
14155 STMTS is the chain of statements that makes up the function body.
14156
14157 DECL is the ..._DECL that `start_method' provided. */
14158
14159 tree
14160 finish_method (decl)
14161 tree decl;
14162 {
14163 register tree fndecl = decl;
14164 tree old_initial;
14165
14166 register tree link;
14167
14168 if (decl == void_type_node)
14169 return decl;
14170
14171 old_initial = DECL_INITIAL (fndecl);
14172
14173 /* Undo the level for the parms (from start_method).
14174 This is like poplevel, but it causes nothing to be
14175 saved. Saving information here confuses symbol-table
14176 output routines. Besides, this information will
14177 be correctly output when this method is actually
14178 compiled. */
14179
14180 /* Clear out the meanings of the local variables of this level;
14181 also record in each decl which block it belongs to. */
14182
14183 for (link = current_binding_level->names; link; link = TREE_CHAIN (link))
14184 {
14185 if (DECL_NAME (link) != NULL_TREE)
14186 pop_binding (DECL_NAME (link), link);
14187 my_friendly_assert (TREE_CODE (link) != FUNCTION_DECL, 163);
14188 DECL_CONTEXT (link) = NULL_TREE;
14189 }
14190
14191 GNU_xref_end_scope ((HOST_WIDE_INT) current_binding_level,
14192 (HOST_WIDE_INT) current_binding_level->level_chain,
14193 current_binding_level->parm_flag,
14194 current_binding_level->keep);
14195
14196 poplevel (0, 0, 0);
14197
14198 DECL_INITIAL (fndecl) = old_initial;
14199
14200 /* We used to check if the context of FNDECL was different from
14201 current_class_type as another way to get inside here. This didn't work
14202 for String.cc in libg++. */
14203 if (DECL_FRIEND_P (fndecl))
14204 {
14205 CLASSTYPE_INLINE_FRIENDS (current_class_type)
14206 = tree_cons (NULL_TREE, fndecl, CLASSTYPE_INLINE_FRIENDS (current_class_type));
14207 decl = void_type_node;
14208 }
14209
14210 return decl;
14211 }
14212 \f
14213 /* Called when a new struct TYPE is defined.
14214 If this structure or union completes the type of any previous
14215 variable declaration, lay it out and output its rtl. */
14216
14217 void
14218 hack_incomplete_structures (type)
14219 tree type;
14220 {
14221 tree *list;
14222
14223 if (current_binding_level->incomplete == NULL_TREE)
14224 return;
14225
14226 if (!type) /* Don't do this for class templates. */
14227 return;
14228
14229 for (list = &current_binding_level->incomplete; *list; )
14230 {
14231 tree decl = TREE_VALUE (*list);
14232 if ((decl && TREE_TYPE (decl) == type)
14233 || (TREE_TYPE (decl)
14234 && TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
14235 && TREE_TYPE (TREE_TYPE (decl)) == type))
14236 {
14237 int toplevel = toplevel_bindings_p ();
14238 if (TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
14239 && TREE_TYPE (TREE_TYPE (decl)) == type)
14240 layout_type (TREE_TYPE (decl));
14241 layout_decl (decl, 0);
14242 rest_of_decl_compilation (decl, NULL_PTR, toplevel, 0);
14243 if (! toplevel)
14244 {
14245 tree cleanup;
14246 expand_decl (decl);
14247 cleanup = maybe_build_cleanup (decl);
14248 expand_decl_init (decl);
14249 if (! expand_decl_cleanup (decl, cleanup))
14250 cp_error ("parser lost in parsing declaration of `%D'",
14251 decl);
14252 }
14253 *list = TREE_CHAIN (*list);
14254 }
14255 else
14256 list = &TREE_CHAIN (*list);
14257 }
14258 }
14259
14260 /* If DECL is of a type which needs a cleanup, build that cleanup here.
14261 See build_delete for information about AUTO_DELETE.
14262
14263 Don't build these on the momentary obstack; they must live
14264 the life of the binding contour. */
14265
14266 static tree
14267 maybe_build_cleanup_1 (decl, auto_delete)
14268 tree decl, auto_delete;
14269 {
14270 tree type = TREE_TYPE (decl);
14271 if (type != error_mark_node && TYPE_NEEDS_DESTRUCTOR (type))
14272 {
14273 int temp = 0, flags = LOOKUP_NORMAL|LOOKUP_DESTRUCTOR;
14274 tree rval;
14275
14276 if (TREE_CODE (decl) != PARM_DECL)
14277 temp = suspend_momentary ();
14278
14279 if (TREE_CODE (type) == ARRAY_TYPE)
14280 rval = decl;
14281 else
14282 {
14283 mark_addressable (decl);
14284 rval = build_unary_op (ADDR_EXPR, decl, 0);
14285 }
14286
14287 /* Optimize for space over speed here. */
14288 if (! TYPE_USES_VIRTUAL_BASECLASSES (type)
14289 || flag_expensive_optimizations)
14290 flags |= LOOKUP_NONVIRTUAL;
14291
14292 rval = build_delete (TREE_TYPE (rval), rval, auto_delete, flags, 0);
14293
14294 if (TYPE_USES_VIRTUAL_BASECLASSES (type)
14295 && ! TYPE_HAS_DESTRUCTOR (type))
14296 rval = build_compound_expr (tree_cons (NULL_TREE, rval,
14297 build_expr_list (NULL_TREE, build_vbase_delete (type, decl))));
14298
14299 if (TREE_CODE (decl) != PARM_DECL)
14300 resume_momentary (temp);
14301
14302 return rval;
14303 }
14304 return 0;
14305 }
14306
14307 /* If DECL is of a type which needs a cleanup, build that cleanup
14308 here. The cleanup does free the storage with a call to delete. */
14309
14310 tree
14311 maybe_build_cleanup_and_delete (decl)
14312 tree decl;
14313 {
14314 return maybe_build_cleanup_1 (decl, integer_three_node);
14315 }
14316
14317 /* If DECL is of a type which needs a cleanup, build that cleanup
14318 here. The cleanup does not free the storage with a call a delete. */
14319
14320 tree
14321 maybe_build_cleanup (decl)
14322 tree decl;
14323 {
14324 return maybe_build_cleanup_1 (decl, integer_two_node);
14325 }
14326 \f
14327 /* Expand a C++ expression at the statement level.
14328 This is needed to ferret out nodes which have UNKNOWN_TYPE.
14329 The C++ type checker should get all of these out when
14330 expressions are combined with other, type-providing, expressions,
14331 leaving only orphan expressions, such as:
14332
14333 &class::bar; / / takes its address, but does nothing with it. */
14334
14335 void
14336 cplus_expand_expr_stmt (exp)
14337 tree exp;
14338 {
14339 exp = require_complete_type_in_void (exp);
14340
14341 if (TREE_CODE (exp) == FUNCTION_DECL)
14342 {
14343 cp_warning ("reference, not call, to function `%D'", exp);
14344 warning ("at this point in file");
14345 }
14346
14347 #if 0
14348 /* We should do this eventually, but right now this causes regex.o from
14349 libg++ to miscompile, and tString to core dump. */
14350 exp = build1 (CLEANUP_POINT_EXPR, TREE_TYPE (exp), exp);
14351 #endif
14352
14353 /* Strip unused implicit INDIRECT_REFs of references. */
14354 if (TREE_CODE (exp) == INDIRECT_REF
14355 && TREE_CODE (TREE_TYPE (TREE_OPERAND (exp, 0))) == REFERENCE_TYPE)
14356 exp = TREE_OPERAND (exp, 0);
14357
14358 /* If we don't do this, we end up down inside expand_expr
14359 trying to do TYPE_MODE on the ERROR_MARK, and really
14360 go outside the bounds of the type. */
14361 if (exp != error_mark_node)
14362 expand_expr_stmt (break_out_cleanups (exp));
14363 }
14364
14365 /* When a stmt has been parsed, this function is called. */
14366
14367 void
14368 finish_stmt ()
14369 {
14370 if (!current_function_assigns_this
14371 && current_function_just_assigned_this)
14372 {
14373 if (DECL_CONSTRUCTOR_P (current_function_decl))
14374 {
14375 /* Constructors must wait until we are out of control
14376 zones before calling base constructors. */
14377 if (in_control_zone_p ())
14378 return;
14379 expand_expr_stmt (base_init_expr);
14380 check_base_init (current_class_type);
14381 }
14382 current_function_assigns_this = 1;
14383 }
14384
14385 /* Always assume this statement was not an expression statement. If
14386 it actually was an expression statement, its our callers
14387 responsibility to fix this up. */
14388 last_expr_type = NULL_TREE;
14389 }
14390
14391 /* Change a static member function definition into a FUNCTION_TYPE, instead
14392 of the METHOD_TYPE that we create when it's originally parsed.
14393
14394 WARNING: DO NOT pass &TREE_TYPE (decl) to FN or &TYPE_ARG_TYPES
14395 (TREE_TYPE (decl)) to ARGTYPES, as doing so will corrupt the types of
14396 other decls. Either pass the addresses of local variables or NULL. */
14397
14398 void
14399 revert_static_member_fn (decl, fn, argtypes)
14400 tree *decl, *fn, *argtypes;
14401 {
14402 tree tmp;
14403 tree function = fn ? *fn : TREE_TYPE (*decl);
14404 tree args = argtypes ? *argtypes : TYPE_ARG_TYPES (function);
14405
14406 if (CP_TYPE_QUALS (TREE_TYPE (TREE_VALUE (args)))
14407 != TYPE_UNQUALIFIED)
14408 cp_error ("static member function `%#D' declared with type qualifiers",
14409 *decl);
14410
14411 args = TREE_CHAIN (args);
14412 tmp = build_function_type (TREE_TYPE (function), args);
14413 tmp = build_qualified_type (tmp, CP_TYPE_QUALS (function));
14414 tmp = build_exception_variant (tmp,
14415 TYPE_RAISES_EXCEPTIONS (function));
14416 TREE_TYPE (*decl) = tmp;
14417 if (DECL_ARGUMENTS (*decl))
14418 DECL_ARGUMENTS (*decl) = TREE_CHAIN (DECL_ARGUMENTS (*decl));
14419 DECL_STATIC_FUNCTION_P (*decl) = 1;
14420 if (fn)
14421 *fn = tmp;
14422 if (argtypes)
14423 *argtypes = args;
14424 }
14425
14426 /* Save and reinitialize the variables
14427 used during compilation of a C++ function. */
14428
14429 static void
14430 push_cp_function_context (f)
14431 struct function *f;
14432 {
14433 struct language_function *p
14434 = ((struct language_function *)
14435 xcalloc (1, sizeof (struct language_function)));
14436 f->language = p;
14437 if (f->next)
14438 p->binding_level = f->next->language->binding_level;
14439
14440 /* For now, we always assume we're expanding all the way to RTL
14441 unless we're explicitly doing otherwise. */
14442 expanding_p = 1;
14443
14444 /* Whenever we start a new function, we destroy temporaries in the
14445 usual way. */
14446 stmts_are_full_exprs_p = 1;
14447 }
14448
14449 /* Restore the variables used during compilation of a C++ function. */
14450
14451 static void
14452 pop_cp_function_context (f)
14453 struct function *f;
14454 {
14455 free (f->language);
14456 f->language = 0;
14457 }
14458
14459 void
14460 mark_cp_function_context (f)
14461 struct function *f;
14462 {
14463 struct language_function *p = f->language;
14464
14465 if (!p)
14466 return;
14467
14468 ggc_mark_tree (p->x_named_labels);
14469 ggc_mark_tree (p->x_ctor_label);
14470 ggc_mark_tree (p->x_dtor_label);
14471 ggc_mark_tree (p->x_base_init_list);
14472 ggc_mark_tree (p->x_member_init_list);
14473 ggc_mark_tree (p->x_base_init_expr);
14474 ggc_mark_tree (p->x_current_class_ptr);
14475 ggc_mark_tree (p->x_current_class_ref);
14476 ggc_mark_tree (p->x_last_tree);
14477 ggc_mark_tree (p->x_last_expr_type);
14478
14479 ggc_mark_rtx (p->x_last_dtor_insn);
14480 ggc_mark_rtx (p->x_last_parm_cleanup_insn);
14481 ggc_mark_rtx (p->x_result_rtx);
14482
14483 mark_binding_level (&p->binding_level);
14484 }
14485
14486
14487 int
14488 in_function_p ()
14489 {
14490 return function_depth != 0;
14491 }
14492
14493
14494 void
14495 lang_mark_false_label_stack (l)
14496 struct label_node *l;
14497 {
14498 /* C++ doesn't use false_label_stack. It better be NULL. */
14499 my_friendly_assert (l == NULL, 19990904);
14500 }
14501
14502 void
14503 lang_mark_tree (t)
14504 tree t;
14505 {
14506 enum tree_code code = TREE_CODE (t);
14507 if (code == IDENTIFIER_NODE)
14508 {
14509 struct lang_identifier *li = (struct lang_identifier *) t;
14510 struct lang_id2 *li2 = li->x;
14511 ggc_mark_tree (li->namespace_bindings);
14512 ggc_mark_tree (li->class_value);
14513 ggc_mark_tree (li->class_template_info);
14514
14515 if (li2)
14516 {
14517 ggc_mark_tree (li2->label_value);
14518 ggc_mark_tree (li2->implicit_decl);
14519 ggc_mark_tree (li2->error_locus);
14520 }
14521 }
14522 else if (code == CPLUS_BINDING)
14523 {
14524 if (BINDING_HAS_LEVEL_P (t))
14525 mark_binding_level (&BINDING_LEVEL (t));
14526 else
14527 ggc_mark_tree (BINDING_SCOPE (t));
14528 ggc_mark_tree (BINDING_VALUE (t));
14529 }
14530 else if (code == OVERLOAD)
14531 ggc_mark_tree (OVL_FUNCTION (t));
14532 else if (code == TEMPLATE_PARM_INDEX)
14533 ggc_mark_tree (TEMPLATE_PARM_DECL (t));
14534 else if (TREE_CODE_CLASS (code) == 'd')
14535 {
14536 struct lang_decl *ld = DECL_LANG_SPECIFIC (t);
14537
14538 if (ld)
14539 {
14540 ggc_mark (ld);
14541 ggc_mark_tree (ld->decl_flags.access);
14542 ggc_mark_tree (ld->decl_flags.context);
14543 if (TREE_CODE (t) != NAMESPACE_DECL)
14544 ggc_mark_tree (ld->decl_flags.u.template_info);
14545 if (CAN_HAVE_FULL_LANG_DECL_P (t))
14546 {
14547 ggc_mark_tree (ld->main_decl_variant);
14548 ggc_mark_tree (ld->befriending_classes);
14549 ggc_mark_tree (ld->saved_tree);
14550 if (TREE_CODE (t) == TYPE_DECL)
14551 ggc_mark_tree (ld->u.sorted_fields);
14552 }
14553 }
14554 }
14555 else if (TREE_CODE_CLASS (code) == 't')
14556 {
14557 struct lang_type *lt = TYPE_LANG_SPECIFIC (t);
14558
14559 if (lt && !(TREE_CODE (t) == POINTER_TYPE
14560 && TREE_CODE (TREE_TYPE (t)) == METHOD_TYPE))
14561 {
14562 ggc_mark_tree (lt->vfields);
14563 ggc_mark_tree (lt->vbases);
14564 ggc_mark_tree (lt->tags);
14565 ggc_mark_tree (lt->search_slot);
14566 ggc_mark_tree (lt->size);
14567 ggc_mark_tree (lt->abstract_virtuals);
14568 ggc_mark_tree (lt->friend_classes);
14569 ggc_mark_tree (lt->rtti);
14570 ggc_mark_tree (lt->methods);
14571 ggc_mark_tree (lt->template_info);
14572 ggc_mark_tree (lt->befriending_classes);
14573 }
14574 else if (lt)
14575 /* In the case of pointer-to-member function types, the
14576 TYPE_LANG_SPECIFIC is really just a tree. */
14577 ggc_mark_tree ((tree) lt);
14578 }
14579 }
14580
14581 void
14582 lang_cleanup_tree (t)
14583 tree t;
14584 {
14585 if (TREE_CODE_CLASS (TREE_CODE (t)) == 't'
14586 && TYPE_LANG_SPECIFIC (t) != NULL
14587 && !(TREE_CODE (t) == POINTER_TYPE
14588 && TREE_CODE (TREE_TYPE (t)) == METHOD_TYPE))
14589 free (TYPE_LANG_SPECIFIC (t));
14590 }
This page took 0.693031 seconds and 5 git commands to generate.