cp-tree.def (CPLUS_BINDING): Update documentation.
[gcc.git] / gcc / cp / decl.c
1 /* Process declarations and variables for C compiler.
2 Copyright (C) 1988, 92-97, 1998 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
46 #define obstack_chunk_alloc xmalloc
47 #define obstack_chunk_free free
48
49 extern tree builtin_return_address_fndecl;
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 int static_labelno;
59
60 extern tree current_namespace;
61 extern tree global_namespace;
62
63 extern void (*print_error_function) PROTO((char *));
64
65 /* Stack of places to restore the search obstack back to. */
66
67 /* Obstack used for remembering local class declarations (like
68 enums and static (const) members. */
69 #include "stack.h"
70 struct obstack decl_obstack;
71 static struct stack_level *decl_stack;
72
73 #ifndef CHAR_TYPE_SIZE
74 #define CHAR_TYPE_SIZE BITS_PER_UNIT
75 #endif
76
77 #ifndef SHORT_TYPE_SIZE
78 #define SHORT_TYPE_SIZE (BITS_PER_UNIT * MIN ((UNITS_PER_WORD + 1) / 2, 2))
79 #endif
80
81 #ifndef INT_TYPE_SIZE
82 #define INT_TYPE_SIZE BITS_PER_WORD
83 #endif
84
85 #ifndef LONG_TYPE_SIZE
86 #define LONG_TYPE_SIZE BITS_PER_WORD
87 #endif
88
89 #ifndef LONG_LONG_TYPE_SIZE
90 #define LONG_LONG_TYPE_SIZE (BITS_PER_WORD * 2)
91 #endif
92
93 #ifndef WCHAR_UNSIGNED
94 #define WCHAR_UNSIGNED 0
95 #endif
96
97 #ifndef FLOAT_TYPE_SIZE
98 #define FLOAT_TYPE_SIZE BITS_PER_WORD
99 #endif
100
101 #ifndef DOUBLE_TYPE_SIZE
102 #define DOUBLE_TYPE_SIZE (BITS_PER_WORD * 2)
103 #endif
104
105 #ifndef LONG_DOUBLE_TYPE_SIZE
106 #define LONG_DOUBLE_TYPE_SIZE (BITS_PER_WORD * 2)
107 #endif
108
109 #ifndef BOOL_TYPE_SIZE
110 #ifdef SLOW_BYTE_ACCESS
111 #define BOOL_TYPE_SIZE ((SLOW_BYTE_ACCESS) ? (POINTER_SIZE) : (CHAR_TYPE_SIZE))
112 #else
113 #define BOOL_TYPE_SIZE CHAR_TYPE_SIZE
114 #endif
115 #endif
116
117 /* We let tm.h override the types used here, to handle trivial differences
118 such as the choice of unsigned int or long unsigned int for size_t.
119 When machines start needing nontrivial differences in the size type,
120 it would be best to do something here to figure out automatically
121 from other information what type to use. */
122
123 #ifndef SIZE_TYPE
124 #define SIZE_TYPE "long unsigned int"
125 #endif
126
127 #ifndef PTRDIFF_TYPE
128 #define PTRDIFF_TYPE "long int"
129 #endif
130
131 #ifndef WCHAR_TYPE
132 #define WCHAR_TYPE "int"
133 #endif
134
135 static tree grokparms PROTO((tree, int));
136 static tree lookup_nested_type PROTO((tree, tree));
137 static char *redeclaration_error_message PROTO((tree, tree));
138 static tree push_overloaded_decl PROTO((tree, int));
139
140 static struct stack_level *push_decl_level PROTO((struct stack_level *,
141 struct obstack *));
142 static void push_binding_level PROTO((struct binding_level *, int,
143 int));
144 static void pop_binding_level PROTO((void));
145 static void suspend_binding_level PROTO((void));
146 static void resume_binding_level PROTO((struct binding_level *));
147 static struct binding_level *make_binding_level PROTO((void));
148 static int namespace_bindings_p PROTO((void));
149 static void declare_namespace_level PROTO((void));
150 static void signal_catch PROTO((int)) ATTRIBUTE_NORETURN;
151 static void storedecls PROTO((tree));
152 static void storetags PROTO((tree));
153 static void require_complete_types_for_parms PROTO((tree));
154 static void push_overloaded_decl_1 PROTO((tree));
155 static int ambi_op_p PROTO((tree));
156 static int unary_op_p PROTO((tree));
157 static tree store_bindings PROTO((tree, tree));
158 static tree lookup_tag_reverse PROTO((tree, tree));
159 static tree obscure_complex_init PROTO((tree, tree));
160 static tree maybe_build_cleanup_1 PROTO((tree, tree));
161 static tree lookup_name_real PROTO((tree, int, int, int));
162 static void warn_extern_redeclared_static PROTO((tree, tree));
163 static void grok_reference_init PROTO((tree, tree, tree));
164 static tree grokfndecl PROTO((tree, tree, tree, tree, int,
165 enum overload_flags, tree,
166 tree, tree, int, int, int, int, int, int, tree));
167 static tree grokvardecl PROTO((tree, tree, RID_BIT_TYPE *, int, int, tree));
168 static tree lookup_tag PROTO((enum tree_code, tree,
169 struct binding_level *, int));
170 static void set_identifier_type_value_with_scope
171 PROTO((tree, tree, struct binding_level *));
172 static void record_builtin_type PROTO((enum rid, char *, tree));
173 static void record_unknown_type PROTO((tree, char *));
174 static int member_function_or_else PROTO((tree, tree, char *));
175 static void bad_specifiers PROTO((tree, char *, int, int, int, int,
176 int));
177 static void lang_print_error_function PROTO((char *));
178 static tree maybe_process_template_type_declaration PROTO((tree, int, struct binding_level*));
179 static void check_for_uninitialized_const_var PROTO((tree));
180 static unsigned long typename_hash PROTO((hash_table_key));
181 static boolean typename_compare PROTO((hash_table_key, hash_table_key));
182 static void push_binding PROTO((tree, tree, struct binding_level*));
183 static void pop_binding PROTO((tree));
184
185 #if defined (DEBUG_CP_BINDING_LEVELS)
186 static void indent PROTO((void));
187 #endif
188
189 /* A node which has tree code ERROR_MARK, and whose type is itself.
190 All erroneous expressions are replaced with this node. All functions
191 that accept nodes as arguments should avoid generating error messages
192 if this node is one of the arguments, since it is undesirable to get
193 multiple error messages from one error in the input. */
194
195 tree error_mark_node;
196
197 /* Erroneous argument lists can use this *IFF* they do not modify it. */
198 tree error_mark_list;
199
200 /* INTEGER_TYPE and REAL_TYPE nodes for the standard data types */
201
202 tree short_integer_type_node;
203 tree integer_type_node;
204 tree long_integer_type_node;
205 tree long_long_integer_type_node;
206
207 tree short_unsigned_type_node;
208 tree unsigned_type_node;
209 tree long_unsigned_type_node;
210 tree long_long_unsigned_type_node;
211
212 tree ptrdiff_type_node;
213
214 tree unsigned_char_type_node;
215 tree signed_char_type_node;
216 tree char_type_node;
217 tree wchar_type_node;
218 tree signed_wchar_type_node;
219 tree unsigned_wchar_type_node;
220
221 tree wchar_decl_node;
222
223 tree float_type_node;
224 tree double_type_node;
225 tree long_double_type_node;
226
227 tree complex_integer_type_node;
228 tree complex_float_type_node;
229 tree complex_double_type_node;
230 tree complex_long_double_type_node;
231
232 tree intQI_type_node;
233 tree intHI_type_node;
234 tree intSI_type_node;
235 tree intDI_type_node;
236 #if HOST_BITS_PER_WIDE_INT >= 64
237 tree intTI_type_node;
238 #endif
239
240 tree unsigned_intQI_type_node;
241 tree unsigned_intHI_type_node;
242 tree unsigned_intSI_type_node;
243 tree unsigned_intDI_type_node;
244 #if HOST_BITS_PER_WIDE_INT >= 64
245 tree unsigned_intTI_type_node;
246 #endif
247
248 tree java_byte_type_node;
249 tree java_short_type_node;
250 tree java_int_type_node;
251 tree java_long_type_node;
252 tree java_float_type_node;
253 tree java_double_type_node;
254 tree java_char_type_node;
255 tree java_boolean_type_node;
256
257 /* A VOID_TYPE node, and the same, packaged in a TREE_LIST. */
258
259 tree void_type_node, void_list_node;
260 tree void_zero_node;
261
262 /* Nodes for types `void *' and `const void *'. */
263
264 tree ptr_type_node;
265 tree const_ptr_type_node;
266
267 /* Nodes for types `char *' and `const char *'. */
268
269 tree string_type_node, const_string_type_node;
270
271 /* Type `char[256]' or something like it.
272 Used when an array of char is needed and the size is irrelevant. */
273
274 tree char_array_type_node;
275
276 /* Type `int[256]' or something like it.
277 Used when an array of int needed and the size is irrelevant. */
278
279 tree int_array_type_node;
280
281 /* Type `wchar_t[256]' or something like it.
282 Used when a wide string literal is created. */
283
284 tree wchar_array_type_node;
285
286 /* The bool data type, and constants */
287 tree boolean_type_node, boolean_true_node, boolean_false_node;
288
289 /* Type `int ()' -- used for implicit declaration of functions. */
290
291 tree default_function_type;
292
293 /* Function types `double (double)' and `double (double, double)', etc. */
294
295 static tree double_ftype_double, double_ftype_double_double;
296 static tree int_ftype_int, long_ftype_long;
297 static tree float_ftype_float;
298 static tree ldouble_ftype_ldouble;
299
300 /* Function type `int (const void *, const void *, size_t)' */
301 static tree int_ftype_cptr_cptr_sizet;
302
303 /* C++ extensions */
304 tree vtable_entry_type;
305 tree delta_type_node;
306 #if 0
307 /* Old rtti stuff. */
308 tree __baselist_desc_type_node;
309 tree __i_desc_type_node, __m_desc_type_node;
310 tree __t_desc_array_type, __i_desc_array_type, __m_desc_array_type;
311 #endif
312 tree __t_desc_type_node;
313 #if 0
314 tree __tp_desc_type_node;
315 #endif
316 tree __access_mode_type_node;
317 tree __bltn_desc_type_node, __user_desc_type_node, __class_desc_type_node;
318 tree __ptr_desc_type_node, __attr_desc_type_node, __func_desc_type_node;
319 tree __ptmf_desc_type_node, __ptmd_desc_type_node;
320 #if 0
321 /* Not needed yet? May be needed one day? */
322 tree __bltn_desc_array_type, __user_desc_array_type, __class_desc_array_type;
323 tree __ptr_desc_array_type, __attr_dec_array_type, __func_desc_array_type;
324 tree __ptmf_desc_array_type, __ptmd_desc_array_type;
325 #endif
326
327 /* Indicates that there is a type value in some namespace, although
328 that is not necessarily in scope at the moment. */
329
330 static tree global_type_node;
331
332 tree class_star_type_node;
333 tree class_type_node, record_type_node, union_type_node, enum_type_node;
334 tree unknown_type_node;
335 tree opaque_type_node, signature_type_node;
336 tree sigtable_entry_type;
337
338 /* Array type `vtable_entry_type[]' */
339 tree vtbl_type_node;
340 tree vtbl_ptr_type_node;
341
342 /* namespace std */
343 tree std_node;
344 int in_std = 0;
345
346 /* Expect only namespace names now. */
347 static int only_namespace_names;
348
349 /* In a destructor, the point at which all derived class destroying
350 has been done, just before any base class destroying will be done. */
351
352 tree dtor_label;
353
354 /* In a destructor, the last insn emitted after the start of the
355 function and the parms. */
356
357 static rtx last_dtor_insn;
358
359 /* In a constructor, the last insn emitted after the start of the
360 function and the parms, the exception specification and any
361 function-try-block. The constructor initializers are emitted after
362 this insn. */
363
364 static rtx last_parm_cleanup_insn;
365
366 /* In a constructor, the point at which we are ready to return
367 the pointer to the initialized object. */
368
369 tree ctor_label;
370
371 /* A FUNCTION_DECL which can call `abort'. Not necessarily the
372 one that the user will declare, but sufficient to be called
373 by routines that want to abort the program. */
374
375 tree abort_fndecl;
376
377 /* A FUNCTION_DECL for the default `::operator delete'. */
378
379 tree global_delete_fndecl;
380
381 extern rtx cleanup_label, return_label;
382
383 /* If original DECL_RESULT of current function was a register,
384 but due to being an addressable named return value, would up
385 on the stack, this variable holds the named return value's
386 original location. */
387 static rtx original_result_rtx;
388
389 /* Sequence of insns which represents base initialization. */
390 tree base_init_expr;
391
392 /* C++: Keep these around to reduce calls to `get_identifier'.
393 Identifiers for `this' in member functions and the auto-delete
394 parameter for destructors. */
395 tree this_identifier, in_charge_identifier;
396 tree ctor_identifier, dtor_identifier;
397 /* Used in pointer to member functions, in vtables, and in sigtables. */
398 tree pfn_identifier, index_identifier, delta_identifier, delta2_identifier;
399 tree pfn_or_delta2_identifier, tag_identifier;
400 tree vt_off_identifier;
401
402 struct named_label_list
403 {
404 struct binding_level *binding_level;
405 tree names_in_scope;
406 tree label_decl;
407 char *filename_o_goto;
408 int lineno_o_goto;
409 struct named_label_list *next;
410 };
411
412 /* A list (chain of TREE_LIST nodes) of named label uses.
413 The TREE_PURPOSE field is the list of variables defined
414 in the label's scope defined at the point of use.
415 The TREE_VALUE field is the LABEL_DECL used.
416 The TREE_TYPE field holds `current_binding_level' at the
417 point of the label's use.
418
419 BWAHAHAAHAHahhahahahaah. No, no, no, said the little chicken.
420
421 Look at the pretty struct named_label_list. See the pretty struct
422 with the pretty named fields that describe what they do. See the
423 pretty lack of gratuitous casts. Notice the code got a lot cleaner.
424
425 Used only for jumps to as-yet undefined labels, since
426 jumps to defined labels can have their validity checked
427 by stmt.c. */
428
429 static struct named_label_list *named_label_uses = NULL;
430
431 /* A list of objects which have constructors or destructors
432 which reside in the global scope. The decl is stored in
433 the TREE_VALUE slot and the initializer is stored
434 in the TREE_PURPOSE slot. */
435 tree static_aggregates;
436
437 /* -- end of C++ */
438
439 /* Two expressions that are constants with value zero.
440 The first is of type `int', the second of type `void *'. */
441
442 tree integer_zero_node;
443 tree null_pointer_node;
444
445 /* The value for __null (NULL), namely, a zero of an integer type with
446 the same number of bits as a pointer. */
447 tree null_node;
448
449 /* A node for the integer constants 1, 2, and 3. */
450
451 tree integer_one_node, integer_two_node, integer_three_node;
452
453 /* While defining an enum type, this is 1 plus the last enumerator
454 constant value. */
455
456 static tree enum_next_value;
457
458 /* Nonzero means that there was overflow computing enum_next_value. */
459
460 static int enum_overflow;
461
462 /* Parsing a function declarator leaves a list of parameter names
463 or a chain or parameter decls here. */
464
465 tree last_function_parms;
466
467 /* Parsing a function declarator leaves here a chain of structure
468 and enum types declared in the parmlist. */
469
470 static tree last_function_parm_tags;
471
472 /* After parsing the declarator that starts a function definition,
473 `start_function' puts here the list of parameter names or chain of decls.
474 `store_parm_decls' finds it here. */
475
476 static tree current_function_parms;
477
478 /* Similar, for last_function_parm_tags. */
479 static tree current_function_parm_tags;
480
481 /* A list (chain of TREE_LIST nodes) of all LABEL_DECLs in the function
482 that have names. Here so we can clear out their names' definitions
483 at the end of the function. */
484
485 static tree named_labels;
486
487 /* A list of LABEL_DECLs from outer contexts that are currently shadowed. */
488
489 static tree shadowed_labels;
490
491 /* The FUNCTION_DECL for the function currently being compiled,
492 or 0 if between functions. */
493 tree current_function_decl;
494
495 /* Set to 0 at beginning of a function definition, set to 1 if
496 a return statement that specifies a return value is seen. */
497
498 int current_function_returns_value;
499
500 /* Set to 0 at beginning of a function definition, set to 1 if
501 a return statement with no argument is seen. */
502
503 int current_function_returns_null;
504
505 /* Set to 0 at beginning of a function definition, and whenever
506 a label (case or named) is defined. Set to value of expression
507 returned from function when that value can be transformed into
508 a named return value. */
509
510 tree current_function_return_value;
511
512 /* Nonzero means give `double' the same size as `float'. */
513
514 extern int flag_short_double;
515
516 /* Nonzero means don't recognize any builtin functions. */
517
518 extern int flag_no_builtin;
519
520 /* Nonzero means don't recognize the non-ANSI builtin functions.
521 -ansi sets this. */
522
523 extern int flag_no_nonansi_builtin;
524
525 /* Nonzero means enable obscure ANSI features and disable GNU extensions
526 that might cause ANSI-compliant code to be miscompiled. */
527
528 extern int flag_ansi;
529
530 /* Nonzero if we want to support huge (> 2^(sizeof(short)*8-1) bytes)
531 objects. */
532 extern int flag_huge_objects;
533
534 /* Nonzero if we want to conserve space in the .o files. We do this
535 by putting uninitialized data and runtime initialized data into
536 .common instead of .data at the expense of not flagging multiple
537 definitions. */
538 extern int flag_conserve_space;
539
540 /* Pointers to the base and current top of the language name stack. */
541
542 extern tree *current_lang_base, *current_lang_stack;
543 \f
544 /* C and C++ flags are in decl2.c. */
545
546 /* Set to 0 at beginning of a constructor, set to 1
547 if that function does an allocation before referencing its
548 instance variable. */
549 static int current_function_assigns_this;
550 int current_function_just_assigned_this;
551
552 /* Set to 0 at beginning of a function. Set non-zero when
553 store_parm_decls is called. Don't call store_parm_decls
554 if this flag is non-zero! */
555 int current_function_parms_stored;
556
557 /* Flag used when debugging spew.c */
558
559 extern int spew_debug;
560
561 /* This is a copy of the class_shadowed list of the previous class binding
562 contour when at global scope. It's used to reset IDENTIFIER_CLASS_VALUEs
563 when entering another class scope (i.e. a cache miss). */
564 extern tree previous_class_values;
565
566 /* A expression of value 0 with the same precision as a sizetype
567 node, but signed. */
568 tree signed_size_zero_node;
569
570 /* The name of the anonymous namespace, throughout this translation
571 unit. */
572 tree anonymous_namespace_name;
573
574 \f
575 /* Allocate a level of searching. */
576
577 static
578 struct stack_level *
579 push_decl_level (stack, obstack)
580 struct stack_level *stack;
581 struct obstack *obstack;
582 {
583 struct stack_level tem;
584 tem.prev = stack;
585
586 return push_stack_level (obstack, (char *)&tem, sizeof (tem));
587 }
588 \f
589 /* For each binding contour we allocate a binding_level structure
590 which records the names defined in that contour.
591 Contours include:
592 0) the global one
593 1) one for each function definition,
594 where internal declarations of the parameters appear.
595 2) one for each compound statement,
596 to record its declarations.
597
598 The current meaning of a name can be found by searching the levels
599 from the current one out to the global one.
600
601 Off to the side, may be the class_binding_level. This exists only
602 to catch class-local declarations. It is otherwise nonexistent.
603
604 Also there may be binding levels that catch cleanups that must be
605 run when exceptions occur. */
606
607 /* Note that the information in the `names' component of the global contour
608 is duplicated in the IDENTIFIER_GLOBAL_VALUEs of all identifiers. */
609
610 struct binding_level
611 {
612 /* A chain of _DECL nodes for all variables, constants, functions,
613 and typedef types. These are in the reverse of the order
614 supplied. There may be OVERLOADs on this list, too, but they
615 are wrapped in TREE_LISTs; the TREE_VALUE is the OVERLOAD. */
616 tree names;
617
618 /* A list of structure, union and enum definitions, for looking up
619 tag names.
620 It is a chain of TREE_LIST nodes, each of whose TREE_PURPOSE is a name,
621 or NULL_TREE; and whose TREE_VALUE is a RECORD_TYPE, UNION_TYPE,
622 or ENUMERAL_TYPE node.
623
624 C++: the TREE_VALUE nodes can be simple types for
625 component_bindings. */
626 tree tags;
627
628 /* A list of USING_DECL nodes. */
629 tree usings;
630
631 /* A list of used namespaces. PURPOSE is the namespace,
632 VALUE the common ancestor with this binding_level's namespace. */
633 tree using_directives;
634
635 /* If this binding level is the binding level for a class, then
636 class_shadowed is a TREE_LIST. The TREE_PURPOSE of each node
637 is the name of an entity bound in the class; the TREE_VALUE is
638 the IDENTIFIER_CLASS_VALUE before we entered the class. Thus,
639 when leaving class scope, we can restore the
640 IDENTIFIER_CLASS_VALUE by walking this list. */
641 tree class_shadowed;
642
643 /* Similar to class_shadowed, but for IDENTIFIER_TYPE_VALUE, and
644 is used for all binding levels. */
645 tree type_shadowed;
646
647 /* For each level (except not the global one),
648 a chain of BLOCK nodes for all the levels
649 that were entered and exited one level down. */
650 tree blocks;
651
652 /* The BLOCK node for this level, if one has been preallocated.
653 If 0, the BLOCK is allocated (if needed) when the level is popped. */
654 tree this_block;
655
656 /* The binding level which this one is contained in (inherits from). */
657 struct binding_level *level_chain;
658
659 /* List of decls in `names' that have incomplete
660 structure or union types. */
661 tree incomplete;
662
663 /* List of VAR_DECLS saved from a previous for statement.
664 These would be dead in ANSI-conforming code, but might
665 be referenced in ARM-era code. These are stored in a
666 TREE_LIST; the TREE_VALUE is the actual declaration. */
667 tree dead_vars_from_for;
668
669 /* 1 for the level that holds the parameters of a function.
670 2 for the level that holds a class declaration.
671 3 for levels that hold parameter declarations. */
672 unsigned parm_flag : 4;
673
674 /* 1 means make a BLOCK for this level regardless of all else.
675 2 for temporary binding contours created by the compiler. */
676 unsigned keep : 3;
677
678 /* Nonzero if this level "doesn't exist" for tags. */
679 unsigned tag_transparent : 1;
680
681 /* Nonzero if this level can safely have additional
682 cleanup-needing variables added to it. */
683 unsigned more_cleanups_ok : 1;
684 unsigned have_cleanups : 1;
685
686 /* Nonzero if this level is for storing the decls for template
687 parameters and generic decls; these decls will be discarded and
688 replaced with a TEMPLATE_DECL. */
689 unsigned pseudo_global : 1;
690
691 /* This is set for a namespace binding level. */
692 unsigned namespace_p : 1;
693
694 /* True if this level is that of a for-statement where we need to
695 worry about ambiguous (ARM or ANSI) scope rules. */
696 unsigned is_for_scope : 1;
697
698 /* Two bits left for this word. */
699
700 #if defined(DEBUG_CP_BINDING_LEVELS)
701 /* Binding depth at which this level began. */
702 unsigned binding_depth;
703 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
704 };
705
706 #define NULL_BINDING_LEVEL ((struct binding_level *) NULL)
707
708 /* The (non-class) binding level currently in effect. */
709
710 static struct binding_level *current_binding_level;
711
712 /* The binding level of the current class, if any. */
713
714 static struct binding_level *class_binding_level;
715
716 /* The current (class or non-class) binding level currently in effect. */
717
718 #define inner_binding_level \
719 (class_binding_level ? class_binding_level : current_binding_level)
720
721 /* A chain of binding_level structures awaiting reuse. */
722
723 static struct binding_level *free_binding_level;
724
725 /* The outermost binding level, for names of file scope.
726 This is created when the compiler is started and exists
727 through the entire run. */
728
729 static struct binding_level *global_binding_level;
730
731 /* Binding level structures are initialized by copying this one. */
732
733 static struct binding_level clear_binding_level;
734
735 /* Nonzero means unconditionally make a BLOCK for the next level pushed. */
736
737 static int keep_next_level_flag;
738
739 #if defined(DEBUG_CP_BINDING_LEVELS)
740 static int binding_depth = 0;
741 static int is_class_level = 0;
742
743 static void
744 indent ()
745 {
746 register unsigned i;
747
748 for (i = 0; i < binding_depth*2; i++)
749 putc (' ', stderr);
750 }
751 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
752
753 static tree pushdecl_with_scope PROTO((tree, struct binding_level *));
754
755 static void
756 push_binding_level (newlevel, tag_transparent, keep)
757 struct binding_level *newlevel;
758 int tag_transparent, keep;
759 {
760 /* Add this level to the front of the chain (stack) of levels that
761 are active. */
762 *newlevel = clear_binding_level;
763 if (class_binding_level)
764 {
765 newlevel->level_chain = class_binding_level;
766 class_binding_level = (struct binding_level *)0;
767 }
768 else
769 {
770 newlevel->level_chain = current_binding_level;
771 }
772 current_binding_level = newlevel;
773 newlevel->tag_transparent = tag_transparent;
774 newlevel->more_cleanups_ok = 1;
775 newlevel->keep = keep;
776 #if defined(DEBUG_CP_BINDING_LEVELS)
777 newlevel->binding_depth = binding_depth;
778 indent ();
779 fprintf (stderr, "push %s level 0x%08x line %d\n",
780 (is_class_level) ? "class" : "block", newlevel, lineno);
781 is_class_level = 0;
782 binding_depth++;
783 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
784 }
785
786 static void
787 pop_binding_level ()
788 {
789 if (class_binding_level)
790 current_binding_level = class_binding_level;
791
792 if (global_binding_level)
793 {
794 /* Cannot pop a level, if there are none left to pop. */
795 if (current_binding_level == global_binding_level)
796 my_friendly_abort (123);
797 }
798 /* Pop the current level, and free the structure for reuse. */
799 #if defined(DEBUG_CP_BINDING_LEVELS)
800 binding_depth--;
801 indent ();
802 fprintf (stderr, "pop %s level 0x%08x line %d\n",
803 (is_class_level) ? "class" : "block",
804 current_binding_level, lineno);
805 if (is_class_level != (current_binding_level == class_binding_level))
806 {
807 indent ();
808 fprintf (stderr, "XXX is_class_level != (current_binding_level == class_binding_level)\n");
809 }
810 is_class_level = 0;
811 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
812 {
813 register struct binding_level *level = current_binding_level;
814 current_binding_level = current_binding_level->level_chain;
815 level->level_chain = free_binding_level;
816 #if 0 /* defined(DEBUG_CP_BINDING_LEVELS) */
817 if (level->binding_depth != binding_depth)
818 abort ();
819 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
820 free_binding_level = level;
821
822 class_binding_level = current_binding_level;
823 if (class_binding_level->parm_flag != 2)
824 class_binding_level = 0;
825 while (current_binding_level->parm_flag == 2)
826 current_binding_level = current_binding_level->level_chain;
827 }
828 }
829
830 static void
831 suspend_binding_level ()
832 {
833 if (class_binding_level)
834 current_binding_level = class_binding_level;
835
836 if (global_binding_level)
837 {
838 /* Cannot suspend a level, if there are none left to suspend. */
839 if (current_binding_level == global_binding_level)
840 my_friendly_abort (123);
841 }
842 /* Suspend the current level. */
843 #if defined(DEBUG_CP_BINDING_LEVELS)
844 binding_depth--;
845 indent ();
846 fprintf (stderr, "suspend %s level 0x%08x line %d\n",
847 (is_class_level) ? "class" : "block",
848 current_binding_level, lineno);
849 if (is_class_level != (current_binding_level == class_binding_level))
850 {
851 indent ();
852 fprintf (stderr, "XXX is_class_level != (current_binding_level == class_binding_level)\n");
853 }
854 is_class_level = 0;
855 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
856 {
857 current_binding_level = current_binding_level->level_chain;
858 class_binding_level = current_binding_level;
859 if (class_binding_level->parm_flag != 2)
860 class_binding_level = 0;
861 while (current_binding_level->parm_flag == 2)
862 current_binding_level = current_binding_level->level_chain;
863 }
864 }
865
866 static void
867 resume_binding_level (b)
868 struct binding_level *b;
869 {
870 /* Resuming binding levels is meant only for namespaces,
871 and those cannot nest into classes. */
872 my_friendly_assert(!class_binding_level, 386);
873 /* Also, resuming a non-directly nested namespace is a no-no. */
874 my_friendly_assert(b->level_chain == current_binding_level, 386);
875 current_binding_level = b;
876 #if defined(DEBUG_CP_BINDING_LEVELS)
877 b->binding_depth = binding_depth;
878 indent ();
879 fprintf (stderr, "resume %s level 0x%08x line %d\n",
880 (is_class_level) ? "class" : "block", b, lineno);
881 is_class_level = 0;
882 binding_depth++;
883 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
884 }
885 \f
886 /* Create a new `struct binding_level'. */
887
888 static
889 struct binding_level *
890 make_binding_level ()
891 {
892 /* NOSTRICT */
893 return (struct binding_level *) xmalloc (sizeof (struct binding_level));
894 }
895
896 /* Nonzero if we are currently in the global binding level. */
897
898 int
899 global_bindings_p ()
900 {
901 return current_binding_level == global_binding_level;
902 }
903
904 /* Nonzero if we are currently in a toplevel binding level. This
905 means either the global binding level or a namespace in a toplevel
906 binding level.
907 Since there are no non-toplevel namespace levels, this really
908 means any namespace or pseudo-global level. */
909
910 int
911 toplevel_bindings_p ()
912 {
913 return current_binding_level->namespace_p
914 || current_binding_level->pseudo_global;
915 }
916
917 /* Nonzero if this is a namespace scope. */
918
919 static int
920 namespace_bindings_p ()
921 {
922 return current_binding_level->namespace_p;
923 }
924
925 void
926 keep_next_level ()
927 {
928 keep_next_level_flag = 1;
929 }
930
931 /* Nonzero if the current level needs to have a BLOCK made. */
932
933 int
934 kept_level_p ()
935 {
936 return (current_binding_level->blocks != NULL_TREE
937 || current_binding_level->keep
938 || current_binding_level->names != NULL_TREE
939 || (current_binding_level->tags != NULL_TREE
940 && !current_binding_level->tag_transparent));
941 }
942
943 /* Identify this binding level as a level of parameters. */
944
945 void
946 declare_parm_level ()
947 {
948 current_binding_level->parm_flag = 1;
949 }
950
951 void
952 declare_pseudo_global_level ()
953 {
954 current_binding_level->pseudo_global = 1;
955 }
956
957 static void
958 declare_namespace_level ()
959 {
960 current_binding_level->namespace_p = 1;
961 }
962
963 int
964 pseudo_global_level_p ()
965 {
966 return current_binding_level->pseudo_global;
967 }
968
969 void
970 set_class_shadows (shadows)
971 tree shadows;
972 {
973 class_binding_level->class_shadowed = shadows;
974 }
975
976 /* Enter a new binding level.
977 If TAG_TRANSPARENT is nonzero, do so only for the name space of variables,
978 not for that of tags. */
979
980 void
981 pushlevel (tag_transparent)
982 int tag_transparent;
983 {
984 register struct binding_level *newlevel = NULL_BINDING_LEVEL;
985
986 /* If this is the top level of a function,
987 just make sure that NAMED_LABELS is 0.
988 They should have been set to 0 at the end of the previous function. */
989
990 if (current_binding_level == global_binding_level)
991 my_friendly_assert (named_labels == NULL_TREE, 134);
992
993 /* Reuse or create a struct for this binding level. */
994
995 #if defined(DEBUG_CP_BINDING_LEVELS)
996 if (0)
997 #else /* !defined(DEBUG_CP_BINDING_LEVELS) */
998 if (free_binding_level)
999 #endif /* !defined(DEBUG_CP_BINDING_LEVELS) */
1000 {
1001 newlevel = free_binding_level;
1002 free_binding_level = free_binding_level->level_chain;
1003 }
1004 else
1005 {
1006 newlevel = make_binding_level ();
1007 }
1008
1009 push_binding_level (newlevel, tag_transparent, keep_next_level_flag);
1010 GNU_xref_start_scope ((HOST_WIDE_INT) newlevel);
1011 keep_next_level_flag = 0;
1012 }
1013
1014 void
1015 note_level_for_for ()
1016 {
1017 current_binding_level->is_for_scope = 1;
1018 }
1019
1020 void
1021 pushlevel_temporary (tag_transparent)
1022 int tag_transparent;
1023 {
1024 pushlevel (tag_transparent);
1025 current_binding_level->keep = 2;
1026 clear_last_expr ();
1027
1028 /* Note we don't call push_momentary() here. Otherwise, it would cause
1029 cleanups to be allocated on the momentary obstack, and they will be
1030 overwritten by the next statement. */
1031
1032 expand_start_bindings (0);
1033 }
1034
1035 /* For a binding between a name and an entity at a block scope,
1036 this is the `struct binding_level' for the block. */
1037 #define BINDING_LEVEL(NODE) \
1038 ((struct binding_level*) ((struct tree_binding*)NODE)->scope)
1039
1040 /* These are currently unused, but permanent, CPLUS_BINDING nodes.
1041 They are kept here because they are allocated from the permanent
1042 obstack and cannot be easily freed. */
1043 static tree free_binding_nodes;
1044
1045 /* Make DECL the innermost binding for ID. The LEVEL is the binding
1046 level at which this declaration is being bound. */
1047
1048 static void
1049 push_binding (id, decl, level)
1050 tree id;
1051 tree decl;
1052 struct binding_level* level;
1053 {
1054 tree binding;
1055
1056 if (!free_binding_nodes)
1057 {
1058 /* There are no free nodes, so we must build one here. */
1059 push_obstacks_nochange ();
1060 end_temporary_allocation ();
1061 binding = make_node (CPLUS_BINDING);
1062 pop_obstacks ();
1063 }
1064 else
1065 {
1066 /* There are nodes on the free list. Grab the first one. */
1067 binding = free_binding_nodes;
1068
1069 /* And update the free list. */
1070 free_binding_nodes = TREE_CHAIN (free_binding_nodes);
1071 }
1072
1073 /* Now, fill in the binding information. */
1074 BINDING_VALUE (binding) = decl;
1075 BINDING_LEVEL (binding) = level;
1076 LOCAL_BINDING_P (binding) = (level != class_binding_level);
1077
1078 /* And put it on the front of the ilst of bindings for ID. */
1079 TREE_CHAIN (binding) = IDENTIFIER_BINDING (id);
1080 IDENTIFIER_BINDING (id) = binding;
1081 }
1082
1083 /* Bind DECL to ID in the current_binding_level. */
1084
1085 void
1086 push_local_binding (id, decl)
1087 tree id;
1088 tree decl;
1089 {
1090 tree d = decl;;
1091
1092 if (TREE_CODE (decl) == OVERLOAD)
1093 /* We must put the OVERLOAD into a TREE_LIST since the
1094 TREE_CHAIN of an OVERLOAD is already used. */
1095 decl = build_tree_list (NULL_TREE, decl);
1096
1097 /* Create a binding, hanging off of ID. */
1098 push_binding (id, d, current_binding_level);
1099
1100 /* And put DECL on the list of things declared by the current
1101 binding level. */
1102 TREE_CHAIN (decl) = current_binding_level->names;
1103 current_binding_level->names = decl;
1104 }
1105
1106 /* Bind DECL to ID in the class_binding_level. */
1107
1108 void
1109 push_class_binding (id, decl)
1110 tree id;
1111 tree decl;
1112 {
1113 push_binding (id, decl, class_binding_level);
1114 }
1115
1116 /* Remove the innermost binding for ID; it has gone out of scope. */
1117
1118 static void
1119 pop_binding (id)
1120 tree id;
1121 {
1122 tree binding;
1123
1124 if (id == NULL_TREE)
1125 /* It's easiest to write the loops that call this function without
1126 checking whether or not the entities involved have names. We
1127 get here for such an entity. */
1128 return;
1129
1130 my_friendly_assert (IDENTIFIER_BINDING (id) != NULL_TREE, 0);
1131
1132 /* Unhook the innermost binding from the list of bindings. */
1133 binding = IDENTIFIER_BINDING (id);
1134 IDENTIFIER_BINDING (id) = TREE_CHAIN (binding);
1135
1136 /* And place this list node on the free list. */
1137 TREE_CHAIN (binding) = free_binding_nodes;
1138 free_binding_nodes = binding;
1139 }
1140
1141 /* Exit a binding level.
1142 Pop the level off, and restore the state of the identifier-decl mappings
1143 that were in effect when this level was entered.
1144
1145 If KEEP == 1, this level had explicit declarations, so
1146 and create a "block" (a BLOCK node) for the level
1147 to record its declarations and subblocks for symbol table output.
1148
1149 If FUNCTIONBODY is nonzero, this level is the body of a function,
1150 so create a block as if KEEP were set and also clear out all
1151 label names.
1152
1153 If REVERSE is nonzero, reverse the order of decls before putting
1154 them into the BLOCK. */
1155
1156 tree
1157 poplevel (keep, reverse, functionbody)
1158 int keep;
1159 int reverse;
1160 int functionbody;
1161 {
1162 register tree link;
1163 /* The chain of decls was accumulated in reverse order.
1164 Put it into forward order, just for cleanliness. */
1165 tree decls;
1166 int tmp = functionbody;
1167 int real_functionbody = current_binding_level->keep == 2
1168 ? ((functionbody = 0), tmp) : functionbody;
1169 tree tags = functionbody >= 0 ? current_binding_level->tags : 0;
1170 tree subblocks = functionbody >= 0 ? current_binding_level->blocks : 0;
1171 tree block = NULL_TREE;
1172 tree decl;
1173 int block_previously_created;
1174 int leaving_for_scope;
1175
1176 if (current_binding_level->parm_flag == 2
1177 || current_binding_level->class_shadowed)
1178 /* We should not be using poplevel to pop a class binding level.
1179 Use poplevel_class instead. */
1180 my_friendly_abort (0);
1181
1182 /* We used to use KEEP == 2 to indicate that the new block should go
1183 at the beginning of the list of blocks at this binding level,
1184 rather than the end. This hack is no longer used. */
1185 my_friendly_assert (keep == 0 || keep == 1, 0);
1186
1187 GNU_xref_end_scope ((HOST_WIDE_INT) current_binding_level,
1188 (HOST_WIDE_INT) current_binding_level->level_chain,
1189 current_binding_level->parm_flag,
1190 current_binding_level->keep);
1191
1192 if (current_binding_level->keep == 1)
1193 keep = 1;
1194
1195 /* Get the decls in the order they were written.
1196 Usually current_binding_level->names is in reverse order.
1197 But parameter decls were previously put in forward order. */
1198
1199 if (reverse)
1200 current_binding_level->names
1201 = decls = nreverse (current_binding_level->names);
1202 else
1203 decls = current_binding_level->names;
1204
1205 /* Output any nested inline functions within this block
1206 if they weren't already output. */
1207
1208 for (decl = decls; decl; decl = TREE_CHAIN (decl))
1209 if (TREE_CODE (decl) == FUNCTION_DECL
1210 && ! TREE_ASM_WRITTEN (decl)
1211 && DECL_INITIAL (decl) != NULL_TREE
1212 && TREE_ADDRESSABLE (decl)
1213 && decl_function_context (decl) == current_function_decl)
1214 {
1215 /* If this decl was copied from a file-scope decl
1216 on account of a block-scope extern decl,
1217 propagate TREE_ADDRESSABLE to the file-scope decl. */
1218 if (DECL_ABSTRACT_ORIGIN (decl) != NULL_TREE)
1219 TREE_ADDRESSABLE (DECL_ABSTRACT_ORIGIN (decl)) = 1;
1220 else
1221 {
1222 push_function_context ();
1223 output_inline_function (decl);
1224 pop_function_context ();
1225 }
1226 }
1227
1228 /* If there were any declarations or structure tags in that level,
1229 or if this level is a function body,
1230 create a BLOCK to record them for the life of this function. */
1231
1232 block = NULL_TREE;
1233 block_previously_created = (current_binding_level->this_block != NULL_TREE);
1234 if (block_previously_created)
1235 block = current_binding_level->this_block;
1236 else if (keep == 1 || functionbody)
1237 block = make_node (BLOCK);
1238 if (block != NULL_TREE)
1239 {
1240 if (block_previously_created)
1241 {
1242 if (decls || tags || subblocks)
1243 {
1244 if (BLOCK_VARS (block) || BLOCK_TYPE_TAGS (block))
1245 warning ("internal compiler error: debugging info corrupted");
1246
1247 BLOCK_VARS (block) = decls;
1248 BLOCK_TYPE_TAGS (block) = tags;
1249
1250 /* We can have previous subblocks and new subblocks when
1251 doing fixup_gotos with complex cleanups. We chain the new
1252 subblocks onto the end of any pre-existing subblocks. */
1253 BLOCK_SUBBLOCKS (block) = chainon (BLOCK_SUBBLOCKS (block),
1254 subblocks);
1255 }
1256 /* If we created the block earlier on, and we are just
1257 diddling it now, then it already should have a proper
1258 BLOCK_END_NOTE value associated with it. */
1259 }
1260 else
1261 {
1262 BLOCK_VARS (block) = decls;
1263 BLOCK_TYPE_TAGS (block) = tags;
1264 BLOCK_SUBBLOCKS (block) = subblocks;
1265 /* Otherwise, for a new block, install a new BLOCK_END_NOTE
1266 value. */
1267 remember_end_note (block);
1268 }
1269 }
1270
1271 /* In each subblock, record that this is its superior. */
1272
1273 if (keep >= 0)
1274 for (link = subblocks; link; link = TREE_CHAIN (link))
1275 BLOCK_SUPERCONTEXT (link) = block;
1276
1277 /* We still support the old for-scope rules, whereby the variables
1278 in a for-init statement were in scope after the for-statement
1279 ended. We only use the new rules in flag_new_for_scope is
1280 nonzero. */
1281 leaving_for_scope
1282 = current_binding_level->is_for_scope && flag_new_for_scope == 1;
1283
1284 /* Remove declarations for all the DECLs in this level. */
1285 for (link = decls; link; link = TREE_CHAIN (link))
1286 {
1287 if (leaving_for_scope && TREE_CODE (link) == VAR_DECL)
1288 {
1289 tree outer_binding
1290 = TREE_CHAIN (IDENTIFIER_BINDING (DECL_NAME (link)));
1291 tree ns_binding;
1292
1293 if (!outer_binding)
1294 ns_binding = IDENTIFIER_NAMESPACE_VALUE (DECL_NAME (link));
1295
1296 if (outer_binding
1297 && (BINDING_LEVEL (outer_binding)
1298 == current_binding_level->level_chain))
1299 /* We have something like:
1300
1301 int i;
1302 for (int i; ;);
1303
1304 and we are leaving the `for' scope. There's no reason to
1305 keep the binding of the inner `i' in this case. */
1306 pop_binding (DECL_NAME (link));
1307 else if ((outer_binding
1308 && (TREE_CODE (BINDING_VALUE (outer_binding))
1309 == TYPE_DECL))
1310 || (ns_binding
1311 && TREE_CODE (ns_binding) == TYPE_DECL))
1312 /* Here, we have something like:
1313
1314 typedef int I;
1315
1316 void f () {
1317 for (int I; ;);
1318 }
1319
1320 We must pop the for-scope binding so we know what's a
1321 type and what isn't. */
1322 pop_binding (DECL_NAME (link));
1323 else
1324 {
1325 /* Mark this VAR_DECL as dead so that we can tell we left it
1326 there only for backward compatibility. */
1327 DECL_DEAD_FOR_LOCAL (link) = 1;
1328
1329 /* Keep track of what should of have happenned when we
1330 popped the binding. */
1331 if (outer_binding && BINDING_VALUE (outer_binding))
1332 DECL_SHADOWED_FOR_VAR (link)
1333 = BINDING_VALUE (outer_binding);
1334
1335 /* Add it to the list of dead variables in the next
1336 outermost binding to that we can remove these when we
1337 leave that binding. */
1338 current_binding_level->level_chain->dead_vars_from_for
1339 = tree_cons (NULL_TREE, link,
1340 current_binding_level->level_chain->
1341 dead_vars_from_for);
1342
1343 /* Although we don't pop the CPLUS_BINDING, we do clear
1344 its BINDING_LEVEL since the level is going away now. */
1345 BINDING_LEVEL (IDENTIFIER_BINDING (DECL_NAME (link)))
1346 = 0;
1347 }
1348 }
1349 else
1350 {
1351 /* Remove the binding. */
1352 if (TREE_CODE_CLASS (TREE_CODE (link)) == 'd')
1353 pop_binding (DECL_NAME (link));
1354 else if (TREE_CODE (link) == TREE_LIST)
1355 pop_binding (DECL_NAME (OVL_FUNCTION (TREE_VALUE (link))));
1356 else
1357 my_friendly_abort (0);
1358 }
1359 }
1360
1361 /* Remove declarations for any `for' variables from inner scopes
1362 that we kept around. */
1363 for (link = current_binding_level->dead_vars_from_for;
1364 link; link = TREE_CHAIN (link))
1365 pop_binding (DECL_NAME (TREE_VALUE (link)));
1366
1367 /* Restore the IDENTIFIER_TYPE_VALUEs. */
1368 for (link = current_binding_level->type_shadowed;
1369 link; link = TREE_CHAIN (link))
1370 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (link), TREE_VALUE (link));
1371
1372 /* There may be OVERLOADs (wrapped in TREE_LISTs) on the BLOCK_VARs
1373 list if a `using' declaration put them there. The debugging
1374 back-ends won't understand OVERLOAD, so we remove them here.
1375 Because the BLOCK_VARS are (temporarily) shared with
1376 CURRENT_BINDING_LEVEL->NAMES we must do this fixup after we have
1377 popped all the bindings. */
1378 if (block)
1379 {
1380 tree* d;
1381
1382 for (d = &BLOCK_VARS (block);
1383 *d;
1384 d = *d ? &TREE_CHAIN (*d) : d)
1385 if (TREE_CODE (*d) == TREE_LIST)
1386 *d = TREE_CHAIN (*d);
1387 }
1388
1389 /* If the level being exited is the top level of a function,
1390 check over all the labels. */
1391
1392 if (functionbody)
1393 {
1394 /* If this is the top level block of a function,
1395 the vars are the function's parameters.
1396 Don't leave them in the BLOCK because they are
1397 found in the FUNCTION_DECL instead. */
1398
1399 BLOCK_VARS (block) = 0;
1400
1401 /* Clear out the definitions of all label names,
1402 since their scopes end here. */
1403
1404 for (link = named_labels; link; link = TREE_CHAIN (link))
1405 {
1406 register tree label = TREE_VALUE (link);
1407
1408 if (DECL_INITIAL (label) == NULL_TREE)
1409 {
1410 cp_error_at ("label `%D' used but not defined", label);
1411 /* Avoid crashing later. */
1412 define_label (input_filename, 1, DECL_NAME (label));
1413 }
1414 else if (warn_unused && !TREE_USED (label))
1415 cp_warning_at ("label `%D' defined but not used", label);
1416 SET_IDENTIFIER_LABEL_VALUE (DECL_NAME (label), NULL_TREE);
1417
1418 /* Put the labels into the "variables" of the
1419 top-level block, so debugger can see them. */
1420 TREE_CHAIN (label) = BLOCK_VARS (block);
1421 BLOCK_VARS (block) = label;
1422 }
1423
1424 named_labels = NULL_TREE;
1425 }
1426
1427 /* Any uses of undefined labels now operate under constraints
1428 of next binding contour. */
1429 {
1430 struct binding_level *level_chain;
1431 level_chain = current_binding_level->level_chain;
1432 if (level_chain)
1433 {
1434 struct named_label_list *labels;
1435 for (labels = named_label_uses; labels; labels = labels->next)
1436 if (labels->binding_level == current_binding_level)
1437 {
1438 labels->binding_level = level_chain;
1439 labels->names_in_scope = level_chain->names;
1440 }
1441 }
1442 }
1443
1444 tmp = current_binding_level->keep;
1445
1446 pop_binding_level ();
1447 if (functionbody)
1448 DECL_INITIAL (current_function_decl) = block;
1449 else if (block)
1450 {
1451 if (!block_previously_created)
1452 current_binding_level->blocks
1453 = chainon (current_binding_level->blocks, block);
1454 }
1455 /* If we did not make a block for the level just exited,
1456 any blocks made for inner levels
1457 (since they cannot be recorded as subblocks in that level)
1458 must be carried forward so they will later become subblocks
1459 of something else. */
1460 else if (subblocks)
1461 current_binding_level->blocks
1462 = chainon (current_binding_level->blocks, subblocks);
1463
1464 /* Take care of compiler's internal binding structures. */
1465 if (tmp == 2)
1466 {
1467 expand_end_bindings (getdecls (), keep, 1);
1468 /* Each and every BLOCK node created here in `poplevel' is important
1469 (e.g. for proper debugging information) so if we created one
1470 earlier, mark it as "used". */
1471 if (block)
1472 TREE_USED (block) = 1;
1473 block = poplevel (keep, reverse, real_functionbody);
1474 }
1475
1476 /* Each and every BLOCK node created here in `poplevel' is important
1477 (e.g. for proper debugging information) so if we created one
1478 earlier, mark it as "used". */
1479 if (block)
1480 TREE_USED (block) = 1;
1481 return block;
1482 }
1483
1484 /* Delete the node BLOCK from the current binding level.
1485 This is used for the block inside a stmt expr ({...})
1486 so that the block can be reinserted where appropriate. */
1487
1488 void
1489 delete_block (block)
1490 tree block;
1491 {
1492 tree t;
1493 if (current_binding_level->blocks == block)
1494 current_binding_level->blocks = TREE_CHAIN (block);
1495 for (t = current_binding_level->blocks; t;)
1496 {
1497 if (TREE_CHAIN (t) == block)
1498 TREE_CHAIN (t) = TREE_CHAIN (block);
1499 else
1500 t = TREE_CHAIN (t);
1501 }
1502 TREE_CHAIN (block) = NULL_TREE;
1503 /* Clear TREE_USED which is always set by poplevel.
1504 The flag is set again if insert_block is called. */
1505 TREE_USED (block) = 0;
1506 }
1507
1508 /* Insert BLOCK at the end of the list of subblocks of the
1509 current binding level. This is used when a BIND_EXPR is expanded,
1510 to handle the BLOCK node inside the BIND_EXPR. */
1511
1512 void
1513 insert_block (block)
1514 tree block;
1515 {
1516 TREE_USED (block) = 1;
1517 current_binding_level->blocks
1518 = chainon (current_binding_level->blocks, block);
1519 }
1520
1521 /* Set the BLOCK node for the innermost scope
1522 (the one we are currently in). */
1523
1524 void
1525 set_block (block)
1526 register tree block;
1527 {
1528 current_binding_level->this_block = block;
1529 }
1530
1531 /* Do a pushlevel for class declarations. */
1532
1533 void
1534 pushlevel_class ()
1535 {
1536 register struct binding_level *newlevel;
1537
1538 /* Reuse or create a struct for this binding level. */
1539 #if defined(DEBUG_CP_BINDING_LEVELS)
1540 if (0)
1541 #else /* !defined(DEBUG_CP_BINDING_LEVELS) */
1542 if (free_binding_level)
1543 #endif /* !defined(DEBUG_CP_BINDING_LEVELS) */
1544 {
1545 newlevel = free_binding_level;
1546 free_binding_level = free_binding_level->level_chain;
1547 }
1548 else
1549 newlevel = make_binding_level ();
1550
1551 #if defined(DEBUG_CP_BINDING_LEVELS)
1552 is_class_level = 1;
1553 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
1554
1555 push_binding_level (newlevel, 0, 0);
1556
1557 decl_stack = push_decl_level (decl_stack, &decl_obstack);
1558 class_binding_level = current_binding_level;
1559 class_binding_level->parm_flag = 2;
1560 /* We have just pushed into a new binding level. Now, fake out the rest
1561 of the compiler. Set the `current_binding_level' back to point to
1562 the most closely containing non-class binding level. */
1563 do
1564 {
1565 current_binding_level = current_binding_level->level_chain;
1566 }
1567 while (current_binding_level->parm_flag == 2);
1568 }
1569
1570 /* ...and a poplevel for class declarations. FORCE is used to force
1571 clearing out of CLASS_VALUEs after a class definition. */
1572
1573 tree
1574 poplevel_class (force)
1575 int force;
1576 {
1577 register struct binding_level *level = class_binding_level;
1578 tree block = NULL_TREE;
1579 tree shadowed;
1580
1581 my_friendly_assert (level != 0, 354);
1582
1583 decl_stack = pop_stack_level (decl_stack);
1584 /* If we're leaving a toplevel class, don't bother to do the setting
1585 of IDENTIFIER_CLASS_VALUE to NULL_TREE, since first of all this slot
1586 shouldn't even be used when current_class_type isn't set, and second,
1587 if we don't touch it here, we're able to use the cache effect if the
1588 next time we're entering a class scope, it is the same class. */
1589 if (current_class_depth != 1 || force)
1590 for (shadowed = level->class_shadowed;
1591 shadowed;
1592 shadowed = TREE_CHAIN (shadowed))
1593 IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (shadowed)) = TREE_VALUE (shadowed);
1594 else
1595 /* Remember to save what IDENTIFIER's were bound in this scope so we
1596 can recover from cache misses. */
1597 {
1598 previous_class_type = current_class_type;
1599 previous_class_values = class_binding_level->class_shadowed;
1600 }
1601 for (shadowed = level->type_shadowed;
1602 shadowed;
1603 shadowed = TREE_CHAIN (shadowed))
1604 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (shadowed), TREE_VALUE (shadowed));
1605
1606 /* Remove the bindings for all of the class-level declarations. */
1607 for (shadowed = level->class_shadowed;
1608 shadowed;
1609 shadowed = TREE_CHAIN (shadowed))
1610 pop_binding (TREE_PURPOSE (shadowed));
1611
1612 GNU_xref_end_scope ((HOST_WIDE_INT) class_binding_level,
1613 (HOST_WIDE_INT) class_binding_level->level_chain,
1614 class_binding_level->parm_flag,
1615 class_binding_level->keep);
1616
1617 if (class_binding_level->parm_flag != 2)
1618 class_binding_level = (struct binding_level *)0;
1619
1620 /* Now, pop out of the binding level which we created up in the
1621 `pushlevel_class' routine. */
1622 #if defined(DEBUG_CP_BINDING_LEVELS)
1623 is_class_level = 1;
1624 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
1625
1626 pop_binding_level ();
1627
1628 return block;
1629 }
1630 \f
1631 /* For debugging. */
1632 static int no_print_functions = 0;
1633 static int no_print_builtins = 0;
1634
1635 void
1636 print_binding_level (lvl)
1637 struct binding_level *lvl;
1638 {
1639 tree t;
1640 int i = 0, len;
1641 fprintf (stderr, " blocks=");
1642 fprintf (stderr, HOST_PTR_PRINTF, lvl->blocks);
1643 fprintf (stderr, " n_incomplete=%d parm_flag=%d keep=%d",
1644 list_length (lvl->incomplete), lvl->parm_flag, lvl->keep);
1645 if (lvl->tag_transparent)
1646 fprintf (stderr, " tag-transparent");
1647 if (lvl->more_cleanups_ok)
1648 fprintf (stderr, " more-cleanups-ok");
1649 if (lvl->have_cleanups)
1650 fprintf (stderr, " have-cleanups");
1651 fprintf (stderr, "\n");
1652 if (lvl->names)
1653 {
1654 fprintf (stderr, " names:\t");
1655 /* We can probably fit 3 names to a line? */
1656 for (t = lvl->names; t; t = TREE_CHAIN (t))
1657 {
1658 if (no_print_functions && (TREE_CODE (t) == FUNCTION_DECL))
1659 continue;
1660 if (no_print_builtins
1661 && (TREE_CODE (t) == TYPE_DECL)
1662 && (!strcmp (DECL_SOURCE_FILE (t),"<built-in>")))
1663 continue;
1664
1665 /* Function decls tend to have longer names. */
1666 if (TREE_CODE (t) == FUNCTION_DECL)
1667 len = 3;
1668 else
1669 len = 2;
1670 i += len;
1671 if (i > 6)
1672 {
1673 fprintf (stderr, "\n\t");
1674 i = len;
1675 }
1676 print_node_brief (stderr, "", t, 0);
1677 if (t == error_mark_node)
1678 break;
1679 }
1680 if (i)
1681 fprintf (stderr, "\n");
1682 }
1683 if (lvl->tags)
1684 {
1685 fprintf (stderr, " tags:\t");
1686 i = 0;
1687 for (t = lvl->tags; t; t = TREE_CHAIN (t))
1688 {
1689 if (TREE_PURPOSE (t) == NULL_TREE)
1690 len = 3;
1691 else if (TREE_PURPOSE (t) == TYPE_IDENTIFIER (TREE_VALUE (t)))
1692 len = 2;
1693 else
1694 len = 4;
1695 i += len;
1696 if (i > 5)
1697 {
1698 fprintf (stderr, "\n\t");
1699 i = len;
1700 }
1701 if (TREE_PURPOSE (t) == NULL_TREE)
1702 {
1703 print_node_brief (stderr, "<unnamed-typedef", TREE_VALUE (t), 0);
1704 fprintf (stderr, ">");
1705 }
1706 else if (TREE_PURPOSE (t) == TYPE_IDENTIFIER (TREE_VALUE (t)))
1707 print_node_brief (stderr, "", TREE_VALUE (t), 0);
1708 else
1709 {
1710 print_node_brief (stderr, "<typedef", TREE_PURPOSE (t), 0);
1711 print_node_brief (stderr, "", TREE_VALUE (t), 0);
1712 fprintf (stderr, ">");
1713 }
1714 }
1715 if (i)
1716 fprintf (stderr, "\n");
1717 }
1718 if (lvl->class_shadowed)
1719 {
1720 fprintf (stderr, " class-shadowed:");
1721 for (t = lvl->class_shadowed; t; t = TREE_CHAIN (t))
1722 {
1723 fprintf (stderr, " %s ", IDENTIFIER_POINTER (TREE_PURPOSE (t)));
1724 }
1725 fprintf (stderr, "\n");
1726 }
1727 if (lvl->type_shadowed)
1728 {
1729 fprintf (stderr, " type-shadowed:");
1730 for (t = lvl->type_shadowed; t; t = TREE_CHAIN (t))
1731 {
1732 fprintf (stderr, " %s ", IDENTIFIER_POINTER (TREE_PURPOSE (t)));
1733 }
1734 fprintf (stderr, "\n");
1735 }
1736 }
1737
1738 void
1739 print_other_binding_stack (stack)
1740 struct binding_level *stack;
1741 {
1742 struct binding_level *level;
1743 for (level = stack; level != global_binding_level; level = level->level_chain)
1744 {
1745 fprintf (stderr, "binding level ");
1746 fprintf (stderr, HOST_PTR_PRINTF, level);
1747 fprintf (stderr, "\n");
1748 print_binding_level (level);
1749 }
1750 }
1751
1752 void
1753 print_binding_stack ()
1754 {
1755 struct binding_level *b;
1756 fprintf (stderr, "current_binding_level=");
1757 fprintf (stderr, HOST_PTR_PRINTF, current_binding_level);
1758 fprintf (stderr, "\nclass_binding_level=");
1759 fprintf (stderr, HOST_PTR_PRINTF, class_binding_level);
1760 fprintf (stderr, "\nglobal_binding_level=");
1761 fprintf (stderr, HOST_PTR_PRINTF, global_binding_level);
1762 fprintf (stderr, "\n");
1763 if (class_binding_level)
1764 {
1765 for (b = class_binding_level; b; b = b->level_chain)
1766 if (b == current_binding_level)
1767 break;
1768 if (b)
1769 b = class_binding_level;
1770 else
1771 b = current_binding_level;
1772 }
1773 else
1774 b = current_binding_level;
1775 print_other_binding_stack (b);
1776 fprintf (stderr, "global:\n");
1777 print_binding_level (global_binding_level);
1778 }
1779
1780 /* Namespace binding access routines: The namespace_bindings field of
1781 the identifier is polymorphic, with three possible values:
1782 NULL_TREE, a list of CPLUS_BINDINGS, or any other tree_node
1783 indicating the BINDING_VALUE of global_namespace. */
1784
1785 /* Check whether the a binding for the name to scope is known.
1786 Assumes that the bindings of the name are already a list
1787 of bindings. Returns the binding found, or NULL_TREE. */
1788
1789 static tree
1790 find_binding (name, scope)
1791 tree name;
1792 tree scope;
1793 {
1794 tree iter, prev = NULL_TREE;
1795
1796 scope = ORIGINAL_NAMESPACE (scope);
1797
1798 for (iter = IDENTIFIER_NAMESPACE_BINDINGS (name); iter;
1799 iter = TREE_CHAIN (iter))
1800 {
1801 my_friendly_assert (TREE_CODE (iter) == CPLUS_BINDING, 374);
1802 if (BINDING_SCOPE (iter) == scope)
1803 {
1804 /* Move binding found to the fron of the list, so
1805 subsequent lookups will find it faster. */
1806 if (prev)
1807 {
1808 TREE_CHAIN (prev) = TREE_CHAIN (iter);
1809 TREE_CHAIN (iter) = IDENTIFIER_NAMESPACE_BINDINGS (name);
1810 IDENTIFIER_NAMESPACE_BINDINGS (name) = iter;
1811 }
1812 return iter;
1813 }
1814 prev = iter;
1815 }
1816 return NULL_TREE;
1817 }
1818
1819 /* Always returns a binding for name in scope. If the
1820 namespace_bindings is not a list, convert it to one first.
1821 If no binding is found, make a new one. */
1822
1823 tree
1824 binding_for_name (name, scope)
1825 tree name;
1826 tree scope;
1827 {
1828 tree b = IDENTIFIER_NAMESPACE_BINDINGS (name);
1829 tree result;
1830
1831 scope = ORIGINAL_NAMESPACE (scope);
1832
1833 if (b && TREE_CODE (b) != CPLUS_BINDING)
1834 {
1835 /* Get rid of optimization for global scope. */
1836 IDENTIFIER_NAMESPACE_BINDINGS (name) = NULL_TREE;
1837 BINDING_VALUE (binding_for_name (name, global_namespace)) = b;
1838 b = IDENTIFIER_NAMESPACE_BINDINGS (name);
1839 }
1840 if (b && (result = find_binding (name, scope)))
1841 return result;
1842 /* Not found, make a new permanent one. */
1843 push_obstacks (&permanent_obstack, &permanent_obstack);
1844 result = make_node (CPLUS_BINDING);
1845 TREE_CHAIN (result) = b;
1846 IDENTIFIER_NAMESPACE_BINDINGS (name) = result;
1847 BINDING_SCOPE (result) = scope;
1848 BINDING_TYPE (result) = NULL_TREE;
1849 BINDING_VALUE (result) = NULL_TREE;
1850 pop_obstacks ();
1851 return result;
1852 }
1853
1854 /* Return the binding value for name in scope, considering that
1855 namespace_binding may or may not be a list of CPLUS_BINDINGS. */
1856
1857 tree
1858 namespace_binding (name, scope)
1859 tree name;
1860 tree scope;
1861 {
1862 tree b = IDENTIFIER_NAMESPACE_BINDINGS (name);
1863 if (b == NULL_TREE)
1864 return NULL_TREE;
1865 if (scope == NULL_TREE)
1866 scope = global_namespace;
1867 if (TREE_CODE (b) != CPLUS_BINDING)
1868 return (scope == global_namespace) ? b : NULL_TREE;
1869 name = find_binding (name,scope);
1870 if (name == NULL_TREE)
1871 return name;
1872 return BINDING_VALUE (name);
1873 }
1874
1875 /* Set the binding value for name in scope. If modifying the binding
1876 of global_namespace is attempted, try to optimize it. */
1877
1878 void
1879 set_namespace_binding (name, scope, val)
1880 tree name;
1881 tree scope;
1882 tree val;
1883 {
1884 tree b;
1885
1886 if (scope == NULL_TREE)
1887 scope = global_namespace;
1888
1889 if (scope == global_namespace)
1890 {
1891 b = IDENTIFIER_NAMESPACE_BINDINGS (name);
1892 if (b == NULL_TREE || TREE_CODE (b) != CPLUS_BINDING)
1893 {
1894 IDENTIFIER_NAMESPACE_BINDINGS (name) = val;
1895 return;
1896 }
1897 }
1898 b = binding_for_name (name, scope);
1899 BINDING_VALUE (b) = val;
1900 }
1901
1902 /* Push into the scope of the NAME namespace. If NAME is NULL_TREE, then we
1903 select a name that is unique to this compilation unit. */
1904
1905 void
1906 push_namespace (name)
1907 tree name;
1908 {
1909 tree d = NULL_TREE;
1910 int need_new = 1;
1911 int implicit_use = 0;
1912 int global = 0;
1913 if (!global_namespace)
1914 {
1915 /* This must be ::. */
1916 my_friendly_assert (name == get_identifier ("::"), 377);
1917 global = 1;
1918 }
1919 else if (!name)
1920 {
1921 /* The name of anonymous namespace is unique for the translation
1922 unit. */
1923 if (!anonymous_namespace_name)
1924 anonymous_namespace_name = get_file_function_name ('N');
1925 name = anonymous_namespace_name;
1926 d = IDENTIFIER_NAMESPACE_VALUE (name);
1927 if (d)
1928 /* Reopening anonymous namespace. */
1929 need_new = 0;
1930 implicit_use = 1;
1931 }
1932 else if (current_namespace == global_namespace
1933 && name == DECL_NAME (std_node))
1934 {
1935 in_std++;
1936 return;
1937 }
1938 else
1939 {
1940 /* Check whether this is an extended namespace definition. */
1941 d = IDENTIFIER_NAMESPACE_VALUE (name);
1942 if (d != NULL_TREE && TREE_CODE (d) == NAMESPACE_DECL)
1943 {
1944 need_new = 0;
1945 if (DECL_NAMESPACE_ALIAS (d))
1946 {
1947 cp_error ("namespace alias `%D' not allowed here, assuming `%D'",
1948 d, DECL_NAMESPACE_ALIAS (d));
1949 d = DECL_NAMESPACE_ALIAS (d);
1950 }
1951 }
1952 }
1953
1954 if (need_new)
1955 {
1956 /* Make a new namespace, binding the name to it. */
1957 d = build_lang_decl (NAMESPACE_DECL, name, void_type_node);
1958 /* The global namespace is not pushed, and the global binding
1959 level is set elsewhere. */
1960 if (!global)
1961 {
1962 d = pushdecl (d);
1963 pushlevel (0);
1964 declare_namespace_level ();
1965 NAMESPACE_LEVEL (d) = current_binding_level;
1966 }
1967 }
1968 else
1969 resume_binding_level (NAMESPACE_LEVEL (d));
1970
1971 if (implicit_use)
1972 do_using_directive (d);
1973 /* Enter the name space. */
1974 current_namespace = d;
1975 }
1976
1977 /* Pop from the scope of the current namespace. */
1978
1979 void
1980 pop_namespace ()
1981 {
1982 if (current_namespace == global_namespace)
1983 {
1984 my_friendly_assert (in_std>0, 980421);
1985 in_std--;
1986 return;
1987 }
1988 current_namespace = CP_DECL_CONTEXT (current_namespace);
1989 /* The binding level is not popped, as it might be re-opened later. */
1990 suspend_binding_level ();
1991 }
1992
1993 /* Concatenate the binding levels of all namespaces. */
1994
1995 void
1996 cat_namespace_levels()
1997 {
1998 tree current;
1999 tree last;
2000 struct binding_level *b;
2001
2002 last = NAMESPACE_LEVEL (global_namespace) -> names;
2003 /* The nested namespaces appear in the names list of their ancestors. */
2004 for (current = last; current; current = TREE_CHAIN (current))
2005 {
2006 if (TREE_CODE (current) != NAMESPACE_DECL
2007 || DECL_NAMESPACE_ALIAS (current))
2008 continue;
2009 if (!DECL_LANG_SPECIFIC (current))
2010 {
2011 /* Hmm. std. */
2012 my_friendly_assert (current == std_node, 393);
2013 continue;
2014 }
2015 b = NAMESPACE_LEVEL (current);
2016 while (TREE_CHAIN (last))
2017 last = TREE_CHAIN (last);
2018 TREE_CHAIN (last) = NAMESPACE_LEVEL (current) -> names;
2019 }
2020 }
2021 \f
2022 /* Subroutines for reverting temporarily to top-level for instantiation
2023 of templates and such. We actually need to clear out the class- and
2024 local-value slots of all identifiers, so that only the global values
2025 are at all visible. Simply setting current_binding_level to the global
2026 scope isn't enough, because more binding levels may be pushed. */
2027 struct saved_scope {
2028 struct binding_level *old_binding_level;
2029 tree old_bindings;
2030 tree old_namespace;
2031 struct saved_scope *prev;
2032 tree class_name, class_type;
2033 tree access_specifier;
2034 tree function_decl;
2035 struct binding_level *class_bindings;
2036 tree *lang_base, *lang_stack, lang_name;
2037 int lang_stacksize;
2038 int minimal_parse_mode;
2039 tree last_function_parms;
2040 tree template_parms;
2041 HOST_WIDE_INT processing_template_decl;
2042 tree previous_class_type, previous_class_values;
2043 int processing_specialization;
2044 int processing_explicit_instantiation;
2045 };
2046 static struct saved_scope *current_saved_scope;
2047
2048 /* A chain of the binding vecs created by store_bindings. We create a
2049 whole bunch of these during compilation, on permanent_obstack, so we
2050 can't just throw them away. */
2051 static tree free_binding_vecs;
2052
2053 static tree
2054 store_bindings (names, old_bindings)
2055 tree names, old_bindings;
2056 {
2057 tree t;
2058 for (t = names; t; t = TREE_CHAIN (t))
2059 {
2060 tree binding, t1, id;
2061
2062 if (TREE_CODE (t) == TREE_LIST)
2063 id = TREE_PURPOSE (t);
2064 else
2065 id = DECL_NAME (t);
2066
2067 if (!id
2068 /* Note that we may have an IDENTIFIER_CLASS_VALUE even when
2069 we have no IDENTIFIER_BINDING if we have left the class
2070 scope, but cached the class-level declarations. */
2071 || !(IDENTIFIER_BINDING (id) || IDENTIFIER_CLASS_VALUE (id)))
2072 continue;
2073
2074 for (t1 = old_bindings; t1; t1 = TREE_CHAIN (t1))
2075 if (TREE_VEC_ELT (t1, 0) == id)
2076 goto skip_it;
2077
2078 if (free_binding_vecs)
2079 {
2080 binding = free_binding_vecs;
2081 free_binding_vecs = TREE_CHAIN (free_binding_vecs);
2082 }
2083 else
2084 binding = make_tree_vec (4);
2085
2086 if (id)
2087 {
2088 my_friendly_assert (TREE_CODE (id) == IDENTIFIER_NODE, 135);
2089 TREE_VEC_ELT (binding, 0) = id;
2090 TREE_VEC_ELT (binding, 1) = REAL_IDENTIFIER_TYPE_VALUE (id);
2091 TREE_VEC_ELT (binding, 2) = IDENTIFIER_BINDING (id);
2092 TREE_VEC_ELT (binding, 3) = IDENTIFIER_CLASS_VALUE (id);
2093 IDENTIFIER_BINDING (id) = NULL_TREE;
2094 IDENTIFIER_CLASS_VALUE (id) = NULL_TREE;
2095 }
2096 TREE_CHAIN (binding) = old_bindings;
2097 old_bindings = binding;
2098 skip_it:
2099 ;
2100 }
2101 return old_bindings;
2102 }
2103
2104 void
2105 maybe_push_to_top_level (pseudo)
2106 int pseudo;
2107 {
2108 extern int current_lang_stacksize;
2109 struct saved_scope *s
2110 = (struct saved_scope *) xmalloc (sizeof (struct saved_scope));
2111 struct binding_level *b = inner_binding_level;
2112 tree old_bindings = NULL_TREE;
2113
2114 if (current_function_decl)
2115 push_cp_function_context (NULL_TREE);
2116
2117 if (previous_class_type)
2118 old_bindings = store_bindings (previous_class_values, old_bindings);
2119
2120 /* Have to include global_binding_level, because class-level decls
2121 aren't listed anywhere useful. */
2122 for (; b; b = b->level_chain)
2123 {
2124 tree t;
2125
2126 /* Template IDs are inserted into the global level. If they were
2127 inserted into namespace level, finish_file wouldn't find them
2128 when doing pending instantiations. Therefore, don't stop at
2129 namespace level, but continue until :: . */
2130 if (b == global_binding_level || (pseudo && b->pseudo_global))
2131 break;
2132
2133 old_bindings = store_bindings (b->names, old_bindings);
2134 /* We also need to check class_shadowed to save class-level type
2135 bindings, since pushclass doesn't fill in b->names. */
2136 if (b->parm_flag == 2)
2137 old_bindings = store_bindings (b->class_shadowed, old_bindings);
2138
2139 /* Unwind type-value slots back to top level. */
2140 for (t = b->type_shadowed; t; t = TREE_CHAIN (t))
2141 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (t), TREE_VALUE (t));
2142 }
2143
2144 s->old_binding_level = current_binding_level;
2145 current_binding_level = b;
2146
2147 s->old_namespace = current_namespace;
2148 s->class_name = current_class_name;
2149 s->class_type = current_class_type;
2150 s->access_specifier = current_access_specifier;
2151 s->function_decl = current_function_decl;
2152 s->class_bindings = class_binding_level;
2153 s->lang_stack = current_lang_stack;
2154 s->lang_base = current_lang_base;
2155 s->lang_stacksize = current_lang_stacksize;
2156 s->lang_name = current_lang_name;
2157 s->minimal_parse_mode = minimal_parse_mode;
2158 s->last_function_parms = last_function_parms;
2159 s->template_parms = current_template_parms;
2160 s->processing_template_decl = processing_template_decl;
2161 s->previous_class_type = previous_class_type;
2162 s->previous_class_values = previous_class_values;
2163 s->processing_specialization = processing_specialization;
2164 s->processing_explicit_instantiation = processing_explicit_instantiation;
2165
2166 current_class_name = current_class_type = NULL_TREE;
2167 current_function_decl = NULL_TREE;
2168 class_binding_level = (struct binding_level *)0;
2169 current_lang_stacksize = 10;
2170 current_lang_stack = current_lang_base
2171 = (tree *) xmalloc (current_lang_stacksize * sizeof (tree));
2172 current_lang_name = lang_name_cplusplus;
2173 strict_prototype = strict_prototypes_lang_cplusplus;
2174 named_labels = NULL_TREE;
2175 shadowed_labels = NULL_TREE;
2176 minimal_parse_mode = 0;
2177 previous_class_type = previous_class_values = NULL_TREE;
2178 processing_specialization = 0;
2179 processing_explicit_instantiation = 0;
2180 current_template_parms = NULL_TREE;
2181 processing_template_decl = 0;
2182 current_namespace = global_namespace;
2183
2184 s->prev = current_saved_scope;
2185 s->old_bindings = old_bindings;
2186 current_saved_scope = s;
2187
2188 push_obstacks (&permanent_obstack, &permanent_obstack);
2189 }
2190
2191 void
2192 push_to_top_level ()
2193 {
2194 maybe_push_to_top_level (0);
2195 }
2196
2197 void
2198 pop_from_top_level ()
2199 {
2200 extern int current_lang_stacksize;
2201 struct saved_scope *s = current_saved_scope;
2202 tree t;
2203
2204 /* Clear out class-level bindings cache. */
2205 if (previous_class_type)
2206 {
2207 popclass (-1);
2208 previous_class_type = NULL_TREE;
2209 }
2210
2211 pop_obstacks ();
2212
2213 current_binding_level = s->old_binding_level;
2214 current_saved_scope = s->prev;
2215 for (t = s->old_bindings; t; )
2216 {
2217 tree save = t;
2218 tree id = TREE_VEC_ELT (t, 0);
2219 if (id)
2220 {
2221 SET_IDENTIFIER_TYPE_VALUE (id, TREE_VEC_ELT (t, 1));
2222 IDENTIFIER_BINDING (id) = TREE_VEC_ELT (t, 2);
2223 IDENTIFIER_CLASS_VALUE (id) = TREE_VEC_ELT (t, 3);
2224 }
2225 t = TREE_CHAIN (t);
2226 TREE_CHAIN (save) = free_binding_vecs;
2227 free_binding_vecs = save;
2228 }
2229 current_namespace = s->old_namespace;
2230 current_class_name = s->class_name;
2231 current_class_type = s->class_type;
2232 current_access_specifier = s->access_specifier;
2233 current_function_decl = s->function_decl;
2234 class_binding_level = s->class_bindings;
2235 free (current_lang_base);
2236 current_lang_base = s->lang_base;
2237 current_lang_stack = s->lang_stack;
2238 current_lang_name = s->lang_name;
2239 current_lang_stacksize = s->lang_stacksize;
2240 if (current_lang_name == lang_name_cplusplus)
2241 strict_prototype = strict_prototypes_lang_cplusplus;
2242 else if (current_lang_name == lang_name_c)
2243 strict_prototype = strict_prototypes_lang_c;
2244 minimal_parse_mode = s->minimal_parse_mode;
2245 last_function_parms = s->last_function_parms;
2246 current_template_parms = s->template_parms;
2247 processing_template_decl = s->processing_template_decl;
2248 previous_class_type = s->previous_class_type;
2249 previous_class_values = s->previous_class_values;
2250 processing_specialization = s->processing_specialization;
2251 processing_explicit_instantiation = s->processing_explicit_instantiation;
2252
2253 free (s);
2254
2255 if (current_function_decl)
2256 pop_cp_function_context (NULL_TREE);
2257 }
2258 \f
2259 /* Push a definition of struct, union or enum tag "name".
2260 into binding_level "b". "type" should be the type node,
2261 We assume that the tag "name" is not already defined.
2262
2263 Note that the definition may really be just a forward reference.
2264 In that case, the TYPE_SIZE will be a NULL_TREE.
2265
2266 C++ gratuitously puts all these tags in the name space. */
2267
2268 /* When setting the IDENTIFIER_TYPE_VALUE field of an identifier ID,
2269 record the shadowed value for this binding contour. TYPE is
2270 the type that ID maps to. */
2271
2272 static void
2273 set_identifier_type_value_with_scope (id, type, b)
2274 tree id;
2275 tree type;
2276 struct binding_level *b;
2277 {
2278 if (!b->namespace_p)
2279 {
2280 /* Shadow the marker, not the real thing, so that the marker
2281 gets restored later. */
2282 tree old_type_value = REAL_IDENTIFIER_TYPE_VALUE (id);
2283 b->type_shadowed
2284 = tree_cons (id, old_type_value, b->type_shadowed);
2285 }
2286 else
2287 {
2288 tree binding = binding_for_name (id, current_namespace);
2289 BINDING_TYPE (binding) = type;
2290 /* Store marker instead of real type. */
2291 type = global_type_node;
2292 }
2293 SET_IDENTIFIER_TYPE_VALUE (id, type);
2294 }
2295
2296 /* As set_identifier_type_value_with_scope, but using inner_binding_level. */
2297
2298 void
2299 set_identifier_type_value (id, type)
2300 tree id;
2301 tree type;
2302 {
2303 set_identifier_type_value_with_scope (id, type, inner_binding_level);
2304 }
2305
2306 /* Return the type associated with id. */
2307
2308 tree
2309 identifier_type_value (id)
2310 tree id;
2311 {
2312 /* There is no type with that name, anywhere. */
2313 if (REAL_IDENTIFIER_TYPE_VALUE (id) == NULL_TREE)
2314 return NULL_TREE;
2315 /* This is not the type marker, but the real thing. */
2316 if (REAL_IDENTIFIER_TYPE_VALUE (id) != global_type_node)
2317 return REAL_IDENTIFIER_TYPE_VALUE (id);
2318 /* Have to search for it. It must be on the global level, now.
2319 Ask lookup_name not to return non-types. */
2320 id = lookup_name_real (id, 2, 1, 0);
2321 if (id)
2322 return TREE_TYPE (id);
2323 return NULL_TREE;
2324 }
2325
2326 /* Pop off extraneous binding levels left over due to syntax errors.
2327
2328 We don't pop past namespaces, as they might be valid. */
2329
2330 void
2331 pop_everything ()
2332 {
2333 #ifdef DEBUG_CP_BINDING_LEVELS
2334 fprintf (stderr, "XXX entering pop_everything ()\n");
2335 #endif
2336 while (! toplevel_bindings_p () && ! pseudo_global_level_p ())
2337 {
2338 if (class_binding_level)
2339 pop_nested_class (1);
2340 else
2341 poplevel (0, 0, 0);
2342 }
2343 #ifdef DEBUG_CP_BINDING_LEVELS
2344 fprintf (stderr, "XXX leaving pop_everything ()\n");
2345 #endif
2346 }
2347
2348 /* The type TYPE is being declared. If it is a class template, or a
2349 specialization of a class template, do any processing required and
2350 perform error-checking. If IS_FRIEND is non-zero, this TYPE is
2351 being declared a friend. B is the binding level at which this TYPE
2352 should be bound.
2353
2354 Returns the TYPE_DECL for TYPE, which may have been altered by this
2355 processing. */
2356
2357 static tree
2358 maybe_process_template_type_declaration (type, globalize, b)
2359 tree type;
2360 int globalize;
2361 struct binding_level* b;
2362 {
2363 tree decl = TYPE_NAME (type);
2364
2365 if (processing_template_parmlist)
2366 /* You can't declare a new template type in a template parameter
2367 list. But, you can declare a non-template type:
2368
2369 template <class A*> struct S;
2370
2371 is a forward-declaration of `A'. */
2372 ;
2373 else
2374 {
2375 maybe_check_template_type (type);
2376
2377 my_friendly_assert (IS_AGGR_TYPE (type)
2378 || TREE_CODE (type) == ENUMERAL_TYPE, 0);
2379
2380
2381 if (/* If !GLOBALIZE then we are looking at a definition.
2382 It may not be a primary template. (For example, in:
2383
2384 template <class T>
2385 struct S1 { class S2 {}; }
2386
2387 we have to push_template_decl for S2.) */
2388 (processing_template_decl && !globalize)
2389 /* If we are declaring a friend template class, we will
2390 have GLOBALIZE set, since something like:
2391
2392 template <class T>
2393 struct S1 {
2394 template <class U>
2395 friend class S2;
2396 };
2397
2398 declares S2 to be at global scope. */
2399 || PROCESSING_REAL_TEMPLATE_DECL_P ())
2400 {
2401 /* This may change after the call to
2402 push_template_decl_real, but we want the original value. */
2403 tree name = DECL_NAME (decl);
2404
2405 decl = push_template_decl_real (decl, globalize);
2406 /* If the current binding level is the binding level for the
2407 template parameters (see the comment in
2408 begin_template_parm_list) and the enclosing level is a class
2409 scope, and we're not looking at a friend, push the
2410 declaration of the member class into the class scope. In the
2411 friend case, push_template_decl will already have put the
2412 friend into global scope, if appropriate. */
2413 if (TREE_CODE (type) != ENUMERAL_TYPE
2414 && !globalize && b->pseudo_global
2415 && b->level_chain->parm_flag == 2)
2416 {
2417 pushdecl_with_scope (CLASSTYPE_TI_TEMPLATE (type),
2418 b->level_chain);
2419 finish_member_declaration (CLASSTYPE_TI_TEMPLATE (type));
2420 /* Put this tag on the list of tags for the class, since
2421 that won't happen below because B is not the class
2422 binding level, but is instead the pseudo-global level. */
2423 b->level_chain->tags =
2424 saveable_tree_cons (name, type, b->level_chain->tags);
2425 TREE_NONLOCAL_FLAG (type) = 1;
2426 if (TYPE_SIZE (current_class_type) == NULL_TREE)
2427 CLASSTYPE_TAGS (current_class_type) = b->level_chain->tags;
2428 }
2429 }
2430 }
2431
2432 return decl;
2433 }
2434
2435 /* Push a tag name NAME for struct/class/union/enum type TYPE.
2436 Normally put it into the inner-most non-tag-transparent scope,
2437 but if GLOBALIZE is true, put it in the inner-most non-class scope.
2438 The latter is needed for implicit declarations. */
2439
2440 void
2441 pushtag (name, type, globalize)
2442 tree name, type;
2443 int globalize;
2444 {
2445 register struct binding_level *b;
2446 tree context = 0;
2447 tree c_decl = 0;
2448
2449 b = inner_binding_level;
2450 while (b->tag_transparent
2451 || (globalize && b->parm_flag == 2))
2452 b = b->level_chain;
2453
2454 if (toplevel_bindings_p ())
2455 b->tags = perm_tree_cons (name, type, b->tags);
2456 else
2457 b->tags = saveable_tree_cons (name, type, b->tags);
2458
2459 if (name)
2460 {
2461 context = type ? TYPE_CONTEXT (type) : NULL_TREE;
2462 if (! context)
2463 {
2464 tree cs = current_scope ();
2465
2466 if (! globalize)
2467 context = cs;
2468 else if (cs != NULL_TREE
2469 && TREE_CODE_CLASS (TREE_CODE (cs)) == 't')
2470 /* When declaring a friend class of a local class, we want
2471 to inject the newly named class into the scope
2472 containing the local class, not the namespace scope. */
2473 context = hack_decl_function_context (get_type_decl (cs));
2474 }
2475 if (context)
2476 c_decl = TREE_CODE (context) == FUNCTION_DECL
2477 ? context : TYPE_MAIN_DECL (context);
2478
2479 if (!context)
2480 context = current_namespace;
2481
2482 /* Do C++ gratuitous typedefing. */
2483 if (IDENTIFIER_TYPE_VALUE (name) != type)
2484 {
2485 register tree d = NULL_TREE;
2486 int newdecl = 0, in_class = 0;
2487
2488 if ((b->pseudo_global && b->level_chain->parm_flag == 2)
2489 || b->parm_flag == 2)
2490 in_class = 1;
2491 else
2492 d = lookup_nested_type (type, c_decl);
2493
2494 if (d == NULL_TREE)
2495 {
2496 newdecl = 1;
2497 d = build_decl (TYPE_DECL, name, type);
2498 if (current_lang_name == lang_name_java)
2499 TYPE_FOR_JAVA (type) = 1;
2500 SET_DECL_ARTIFICIAL (d);
2501 if (! in_class)
2502 set_identifier_type_value_with_scope (name, type, b);
2503 }
2504 else
2505 d = TYPE_MAIN_DECL (d);
2506
2507 TYPE_NAME (type) = d;
2508 DECL_CONTEXT (d) = FROB_CONTEXT (context);
2509
2510 d = maybe_process_template_type_declaration (type,
2511 globalize, b);
2512
2513 if (b->parm_flag == 2)
2514 {
2515 pushdecl_class_level (d);
2516 if (newdecl && !PROCESSING_REAL_TEMPLATE_DECL_P ())
2517 /* Put this TYPE_DECL on the TYPE_FIELDS list for the
2518 class. But if it's a member template class, we
2519 want the TEMPLATE_DECL, not the TYPE_DECL, so this
2520 is done later. */
2521 finish_member_declaration (d);
2522 }
2523 else
2524 d = pushdecl_with_scope (d, b);
2525
2526 if (newdecl)
2527 {
2528 if (ANON_AGGRNAME_P (name))
2529 DECL_IGNORED_P (d) = 1;
2530
2531 TYPE_CONTEXT (type) = DECL_CONTEXT (d);
2532 DECL_ASSEMBLER_NAME (d) = DECL_NAME (d);
2533 if (!uses_template_parms (type))
2534 DECL_ASSEMBLER_NAME (d)
2535 = get_identifier (build_overload_name (type, 1, 1));
2536 }
2537 }
2538 if (b->parm_flag == 2)
2539 {
2540 TREE_NONLOCAL_FLAG (type) = 1;
2541 if (TYPE_SIZE (current_class_type) == NULL_TREE)
2542 CLASSTYPE_TAGS (current_class_type) = b->tags;
2543 }
2544 }
2545
2546 if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL)
2547 /* Use the canonical TYPE_DECL for this node. */
2548 TYPE_STUB_DECL (type) = TYPE_NAME (type);
2549 else
2550 {
2551 /* Create a fake NULL-named TYPE_DECL node whose TREE_TYPE
2552 will be the tagged type we just added to the current
2553 binding level. This fake NULL-named TYPE_DECL node helps
2554 dwarfout.c to know when it needs to output a
2555 representation of a tagged type, and it also gives us a
2556 convenient place to record the "scope start" address for
2557 the tagged type. */
2558
2559 tree d = build_decl (TYPE_DECL, NULL_TREE, type);
2560 TYPE_STUB_DECL (type) = pushdecl_with_scope (d, b);
2561 }
2562 }
2563
2564 /* Counter used to create anonymous type names. */
2565
2566 static int anon_cnt = 0;
2567
2568 /* Return an IDENTIFIER which can be used as a name for
2569 anonymous structs and unions. */
2570
2571 tree
2572 make_anon_name ()
2573 {
2574 char buf[32];
2575
2576 sprintf (buf, ANON_AGGRNAME_FORMAT, anon_cnt++);
2577 return get_identifier (buf);
2578 }
2579
2580 /* Clear the TREE_PURPOSE slot of tags which have anonymous typenames.
2581 This keeps dbxout from getting confused. */
2582
2583 void
2584 clear_anon_tags ()
2585 {
2586 register struct binding_level *b;
2587 register tree tags;
2588 static int last_cnt = 0;
2589
2590 /* Fast out if no new anon names were declared. */
2591 if (last_cnt == anon_cnt)
2592 return;
2593
2594 b = current_binding_level;
2595 while (b->tag_transparent)
2596 b = b->level_chain;
2597 tags = b->tags;
2598 while (tags)
2599 {
2600 /* A NULL purpose means we have already processed all tags
2601 from here to the end of the list. */
2602 if (TREE_PURPOSE (tags) == NULL_TREE)
2603 break;
2604 if (ANON_AGGRNAME_P (TREE_PURPOSE (tags)))
2605 TREE_PURPOSE (tags) = NULL_TREE;
2606 tags = TREE_CHAIN (tags);
2607 }
2608 last_cnt = anon_cnt;
2609 }
2610 \f
2611 /* Subroutine of duplicate_decls: return truthvalue of whether
2612 or not types of these decls match.
2613
2614 For C++, we must compare the parameter list so that `int' can match
2615 `int&' in a parameter position, but `int&' is not confused with
2616 `const int&'. */
2617
2618 int
2619 decls_match (newdecl, olddecl)
2620 tree newdecl, olddecl;
2621 {
2622 int types_match;
2623
2624 if (TREE_CODE (newdecl) != TREE_CODE (olddecl))
2625 /* If the two DECLs are not even the same kind of thing, we're not
2626 interested in their types. */
2627 return 0;
2628
2629 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2630 {
2631 tree f1 = TREE_TYPE (newdecl);
2632 tree f2 = TREE_TYPE (olddecl);
2633 tree p1 = TYPE_ARG_TYPES (f1);
2634 tree p2 = TYPE_ARG_TYPES (f2);
2635
2636 if (DECL_REAL_CONTEXT (newdecl) != DECL_REAL_CONTEXT (olddecl)
2637 && ! (DECL_LANGUAGE (newdecl) == lang_c
2638 && DECL_LANGUAGE (olddecl) == lang_c))
2639 return 0;
2640
2641 /* When we parse a static member function definition,
2642 we put together a FUNCTION_DECL which thinks its type
2643 is METHOD_TYPE. Change that to FUNCTION_TYPE, and
2644 proceed. */
2645 if (TREE_CODE (f1) == METHOD_TYPE && DECL_STATIC_FUNCTION_P (olddecl))
2646 revert_static_member_fn (&newdecl, &f1, &p1);
2647 else if (TREE_CODE (f2) == METHOD_TYPE
2648 && DECL_STATIC_FUNCTION_P (newdecl))
2649 revert_static_member_fn (&olddecl, &f2, &p2);
2650
2651 /* Here we must take care of the case where new default
2652 parameters are specified. Also, warn if an old
2653 declaration becomes ambiguous because default
2654 parameters may cause the two to be ambiguous. */
2655 if (TREE_CODE (f1) != TREE_CODE (f2))
2656 {
2657 if (TREE_CODE (f1) == OFFSET_TYPE)
2658 cp_compiler_error ("`%D' redeclared as member function", newdecl);
2659 else
2660 cp_compiler_error ("`%D' redeclared as non-member function", newdecl);
2661 return 0;
2662 }
2663
2664 if (same_type_p (TREE_TYPE (f1), TREE_TYPE (f2)))
2665 {
2666 if (! strict_prototypes_lang_c && DECL_LANGUAGE (olddecl) == lang_c
2667 && p2 == NULL_TREE)
2668 {
2669 types_match = self_promoting_args_p (p1);
2670 if (p1 == void_list_node)
2671 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
2672 }
2673 else if (!strict_prototypes_lang_c && DECL_LANGUAGE (olddecl)==lang_c
2674 && DECL_LANGUAGE (newdecl) == lang_c && p1 == NULL_TREE)
2675 {
2676 types_match = self_promoting_args_p (p2);
2677 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
2678 }
2679 else
2680 types_match = compparms (p1, p2);
2681 }
2682 else
2683 types_match = 0;
2684 }
2685 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
2686 {
2687 if (!comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
2688 DECL_TEMPLATE_PARMS (olddecl)))
2689 return 0;
2690
2691 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
2692 types_match = 1;
2693 else
2694 types_match = decls_match (DECL_TEMPLATE_RESULT (olddecl),
2695 DECL_TEMPLATE_RESULT (newdecl));
2696 }
2697 else
2698 {
2699 if (TREE_TYPE (newdecl) == error_mark_node)
2700 types_match = TREE_TYPE (olddecl) == error_mark_node;
2701 else if (TREE_TYPE (olddecl) == NULL_TREE)
2702 types_match = TREE_TYPE (newdecl) == NULL_TREE;
2703 else if (TREE_TYPE (newdecl) == NULL_TREE)
2704 types_match = 0;
2705 else
2706 types_match = comptypes (TREE_TYPE (newdecl),
2707 TREE_TYPE (olddecl),
2708 COMPARE_REDECLARATION);
2709 }
2710
2711 return types_match;
2712 }
2713
2714 /* If NEWDECL is `static' and an `extern' was seen previously,
2715 warn about it. (OLDDECL may be NULL_TREE; NAME contains
2716 information about previous usage as an `extern'.)
2717
2718 Note that this does not apply to the C++ case of declaring
2719 a variable `extern const' and then later `const'.
2720
2721 Don't complain about built-in functions, since they are beyond
2722 the user's control. */
2723
2724 static void
2725 warn_extern_redeclared_static (newdecl, olddecl)
2726 tree newdecl, olddecl;
2727 {
2728 tree name;
2729
2730 static char *explicit_extern_static_warning
2731 = "`%D' was declared `extern' and later `static'";
2732 static char *implicit_extern_static_warning
2733 = "`%D' was declared implicitly `extern' and later `static'";
2734
2735 if (TREE_CODE (newdecl) == TYPE_DECL)
2736 return;
2737
2738 name = DECL_ASSEMBLER_NAME (newdecl);
2739 if (TREE_PUBLIC (name) && DECL_THIS_STATIC (newdecl))
2740 {
2741 /* It's okay to redeclare an ANSI built-in function as static,
2742 or to declare a non-ANSI built-in function as anything. */
2743 if (! (TREE_CODE (newdecl) == FUNCTION_DECL
2744 && olddecl != NULL_TREE
2745 && TREE_CODE (olddecl) == FUNCTION_DECL
2746 && (DECL_BUILT_IN (olddecl)
2747 || DECL_BUILT_IN_NONANSI (olddecl))))
2748 {
2749 cp_pedwarn (IDENTIFIER_IMPLICIT_DECL (name)
2750 ? implicit_extern_static_warning
2751 : explicit_extern_static_warning, newdecl);
2752 if (olddecl != NULL_TREE)
2753 cp_pedwarn_at ("previous declaration of `%D'", olddecl);
2754 }
2755 }
2756 }
2757
2758 /* Handle when a new declaration NEWDECL has the same name as an old
2759 one OLDDECL in the same binding contour. Prints an error message
2760 if appropriate.
2761
2762 If safely possible, alter OLDDECL to look like NEWDECL, and return 1.
2763 Otherwise, return 0. */
2764
2765 int
2766 duplicate_decls (newdecl, olddecl)
2767 tree newdecl, olddecl;
2768 {
2769 extern struct obstack permanent_obstack;
2770 unsigned olddecl_uid = DECL_UID (olddecl);
2771 int olddecl_friend = 0, types_match = 0;
2772 int new_defines_function = 0;
2773
2774 if (newdecl == olddecl)
2775 return 1;
2776
2777 types_match = decls_match (newdecl, olddecl);
2778
2779 /* If either the type of the new decl or the type of the old decl is an
2780 error_mark_node, then that implies that we have already issued an
2781 error (earlier) for some bogus type specification, and in that case,
2782 it is rather pointless to harass the user with yet more error message
2783 about the same declaration, so just pretend the types match here. */
2784 if (TREE_TYPE (newdecl) == error_mark_node
2785 || TREE_TYPE (olddecl) == error_mark_node)
2786 types_match = 1;
2787
2788 /* Check for redeclaration and other discrepancies. */
2789 if (TREE_CODE (olddecl) == FUNCTION_DECL
2790 && DECL_ARTIFICIAL (olddecl)
2791 && (DECL_BUILT_IN (olddecl) || DECL_BUILT_IN_NONANSI (olddecl)))
2792 {
2793 /* If you declare a built-in or predefined function name as static,
2794 the old definition is overridden, but optionally warn this was a
2795 bad choice of name. Ditto for overloads. */
2796 if (! TREE_PUBLIC (newdecl)
2797 || (TREE_CODE (newdecl) == FUNCTION_DECL
2798 && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl)))
2799 {
2800 if (warn_shadow)
2801 cp_warning ("shadowing %s function `%#D'",
2802 DECL_BUILT_IN (olddecl) ? "built-in" : "library",
2803 olddecl);
2804 /* Discard the old built-in function. */
2805 return 0;
2806 }
2807 else if (! types_match)
2808 {
2809 if (TREE_CODE (newdecl) != FUNCTION_DECL)
2810 {
2811 /* If the built-in is not ansi, then programs can override
2812 it even globally without an error. */
2813 if (! DECL_BUILT_IN (olddecl))
2814 cp_warning ("library function `%#D' redeclared as non-function `%#D'",
2815 olddecl, newdecl);
2816 else
2817 {
2818 cp_error ("declaration of `%#D'", newdecl);
2819 cp_error ("conflicts with built-in declaration `%#D'",
2820 olddecl);
2821 }
2822 return 0;
2823 }
2824
2825 cp_warning ("declaration of `%#D'", newdecl);
2826 cp_warning ("conflicts with built-in declaration `%#D'",
2827 olddecl);
2828 }
2829 }
2830 else if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
2831 {
2832 if ((TREE_CODE (olddecl) == TYPE_DECL && DECL_ARTIFICIAL (olddecl)
2833 && TREE_CODE (newdecl) != TYPE_DECL
2834 && ! (TREE_CODE (newdecl) == TEMPLATE_DECL
2835 && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL))
2836 || (TREE_CODE (newdecl) == TYPE_DECL && DECL_ARTIFICIAL (newdecl)
2837 && TREE_CODE (olddecl) != TYPE_DECL
2838 && ! (TREE_CODE (olddecl) == TEMPLATE_DECL
2839 && (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl))
2840 == TYPE_DECL))))
2841 {
2842 /* We do nothing special here, because C++ does such nasty
2843 things with TYPE_DECLs. Instead, just let the TYPE_DECL
2844 get shadowed, and know that if we need to find a TYPE_DECL
2845 for a given name, we can look in the IDENTIFIER_TYPE_VALUE
2846 slot of the identifier. */
2847 return 0;
2848 }
2849
2850 if ((TREE_CODE (newdecl) == FUNCTION_DECL
2851 && DECL_FUNCTION_TEMPLATE_P (olddecl))
2852 || (TREE_CODE (olddecl) == FUNCTION_DECL
2853 && DECL_FUNCTION_TEMPLATE_P (newdecl)))
2854 return 0;
2855
2856 cp_error ("`%#D' redeclared as different kind of symbol", newdecl);
2857 if (TREE_CODE (olddecl) == TREE_LIST)
2858 olddecl = TREE_VALUE (olddecl);
2859 cp_error_at ("previous declaration of `%#D'", olddecl);
2860
2861 /* New decl is completely inconsistent with the old one =>
2862 tell caller to replace the old one. */
2863
2864 return 0;
2865 }
2866 else if (!types_match)
2867 {
2868 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
2869 {
2870 /* The name of a class template may not be declared to refer to
2871 any other template, class, function, object, namespace, value,
2872 or type in the same scope. */
2873 if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == TYPE_DECL
2874 || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
2875 {
2876 cp_error ("declaration of template `%#D'", newdecl);
2877 cp_error_at ("conflicts with previous declaration `%#D'",
2878 olddecl);
2879 }
2880 else if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == FUNCTION_DECL
2881 && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
2882 && compparms (TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl))),
2883 TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl))))
2884 && comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
2885 DECL_TEMPLATE_PARMS (olddecl)))
2886 {
2887 cp_error ("new declaration `%#D'", newdecl);
2888 cp_error_at ("ambiguates old declaration `%#D'", olddecl);
2889 }
2890 return 0;
2891 }
2892 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2893 {
2894 if (DECL_LANGUAGE (newdecl) == lang_c
2895 && DECL_LANGUAGE (olddecl) == lang_c)
2896 {
2897 cp_error ("declaration of C function `%#D' conflicts with",
2898 newdecl);
2899 cp_error_at ("previous declaration `%#D' here", olddecl);
2900 }
2901 else if (compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
2902 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
2903 {
2904 cp_error ("new declaration `%#D'", newdecl);
2905 cp_error_at ("ambiguates old declaration `%#D'", olddecl);
2906 }
2907 else
2908 return 0;
2909 }
2910
2911 /* Already complained about this, so don't do so again. */
2912 else if (current_class_type == NULL_TREE
2913 || IDENTIFIER_ERROR_LOCUS (DECL_ASSEMBLER_NAME (newdecl)) != current_class_type)
2914 {
2915 cp_error ("conflicting types for `%#D'", newdecl);
2916 cp_error_at ("previous declaration as `%#D'", olddecl);
2917 }
2918 }
2919 else if (TREE_CODE (newdecl) == FUNCTION_DECL
2920 && ((DECL_TEMPLATE_SPECIALIZATION (olddecl)
2921 && (!DECL_TEMPLATE_INFO (newdecl)
2922 || (DECL_TI_TEMPLATE (newdecl)
2923 != DECL_TI_TEMPLATE (olddecl))))
2924 || (DECL_TEMPLATE_SPECIALIZATION (newdecl)
2925 && (!DECL_TEMPLATE_INFO (olddecl)
2926 || (DECL_TI_TEMPLATE (olddecl)
2927 != DECL_TI_TEMPLATE (newdecl))))))
2928 /* It's OK to have a template specialization and a non-template
2929 with the same type, or to have specializations of two
2930 different templates with the same type. Note that if one is a
2931 specialization, and the other is an instantiation of the same
2932 template, that we do not exit at this point. That situation
2933 can occur if we instantiate a template class, and then
2934 specialize one of its methods. This situation is legal, but
2935 the declarations must be merged in the usual way. */
2936 return 0;
2937 else if (TREE_CODE (newdecl) == FUNCTION_DECL
2938 && ((DECL_TEMPLATE_INSTANTIATION (olddecl)
2939 && !DECL_USE_TEMPLATE (newdecl))
2940 || (DECL_TEMPLATE_INSTANTIATION (newdecl)
2941 && !DECL_USE_TEMPLATE (olddecl))))
2942 /* One of the declarations is a template instantiation, and the
2943 other is not a template at all. That's OK. */
2944 return 0;
2945 else if (TREE_CODE (newdecl) == NAMESPACE_DECL
2946 && DECL_NAMESPACE_ALIAS (newdecl)
2947 && DECL_NAMESPACE_ALIAS (newdecl) == DECL_NAMESPACE_ALIAS (olddecl))
2948 /* Redeclaration of namespace alias, ignore it. */
2949 return 1;
2950 else
2951 {
2952 char *errmsg = redeclaration_error_message (newdecl, olddecl);
2953 if (errmsg)
2954 {
2955 cp_error (errmsg, newdecl);
2956 if (DECL_NAME (olddecl) != NULL_TREE)
2957 cp_error_at ((DECL_INITIAL (olddecl)
2958 && namespace_bindings_p ())
2959 ? "`%#D' previously defined here"
2960 : "`%#D' previously declared here", olddecl);
2961 }
2962 else if (TREE_CODE (olddecl) == FUNCTION_DECL
2963 && DECL_INITIAL (olddecl) != NULL_TREE
2964 && TYPE_ARG_TYPES (TREE_TYPE (olddecl)) == NULL_TREE
2965 && TYPE_ARG_TYPES (TREE_TYPE (newdecl)) != NULL_TREE)
2966 {
2967 /* Prototype decl follows defn w/o prototype. */
2968 cp_warning_at ("prototype for `%#D'", newdecl);
2969 cp_warning_at ("follows non-prototype definition here", olddecl);
2970 }
2971 else if (TREE_CODE (olddecl) == FUNCTION_DECL
2972 && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl))
2973 {
2974 /* extern "C" int foo ();
2975 int foo () { bar (); }
2976 is OK. */
2977 if (current_lang_stack == current_lang_base)
2978 DECL_LANGUAGE (newdecl) = DECL_LANGUAGE (olddecl);
2979 else
2980 {
2981 cp_error_at ("previous declaration of `%#D' with %L linkage",
2982 olddecl, DECL_LANGUAGE (olddecl));
2983 cp_error ("conflicts with new declaration with %L linkage",
2984 DECL_LANGUAGE (newdecl));
2985 }
2986 }
2987
2988 if (DECL_LANG_SPECIFIC (olddecl) && DECL_USE_TEMPLATE (olddecl))
2989 ;
2990 else if (TREE_CODE (olddecl) == FUNCTION_DECL)
2991 {
2992 tree t1 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
2993 tree t2 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
2994 int i = 1;
2995
2996 if (TREE_CODE (TREE_TYPE (newdecl)) == METHOD_TYPE)
2997 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2);
2998
2999 for (; t1 && t1 != void_list_node;
3000 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2), i++)
3001 if (TREE_PURPOSE (t1) && TREE_PURPOSE (t2))
3002 {
3003 if (1 == simple_cst_equal (TREE_PURPOSE (t1),
3004 TREE_PURPOSE (t2)))
3005 {
3006 if (pedantic)
3007 {
3008 cp_pedwarn ("default argument given for parameter %d of `%#D'",
3009 i, newdecl);
3010 cp_pedwarn_at ("after previous specification in `%#D'",
3011 olddecl);
3012 }
3013 }
3014 else
3015 {
3016 cp_error ("default argument given for parameter %d of `%#D'",
3017 i, newdecl);
3018 cp_error_at ("after previous specification in `%#D'",
3019 olddecl);
3020 }
3021 }
3022
3023 if (DECL_THIS_INLINE (newdecl) && ! DECL_THIS_INLINE (olddecl)
3024 && TREE_ADDRESSABLE (olddecl) && warn_inline)
3025 {
3026 cp_warning ("`%#D' was used before it was declared inline",
3027 newdecl);
3028 cp_warning_at ("previous non-inline declaration here",
3029 olddecl);
3030 }
3031 }
3032 }
3033
3034 /* If new decl is `static' and an `extern' was seen previously,
3035 warn about it. */
3036 warn_extern_redeclared_static (newdecl, olddecl);
3037
3038 /* We have committed to returning 1 at this point. */
3039 if (TREE_CODE (newdecl) == FUNCTION_DECL)
3040 {
3041 /* Now that functions must hold information normally held
3042 by field decls, there is extra work to do so that
3043 declaration information does not get destroyed during
3044 definition. */
3045 if (DECL_VINDEX (olddecl))
3046 DECL_VINDEX (newdecl) = DECL_VINDEX (olddecl);
3047 if (DECL_CONTEXT (olddecl))
3048 DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
3049 if (DECL_CLASS_CONTEXT (olddecl))
3050 DECL_CLASS_CONTEXT (newdecl) = DECL_CLASS_CONTEXT (olddecl);
3051 if (DECL_PENDING_INLINE_INFO (newdecl) == (struct pending_inline *)0)
3052 DECL_PENDING_INLINE_INFO (newdecl) = DECL_PENDING_INLINE_INFO (olddecl);
3053 DECL_STATIC_CONSTRUCTOR (newdecl) |= DECL_STATIC_CONSTRUCTOR (olddecl);
3054 DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
3055 DECL_ABSTRACT_VIRTUAL_P (newdecl) |= DECL_ABSTRACT_VIRTUAL_P (olddecl);
3056 DECL_VIRTUAL_P (newdecl) |= DECL_VIRTUAL_P (olddecl);
3057 DECL_NEEDS_FINAL_OVERRIDER_P (newdecl) |= DECL_NEEDS_FINAL_OVERRIDER_P (olddecl);
3058 new_defines_function = DECL_INITIAL (newdecl) != NULL_TREE;
3059
3060 /* Optionally warn about more than one declaration for the same
3061 name, but don't warn about a function declaration followed by a
3062 definition. */
3063 if (warn_redundant_decls && ! DECL_ARTIFICIAL (olddecl)
3064 && !(new_defines_function && DECL_INITIAL (olddecl) == NULL_TREE)
3065 /* Don't warn about extern decl followed by definition. */
3066 && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl))
3067 /* Don't warn about friends, let add_friend take care of it. */
3068 && ! DECL_FRIEND_P (newdecl))
3069 {
3070 cp_warning ("redundant redeclaration of `%D' in same scope", newdecl);
3071 cp_warning_at ("previous declaration of `%D'", olddecl);
3072 }
3073 }
3074
3075 /* Deal with C++: must preserve virtual function table size. */
3076 if (TREE_CODE (olddecl) == TYPE_DECL)
3077 {
3078 register tree newtype = TREE_TYPE (newdecl);
3079 register tree oldtype = TREE_TYPE (olddecl);
3080
3081 if (newtype != error_mark_node && oldtype != error_mark_node
3082 && TYPE_LANG_SPECIFIC (newtype) && TYPE_LANG_SPECIFIC (oldtype))
3083 {
3084 CLASSTYPE_VSIZE (newtype) = CLASSTYPE_VSIZE (oldtype);
3085 CLASSTYPE_FRIEND_CLASSES (newtype)
3086 = CLASSTYPE_FRIEND_CLASSES (oldtype);
3087 }
3088 }
3089
3090 /* Copy all the DECL_... slots specified in the new decl
3091 except for any that we copy here from the old type. */
3092 DECL_MACHINE_ATTRIBUTES (newdecl)
3093 = merge_machine_decl_attributes (olddecl, newdecl);
3094
3095 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
3096 {
3097 if (! duplicate_decls (DECL_TEMPLATE_RESULT (newdecl),
3098 DECL_TEMPLATE_RESULT (olddecl)))
3099 cp_error ("invalid redeclaration of %D", newdecl);
3100 TREE_TYPE (olddecl) = TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl));
3101 DECL_TEMPLATE_SPECIALIZATIONS (olddecl)
3102 = chainon (DECL_TEMPLATE_SPECIALIZATIONS (olddecl),
3103 DECL_TEMPLATE_SPECIALIZATIONS (newdecl));
3104
3105 return 1;
3106 }
3107
3108 if (types_match)
3109 {
3110 /* Automatically handles default parameters. */
3111 tree oldtype = TREE_TYPE (olddecl);
3112 tree newtype;
3113
3114 /* Make sure we put the new type in the same obstack as the old one. */
3115 if (oldtype)
3116 push_obstacks (TYPE_OBSTACK (oldtype), TYPE_OBSTACK (oldtype));
3117 else
3118 {
3119 push_obstacks_nochange ();
3120 end_temporary_allocation ();
3121 }
3122
3123 /* Merge the data types specified in the two decls. */
3124 newtype = common_type (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
3125
3126 if (TREE_CODE (newdecl) == VAR_DECL)
3127 DECL_THIS_EXTERN (newdecl) |= DECL_THIS_EXTERN (olddecl);
3128 /* Do this after calling `common_type' so that default
3129 parameters don't confuse us. */
3130 else if (TREE_CODE (newdecl) == FUNCTION_DECL
3131 && (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl))
3132 != TYPE_RAISES_EXCEPTIONS (TREE_TYPE (olddecl))))
3133 {
3134 TREE_TYPE (newdecl) = build_exception_variant (newtype,
3135 TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl)));
3136 TREE_TYPE (olddecl) = build_exception_variant (newtype,
3137 TYPE_RAISES_EXCEPTIONS (oldtype));
3138
3139 if ((pedantic || ! DECL_IN_SYSTEM_HEADER (olddecl))
3140 && DECL_SOURCE_LINE (olddecl) != 0
3141 && flag_exceptions
3142 && ! compexcepttypes (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
3143 {
3144 cp_pedwarn ("declaration of `%D' throws different exceptions",
3145 newdecl);
3146 cp_pedwarn_at ("previous declaration here", olddecl);
3147 }
3148 }
3149 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
3150
3151 /* Lay the type out, unless already done. */
3152 if (newtype != canonical_type_variant (oldtype)
3153 && TREE_TYPE (newdecl) != error_mark_node
3154 && !(processing_template_decl && uses_template_parms (newdecl)))
3155 layout_type (TREE_TYPE (newdecl));
3156
3157 if ((TREE_CODE (newdecl) == VAR_DECL
3158 || TREE_CODE (newdecl) == PARM_DECL
3159 || TREE_CODE (newdecl) == RESULT_DECL
3160 || TREE_CODE (newdecl) == FIELD_DECL
3161 || TREE_CODE (newdecl) == TYPE_DECL)
3162 && !(processing_template_decl && uses_template_parms (newdecl)))
3163 layout_decl (newdecl, 0);
3164
3165 /* Merge the type qualifiers. */
3166 if (TREE_READONLY (newdecl))
3167 TREE_READONLY (olddecl) = 1;
3168 if (TREE_THIS_VOLATILE (newdecl))
3169 TREE_THIS_VOLATILE (olddecl) = 1;
3170
3171 /* Merge the initialization information. */
3172 if (DECL_INITIAL (newdecl) == NULL_TREE
3173 && DECL_INITIAL (olddecl) != NULL_TREE)
3174 {
3175 DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
3176 DECL_SOURCE_FILE (newdecl) = DECL_SOURCE_FILE (olddecl);
3177 DECL_SOURCE_LINE (newdecl) = DECL_SOURCE_LINE (olddecl);
3178 if (DECL_LANG_SPECIFIC (newdecl)
3179 && DECL_LANG_SPECIFIC (olddecl))
3180 DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
3181 }
3182
3183 /* Merge the section attribute.
3184 We want to issue an error if the sections conflict but that must be
3185 done later in decl_attributes since we are called before attributes
3186 are assigned. */
3187 if (DECL_SECTION_NAME (newdecl) == NULL_TREE)
3188 DECL_SECTION_NAME (newdecl) = DECL_SECTION_NAME (olddecl);
3189
3190 /* Keep the old rtl since we can safely use it, unless it's the
3191 call to abort() used for abstract virtuals. */
3192 if ((DECL_LANG_SPECIFIC (olddecl)
3193 && !DECL_ABSTRACT_VIRTUAL_P (olddecl))
3194 || DECL_RTL (olddecl) != DECL_RTL (abort_fndecl))
3195 DECL_RTL (newdecl) = DECL_RTL (olddecl);
3196
3197 pop_obstacks ();
3198 }
3199 /* If cannot merge, then use the new type and qualifiers,
3200 and don't preserve the old rtl. */
3201 else
3202 {
3203 /* Clean out any memory we had of the old declaration. */
3204 tree oldstatic = value_member (olddecl, static_aggregates);
3205 if (oldstatic)
3206 TREE_VALUE (oldstatic) = error_mark_node;
3207
3208 TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
3209 TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
3210 TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
3211 TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
3212 }
3213
3214 /* Merge the storage class information. */
3215 DECL_WEAK (newdecl) |= DECL_WEAK (olddecl);
3216 DECL_ONE_ONLY (newdecl) |= DECL_ONE_ONLY (olddecl);
3217 TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
3218 TREE_STATIC (olddecl) = TREE_STATIC (newdecl) |= TREE_STATIC (olddecl);
3219 if (! DECL_EXTERNAL (olddecl))
3220 DECL_EXTERNAL (newdecl) = 0;
3221
3222 if (DECL_LANG_SPECIFIC (newdecl) && DECL_LANG_SPECIFIC (olddecl))
3223 {
3224 DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl);
3225 DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl);
3226 DECL_COMDAT (newdecl) |= DECL_COMDAT (olddecl);
3227 /* Don't really know how much of the language-specific
3228 values we should copy from old to new. */
3229 DECL_IN_AGGR_P (newdecl) = DECL_IN_AGGR_P (olddecl);
3230 DECL_ACCESS (newdecl) = DECL_ACCESS (olddecl);
3231 DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl);
3232 DECL_TEMPLATE_INFO (newdecl) = DECL_TEMPLATE_INFO (olddecl);
3233 olddecl_friend = DECL_FRIEND_P (olddecl);
3234 }
3235
3236 if (TREE_CODE (newdecl) == FUNCTION_DECL)
3237 {
3238 if (DECL_TEMPLATE_INSTANTIATION (olddecl)
3239 && !DECL_TEMPLATE_INSTANTIATION (newdecl))
3240 {
3241 /* If newdecl is not a specialization, then it is not a
3242 template-related function at all. And that means that we
3243 shoud have exited above, returning 0. */
3244 my_friendly_assert (DECL_TEMPLATE_SPECIALIZATION (newdecl),
3245 0);
3246
3247 if (TREE_USED (olddecl))
3248 /* From [temp.expl.spec]:
3249
3250 If a template, a member template or the member of a class
3251 template is explicitly specialized then that
3252 specialization shall be declared before the first use of
3253 that specialization that would cause an implicit
3254 instantiation to take place, in every translation unit in
3255 which such a use occurs. */
3256 cp_error ("explicit specialization of %D after first use",
3257 olddecl);
3258
3259 SET_DECL_TEMPLATE_SPECIALIZATION (olddecl);
3260 }
3261 DECL_THIS_INLINE (newdecl) |= DECL_THIS_INLINE (olddecl);
3262
3263 /* If either decl says `inline', this fn is inline, unless its
3264 definition was passed already. */
3265 if (DECL_INLINE (newdecl) && DECL_INITIAL (olddecl) == NULL_TREE)
3266 DECL_INLINE (olddecl) = 1;
3267 DECL_INLINE (newdecl) = DECL_INLINE (olddecl);
3268
3269 if (! types_match)
3270 {
3271 DECL_LANGUAGE (olddecl) = DECL_LANGUAGE (newdecl);
3272 DECL_ASSEMBLER_NAME (olddecl) = DECL_ASSEMBLER_NAME (newdecl);
3273 DECL_RTL (olddecl) = DECL_RTL (newdecl);
3274 }
3275 if (! types_match || new_defines_function)
3276 {
3277 /* These need to be copied so that the names are available. */
3278 DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
3279 DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
3280 }
3281 if (new_defines_function)
3282 /* If defining a function declared with other language
3283 linkage, use the previously declared language linkage. */
3284 DECL_LANGUAGE (newdecl) = DECL_LANGUAGE (olddecl);
3285 else
3286 {
3287 /* If redeclaring a builtin function, and not a definition,
3288 it stays built in. */
3289 if (DECL_BUILT_IN (olddecl))
3290 {
3291 DECL_BUILT_IN (newdecl) = 1;
3292 DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
3293 /* If we're keeping the built-in definition, keep the rtl,
3294 regardless of declaration matches. */
3295 DECL_RTL (newdecl) = DECL_RTL (olddecl);
3296 }
3297 else
3298 DECL_FRAME_SIZE (newdecl) = DECL_FRAME_SIZE (olddecl);
3299
3300 DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
3301 if ((DECL_SAVED_INSNS (newdecl) = DECL_SAVED_INSNS (olddecl)))
3302 /* Previously saved insns go together with
3303 the function's previous definition. */
3304 DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
3305 /* Don't clear out the arguments if we're redefining a function. */
3306 if (DECL_ARGUMENTS (olddecl))
3307 DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
3308 }
3309 if (DECL_LANG_SPECIFIC (olddecl))
3310 DECL_MAIN_VARIANT (newdecl) = DECL_MAIN_VARIANT (olddecl);
3311 }
3312
3313 if (TREE_CODE (newdecl) == NAMESPACE_DECL)
3314 {
3315 NAMESPACE_LEVEL (newdecl) = NAMESPACE_LEVEL (olddecl);
3316 }
3317
3318 /* Now preserve various other info from the definition. */
3319 TREE_ADDRESSABLE (newdecl) = TREE_ADDRESSABLE (olddecl);
3320 TREE_ASM_WRITTEN (newdecl) = TREE_ASM_WRITTEN (olddecl);
3321 DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
3322 DECL_ASSEMBLER_NAME (newdecl) = DECL_ASSEMBLER_NAME (olddecl);
3323
3324 if (TREE_CODE (newdecl) == FUNCTION_DECL)
3325 {
3326 int function_size;
3327 struct lang_decl *ol = DECL_LANG_SPECIFIC (olddecl);
3328 struct lang_decl *nl = DECL_LANG_SPECIFIC (newdecl);
3329
3330 function_size = sizeof (struct tree_decl);
3331
3332 bcopy ((char *) newdecl + sizeof (struct tree_common),
3333 (char *) olddecl + sizeof (struct tree_common),
3334 function_size - sizeof (struct tree_common));
3335
3336 /* Can we safely free the storage used by newdecl? */
3337
3338 #define ROUND(x) ((x + obstack_alignment_mask (&permanent_obstack)) \
3339 & ~ obstack_alignment_mask (&permanent_obstack))
3340
3341 if (DECL_TEMPLATE_INSTANTIATION (newdecl))
3342 {
3343 /* If newdecl is a template instantiation, it is possible that
3344 the following sequence of events has occurred:
3345
3346 o A friend function was declared in a class template. The
3347 class template was instantiated.
3348
3349 o The instantiation of the friend declaration was
3350 recorded on the instantiation list, and is newdecl.
3351
3352 o Later, however, instantiate_class_template called pushdecl
3353 on the newdecl to perform name injection. But, pushdecl in
3354 turn called duplicate_decls when it discovered that another
3355 declaration of a global function with the same name already
3356 existed.
3357
3358 o Here, in duplicate_decls, we decided to clobber newdecl.
3359
3360 If we're going to do that, we'd better make sure that
3361 olddecl, and not newdecl, is on the list of
3362 instantiations so that if we try to do the instantiation
3363 again we won't get the clobbered declaration. */
3364
3365 tree tmpl = DECL_TI_TEMPLATE (newdecl);
3366 tree decls = DECL_TEMPLATE_SPECIALIZATIONS (tmpl);
3367
3368 for (; decls; decls = TREE_CHAIN (decls))
3369 if (TREE_VALUE (decls) == newdecl)
3370 TREE_VALUE (decls) = olddecl;
3371 }
3372
3373 if (((char *)newdecl + ROUND (function_size) == (char *)nl
3374 && ((char *)newdecl + ROUND (function_size)
3375 + ROUND (sizeof (struct lang_decl))
3376 == obstack_next_free (&permanent_obstack)))
3377 || ((char *)newdecl + ROUND (function_size)
3378 == obstack_next_free (&permanent_obstack)))
3379 {
3380 DECL_MAIN_VARIANT (newdecl) = olddecl;
3381 DECL_LANG_SPECIFIC (olddecl) = ol;
3382 bcopy ((char *)nl, (char *)ol, sizeof (struct lang_decl));
3383
3384 obstack_free (&permanent_obstack, newdecl);
3385 }
3386 else if (LANG_DECL_PERMANENT (ol) && ol != nl)
3387 {
3388 if (DECL_MAIN_VARIANT (olddecl) == olddecl)
3389 {
3390 /* Save these lang_decls that would otherwise be lost. */
3391 extern tree free_lang_decl_chain;
3392 tree free_lang_decl = (tree) ol;
3393
3394 if (DECL_LANG_SPECIFIC (olddecl) == ol)
3395 abort ();
3396
3397 TREE_CHAIN (free_lang_decl) = free_lang_decl_chain;
3398 free_lang_decl_chain = free_lang_decl;
3399 }
3400 else
3401 {
3402 /* Storage leak. */;
3403 }
3404 }
3405 }
3406 else
3407 {
3408 bcopy ((char *) newdecl + sizeof (struct tree_common),
3409 (char *) olddecl + sizeof (struct tree_common),
3410 sizeof (struct tree_decl) - sizeof (struct tree_common)
3411 + tree_code_length [(int)TREE_CODE (newdecl)] * sizeof (char *));
3412 }
3413
3414 DECL_UID (olddecl) = olddecl_uid;
3415 if (olddecl_friend)
3416 DECL_FRIEND_P (olddecl) = 1;
3417
3418 /* NEWDECL contains the merged attribute lists.
3419 Update OLDDECL to be the same. */
3420 DECL_MACHINE_ATTRIBUTES (olddecl) = DECL_MACHINE_ATTRIBUTES (newdecl);
3421
3422 return 1;
3423 }
3424
3425 /* Record a decl-node X as belonging to the current lexical scope.
3426 Check for errors (such as an incompatible declaration for the same
3427 name already seen in the same scope).
3428
3429 Returns either X or an old decl for the same name.
3430 If an old decl is returned, it may have been smashed
3431 to agree with what X says. */
3432
3433 tree
3434 pushdecl (x)
3435 tree x;
3436 {
3437 register tree t;
3438 register tree name = DECL_ASSEMBLER_NAME (x);
3439 int need_new_binding = 1;
3440
3441 if (current_function_decl && x != current_function_decl
3442 /* A local declaration for a function doesn't constitute nesting. */
3443 && (TREE_CODE (x) != FUNCTION_DECL || DECL_INITIAL (x))
3444 /* Don't change DECL_CONTEXT of virtual methods. */
3445 && (TREE_CODE (x) != FUNCTION_DECL || !DECL_VIRTUAL_P (x))
3446 && !DECL_CONTEXT (x))
3447 DECL_CONTEXT (x) = current_function_decl;
3448 if (!DECL_CONTEXT (x))
3449 DECL_CONTEXT (x) = FROB_CONTEXT (current_namespace);
3450
3451 /* Type are looked up using the DECL_NAME, as that is what the rest of the
3452 compiler wants to use. */
3453 if (TREE_CODE (x) == TYPE_DECL || TREE_CODE (x) == VAR_DECL
3454 || TREE_CODE (x) == NAMESPACE_DECL || TREE_CODE (x) == TEMPLATE_TYPE_PARM
3455 || TREE_CODE (x) == TEMPLATE_TEMPLATE_PARM)
3456 name = DECL_NAME (x);
3457
3458 if (name)
3459 {
3460 #if 0
3461 /* Not needed...see below. */
3462 char *file;
3463 int line;
3464 #endif
3465 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
3466 name = TREE_OPERAND (name, 0);
3467
3468 /* Namespace-scoped variables are not found in the current level. */
3469 if (TREE_CODE (x) == VAR_DECL && DECL_NAMESPACE_SCOPE_P (x))
3470 t = namespace_binding (name, DECL_CONTEXT (x));
3471 else
3472 t = lookup_name_current_level (name);
3473 if (t == error_mark_node)
3474 {
3475 /* error_mark_node is 0 for a while during initialization! */
3476 t = NULL_TREE;
3477 cp_error_at ("`%#D' used prior to declaration", x);
3478 }
3479
3480 else if (t != NULL_TREE)
3481 {
3482 #if 0
3483 /* This is turned off until I have time to do it right (bpk). */
3484 /* With the code below that uses it... */
3485 file = DECL_SOURCE_FILE (t);
3486 line = DECL_SOURCE_LINE (t);
3487 #endif
3488 if (TREE_CODE (t) == PARM_DECL)
3489 {
3490 if (DECL_CONTEXT (t) == NULL_TREE)
3491 fatal ("parse errors have confused me too much");
3492
3493 /* Check for duplicate params. */
3494 if (duplicate_decls (x, t))
3495 return t;
3496 }
3497 else if (((TREE_CODE (x) == FUNCTION_DECL && DECL_LANGUAGE (x) == lang_c)
3498 || DECL_FUNCTION_TEMPLATE_P (x))
3499 && is_overloaded_fn (t))
3500 /* Don't do anything just yet. */;
3501 else if (t == wchar_decl_node)
3502 {
3503 if (pedantic && ! DECL_IN_SYSTEM_HEADER (x))
3504 cp_pedwarn ("redeclaration of wchar_t as `%T'", TREE_TYPE (x));
3505
3506 /* Throw away the redeclaration. */
3507 return t;
3508 }
3509 else if (TREE_CODE (t) != TREE_CODE (x))
3510 {
3511 if (duplicate_decls (x, t))
3512 return t;
3513 }
3514 else if (duplicate_decls (x, t))
3515 {
3516 #if 0
3517 /* This is turned off until I have time to do it right (bpk). */
3518
3519 /* Also warn if they did a prototype with `static' on it, but
3520 then later left the `static' off. */
3521 if (! TREE_PUBLIC (name) && TREE_PUBLIC (x))
3522 {
3523 if (DECL_LANG_SPECIFIC (t) && DECL_FRIEND_P (t))
3524 return t;
3525
3526 if (extra_warnings)
3527 {
3528 cp_warning ("`static' missing from declaration of `%D'",
3529 t);
3530 warning_with_file_and_line (file, line,
3531 "previous declaration of `%s'",
3532 decl_as_string (t, 0));
3533 }
3534
3535 /* Now fix things so it'll do what they expect. */
3536 if (current_function_decl)
3537 TREE_PUBLIC (current_function_decl) = 0;
3538 }
3539 /* Due to interference in memory reclamation (X may be
3540 obstack-deallocated at this point), we must guard against
3541 one really special case. [jason: This should be handled
3542 by start_function] */
3543 if (current_function_decl == x)
3544 current_function_decl = t;
3545 #endif
3546 if (TREE_CODE (t) == TYPE_DECL)
3547 SET_IDENTIFIER_TYPE_VALUE (name, TREE_TYPE (t));
3548 else if (TREE_CODE (t) == FUNCTION_DECL)
3549 check_default_args (t);
3550
3551 return t;
3552 }
3553 else if (DECL_MAIN_P (x))
3554 {
3555 /* A redeclaration of main, but not a duplicate of the
3556 previous one.
3557
3558 [basic.start.main]
3559
3560 This function shall not be overloaded. */
3561 cp_error_at ("invalid redeclaration of `%D'", t);
3562 cp_error ("as `%D'", x);
3563 /* We don't try to push this declaration since that
3564 causes a crash. */
3565 return x;
3566 }
3567 }
3568
3569 check_template_shadow (x);
3570
3571 if (TREE_CODE (x) == FUNCTION_DECL && ! DECL_FUNCTION_MEMBER_P (x))
3572 {
3573 t = push_overloaded_decl (x, 1);
3574 if (t != x || DECL_LANGUAGE (x) == lang_c)
3575 return t;
3576 if (!namespace_bindings_p ())
3577 /* We do not need to create a binding for this name;
3578 push_overloaded_decl will have already done so if
3579 necessary. */
3580 need_new_binding = 0;
3581 }
3582 else if (DECL_FUNCTION_TEMPLATE_P (x) && DECL_NAMESPACE_SCOPE_P (x))
3583 return push_overloaded_decl (x, 0);
3584
3585 /* If declaring a type as a typedef, copy the type (unless we're
3586 at line 0), and install this TYPE_DECL as the new type's typedef
3587 name. See the extensive comment in ../c-decl.c (pushdecl). */
3588 if (TREE_CODE (x) == TYPE_DECL)
3589 {
3590 tree type = TREE_TYPE (x);
3591 if (DECL_SOURCE_LINE (x) == 0)
3592 {
3593 if (TYPE_NAME (type) == 0)
3594 TYPE_NAME (type) = x;
3595 }
3596 else if (type != error_mark_node && TYPE_NAME (type) != x
3597 /* We don't want to copy the type when all we're
3598 doing is making a TYPE_DECL for the purposes of
3599 inlining. */
3600 && (!TYPE_NAME (type)
3601 || TYPE_NAME (type) != DECL_ABSTRACT_ORIGIN (x)))
3602 {
3603 push_obstacks (TYPE_OBSTACK (type), TYPE_OBSTACK (type));
3604
3605 DECL_ORIGINAL_TYPE (x) = type;
3606 type = build_type_copy (type);
3607 TYPE_STUB_DECL (type) = TYPE_STUB_DECL (DECL_ORIGINAL_TYPE (x));
3608 TYPE_NAME (type) = x;
3609 TREE_TYPE (x) = type;
3610
3611 pop_obstacks ();
3612 }
3613
3614 if (type != error_mark_node
3615 && TYPE_NAME (type)
3616 && TYPE_IDENTIFIER (type))
3617 set_identifier_type_value_with_scope (DECL_NAME (x), type,
3618 current_binding_level);
3619
3620 if (TREE_CODE (x) == TYPE_DECL
3621 && DECL_ARTIFICIAL (x)
3622 && t != NULL_TREE)
3623 /* We don't want an artificial TYPE_DECL is we already
3624 have another DECL with the same name. */
3625 need_new_binding = 0;
3626 }
3627
3628 /* Multiple external decls of the same identifier ought to match.
3629
3630 We get warnings about inline functions where they are defined.
3631 We get warnings about other functions from push_overloaded_decl.
3632
3633 Avoid duplicate warnings where they are used. */
3634 if (TREE_PUBLIC (x) && TREE_CODE (x) != FUNCTION_DECL)
3635 {
3636 tree decl;
3637
3638 if (IDENTIFIER_NAMESPACE_VALUE (name) != NULL_TREE
3639 && (DECL_EXTERNAL (IDENTIFIER_NAMESPACE_VALUE (name))
3640 || TREE_PUBLIC (IDENTIFIER_NAMESPACE_VALUE (name))))
3641 decl = IDENTIFIER_NAMESPACE_VALUE (name);
3642 else
3643 decl = NULL_TREE;
3644
3645 if (decl
3646 /* If different sort of thing, we already gave an error. */
3647 && TREE_CODE (decl) == TREE_CODE (x)
3648 && !same_type_p (TREE_TYPE (x), TREE_TYPE (decl)))
3649 {
3650 cp_pedwarn ("type mismatch with previous external decl", x);
3651 cp_pedwarn_at ("previous external decl of `%#D'", decl);
3652 }
3653 }
3654
3655 /* This name is new in its binding level.
3656 Install the new declaration and return it. */
3657 if (namespace_bindings_p ())
3658 {
3659 /* Install a global value. */
3660
3661 /* If the first global decl has external linkage,
3662 warn if we later see static one. */
3663 if (IDENTIFIER_GLOBAL_VALUE (name) == NULL_TREE && TREE_PUBLIC (x))
3664 TREE_PUBLIC (name) = 1;
3665
3666 if (need_new_binding)
3667 {
3668 if (TREE_CODE (x) == FUNCTION_DECL)
3669 my_friendly_assert
3670 ((IDENTIFIER_GLOBAL_VALUE (name) == NULL_TREE)
3671 || (IDENTIFIER_GLOBAL_VALUE (name) == x), 378);
3672 SET_IDENTIFIER_NAMESPACE_VALUE (name, x);
3673 }
3674
3675 /* Don't forget if the function was used via an implicit decl. */
3676 if (IDENTIFIER_IMPLICIT_DECL (name)
3677 && TREE_USED (IDENTIFIER_IMPLICIT_DECL (name)))
3678 TREE_USED (x) = 1;
3679
3680 /* Don't forget if its address was taken in that way. */
3681 if (IDENTIFIER_IMPLICIT_DECL (name)
3682 && TREE_ADDRESSABLE (IDENTIFIER_IMPLICIT_DECL (name)))
3683 TREE_ADDRESSABLE (x) = 1;
3684
3685 /* Warn about mismatches against previous implicit decl. */
3686 if (IDENTIFIER_IMPLICIT_DECL (name) != NULL_TREE
3687 /* If this real decl matches the implicit, don't complain. */
3688 && ! (TREE_CODE (x) == FUNCTION_DECL
3689 && TREE_TYPE (TREE_TYPE (x)) == integer_type_node))
3690 cp_warning
3691 ("`%D' was previously implicitly declared to return `int'", x);
3692
3693 /* If new decl is `static' and an `extern' was seen previously,
3694 warn about it. */
3695 if (x != NULL_TREE && t != NULL_TREE && decls_match (x, t))
3696 warn_extern_redeclared_static (x, t);
3697 }
3698 else
3699 {
3700 /* Here to install a non-global value. */
3701 tree oldlocal = IDENTIFIER_VALUE (name);
3702 tree oldglobal = IDENTIFIER_NAMESPACE_VALUE (name);
3703
3704 if (need_new_binding)
3705 {
3706 push_local_binding (name, x);
3707 /* Because push_local_binding will hook X on to the
3708 current_binding_level's name list, we don't want to
3709 do that again below. */
3710 need_new_binding = 0;
3711 }
3712
3713 /* If this is a TYPE_DECL, push it into the type value slot. */
3714 if (TREE_CODE (x) == TYPE_DECL)
3715 set_identifier_type_value_with_scope (name, TREE_TYPE (x),
3716 current_binding_level);
3717
3718 /* Clear out any TYPE_DECL shadowed by a namespace so that
3719 we won't think this is a type. The C struct hack doesn't
3720 go through namespaces. */
3721 if (TREE_CODE (x) == NAMESPACE_DECL)
3722 set_identifier_type_value_with_scope (name, NULL_TREE,
3723 current_binding_level);
3724
3725 /* If this is an extern function declaration, see if we
3726 have a global definition or declaration for the function. */
3727 if (oldlocal == NULL_TREE
3728 && DECL_EXTERNAL (x)
3729 && oldglobal != NULL_TREE
3730 && TREE_CODE (x) == FUNCTION_DECL
3731 && TREE_CODE (oldglobal) == FUNCTION_DECL)
3732 {
3733 /* We have one. Their types must agree. */
3734 if (decls_match (x, oldglobal))
3735 /* OK */;
3736 else
3737 {
3738 cp_warning ("extern declaration of `%#D' doesn't match", x);
3739 cp_warning_at ("global declaration `%#D'", oldglobal);
3740 }
3741 }
3742 /* If we have a local external declaration,
3743 and no file-scope declaration has yet been seen,
3744 then if we later have a file-scope decl it must not be static. */
3745 if (oldlocal == NULL_TREE
3746 && oldglobal == NULL_TREE
3747 && DECL_EXTERNAL (x)
3748 && TREE_PUBLIC (x))
3749 TREE_PUBLIC (name) = 1;
3750
3751 if (DECL_FROM_INLINE (x))
3752 /* Inline decls shadow nothing. */;
3753
3754 /* Warn if shadowing an argument at the top level of the body. */
3755 else if (oldlocal != NULL_TREE && !DECL_EXTERNAL (x)
3756 && TREE_CODE (oldlocal) == PARM_DECL
3757 && TREE_CODE (x) != PARM_DECL)
3758 {
3759 /* Go to where the parms should be and see if we
3760 find them there. */
3761 struct binding_level *b = current_binding_level->level_chain;
3762
3763 if (cleanup_label)
3764 b = b->level_chain;
3765
3766 /* ARM $8.3 */
3767 if (b->parm_flag == 1)
3768 cp_error ("declaration of `%#D' shadows a parameter", name);
3769 }
3770 else if (warn_shadow && oldlocal != NULL_TREE
3771 && current_binding_level->is_for_scope
3772 && !DECL_DEAD_FOR_LOCAL (oldlocal))
3773 {
3774 warning ("variable `%s' shadows local",
3775 IDENTIFIER_POINTER (name));
3776 cp_warning_at (" this is the shadowed declaration", oldlocal);
3777 }
3778 /* Maybe warn if shadowing something else. */
3779 else if (warn_shadow && !DECL_EXTERNAL (x)
3780 /* No shadow warnings for internally generated vars. */
3781 && ! DECL_ARTIFICIAL (x)
3782 /* No shadow warnings for vars made for inlining. */
3783 && ! DECL_FROM_INLINE (x))
3784 {
3785 char *warnstring = NULL;
3786
3787 if (oldlocal != NULL_TREE && TREE_CODE (oldlocal) == PARM_DECL)
3788 warnstring = "declaration of `%s' shadows a parameter";
3789 else if (IDENTIFIER_CLASS_VALUE (name) != NULL_TREE
3790 && current_class_ptr
3791 && !TREE_STATIC (name))
3792 warnstring = "declaration of `%s' shadows a member of `this'";
3793 else if (oldlocal != NULL_TREE)
3794 warnstring = "declaration of `%s' shadows previous local";
3795 else if (oldglobal != NULL_TREE)
3796 /* XXX shadow warnings in outer-more namespaces */
3797 warnstring = "declaration of `%s' shadows global declaration";
3798
3799 if (warnstring)
3800 warning (warnstring, IDENTIFIER_POINTER (name));
3801 }
3802 }
3803
3804 if (TREE_CODE (x) == FUNCTION_DECL)
3805 check_default_args (x);
3806
3807 /* Keep count of variables in this level with incomplete type. */
3808 if (TREE_CODE (x) == VAR_DECL
3809 && TREE_TYPE (x) != error_mark_node
3810 && ((TYPE_SIZE (TREE_TYPE (x)) == NULL_TREE
3811 && PROMOTES_TO_AGGR_TYPE (TREE_TYPE (x), ARRAY_TYPE))
3812 /* RTTI TD entries are created while defining the type_info. */
3813 || (TYPE_LANG_SPECIFIC (TREE_TYPE (x))
3814 && TYPE_BEING_DEFINED (TREE_TYPE (x)))))
3815 current_binding_level->incomplete
3816 = tree_cons (NULL_TREE, x, current_binding_level->incomplete);
3817 }
3818
3819 if (need_new_binding)
3820 {
3821 /* Put decls on list in reverse order.
3822 We will reverse them later if necessary. */
3823 TREE_CHAIN (x) = current_binding_level->names;
3824 current_binding_level->names = x;
3825 if (! (current_binding_level != global_binding_level
3826 || TREE_PERMANENT (x)))
3827 my_friendly_abort (124);
3828 }
3829
3830 return x;
3831 }
3832
3833 /* Same as pushdecl, but define X in binding-level LEVEL. We rely on the
3834 caller to set DECL_CONTEXT properly. */
3835
3836 static tree
3837 pushdecl_with_scope (x, level)
3838 tree x;
3839 struct binding_level *level;
3840 {
3841 register struct binding_level *b;
3842 tree function_decl = current_function_decl;
3843
3844 current_function_decl = NULL_TREE;
3845 if (level->parm_flag == 2)
3846 {
3847 b = class_binding_level;
3848 class_binding_level = level;
3849 pushdecl_class_level (x);
3850 class_binding_level = b;
3851 }
3852 else
3853 {
3854 b = current_binding_level;
3855 current_binding_level = level;
3856 x = pushdecl (x);
3857 current_binding_level = b;
3858 }
3859 current_function_decl = function_decl;
3860 return x;
3861 }
3862
3863 /* Like pushdecl, only it places X in the current namespace,
3864 if appropriate. */
3865
3866 tree
3867 pushdecl_namespace_level (x)
3868 tree x;
3869 {
3870 register struct binding_level *b = inner_binding_level;
3871 register tree t;
3872
3873 t = pushdecl_with_scope (x, NAMESPACE_LEVEL (current_namespace));
3874
3875 /* Now, the type_shadowed stack may screw us. Munge it so it does
3876 what we want. */
3877 if (TREE_CODE (x) == TYPE_DECL)
3878 {
3879 tree name = DECL_NAME (x);
3880 tree newval;
3881 tree *ptr = (tree *)0;
3882 for (; b != global_binding_level; b = b->level_chain)
3883 {
3884 tree shadowed = b->type_shadowed;
3885 for (; shadowed; shadowed = TREE_CHAIN (shadowed))
3886 if (TREE_PURPOSE (shadowed) == name)
3887 {
3888 ptr = &TREE_VALUE (shadowed);
3889 /* Can't break out of the loop here because sometimes
3890 a binding level will have duplicate bindings for
3891 PT names. It's gross, but I haven't time to fix it. */
3892 }
3893 }
3894 newval = TREE_TYPE (x);
3895 if (ptr == (tree *)0)
3896 {
3897 /* @@ This shouldn't be needed. My test case "zstring.cc" trips
3898 up here if this is changed to an assertion. --KR */
3899 SET_IDENTIFIER_TYPE_VALUE (name, newval);
3900 }
3901 else
3902 {
3903 *ptr = newval;
3904 }
3905 }
3906 return t;
3907 }
3908
3909 /* Like pushdecl, only it places X in GLOBAL_BINDING_LEVEL,
3910 if appropriate. */
3911
3912 tree
3913 pushdecl_top_level (x)
3914 tree x;
3915 {
3916 tree cur_namespace = current_namespace;
3917 current_namespace = global_namespace;
3918 x = pushdecl_namespace_level (x);
3919 current_namespace = cur_namespace;
3920 return x;
3921 }
3922
3923 /* Make the declaration of X appear in CLASS scope. */
3924
3925 void
3926 pushdecl_class_level (x)
3927 tree x;
3928 {
3929 /* Don't use DECL_ASSEMBLER_NAME here! Everything that looks in class
3930 scope looks for the pre-mangled name. */
3931 register tree name = DECL_NAME (x);
3932
3933 if (name)
3934 {
3935 if (TYPE_BEING_DEFINED (current_class_type))
3936 {
3937 /* A name N used in a class S shall refer to the same declaration
3938 in its context and when re-evaluated in the completed scope of S.
3939 Types, enums, and static vars are checked here; other
3940 members are checked in finish_struct. */
3941 tree icv = IDENTIFIER_CLASS_VALUE (name);
3942
3943 /* This should match check_member_decl_is_same_in_complete_scope. */
3944 if (icv && icv != x
3945 && flag_optional_diags
3946 /* Don't complain about inherited names. */
3947 && id_in_current_class (name)
3948 /* Or shadowed tags. */
3949 && !(DECL_DECLARES_TYPE_P (icv)
3950 && DECL_CONTEXT (icv) == current_class_type))
3951 {
3952 cp_pedwarn ("declaration of identifier `%D' as `%#D'", name, x);
3953 cp_pedwarn_at ("conflicts with previous use in class as `%#D'",
3954 icv);
3955 }
3956
3957 check_template_shadow (x);
3958 }
3959
3960 push_class_level_binding (name, x);
3961 if (TREE_CODE (x) == TYPE_DECL)
3962 set_identifier_type_value (name, TREE_TYPE (x));
3963 }
3964 }
3965
3966 #if 0
3967 /* This function is used to push the mangled decls for nested types into
3968 the appropriate scope. Previously pushdecl_top_level was used, but that
3969 is incorrect for members of local classes. */
3970
3971 void
3972 pushdecl_nonclass_level (x)
3973 tree x;
3974 {
3975 struct binding_level *b = current_binding_level;
3976
3977 my_friendly_assert (b->parm_flag != 2, 180);
3978
3979 #if 0
3980 /* Get out of template binding levels */
3981 while (b->pseudo_global)
3982 b = b->level_chain;
3983 #endif
3984
3985 pushdecl_with_scope (x, b);
3986 }
3987 #endif
3988
3989 /* Make the declaration(s) of X appear in CLASS scope
3990 under the name NAME. */
3991
3992 void
3993 push_class_level_binding (name, x)
3994 tree name;
3995 tree x;
3996 {
3997 /* The class_binding_level will be NULL if x is a template
3998 parameter name in a member template. */
3999 if (!class_binding_level)
4000 return;
4001
4002 if (TREE_CODE (x) == TYPE_DECL && DECL_ARTIFICIAL (x)
4003 && purpose_member (name, class_binding_level->class_shadowed))
4004 return;
4005
4006 /* If this declaration shadows a declaration from an enclosing
4007 class, then we will need to restore IDENTIFIER_CLASS_VALUE when
4008 we leave this class. Record the shadowed declaration here. */
4009 maybe_push_cache_obstack ();
4010 class_binding_level->class_shadowed
4011 = tree_cons (name, IDENTIFIER_CLASS_VALUE (name),
4012 class_binding_level->class_shadowed);
4013 pop_obstacks ();
4014
4015 /* Put the binding on the stack of bindings for the identifier, and
4016 update IDENTIFIER_CLASS_VALUE. */
4017 push_class_binding (name, x);
4018 IDENTIFIER_CLASS_VALUE (name) = x;
4019
4020 obstack_ptr_grow (&decl_obstack, x);
4021 }
4022
4023 /* Insert another USING_DECL into the current binding level,
4024 returning this declaration. If this is a redeclaration,
4025 do nothing and return NULL_TREE. */
4026
4027 tree
4028 push_using_decl (scope, name)
4029 tree scope;
4030 tree name;
4031 {
4032 tree decl;
4033
4034 my_friendly_assert (TREE_CODE (scope) == NAMESPACE_DECL, 383);
4035 my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 384);
4036 for (decl = current_binding_level->usings; decl; decl = TREE_CHAIN (decl))
4037 if (DECL_INITIAL (decl) == scope && DECL_NAME (decl) == name)
4038 break;
4039 if (decl)
4040 return NULL_TREE;
4041 decl = build_lang_decl (USING_DECL, name, void_type_node);
4042 DECL_INITIAL (decl) = scope;
4043 TREE_CHAIN (decl) = current_binding_level->usings;
4044 current_binding_level->usings = decl;
4045 return decl;
4046 }
4047
4048 /* Add namespace to using_directives. Return NULL_TREE if nothing was
4049 changed (i.e. there was already a directive), or the fresh
4050 TREE_LIST otherwise. */
4051
4052 tree
4053 push_using_directive (used)
4054 tree used;
4055 {
4056 tree ud = current_binding_level->using_directives;
4057 tree iter, ancestor;
4058
4059 /* Check if we already have this. */
4060 if (purpose_member (used, ud) != NULL_TREE)
4061 return NULL_TREE;
4062
4063 /* Recursively add all namespaces used. */
4064 for (iter = DECL_NAMESPACE_USING (used); iter; iter = TREE_CHAIN (iter))
4065 push_using_directive (TREE_PURPOSE (iter));
4066
4067 ancestor = namespace_ancestor (current_decl_namespace (), used);
4068 ud = current_binding_level->using_directives;
4069 ud = perm_tree_cons (used, ancestor, ud);
4070 current_binding_level->using_directives = ud;
4071 return ud;
4072 }
4073
4074 /* DECL is a FUNCTION_DECL for a non-member function, which may have
4075 other definitions already in place. We get around this by making
4076 the value of the identifier point to a list of all the things that
4077 want to be referenced by that name. It is then up to the users of
4078 that name to decide what to do with that list.
4079
4080 DECL may also be a TEMPLATE_DECL, with a FUNCTION_DECL in its DECL_RESULT
4081 slot. It is dealt with the same way.
4082
4083 The value returned may be a previous declaration if we guessed wrong
4084 about what language DECL should belong to (C or C++). Otherwise,
4085 it's always DECL (and never something that's not a _DECL). */
4086
4087 static tree
4088 push_overloaded_decl (decl, forgettable)
4089 tree decl;
4090 int forgettable;
4091 {
4092 tree name = DECL_NAME (decl);
4093 tree old;
4094 tree new_binding;
4095 int doing_global = (namespace_bindings_p () || ! forgettable);
4096
4097 if (doing_global)
4098 {
4099 old = namespace_binding (name, DECL_CONTEXT (decl));
4100 if (old && TREE_CODE (old) == FUNCTION_DECL
4101 && DECL_ARTIFICIAL (old)
4102 && (DECL_BUILT_IN (old) || DECL_BUILT_IN_NONANSI (old)))
4103 {
4104 if (duplicate_decls (decl, old))
4105 return old;
4106 old = NULL_TREE;
4107 }
4108 }
4109 else
4110 old = lookup_name_current_level (name);
4111
4112 if (old)
4113 {
4114 if (TREE_CODE (old) == TYPE_DECL && DECL_ARTIFICIAL (old))
4115 {
4116 tree t = TREE_TYPE (old);
4117 if (IS_AGGR_TYPE (t) && warn_shadow
4118 && (! DECL_IN_SYSTEM_HEADER (decl)
4119 || ! DECL_IN_SYSTEM_HEADER (old)))
4120 cp_warning ("`%#D' hides constructor for `%#T'", decl, t);
4121 old = NULL_TREE;
4122 }
4123 else if (is_overloaded_fn (old))
4124 {
4125 tree tmp;
4126
4127 for (tmp = old; tmp; tmp = OVL_NEXT (tmp))
4128 if (decl == OVL_CURRENT (tmp)
4129 || duplicate_decls (decl, OVL_CURRENT (tmp)))
4130 return OVL_CURRENT (tmp);
4131 }
4132 else
4133 {
4134 cp_error_at ("previous non-function declaration `%#D'", old);
4135 cp_error ("conflicts with function declaration `%#D'", decl);
4136 return decl;
4137 }
4138 }
4139
4140 if (old || TREE_CODE (decl) == TEMPLATE_DECL)
4141 {
4142 if (old && TREE_CODE (old) != OVERLOAD)
4143 new_binding = ovl_cons (decl, ovl_cons (old, NULL_TREE));
4144 else
4145 new_binding = ovl_cons (decl, old);
4146 }
4147 else
4148 /* NAME is not ambiguous. */
4149 new_binding = decl;
4150
4151 if (doing_global)
4152 set_namespace_binding (name, current_namespace, new_binding);
4153 else
4154 {
4155 /* We only create an OVERLOAD if there was a previous binding at
4156 this level. In that case, we need to remove the old binding
4157 and replace it with the new binding. We must also run
4158 through the NAMES on the current binding level to update the
4159 chain. */
4160 if (TREE_CODE (new_binding) == OVERLOAD)
4161 {
4162 tree *d;
4163
4164 for (d = &BINDING_LEVEL (IDENTIFIER_BINDING (name))->names;
4165 *d;
4166 d = &TREE_CHAIN (*d))
4167 if (*d == old
4168 || (TREE_CODE (*d) == TREE_LIST
4169 && TREE_VALUE (*d) == old))
4170 {
4171 *d = TREE_CHAIN (*d);
4172 break;
4173 }
4174
4175 pop_binding (name);
4176 }
4177
4178 /* Install the new binding. */
4179 push_local_binding (name, new_binding);
4180 }
4181
4182 return decl;
4183 }
4184 \f
4185 /* Generate an implicit declaration for identifier FUNCTIONID
4186 as a function of type int (). Print a warning if appropriate. */
4187
4188 tree
4189 implicitly_declare (functionid)
4190 tree functionid;
4191 {
4192 register tree decl;
4193 int temp = allocation_temporary_p ();
4194
4195 push_obstacks_nochange ();
4196
4197 /* Save the decl permanently so we can warn if definition follows.
4198 In ANSI C, warn_implicit is usually false, so the saves little space.
4199 But in C++, it's usually true, hence the extra code. */
4200 if (temp && (! warn_implicit || toplevel_bindings_p ()))
4201 end_temporary_allocation ();
4202
4203 /* We used to reuse an old implicit decl here,
4204 but this loses with inline functions because it can clobber
4205 the saved decl chains. */
4206 decl = build_lang_decl (FUNCTION_DECL, functionid, default_function_type);
4207
4208 DECL_EXTERNAL (decl) = 1;
4209 TREE_PUBLIC (decl) = 1;
4210
4211 /* ANSI standard says implicit declarations are in the innermost block.
4212 So we record the decl in the standard fashion. */
4213 pushdecl (decl);
4214 rest_of_decl_compilation (decl, NULL_PTR, 0, 0);
4215
4216 if (warn_implicit
4217 /* Only one warning per identifier. */
4218 && IDENTIFIER_IMPLICIT_DECL (functionid) == NULL_TREE)
4219 {
4220 cp_pedwarn ("implicit declaration of function `%#D'", decl);
4221 }
4222
4223 SET_IDENTIFIER_IMPLICIT_DECL (functionid, decl);
4224
4225 pop_obstacks ();
4226
4227 return decl;
4228 }
4229
4230 /* Return zero if the declaration NEWDECL is valid
4231 when the declaration OLDDECL (assumed to be for the same name)
4232 has already been seen.
4233 Otherwise return an error message format string with a %s
4234 where the identifier should go. */
4235
4236 static char *
4237 redeclaration_error_message (newdecl, olddecl)
4238 tree newdecl, olddecl;
4239 {
4240 if (TREE_CODE (newdecl) == TYPE_DECL)
4241 {
4242 /* Because C++ can put things into name space for free,
4243 constructs like "typedef struct foo { ... } foo"
4244 would look like an erroneous redeclaration. */
4245 if (same_type_p (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
4246 return 0;
4247 else
4248 return "redefinition of `%#D'";
4249 }
4250 else if (TREE_CODE (newdecl) == FUNCTION_DECL)
4251 {
4252 /* If this is a pure function, its olddecl will actually be
4253 the original initialization to `0' (which we force to call
4254 abort()). Don't complain about redefinition in this case. */
4255 if (DECL_LANG_SPECIFIC (olddecl) && DECL_ABSTRACT_VIRTUAL_P (olddecl))
4256 return 0;
4257
4258 /* If both functions come from different namespaces, this is not
4259 a redeclaration - this is a conflict with a used function. */
4260 if (DECL_NAMESPACE_SCOPE_P (olddecl)
4261 && DECL_CONTEXT (olddecl) != DECL_CONTEXT (newdecl))
4262 return "`%D' conflicts with used function";
4263
4264 /* We'll complain about linkage mismatches in
4265 warn_extern_redeclared_static. */
4266
4267 /* Defining the same name twice is no good. */
4268 if (DECL_INITIAL (olddecl) != NULL_TREE
4269 && DECL_INITIAL (newdecl) != NULL_TREE)
4270 {
4271 if (DECL_NAME (olddecl) == NULL_TREE)
4272 return "`%#D' not declared in class";
4273 else
4274 return "redefinition of `%#D'";
4275 }
4276 return 0;
4277 }
4278 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
4279 {
4280 if ((TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
4281 && DECL_INITIAL (DECL_TEMPLATE_RESULT (newdecl))
4282 && DECL_INITIAL (DECL_TEMPLATE_RESULT (olddecl)))
4283 || (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL
4284 && TYPE_SIZE (TREE_TYPE (newdecl))
4285 && TYPE_SIZE (TREE_TYPE (olddecl))))
4286 return "redefinition of `%#D'";
4287 return 0;
4288 }
4289 else if (toplevel_bindings_p ())
4290 {
4291 /* Objects declared at top level: */
4292 /* If at least one is a reference, it's ok. */
4293 if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl))
4294 return 0;
4295 /* Reject two definitions. */
4296 return "redefinition of `%#D'";
4297 }
4298 else
4299 {
4300 /* Objects declared with block scope: */
4301 /* Reject two definitions, and reject a definition
4302 together with an external reference. */
4303 if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl)))
4304 return "redeclaration of `%#D'";
4305 return 0;
4306 }
4307 }
4308 \f
4309 /* Get the LABEL_DECL corresponding to identifier ID as a label.
4310 Create one if none exists so far for the current function.
4311 This function is called for both label definitions and label references. */
4312
4313 tree
4314 lookup_label (id)
4315 tree id;
4316 {
4317 register tree decl = IDENTIFIER_LABEL_VALUE (id);
4318
4319 if (current_function_decl == NULL_TREE)
4320 {
4321 error ("label `%s' referenced outside of any function",
4322 IDENTIFIER_POINTER (id));
4323 return NULL_TREE;
4324 }
4325
4326 if ((decl == NULL_TREE
4327 || DECL_SOURCE_LINE (decl) == 0)
4328 && (named_label_uses == NULL
4329 || named_label_uses->names_in_scope != current_binding_level->names
4330 || named_label_uses->label_decl != decl))
4331 {
4332 struct named_label_list *new_ent;
4333 new_ent
4334 = (struct named_label_list*)oballoc (sizeof (struct named_label_list));
4335 new_ent->label_decl = decl;
4336 new_ent->names_in_scope = current_binding_level->names;
4337 new_ent->binding_level = current_binding_level;
4338 new_ent->lineno_o_goto = lineno;
4339 new_ent->filename_o_goto = input_filename;
4340 new_ent->next = named_label_uses;
4341 named_label_uses = new_ent;
4342 }
4343
4344 /* Use a label already defined or ref'd with this name. */
4345 if (decl != NULL_TREE)
4346 {
4347 /* But not if it is inherited and wasn't declared to be inheritable. */
4348 if (DECL_CONTEXT (decl) != current_function_decl
4349 && ! C_DECLARED_LABEL_FLAG (decl))
4350 return shadow_label (id);
4351 return decl;
4352 }
4353
4354 decl = build_decl (LABEL_DECL, id, void_type_node);
4355
4356 /* Make sure every label has an rtx. */
4357 label_rtx (decl);
4358
4359 /* A label not explicitly declared must be local to where it's ref'd. */
4360 DECL_CONTEXT (decl) = current_function_decl;
4361
4362 DECL_MODE (decl) = VOIDmode;
4363
4364 /* Say where one reference is to the label,
4365 for the sake of the error if it is not defined. */
4366 DECL_SOURCE_LINE (decl) = lineno;
4367 DECL_SOURCE_FILE (decl) = input_filename;
4368
4369 SET_IDENTIFIER_LABEL_VALUE (id, decl);
4370
4371 named_labels = tree_cons (NULL_TREE, decl, named_labels);
4372 named_label_uses->label_decl = decl;
4373
4374 return decl;
4375 }
4376
4377 /* Make a label named NAME in the current function,
4378 shadowing silently any that may be inherited from containing functions
4379 or containing scopes.
4380
4381 Note that valid use, if the label being shadowed
4382 comes from another scope in the same function,
4383 requires calling declare_nonlocal_label right away. */
4384
4385 tree
4386 shadow_label (name)
4387 tree name;
4388 {
4389 register tree decl = IDENTIFIER_LABEL_VALUE (name);
4390
4391 if (decl != NULL_TREE)
4392 {
4393 shadowed_labels = tree_cons (NULL_TREE, decl, shadowed_labels);
4394 SET_IDENTIFIER_LABEL_VALUE (name, NULL_TREE);
4395 }
4396
4397 return lookup_label (name);
4398 }
4399
4400 /* Define a label, specifying the location in the source file.
4401 Return the LABEL_DECL node for the label, if the definition is valid.
4402 Otherwise return 0. */
4403
4404 tree
4405 define_label (filename, line, name)
4406 char *filename;
4407 int line;
4408 tree name;
4409 {
4410 tree decl;
4411
4412 if (minimal_parse_mode)
4413 {
4414 push_obstacks (&permanent_obstack, &permanent_obstack);
4415 decl = build_decl (LABEL_DECL, name, void_type_node);
4416 pop_obstacks ();
4417 DECL_SOURCE_LINE (decl) = line;
4418 DECL_SOURCE_FILE (decl) = filename;
4419 add_tree (decl);
4420 return decl;
4421 }
4422
4423 decl = lookup_label (name);
4424
4425 /* After labels, make any new cleanups go into their
4426 own new (temporary) binding contour. */
4427 current_binding_level->more_cleanups_ok = 0;
4428
4429 /* If label with this name is known from an outer context, shadow it. */
4430 if (decl != NULL_TREE && DECL_CONTEXT (decl) != current_function_decl)
4431 {
4432 shadowed_labels = tree_cons (NULL_TREE, decl, shadowed_labels);
4433 SET_IDENTIFIER_LABEL_VALUE (name, NULL_TREE);
4434 decl = lookup_label (name);
4435 }
4436
4437 if (name == get_identifier ("wchar_t"))
4438 cp_pedwarn ("label named wchar_t");
4439
4440 if (DECL_INITIAL (decl) != NULL_TREE)
4441 {
4442 cp_error ("duplicate label `%D'", decl);
4443 return 0;
4444 }
4445 else
4446 {
4447 struct named_label_list *uses, *prev;
4448 int identified = 0;
4449
4450 /* Mark label as having been defined. */
4451 DECL_INITIAL (decl) = error_mark_node;
4452 /* Say where in the source. */
4453 DECL_SOURCE_FILE (decl) = filename;
4454 DECL_SOURCE_LINE (decl) = line;
4455
4456 prev = NULL;
4457 uses = named_label_uses;
4458 while (uses != NULL)
4459 if (uses->label_decl == decl)
4460 {
4461 struct binding_level *b = current_binding_level;
4462 while (b)
4463 {
4464 tree new_decls = b->names;
4465 tree old_decls = (b == uses->binding_level)
4466 ? uses->names_in_scope : NULL_TREE;
4467 while (new_decls != old_decls)
4468 {
4469 if (TREE_CODE (new_decls) == VAR_DECL
4470 /* Don't complain about crossing initialization
4471 of internal entities. They can't be accessed,
4472 and they should be cleaned up
4473 by the time we get to the label. */
4474 && ! DECL_ARTIFICIAL (new_decls)
4475 && !(DECL_INITIAL (new_decls) == NULL_TREE
4476 && pod_type_p (TREE_TYPE (new_decls))))
4477 {
4478 if (! identified)
4479 {
4480 cp_error ("jump to label `%D'", decl);
4481 error_with_file_and_line (uses->filename_o_goto,
4482 uses->lineno_o_goto,
4483 " from here");
4484 identified = 1;
4485 }
4486 if (DECL_INITIAL (new_decls)
4487 || TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (new_decls)))
4488 cp_error_at (" crosses initialization of `%#D'",
4489 new_decls);
4490 else
4491 cp_error_at (" enters scope of non-POD `%#D'",
4492 new_decls);
4493 }
4494 new_decls = TREE_CHAIN (new_decls);
4495 }
4496 if (b == uses->binding_level)
4497 break;
4498 b = b->level_chain;
4499 }
4500
4501 if (prev != NULL)
4502 prev->next = uses->next;
4503 else
4504 named_label_uses = uses->next;
4505
4506 uses = uses->next;
4507 }
4508 else
4509 {
4510 prev = uses;
4511 uses = uses->next;
4512 }
4513 current_function_return_value = NULL_TREE;
4514 return decl;
4515 }
4516 }
4517
4518 struct cp_switch
4519 {
4520 struct binding_level *level;
4521 struct cp_switch *next;
4522 };
4523
4524 static struct cp_switch *switch_stack;
4525
4526 void
4527 push_switch ()
4528 {
4529 struct cp_switch *p
4530 = (struct cp_switch *) oballoc (sizeof (struct cp_switch));
4531 p->level = current_binding_level;
4532 p->next = switch_stack;
4533 switch_stack = p;
4534 }
4535
4536 void
4537 pop_switch ()
4538 {
4539 switch_stack = switch_stack->next;
4540 }
4541
4542 /* Same, but for CASE labels. If DECL is NULL_TREE, it's the default. */
4543 /* XXX Note decl is never actually used. (bpk) */
4544
4545 void
4546 define_case_label ()
4547 {
4548 tree cleanup = last_cleanup_this_contour ();
4549 struct binding_level *b = current_binding_level;
4550 int identified = 0;
4551
4552 if (cleanup)
4553 {
4554 static int explained = 0;
4555 cp_warning_at ("destructor needed for `%#D'", TREE_PURPOSE (cleanup));
4556 warning ("where case label appears here");
4557 if (!explained)
4558 {
4559 warning ("(enclose actions of previous case statements requiring");
4560 warning ("destructors in their own binding contours.)");
4561 explained = 1;
4562 }
4563 }
4564
4565 for (; b && b != switch_stack->level; b = b->level_chain)
4566 {
4567 tree new_decls = b->names;
4568 for (; new_decls; new_decls = TREE_CHAIN (new_decls))
4569 {
4570 if (TREE_CODE (new_decls) == VAR_DECL
4571 /* Don't complain about crossing initialization
4572 of internal entities. They can't be accessed,
4573 and they should be cleaned up
4574 by the time we get to the label. */
4575 && ! DECL_ARTIFICIAL (new_decls)
4576 && ((DECL_INITIAL (new_decls) != NULL_TREE
4577 && DECL_INITIAL (new_decls) != error_mark_node)
4578 || TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (new_decls))))
4579 {
4580 if (! identified)
4581 error ("jump to case label");
4582 identified = 1;
4583 cp_error_at (" crosses initialization of `%#D'",
4584 new_decls);
4585 }
4586 }
4587 }
4588
4589 /* After labels, make any new cleanups go into their
4590 own new (temporary) binding contour. */
4591
4592 current_binding_level->more_cleanups_ok = 0;
4593 current_function_return_value = NULL_TREE;
4594 }
4595 \f
4596 /* Return the list of declarations of the current level.
4597 Note that this list is in reverse order unless/until
4598 you nreverse it; and when you do nreverse it, you must
4599 store the result back using `storedecls' or you will lose. */
4600
4601 tree
4602 getdecls ()
4603 {
4604 return current_binding_level->names;
4605 }
4606
4607 /* Return the list of type-tags (for structs, etc) of the current level. */
4608
4609 tree
4610 gettags ()
4611 {
4612 return current_binding_level->tags;
4613 }
4614
4615 /* Store the list of declarations of the current level.
4616 This is done for the parameter declarations of a function being defined,
4617 after they are modified in the light of any missing parameters. */
4618
4619 static void
4620 storedecls (decls)
4621 tree decls;
4622 {
4623 current_binding_level->names = decls;
4624 }
4625
4626 /* Similarly, store the list of tags of the current level. */
4627
4628 static void
4629 storetags (tags)
4630 tree tags;
4631 {
4632 current_binding_level->tags = tags;
4633 }
4634 \f
4635 /* Given NAME, an IDENTIFIER_NODE,
4636 return the structure (or union or enum) definition for that name.
4637 Searches binding levels from BINDING_LEVEL up to the global level.
4638 If THISLEVEL_ONLY is nonzero, searches only the specified context
4639 (but skips any tag-transparent contexts to find one that is
4640 meaningful for tags).
4641 FORM says which kind of type the caller wants;
4642 it is RECORD_TYPE or UNION_TYPE or ENUMERAL_TYPE.
4643 If the wrong kind of type is found, and it's not a template, an error is
4644 reported. */
4645
4646 static tree
4647 lookup_tag (form, name, binding_level, thislevel_only)
4648 enum tree_code form;
4649 tree name;
4650 struct binding_level *binding_level;
4651 int thislevel_only;
4652 {
4653 register struct binding_level *level;
4654 /* Non-zero if, we should look past a pseudo-global level, even if
4655 THISLEVEL_ONLY. */
4656 int allow_pseudo_global = 1;
4657
4658 for (level = binding_level; level; level = level->level_chain)
4659 {
4660 register tree tail;
4661 if (ANON_AGGRNAME_P (name))
4662 for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
4663 {
4664 /* There's no need for error checking here, because
4665 anon names are unique throughout the compilation. */
4666 if (TYPE_IDENTIFIER (TREE_VALUE (tail)) == name)
4667 return TREE_VALUE (tail);
4668 }
4669 else if (level->namespace_p)
4670 /* Do namespace lookup. */
4671 for (tail = current_namespace; 1; tail = CP_DECL_CONTEXT (tail))
4672 {
4673 tree old = binding_for_name (name, tail);
4674
4675 /* If we just skipped past a pseudo global level, even
4676 though THISLEVEL_ONLY, and we find a template class
4677 declaration, then we use the _TYPE node for the
4678 template. See the example below. */
4679 if (thislevel_only && !allow_pseudo_global
4680 && old && BINDING_VALUE (old)
4681 && DECL_CLASS_TEMPLATE_P (BINDING_VALUE (old)))
4682 old = TREE_TYPE (BINDING_VALUE (old));
4683 else
4684 old = BINDING_TYPE (old);
4685
4686 /* If it has an original type, it is a typedef, and we
4687 should not return it. */
4688 if (old && DECL_ORIGINAL_TYPE (TYPE_NAME (old)))
4689 old = NULL_TREE;
4690 if (old && TREE_CODE (old) != form
4691 && !(form != ENUMERAL_TYPE && TREE_CODE (old) == TEMPLATE_DECL))
4692 {
4693 cp_error ("`%#D' redeclared as %C", old, form);
4694 return NULL_TREE;
4695 }
4696 if (old)
4697 return old;
4698 if (thislevel_only || tail == global_namespace)
4699 return NULL_TREE;
4700 }
4701 else
4702 for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
4703 {
4704 if (TREE_PURPOSE (tail) == name)
4705 {
4706 enum tree_code code = TREE_CODE (TREE_VALUE (tail));
4707 /* Should tighten this up; it'll probably permit
4708 UNION_TYPE and a struct template, for example. */
4709 if (code != form
4710 && !(form != ENUMERAL_TYPE && code == TEMPLATE_DECL))
4711 {
4712 /* Definition isn't the kind we were looking for. */
4713 cp_error ("`%#D' redeclared as %C", TREE_VALUE (tail),
4714 form);
4715 return NULL_TREE;
4716 }
4717 return TREE_VALUE (tail);
4718 }
4719 }
4720 if (thislevel_only && ! level->tag_transparent)
4721 {
4722 if (level->pseudo_global && allow_pseudo_global)
4723 {
4724 /* We must deal with cases like this:
4725
4726 template <class T> struct S;
4727 template <class T> struct S {};
4728
4729 When looking up `S', for the second declaration, we
4730 would like to find the first declaration. But, we
4731 are in the pseudo-global level created for the
4732 template parameters, rather than the (surrounding)
4733 namespace level. Thus, we keep going one more level,
4734 even though THISLEVEL_ONLY is non-zero. */
4735 allow_pseudo_global = 0;
4736 continue;
4737 }
4738 else
4739 return NULL_TREE;
4740 }
4741 if (current_class_type && level->level_chain->namespace_p)
4742 {
4743 /* Try looking in this class's tags before heading into
4744 global binding level. */
4745 tree context = current_class_type;
4746 while (context)
4747 {
4748 switch (TREE_CODE_CLASS (TREE_CODE (context)))
4749 {
4750 tree these_tags;
4751 case 't':
4752 these_tags = CLASSTYPE_TAGS (context);
4753 if (ANON_AGGRNAME_P (name))
4754 while (these_tags)
4755 {
4756 if (TYPE_IDENTIFIER (TREE_VALUE (these_tags))
4757 == name)
4758 return TREE_VALUE (tail);
4759 these_tags = TREE_CHAIN (these_tags);
4760 }
4761 else
4762 while (these_tags)
4763 {
4764 if (TREE_PURPOSE (these_tags) == name)
4765 {
4766 if (TREE_CODE (TREE_VALUE (these_tags)) != form)
4767 {
4768 cp_error ("`%#D' redeclared as %C in class scope",
4769 TREE_VALUE (tail), form);
4770 return NULL_TREE;
4771 }
4772 return TREE_VALUE (tail);
4773 }
4774 these_tags = TREE_CHAIN (these_tags);
4775 }
4776 /* If this type is not yet complete, then don't
4777 look at its context. */
4778 if (TYPE_SIZE (context) == NULL_TREE)
4779 goto no_context;
4780 /* Go to next enclosing type, if any. */
4781 context = DECL_CONTEXT (TYPE_MAIN_DECL (context));
4782 break;
4783 case 'd':
4784 context = DECL_CONTEXT (context);
4785 break;
4786 default:
4787 my_friendly_abort (10);
4788 }
4789 continue;
4790 no_context:
4791 break;
4792 }
4793 }
4794 }
4795 return NULL_TREE;
4796 }
4797
4798 #if 0
4799 void
4800 set_current_level_tags_transparency (tags_transparent)
4801 int tags_transparent;
4802 {
4803 current_binding_level->tag_transparent = tags_transparent;
4804 }
4805 #endif
4806
4807 /* Given a type, find the tag that was defined for it and return the tag name.
4808 Otherwise return 0. However, the value can never be 0
4809 in the cases in which this is used.
4810
4811 C++: If NAME is non-zero, this is the new name to install. This is
4812 done when replacing anonymous tags with real tag names. */
4813
4814 static tree
4815 lookup_tag_reverse (type, name)
4816 tree type;
4817 tree name;
4818 {
4819 register struct binding_level *level;
4820
4821 for (level = current_binding_level; level; level = level->level_chain)
4822 {
4823 register tree tail;
4824 for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
4825 {
4826 if (TREE_VALUE (tail) == type)
4827 {
4828 if (name)
4829 TREE_PURPOSE (tail) = name;
4830 return TREE_PURPOSE (tail);
4831 }
4832 }
4833 }
4834 return NULL_TREE;
4835 }
4836 \f
4837 /* Lookup TYPE in CONTEXT (a chain of nested types or a FUNCTION_DECL).
4838 Return the type value, or NULL_TREE if not found. */
4839
4840 static tree
4841 lookup_nested_type (type, context)
4842 tree type;
4843 tree context;
4844 {
4845 if (context == NULL_TREE)
4846 return NULL_TREE;
4847 while (context)
4848 {
4849 switch (TREE_CODE (context))
4850 {
4851 case TYPE_DECL:
4852 {
4853 tree ctype = TREE_TYPE (context);
4854 tree match = value_member (type, CLASSTYPE_TAGS (ctype));
4855 if (match)
4856 return TREE_VALUE (match);
4857 context = DECL_CONTEXT (context);
4858
4859 /* When we have a nested class whose member functions have
4860 local types (e.g., a set of enums), we'll arrive here
4861 with the DECL_CONTEXT as the actual RECORD_TYPE node for
4862 the enclosing class. Instead, we want to make sure we
4863 come back in here with the TYPE_DECL, not the RECORD_TYPE. */
4864 if (context && TREE_CODE (context) == RECORD_TYPE)
4865 context = TREE_CHAIN (context);
4866 }
4867 break;
4868 case FUNCTION_DECL:
4869 if (TYPE_NAME (type) && TYPE_IDENTIFIER (type))
4870 return lookup_name (TYPE_IDENTIFIER (type), 1);
4871 return NULL_TREE;
4872 default:
4873 my_friendly_abort (12);
4874 }
4875 }
4876 return NULL_TREE;
4877 }
4878
4879 /* Look up NAME in the NAMESPACE. */
4880
4881 tree
4882 lookup_namespace_name (namespace, name)
4883 tree namespace, name;
4884 {
4885 struct tree_binding _b;
4886 tree val;
4887
4888 my_friendly_assert (TREE_CODE (namespace) == NAMESPACE_DECL, 370);
4889
4890 /* This happens for A::B<int> when B is a namespace. */
4891 if (TREE_CODE (name) == NAMESPACE_DECL)
4892 return name;
4893
4894 my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 373);
4895
4896 val = binding_init (&_b);
4897 if (!qualified_lookup_using_namespace (name, namespace, val, 0))
4898 return error_mark_node;
4899
4900 if (BINDING_VALUE (val))
4901 {
4902 val = BINDING_VALUE (val);
4903
4904 /* If we have a single function from a using decl, pull it out. */
4905 if (TREE_CODE (val) == OVERLOAD && ! really_overloaded_fn (val))
4906 val = OVL_FUNCTION (val);
4907 return val;
4908 }
4909
4910 cp_error ("`%D' undeclared in namespace `%D'", name, namespace);
4911 return error_mark_node;
4912 }
4913
4914 /* Hash a TYPENAME_TYPE. K is really of type `tree'. */
4915
4916 static unsigned long
4917 typename_hash (k)
4918 hash_table_key k;
4919 {
4920 unsigned long hash;
4921 tree t;
4922
4923 t = (tree) k;
4924 hash = (((unsigned long) TYPE_CONTEXT (t))
4925 ^ ((unsigned long) DECL_NAME (TYPE_NAME (t))));
4926
4927 return hash;
4928 }
4929
4930 /* Compare two TYPENAME_TYPEs. K1 and K2 are really of type `tree'. */
4931
4932 static boolean
4933 typename_compare (k1, k2)
4934 hash_table_key k1;
4935 hash_table_key k2;
4936 {
4937 tree t1;
4938 tree t2;
4939 tree d1;
4940 tree d2;
4941
4942 t1 = (tree) k1;
4943 t2 = (tree) k2;
4944 d1 = TYPE_NAME (t1);
4945 d2 = TYPE_NAME (t2);
4946
4947 return (DECL_NAME (d1) == DECL_NAME (d2)
4948 && same_type_p (TYPE_CONTEXT (t1), TYPE_CONTEXT (t2))
4949 && ((TREE_TYPE (t1) != NULL_TREE)
4950 == (TREE_TYPE (t2) != NULL_TREE))
4951 && same_type_p (TREE_TYPE (t1), TREE_TYPE (t2))
4952 && TYPENAME_TYPE_FULLNAME (t1) == TYPENAME_TYPE_FULLNAME (t2));
4953 }
4954
4955 /* Build a TYPENAME_TYPE. If the type is `typename T::t', CONTEXT is
4956 the type of `T', NAME is the IDENTIFIER_NODE for `t'. If BASE_TYPE
4957 is non-NULL, this type is being created by the implicit typename
4958 extension, and BASE_TYPE is a type named `t' in some base class of
4959 `T' which depends on template parameters.
4960
4961 Returns the new TYPENAME_TYPE. */
4962
4963 tree
4964 build_typename_type (context, name, fullname, base_type)
4965 tree context;
4966 tree name;
4967 tree fullname;
4968 tree base_type;
4969 {
4970 tree t;
4971 tree d;
4972 struct hash_entry* e;
4973
4974 static struct hash_table ht;
4975
4976 push_obstacks (&permanent_obstack, &permanent_obstack);
4977
4978 if (!ht.table
4979 && !hash_table_init (&ht, &hash_newfunc, &typename_hash,
4980 &typename_compare))
4981 fatal ("virtual memory exhausted");
4982
4983 /* Build the TYPENAME_TYPE. */
4984 t = make_lang_type (TYPENAME_TYPE);
4985 TYPE_CONTEXT (t) = FROB_CONTEXT (context);
4986 TYPENAME_TYPE_FULLNAME (t) = fullname;
4987 TREE_TYPE (t) = base_type;
4988
4989 /* Build the corresponding TYPE_DECL. */
4990 d = build_decl (TYPE_DECL, name, t);
4991 TYPE_NAME (TREE_TYPE (d)) = d;
4992 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
4993 DECL_CONTEXT (d) = FROB_CONTEXT (context);
4994 DECL_ARTIFICIAL (d) = 1;
4995
4996 /* See if we already have this type. */
4997 e = hash_lookup (&ht, t, /*create=*/false, /*copy=*/0);
4998 if (e)
4999 {
5000 /* This will free not only TREE_TYPE, but the lang-specific data
5001 and the TYPE_DECL as well. */
5002 obstack_free (&permanent_obstack, t);
5003 t = (tree) e->key;
5004 }
5005 else
5006 /* Insert the type into the table. */
5007 hash_lookup (&ht, t, /*create=*/true, /*copy=*/0);
5008
5009 pop_obstacks ();
5010
5011 return t;
5012 }
5013
5014 tree
5015 make_typename_type (context, name)
5016 tree context, name;
5017 {
5018 tree t;
5019 tree fullname;
5020
5021 if (TREE_CODE_CLASS (TREE_CODE (name)) == 't')
5022 name = TYPE_IDENTIFIER (name);
5023 else if (TREE_CODE (name) == TYPE_DECL)
5024 name = DECL_NAME (name);
5025
5026 fullname = name;
5027
5028 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
5029 {
5030 name = TREE_OPERAND (name, 0);
5031 if (TREE_CODE (name) == TEMPLATE_DECL)
5032 name = TREE_OPERAND (fullname, 0) = DECL_NAME (name);
5033 }
5034 if (TREE_CODE (name) != IDENTIFIER_NODE)
5035 my_friendly_abort (2000);
5036
5037 if (TREE_CODE (context) == NAMESPACE_DECL)
5038 {
5039 /* We can get here from typename_sub0 in the explicit_template_type
5040 expansion. Just fail. */
5041 cp_error ("no class template named `%#T' in `%#T'",
5042 name, context);
5043 return error_mark_node;
5044 }
5045
5046 if (! uses_template_parms (context)
5047 || currently_open_class (context))
5048 {
5049 if (TREE_CODE (fullname) == TEMPLATE_ID_EXPR)
5050 {
5051 if (IS_AGGR_TYPE (context))
5052 t = lookup_field (context, name, 0, 0);
5053 else
5054 t = NULL_TREE;
5055
5056 if (t == NULL_TREE || TREE_CODE (t) != TEMPLATE_DECL
5057 || TREE_CODE (DECL_RESULT (t)) != TYPE_DECL)
5058 {
5059 cp_error ("no class template named `%#T' in `%#T'",
5060 name, context);
5061 return error_mark_node;
5062 }
5063
5064 return lookup_template_class (t, TREE_OPERAND (fullname, 1),
5065 NULL_TREE, context,
5066 /*entering_scope=*/0);
5067 }
5068 else
5069 {
5070 if (IS_AGGR_TYPE (context))
5071 t = lookup_field (context, name, 0, 1);
5072 else
5073 t = NULL_TREE;
5074
5075 if (t == NULL_TREE)
5076 {
5077 cp_error ("no type named `%#T' in `%#T'", name, context);
5078 return error_mark_node;
5079 }
5080
5081 return TREE_TYPE (t);
5082 }
5083 }
5084
5085 return build_typename_type (context, name, fullname, NULL_TREE);
5086 }
5087
5088 /* Select the right _DECL from multiple choices. */
5089
5090 static tree
5091 select_decl (binding, flags)
5092 tree binding;
5093 int flags;
5094 {
5095 tree val;
5096 val = BINDING_VALUE (binding);
5097 if (LOOKUP_NAMESPACES_ONLY (flags))
5098 {
5099 /* We are not interested in types. */
5100 if (val && TREE_CODE (val) == NAMESPACE_DECL)
5101 return val;
5102 return NULL_TREE;
5103 }
5104
5105 /* If we could have a type and
5106 we have nothing or we need a type and have none. */
5107 if (BINDING_TYPE (binding)
5108 && (!val || ((flags & LOOKUP_PREFER_TYPES)
5109 && TREE_CODE (val) != TYPE_DECL)))
5110 val = TYPE_STUB_DECL (BINDING_TYPE (binding));
5111 /* Don't return non-types if we really prefer types. */
5112 else if (val && LOOKUP_TYPES_ONLY (flags) && TREE_CODE (val) != TYPE_DECL
5113 && (!looking_for_template || TREE_CODE (val) != TEMPLATE_DECL))
5114 val = NULL_TREE;
5115
5116 return val;
5117 }
5118
5119 /* Unscoped lookup of a global, iterate over namespaces, considering
5120 using namespace statements. */
5121
5122 static tree
5123 unqualified_namespace_lookup (name, flags)
5124 tree name;
5125 int flags;
5126 {
5127 struct tree_binding _binding;
5128 tree b = binding_init (&_binding);
5129 tree initial = current_decl_namespace();
5130 tree scope = initial;
5131 tree siter;
5132 struct binding_level *level;
5133 tree val = NULL_TREE;
5134
5135 while (!val)
5136 {
5137 val = binding_for_name (name, scope);
5138
5139 /* Initialize binding for this context. */
5140 BINDING_VALUE (b) = BINDING_VALUE (val);
5141 BINDING_TYPE (b) = BINDING_TYPE (val);
5142
5143 /* Add all _DECLs seen through local using-directives. */
5144 for (level = current_binding_level;
5145 !level->namespace_p;
5146 level = level->level_chain)
5147 if (!lookup_using_namespace (name, b, level->using_directives,
5148 scope, flags))
5149 /* Give up because of error. */
5150 return NULL_TREE;
5151
5152 /* Add all _DECLs seen through global using-directives. */
5153 /* XXX local and global using lists should work equally. */
5154 siter = initial;
5155 while (1)
5156 {
5157 if (!lookup_using_namespace (name, b, DECL_NAMESPACE_USING (siter),
5158 scope, flags))
5159 /* Give up because of error. */
5160 return NULL_TREE;
5161 if (siter == scope) break;
5162 siter = CP_DECL_CONTEXT (siter);
5163 }
5164
5165 val = select_decl (b, flags);
5166 if (scope == global_namespace)
5167 break;
5168 scope = CP_DECL_CONTEXT (scope);
5169 }
5170 return val;
5171 }
5172
5173 /* Combine prefer_type and namespaces_only into flags. */
5174
5175 static int
5176 lookup_flags (prefer_type, namespaces_only)
5177 int prefer_type, namespaces_only;
5178 {
5179 if (namespaces_only)
5180 return LOOKUP_PREFER_NAMESPACES;
5181 if (prefer_type > 1)
5182 return LOOKUP_PREFER_TYPES;
5183 if (prefer_type > 0)
5184 return LOOKUP_PREFER_BOTH;
5185 return 0;
5186 }
5187
5188 /* Given a lookup that returned VAL, use FLAGS to decide if we want to
5189 ignore it or not. Subroutine of lookup_name_real. */
5190
5191 static tree
5192 qualify_lookup (val, flags)
5193 tree val;
5194 int flags;
5195 {
5196 if (val == NULL_TREE)
5197 return val;
5198 if ((flags & LOOKUP_PREFER_NAMESPACES) && TREE_CODE (val) == NAMESPACE_DECL)
5199 return val;
5200 if ((flags & LOOKUP_PREFER_TYPES)
5201 && (TREE_CODE (val) == TYPE_DECL
5202 || ((flags & LOOKUP_TEMPLATES_EXPECTED)
5203 && DECL_CLASS_TEMPLATE_P (val))))
5204 return val;
5205 if (flags & (LOOKUP_PREFER_NAMESPACES | LOOKUP_PREFER_TYPES))
5206 return NULL_TREE;
5207 return val;
5208 }
5209
5210 /* Look up NAME in the current binding level and its superiors in the
5211 namespace of variables, functions and typedefs. Return a ..._DECL
5212 node of some kind representing its definition if there is only one
5213 such declaration, or return a TREE_LIST with all the overloaded
5214 definitions if there are many, or return 0 if it is undefined.
5215
5216 If PREFER_TYPE is > 0, we prefer TYPE_DECLs or namespaces.
5217 If PREFER_TYPE is > 1, we reject non-type decls (e.g. namespaces).
5218 If PREFER_TYPE is -2, we're being called from yylex(). (UGLY)
5219 Otherwise we prefer non-TYPE_DECLs.
5220
5221 If NONCLASS is non-zero, we don't look for the NAME in class scope,
5222 using IDENTIFIER_CLASS_VALUE. */
5223
5224 static tree
5225 lookup_name_real (name, prefer_type, nonclass, namespaces_only)
5226 tree name;
5227 int prefer_type, nonclass, namespaces_only;
5228 {
5229 register tree val;
5230 int yylex = 0;
5231 tree from_obj = NULL_TREE;
5232 int flags;
5233
5234 /* Hack: copy flag set by parser, if set. */
5235 if (only_namespace_names)
5236 namespaces_only = 1;
5237
5238 if (prefer_type == -2)
5239 {
5240 extern int looking_for_typename;
5241 tree type = NULL_TREE;
5242
5243 yylex = 1;
5244 prefer_type = looking_for_typename;
5245
5246 flags = lookup_flags (prefer_type, namespaces_only);
5247 /* During parsing, we need to complain. */
5248 flags |= LOOKUP_COMPLAIN;
5249 /* If the next thing is '<', class templates are types. */
5250 if (looking_for_template)
5251 flags |= LOOKUP_TEMPLATES_EXPECTED;
5252
5253 /* std:: becomes :: for now. */
5254 if (got_scope == std_node)
5255 got_scope = void_type_node;
5256
5257 if (got_scope)
5258 type = got_scope;
5259 else if (got_object != error_mark_node)
5260 type = got_object;
5261
5262 if (type)
5263 {
5264 if (type == error_mark_node)
5265 return error_mark_node;
5266 if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
5267 type = TREE_TYPE (type);
5268
5269 if (TYPE_P (type))
5270 type = complete_type (type);
5271
5272 if (TREE_CODE (type) == VOID_TYPE)
5273 type = global_namespace;
5274 if (TREE_CODE (type) == NAMESPACE_DECL)
5275 {
5276 struct tree_binding b;
5277 val = binding_init (&b);
5278 if (!qualified_lookup_using_namespace (name, type, val, flags))
5279 return NULL_TREE;
5280 val = select_decl (val, flags);
5281 }
5282 else if (! IS_AGGR_TYPE (type)
5283 || TREE_CODE (type) == TEMPLATE_TYPE_PARM
5284 || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM
5285 || TREE_CODE (type) == TYPENAME_TYPE)
5286 /* Someone else will give an error about this if needed. */
5287 val = NULL_TREE;
5288 else if (TYPE_BEING_DEFINED (type))
5289 {
5290 val = IDENTIFIER_CLASS_VALUE (name);
5291 if (val && DECL_CONTEXT (val) != type)
5292 {
5293 struct binding_level *b = class_binding_level;
5294 for (val = NULL_TREE; b; b = b->level_chain)
5295 {
5296 tree t = purpose_member (name, b->class_shadowed);
5297 if (t && TREE_VALUE (t)
5298 && DECL_CONTEXT (TREE_VALUE (t)) == type)
5299 {
5300 val = TREE_VALUE (t);
5301 break;
5302 }
5303 }
5304 }
5305 if (val == NULL_TREE)
5306 val = lookup_field (type, name, 0, 1);
5307 }
5308 else if (type == current_class_type)
5309 val = IDENTIFIER_CLASS_VALUE (name);
5310 else
5311 val = lookup_member (type, name, 0, prefer_type);
5312 }
5313 else
5314 val = NULL_TREE;
5315
5316 if (got_scope)
5317 goto done;
5318 else if (got_object && val)
5319 from_obj = val;
5320 }
5321 else
5322 flags = lookup_flags (prefer_type, namespaces_only);
5323
5324 /* First, look in a non-global scope, carefully avoiding any
5325 class-scope bindings if required. */
5326 val = IDENTIFIER_BINDING (name);
5327 while (val && nonclass && !LOCAL_BINDING_P (val))
5328 val = TREE_CHAIN (val);
5329
5330 /* Get the DECL actually bound. */
5331 if (val)
5332 val = BINDING_VALUE (val);
5333
5334 /* If VAL is a type from a dependent base, we're not really supposed
5335 to be able to see it; the fact that we can is the "implicit
5336 typename" extension. We call lookup_field here to turn VAL into
5337 a TYPE_DECL for a TYPENAME_TYPE. */
5338 if (processing_template_decl && val
5339 && val == IDENTIFIER_CLASS_VALUE (name)
5340 && TREE_CODE (val) == TYPE_DECL
5341 && !currently_open_class (DECL_CONTEXT (val))
5342 && uses_template_parms (current_class_type))
5343 val = lookup_field (current_class_type, name, 0, 1);
5344
5345 /* Make sure that this binding is the sort of thing we're looking
5346 for. */
5347 val = qualify_lookup (val, flags);
5348
5349 /* We don't put names from baseclasses onto the IDENTIFIER_BINDING
5350 list when we're defining a type. It would probably be simpler to
5351 do this, but we don't. So, we must lookup names from base
5352 classes explicitly. */
5353 if (!val && !nonclass
5354 && current_class_type && TYPE_BEING_DEFINED (current_class_type))
5355 {
5356 val = qualify_lookup (lookup_field (current_class_type, name, 0, 0),
5357 flags);
5358 if (!val)
5359 val = qualify_lookup (lookup_nested_field (name, !yylex),
5360 flags);
5361 }
5362
5363 /* If we found a type from a dependent base class (using the
5364 implicit typename extension), turn it into the TYPE_DECL for a
5365 TYPENAME_TYPE here. */
5366 if (val && TREE_CODE (val) == TYPE_DECL
5367 && IMPLICIT_TYPENAME_P (TREE_TYPE (val)))
5368 {
5369 tree global_val;
5370
5371 /* Any other name takes precedence over an implicit typename. Warn the
5372 user about this potentially confusing lookup. */
5373 global_val = unqualified_namespace_lookup (name, flags);
5374
5375 if (global_val)
5376 {
5377 tree subtype;
5378
5379 /* Only warn when not lexing; we don't want to warn if they
5380 use this name as a declarator. */
5381 subtype = TREE_TYPE (TREE_TYPE (val));
5382 if (! yylex
5383 && ! (TREE_CODE (global_val) == TEMPLATE_DECL
5384 && CLASSTYPE_TEMPLATE_INFO (subtype)
5385 && CLASSTYPE_TI_TEMPLATE (subtype) == global_val)
5386 && ! (TREE_CODE (global_val) == TYPE_DECL
5387 && same_type_p (TREE_TYPE (global_val), subtype)))
5388 {
5389 cp_warning ("lookup of `%D' finds `%#D'", name, global_val);
5390 cp_warning (" instead of `%D' from dependent base class",
5391 val);
5392 cp_warning (" (use `typename %T::%D' if that's what you meant)",
5393 constructor_name (current_class_type), name);
5394 }
5395
5396 /* Use the global value instead of the implicit typename. */
5397 val = global_val;
5398 }
5399 }
5400 else if (!val)
5401 /* No local, or class-scoped binding. Look for a namespace-scope
5402 declaration. */
5403 val = unqualified_namespace_lookup (name, flags);
5404
5405 done:
5406 if (val)
5407 {
5408 /* This should only warn about types used in qualified-ids. */
5409 if (from_obj && from_obj != val)
5410 {
5411 if (looking_for_typename && TREE_CODE (from_obj) == TYPE_DECL
5412 && TREE_CODE (val) == TYPE_DECL
5413 && TREE_TYPE (from_obj) != TREE_TYPE (val))
5414 {
5415 cp_pedwarn ("lookup of `%D' in the scope of `%#T' (`%#T')",
5416 name, got_object, TREE_TYPE (from_obj));
5417 cp_pedwarn (" does not match lookup in the current scope (`%#T')",
5418 TREE_TYPE (val));
5419 }
5420
5421 /* We don't change val to from_obj if got_object depends on
5422 template parms because that breaks implicit typename for
5423 destructor calls. */
5424 if (! uses_template_parms (got_object))
5425 val = from_obj;
5426 }
5427
5428 /* If we have a single function from a using decl, pull it out. */
5429 if (TREE_CODE (val) == OVERLOAD && ! really_overloaded_fn (val))
5430 val = OVL_FUNCTION (val);
5431 }
5432 else if (from_obj)
5433 val = from_obj;
5434
5435 return val;
5436 }
5437
5438 tree
5439 lookup_name_nonclass (name)
5440 tree name;
5441 {
5442 return lookup_name_real (name, 0, 1, 0);
5443 }
5444
5445 tree
5446 lookup_function_nonclass (name, args)
5447 tree name;
5448 tree args;
5449 {
5450 return lookup_arg_dependent (name, lookup_name_nonclass (name), args);
5451 }
5452
5453 tree
5454 lookup_name_namespace_only (name)
5455 tree name;
5456 {
5457 /* type-or-namespace, nonclass, namespace_only */
5458 return lookup_name_real (name, 1, 1, 1);
5459 }
5460
5461 tree
5462 lookup_name (name, prefer_type)
5463 tree name;
5464 int prefer_type;
5465 {
5466 return lookup_name_real (name, prefer_type, 0, 0);
5467 }
5468
5469 /* Similar to `lookup_name' but look only at current binding level. */
5470
5471 tree
5472 lookup_name_current_level (name)
5473 tree name;
5474 {
5475 register tree t = NULL_TREE;
5476
5477 if (current_binding_level->namespace_p)
5478 {
5479 t = IDENTIFIER_NAMESPACE_VALUE (name);
5480
5481 /* extern "C" function() */
5482 if (t != NULL_TREE && TREE_CODE (t) == TREE_LIST)
5483 t = TREE_VALUE (t);
5484 }
5485 else if (IDENTIFIER_BINDING (name)
5486 && LOCAL_BINDING_P (IDENTIFIER_BINDING (name)))
5487 {
5488 struct binding_level *b = current_binding_level;
5489
5490 while (1)
5491 {
5492 if (BINDING_LEVEL (IDENTIFIER_BINDING (name)) == b)
5493 return IDENTIFIER_VALUE (name);
5494
5495 if (b->keep == 2)
5496 b = b->level_chain;
5497 else
5498 break;
5499 }
5500 }
5501
5502 return t;
5503 }
5504
5505 /* Like lookup_name_current_level, but for types. */
5506
5507 tree
5508 lookup_type_current_level (name)
5509 tree name;
5510 {
5511 register tree t = NULL_TREE;
5512
5513 my_friendly_assert (! current_binding_level->namespace_p, 980716);
5514
5515 if (REAL_IDENTIFIER_TYPE_VALUE (name) != NULL_TREE
5516 && REAL_IDENTIFIER_TYPE_VALUE (name) != global_type_node)
5517 {
5518 struct binding_level *b = current_binding_level;
5519 while (1)
5520 {
5521 if (purpose_member (name, b->type_shadowed))
5522 return REAL_IDENTIFIER_TYPE_VALUE (name);
5523 if (b->keep == 2)
5524 b = b->level_chain;
5525 else
5526 break;
5527 }
5528 }
5529
5530 return t;
5531 }
5532
5533 void
5534 begin_only_namespace_names ()
5535 {
5536 only_namespace_names = 1;
5537 }
5538
5539 void
5540 end_only_namespace_names ()
5541 {
5542 only_namespace_names = 0;
5543 }
5544 \f
5545 /* Arrange for the user to get a source line number, even when the
5546 compiler is going down in flames, so that she at least has a
5547 chance of working around problems in the compiler. We used to
5548 call error(), but that let the segmentation fault continue
5549 through; now, it's much more passive by asking them to send the
5550 maintainers mail about the problem. */
5551
5552 static void
5553 signal_catch (sig)
5554 int sig ATTRIBUTE_UNUSED;
5555 {
5556 signal (SIGSEGV, SIG_DFL);
5557 #ifdef SIGIOT
5558 signal (SIGIOT, SIG_DFL);
5559 #endif
5560 #ifdef SIGILL
5561 signal (SIGILL, SIG_DFL);
5562 #endif
5563 #ifdef SIGABRT
5564 signal (SIGABRT, SIG_DFL);
5565 #endif
5566 #ifdef SIGBUS
5567 signal (SIGBUS, SIG_DFL);
5568 #endif
5569 my_friendly_abort (0);
5570 }
5571
5572 #if 0
5573 /* Unused -- brendan 970107 */
5574 /* Array for holding types considered "built-in". These types
5575 are output in the module in which `main' is defined. */
5576 static tree *builtin_type_tdescs_arr;
5577 static int builtin_type_tdescs_len, builtin_type_tdescs_max;
5578 #endif
5579
5580 /* Push the declarations of builtin types into the namespace.
5581 RID_INDEX, if < RID_MAX is the index of the builtin type
5582 in the array RID_POINTERS. NAME is the name used when looking
5583 up the builtin type. TYPE is the _TYPE node for the builtin type. */
5584
5585 static void
5586 record_builtin_type (rid_index, name, type)
5587 enum rid rid_index;
5588 char *name;
5589 tree type;
5590 {
5591 tree rname = NULL_TREE, tname = NULL_TREE;
5592 tree tdecl = NULL_TREE;
5593
5594 if ((int) rid_index < (int) RID_MAX)
5595 rname = ridpointers[(int) rid_index];
5596 if (name)
5597 tname = get_identifier (name);
5598
5599 TYPE_BUILT_IN (type) = 1;
5600
5601 if (tname)
5602 {
5603 tdecl = pushdecl (build_decl (TYPE_DECL, tname, type));
5604 set_identifier_type_value (tname, NULL_TREE);
5605 if ((int) rid_index < (int) RID_MAX)
5606 /* Built-in types live in the global namespace. */
5607 SET_IDENTIFIER_GLOBAL_VALUE (tname, tdecl);
5608 }
5609 if (rname != NULL_TREE)
5610 {
5611 if (tname != NULL_TREE)
5612 {
5613 set_identifier_type_value (rname, NULL_TREE);
5614 SET_IDENTIFIER_GLOBAL_VALUE (rname, tdecl);
5615 }
5616 else
5617 {
5618 tdecl = pushdecl (build_decl (TYPE_DECL, rname, type));
5619 set_identifier_type_value (rname, NULL_TREE);
5620 }
5621 }
5622 }
5623
5624 /* Record one of the standard Java types.
5625 * Declare it as having the given NAME.
5626 * If SIZE > 0, it is the size of one of the integral types;
5627 * otherwise it is the negative of the size of one of the other types. */
5628
5629 static tree
5630 record_builtin_java_type (name, size)
5631 char *name;
5632 int size;
5633 {
5634 tree type, decl;
5635 if (size > 0)
5636 type = make_signed_type (size);
5637 else if (size > -32)
5638 { /* "__java_char" or ""__java_boolean". */
5639 type = make_unsigned_type (-size);
5640 /*if (size == -1) TREE_SET_CODE (type, BOOLEAN_TYPE);*/
5641 }
5642 else
5643 { /* "__java_float" or ""__java_double". */
5644 type = make_node (REAL_TYPE);
5645 TYPE_PRECISION (type) = - size;
5646 layout_type (type);
5647 }
5648 record_builtin_type (RID_MAX, name, type);
5649 decl = TYPE_NAME (type);
5650 DECL_IGNORED_P (decl) = 1;
5651 TYPE_FOR_JAVA (type) = 1;
5652 return type;
5653 }
5654
5655 /* Push a type into the namespace so that the back-ends ignore it. */
5656
5657 static void
5658 record_unknown_type (type, name)
5659 tree type;
5660 char *name;
5661 {
5662 tree decl = pushdecl (build_decl (TYPE_DECL, get_identifier (name), type));
5663 /* Make sure the "unknown type" typedecl gets ignored for debug info. */
5664 DECL_IGNORED_P (decl) = 1;
5665 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
5666 TYPE_SIZE (type) = TYPE_SIZE (void_type_node);
5667 TYPE_ALIGN (type) = 1;
5668 TYPE_MODE (type) = TYPE_MODE (void_type_node);
5669 }
5670
5671 /* Push overloaded decl, in global scope, with one argument so it
5672 can be used as a callback from define_function. */
5673
5674 static void
5675 push_overloaded_decl_1 (x)
5676 tree x;
5677 {
5678 push_overloaded_decl (x, 0);
5679 }
5680
5681 #ifdef __GNUC__
5682 __inline
5683 #endif
5684 tree
5685 auto_function (name, type, code)
5686 tree name, type;
5687 enum built_in_function code;
5688 {
5689 return define_function
5690 (IDENTIFIER_POINTER (name), type, code, push_overloaded_decl_1,
5691 IDENTIFIER_POINTER (build_decl_overload (name, TYPE_ARG_TYPES (type),
5692 0)));
5693 }
5694
5695 /* Create the predefined scalar types of C,
5696 and some nodes representing standard constants (0, 1, (void *)0).
5697 Initialize the global binding level.
5698 Make definitions for built-in primitive functions. */
5699
5700 void
5701 init_decl_processing ()
5702 {
5703 register tree endlink, int_endlink, double_endlink, unsigned_endlink;
5704 tree fields[20];
5705 /* Data type of memcpy. */
5706 tree memcpy_ftype, strlen_ftype;
5707 int wchar_type_size;
5708 tree temp;
5709 tree array_domain_type;
5710 tree vb_off_identifier = NULL_TREE;
5711 /* Function type `char *(char *, char *)' and similar ones */
5712 tree string_ftype_ptr_ptr, int_ftype_string_string;
5713 tree sizetype_endlink;
5714 tree ptr_ftype, ptr_ftype_unsigned, ptr_ftype_sizetype;
5715 tree void_ftype, void_ftype_int, void_ftype_ptr;
5716
5717 /* Have to make these distinct before we try using them. */
5718 lang_name_cplusplus = get_identifier ("C++");
5719 lang_name_c = get_identifier ("C");
5720 lang_name_java = get_identifier ("Java");
5721
5722 /* Enter the global namespace. */
5723 my_friendly_assert (global_namespace == NULL_TREE, 375);
5724 my_friendly_assert (current_lang_name == NULL_TREE, 375);
5725 current_lang_name = lang_name_cplusplus;
5726 push_namespace (get_identifier ("::"));
5727 global_namespace = current_namespace;
5728 current_lang_name = NULL_TREE;
5729
5730 if (flag_strict_prototype == 2)
5731 flag_strict_prototype = pedantic;
5732 if (! flag_permissive && ! pedantic)
5733 flag_pedantic_errors = 1;
5734
5735 strict_prototypes_lang_c = flag_strict_prototype;
5736
5737 /* Initially, C. */
5738 current_lang_name = lang_name_c;
5739
5740 current_function_decl = NULL_TREE;
5741 named_labels = NULL_TREE;
5742 named_label_uses = NULL;
5743 current_binding_level = NULL_BINDING_LEVEL;
5744 free_binding_level = NULL_BINDING_LEVEL;
5745
5746 /* Because most segmentation signals can be traced back into user
5747 code, catch them and at least give the user a chance of working
5748 around compiler bugs. */
5749 signal (SIGSEGV, signal_catch);
5750
5751 /* We will also catch aborts in the back-end through signal_catch and
5752 give the user a chance to see where the error might be, and to defeat
5753 aborts in the back-end when there have been errors previously in their
5754 code. */
5755 #ifdef SIGIOT
5756 signal (SIGIOT, signal_catch);
5757 #endif
5758 #ifdef SIGILL
5759 signal (SIGILL, signal_catch);
5760 #endif
5761 #ifdef SIGABRT
5762 signal (SIGABRT, signal_catch);
5763 #endif
5764 #ifdef SIGBUS
5765 signal (SIGBUS, signal_catch);
5766 #endif
5767
5768 gcc_obstack_init (&decl_obstack);
5769
5770 /* Must lay these out before anything else gets laid out. */
5771 error_mark_node = make_node (ERROR_MARK);
5772 TREE_PERMANENT (error_mark_node) = 1;
5773 TREE_TYPE (error_mark_node) = error_mark_node;
5774 error_mark_list = build_tree_list (error_mark_node, error_mark_node);
5775 TREE_TYPE (error_mark_list) = error_mark_node;
5776
5777 /* Make the binding_level structure for global names. */
5778 pushlevel (0);
5779 global_binding_level = current_binding_level;
5780 /* The global level is the namespace level of ::. */
5781 NAMESPACE_LEVEL (global_namespace) = global_binding_level;
5782 declare_namespace_level ();
5783
5784 this_identifier = get_identifier (THIS_NAME);
5785 in_charge_identifier = get_identifier (IN_CHARGE_NAME);
5786 ctor_identifier = get_identifier (CTOR_NAME);
5787 dtor_identifier = get_identifier (DTOR_NAME);
5788 pfn_identifier = get_identifier (VTABLE_PFN_NAME);
5789 index_identifier = get_identifier (VTABLE_INDEX_NAME);
5790 delta_identifier = get_identifier (VTABLE_DELTA_NAME);
5791 delta2_identifier = get_identifier (VTABLE_DELTA2_NAME);
5792 pfn_or_delta2_identifier = get_identifier ("__pfn_or_delta2");
5793 if (flag_handle_signatures)
5794 {
5795 tag_identifier = get_identifier (SIGTABLE_TAG_NAME);
5796 vb_off_identifier = get_identifier (SIGTABLE_VB_OFF_NAME);
5797 vt_off_identifier = get_identifier (SIGTABLE_VT_OFF_NAME);
5798 }
5799
5800 /* Define `int' and `char' first so that dbx will output them first. */
5801
5802 integer_type_node = make_signed_type (INT_TYPE_SIZE);
5803 record_builtin_type (RID_INT, NULL_PTR, integer_type_node);
5804
5805 /* Define `char', which is like either `signed char' or `unsigned char'
5806 but not the same as either. */
5807
5808 char_type_node
5809 = (flag_signed_char
5810 ? make_signed_type (CHAR_TYPE_SIZE)
5811 : make_unsigned_type (CHAR_TYPE_SIZE));
5812 record_builtin_type (RID_CHAR, "char", char_type_node);
5813
5814 long_integer_type_node = make_signed_type (LONG_TYPE_SIZE);
5815 record_builtin_type (RID_LONG, "long int", long_integer_type_node);
5816
5817 unsigned_type_node = make_unsigned_type (INT_TYPE_SIZE);
5818 record_builtin_type (RID_UNSIGNED, "unsigned int", unsigned_type_node);
5819
5820 long_unsigned_type_node = make_unsigned_type (LONG_TYPE_SIZE);
5821 record_builtin_type (RID_MAX, "long unsigned int", long_unsigned_type_node);
5822 record_builtin_type (RID_MAX, "unsigned long", long_unsigned_type_node);
5823
5824 long_long_integer_type_node = make_signed_type (LONG_LONG_TYPE_SIZE);
5825 record_builtin_type (RID_MAX, "long long int", long_long_integer_type_node);
5826
5827 long_long_unsigned_type_node = make_unsigned_type (LONG_LONG_TYPE_SIZE);
5828 record_builtin_type (RID_MAX, "long long unsigned int",
5829 long_long_unsigned_type_node);
5830 record_builtin_type (RID_MAX, "long long unsigned",
5831 long_long_unsigned_type_node);
5832
5833 short_integer_type_node = make_signed_type (SHORT_TYPE_SIZE);
5834 record_builtin_type (RID_SHORT, "short int", short_integer_type_node);
5835 short_unsigned_type_node = make_unsigned_type (SHORT_TYPE_SIZE);
5836 record_builtin_type (RID_MAX, "short unsigned int", short_unsigned_type_node);
5837 record_builtin_type (RID_MAX, "unsigned short", short_unsigned_type_node);
5838
5839 /* `unsigned long' is the standard type for sizeof.
5840 Note that stddef.h uses `unsigned long',
5841 and this must agree, even if long and int are the same size. */
5842 set_sizetype
5843 (TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (SIZE_TYPE))));
5844
5845 ptrdiff_type_node
5846 = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (PTRDIFF_TYPE)));
5847
5848 /* Define both `signed char' and `unsigned char'. */
5849 signed_char_type_node = make_signed_type (CHAR_TYPE_SIZE);
5850 record_builtin_type (RID_MAX, "signed char", signed_char_type_node);
5851 unsigned_char_type_node = make_unsigned_type (CHAR_TYPE_SIZE);
5852 record_builtin_type (RID_MAX, "unsigned char", unsigned_char_type_node);
5853
5854 /* These are types that type_for_size and type_for_mode use. */
5855 intQI_type_node = make_signed_type (GET_MODE_BITSIZE (QImode));
5856 pushdecl (build_decl (TYPE_DECL, NULL_TREE, intQI_type_node));
5857 intHI_type_node = make_signed_type (GET_MODE_BITSIZE (HImode));
5858 pushdecl (build_decl (TYPE_DECL, NULL_TREE, intHI_type_node));
5859 intSI_type_node = make_signed_type (GET_MODE_BITSIZE (SImode));
5860 pushdecl (build_decl (TYPE_DECL, NULL_TREE, intSI_type_node));
5861 intDI_type_node = make_signed_type (GET_MODE_BITSIZE (DImode));
5862 pushdecl (build_decl (TYPE_DECL, NULL_TREE, intDI_type_node));
5863 #if HOST_BITS_PER_WIDE_INT >= 64
5864 intTI_type_node = make_signed_type (GET_MODE_BITSIZE (TImode));
5865 pushdecl (build_decl (TYPE_DECL, get_identifier ("__int128_t"), intTI_type_node));
5866 #endif
5867 unsigned_intQI_type_node = make_unsigned_type (GET_MODE_BITSIZE (QImode));
5868 pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intQI_type_node));
5869 unsigned_intHI_type_node = make_unsigned_type (GET_MODE_BITSIZE (HImode));
5870 pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intHI_type_node));
5871 unsigned_intSI_type_node = make_unsigned_type (GET_MODE_BITSIZE (SImode));
5872 pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intSI_type_node));
5873 unsigned_intDI_type_node = make_unsigned_type (GET_MODE_BITSIZE (DImode));
5874 pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intDI_type_node));
5875 #if HOST_BITS_PER_WIDE_INT >= 64
5876 unsigned_intTI_type_node = make_unsigned_type (GET_MODE_BITSIZE (TImode));
5877 pushdecl (build_decl (TYPE_DECL, get_identifier ("__uint128_t"), unsigned_intTI_type_node));
5878 #endif
5879
5880 float_type_node = make_node (REAL_TYPE);
5881 TYPE_PRECISION (float_type_node) = FLOAT_TYPE_SIZE;
5882 record_builtin_type (RID_FLOAT, NULL_PTR, float_type_node);
5883 layout_type (float_type_node);
5884
5885 double_type_node = make_node (REAL_TYPE);
5886 if (flag_short_double)
5887 TYPE_PRECISION (double_type_node) = FLOAT_TYPE_SIZE;
5888 else
5889 TYPE_PRECISION (double_type_node) = DOUBLE_TYPE_SIZE;
5890 record_builtin_type (RID_DOUBLE, NULL_PTR, double_type_node);
5891 layout_type (double_type_node);
5892
5893 long_double_type_node = make_node (REAL_TYPE);
5894 TYPE_PRECISION (long_double_type_node) = LONG_DOUBLE_TYPE_SIZE;
5895 record_builtin_type (RID_MAX, "long double", long_double_type_node);
5896 layout_type (long_double_type_node);
5897
5898 complex_integer_type_node = make_node (COMPLEX_TYPE);
5899 pushdecl (build_decl (TYPE_DECL, get_identifier ("complex int"),
5900 complex_integer_type_node));
5901 TREE_TYPE (complex_integer_type_node) = integer_type_node;
5902 layout_type (complex_integer_type_node);
5903
5904 complex_float_type_node = make_node (COMPLEX_TYPE);
5905 pushdecl (build_decl (TYPE_DECL, get_identifier ("complex float"),
5906 complex_float_type_node));
5907 TREE_TYPE (complex_float_type_node) = float_type_node;
5908 layout_type (complex_float_type_node);
5909
5910 complex_double_type_node = make_node (COMPLEX_TYPE);
5911 pushdecl (build_decl (TYPE_DECL, get_identifier ("complex double"),
5912 complex_double_type_node));
5913 TREE_TYPE (complex_double_type_node) = double_type_node;
5914 layout_type (complex_double_type_node);
5915
5916 complex_long_double_type_node = make_node (COMPLEX_TYPE);
5917 pushdecl (build_decl (TYPE_DECL, get_identifier ("complex long double"),
5918 complex_long_double_type_node));
5919 TREE_TYPE (complex_long_double_type_node) = long_double_type_node;
5920 layout_type (complex_long_double_type_node);
5921
5922 java_byte_type_node = record_builtin_java_type ("__java_byte", 8);
5923 java_short_type_node = record_builtin_java_type ("__java_short", 16);
5924 java_int_type_node = record_builtin_java_type ("__java_int", 32);
5925 java_long_type_node = record_builtin_java_type ("__java_long", 64);
5926 java_float_type_node = record_builtin_java_type ("__java_float", -32);
5927 java_double_type_node = record_builtin_java_type ("__java_double", -64);
5928 java_char_type_node = record_builtin_java_type ("__java_char", -16);
5929 java_boolean_type_node = record_builtin_java_type ("__java_boolean", -1);
5930
5931 integer_zero_node = build_int_2 (0, 0);
5932 TREE_TYPE (integer_zero_node) = integer_type_node;
5933 integer_one_node = build_int_2 (1, 0);
5934 TREE_TYPE (integer_one_node) = integer_type_node;
5935 integer_two_node = build_int_2 (2, 0);
5936 TREE_TYPE (integer_two_node) = integer_type_node;
5937 integer_three_node = build_int_2 (3, 0);
5938 TREE_TYPE (integer_three_node) = integer_type_node;
5939
5940 boolean_type_node = make_unsigned_type (BOOL_TYPE_SIZE);
5941 TREE_SET_CODE (boolean_type_node, BOOLEAN_TYPE);
5942 TYPE_MAX_VALUE (boolean_type_node) = build_int_2 (1, 0);
5943 TREE_TYPE (TYPE_MAX_VALUE (boolean_type_node)) = boolean_type_node;
5944 TYPE_PRECISION (boolean_type_node) = 1;
5945 record_builtin_type (RID_BOOL, "bool", boolean_type_node);
5946 boolean_false_node = build_int_2 (0, 0);
5947 TREE_TYPE (boolean_false_node) = boolean_type_node;
5948 boolean_true_node = build_int_2 (1, 0);
5949 TREE_TYPE (boolean_true_node) = boolean_type_node;
5950
5951 /* These are needed by stor-layout.c. */
5952 size_zero_node = size_int (0);
5953 size_one_node = size_int (1);
5954
5955 signed_size_zero_node = build_int_2 (0, 0);
5956 TREE_TYPE (signed_size_zero_node) = make_signed_type (TYPE_PRECISION (sizetype));
5957
5958 void_type_node = make_node (VOID_TYPE);
5959 record_builtin_type (RID_VOID, NULL_PTR, void_type_node);
5960 layout_type (void_type_node); /* Uses integer_zero_node. */
5961 void_list_node = build_tree_list (NULL_TREE, void_type_node);
5962 TREE_PARMLIST (void_list_node) = 1;
5963
5964 null_pointer_node = build_int_2 (0, 0);
5965 TREE_TYPE (null_pointer_node) = build_pointer_type (void_type_node);
5966 layout_type (TREE_TYPE (null_pointer_node));
5967
5968 /* Used for expressions that do nothing, but are not errors. */
5969 void_zero_node = build_int_2 (0, 0);
5970 TREE_TYPE (void_zero_node) = void_type_node;
5971
5972 string_type_node = build_pointer_type (char_type_node);
5973 const_string_type_node
5974 = build_pointer_type (build_qualified_type (char_type_node,
5975 TYPE_QUAL_CONST));
5976 #if 0
5977 record_builtin_type (RID_MAX, NULL_PTR, string_type_node);
5978 #endif
5979
5980 /* Make a type to be the domain of a few array types
5981 whose domains don't really matter.
5982 200 is small enough that it always fits in size_t
5983 and large enough that it can hold most function names for the
5984 initializations of __FUNCTION__ and __PRETTY_FUNCTION__. */
5985 array_domain_type = build_index_type (build_int_2 (200, 0));
5986
5987 /* Make a type for arrays of characters.
5988 With luck nothing will ever really depend on the length of this
5989 array type. */
5990 char_array_type_node
5991 = build_array_type (char_type_node, array_domain_type);
5992 /* Likewise for arrays of ints. */
5993 int_array_type_node
5994 = build_array_type (integer_type_node, array_domain_type);
5995
5996 /* This is just some anonymous class type. Nobody should ever
5997 need to look inside this envelope. */
5998 class_star_type_node = build_pointer_type (make_lang_type (RECORD_TYPE));
5999
6000 default_function_type
6001 = build_function_type (integer_type_node, NULL_TREE);
6002
6003 ptr_type_node = build_pointer_type (void_type_node);
6004 const_ptr_type_node
6005 = build_pointer_type (build_qualified_type (void_type_node,
6006 TYPE_QUAL_CONST));
6007 #if 0
6008 record_builtin_type (RID_MAX, NULL_PTR, ptr_type_node);
6009 #endif
6010 endlink = void_list_node;
6011 int_endlink = tree_cons (NULL_TREE, integer_type_node, endlink);
6012 double_endlink = tree_cons (NULL_TREE, double_type_node, endlink);
6013 unsigned_endlink = tree_cons (NULL_TREE, unsigned_type_node, endlink);
6014
6015 ptr_ftype = build_function_type (ptr_type_node, NULL_TREE);
6016 ptr_ftype_unsigned = build_function_type (ptr_type_node, unsigned_endlink);
6017 sizetype_endlink = tree_cons (NULL_TREE, sizetype, endlink);
6018 /* We realloc here because sizetype could be int or unsigned. S'ok. */
6019 ptr_ftype_sizetype = build_function_type (ptr_type_node, sizetype_endlink);
6020
6021 void_ftype = build_function_type (void_type_node, endlink);
6022 void_ftype_int = build_function_type (void_type_node, int_endlink);
6023 void_ftype_ptr
6024 = build_function_type (void_type_node,
6025 tree_cons (NULL_TREE, ptr_type_node, endlink));
6026 void_ftype_ptr
6027 = build_exception_variant (void_ftype_ptr,
6028 tree_cons (NULL_TREE, NULL_TREE, NULL_TREE));
6029
6030 float_ftype_float
6031 = build_function_type (float_type_node,
6032 tree_cons (NULL_TREE, float_type_node, endlink));
6033
6034 double_ftype_double
6035 = build_function_type (double_type_node, double_endlink);
6036
6037 ldouble_ftype_ldouble
6038 = build_function_type (long_double_type_node,
6039 tree_cons (NULL_TREE, long_double_type_node,
6040 endlink));
6041
6042 double_ftype_double_double
6043 = build_function_type (double_type_node,
6044 tree_cons (NULL_TREE, double_type_node,
6045 double_endlink));
6046
6047 int_ftype_int
6048 = build_function_type (integer_type_node, int_endlink);
6049
6050 long_ftype_long
6051 = build_function_type (long_integer_type_node,
6052 tree_cons (NULL_TREE, long_integer_type_node,
6053 endlink));
6054
6055 int_ftype_cptr_cptr_sizet
6056 = build_function_type (integer_type_node,
6057 tree_cons (NULL_TREE, const_ptr_type_node,
6058 tree_cons (NULL_TREE, const_ptr_type_node,
6059 tree_cons (NULL_TREE,
6060 sizetype,
6061 endlink))));
6062
6063 string_ftype_ptr_ptr /* strcpy prototype */
6064 = build_function_type (string_type_node,
6065 tree_cons (NULL_TREE, string_type_node,
6066 tree_cons (NULL_TREE,
6067 const_string_type_node,
6068 endlink)));
6069
6070 int_ftype_string_string /* strcmp prototype */
6071 = build_function_type (integer_type_node,
6072 tree_cons (NULL_TREE, const_string_type_node,
6073 tree_cons (NULL_TREE,
6074 const_string_type_node,
6075 endlink)));
6076
6077 strlen_ftype /* strlen prototype */
6078 = build_function_type (sizetype,
6079 tree_cons (NULL_TREE, const_string_type_node,
6080 endlink));
6081
6082 memcpy_ftype /* memcpy prototype */
6083 = build_function_type (ptr_type_node,
6084 tree_cons (NULL_TREE, ptr_type_node,
6085 tree_cons (NULL_TREE, const_ptr_type_node,
6086 sizetype_endlink)));
6087
6088 if (flag_huge_objects)
6089 delta_type_node = long_integer_type_node;
6090 else
6091 delta_type_node = short_integer_type_node;
6092
6093 builtin_function ("__builtin_constant_p", default_function_type,
6094 BUILT_IN_CONSTANT_P, NULL_PTR);
6095
6096 builtin_return_address_fndecl
6097 = builtin_function ("__builtin_return_address", ptr_ftype_unsigned,
6098 BUILT_IN_RETURN_ADDRESS, NULL_PTR);
6099
6100 builtin_function ("__builtin_frame_address", ptr_ftype_unsigned,
6101 BUILT_IN_FRAME_ADDRESS, NULL_PTR);
6102
6103 builtin_function ("__builtin_alloca", ptr_ftype_sizetype,
6104 BUILT_IN_ALLOCA, "alloca");
6105 builtin_function ("__builtin_ffs", int_ftype_int, BUILT_IN_FFS, NULL_PTR);
6106 /* Define alloca, ffs as builtins.
6107 Declare _exit just to mark it as volatile. */
6108 if (! flag_no_builtin && !flag_no_nonansi_builtin)
6109 {
6110 temp = builtin_function ("alloca", ptr_ftype_sizetype,
6111 BUILT_IN_ALLOCA, NULL_PTR);
6112 /* Suppress error if redefined as a non-function. */
6113 DECL_BUILT_IN_NONANSI (temp) = 1;
6114 temp = builtin_function ("ffs", int_ftype_int, BUILT_IN_FFS, NULL_PTR);
6115 /* Suppress error if redefined as a non-function. */
6116 DECL_BUILT_IN_NONANSI (temp) = 1;
6117 temp = builtin_function ("_exit", void_ftype_int,
6118 NOT_BUILT_IN, NULL_PTR);
6119 TREE_THIS_VOLATILE (temp) = 1;
6120 TREE_SIDE_EFFECTS (temp) = 1;
6121 /* Suppress error if redefined as a non-function. */
6122 DECL_BUILT_IN_NONANSI (temp) = 1;
6123 }
6124
6125 builtin_function ("__builtin_abs", int_ftype_int, BUILT_IN_ABS, NULL_PTR);
6126 builtin_function ("__builtin_fabsf", float_ftype_float, BUILT_IN_FABS,
6127 NULL_PTR);
6128 builtin_function ("__builtin_fabs", double_ftype_double, BUILT_IN_FABS,
6129 NULL_PTR);
6130 builtin_function ("__builtin_fabsl", ldouble_ftype_ldouble, BUILT_IN_FABS,
6131 NULL_PTR);
6132 builtin_function ("__builtin_labs", long_ftype_long,
6133 BUILT_IN_LABS, NULL_PTR);
6134 builtin_function ("__builtin_saveregs", ptr_ftype,
6135 BUILT_IN_SAVEREGS, NULL_PTR);
6136 builtin_function ("__builtin_classify_type", default_function_type,
6137 BUILT_IN_CLASSIFY_TYPE, NULL_PTR);
6138 builtin_function ("__builtin_next_arg", ptr_ftype,
6139 BUILT_IN_NEXT_ARG, NULL_PTR);
6140 builtin_function ("__builtin_args_info", int_ftype_int,
6141 BUILT_IN_ARGS_INFO, NULL_PTR);
6142 builtin_function ("__builtin_setjmp",
6143 build_function_type (integer_type_node,
6144 tree_cons (NULL_TREE, ptr_type_node,
6145 endlink)),
6146 BUILT_IN_SETJMP, NULL_PTR);
6147 builtin_function ("__builtin_longjmp",
6148 build_function_type (integer_type_node,
6149 tree_cons (NULL_TREE, ptr_type_node,
6150 tree_cons (NULL_TREE,
6151 integer_type_node,
6152 endlink))),
6153 BUILT_IN_LONGJMP, NULL_PTR);
6154
6155 /* Untyped call and return. */
6156 builtin_function ("__builtin_apply_args", ptr_ftype,
6157 BUILT_IN_APPLY_ARGS, NULL_PTR);
6158
6159 temp = tree_cons (NULL_TREE,
6160 build_pointer_type (build_function_type (void_type_node,
6161 NULL_TREE)),
6162 tree_cons (NULL_TREE, ptr_ftype_sizetype, NULL_TREE));
6163 builtin_function ("__builtin_apply",
6164 build_function_type (ptr_type_node, temp),
6165 BUILT_IN_APPLY, NULL_PTR);
6166 builtin_function ("__builtin_return", void_ftype_ptr,
6167 BUILT_IN_RETURN, NULL_PTR);
6168
6169 /* Currently under experimentation. */
6170 builtin_function ("__builtin_memcpy", memcpy_ftype,
6171 BUILT_IN_MEMCPY, "memcpy");
6172 builtin_function ("__builtin_memcmp", int_ftype_cptr_cptr_sizet,
6173 BUILT_IN_MEMCMP, "memcmp");
6174 builtin_function ("__builtin_strcmp", int_ftype_string_string,
6175 BUILT_IN_STRCMP, "strcmp");
6176 builtin_function ("__builtin_strcpy", string_ftype_ptr_ptr,
6177 BUILT_IN_STRCPY, "strcpy");
6178 builtin_function ("__builtin_strlen", strlen_ftype,
6179 BUILT_IN_STRLEN, "strlen");
6180 builtin_function ("__builtin_sqrtf", float_ftype_float,
6181 BUILT_IN_FSQRT, "sqrtf");
6182 builtin_function ("__builtin_fsqrt", double_ftype_double,
6183 BUILT_IN_FSQRT, NULL_PTR);
6184 builtin_function ("__builtin_sqrtl", ldouble_ftype_ldouble,
6185 BUILT_IN_FSQRT, "sqrtl");
6186 builtin_function ("__builtin_sinf", float_ftype_float,
6187 BUILT_IN_SIN, "sinf");
6188 builtin_function ("__builtin_sin", double_ftype_double,
6189 BUILT_IN_SIN, "sin");
6190 builtin_function ("__builtin_sinl", ldouble_ftype_ldouble,
6191 BUILT_IN_SIN, "sinl");
6192 builtin_function ("__builtin_cosf", float_ftype_float,
6193 BUILT_IN_COS, "cosf");
6194 builtin_function ("__builtin_cos", double_ftype_double,
6195 BUILT_IN_COS, "cos");
6196 builtin_function ("__builtin_cosl", ldouble_ftype_ldouble,
6197 BUILT_IN_COS, "cosl");
6198
6199 if (!flag_no_builtin)
6200 {
6201 builtin_function ("abs", int_ftype_int, BUILT_IN_ABS, NULL_PTR);
6202 builtin_function ("fabs", double_ftype_double, BUILT_IN_FABS, NULL_PTR);
6203 builtin_function ("labs", long_ftype_long, BUILT_IN_LABS, NULL_PTR);
6204 builtin_function ("fabsf", float_ftype_float, BUILT_IN_FABS, NULL_PTR);
6205 builtin_function ("fabsl", ldouble_ftype_ldouble, BUILT_IN_FABS,
6206 NULL_PTR);
6207 builtin_function ("memcpy", memcpy_ftype, BUILT_IN_MEMCPY, NULL_PTR);
6208 builtin_function ("memcmp", int_ftype_cptr_cptr_sizet, BUILT_IN_MEMCMP,
6209 NULL_PTR);
6210 builtin_function ("strcmp", int_ftype_string_string, BUILT_IN_STRCMP,
6211 NULL_PTR);
6212 builtin_function ("strcpy", string_ftype_ptr_ptr, BUILT_IN_STRCPY,
6213 NULL_PTR);
6214 builtin_function ("strlen", strlen_ftype, BUILT_IN_STRLEN, NULL_PTR);
6215 builtin_function ("sqrtf", float_ftype_float, BUILT_IN_FSQRT, NULL_PTR);
6216 builtin_function ("sqrt", double_ftype_double, BUILT_IN_FSQRT, NULL_PTR);
6217 builtin_function ("sqrtl", ldouble_ftype_ldouble, BUILT_IN_FSQRT,
6218 NULL_PTR);
6219 builtin_function ("sinf", float_ftype_float, BUILT_IN_SIN, NULL_PTR);
6220 builtin_function ("sin", double_ftype_double, BUILT_IN_SIN, NULL_PTR);
6221 builtin_function ("sinl", ldouble_ftype_ldouble, BUILT_IN_SIN, NULL_PTR);
6222 builtin_function ("cosf", float_ftype_float, BUILT_IN_COS, NULL_PTR);
6223 builtin_function ("cos", double_ftype_double, BUILT_IN_COS, NULL_PTR);
6224 builtin_function ("cosl", ldouble_ftype_ldouble, BUILT_IN_COS, NULL_PTR);
6225
6226 /* Declare these functions volatile
6227 to avoid spurious "control drops through" warnings. */
6228 temp = builtin_function ("abort", void_ftype,
6229 NOT_BUILT_IN, NULL_PTR);
6230 TREE_THIS_VOLATILE (temp) = 1;
6231 TREE_SIDE_EFFECTS (temp) = 1;
6232 /* Well, these are actually ANSI, but we can't set DECL_BUILT_IN on
6233 them... */
6234 DECL_BUILT_IN_NONANSI (temp) = 1;
6235 temp = builtin_function ("exit", void_ftype_int,
6236 NOT_BUILT_IN, NULL_PTR);
6237 TREE_THIS_VOLATILE (temp) = 1;
6238 TREE_SIDE_EFFECTS (temp) = 1;
6239 DECL_BUILT_IN_NONANSI (temp) = 1;
6240 }
6241
6242 #if 0
6243 /* Support for these has not been written in either expand_builtin
6244 or build_function_call. */
6245 builtin_function ("__builtin_div", default_ftype, BUILT_IN_DIV, NULL_PTR);
6246 builtin_function ("__builtin_ldiv", default_ftype, BUILT_IN_LDIV, NULL_PTR);
6247 builtin_function ("__builtin_ffloor", double_ftype_double, BUILT_IN_FFLOOR,
6248 NULL_PTR);
6249 builtin_function ("__builtin_fceil", double_ftype_double, BUILT_IN_FCEIL,
6250 NULL_PTR);
6251 builtin_function ("__builtin_fmod", double_ftype_double_double,
6252 BUILT_IN_FMOD, NULL_PTR);
6253 builtin_function ("__builtin_frem", double_ftype_double_double,
6254 BUILT_IN_FREM, NULL_PTR);
6255 builtin_function ("__builtin_memset", ptr_ftype_ptr_int_int,
6256 BUILT_IN_MEMSET, NULL_PTR);
6257 builtin_function ("__builtin_getexp", double_ftype_double, BUILT_IN_GETEXP,
6258 NULL_PTR);
6259 builtin_function ("__builtin_getman", double_ftype_double, BUILT_IN_GETMAN,
6260 NULL_PTR);
6261 #endif
6262
6263 /* C++ extensions */
6264
6265 unknown_type_node = make_node (UNKNOWN_TYPE);
6266 record_unknown_type (unknown_type_node, "unknown type");
6267
6268 /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node. */
6269 TREE_TYPE (unknown_type_node) = unknown_type_node;
6270
6271 TREE_TYPE (null_node) = type_for_size (POINTER_SIZE, 0);
6272
6273 /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
6274 result. */
6275 TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
6276 TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
6277
6278 /* This is for handling opaque types in signatures. */
6279 opaque_type_node = copy_node (ptr_type_node);
6280 TYPE_MAIN_VARIANT (opaque_type_node) = opaque_type_node;
6281 record_builtin_type (RID_MAX, 0, opaque_type_node);
6282
6283 /* This is special for C++ so functions can be overloaded. */
6284 wchar_type_node
6285 = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (WCHAR_TYPE)));
6286 wchar_type_size = TYPE_PRECISION (wchar_type_node);
6287 signed_wchar_type_node = make_signed_type (wchar_type_size);
6288 unsigned_wchar_type_node = make_unsigned_type (wchar_type_size);
6289 wchar_type_node
6290 = TREE_UNSIGNED (wchar_type_node)
6291 ? unsigned_wchar_type_node
6292 : signed_wchar_type_node;
6293 record_builtin_type (RID_WCHAR, "__wchar_t", wchar_type_node);
6294
6295 /* Artificial declaration of wchar_t -- can be bashed */
6296 wchar_decl_node = build_decl (TYPE_DECL, get_identifier ("wchar_t"),
6297 wchar_type_node);
6298 pushdecl (wchar_decl_node);
6299
6300 /* This is for wide string constants. */
6301 wchar_array_type_node
6302 = build_array_type (wchar_type_node, array_domain_type);
6303
6304 if (flag_vtable_thunks)
6305 {
6306 /* Make sure we get a unique function type, so we can give
6307 its pointer type a name. (This wins for gdb.) */
6308 tree vfunc_type = make_node (FUNCTION_TYPE);
6309 TREE_TYPE (vfunc_type) = integer_type_node;
6310 TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
6311 layout_type (vfunc_type);
6312
6313 vtable_entry_type = build_pointer_type (vfunc_type);
6314 }
6315 else
6316 {
6317 vtable_entry_type = make_lang_type (RECORD_TYPE);
6318 fields[0] = build_lang_field_decl (FIELD_DECL, delta_identifier,
6319 delta_type_node);
6320 fields[1] = build_lang_field_decl (FIELD_DECL, index_identifier,
6321 delta_type_node);
6322 fields[2] = build_lang_field_decl (FIELD_DECL, pfn_identifier,
6323 ptr_type_node);
6324 finish_builtin_type (vtable_entry_type, VTBL_PTR_TYPE, fields, 2,
6325 double_type_node);
6326
6327 /* Make this part of an invisible union. */
6328 fields[3] = copy_node (fields[2]);
6329 TREE_TYPE (fields[3]) = delta_type_node;
6330 DECL_NAME (fields[3]) = delta2_identifier;
6331 DECL_MODE (fields[3]) = TYPE_MODE (delta_type_node);
6332 DECL_SIZE (fields[3]) = TYPE_SIZE (delta_type_node);
6333 TREE_UNSIGNED (fields[3]) = 0;
6334 TREE_CHAIN (fields[2]) = fields[3];
6335 vtable_entry_type = build_qualified_type (vtable_entry_type,
6336 TYPE_QUAL_CONST);
6337 }
6338 record_builtin_type (RID_MAX, VTBL_PTR_TYPE, vtable_entry_type);
6339
6340 vtbl_type_node
6341 = build_cplus_array_type (vtable_entry_type, NULL_TREE);
6342 layout_type (vtbl_type_node);
6343 vtbl_type_node = build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
6344 record_builtin_type (RID_MAX, NULL_PTR, vtbl_type_node);
6345 vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
6346 layout_type (vtbl_ptr_type_node);
6347 record_builtin_type (RID_MAX, NULL_PTR, vtbl_ptr_type_node);
6348
6349 /* Simplify life by making a "sigtable_entry_type". Give its
6350 fields names so that the debugger can use them. */
6351
6352 if (flag_handle_signatures)
6353 {
6354 sigtable_entry_type = make_lang_type (RECORD_TYPE);
6355 fields[0] = build_lang_field_decl (FIELD_DECL, tag_identifier,
6356 delta_type_node);
6357 fields[1] = build_lang_field_decl (FIELD_DECL, vb_off_identifier,
6358 delta_type_node);
6359 fields[2] = build_lang_field_decl (FIELD_DECL, delta_identifier,
6360 delta_type_node);
6361 fields[3] = build_lang_field_decl (FIELD_DECL, index_identifier,
6362 delta_type_node);
6363 fields[4] = build_lang_field_decl (FIELD_DECL, pfn_identifier,
6364 ptr_type_node);
6365
6366 /* Set the alignment to the max of the alignment of ptr_type_node and
6367 delta_type_node. Double alignment wastes a word on the Sparc. */
6368 finish_builtin_type (sigtable_entry_type, SIGTABLE_PTR_TYPE, fields, 4,
6369 (TYPE_ALIGN (ptr_type_node) > TYPE_ALIGN (delta_type_node))
6370 ? ptr_type_node
6371 : delta_type_node);
6372
6373 /* Make this part of an invisible union. */
6374 fields[5] = copy_node (fields[4]);
6375 TREE_TYPE (fields[5]) = delta_type_node;
6376 DECL_NAME (fields[5]) = vt_off_identifier;
6377 DECL_MODE (fields[5]) = TYPE_MODE (delta_type_node);
6378 DECL_SIZE (fields[5]) = TYPE_SIZE (delta_type_node);
6379 TREE_UNSIGNED (fields[5]) = 0;
6380 TREE_CHAIN (fields[4]) = fields[5];
6381
6382 sigtable_entry_type = build_qualified_type (sigtable_entry_type,
6383 TYPE_QUAL_CONST);
6384 record_builtin_type (RID_MAX, SIGTABLE_PTR_TYPE, sigtable_entry_type);
6385 }
6386
6387 std_node = build_decl (NAMESPACE_DECL,
6388 get_identifier (flag_honor_std ? "fake std":"std"),
6389 void_type_node);
6390 pushdecl (std_node);
6391
6392 global_type_node = make_node (LANG_TYPE);
6393 record_unknown_type (global_type_node, "global type");
6394
6395 /* Now, C++. */
6396 current_lang_name = lang_name_cplusplus;
6397
6398 {
6399 tree bad_alloc_type_node, newtype, deltype;
6400 if (flag_honor_std)
6401 push_namespace (get_identifier ("std"));
6402 bad_alloc_type_node = xref_tag
6403 (class_type_node, get_identifier ("bad_alloc"), 1);
6404 if (flag_honor_std)
6405 pop_namespace ();
6406 newtype = build_exception_variant
6407 (ptr_ftype_sizetype, build_tree_list (NULL_TREE, bad_alloc_type_node));
6408 deltype = build_exception_variant
6409 (void_ftype_ptr, build_tree_list (NULL_TREE, NULL_TREE));
6410 auto_function (ansi_opname[(int) NEW_EXPR], newtype, NOT_BUILT_IN);
6411 auto_function (ansi_opname[(int) VEC_NEW_EXPR], newtype, NOT_BUILT_IN);
6412 global_delete_fndecl
6413 = auto_function (ansi_opname[(int) DELETE_EXPR], deltype, NOT_BUILT_IN);
6414 auto_function (ansi_opname[(int) VEC_DELETE_EXPR], deltype, NOT_BUILT_IN);
6415 }
6416
6417 abort_fndecl
6418 = define_function ("__pure_virtual", void_ftype,
6419 NOT_BUILT_IN, 0, 0);
6420
6421 /* Perform other language dependent initializations. */
6422 init_class_processing ();
6423 init_init_processing ();
6424 init_search_processing ();
6425 if (flag_rtti)
6426 init_rtti_processing ();
6427
6428 if (flag_exceptions)
6429 init_exception_processing ();
6430 if (flag_no_inline)
6431 {
6432 flag_inline_functions = 0;
6433 }
6434
6435 if (! supports_one_only ())
6436 flag_weak = 0;
6437
6438 /* Create the global bindings for __FUNCTION__ and __PRETTY_FUNCTION__. */
6439 declare_function_name ();
6440
6441 /* Prepare to check format strings against argument lists. */
6442 init_function_format_info ();
6443
6444 /* Show we use EH for cleanups. */
6445 using_eh_for_cleanups ();
6446
6447 print_error_function = lang_print_error_function;
6448 lang_get_alias_set = &c_get_alias_set;
6449
6450 /* Maintain consistency. Perhaps we should just complain if they
6451 say -fwritable-strings? */
6452 if (flag_writable_strings)
6453 flag_const_strings = 0;
6454 }
6455
6456 /* Function to print any language-specific context for an error message. */
6457
6458 static void
6459 lang_print_error_function (file)
6460 char *file;
6461 {
6462 default_print_error_function (file);
6463 maybe_print_template_context ();
6464 }
6465
6466 /* Make a definition for a builtin function named NAME and whose data type
6467 is TYPE. TYPE should be a function type with argument types.
6468 FUNCTION_CODE tells later passes how to compile calls to this function.
6469 See tree.h for its possible values.
6470
6471 If LIBRARY_NAME is nonzero, use that for DECL_ASSEMBLER_NAME,
6472 the name to be called if we can't opencode the function. */
6473
6474 tree
6475 define_function (name, type, function_code, pfn, library_name)
6476 char *name;
6477 tree type;
6478 enum built_in_function function_code;
6479 void (*pfn) PROTO((tree));
6480 char *library_name;
6481 {
6482 tree decl = build_lang_decl (FUNCTION_DECL, get_identifier (name), type);
6483 DECL_EXTERNAL (decl) = 1;
6484 TREE_PUBLIC (decl) = 1;
6485 DECL_ARTIFICIAL (decl) = 1;
6486
6487 my_friendly_assert (DECL_CONTEXT (decl) == NULL_TREE, 392);
6488 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
6489
6490 /* Since `pushdecl' relies on DECL_ASSEMBLER_NAME instead of DECL_NAME,
6491 we cannot change DECL_ASSEMBLER_NAME until we have installed this
6492 function in the namespace. */
6493 if (pfn) (*pfn) (decl);
6494 if (library_name)
6495 DECL_ASSEMBLER_NAME (decl) = get_identifier (library_name);
6496 make_function_rtl (decl);
6497 if (function_code != NOT_BUILT_IN)
6498 {
6499 DECL_BUILT_IN (decl) = 1;
6500 DECL_FUNCTION_CODE (decl) = function_code;
6501 }
6502 return decl;
6503 }
6504 \f
6505 /* When we call finish_struct for an anonymous union, we create
6506 default copy constructors and such. But, an anonymous union
6507 shouldn't have such things; this function undoes the damage to the
6508 anonymous union type T.
6509
6510 (The reason that we create the synthesized methods is that we don't
6511 distinguish `union { int i; }' from `typedef union { int i; } U'.
6512 The first is an anonymous union; the second is just an ordinary
6513 union type.) */
6514
6515 void
6516 fixup_anonymous_union (t)
6517 tree t;
6518 {
6519 tree *q;
6520
6521 /* Wipe out memory of synthesized methods */
6522 TYPE_HAS_CONSTRUCTOR (t) = 0;
6523 TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
6524 TYPE_HAS_INIT_REF (t) = 0;
6525 TYPE_HAS_CONST_INIT_REF (t) = 0;
6526 TYPE_HAS_ASSIGN_REF (t) = 0;
6527 TYPE_HAS_ASSIGNMENT (t) = 0;
6528 TYPE_HAS_CONST_ASSIGN_REF (t) = 0;
6529
6530 /* Splice the implicitly generated functions out of the TYPE_METHODS
6531 list. */
6532 q = &TYPE_METHODS (t);
6533 while (*q)
6534 {
6535 if (DECL_ARTIFICIAL (*q))
6536 *q = TREE_CHAIN (*q);
6537 else
6538 q = &TREE_CHAIN (*q);
6539 }
6540
6541 /* ANSI C++ June 5 1992 WP 9.5.3. Anonymous unions may not have
6542 function members. */
6543 if (TYPE_METHODS (t))
6544 error ("an anonymous union cannot have function members");
6545 }
6546
6547 /* Make sure that a declaration with no declarator is well-formed, i.e.
6548 just defines a tagged type or anonymous union.
6549
6550 Returns the type defined, if any. */
6551
6552 tree
6553 check_tag_decl (declspecs)
6554 tree declspecs;
6555 {
6556 int found_type = 0;
6557 tree ob_modifier = NULL_TREE;
6558 register tree link;
6559 register tree t = NULL_TREE;
6560
6561 for (link = declspecs; link; link = TREE_CHAIN (link))
6562 {
6563 register tree value = TREE_VALUE (link);
6564
6565 if (TYPE_P (value))
6566 {
6567 ++found_type;
6568
6569 if (IS_AGGR_TYPE (value) || TREE_CODE (value) == ENUMERAL_TYPE)
6570 {
6571 my_friendly_assert (TYPE_MAIN_DECL (value) != NULL_TREE, 261);
6572 t = value;
6573 }
6574 }
6575 else if (value == ridpointers[(int) RID_FRIEND])
6576 {
6577 if (current_class_type == NULL_TREE
6578 || current_scope () != current_class_type)
6579 ob_modifier = value;
6580 }
6581 else if (value == ridpointers[(int) RID_STATIC]
6582 || value == ridpointers[(int) RID_EXTERN]
6583 || value == ridpointers[(int) RID_AUTO]
6584 || value == ridpointers[(int) RID_REGISTER]
6585 || value == ridpointers[(int) RID_INLINE]
6586 || value == ridpointers[(int) RID_VIRTUAL]
6587 || value == ridpointers[(int) RID_CONST]
6588 || value == ridpointers[(int) RID_VOLATILE]
6589 || value == ridpointers[(int) RID_EXPLICIT])
6590 ob_modifier = value;
6591 }
6592
6593 if (found_type > 1)
6594 error ("multiple types in one declaration");
6595
6596 /* Inside a class, we might be in a friend or access declaration.
6597 Until we have a good way of detecting the latter, don't warn. */
6598 if (t == NULL_TREE && ! current_class_type)
6599 pedwarn ("declaration does not declare anything");
6600 else if (t && ANON_UNION_TYPE_P (t))
6601 /* Anonymous unions are objects, so they can have specifiers. */;
6602 else if (ob_modifier)
6603 {
6604 if (ob_modifier == ridpointers[(int) RID_INLINE]
6605 || ob_modifier == ridpointers[(int) RID_VIRTUAL])
6606 cp_error ("`%D' can only be specified for functions", ob_modifier);
6607 else if (ob_modifier == ridpointers[(int) RID_FRIEND])
6608 cp_error ("`%D' can only be specified inside a class", ob_modifier);
6609 else if (ob_modifier == ridpointers[(int) RID_EXPLICIT])
6610 cp_error ("`%D' can only be specified for constructors",
6611 ob_modifier);
6612 else
6613 cp_error ("`%D' can only be specified for objects and functions",
6614 ob_modifier);
6615 }
6616
6617 return t;
6618 }
6619
6620 /* Called when a declaration is seen that contains no names to declare.
6621 If its type is a reference to a structure, union or enum inherited
6622 from a containing scope, shadow that tag name for the current scope
6623 with a forward reference.
6624 If its type defines a new named structure or union
6625 or defines an enum, it is valid but we need not do anything here.
6626 Otherwise, it is an error.
6627
6628 C++: may have to grok the declspecs to learn about static,
6629 complain for anonymous unions. */
6630
6631 void
6632 shadow_tag (declspecs)
6633 tree declspecs;
6634 {
6635 tree t = check_tag_decl (declspecs);
6636
6637 if (t)
6638 maybe_process_partial_specialization (t);
6639
6640 /* This is where the variables in an anonymous union are
6641 declared. An anonymous union declaration looks like:
6642 union { ... } ;
6643 because there is no declarator after the union, the parser
6644 sends that declaration here. */
6645 if (t && ANON_UNION_TYPE_P (t))
6646 {
6647 fixup_anonymous_union (t);
6648
6649 if (TYPE_FIELDS (t))
6650 {
6651 tree decl = grokdeclarator (NULL_TREE, declspecs, NORMAL, 0,
6652 NULL_TREE);
6653 finish_anon_union (decl);
6654 }
6655 }
6656 }
6657 \f
6658 /* Decode a "typename", such as "int **", returning a ..._TYPE node. */
6659
6660 tree
6661 groktypename (typename)
6662 tree typename;
6663 {
6664 if (TREE_CODE (typename) != TREE_LIST)
6665 return typename;
6666 return grokdeclarator (TREE_VALUE (typename),
6667 TREE_PURPOSE (typename),
6668 TYPENAME, 0, NULL_TREE);
6669 }
6670
6671 /* Decode a declarator in an ordinary declaration or data definition.
6672 This is called as soon as the type information and variable name
6673 have been parsed, before parsing the initializer if any.
6674 Here we create the ..._DECL node, fill in its type,
6675 and put it on the list of decls for the current context.
6676 The ..._DECL node is returned as the value.
6677
6678 Exception: for arrays where the length is not specified,
6679 the type is left null, to be filled in by `cp_finish_decl'.
6680
6681 Function definitions do not come here; they go to start_function
6682 instead. However, external and forward declarations of functions
6683 do go through here. Structure field declarations are done by
6684 grokfield and not through here. */
6685
6686 /* Set this to zero to debug not using the temporary obstack
6687 to parse initializers. */
6688 int debug_temp_inits = 1;
6689
6690 tree
6691 start_decl (declarator, declspecs, initialized, attributes, prefix_attributes)
6692 tree declarator, declspecs;
6693 int initialized;
6694 tree attributes, prefix_attributes;
6695 {
6696 register tree decl;
6697 register tree type, tem;
6698 tree context;
6699 extern int have_extern_spec;
6700 extern int used_extern_spec;
6701
6702 #if 0
6703 /* See code below that used this. */
6704 int init_written = initialized;
6705 #endif
6706
6707 /* This should only be done once on the top most decl. */
6708 if (have_extern_spec && !used_extern_spec)
6709 {
6710 declspecs = decl_tree_cons (NULL_TREE, get_identifier ("extern"),
6711 declspecs);
6712 used_extern_spec = 1;
6713 }
6714
6715 decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
6716 NULL_TREE);
6717 if (decl == NULL_TREE || TREE_CODE (decl) == VOID_TYPE)
6718 return NULL_TREE;
6719
6720 type = TREE_TYPE (decl);
6721
6722 /* Don't lose if destructors must be executed at file-level. */
6723 if (! processing_template_decl && TREE_STATIC (decl)
6724 && TYPE_NEEDS_DESTRUCTOR (complete_type (type))
6725 && !TREE_PERMANENT (decl))
6726 {
6727 push_obstacks (&permanent_obstack, &permanent_obstack);
6728 decl = copy_node (decl);
6729 if (TREE_CODE (type) == ARRAY_TYPE)
6730 {
6731 tree itype = TYPE_DOMAIN (type);
6732 if (itype && ! TREE_PERMANENT (itype))
6733 {
6734 itype = build_index_type (copy_to_permanent (TYPE_MAX_VALUE (itype)));
6735 type = build_cplus_array_type (TREE_TYPE (type), itype);
6736 TREE_TYPE (decl) = type;
6737 }
6738 }
6739 pop_obstacks ();
6740 }
6741
6742 context
6743 = (TREE_CODE (decl) == FUNCTION_DECL && DECL_VIRTUAL_P (decl))
6744 ? DECL_CLASS_CONTEXT (decl)
6745 : DECL_CONTEXT (decl);
6746
6747 if (initialized && context && TREE_CODE (context) == NAMESPACE_DECL
6748 && context != current_namespace && TREE_CODE (decl) == VAR_DECL)
6749 {
6750 /* When parsing the initializer, lookup should use the object's
6751 namespace. */
6752 push_decl_namespace (context);
6753 }
6754
6755 /* We are only interested in class contexts, later. */
6756 if (context && TREE_CODE (context) == NAMESPACE_DECL)
6757 context = NULL_TREE;
6758
6759 if (initialized)
6760 /* Is it valid for this decl to have an initializer at all?
6761 If not, set INITIALIZED to zero, which will indirectly
6762 tell `cp_finish_decl' to ignore the initializer once it is parsed. */
6763 switch (TREE_CODE (decl))
6764 {
6765 case TYPE_DECL:
6766 /* typedef foo = bar means give foo the same type as bar.
6767 We haven't parsed bar yet, so `cp_finish_decl' will fix that up.
6768 Any other case of an initialization in a TYPE_DECL is an error. */
6769 if (pedantic || list_length (declspecs) > 1)
6770 {
6771 cp_error ("typedef `%D' is initialized", decl);
6772 initialized = 0;
6773 }
6774 break;
6775
6776 case FUNCTION_DECL:
6777 cp_error ("function `%#D' is initialized like a variable", decl);
6778 initialized = 0;
6779 break;
6780
6781 default:
6782 if (! processing_template_decl)
6783 {
6784 if (type != error_mark_node)
6785 {
6786 if (TYPE_SIZE (type) != NULL_TREE
6787 && ! TREE_CONSTANT (TYPE_SIZE (type)))
6788 {
6789 cp_error
6790 ("variable-sized object `%D' may not be initialized",
6791 decl);
6792 initialized = 0;
6793 }
6794
6795 if (TREE_CODE (type) == ARRAY_TYPE
6796 && TYPE_SIZE (complete_type (TREE_TYPE (type))) == NULL_TREE)
6797 {
6798 cp_error
6799 ("elements of array `%#D' have incomplete type", decl);
6800 initialized = 0;
6801 }
6802 }
6803 }
6804 }
6805
6806 if (initialized)
6807 {
6808 if (! toplevel_bindings_p ()
6809 && DECL_EXTERNAL (decl))
6810 cp_warning ("declaration of `%#D' has `extern' and is initialized",
6811 decl);
6812 DECL_EXTERNAL (decl) = 0;
6813 if (toplevel_bindings_p ())
6814 TREE_STATIC (decl) = 1;
6815
6816 /* Tell `pushdecl' this is an initialized decl
6817 even though we don't yet have the initializer expression.
6818 Also tell `cp_finish_decl' it may store the real initializer. */
6819 DECL_INITIAL (decl) = error_mark_node;
6820 }
6821
6822 if (context && TYPE_SIZE (complete_type (context)) != NULL_TREE)
6823 {
6824 pushclass (context, 2);
6825
6826 if (TREE_CODE (decl) == VAR_DECL)
6827 {
6828 tree field = lookup_field (context, DECL_NAME (decl), 0, 0);
6829 if (field == NULL_TREE || TREE_CODE (field) != VAR_DECL)
6830 cp_error ("`%#D' is not a static member of `%#T'", decl, context);
6831 else
6832 {
6833 if (DECL_CONTEXT (field) != context)
6834 {
6835 cp_pedwarn ("ANSI C++ does not permit `%T::%D' to be defined as `%T::%D'",
6836 DECL_CONTEXT (field), DECL_NAME (decl),
6837 context, DECL_NAME (decl));
6838 DECL_CONTEXT (decl) = DECL_CONTEXT (field);
6839 }
6840 /* Static data member are tricky; an in-class initialization
6841 still doesn't provide a definition, so the in-class
6842 declaration will have DECL_EXTERNAL set, but will have an
6843 initialization. Thus, duplicate_decls won't warn
6844 about this situation, and so we check here. */
6845 if (DECL_INITIAL (decl) && DECL_INITIAL (field))
6846 cp_error ("duplicate initialization of %D", decl);
6847 if (duplicate_decls (decl, field))
6848 decl = field;
6849 }
6850 }
6851 else
6852 {
6853 tree field = check_classfn (context, decl);
6854 if (field && duplicate_decls (decl, field))
6855 decl = field;
6856 }
6857
6858 /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set. */
6859 DECL_IN_AGGR_P (decl) = 0;
6860 if ((DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl))
6861 || CLASSTYPE_USE_TEMPLATE (context))
6862 {
6863 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
6864 /* [temp.expl.spec] An explicit specialization of a static data
6865 member of a template is a definition if the declaration
6866 includes an initializer; otherwise, it is a declaration.
6867
6868 We check for processing_specialization so this only applies
6869 to the new specialization syntax. */
6870 if (DECL_INITIAL (decl) == NULL_TREE && processing_specialization)
6871 DECL_EXTERNAL (decl) = 1;
6872 }
6873
6874 if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl))
6875 cp_pedwarn ("declaration of `%#D' outside of class is not definition",
6876 decl);
6877 }
6878
6879 #ifdef SET_DEFAULT_DECL_ATTRIBUTES
6880 SET_DEFAULT_DECL_ATTRIBUTES (decl, attributes);
6881 #endif
6882
6883 /* Set attributes here so if duplicate decl, will have proper attributes. */
6884 cplus_decl_attributes (decl, attributes, prefix_attributes);
6885
6886 /* Add this decl to the current binding level, but not if it
6887 comes from another scope, e.g. a static member variable.
6888 TEM may equal DECL or it may be a previous decl of the same name. */
6889
6890 if ((TREE_CODE (decl) != PARM_DECL && DECL_CONTEXT (decl) != NULL_TREE
6891 /* Definitions of namespace members outside their namespace are
6892 possible. */
6893 && TREE_CODE (DECL_CONTEXT (decl)) != NAMESPACE_DECL)
6894 || (TREE_CODE (decl) == TEMPLATE_DECL && !namespace_bindings_p ())
6895 || TREE_CODE (type) == LANG_TYPE
6896 /* The declaration of template specializations does not affect
6897 the functions available for overload resolution, so we do not
6898 call pushdecl. */
6899 || (TREE_CODE (decl) == FUNCTION_DECL
6900 && DECL_TEMPLATE_SPECIALIZATION (decl)))
6901 tem = decl;
6902 else
6903 tem = pushdecl (decl);
6904
6905 if (processing_template_decl)
6906 {
6907 if (! current_function_decl)
6908 tem = push_template_decl (tem);
6909 else if (minimal_parse_mode)
6910 DECL_VINDEX (tem)
6911 = build_min_nt (DECL_STMT, copy_to_permanent (declarator),
6912 copy_to_permanent (declspecs),
6913 NULL_TREE);
6914 }
6915
6916
6917 #if ! defined (ASM_OUTPUT_BSS) && ! defined (ASM_OUTPUT_ALIGNED_BSS)
6918 /* Tell the back-end to use or not use .common as appropriate. If we say
6919 -fconserve-space, we want this to save .data space, at the expense of
6920 wrong semantics. If we say -fno-conserve-space, we want this to
6921 produce errors about redefs; to do this we force variables into the
6922 data segment. */
6923 DECL_COMMON (tem) = flag_conserve_space || ! TREE_PUBLIC (tem);
6924 #endif
6925
6926 if (! processing_template_decl)
6927 start_decl_1 (tem);
6928
6929 /* Corresponding pop_obstacks is done in `cp_finish_decl'. */
6930 push_obstacks_nochange ();
6931
6932 #if 0
6933 /* We have no way of knowing whether the initializer will need to be
6934 evaluated at run-time or not until we've parsed it, so let's just put
6935 it in the permanent obstack. (jason) */
6936 if (init_written
6937 && ! (TREE_CODE (tem) == PARM_DECL
6938 || (TREE_READONLY (tem)
6939 && (TREE_CODE (tem) == VAR_DECL
6940 || TREE_CODE (tem) == FIELD_DECL))))
6941 {
6942 /* When parsing and digesting the initializer,
6943 use temporary storage. Do this even if we will ignore the value. */
6944 if (toplevel_bindings_p () && debug_temp_inits)
6945 {
6946 if (processing_template_decl
6947 || TYPE_NEEDS_CONSTRUCTING (type)
6948 || TREE_CODE (type) == REFERENCE_TYPE)
6949 /* In this case, the initializer must lay down in permanent
6950 storage, since it will be saved until `finish_file' is run. */
6951 ;
6952 else
6953 temporary_allocation ();
6954 }
6955 }
6956 #endif
6957
6958 return tem;
6959 }
6960
6961 void
6962 start_decl_1 (decl)
6963 tree decl;
6964 {
6965 tree type = TREE_TYPE (decl);
6966 int initialized = (DECL_INITIAL (decl) != NULL_TREE);
6967
6968 /* If this type of object needs a cleanup, and control may
6969 jump past it, make a new binding level so that it is cleaned
6970 up only when it is initialized first. */
6971 if (TYPE_NEEDS_DESTRUCTOR (type)
6972 && current_binding_level->more_cleanups_ok == 0)
6973 pushlevel_temporary (1);
6974
6975 if (initialized)
6976 /* Is it valid for this decl to have an initializer at all?
6977 If not, set INITIALIZED to zero, which will indirectly
6978 tell `cp_finish_decl' to ignore the initializer once it is parsed. */
6979 {
6980 /* Don't allow initializations for incomplete types except for
6981 arrays which might be completed by the initialization. */
6982 if (type == error_mark_node)
6983 ; /* Don't complain again. */
6984 else if (TYPE_SIZE (complete_type (type)) != NULL_TREE)
6985 ; /* A complete type is ok. */
6986 else if (TREE_CODE (type) != ARRAY_TYPE)
6987 {
6988 cp_error ("variable `%#D' has initializer but incomplete type",
6989 decl);
6990 initialized = 0;
6991 type = TREE_TYPE (decl) = error_mark_node;
6992 }
6993 else if (TYPE_SIZE (complete_type (TREE_TYPE (type))) == NULL_TREE)
6994 {
6995 if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
6996 cp_error ("elements of array `%#D' have incomplete type", decl);
6997 /* else we already gave an error in start_decl. */
6998 initialized = 0;
6999 }
7000 }
7001
7002 if (!initialized
7003 && TREE_CODE (decl) != TYPE_DECL
7004 && TREE_CODE (decl) != TEMPLATE_DECL
7005 && IS_AGGR_TYPE (type) && ! DECL_EXTERNAL (decl))
7006 {
7007 if ((! processing_template_decl || ! uses_template_parms (type))
7008 && TYPE_SIZE (complete_type (type)) == NULL_TREE)
7009 {
7010 cp_error ("aggregate `%#D' has incomplete type and cannot be initialized",
7011 decl);
7012 /* Change the type so that assemble_variable will give
7013 DECL an rtl we can live with: (mem (const_int 0)). */
7014 type = TREE_TYPE (decl) = error_mark_node;
7015 }
7016 else
7017 {
7018 /* If any base type in the hierarchy of TYPE needs a constructor,
7019 then we set initialized to 1. This way any nodes which are
7020 created for the purposes of initializing this aggregate
7021 will live as long as it does. This is necessary for global
7022 aggregates which do not have their initializers processed until
7023 the end of the file. */
7024 initialized = TYPE_NEEDS_CONSTRUCTING (type);
7025 }
7026 }
7027
7028 #if 0
7029 /* We don't do this yet for GNU C++. */
7030 /* For a local variable, define the RTL now. */
7031 if (! toplevel_bindings_p ()
7032 /* But not if this is a duplicate decl
7033 and we preserved the rtl from the previous one
7034 (which may or may not happen). */
7035 && DECL_RTL (tem) == NULL_RTX)
7036 {
7037 if (TYPE_SIZE (TREE_TYPE (tem)) != NULL_TREE)
7038 expand_decl (tem);
7039 else if (TREE_CODE (TREE_TYPE (tem)) == ARRAY_TYPE
7040 && DECL_INITIAL (tem) != NULL_TREE)
7041 expand_decl (tem);
7042 }
7043 #endif
7044
7045 if (! initialized)
7046 DECL_INITIAL (decl) = NULL_TREE;
7047 }
7048
7049 /* Handle initialization of references.
7050 These three arguments are from `cp_finish_decl', and have the
7051 same meaning here that they do there.
7052
7053 Quotes on semantics can be found in ARM 8.4.3. */
7054
7055 static void
7056 grok_reference_init (decl, type, init)
7057 tree decl, type, init;
7058 {
7059 tree tmp;
7060
7061 if (init == NULL_TREE)
7062 {
7063 if ((DECL_LANG_SPECIFIC (decl) == 0
7064 || DECL_IN_AGGR_P (decl) == 0)
7065 && ! DECL_THIS_EXTERN (decl))
7066 {
7067 cp_error ("`%D' declared as reference but not initialized", decl);
7068 if (TREE_CODE (decl) == VAR_DECL)
7069 SET_DECL_REFERENCE_SLOT (decl, error_mark_node);
7070 }
7071 return;
7072 }
7073
7074 if (init == error_mark_node)
7075 return;
7076
7077 if (TREE_CODE (type) == REFERENCE_TYPE
7078 && TREE_CODE (init) == CONSTRUCTOR)
7079 {
7080 cp_error ("ANSI C++ forbids use of initializer list to initialize reference `%D'", decl);
7081 return;
7082 }
7083
7084 if (TREE_CODE (init) == TREE_LIST)
7085 init = build_compound_expr (init);
7086
7087 if (TREE_CODE (TREE_TYPE (init)) == REFERENCE_TYPE)
7088 init = convert_from_reference (init);
7089
7090 if (TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE
7091 && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
7092 {
7093 /* Note: default conversion is only called in very special cases. */
7094 init = default_conversion (init);
7095 }
7096
7097 tmp = convert_to_reference
7098 (type, init, CONV_IMPLICIT,
7099 LOOKUP_SPECULATIVELY|LOOKUP_NORMAL|DIRECT_BIND, decl);
7100
7101 if (tmp == error_mark_node)
7102 goto fail;
7103 else if (tmp != NULL_TREE)
7104 {
7105 init = tmp;
7106 DECL_INITIAL (decl) = save_expr (init);
7107 }
7108 else
7109 {
7110 cp_error ("cannot initialize `%T' from `%T'", type, TREE_TYPE (init));
7111 goto fail;
7112 }
7113
7114 /* ?? Can this be optimized in some cases to
7115 hand back the DECL_INITIAL slot?? */
7116 if (TYPE_SIZE (TREE_TYPE (type)))
7117 {
7118 init = convert_from_reference (decl);
7119 if (TREE_PERMANENT (decl))
7120 init = copy_to_permanent (init);
7121 SET_DECL_REFERENCE_SLOT (decl, init);
7122 }
7123
7124 if (TREE_STATIC (decl) && ! TREE_CONSTANT (DECL_INITIAL (decl)))
7125 {
7126 expand_static_init (decl, DECL_INITIAL (decl));
7127 DECL_INITIAL (decl) = NULL_TREE;
7128 }
7129 return;
7130
7131 fail:
7132 if (TREE_CODE (decl) == VAR_DECL)
7133 SET_DECL_REFERENCE_SLOT (decl, error_mark_node);
7134 return;
7135 }
7136
7137 /* Fill in DECL_INITIAL with some magical value to prevent expand_decl from
7138 mucking with forces it does not comprehend (i.e. initialization with a
7139 constructor). If we are at global scope and won't go into COMMON, fill
7140 it in with a dummy CONSTRUCTOR to force the variable into .data;
7141 otherwise we can use error_mark_node. */
7142
7143 static tree
7144 obscure_complex_init (decl, init)
7145 tree decl, init;
7146 {
7147 if (! flag_no_inline && TREE_STATIC (decl))
7148 {
7149 if (extract_init (decl, init))
7150 return NULL_TREE;
7151 }
7152
7153 #if ! defined (ASM_OUTPUT_BSS) && ! defined (ASM_OUTPUT_ALIGNED_BSS)
7154 if (toplevel_bindings_p () && ! DECL_COMMON (decl))
7155 DECL_INITIAL (decl) = build (CONSTRUCTOR, TREE_TYPE (decl), NULL_TREE,
7156 NULL_TREE);
7157 else
7158 #endif
7159 DECL_INITIAL (decl) = error_mark_node;
7160
7161 return init;
7162 }
7163
7164 /* Issue an error message if DECL is an uninitialized const variable. */
7165
7166 static void
7167 check_for_uninitialized_const_var (decl)
7168 tree decl;
7169 {
7170 tree type = TREE_TYPE (decl);
7171
7172 /* ``Unless explicitly declared extern, a const object does not have
7173 external linkage and must be initialized. ($8.4; $12.1)'' ARM
7174 7.1.6 */
7175 if (TREE_CODE (decl) == VAR_DECL
7176 && TREE_CODE (type) != REFERENCE_TYPE
7177 && CP_TYPE_CONST_P (type)
7178 && !TYPE_NEEDS_CONSTRUCTING (type)
7179 && !DECL_INITIAL (decl))
7180 cp_error ("uninitialized const `%D'", decl);
7181 }
7182
7183 /* Finish processing of a declaration;
7184 install its line number and initial value.
7185 If the length of an array type is not known before,
7186 it must be determined now, from the initial value, or it is an error.
7187
7188 Call `pop_obstacks' iff NEED_POP is nonzero.
7189
7190 For C++, `cp_finish_decl' must be fairly evasive: it must keep initializers
7191 for aggregates that have constructors alive on the permanent obstack,
7192 so that the global initializing functions can be written at the end.
7193
7194 INIT0 holds the value of an initializer that should be allowed to escape
7195 the normal rules.
7196
7197 FLAGS is LOOKUP_ONLYCONVERTING is the = init syntax was used, else 0
7198 if the (init) syntax was used.
7199
7200 For functions that take default parameters, DECL points to its
7201 "maximal" instantiation. `cp_finish_decl' must then also declared its
7202 subsequently lower and lower forms of instantiation, checking for
7203 ambiguity as it goes. This can be sped up later. */
7204
7205 void
7206 cp_finish_decl (decl, init, asmspec_tree, need_pop, flags)
7207 tree decl, init;
7208 tree asmspec_tree;
7209 int need_pop;
7210 int flags;
7211 {
7212 register tree type;
7213 tree cleanup = NULL_TREE, ttype = NULL_TREE;
7214 int was_incomplete;
7215 int temporary = allocation_temporary_p ();
7216 char *asmspec = NULL;
7217 int was_readonly = 0;
7218 int already_used = 0;
7219
7220 /* If this is 0, then we did not change obstacks. */
7221 if (! decl)
7222 {
7223 if (init)
7224 error ("assignment (not initialization) in declaration");
7225 return;
7226 }
7227
7228 /* If a name was specified, get the string. */
7229 if (asmspec_tree)
7230 asmspec = TREE_STRING_POINTER (asmspec_tree);
7231
7232 if (init && TREE_CODE (init) == NAMESPACE_DECL)
7233 {
7234 cp_error ("Cannot initialize `%D' to namespace `%D'",
7235 decl, init);
7236 init = NULL_TREE;
7237 }
7238
7239 if (current_class_type
7240 && DECL_REAL_CONTEXT (decl) == current_class_type
7241 && TYPE_BEING_DEFINED (current_class_type)
7242 && (DECL_INITIAL (decl) || init))
7243 DECL_DEFINED_IN_CLASS_P (decl) = 1;
7244
7245 if (TREE_CODE (decl) == VAR_DECL
7246 && DECL_CONTEXT (decl)
7247 && TREE_CODE (DECL_CONTEXT (decl)) == NAMESPACE_DECL
7248 && DECL_CONTEXT (decl) != current_namespace
7249 && init)
7250 {
7251 /* Leave the namespace of the object. */
7252 pop_decl_namespace ();
7253 }
7254
7255 /* If the type of the thing we are declaring either has
7256 a constructor, or has a virtual function table pointer,
7257 AND its initialization was accepted by `start_decl',
7258 then we stayed on the permanent obstack through the
7259 declaration, otherwise, changed obstacks as GCC would. */
7260
7261 type = TREE_TYPE (decl);
7262
7263 if (type == error_mark_node)
7264 {
7265 if (toplevel_bindings_p () && temporary)
7266 end_temporary_allocation ();
7267
7268 return;
7269 }
7270
7271 if (processing_template_decl)
7272 {
7273 if (init && DECL_INITIAL (decl))
7274 DECL_INITIAL (decl) = init;
7275 if (minimal_parse_mode && ! DECL_ARTIFICIAL (decl))
7276 {
7277 tree stmt = DECL_VINDEX (decl);
7278 /* If the decl is declaring a member of a local class (in a
7279 template function), the DECL_VINDEX will either be NULL,
7280 or it will be an actual virtual function index, not a
7281 DECL_STMT. */
7282 if (stmt != NULL_TREE && TREE_CODE (stmt) == DECL_STMT)
7283 {
7284 DECL_VINDEX (decl) = NULL_TREE;
7285 TREE_OPERAND (stmt, 2) = copy_to_permanent (init);
7286 add_tree (stmt);
7287 }
7288 }
7289
7290 goto finish_end0;
7291 }
7292 /* Take care of TYPE_DECLs up front. */
7293 if (TREE_CODE (decl) == TYPE_DECL)
7294 {
7295 if (init && DECL_INITIAL (decl))
7296 {
7297 /* typedef foo = bar; store the type of bar as the type of foo. */
7298 TREE_TYPE (decl) = type = TREE_TYPE (init);
7299 DECL_INITIAL (decl) = init = NULL_TREE;
7300 }
7301 if (type != error_mark_node
7302 && IS_AGGR_TYPE (type) && DECL_NAME (decl))
7303 {
7304 if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
7305 cp_warning ("shadowing previous type declaration of `%#D'", decl);
7306 set_identifier_type_value (DECL_NAME (decl), type);
7307 CLASSTYPE_GOT_SEMICOLON (type) = 1;
7308 }
7309 GNU_xref_decl (current_function_decl, decl);
7310
7311 /* If we have installed this as the canonical typedef for this
7312 type, and that type has not been defined yet, delay emitting
7313 the debug information for it, as we will emit it later. */
7314 if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
7315 && TYPE_SIZE (TREE_TYPE (decl)) == NULL_TREE)
7316 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
7317
7318 rest_of_decl_compilation (decl, NULL_PTR,
7319 DECL_CONTEXT (decl) == NULL_TREE, at_eof);
7320 goto finish_end;
7321 }
7322 if (TREE_CODE (decl) != FUNCTION_DECL)
7323 {
7324 ttype = target_type (type);
7325 }
7326
7327 if (! DECL_EXTERNAL (decl) && TREE_READONLY (decl)
7328 && TYPE_NEEDS_CONSTRUCTING (type))
7329 {
7330
7331 /* Currently, GNU C++ puts constants in text space, making them
7332 impossible to initialize. In the future, one would hope for
7333 an operating system which understood the difference between
7334 initialization and the running of a program. */
7335 was_readonly = 1;
7336 TREE_READONLY (decl) = 0;
7337 }
7338
7339 if (TREE_CODE (decl) == FIELD_DECL)
7340 {
7341 if (init && init != error_mark_node)
7342 my_friendly_assert (TREE_PERMANENT (init), 147);
7343
7344 if (asmspec)
7345 {
7346 /* This must override the asm specifier which was placed
7347 by grokclassfn. Lay this out fresh. */
7348 DECL_RTL (TREE_TYPE (decl)) = NULL_RTX;
7349 DECL_ASSEMBLER_NAME (decl) = get_identifier (asmspec);
7350 make_decl_rtl (decl, asmspec, 0);
7351 }
7352 }
7353 /* If `start_decl' didn't like having an initialization, ignore it now. */
7354 else if (init != NULL_TREE && DECL_INITIAL (decl) == NULL_TREE)
7355 init = NULL_TREE;
7356 else if (DECL_EXTERNAL (decl))
7357 ;
7358 else if (TREE_CODE (type) == REFERENCE_TYPE
7359 || (TYPE_LANG_SPECIFIC (type) && IS_SIGNATURE_REFERENCE (type)))
7360 {
7361 if (TREE_STATIC (decl))
7362 make_decl_rtl (decl, NULL_PTR,
7363 toplevel_bindings_p ()
7364 || pseudo_global_level_p ());
7365 grok_reference_init (decl, type, init);
7366 init = NULL_TREE;
7367 }
7368
7369 GNU_xref_decl (current_function_decl, decl);
7370
7371 if (TREE_CODE (decl) == FIELD_DECL)
7372 ;
7373 else if (TREE_CODE (decl) == CONST_DECL)
7374 {
7375 my_friendly_assert (TREE_CODE (decl) != REFERENCE_TYPE, 148);
7376
7377 DECL_INITIAL (decl) = init;
7378
7379 /* This will keep us from needing to worry about our obstacks. */
7380 my_friendly_assert (init != NULL_TREE, 149);
7381 init = NULL_TREE;
7382 }
7383 else if (init)
7384 {
7385 if (TYPE_HAS_CONSTRUCTOR (type) || TYPE_NEEDS_CONSTRUCTING (type))
7386 {
7387 if (TREE_CODE (type) == ARRAY_TYPE)
7388 init = digest_init (type, init, (tree *) 0);
7389 else if (TREE_CODE (init) == CONSTRUCTOR
7390 && TREE_HAS_CONSTRUCTOR (init))
7391 {
7392 if (TYPE_NON_AGGREGATE_CLASS (type))
7393 {
7394 cp_error ("`%D' must be initialized by constructor, not by `{...}'",
7395 decl);
7396 init = error_mark_node;
7397 }
7398 else
7399 goto dont_use_constructor;
7400 }
7401 }
7402 else
7403 {
7404 dont_use_constructor:
7405 if (TREE_CODE (init) != TREE_VEC)
7406 init = store_init_value (decl, init);
7407 }
7408
7409 if (init)
7410 /* We must hide the initializer so that expand_decl
7411 won't try to do something it does not understand. */
7412 init = obscure_complex_init (decl, init);
7413 }
7414 else if (DECL_EXTERNAL (decl))
7415 ;
7416 else if (TREE_CODE_CLASS (TREE_CODE (type)) == 't'
7417 && (IS_AGGR_TYPE (type) || TYPE_NEEDS_CONSTRUCTING (type)))
7418 {
7419 tree ctype = type;
7420 while (TREE_CODE (ctype) == ARRAY_TYPE)
7421 ctype = TREE_TYPE (ctype);
7422 if (! TYPE_NEEDS_CONSTRUCTING (ctype))
7423 {
7424 if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (ctype))
7425 cp_error ("structure `%D' with uninitialized const members", decl);
7426 if (CLASSTYPE_REF_FIELDS_NEED_INIT (ctype))
7427 cp_error ("structure `%D' with uninitialized reference members",
7428 decl);
7429 }
7430
7431 check_for_uninitialized_const_var (decl);
7432
7433 if (TYPE_SIZE (type) != NULL_TREE
7434 && TYPE_NEEDS_CONSTRUCTING (type))
7435 init = obscure_complex_init (decl, NULL_TREE);
7436
7437 }
7438 else
7439 check_for_uninitialized_const_var (decl);
7440
7441 /* For top-level declaration, the initial value was read in
7442 the temporary obstack. MAXINDEX, rtl, etc. to be made below
7443 must go in the permanent obstack; but don't discard the
7444 temporary data yet. */
7445
7446 if (toplevel_bindings_p () && temporary)
7447 end_temporary_allocation ();
7448
7449 /* Deduce size of array from initialization, if not already known. */
7450
7451 if (TREE_CODE (type) == ARRAY_TYPE
7452 && TYPE_DOMAIN (type) == NULL_TREE
7453 && TREE_CODE (decl) != TYPE_DECL)
7454 {
7455 int do_default
7456 = (TREE_STATIC (decl)
7457 /* Even if pedantic, an external linkage array
7458 may have incomplete type at first. */
7459 ? pedantic && ! DECL_EXTERNAL (decl)
7460 : !DECL_EXTERNAL (decl));
7461 tree initializer = init ? init : DECL_INITIAL (decl);
7462 int failure = complete_array_type (type, initializer, do_default);
7463
7464 if (failure == 1)
7465 cp_error ("initializer fails to determine size of `%D'", decl);
7466
7467 if (failure == 2)
7468 {
7469 if (do_default)
7470 cp_error ("array size missing in `%D'", decl);
7471 /* If a `static' var's size isn't known, make it extern as
7472 well as static, so it does not get allocated. If it's not
7473 `static', then don't mark it extern; finish_incomplete_decl
7474 will give it a default size and it will get allocated. */
7475 else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
7476 DECL_EXTERNAL (decl) = 1;
7477 }
7478
7479 if (pedantic && TYPE_DOMAIN (type) != NULL_TREE
7480 && tree_int_cst_lt (TYPE_MAX_VALUE (TYPE_DOMAIN (type)),
7481 integer_zero_node))
7482 cp_error ("zero-size array `%D'", decl);
7483
7484 layout_decl (decl, 0);
7485 }
7486
7487 if (TREE_CODE (decl) == VAR_DECL)
7488 {
7489 if (DECL_SIZE (decl) == NULL_TREE
7490 && TYPE_SIZE (complete_type (TREE_TYPE (decl))) != NULL_TREE)
7491 layout_decl (decl, 0);
7492
7493 if (TREE_STATIC (decl) && DECL_SIZE (decl) == NULL_TREE)
7494 {
7495 /* A static variable with an incomplete type:
7496 that is an error if it is initialized.
7497 Otherwise, let it through, but if it is not `extern'
7498 then it may cause an error message later. */
7499 if (DECL_INITIAL (decl) != NULL_TREE)
7500 cp_error ("storage size of `%D' isn't known", decl);
7501 init = NULL_TREE;
7502 }
7503 else if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
7504 {
7505 /* An automatic variable with an incomplete type: that is an error.
7506 Don't talk about array types here, since we took care of that
7507 message in grokdeclarator. */
7508 cp_error ("storage size of `%D' isn't known", decl);
7509 TREE_TYPE (decl) = error_mark_node;
7510 }
7511 else if (!DECL_EXTERNAL (decl) && IS_AGGR_TYPE (ttype))
7512 /* Let debugger know it should output info for this type. */
7513 note_debug_info_needed (ttype);
7514
7515 if (TREE_STATIC (decl) && DECL_CLASS_SCOPE_P (decl))
7516 note_debug_info_needed (DECL_CONTEXT (decl));
7517
7518 if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
7519 && DECL_SIZE (decl) != NULL_TREE
7520 && ! TREE_CONSTANT (DECL_SIZE (decl)))
7521 {
7522 if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
7523 constant_expression_warning (DECL_SIZE (decl));
7524 else
7525 cp_error ("storage size of `%D' isn't constant", decl);
7526 }
7527
7528 if (! DECL_EXTERNAL (decl) && TYPE_NEEDS_DESTRUCTOR (type)
7529 /* Cleanups for static variables are handled by `finish_file'. */
7530 && ! TREE_STATIC (decl))
7531 {
7532 int yes = suspend_momentary ();
7533 cleanup = maybe_build_cleanup (decl);
7534 resume_momentary (yes);
7535 }
7536 }
7537 /* PARM_DECLs get cleanups, too. */
7538 else if (TREE_CODE (decl) == PARM_DECL && TYPE_NEEDS_DESTRUCTOR (type))
7539 {
7540 if (temporary)
7541 end_temporary_allocation ();
7542 cleanup = maybe_build_cleanup (decl);
7543 if (temporary)
7544 resume_temporary_allocation ();
7545 }
7546
7547 /* Output the assembler code and/or RTL code for variables and functions,
7548 unless the type is an undefined structure or union.
7549 If not, it will get done when the type is completed. */
7550
7551 was_incomplete = (DECL_SIZE (decl) == NULL_TREE);
7552
7553 if (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == FUNCTION_DECL
7554 || TREE_CODE (decl) == RESULT_DECL)
7555 {
7556 /* ??? FIXME: What about nested classes? */
7557 int toplev = toplevel_bindings_p () || pseudo_global_level_p ();
7558 int was_temp
7559 = (TREE_STATIC (decl) && TYPE_NEEDS_DESTRUCTOR (type)
7560 && allocation_temporary_p ());
7561
7562 if (was_temp)
7563 end_temporary_allocation ();
7564
7565 /* Static data in a function with comdat linkage also has comdat
7566 linkage. */
7567 if (TREE_CODE (decl) == VAR_DECL
7568 && TREE_STATIC (decl)
7569 /* Don't mess with __FUNCTION__. */
7570 && ! TREE_ASM_WRITTEN (decl)
7571 && current_function_decl
7572 && DECL_CONTEXT (decl) == current_function_decl
7573 && (DECL_THIS_INLINE (current_function_decl)
7574 || DECL_TEMPLATE_INSTANTIATION (current_function_decl))
7575 && TREE_PUBLIC (current_function_decl))
7576 {
7577 /* Rather than try to get this right with inlining, we suppress
7578 inlining of such functions. */
7579 current_function_cannot_inline
7580 = "function with static variable cannot be inline";
7581
7582 /* If flag_weak, we don't need to mess with this, as we can just
7583 make the function weak, and let it refer to its unique local
7584 copy. This works because we don't allow the function to be
7585 inlined. */
7586 if (! flag_weak)
7587 {
7588 if (DECL_INTERFACE_KNOWN (current_function_decl))
7589 {
7590 TREE_PUBLIC (decl) = 1;
7591 DECL_EXTERNAL (decl) = DECL_EXTERNAL (current_function_decl);
7592 }
7593 else if (DECL_INITIAL (decl) == NULL_TREE
7594 || DECL_INITIAL (decl) == error_mark_node)
7595 {
7596 TREE_PUBLIC (decl) = 1;
7597 DECL_COMMON (decl) = 1;
7598 }
7599 /* else we lose. We can only do this if we can use common,
7600 which we can't if it has been initialized. */
7601
7602 if (TREE_PUBLIC (decl))
7603 DECL_ASSEMBLER_NAME (decl)
7604 = build_static_name (current_function_decl, DECL_NAME (decl));
7605 else if (! DECL_ARTIFICIAL (decl))
7606 {
7607 cp_warning_at ("sorry: semantics of inline function static data `%#D' are wrong (you'll wind up with multiple copies)", decl);
7608 cp_warning_at (" you can work around this by removing the initializer"), decl;
7609 }
7610 }
7611 }
7612
7613 else if (TREE_CODE (decl) == VAR_DECL
7614 && DECL_LANG_SPECIFIC (decl)
7615 && DECL_COMDAT (decl))
7616 {
7617 /* Dynamically initialized vars go into common. */
7618 if (DECL_INITIAL (decl) == NULL_TREE
7619 || DECL_INITIAL (decl) == error_mark_node)
7620 DECL_COMMON (decl) = 1;
7621 else if (EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl)))
7622 {
7623 DECL_COMMON (decl) = 1;
7624 DECL_INITIAL (decl) = error_mark_node;
7625 }
7626 else
7627 {
7628 /* Statically initialized vars are weak or comdat, if
7629 supported. */
7630 if (flag_weak)
7631 make_decl_one_only (decl);
7632 else
7633 {
7634 /* We can't do anything useful; leave vars for explicit
7635 instantiation. */
7636 DECL_EXTERNAL (decl) = 1;
7637 DECL_NOT_REALLY_EXTERN (decl) = 0;
7638 }
7639 }
7640 }
7641
7642 if (TREE_CODE (decl) == VAR_DECL && DECL_VIRTUAL_P (decl))
7643 make_decl_rtl (decl, NULL_PTR, toplev);
7644 else if (TREE_CODE (decl) == VAR_DECL
7645 && TREE_READONLY (decl)
7646 && DECL_INITIAL (decl) != NULL_TREE
7647 && DECL_INITIAL (decl) != error_mark_node
7648 && ! EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl)))
7649 {
7650 DECL_INITIAL (decl) = save_expr (DECL_INITIAL (decl));
7651
7652 if (asmspec)
7653 DECL_ASSEMBLER_NAME (decl) = get_identifier (asmspec);
7654
7655 if (! toplev
7656 && TREE_STATIC (decl)
7657 && ! TREE_SIDE_EFFECTS (decl)
7658 && ! TREE_PUBLIC (decl)
7659 && ! DECL_EXTERNAL (decl)
7660 && ! TYPE_NEEDS_DESTRUCTOR (type)
7661 && DECL_MODE (decl) != BLKmode)
7662 {
7663 /* If this variable is really a constant, then fill its DECL_RTL
7664 slot with something which won't take up storage.
7665 If something later should take its address, we can always give
7666 it legitimate RTL at that time. */
7667 DECL_RTL (decl) = gen_reg_rtx (DECL_MODE (decl));
7668 store_expr (DECL_INITIAL (decl), DECL_RTL (decl), 0);
7669 TREE_ASM_WRITTEN (decl) = 1;
7670 }
7671 else if (toplev && ! TREE_PUBLIC (decl))
7672 {
7673 /* If this is a static const, change its apparent linkage
7674 if it belongs to a #pragma interface. */
7675 if (!interface_unknown)
7676 {
7677 TREE_PUBLIC (decl) = 1;
7678 DECL_EXTERNAL (decl) = interface_only;
7679 }
7680 make_decl_rtl (decl, asmspec, toplev);
7681 }
7682 else
7683 rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
7684 }
7685 else if (TREE_CODE (decl) == VAR_DECL
7686 && DECL_LANG_SPECIFIC (decl)
7687 && DECL_IN_AGGR_P (decl))
7688 {
7689 if (TREE_STATIC (decl))
7690 {
7691 if (init == NULL_TREE
7692 #ifdef DEFAULT_STATIC_DEFS
7693 /* If this code is dead, then users must
7694 explicitly declare static member variables
7695 outside the class def'n as well. */
7696 && TYPE_NEEDS_CONSTRUCTING (type)
7697 #endif
7698 )
7699 {
7700 DECL_EXTERNAL (decl) = 1;
7701 make_decl_rtl (decl, asmspec, 1);
7702 }
7703 else
7704 rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
7705 }
7706 else
7707 /* Just a constant field. Should not need any rtl. */
7708 goto finish_end0;
7709 }
7710 else
7711 rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
7712
7713 if (was_temp)
7714 resume_temporary_allocation ();
7715
7716 if (type != error_mark_node
7717 && TYPE_LANG_SPECIFIC (type)
7718 && CLASSTYPE_ABSTRACT_VIRTUALS (type))
7719 abstract_virtuals_error (decl, type);
7720 else if ((TREE_CODE (type) == FUNCTION_TYPE
7721 || TREE_CODE (type) == METHOD_TYPE)
7722 && TYPE_LANG_SPECIFIC (TREE_TYPE (type))
7723 && CLASSTYPE_ABSTRACT_VIRTUALS (TREE_TYPE (type)))
7724 abstract_virtuals_error (decl, TREE_TYPE (type));
7725
7726 if (TYPE_LANG_SPECIFIC (type) && IS_SIGNATURE (type))
7727 signature_error (decl, type);
7728 else if ((TREE_CODE (type) == FUNCTION_TYPE
7729 || TREE_CODE (type) == METHOD_TYPE)
7730 && TYPE_LANG_SPECIFIC (TREE_TYPE (type))
7731 && IS_SIGNATURE (TREE_TYPE (type)))
7732 signature_error (decl, TREE_TYPE (type));
7733
7734 if (TREE_CODE (decl) == FUNCTION_DECL)
7735 ;
7736 else if (DECL_EXTERNAL (decl)
7737 && ! (DECL_LANG_SPECIFIC (decl)
7738 && DECL_NOT_REALLY_EXTERN (decl)))
7739 {
7740 if (init)
7741 DECL_INITIAL (decl) = init;
7742 }
7743 else if (TREE_STATIC (decl) && type != error_mark_node)
7744 {
7745 /* Cleanups for static variables are handled by `finish_file'. */
7746 if (TYPE_NEEDS_CONSTRUCTING (type) || init != NULL_TREE
7747 || TYPE_NEEDS_DESTRUCTOR (type))
7748 expand_static_init (decl, init);
7749 }
7750 else if (! toplev)
7751 {
7752 /* This is a declared decl which must live until the
7753 end of the binding contour. It may need a cleanup. */
7754
7755 /* Recompute the RTL of a local array now
7756 if it used to be an incomplete type. */
7757 if (was_incomplete && ! TREE_STATIC (decl))
7758 {
7759 /* If we used it already as memory, it must stay in memory. */
7760 TREE_ADDRESSABLE (decl) = TREE_USED (decl);
7761 /* If it's still incomplete now, no init will save it. */
7762 if (DECL_SIZE (decl) == NULL_TREE)
7763 DECL_INITIAL (decl) = NULL_TREE;
7764 expand_decl (decl);
7765 }
7766 else if (! TREE_ASM_WRITTEN (decl)
7767 && (TYPE_SIZE (type) != NULL_TREE
7768 || TREE_CODE (type) == ARRAY_TYPE))
7769 {
7770 /* Do this here, because we did not expand this decl's
7771 rtl in start_decl. */
7772 if (DECL_RTL (decl) == NULL_RTX)
7773 expand_decl (decl);
7774 else if (cleanup)
7775 {
7776 /* XXX: Why don't we use decl here? */
7777 /* Ans: Because it was already expanded? */
7778 if (! expand_decl_cleanup (NULL_TREE, cleanup))
7779 cp_error ("parser lost in parsing declaration of `%D'",
7780 decl);
7781 /* Cleanup used up here. */
7782 cleanup = NULL_TREE;
7783 }
7784 }
7785
7786 if (current_binding_level->is_for_scope)
7787 {
7788 struct binding_level *outer
7789 = current_binding_level->level_chain;
7790
7791 /* Check to see if the same name is already bound at
7792 the outer level, either because it was directly declared,
7793 or because a dead for-decl got preserved. In either case,
7794 the code would not have been valid under the ARM
7795 scope rules, so clear is_for_scope for the
7796 current_binding_level.
7797
7798 Otherwise, we need to preserve the temp slot for decl
7799 to last into the outer binding level. */
7800
7801 tree outer_binding
7802 = TREE_CHAIN (IDENTIFIER_BINDING (DECL_NAME (decl)));
7803
7804 if (outer_binding && BINDING_LEVEL (outer_binding) == outer
7805 && (TREE_CODE (BINDING_VALUE (outer_binding))
7806 == VAR_DECL)
7807 && DECL_DEAD_FOR_LOCAL (BINDING_VALUE (outer_binding)))
7808 {
7809 BINDING_VALUE (outer_binding)
7810 = DECL_SHADOWED_FOR_VAR (BINDING_VALUE (outer_binding));
7811 current_binding_level->is_for_scope = 0;
7812 }
7813 else if (DECL_IN_MEMORY_P (decl))
7814 preserve_temp_slots (DECL_RTL (decl));
7815 }
7816
7817 expand_start_target_temps ();
7818
7819 if (DECL_SIZE (decl) && type != error_mark_node)
7820 {
7821 /* Compute and store the initial value. */
7822 expand_decl_init (decl);
7823 already_used = TREE_USED (decl) || TREE_USED (type);
7824
7825 if (init || TYPE_NEEDS_CONSTRUCTING (type))
7826 {
7827 emit_line_note (DECL_SOURCE_FILE (decl),
7828 DECL_SOURCE_LINE (decl));
7829 expand_aggr_init (decl, init, flags);
7830 }
7831
7832 /* Set this to 0 so we can tell whether an aggregate which
7833 was initialized was ever used. Don't do this if it has a
7834 destructor, so we don't complain about the 'resource
7835 allocation is initialization' idiom. */
7836 /* Now set attribute((unused)) on types so decls of
7837 that type will be marked used. (see TREE_USED, above.)
7838 This avoids the warning problems this particular code
7839 tried to work around. */
7840
7841 if (TYPE_NEEDS_CONSTRUCTING (type)
7842 && ! already_used
7843 && cleanup == NULL_TREE
7844 && DECL_NAME (decl))
7845 TREE_USED (decl) = 0;
7846
7847 if (already_used)
7848 TREE_USED (decl) = 1;
7849 }
7850
7851 /* Cleanup any temporaries needed for the initial value. */
7852 expand_end_target_temps ();
7853
7854 if (DECL_SIZE (decl) && type != error_mark_node)
7855 {
7856 /* Store the cleanup, if there was one. */
7857 if (cleanup)
7858 {
7859 if (! expand_decl_cleanup (decl, cleanup))
7860 cp_error ("parser lost in parsing declaration of `%D'",
7861 decl);
7862 }
7863 }
7864 }
7865 finish_end0:
7866
7867 /* Undo call to `pushclass' that was done in `start_decl'
7868 due to initialization of qualified member variable.
7869 I.e., Foo::x = 10; */
7870 {
7871 tree context = DECL_REAL_CONTEXT (decl);
7872 if (context
7873 && TREE_CODE_CLASS (TREE_CODE (context)) == 't'
7874 && (TREE_CODE (decl) == VAR_DECL
7875 /* We also have a pushclass done that we need to undo here
7876 if we're at top level and declare a method. */
7877 || TREE_CODE (decl) == FUNCTION_DECL)
7878 /* If size hasn't been set, we're still defining it,
7879 and therefore inside the class body; don't pop
7880 the binding level.. */
7881 && TYPE_SIZE (context) != NULL_TREE
7882 && context == current_class_type)
7883 popclass (1);
7884 }
7885 }
7886
7887 finish_end:
7888
7889 /* If requested, warn about definitions of large data objects. */
7890
7891 if (warn_larger_than
7892 && ! processing_template_decl
7893 && (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == PARM_DECL)
7894 && !DECL_EXTERNAL (decl))
7895 {
7896 register tree decl_size = DECL_SIZE (decl);
7897
7898 if (decl_size && TREE_CODE (decl_size) == INTEGER_CST)
7899 {
7900 unsigned units = TREE_INT_CST_LOW (decl_size) / BITS_PER_UNIT;
7901
7902 if (units > larger_than_size)
7903 warning_with_decl (decl, "size of `%s' is %u bytes", units);
7904 }
7905 }
7906
7907 if (need_pop)
7908 {
7909 /* Resume permanent allocation, if not within a function. */
7910 /* The corresponding push_obstacks_nochange is in start_decl,
7911 start_method, groktypename, and in grokfield. */
7912 pop_obstacks ();
7913 }
7914
7915 if (was_readonly)
7916 TREE_READONLY (decl) = 1;
7917 }
7918
7919 /* This is here for a midend callback from c-common.c */
7920
7921 void
7922 finish_decl (decl, init, asmspec_tree)
7923 tree decl, init;
7924 tree asmspec_tree;
7925 {
7926 cp_finish_decl (decl, init, asmspec_tree, 1, 0);
7927 }
7928
7929 void
7930 expand_static_init (decl, init)
7931 tree decl;
7932 tree init;
7933 {
7934 tree oldstatic = value_member (decl, static_aggregates);
7935
7936 if (oldstatic)
7937 {
7938 if (TREE_PURPOSE (oldstatic) && init != NULL_TREE)
7939 cp_error ("multiple initializations given for `%D'", decl);
7940 }
7941 else if (! toplevel_bindings_p () && ! pseudo_global_level_p ())
7942 {
7943 /* Emit code to perform this initialization but once. */
7944 tree temp;
7945
7946 /* Remember this information until end of file. */
7947 push_obstacks (&permanent_obstack, &permanent_obstack);
7948
7949 /* Emit code to perform this initialization but once. This code
7950 looks like:
7951
7952 static int temp = 0;
7953 if (!temp) {
7954 // Do initialization.
7955 temp = 1;
7956 // Register variable for destruction at end of program.
7957 }
7958
7959 Note that the `temp' variable is only set to 1 *after* the
7960 initialization is complete. This ensures that an exception,
7961 thrown during the construction, will cause the variable to
7962 reinitialized when we pass through this code again, as per:
7963
7964 [stmt.dcl]
7965
7966 If the initialization exits by throwing an exception, the
7967 initialization is not complete, so it will be tried again
7968 the next time control enters the declaration.
7969
7970 In theory, this process should be thread-safe, too; multiple
7971 threads should not be able to initialize the variable more
7972 than once. We don't yet attempt to ensure thread-safety. */
7973 temp = get_temp_name (integer_type_node, 1);
7974 rest_of_decl_compilation (temp, NULL_PTR, 0, 0);
7975
7976 /* Begin the conditional initialization. */
7977 expand_start_cond (build_binary_op (EQ_EXPR, temp,
7978 integer_zero_node, 1), 0);
7979 expand_start_target_temps ();
7980
7981 /* Do the initialization itself. */
7982 if (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))
7983 || (init && TREE_CODE (init) == TREE_LIST))
7984 {
7985 expand_aggr_init (decl, init, 0);
7986 do_pending_stack_adjust ();
7987 }
7988 else if (init)
7989 expand_assignment (decl, init, 0, 0);
7990
7991 /* Set TEMP to 1. */
7992 expand_assignment (temp, integer_one_node, 0, 0);
7993
7994 /* Cleanup any temporaries needed for the initial value. If
7995 destroying one of the temporaries causes an exception to be
7996 thrown, then the object itself has still been fully
7997 constructed. */
7998 expand_end_target_temps ();
7999
8000 /* Use atexit to register a function for destroying this static
8001 variable. */
8002 if (TYPE_NEEDS_DESTRUCTOR (TREE_TYPE (decl)))
8003 {
8004 tree cleanup, fcall;
8005 static tree Atexit = 0;
8006 if (Atexit == 0)
8007 {
8008 tree atexit_fndecl, PFV, pfvlist;
8009 /* Remember this information until end of file. */
8010 push_obstacks (&permanent_obstack, &permanent_obstack);
8011 PFV = build_pointer_type (build_function_type
8012 (void_type_node, void_list_node));
8013
8014 pfvlist = tree_cons (NULL_TREE, PFV, void_list_node);
8015
8016 push_lang_context (lang_name_c);
8017 atexit_fndecl
8018 = builtin_function ("atexit",
8019 build_function_type (void_type_node,
8020 pfvlist),
8021 NOT_BUILT_IN, NULL_PTR);
8022 assemble_external (atexit_fndecl);
8023 Atexit = default_conversion (atexit_fndecl);
8024 pop_lang_context ();
8025 pop_obstacks ();
8026 }
8027
8028 /* Call build_cleanup before we enter the anonymous function
8029 so that any access checks will be done relative to the
8030 current scope, rather than the scope of the anonymous
8031 function. */
8032 fcall = build_cleanup (decl);
8033 cleanup = start_anon_func ();
8034 expand_expr_stmt (fcall);
8035 end_anon_func ();
8036 mark_addressable (cleanup);
8037 cleanup = build_unary_op (ADDR_EXPR, cleanup, 0);
8038 fcall = build_function_call (Atexit, expr_tree_cons (NULL_TREE, cleanup, NULL_TREE));
8039 expand_expr_stmt (fcall);
8040 }
8041
8042 expand_end_cond ();
8043 if (TYPE_NEEDS_DESTRUCTOR (TREE_TYPE (decl)))
8044 {
8045 static_aggregates = perm_tree_cons (temp, decl, static_aggregates);
8046 TREE_STATIC (static_aggregates) = 1;
8047 }
8048
8049 /* Resume old (possibly temporary) allocation. */
8050 pop_obstacks ();
8051 }
8052 else
8053 {
8054 /* This code takes into account memory allocation
8055 policy of `start_decl'. Namely, if TYPE_NEEDS_CONSTRUCTING
8056 does not hold for this object, then we must make permanent
8057 the storage currently in the temporary obstack. */
8058 if (! TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl)))
8059 preserve_initializer ();
8060 static_aggregates = perm_tree_cons (init, decl, static_aggregates);
8061 }
8062 }
8063 \f
8064 /* Make TYPE a complete type based on INITIAL_VALUE.
8065 Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
8066 2 if there was no information (in which case assume 1 if DO_DEFAULT). */
8067
8068 int
8069 complete_array_type (type, initial_value, do_default)
8070 tree type, initial_value;
8071 int do_default;
8072 {
8073 register tree maxindex = NULL_TREE;
8074 int value = 0;
8075
8076 if (initial_value)
8077 {
8078 /* Note MAXINDEX is really the maximum index,
8079 one less than the size. */
8080 if (TREE_CODE (initial_value) == STRING_CST)
8081 {
8082 int eltsize
8083 = int_size_in_bytes (TREE_TYPE (TREE_TYPE (initial_value)));
8084 maxindex = build_int_2 ((TREE_STRING_LENGTH (initial_value)
8085 / eltsize) - 1, 0);
8086 }
8087 else if (TREE_CODE (initial_value) == CONSTRUCTOR)
8088 {
8089 tree elts = CONSTRUCTOR_ELTS (initial_value);
8090 maxindex = size_binop (MINUS_EXPR, integer_zero_node, size_one_node);
8091 for (; elts; elts = TREE_CHAIN (elts))
8092 {
8093 if (TREE_PURPOSE (elts))
8094 maxindex = TREE_PURPOSE (elts);
8095 else
8096 maxindex = size_binop (PLUS_EXPR, maxindex, size_one_node);
8097 }
8098 maxindex = copy_node (maxindex);
8099 }
8100 else
8101 {
8102 /* Make an error message unless that happened already. */
8103 if (initial_value != error_mark_node)
8104 value = 1;
8105
8106 /* Prevent further error messages. */
8107 maxindex = build_int_2 (0, 0);
8108 }
8109 }
8110
8111 if (!maxindex)
8112 {
8113 if (do_default)
8114 maxindex = build_int_2 (0, 0);
8115 value = 2;
8116 }
8117
8118 if (maxindex)
8119 {
8120 tree itype;
8121
8122 TYPE_DOMAIN (type) = build_index_type (maxindex);
8123 if (! TREE_TYPE (maxindex))
8124 TREE_TYPE (maxindex) = TYPE_DOMAIN (type);
8125 if (initial_value)
8126 itype = TREE_TYPE (initial_value);
8127 else
8128 itype = NULL;
8129 if (itype && !TYPE_DOMAIN (itype))
8130 TYPE_DOMAIN (itype) = TYPE_DOMAIN (type);
8131 /* The type of the main variant should never be used for arrays
8132 of different sizes. It should only ever be completed with the
8133 size of the array. */
8134 if (! TYPE_DOMAIN (TYPE_MAIN_VARIANT (type)))
8135 TYPE_DOMAIN (TYPE_MAIN_VARIANT (type)) = TYPE_DOMAIN (type);
8136 }
8137
8138 /* Lay out the type now that we can get the real answer. */
8139
8140 layout_type (type);
8141
8142 return value;
8143 }
8144 \f
8145 /* Return zero if something is declared to be a member of type
8146 CTYPE when in the context of CUR_TYPE. STRING is the error
8147 message to print in that case. Otherwise, quietly return 1. */
8148
8149 static int
8150 member_function_or_else (ctype, cur_type, string)
8151 tree ctype, cur_type;
8152 char *string;
8153 {
8154 if (ctype && ctype != cur_type)
8155 {
8156 error (string, TYPE_NAME_STRING (ctype));
8157 return 0;
8158 }
8159 return 1;
8160 }
8161 \f
8162 /* Subroutine of `grokdeclarator'. */
8163
8164 /* Generate errors possibly applicable for a given set of specifiers.
8165 This is for ARM $7.1.2. */
8166
8167 static void
8168 bad_specifiers (object, type, virtualp, quals, inlinep, friendp, raises)
8169 tree object;
8170 char *type;
8171 int virtualp, quals, friendp, raises, inlinep;
8172 {
8173 if (virtualp)
8174 cp_error ("`%D' declared as a `virtual' %s", object, type);
8175 if (inlinep)
8176 cp_error ("`%D' declared as an `inline' %s", object, type);
8177 if (quals)
8178 cp_error ("`const' and `volatile' function specifiers on `%D' invalid in %s declaration",
8179 object, type);
8180 if (friendp)
8181 cp_error_at ("invalid friend declaration", object);
8182 if (raises)
8183 cp_error_at ("invalid exception specifications", object);
8184 }
8185
8186 /* CTYPE is class type, or null if non-class.
8187 TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
8188 or METHOD_TYPE.
8189 DECLARATOR is the function's name.
8190 VIRTUALP is truthvalue of whether the function is virtual or not.
8191 FLAGS are to be passed through to `grokclassfn'.
8192 QUALS are qualifiers indicating whether the function is `const'
8193 or `volatile'.
8194 RAISES is a list of exceptions that this function can raise.
8195 CHECK is 1 if we must find this method in CTYPE, 0 if we should
8196 not look, and -1 if we should not call `grokclassfn' at all.
8197
8198 Returns `error_mark_node' if something goes wrong, after issuing
8199 applicable error messages. */
8200
8201 static tree
8202 grokfndecl (ctype, type, declarator, orig_declarator, virtualp, flags, quals,
8203 raises, attrlist, check, friendp, publicp, inlinep, funcdef_flag,
8204 template_count, in_namespace)
8205 tree ctype, type;
8206 tree declarator;
8207 tree orig_declarator;
8208 int virtualp;
8209 enum overload_flags flags;
8210 tree quals, raises, attrlist;
8211 int check, friendp, publicp, inlinep, funcdef_flag, template_count;
8212 tree in_namespace;
8213 {
8214 tree cname, decl;
8215 int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
8216 tree t;
8217
8218 if (ctype)
8219 cname = TREE_CODE (TYPE_NAME (ctype)) == TYPE_DECL
8220 ? TYPE_IDENTIFIER (ctype) : TYPE_NAME (ctype);
8221 else
8222 cname = NULL_TREE;
8223
8224 if (raises)
8225 {
8226 type = build_exception_variant (type, raises);
8227 }
8228
8229 decl = build_lang_decl (FUNCTION_DECL, declarator, type);
8230 /* Propagate volatile out from type to decl. */
8231 if (TYPE_VOLATILE (type))
8232 TREE_THIS_VOLATILE (decl) = 1;
8233
8234 /* If this decl has namespace scope, set that up. */
8235 if (in_namespace)
8236 set_decl_namespace (decl, in_namespace);
8237 else if (publicp && ! ctype)
8238 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
8239
8240 /* `main' and builtins have implicit 'C' linkage. */
8241 if ((MAIN_NAME_P (declarator)
8242 || (IDENTIFIER_LENGTH (declarator) > 10
8243 && IDENTIFIER_POINTER (declarator)[0] == '_'
8244 && IDENTIFIER_POINTER (declarator)[1] == '_'
8245 && strncmp (IDENTIFIER_POINTER (declarator)+2, "builtin_", 8) == 0))
8246 && current_lang_name == lang_name_cplusplus
8247 && ctype == NULL_TREE
8248 /* NULL_TREE means global namespace. */
8249 && DECL_CONTEXT (decl) == NULL_TREE)
8250 DECL_LANGUAGE (decl) = lang_c;
8251
8252 /* Should probably propagate const out from type to decl I bet (mrs). */
8253 if (staticp)
8254 {
8255 DECL_STATIC_FUNCTION_P (decl) = 1;
8256 DECL_CONTEXT (decl) = ctype;
8257 }
8258
8259 if (ctype)
8260 DECL_CLASS_CONTEXT (decl) = ctype;
8261
8262 if (ctype == NULL_TREE && DECL_MAIN_P (decl))
8263 {
8264 if (processing_template_decl)
8265 error ("cannot declare `main' to be a template");
8266 if (inlinep)
8267 error ("cannot declare `main' to be inline");
8268 else if (! publicp)
8269 error ("cannot declare `main' to be static");
8270 inlinep = 0;
8271 publicp = 1;
8272 }
8273
8274 /* Members of anonymous types and local classes have no linkage; make
8275 them internal. */
8276 if (ctype && (ANON_AGGRNAME_P (TYPE_IDENTIFIER (ctype))
8277 || hack_decl_function_context (TYPE_MAIN_DECL (ctype))))
8278 publicp = 0;
8279
8280 if (publicp)
8281 {
8282 /* [basic.link]: A name with no linkage (notably, the name of a class
8283 or enumeration declared in a local scope) shall not be used to
8284 declare an entity with linkage.
8285
8286 Only check this for public decls for now. */
8287 t = no_linkage_check (TREE_TYPE (decl));
8288 if (t)
8289 {
8290 if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
8291 {
8292 if (DECL_LANGUAGE (decl) == lang_c)
8293 /* Allow this; it's pretty common in C. */;
8294 else
8295 cp_pedwarn ("non-local function `%#D' uses anonymous type",
8296 decl);
8297 }
8298 else
8299 cp_pedwarn ("non-local function `%#D' uses local type `%T'",
8300 decl, t);
8301 }
8302 }
8303
8304 TREE_PUBLIC (decl) = publicp;
8305 if (! publicp)
8306 {
8307 DECL_INTERFACE_KNOWN (decl) = 1;
8308 DECL_NOT_REALLY_EXTERN (decl) = 1;
8309 }
8310
8311 if (inlinep)
8312 DECL_THIS_INLINE (decl) = DECL_INLINE (decl) = 1;
8313
8314 DECL_EXTERNAL (decl) = 1;
8315 if (quals != NULL_TREE && TREE_CODE (type) == FUNCTION_TYPE)
8316 {
8317 cp_error ("%smember function `%D' cannot have `%T' method qualifier",
8318 (ctype ? "static " : "non-"), decl, TREE_VALUE (quals));
8319 quals = NULL_TREE;
8320 }
8321
8322 if (IDENTIFIER_OPNAME_P (DECL_NAME (decl)))
8323 grok_op_properties (decl, virtualp, check < 0);
8324
8325 if (ctype && hack_decl_function_context (decl))
8326 DECL_NO_STATIC_CHAIN (decl) = 1;
8327
8328 for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
8329 if (TREE_PURPOSE (t)
8330 && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
8331 {
8332 add_defarg_fn (decl);
8333 break;
8334 }
8335
8336 if (friendp
8337 && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
8338 {
8339 if (funcdef_flag)
8340 cp_error
8341 ("defining explicit specialization `%D' in friend declaration",
8342 orig_declarator);
8343 else
8344 {
8345 if (PROCESSING_REAL_TEMPLATE_DECL_P ())
8346 {
8347 /* Something like `template <class T> friend void f<T>()'. */
8348 cp_error ("template-id `%D' in declaration of primary template",
8349 orig_declarator);
8350 return error_mark_node;
8351 }
8352
8353 /* A friend declaration of the form friend void f<>(). Record
8354 the information in the TEMPLATE_ID_EXPR. */
8355 SET_DECL_IMPLICIT_INSTANTIATION (decl);
8356 DECL_TEMPLATE_INFO (decl)
8357 = perm_tree_cons (TREE_OPERAND (orig_declarator, 0),
8358 TREE_OPERAND (orig_declarator, 1),
8359 NULL_TREE);
8360 }
8361 }
8362
8363 /* Plain overloading: will not be grok'd by grokclassfn. */
8364 if (! ctype && ! processing_template_decl
8365 && DECL_LANGUAGE (decl) != lang_c
8366 && (! DECL_USE_TEMPLATE (decl) || name_mangling_version < 1))
8367 set_mangled_name_for_decl (decl);
8368
8369 if (funcdef_flag)
8370 /* Make the init_value nonzero so pushdecl knows this is not
8371 tentative. error_mark_node is replaced later with the BLOCK. */
8372 DECL_INITIAL (decl) = error_mark_node;
8373
8374 /* Caller will do the rest of this. */
8375 if (check < 0)
8376 return decl;
8377
8378 if (check && funcdef_flag)
8379 DECL_INITIAL (decl) = error_mark_node;
8380
8381 if (flags == NO_SPECIAL && ctype && constructor_name (cname) == declarator)
8382 {
8383 tree tmp;
8384 /* Just handle constructors here. We could do this
8385 inside the following if stmt, but I think
8386 that the code is more legible by breaking this
8387 case out. See comments below for what each of
8388 the following calls is supposed to do. */
8389 DECL_CONSTRUCTOR_P (decl) = 1;
8390
8391 grokclassfn (ctype, decl, flags, quals);
8392
8393 decl = check_explicit_specialization (orig_declarator, decl,
8394 template_count,
8395 2 * (funcdef_flag != 0) +
8396 4 * (friendp != 0));
8397 if (decl == error_mark_node)
8398 return error_mark_node;
8399
8400 if ((! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
8401 && check)
8402 {
8403 tmp = check_classfn (ctype, decl);
8404
8405 if (tmp && TREE_CODE (tmp) == TEMPLATE_DECL)
8406 tmp = DECL_TEMPLATE_RESULT(tmp);
8407
8408 if (tmp && DECL_ARTIFICIAL (tmp))
8409 cp_error ("definition of implicitly-declared `%D'", tmp);
8410 if (tmp && duplicate_decls (decl, tmp))
8411 return tmp;
8412 }
8413 if (! grok_ctor_properties (ctype, decl))
8414 return error_mark_node;
8415 }
8416 else
8417 {
8418 tree tmp;
8419
8420 /* Function gets the ugly name, field gets the nice one.
8421 This call may change the type of the function (because
8422 of default parameters)! */
8423 if (ctype != NULL_TREE)
8424 grokclassfn (ctype, decl, flags, quals);
8425
8426 decl = check_explicit_specialization (orig_declarator, decl,
8427 template_count,
8428 2 * (funcdef_flag != 0) +
8429 4 * (friendp != 0));
8430 if (decl == error_mark_node)
8431 return error_mark_node;
8432
8433 if (ctype != NULL_TREE
8434 && (! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
8435 && check)
8436 {
8437 tmp = check_classfn (ctype, decl);
8438
8439 if (tmp && TREE_CODE (tmp) == TEMPLATE_DECL)
8440 tmp = DECL_TEMPLATE_RESULT (tmp);
8441
8442 if (tmp && DECL_STATIC_FUNCTION_P (tmp)
8443 && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
8444 {
8445 /* Remove the `this' parm added by grokclassfn.
8446 XXX Isn't this done in start_function, too? */
8447 revert_static_member_fn (&decl, NULL, NULL);
8448 last_function_parms = TREE_CHAIN (last_function_parms);
8449 }
8450 if (tmp && DECL_ARTIFICIAL (tmp))
8451 cp_error ("definition of implicitly-declared `%D'", tmp);
8452 if (tmp)
8453 {
8454 if (!duplicate_decls (decl, tmp))
8455 my_friendly_abort (892);
8456 return tmp;
8457 }
8458 }
8459
8460 if (ctype == NULL_TREE || check)
8461 return decl;
8462
8463 if (attrlist)
8464 cplus_decl_attributes (decl, TREE_PURPOSE (attrlist),
8465 TREE_VALUE (attrlist));
8466 make_decl_rtl (decl, NULL_PTR, 1);
8467
8468 if (virtualp)
8469 {
8470 DECL_VIRTUAL_P (decl) = 1;
8471 if (DECL_VINDEX (decl) == NULL_TREE)
8472 DECL_VINDEX (decl) = error_mark_node;
8473 IDENTIFIER_VIRTUAL_P (DECL_NAME (decl)) = 1;
8474 }
8475 }
8476 return decl;
8477 }
8478
8479 static tree
8480 grokvardecl (type, declarator, specbits_in, initialized, constp, in_namespace)
8481 tree type;
8482 tree declarator;
8483 RID_BIT_TYPE *specbits_in;
8484 int initialized;
8485 int constp;
8486 tree in_namespace;
8487 {
8488 tree decl;
8489 RID_BIT_TYPE specbits;
8490
8491 specbits = *specbits_in;
8492
8493 if (TREE_CODE (type) == OFFSET_TYPE)
8494 {
8495 /* If you declare a static member so that it
8496 can be initialized, the code will reach here. */
8497 tree basetype = TYPE_OFFSET_BASETYPE (type);
8498 type = TREE_TYPE (type);
8499 decl = build_lang_field_decl (VAR_DECL, declarator, type);
8500 DECL_CONTEXT (decl) = basetype;
8501 DECL_CLASS_CONTEXT (decl) = basetype;
8502 DECL_ASSEMBLER_NAME (decl) = build_static_name (basetype, declarator);
8503 }
8504 else
8505 {
8506 tree context;
8507
8508 if (in_namespace)
8509 context = in_namespace;
8510 else if (namespace_bindings_p () || RIDBIT_SETP (RID_EXTERN, specbits))
8511 context = current_namespace;
8512 else
8513 context = NULL_TREE;
8514
8515 decl = build_decl (VAR_DECL, declarator, complete_type (type));
8516
8517 if (context)
8518 set_decl_namespace (decl, context);
8519
8520 context = DECL_CONTEXT (decl);
8521 if (declarator && context && current_lang_name != lang_name_c)
8522 DECL_ASSEMBLER_NAME (decl) = build_static_name (context, declarator);
8523 }
8524
8525 if (in_namespace)
8526 set_decl_namespace (decl, in_namespace);
8527
8528 if (RIDBIT_SETP (RID_EXTERN, specbits))
8529 {
8530 DECL_THIS_EXTERN (decl) = 1;
8531 DECL_EXTERNAL (decl) = !initialized;
8532 }
8533
8534 /* In class context, static means one per class,
8535 public access, and static storage. */
8536 if (DECL_CLASS_SCOPE_P (decl))
8537 {
8538 TREE_PUBLIC (decl) = 1;
8539 TREE_STATIC (decl) = 1;
8540 DECL_EXTERNAL (decl) = 0;
8541 }
8542 /* At top level, either `static' or no s.c. makes a definition
8543 (perhaps tentative), and absence of `static' makes it public. */
8544 else if (toplevel_bindings_p ())
8545 {
8546 TREE_PUBLIC (decl) = (RIDBIT_NOTSETP (RID_STATIC, specbits)
8547 && (DECL_THIS_EXTERN (decl) || ! constp));
8548 TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
8549 }
8550 /* Not at top level, only `static' makes a static definition. */
8551 else
8552 {
8553 TREE_STATIC (decl) = !! RIDBIT_SETP (RID_STATIC, specbits);
8554 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
8555 }
8556
8557 if (TREE_PUBLIC (decl))
8558 {
8559 /* [basic.link]: A name with no linkage (notably, the name of a class
8560 or enumeration declared in a local scope) shall not be used to
8561 declare an entity with linkage.
8562
8563 Only check this for public decls for now. */
8564 tree t = no_linkage_check (TREE_TYPE (decl));
8565 if (t)
8566 {
8567 if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
8568 /* Ignore for now; `enum { foo } e' is pretty common. */;
8569 else
8570 cp_pedwarn ("non-local variable `%#D' uses local type `%T'",
8571 decl, t);
8572 }
8573 }
8574
8575 return decl;
8576 }
8577
8578 /* Create a canonical pointer to member function type. */
8579
8580 tree
8581 build_ptrmemfunc_type (type)
8582 tree type;
8583 {
8584 tree fields[4];
8585 tree t;
8586 tree u;
8587
8588 /* If a canonical type already exists for this type, use it. We use
8589 this method instead of type_hash_canon, because it only does a
8590 simple equality check on the list of field members. */
8591
8592 if ((t = TYPE_GET_PTRMEMFUNC_TYPE (type)))
8593 return t;
8594
8595 push_obstacks (TYPE_OBSTACK (type), TYPE_OBSTACK (type));
8596
8597 u = make_lang_type (UNION_TYPE);
8598 SET_IS_AGGR_TYPE (u, 0);
8599 fields[0] = build_lang_field_decl (FIELD_DECL, pfn_identifier, type);
8600 fields[1] = build_lang_field_decl (FIELD_DECL, delta2_identifier,
8601 delta_type_node);
8602 finish_builtin_type (u, "__ptrmemfunc_type", fields, 1, ptr_type_node);
8603 TYPE_NAME (u) = NULL_TREE;
8604
8605 t = make_lang_type (RECORD_TYPE);
8606
8607 /* Let the front-end know this is a pointer to member function... */
8608 TYPE_PTRMEMFUNC_FLAG (t) = 1;
8609 /* ... and not really an aggregate. */
8610 SET_IS_AGGR_TYPE (t, 0);
8611
8612 fields[0] = build_lang_field_decl (FIELD_DECL, delta_identifier,
8613 delta_type_node);
8614 fields[1] = build_lang_field_decl (FIELD_DECL, index_identifier,
8615 delta_type_node);
8616 fields[2] = build_lang_field_decl (FIELD_DECL, pfn_or_delta2_identifier, u);
8617 finish_builtin_type (t, "__ptrmemfunc_type", fields, 2, ptr_type_node);
8618
8619 pop_obstacks ();
8620
8621 /* Zap out the name so that the back-end will give us the debugging
8622 information for this anonymous RECORD_TYPE. */
8623 TYPE_NAME (t) = NULL_TREE;
8624
8625 TYPE_SET_PTRMEMFUNC_TYPE (type, t);
8626
8627 /* Seems to be wanted. */
8628 CLASSTYPE_GOT_SEMICOLON (t) = 1;
8629 return t;
8630 }
8631
8632 /* Given declspecs and a declarator,
8633 determine the name and type of the object declared
8634 and construct a ..._DECL node for it.
8635 (In one case we can return a ..._TYPE node instead.
8636 For invalid input we sometimes return 0.)
8637
8638 DECLSPECS is a chain of tree_list nodes whose value fields
8639 are the storage classes and type specifiers.
8640
8641 DECL_CONTEXT says which syntactic context this declaration is in:
8642 NORMAL for most contexts. Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
8643 FUNCDEF for a function definition. Like NORMAL but a few different
8644 error messages in each case. Return value may be zero meaning
8645 this definition is too screwy to try to parse.
8646 MEMFUNCDEF for a function definition. Like FUNCDEF but prepares to
8647 handle member functions (which have FIELD context).
8648 Return value may be zero meaning this definition is too screwy to
8649 try to parse.
8650 PARM for a parameter declaration (either within a function prototype
8651 or before a function body). Make a PARM_DECL, or return void_type_node.
8652 CATCHPARM for a parameter declaration before a catch clause.
8653 TYPENAME if for a typename (in a cast or sizeof).
8654 Don't make a DECL node; just return the ..._TYPE node.
8655 FIELD for a struct or union field; make a FIELD_DECL.
8656 BITFIELD for a field with specified width.
8657 INITIALIZED is 1 if the decl has an initializer.
8658
8659 In the TYPENAME case, DECLARATOR is really an absolute declarator.
8660 It may also be so in the PARM case, for a prototype where the
8661 argument type is specified but not the name.
8662
8663 This function is where the complicated C meanings of `static'
8664 and `extern' are interpreted.
8665
8666 For C++, if there is any monkey business to do, the function which
8667 calls this one must do it, i.e., prepending instance variables,
8668 renaming overloaded function names, etc.
8669
8670 Note that for this C++, it is an error to define a method within a class
8671 which does not belong to that class.
8672
8673 Except in the case where SCOPE_REFs are implicitly known (such as
8674 methods within a class being redundantly qualified),
8675 declarations which involve SCOPE_REFs are returned as SCOPE_REFs
8676 (class_name::decl_name). The caller must also deal with this.
8677
8678 If a constructor or destructor is seen, and the context is FIELD,
8679 then the type gains the attribute TREE_HAS_x. If such a declaration
8680 is erroneous, NULL_TREE is returned.
8681
8682 QUALS is used only for FUNCDEF and MEMFUNCDEF cases. For a member
8683 function, these are the qualifiers to give to the `this' pointer.
8684
8685 May return void_type_node if the declarator turned out to be a friend.
8686 See grokfield for details. */
8687
8688 enum return_types { return_normal, return_ctor, return_dtor, return_conversion };
8689
8690 /* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
8691 Check to see that the definition is valid. Issue appropriate error
8692 messages. Return 1 if the definition is particularly bad, or 0
8693 otherwise. */
8694
8695 int
8696 check_static_variable_definition (decl, type)
8697 tree decl;
8698 tree type;
8699 {
8700 /* Motion 10 at San Diego: If a static const integral data member is
8701 initialized with an integral constant expression, the initializer
8702 may appear either in the declaration (within the class), or in
8703 the definition, but not both. If it appears in the class, the
8704 member is a member constant. The file-scope definition is always
8705 required. */
8706 if (CLASS_TYPE_P (type) || TREE_CODE (type) == REFERENCE_TYPE)
8707 {
8708 cp_error ("in-class initialization of static data member of non-integral type `%T'",
8709 type);
8710 /* If we just return the declaration, crashes will sometimes
8711 occur. We therefore return void_type_node, as if this was a
8712 friend declaration, to cause callers to completely ignore
8713 this declaration. */
8714 return 1;
8715 }
8716 else if (!CP_TYPE_CONST_P (type))
8717 cp_error ("ANSI C++ forbids in-class initialization of non-const static member `%D'",
8718 decl);
8719 else if (pedantic && !INTEGRAL_TYPE_P (type))
8720 cp_pedwarn ("ANSI C++ forbids initialization of member constant `%D' of non-integral type `%T'", decl, type);
8721
8722 return 0;
8723 }
8724
8725 tree
8726 grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
8727 tree declspecs;
8728 tree declarator;
8729 enum decl_context decl_context;
8730 int initialized;
8731 tree attrlist;
8732 {
8733 RID_BIT_TYPE specbits;
8734 int nclasses = 0;
8735 tree spec;
8736 tree type = NULL_TREE;
8737 int longlong = 0;
8738 int constp;
8739 int restrictp;
8740 int volatilep;
8741 int type_quals;
8742 int virtualp, explicitp, friendp, inlinep, staticp;
8743 int explicit_int = 0;
8744 int explicit_char = 0;
8745 int defaulted_int = 0;
8746 int opaque_typedef = 0;
8747 tree typedef_decl = NULL_TREE;
8748 char *name;
8749 tree typedef_type = NULL_TREE;
8750 int funcdef_flag = 0;
8751 enum tree_code innermost_code = ERROR_MARK;
8752 int bitfield = 0;
8753 #if 0
8754 /* See the code below that used this. */
8755 tree decl_machine_attr = NULL_TREE;
8756 #endif
8757 /* Set this to error_mark_node for FIELD_DECLs we could not handle properly.
8758 All FIELD_DECLs we build here have `init' put into their DECL_INITIAL. */
8759 tree init = NULL_TREE;
8760
8761 /* Keep track of what sort of function is being processed
8762 so that we can warn about default return values, or explicit
8763 return values which do not match prescribed defaults. */
8764 enum return_types return_type = return_normal;
8765
8766 tree dname = NULL_TREE;
8767 tree ctype = current_class_type;
8768 tree ctor_return_type = NULL_TREE;
8769 enum overload_flags flags = NO_SPECIAL;
8770 tree quals = NULL_TREE;
8771 tree raises = NULL_TREE;
8772 int template_count = 0;
8773 tree in_namespace = NULL_TREE;
8774 tree inner_attrs;
8775 int ignore_attrs;
8776
8777 RIDBIT_RESET_ALL (specbits);
8778 if (decl_context == FUNCDEF)
8779 funcdef_flag = 1, decl_context = NORMAL;
8780 else if (decl_context == MEMFUNCDEF)
8781 funcdef_flag = -1, decl_context = FIELD;
8782 else if (decl_context == BITFIELD)
8783 bitfield = 1, decl_context = FIELD;
8784
8785 /* Look inside a declarator for the name being declared
8786 and get it as a string, for an error message. */
8787 {
8788 tree *next = &declarator;
8789 register tree decl;
8790 name = NULL;
8791
8792 while (next && *next)
8793 {
8794 decl = *next;
8795 switch (TREE_CODE (decl))
8796 {
8797 case TREE_LIST:
8798 /* For attributes. */
8799 next = &TREE_VALUE (decl);
8800 break;
8801
8802 case COND_EXPR:
8803 ctype = NULL_TREE;
8804 next = &TREE_OPERAND (decl, 0);
8805 break;
8806
8807 case BIT_NOT_EXPR: /* For C++ destructors! */
8808 {
8809 tree name = TREE_OPERAND (decl, 0);
8810 tree rename = NULL_TREE;
8811
8812 my_friendly_assert (flags == NO_SPECIAL, 152);
8813 flags = DTOR_FLAG;
8814 return_type = return_dtor;
8815 if (TREE_CODE (name) == TYPE_DECL)
8816 TREE_OPERAND (decl, 0) = name = constructor_name (name);
8817 my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 153);
8818 if (ctype == NULL_TREE)
8819 {
8820 if (current_class_type == NULL_TREE)
8821 {
8822 error ("destructors must be member functions");
8823 flags = NO_SPECIAL;
8824 }
8825 else
8826 {
8827 tree t = constructor_name (current_class_name);
8828 if (t != name)
8829 rename = t;
8830 }
8831 }
8832 else
8833 {
8834 tree t = constructor_name (ctype);
8835 if (t != name)
8836 rename = t;
8837 }
8838
8839 if (rename)
8840 {
8841 cp_error ("destructor `%T' must match class name `%T'",
8842 name, rename);
8843 TREE_OPERAND (decl, 0) = rename;
8844 }
8845 next = &name;
8846 }
8847 break;
8848
8849 case ADDR_EXPR: /* C++ reference declaration */
8850 /* Fall through. */
8851 case ARRAY_REF:
8852 case INDIRECT_REF:
8853 ctype = NULL_TREE;
8854 innermost_code = TREE_CODE (decl);
8855 next = &TREE_OPERAND (decl, 0);
8856 break;
8857
8858 case CALL_EXPR:
8859 if (parmlist_is_exprlist (TREE_OPERAND (decl, 1)))
8860 {
8861 /* This is actually a variable declaration using constructor
8862 syntax. We need to call start_decl and cp_finish_decl so we
8863 can get the variable initialized... */
8864
8865 *next = TREE_OPERAND (decl, 0);
8866 init = TREE_OPERAND (decl, 1);
8867
8868 decl = start_decl (declarator, declspecs, 1, NULL_TREE, NULL_TREE);
8869 if (decl)
8870 {
8871 /* Look for __unused__ attribute */
8872 if (TREE_USED (TREE_TYPE (decl)))
8873 TREE_USED (decl) = 1;
8874 finish_decl (decl, init, NULL_TREE);
8875 }
8876 else
8877 cp_error ("invalid declarator");
8878 return 0;
8879 }
8880 innermost_code = TREE_CODE (decl);
8881 if (decl_context == FIELD && ctype == NULL_TREE)
8882 ctype = current_class_type;
8883 if (ctype
8884 && TREE_OPERAND (decl, 0)
8885 && (TREE_CODE (TREE_OPERAND (decl, 0)) == TYPE_DECL
8886 && ((DECL_NAME (TREE_OPERAND (decl, 0))
8887 == constructor_name_full (ctype))
8888 || (DECL_NAME (TREE_OPERAND (decl, 0))
8889 == constructor_name (ctype)))))
8890 TREE_OPERAND (decl, 0) = constructor_name (ctype);
8891 next = &TREE_OPERAND (decl, 0);
8892 decl = *next;
8893 if (ctype != NULL_TREE
8894 && decl != NULL_TREE && flags != DTOR_FLAG
8895 && decl == constructor_name (ctype))
8896 {
8897 return_type = return_ctor;
8898 ctor_return_type = ctype;
8899 }
8900 ctype = NULL_TREE;
8901 break;
8902
8903 case TEMPLATE_ID_EXPR:
8904 {
8905 tree fns = TREE_OPERAND (decl, 0);
8906
8907 if (TREE_CODE (fns) == LOOKUP_EXPR)
8908 fns = TREE_OPERAND (fns, 0);
8909
8910 if (TREE_CODE (fns) == IDENTIFIER_NODE)
8911 dname = fns;
8912 else if (is_overloaded_fn (fns))
8913 dname = DECL_NAME (get_first_fn (fns));
8914 else
8915 my_friendly_abort (0);
8916 }
8917 /* Fall through. */
8918
8919 case IDENTIFIER_NODE:
8920 if (TREE_CODE (decl) == IDENTIFIER_NODE)
8921 dname = decl;
8922
8923 next = 0;
8924
8925 if (is_rid (dname))
8926 {
8927 cp_error ("declarator-id missing; using reserved word `%D'",
8928 dname);
8929 name = IDENTIFIER_POINTER (dname);
8930 }
8931 if (! IDENTIFIER_OPNAME_P (dname)
8932 /* GNU/Linux headers use '__op'. Arrgh. */
8933 || (IDENTIFIER_TYPENAME_P (dname) && ! TREE_TYPE (dname)))
8934 name = IDENTIFIER_POINTER (dname);
8935 else
8936 {
8937 if (IDENTIFIER_TYPENAME_P (dname))
8938 {
8939 my_friendly_assert (flags == NO_SPECIAL, 154);
8940 flags = TYPENAME_FLAG;
8941 ctor_return_type = TREE_TYPE (dname);
8942 return_type = return_conversion;
8943 }
8944 name = operator_name_string (dname);
8945 }
8946 break;
8947
8948 /* C++ extension */
8949 case SCOPE_REF:
8950 {
8951 /* Perform error checking, and decide on a ctype. */
8952 tree cname = TREE_OPERAND (decl, 0);
8953 if (cname == NULL_TREE)
8954 ctype = NULL_TREE;
8955 else if (TREE_CODE (cname) == NAMESPACE_DECL)
8956 {
8957 ctype = NULL_TREE;
8958 in_namespace = TREE_OPERAND (decl, 0);
8959 TREE_OPERAND (decl, 0) = NULL_TREE;
8960 }
8961 else if (! is_aggr_type (cname, 1))
8962 TREE_OPERAND (decl, 0) = NULL_TREE;
8963 /* Must test TREE_OPERAND (decl, 1), in case user gives
8964 us `typedef (class::memfunc)(int); memfunc *memfuncptr;' */
8965 else if (TREE_OPERAND (decl, 1)
8966 && TREE_CODE (TREE_OPERAND (decl, 1)) == INDIRECT_REF)
8967 ctype = cname;
8968 else if (TREE_CODE (cname) == TEMPLATE_TYPE_PARM
8969 || TREE_CODE (cname) == TEMPLATE_TEMPLATE_PARM)
8970 {
8971 cp_error ("`%T::%D' is not a valid declarator", cname,
8972 TREE_OPERAND (decl, 1));
8973 cp_error (" perhaps you want `typename %T::%D' to make it a type",
8974 cname, TREE_OPERAND (decl, 1));
8975 return void_type_node;
8976 }
8977 else if (ctype == NULL_TREE)
8978 ctype = cname;
8979 else if (TREE_COMPLEXITY (decl) == current_class_depth)
8980 TREE_OPERAND (decl, 0) = ctype;
8981 else
8982 {
8983 if (! UNIQUELY_DERIVED_FROM_P (cname, ctype))
8984 {
8985 cp_error ("type `%T' is not derived from type `%T'",
8986 cname, ctype);
8987 TREE_OPERAND (decl, 0) = NULL_TREE;
8988 }
8989 else
8990 ctype = cname;
8991 }
8992
8993 if (ctype && TREE_CODE (TREE_OPERAND (decl, 1)) == TYPE_DECL
8994 && ((DECL_NAME (TREE_OPERAND (decl, 1))
8995 == constructor_name_full (ctype))
8996 || (DECL_NAME (TREE_OPERAND (decl, 1))
8997 == constructor_name (ctype))))
8998 TREE_OPERAND (decl, 1) = constructor_name (ctype);
8999 next = &TREE_OPERAND (decl, 1);
9000 decl = *next;
9001 if (ctype)
9002 {
9003 if (TREE_CODE (decl) == IDENTIFIER_NODE
9004 && constructor_name (ctype) == decl)
9005 {
9006 return_type = return_ctor;
9007 ctor_return_type = ctype;
9008 }
9009 else if (TREE_CODE (decl) == BIT_NOT_EXPR
9010 && TREE_CODE (TREE_OPERAND (decl, 0)) == IDENTIFIER_NODE
9011 && (constructor_name (ctype) == TREE_OPERAND (decl, 0)
9012 || constructor_name_full (ctype) == TREE_OPERAND (decl, 0)))
9013 {
9014 return_type = return_dtor;
9015 ctor_return_type = ctype;
9016 flags = DTOR_FLAG;
9017 TREE_OPERAND (decl, 0) = constructor_name (ctype);
9018 next = &TREE_OPERAND (decl, 0);
9019 }
9020 }
9021 }
9022 break;
9023
9024 case ERROR_MARK:
9025 next = 0;
9026 break;
9027
9028 case TYPE_DECL:
9029 /* Parse error puts this typespec where
9030 a declarator should go. */
9031 cp_error ("`%T' specified as declarator-id", DECL_NAME (decl));
9032 if (TREE_TYPE (decl) == current_class_type)
9033 cp_error (" perhaps you want `%T' for a constructor",
9034 current_class_name);
9035 dname = DECL_NAME (decl);
9036 name = IDENTIFIER_POINTER (dname);
9037
9038 /* Avoid giving two errors for this. */
9039 IDENTIFIER_CLASS_VALUE (dname) = NULL_TREE;
9040
9041 declspecs = temp_tree_cons (NULL_TREE, integer_type_node,
9042 declspecs);
9043 *next = dname;
9044 next = 0;
9045 break;
9046
9047 default:
9048 cp_compiler_error ("`%D' as declarator", decl);
9049 return 0; /* We used to do a 155 abort here. */
9050 }
9051 }
9052 if (name == NULL)
9053 name = "type name";
9054 }
9055
9056 /* A function definition's declarator must have the form of
9057 a function declarator. */
9058
9059 if (funcdef_flag && innermost_code != CALL_EXPR)
9060 return 0;
9061
9062 if (((dname && IDENTIFIER_OPNAME_P (dname)) || flags == TYPENAME_FLAG)
9063 && innermost_code != CALL_EXPR
9064 && ! (ctype && declspecs == NULL_TREE))
9065 {
9066 cp_error ("declaration of `%D' as non-function", dname);
9067 return void_type_node;
9068 }
9069
9070 /* Anything declared one level down from the top level
9071 must be one of the parameters of a function
9072 (because the body is at least two levels down). */
9073
9074 /* This heuristic cannot be applied to C++ nodes! Fixed, however,
9075 by not allowing C++ class definitions to specify their parameters
9076 with xdecls (must be spec.d in the parmlist).
9077
9078 Since we now wait to push a class scope until we are sure that
9079 we are in a legitimate method context, we must set oldcname
9080 explicitly (since current_class_name is not yet alive).
9081
9082 We also want to avoid calling this a PARM if it is in a namespace. */
9083
9084 if (decl_context == NORMAL && ! namespace_bindings_p ()
9085 && ! pseudo_global_level_p ())
9086 {
9087 struct binding_level *b = current_binding_level;
9088 current_binding_level = b->level_chain;
9089 if (current_binding_level != 0 && toplevel_bindings_p ())
9090 decl_context = PARM;
9091 current_binding_level = b;
9092 }
9093
9094 /* Look through the decl specs and record which ones appear.
9095 Some typespecs are defined as built-in typenames.
9096 Others, the ones that are modifiers of other types,
9097 are represented by bits in SPECBITS: set the bits for
9098 the modifiers that appear. Storage class keywords are also in SPECBITS.
9099
9100 If there is a typedef name or a type, store the type in TYPE.
9101 This includes builtin typedefs such as `int'.
9102
9103 Set EXPLICIT_INT if the type is `int' or `char' and did not
9104 come from a user typedef.
9105
9106 Set LONGLONG if `long' is mentioned twice.
9107
9108 For C++, constructors and destructors have their own fast treatment. */
9109
9110 for (spec = declspecs; spec; spec = TREE_CHAIN (spec))
9111 {
9112 register int i;
9113 register tree id;
9114
9115 /* Certain parse errors slip through. For example,
9116 `int class;' is not caught by the parser. Try
9117 weakly to recover here. */
9118 if (TREE_CODE (spec) != TREE_LIST)
9119 return 0;
9120
9121 id = TREE_VALUE (spec);
9122
9123 if (TREE_CODE (id) == IDENTIFIER_NODE)
9124 {
9125 if (id == ridpointers[(int) RID_INT]
9126 || id == ridpointers[(int) RID_CHAR]
9127 || id == ridpointers[(int) RID_BOOL]
9128 || id == ridpointers[(int) RID_WCHAR])
9129 {
9130 if (type)
9131 {
9132 if (id == ridpointers[(int) RID_BOOL])
9133 error ("`bool' is now a keyword");
9134 else
9135 cp_error ("extraneous `%T' ignored", id);
9136 }
9137 else
9138 {
9139 if (id == ridpointers[(int) RID_INT])
9140 explicit_int = 1;
9141 else if (id == ridpointers[(int) RID_CHAR])
9142 explicit_char = 1;
9143 type = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (id));
9144 }
9145 goto found;
9146 }
9147 /* C++ aggregate types. */
9148 if (IDENTIFIER_HAS_TYPE_VALUE (id))
9149 {
9150 if (type)
9151 cp_error ("multiple declarations `%T' and `%T'", type, id);
9152 else
9153 type = IDENTIFIER_TYPE_VALUE (id);
9154 goto found;
9155 }
9156
9157 for (i = (int) RID_FIRST_MODIFIER; i <= (int) RID_LAST_MODIFIER; i++)
9158 {
9159 if (ridpointers[i] == id)
9160 {
9161 if (i == (int) RID_LONG && RIDBIT_SETP (i, specbits))
9162 {
9163 if (pedantic && ! in_system_header && warn_long_long)
9164 pedwarn ("ANSI C++ does not support `long long'");
9165 if (longlong)
9166 error ("`long long long' is too long for GCC");
9167 else
9168 longlong = 1;
9169 }
9170 else if (RIDBIT_SETP (i, specbits))
9171 pedwarn ("duplicate `%s'", IDENTIFIER_POINTER (id));
9172 RIDBIT_SET (i, specbits);
9173 goto found;
9174 }
9175 }
9176 }
9177 /* C++ aggregate types. */
9178 else if (TREE_CODE (id) == TYPE_DECL || TREE_CODE (id) == TEMPLATE_DECL)
9179 {
9180 if (type)
9181 cp_error ("multiple declarations `%T' and `%T'", type,
9182 TREE_TYPE (id));
9183 else
9184 {
9185 type = TREE_TYPE (id);
9186 TREE_VALUE (spec) = type;
9187 }
9188 goto found;
9189 }
9190 if (type)
9191 error ("two or more data types in declaration of `%s'", name);
9192 else if (TREE_CODE (id) == IDENTIFIER_NODE)
9193 {
9194 register tree t = lookup_name (id, 1);
9195 if (!t || TREE_CODE (t) != TYPE_DECL)
9196 error ("`%s' fails to be a typedef or built in type",
9197 IDENTIFIER_POINTER (id));
9198 else
9199 {
9200 type = TREE_TYPE (t);
9201 #if 0
9202 /* See the code below that used this. */
9203 decl_machine_attr = DECL_MACHINE_ATTRIBUTES (id);
9204 #endif
9205 typedef_decl = t;
9206 }
9207 }
9208 else if (id != error_mark_node)
9209 /* Can't change CLASS nodes into RECORD nodes here! */
9210 type = id;
9211
9212 found: ;
9213 }
9214
9215 typedef_type = type;
9216
9217 /* No type at all: default to `int', and set DEFAULTED_INT
9218 because it was not a user-defined typedef.
9219 Except when we have a `typedef' inside a signature, in
9220 which case the type defaults to `unknown type' and is
9221 instantiated when assigning to a signature pointer or ref. */
9222
9223 if (type == NULL_TREE
9224 && (RIDBIT_SETP (RID_SIGNED, specbits)
9225 || RIDBIT_SETP (RID_UNSIGNED, specbits)
9226 || RIDBIT_SETP (RID_LONG, specbits)
9227 || RIDBIT_SETP (RID_SHORT, specbits)))
9228 {
9229 /* These imply 'int'. */
9230 type = integer_type_node;
9231 defaulted_int = 1;
9232 }
9233
9234 if (type == NULL_TREE)
9235 {
9236 explicit_int = -1;
9237 if (return_type == return_dtor)
9238 type = void_type_node;
9239 else if (return_type == return_ctor)
9240 type = build_pointer_type (ctor_return_type);
9241 else if (return_type == return_conversion)
9242 type = ctor_return_type;
9243 else if (current_class_type
9244 && IS_SIGNATURE (current_class_type)
9245 && RIDBIT_SETP (RID_TYPEDEF, specbits)
9246 && (decl_context == FIELD || decl_context == NORMAL))
9247 {
9248 explicit_int = 0;
9249 opaque_typedef = 1;
9250 type = copy_node (opaque_type_node);
9251 }
9252 else
9253 {
9254 if (! pedantic && ! warn_return_type
9255 && funcdef_flag
9256 && MAIN_NAME_P (dname)
9257 && ctype == NULL_TREE
9258 && in_namespace == NULL_TREE
9259 && current_namespace == global_namespace)
9260 /* Let `main () { }' slide, since it's so common. */;
9261 else
9262 cp_pedwarn ("ANSI C++ forbids declaration `%D' with no type",
9263 dname);
9264 type = integer_type_node;
9265 }
9266 }
9267 else if (return_type == return_dtor)
9268 {
9269 error ("return type specification for destructor invalid");
9270 type = void_type_node;
9271 }
9272 else if (return_type == return_ctor)
9273 {
9274 error ("return type specification for constructor invalid");
9275 type = build_pointer_type (ctor_return_type);
9276 }
9277 else if (return_type == return_conversion)
9278 {
9279 if (!same_type_p (type, ctor_return_type))
9280 cp_error ("operator `%T' declared to return `%T'",
9281 ctor_return_type, type);
9282 else
9283 cp_pedwarn ("return type specified for `operator %T'",
9284 ctor_return_type);
9285
9286 type = ctor_return_type;
9287 }
9288
9289 ctype = NULL_TREE;
9290
9291 /* Now process the modifiers that were specified
9292 and check for invalid combinations. */
9293
9294 /* Long double is a special combination. */
9295
9296 if (RIDBIT_SETP (RID_LONG, specbits)
9297 && TYPE_MAIN_VARIANT (type) == double_type_node)
9298 {
9299 RIDBIT_RESET (RID_LONG, specbits);
9300 type = build_qualified_type (long_double_type_node,
9301 CP_TYPE_QUALS (type));
9302 }
9303
9304 /* Check all other uses of type modifiers. */
9305
9306 if (RIDBIT_SETP (RID_UNSIGNED, specbits)
9307 || RIDBIT_SETP (RID_SIGNED, specbits)
9308 || RIDBIT_SETP (RID_LONG, specbits)
9309 || RIDBIT_SETP (RID_SHORT, specbits))
9310 {
9311 int ok = 0;
9312
9313 if (TREE_CODE (type) == REAL_TYPE)
9314 error ("short, signed or unsigned invalid for `%s'", name);
9315 else if (TREE_CODE (type) != INTEGER_TYPE)
9316 error ("long, short, signed or unsigned invalid for `%s'", name);
9317 else if (RIDBIT_SETP (RID_LONG, specbits)
9318 && RIDBIT_SETP (RID_SHORT, specbits))
9319 error ("long and short specified together for `%s'", name);
9320 else if ((RIDBIT_SETP (RID_LONG, specbits)
9321 || RIDBIT_SETP (RID_SHORT, specbits))
9322 && explicit_char)
9323 error ("long or short specified with char for `%s'", name);
9324 else if ((RIDBIT_SETP (RID_LONG, specbits)
9325 || RIDBIT_SETP (RID_SHORT, specbits))
9326 && TREE_CODE (type) == REAL_TYPE)
9327 error ("long or short specified with floating type for `%s'", name);
9328 else if (RIDBIT_SETP (RID_SIGNED, specbits)
9329 && RIDBIT_SETP (RID_UNSIGNED, specbits))
9330 error ("signed and unsigned given together for `%s'", name);
9331 else
9332 {
9333 ok = 1;
9334 if (!explicit_int && !defaulted_int && !explicit_char && pedantic)
9335 {
9336 pedwarn ("long, short, signed or unsigned used invalidly for `%s'",
9337 name);
9338 if (flag_pedantic_errors)
9339 ok = 0;
9340 }
9341 }
9342
9343 /* Discard the type modifiers if they are invalid. */
9344 if (! ok)
9345 {
9346 RIDBIT_RESET (RID_UNSIGNED, specbits);
9347 RIDBIT_RESET (RID_SIGNED, specbits);
9348 RIDBIT_RESET (RID_LONG, specbits);
9349 RIDBIT_RESET (RID_SHORT, specbits);
9350 longlong = 0;
9351 }
9352 }
9353
9354 if (RIDBIT_SETP (RID_COMPLEX, specbits)
9355 && TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
9356 {
9357 error ("complex invalid for `%s'", name);
9358 RIDBIT_RESET (RID_COMPLEX, specbits);
9359 }
9360
9361 /* Decide whether an integer type is signed or not.
9362 Optionally treat bitfields as signed by default. */
9363 if (RIDBIT_SETP (RID_UNSIGNED, specbits)
9364 || (bitfield && ! flag_signed_bitfields
9365 && (explicit_int || defaulted_int || explicit_char
9366 /* A typedef for plain `int' without `signed'
9367 can be controlled just like plain `int'. */
9368 || ! (typedef_decl != NULL_TREE
9369 && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
9370 && TREE_CODE (type) != ENUMERAL_TYPE
9371 && RIDBIT_NOTSETP (RID_SIGNED, specbits)))
9372 {
9373 if (longlong)
9374 type = long_long_unsigned_type_node;
9375 else if (RIDBIT_SETP (RID_LONG, specbits))
9376 type = long_unsigned_type_node;
9377 else if (RIDBIT_SETP (RID_SHORT, specbits))
9378 type = short_unsigned_type_node;
9379 else if (type == char_type_node)
9380 type = unsigned_char_type_node;
9381 else if (typedef_decl)
9382 type = unsigned_type (type);
9383 else
9384 type = unsigned_type_node;
9385 }
9386 else if (RIDBIT_SETP (RID_SIGNED, specbits)
9387 && type == char_type_node)
9388 type = signed_char_type_node;
9389 else if (longlong)
9390 type = long_long_integer_type_node;
9391 else if (RIDBIT_SETP (RID_LONG, specbits))
9392 type = long_integer_type_node;
9393 else if (RIDBIT_SETP (RID_SHORT, specbits))
9394 type = short_integer_type_node;
9395
9396 if (RIDBIT_SETP (RID_COMPLEX, specbits))
9397 {
9398 /* If we just have "complex", it is equivalent to
9399 "complex double", but if any modifiers at all are specified it is
9400 the complex form of TYPE. E.g, "complex short" is
9401 "complex short int". */
9402
9403 if (defaulted_int && ! longlong
9404 && ! (RIDBIT_SETP (RID_LONG, specbits)
9405 || RIDBIT_SETP (RID_SHORT, specbits)
9406 || RIDBIT_SETP (RID_SIGNED, specbits)
9407 || RIDBIT_SETP (RID_UNSIGNED, specbits)))
9408 type = complex_double_type_node;
9409 else if (type == integer_type_node)
9410 type = complex_integer_type_node;
9411 else if (type == float_type_node)
9412 type = complex_float_type_node;
9413 else if (type == double_type_node)
9414 type = complex_double_type_node;
9415 else if (type == long_double_type_node)
9416 type = complex_long_double_type_node;
9417 else
9418 type = build_complex_type (type);
9419 }
9420
9421 if (return_type == return_conversion
9422 && (RIDBIT_SETP (RID_CONST, specbits)
9423 || RIDBIT_SETP (RID_VOLATILE, specbits)
9424 || RIDBIT_SETP (RID_RESTRICT, specbits)))
9425 cp_error ("qualifiers are not allowed on declaration of `operator %T'",
9426 ctor_return_type);
9427
9428 /* Set CONSTP if this declaration is `const', whether by
9429 explicit specification or via a typedef.
9430 Likewise for VOLATILEP. */
9431
9432 constp = !! RIDBIT_SETP (RID_CONST, specbits) + CP_TYPE_CONST_P (type);
9433 restrictp =
9434 !! RIDBIT_SETP (RID_RESTRICT, specbits) + CP_TYPE_RESTRICT_P (type);
9435 volatilep =
9436 !! RIDBIT_SETP (RID_VOLATILE, specbits) + CP_TYPE_VOLATILE_P (type);
9437 type_quals = ((constp ? TYPE_QUAL_CONST : 0)
9438 | (restrictp ? TYPE_QUAL_RESTRICT : 0)
9439 | (volatilep ? TYPE_QUAL_VOLATILE : 0));
9440 type = cp_build_qualified_type (type, type_quals);
9441 staticp = 0;
9442 inlinep = !! RIDBIT_SETP (RID_INLINE, specbits);
9443 virtualp = RIDBIT_SETP (RID_VIRTUAL, specbits);
9444 RIDBIT_RESET (RID_VIRTUAL, specbits);
9445 explicitp = RIDBIT_SETP (RID_EXPLICIT, specbits) != 0;
9446 RIDBIT_RESET (RID_EXPLICIT, specbits);
9447
9448 if (RIDBIT_SETP (RID_STATIC, specbits))
9449 staticp = 1 + (decl_context == FIELD);
9450
9451 if (virtualp && staticp == 2)
9452 {
9453 cp_error ("member `%D' cannot be declared both virtual and static",
9454 dname);
9455 staticp = 0;
9456 }
9457 friendp = RIDBIT_SETP (RID_FRIEND, specbits);
9458 RIDBIT_RESET (RID_FRIEND, specbits);
9459
9460 /* $7.1.2, Function specifiers */
9461 if (friendp && explicitp)
9462 error ("only declarations of constructors can be `explicit'");
9463
9464 if (RIDBIT_SETP (RID_MUTABLE, specbits))
9465 {
9466 if (decl_context == PARM)
9467 {
9468 error ("non-member `%s' cannot be declared `mutable'", name);
9469 RIDBIT_RESET (RID_MUTABLE, specbits);
9470 }
9471 else if (friendp || decl_context == TYPENAME)
9472 {
9473 error ("non-object member `%s' cannot be declared `mutable'", name);
9474 RIDBIT_RESET (RID_MUTABLE, specbits);
9475 }
9476 }
9477
9478 /* Warn if two storage classes are given. Default to `auto'. */
9479
9480 if (RIDBIT_ANY_SET (specbits))
9481 {
9482 if (RIDBIT_SETP (RID_STATIC, specbits)) nclasses++;
9483 if (RIDBIT_SETP (RID_EXTERN, specbits)) nclasses++;
9484 if (decl_context == PARM && nclasses > 0)
9485 error ("storage class specifiers invalid in parameter declarations");
9486 if (RIDBIT_SETP (RID_TYPEDEF, specbits))
9487 {
9488 if (decl_context == PARM)
9489 error ("typedef declaration invalid in parameter declaration");
9490 nclasses++;
9491 }
9492 if (RIDBIT_SETP (RID_AUTO, specbits)) nclasses++;
9493 if (RIDBIT_SETP (RID_REGISTER, specbits)) nclasses++;
9494 }
9495
9496 /* Give error if `virtual' is used outside of class declaration. */
9497 if (virtualp
9498 && (current_class_name == NULL_TREE || decl_context != FIELD))
9499 {
9500 error ("virtual outside class declaration");
9501 virtualp = 0;
9502 }
9503 if (current_class_name == NULL_TREE && RIDBIT_SETP (RID_MUTABLE, specbits))
9504 {
9505 error ("only members can be declared mutable");
9506 RIDBIT_RESET (RID_MUTABLE, specbits);
9507 }
9508
9509 /* Static anonymous unions are dealt with here. */
9510 if (staticp && decl_context == TYPENAME
9511 && TREE_CODE (declspecs) == TREE_LIST
9512 && ANON_UNION_TYPE_P (TREE_VALUE (declspecs)))
9513 decl_context = FIELD;
9514
9515 /* Give error if `const,' `volatile,' `inline,' `friend,' or `virtual'
9516 is used in a signature member function declaration. */
9517 if (decl_context == FIELD
9518 && IS_SIGNATURE (current_class_type)
9519 && RIDBIT_NOTSETP (RID_TYPEDEF, specbits))
9520 {
9521 if (type_quals != TYPE_UNQUALIFIED)
9522 {
9523 error ("type qualifiers specified for signature member function `%s'", name);
9524 type_quals = TYPE_UNQUALIFIED;
9525 }
9526 if (inlinep)
9527 {
9528 error ("`inline' specified for signature member function `%s'", name);
9529 /* Later, we'll make signature member functions inline. */
9530 inlinep = 0;
9531 }
9532 if (friendp)
9533 {
9534 error ("`friend' declaration in signature definition");
9535 friendp = 0;
9536 }
9537 if (virtualp)
9538 {
9539 error ("`virtual' specified for signature member function `%s'",
9540 name);
9541 /* Later, we'll make signature member functions virtual. */
9542 virtualp = 0;
9543 }
9544 }
9545
9546 /* Warn about storage classes that are invalid for certain
9547 kinds of declarations (parameters, typenames, etc.). */
9548
9549 if (nclasses > 1)
9550 error ("multiple storage classes in declaration of `%s'", name);
9551 else if (decl_context != NORMAL && nclasses > 0)
9552 {
9553 if ((decl_context == PARM || decl_context == CATCHPARM)
9554 && (RIDBIT_SETP (RID_REGISTER, specbits)
9555 || RIDBIT_SETP (RID_AUTO, specbits)))
9556 ;
9557 else if (RIDBIT_SETP (RID_TYPEDEF, specbits))
9558 ;
9559 else if (decl_context == FIELD
9560 && ! IS_SIGNATURE (current_class_type)
9561 /* C++ allows static class elements */
9562 && RIDBIT_SETP (RID_STATIC, specbits))
9563 /* C++ also allows inlines and signed and unsigned elements,
9564 but in those cases we don't come in here. */
9565 ;
9566 else
9567 {
9568 if (decl_context == FIELD)
9569 {
9570 tree tmp = NULL_TREE;
9571 register int op = 0;
9572
9573 if (declarator)
9574 {
9575 /* Avoid trying to get an operand off an identifier node. */
9576 if (TREE_CODE (declarator) == IDENTIFIER_NODE)
9577 tmp = declarator;
9578 else
9579 tmp = TREE_OPERAND (declarator, 0);
9580 op = IDENTIFIER_OPNAME_P (tmp);
9581 }
9582 error ("storage class specified for %s `%s'",
9583 IS_SIGNATURE (current_class_type)
9584 ? (op
9585 ? "signature member operator"
9586 : "signature member function")
9587 : (op ? "member operator" : "field"),
9588 op ? operator_name_string (tmp) : name);
9589 }
9590 else
9591 error (((decl_context == PARM || decl_context == CATCHPARM)
9592 ? "storage class specified for parameter `%s'"
9593 : "storage class specified for typename"), name);
9594 RIDBIT_RESET (RID_REGISTER, specbits);
9595 RIDBIT_RESET (RID_AUTO, specbits);
9596 RIDBIT_RESET (RID_EXTERN, specbits);
9597
9598 if (decl_context == FIELD && IS_SIGNATURE (current_class_type))
9599 {
9600 RIDBIT_RESET (RID_STATIC, specbits);
9601 staticp = 0;
9602 }
9603 }
9604 }
9605 else if (RIDBIT_SETP (RID_EXTERN, specbits) && initialized && !funcdef_flag)
9606 {
9607 if (toplevel_bindings_p ())
9608 {
9609 /* It's common practice (and completely valid) to have a const
9610 be initialized and declared extern. */
9611 if (!(type_quals & TYPE_QUAL_CONST))
9612 warning ("`%s' initialized and declared `extern'", name);
9613 }
9614 else
9615 error ("`%s' has both `extern' and initializer", name);
9616 }
9617 else if (RIDBIT_SETP (RID_EXTERN, specbits) && funcdef_flag
9618 && ! toplevel_bindings_p ())
9619 error ("nested function `%s' declared `extern'", name);
9620 else if (toplevel_bindings_p ())
9621 {
9622 if (RIDBIT_SETP (RID_AUTO, specbits))
9623 error ("top-level declaration of `%s' specifies `auto'", name);
9624 }
9625
9626 if (nclasses > 0 && friendp)
9627 error ("storage class specifiers invalid in friend function declarations");
9628
9629 /* Now figure out the structure of the declarator proper.
9630 Descend through it, creating more complex types, until we reach
9631 the declared identifier (or NULL_TREE, in an absolute declarator). */
9632
9633 inner_attrs = NULL_TREE;
9634 ignore_attrs = 0;
9635
9636 while (declarator && TREE_CODE (declarator) != IDENTIFIER_NODE
9637 && TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
9638 {
9639 /* Each level of DECLARATOR is either an ARRAY_REF (for ...[..]),
9640 an INDIRECT_REF (for *...),
9641 a CALL_EXPR (for ...(...)),
9642 an identifier (for the name being declared)
9643 or a null pointer (for the place in an absolute declarator
9644 where the name was omitted).
9645 For the last two cases, we have just exited the loop.
9646
9647 For C++ it could also be
9648 a SCOPE_REF (for class :: ...). In this case, we have converted
9649 sensible names to types, and those are the values we use to
9650 qualify the member name.
9651 an ADDR_EXPR (for &...),
9652 a BIT_NOT_EXPR (for destructors)
9653
9654 At this point, TYPE is the type of elements of an array,
9655 or for a function to return, or for a pointer to point to.
9656 After this sequence of ifs, TYPE is the type of the
9657 array or function or pointer, and DECLARATOR has had its
9658 outermost layer removed. */
9659
9660 if (type == error_mark_node)
9661 {
9662 if (TREE_CODE (declarator) == SCOPE_REF)
9663 declarator = TREE_OPERAND (declarator, 1);
9664 else
9665 declarator = TREE_OPERAND (declarator, 0);
9666 continue;
9667 }
9668 if (quals != NULL_TREE
9669 && (declarator == NULL_TREE
9670 || TREE_CODE (declarator) != SCOPE_REF))
9671 {
9672 if (ctype == NULL_TREE && TREE_CODE (type) == METHOD_TYPE)
9673 ctype = TYPE_METHOD_BASETYPE (type);
9674 if (ctype != NULL_TREE)
9675 {
9676 tree dummy = build_decl (TYPE_DECL, NULL_TREE, type);
9677 ctype = grok_method_quals (ctype, dummy, quals);
9678 type = TREE_TYPE (dummy);
9679 quals = NULL_TREE;
9680 }
9681 }
9682
9683 /* See the comment for the TREE_LIST case, below. */
9684 if (ignore_attrs)
9685 ignore_attrs = 0;
9686 else if (inner_attrs)
9687 {
9688 decl_attributes (type, inner_attrs, NULL_TREE);
9689 inner_attrs = NULL_TREE;
9690 }
9691
9692 switch (TREE_CODE (declarator))
9693 {
9694 case TREE_LIST:
9695 {
9696 /* We encode a declarator with embedded attributes using
9697 a TREE_LIST. The attributes apply to the declarator
9698 directly inside them, so we have to skip an iteration
9699 before applying them to the type. If the declarator just
9700 inside is the declarator-id, we apply the attrs to the
9701 decl itself. */
9702 inner_attrs = TREE_PURPOSE (declarator);
9703 ignore_attrs = 1;
9704 declarator = TREE_VALUE (declarator);
9705 }
9706 break;
9707
9708 case ARRAY_REF:
9709 {
9710 register tree itype = NULL_TREE;
9711 register tree size = TREE_OPERAND (declarator, 1);
9712 /* The index is a signed object `sizetype' bits wide. */
9713 tree index_type = signed_type (sizetype);
9714
9715 declarator = TREE_OPERAND (declarator, 0);
9716
9717 /* Check for some types that there cannot be arrays of. */
9718
9719 if (TREE_CODE (type) == VOID_TYPE)
9720 {
9721 cp_error ("declaration of `%D' as array of voids", dname);
9722 type = error_mark_node;
9723 }
9724
9725 if (TREE_CODE (type) == FUNCTION_TYPE)
9726 {
9727 cp_error ("declaration of `%D' as array of functions", dname);
9728 type = error_mark_node;
9729 }
9730
9731 /* ARM $8.4.3: Since you can't have a pointer to a reference,
9732 you can't have arrays of references. If we allowed them,
9733 then we'd be saying x[i] is valid for an array x, but
9734 then you'd have to ask: what does `*(x + i)' mean? */
9735 if (TREE_CODE (type) == REFERENCE_TYPE)
9736 {
9737 if (decl_context == TYPENAME)
9738 cp_error ("cannot make arrays of references");
9739 else
9740 cp_error ("declaration of `%D' as array of references",
9741 dname);
9742 type = error_mark_node;
9743 }
9744
9745 if (TREE_CODE (type) == OFFSET_TYPE)
9746 {
9747 cp_error ("declaration of `%D' as array of data members",
9748 dname);
9749 type = error_mark_node;
9750 }
9751
9752 if (TREE_CODE (type) == METHOD_TYPE)
9753 {
9754 cp_error ("declaration of `%D' as array of function members",
9755 dname);
9756 type = error_mark_node;
9757 }
9758
9759 if (size == error_mark_node)
9760 type = error_mark_node;
9761 else if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
9762 {
9763 /* [dcl.array]
9764
9765 the constant expressions that specify the bounds of
9766 the arrays can be omitted only for the first member
9767 of the sequence. */
9768 cp_error ("declaration of `%D' as multidimensional array",
9769 dname);
9770 cp_error ("must have bounds for all dimensions except the first");
9771 type = error_mark_node;
9772 }
9773
9774 if (type == error_mark_node)
9775 continue;
9776
9777 if (size)
9778 {
9779 /* Must suspend_momentary here because the index
9780 type may need to live until the end of the function.
9781 For example, it is used in the declaration of a
9782 variable which requires destructing at the end of
9783 the function; then build_vec_delete will need this
9784 value. */
9785 int yes = suspend_momentary ();
9786 /* Might be a cast. */
9787 if (TREE_CODE (size) == NOP_EXPR
9788 && TREE_TYPE (size) == TREE_TYPE (TREE_OPERAND (size, 0)))
9789 size = TREE_OPERAND (size, 0);
9790
9791 /* If this involves a template parameter, it'll be
9792 constant, but we don't know what the value is yet. */
9793 if (processing_template_decl)
9794 {
9795 /* Resolve a qualified reference to an enumerator or
9796 static const data member of ours. */
9797 if (TREE_CODE (size) == SCOPE_REF
9798 && TREE_OPERAND (size, 0) == current_class_type)
9799 {
9800 tree t = lookup_field (current_class_type,
9801 TREE_OPERAND (size, 1), 0, 0);
9802 if (t)
9803 size = t;
9804 }
9805
9806 itype = make_node (INTEGER_TYPE);
9807 TYPE_MIN_VALUE (itype) = size_zero_node;
9808 TYPE_MAX_VALUE (itype) = build_min
9809 (MINUS_EXPR, sizetype, size, integer_one_node);
9810 goto dont_grok_size;
9811 }
9812
9813 if (TREE_CODE (TREE_TYPE (size)) != INTEGER_TYPE
9814 && TREE_CODE (TREE_TYPE (size)) != ENUMERAL_TYPE
9815 && TREE_CODE (TREE_TYPE (size)) != BOOLEAN_TYPE)
9816 {
9817 cp_error ("size of array `%D' has non-integer type",
9818 dname);
9819 size = integer_one_node;
9820 }
9821 if (TREE_READONLY_DECL_P (size))
9822 size = decl_constant_value (size);
9823 if (pedantic && integer_zerop (size))
9824 cp_pedwarn ("ANSI C++ forbids zero-size array `%D'", dname);
9825 if (TREE_CONSTANT (size))
9826 {
9827 int old_flag_pedantic_errors = flag_pedantic_errors;
9828 int old_pedantic = pedantic;
9829 pedantic = flag_pedantic_errors = 1;
9830 /* Always give overflow errors on array subscripts. */
9831 constant_expression_warning (size);
9832 pedantic = old_pedantic;
9833 flag_pedantic_errors = old_flag_pedantic_errors;
9834 if (INT_CST_LT (size, integer_zero_node))
9835 {
9836 cp_error ("size of array `%D' is negative", dname);
9837 size = integer_one_node;
9838 }
9839 }
9840 else
9841 {
9842 if (pedantic)
9843 {
9844 if (dname)
9845 cp_pedwarn ("ANSI C++ forbids variable-size array `%D'",
9846 dname);
9847 else
9848 cp_pedwarn ("ANSI C++ forbids variable-size array");
9849 }
9850 }
9851
9852 itype
9853 = fold (build_binary_op (MINUS_EXPR,
9854 cp_convert (index_type, size),
9855 cp_convert (index_type,
9856 integer_one_node), 1));
9857 if (! TREE_CONSTANT (itype))
9858 itype = variable_size (itype);
9859 else if (TREE_OVERFLOW (itype))
9860 {
9861 error ("overflow in array dimension");
9862 TREE_OVERFLOW (itype) = 0;
9863 }
9864
9865 /* If we're a parm, we need to have a permanent type so
9866 mangling checks for re-use will work right. If both the
9867 element and index types are permanent, the array type
9868 will be, too. */
9869 if (decl_context == PARM
9870 && allocation_temporary_p () && TREE_PERMANENT (type))
9871 {
9872 push_obstacks (&permanent_obstack, &permanent_obstack);
9873 itype = build_index_type (itype);
9874 pop_obstacks ();
9875 }
9876 else
9877 itype = build_index_type (itype);
9878
9879 dont_grok_size:
9880 resume_momentary (yes);
9881 }
9882
9883 type = build_cplus_array_type (type, itype);
9884 ctype = NULL_TREE;
9885 }
9886 break;
9887
9888 case CALL_EXPR:
9889 {
9890 tree arg_types;
9891 int funcdecl_p;
9892 tree inner_parms = TREE_OPERAND (declarator, 1);
9893 tree inner_decl = TREE_OPERAND (declarator, 0);
9894
9895 /* Declaring a function type.
9896 Make sure we have a valid type for the function to return. */
9897
9898 /* We now know that the TYPE_QUALS don't apply to the
9899 decl, but to its return type. */
9900 type_quals = TYPE_UNQUALIFIED;
9901
9902 /* Warn about some types functions can't return. */
9903
9904 if (TREE_CODE (type) == FUNCTION_TYPE)
9905 {
9906 error ("`%s' declared as function returning a function", name);
9907 type = integer_type_node;
9908 }
9909 if (TREE_CODE (type) == ARRAY_TYPE)
9910 {
9911 error ("`%s' declared as function returning an array", name);
9912 type = integer_type_node;
9913 }
9914
9915 if (inner_decl && TREE_CODE (inner_decl) == SCOPE_REF)
9916 inner_decl = TREE_OPERAND (inner_decl, 1);
9917
9918 if (inner_decl && TREE_CODE (inner_decl) == TEMPLATE_ID_EXPR)
9919 inner_decl = dname;
9920
9921 /* Pick up type qualifiers which should be applied to `this'. */
9922 quals = TREE_OPERAND (declarator, 2);
9923
9924 /* Pick up the exception specifications. */
9925 raises = TREE_TYPE (declarator);
9926
9927 /* Say it's a definition only for the CALL_EXPR
9928 closest to the identifier. */
9929 funcdecl_p
9930 = inner_decl
9931 && (TREE_CODE (inner_decl) == IDENTIFIER_NODE
9932 || TREE_CODE (inner_decl) == TEMPLATE_ID_EXPR
9933 || TREE_CODE (inner_decl) == BIT_NOT_EXPR);
9934
9935 if (ctype == NULL_TREE
9936 && decl_context == FIELD
9937 && funcdecl_p
9938 && (friendp == 0 || dname == current_class_name))
9939 ctype = current_class_type;
9940
9941 if (ctype && return_type == return_conversion)
9942 TYPE_HAS_CONVERSION (ctype) = 1;
9943 if (ctype && constructor_name (ctype) == dname)
9944 {
9945 /* We are within a class's scope. If our declarator name
9946 is the same as the class name, and we are defining
9947 a function, then it is a constructor/destructor, and
9948 therefore returns a void type. */
9949
9950 if (flags == DTOR_FLAG)
9951 {
9952 /* ANSI C++ June 5 1992 WP 12.4.1. A destructor may
9953 not be declared const or volatile. A destructor
9954 may not be static. */
9955 if (staticp == 2)
9956 error ("destructor cannot be static member function");
9957 if (quals)
9958 {
9959 cp_error ("destructors may not be `%s'",
9960 IDENTIFIER_POINTER (TREE_VALUE (quals)));
9961 quals = NULL_TREE;
9962 }
9963 if (decl_context == FIELD)
9964 {
9965 if (! member_function_or_else (ctype, current_class_type,
9966 "destructor for alien class `%s' cannot be a member"))
9967 return void_type_node;
9968 }
9969 }
9970 else /* It's a constructor. */
9971 {
9972 if (explicitp == 1)
9973 explicitp = 2;
9974 /* ANSI C++ June 5 1992 WP 12.1.2. A constructor may
9975 not be declared const or volatile. A constructor may
9976 not be virtual. A constructor may not be static. */
9977 if (staticp == 2)
9978 error ("constructor cannot be static member function");
9979 if (virtualp)
9980 {
9981 pedwarn ("constructors cannot be declared virtual");
9982 virtualp = 0;
9983 }
9984 if (quals)
9985 {
9986 cp_error ("constructors may not be `%s'",
9987 IDENTIFIER_POINTER (TREE_VALUE (quals)));
9988 quals = NULL_TREE;
9989 }
9990 {
9991 RID_BIT_TYPE tmp_bits;
9992 bcopy ((void*)&specbits, (void*)&tmp_bits, sizeof (RID_BIT_TYPE));
9993 RIDBIT_RESET (RID_INLINE, tmp_bits);
9994 RIDBIT_RESET (RID_STATIC, tmp_bits);
9995 if (RIDBIT_ANY_SET (tmp_bits))
9996 error ("return value type specifier for constructor ignored");
9997 }
9998 type = build_pointer_type (ctype);
9999 if (decl_context == FIELD
10000 && IS_SIGNATURE (current_class_type))
10001 {
10002 error ("constructor not allowed in signature");
10003 return void_type_node;
10004 }
10005 else if (decl_context == FIELD)
10006 {
10007 if (! member_function_or_else (ctype, current_class_type,
10008 "constructor for alien class `%s' cannot be member"))
10009 return void_type_node;
10010 TYPE_HAS_CONSTRUCTOR (ctype) = 1;
10011 if (return_type != return_ctor)
10012 return NULL_TREE;
10013 }
10014 }
10015 if (decl_context == FIELD)
10016 staticp = 0;
10017 }
10018 else if (friendp)
10019 {
10020 if (initialized)
10021 error ("can't initialize friend function `%s'", name);
10022 if (virtualp)
10023 {
10024 /* Cannot be both friend and virtual. */
10025 error ("virtual functions cannot be friends");
10026 RIDBIT_RESET (RID_FRIEND, specbits);
10027 friendp = 0;
10028 }
10029 if (decl_context == NORMAL)
10030 error ("friend declaration not in class definition");
10031 if (current_function_decl && funcdef_flag)
10032 cp_error ("can't define friend function `%s' in a local class definition",
10033 name);
10034 }
10035
10036 /* Construct the function type and go to the next
10037 inner layer of declarator. */
10038
10039 declarator = TREE_OPERAND (declarator, 0);
10040
10041 /* FIXME: This is where default args should be fully
10042 processed. */
10043
10044 arg_types = grokparms (inner_parms, funcdecl_p ? funcdef_flag : 0);
10045
10046 if (declarator && flags == DTOR_FLAG)
10047 {
10048 /* A destructor declared in the body of a class will
10049 be represented as a BIT_NOT_EXPR. But, we just
10050 want the underlying IDENTIFIER. */
10051 if (TREE_CODE (declarator) == BIT_NOT_EXPR)
10052 declarator = TREE_OPERAND (declarator, 0);
10053
10054 if (strict_prototype == 0 && arg_types == NULL_TREE)
10055 arg_types = void_list_node;
10056 else if (arg_types == NULL_TREE
10057 || arg_types != void_list_node)
10058 {
10059 cp_error ("destructors may not have parameters");
10060 arg_types = void_list_node;
10061 last_function_parms = NULL_TREE;
10062 }
10063 }
10064
10065 /* ANSI says that `const int foo ();'
10066 does not make the function foo const. */
10067 type = build_function_type (type, arg_types);
10068
10069 {
10070 tree t;
10071 for (t = arg_types; t; t = TREE_CHAIN (t))
10072 if (TREE_PURPOSE (t)
10073 && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
10074 {
10075 add_defarg_fn (type);
10076 break;
10077 }
10078 }
10079 }
10080 break;
10081
10082 case ADDR_EXPR:
10083 case INDIRECT_REF:
10084 /* Filter out pointers-to-references and references-to-references.
10085 We can get these if a TYPE_DECL is used. */
10086
10087 if (TREE_CODE (type) == REFERENCE_TYPE)
10088 {
10089 error ("cannot declare %s to references",
10090 TREE_CODE (declarator) == ADDR_EXPR
10091 ? "references" : "pointers");
10092 declarator = TREE_OPERAND (declarator, 0);
10093 continue;
10094 }
10095
10096 if (TREE_CODE (type) == OFFSET_TYPE
10097 && (TREE_CODE (TREE_TYPE (type)) == VOID_TYPE
10098 || TREE_CODE (TREE_TYPE (type)) == REFERENCE_TYPE))
10099 {
10100 cp_error ("cannot declare pointer to `%#T' member",
10101 TREE_TYPE (type));
10102 type = TREE_TYPE (type);
10103 }
10104
10105 /* Merge any constancy or volatility into the target type
10106 for the pointer. */
10107
10108 /* We now know that the TYPE_QUALS don't apply to the decl,
10109 but to the target of the pointer. */
10110 type_quals = TYPE_UNQUALIFIED;
10111
10112 if (IS_SIGNATURE (type))
10113 {
10114 if (TREE_CODE (declarator) == ADDR_EXPR)
10115 {
10116 if (CLASSTYPE_METHOD_VEC (type) == NULL_TREE
10117 && TYPE_SIZE (type))
10118 cp_warning ("empty signature `%T' used in signature reference declaration",
10119 type);
10120 #if 0
10121 type = build_signature_reference_type (type);
10122 #else
10123 sorry ("signature reference");
10124 return NULL_TREE;
10125 #endif
10126 }
10127 else
10128 {
10129 if (CLASSTYPE_METHOD_VEC (type) == NULL_TREE
10130 && TYPE_SIZE (type))
10131 cp_warning ("empty signature `%T' used in signature pointer declaration",
10132 type);
10133 type = build_signature_pointer_type (type);
10134 }
10135 }
10136 else if (TREE_CODE (declarator) == ADDR_EXPR)
10137 {
10138 if (TREE_CODE (type) == VOID_TYPE)
10139 error ("invalid type: `void &'");
10140 else
10141 type = build_reference_type (type);
10142 }
10143 else if (TREE_CODE (type) == METHOD_TYPE)
10144 {
10145 type = build_ptrmemfunc_type (build_pointer_type (type));
10146 }
10147 else
10148 type = build_pointer_type (type);
10149
10150 /* Process a list of type modifier keywords (such as
10151 const or volatile) that were given inside the `*' or `&'. */
10152
10153 if (TREE_TYPE (declarator))
10154 {
10155 register tree typemodlist;
10156 int erred = 0;
10157
10158 constp = 0;
10159 volatilep = 0;
10160 restrictp = 0;
10161 for (typemodlist = TREE_TYPE (declarator); typemodlist;
10162 typemodlist = TREE_CHAIN (typemodlist))
10163 {
10164 tree qualifier = TREE_VALUE (typemodlist);
10165
10166 if (qualifier == ridpointers[(int) RID_CONST])
10167 constp++;
10168 else if (qualifier == ridpointers[(int) RID_VOLATILE])
10169 volatilep++;
10170 else if (qualifier == ridpointers[(int) RID_RESTRICT])
10171 restrictp++;
10172 else if (!erred)
10173 {
10174 erred = 1;
10175 error ("invalid type modifier within pointer declarator");
10176 }
10177 }
10178 if (constp > 1)
10179 pedwarn ("duplicate `const'");
10180 if (volatilep > 1)
10181 pedwarn ("duplicate `volatile'");
10182 if (restrictp > 1)
10183 pedwarn ("duplicate `restrict'");
10184
10185 type_quals = ((constp ? TYPE_QUAL_CONST : 0)
10186 | (restrictp ? TYPE_QUAL_RESTRICT : 0)
10187 | (volatilep ? TYPE_QUAL_VOLATILE : 0));
10188 if (TREE_CODE (declarator) == ADDR_EXPR
10189 && (constp || volatilep))
10190 {
10191 if (constp)
10192 pedwarn ("discarding `const' applied to a reference");
10193 if (volatilep)
10194 pedwarn ("discarding `volatile' applied to a reference");
10195 type_quals &= ~(TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE);
10196 }
10197 type = cp_build_qualified_type (type, type_quals);
10198 }
10199 declarator = TREE_OPERAND (declarator, 0);
10200 ctype = NULL_TREE;
10201 break;
10202
10203 case SCOPE_REF:
10204 {
10205 /* We have converted type names to NULL_TREE if the
10206 name was bogus, or to a _TYPE node, if not.
10207
10208 The variable CTYPE holds the type we will ultimately
10209 resolve to. The code here just needs to build
10210 up appropriate member types. */
10211 tree sname = TREE_OPERAND (declarator, 1);
10212 tree t;
10213
10214 /* Destructors can have their visibilities changed as well. */
10215 if (TREE_CODE (sname) == BIT_NOT_EXPR)
10216 sname = TREE_OPERAND (sname, 0);
10217
10218 if (TREE_COMPLEXITY (declarator) == 0)
10219 /* This needs to be here, in case we are called
10220 multiple times. */ ;
10221 else if (TREE_COMPLEXITY (declarator) == -1)
10222 /* Namespace member. */
10223 pop_decl_namespace ();
10224 else if (friendp && (TREE_COMPLEXITY (declarator) < 2))
10225 /* Don't fall out into global scope. Hides real bug? --eichin */ ;
10226 else if (! IS_AGGR_TYPE_CODE
10227 (TREE_CODE (TREE_OPERAND (declarator, 0))))
10228 ;
10229 else if (TREE_COMPLEXITY (declarator) == current_class_depth)
10230 {
10231 /* Resolve any TYPENAME_TYPEs from the decl-specifier-seq
10232 that refer to ctype. They couldn't be resolved earlier
10233 because we hadn't pushed into the class yet.
10234 Example: resolve 'B<T>::type' in
10235 'B<typename B<T>::type> B<T>::f () { }'. */
10236 if (current_template_parms
10237 && uses_template_parms (type)
10238 && uses_template_parms (current_class_type))
10239 {
10240 tree args = current_template_args ();
10241 type = tsubst (type, args, NULL_TREE);
10242 }
10243
10244 /* This pop_nested_class corresponds to the
10245 push_nested_class used to push into class scope for
10246 parsing the argument list of a function decl, in
10247 qualified_id. */
10248 pop_nested_class (1);
10249 TREE_COMPLEXITY (declarator) = current_class_depth;
10250 }
10251 else
10252 my_friendly_abort (16);
10253
10254 if (TREE_OPERAND (declarator, 0) == NULL_TREE)
10255 {
10256 /* We had a reference to a global decl, or
10257 perhaps we were given a non-aggregate typedef,
10258 in which case we cleared this out, and should just
10259 keep going as though it wasn't there. */
10260 declarator = sname;
10261 continue;
10262 }
10263 ctype = TREE_OPERAND (declarator, 0);
10264
10265 t = ctype;
10266 while (t != NULL_TREE && CLASS_TYPE_P (t))
10267 {
10268 if (CLASSTYPE_TEMPLATE_INFO (t) &&
10269 !CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
10270 template_count += 1;
10271 t = TYPE_MAIN_DECL (t);
10272 if (DECL_LANG_SPECIFIC (t))
10273 t = DECL_CLASS_CONTEXT (t);
10274 else
10275 t = NULL_TREE;
10276 }
10277
10278 if (sname == NULL_TREE)
10279 goto done_scoping;
10280
10281 if (TREE_CODE (sname) == IDENTIFIER_NODE)
10282 {
10283 /* This is the `standard' use of the scoping operator:
10284 basetype :: member . */
10285
10286 if (ctype == current_class_type)
10287 {
10288 /* class A {
10289 void A::f ();
10290 };
10291
10292 Is this ill-formed? */
10293
10294 if (pedantic)
10295 cp_pedwarn ("extra qualification `%T::' on member `%s' ignored",
10296 ctype, name);
10297 }
10298 else if (TREE_CODE (type) == FUNCTION_TYPE)
10299 {
10300 if (current_class_type == NULL_TREE
10301 || friendp)
10302 type = build_cplus_method_type (ctype, TREE_TYPE (type),
10303 TYPE_ARG_TYPES (type));
10304 else
10305 {
10306 cp_error ("cannot declare member function `%T::%s' within `%T'",
10307 ctype, name, current_class_type);
10308 return void_type_node;
10309 }
10310 }
10311 else if (RIDBIT_SETP (RID_TYPEDEF, specbits)
10312 || TYPE_SIZE (complete_type (ctype)) != NULL_TREE)
10313 {
10314 /* Have to move this code elsewhere in this function.
10315 this code is used for i.e., typedef int A::M; M *pm;
10316
10317 It is? How? jason 10/2/94 */
10318
10319 if (current_class_type)
10320 {
10321 cp_error ("cannot declare member `%T::%s' within `%T'",
10322 ctype, name, current_class_type);
10323 return void_type_node;
10324 }
10325 type = build_offset_type (ctype, type);
10326 }
10327 else if (uses_template_parms (ctype))
10328 {
10329 if (TREE_CODE (type) == FUNCTION_TYPE)
10330 type
10331 = build_cplus_method_type (ctype, TREE_TYPE (type),
10332 TYPE_ARG_TYPES (type));
10333 }
10334 else
10335 {
10336 cp_error ("structure `%T' not yet defined", ctype);
10337 return error_mark_node;
10338 }
10339
10340 declarator = sname;
10341 }
10342 else if (TREE_CODE (sname) == SCOPE_REF)
10343 my_friendly_abort (17);
10344 else
10345 {
10346 done_scoping:
10347 declarator = TREE_OPERAND (declarator, 1);
10348 if (declarator && TREE_CODE (declarator) == CALL_EXPR)
10349 /* In this case, we will deal with it later. */
10350 ;
10351 else
10352 {
10353 if (TREE_CODE (type) == FUNCTION_TYPE)
10354 type = build_cplus_method_type (ctype, TREE_TYPE (type),
10355 TYPE_ARG_TYPES (type));
10356 else
10357 type = build_offset_type (ctype, type);
10358 }
10359 }
10360 }
10361 break;
10362
10363 case BIT_NOT_EXPR:
10364 declarator = TREE_OPERAND (declarator, 0);
10365 break;
10366
10367 case RECORD_TYPE:
10368 case UNION_TYPE:
10369 case ENUMERAL_TYPE:
10370 declarator = NULL_TREE;
10371 break;
10372
10373 case ERROR_MARK:
10374 declarator = NULL_TREE;
10375 break;
10376
10377 default:
10378 my_friendly_abort (158);
10379 }
10380 }
10381
10382 /* See the comment for the TREE_LIST case, above. */
10383 if (inner_attrs)
10384 {
10385 if (! ignore_attrs)
10386 decl_attributes (type, inner_attrs, NULL_TREE);
10387 else if (attrlist)
10388 TREE_VALUE (attrlist) = chainon (inner_attrs, TREE_VALUE (attrlist));
10389 else
10390 attrlist = build_decl_list (NULL_TREE, inner_attrs);
10391 }
10392
10393 if (explicitp == 1)
10394 {
10395 error ("only constructors can be declared `explicit'");
10396 explicitp = 0;
10397 }
10398
10399 /* Now TYPE has the actual type. */
10400
10401 /* If this is declaring a typedef name, return a TYPE_DECL. */
10402
10403 if (RIDBIT_SETP (RID_MUTABLE, specbits))
10404 {
10405 if (type_quals & TYPE_QUAL_CONST)
10406 {
10407 error ("const `%s' cannot be declared `mutable'", name);
10408 RIDBIT_RESET (RID_MUTABLE, specbits);
10409 }
10410 else if (staticp)
10411 {
10412 error ("static `%s' cannot be declared `mutable'", name);
10413 RIDBIT_RESET (RID_MUTABLE, specbits);
10414 }
10415 }
10416
10417 if (RIDBIT_SETP (RID_TYPEDEF, specbits) && decl_context != TYPENAME)
10418 {
10419 tree decl;
10420
10421 /* Note that the grammar rejects storage classes
10422 in typenames, fields or parameters. */
10423 if (current_lang_name == lang_name_java)
10424 TYPE_FOR_JAVA (type) = 1;
10425
10426 if (decl_context == FIELD)
10427 {
10428 if (declarator == constructor_name (current_class_type))
10429 cp_pedwarn ("ANSI C++ forbids nested type `%D' with same name as enclosing class",
10430 declarator);
10431 decl = build_lang_decl (TYPE_DECL, declarator, type);
10432 if (IS_SIGNATURE (current_class_type) && opaque_typedef)
10433 SIGNATURE_HAS_OPAQUE_TYPEDECLS (current_class_type) = 1;
10434 }
10435 else
10436 {
10437 /* Make sure this typedef lives as long as its type,
10438 since it might be used as a template parameter. */
10439 if (type != error_mark_node)
10440 push_obstacks (TYPE_OBSTACK (type), TYPE_OBSTACK (type));
10441 decl = build_decl (TYPE_DECL, declarator, type);
10442 if (type != error_mark_node)
10443 pop_obstacks ();
10444 }
10445
10446 /* If the user declares "struct {...} foo" then `foo' will have
10447 an anonymous name. Fill that name in now. Nothing can
10448 refer to it, so nothing needs know about the name change.
10449 The TYPE_NAME field was filled in by build_struct_xref. */
10450 if (type != error_mark_node
10451 && TYPE_NAME (type)
10452 && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
10453 && ANON_AGGRNAME_P (TYPE_IDENTIFIER (type)))
10454 {
10455 /* FIXME: This is bogus; we should not be doing this for
10456 cv-qualified types. */
10457
10458 /* For anonymous structs that are cv-qualified, need to use
10459 TYPE_MAIN_VARIANT so that name will mangle correctly. As
10460 type not referenced after this block, don't bother
10461 resetting type to original type, ie. TREE_TYPE (decl). */
10462 type = TYPE_MAIN_VARIANT (type);
10463
10464 /* Replace the anonymous name with the real name everywhere. */
10465 lookup_tag_reverse (type, declarator);
10466 TYPE_NAME (type) = decl;
10467
10468 if (TYPE_LANG_SPECIFIC (type))
10469 TYPE_WAS_ANONYMOUS (type) = 1;
10470
10471 /* If this is a typedef within a template class, the nested
10472 type is a (non-primary) template. The name for the
10473 template needs updating as well. */
10474 if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
10475 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type))
10476 = TYPE_IDENTIFIER (type);
10477
10478 /* XXX Temporarily set the scope.
10479 When returning, start_decl expects it as NULL_TREE,
10480 and will then then set it using pushdecl. */
10481 my_friendly_assert (DECL_CONTEXT (decl) == NULL_TREE, 980404);
10482 if (current_class_type)
10483 DECL_CONTEXT (decl) = current_class_type;
10484 else
10485 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
10486
10487 DECL_ASSEMBLER_NAME (decl) = DECL_NAME (decl);
10488 DECL_ASSEMBLER_NAME (decl)
10489 = get_identifier (build_overload_name (type, 1, 1));
10490 DECL_CONTEXT (decl) = NULL_TREE;
10491
10492 /* FIXME remangle member functions; member functions of a
10493 type with external linkage have external linkage. */
10494 }
10495
10496 if (TREE_CODE (type) == OFFSET_TYPE || TREE_CODE (type) == METHOD_TYPE)
10497 {
10498 cp_error_at ("typedef name may not be class-qualified", decl);
10499 return NULL_TREE;
10500 }
10501 else if (quals)
10502 {
10503 if (ctype == NULL_TREE)
10504 {
10505 if (TREE_CODE (type) != METHOD_TYPE)
10506 cp_error_at ("invalid type qualifier for non-method type", decl);
10507 else
10508 ctype = TYPE_METHOD_BASETYPE (type);
10509 }
10510 if (ctype != NULL_TREE)
10511 grok_method_quals (ctype, decl, quals);
10512 }
10513
10514 if (RIDBIT_SETP (RID_SIGNED, specbits)
10515 || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
10516 C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
10517
10518 if (RIDBIT_SETP (RID_MUTABLE, specbits))
10519 error ("non-object member `%s' cannot be declared mutable", name);
10520
10521 bad_specifiers (decl, "type", virtualp, quals != NULL_TREE,
10522 inlinep, friendp, raises != NULL_TREE);
10523
10524 if (initialized)
10525 error ("typedef declaration includes an initializer");
10526
10527 return decl;
10528 }
10529
10530 /* Detect the case of an array type of unspecified size
10531 which came, as such, direct from a typedef name.
10532 We must copy the type, so that each identifier gets
10533 a distinct type, so that each identifier's size can be
10534 controlled separately by its own initializer. */
10535
10536 if (type == typedef_type && TREE_CODE (type) == ARRAY_TYPE
10537 && TYPE_DOMAIN (type) == NULL_TREE)
10538 {
10539 type = build_cplus_array_type (TREE_TYPE (type), TYPE_DOMAIN (type));
10540 }
10541
10542 /* If this is a type name (such as, in a cast or sizeof),
10543 compute the type and return it now. */
10544
10545 if (decl_context == TYPENAME)
10546 {
10547 /* Note that the grammar rejects storage classes
10548 in typenames, fields or parameters. */
10549 if (type_quals != TYPE_UNQUALIFIED)
10550 {
10551 if (IS_SIGNATURE (type))
10552 error ("type qualifiers specified for signature type");
10553 type_quals = TYPE_UNQUALIFIED;
10554 }
10555
10556 /* Special case: "friend class foo" looks like a TYPENAME context. */
10557 if (friendp)
10558 {
10559 if (type_quals != TYPE_UNQUALIFIED)
10560 {
10561 cp_error ("type qualifiers specified for friend class declaration");
10562 type_quals = TYPE_UNQUALIFIED;
10563 }
10564 if (inlinep)
10565 {
10566 cp_error ("`inline' specified for friend class declaration");
10567 inlinep = 0;
10568 }
10569
10570 /* Only try to do this stuff if we didn't already give up. */
10571 if (type != integer_type_node)
10572 {
10573 /* A friendly class? */
10574 if (current_class_type)
10575 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type));
10576 else
10577 error ("trying to make class `%s' a friend of global scope",
10578 TYPE_NAME_STRING (type));
10579 type = void_type_node;
10580 }
10581 }
10582 else if (quals)
10583 {
10584 tree dummy = build_decl (TYPE_DECL, declarator, type);
10585 if (ctype == NULL_TREE)
10586 {
10587 my_friendly_assert (TREE_CODE (type) == METHOD_TYPE, 159);
10588 ctype = TYPE_METHOD_BASETYPE (type);
10589 }
10590 grok_method_quals (ctype, dummy, quals);
10591 type = TREE_TYPE (dummy);
10592 }
10593
10594 return type;
10595 }
10596 else if (declarator == NULL_TREE && decl_context != PARM
10597 && decl_context != CATCHPARM
10598 && TREE_CODE (type) != UNION_TYPE
10599 && ! bitfield)
10600 {
10601 cp_error ("abstract declarator `%T' used as declaration", type);
10602 declarator = make_anon_name ();
10603 }
10604
10605 /* `void' at top level (not within pointer)
10606 is allowed only in typedefs or type names.
10607 We don't complain about parms either, but that is because
10608 a better error message can be made later. */
10609
10610 if (TREE_CODE (type) == VOID_TYPE && decl_context != PARM)
10611 {
10612 if (! declarator)
10613 error ("unnamed variable or field declared void");
10614 else if (TREE_CODE (declarator) == IDENTIFIER_NODE)
10615 {
10616 if (IDENTIFIER_OPNAME_P (declarator))
10617 my_friendly_abort (356);
10618 else
10619 error ("variable or field `%s' declared void", name);
10620 }
10621 else
10622 error ("variable or field declared void");
10623 type = integer_type_node;
10624 }
10625
10626 /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
10627 or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE. */
10628
10629 if (decl_context == PARM || decl_context == CATCHPARM)
10630 {
10631 if (ctype || in_namespace)
10632 error ("cannot use `::' in parameter declaration");
10633
10634 /* A parameter declared as an array of T is really a pointer to T.
10635 One declared as a function is really a pointer to a function.
10636 One declared as a member is really a pointer to member. */
10637
10638 if (TREE_CODE (type) == ARRAY_TYPE)
10639 {
10640 /* Transfer const-ness of array into that of type pointed to. */
10641 type = build_pointer_type (TREE_TYPE (type));
10642 type_quals = TYPE_UNQUALIFIED;
10643 }
10644 else if (TREE_CODE (type) == FUNCTION_TYPE)
10645 type = build_pointer_type (type);
10646 else if (TREE_CODE (type) == OFFSET_TYPE)
10647 type = build_pointer_type (type);
10648 else if (TREE_CODE (type) == VOID_TYPE && declarator)
10649 {
10650 error ("declaration of `%s' as void", name);
10651 return NULL_TREE;
10652 }
10653 }
10654
10655 {
10656 register tree decl;
10657
10658 if (decl_context == PARM)
10659 {
10660 decl = build_decl (PARM_DECL, declarator, type);
10661
10662 bad_specifiers (decl, "parameter", virtualp, quals != NULL_TREE,
10663 inlinep, friendp, raises != NULL_TREE);
10664 if (current_class_type
10665 && IS_SIGNATURE (current_class_type))
10666 {
10667 if (inlinep)
10668 error ("parameter of signature member function declared `inline'");
10669 if (RIDBIT_SETP (RID_AUTO, specbits))
10670 error ("parameter of signature member function declared `auto'");
10671 if (RIDBIT_SETP (RID_REGISTER, specbits))
10672 error ("parameter of signature member function declared `register'");
10673 }
10674
10675 /* Compute the type actually passed in the parmlist,
10676 for the case where there is no prototype.
10677 (For example, shorts and chars are passed as ints.)
10678 When there is a prototype, this is overridden later. */
10679
10680 DECL_ARG_TYPE (decl) = type_promotes_to (type);
10681 }
10682 else if (decl_context == FIELD)
10683 {
10684 if (type == error_mark_node)
10685 {
10686 /* Happens when declaring arrays of sizes which
10687 are error_mark_node, for example. */
10688 decl = NULL_TREE;
10689 }
10690 else if (in_namespace && !friendp)
10691 {
10692 /* Something like struct S { int N::j; }; */
10693 cp_error ("invalid use of `::'");
10694 decl = NULL_TREE;
10695 }
10696 else if (TREE_CODE (type) == FUNCTION_TYPE)
10697 {
10698 int publicp = 0;
10699 tree function_context;
10700
10701 /* We catch the others as conflicts with the builtin
10702 typedefs. */
10703 if (friendp && declarator == ridpointers[(int) RID_SIGNED])
10704 {
10705 cp_error ("function `%D' cannot be declared friend",
10706 declarator);
10707 friendp = 0;
10708 }
10709
10710 if (friendp == 0)
10711 {
10712 if (ctype == NULL_TREE)
10713 ctype = current_class_type;
10714
10715 if (ctype == NULL_TREE)
10716 {
10717 cp_error ("can't make `%D' into a method -- not in a class",
10718 declarator);
10719 return void_type_node;
10720 }
10721
10722 /* ``A union may [ ... ] not [ have ] virtual functions.''
10723 ARM 9.5 */
10724 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
10725 {
10726 cp_error ("function `%D' declared virtual inside a union",
10727 declarator);
10728 return void_type_node;
10729 }
10730
10731 if (declarator == ansi_opname[(int) NEW_EXPR]
10732 || declarator == ansi_opname[(int) VEC_NEW_EXPR]
10733 || declarator == ansi_opname[(int) DELETE_EXPR]
10734 || declarator == ansi_opname[(int) VEC_DELETE_EXPR])
10735 {
10736 if (virtualp)
10737 {
10738 cp_error ("`%D' cannot be declared virtual, since it is always static",
10739 declarator);
10740 virtualp = 0;
10741 }
10742 }
10743 else if (staticp < 2)
10744 type = build_cplus_method_type (ctype, TREE_TYPE (type),
10745 TYPE_ARG_TYPES (type));
10746 }
10747
10748 /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node. */
10749 function_context = (ctype != NULL_TREE) ?
10750 hack_decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
10751 publicp = (! friendp || ! staticp)
10752 && function_context == NULL_TREE;
10753 decl = grokfndecl (ctype, type,
10754 TREE_CODE (declarator) != TEMPLATE_ID_EXPR
10755 ? declarator : dname,
10756 declarator,
10757 virtualp, flags, quals, raises, attrlist,
10758 friendp ? -1 : 0, friendp, publicp, inlinep,
10759 funcdef_flag, template_count, in_namespace);
10760 if (decl == NULL_TREE || decl == error_mark_node)
10761 return decl;
10762 #if 0
10763 /* This clobbers the attrs stored in `decl' from `attrlist'. */
10764 /* The decl and setting of decl_machine_attr is also turned off. */
10765 decl = build_decl_attribute_variant (decl, decl_machine_attr);
10766 #endif
10767
10768 /* [class.conv.ctor]
10769
10770 A constructor declared without the function-specifier
10771 explicit that can be called with a single parameter
10772 specifies a conversion from the type of its first
10773 parameter to the type of its class. Such a constructor
10774 is called a converting constructor. */
10775 if (explicitp == 2)
10776 DECL_NONCONVERTING_P (decl) = 1;
10777 else if (DECL_CONSTRUCTOR_P (decl))
10778 {
10779 /* The constructor can be called with exactly one
10780 parameter if there is at least one parameter, and
10781 any subsequent parameters have default arguments.
10782 We don't look at the first parameter, which is
10783 really just the `this' parameter for the new
10784 object. */
10785 tree arg_types =
10786 TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)));
10787
10788 /* Skip the `in_chrg' argument too, if present. */
10789 if (TYPE_USES_VIRTUAL_BASECLASSES (DECL_CONTEXT (decl)))
10790 arg_types = TREE_CHAIN (arg_types);
10791
10792 if (arg_types == void_list_node
10793 || (arg_types
10794 && TREE_CHAIN (arg_types)
10795 && TREE_CHAIN (arg_types) != void_list_node
10796 && !TREE_PURPOSE (TREE_CHAIN (arg_types))))
10797 DECL_NONCONVERTING_P (decl) = 1;
10798 }
10799 }
10800 else if (TREE_CODE (type) == METHOD_TYPE)
10801 {
10802 /* We only get here for friend declarations of
10803 members of other classes. */
10804 /* All method decls are public, so tell grokfndecl to set
10805 TREE_PUBLIC, also. */
10806 decl = grokfndecl (ctype, type, declarator, declarator,
10807 virtualp, flags, quals, raises, attrlist,
10808 friendp ? -1 : 0, friendp, 1, 0, funcdef_flag,
10809 template_count, in_namespace);
10810 if (decl == NULL_TREE)
10811 return NULL_TREE;
10812 }
10813 else if (!staticp && ! processing_template_decl
10814 && TYPE_SIZE (complete_type (type)) == NULL_TREE
10815 && (TREE_CODE (type) != ARRAY_TYPE || initialized == 0))
10816 {
10817 if (declarator)
10818 cp_error ("field `%D' has incomplete type", declarator);
10819 else
10820 cp_error ("name `%T' has incomplete type", type);
10821
10822 /* If we're instantiating a template, tell them which
10823 instantiation made the field's type be incomplete. */
10824 if (current_class_type
10825 && TYPE_NAME (current_class_type)
10826 && IDENTIFIER_TEMPLATE (TYPE_IDENTIFIER (current_class_type))
10827 && declspecs && TREE_VALUE (declspecs)
10828 && TREE_TYPE (TREE_VALUE (declspecs)) == type)
10829 cp_error (" in instantiation of template `%T'",
10830 current_class_type);
10831
10832 type = error_mark_node;
10833 decl = NULL_TREE;
10834 }
10835 else
10836 {
10837 if (friendp)
10838 {
10839 error ("`%s' is neither function nor method; cannot be declared friend",
10840 IDENTIFIER_POINTER (declarator));
10841 friendp = 0;
10842 }
10843 decl = NULL_TREE;
10844 }
10845
10846 if (friendp)
10847 {
10848 /* Friends are treated specially. */
10849 if (ctype == current_class_type)
10850 warning ("member functions are implicitly friends of their class");
10851 else
10852 {
10853 tree t = NULL_TREE;
10854 if (decl && DECL_NAME (decl))
10855 {
10856 if (template_class_depth (current_class_type) == 0)
10857 {
10858 decl
10859 = check_explicit_specialization
10860 (declarator, decl,
10861 template_count, 2 * (funcdef_flag != 0) + 4);
10862 if (decl == error_mark_node)
10863 return error_mark_node;
10864 }
10865
10866 t = do_friend (ctype, declarator, decl,
10867 last_function_parms, flags, quals,
10868 funcdef_flag);
10869 }
10870 if (t && funcdef_flag)
10871 return t;
10872
10873 return void_type_node;
10874 }
10875 }
10876
10877 /* Structure field. It may not be a function, except for C++ */
10878
10879 if (decl == NULL_TREE)
10880 {
10881 if (initialized)
10882 {
10883 if (!staticp)
10884 {
10885 /* An attempt is being made to initialize a non-static
10886 member. But, from [class.mem]:
10887
10888 4 A member-declarator can contain a
10889 constant-initializer only if it declares a static
10890 member (_class.static_) of integral or enumeration
10891 type, see _class.static.data_.
10892
10893 This used to be relatively common practice, but
10894 the rest of the compiler does not correctly
10895 handle the initialization unless the member is
10896 static so we make it static below. */
10897 cp_pedwarn ("ANSI C++ forbids initialization of member `%D'",
10898 declarator);
10899 cp_pedwarn ("making `%D' static", declarator);
10900 staticp = 1;
10901 }
10902
10903 if (uses_template_parms (type))
10904 /* We'll check at instantiation time. */
10905 ;
10906 else if (check_static_variable_definition (declarator,
10907 type))
10908 /* If we just return the declaration, crashes
10909 will sometimes occur. We therefore return
10910 void_type_node, as if this was a friend
10911 declaration, to cause callers to completely
10912 ignore this declaration. */
10913 return void_type_node;
10914 }
10915
10916 /* 9.2p13 [class.mem] */
10917 if (declarator == constructor_name (current_class_type)
10918 /* Divergence from the standard: In extern "C", we
10919 allow non-static data members here, because C does
10920 and /usr/include/netinet/in.h uses that. */
10921 && (staticp || current_lang_name != lang_c))
10922 cp_pedwarn ("ANSI C++ forbids data member `%D' with same name as enclosing class",
10923 declarator);
10924
10925 if (staticp)
10926 {
10927 /* C++ allows static class members.
10928 All other work for this is done by grokfield.
10929 This VAR_DCL is built by build_lang_field_decl.
10930 All other VAR_DECLs are built by build_decl. */
10931 decl = build_lang_field_decl (VAR_DECL, declarator, type);
10932 TREE_STATIC (decl) = 1;
10933 /* In class context, 'static' means public access. */
10934 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl) = 1;
10935 }
10936 else
10937 {
10938 decl = build_lang_field_decl (FIELD_DECL, declarator, type);
10939 if (RIDBIT_SETP (RID_MUTABLE, specbits))
10940 {
10941 DECL_MUTABLE_P (decl) = 1;
10942 RIDBIT_RESET (RID_MUTABLE, specbits);
10943 }
10944 }
10945
10946 bad_specifiers (decl, "field", virtualp, quals != NULL_TREE,
10947 inlinep, friendp, raises != NULL_TREE);
10948 }
10949 }
10950 else if (TREE_CODE (type) == FUNCTION_TYPE || TREE_CODE (type) == METHOD_TYPE)
10951 {
10952 tree original_name;
10953 int publicp = 0;
10954
10955 if (! declarator)
10956 return NULL_TREE;
10957
10958 if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
10959 original_name = dname;
10960 else
10961 original_name = declarator;
10962
10963 if (RIDBIT_SETP (RID_AUTO, specbits))
10964 error ("storage class `auto' invalid for function `%s'", name);
10965 else if (RIDBIT_SETP (RID_REGISTER, specbits))
10966 error ("storage class `register' invalid for function `%s'", name);
10967
10968 /* Function declaration not at top level.
10969 Storage classes other than `extern' are not allowed
10970 and `extern' makes no difference. */
10971 if (! toplevel_bindings_p ()
10972 && (RIDBIT_SETP (RID_STATIC, specbits)
10973 || RIDBIT_SETP (RID_INLINE, specbits))
10974 && pedantic)
10975 {
10976 if (RIDBIT_SETP (RID_STATIC, specbits))
10977 pedwarn ("storage class `static' invalid for function `%s' declared out of global scope", name);
10978 else
10979 pedwarn ("storage class `inline' invalid for function `%s' declared out of global scope", name);
10980 }
10981
10982 if (ctype == NULL_TREE)
10983 {
10984 if (virtualp)
10985 {
10986 error ("virtual non-class function `%s'", name);
10987 virtualp = 0;
10988 }
10989 }
10990 else if (TREE_CODE (type) == FUNCTION_TYPE && staticp < 2)
10991 type = build_cplus_method_type (ctype, TREE_TYPE (type),
10992 TYPE_ARG_TYPES (type));
10993
10994 /* Record presence of `static'. */
10995 publicp = (ctype != NULL_TREE
10996 || RIDBIT_SETP (RID_EXTERN, specbits)
10997 || !RIDBIT_SETP (RID_STATIC, specbits));
10998
10999 decl = grokfndecl (ctype, type, original_name, declarator,
11000 virtualp, flags, quals, raises, attrlist,
11001 1, friendp,
11002 publicp, inlinep, funcdef_flag,
11003 template_count, in_namespace);
11004 if (decl == NULL_TREE)
11005 return NULL_TREE;
11006
11007 /* Among other times, could occur from check_explicit_specialization
11008 returning an error_mark_node. */
11009 if (decl == error_mark_node)
11010 return error_mark_node;
11011
11012 if (staticp == 1)
11013 {
11014 int illegal_static = 0;
11015
11016 /* Don't allow a static member function in a class, and forbid
11017 declaring main to be static. */
11018 if (TREE_CODE (type) == METHOD_TYPE)
11019 {
11020 cp_pedwarn ("cannot declare member function `%D' to have static linkage", decl);
11021 illegal_static = 1;
11022 }
11023 else if (current_function_decl)
11024 {
11025 /* FIXME need arm citation */
11026 error ("cannot declare static function inside another function");
11027 illegal_static = 1;
11028 }
11029
11030 if (illegal_static)
11031 {
11032 staticp = 0;
11033 RIDBIT_RESET (RID_STATIC, specbits);
11034 }
11035 }
11036 }
11037 else
11038 {
11039 /* It's a variable. */
11040
11041 /* An uninitialized decl with `extern' is a reference. */
11042 decl = grokvardecl (type, declarator, &specbits,
11043 initialized,
11044 (type_quals & TYPE_QUAL_CONST) != 0,
11045 in_namespace);
11046 bad_specifiers (decl, "variable", virtualp, quals != NULL_TREE,
11047 inlinep, friendp, raises != NULL_TREE);
11048
11049 if (ctype)
11050 {
11051 DECL_CONTEXT (decl) = ctype;
11052 if (staticp == 1)
11053 {
11054 cp_pedwarn ("static member `%D' re-declared as static", decl);
11055 staticp = 0;
11056 RIDBIT_RESET (RID_STATIC, specbits);
11057 }
11058 if (RIDBIT_SETP (RID_REGISTER, specbits) && TREE_STATIC (decl))
11059 {
11060 cp_error ("static member `%D' declared `register'", decl);
11061 RIDBIT_RESET (RID_REGISTER, specbits);
11062 }
11063 if (RIDBIT_SETP (RID_EXTERN, specbits) && pedantic)
11064 {
11065 cp_pedwarn ("cannot explicitly declare member `%#D' to have extern linkage",
11066 decl);
11067 RIDBIT_RESET (RID_EXTERN, specbits);
11068 }
11069 }
11070 }
11071
11072 if (RIDBIT_SETP (RID_MUTABLE, specbits))
11073 {
11074 error ("`%s' cannot be declared mutable", name);
11075 }
11076
11077 /* Record `register' declaration for warnings on &
11078 and in case doing stupid register allocation. */
11079
11080 if (RIDBIT_SETP (RID_REGISTER, specbits))
11081 DECL_REGISTER (decl) = 1;
11082
11083 if (RIDBIT_SETP (RID_EXTERN, specbits))
11084 DECL_THIS_EXTERN (decl) = 1;
11085
11086 if (RIDBIT_SETP (RID_STATIC, specbits))
11087 DECL_THIS_STATIC (decl) = 1;
11088
11089 /* Record constancy and volatility. */
11090 /* FIXME: Disallow `restrict' pointer-to-member declarations. */
11091 c_apply_type_quals_to_decl (type_quals, decl);
11092
11093 return decl;
11094 }
11095 }
11096 \f
11097 /* Tell if a parmlist/exprlist looks like an exprlist or a parmlist.
11098 An empty exprlist is a parmlist. An exprlist which
11099 contains only identifiers at the global level
11100 is a parmlist. Otherwise, it is an exprlist. */
11101
11102 int
11103 parmlist_is_exprlist (exprs)
11104 tree exprs;
11105 {
11106 if (exprs == NULL_TREE || TREE_PARMLIST (exprs))
11107 return 0;
11108
11109 if (toplevel_bindings_p ())
11110 {
11111 /* At the global level, if these are all identifiers,
11112 then it is a parmlist. */
11113 while (exprs)
11114 {
11115 if (TREE_CODE (TREE_VALUE (exprs)) != IDENTIFIER_NODE)
11116 return 1;
11117 exprs = TREE_CHAIN (exprs);
11118 }
11119 return 0;
11120 }
11121 return 1;
11122 }
11123
11124 /* Subroutine of start_function. Ensure that each of the parameter
11125 types (as listed in PARMS) is complete, as is required for a
11126 function definition. */
11127
11128 static void
11129 require_complete_types_for_parms (parms)
11130 tree parms;
11131 {
11132 while (parms)
11133 {
11134 tree type = TREE_TYPE (parms);
11135 if (TYPE_SIZE (complete_type (type)) == NULL_TREE)
11136 {
11137 if (DECL_NAME (parms))
11138 error ("parameter `%s' has incomplete type",
11139 IDENTIFIER_POINTER (DECL_NAME (parms)));
11140 else
11141 error ("parameter has incomplete type");
11142 TREE_TYPE (parms) = error_mark_node;
11143 }
11144 else
11145 layout_decl (parms, 0);
11146
11147 parms = TREE_CHAIN (parms);
11148 }
11149 }
11150
11151 /* Decode the list of parameter types for a function type.
11152 Given the list of things declared inside the parens,
11153 return a list of types.
11154
11155 The list we receive can have three kinds of elements:
11156 an IDENTIFIER_NODE for names given without types,
11157 a TREE_LIST node for arguments given as typespecs or names with typespecs,
11158 or void_type_node, to mark the end of an argument list
11159 when additional arguments are not permitted (... was not used).
11160
11161 FUNCDEF_FLAG is nonzero for a function definition, 0 for
11162 a mere declaration. A nonempty identifier-list gets an error message
11163 when FUNCDEF_FLAG is zero.
11164 If FUNCDEF_FLAG is 1, then parameter types must be complete.
11165 If FUNCDEF_FLAG is -1, then parameter types may be incomplete.
11166
11167 If all elements of the input list contain types,
11168 we return a list of the types.
11169 If all elements contain no type (except perhaps a void_type_node
11170 at the end), we return a null list.
11171 If some have types and some do not, it is an error, and we
11172 return a null list.
11173
11174 Also set last_function_parms to either
11175 a list of names (IDENTIFIER_NODEs) or a chain of PARM_DECLs.
11176 A list of names is converted to a chain of PARM_DECLs
11177 by store_parm_decls so that ultimately it is always a chain of decls.
11178
11179 Note that in C++, parameters can take default values. These default
11180 values are in the TREE_PURPOSE field of the TREE_LIST. It is
11181 an error to specify default values which are followed by parameters
11182 that have no default values, or an ELLIPSES. For simplicities sake,
11183 only parameters which are specified with their types can take on
11184 default values. */
11185
11186 static tree
11187 grokparms (first_parm, funcdef_flag)
11188 tree first_parm;
11189 int funcdef_flag;
11190 {
11191 tree result = NULL_TREE;
11192 tree decls = NULL_TREE;
11193
11194 if (first_parm != NULL_TREE
11195 && TREE_CODE (TREE_VALUE (first_parm)) == IDENTIFIER_NODE)
11196 {
11197 if (! funcdef_flag)
11198 pedwarn ("parameter names (without types) in function declaration");
11199 last_function_parms = first_parm;
11200 return NULL_TREE;
11201 }
11202 else if (first_parm != NULL_TREE
11203 && TREE_CODE (TREE_VALUE (first_parm)) != TREE_LIST
11204 && TREE_CODE (TREE_VALUE (first_parm)) != VOID_TYPE)
11205 my_friendly_abort (145);
11206 else
11207 {
11208 /* Types were specified. This is a list of declarators
11209 each represented as a TREE_LIST node. */
11210 register tree parm, chain;
11211 int any_init = 0, any_error = 0;
11212
11213 if (first_parm != NULL_TREE)
11214 {
11215 tree last_result = NULL_TREE;
11216 tree last_decl = NULL_TREE;
11217
11218 for (parm = first_parm; parm != NULL_TREE; parm = chain)
11219 {
11220 tree type = NULL_TREE, list_node = parm;
11221 register tree decl = TREE_VALUE (parm);
11222 tree init = TREE_PURPOSE (parm);
11223
11224 chain = TREE_CHAIN (parm);
11225 /* @@ weak defense against parse errors. */
11226 if (TREE_CODE (decl) != VOID_TYPE
11227 && TREE_CODE (decl) != TREE_LIST)
11228 {
11229 /* Give various messages as the need arises. */
11230 if (TREE_CODE (decl) == STRING_CST)
11231 cp_error ("invalid string constant `%E'", decl);
11232 else if (TREE_CODE (decl) == INTEGER_CST)
11233 error ("invalid integer constant in parameter list, did you forget to give parameter name?");
11234 continue;
11235 }
11236
11237 if (TREE_CODE (decl) != VOID_TYPE)
11238 {
11239 decl = grokdeclarator (TREE_VALUE (decl),
11240 TREE_PURPOSE (decl),
11241 PARM, init != NULL_TREE,
11242 NULL_TREE);
11243 if (! decl || TREE_TYPE (decl) == error_mark_node)
11244 continue;
11245
11246 /* Top-level qualifiers on the parameters are
11247 ignored for function types. */
11248 type = TYPE_MAIN_VARIANT (TREE_TYPE (decl));
11249
11250 if (TREE_CODE (type) == VOID_TYPE)
11251 decl = void_type_node;
11252 else if (TREE_CODE (type) == METHOD_TYPE)
11253 {
11254 if (DECL_NAME (decl))
11255 /* Cannot use the decl here because
11256 we don't have DECL_CONTEXT set up yet. */
11257 cp_error ("parameter `%D' invalidly declared method type",
11258 DECL_NAME (decl));
11259 else
11260 error ("parameter invalidly declared method type");
11261 type = build_pointer_type (type);
11262 TREE_TYPE (decl) = type;
11263 }
11264 else if (TREE_CODE (type) == OFFSET_TYPE)
11265 {
11266 if (DECL_NAME (decl))
11267 cp_error ("parameter `%D' invalidly declared offset type",
11268 DECL_NAME (decl));
11269 else
11270 error ("parameter invalidly declared offset type");
11271 type = build_pointer_type (type);
11272 TREE_TYPE (decl) = type;
11273 }
11274 else if (TREE_CODE (type) == RECORD_TYPE
11275 && TYPE_LANG_SPECIFIC (type)
11276 && CLASSTYPE_ABSTRACT_VIRTUALS (type))
11277 {
11278 abstract_virtuals_error (decl, type);
11279 any_error = 1; /* Seems like a good idea. */
11280 }
11281 else if (TREE_CODE (type) == RECORD_TYPE
11282 && TYPE_LANG_SPECIFIC (type)
11283 && IS_SIGNATURE (type))
11284 {
11285 signature_error (decl, type);
11286 any_error = 1; /* Seems like a good idea. */
11287 }
11288 else if (POINTER_TYPE_P (type))
11289 {
11290 tree t = type;
11291 while (POINTER_TYPE_P (t)
11292 || (TREE_CODE (t) == ARRAY_TYPE
11293 && TYPE_DOMAIN (t) != NULL_TREE))
11294 t = TREE_TYPE (t);
11295 if (TREE_CODE (t) == ARRAY_TYPE)
11296 cp_error ("parameter type `%T' includes %s to array of unknown bound",
11297 type,
11298 TYPE_PTR_P (type) ? "pointer" : "reference");
11299 }
11300 }
11301
11302 if (TREE_CODE (decl) == VOID_TYPE)
11303 {
11304 if (result == NULL_TREE)
11305 {
11306 result = void_list_node;
11307 last_result = result;
11308 }
11309 else
11310 {
11311 TREE_CHAIN (last_result) = void_list_node;
11312 last_result = void_list_node;
11313 }
11314 if (chain
11315 && (chain != void_list_node || TREE_CHAIN (chain)))
11316 error ("`void' in parameter list must be entire list");
11317 break;
11318 }
11319
11320 /* Since there is a prototype, args are passed in their own types. */
11321 DECL_ARG_TYPE (decl) = TREE_TYPE (decl);
11322 #ifdef PROMOTE_PROTOTYPES
11323 if ((TREE_CODE (type) == INTEGER_TYPE
11324 || TREE_CODE (type) == ENUMERAL_TYPE)
11325 && TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node))
11326 DECL_ARG_TYPE (decl) = integer_type_node;
11327 #endif
11328 if (!any_error)
11329 {
11330 if (init)
11331 {
11332 any_init++;
11333 if (TREE_CODE (init) == SAVE_EXPR)
11334 PARM_DECL_EXPR (init) = 1;
11335 else if (processing_template_decl)
11336 ;
11337 /* Unparsed default arg from in-class decl. */
11338 else if (TREE_CODE (init) == DEFAULT_ARG)
11339 ;
11340 else if (TREE_CODE (init) == PARM_DECL
11341 || TREE_CODE (init) == VAR_DECL)
11342 {
11343 if (TREE_CODE (init) == VAR_DECL
11344 && (IDENTIFIER_VALUE (DECL_NAME (init))
11345 == init)
11346 && LOCAL_BINDING_P
11347 (IDENTIFIER_BINDING (DECL_NAME
11348 (init))))
11349 {
11350 /* ``Local variables may not be used in
11351 default argument expressions.''
11352 dpANSI C++ 8.2.6 */
11353
11354 cp_error ("local variable `%D' may not be used as a default argument", init);
11355 any_error = 1;
11356 }
11357 else if (TREE_READONLY_DECL_P (init))
11358 init = decl_constant_value (init);
11359 }
11360 else if (TREE_TYPE (init) == NULL_TREE)
11361 {
11362 error ("argument list may not have an initializer list");
11363 init = error_mark_node;
11364 }
11365
11366 if (! processing_template_decl
11367 && init != error_mark_node
11368 && TREE_CODE (init) != DEFAULT_ARG
11369 && ! can_convert_arg (type, TREE_TYPE (init), init))
11370 cp_pedwarn ("invalid type `%T' for default argument to `%#D'",
11371 TREE_TYPE (init), decl);
11372 }
11373 }
11374 else
11375 init = NULL_TREE;
11376
11377 if (decls == NULL_TREE)
11378 {
11379 decls = decl;
11380 last_decl = decls;
11381 }
11382 else
11383 {
11384 TREE_CHAIN (last_decl) = decl;
11385 last_decl = decl;
11386 }
11387 if (! current_function_decl && TREE_PERMANENT (list_node))
11388 {
11389 TREE_PURPOSE (list_node) = init;
11390 TREE_VALUE (list_node) = type;
11391 TREE_CHAIN (list_node) = NULL_TREE;
11392 }
11393 else
11394 list_node = saveable_tree_cons (init, type, NULL_TREE);
11395 if (result == NULL_TREE)
11396 {
11397 result = list_node;
11398 last_result = result;
11399 }
11400 else
11401 {
11402 TREE_CHAIN (last_result) = list_node;
11403 last_result = list_node;
11404 }
11405 }
11406 if (last_result)
11407 TREE_CHAIN (last_result) = NULL_TREE;
11408 /* If there are no parameters, and the function does not end
11409 with `...', then last_decl will be NULL_TREE. */
11410 if (last_decl != NULL_TREE)
11411 TREE_CHAIN (last_decl) = NULL_TREE;
11412 }
11413 }
11414
11415 last_function_parms = decls;
11416
11417 return result;
11418 }
11419
11420 /* Called from the parser to update an element of TYPE_ARG_TYPES for some
11421 FUNCTION_TYPE with the newly parsed version of its default argument, which
11422 was previously digested as text. See snarf_defarg et al in lex.c. */
11423
11424 void
11425 replace_defarg (arg, init)
11426 tree arg, init;
11427 {
11428 if (! processing_template_decl
11429 && ! can_convert_arg (TREE_VALUE (arg), TREE_TYPE (init), init))
11430 cp_pedwarn ("invalid type `%T' for default argument to `%T'",
11431 TREE_TYPE (init), TREE_VALUE (arg));
11432 TREE_PURPOSE (arg) = init;
11433 }
11434 \f
11435 int
11436 copy_args_p (d)
11437 tree d;
11438 {
11439 tree t = FUNCTION_ARG_CHAIN (d);
11440 if (DECL_CONSTRUCTOR_P (d)
11441 && TYPE_USES_VIRTUAL_BASECLASSES (DECL_CONTEXT (d)))
11442 t = TREE_CHAIN (t);
11443 if (t && TREE_CODE (TREE_VALUE (t)) == REFERENCE_TYPE
11444 && (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_VALUE (t)))
11445 == DECL_CLASS_CONTEXT (d))
11446 && (TREE_CHAIN (t) == NULL_TREE
11447 || TREE_CHAIN (t) == void_list_node
11448 || TREE_PURPOSE (TREE_CHAIN (t))))
11449 return 1;
11450 return 0;
11451 }
11452
11453 /* These memoizing functions keep track of special properties which
11454 a class may have. `grok_ctor_properties' notices whether a class
11455 has a constructor of the form X(X&), and also complains
11456 if the class has a constructor of the form X(X).
11457 `grok_op_properties' takes notice of the various forms of
11458 operator= which are defined, as well as what sorts of type conversion
11459 may apply. Both functions take a FUNCTION_DECL as an argument. */
11460
11461 int
11462 grok_ctor_properties (ctype, decl)
11463 tree ctype, decl;
11464 {
11465 tree parmtypes = FUNCTION_ARG_CHAIN (decl);
11466 tree parmtype = parmtypes ? TREE_VALUE (parmtypes) : void_type_node;
11467
11468 /* When a type has virtual baseclasses, a magical first int argument is
11469 added to any ctor so we can tell if the class has been initialized
11470 yet. This could screw things up in this function, so we deliberately
11471 ignore the leading int if we're in that situation. */
11472 if (TYPE_USES_VIRTUAL_BASECLASSES (ctype))
11473 {
11474 my_friendly_assert (parmtypes
11475 && TREE_VALUE (parmtypes) == integer_type_node,
11476 980529);
11477 parmtypes = TREE_CHAIN (parmtypes);
11478 parmtype = TREE_VALUE (parmtypes);
11479 }
11480
11481 /* [class.copy]
11482
11483 A non-template constructor for class X is a copy constructor if
11484 its first parameter is of type X&, const X&, volatile X& or const
11485 volatile X&, and either there are no other parameters or else all
11486 other parameters have default arguments. */
11487 if (TREE_CODE (parmtype) == REFERENCE_TYPE
11488 && TYPE_MAIN_VARIANT (TREE_TYPE (parmtype)) == ctype
11489 && (TREE_CHAIN (parmtypes) == NULL_TREE
11490 || TREE_CHAIN (parmtypes) == void_list_node
11491 || TREE_PURPOSE (TREE_CHAIN (parmtypes)))
11492 && !(DECL_TEMPLATE_INSTANTIATION (decl)
11493 && is_member_template (DECL_TI_TEMPLATE (decl))))
11494 {
11495 TYPE_HAS_INIT_REF (ctype) = 1;
11496 if (CP_TYPE_CONST_P (TREE_TYPE (parmtype)))
11497 TYPE_HAS_CONST_INIT_REF (ctype) = 1;
11498 }
11499 /* [class.copy]
11500
11501 A declaration of a constructor for a class X is ill-formed if its
11502 first parameter is of type (optionally cv-qualified) X and either
11503 there are no other parameters or else all other parameters have
11504 default arguments.
11505
11506 We *don't* complain about member template instantiations that
11507 have this form, though; they can occur as we try to decide what
11508 constructor to use during overload resolution. Since overload
11509 resolution will never prefer such a constructor to the
11510 non-template copy constructor (which is either explicitly or
11511 implicitly defined), there's no need to worry about their
11512 existence. Theoretically, they should never even be
11513 instantiated, but that's hard to forestall. */
11514 else if (TYPE_MAIN_VARIANT (parmtype) == ctype
11515 && (TREE_CHAIN (parmtypes) == NULL_TREE
11516 || TREE_CHAIN (parmtypes) == void_list_node
11517 || TREE_PURPOSE (TREE_CHAIN (parmtypes)))
11518 && !(DECL_TEMPLATE_INSTANTIATION (decl)
11519 && is_member_template (DECL_TI_TEMPLATE (decl))))
11520 {
11521 cp_error ("invalid constructor; you probably meant `%T (const %T&)'",
11522 ctype, ctype);
11523 SET_IDENTIFIER_ERROR_LOCUS (DECL_NAME (decl), ctype);
11524 return 0;
11525 }
11526 else if (TREE_CODE (parmtype) == VOID_TYPE
11527 || TREE_PURPOSE (parmtypes) != NULL_TREE)
11528 TYPE_HAS_DEFAULT_CONSTRUCTOR (ctype) = 1;
11529
11530 return 1;
11531 }
11532
11533 /* An operator with this name can be either unary or binary. */
11534
11535 static int
11536 ambi_op_p (name)
11537 tree name;
11538 {
11539 return (name == ansi_opname [(int) INDIRECT_REF]
11540 || name == ansi_opname [(int) ADDR_EXPR]
11541 || name == ansi_opname [(int) NEGATE_EXPR]
11542 || name == ansi_opname[(int) POSTINCREMENT_EXPR]
11543 || name == ansi_opname[(int) POSTDECREMENT_EXPR]
11544 || name == ansi_opname [(int) CONVERT_EXPR]);
11545 }
11546
11547 /* An operator with this name can only be unary. */
11548
11549 static int
11550 unary_op_p (name)
11551 tree name;
11552 {
11553 return (name == ansi_opname [(int) TRUTH_NOT_EXPR]
11554 || name == ansi_opname [(int) BIT_NOT_EXPR]
11555 || name == ansi_opname [(int) COMPONENT_REF]
11556 || OPERATOR_TYPENAME_P (name));
11557 }
11558
11559 /* Do a little sanity-checking on how they declared their operator. */
11560
11561 void
11562 grok_op_properties (decl, virtualp, friendp)
11563 tree decl;
11564 int virtualp, friendp;
11565 {
11566 tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
11567 int methodp = (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE);
11568 tree name = DECL_NAME (decl);
11569
11570 if (current_class_type == NULL_TREE)
11571 friendp = 1;
11572
11573 if (! friendp)
11574 {
11575 /* [class.copy]
11576
11577 A user-declared copy assignment operator X::operator= is a
11578 non-static non-template member function of class X with
11579 exactly one parameter of type X, X&, const X&, volatile X& or
11580 const volatile X&. */
11581 if (name == ansi_opname[(int) MODIFY_EXPR]
11582 && !(DECL_TEMPLATE_INSTANTIATION (decl)
11583 && is_member_template (DECL_TI_TEMPLATE (decl))))
11584 TYPE_HAS_ASSIGNMENT (current_class_type) = 1;
11585 else if (name == ansi_opname[(int) CALL_EXPR])
11586 TYPE_OVERLOADS_CALL_EXPR (current_class_type) = 1;
11587 else if (name == ansi_opname[(int) ARRAY_REF])
11588 TYPE_OVERLOADS_ARRAY_REF (current_class_type) = 1;
11589 else if (name == ansi_opname[(int) COMPONENT_REF]
11590 || name == ansi_opname[(int) MEMBER_REF])
11591 TYPE_OVERLOADS_ARROW (current_class_type) = 1;
11592 else if (name == ansi_opname[(int) NEW_EXPR])
11593 TYPE_GETS_NEW (current_class_type) |= 1;
11594 else if (name == ansi_opname[(int) DELETE_EXPR])
11595 TYPE_GETS_DELETE (current_class_type) |= 1;
11596 else if (name == ansi_opname[(int) VEC_NEW_EXPR])
11597 TYPE_GETS_NEW (current_class_type) |= 2;
11598 else if (name == ansi_opname[(int) VEC_DELETE_EXPR])
11599 TYPE_GETS_DELETE (current_class_type) |= 2;
11600 }
11601
11602 if (name == ansi_opname[(int) NEW_EXPR]
11603 || name == ansi_opname[(int) VEC_NEW_EXPR])
11604 {
11605 /* When the compiler encounters the definition of A::operator new, it
11606 doesn't look at the class declaration to find out if it's static. */
11607 if (methodp)
11608 revert_static_member_fn (&decl, NULL, NULL);
11609
11610 /* Take care of function decl if we had syntax errors. */
11611 if (argtypes == NULL_TREE)
11612 TREE_TYPE (decl)
11613 = build_function_type (ptr_type_node,
11614 hash_tree_chain (integer_type_node,
11615 void_list_node));
11616 else
11617 TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
11618 }
11619 else if (name == ansi_opname[(int) DELETE_EXPR]
11620 || name == ansi_opname[(int) VEC_DELETE_EXPR])
11621 {
11622 if (methodp)
11623 revert_static_member_fn (&decl, NULL, NULL);
11624
11625 if (argtypes == NULL_TREE)
11626 TREE_TYPE (decl)
11627 = build_function_type (void_type_node,
11628 hash_tree_chain (ptr_type_node,
11629 void_list_node));
11630 else
11631 {
11632 TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
11633
11634 if (! friendp && name == ansi_opname[(int) VEC_DELETE_EXPR]
11635 && (TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)))
11636 != void_list_node))
11637 TYPE_VEC_DELETE_TAKES_SIZE (current_class_type) = 1;
11638 }
11639 }
11640 else
11641 {
11642 /* An operator function must either be a non-static member function
11643 or have at least one parameter of a class, a reference to a class,
11644 an enumeration, or a reference to an enumeration. 13.4.0.6 */
11645 if (! methodp || DECL_STATIC_FUNCTION_P (decl))
11646 {
11647 if (OPERATOR_TYPENAME_P (name)
11648 || name == ansi_opname[(int) CALL_EXPR]
11649 || name == ansi_opname[(int) MODIFY_EXPR]
11650 || name == ansi_opname[(int) COMPONENT_REF]
11651 || name == ansi_opname[(int) ARRAY_REF])
11652 cp_error ("`%D' must be a nonstatic member function", decl);
11653 else
11654 {
11655 tree p = argtypes;
11656
11657 if (DECL_STATIC_FUNCTION_P (decl))
11658 cp_error ("`%D' must be either a non-static member function or a non-member function", decl);
11659
11660 if (p)
11661 for (; TREE_CODE (TREE_VALUE (p)) != VOID_TYPE ; p = TREE_CHAIN (p))
11662 {
11663 tree arg = TREE_VALUE (p);
11664 if (TREE_CODE (arg) == REFERENCE_TYPE)
11665 arg = TREE_TYPE (arg);
11666
11667 /* This lets bad template code slip through. */
11668 if (IS_AGGR_TYPE (arg)
11669 || TREE_CODE (arg) == ENUMERAL_TYPE
11670 || TREE_CODE (arg) == TEMPLATE_TYPE_PARM
11671 || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
11672 goto foundaggr;
11673 }
11674 cp_error
11675 ("`%D' must have an argument of class or enumerated type",
11676 decl);
11677 foundaggr:
11678 ;
11679 }
11680 }
11681
11682 if (name == ansi_opname[(int) CALL_EXPR])
11683 return; /* No restrictions on args. */
11684
11685 if (IDENTIFIER_TYPENAME_P (name) && ! DECL_TEMPLATE_INFO (decl))
11686 {
11687 tree t = TREE_TYPE (name);
11688 if (TREE_CODE (t) == VOID_TYPE)
11689 pedwarn ("void is not a valid type conversion operator");
11690 else if (! friendp)
11691 {
11692 int ref = (TREE_CODE (t) == REFERENCE_TYPE);
11693 char *what = 0;
11694 if (ref)
11695 t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
11696
11697 if (t == current_class_type)
11698 what = "the same type";
11699 /* Don't force t to be complete here. */
11700 else if (IS_AGGR_TYPE (t)
11701 && TYPE_SIZE (t)
11702 && DERIVED_FROM_P (t, current_class_type))
11703 what = "a base class";
11704
11705 if (what)
11706 warning ("conversion to %s%s will never use a type conversion operator",
11707 ref ? "a reference to " : "", what);
11708 }
11709 }
11710
11711 if (name == ansi_opname[(int) MODIFY_EXPR])
11712 {
11713 tree parmtype;
11714
11715 if (list_length (argtypes) != 3 && methodp)
11716 {
11717 cp_error ("`%D' must take exactly one argument", decl);
11718 return;
11719 }
11720 parmtype = TREE_VALUE (TREE_CHAIN (argtypes));
11721
11722 if (copy_assignment_arg_p (parmtype, virtualp)
11723 && ! friendp)
11724 {
11725 TYPE_HAS_ASSIGN_REF (current_class_type) = 1;
11726 if (TREE_CODE (parmtype) != REFERENCE_TYPE
11727 || CP_TYPE_CONST_P (TREE_TYPE (parmtype)))
11728 TYPE_HAS_CONST_ASSIGN_REF (current_class_type) = 1;
11729 }
11730 }
11731 else if (name == ansi_opname[(int) COND_EXPR])
11732 {
11733 /* 13.4.0.3 */
11734 pedwarn ("ANSI C++ prohibits overloading operator ?:");
11735 if (list_length (argtypes) != 4)
11736 cp_error ("`%D' must take exactly three arguments", decl);
11737 }
11738 else if (ambi_op_p (name))
11739 {
11740 if (list_length (argtypes) == 2)
11741 /* prefix */;
11742 else if (list_length (argtypes) == 3)
11743 {
11744 if ((name == ansi_opname[(int) POSTINCREMENT_EXPR]
11745 || name == ansi_opname[(int) POSTDECREMENT_EXPR])
11746 && ! processing_template_decl
11747 && TREE_VALUE (TREE_CHAIN (argtypes)) != integer_type_node)
11748 {
11749 if (methodp)
11750 cp_error ("postfix `%D' must take `int' as its argument",
11751 decl);
11752 else
11753 cp_error
11754 ("postfix `%D' must take `int' as its second argument",
11755 decl);
11756 }
11757 }
11758 else
11759 {
11760 if (methodp)
11761 cp_error ("`%D' must take either zero or one argument", decl);
11762 else
11763 cp_error ("`%D' must take either one or two arguments", decl);
11764 }
11765
11766 /* More Effective C++ rule 6. */
11767 if (warn_ecpp
11768 && (name == ansi_opname[(int) POSTINCREMENT_EXPR]
11769 || name == ansi_opname[(int) POSTDECREMENT_EXPR]))
11770 {
11771 tree arg = TREE_VALUE (argtypes);
11772 tree ret = TREE_TYPE (TREE_TYPE (decl));
11773 if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
11774 arg = TREE_TYPE (arg);
11775 arg = TYPE_MAIN_VARIANT (arg);
11776 if (list_length (argtypes) == 2)
11777 {
11778 if (TREE_CODE (ret) != REFERENCE_TYPE
11779 || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)),
11780 arg))
11781 cp_warning ("prefix `%D' should return `%T'", decl,
11782 build_reference_type (arg));
11783 }
11784 else
11785 {
11786 if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
11787 cp_warning ("postfix `%D' should return `%T'", decl, arg);
11788 }
11789 }
11790 }
11791 else if (unary_op_p (name))
11792 {
11793 if (list_length (argtypes) != 2)
11794 {
11795 if (methodp)
11796 cp_error ("`%D' must take `void'", decl);
11797 else
11798 cp_error ("`%D' must take exactly one argument", decl);
11799 }
11800 }
11801 else /* if (binary_op_p (name)) */
11802 {
11803 if (list_length (argtypes) != 3)
11804 {
11805 if (methodp)
11806 cp_error ("`%D' must take exactly one argument", decl);
11807 else
11808 cp_error ("`%D' must take exactly two arguments", decl);
11809 }
11810
11811 /* More Effective C++ rule 7. */
11812 if (warn_ecpp
11813 && (name == ansi_opname [TRUTH_ANDIF_EXPR]
11814 || name == ansi_opname [TRUTH_ORIF_EXPR]
11815 || name == ansi_opname [COMPOUND_EXPR]))
11816 cp_warning ("user-defined `%D' always evaluates both arguments",
11817 decl);
11818 }
11819
11820 /* Effective C++ rule 23. */
11821 if (warn_ecpp
11822 && list_length (argtypes) == 3
11823 && (name == ansi_opname [PLUS_EXPR]
11824 || name == ansi_opname [MINUS_EXPR]
11825 || name == ansi_opname [TRUNC_DIV_EXPR]
11826 || name == ansi_opname [MULT_EXPR])
11827 && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
11828 cp_warning ("`%D' should return by value", decl);
11829
11830 /* 13.4.0.8 */
11831 if (argtypes)
11832 for (; argtypes != void_list_node ; argtypes = TREE_CHAIN (argtypes))
11833 if (TREE_PURPOSE (argtypes))
11834 {
11835 TREE_PURPOSE (argtypes) = NULL_TREE;
11836 if (name == ansi_opname[(int) POSTINCREMENT_EXPR]
11837 || name == ansi_opname[(int) POSTDECREMENT_EXPR])
11838 {
11839 if (pedantic)
11840 cp_pedwarn ("`%D' cannot have default arguments", decl);
11841 }
11842 else
11843 cp_error ("`%D' cannot have default arguments", decl);
11844 }
11845 }
11846 }
11847 \f
11848 static char *
11849 tag_name (code)
11850 enum tag_types code;
11851 {
11852 switch (code)
11853 {
11854 case record_type:
11855 return "struct";
11856 case class_type:
11857 return "class";
11858 case union_type:
11859 return "union ";
11860 case enum_type:
11861 return "enum";
11862 case signature_type:
11863 return "signature";
11864 default:
11865 my_friendly_abort (981122);
11866 }
11867 }
11868
11869 /* Get the struct, enum or union (CODE says which) with tag NAME.
11870 Define the tag as a forward-reference if it is not defined.
11871
11872 C++: If a class derivation is given, process it here, and report
11873 an error if multiple derivation declarations are not identical.
11874
11875 If this is a definition, come in through xref_tag and only look in
11876 the current frame for the name (since C++ allows new names in any
11877 scope.) */
11878
11879 tree
11880 xref_tag (code_type_node, name, globalize)
11881 tree code_type_node;
11882 tree name;
11883 int globalize;
11884 {
11885 enum tag_types tag_code;
11886 enum tree_code code;
11887 int temp = 0;
11888 register tree ref, t;
11889 struct binding_level *b = inner_binding_level;
11890 int got_type = 0;
11891 tree attributes = NULL_TREE;
11892
11893 /* If we are called from the parser, code_type_node will sometimes be a
11894 TREE_LIST. This indicates that the user wrote
11895 "class __attribute__ ((foo)) bar". Extract the attributes so we can
11896 use them later. */
11897 if (TREE_CODE (code_type_node) == TREE_LIST)
11898 {
11899 attributes = TREE_PURPOSE (code_type_node);
11900 code_type_node = TREE_VALUE (code_type_node);
11901 }
11902
11903 tag_code = (enum tag_types) TREE_INT_CST_LOW (code_type_node);
11904 switch (tag_code)
11905 {
11906 case record_type:
11907 case class_type:
11908 case signature_type:
11909 code = RECORD_TYPE;
11910 break;
11911 case union_type:
11912 code = UNION_TYPE;
11913 break;
11914 case enum_type:
11915 code = ENUMERAL_TYPE;
11916 break;
11917 default:
11918 my_friendly_abort (18);
11919 }
11920
11921 /* If a cross reference is requested, look up the type
11922 already defined for this tag and return it. */
11923 if (TREE_CODE_CLASS (TREE_CODE (name)) == 't')
11924 {
11925 t = name;
11926 name = TYPE_IDENTIFIER (t);
11927 got_type = 1;
11928 }
11929 else
11930 t = IDENTIFIER_TYPE_VALUE (name);
11931
11932 if (t && TREE_CODE (t) != code && TREE_CODE (t) != TEMPLATE_TYPE_PARM
11933 && TREE_CODE (t) != TEMPLATE_TEMPLATE_PARM)
11934 t = NULL_TREE;
11935
11936 if (! globalize)
11937 {
11938 /* If we know we are defining this tag, only look it up in
11939 this scope and don't try to find it as a type. */
11940 ref = lookup_tag (code, name, b, 1);
11941 }
11942 else
11943 {
11944 if (current_class_type
11945 && template_class_depth (current_class_type)
11946 && PROCESSING_REAL_TEMPLATE_DECL_P ())
11947 /* Since GLOBALIZE is non-zero, we are not looking at a
11948 definition of this tag. Since, in addition, we are currently
11949 processing a (member) template declaration of a template
11950 class, we don't want to do any lookup at all; consider:
11951
11952 template <class X>
11953 struct S1
11954
11955 template <class U>
11956 struct S2
11957 { template <class V>
11958 friend struct S1; };
11959
11960 Here, the S2::S1 declaration should not be confused with the
11961 outer declaration. In particular, the inner version should
11962 have a template parameter of level 2, not level 1. This
11963 would be particularly important if the member declaration
11964 were instead:
11965
11966 template <class V = U> friend struct S1;
11967
11968 say, when we should tsubst into `U' when instantiating S2. */
11969 ref = NULL_TREE;
11970 else
11971 {
11972 if (t)
11973 {
11974 if (t != TYPE_MAIN_VARIANT (t))
11975 cp_pedwarn ("using typedef-name `%D' after `%s'",
11976 TYPE_NAME (t), tag_name (tag_code));
11977 ref = t;
11978 }
11979 else
11980 ref = lookup_tag (code, name, b, 0);
11981
11982 if (! ref)
11983 {
11984 /* Try finding it as a type declaration. If that wins,
11985 use it. */
11986 ref = lookup_name (name, 1);
11987
11988 if (ref != NULL_TREE
11989 && processing_template_decl
11990 && DECL_CLASS_TEMPLATE_P (ref)
11991 && template_class_depth (current_class_type) == 0)
11992 /* Since GLOBALIZE is true, we're declaring a global
11993 template, so we want this type. */
11994 ref = DECL_RESULT (ref);
11995
11996 if (ref && TREE_CODE (ref) == TYPE_DECL
11997 && TREE_CODE (TREE_TYPE (ref)) == code)
11998 ref = TREE_TYPE (ref);
11999 else
12000 ref = NULL_TREE;
12001 }
12002 }
12003 }
12004
12005 push_obstacks_nochange ();
12006
12007 if (! ref)
12008 {
12009 /* If no such tag is yet defined, create a forward-reference node
12010 and record it as the "definition".
12011 When a real declaration of this type is found,
12012 the forward-reference will be altered into a real type. */
12013
12014 /* In C++, since these migrate into the global scope, we must
12015 build them on the permanent obstack. */
12016
12017 temp = allocation_temporary_p ();
12018 if (temp)
12019 end_temporary_allocation ();
12020
12021 if (code == ENUMERAL_TYPE)
12022 {
12023 cp_error ("use of enum `%#D' without previous declaration", name);
12024
12025 ref = make_node (ENUMERAL_TYPE);
12026
12027 /* Give the type a default layout like unsigned int
12028 to avoid crashing if it does not get defined. */
12029 TYPE_MODE (ref) = TYPE_MODE (unsigned_type_node);
12030 TYPE_ALIGN (ref) = TYPE_ALIGN (unsigned_type_node);
12031 TREE_UNSIGNED (ref) = 1;
12032 TYPE_PRECISION (ref) = TYPE_PRECISION (unsigned_type_node);
12033 TYPE_MIN_VALUE (ref) = TYPE_MIN_VALUE (unsigned_type_node);
12034 TYPE_MAX_VALUE (ref) = TYPE_MAX_VALUE (unsigned_type_node);
12035
12036 /* Enable us to recognize when a type is created in class context.
12037 To do nested classes correctly, this should probably be cleared
12038 out when we leave this classes scope. Currently this in only
12039 done in `start_enum'. */
12040
12041 pushtag (name, ref, globalize);
12042 }
12043 else
12044 {
12045 struct binding_level *old_b = class_binding_level;
12046
12047 ref = make_lang_type (code);
12048
12049 if (tag_code == signature_type)
12050 {
12051 SET_SIGNATURE (ref);
12052 /* Since a signature type will be turned into the type
12053 of signature tables, it's not only an interface. */
12054 CLASSTYPE_INTERFACE_ONLY (ref) = 0;
12055 SET_CLASSTYPE_INTERFACE_KNOWN (ref);
12056 /* A signature doesn't have a vtable. */
12057 CLASSTYPE_VTABLE_NEEDS_WRITING (ref) = 0;
12058 }
12059
12060 #ifdef NONNESTED_CLASSES
12061 /* Class types don't nest the way enums do. */
12062 class_binding_level = (struct binding_level *)0;
12063 #endif
12064 pushtag (name, ref, globalize);
12065 class_binding_level = old_b;
12066 }
12067 }
12068 else
12069 {
12070 /* If it no longer looks like a nested type, make sure it's
12071 in global scope.
12072 If it is not an IDENTIFIER, this is not a declaration */
12073 if (b->namespace_p && !class_binding_level
12074 && TREE_CODE (name) == IDENTIFIER_NODE)
12075 {
12076 if (IDENTIFIER_NAMESPACE_VALUE (name) == NULL_TREE)
12077 SET_IDENTIFIER_NAMESPACE_VALUE (name, TYPE_NAME (ref));
12078 }
12079
12080 if (!globalize && processing_template_decl && IS_AGGR_TYPE (ref))
12081 redeclare_class_template (ref, current_template_parms);
12082 }
12083
12084 /* Until the type is defined, tentatively accept whatever
12085 structure tag the user hands us. */
12086 if (TYPE_SIZE (ref) == NULL_TREE
12087 && ref != current_class_type
12088 /* Have to check this, in case we have contradictory tag info. */
12089 && IS_AGGR_TYPE_CODE (TREE_CODE (ref)))
12090 {
12091 if (tag_code == class_type)
12092 CLASSTYPE_DECLARED_CLASS (ref) = 1;
12093 else if (tag_code == record_type || tag_code == signature_type)
12094 CLASSTYPE_DECLARED_CLASS (ref) = 0;
12095 }
12096
12097 pop_obstacks ();
12098
12099 TREE_TYPE (ref) = attributes;
12100
12101 if (ref && TYPE_P (ref))
12102 {
12103 /* [dcl.type.elab]
12104
12105 If the identifier resolves to a typedef-name or a template
12106 type-parameter, the elaborated-type-specifier is
12107 ill-formed. */
12108 if (TYPE_LANG_SPECIFIC (ref) && TYPE_WAS_ANONYMOUS (ref))
12109 cp_error ("`%T' is a typedef name", ref);
12110 else if (TREE_CODE (ref) == TEMPLATE_TYPE_PARM)
12111 cp_error ("`%T' is a template type paramter", ref);
12112 }
12113
12114 return ref;
12115 }
12116
12117 tree
12118 xref_tag_from_type (old, id, globalize)
12119 tree old, id;
12120 int globalize;
12121 {
12122 tree code_type_node;
12123
12124 if (TREE_CODE (old) == RECORD_TYPE)
12125 code_type_node = (CLASSTYPE_DECLARED_CLASS (old)
12126 ? class_type_node : record_type_node);
12127 else
12128 code_type_node = union_type_node;
12129
12130 if (id == NULL_TREE)
12131 id = TYPE_IDENTIFIER (old);
12132
12133 return xref_tag (code_type_node, id, globalize);
12134 }
12135
12136 void
12137 xref_basetypes (code_type_node, name, ref, binfo)
12138 tree code_type_node;
12139 tree name, ref;
12140 tree binfo;
12141 {
12142 /* In the declaration `A : X, Y, ... Z' we mark all the types
12143 (A, X, Y, ..., Z) so we can check for duplicates. */
12144 tree binfos;
12145 int i, len;
12146 enum tag_types tag_code = (enum tag_types) TREE_INT_CST_LOW (code_type_node);
12147
12148 if (tag_code == union_type)
12149 {
12150 cp_error ("derived union `%T' invalid", ref);
12151 return;
12152 }
12153
12154 len = list_length (binfo);
12155 push_obstacks (TYPE_OBSTACK (ref), TYPE_OBSTACK (ref));
12156
12157 SET_CLASSTYPE_MARKED (ref);
12158 BINFO_BASETYPES (TYPE_BINFO (ref)) = binfos = make_tree_vec (len);
12159
12160 for (i = 0; binfo; binfo = TREE_CHAIN (binfo))
12161 {
12162 /* The base of a derived struct is public by default. */
12163 int via_public
12164 = (TREE_PURPOSE (binfo) == access_public_node
12165 || TREE_PURPOSE (binfo) == access_public_virtual_node
12166 || (tag_code != class_type
12167 && (TREE_PURPOSE (binfo) == access_default_node
12168 || TREE_PURPOSE (binfo) == access_default_virtual_node)));
12169 int via_protected
12170 = (TREE_PURPOSE (binfo) == access_protected_node
12171 || TREE_PURPOSE (binfo) == access_protected_virtual_node);
12172 int via_virtual
12173 = (TREE_PURPOSE (binfo) == access_private_virtual_node
12174 || TREE_PURPOSE (binfo) == access_protected_virtual_node
12175 || TREE_PURPOSE (binfo) == access_public_virtual_node
12176 || TREE_PURPOSE (binfo) == access_default_virtual_node);
12177 tree basetype = TREE_VALUE (binfo);
12178 tree base_binfo;
12179
12180 if (basetype && TREE_CODE (basetype) == TYPE_DECL)
12181 basetype = TREE_TYPE (basetype);
12182 if (!basetype
12183 || (TREE_CODE (basetype) != RECORD_TYPE
12184 && TREE_CODE (basetype) != TYPENAME_TYPE
12185 && TREE_CODE (basetype) != TEMPLATE_TYPE_PARM
12186 && TREE_CODE (basetype) != TEMPLATE_TEMPLATE_PARM))
12187 {
12188 cp_error ("base type `%T' fails to be a struct or class type",
12189 TREE_VALUE (binfo));
12190 continue;
12191 }
12192
12193 GNU_xref_hier (name, basetype, via_public, via_virtual, 0);
12194
12195 #if 1
12196 /* This code replaces similar code in layout_basetypes.
12197 We put the complete_type first for implicit `typename'. */
12198 if (TYPE_SIZE (complete_type (basetype)) == NULL_TREE
12199 && ! (current_template_parms && uses_template_parms (basetype)))
12200 {
12201 cp_error ("base class `%T' has incomplete type", basetype);
12202 continue;
12203 }
12204 #endif
12205 else
12206 {
12207 if (CLASSTYPE_MARKED (basetype))
12208 {
12209 if (basetype == ref)
12210 cp_error ("recursive type `%T' undefined", basetype);
12211 else
12212 cp_error ("duplicate base type `%T' invalid", basetype);
12213 continue;
12214 }
12215
12216 if (TYPE_FOR_JAVA (basetype)
12217 && current_lang_stack == current_lang_base)
12218 TYPE_FOR_JAVA (ref) = 1;
12219
12220 /* Note that the BINFO records which describe individual
12221 inheritances are *not* shared in the lattice! They
12222 cannot be shared because a given baseclass may be
12223 inherited with different `accessibility' by different
12224 derived classes. (Each BINFO record describing an
12225 individual inheritance contains flags which say what
12226 the `accessibility' of that particular inheritance is.) */
12227
12228 base_binfo
12229 = make_binfo (integer_zero_node, basetype,
12230 CLASS_TYPE_P (basetype)
12231 ? TYPE_BINFO_VTABLE (basetype) : NULL_TREE,
12232 CLASS_TYPE_P (basetype)
12233 ? TYPE_BINFO_VIRTUALS (basetype) : NULL_TREE);
12234
12235 TREE_VEC_ELT (binfos, i) = base_binfo;
12236 TREE_VIA_PUBLIC (base_binfo) = via_public;
12237 TREE_VIA_PROTECTED (base_binfo) = via_protected;
12238 TREE_VIA_VIRTUAL (base_binfo) = via_virtual;
12239 BINFO_INHERITANCE_CHAIN (base_binfo) = TYPE_BINFO (ref);
12240
12241 /* We need to unshare the binfos now so that lookups during class
12242 definition work. */
12243 unshare_base_binfos (base_binfo);
12244
12245 SET_CLASSTYPE_MARKED (basetype);
12246
12247 /* We are free to modify these bits because they are meaningless
12248 at top level, and BASETYPE is a top-level type. */
12249 if (via_virtual || TYPE_USES_VIRTUAL_BASECLASSES (basetype))
12250 {
12251 TYPE_USES_VIRTUAL_BASECLASSES (ref) = 1;
12252 TYPE_USES_COMPLEX_INHERITANCE (ref) = 1;
12253 }
12254
12255 if (CLASS_TYPE_P (basetype))
12256 {
12257 TYPE_GETS_NEW (ref) |= TYPE_GETS_NEW (basetype);
12258 TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
12259 }
12260
12261 i += 1;
12262 }
12263 }
12264 if (i)
12265 TREE_VEC_LENGTH (binfos) = i;
12266 else
12267 BINFO_BASETYPES (TYPE_BINFO (ref)) = NULL_TREE;
12268
12269 if (i > 1)
12270 TYPE_USES_MULTIPLE_INHERITANCE (ref) = 1;
12271 else if (i == 1)
12272 {
12273 tree basetype = BINFO_TYPE (TREE_VEC_ELT (binfos, 0));
12274
12275 if (CLASS_TYPE_P (basetype))
12276 TYPE_USES_MULTIPLE_INHERITANCE (ref)
12277 = TYPE_USES_MULTIPLE_INHERITANCE (basetype);
12278 }
12279
12280 if (TYPE_USES_MULTIPLE_INHERITANCE (ref))
12281 TYPE_USES_COMPLEX_INHERITANCE (ref) = 1;
12282
12283 /* Unmark all the types. */
12284 while (--i >= 0)
12285 CLEAR_CLASSTYPE_MARKED (BINFO_TYPE (TREE_VEC_ELT (binfos, i)));
12286 CLEAR_CLASSTYPE_MARKED (ref);
12287
12288 pop_obstacks ();
12289 }
12290
12291 \f
12292 /* Begin compiling the definition of an enumeration type.
12293 NAME is its name (or null if anonymous).
12294 Returns the type object, as yet incomplete.
12295 Also records info about it so that build_enumerator
12296 may be used to declare the individual values as they are read. */
12297
12298 tree
12299 start_enum (name)
12300 tree name;
12301 {
12302 register tree enumtype = NULL_TREE;
12303 struct binding_level *b = inner_binding_level;
12304
12305 /* We are wasting space here and putting these on the permanent_obstack so
12306 that typeid(local enum) will work correctly. */
12307 push_obstacks (&permanent_obstack, &permanent_obstack);
12308
12309 /* If this is the real definition for a previous forward reference,
12310 fill in the contents in the same object that used to be the
12311 forward reference. */
12312
12313 if (name != NULL_TREE)
12314 enumtype = lookup_tag (ENUMERAL_TYPE, name, b, 1);
12315
12316 if (enumtype != NULL_TREE && TREE_CODE (enumtype) == ENUMERAL_TYPE)
12317 cp_error ("multiple definition of `%#T'", enumtype);
12318 else
12319 {
12320 enumtype = make_node (ENUMERAL_TYPE);
12321 pushtag (name, enumtype, 0);
12322 }
12323
12324 if (current_class_type)
12325 TREE_ADDRESSABLE (b->tags) = 1;
12326
12327 /* We don't copy this value because build_enumerator needs to do it. */
12328 enum_next_value = integer_zero_node;
12329 enum_overflow = 0;
12330
12331 GNU_xref_decl (current_function_decl, enumtype);
12332 return enumtype;
12333 }
12334
12335 /* After processing and defining all the values of an enumeration type,
12336 install their decls in the enumeration type and finish it off.
12337 ENUMTYPE is the type object and VALUES a list of name-value pairs.
12338 Returns ENUMTYPE. */
12339
12340 tree
12341 finish_enum (enumtype)
12342 tree enumtype;
12343 {
12344 register tree minnode = NULL_TREE, maxnode = NULL_TREE;
12345 /* Calculate the maximum value of any enumerator in this type. */
12346
12347 tree values = TYPE_VALUES (enumtype);
12348 if (values)
12349 {
12350 tree pair;
12351
12352 for (pair = values; pair; pair = TREE_CHAIN (pair))
12353 {
12354 tree decl;
12355 tree value;
12356
12357 /* The TREE_VALUE is a CONST_DECL for this enumeration
12358 constant. */
12359 decl = TREE_VALUE (pair);
12360
12361 /* The DECL_INITIAL will be NULL if we are processing a
12362 template declaration and this enumeration constant had no
12363 explicit initializer. */
12364 value = DECL_INITIAL (decl);
12365 if (value && !processing_template_decl)
12366 {
12367 /* Set the TREE_TYPE for the VALUE as well. That's so
12368 that when we call decl_constant_value we get an
12369 entity of the right type (but with the constant
12370 value). Since we shouldn't ever call
12371 decl_constant_value on a template type, there's no
12372 reason to do that when processing_template_decl.
12373 And, if the expression is something like a
12374 TEMPLATE_PARM_INDEX or a CAST_EXPR doing so will
12375 wreak havoc on the intended type of the expression.
12376
12377 Of course, there's also no point in trying to compute
12378 minimum or maximum values if we're in a template. */
12379 TREE_TYPE (value) = enumtype;
12380
12381 if (!minnode)
12382 minnode = maxnode = value;
12383 else if (tree_int_cst_lt (maxnode, value))
12384 maxnode = value;
12385 else if (tree_int_cst_lt (value, minnode))
12386 minnode = value;
12387 }
12388
12389 if (processing_template_decl)
12390 /* If this is just a template, leave the CONST_DECL
12391 alone. That way tsubst_copy will find CONST_DECLs for
12392 CONST_DECLs, and not INTEGER_CSTs. */
12393 ;
12394 else
12395 /* In the list we're building up, we want the enumeration
12396 values, not the CONST_DECLs. */
12397 TREE_VALUE (pair) = value;
12398 }
12399 }
12400 else
12401 maxnode = minnode = integer_zero_node;
12402
12403 TYPE_VALUES (enumtype) = nreverse (values);
12404
12405 if (processing_template_decl)
12406 {
12407 tree scope = current_scope ();
12408 if (scope && TREE_CODE (scope) == FUNCTION_DECL)
12409 add_tree (build_min (TAG_DEFN, enumtype));
12410 }
12411 else
12412 {
12413 int unsignedp = tree_int_cst_sgn (minnode) >= 0;
12414 int lowprec = min_precision (minnode, unsignedp);
12415 int highprec = min_precision (maxnode, unsignedp);
12416 int precision = MAX (lowprec, highprec);
12417 tree tem;
12418
12419 TYPE_SIZE (enumtype) = NULL_TREE;
12420
12421 /* Set TYPE_MIN_VALUE and TYPE_MAX_VALUE according to `precision'. */
12422
12423 TYPE_PRECISION (enumtype) = precision;
12424 if (unsignedp)
12425 fixup_unsigned_type (enumtype);
12426 else
12427 fixup_signed_type (enumtype);
12428
12429 if (flag_short_enums || (precision > TYPE_PRECISION (integer_type_node)))
12430 /* Use the width of the narrowest normal C type which is wide
12431 enough. */
12432 TYPE_PRECISION (enumtype) = TYPE_PRECISION (type_for_size
12433 (precision, 1));
12434 else
12435 TYPE_PRECISION (enumtype) = TYPE_PRECISION (integer_type_node);
12436
12437 TYPE_SIZE (enumtype) = 0;
12438 layout_type (enumtype);
12439
12440 /* Fix up all variant types of this enum type. */
12441 for (tem = TYPE_MAIN_VARIANT (enumtype); tem;
12442 tem = TYPE_NEXT_VARIANT (tem))
12443 {
12444 TYPE_VALUES (tem) = TYPE_VALUES (enumtype);
12445 TYPE_MIN_VALUE (tem) = TYPE_MIN_VALUE (enumtype);
12446 TYPE_MAX_VALUE (tem) = TYPE_MAX_VALUE (enumtype);
12447 TYPE_SIZE (tem) = TYPE_SIZE (enumtype);
12448 TYPE_SIZE_UNIT (tem) = TYPE_SIZE_UNIT (enumtype);
12449 TYPE_MODE (tem) = TYPE_MODE (enumtype);
12450 TYPE_PRECISION (tem) = TYPE_PRECISION (enumtype);
12451 TYPE_ALIGN (tem) = TYPE_ALIGN (enumtype);
12452 TREE_UNSIGNED (tem) = TREE_UNSIGNED (enumtype);
12453 }
12454
12455 /* Finish debugging output for this type. */
12456 rest_of_type_compilation (enumtype, namespace_bindings_p ());
12457 }
12458
12459 /* In start_enum we pushed obstacks. Here, we must pop them. */
12460 pop_obstacks ();
12461
12462 return enumtype;
12463 }
12464
12465 /* Build and install a CONST_DECL for an enumeration constant of the
12466 enumeration type TYPE whose NAME and VALUE (if any) are provided.
12467 Assignment of sequential values by default is handled here. */
12468
12469 tree
12470 build_enumerator (name, value, type)
12471 tree name;
12472 tree value;
12473 tree type;
12474 {
12475 tree decl, result;
12476 tree context;
12477
12478 /* Remove no-op casts from the value. */
12479 if (value)
12480 STRIP_TYPE_NOPS (value);
12481
12482 if (! processing_template_decl)
12483 {
12484 /* Validate and default VALUE. */
12485 if (value != NULL_TREE)
12486 {
12487 if (TREE_READONLY_DECL_P (value))
12488 value = decl_constant_value (value);
12489
12490 if (TREE_CODE (value) == INTEGER_CST)
12491 {
12492 value = default_conversion (value);
12493 constant_expression_warning (value);
12494 }
12495 else
12496 {
12497 cp_error ("enumerator value for `%D' not integer constant", name);
12498 value = NULL_TREE;
12499 }
12500 }
12501
12502 /* Default based on previous value. */
12503 if (value == NULL_TREE && ! processing_template_decl)
12504 {
12505 value = enum_next_value;
12506 if (enum_overflow)
12507 cp_error ("overflow in enumeration values at `%D'", name);
12508 }
12509
12510 /* Remove no-op casts from the value. */
12511 if (value)
12512 STRIP_TYPE_NOPS (value);
12513 #if 0
12514 /* To fix MAX_VAL enum consts. (bkoz) */
12515 TREE_TYPE (value) = integer_type_node;
12516 #endif
12517 }
12518
12519 /* We always have to copy here; not all INTEGER_CSTs are unshared.
12520 Even in other cases, we will later (in finish_enum) be setting the
12521 type of VALUE. */
12522 if (value != NULL_TREE)
12523 value = copy_node (value);
12524
12525 /* C++ associates enums with global, function, or class declarations. */
12526
12527 context = current_scope ();
12528 if (context && context == current_class_type)
12529 /* This enum declaration is local to the class. */
12530 decl = build_lang_field_decl (CONST_DECL, name, type);
12531 else
12532 /* It's a global enum, or it's local to a function. (Note local to
12533 a function could mean local to a class method. */
12534 decl = build_decl (CONST_DECL, name, type);
12535
12536 DECL_CONTEXT (decl) = FROB_CONTEXT (context);
12537 DECL_INITIAL (decl) = value;
12538 TREE_READONLY (decl) = 1;
12539
12540 if (context && context == current_class_type)
12541 {
12542 pushdecl_class_level (decl);
12543 /* In something like `struct S { enum E { i = 7 }; };' we put `i'
12544 on the TYPE_FIELDS list for `S'. (That's so that you can say
12545 things like `S::i' later.) */
12546 finish_member_declaration (decl);
12547 }
12548 else
12549 {
12550 pushdecl (decl);
12551 GNU_xref_decl (current_function_decl, decl);
12552 }
12553
12554 if (! processing_template_decl)
12555 {
12556 /* Set basis for default for next value. */
12557 enum_next_value = build_binary_op_nodefault (PLUS_EXPR, value,
12558 integer_one_node, PLUS_EXPR);
12559 enum_overflow = tree_int_cst_lt (enum_next_value, value);
12560 }
12561
12562 result = saveable_tree_cons (name, decl, NULL_TREE);
12563 return result;
12564 }
12565
12566 \f
12567 static int function_depth;
12568
12569 /* Create the FUNCTION_DECL for a function definition.
12570 DECLSPECS and DECLARATOR are the parts of the declaration;
12571 they describe the function's name and the type it returns,
12572 but twisted together in a fashion that parallels the syntax of C.
12573
12574 If PRE_PARSED_P is non-zero then DECLARATOR is really the DECL for
12575 the function we are about to process; DECLSPECS are ignored. For
12576 example, we set PRE_PARSED_P when processing the definition of
12577 inline function that was defined in-class; the definition is
12578 actually processed when the class is complete. In this case,
12579 PRE_PARSED_P is 2. We also set PRE_PARSED_P when instanting the
12580 body of a template function, and when constructing thunk functions
12581 and such; in these cases PRE_PARSED_P is 1.
12582
12583 This function creates a binding context for the function body
12584 as well as setting up the FUNCTION_DECL in current_function_decl.
12585
12586 Returns 1 on success. If the DECLARATOR is not suitable for a function
12587 (it defines a datum instead), we return 0, which tells
12588 yyparse to report a parse error.
12589
12590 For C++, we must first check whether that datum makes any sense.
12591 For example, "class A local_a(1,2);" means that variable local_a
12592 is an aggregate of type A, which should have a constructor
12593 applied to it with the argument list [1, 2].
12594
12595 @@ There is currently no way to retrieve the storage
12596 @@ allocated to FUNCTION (or all of its parms) if we return
12597 @@ something we had previously. */
12598
12599 int
12600 start_function (declspecs, declarator, attrs, pre_parsed_p)
12601 tree declspecs, declarator, attrs;
12602 int pre_parsed_p;
12603 {
12604 tree decl1;
12605 tree ctype = NULL_TREE;
12606 tree fntype;
12607 tree restype;
12608 extern int have_extern_spec;
12609 extern int used_extern_spec;
12610 int doing_friend = 0;
12611
12612 /* Sanity check. */
12613 my_friendly_assert (TREE_CODE (TREE_VALUE (void_list_node)) == VOID_TYPE, 160);
12614 my_friendly_assert (TREE_CHAIN (void_list_node) == NULL_TREE, 161);
12615
12616 /* Assume, until we see it does. */
12617 current_function_returns_value = 0;
12618 current_function_returns_null = 0;
12619 named_labels = 0;
12620 shadowed_labels = 0;
12621 current_function_assigns_this = 0;
12622 current_function_just_assigned_this = 0;
12623 current_function_parms_stored = 0;
12624 original_result_rtx = NULL_RTX;
12625 base_init_expr = NULL_TREE;
12626 current_base_init_list = NULL_TREE;
12627 current_member_init_list = NULL_TREE;
12628 ctor_label = dtor_label = NULL_TREE;
12629 static_labelno = 0;
12630
12631 clear_temp_name ();
12632
12633 /* This should only be done once on the top most decl. */
12634 if (have_extern_spec && !used_extern_spec)
12635 {
12636 declspecs = decl_tree_cons (NULL_TREE, get_identifier ("extern"), declspecs);
12637 used_extern_spec = 1;
12638 }
12639
12640 if (pre_parsed_p)
12641 {
12642 decl1 = declarator;
12643
12644 #if 0
12645 /* What was this testing for, exactly? */
12646 if (! DECL_ARGUMENTS (decl1)
12647 && !DECL_STATIC_FUNCTION_P (decl1)
12648 && !DECL_ARTIFICIAL (decl1)
12649 && DECL_CLASS_SCOPE_P (decl1)
12650 && TYPE_IDENTIFIER (DECL_CONTEXT (decl1))
12651 && IDENTIFIER_TEMPLATE (TYPE_IDENTIFIER (DECL_CONTEXT (decl1))))
12652 {
12653 tree binding = binding_for_name (DECL_NAME (decl1),
12654 current_namespace);
12655 cp_error ("redeclaration of `%#D'", decl1);
12656 if (IDENTIFIER_CLASS_VALUE (DECL_NAME (decl1)))
12657 cp_error_at ("previous declaration here", IDENTIFIER_CLASS_VALUE (DECL_NAME (decl1)));
12658 else if (BINDING_VALUE (binding))
12659 cp_error_at ("previous declaration here", BINDING_VALUE (binding));
12660 }
12661 #endif
12662
12663 fntype = TREE_TYPE (decl1);
12664 if (TREE_CODE (fntype) == METHOD_TYPE)
12665 ctype = TYPE_METHOD_BASETYPE (fntype);
12666
12667 /* ANSI C++ June 5 1992 WP 11.4.5. A friend function defined in a
12668 class is in the (lexical) scope of the class in which it is
12669 defined. */
12670 if (!ctype && DECL_FRIEND_P (decl1))
12671 {
12672 ctype = DECL_CLASS_CONTEXT (decl1);
12673
12674 /* CTYPE could be null here if we're dealing with a template;
12675 for example, `inline friend float foo()' inside a template
12676 will have no CTYPE set. */
12677 if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
12678 ctype = NULL_TREE;
12679 else
12680 doing_friend = 1;
12681 }
12682
12683 last_function_parms = DECL_ARGUMENTS (decl1);
12684 last_function_parm_tags = NULL_TREE;
12685 }
12686 else
12687 {
12688 decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, NULL_TREE);
12689 /* If the declarator is not suitable for a function definition,
12690 cause a syntax error. */
12691 if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL) return 0;
12692
12693 fntype = TREE_TYPE (decl1);
12694
12695 restype = TREE_TYPE (fntype);
12696 if (CLASS_TYPE_P (restype) && !CLASSTYPE_GOT_SEMICOLON (restype))
12697 {
12698 cp_error ("semicolon missing after declaration of `%#T'", restype);
12699 shadow_tag (build_expr_list (NULL_TREE, restype));
12700 CLASSTYPE_GOT_SEMICOLON (restype) = 1;
12701 if (TREE_CODE (fntype) == FUNCTION_TYPE)
12702 fntype = build_function_type (integer_type_node,
12703 TYPE_ARG_TYPES (fntype));
12704 else
12705 fntype = build_cplus_method_type (build_type_variant (TYPE_METHOD_BASETYPE (fntype), TREE_READONLY (decl1), TREE_SIDE_EFFECTS (decl1)),
12706 integer_type_node,
12707 TYPE_ARG_TYPES (fntype));
12708 TREE_TYPE (decl1) = fntype;
12709 }
12710
12711 if (TREE_CODE (fntype) == METHOD_TYPE)
12712 ctype = TYPE_METHOD_BASETYPE (fntype);
12713 else if (DECL_MAIN_P (decl1))
12714 {
12715 /* If this doesn't return integer_type, complain. */
12716 if (TREE_TYPE (TREE_TYPE (decl1)) != integer_type_node)
12717 {
12718 if (pedantic || warn_return_type)
12719 pedwarn ("return type for `main' changed to `int'");
12720 TREE_TYPE (decl1) = fntype = default_function_type;
12721 }
12722 }
12723 }
12724
12725 /* Warn if function was previously implicitly declared
12726 (but not if we warned then). */
12727 if (! warn_implicit
12728 && IDENTIFIER_IMPLICIT_DECL (DECL_NAME (decl1)) != NULL_TREE)
12729 cp_warning_at ("`%D' implicitly declared before its definition", IDENTIFIER_IMPLICIT_DECL (DECL_NAME (decl1)));
12730
12731 announce_function (decl1);
12732
12733 /* Set up current_class_type, and enter the scope of the class, if
12734 appropriate. */
12735 if (ctype)
12736 push_nested_class (ctype, 1);
12737 else if (DECL_STATIC_FUNCTION_P (decl1))
12738 push_nested_class (DECL_CONTEXT (decl1), 2);
12739
12740 /* Now that we have entered the scope of the class, we must restore
12741 the bindings for any template parameters surrounding DECL1, if it
12742 is an inline member template. (Order is important; consider the
12743 case where a template parameter has the same name as a field of
12744 the class.) It is not until after this point that
12745 PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly. */
12746 if (pre_parsed_p == 2)
12747 maybe_begin_member_template_processing (decl1);
12748
12749 /* We are now in the scope of the function being defined. */
12750 current_function_decl = decl1;
12751
12752 /* Save the parm names or decls from this function's declarator
12753 where store_parm_decls will find them. */
12754 current_function_parms = last_function_parms;
12755 current_function_parm_tags = last_function_parm_tags;
12756
12757 if (! processing_template_decl)
12758 {
12759 /* In a fcn definition, arg types must be complete. */
12760 require_complete_types_for_parms (DECL_ARGUMENTS (decl1));
12761
12762 if (TYPE_SIZE (complete_type (TREE_TYPE (fntype))) == NULL_TREE)
12763 {
12764 cp_error ("return-type `%#T' is an incomplete type",
12765 TREE_TYPE (fntype));
12766
12767 /* Make it return void instead, but don't change the
12768 type of the DECL_RESULT, in case we have a named return value. */
12769 if (ctype)
12770 TREE_TYPE (decl1)
12771 = build_cplus_method_type (build_type_variant (ctype,
12772 TREE_READONLY (decl1),
12773 TREE_SIDE_EFFECTS (decl1)),
12774 void_type_node,
12775 FUNCTION_ARG_CHAIN (decl1));
12776 else
12777 TREE_TYPE (decl1)
12778 = build_function_type (void_type_node,
12779 TYPE_ARG_TYPES (TREE_TYPE (decl1)));
12780 DECL_RESULT (decl1)
12781 = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (TREE_TYPE (fntype)));
12782 TREE_READONLY (DECL_RESULT (decl1))
12783 = CP_TYPE_CONST_P (TREE_TYPE (fntype));
12784 TREE_THIS_VOLATILE (DECL_RESULT (decl1))
12785 = CP_TYPE_VOLATILE_P (TREE_TYPE (fntype));
12786 }
12787
12788 if (TYPE_LANG_SPECIFIC (TREE_TYPE (fntype))
12789 && CLASSTYPE_ABSTRACT_VIRTUALS (TREE_TYPE (fntype)))
12790 abstract_virtuals_error (decl1, TREE_TYPE (fntype));
12791 }
12792
12793 /* Effective C++ rule 15. See also c_expand_return. */
12794 if (warn_ecpp
12795 && DECL_NAME (decl1) == ansi_opname[(int) MODIFY_EXPR]
12796 && TREE_CODE (TREE_TYPE (fntype)) == VOID_TYPE)
12797 cp_warning ("`operator=' should return a reference to `*this'");
12798
12799 /* Make the init_value nonzero so pushdecl knows this is not tentative.
12800 error_mark_node is replaced below (in poplevel) with the BLOCK. */
12801 DECL_INITIAL (decl1) = error_mark_node;
12802
12803 #ifdef SET_DEFAULT_DECL_ATTRIBUTES
12804 SET_DEFAULT_DECL_ATTRIBUTES (decl1, attrs);
12805 #endif
12806
12807 /* This function exists in static storage.
12808 (This does not mean `static' in the C sense!) */
12809 TREE_STATIC (decl1) = 1;
12810
12811 /* We must call push_template_decl after current_class_type is set
12812 up. (If we are processing inline definitions after exiting a
12813 class scope, current_class_type will be NULL_TREE until set above
12814 by push_nested_class.) */
12815 if (processing_template_decl)
12816 decl1 = push_template_decl (decl1);
12817
12818 /* Record the decl so that the function name is defined.
12819 If we already have a decl for this name, and it is a FUNCTION_DECL,
12820 use the old decl. */
12821 if (!processing_template_decl && pre_parsed_p == 0)
12822 {
12823 /* A specialization is not used to guide overload resolution. */
12824 if ((flag_guiding_decls
12825 || !DECL_TEMPLATE_SPECIALIZATION (decl1))
12826 && ! DECL_FUNCTION_MEMBER_P (decl1))
12827 decl1 = pushdecl (decl1);
12828 else
12829 {
12830 /* We need to set the DECL_CONTEXT. */
12831 if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
12832 DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
12833 /* And make sure we have enough default args. */
12834 check_default_args (decl1);
12835 }
12836 DECL_MAIN_VARIANT (decl1) = decl1;
12837 fntype = TREE_TYPE (decl1);
12838 }
12839
12840 current_function_decl = decl1;
12841
12842 if (DECL_INTERFACE_KNOWN (decl1))
12843 {
12844 tree ctx = hack_decl_function_context (decl1);
12845
12846 if (DECL_NOT_REALLY_EXTERN (decl1))
12847 DECL_EXTERNAL (decl1) = 0;
12848
12849 if (ctx != NULL_TREE && DECL_THIS_INLINE (ctx)
12850 && TREE_PUBLIC (ctx))
12851 /* This is a function in a local class in an extern inline
12852 function. */
12853 comdat_linkage (decl1);
12854 }
12855 /* If this function belongs to an interface, it is public.
12856 If it belongs to someone else's interface, it is also external.
12857 It doesn't matter whether it's inline or not. */
12858 else if (interface_unknown == 0
12859 && (! DECL_TEMPLATE_INSTANTIATION (decl1)
12860 || flag_alt_external_templates))
12861 {
12862 if (DECL_THIS_INLINE (decl1) || DECL_TEMPLATE_INSTANTIATION (decl1)
12863 || processing_template_decl)
12864 DECL_EXTERNAL (decl1)
12865 = (interface_only
12866 || (DECL_THIS_INLINE (decl1) && ! flag_implement_inlines));
12867 else
12868 DECL_EXTERNAL (decl1) = 0;
12869 DECL_NOT_REALLY_EXTERN (decl1) = 0;
12870 DECL_INTERFACE_KNOWN (decl1) = 1;
12871 }
12872 else
12873 {
12874 /* This is a definition, not a reference.
12875 So clear DECL_EXTERNAL. */
12876 DECL_EXTERNAL (decl1) = 0;
12877
12878 if ((DECL_THIS_INLINE (decl1) || DECL_TEMPLATE_INSTANTIATION (decl1))
12879 && ! DECL_INTERFACE_KNOWN (decl1)
12880 /* Don't try to defer nested functions for now. */
12881 && ! hack_decl_function_context (decl1))
12882 DECL_DEFER_OUTPUT (decl1) = 1;
12883 else
12884 DECL_INTERFACE_KNOWN (decl1) = 1;
12885 }
12886
12887 if (ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1))
12888 {
12889 if (TREE_CODE (fntype) == METHOD_TYPE)
12890 TREE_TYPE (decl1) = fntype
12891 = build_function_type (TREE_TYPE (fntype),
12892 TREE_CHAIN (TYPE_ARG_TYPES (fntype)));
12893 current_function_parms = TREE_CHAIN (current_function_parms);
12894 DECL_ARGUMENTS (decl1) = current_function_parms;
12895 ctype = NULL_TREE;
12896 }
12897 restype = TREE_TYPE (fntype);
12898
12899 if (ctype)
12900 {
12901 /* If we're compiling a friend function, neither of the variables
12902 current_class_ptr nor current_class_type will have values. */
12903 if (! doing_friend)
12904 {
12905 /* We know that this was set up by `grokclassfn'.
12906 We do not wait until `store_parm_decls', since evil
12907 parse errors may never get us to that point. Here
12908 we keep the consistency between `current_class_type'
12909 and `current_class_ptr'. */
12910 tree t = current_function_parms;
12911
12912 my_friendly_assert (t != NULL_TREE
12913 && TREE_CODE (t) == PARM_DECL, 162);
12914
12915 if (TREE_CODE (TREE_TYPE (t)) == POINTER_TYPE)
12916 {
12917 int i;
12918
12919 if (! hack_decl_function_context (decl1))
12920 temporary_allocation ();
12921 i = suspend_momentary ();
12922
12923 /* Normally, build_indirect_ref returns
12924 current_class_ref whenever current_class_ptr is
12925 dereferenced. This time, however, we want it to
12926 *create* current_class_ref, so we temporarily clear
12927 current_class_ptr to fool it. */
12928 current_class_ptr = NULL_TREE;
12929 current_class_ref = build_indirect_ref (t, NULL_PTR);
12930 current_class_ptr = t;
12931
12932 resume_momentary (i);
12933 if (! hack_decl_function_context (decl1))
12934 end_temporary_allocation ();
12935 }
12936 else
12937 /* We're having a signature pointer here. */
12938 current_class_ref = current_class_ptr = t;
12939
12940 }
12941 }
12942 else
12943 current_class_ptr = current_class_ref = NULL_TREE;
12944
12945 pushlevel (0);
12946 current_binding_level->parm_flag = 1;
12947
12948 GNU_xref_function (decl1, current_function_parms);
12949
12950 if (attrs)
12951 cplus_decl_attributes (decl1, NULL_TREE, attrs);
12952
12953 make_function_rtl (decl1);
12954
12955 /* Promote the value to int before returning it. */
12956 if (C_PROMOTING_INTEGER_TYPE_P (restype))
12957 restype = type_promotes_to (restype);
12958
12959 /* If this fcn was already referenced via a block-scope `extern' decl
12960 (or an implicit decl), propagate certain information about the usage. */
12961 if (TREE_ADDRESSABLE (DECL_ASSEMBLER_NAME (decl1)))
12962 TREE_ADDRESSABLE (decl1) = 1;
12963
12964 if (DECL_RESULT (decl1) == NULL_TREE)
12965 {
12966 DECL_RESULT (decl1)
12967 = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (restype));
12968 TREE_READONLY (DECL_RESULT (decl1)) = CP_TYPE_CONST_P (restype);
12969 TREE_THIS_VOLATILE (DECL_RESULT (decl1)) = CP_TYPE_VOLATILE_P (restype);
12970 }
12971
12972 /* Allocate further tree nodes temporarily during compilation
12973 of this function only. Tiemann moved up here from bottom of fn. */
12974 /* If this is a nested function, then we must continue to allocate RTL
12975 on the permanent obstack in case we need to inline it later. */
12976 if (! hack_decl_function_context (decl1))
12977 temporary_allocation ();
12978
12979 if (processing_template_decl)
12980 {
12981 ++minimal_parse_mode;
12982 last_tree = DECL_SAVED_TREE (decl1)
12983 = build_nt (EXPR_STMT, void_zero_node);
12984 }
12985
12986 ++function_depth;
12987
12988 if (DESTRUCTOR_NAME_P (DECL_ASSEMBLER_NAME (decl1))
12989 && DECL_LANGUAGE (decl1) == lang_cplusplus)
12990 {
12991 dtor_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
12992 ctor_label = NULL_TREE;
12993 }
12994 else
12995 {
12996 dtor_label = NULL_TREE;
12997 if (DECL_CONSTRUCTOR_P (decl1))
12998 ctor_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
12999 }
13000
13001 return 1;
13002 }
13003 \f
13004 /* Called after store_parm_decls for a function-try-block. We need to update
13005 last_parm_cleanup_insn so that the base initializers for a constructor
13006 are run within this block, not before it. */
13007
13008 void
13009 expand_start_early_try_stmts ()
13010 {
13011 expand_start_try_stmts ();
13012 last_parm_cleanup_insn = get_last_insn ();
13013 }
13014
13015 /* Store the parameter declarations into the current function declaration.
13016 This is called after parsing the parameter declarations, before
13017 digesting the body of the function.
13018
13019 Also install to binding contour return value identifier, if any. */
13020
13021 void
13022 store_parm_decls ()
13023 {
13024 register tree fndecl = current_function_decl;
13025 register tree parm;
13026 int parms_have_cleanups = 0;
13027 tree cleanups = NULL_TREE;
13028
13029 /* This is either a chain of PARM_DECLs (when a prototype is used). */
13030 tree specparms = current_function_parms;
13031
13032 /* This is a list of types declared among parms in a prototype. */
13033 tree parmtags = current_function_parm_tags;
13034
13035 /* This is a chain of any other decls that came in among the parm
13036 declarations. If a parm is declared with enum {foo, bar} x;
13037 then CONST_DECLs for foo and bar are put here. */
13038 tree nonparms = NULL_TREE;
13039
13040 if (toplevel_bindings_p ())
13041 fatal ("parse errors have confused me too much");
13042
13043 /* Initialize RTL machinery. */
13044 init_function_start (fndecl, input_filename, lineno);
13045
13046 /* Create a binding level for the parms. */
13047 expand_start_bindings (0);
13048
13049 if (specparms != NULL_TREE)
13050 {
13051 /* This case is when the function was defined with an ANSI prototype.
13052 The parms already have decls, so we need not do anything here
13053 except record them as in effect
13054 and complain if any redundant old-style parm decls were written. */
13055
13056 register tree next;
13057
13058 /* Must clear this because it might contain TYPE_DECLs declared
13059 at class level. */
13060 storedecls (NULL_TREE);
13061
13062 for (parm = nreverse (specparms); parm; parm = next)
13063 {
13064 next = TREE_CHAIN (parm);
13065 if (TREE_CODE (parm) == PARM_DECL)
13066 {
13067 tree cleanup;
13068 if (DECL_NAME (parm) == NULL_TREE)
13069 {
13070 pushdecl (parm);
13071 }
13072 else if (TREE_CODE (TREE_TYPE (parm)) == VOID_TYPE)
13073 cp_error ("parameter `%D' declared void", parm);
13074 else
13075 {
13076 /* Now fill in DECL_REFERENCE_SLOT for any of the parm decls.
13077 A parameter is assumed not to have any side effects.
13078 If this should change for any reason, then this
13079 will have to wrap the bashed reference type in a save_expr.
13080
13081 Also, if the parameter type is declared to be an X
13082 and there is an X(X&) constructor, we cannot lay it
13083 into the stack (any more), so we make this parameter
13084 look like it is really of reference type. Functions
13085 which pass parameters to this function will know to
13086 create a temporary in their frame, and pass a reference
13087 to that. */
13088
13089 if (TREE_CODE (TREE_TYPE (parm)) == REFERENCE_TYPE
13090 && TYPE_SIZE (TREE_TYPE (TREE_TYPE (parm))))
13091 SET_DECL_REFERENCE_SLOT (parm, convert_from_reference (parm));
13092
13093 pushdecl (parm);
13094 }
13095 if (! processing_template_decl
13096 && (cleanup = maybe_build_cleanup (parm), cleanup))
13097 {
13098 expand_decl (parm);
13099 parms_have_cleanups = 1;
13100
13101 /* Keep track of the cleanups. */
13102 cleanups = tree_cons (parm, cleanup, cleanups);
13103 }
13104 }
13105 else
13106 {
13107 /* If we find an enum constant or a type tag,
13108 put it aside for the moment. */
13109 TREE_CHAIN (parm) = NULL_TREE;
13110 nonparms = chainon (nonparms, parm);
13111 }
13112 }
13113
13114 /* Get the decls in their original chain order
13115 and record in the function. This is all and only the
13116 PARM_DECLs that were pushed into scope by the loop above. */
13117 DECL_ARGUMENTS (fndecl) = getdecls ();
13118
13119 storetags (chainon (parmtags, gettags ()));
13120 }
13121 else
13122 DECL_ARGUMENTS (fndecl) = NULL_TREE;
13123
13124 /* Now store the final chain of decls for the arguments
13125 as the decl-chain of the current lexical scope.
13126 Put the enumerators in as well, at the front so that
13127 DECL_ARGUMENTS is not modified. */
13128
13129 storedecls (chainon (nonparms, DECL_ARGUMENTS (fndecl)));
13130
13131 /* Declare __FUNCTION__ and __PRETTY_FUNCTION__ for this function. */
13132 declare_function_name ();
13133
13134 /* Initialize the RTL code for the function. */
13135 DECL_SAVED_INSNS (fndecl) = NULL_RTX;
13136 if (! processing_template_decl)
13137 expand_function_start (fndecl, parms_have_cleanups);
13138
13139 current_function_parms_stored = 1;
13140
13141 /* If this function is `main', emit a call to `__main'
13142 to run global initializers, etc. */
13143 if (DECL_MAIN_P (fndecl))
13144 expand_main_function ();
13145
13146 /* Now that we have initialized the parms, we can start their
13147 cleanups. We cannot do this before, since expand_decl_cleanup
13148 should not be called before the parm can be used. */
13149 if (cleanups
13150 && ! processing_template_decl)
13151 {
13152 for (cleanups = nreverse (cleanups); cleanups; cleanups = TREE_CHAIN (cleanups))
13153 {
13154 if (! expand_decl_cleanup (TREE_PURPOSE (cleanups), TREE_VALUE (cleanups)))
13155 cp_error ("parser lost in parsing declaration of `%D'",
13156 TREE_PURPOSE (cleanups));
13157 }
13158 }
13159
13160 /* Create a binding contour which can be used to catch
13161 cleanup-generated temporaries. Also, if the return value needs or
13162 has initialization, deal with that now. */
13163 if (parms_have_cleanups)
13164 {
13165 pushlevel (0);
13166 expand_start_bindings (0);
13167 }
13168
13169 if (! processing_template_decl && flag_exceptions)
13170 {
13171 /* Do the starting of the exception specifications, if we have any. */
13172 if (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (current_function_decl)))
13173 expand_start_eh_spec ();
13174 }
13175
13176 last_parm_cleanup_insn = get_last_insn ();
13177 last_dtor_insn = get_last_insn ();
13178 }
13179
13180 /* Bind a name and initialization to the return value of
13181 the current function. */
13182
13183 void
13184 store_return_init (return_id, init)
13185 tree return_id, init;
13186 {
13187 tree decl = DECL_RESULT (current_function_decl);
13188
13189 if (pedantic)
13190 /* Give this error as many times as there are occurrences,
13191 so that users can use Emacs compilation buffers to find
13192 and fix all such places. */
13193 pedwarn ("ANSI C++ does not permit named return values");
13194
13195 if (return_id != NULL_TREE)
13196 {
13197 if (DECL_NAME (decl) == NULL_TREE)
13198 {
13199 DECL_NAME (decl) = return_id;
13200 DECL_ASSEMBLER_NAME (decl) = return_id;
13201 }
13202 else
13203 cp_error ("return identifier `%D' already in place", decl);
13204 }
13205
13206 /* Can't let this happen for constructors. */
13207 if (DECL_CONSTRUCTOR_P (current_function_decl))
13208 {
13209 error ("can't redefine default return value for constructors");
13210 return;
13211 }
13212
13213 /* If we have a named return value, put that in our scope as well. */
13214 if (DECL_NAME (decl) != NULL_TREE)
13215 {
13216 /* If this named return value comes in a register,
13217 put it in a pseudo-register. */
13218 if (DECL_REGISTER (decl))
13219 {
13220 original_result_rtx = DECL_RTL (decl);
13221 DECL_RTL (decl) = gen_reg_rtx (DECL_MODE (decl));
13222 }
13223
13224 /* Let `cp_finish_decl' know that this initializer is ok. */
13225 DECL_INITIAL (decl) = init;
13226 pushdecl (decl);
13227
13228 if (minimal_parse_mode)
13229 add_tree (build_min_nt (RETURN_INIT, return_id,
13230 copy_to_permanent (init)));
13231 else
13232 cp_finish_decl (decl, init, NULL_TREE, 0, 0);
13233 }
13234 }
13235
13236 \f
13237 /* Finish up a function declaration and compile that function
13238 all the way to assembler language output. The free the storage
13239 for the function definition.
13240
13241 This is called after parsing the body of the function definition.
13242 LINENO is the current line number.
13243
13244 FLAGS is a bitwise or of the following values:
13245 1 - CALL_POPLEVEL
13246 An extra call to poplevel (and expand_end_bindings) must be
13247 made to take care of the binding contour for the base
13248 initializers. This is only relevant for constructors.
13249 2 - INCLASS_INLINE
13250 We just finished processing the body of an in-class inline
13251 function definition. (This processing will have taken place
13252 after the class definition is complete.)
13253
13254 NESTED is nonzero if we were in the middle of compiling another function
13255 when we started on this one. */
13256
13257 void
13258 finish_function (lineno, flags, nested)
13259 int lineno;
13260 int flags;
13261 int nested;
13262 {
13263 register tree fndecl = current_function_decl;
13264 tree fntype, ctype = NULL_TREE;
13265 rtx last_parm_insn, insns;
13266 /* Label to use if this function is supposed to return a value. */
13267 tree no_return_label = NULL_TREE;
13268 tree decls = NULL_TREE;
13269 int call_poplevel = (flags & 1) != 0;
13270 int inclass_inline = (flags & 2) != 0;
13271 int in_template;
13272
13273 /* When we get some parse errors, we can end up without a
13274 current_function_decl, so cope. */
13275 if (fndecl == NULL_TREE)
13276 return;
13277
13278 if (! nested && function_depth > 1)
13279 nested = 1;
13280
13281 fntype = TREE_TYPE (fndecl);
13282
13283 /* TREE_READONLY (fndecl) = 1;
13284 This caused &foo to be of type ptr-to-const-function
13285 which then got a warning when stored in a ptr-to-function variable. */
13286
13287 /* This happens on strange parse errors. */
13288 if (! current_function_parms_stored)
13289 {
13290 call_poplevel = 0;
13291 store_parm_decls ();
13292 }
13293
13294 if (processing_template_decl)
13295 {
13296 if (DECL_CONSTRUCTOR_P (fndecl) && call_poplevel)
13297 {
13298 decls = getdecls ();
13299 expand_end_bindings (decls, decls != NULL_TREE, 0);
13300 poplevel (decls != NULL_TREE, 0, 0);
13301 }
13302 }
13303 else
13304 {
13305 if (write_symbols != NO_DEBUG /*&& TREE_CODE (fntype) != METHOD_TYPE*/)
13306 {
13307 tree ttype = target_type (fntype);
13308 tree parmdecl;
13309
13310 if (IS_AGGR_TYPE (ttype))
13311 /* Let debugger know it should output info for this type. */
13312 note_debug_info_needed (ttype);
13313
13314 for (parmdecl = DECL_ARGUMENTS (fndecl); parmdecl; parmdecl = TREE_CHAIN (parmdecl))
13315 {
13316 ttype = target_type (TREE_TYPE (parmdecl));
13317 if (IS_AGGR_TYPE (ttype))
13318 /* Let debugger know it should output info for this type. */
13319 note_debug_info_needed (ttype);
13320 }
13321 }
13322
13323 /* Clean house because we will need to reorder insns here. */
13324 do_pending_stack_adjust ();
13325
13326 if (dtor_label)
13327 {
13328 tree binfo = TYPE_BINFO (current_class_type);
13329 tree cond = integer_one_node;
13330 tree exprstmt;
13331 tree in_charge_node = lookup_name (in_charge_identifier, 0);
13332 tree virtual_size;
13333 int ok_to_optimize_dtor = 0;
13334 int empty_dtor = get_last_insn () == last_dtor_insn;
13335
13336 if (current_function_assigns_this)
13337 cond = build (NE_EXPR, boolean_type_node,
13338 current_class_ptr, integer_zero_node);
13339 else
13340 {
13341 int n_baseclasses = CLASSTYPE_N_BASECLASSES (current_class_type);
13342
13343 /* If this destructor is empty, then we don't need to check
13344 whether `this' is NULL in some cases. */
13345 if ((flag_this_is_variable & 1) == 0)
13346 ok_to_optimize_dtor = 1;
13347 else if (empty_dtor)
13348 ok_to_optimize_dtor
13349 = (n_baseclasses == 0
13350 || (n_baseclasses == 1
13351 && TYPE_HAS_DESTRUCTOR (TYPE_BINFO_BASETYPE (current_class_type, 0))));
13352 }
13353
13354 /* These initializations might go inline. Protect
13355 the binding level of the parms. */
13356 pushlevel (0);
13357 expand_start_bindings (0);
13358
13359 if (current_function_assigns_this)
13360 {
13361 current_function_assigns_this = 0;
13362 current_function_just_assigned_this = 0;
13363 }
13364
13365 /* Generate the code to call destructor on base class.
13366 If this destructor belongs to a class with virtual
13367 functions, then set the virtual function table
13368 pointer to represent the type of our base class. */
13369
13370 /* This side-effect makes call to `build_delete' generate the
13371 code we have to have at the end of this destructor.
13372 `build_delete' will set the flag again. */
13373 TYPE_HAS_DESTRUCTOR (current_class_type) = 0;
13374
13375 /* These are two cases where we cannot delegate deletion. */
13376 if (TYPE_USES_VIRTUAL_BASECLASSES (current_class_type)
13377 || TYPE_GETS_REG_DELETE (current_class_type))
13378 exprstmt = build_delete (current_class_type, current_class_ref, integer_zero_node,
13379 LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR|LOOKUP_NORMAL, 0);
13380 else
13381 exprstmt = build_delete (current_class_type, current_class_ref, in_charge_node,
13382 LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR|LOOKUP_NORMAL, 0);
13383
13384 /* If we did not assign to this, then `this' is non-zero at
13385 the end of a destructor. As a special optimization, don't
13386 emit test if this is an empty destructor. If it does nothing,
13387 it does nothing. If it calls a base destructor, the base
13388 destructor will perform the test. */
13389
13390 if (exprstmt != error_mark_node
13391 && (TREE_CODE (exprstmt) != NOP_EXPR
13392 || TREE_OPERAND (exprstmt, 0) != integer_zero_node
13393 || TYPE_USES_VIRTUAL_BASECLASSES (current_class_type)))
13394 {
13395 expand_label (dtor_label);
13396 if (cond != integer_one_node)
13397 expand_start_cond (cond, 0);
13398 if (exprstmt != void_zero_node)
13399 /* Don't call `expand_expr_stmt' if we're not going to do
13400 anything, since -Wall will give a diagnostic. */
13401 expand_expr_stmt (exprstmt);
13402
13403 /* Run destructor on all virtual baseclasses. */
13404 if (TYPE_USES_VIRTUAL_BASECLASSES (current_class_type))
13405 {
13406 tree vbases = nreverse (copy_list (CLASSTYPE_VBASECLASSES (current_class_type)));
13407 expand_start_cond (build (BIT_AND_EXPR, integer_type_node,
13408 in_charge_node, integer_two_node), 0);
13409 while (vbases)
13410 {
13411 if (TYPE_NEEDS_DESTRUCTOR (BINFO_TYPE (vbases)))
13412 {
13413 tree vb = get_vbase
13414 (BINFO_TYPE (vbases),
13415 TYPE_BINFO (current_class_type));
13416 expand_expr_stmt
13417 (build_scoped_method_call
13418 (current_class_ref, vb, dtor_identifier,
13419 build_expr_list (NULL_TREE, integer_zero_node)));
13420 }
13421 vbases = TREE_CHAIN (vbases);
13422 }
13423 expand_end_cond ();
13424 }
13425
13426 do_pending_stack_adjust ();
13427 if (cond != integer_one_node)
13428 expand_end_cond ();
13429 }
13430
13431 virtual_size = c_sizeof (current_class_type);
13432
13433 /* At the end, call delete if that's what's requested. */
13434
13435 /* FDIS sez: At the point of definition of a virtual destructor
13436 (including an implicit definition), non-placement operator
13437 delete shall be looked up in the scope of the destructor's
13438 class and if found shall be accessible and unambiguous.
13439
13440 This is somewhat unclear, but I take it to mean that if the
13441 class only defines placement deletes we don't do anything here.
13442 So we pass LOOKUP_SPECULATIVELY; delete_sanity will complain
13443 for us if they ever try to delete one of these. */
13444
13445 if (TYPE_GETS_REG_DELETE (current_class_type)
13446 || TYPE_USES_VIRTUAL_BASECLASSES (current_class_type))
13447 exprstmt = build_op_delete_call
13448 (DELETE_EXPR, current_class_ptr, virtual_size,
13449 LOOKUP_NORMAL | LOOKUP_SPECULATIVELY, NULL_TREE);
13450 else
13451 exprstmt = NULL_TREE;
13452
13453 if (exprstmt)
13454 {
13455 cond = build (BIT_AND_EXPR, integer_type_node,
13456 in_charge_node, integer_one_node);
13457 expand_start_cond (cond, 0);
13458 expand_expr_stmt (exprstmt);
13459 expand_end_cond ();
13460 }
13461
13462 /* End of destructor. */
13463 expand_end_bindings (NULL_TREE, getdecls () != NULL_TREE, 0);
13464 poplevel (getdecls () != NULL_TREE, 0, 0);
13465
13466 /* Back to the top of destructor. */
13467 /* Don't execute destructor code if `this' is NULL. */
13468
13469 start_sequence ();
13470
13471 /* If the dtor is empty, and we know there is not possible way we
13472 could use any vtable entries, before they are possibly set by
13473 a base class dtor, we don't have to setup the vtables, as we
13474 know that any base class dtoring will set up any vtables it
13475 needs. We avoid MI, because one base class dtor can do a
13476 virtual dispatch to an overridden function that would need to
13477 have a non-related vtable set up, we cannot avoid setting up
13478 vtables in that case. We could change this to see if there is
13479 just one vtable. */
13480 if (! empty_dtor || TYPE_USES_COMPLEX_INHERITANCE (current_class_type))
13481 {
13482 /* Make all virtual function table pointers in non-virtual base
13483 classes point to CURRENT_CLASS_TYPE's virtual function
13484 tables. */
13485 expand_direct_vtbls_init (binfo, binfo, 1, 0, current_class_ptr);
13486
13487 if (TYPE_USES_VIRTUAL_BASECLASSES (current_class_type))
13488 expand_indirect_vtbls_init (binfo, current_class_ref, current_class_ptr);
13489 }
13490
13491 if (! ok_to_optimize_dtor)
13492 {
13493 cond = build_binary_op (NE_EXPR,
13494 current_class_ptr, integer_zero_node, 1);
13495 expand_start_cond (cond, 0);
13496 }
13497
13498 insns = get_insns ();
13499 end_sequence ();
13500
13501 last_parm_insn = get_first_nonparm_insn ();
13502 if (last_parm_insn == NULL_RTX)
13503 last_parm_insn = get_last_insn ();
13504 else
13505 last_parm_insn = previous_insn (last_parm_insn);
13506
13507 emit_insns_after (insns, last_parm_insn);
13508
13509 if (! ok_to_optimize_dtor)
13510 expand_end_cond ();
13511 }
13512 else if (current_function_assigns_this)
13513 {
13514 /* Does not need to call emit_base_init, because
13515 that is done (if needed) just after assignment to this
13516 is seen. */
13517
13518 if (DECL_CONSTRUCTOR_P (current_function_decl))
13519 {
13520 end_protect_partials ();
13521 expand_label (ctor_label);
13522 ctor_label = NULL_TREE;
13523
13524 if (call_poplevel)
13525 {
13526 decls = getdecls ();
13527 expand_end_bindings (decls, decls != NULL_TREE, 0);
13528 poplevel (decls != NULL_TREE, 0, 0);
13529 }
13530 /* c_expand_return knows to return 'this' from a constructor. */
13531 c_expand_return (NULL_TREE);
13532 }
13533 else if (TREE_CODE (TREE_TYPE (DECL_RESULT (current_function_decl))) != VOID_TYPE
13534 && return_label != NULL_RTX)
13535 no_return_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
13536
13537 current_function_assigns_this = 0;
13538 current_function_just_assigned_this = 0;
13539 base_init_expr = NULL_TREE;
13540 }
13541 else if (DECL_CONSTRUCTOR_P (fndecl))
13542 {
13543 tree cond = NULL_TREE, thenclause = NULL_TREE;
13544 /* Allow constructor for a type to get a new instance of the object
13545 using `build_new'. */
13546 tree abstract_virtuals = CLASSTYPE_ABSTRACT_VIRTUALS (current_class_type);
13547 CLASSTYPE_ABSTRACT_VIRTUALS (current_class_type) = NULL_TREE;
13548
13549 DECL_RETURNS_FIRST_ARG (fndecl) = 1;
13550
13551 if (flag_this_is_variable > 0)
13552 {
13553 cond = build_binary_op (EQ_EXPR,
13554 current_class_ptr, integer_zero_node, 1);
13555 thenclause = build_modify_expr (current_class_ptr, NOP_EXPR,
13556 build_new (NULL_TREE, current_class_type, void_type_node, 0));
13557 }
13558
13559 CLASSTYPE_ABSTRACT_VIRTUALS (current_class_type) = abstract_virtuals;
13560
13561 start_sequence ();
13562
13563 if (flag_this_is_variable > 0)
13564 {
13565 expand_start_cond (cond, 0);
13566 expand_expr_stmt (thenclause);
13567 expand_end_cond ();
13568 }
13569
13570 /* Emit insns from `emit_base_init' which sets up virtual
13571 function table pointer(s). */
13572 if (base_init_expr)
13573 {
13574 expand_expr_stmt (base_init_expr);
13575 base_init_expr = NULL_TREE;
13576 }
13577
13578 insns = get_insns ();
13579 end_sequence ();
13580
13581 /* This is where the body of the constructor begins. */
13582
13583 emit_insns_after (insns, last_parm_cleanup_insn);
13584
13585 end_protect_partials ();
13586
13587 /* This is where the body of the constructor ends. */
13588 expand_label (ctor_label);
13589 ctor_label = NULL_TREE;
13590
13591 if (call_poplevel)
13592 {
13593 decls = getdecls ();
13594 expand_end_bindings (decls, decls != NULL_TREE, 0);
13595 poplevel (decls != NULL_TREE, 1, 0);
13596 }
13597
13598 /* c_expand_return knows to return 'this' from a constructor. */
13599 c_expand_return (NULL_TREE);
13600
13601 current_function_assigns_this = 0;
13602 current_function_just_assigned_this = 0;
13603 }
13604 else if (DECL_MAIN_P (fndecl))
13605 {
13606 /* Make it so that `main' always returns 0 by default. */
13607 #ifdef VMS
13608 c_expand_return (integer_one_node);
13609 #else
13610 c_expand_return (integer_zero_node);
13611 #endif
13612 }
13613 else if (return_label != NULL_RTX
13614 && current_function_return_value == NULL_TREE
13615 && ! DECL_NAME (DECL_RESULT (current_function_decl)))
13616 no_return_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
13617
13618 if (flag_exceptions)
13619 expand_exception_blocks ();
13620
13621 /* If this function is supposed to return a value, ensure that
13622 we do not fall into the cleanups by mistake. The end of our
13623 function will look like this:
13624
13625 user code (may have return stmt somewhere)
13626 goto no_return_label
13627 cleanup_label:
13628 cleanups
13629 goto return_label
13630 no_return_label:
13631 NOTE_INSN_FUNCTION_END
13632 return_label:
13633 things for return
13634
13635 If the user omits a return stmt in the USER CODE section, we
13636 will have a control path which reaches NOTE_INSN_FUNCTION_END.
13637 Otherwise, we won't. */
13638 if (no_return_label)
13639 {
13640 DECL_CONTEXT (no_return_label) = fndecl;
13641 DECL_INITIAL (no_return_label) = error_mark_node;
13642 DECL_SOURCE_FILE (no_return_label) = input_filename;
13643 DECL_SOURCE_LINE (no_return_label) = lineno;
13644 expand_goto (no_return_label);
13645 }
13646
13647 if (cleanup_label)
13648 {
13649 /* Remove the binding contour which is used
13650 to catch cleanup-generated temporaries. */
13651 expand_end_bindings (0, 0, 0);
13652 poplevel (0, 0, 0);
13653
13654 /* Emit label at beginning of cleanup code for parameters. */
13655 emit_label (cleanup_label);
13656 }
13657
13658 /* Get return value into register if that's where it's supposed to be. */
13659 if (original_result_rtx)
13660 fixup_result_decl (DECL_RESULT (fndecl), original_result_rtx);
13661
13662 /* Finish building code that will trigger warnings if users forget
13663 to make their functions return values. */
13664 if (no_return_label || cleanup_label)
13665 emit_jump (return_label);
13666 if (no_return_label)
13667 {
13668 /* We don't need to call `expand_*_return' here because we
13669 don't need any cleanups here--this path of code is only
13670 for error checking purposes. */
13671 expand_label (no_return_label);
13672 }
13673
13674 /* Generate rtl for function exit. */
13675 expand_function_end (input_filename, lineno, 1);
13676 }
13677
13678 /* Must mark the RESULT_DECL as being in this function. */
13679 DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
13680
13681 /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
13682 to the FUNCTION_DECL node itself. */
13683 BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
13684
13685 /* If we're processing a template, squirrel away the definition
13686 until we do an instantiation. */
13687 if (processing_template_decl)
13688 {
13689 --minimal_parse_mode;
13690 DECL_SAVED_TREE (fndecl) = TREE_CHAIN (DECL_SAVED_TREE (fndecl));
13691 /* We have to save this value here in case
13692 maybe_end_member_template_processing decides to pop all the
13693 template parameters. */
13694 in_template = 1;
13695 }
13696 else
13697 in_template = 0;
13698
13699 /* This must come after expand_function_end because cleanups might
13700 have declarations (from inline functions) that need to go into
13701 this function's blocks. */
13702 if (current_binding_level->parm_flag != 1)
13703 my_friendly_abort (122);
13704 poplevel (1, 0, 1);
13705
13706 /* If this is a in-class inline definition, we may have to pop the
13707 bindings for the template parameters that we added in
13708 maybe_begin_member_template_processing when start_function was
13709 called. */
13710 if (inclass_inline)
13711 maybe_end_member_template_processing ();
13712
13713 /* Reset scope for C++: if we were in the scope of a class,
13714 then when we finish this function, we are not longer so.
13715 This cannot be done until we know for sure that no more
13716 class members will ever be referenced in this function
13717 (i.e., calls to destructors). */
13718 if (current_class_name)
13719 {
13720 ctype = current_class_type;
13721 pop_nested_class (1);
13722 }
13723
13724 if (!in_template)
13725 {
13726 int saved_flag_keep_inline_functions =
13727 flag_keep_inline_functions;
13728
13729 /* So we can tell if jump_optimize sets it to 1. */
13730 can_reach_end = 0;
13731
13732 if (DECL_CONTEXT (fndecl) != NULL_TREE
13733 && hack_decl_function_context (fndecl))
13734 /* Trick rest_of_compilation into not deferring output of this
13735 function, even if it is inline, since the rtl_obstack for
13736 this function is the function_obstack of the enclosing
13737 function and will be deallocated when the enclosing
13738 function is gone. See save_tree_status. */
13739 flag_keep_inline_functions = 1;
13740
13741 /* Run the optimizers and output the assembler code for this
13742 function. */
13743
13744 if (DECL_ARTIFICIAL (fndecl))
13745 {
13746 /* Do we really *want* to inline this synthesized method? */
13747
13748 int save_fif = flag_inline_functions;
13749 flag_inline_functions = 1;
13750
13751 /* Turn off DECL_INLINE for the moment so function_cannot_inline_p
13752 will check our size. */
13753 DECL_INLINE (fndecl) = 0;
13754
13755 rest_of_compilation (fndecl);
13756 flag_inline_functions = save_fif;
13757 }
13758 else
13759 rest_of_compilation (fndecl);
13760
13761 flag_keep_inline_functions = saved_flag_keep_inline_functions;
13762
13763 if (DECL_SAVED_INSNS (fndecl) && ! TREE_ASM_WRITTEN (fndecl))
13764 {
13765 /* Set DECL_EXTERNAL so that assemble_external will be called as
13766 necessary. We'll clear it again in finish_file. */
13767 if (! DECL_EXTERNAL (fndecl))
13768 DECL_NOT_REALLY_EXTERN (fndecl) = 1;
13769 DECL_EXTERNAL (fndecl) = 1;
13770 mark_inline_for_output (fndecl);
13771 }
13772
13773 if (ctype && TREE_ASM_WRITTEN (fndecl))
13774 note_debug_info_needed (ctype);
13775
13776 current_function_returns_null |= can_reach_end;
13777
13778 /* Since we don't normally go through c_expand_return for constructors,
13779 this normally gets the wrong value.
13780 Also, named return values have their return codes emitted after
13781 NOTE_INSN_FUNCTION_END, confusing jump.c. */
13782 if (DECL_CONSTRUCTOR_P (fndecl)
13783 || DECL_NAME (DECL_RESULT (fndecl)) != NULL_TREE)
13784 current_function_returns_null = 0;
13785
13786 if (TREE_THIS_VOLATILE (fndecl) && current_function_returns_null)
13787 cp_warning ("`noreturn' function `%D' does return", fndecl);
13788 else if ((warn_return_type || pedantic)
13789 && current_function_returns_null
13790 && TREE_CODE (TREE_TYPE (fntype)) != VOID_TYPE)
13791 {
13792 /* If this function returns non-void and control can drop through,
13793 complain. */
13794 cp_warning ("control reaches end of non-void function `%D'", fndecl);
13795 }
13796 /* With just -W, complain only if function returns both with
13797 and without a value. */
13798 else if (extra_warnings
13799 && current_function_returns_value && current_function_returns_null)
13800 warning ("this function may return with or without a value");
13801 }
13802
13803 --function_depth;
13804
13805 /* Free all the tree nodes making up this function. */
13806 /* Switch back to allocating nodes permanently
13807 until we start another function. */
13808 if (! nested)
13809 permanent_allocation (1);
13810
13811 if (DECL_SAVED_INSNS (fndecl) == NULL_RTX)
13812 {
13813 tree t;
13814
13815 /* Stop pointing to the local nodes about to be freed. */
13816 /* But DECL_INITIAL must remain nonzero so we know this
13817 was an actual function definition. */
13818 DECL_INITIAL (fndecl) = error_mark_node;
13819 for (t = DECL_ARGUMENTS (fndecl); t; t = TREE_CHAIN (t))
13820 DECL_RTL (t) = DECL_INCOMING_RTL (t) = NULL_RTX;
13821 }
13822
13823 if (DECL_STATIC_CONSTRUCTOR (fndecl))
13824 static_ctors = perm_tree_cons (NULL_TREE, fndecl, static_ctors);
13825 if (DECL_STATIC_DESTRUCTOR (fndecl))
13826 static_dtors = perm_tree_cons (NULL_TREE, fndecl, static_dtors);
13827
13828 if (! nested)
13829 {
13830 /* Let the error reporting routines know that we're outside a
13831 function. For a nested function, this value is used in
13832 pop_cp_function_context and then reset via pop_function_context. */
13833 current_function_decl = NULL_TREE;
13834 }
13835
13836 named_label_uses = NULL;
13837 current_class_ptr = NULL_TREE;
13838 current_class_ref = NULL_TREE;
13839 }
13840 \f
13841 /* Create the FUNCTION_DECL for a function definition.
13842 DECLSPECS and DECLARATOR are the parts of the declaration;
13843 they describe the return type and the name of the function,
13844 but twisted together in a fashion that parallels the syntax of C.
13845
13846 This function creates a binding context for the function body
13847 as well as setting up the FUNCTION_DECL in current_function_decl.
13848
13849 Returns a FUNCTION_DECL on success.
13850
13851 If the DECLARATOR is not suitable for a function (it defines a datum
13852 instead), we return 0, which tells yyparse to report a parse error.
13853
13854 May return void_type_node indicating that this method is actually
13855 a friend. See grokfield for more details.
13856
13857 Came here with a `.pushlevel' .
13858
13859 DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
13860 CHANGES TO CODE IN `grokfield'. */
13861
13862 tree
13863 start_method (declspecs, declarator, attrlist)
13864 tree declarator, declspecs, attrlist;
13865 {
13866 tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
13867 attrlist);
13868
13869 /* Something too ugly to handle. */
13870 if (fndecl == NULL_TREE)
13871 return NULL_TREE;
13872
13873 /* Pass friends other than inline friend functions back. */
13874 if (fndecl == void_type_node)
13875 return fndecl;
13876
13877 if (TREE_CODE (fndecl) != FUNCTION_DECL)
13878 /* Not a function, tell parser to report parse error. */
13879 return NULL_TREE;
13880
13881 if (IS_SIGNATURE (current_class_type))
13882 IS_DEFAULT_IMPLEMENTATION (fndecl) = 1;
13883
13884 if (DECL_IN_AGGR_P (fndecl))
13885 {
13886 if (IDENTIFIER_ERROR_LOCUS (DECL_ASSEMBLER_NAME (fndecl)) != current_class_type)
13887 {
13888 if (DECL_CONTEXT (fndecl)
13889 && TREE_CODE( DECL_CONTEXT (fndecl)) != NAMESPACE_DECL)
13890 cp_error ("`%D' is already defined in class %s", fndecl,
13891 TYPE_NAME_STRING (DECL_CONTEXT (fndecl)));
13892 }
13893 return void_type_node;
13894 }
13895
13896 check_template_shadow (fndecl);
13897
13898 DECL_THIS_INLINE (fndecl) = 1;
13899
13900 if (flag_default_inline)
13901 DECL_INLINE (fndecl) = 1;
13902
13903 /* We process method specializations in finish_struct_1. */
13904 if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
13905 fndecl = push_template_decl (fndecl);
13906
13907 /* We read in the parameters on the maybepermanent_obstack,
13908 but we won't be getting back to them until after we
13909 may have clobbered them. So the call to preserve_data
13910 will keep them safe. */
13911 preserve_data ();
13912
13913 if (! DECL_FRIEND_P (fndecl))
13914 {
13915 if (TREE_CHAIN (fndecl))
13916 {
13917 fndecl = copy_node (fndecl);
13918 TREE_CHAIN (fndecl) = NULL_TREE;
13919 }
13920
13921 if (DECL_CONSTRUCTOR_P (fndecl))
13922 {
13923 if (! grok_ctor_properties (current_class_type, fndecl))
13924 return void_type_node;
13925 }
13926 else if (IDENTIFIER_OPNAME_P (DECL_NAME (fndecl)))
13927 grok_op_properties (fndecl, DECL_VIRTUAL_P (fndecl), 0);
13928 }
13929
13930 cp_finish_decl (fndecl, NULL_TREE, NULL_TREE, 0, 0);
13931
13932 /* Make a place for the parms */
13933 pushlevel (0);
13934 current_binding_level->parm_flag = 1;
13935
13936 DECL_IN_AGGR_P (fndecl) = 1;
13937 return fndecl;
13938 }
13939
13940 /* Go through the motions of finishing a function definition.
13941 We don't compile this method until after the whole class has
13942 been processed.
13943
13944 FINISH_METHOD must return something that looks as though it
13945 came from GROKFIELD (since we are defining a method, after all).
13946
13947 This is called after parsing the body of the function definition.
13948 STMTS is the chain of statements that makes up the function body.
13949
13950 DECL is the ..._DECL that `start_method' provided. */
13951
13952 tree
13953 finish_method (decl)
13954 tree decl;
13955 {
13956 register tree fndecl = decl;
13957 tree old_initial;
13958
13959 register tree link;
13960
13961 if (decl == void_type_node)
13962 return decl;
13963
13964 old_initial = DECL_INITIAL (fndecl);
13965
13966 /* Undo the level for the parms (from start_method).
13967 This is like poplevel, but it causes nothing to be
13968 saved. Saving information here confuses symbol-table
13969 output routines. Besides, this information will
13970 be correctly output when this method is actually
13971 compiled. */
13972
13973 /* Clear out the meanings of the local variables of this level;
13974 also record in each decl which block it belongs to. */
13975
13976 for (link = current_binding_level->names; link; link = TREE_CHAIN (link))
13977 {
13978 if (DECL_NAME (link) != NULL_TREE)
13979 pop_binding (DECL_NAME (link));
13980 my_friendly_assert (TREE_CODE (link) != FUNCTION_DECL, 163);
13981 DECL_CONTEXT (link) = NULL_TREE;
13982 }
13983
13984 GNU_xref_end_scope ((HOST_WIDE_INT) current_binding_level,
13985 (HOST_WIDE_INT) current_binding_level->level_chain,
13986 current_binding_level->parm_flag,
13987 current_binding_level->keep);
13988
13989 poplevel (0, 0, 0);
13990
13991 DECL_INITIAL (fndecl) = old_initial;
13992
13993 /* We used to check if the context of FNDECL was different from
13994 current_class_type as another way to get inside here. This didn't work
13995 for String.cc in libg++. */
13996 if (DECL_FRIEND_P (fndecl))
13997 {
13998 CLASSTYPE_INLINE_FRIENDS (current_class_type)
13999 = tree_cons (NULL_TREE, fndecl, CLASSTYPE_INLINE_FRIENDS (current_class_type));
14000 decl = void_type_node;
14001 }
14002
14003 return decl;
14004 }
14005 \f
14006 /* Called when a new struct TYPE is defined.
14007 If this structure or union completes the type of any previous
14008 variable declaration, lay it out and output its rtl. */
14009
14010 void
14011 hack_incomplete_structures (type)
14012 tree type;
14013 {
14014 tree *list;
14015
14016 if (current_binding_level->incomplete == NULL_TREE)
14017 return;
14018
14019 if (!type) /* Don't do this for class templates. */
14020 return;
14021
14022 for (list = &current_binding_level->incomplete; *list; )
14023 {
14024 tree decl = TREE_VALUE (*list);
14025 if ((decl && TREE_TYPE (decl) == type)
14026 || (TREE_TYPE (decl)
14027 && TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
14028 && TREE_TYPE (TREE_TYPE (decl)) == type))
14029 {
14030 int toplevel = toplevel_bindings_p ();
14031 if (TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
14032 && TREE_TYPE (TREE_TYPE (decl)) == type)
14033 layout_type (TREE_TYPE (decl));
14034 layout_decl (decl, 0);
14035 rest_of_decl_compilation (decl, NULL_PTR, toplevel, 0);
14036 if (! toplevel)
14037 {
14038 tree cleanup;
14039 expand_decl (decl);
14040 cleanup = maybe_build_cleanup (decl);
14041 expand_decl_init (decl);
14042 if (! expand_decl_cleanup (decl, cleanup))
14043 cp_error ("parser lost in parsing declaration of `%D'",
14044 decl);
14045 }
14046 *list = TREE_CHAIN (*list);
14047 }
14048 else
14049 list = &TREE_CHAIN (*list);
14050 }
14051 }
14052
14053 /* If DECL is of a type which needs a cleanup, build that cleanup here.
14054 See build_delete for information about AUTO_DELETE.
14055
14056 Don't build these on the momentary obstack; they must live
14057 the life of the binding contour. */
14058
14059 static tree
14060 maybe_build_cleanup_1 (decl, auto_delete)
14061 tree decl, auto_delete;
14062 {
14063 tree type = TREE_TYPE (decl);
14064 if (TYPE_NEEDS_DESTRUCTOR (type))
14065 {
14066 int temp = 0, flags = LOOKUP_NORMAL|LOOKUP_DESTRUCTOR;
14067 tree rval;
14068
14069 if (TREE_CODE (decl) != PARM_DECL)
14070 temp = suspend_momentary ();
14071
14072 if (TREE_CODE (type) == ARRAY_TYPE)
14073 rval = decl;
14074 else
14075 {
14076 mark_addressable (decl);
14077 rval = build_unary_op (ADDR_EXPR, decl, 0);
14078 }
14079
14080 /* Optimize for space over speed here. */
14081 if (! TYPE_USES_VIRTUAL_BASECLASSES (type)
14082 || flag_expensive_optimizations)
14083 flags |= LOOKUP_NONVIRTUAL;
14084
14085 rval = build_delete (TREE_TYPE (rval), rval, auto_delete, flags, 0);
14086
14087 if (TYPE_USES_VIRTUAL_BASECLASSES (type)
14088 && ! TYPE_HAS_DESTRUCTOR (type))
14089 rval = build_compound_expr (expr_tree_cons (NULL_TREE, rval,
14090 build_expr_list (NULL_TREE, build_vbase_delete (type, decl))));
14091
14092 if (TREE_CODE (decl) != PARM_DECL)
14093 resume_momentary (temp);
14094
14095 return rval;
14096 }
14097 return 0;
14098 }
14099
14100 /* If DECL is of a type which needs a cleanup, build that cleanup
14101 here. The cleanup does free the storage with a call to delete. */
14102
14103 tree
14104 maybe_build_cleanup_and_delete (decl)
14105 tree decl;
14106 {
14107 return maybe_build_cleanup_1 (decl, integer_three_node);
14108 }
14109
14110 /* If DECL is of a type which needs a cleanup, build that cleanup
14111 here. The cleanup does not free the storage with a call a delete. */
14112
14113 tree
14114 maybe_build_cleanup (decl)
14115 tree decl;
14116 {
14117 return maybe_build_cleanup_1 (decl, integer_two_node);
14118 }
14119 \f
14120 /* Expand a C++ expression at the statement level.
14121 This is needed to ferret out nodes which have UNKNOWN_TYPE.
14122 The C++ type checker should get all of these out when
14123 expressions are combined with other, type-providing, expressions,
14124 leaving only orphan expressions, such as:
14125
14126 &class::bar; / / takes its address, but does nothing with it. */
14127
14128 void
14129 cplus_expand_expr_stmt (exp)
14130 tree exp;
14131 {
14132 if (processing_template_decl)
14133 {
14134 add_tree (build_min_nt (EXPR_STMT, exp));
14135 return;
14136 }
14137
14138 /* Arrange for all temps to disappear. */
14139 expand_start_target_temps ();
14140
14141 if (TREE_TYPE (exp) == unknown_type_node)
14142 {
14143 if (TREE_CODE (exp) == COMPONENT_REF)
14144 error ("invalid reference to a member function name, did you forget the ()?");
14145 else
14146 error ("address of overloaded function with no contextual type information");
14147 }
14148 else
14149 {
14150 if (TREE_CODE (exp) == FUNCTION_DECL)
14151 {
14152 cp_warning ("reference, not call, to function `%D'", exp);
14153 warning ("at this point in file");
14154 }
14155
14156 #if 0
14157 /* We should do this eventually, but right now this causes regex.o from
14158 libg++ to miscompile, and tString to core dump. */
14159 exp = build1 (CLEANUP_POINT_EXPR, TREE_TYPE (exp), exp);
14160 #endif
14161
14162 /* Strip unused implicit INDIRECT_REFs of references. */
14163 if (TREE_CODE (exp) == INDIRECT_REF
14164 && TREE_CODE (TREE_TYPE (TREE_OPERAND (exp, 0))) == REFERENCE_TYPE)
14165 exp = TREE_OPERAND (exp, 0);
14166
14167 /* If we don't do this, we end up down inside expand_expr
14168 trying to do TYPE_MODE on the ERROR_MARK, and really
14169 go outside the bounds of the type. */
14170 if (exp != error_mark_node)
14171 expand_expr_stmt (break_out_cleanups (exp));
14172 }
14173
14174 /* Clean up any pending cleanups. This happens when a function call
14175 returns a cleanup-needing value that nobody uses. */
14176 expand_end_target_temps ();
14177 }
14178
14179 /* When a stmt has been parsed, this function is called.
14180
14181 Currently, this function only does something within a
14182 constructor's scope: if a stmt has just assigned to this,
14183 and we are in a derived class, we call `emit_base_init'. */
14184
14185 void
14186 finish_stmt ()
14187 {
14188 extern struct nesting *cond_stack, *loop_stack, *case_stack;
14189
14190
14191 if (current_function_assigns_this
14192 || ! current_function_just_assigned_this)
14193 return;
14194 if (DECL_CONSTRUCTOR_P (current_function_decl))
14195 {
14196 /* Constructors must wait until we are out of control
14197 zones before calling base constructors. */
14198 if (cond_stack || loop_stack || case_stack)
14199 return;
14200 expand_expr_stmt (base_init_expr);
14201 check_base_init (current_class_type);
14202 }
14203 current_function_assigns_this = 1;
14204 }
14205
14206 /* Change a static member function definition into a FUNCTION_TYPE, instead
14207 of the METHOD_TYPE that we create when it's originally parsed.
14208
14209 WARNING: DO NOT pass &TREE_TYPE (decl) to FN or &TYPE_ARG_TYPES
14210 (TREE_TYPE (decl)) to ARGTYPES, as doing so will corrupt the types of
14211 other decls. Either pass the addresses of local variables or NULL. */
14212
14213 void
14214 revert_static_member_fn (decl, fn, argtypes)
14215 tree *decl, *fn, *argtypes;
14216 {
14217 tree tmp;
14218 tree function = fn ? *fn : TREE_TYPE (*decl);
14219 tree args = argtypes ? *argtypes : TYPE_ARG_TYPES (function);
14220
14221 if (CP_TYPE_QUALS (TREE_TYPE (TREE_VALUE (args)))
14222 != TYPE_UNQUALIFIED)
14223 cp_error ("static member function `%#D' declared with type qualifiers",
14224 *decl);
14225
14226 args = TREE_CHAIN (args);
14227 tmp = build_function_type (TREE_TYPE (function), args);
14228 tmp = build_qualified_type (tmp, CP_TYPE_QUALS (function));
14229 tmp = build_exception_variant (tmp,
14230 TYPE_RAISES_EXCEPTIONS (function));
14231 TREE_TYPE (*decl) = tmp;
14232 if (DECL_ARGUMENTS (*decl))
14233 DECL_ARGUMENTS (*decl) = TREE_CHAIN (DECL_ARGUMENTS (*decl));
14234 DECL_STATIC_FUNCTION_P (*decl) = 1;
14235 if (fn)
14236 *fn = tmp;
14237 if (argtypes)
14238 *argtypes = args;
14239 }
14240
14241 int
14242 id_in_current_class (id)
14243 tree id;
14244 {
14245 return !!purpose_member (id, class_binding_level->class_shadowed);
14246 }
14247
14248 struct cp_function
14249 {
14250 int returns_value;
14251 int returns_null;
14252 int assigns_this;
14253 int just_assigned_this;
14254 int parms_stored;
14255 int temp_name_counter;
14256 tree named_labels;
14257 struct named_label_list *named_label_uses;
14258 tree shadowed_labels;
14259 tree ctor_label;
14260 tree dtor_label;
14261 rtx last_dtor_insn;
14262 rtx last_parm_cleanup_insn;
14263 tree base_init_list;
14264 tree member_init_list;
14265 tree base_init_expr;
14266 tree current_class_ptr;
14267 tree current_class_ref;
14268 rtx result_rtx;
14269 struct cp_function *next;
14270 struct binding_level *binding_level;
14271 int static_labelno;
14272 };
14273
14274 static struct cp_function *cp_function_chain;
14275
14276 extern int temp_name_counter;
14277
14278 /* Save and reinitialize the variables
14279 used during compilation of a C++ function. */
14280
14281 void
14282 push_cp_function_context (context)
14283 tree context;
14284 {
14285 struct cp_function *p
14286 = (struct cp_function *) xmalloc (sizeof (struct cp_function));
14287
14288 push_function_context_to (context);
14289
14290 p->next = cp_function_chain;
14291 cp_function_chain = p;
14292
14293 p->named_labels = named_labels;
14294 p->named_label_uses = named_label_uses;
14295 p->shadowed_labels = shadowed_labels;
14296 p->returns_value = current_function_returns_value;
14297 p->returns_null = current_function_returns_null;
14298 p->binding_level = current_binding_level;
14299 p->ctor_label = ctor_label;
14300 p->dtor_label = dtor_label;
14301 p->last_dtor_insn = last_dtor_insn;
14302 p->last_parm_cleanup_insn = last_parm_cleanup_insn;
14303 p->assigns_this = current_function_assigns_this;
14304 p->just_assigned_this = current_function_just_assigned_this;
14305 p->parms_stored = current_function_parms_stored;
14306 p->result_rtx = original_result_rtx;
14307 p->base_init_expr = base_init_expr;
14308 p->temp_name_counter = temp_name_counter;
14309 p->base_init_list = current_base_init_list;
14310 p->member_init_list = current_member_init_list;
14311 p->current_class_ptr = current_class_ptr;
14312 p->current_class_ref = current_class_ref;
14313 p->static_labelno = static_labelno;
14314 }
14315
14316 /* Restore the variables used during compilation of a C++ function. */
14317
14318 void
14319 pop_cp_function_context (context)
14320 tree context;
14321 {
14322 struct cp_function *p = cp_function_chain;
14323 tree link;
14324
14325 /* Bring back all the labels that were shadowed. */
14326 for (link = shadowed_labels; link; link = TREE_CHAIN (link))
14327 if (DECL_NAME (TREE_VALUE (link)) != 0)
14328 SET_IDENTIFIER_LABEL_VALUE (DECL_NAME (TREE_VALUE (link)),
14329 TREE_VALUE (link));
14330
14331 pop_function_context_from (context);
14332
14333 cp_function_chain = p->next;
14334
14335 named_labels = p->named_labels;
14336 named_label_uses = p->named_label_uses;
14337 shadowed_labels = p->shadowed_labels;
14338 current_function_returns_value = p->returns_value;
14339 current_function_returns_null = p->returns_null;
14340 current_binding_level = p->binding_level;
14341 ctor_label = p->ctor_label;
14342 dtor_label = p->dtor_label;
14343 last_dtor_insn = p->last_dtor_insn;
14344 last_parm_cleanup_insn = p->last_parm_cleanup_insn;
14345 current_function_assigns_this = p->assigns_this;
14346 current_function_just_assigned_this = p->just_assigned_this;
14347 current_function_parms_stored = p->parms_stored;
14348 original_result_rtx = p->result_rtx;
14349 base_init_expr = p->base_init_expr;
14350 temp_name_counter = p->temp_name_counter;
14351 current_base_init_list = p->base_init_list;
14352 current_member_init_list = p->member_init_list;
14353 current_class_ptr = p->current_class_ptr;
14354 current_class_ref = p->current_class_ref;
14355 static_labelno = p->static_labelno;
14356
14357 free (p);
14358 }
14359
14360 int
14361 in_function_p ()
14362 {
14363 return function_depth != 0;
14364 }