]> gcc.gnu.org Git - gcc.git/blob - gcc/cp/decl.c
Various fixes for -Wall problems from Kaveh. See ChangeLog for details.
[gcc.git] / gcc / cp / decl.c
1 /* Process declarations and variables for C++ compiler.
2 Copyright (C) 1988, 92, 93, 94, 95, 96, 1997 Free Software Foundation, Inc.
3 Hacked 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 <stdio.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 <sys/types.h>
39 #include <signal.h>
40 #include "obstack.h"
41 #include "defaults.h"
42 #include "output.h"
43 #include "except.h"
44
45 #ifdef HAVE_STDLIB_H
46 #include <stdlib.h>
47 #endif
48
49 #ifdef NEED_DECLARATION_FREE
50 extern void free PROTO((void *));
51 #endif
52
53 #define obstack_chunk_alloc xmalloc
54 #define obstack_chunk_free free
55
56 extern tree builtin_return_address_fndecl;
57
58 extern struct obstack permanent_obstack;
59
60 extern int current_class_depth;
61
62 extern tree static_ctors, static_dtors;
63
64 extern int static_labelno;
65
66 /* Stack of places to restore the search obstack back to. */
67
68 /* Obstack used for remembering local class declarations (like
69 enums and static (const) members. */
70 #include "stack.h"
71 struct obstack decl_obstack;
72 static struct stack_level *decl_stack;
73
74 #ifndef CHAR_TYPE_SIZE
75 #define CHAR_TYPE_SIZE BITS_PER_UNIT
76 #endif
77
78 #ifndef SHORT_TYPE_SIZE
79 #define SHORT_TYPE_SIZE (BITS_PER_UNIT * MIN ((UNITS_PER_WORD + 1) / 2, 2))
80 #endif
81
82 #ifndef INT_TYPE_SIZE
83 #define INT_TYPE_SIZE BITS_PER_WORD
84 #endif
85
86 #ifndef LONG_TYPE_SIZE
87 #define LONG_TYPE_SIZE BITS_PER_WORD
88 #endif
89
90 #ifndef LONG_LONG_TYPE_SIZE
91 #define LONG_LONG_TYPE_SIZE (BITS_PER_WORD * 2)
92 #endif
93
94 #ifndef WCHAR_UNSIGNED
95 #define WCHAR_UNSIGNED 0
96 #endif
97
98 #ifndef FLOAT_TYPE_SIZE
99 #define FLOAT_TYPE_SIZE BITS_PER_WORD
100 #endif
101
102 #ifndef DOUBLE_TYPE_SIZE
103 #define DOUBLE_TYPE_SIZE (BITS_PER_WORD * 2)
104 #endif
105
106 #ifndef LONG_DOUBLE_TYPE_SIZE
107 #define LONG_DOUBLE_TYPE_SIZE (BITS_PER_WORD * 2)
108 #endif
109
110 #ifndef BOOL_TYPE_SIZE
111 #ifdef SLOW_BYTE_ACCESS
112 #define BOOL_TYPE_SIZE ((SLOW_BYTE_ACCESS) ? (POINTER_SIZE) : (CHAR_TYPE_SIZE))
113 #else
114 #define BOOL_TYPE_SIZE CHAR_TYPE_SIZE
115 #endif
116 #endif
117
118 /* We let tm.h override the types used here, to handle trivial differences
119 such as the choice of unsigned int or long unsigned int for size_t.
120 When machines start needing nontrivial differences in the size type,
121 it would be best to do something here to figure out automatically
122 from other information what type to use. */
123
124 #ifndef SIZE_TYPE
125 #define SIZE_TYPE "long unsigned int"
126 #endif
127
128 #ifndef PTRDIFF_TYPE
129 #define PTRDIFF_TYPE "long int"
130 #endif
131
132 #ifndef WCHAR_TYPE
133 #define WCHAR_TYPE "int"
134 #endif
135
136 static tree grokparms PROTO((tree, int));
137 static tree lookup_nested_type PROTO((tree, tree));
138 static char *redeclaration_error_message PROTO((tree, tree));
139 static void revert_static_member_fn PROTO((tree *, tree *, tree *));
140 static tree push_overloaded_decl PROTO((tree, int));
141 static void push_overloaded_decl_top_level PROTO((tree, int));
142
143 static struct stack_level *push_decl_level PROTO((struct stack_level *,
144 struct obstack *));
145 static void push_binding_level PROTO((struct binding_level *, int,
146 int));
147 static void pop_binding_level PROTO((void));
148 static void suspend_binding_level PROTO((void));
149 static void resume_binding_level PROTO((struct binding_level *));
150 static struct binding_level *make_binding_level PROTO((void));
151 static int namespace_bindings_p PROTO((void));
152 static void declare_namespace_level PROTO((void));
153 static tree get_unique_name PROTO((void));
154 static void signal_catch PROTO((int));
155 static void storedecls PROTO((tree));
156 static void storetags PROTO((tree));
157 static void require_complete_types_for_parms PROTO((tree));
158 static void push_overloaded_decl_1 PROTO((tree));
159 static int ambi_op_p PROTO((tree));
160 static int unary_op_p PROTO((tree));
161 static tree store_bindings PROTO((tree, tree));
162 static tree lookup_tag_reverse PROTO((tree, tree));
163 static tree obscure_complex_init PROTO((tree, tree));
164 static tree maybe_build_cleanup_1 PROTO((tree, tree));
165 static tree lookup_name_real PROTO((tree, int, int));
166 static void warn_extern_redeclared_static PROTO((tree, tree));
167 static void grok_reference_init PROTO((tree, tree, tree));
168 static tree grokfndecl PROTO((tree, tree, tree, tree, int,
169 enum overload_flags,
170 tree, tree, tree, int, int, int, int, int, int));
171 static tree grokvardecl PROTO((tree, tree, RID_BIT_TYPE *, int, int));
172 static tree lookup_tag PROTO((enum tree_code, tree,
173 struct binding_level *, int));
174 static void set_identifier_type_value_with_scope
175 PROTO((tree, tree, struct binding_level *));
176 static void record_builtin_type PROTO((enum rid, char *, tree));
177 static int member_function_or_else PROTO((tree, tree, char *));
178 static void bad_specifiers PROTO((tree, char *, int, int, int, int,
179 int));
180
181 /* a node which has tree code ERROR_MARK, and whose type is itself.
182 All erroneous expressions are replaced with this node. All functions
183 that accept nodes as arguments should avoid generating error messages
184 if this node is one of the arguments, since it is undesirable to get
185 multiple error messages from one error in the input. */
186
187 tree error_mark_node;
188
189 /* Erroneous argument lists can use this *IFF* they do not modify it. */
190 tree error_mark_list;
191
192 /* INTEGER_TYPE and REAL_TYPE nodes for the standard data types */
193
194 tree short_integer_type_node;
195 tree integer_type_node;
196 tree long_integer_type_node;
197 tree long_long_integer_type_node;
198
199 tree short_unsigned_type_node;
200 tree unsigned_type_node;
201 tree long_unsigned_type_node;
202 tree long_long_unsigned_type_node;
203
204 tree ptrdiff_type_node;
205
206 tree unsigned_char_type_node;
207 tree signed_char_type_node;
208 tree char_type_node;
209 tree wchar_type_node;
210 tree signed_wchar_type_node;
211 tree unsigned_wchar_type_node;
212
213 tree wchar_decl_node;
214
215 tree float_type_node;
216 tree double_type_node;
217 tree long_double_type_node;
218
219 tree complex_integer_type_node;
220 tree complex_float_type_node;
221 tree complex_double_type_node;
222 tree complex_long_double_type_node;
223
224 tree intQI_type_node;
225 tree intHI_type_node;
226 tree intSI_type_node;
227 tree intDI_type_node;
228
229 tree unsigned_intQI_type_node;
230 tree unsigned_intHI_type_node;
231 tree unsigned_intSI_type_node;
232 tree unsigned_intDI_type_node;
233
234 /* a VOID_TYPE node, and the same, packaged in a TREE_LIST. */
235
236 tree void_type_node, void_list_node;
237 tree void_zero_node;
238
239 /* Nodes for types `void *' and `const void *'. */
240
241 tree ptr_type_node;
242 tree const_ptr_type_node;
243
244 /* Nodes for types `char *' and `const char *'. */
245
246 tree string_type_node, const_string_type_node;
247
248 /* Type `char[256]' or something like it.
249 Used when an array of char is needed and the size is irrelevant. */
250
251 tree char_array_type_node;
252
253 /* Type `int[256]' or something like it.
254 Used when an array of int needed and the size is irrelevant. */
255
256 tree int_array_type_node;
257
258 /* Type `wchar_t[256]' or something like it.
259 Used when a wide string literal is created. */
260
261 tree wchar_array_type_node;
262
263 /* The bool data type, and constants */
264 tree boolean_type_node, boolean_true_node, boolean_false_node;
265
266 /* type `int ()' -- used for implicit declaration of functions. */
267
268 tree default_function_type;
269
270 /* function types `double (double)' and `double (double, double)', etc. */
271
272 static tree double_ftype_double, double_ftype_double_double;
273 static tree int_ftype_int, long_ftype_long;
274 static tree float_ftype_float;
275 static tree ldouble_ftype_ldouble;
276
277 /* Function type `int (const void *, const void *, size_t)' */
278 static tree int_ftype_cptr_cptr_sizet;
279
280 /* C++ extensions */
281 tree vtable_entry_type;
282 tree delta_type_node;
283 #if 0
284 /* Old rtti stuff. */
285 tree __baselist_desc_type_node;
286 tree __i_desc_type_node, __m_desc_type_node;
287 tree __t_desc_array_type, __i_desc_array_type, __m_desc_array_type;
288 #endif
289 tree __t_desc_type_node;
290 #if 0
291 tree __tp_desc_type_node;
292 #endif
293 tree __access_mode_type_node;
294 tree __bltn_desc_type_node, __user_desc_type_node, __class_desc_type_node;
295 tree __ptr_desc_type_node, __attr_desc_type_node, __func_desc_type_node;
296 tree __ptmf_desc_type_node, __ptmd_desc_type_node;
297 #if 0
298 /* Not needed yet? May be needed one day? */
299 tree __bltn_desc_array_type, __user_desc_array_type, __class_desc_array_type;
300 tree __ptr_desc_array_type, __attr_dec_array_type, __func_desc_array_type;
301 tree __ptmf_desc_array_type, __ptmd_desc_array_type;
302 #endif
303
304 tree class_star_type_node;
305 tree class_type_node, record_type_node, union_type_node, enum_type_node;
306 tree unknown_type_node;
307 tree opaque_type_node, signature_type_node;
308 tree sigtable_entry_type;
309
310 /* Array type `vtable_entry_type[]' */
311 tree vtbl_type_node;
312
313 /* namespace std */
314 tree std_node;
315
316 /* In a destructor, the point at which all derived class destroying
317 has been done, just before any base class destroying will be done. */
318
319 tree dtor_label;
320
321 /* In a destructor, the last insn emitted after the start of the
322 function and the parms. */
323
324 static rtx last_dtor_insn;
325
326 /* In a constructor, the last insn emitted after the start of the
327 function and the parms, the exception specification and any
328 function-try-block. The constructor initializers are emitted after
329 this insn. */
330
331 static rtx last_parm_cleanup_insn;
332
333 /* In a constructor, the point at which we are ready to return
334 the pointer to the initialized object. */
335
336 tree ctor_label;
337
338 /* A FUNCTION_DECL which can call `abort'. Not necessarily the
339 one that the user will declare, but sufficient to be called
340 by routines that want to abort the program. */
341
342 tree abort_fndecl;
343
344 extern rtx cleanup_label, return_label;
345
346 /* If original DECL_RESULT of current function was a register,
347 but due to being an addressable named return value, would up
348 on the stack, this variable holds the named return value's
349 original location. */
350 static rtx original_result_rtx;
351
352 /* Sequence of insns which represents base initialization. */
353 tree base_init_expr;
354
355 /* C++: Keep these around to reduce calls to `get_identifier'.
356 Identifiers for `this' in member functions and the auto-delete
357 parameter for destructors. */
358 tree this_identifier, in_charge_identifier;
359 tree ctor_identifier, dtor_identifier;
360 /* Used in pointer to member functions, in vtables, and in sigtables. */
361 tree pfn_identifier, index_identifier, delta_identifier, delta2_identifier;
362 tree pfn_or_delta2_identifier, tag_identifier;
363 tree vt_off_identifier;
364
365 struct named_label_list
366 {
367 struct binding_level *binding_level;
368 tree names_in_scope;
369 tree label_decl;
370 char *filename_o_goto;
371 int lineno_o_goto;
372 struct named_label_list *next;
373 };
374
375 /* A list (chain of TREE_LIST nodes) of named label uses.
376 The TREE_PURPOSE field is the list of variables defined
377 the the label's scope defined at the point of use.
378 The TREE_VALUE field is the LABEL_DECL used.
379 The TREE_TYPE field holds `current_binding_level' at the
380 point of the label's use.
381
382 BWAHAHAAHAHahhahahahaah. No, no, no, said the little chicken.
383
384 Look at the pretty struct named_label_list. See the pretty struct
385 with the pretty named fields that describe what they do. See the
386 pretty lack of gratuitous casts. Notice the code got a lot cleaner.
387
388 Used only for jumps to as-yet undefined labels, since
389 jumps to defined labels can have their validity checked
390 by stmt.c. */
391
392 static struct named_label_list *named_label_uses = NULL;
393
394 /* A list of objects which have constructors or destructors
395 which reside in the global scope. The decl is stored in
396 the TREE_VALUE slot and the initializer is stored
397 in the TREE_PURPOSE slot. */
398 tree static_aggregates;
399
400 /* Nonzero if we lookup name inside template argument. */
401 int arg_looking_for_template;
402
403 /* -- end of C++ */
404
405 /* Two expressions that are constants with value zero.
406 The first is of type `int', the second of type `void *'. */
407
408 tree integer_zero_node;
409 tree null_pointer_node;
410
411 /* The value for __null (NULL), either of type `void *' or, with -ansi,
412 an integer type of the same size. */
413
414 tree null_node;
415
416 /* A node for the integer constants 1, 2, and 3. */
417
418 tree integer_one_node, integer_two_node, integer_three_node;
419
420 /* While defining an enum type, this is 1 plus the last enumerator
421 constant value. */
422
423 static tree enum_next_value;
424
425 /* Nonzero means that there was overflow computing enum_next_value. */
426
427 static int enum_overflow;
428
429 /* Parsing a function declarator leaves a list of parameter names
430 or a chain or parameter decls here. */
431
432 tree last_function_parms;
433
434 /* Parsing a function declarator leaves here a chain of structure
435 and enum types declared in the parmlist. */
436
437 static tree last_function_parm_tags;
438
439 /* After parsing the declarator that starts a function definition,
440 `start_function' puts here the list of parameter names or chain of decls.
441 `store_parm_decls' finds it here. */
442
443 static tree current_function_parms;
444
445 /* Similar, for last_function_parm_tags. */
446 static tree current_function_parm_tags;
447
448 /* A list (chain of TREE_LIST nodes) of all LABEL_DECLs in the function
449 that have names. Here so we can clear out their names' definitions
450 at the end of the function. */
451
452 static tree named_labels;
453
454 /* A list of LABEL_DECLs from outer contexts that are currently shadowed. */
455
456 static tree shadowed_labels;
457
458 /* The FUNCTION_DECL for the function currently being compiled,
459 or 0 if between functions. */
460 tree current_function_decl;
461
462 /* Set to 0 at beginning of a function definition, set to 1 if
463 a return statement that specifies a return value is seen. */
464
465 int current_function_returns_value;
466
467 /* Set to 0 at beginning of a function definition, set to 1 if
468 a return statement with no argument is seen. */
469
470 int current_function_returns_null;
471
472 /* Set to 0 at beginning of a function definition, and whenever
473 a label (case or named) is defined. Set to value of expression
474 returned from function when that value can be transformed into
475 a named return value. */
476
477 tree current_function_return_value;
478
479 /* Set to nonzero by `grokdeclarator' for a function
480 whose return type is defaulted, if warnings for this are desired. */
481
482 static int warn_about_return_type;
483
484 /* Nonzero means give `double' the same size as `float'. */
485
486 extern int flag_short_double;
487
488 /* Nonzero means don't recognize any builtin functions. */
489
490 extern int flag_no_builtin;
491
492 /* Nonzero means don't recognize the non-ANSI builtin functions.
493 -ansi sets this. */
494
495 extern int flag_no_nonansi_builtin;
496
497 /* Nonzero means enable obscure ANSI features and disable GNU extensions
498 that might cause ANSI-compliant code to be miscompiled. */
499
500 extern int flag_ansi;
501
502 /* Nonzero if we want to support huge (> 2^(sizeof(short)*8-1) bytes)
503 objects. */
504 extern int flag_huge_objects;
505
506 /* Nonzero if we want to conserve space in the .o files. We do this
507 by putting uninitialized data and runtime initialized data into
508 .common instead of .data at the expense of not flagging multiple
509 definitions. */
510 extern int flag_conserve_space;
511
512 /* Pointers to the base and current top of the language name stack. */
513
514 extern tree *current_lang_base, *current_lang_stack;
515 \f
516 /* C and C++ flags are in decl2.c. */
517
518 /* Set to 0 at beginning of a constructor, set to 1
519 if that function does an allocation before referencing its
520 instance variable. */
521 static int current_function_assigns_this;
522 int current_function_just_assigned_this;
523
524 /* Set to 0 at beginning of a function. Set non-zero when
525 store_parm_decls is called. Don't call store_parm_decls
526 if this flag is non-zero! */
527 int current_function_parms_stored;
528
529 /* Flag used when debugging spew.c */
530
531 extern int spew_debug;
532
533 /* This is a copy of the class_shadowed list of the previous class binding
534 contour when at global scope. It's used to reset IDENTIFIER_CLASS_VALUEs
535 when entering another class scope (i.e. a cache miss). */
536 extern tree previous_class_values;
537
538 /* A expression of value 0 with the same precision as a sizetype
539 node, but signed. */
540 tree signed_size_zero_node;
541
542 \f
543 /* Allocate a level of searching. */
544
545 static
546 struct stack_level *
547 push_decl_level (stack, obstack)
548 struct stack_level *stack;
549 struct obstack *obstack;
550 {
551 struct stack_level tem;
552 tem.prev = stack;
553
554 return push_stack_level (obstack, (char *)&tem, sizeof (tem));
555 }
556 \f
557 /* For each binding contour we allocate a binding_level structure
558 which records the names defined in that contour.
559 Contours include:
560 0) the global one
561 1) one for each function definition,
562 where internal declarations of the parameters appear.
563 2) one for each compound statement,
564 to record its declarations.
565
566 The current meaning of a name can be found by searching the levels
567 from the current one out to the global one.
568
569 Off to the side, may be the class_binding_level. This exists only
570 to catch class-local declarations. It is otherwise nonexistent.
571
572 Also there may be binding levels that catch cleanups that must be
573 run when exceptions occur. */
574
575 /* Note that the information in the `names' component of the global contour
576 is duplicated in the IDENTIFIER_GLOBAL_VALUEs of all identifiers. */
577
578 struct binding_level
579 {
580 /* A chain of _DECL nodes for all variables, constants, functions,
581 and typedef types. These are in the reverse of the order
582 supplied. */
583 tree names;
584
585 /* A list of structure, union and enum definitions, for looking up
586 tag names.
587 It is a chain of TREE_LIST nodes, each of whose TREE_PURPOSE is a name,
588 or NULL_TREE; and whose TREE_VALUE is a RECORD_TYPE, UNION_TYPE,
589 or ENUMERAL_TYPE node.
590
591 C++: the TREE_VALUE nodes can be simple types for
592 component_bindings. */
593 tree tags;
594
595 /* For each level, a list of shadowed outer-level local definitions
596 to be restored when this level is popped.
597 Each link is a TREE_LIST whose TREE_PURPOSE is an identifier and
598 whose TREE_VALUE is its old definition (a kind of ..._DECL node). */
599 tree shadowed;
600
601 /* Same, for IDENTIFIER_CLASS_VALUE. */
602 tree class_shadowed;
603
604 /* Same, for IDENTIFIER_TYPE_VALUE. */
605 tree type_shadowed;
606
607 /* For each level (except not the global one),
608 a chain of BLOCK nodes for all the levels
609 that were entered and exited one level down. */
610 tree blocks;
611
612 /* The BLOCK node for this level, if one has been preallocated.
613 If 0, the BLOCK is allocated (if needed) when the level is popped. */
614 tree this_block;
615
616 /* The binding level which this one is contained in (inherits from). */
617 struct binding_level *level_chain;
618
619 /* List of decls in `names' that have incomplete
620 structure or union types. */
621 tree incomplete;
622
623 /* List of VAR_DECLS saved from a previous for statement.
624 These would be dead in ANSI-conforming code, but might
625 be referenced in ARM-era code. */
626 tree dead_vars_from_for;
627
628 /* 1 for the level that holds the parameters of a function.
629 2 for the level that holds a class declaration.
630 3 for levels that hold parameter declarations. */
631 unsigned parm_flag : 4;
632
633 /* 1 means make a BLOCK for this level regardless of all else.
634 2 for temporary binding contours created by the compiler. */
635 unsigned keep : 3;
636
637 /* Nonzero if this level "doesn't exist" for tags. */
638 unsigned tag_transparent : 1;
639
640 /* Nonzero if this level can safely have additional
641 cleanup-needing variables added to it. */
642 unsigned more_cleanups_ok : 1;
643 unsigned have_cleanups : 1;
644
645 /* Nonzero if this level is for storing the decls for template
646 parameters and generic decls; these decls will be discarded and
647 replaced with a TEMPLATE_DECL. */
648 unsigned pseudo_global : 1;
649
650 /* This is set for a namespace binding level. */
651 unsigned namespace_p : 1;
652
653 /* True if this level is that of a for-statement where we need to
654 worry about ambiguous (ARM or ANSI) scope rules. */
655 unsigned is_for_scope : 1;
656
657 /* Two bits left for this word. */
658
659 #if defined(DEBUG_CP_BINDING_LEVELS)
660 /* Binding depth at which this level began. */
661 unsigned binding_depth;
662 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
663 };
664
665 #define NULL_BINDING_LEVEL ((struct binding_level *) NULL)
666
667 /* The (non-class) binding level currently in effect. */
668
669 static struct binding_level *current_binding_level;
670
671 /* The binding level of the current class, if any. */
672
673 static struct binding_level *class_binding_level;
674
675 /* The current (class or non-class) binding level currently in effect. */
676
677 #define inner_binding_level \
678 (class_binding_level ? class_binding_level : current_binding_level)
679
680 /* A chain of binding_level structures awaiting reuse. */
681
682 static struct binding_level *free_binding_level;
683
684 /* The outermost binding level, for names of file scope.
685 This is created when the compiler is started and exists
686 through the entire run. */
687
688 static struct binding_level *global_binding_level;
689
690 /* Binding level structures are initialized by copying this one. */
691
692 static struct binding_level clear_binding_level;
693
694 /* Nonzero means unconditionally make a BLOCK for the next level pushed. */
695
696 static int keep_next_level_flag;
697
698 #if defined(DEBUG_CP_BINDING_LEVELS)
699 static int binding_depth = 0;
700 static int is_class_level = 0;
701
702 static void
703 indent ()
704 {
705 register unsigned i;
706
707 for (i = 0; i < binding_depth*2; i++)
708 putc (' ', stderr);
709 }
710 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
711
712 static tree pushdecl_with_scope PROTO((tree, struct binding_level *));
713
714 static void
715 push_binding_level (newlevel, tag_transparent, keep)
716 struct binding_level *newlevel;
717 int tag_transparent, keep;
718 {
719 /* Add this level to the front of the chain (stack) of levels that
720 are active. */
721 *newlevel = clear_binding_level;
722 if (class_binding_level)
723 {
724 newlevel->level_chain = class_binding_level;
725 class_binding_level = (struct binding_level *)0;
726 }
727 else
728 {
729 newlevel->level_chain = current_binding_level;
730 }
731 current_binding_level = newlevel;
732 newlevel->tag_transparent = tag_transparent;
733 newlevel->more_cleanups_ok = 1;
734 newlevel->keep = keep;
735 #if defined(DEBUG_CP_BINDING_LEVELS)
736 newlevel->binding_depth = binding_depth;
737 indent ();
738 fprintf (stderr, "push %s level 0x%08x line %d\n",
739 (is_class_level) ? "class" : "block", newlevel, lineno);
740 is_class_level = 0;
741 binding_depth++;
742 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
743 }
744
745 static void
746 pop_binding_level ()
747 {
748 if (class_binding_level)
749 current_binding_level = class_binding_level;
750
751 if (global_binding_level)
752 {
753 /* cannot pop a level, if there are none left to pop. */
754 if (current_binding_level == global_binding_level)
755 my_friendly_abort (123);
756 }
757 /* Pop the current level, and free the structure for reuse. */
758 #if defined(DEBUG_CP_BINDING_LEVELS)
759 binding_depth--;
760 indent ();
761 fprintf (stderr, "pop %s level 0x%08x line %d\n",
762 (is_class_level) ? "class" : "block",
763 current_binding_level, lineno);
764 if (is_class_level != (current_binding_level == class_binding_level))
765 {
766 indent ();
767 fprintf (stderr, "XXX is_class_level != (current_binding_level == class_binding_level)\n");
768 }
769 is_class_level = 0;
770 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
771 {
772 register struct binding_level *level = current_binding_level;
773 current_binding_level = current_binding_level->level_chain;
774 level->level_chain = free_binding_level;
775 #if 0 /* defined(DEBUG_CP_BINDING_LEVELS) */
776 if (level->binding_depth != binding_depth)
777 abort ();
778 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
779 free_binding_level = level;
780
781 class_binding_level = current_binding_level;
782 if (class_binding_level->parm_flag != 2)
783 class_binding_level = 0;
784 while (current_binding_level->parm_flag == 2)
785 current_binding_level = current_binding_level->level_chain;
786 }
787 }
788
789 static void
790 suspend_binding_level ()
791 {
792 if (class_binding_level)
793 current_binding_level = class_binding_level;
794
795 if (global_binding_level)
796 {
797 /* cannot suspend a level, if there are none left to suspend. */
798 if (current_binding_level == global_binding_level)
799 my_friendly_abort (123);
800 }
801 /* Suspend the current level. */
802 #if defined(DEBUG_CP_BINDING_LEVELS)
803 binding_depth--;
804 indent ();
805 fprintf (stderr, "suspend %s level 0x%08x line %d\n",
806 (is_class_level) ? "class" : "block",
807 current_binding_level, lineno);
808 if (is_class_level != (current_binding_level == class_binding_level))
809 {
810 indent ();
811 fprintf (stderr, "XXX is_class_level != (current_binding_level == class_binding_level)\n");
812 }
813 is_class_level = 0;
814 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
815 {
816 current_binding_level = current_binding_level->level_chain;
817 class_binding_level = current_binding_level;
818 if (class_binding_level->parm_flag != 2)
819 class_binding_level = 0;
820 while (current_binding_level->parm_flag == 2)
821 current_binding_level = current_binding_level->level_chain;
822 }
823 }
824
825 static void
826 resume_binding_level (b)
827 struct binding_level *b;
828 {
829 if (class_binding_level)
830 {
831 #if 1
832 /* These are here because we cannot deal with shadows yet. */
833 sorry ("cannot resume a namespace inside class");
834 return;
835 #else
836 b->level_chain = class_binding_level;
837 class_binding_level = (struct binding_level *)0;
838 #endif
839 }
840 else
841 {
842 #if 1
843 /* These are here because we cannot deal with shadows yet. */
844 if (b->level_chain != current_binding_level)
845 {
846 sorry ("cannot resume a namespace inside a different namespace");
847 return;
848 }
849 #endif
850 b->level_chain = current_binding_level;
851 }
852 current_binding_level = b;
853 #if defined(DEBUG_CP_BINDING_LEVELS)
854 b->binding_depth = binding_depth;
855 indent ();
856 fprintf (stderr, "resume %s level 0x%08x line %d\n",
857 (is_class_level) ? "class" : "block", b, lineno);
858 is_class_level = 0;
859 binding_depth++;
860 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
861 }
862 \f
863 /* Create a new `struct binding_level'. */
864
865 static
866 struct binding_level *
867 make_binding_level ()
868 {
869 /* NOSTRICT */
870 return (struct binding_level *) xmalloc (sizeof (struct binding_level));
871 }
872
873 /* Nonzero if we are currently in the global binding level. */
874
875 int
876 global_bindings_p ()
877 {
878 return current_binding_level == global_binding_level;
879 }
880
881 /* Nonzero if we are currently in a toplevel binding level. This
882 means either the global binding level or a namespace in a toplevel
883 binding level. */
884
885 int
886 toplevel_bindings_p ()
887 {
888 struct binding_level *b = current_binding_level;
889
890 while (1)
891 {
892 if (b == global_binding_level)
893 return 1;
894 if (b->pseudo_global)
895 return 1;
896 if (! b->namespace_p)
897 return 0;
898 b=b->level_chain;
899 }
900 }
901
902 /* Nonzero if this is a namespace scope. */
903
904 static int
905 namespace_bindings_p ()
906 {
907 return current_binding_level->namespace_p;
908 }
909
910 void
911 keep_next_level ()
912 {
913 keep_next_level_flag = 1;
914 }
915
916 /* Nonzero if the current level needs to have a BLOCK made. */
917
918 int
919 kept_level_p ()
920 {
921 return (current_binding_level->blocks != NULL_TREE
922 || current_binding_level->keep
923 || current_binding_level->names != NULL_TREE
924 || (current_binding_level->tags != NULL_TREE
925 && !current_binding_level->tag_transparent));
926 }
927
928 /* Identify this binding level as a level of parameters. */
929
930 void
931 declare_parm_level ()
932 {
933 current_binding_level->parm_flag = 1;
934 }
935
936 void
937 declare_pseudo_global_level ()
938 {
939 current_binding_level->pseudo_global = 1;
940 }
941
942 static void
943 declare_namespace_level ()
944 {
945 current_binding_level->namespace_p = 1;
946 }
947
948 int
949 pseudo_global_level_p ()
950 {
951 return current_binding_level->pseudo_global;
952 }
953
954 void
955 set_class_shadows (shadows)
956 tree shadows;
957 {
958 class_binding_level->class_shadowed = shadows;
959 }
960
961 /* Enter a new binding level.
962 If TAG_TRANSPARENT is nonzero, do so only for the name space of variables,
963 not for that of tags. */
964
965 void
966 pushlevel (tag_transparent)
967 int tag_transparent;
968 {
969 register struct binding_level *newlevel = NULL_BINDING_LEVEL;
970
971 /* If this is the top level of a function,
972 just make sure that NAMED_LABELS is 0.
973 They should have been set to 0 at the end of the previous function. */
974
975 if (current_binding_level == global_binding_level)
976 my_friendly_assert (named_labels == NULL_TREE, 134);
977
978 /* Reuse or create a struct for this binding level. */
979
980 #if defined(DEBUG_CP_BINDING_LEVELS)
981 if (0)
982 #else /* !defined(DEBUG_CP_BINDING_LEVELS) */
983 if (free_binding_level)
984 #endif /* !defined(DEBUG_CP_BINDING_LEVELS) */
985 {
986 newlevel = free_binding_level;
987 free_binding_level = free_binding_level->level_chain;
988 }
989 else
990 {
991 newlevel = make_binding_level ();
992 }
993
994 push_binding_level (newlevel, tag_transparent, keep_next_level_flag);
995 GNU_xref_start_scope ((HOST_WIDE_INT) newlevel);
996 keep_next_level_flag = 0;
997 }
998
999 void
1000 note_level_for_for ()
1001 {
1002 current_binding_level->is_for_scope = 1;
1003 }
1004
1005 void
1006 pushlevel_temporary (tag_transparent)
1007 int tag_transparent;
1008 {
1009 pushlevel (tag_transparent);
1010 current_binding_level->keep = 2;
1011 clear_last_expr ();
1012
1013 /* Note we don't call push_momentary() here. Otherwise, it would cause
1014 cleanups to be allocated on the momentary obstack, and they will be
1015 overwritten by the next statement. */
1016
1017 expand_start_bindings (0);
1018 }
1019
1020 /* Exit a binding level.
1021 Pop the level off, and restore the state of the identifier-decl mappings
1022 that were in effect when this level was entered.
1023
1024 If KEEP == 1, this level had explicit declarations, so
1025 and create a "block" (a BLOCK node) for the level
1026 to record its declarations and subblocks for symbol table output.
1027
1028 If KEEP == 2, this level's subblocks go to the front,
1029 not the back of the current binding level. This happens,
1030 for instance, when code for constructors and destructors
1031 need to generate code at the end of a function which must
1032 be moved up to the front of the function.
1033
1034 If FUNCTIONBODY is nonzero, this level is the body of a function,
1035 so create a block as if KEEP were set and also clear out all
1036 label names.
1037
1038 If REVERSE is nonzero, reverse the order of decls before putting
1039 them into the BLOCK. */
1040
1041 tree
1042 poplevel (keep, reverse, functionbody)
1043 int keep;
1044 int reverse;
1045 int functionbody;
1046 {
1047 register tree link;
1048 /* The chain of decls was accumulated in reverse order.
1049 Put it into forward order, just for cleanliness. */
1050 tree decls;
1051 int tmp = functionbody;
1052 int real_functionbody = current_binding_level->keep == 2
1053 ? ((functionbody = 0), tmp) : functionbody;
1054 tree tags = functionbody >= 0 ? current_binding_level->tags : 0;
1055 tree subblocks = functionbody >= 0 ? current_binding_level->blocks : 0;
1056 tree block = NULL_TREE;
1057 tree decl;
1058 int block_previously_created;
1059
1060 GNU_xref_end_scope ((HOST_WIDE_INT) current_binding_level,
1061 (HOST_WIDE_INT) current_binding_level->level_chain,
1062 current_binding_level->parm_flag,
1063 current_binding_level->keep);
1064
1065 if (current_binding_level->keep == 1)
1066 keep = 1;
1067
1068 /* Get the decls in the order they were written.
1069 Usually current_binding_level->names is in reverse order.
1070 But parameter decls were previously put in forward order. */
1071
1072 if (reverse)
1073 current_binding_level->names
1074 = decls = nreverse (current_binding_level->names);
1075 else
1076 decls = current_binding_level->names;
1077
1078 /* Output any nested inline functions within this block
1079 if they weren't already output. */
1080
1081 for (decl = decls; decl; decl = TREE_CHAIN (decl))
1082 if (TREE_CODE (decl) == FUNCTION_DECL
1083 && ! TREE_ASM_WRITTEN (decl)
1084 && DECL_INITIAL (decl) != NULL_TREE
1085 && TREE_ADDRESSABLE (decl)
1086 && decl_function_context (decl) == current_function_decl)
1087 {
1088 /* If this decl was copied from a file-scope decl
1089 on account of a block-scope extern decl,
1090 propagate TREE_ADDRESSABLE to the file-scope decl. */
1091 if (DECL_ABSTRACT_ORIGIN (decl) != NULL_TREE)
1092 TREE_ADDRESSABLE (DECL_ABSTRACT_ORIGIN (decl)) = 1;
1093 else
1094 {
1095 push_function_context ();
1096 output_inline_function (decl);
1097 pop_function_context ();
1098 }
1099 }
1100
1101 /* If there were any declarations or structure tags in that level,
1102 or if this level is a function body,
1103 create a BLOCK to record them for the life of this function. */
1104
1105 block = NULL_TREE;
1106 block_previously_created = (current_binding_level->this_block != NULL_TREE);
1107 if (block_previously_created)
1108 block = current_binding_level->this_block;
1109 else if (keep == 1 || functionbody)
1110 block = make_node (BLOCK);
1111 if (block != NULL_TREE)
1112 {
1113 if (block_previously_created)
1114 {
1115 if (decls || tags || subblocks)
1116 {
1117 if (BLOCK_VARS (block) || BLOCK_TYPE_TAGS (block))
1118 {
1119 warning ("internal compiler error: debugging info corrupted");
1120 }
1121 BLOCK_VARS (block) = decls;
1122 BLOCK_TYPE_TAGS (block) = tags;
1123
1124 /* We can have previous subblocks and new subblocks when
1125 doing fixup_gotos with complex cleanups. We chain the new
1126 subblocks onto the end of any pre-existing subblocks. */
1127 BLOCK_SUBBLOCKS (block) = chainon (BLOCK_SUBBLOCKS (block),
1128 subblocks);
1129 }
1130 /* If we created the block earlier on, and we are just
1131 diddling it now, then it already should have a proper
1132 BLOCK_END_NOTE value associated with it. */
1133 }
1134 else
1135 {
1136 BLOCK_VARS (block) = decls;
1137 BLOCK_TYPE_TAGS (block) = tags;
1138 BLOCK_SUBBLOCKS (block) = subblocks;
1139 /* Otherwise, for a new block, install a new BLOCK_END_NOTE value. */
1140 remember_end_note (block);
1141 }
1142 }
1143
1144 /* In each subblock, record that this is its superior. */
1145
1146 if (keep >= 0)
1147 for (link = subblocks; link; link = TREE_CHAIN (link))
1148 BLOCK_SUPERCONTEXT (link) = block;
1149
1150 /* Clear out the meanings of the local variables of this level. */
1151
1152 if (current_binding_level->is_for_scope && flag_new_for_scope == 1)
1153 {
1154 struct binding_level *outer = current_binding_level->level_chain;
1155 for (link = decls; link; link = TREE_CHAIN (link))
1156 {
1157 if (TREE_CODE (link) == VAR_DECL)
1158 DECL_DEAD_FOR_LOCAL (link) = 1;
1159 else
1160 IDENTIFIER_LOCAL_VALUE (DECL_NAME (link)) = NULL_TREE;
1161 }
1162
1163 /* Save declarations made in a 'for' statement so we can support pre-ANSI
1164 'for' scoping semantics. */
1165
1166 for (link = current_binding_level->shadowed; link; link = TREE_CHAIN (link))
1167 {
1168 tree id = TREE_PURPOSE (link);
1169 tree decl = IDENTIFIER_LOCAL_VALUE (id);
1170
1171 if (decl && DECL_DEAD_FOR_LOCAL (decl))
1172 {
1173 /* In this case keep the dead for-decl visible,
1174 but remember what (if anything) it shadowed. */
1175 DECL_SHADOWED_FOR_VAR (decl) = TREE_VALUE (link);
1176 TREE_CHAIN (decl) = outer->dead_vars_from_for;
1177 outer->dead_vars_from_for = decl;
1178 }
1179 else
1180 IDENTIFIER_LOCAL_VALUE (id) = TREE_VALUE (link);
1181 }
1182 }
1183 else /* Not special for scope. */
1184 {
1185 for (link = decls; link; link = TREE_CHAIN (link))
1186 {
1187 if (DECL_NAME (link) != NULL_TREE)
1188 {
1189 /* If the ident. was used or addressed via a local extern decl,
1190 don't forget that fact. */
1191 if (DECL_EXTERNAL (link))
1192 {
1193 if (TREE_USED (link))
1194 TREE_USED (DECL_ASSEMBLER_NAME (link)) = 1;
1195 if (TREE_ADDRESSABLE (link))
1196 TREE_ADDRESSABLE (DECL_ASSEMBLER_NAME (link)) = 1;
1197 }
1198 IDENTIFIER_LOCAL_VALUE (DECL_NAME (link)) = NULL_TREE;
1199 }
1200 }
1201
1202 /* Restore all name-meanings of the outer levels
1203 that were shadowed by this level. */
1204
1205 for (link = current_binding_level->shadowed;
1206 link; link = TREE_CHAIN (link))
1207 IDENTIFIER_LOCAL_VALUE (TREE_PURPOSE (link)) = TREE_VALUE (link);
1208
1209 /* We first restore the regular decls and *then* the dead_vars_from_for
1210 to handle this case:
1211
1212 int i; // i#1
1213 {
1214 for (int i; ; ) { ...} // i#2
1215 int i; // i#3
1216 } // we are here
1217
1218 In this case, we want remove the binding for i#3, restoring
1219 that of i#2. Then we want to remove the binding for i#2,
1220 and restore that of i#1. */
1221
1222 link = current_binding_level->dead_vars_from_for;
1223 for (; link != NULL_TREE; link = TREE_CHAIN (link))
1224 {
1225 tree id = DECL_NAME (link);
1226 if (IDENTIFIER_LOCAL_VALUE (id) == link)
1227 IDENTIFIER_LOCAL_VALUE (id) = DECL_SHADOWED_FOR_VAR (link);
1228 }
1229
1230 for (link = current_binding_level->class_shadowed;
1231 link; link = TREE_CHAIN (link))
1232 IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (link)) = TREE_VALUE (link);
1233 for (link = current_binding_level->type_shadowed;
1234 link; link = TREE_CHAIN (link))
1235 IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (link)) = TREE_VALUE (link);
1236 }
1237
1238 /* If the level being exited is the top level of a function,
1239 check over all the labels. */
1240
1241 if (functionbody)
1242 {
1243 /* If this is the top level block of a function,
1244 the vars are the function's parameters.
1245 Don't leave them in the BLOCK because they are
1246 found in the FUNCTION_DECL instead. */
1247
1248 BLOCK_VARS (block) = 0;
1249
1250 /* Clear out the definitions of all label names,
1251 since their scopes end here. */
1252
1253 for (link = named_labels; link; link = TREE_CHAIN (link))
1254 {
1255 register tree label = TREE_VALUE (link);
1256
1257 if (DECL_INITIAL (label) == NULL_TREE)
1258 {
1259 cp_error_at ("label `%D' used but not defined", label);
1260 /* Avoid crashing later. */
1261 define_label (input_filename, 1, DECL_NAME (label));
1262 }
1263 else if (warn_unused && !TREE_USED (label))
1264 cp_warning_at ("label `%D' defined but not used", label);
1265 SET_IDENTIFIER_LABEL_VALUE (DECL_NAME (label), NULL_TREE);
1266
1267 /* Put the labels into the "variables" of the
1268 top-level block, so debugger can see them. */
1269 TREE_CHAIN (label) = BLOCK_VARS (block);
1270 BLOCK_VARS (block) = label;
1271 }
1272
1273 named_labels = NULL_TREE;
1274 }
1275
1276 /* Any uses of undefined labels now operate under constraints
1277 of next binding contour. */
1278 {
1279 struct binding_level *level_chain;
1280 level_chain = current_binding_level->level_chain;
1281 if (level_chain)
1282 {
1283 struct named_label_list *labels;
1284 for (labels = named_label_uses; labels; labels = labels->next)
1285 if (labels->binding_level == current_binding_level)
1286 {
1287 labels->binding_level = level_chain;
1288 labels->names_in_scope = level_chain->names;
1289 }
1290 }
1291 }
1292
1293 tmp = current_binding_level->keep;
1294
1295 pop_binding_level ();
1296 if (functionbody)
1297 DECL_INITIAL (current_function_decl) = block;
1298 else if (block)
1299 {
1300 if (!block_previously_created)
1301 current_binding_level->blocks
1302 = chainon (current_binding_level->blocks, block);
1303 }
1304 /* If we did not make a block for the level just exited,
1305 any blocks made for inner levels
1306 (since they cannot be recorded as subblocks in that level)
1307 must be carried forward so they will later become subblocks
1308 of something else. */
1309 else if (subblocks)
1310 {
1311 if (keep == 2)
1312 current_binding_level->blocks
1313 = chainon (subblocks, current_binding_level->blocks);
1314 else
1315 current_binding_level->blocks
1316 = chainon (current_binding_level->blocks, subblocks);
1317 }
1318
1319 /* Take care of compiler's internal binding structures. */
1320 if (tmp == 2)
1321 {
1322 expand_end_bindings (getdecls (), keep, 1);
1323 /* Each and every BLOCK node created here in `poplevel' is important
1324 (e.g. for proper debugging information) so if we created one
1325 earlier, mark it as "used". */
1326 if (block)
1327 TREE_USED (block) = 1;
1328 block = poplevel (keep, reverse, real_functionbody);
1329 }
1330
1331 /* Each and every BLOCK node created here in `poplevel' is important
1332 (e.g. for proper debugging information) so if we created one
1333 earlier, mark it as "used". */
1334 if (block)
1335 TREE_USED (block) = 1;
1336 return block;
1337 }
1338
1339 /* Resume a binding level for a namespace. */
1340
1341 void
1342 resume_level (b)
1343 struct binding_level *b;
1344 {
1345 tree decls, link;
1346
1347 resume_binding_level (b);
1348
1349 /* Resume the variable caches. */
1350 decls = current_binding_level->names;
1351
1352 /* Restore the meanings of the local variables of this level. */
1353
1354 for (link = decls; link; link = TREE_CHAIN (link))
1355 {
1356 /* If it doesn't have a name, there is nothing left to do with it. */
1357 if (DECL_NAME (link) == NULL_TREE)
1358 continue;
1359
1360 IDENTIFIER_LOCAL_VALUE (DECL_NAME (link)) = link;
1361
1362 /* If this is a TYPE_DECL, push it into the type value slot. */
1363 if (TREE_CODE (link) == TYPE_DECL)
1364 SET_IDENTIFIER_TYPE_VALUE (DECL_NAME (link), TREE_TYPE (link));
1365 }
1366 }
1367
1368 /* Delete the node BLOCK from the current binding level.
1369 This is used for the block inside a stmt expr ({...})
1370 so that the block can be reinserted where appropriate. */
1371
1372 void
1373 delete_block (block)
1374 tree block;
1375 {
1376 tree t;
1377 if (current_binding_level->blocks == block)
1378 current_binding_level->blocks = TREE_CHAIN (block);
1379 for (t = current_binding_level->blocks; t;)
1380 {
1381 if (TREE_CHAIN (t) == block)
1382 TREE_CHAIN (t) = TREE_CHAIN (block);
1383 else
1384 t = TREE_CHAIN (t);
1385 }
1386 TREE_CHAIN (block) = NULL_TREE;
1387 /* Clear TREE_USED which is always set by poplevel.
1388 The flag is set again if insert_block is called. */
1389 TREE_USED (block) = 0;
1390 }
1391
1392 /* Insert BLOCK at the end of the list of subblocks of the
1393 current binding level. This is used when a BIND_EXPR is expanded,
1394 to handle the BLOCK node inside the BIND_EXPR. */
1395
1396 void
1397 insert_block (block)
1398 tree block;
1399 {
1400 TREE_USED (block) = 1;
1401 current_binding_level->blocks
1402 = chainon (current_binding_level->blocks, block);
1403 }
1404
1405 /* Set the BLOCK node for the innermost scope
1406 (the one we are currently in). */
1407
1408 void
1409 set_block (block)
1410 register tree block;
1411 {
1412 current_binding_level->this_block = block;
1413 }
1414
1415 /* Do a pushlevel for class declarations. */
1416
1417 void
1418 pushlevel_class ()
1419 {
1420 register struct binding_level *newlevel;
1421
1422 /* Reuse or create a struct for this binding level. */
1423 #if defined(DEBUG_CP_BINDING_LEVELS)
1424 if (0)
1425 #else /* !defined(DEBUG_CP_BINDING_LEVELS) */
1426 if (free_binding_level)
1427 #endif /* !defined(DEBUG_CP_BINDING_LEVELS) */
1428 {
1429 newlevel = free_binding_level;
1430 free_binding_level = free_binding_level->level_chain;
1431 }
1432 else
1433 {
1434 newlevel = make_binding_level ();
1435 }
1436
1437 #if defined(DEBUG_CP_BINDING_LEVELS)
1438 is_class_level = 1;
1439 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
1440
1441 push_binding_level (newlevel, 0, 0);
1442
1443 decl_stack = push_decl_level (decl_stack, &decl_obstack);
1444 class_binding_level = current_binding_level;
1445 class_binding_level->parm_flag = 2;
1446 /* We have just pushed into a new binding level. Now, fake out the rest
1447 of the compiler. Set the `current_binding_level' back to point to
1448 the most closely containing non-class binding level. */
1449 do
1450 {
1451 current_binding_level = current_binding_level->level_chain;
1452 }
1453 while (current_binding_level->parm_flag == 2);
1454 }
1455
1456 /* ...and a poplevel for class declarations. FORCE is used to force
1457 clearing out of CLASS_VALUEs after a class definition. */
1458
1459 tree
1460 poplevel_class (force)
1461 int force;
1462 {
1463 register struct binding_level *level = class_binding_level;
1464 tree block = NULL_TREE;
1465 tree shadowed;
1466
1467 my_friendly_assert (level != 0, 354);
1468
1469 decl_stack = pop_stack_level (decl_stack);
1470 for (shadowed = level->shadowed; shadowed; shadowed = TREE_CHAIN (shadowed))
1471 IDENTIFIER_LOCAL_VALUE (TREE_PURPOSE (shadowed)) = TREE_VALUE (shadowed);
1472 /* If we're leaving a toplevel class, don't bother to do the setting
1473 of IDENTIFIER_CLASS_VALUE to NULL_TREE, since first of all this slot
1474 shouldn't even be used when current_class_type isn't set, and second,
1475 if we don't touch it here, we're able to use the cache effect if the
1476 next time we're entering a class scope, it is the same class. */
1477 if (current_class_depth != 1 || force)
1478 for (shadowed = level->class_shadowed;
1479 shadowed;
1480 shadowed = TREE_CHAIN (shadowed))
1481 IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (shadowed)) = TREE_VALUE (shadowed);
1482 else
1483 /* Remember to save what IDENTIFIER's were bound in this scope so we
1484 can recover from cache misses. */
1485 {
1486 previous_class_type = current_class_type;
1487 previous_class_values = class_binding_level->class_shadowed;
1488 }
1489 for (shadowed = level->type_shadowed;
1490 shadowed;
1491 shadowed = TREE_CHAIN (shadowed))
1492 IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (shadowed)) = TREE_VALUE (shadowed);
1493
1494 GNU_xref_end_scope ((HOST_WIDE_INT) class_binding_level,
1495 (HOST_WIDE_INT) class_binding_level->level_chain,
1496 class_binding_level->parm_flag,
1497 class_binding_level->keep);
1498
1499 if (class_binding_level->parm_flag != 2)
1500 class_binding_level = (struct binding_level *)0;
1501
1502 /* Now, pop out of the the binding level which we created up in the
1503 `pushlevel_class' routine. */
1504 #if defined(DEBUG_CP_BINDING_LEVELS)
1505 is_class_level = 1;
1506 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
1507
1508 pop_binding_level ();
1509
1510 return block;
1511 }
1512 \f
1513 /* For debugging. */
1514 static int no_print_functions = 0;
1515 static int no_print_builtins = 0;
1516
1517 void
1518 print_binding_level (lvl)
1519 struct binding_level *lvl;
1520 {
1521 tree t;
1522 int i = 0, len;
1523 fprintf (stderr, " blocks=");
1524 fprintf (stderr, HOST_PTR_PRINTF, lvl->blocks);
1525 fprintf (stderr, " n_incomplete=%d parm_flag=%d keep=%d",
1526 list_length (lvl->incomplete), lvl->parm_flag, lvl->keep);
1527 if (lvl->tag_transparent)
1528 fprintf (stderr, " tag-transparent");
1529 if (lvl->more_cleanups_ok)
1530 fprintf (stderr, " more-cleanups-ok");
1531 if (lvl->have_cleanups)
1532 fprintf (stderr, " have-cleanups");
1533 fprintf (stderr, "\n");
1534 if (lvl->names)
1535 {
1536 fprintf (stderr, " names:\t");
1537 /* We can probably fit 3 names to a line? */
1538 for (t = lvl->names; t; t = TREE_CHAIN (t))
1539 {
1540 if (no_print_functions && (TREE_CODE (t) == FUNCTION_DECL))
1541 continue;
1542 if (no_print_builtins
1543 && (TREE_CODE (t) == TYPE_DECL)
1544 && (!strcmp (DECL_SOURCE_FILE (t),"<built-in>")))
1545 continue;
1546
1547 /* Function decls tend to have longer names. */
1548 if (TREE_CODE (t) == FUNCTION_DECL)
1549 len = 3;
1550 else
1551 len = 2;
1552 i += len;
1553 if (i > 6)
1554 {
1555 fprintf (stderr, "\n\t");
1556 i = len;
1557 }
1558 print_node_brief (stderr, "", t, 0);
1559 if (t == error_mark_node)
1560 break;
1561 }
1562 if (i)
1563 fprintf (stderr, "\n");
1564 }
1565 if (lvl->tags)
1566 {
1567 fprintf (stderr, " tags:\t");
1568 i = 0;
1569 for (t = lvl->tags; t; t = TREE_CHAIN (t))
1570 {
1571 if (TREE_PURPOSE (t) == NULL_TREE)
1572 len = 3;
1573 else if (TREE_PURPOSE (t) == TYPE_IDENTIFIER (TREE_VALUE (t)))
1574 len = 2;
1575 else
1576 len = 4;
1577 i += len;
1578 if (i > 5)
1579 {
1580 fprintf (stderr, "\n\t");
1581 i = len;
1582 }
1583 if (TREE_PURPOSE (t) == NULL_TREE)
1584 {
1585 print_node_brief (stderr, "<unnamed-typedef", TREE_VALUE (t), 0);
1586 fprintf (stderr, ">");
1587 }
1588 else if (TREE_PURPOSE (t) == TYPE_IDENTIFIER (TREE_VALUE (t)))
1589 print_node_brief (stderr, "", TREE_VALUE (t), 0);
1590 else
1591 {
1592 print_node_brief (stderr, "<typedef", TREE_PURPOSE (t), 0);
1593 print_node_brief (stderr, "", TREE_VALUE (t), 0);
1594 fprintf (stderr, ">");
1595 }
1596 }
1597 if (i)
1598 fprintf (stderr, "\n");
1599 }
1600 if (lvl->shadowed)
1601 {
1602 fprintf (stderr, " shadowed:");
1603 for (t = lvl->shadowed; t; t = TREE_CHAIN (t))
1604 {
1605 fprintf (stderr, " %s ", IDENTIFIER_POINTER (TREE_PURPOSE (t)));
1606 }
1607 fprintf (stderr, "\n");
1608 }
1609 if (lvl->class_shadowed)
1610 {
1611 fprintf (stderr, " class-shadowed:");
1612 for (t = lvl->class_shadowed; t; t = TREE_CHAIN (t))
1613 {
1614 fprintf (stderr, " %s ", IDENTIFIER_POINTER (TREE_PURPOSE (t)));
1615 }
1616 fprintf (stderr, "\n");
1617 }
1618 if (lvl->type_shadowed)
1619 {
1620 fprintf (stderr, " type-shadowed:");
1621 for (t = lvl->type_shadowed; t; t = TREE_CHAIN (t))
1622 {
1623 fprintf (stderr, " %s ", IDENTIFIER_POINTER (TREE_PURPOSE (t)));
1624 }
1625 fprintf (stderr, "\n");
1626 }
1627 }
1628
1629 void
1630 print_other_binding_stack (stack)
1631 struct binding_level *stack;
1632 {
1633 struct binding_level *level;
1634 for (level = stack; level != global_binding_level; level = level->level_chain)
1635 {
1636 fprintf (stderr, "binding level ");
1637 fprintf (stderr, HOST_PTR_PRINTF, level);
1638 fprintf (stderr, "\n");
1639 print_binding_level (level);
1640 }
1641 }
1642
1643 void
1644 print_binding_stack ()
1645 {
1646 struct binding_level *b;
1647 fprintf (stderr, "current_binding_level=");
1648 fprintf (stderr, HOST_PTR_PRINTF, current_binding_level);
1649 fprintf (stderr, "\nclass_binding_level=");
1650 fprintf (stderr, HOST_PTR_PRINTF, class_binding_level);
1651 fprintf (stderr, "\nglobal_binding_level=");
1652 fprintf (stderr, HOST_PTR_PRINTF, global_binding_level);
1653 fprintf (stderr, "\n");
1654 if (class_binding_level)
1655 {
1656 for (b = class_binding_level; b; b = b->level_chain)
1657 if (b == current_binding_level)
1658 break;
1659 if (b)
1660 b = class_binding_level;
1661 else
1662 b = current_binding_level;
1663 }
1664 else
1665 b = current_binding_level;
1666 print_other_binding_stack (b);
1667 fprintf (stderr, "global:\n");
1668 print_binding_level (global_binding_level);
1669 }
1670
1671 extern char * first_global_object_name;
1672
1673 /* Get a unique name for each call to this routine for unnamed namespaces.
1674 Mostly copied from get_file_function_name. */
1675
1676 static tree
1677 get_unique_name ()
1678 {
1679 static int temp_name_counter = 0;
1680 char *buf;
1681 register char *p;
1682
1683 if (first_global_object_name)
1684 p = first_global_object_name;
1685 else if (main_input_filename)
1686 p = main_input_filename;
1687 else
1688 p = input_filename;
1689
1690 #define UNNAMED_NAMESPACE_FORMAT "__%s_%d"
1691
1692 buf = (char *) alloca (sizeof (UNNAMED_NAMESPACE_FORMAT) + strlen (p));
1693
1694 sprintf (buf, UNNAMED_NAMESPACE_FORMAT, p, temp_name_counter++);
1695
1696 /* Don't need to pull weird characters out of global names. */
1697 if (p != first_global_object_name)
1698 {
1699 for (p = buf+11; *p; p++)
1700 if (! ((*p >= '0' && *p <= '9')
1701 #ifndef NO_DOLLAR_IN_LABEL /* this for `$'; unlikely, but... -- kr */
1702 || *p == '$'
1703 #endif
1704 #ifndef NO_DOT_IN_LABEL /* this for `.'; unlikely, but... */
1705 || *p == '.'
1706 #endif
1707 || (*p >= 'A' && *p <= 'Z')
1708 || (*p >= 'a' && *p <= 'z')))
1709 *p = '_';
1710 }
1711
1712 return get_identifier (buf);
1713 }
1714
1715 /* Push into the scope of the NAME namespace. If NAME is NULL_TREE, then we
1716 select a name that is unique to this compilation unit. */
1717
1718 void
1719 push_namespace (name)
1720 tree name;
1721 {
1722 #if 1
1723 static int warned;
1724 if (! warned)
1725 sorry ("namespace");
1726
1727 warned = 1;
1728 #else
1729 extern tree current_namespace;
1730 tree old_id = get_namespace_id ();
1731 char *buf;
1732 tree d;
1733
1734 if (! name)
1735 {
1736 /* Create a truly ugly name! */
1737 name = get_unique_name ();
1738 }
1739
1740 d = build_lang_decl (NAMESPACE_DECL, name, void_type_node);
1741
1742 /* Mark them as external, so redeclaration_error_message doesn't think
1743 they are duplicates. */
1744
1745 DECL_EXTERNAL (d) = 1;
1746 d = pushdecl (d);
1747
1748 if (NAMESPACE_LEVEL (d) == 0)
1749 {
1750 /* This is new for this compilation unit. */
1751 pushlevel (0);
1752 declare_namespace_level ();
1753 NAMESPACE_LEVEL (d) = current_binding_level;
1754 }
1755 else
1756 resume_level (NAMESPACE_LEVEL (d));
1757
1758 /* This code is just is bit old now... */
1759 current_namespace = tree_cons (NULL_TREE, name, current_namespace);
1760 buf = (char *) alloca (4 + (old_id ? IDENTIFIER_LENGTH (old_id) : 0)
1761 + IDENTIFIER_LENGTH (name));
1762 sprintf (buf, "%s%s", old_id ? IDENTIFIER_POINTER (old_id) : "",
1763 IDENTIFIER_POINTER (name));
1764 TREE_PURPOSE (current_namespace) = get_identifier (buf);
1765 #endif
1766 }
1767
1768 /* Pop from the scope of the current namespace. */
1769
1770 void
1771 pop_namespace ()
1772 {
1773 #if 0
1774 extern tree current_namespace;
1775 tree decls, link;
1776 current_namespace = TREE_CHAIN (current_namespace);
1777
1778 /* Just in case we get out of sync. */
1779 if (! namespace_bindings_p ())
1780 poplevel (0, 0, 0);
1781
1782 decls = current_binding_level->names;
1783
1784 /* Clear out the meanings of the local variables of this level. */
1785
1786 for (link = decls; link; link = TREE_CHAIN (link))
1787 {
1788 if (DECL_NAME (link) != NULL_TREE)
1789 {
1790 /* If the ident. was used or addressed via a local extern decl,
1791 don't forget that fact. */
1792 if (DECL_EXTERNAL (link))
1793 {
1794 if (TREE_USED (link))
1795 TREE_USED (DECL_ASSEMBLER_NAME (link)) = 1;
1796 if (TREE_ADDRESSABLE (link))
1797 TREE_ADDRESSABLE (DECL_ASSEMBLER_NAME (link)) = 1;
1798 }
1799 IDENTIFIER_LOCAL_VALUE (DECL_NAME (link)) = NULL_TREE;
1800 }
1801 }
1802
1803 /* Restore all name-meanings of the outer levels
1804 that were shadowed by this level. */
1805
1806 for (link = current_binding_level->shadowed; link; link = TREE_CHAIN (link))
1807 IDENTIFIER_LOCAL_VALUE (TREE_PURPOSE (link)) = TREE_VALUE (link);
1808 for (link = current_binding_level->class_shadowed;
1809 link; link = TREE_CHAIN (link))
1810 IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (link)) = TREE_VALUE (link);
1811 for (link = current_binding_level->type_shadowed;
1812 link; link = TREE_CHAIN (link))
1813 IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (link)) = TREE_VALUE (link);
1814
1815 /* suspend a level. */
1816 suspend_binding_level ();
1817 #endif
1818 }
1819 \f
1820 /* Subroutines for reverting temporarily to top-level for instantiation
1821 of templates and such. We actually need to clear out the class- and
1822 local-value slots of all identifiers, so that only the global values
1823 are at all visible. Simply setting current_binding_level to the global
1824 scope isn't enough, because more binding levels may be pushed. */
1825 struct saved_scope {
1826 struct binding_level *old_binding_level;
1827 tree old_bindings;
1828 struct saved_scope *prev;
1829 tree class_name, class_type, function_decl;
1830 struct binding_level *class_bindings;
1831 tree *lang_base, *lang_stack, lang_name;
1832 int lang_stacksize;
1833 int minimal_parse_mode;
1834 tree last_function_parms;
1835 tree template_parms;
1836 HOST_WIDE_INT processing_template_decl;
1837 tree previous_class_type, previous_class_values;
1838 int processing_specialization;
1839 int processing_explicit_instantiation;
1840 };
1841 static struct saved_scope *current_saved_scope;
1842
1843 static tree
1844 store_bindings (names, old_bindings)
1845 tree names, old_bindings;
1846 {
1847 tree t;
1848 for (t = names; t; t = TREE_CHAIN (t))
1849 {
1850 tree binding, t1, id;
1851
1852 if (TREE_CODE (t) == TREE_LIST)
1853 id = TREE_PURPOSE (t);
1854 else
1855 id = DECL_NAME (t);
1856
1857 if (!id
1858 || (!IDENTIFIER_LOCAL_VALUE (id)
1859 && !IDENTIFIER_CLASS_VALUE (id)))
1860 continue;
1861
1862 for (t1 = old_bindings; t1; t1 = TREE_CHAIN (t1))
1863 if (TREE_VEC_ELT (t1, 0) == id)
1864 goto skip_it;
1865
1866 binding = make_tree_vec (4);
1867 if (id)
1868 {
1869 my_friendly_assert (TREE_CODE (id) == IDENTIFIER_NODE, 135);
1870 TREE_VEC_ELT (binding, 0) = id;
1871 TREE_VEC_ELT (binding, 1) = IDENTIFIER_TYPE_VALUE (id);
1872 TREE_VEC_ELT (binding, 2) = IDENTIFIER_LOCAL_VALUE (id);
1873 TREE_VEC_ELT (binding, 3) = IDENTIFIER_CLASS_VALUE (id);
1874 IDENTIFIER_LOCAL_VALUE (id) = NULL_TREE;
1875 IDENTIFIER_CLASS_VALUE (id) = NULL_TREE;
1876 }
1877 TREE_CHAIN (binding) = old_bindings;
1878 old_bindings = binding;
1879 skip_it:
1880 ;
1881 }
1882 return old_bindings;
1883 }
1884
1885 void
1886 maybe_push_to_top_level (pseudo)
1887 int pseudo;
1888 {
1889 extern int current_lang_stacksize;
1890 struct saved_scope *s
1891 = (struct saved_scope *) xmalloc (sizeof (struct saved_scope));
1892 struct binding_level *b = inner_binding_level;
1893 tree old_bindings = NULL_TREE;
1894
1895 if (current_function_decl)
1896 push_cp_function_context (NULL_TREE);
1897
1898 if (previous_class_type)
1899 old_bindings = store_bindings (previous_class_values, old_bindings);
1900
1901 /* Have to include global_binding_level, because class-level decls
1902 aren't listed anywhere useful. */
1903 for (; b; b = b->level_chain)
1904 {
1905 tree t;
1906
1907 if (b == global_binding_level || (pseudo && b->pseudo_global))
1908 break;
1909
1910 old_bindings = store_bindings (b->names, old_bindings);
1911 /* We also need to check class_shadowed to save class-level type
1912 bindings, since pushclass doesn't fill in b->names. */
1913 if (b->parm_flag == 2)
1914 old_bindings = store_bindings (b->class_shadowed, old_bindings);
1915
1916 /* Unwind type-value slots back to top level. */
1917 for (t = b->type_shadowed; t; t = TREE_CHAIN (t))
1918 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (t), TREE_VALUE (t));
1919 }
1920
1921 s->old_binding_level = current_binding_level;
1922 current_binding_level = b;
1923
1924 s->class_name = current_class_name;
1925 s->class_type = current_class_type;
1926 s->function_decl = current_function_decl;
1927 s->class_bindings = class_binding_level;
1928 s->lang_stack = current_lang_stack;
1929 s->lang_base = current_lang_base;
1930 s->lang_stacksize = current_lang_stacksize;
1931 s->lang_name = current_lang_name;
1932 s->minimal_parse_mode = minimal_parse_mode;
1933 s->last_function_parms = last_function_parms;
1934 s->template_parms = current_template_parms;
1935 s->processing_template_decl = processing_template_decl;
1936 s->previous_class_type = previous_class_type;
1937 s->previous_class_values = previous_class_values;
1938 s->processing_specialization = processing_specialization;
1939 s->processing_explicit_instantiation = processing_explicit_instantiation;
1940
1941 current_class_name = current_class_type = NULL_TREE;
1942 current_function_decl = NULL_TREE;
1943 class_binding_level = (struct binding_level *)0;
1944 current_lang_stacksize = 10;
1945 current_lang_stack = current_lang_base
1946 = (tree *) xmalloc (current_lang_stacksize * sizeof (tree));
1947 current_lang_name = lang_name_cplusplus;
1948 strict_prototype = strict_prototypes_lang_cplusplus;
1949 named_labels = NULL_TREE;
1950 minimal_parse_mode = 0;
1951 previous_class_type = previous_class_values = NULL_TREE;
1952 processing_specialization = 0;
1953 processing_explicit_instantiation = 0;
1954 if (!pseudo)
1955 {
1956 current_template_parms = NULL_TREE;
1957 processing_template_decl = 0;
1958 }
1959
1960 s->prev = current_saved_scope;
1961 s->old_bindings = old_bindings;
1962 current_saved_scope = s;
1963
1964 push_obstacks (&permanent_obstack, &permanent_obstack);
1965 }
1966
1967 void
1968 push_to_top_level ()
1969 {
1970 maybe_push_to_top_level (0);
1971 }
1972
1973 void
1974 pop_from_top_level ()
1975 {
1976 extern int current_lang_stacksize;
1977 struct saved_scope *s = current_saved_scope;
1978 tree t;
1979
1980 /* Clear out class-level bindings cache. */
1981 if (previous_class_type)
1982 {
1983 popclass (-1);
1984 previous_class_type = NULL_TREE;
1985 }
1986
1987 pop_obstacks ();
1988
1989 current_binding_level = s->old_binding_level;
1990 current_saved_scope = s->prev;
1991 for (t = s->old_bindings; t; t = TREE_CHAIN (t))
1992 {
1993 tree id = TREE_VEC_ELT (t, 0);
1994 if (id)
1995 {
1996 IDENTIFIER_TYPE_VALUE (id) = TREE_VEC_ELT (t, 1);
1997 IDENTIFIER_LOCAL_VALUE (id) = TREE_VEC_ELT (t, 2);
1998 IDENTIFIER_CLASS_VALUE (id) = TREE_VEC_ELT (t, 3);
1999 }
2000 }
2001 current_class_name = s->class_name;
2002 current_class_type = s->class_type;
2003 current_function_decl = s->function_decl;
2004 class_binding_level = s->class_bindings;
2005 free (current_lang_base);
2006 current_lang_base = s->lang_base;
2007 current_lang_stack = s->lang_stack;
2008 current_lang_name = s->lang_name;
2009 current_lang_stacksize = s->lang_stacksize;
2010 if (current_lang_name == lang_name_cplusplus)
2011 strict_prototype = strict_prototypes_lang_cplusplus;
2012 else if (current_lang_name == lang_name_c)
2013 strict_prototype = strict_prototypes_lang_c;
2014 minimal_parse_mode = s->minimal_parse_mode;
2015 last_function_parms = s->last_function_parms;
2016 current_template_parms = s->template_parms;
2017 processing_template_decl = s->processing_template_decl;
2018 previous_class_type = s->previous_class_type;
2019 previous_class_values = s->previous_class_values;
2020 processing_specialization = s->processing_specialization;
2021 processing_explicit_instantiation = s->processing_explicit_instantiation;
2022
2023 free (s);
2024
2025 if (current_function_decl)
2026 pop_cp_function_context (NULL_TREE);
2027 }
2028 \f
2029 /* Push a definition of struct, union or enum tag "name".
2030 into binding_level "b". "type" should be the type node,
2031 We assume that the tag "name" is not already defined.
2032
2033 Note that the definition may really be just a forward reference.
2034 In that case, the TYPE_SIZE will be a NULL_TREE.
2035
2036 C++ gratuitously puts all these tags in the name space. */
2037
2038 /* When setting the IDENTIFIER_TYPE_VALUE field of an identifier ID,
2039 record the shadowed value for this binding contour. TYPE is
2040 the type that ID maps to. */
2041
2042 static void
2043 set_identifier_type_value_with_scope (id, type, b)
2044 tree id;
2045 tree type;
2046 struct binding_level *b;
2047 {
2048 if (b != global_binding_level)
2049 {
2050 tree old_type_value = IDENTIFIER_TYPE_VALUE (id);
2051 b->type_shadowed
2052 = tree_cons (id, old_type_value, b->type_shadowed);
2053 }
2054 SET_IDENTIFIER_TYPE_VALUE (id, type);
2055 }
2056
2057 /* As set_identifier_type_value_with_scope, but using inner_binding_level. */
2058
2059 void
2060 set_identifier_type_value (id, type)
2061 tree id;
2062 tree type;
2063 {
2064 set_identifier_type_value_with_scope (id, type, inner_binding_level);
2065 }
2066
2067 /* Pop off extraneous binding levels left over due to syntax errors.
2068
2069 We don't pop past namespaces, as they might be valid. */
2070
2071 void
2072 pop_everything ()
2073 {
2074 #ifdef DEBUG_CP_BINDING_LEVELS
2075 fprintf (stderr, "XXX entering pop_everything ()\n");
2076 #endif
2077 while (! toplevel_bindings_p () && ! pseudo_global_level_p ())
2078 {
2079 if (class_binding_level)
2080 pop_nested_class (1);
2081 else
2082 poplevel (0, 0, 0);
2083 }
2084 #ifdef DEBUG_CP_BINDING_LEVELS
2085 fprintf (stderr, "XXX leaving pop_everything ()\n");
2086 #endif
2087 }
2088
2089 /* Push a tag name NAME for struct/class/union/enum type TYPE.
2090 Normally put into into the inner-most non-tag-transparent scope,
2091 but if GLOBALIZE is true, put it in the inner-most non-class scope.
2092 The latter is needed for implicit declarations. */
2093
2094 void
2095 pushtag (name, type, globalize)
2096 tree name, type;
2097 int globalize;
2098 {
2099 register struct binding_level *b;
2100 tree context = 0;
2101 tree c_decl = 0;
2102
2103 b = inner_binding_level;
2104 while (b->tag_transparent
2105 || (globalize && b->parm_flag == 2))
2106 b = b->level_chain;
2107
2108 if (toplevel_bindings_p ())
2109 b->tags = perm_tree_cons (name, type, b->tags);
2110 else
2111 b->tags = saveable_tree_cons (name, type, b->tags);
2112
2113 if (name)
2114 {
2115 context = type ? TYPE_CONTEXT (type) : NULL_TREE;
2116 if (! context && ! globalize)
2117 context = current_scope ();
2118 if (context)
2119 c_decl = TREE_CODE (context) == FUNCTION_DECL
2120 ? context : TYPE_MAIN_DECL (context);
2121
2122 /* Do C++ gratuitous typedefing. */
2123 if (IDENTIFIER_TYPE_VALUE (name) != type)
2124 {
2125 register tree d;
2126 int newdecl = 0;
2127
2128 if (b->parm_flag != 2
2129 || TYPE_SIZE (current_class_type) != NULL_TREE)
2130 {
2131 d = lookup_nested_type (type, c_decl);
2132
2133 if (d == NULL_TREE)
2134 {
2135 newdecl = 1;
2136 d = build_decl (TYPE_DECL, name, type);
2137 SET_DECL_ARTIFICIAL (d);
2138 set_identifier_type_value_with_scope (name, type, b);
2139 }
2140 else
2141 d = TYPE_MAIN_DECL (d);
2142
2143 TYPE_NAME (type) = d;
2144 DECL_CONTEXT (d) = context;
2145 if (! globalize && processing_template_decl && IS_AGGR_TYPE (type))
2146 push_template_decl (d);
2147
2148 if (b->parm_flag == 2)
2149 d = pushdecl_class_level (d);
2150 else
2151 d = pushdecl_with_scope (d, b);
2152 }
2153 else
2154 {
2155 /* Make nested declarations go into class-level scope. */
2156 newdecl = 1;
2157 d = build_decl (TYPE_DECL, name, type);
2158 SET_DECL_ARTIFICIAL (d);
2159 TYPE_NAME (type) = d;
2160 DECL_CONTEXT (d) = context;
2161 if (! globalize && processing_template_decl && IS_AGGR_TYPE (type))
2162 push_template_decl (d);
2163
2164 d = pushdecl_class_level (d);
2165 }
2166 if (newdecl)
2167 {
2168 if (ANON_AGGRNAME_P (name))
2169 DECL_IGNORED_P (d) = 1;
2170
2171 TYPE_CONTEXT (type) = DECL_CONTEXT (d);
2172 DECL_ASSEMBLER_NAME (d) = DECL_NAME (d);
2173 DECL_ASSEMBLER_NAME (d)
2174 = get_identifier (build_overload_name (type, 1, 1));
2175 }
2176 }
2177 if (b->parm_flag == 2)
2178 {
2179 TREE_NONLOCAL_FLAG (type) = 1;
2180 if (TYPE_SIZE (current_class_type) == NULL_TREE)
2181 CLASSTYPE_TAGS (current_class_type) = b->tags;
2182 }
2183 }
2184
2185 if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL)
2186 /* Use the canonical TYPE_DECL for this node. */
2187 TYPE_STUB_DECL (type) = TYPE_NAME (type);
2188 else
2189 {
2190 /* Create a fake NULL-named TYPE_DECL node whose TREE_TYPE
2191 will be the tagged type we just added to the current
2192 binding level. This fake NULL-named TYPE_DECL node helps
2193 dwarfout.c to know when it needs to output a
2194 representation of a tagged type, and it also gives us a
2195 convenient place to record the "scope start" address for
2196 the tagged type. */
2197
2198 tree d = build_decl (TYPE_DECL, NULL_TREE, type);
2199 TYPE_STUB_DECL (type) = pushdecl_with_scope (d, b);
2200 }
2201 }
2202
2203 /* Counter used to create anonymous type names. */
2204
2205 static int anon_cnt = 0;
2206
2207 /* Return an IDENTIFIER which can be used as a name for
2208 anonymous structs and unions. */
2209
2210 tree
2211 make_anon_name ()
2212 {
2213 char buf[32];
2214
2215 sprintf (buf, ANON_AGGRNAME_FORMAT, anon_cnt++);
2216 return get_identifier (buf);
2217 }
2218
2219 /* Clear the TREE_PURPOSE slot of tags which have anonymous typenames.
2220 This keeps dbxout from getting confused. */
2221
2222 void
2223 clear_anon_tags ()
2224 {
2225 register struct binding_level *b;
2226 register tree tags;
2227 static int last_cnt = 0;
2228
2229 /* Fast out if no new anon names were declared. */
2230 if (last_cnt == anon_cnt)
2231 return;
2232
2233 b = current_binding_level;
2234 while (b->tag_transparent)
2235 b = b->level_chain;
2236 tags = b->tags;
2237 while (tags)
2238 {
2239 /* A NULL purpose means we have already processed all tags
2240 from here to the end of the list. */
2241 if (TREE_PURPOSE (tags) == NULL_TREE)
2242 break;
2243 if (ANON_AGGRNAME_P (TREE_PURPOSE (tags)))
2244 TREE_PURPOSE (tags) = NULL_TREE;
2245 tags = TREE_CHAIN (tags);
2246 }
2247 last_cnt = anon_cnt;
2248 }
2249 \f
2250 /* Subroutine of duplicate_decls: return truthvalue of whether
2251 or not types of these decls match.
2252
2253 For C++, we must compare the parameter list so that `int' can match
2254 `int&' in a parameter position, but `int&' is not confused with
2255 `const int&'. */
2256
2257 int
2258 decls_match (newdecl, olddecl)
2259 tree newdecl, olddecl;
2260 {
2261 int types_match;
2262
2263 if (TREE_CODE (newdecl) == FUNCTION_DECL
2264 && TREE_CODE (olddecl) == FUNCTION_DECL)
2265 {
2266 tree f1 = TREE_TYPE (newdecl);
2267 tree f2 = TREE_TYPE (olddecl);
2268 tree p1 = TYPE_ARG_TYPES (f1);
2269 tree p2 = TYPE_ARG_TYPES (f2);
2270
2271 /* When we parse a static member function definition,
2272 we put together a FUNCTION_DECL which thinks its type
2273 is METHOD_TYPE. Change that to FUNCTION_TYPE, and
2274 proceed. */
2275 if (TREE_CODE (f1) == METHOD_TYPE && DECL_STATIC_FUNCTION_P (olddecl))
2276 revert_static_member_fn (&newdecl, &f1, &p1);
2277 else if (TREE_CODE (f2) == METHOD_TYPE
2278 && DECL_STATIC_FUNCTION_P (newdecl))
2279 revert_static_member_fn (&olddecl, &f2, &p2);
2280
2281 /* Here we must take care of the case where new default
2282 parameters are specified. Also, warn if an old
2283 declaration becomes ambiguous because default
2284 parameters may cause the two to be ambiguous. */
2285 if (TREE_CODE (f1) != TREE_CODE (f2))
2286 {
2287 if (TREE_CODE (f1) == OFFSET_TYPE)
2288 cp_compiler_error ("`%D' redeclared as member function", newdecl);
2289 else
2290 cp_compiler_error ("`%D' redeclared as non-member function", newdecl);
2291 return 0;
2292 }
2293
2294 if (comptypes (TREE_TYPE (f1), TREE_TYPE (f2), 1))
2295 {
2296 if (! strict_prototypes_lang_c && DECL_LANGUAGE (olddecl) == lang_c
2297 && p2 == NULL_TREE)
2298 {
2299 types_match = self_promoting_args_p (p1);
2300 if (p1 == void_list_node)
2301 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
2302 }
2303 else if (!strict_prototypes_lang_c && DECL_LANGUAGE (olddecl)==lang_c
2304 && DECL_LANGUAGE (newdecl) == lang_c && p1 == NULL_TREE)
2305 {
2306 types_match = self_promoting_args_p (p2);
2307 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
2308 }
2309 else
2310 types_match = compparms (p1, p2, 3);
2311 }
2312 else
2313 types_match = 0;
2314 }
2315 else if (TREE_CODE (newdecl) == TEMPLATE_DECL
2316 && TREE_CODE (olddecl) == TEMPLATE_DECL)
2317 {
2318 tree newargs = DECL_TEMPLATE_PARMS (newdecl);
2319 tree oldargs = DECL_TEMPLATE_PARMS (olddecl);
2320 int i;
2321
2322 /* Run through all the levels of template parameters, checking
2323 that they match. */
2324 while (newargs && oldargs)
2325 {
2326 int len = TREE_VEC_LENGTH (INNERMOST_TEMPLATE_PARMS (newargs));
2327
2328 if (TREE_VEC_LENGTH (INNERMOST_TEMPLATE_PARMS (oldargs)) != len)
2329 return 0;
2330
2331 for (i = 0; i < len; i++)
2332 {
2333 tree newarg =
2334 TREE_VALUE (TREE_VEC_ELT
2335 (INNERMOST_TEMPLATE_PARMS (newargs), i));
2336 tree oldarg =
2337 TREE_VALUE (TREE_VEC_ELT
2338 (INNERMOST_TEMPLATE_PARMS (oldargs), i));
2339 if (TREE_CODE (newarg) != TREE_CODE (oldarg))
2340 return 0;
2341 else if (TREE_CODE (newarg) == TYPE_DECL)
2342 /* continue */;
2343 else if (! comptypes (TREE_TYPE (newarg), TREE_TYPE (oldarg), 1))
2344 return 0;
2345 }
2346 newargs = TREE_CHAIN (newargs);
2347 oldargs = TREE_CHAIN (oldargs);
2348 }
2349
2350 if ((newargs == NULL_TREE) != (oldargs == NULL_TREE))
2351 /* One declaration has more levels that the other. */
2352 return 0;
2353
2354 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
2355 types_match = 1;
2356 else
2357 types_match = decls_match (DECL_TEMPLATE_RESULT (olddecl),
2358 DECL_TEMPLATE_RESULT (newdecl));
2359 }
2360 else
2361 {
2362 if (TREE_TYPE (newdecl) == error_mark_node)
2363 types_match = TREE_TYPE (olddecl) == error_mark_node;
2364 else if (TREE_TYPE (olddecl) == NULL_TREE)
2365 types_match = TREE_TYPE (newdecl) == NULL_TREE;
2366 else if (TREE_TYPE (newdecl) == NULL_TREE)
2367 types_match = 0;
2368 /* Qualifiers must match, and they may be present on either, the type
2369 or the decl. */
2370 else if ((TREE_READONLY (newdecl)
2371 || TYPE_READONLY (TREE_TYPE (newdecl)))
2372 == (TREE_READONLY (olddecl)
2373 || TYPE_READONLY (TREE_TYPE (olddecl)))
2374 && (TREE_THIS_VOLATILE (newdecl)
2375 || TYPE_VOLATILE (TREE_TYPE (newdecl)))
2376 == (TREE_THIS_VOLATILE (olddecl)
2377 || TYPE_VOLATILE (TREE_TYPE (olddecl))))
2378 types_match = comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (newdecl)),
2379 TYPE_MAIN_VARIANT (TREE_TYPE (olddecl)), 1);
2380 else
2381 types_match = 0;
2382 }
2383
2384 return types_match;
2385 }
2386
2387 /* If NEWDECL is `static' and an `extern' was seen previously,
2388 warn about it. (OLDDECL may be NULL_TREE; NAME contains
2389 information about previous usage as an `extern'.)
2390
2391 Note that this does not apply to the C++ case of declaring
2392 a variable `extern const' and then later `const'.
2393
2394 Don't complain about built-in functions, since they are beyond
2395 the user's control. */
2396
2397 static void
2398 warn_extern_redeclared_static (newdecl, olddecl)
2399 tree newdecl, olddecl;
2400 {
2401 tree name;
2402
2403 static char *explicit_extern_static_warning
2404 = "`%D' was declared `extern' and later `static'";
2405 static char *implicit_extern_static_warning
2406 = "`%D' was declared implicitly `extern' and later `static'";
2407
2408 if (TREE_CODE (newdecl) == TYPE_DECL)
2409 return;
2410
2411 name = DECL_ASSEMBLER_NAME (newdecl);
2412 if (TREE_PUBLIC (name) && DECL_THIS_STATIC (newdecl))
2413 {
2414 /* It's okay to redeclare an ANSI built-in function as static,
2415 or to declare a non-ANSI built-in function as anything. */
2416 if (! (TREE_CODE (newdecl) == FUNCTION_DECL
2417 && olddecl != NULL_TREE
2418 && TREE_CODE (olddecl) == FUNCTION_DECL
2419 && (DECL_BUILT_IN (olddecl)
2420 || DECL_BUILT_IN_NONANSI (olddecl))))
2421 {
2422 cp_pedwarn (IDENTIFIER_IMPLICIT_DECL (name)
2423 ? implicit_extern_static_warning
2424 : explicit_extern_static_warning, newdecl);
2425 if (olddecl != NULL_TREE)
2426 cp_pedwarn_at ("previous declaration of `%D'", olddecl);
2427 }
2428 }
2429 }
2430
2431 /* Handle when a new declaration NEWDECL has the same name as an old
2432 one OLDDECL in the same binding contour. Prints an error message
2433 if appropriate.
2434
2435 If safely possible, alter OLDDECL to look like NEWDECL, and return 1.
2436 Otherwise, return 0. */
2437
2438 int
2439 duplicate_decls (newdecl, olddecl)
2440 tree newdecl, olddecl;
2441 {
2442 extern struct obstack permanent_obstack;
2443 unsigned olddecl_uid = DECL_UID (olddecl);
2444 int olddecl_friend = 0, types_match = 0;
2445 int new_defines_function;
2446
2447 if (newdecl == olddecl)
2448 return 1;
2449
2450 if (TREE_CODE_CLASS (TREE_CODE (olddecl)) == 'd')
2451 DECL_MACHINE_ATTRIBUTES (newdecl) = DECL_MACHINE_ATTRIBUTES (olddecl);
2452
2453 types_match = decls_match (newdecl, olddecl);
2454
2455 if (TREE_CODE (olddecl) != TREE_LIST)
2456 olddecl_friend = DECL_LANG_SPECIFIC (olddecl) && DECL_FRIEND_P (olddecl);
2457
2458 /* If either the type of the new decl or the type of the old decl is an
2459 error_mark_node, then that implies that we have already issued an
2460 error (earlier) for some bogus type specification, and in that case,
2461 it is rather pointless to harass the user with yet more error message
2462 about the same declaration, so well just pretent the types match here. */
2463 if (TREE_TYPE (newdecl) == error_mark_node
2464 || TREE_TYPE (olddecl) == error_mark_node)
2465 types_match = 1;
2466
2467 if (TREE_CODE (olddecl) == FUNCTION_DECL
2468 && DECL_ARTIFICIAL (olddecl)
2469 && (DECL_BUILT_IN (olddecl) || DECL_BUILT_IN_NONANSI (olddecl)))
2470 {
2471 /* If you declare a built-in or predefined function name as static,
2472 the old definition is overridden, but optionally warn this was a
2473 bad choice of name. Ditto for overloads. */
2474 if (! TREE_PUBLIC (newdecl)
2475 || (TREE_CODE (newdecl) == FUNCTION_DECL
2476 && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl)))
2477 {
2478 if (warn_shadow)
2479 cp_warning ("shadowing %s function `%#D'",
2480 DECL_BUILT_IN (olddecl) ? "built-in" : "library",
2481 olddecl);
2482 /* Discard the old built-in function. */
2483 return 0;
2484 }
2485 else if (! types_match)
2486 {
2487 if (TREE_CODE (newdecl) != FUNCTION_DECL)
2488 {
2489 /* If the built-in is not ansi, then programs can override
2490 it even globally without an error. */
2491 if (! DECL_BUILT_IN (olddecl))
2492 cp_warning ("library function `%#D' redeclared as non-function `%#D'",
2493 olddecl, newdecl);
2494 else
2495 {
2496 cp_error ("declaration of `%#D'", newdecl);
2497 cp_error ("conflicts with built-in declaration `%#D'",
2498 olddecl);
2499 }
2500 return 0;
2501 }
2502
2503 cp_warning ("declaration of `%#D'", newdecl);
2504 cp_warning ("conflicts with built-in declaration `%#D'",
2505 olddecl);
2506 }
2507 }
2508 else if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
2509 {
2510 if ((TREE_CODE (newdecl) == FUNCTION_DECL
2511 && DECL_FUNCTION_TEMPLATE_P (olddecl))
2512 || (TREE_CODE (olddecl) == FUNCTION_DECL
2513 && DECL_FUNCTION_TEMPLATE_P (newdecl)))
2514 return 0;
2515
2516 cp_error ("`%#D' redeclared as different kind of symbol", newdecl);
2517 if (TREE_CODE (olddecl) == TREE_LIST)
2518 olddecl = TREE_VALUE (olddecl);
2519 cp_error_at ("previous declaration of `%#D'", olddecl);
2520
2521 /* New decl is completely inconsistent with the old one =>
2522 tell caller to replace the old one. */
2523
2524 return 0;
2525 }
2526 else if (!types_match)
2527 {
2528 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
2529 {
2530 /* The name of a class template may not be declared to refer to
2531 any other template, class, function, object, namespace, value,
2532 or type in the same scope. */
2533 if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == TYPE_DECL
2534 || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
2535 {
2536 cp_error ("declaration of template `%#D'", newdecl);
2537 cp_error_at ("conflicts with previous declaration `%#D'",
2538 olddecl);
2539 }
2540 else if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == FUNCTION_DECL
2541 && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
2542 && compparms (TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl))),
2543 TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl))), 3)
2544 && comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
2545 DECL_TEMPLATE_PARMS (olddecl)))
2546 {
2547 cp_error ("new declaration `%#D'", newdecl);
2548 cp_error_at ("ambiguates old declaration `%#D'", olddecl);
2549 }
2550 return 0;
2551 }
2552 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2553 {
2554 if (DECL_LANGUAGE (newdecl) == lang_c
2555 && DECL_LANGUAGE (olddecl) == lang_c)
2556 {
2557 cp_error ("declaration of C function `%#D' conflicts with",
2558 newdecl);
2559 cp_error_at ("previous declaration `%#D' here", olddecl);
2560 }
2561 else if (compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
2562 TYPE_ARG_TYPES (TREE_TYPE (olddecl)), 3))
2563 {
2564 cp_error ("new declaration `%#D'", newdecl);
2565 cp_error_at ("ambiguates old declaration `%#D'", olddecl);
2566 }
2567 else
2568 return 0;
2569 }
2570
2571 /* Already complained about this, so don't do so again. */
2572 else if (current_class_type == NULL_TREE
2573 || IDENTIFIER_ERROR_LOCUS (DECL_ASSEMBLER_NAME (newdecl)) != current_class_type)
2574 {
2575 cp_error ("conflicting types for `%#D'", newdecl);
2576 cp_error_at ("previous declaration as `%#D'", olddecl);
2577 }
2578 }
2579 else if (TREE_CODE (newdecl) == FUNCTION_DECL
2580 && ((DECL_TEMPLATE_SPECIALIZATION (olddecl)
2581 && (!DECL_TEMPLATE_INFO (newdecl)
2582 || (DECL_TI_TEMPLATE (newdecl)
2583 != DECL_TI_TEMPLATE (olddecl))))
2584 || (DECL_TEMPLATE_SPECIALIZATION (newdecl)
2585 && (!DECL_TEMPLATE_INFO (olddecl)
2586 || (DECL_TI_TEMPLATE (olddecl)
2587 != DECL_TI_TEMPLATE (newdecl))))))
2588 /* It's OK to have a template specialization and a non-template
2589 with the same type, or to have specializations of two
2590 different templates with the same type. Note that if one is a
2591 specialization, and the other is an instantiation of the same
2592 template, that we do not exit at this point. That situation
2593 can occur if we instantiate a template class, and then
2594 specialize one of its methods. This situation is legal, but
2595 the declarations must be merged in the usual way. */
2596 return 0;
2597 else if (TREE_CODE (newdecl) == FUNCTION_DECL
2598 && ((DECL_TEMPLATE_INSTANTIATION (olddecl)
2599 && !DECL_USE_TEMPLATE (newdecl))
2600 || (DECL_TEMPLATE_INSTANTIATION (newdecl)
2601 && !DECL_USE_TEMPLATE (olddecl))))
2602 /* One of the declarations is a template instantiation, and the
2603 other is not a template at all. That's OK. */
2604 return 0;
2605 else
2606 {
2607 char *errmsg = redeclaration_error_message (newdecl, olddecl);
2608 if (errmsg)
2609 {
2610 cp_error (errmsg, newdecl);
2611 if (DECL_NAME (olddecl) != NULL_TREE)
2612 cp_error_at ((DECL_INITIAL (olddecl)
2613 && current_binding_level == global_binding_level)
2614 ? "`%#D' previously defined here"
2615 : "`%#D' previously declared here", olddecl);
2616 }
2617 else if (TREE_CODE (olddecl) == FUNCTION_DECL
2618 && DECL_INITIAL (olddecl) != NULL_TREE
2619 && TYPE_ARG_TYPES (TREE_TYPE (olddecl)) == NULL_TREE
2620 && TYPE_ARG_TYPES (TREE_TYPE (newdecl)) != NULL_TREE)
2621 {
2622 /* Prototype decl follows defn w/o prototype. */
2623 cp_warning_at ("prototype for `%#D'", newdecl);
2624 cp_warning_at ("follows non-prototype definition here", olddecl);
2625 }
2626 else if (TREE_CODE (olddecl) == FUNCTION_DECL
2627 && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl))
2628 {
2629 /* extern "C" int foo ();
2630 int foo () { bar (); }
2631 is OK. */
2632 if (current_lang_stack == current_lang_base)
2633 DECL_LANGUAGE (newdecl) = DECL_LANGUAGE (olddecl);
2634 else
2635 {
2636 cp_error_at ("previous declaration of `%#D' with %L linkage",
2637 olddecl, DECL_LANGUAGE (olddecl));
2638 cp_error ("conflicts with new declaration with %L linkage",
2639 DECL_LANGUAGE (newdecl));
2640 }
2641 }
2642
2643 if (DECL_LANG_SPECIFIC (olddecl) && DECL_USE_TEMPLATE (olddecl))
2644 ;
2645 else if (TREE_CODE (olddecl) == FUNCTION_DECL)
2646 {
2647 tree t1 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
2648 tree t2 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
2649 int i = 1;
2650
2651 if (TREE_CODE (TREE_TYPE (newdecl)) == METHOD_TYPE)
2652 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2);
2653
2654 for (; t1 && t1 != void_list_node;
2655 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2), i++)
2656 if (TREE_PURPOSE (t1) && TREE_PURPOSE (t2))
2657 {
2658 if (1 == simple_cst_equal (TREE_PURPOSE (t1),
2659 TREE_PURPOSE (t2)))
2660 {
2661 if (pedantic)
2662 {
2663 cp_pedwarn ("default argument given for parameter %d of `%#D'",
2664 i, newdecl);
2665 cp_pedwarn_at ("after previous specification in `%#D'",
2666 olddecl);
2667 }
2668 }
2669 else
2670 {
2671 cp_error ("default argument given for parameter %d of `%#D'",
2672 i, newdecl);
2673 cp_error_at ("after previous specification in `%#D'",
2674 olddecl);
2675 }
2676 }
2677
2678 if (DECL_THIS_INLINE (newdecl) && ! DECL_THIS_INLINE (olddecl)
2679 && TREE_ADDRESSABLE (olddecl) && warn_inline)
2680 {
2681 cp_warning ("`%#D' was used before it was declared inline",
2682 newdecl);
2683 cp_warning_at ("previous non-inline declaration here",
2684 olddecl);
2685 }
2686 }
2687 /* These bits are logically part of the type for non-functions. */
2688 else if (TREE_READONLY (newdecl) != TREE_READONLY (olddecl)
2689 || TREE_THIS_VOLATILE (newdecl) != TREE_THIS_VOLATILE (olddecl))
2690 {
2691 cp_pedwarn ("type qualifiers for `%#D'", newdecl);
2692 cp_pedwarn_at ("conflict with previous decl `%#D'", olddecl);
2693 }
2694 }
2695
2696 /* If new decl is `static' and an `extern' was seen previously,
2697 warn about it. */
2698 warn_extern_redeclared_static (newdecl, olddecl);
2699
2700 /* We have committed to returning 1 at this point. */
2701 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2702 {
2703 /* Now that functions must hold information normally held
2704 by field decls, there is extra work to do so that
2705 declaration information does not get destroyed during
2706 definition. */
2707 if (DECL_VINDEX (olddecl))
2708 DECL_VINDEX (newdecl) = DECL_VINDEX (olddecl);
2709 if (DECL_CONTEXT (olddecl))
2710 DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
2711 if (DECL_CLASS_CONTEXT (olddecl))
2712 DECL_CLASS_CONTEXT (newdecl) = DECL_CLASS_CONTEXT (olddecl);
2713 if (DECL_CHAIN (newdecl) == NULL_TREE)
2714 DECL_CHAIN (newdecl) = DECL_CHAIN (olddecl);
2715 if (DECL_PENDING_INLINE_INFO (newdecl) == (struct pending_inline *)0)
2716 DECL_PENDING_INLINE_INFO (newdecl) = DECL_PENDING_INLINE_INFO (olddecl);
2717 DECL_STATIC_CONSTRUCTOR (newdecl) |= DECL_STATIC_CONSTRUCTOR (olddecl);
2718 DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
2719 DECL_ABSTRACT_VIRTUAL_P (newdecl) |= DECL_ABSTRACT_VIRTUAL_P (olddecl);
2720 DECL_VIRTUAL_P (newdecl) |= DECL_VIRTUAL_P (olddecl);
2721 }
2722
2723 /* Deal with C++: must preserve virtual function table size. */
2724 if (TREE_CODE (olddecl) == TYPE_DECL)
2725 {
2726 register tree newtype = TREE_TYPE (newdecl);
2727 register tree oldtype = TREE_TYPE (olddecl);
2728
2729 if (newtype != error_mark_node && oldtype != error_mark_node
2730 && TYPE_LANG_SPECIFIC (newtype) && TYPE_LANG_SPECIFIC (oldtype))
2731 {
2732 CLASSTYPE_VSIZE (newtype) = CLASSTYPE_VSIZE (oldtype);
2733 CLASSTYPE_FRIEND_CLASSES (newtype)
2734 = CLASSTYPE_FRIEND_CLASSES (oldtype);
2735 }
2736 }
2737
2738 /* Special handling ensues if new decl is a function definition. */
2739 new_defines_function = (TREE_CODE (newdecl) == FUNCTION_DECL
2740 && DECL_INITIAL (newdecl) != NULL_TREE);
2741
2742 /* Optionally warn about more than one declaration for the same name,
2743 but don't warn about a function declaration followed by a definition. */
2744 if (warn_redundant_decls
2745 && ! DECL_ARTIFICIAL (olddecl)
2746 && !(new_defines_function && DECL_INITIAL (olddecl) == NULL_TREE)
2747 /* Don't warn about extern decl followed by (tentative) definition. */
2748 && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl)))
2749 {
2750 cp_warning ("redundant redeclaration of `%D' in same scope", newdecl);
2751 cp_warning_at ("previous declaration of `%D'", olddecl);
2752 }
2753
2754 /* Copy all the DECL_... slots specified in the new decl
2755 except for any that we copy here from the old type. */
2756
2757 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
2758 {
2759 if (DECL_INITIAL (DECL_TEMPLATE_RESULT (olddecl)) == NULL_TREE)
2760 {
2761 TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
2762 DECL_TEMPLATE_RESULT (olddecl) = DECL_TEMPLATE_RESULT (newdecl);
2763 DECL_TEMPLATE_PARMS (olddecl) = DECL_TEMPLATE_PARMS (newdecl);
2764 }
2765 return 1;
2766 }
2767
2768 if (types_match)
2769 {
2770 /* Automatically handles default parameters. */
2771 tree oldtype = TREE_TYPE (olddecl);
2772 tree newtype;
2773
2774 /* Make sure we put the new type in the same obstack as the old one. */
2775 if (oldtype)
2776 push_obstacks (TYPE_OBSTACK (oldtype), TYPE_OBSTACK (oldtype));
2777 else
2778 {
2779 push_obstacks_nochange ();
2780 end_temporary_allocation ();
2781 }
2782
2783 /* Merge the data types specified in the two decls. */
2784 newtype = common_type (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
2785
2786 if (TREE_CODE (newdecl) == VAR_DECL)
2787 DECL_THIS_EXTERN (newdecl) |= DECL_THIS_EXTERN (olddecl);
2788 /* Do this after calling `common_type' so that default
2789 parameters don't confuse us. */
2790 else if (TREE_CODE (newdecl) == FUNCTION_DECL
2791 && (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl))
2792 != TYPE_RAISES_EXCEPTIONS (TREE_TYPE (olddecl))))
2793 {
2794 TREE_TYPE (newdecl) = build_exception_variant (newtype,
2795 TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl)));
2796 TREE_TYPE (olddecl) = build_exception_variant (newtype,
2797 TYPE_RAISES_EXCEPTIONS (oldtype));
2798
2799 if ((pedantic || (! DECL_IN_SYSTEM_HEADER (olddecl)
2800 && DECL_SOURCE_LINE (olddecl) != 0))
2801 && flag_exceptions
2802 && ! compexcepttypes (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
2803 {
2804 cp_pedwarn ("declaration of `%D' throws different exceptions",
2805 newdecl);
2806 cp_pedwarn_at ("previous declaration here", olddecl);
2807 }
2808 }
2809 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
2810
2811 /* Lay the type out, unless already done. */
2812 if (oldtype != TREE_TYPE (newdecl)
2813 && TREE_TYPE (newdecl) != error_mark_node
2814 && !(processing_template_decl && uses_template_parms (newdecl)))
2815 layout_type (TREE_TYPE (newdecl));
2816
2817 if ((TREE_CODE (newdecl) == VAR_DECL
2818 || TREE_CODE (newdecl) == PARM_DECL
2819 || TREE_CODE (newdecl) == RESULT_DECL
2820 || TREE_CODE (newdecl) == FIELD_DECL
2821 || TREE_CODE (newdecl) == TYPE_DECL)
2822 && !(processing_template_decl && uses_template_parms (newdecl)))
2823 layout_decl (newdecl, 0);
2824
2825 /* Merge the type qualifiers. */
2826 if (TREE_READONLY (newdecl))
2827 TREE_READONLY (olddecl) = 1;
2828 if (TREE_THIS_VOLATILE (newdecl))
2829 TREE_THIS_VOLATILE (olddecl) = 1;
2830
2831 /* Merge the initialization information. */
2832 if (DECL_INITIAL (newdecl) == NULL_TREE
2833 && DECL_INITIAL (olddecl) != NULL_TREE)
2834 {
2835 DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
2836 DECL_SOURCE_FILE (newdecl) = DECL_SOURCE_FILE (olddecl);
2837 DECL_SOURCE_LINE (newdecl) = DECL_SOURCE_LINE (olddecl);
2838 }
2839
2840 /* Merge the section attribute.
2841 We want to issue an error if the sections conflict but that must be
2842 done later in decl_attributes since we are called before attributes
2843 are assigned. */
2844 if (DECL_SECTION_NAME (newdecl) == NULL_TREE)
2845 DECL_SECTION_NAME (newdecl) = DECL_SECTION_NAME (olddecl);
2846
2847 /* Keep the old rtl since we can safely use it, unless it's the
2848 call to abort() used for abstract virtuals. */
2849 if ((DECL_LANG_SPECIFIC (olddecl)
2850 && !DECL_ABSTRACT_VIRTUAL_P (olddecl))
2851 || DECL_RTL (olddecl) != DECL_RTL (abort_fndecl))
2852 DECL_RTL (newdecl) = DECL_RTL (olddecl);
2853
2854 pop_obstacks ();
2855 }
2856 /* If cannot merge, then use the new type and qualifiers,
2857 and don't preserve the old rtl. */
2858 else
2859 {
2860 /* Clean out any memory we had of the old declaration. */
2861 tree oldstatic = value_member (olddecl, static_aggregates);
2862 if (oldstatic)
2863 TREE_VALUE (oldstatic) = error_mark_node;
2864
2865 TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
2866 TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
2867 TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
2868 TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
2869 }
2870
2871 /* Merge the storage class information. */
2872 DECL_WEAK (newdecl) |= DECL_WEAK (olddecl);
2873 DECL_ONE_ONLY (newdecl) |= DECL_ONE_ONLY (olddecl);
2874 TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
2875 TREE_STATIC (olddecl) = TREE_STATIC (newdecl) |= TREE_STATIC (olddecl);
2876 if (! DECL_EXTERNAL (olddecl))
2877 DECL_EXTERNAL (newdecl) = 0;
2878
2879 if (DECL_LANG_SPECIFIC (newdecl))
2880 {
2881 DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl);
2882 DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl);
2883 DECL_COMDAT (newdecl) |= DECL_COMDAT (olddecl);
2884 }
2885
2886 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2887 {
2888 if (DECL_TEMPLATE_INSTANTIATION (olddecl)
2889 && !DECL_TEMPLATE_INSTANTIATION (newdecl))
2890 {
2891 /* If newdecl is not a specialization, then it is not a
2892 template-related function at all. And that means that we
2893 shoud have exited above, returning 0. */
2894 my_friendly_assert (DECL_TEMPLATE_SPECIALIZATION (newdecl),
2895 0);
2896
2897 if (TREE_USED (olddecl))
2898 /* From [temp.expl.spec]:
2899
2900 If a template, a member template or the member of a class
2901 template is explicitly specialized then that
2902 specialization shall be declared before the first use of
2903 that specialization that would cause an implicit
2904 instantiation to take place, in every translation unit in
2905 which such a use occurs. */
2906 cp_error ("explicit specialization of %D after first use",
2907 olddecl);
2908
2909 SET_DECL_TEMPLATE_SPECIALIZATION (olddecl);
2910 }
2911 DECL_THIS_INLINE (newdecl) |= DECL_THIS_INLINE (olddecl);
2912
2913 /* If either decl says `inline', this fn is inline, unless its
2914 definition was passed already. */
2915 if (DECL_INLINE (newdecl) && DECL_INITIAL (olddecl) == NULL_TREE)
2916 DECL_INLINE (olddecl) = 1;
2917 DECL_INLINE (newdecl) = DECL_INLINE (olddecl);
2918
2919 if (! types_match)
2920 {
2921 DECL_LANGUAGE (olddecl) = DECL_LANGUAGE (newdecl);
2922 DECL_ASSEMBLER_NAME (olddecl) = DECL_ASSEMBLER_NAME (newdecl);
2923 DECL_RTL (olddecl) = DECL_RTL (newdecl);
2924 }
2925 if (! types_match || new_defines_function)
2926 {
2927 /* These need to be copied so that the names are available. */
2928 DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
2929 DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
2930 }
2931 if (new_defines_function)
2932 /* If defining a function declared with other language
2933 linkage, use the previously declared language linkage. */
2934 DECL_LANGUAGE (newdecl) = DECL_LANGUAGE (olddecl);
2935 else
2936 {
2937 /* If redeclaring a builtin function, and not a definition,
2938 it stays built in. */
2939 if (DECL_BUILT_IN (olddecl))
2940 {
2941 DECL_BUILT_IN (newdecl) = 1;
2942 DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
2943 /* If we're keeping the built-in definition, keep the rtl,
2944 regardless of declaration matches. */
2945 DECL_RTL (newdecl) = DECL_RTL (olddecl);
2946 }
2947 else
2948 DECL_FRAME_SIZE (newdecl) = DECL_FRAME_SIZE (olddecl);
2949
2950 DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
2951 if ((DECL_SAVED_INSNS (newdecl) = DECL_SAVED_INSNS (olddecl)))
2952 /* Previously saved insns go together with
2953 the function's previous definition. */
2954 DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
2955 /* Don't clear out the arguments if we're redefining a function. */
2956 if (DECL_ARGUMENTS (olddecl))
2957 DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
2958 }
2959 if (DECL_LANG_SPECIFIC (olddecl))
2960 DECL_MAIN_VARIANT (newdecl) = DECL_MAIN_VARIANT (olddecl);
2961 }
2962
2963 if (TREE_CODE (newdecl) == NAMESPACE_DECL)
2964 {
2965 NAMESPACE_LEVEL (newdecl) = NAMESPACE_LEVEL (olddecl);
2966 }
2967
2968 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
2969 {
2970 DECL_TEMPLATE_SPECIALIZATIONS (newdecl)
2971 = DECL_TEMPLATE_SPECIALIZATIONS (olddecl);
2972 if (DECL_CHAIN (newdecl) == NULL_TREE)
2973 DECL_CHAIN (newdecl) = DECL_CHAIN (olddecl);
2974 }
2975
2976 /* Now preserve various other info from the definition. */
2977 TREE_ADDRESSABLE (newdecl) = TREE_ADDRESSABLE (olddecl);
2978 TREE_ASM_WRITTEN (newdecl) = TREE_ASM_WRITTEN (olddecl);
2979 DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
2980 DECL_ASSEMBLER_NAME (newdecl) = DECL_ASSEMBLER_NAME (olddecl);
2981
2982 /* Don't really know how much of the language-specific
2983 values we should copy from old to new. */
2984 if (DECL_LANG_SPECIFIC (olddecl))
2985 {
2986 DECL_IN_AGGR_P (newdecl) = DECL_IN_AGGR_P (olddecl);
2987 DECL_ACCESS (newdecl) = DECL_ACCESS (olddecl);
2988 DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl);
2989 if (DECL_TEMPLATE_INFO (newdecl) == NULL_TREE)
2990 {
2991 DECL_TEMPLATE_INFO (newdecl) = DECL_TEMPLATE_INFO (olddecl);
2992 DECL_USE_TEMPLATE (newdecl) = DECL_USE_TEMPLATE (olddecl);
2993 }
2994 }
2995
2996 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2997 {
2998 int function_size;
2999 struct lang_decl *ol = DECL_LANG_SPECIFIC (olddecl);
3000 struct lang_decl *nl = DECL_LANG_SPECIFIC (newdecl);
3001
3002 function_size = sizeof (struct tree_decl);
3003
3004 bcopy ((char *) newdecl + sizeof (struct tree_common),
3005 (char *) olddecl + sizeof (struct tree_common),
3006 function_size - sizeof (struct tree_common));
3007
3008 /* Can we safely free the storage used by newdecl? */
3009
3010 #define ROUND(x) ((x + obstack_alignment_mask (&permanent_obstack)) \
3011 & ~ obstack_alignment_mask (&permanent_obstack))
3012
3013 if (DECL_TEMPLATE_INSTANTIATION (newdecl))
3014 {
3015 /* If newdecl is a template instantiation, it is possible that
3016 the following sequence of events has occurred:
3017
3018 o A friend function was declared in a class template. The
3019 class template was instantiated.
3020
3021 o The instantiation of the friend declaration was
3022 recorded on the instantiation list, and is newdecl.
3023
3024 o Later, however, instantiate_class_template called pushdecl
3025 on the newdecl to perform name injection. But, pushdecl in
3026 turn called duplicate_decls when it discovered that another
3027 declaration of a global function with the same name already
3028 existed.
3029
3030 o Here, in duplicate_decls, we decided to clobber newdecl.
3031
3032 If we're going to do that, we'd better make sure that
3033 olddecl, and not newdecl, is on the list of
3034 instantiations so that if we try to do the instantiation
3035 again we won't get the clobbered declaration. */
3036
3037 tree tmpl = DECL_TI_TEMPLATE (newdecl);
3038 tree decls = DECL_TEMPLATE_SPECIALIZATIONS (tmpl);
3039
3040 for (; decls; decls = TREE_CHAIN (decls))
3041 if (TREE_VALUE (decls) == newdecl)
3042 TREE_VALUE (decls) = olddecl;
3043 }
3044
3045 if ((char *)newdecl + ROUND (function_size)
3046 + ROUND (sizeof (struct lang_decl))
3047 == obstack_next_free (&permanent_obstack))
3048 {
3049 DECL_MAIN_VARIANT (newdecl) = olddecl;
3050 DECL_LANG_SPECIFIC (olddecl) = ol;
3051 bcopy ((char *)nl, (char *)ol, sizeof (struct lang_decl));
3052
3053 obstack_free (&permanent_obstack, newdecl);
3054 }
3055 else if (LANG_DECL_PERMANENT (ol) && ol != nl)
3056 {
3057 if (DECL_MAIN_VARIANT (olddecl) == olddecl)
3058 {
3059 /* Save these lang_decls that would otherwise be lost. */
3060 extern tree free_lang_decl_chain;
3061 tree free_lang_decl = (tree) ol;
3062
3063 if (DECL_LANG_SPECIFIC (olddecl) == ol)
3064 abort ();
3065
3066 TREE_CHAIN (free_lang_decl) = free_lang_decl_chain;
3067 free_lang_decl_chain = free_lang_decl;
3068 }
3069 else
3070 {
3071 /* Storage leak. */;
3072 }
3073 }
3074 }
3075 else
3076 {
3077 bcopy ((char *) newdecl + sizeof (struct tree_common),
3078 (char *) olddecl + sizeof (struct tree_common),
3079 sizeof (struct tree_decl) - sizeof (struct tree_common)
3080 + tree_code_length [(int)TREE_CODE (newdecl)] * sizeof (char *));
3081 }
3082
3083 DECL_UID (olddecl) = olddecl_uid;
3084 if (olddecl_friend)
3085 DECL_FRIEND_P (olddecl) = 1;
3086
3087 return 1;
3088 }
3089
3090 /* Record a decl-node X as belonging to the current lexical scope.
3091 Check for errors (such as an incompatible declaration for the same
3092 name already seen in the same scope).
3093
3094 Returns either X or an old decl for the same name.
3095 If an old decl is returned, it may have been smashed
3096 to agree with what X says. */
3097
3098 tree
3099 pushdecl (x)
3100 tree x;
3101 {
3102 register tree t;
3103 register tree name = DECL_ASSEMBLER_NAME (x);
3104 register struct binding_level *b = current_binding_level;
3105
3106 if (x != current_function_decl
3107 /* Don't change DECL_CONTEXT of virtual methods. */
3108 && (TREE_CODE (x) != FUNCTION_DECL || !DECL_VIRTUAL_P (x))
3109 && ! DECL_CONTEXT (x))
3110 DECL_CONTEXT (x) = current_function_decl;
3111 /* A local declaration for a function doesn't constitute nesting. */
3112 if (TREE_CODE (x) == FUNCTION_DECL && DECL_INITIAL (x) == 0)
3113 DECL_CONTEXT (x) = 0;
3114
3115 /* Type are looked up using the DECL_NAME, as that is what the rest of the
3116 compiler wants to use. */
3117 if (TREE_CODE (x) == TYPE_DECL || TREE_CODE (x) == VAR_DECL
3118 || TREE_CODE (x) == NAMESPACE_DECL || TREE_CODE (x) == TEMPLATE_TYPE_PARM
3119 || TREE_CODE (x) == TEMPLATE_TEMPLATE_PARM)
3120 name = DECL_NAME (x);
3121
3122 if (name)
3123 {
3124 #if 0
3125 /* Not needed...see below. */
3126 char *file;
3127 int line;
3128 #endif
3129 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
3130 name = TREE_OPERAND (name, 0);
3131
3132 t = lookup_name_current_level (name);
3133 if (t == error_mark_node)
3134 {
3135 /* error_mark_node is 0 for a while during initialization! */
3136 t = NULL_TREE;
3137 cp_error_at ("`%#D' used prior to declaration", x);
3138 }
3139
3140 else if (t != NULL_TREE)
3141 {
3142 #if 0
3143 /* This is turned off until I have time to do it right (bpk). */
3144 /* With the code below that uses it... */
3145 file = DECL_SOURCE_FILE (t);
3146 line = DECL_SOURCE_LINE (t);
3147 #endif
3148 if (TREE_CODE (t) == PARM_DECL)
3149 {
3150 if (DECL_CONTEXT (t) == NULL_TREE)
3151 fatal ("parse errors have confused me too much");
3152
3153 /* Check for duplicate params. */
3154 if (duplicate_decls (x, t))
3155 return t;
3156 }
3157 else if (((TREE_CODE (x) == FUNCTION_DECL && DECL_LANGUAGE (x) == lang_c)
3158 || DECL_FUNCTION_TEMPLATE_P (x))
3159 && is_overloaded_fn (t))
3160 /* don't do anything just yet */;
3161 else if (t == wchar_decl_node)
3162 {
3163 if (pedantic && ! DECL_IN_SYSTEM_HEADER (x))
3164 cp_pedwarn ("redeclaration of wchar_t as `%T'", TREE_TYPE (x));
3165
3166 /* Throw away the redeclaration. */
3167 return t;
3168 }
3169 else if (TREE_CODE (t) != TREE_CODE (x))
3170 {
3171 if ((TREE_CODE (t) == TYPE_DECL && DECL_ARTIFICIAL (t)
3172 && TREE_CODE (x) != TYPE_DECL
3173 && ! (TREE_CODE (x) == TEMPLATE_DECL
3174 && TREE_CODE (DECL_TEMPLATE_RESULT (x)) == TYPE_DECL))
3175 || (TREE_CODE (x) == TYPE_DECL && DECL_ARTIFICIAL (x)
3176 && TREE_CODE (t) != TYPE_DECL
3177 && ! (TREE_CODE (t) == TEMPLATE_DECL
3178 && (TREE_CODE (DECL_TEMPLATE_RESULT (t))
3179 == TYPE_DECL))))
3180 {
3181 /* We do nothing special here, because C++ does such nasty
3182 things with TYPE_DECLs. Instead, just let the TYPE_DECL
3183 get shadowed, and know that if we need to find a TYPE_DECL
3184 for a given name, we can look in the IDENTIFIER_TYPE_VALUE
3185 slot of the identifier. */
3186 ;
3187 }
3188 else if (duplicate_decls (x, t))
3189 return t;
3190 }
3191 else if (duplicate_decls (x, t))
3192 {
3193 #if 0
3194 /* This is turned off until I have time to do it right (bpk). */
3195
3196 /* Also warn if they did a prototype with `static' on it, but
3197 then later left the `static' off. */
3198 if (! TREE_PUBLIC (name) && TREE_PUBLIC (x))
3199 {
3200 if (DECL_LANG_SPECIFIC (t) && DECL_FRIEND_P (t))
3201 return t;
3202
3203 if (extra_warnings)
3204 {
3205 cp_warning ("`static' missing from declaration of `%D'",
3206 t);
3207 warning_with_file_and_line (file, line,
3208 "previous declaration of `%s'",
3209 decl_as_string (t, 0));
3210 }
3211
3212 /* Now fix things so it'll do what they expect. */
3213 if (current_function_decl)
3214 TREE_PUBLIC (current_function_decl) = 0;
3215 }
3216 /* Due to interference in memory reclamation (X may be
3217 obstack-deallocated at this point), we must guard against
3218 one really special case. [jason: This should be handled
3219 by start_function] */
3220 if (current_function_decl == x)
3221 current_function_decl = t;
3222 #endif
3223 if (TREE_CODE (t) == TYPE_DECL)
3224 SET_IDENTIFIER_TYPE_VALUE (name, TREE_TYPE (t));
3225 else if (TREE_CODE (t) == FUNCTION_DECL)
3226 check_default_args (t);
3227
3228 return t;
3229 }
3230 }
3231
3232 if (TREE_CODE (x) == FUNCTION_DECL && ! DECL_FUNCTION_MEMBER_P (x))
3233 {
3234 t = push_overloaded_decl (x, 1);
3235 if (t != x || DECL_LANGUAGE (x) == lang_c)
3236 return t;
3237 }
3238 else if (DECL_FUNCTION_TEMPLATE_P (x) && DECL_CONTEXT (x) == NULL_TREE)
3239 return push_overloaded_decl (x, 0);
3240
3241 /* If declaring a type as a typedef, and the type has no known
3242 typedef name, install this TYPE_DECL as its typedef name. */
3243 if (TREE_CODE (x) == TYPE_DECL)
3244 {
3245 tree type = TREE_TYPE (x);
3246 tree name = (type != error_mark_node) ? TYPE_NAME (type) : x;
3247
3248 if (name == NULL_TREE || TREE_CODE (name) != TYPE_DECL)
3249 {
3250 /* If these are different names, and we're at the global
3251 binding level, make two equivalent definitions. */
3252 name = x;
3253 if (global_bindings_p ())
3254 TYPE_NAME (type) = x;
3255 }
3256 my_friendly_assert (TREE_CODE (name) == TYPE_DECL, 140);
3257
3258 if (type != error_mark_node
3259 && TYPE_NAME (type)
3260 && TYPE_IDENTIFIER (type))
3261 set_identifier_type_value_with_scope (DECL_NAME (x), type, b);
3262 }
3263
3264 /* Multiple external decls of the same identifier ought to match.
3265
3266 We get warnings about inline functions where they are defined.
3267 We get warnings about other functions from push_overloaded_decl.
3268
3269 Avoid duplicate warnings where they are used. */
3270 if (TREE_PUBLIC (x) && TREE_CODE (x) != FUNCTION_DECL)
3271 {
3272 tree decl;
3273
3274 if (IDENTIFIER_GLOBAL_VALUE (name) != NULL_TREE
3275 && (DECL_EXTERNAL (IDENTIFIER_GLOBAL_VALUE (name))
3276 || TREE_PUBLIC (IDENTIFIER_GLOBAL_VALUE (name))))
3277 decl = IDENTIFIER_GLOBAL_VALUE (name);
3278 else
3279 decl = NULL_TREE;
3280
3281 if (decl
3282 /* If different sort of thing, we already gave an error. */
3283 && TREE_CODE (decl) == TREE_CODE (x)
3284 && ! comptypes (TREE_TYPE (x), TREE_TYPE (decl), 1))
3285 {
3286 cp_pedwarn ("type mismatch with previous external decl", x);
3287 cp_pedwarn_at ("previous external decl of `%#D'", decl);
3288 }
3289 }
3290
3291 /* This name is new in its binding level.
3292 Install the new declaration and return it. */
3293 if (b == global_binding_level)
3294 {
3295 /* Install a global value. */
3296
3297 /* If the first global decl has external linkage,
3298 warn if we later see static one. */
3299 if (IDENTIFIER_GLOBAL_VALUE (name) == NULL_TREE && TREE_PUBLIC (x))
3300 TREE_PUBLIC (name) = 1;
3301
3302 /* Don't install an artificial TYPE_DECL if we already have
3303 another _DECL with that name. */
3304 if (TREE_CODE (x) != TYPE_DECL
3305 || t == NULL_TREE
3306 || ! DECL_ARTIFICIAL (x))
3307 IDENTIFIER_GLOBAL_VALUE (name) = x;
3308
3309 /* Don't forget if the function was used via an implicit decl. */
3310 if (IDENTIFIER_IMPLICIT_DECL (name)
3311 && TREE_USED (IDENTIFIER_IMPLICIT_DECL (name)))
3312 TREE_USED (x) = 1;
3313
3314 /* Don't forget if its address was taken in that way. */
3315 if (IDENTIFIER_IMPLICIT_DECL (name)
3316 && TREE_ADDRESSABLE (IDENTIFIER_IMPLICIT_DECL (name)))
3317 TREE_ADDRESSABLE (x) = 1;
3318
3319 /* Warn about mismatches against previous implicit decl. */
3320 if (IDENTIFIER_IMPLICIT_DECL (name) != NULL_TREE
3321 /* If this real decl matches the implicit, don't complain. */
3322 && ! (TREE_CODE (x) == FUNCTION_DECL
3323 && TREE_TYPE (TREE_TYPE (x)) == integer_type_node))
3324 cp_warning
3325 ("`%D' was previously implicitly declared to return `int'", x);
3326
3327 /* If new decl is `static' and an `extern' was seen previously,
3328 warn about it. */
3329 if (x != NULL_TREE && t != NULL_TREE && decls_match (x, t))
3330 warn_extern_redeclared_static (x, t);
3331 }
3332 else
3333 {
3334 /* Here to install a non-global value. */
3335 tree oldlocal = IDENTIFIER_LOCAL_VALUE (name);
3336 tree oldglobal = IDENTIFIER_GLOBAL_VALUE (name);
3337
3338 /* Don't install an artificial TYPE_DECL if we already have
3339 another _DECL with that name. */
3340 if (TREE_CODE (x) != TYPE_DECL
3341 || t == NULL_TREE
3342 || ! DECL_ARTIFICIAL (x))
3343 {
3344 b->shadowed = tree_cons (name, oldlocal, b->shadowed);
3345 IDENTIFIER_LOCAL_VALUE (name) = x;
3346 }
3347
3348 /* If this is a TYPE_DECL, push it into the type value slot. */
3349 if (TREE_CODE (x) == TYPE_DECL)
3350 set_identifier_type_value_with_scope (name, TREE_TYPE (x), b);
3351
3352 /* Clear out any TYPE_DECL shadowed by a namespace so that
3353 we won't think this is a type. The C struct hack doesn't
3354 go through namespaces. */
3355 if (TREE_CODE (x) == NAMESPACE_DECL)
3356 set_identifier_type_value_with_scope (name, NULL_TREE, b);
3357
3358 /* If this is an extern function declaration, see if we
3359 have a global definition or declaration for the function. */
3360 if (oldlocal == NULL_TREE
3361 && DECL_EXTERNAL (x)
3362 && oldglobal != NULL_TREE
3363 && TREE_CODE (x) == FUNCTION_DECL
3364 && TREE_CODE (oldglobal) == FUNCTION_DECL)
3365 {
3366 /* We have one. Their types must agree. */
3367 if (decls_match (x, oldglobal))
3368 /* OK */;
3369 else
3370 {
3371 cp_warning ("extern declaration of `%#D' doesn't match", x);
3372 cp_warning_at ("global declaration `%#D'", oldglobal);
3373 }
3374 }
3375 /* If we have a local external declaration,
3376 and no file-scope declaration has yet been seen,
3377 then if we later have a file-scope decl it must not be static. */
3378 if (oldlocal == NULL_TREE
3379 && oldglobal == NULL_TREE
3380 && DECL_EXTERNAL (x)
3381 && TREE_PUBLIC (x))
3382 {
3383 TREE_PUBLIC (name) = 1;
3384 }
3385
3386 if (DECL_FROM_INLINE (x))
3387 /* Inline decls shadow nothing. */;
3388
3389 /* Warn if shadowing an argument at the top level of the body. */
3390 else if (oldlocal != NULL_TREE && !DECL_EXTERNAL (x)
3391 && TREE_CODE (oldlocal) == PARM_DECL
3392 && TREE_CODE (x) != PARM_DECL)
3393 {
3394 /* Go to where the parms should be and see if we
3395 find them there. */
3396 struct binding_level *b = current_binding_level->level_chain;
3397
3398 if (cleanup_label)
3399 b = b->level_chain;
3400
3401 /* ARM $8.3 */
3402 if (b->parm_flag == 1)
3403 cp_error ("declaration of `%#D' shadows a parameter", name);
3404 }
3405 else if (warn_shadow && oldlocal != NULL_TREE && b->is_for_scope
3406 && !DECL_DEAD_FOR_LOCAL (oldlocal))
3407 {
3408 warning ("variable `%s' shadows local",
3409 IDENTIFIER_POINTER (name));
3410 cp_warning_at (" this is the shadowed declaration", oldlocal);
3411 }
3412 /* Maybe warn if shadowing something else. */
3413 else if (warn_shadow && !DECL_EXTERNAL (x)
3414 /* No shadow warnings for internally generated vars. */
3415 && ! DECL_ARTIFICIAL (x)
3416 /* No shadow warnings for vars made for inlining. */
3417 && ! DECL_FROM_INLINE (x))
3418 {
3419 char *warnstring = NULL;
3420
3421 if (oldlocal != NULL_TREE && TREE_CODE (oldlocal) == PARM_DECL)
3422 warnstring = "declaration of `%s' shadows a parameter";
3423 else if (IDENTIFIER_CLASS_VALUE (name) != NULL_TREE
3424 && current_class_ptr
3425 && !TREE_STATIC (name))
3426 warnstring = "declaration of `%s' shadows a member of `this'";
3427 else if (oldlocal != NULL_TREE)
3428 warnstring = "declaration of `%s' shadows previous local";
3429 else if (oldglobal != NULL_TREE)
3430 warnstring = "declaration of `%s' shadows global declaration";
3431
3432 if (warnstring)
3433 warning (warnstring, IDENTIFIER_POINTER (name));
3434 }
3435 }
3436
3437 if (TREE_CODE (x) == FUNCTION_DECL)
3438 check_default_args (x);
3439
3440 /* Keep count of variables in this level with incomplete type. */
3441 if (TREE_CODE (x) == VAR_DECL
3442 && TREE_TYPE (x) != error_mark_node
3443 && ((TYPE_SIZE (TREE_TYPE (x)) == NULL_TREE
3444 && PROMOTES_TO_AGGR_TYPE (TREE_TYPE (x), ARRAY_TYPE))
3445 /* RTTI TD entries are created while defining the type_info. */
3446 || (TYPE_LANG_SPECIFIC (TREE_TYPE (x))
3447 && TYPE_BEING_DEFINED (TREE_TYPE (x)))))
3448 b->incomplete = tree_cons (NULL_TREE, x, b->incomplete);
3449 }
3450
3451 /* Put decls on list in reverse order.
3452 We will reverse them later if necessary. */
3453 TREE_CHAIN (x) = b->names;
3454 b->names = x;
3455 if (! (b != global_binding_level || TREE_PERMANENT (x)))
3456 my_friendly_abort (124);
3457
3458 return x;
3459 }
3460
3461 /* Same as pushdecl, but define X in binding-level LEVEL. We rely on the
3462 caller to set DECL_CONTEXT properly. */
3463
3464 static tree
3465 pushdecl_with_scope (x, level)
3466 tree x;
3467 struct binding_level *level;
3468 {
3469 register struct binding_level *b = current_binding_level;
3470 tree function_decl = current_function_decl;
3471
3472 current_function_decl = NULL_TREE;
3473 current_binding_level = level;
3474 x = pushdecl (x);
3475 current_binding_level = b;
3476 current_function_decl = function_decl;
3477 return x;
3478 }
3479
3480 /* Like pushdecl, only it places X in GLOBAL_BINDING_LEVEL,
3481 if appropriate. */
3482
3483 tree
3484 pushdecl_top_level (x)
3485 tree x;
3486 {
3487 register struct binding_level *b = inner_binding_level;
3488 register tree t = pushdecl_with_scope (x, global_binding_level);
3489
3490 /* Now, the type_shadowed stack may screw us. Munge it so it does
3491 what we want. */
3492 if (TREE_CODE (x) == TYPE_DECL)
3493 {
3494 tree name = DECL_NAME (x);
3495 tree newval;
3496 tree *ptr = (tree *)0;
3497 for (; b != global_binding_level; b = b->level_chain)
3498 {
3499 tree shadowed = b->type_shadowed;
3500 for (; shadowed; shadowed = TREE_CHAIN (shadowed))
3501 if (TREE_PURPOSE (shadowed) == name)
3502 {
3503 ptr = &TREE_VALUE (shadowed);
3504 /* Can't break out of the loop here because sometimes
3505 a binding level will have duplicate bindings for
3506 PT names. It's gross, but I haven't time to fix it. */
3507 }
3508 }
3509 newval = TREE_TYPE (x);
3510 if (ptr == (tree *)0)
3511 {
3512 /* @@ This shouldn't be needed. My test case "zstring.cc" trips
3513 up here if this is changed to an assertion. --KR */
3514 SET_IDENTIFIER_TYPE_VALUE (name, newval);
3515 }
3516 else
3517 {
3518 *ptr = newval;
3519 }
3520 }
3521 return t;
3522 }
3523
3524 /* Like push_overloaded_decl, only it places X in GLOBAL_BINDING_LEVEL,
3525 if appropriate. */
3526
3527 static void
3528 push_overloaded_decl_top_level (x, forget)
3529 tree x;
3530 int forget;
3531 {
3532 struct binding_level *b = current_binding_level;
3533
3534 current_binding_level = global_binding_level;
3535 push_overloaded_decl (x, forget);
3536 current_binding_level = b;
3537 }
3538
3539 /* Make the declaration of X appear in CLASS scope. */
3540
3541 tree
3542 pushdecl_class_level (x)
3543 tree x;
3544 {
3545 /* Don't use DECL_ASSEMBLER_NAME here! Everything that looks in class
3546 scope looks for the pre-mangled name. */
3547 register tree name = DECL_NAME (x);
3548
3549 if (name)
3550 {
3551 if (TYPE_BEING_DEFINED (current_class_type))
3552 {
3553 /* Check for inconsistent use of this name in the class body.
3554 Types, enums, and static vars are checked here; other
3555 members are checked in finish_struct. */
3556 tree icv = IDENTIFIER_CLASS_VALUE (name);
3557
3558 if (icv && icv != x
3559 /* Don't complain about inherited names. */
3560 && id_in_current_class (name)
3561 /* Or shadowed tags. */
3562 && !(TREE_CODE (icv) == TYPE_DECL
3563 && DECL_CONTEXT (icv) == current_class_type))
3564 {
3565 cp_error ("declaration of identifier `%D' as `%#D'", name, x);
3566 cp_error_at ("conflicts with previous use in class as `%#D'",
3567 icv);
3568 }
3569 }
3570
3571 push_class_level_binding (name, x);
3572 if (TREE_CODE (x) == TYPE_DECL)
3573 {
3574 set_identifier_type_value (name, TREE_TYPE (x));
3575 }
3576 }
3577 return x;
3578 }
3579
3580 #if 0
3581 /* This function is used to push the mangled decls for nested types into
3582 the appropriate scope. Previously pushdecl_top_level was used, but that
3583 is incorrect for members of local classes. */
3584
3585 void
3586 pushdecl_nonclass_level (x)
3587 tree x;
3588 {
3589 struct binding_level *b = current_binding_level;
3590
3591 my_friendly_assert (b->parm_flag != 2, 180);
3592
3593 #if 0
3594 /* Get out of template binding levels */
3595 while (b->pseudo_global)
3596 b = b->level_chain;
3597 #endif
3598
3599 pushdecl_with_scope (x, b);
3600 }
3601 #endif
3602
3603 /* Make the declaration(s) of X appear in CLASS scope
3604 under the name NAME. */
3605
3606 void
3607 push_class_level_binding (name, x)
3608 tree name;
3609 tree x;
3610 {
3611 /* The class_binding_level will be NULL if x is a template
3612 parameter name in a member template. */
3613 if (!class_binding_level)
3614 return;
3615
3616 if (TREE_CODE (x) == TYPE_DECL && DECL_ARTIFICIAL (x)
3617 && purpose_member (name, class_binding_level->class_shadowed))
3618 return;
3619
3620 maybe_push_cache_obstack ();
3621 class_binding_level->class_shadowed
3622 = tree_cons (name, IDENTIFIER_CLASS_VALUE (name),
3623 class_binding_level->class_shadowed);
3624 pop_obstacks ();
3625 IDENTIFIER_CLASS_VALUE (name) = x;
3626 obstack_ptr_grow (&decl_obstack, x);
3627 }
3628
3629 /* Tell caller how to interpret a TREE_LIST which contains
3630 chains of FUNCTION_DECLS. */
3631
3632 int
3633 overloaded_globals_p (list)
3634 tree list;
3635 {
3636 my_friendly_assert (TREE_CODE (list) == TREE_LIST, 142);
3637
3638 /* Don't commit caller to seeing them as globals. */
3639 if (TREE_NONLOCAL_FLAG (list))
3640 return -1;
3641 /* Do commit caller to not seeing them as globals. */
3642 if (TREE_CODE (TREE_VALUE (list)) == TREE_LIST)
3643 return 0;
3644 /* Do commit caller to seeing them as globals. */
3645 return 1;
3646 }
3647
3648 /* DECL is a FUNCTION_DECL which may have other definitions already in
3649 place. We get around this by making the value of the identifier point
3650 to a list of all the things that want to be referenced by that name. It
3651 is then up to the users of that name to decide what to do with that
3652 list.
3653
3654 DECL may also be a TEMPLATE_DECL, with a FUNCTION_DECL in its DECL_RESULT
3655 slot. It is dealt with the same way.
3656
3657 The value returned may be a previous declaration if we guessed wrong
3658 about what language DECL should belong to (C or C++). Otherwise,
3659 it's always DECL (and never something that's not a _DECL). */
3660
3661 static tree
3662 push_overloaded_decl (decl, forgettable)
3663 tree decl;
3664 int forgettable;
3665 {
3666 tree orig_name = DECL_NAME (decl);
3667 tree old;
3668 int doing_global = (global_bindings_p () || ! forgettable);
3669
3670 if (doing_global)
3671 {
3672 old = IDENTIFIER_GLOBAL_VALUE (orig_name);
3673 if (old && TREE_CODE (old) == FUNCTION_DECL
3674 && DECL_ARTIFICIAL (old)
3675 && (DECL_BUILT_IN (old) || DECL_BUILT_IN_NONANSI (old)))
3676 {
3677 if (duplicate_decls (decl, old))
3678 return old;
3679 old = NULL_TREE;
3680 }
3681 }
3682 else
3683 {
3684 old = IDENTIFIER_LOCAL_VALUE (orig_name);
3685
3686 if (! purpose_member (orig_name, current_binding_level->shadowed))
3687 {
3688 current_binding_level->shadowed
3689 = tree_cons (orig_name, old, current_binding_level->shadowed);
3690 old = NULL_TREE;
3691 }
3692 }
3693
3694 if (old)
3695 {
3696 if (TREE_CODE (old) == TYPE_DECL && DECL_ARTIFICIAL (old))
3697 {
3698 tree t = TREE_TYPE (old);
3699 if (IS_AGGR_TYPE (t) && warn_shadow
3700 && (! DECL_IN_SYSTEM_HEADER (decl)
3701 || ! DECL_IN_SYSTEM_HEADER (old)))
3702 cp_warning ("`%#D' hides constructor for `%#T'", decl, t);
3703 old = NULL_TREE;
3704 }
3705 else if (is_overloaded_fn (old))
3706 {
3707 tree tmp;
3708
3709 for (tmp = get_first_fn (old); tmp; tmp = DECL_CHAIN (tmp))
3710 if (decl == tmp || duplicate_decls (decl, tmp))
3711 return tmp;
3712 }
3713 else
3714 {
3715 cp_error_at ("previous non-function declaration `%#D'", old);
3716 cp_error ("conflicts with function declaration `%#D'", decl);
3717 return decl;
3718 }
3719 }
3720
3721 if (old || TREE_CODE (decl) == TEMPLATE_DECL)
3722 {
3723 if (old && is_overloaded_fn (old))
3724 DECL_CHAIN (decl) = get_first_fn (old);
3725 else
3726 DECL_CHAIN (decl) = NULL_TREE;
3727 old = tree_cons (orig_name, decl, NULL_TREE);
3728 TREE_TYPE (old) = unknown_type_node;
3729 }
3730 else
3731 /* orig_name is not ambiguous. */
3732 old = decl;
3733
3734 if (doing_global)
3735 IDENTIFIER_GLOBAL_VALUE (orig_name) = old;
3736 else
3737 IDENTIFIER_LOCAL_VALUE (orig_name) = old;
3738
3739 return decl;
3740 }
3741 \f
3742 /* Generate an implicit declaration for identifier FUNCTIONID
3743 as a function of type int (). Print a warning if appropriate. */
3744
3745 tree
3746 implicitly_declare (functionid)
3747 tree functionid;
3748 {
3749 register tree decl;
3750 int temp = allocation_temporary_p ();
3751
3752 push_obstacks_nochange ();
3753
3754 /* Save the decl permanently so we can warn if definition follows.
3755 In ANSI C, warn_implicit is usually false, so the saves little space.
3756 But in C++, it's usually true, hence the extra code. */
3757 if (temp && (! warn_implicit || toplevel_bindings_p ()))
3758 end_temporary_allocation ();
3759
3760 /* We used to reuse an old implicit decl here,
3761 but this loses with inline functions because it can clobber
3762 the saved decl chains. */
3763 decl = build_lang_decl (FUNCTION_DECL, functionid, default_function_type);
3764
3765 DECL_EXTERNAL (decl) = 1;
3766 TREE_PUBLIC (decl) = 1;
3767
3768 /* ANSI standard says implicit declarations are in the innermost block.
3769 So we record the decl in the standard fashion. */
3770 pushdecl (decl);
3771 rest_of_decl_compilation (decl, NULL_PTR, 0, 0);
3772
3773 if (warn_implicit
3774 /* Only one warning per identifier. */
3775 && IDENTIFIER_IMPLICIT_DECL (functionid) == NULL_TREE)
3776 {
3777 cp_pedwarn ("implicit declaration of function `%#D'", decl);
3778 }
3779
3780 SET_IDENTIFIER_IMPLICIT_DECL (functionid, decl);
3781
3782 pop_obstacks ();
3783
3784 return decl;
3785 }
3786
3787 /* Return zero if the declaration NEWDECL is valid
3788 when the declaration OLDDECL (assumed to be for the same name)
3789 has already been seen.
3790 Otherwise return an error message format string with a %s
3791 where the identifier should go. */
3792
3793 static char *
3794 redeclaration_error_message (newdecl, olddecl)
3795 tree newdecl, olddecl;
3796 {
3797 if (TREE_CODE (newdecl) == TYPE_DECL)
3798 {
3799 /* Because C++ can put things into name space for free,
3800 constructs like "typedef struct foo { ... } foo"
3801 would look like an erroneous redeclaration. */
3802 if (comptypes (TREE_TYPE (newdecl), TREE_TYPE (olddecl), 0))
3803 return 0;
3804 else
3805 return "redefinition of `%#D'";
3806 }
3807 else if (TREE_CODE (newdecl) == FUNCTION_DECL)
3808 {
3809 /* If this is a pure function, its olddecl will actually be
3810 the original initialization to `0' (which we force to call
3811 abort()). Don't complain about redefinition in this case. */
3812 if (DECL_LANG_SPECIFIC (olddecl) && DECL_ABSTRACT_VIRTUAL_P (olddecl))
3813 return 0;
3814
3815 /* We'll complain about linkage mismatches in
3816 warn_extern_redeclared_static. */
3817
3818 /* defining the same name twice is no good. */
3819 if (DECL_INITIAL (olddecl) != NULL_TREE
3820 && DECL_INITIAL (newdecl) != NULL_TREE)
3821 {
3822 if (DECL_NAME (olddecl) == NULL_TREE)
3823 return "`%#D' not declared in class";
3824 else
3825 return "redefinition of `%#D'";
3826 }
3827 return 0;
3828 }
3829 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
3830 {
3831 if ((TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
3832 && DECL_INITIAL (DECL_TEMPLATE_RESULT (newdecl))
3833 && DECL_INITIAL (DECL_TEMPLATE_RESULT (olddecl)))
3834 || (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL
3835 && TYPE_SIZE (TREE_TYPE (newdecl))
3836 && TYPE_SIZE (TREE_TYPE (olddecl))))
3837 return "redefinition of `%#D'";
3838 return 0;
3839 }
3840 else if (toplevel_bindings_p ())
3841 {
3842 /* Objects declared at top level: */
3843 /* If at least one is a reference, it's ok. */
3844 if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl))
3845 return 0;
3846 /* Reject two definitions. */
3847 return "redefinition of `%#D'";
3848 }
3849 else
3850 {
3851 /* Objects declared with block scope: */
3852 /* Reject two definitions, and reject a definition
3853 together with an external reference. */
3854 if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl)))
3855 return "redeclaration of `%#D'";
3856 return 0;
3857 }
3858 }
3859 \f
3860 /* Get the LABEL_DECL corresponding to identifier ID as a label.
3861 Create one if none exists so far for the current function.
3862 This function is called for both label definitions and label references. */
3863
3864 tree
3865 lookup_label (id)
3866 tree id;
3867 {
3868 register tree decl = IDENTIFIER_LABEL_VALUE (id);
3869
3870 if (current_function_decl == NULL_TREE)
3871 {
3872 error ("label `%s' referenced outside of any function",
3873 IDENTIFIER_POINTER (id));
3874 return NULL_TREE;
3875 }
3876
3877 if ((decl == NULL_TREE
3878 || DECL_SOURCE_LINE (decl) == 0)
3879 && (named_label_uses == NULL
3880 || named_label_uses->names_in_scope != current_binding_level->names
3881 || named_label_uses->label_decl != decl))
3882 {
3883 struct named_label_list *new_ent;
3884 new_ent
3885 = (struct named_label_list*)oballoc (sizeof (struct named_label_list));
3886 new_ent->label_decl = decl;
3887 new_ent->names_in_scope = current_binding_level->names;
3888 new_ent->binding_level = current_binding_level;
3889 new_ent->lineno_o_goto = lineno;
3890 new_ent->filename_o_goto = input_filename;
3891 new_ent->next = named_label_uses;
3892 named_label_uses = new_ent;
3893 }
3894
3895 /* Use a label already defined or ref'd with this name. */
3896 if (decl != NULL_TREE)
3897 {
3898 /* But not if it is inherited and wasn't declared to be inheritable. */
3899 if (DECL_CONTEXT (decl) != current_function_decl
3900 && ! C_DECLARED_LABEL_FLAG (decl))
3901 return shadow_label (id);
3902 return decl;
3903 }
3904
3905 decl = build_decl (LABEL_DECL, id, void_type_node);
3906
3907 /* Make sure every label has an rtx. */
3908 label_rtx (decl);
3909
3910 /* A label not explicitly declared must be local to where it's ref'd. */
3911 DECL_CONTEXT (decl) = current_function_decl;
3912
3913 DECL_MODE (decl) = VOIDmode;
3914
3915 /* Say where one reference is to the label,
3916 for the sake of the error if it is not defined. */
3917 DECL_SOURCE_LINE (decl) = lineno;
3918 DECL_SOURCE_FILE (decl) = input_filename;
3919
3920 SET_IDENTIFIER_LABEL_VALUE (id, decl);
3921
3922 named_labels = tree_cons (NULL_TREE, decl, named_labels);
3923 named_label_uses->label_decl = decl;
3924
3925 return decl;
3926 }
3927
3928 /* Make a label named NAME in the current function,
3929 shadowing silently any that may be inherited from containing functions
3930 or containing scopes.
3931
3932 Note that valid use, if the label being shadowed
3933 comes from another scope in the same function,
3934 requires calling declare_nonlocal_label right away. */
3935
3936 tree
3937 shadow_label (name)
3938 tree name;
3939 {
3940 register tree decl = IDENTIFIER_LABEL_VALUE (name);
3941
3942 if (decl != NULL_TREE)
3943 {
3944 shadowed_labels = tree_cons (NULL_TREE, decl, shadowed_labels);
3945 SET_IDENTIFIER_LABEL_VALUE (name, NULL_TREE);
3946 SET_IDENTIFIER_LABEL_VALUE (decl, NULL_TREE);
3947 }
3948
3949 return lookup_label (name);
3950 }
3951
3952 /* Define a label, specifying the location in the source file.
3953 Return the LABEL_DECL node for the label, if the definition is valid.
3954 Otherwise return 0. */
3955
3956 tree
3957 define_label (filename, line, name)
3958 char *filename;
3959 int line;
3960 tree name;
3961 {
3962 tree decl;
3963
3964 if (minimal_parse_mode)
3965 {
3966 push_obstacks (&permanent_obstack, &permanent_obstack);
3967 decl = build_decl (LABEL_DECL, name, void_type_node);
3968 pop_obstacks ();
3969 DECL_SOURCE_LINE (decl) = line;
3970 DECL_SOURCE_FILE (decl) = filename;
3971 add_tree (decl);
3972 return decl;
3973 }
3974
3975 decl = lookup_label (name);
3976
3977 /* After labels, make any new cleanups go into their
3978 own new (temporary) binding contour. */
3979 current_binding_level->more_cleanups_ok = 0;
3980
3981 /* If label with this name is known from an outer context, shadow it. */
3982 if (decl != NULL_TREE && DECL_CONTEXT (decl) != current_function_decl)
3983 {
3984 shadowed_labels = tree_cons (NULL_TREE, decl, shadowed_labels);
3985 SET_IDENTIFIER_LABEL_VALUE (name, NULL_TREE);
3986 decl = lookup_label (name);
3987 }
3988
3989 if (name == get_identifier ("wchar_t"))
3990 cp_pedwarn ("label named wchar_t");
3991
3992 if (DECL_INITIAL (decl) != NULL_TREE)
3993 {
3994 cp_error ("duplicate label `%D'", decl);
3995 return 0;
3996 }
3997 else
3998 {
3999 struct named_label_list *uses, *prev;
4000 int identified = 0;
4001
4002 /* Mark label as having been defined. */
4003 DECL_INITIAL (decl) = error_mark_node;
4004 /* Say where in the source. */
4005 DECL_SOURCE_FILE (decl) = filename;
4006 DECL_SOURCE_LINE (decl) = line;
4007
4008 prev = NULL;
4009 uses = named_label_uses;
4010 while (uses != NULL)
4011 if (uses->label_decl == decl)
4012 {
4013 struct binding_level *b = current_binding_level;
4014 while (b)
4015 {
4016 tree new_decls = b->names;
4017 tree old_decls = (b == uses->binding_level)
4018 ? uses->names_in_scope : NULL_TREE;
4019 while (new_decls != old_decls)
4020 {
4021 if (TREE_CODE (new_decls) == VAR_DECL
4022 /* Don't complain about crossing initialization
4023 of internal entities. They can't be accessed,
4024 and they should be cleaned up
4025 by the time we get to the label. */
4026 && ! DECL_ARTIFICIAL (new_decls)
4027 && ((DECL_INITIAL (new_decls) != NULL_TREE
4028 && DECL_INITIAL (new_decls) != error_mark_node)
4029 || TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (new_decls))))
4030 {
4031 if (! identified)
4032 {
4033 cp_error ("jump to label `%D'", decl);
4034 error_with_file_and_line (uses->filename_o_goto,
4035 uses->lineno_o_goto,
4036 " from here");
4037 identified = 1;
4038 }
4039 cp_error_at (" crosses initialization of `%#D'",
4040 new_decls);
4041 }
4042 new_decls = TREE_CHAIN (new_decls);
4043 }
4044 if (b == uses->binding_level)
4045 break;
4046 b = b->level_chain;
4047 }
4048
4049 if (prev != NULL)
4050 prev->next = uses->next;
4051 else
4052 named_label_uses = uses->next;
4053
4054 uses = uses->next;
4055 }
4056 else
4057 {
4058 prev = uses;
4059 uses = uses->next;
4060 }
4061 current_function_return_value = NULL_TREE;
4062 return decl;
4063 }
4064 }
4065
4066 struct cp_switch
4067 {
4068 struct binding_level *level;
4069 struct cp_switch *next;
4070 };
4071
4072 static struct cp_switch *switch_stack;
4073
4074 void
4075 push_switch ()
4076 {
4077 struct cp_switch *p
4078 = (struct cp_switch *) oballoc (sizeof (struct cp_switch));
4079 p->level = current_binding_level;
4080 p->next = switch_stack;
4081 switch_stack = p;
4082 }
4083
4084 void
4085 pop_switch ()
4086 {
4087 switch_stack = switch_stack->next;
4088 }
4089
4090 /* Same, but for CASE labels. If DECL is NULL_TREE, it's the default. */
4091 /* XXX Note decl is never actually used. (bpk) */
4092
4093 void
4094 define_case_label (decl)
4095 tree decl;
4096 {
4097 tree cleanup = last_cleanup_this_contour ();
4098 struct binding_level *b = current_binding_level;
4099 int identified = 0;
4100
4101 if (cleanup)
4102 {
4103 static int explained = 0;
4104 cp_warning_at ("destructor needed for `%#D'", TREE_PURPOSE (cleanup));
4105 warning ("where case label appears here");
4106 if (!explained)
4107 {
4108 warning ("(enclose actions of previous case statements requiring");
4109 warning ("destructors in their own binding contours.)");
4110 explained = 1;
4111 }
4112 }
4113
4114 for (; b && b != switch_stack->level; b = b->level_chain)
4115 {
4116 tree new_decls = b->names;
4117 for (; new_decls; new_decls = TREE_CHAIN (new_decls))
4118 {
4119 if (TREE_CODE (new_decls) == VAR_DECL
4120 /* Don't complain about crossing initialization
4121 of internal entities. They can't be accessed,
4122 and they should be cleaned up
4123 by the time we get to the label. */
4124 && ! DECL_ARTIFICIAL (new_decls)
4125 && ((DECL_INITIAL (new_decls) != NULL_TREE
4126 && DECL_INITIAL (new_decls) != error_mark_node)
4127 || TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (new_decls))))
4128 {
4129 if (! identified)
4130 error ("jump to case label");
4131 identified = 1;
4132 cp_error_at (" crosses initialization of `%#D'",
4133 new_decls);
4134 }
4135 }
4136 }
4137
4138 /* After labels, make any new cleanups go into their
4139 own new (temporary) binding contour. */
4140
4141 current_binding_level->more_cleanups_ok = 0;
4142 current_function_return_value = NULL_TREE;
4143 }
4144 \f
4145 /* Return the list of declarations of the current level.
4146 Note that this list is in reverse order unless/until
4147 you nreverse it; and when you do nreverse it, you must
4148 store the result back using `storedecls' or you will lose. */
4149
4150 tree
4151 getdecls ()
4152 {
4153 return current_binding_level->names;
4154 }
4155
4156 /* Return the list of type-tags (for structs, etc) of the current level. */
4157
4158 tree
4159 gettags ()
4160 {
4161 return current_binding_level->tags;
4162 }
4163
4164 /* Store the list of declarations of the current level.
4165 This is done for the parameter declarations of a function being defined,
4166 after they are modified in the light of any missing parameters. */
4167
4168 static void
4169 storedecls (decls)
4170 tree decls;
4171 {
4172 current_binding_level->names = decls;
4173 }
4174
4175 /* Similarly, store the list of tags of the current level. */
4176
4177 static void
4178 storetags (tags)
4179 tree tags;
4180 {
4181 current_binding_level->tags = tags;
4182 }
4183 \f
4184 /* Given NAME, an IDENTIFIER_NODE,
4185 return the structure (or union or enum) definition for that name.
4186 Searches binding levels from BINDING_LEVEL up to the global level.
4187 If THISLEVEL_ONLY is nonzero, searches only the specified context
4188 (but skips any tag-transparent contexts to find one that is
4189 meaningful for tags).
4190 FORM says which kind of type the caller wants;
4191 it is RECORD_TYPE or UNION_TYPE or ENUMERAL_TYPE.
4192 If the wrong kind of type is found, and it's not a template, an error is
4193 reported. */
4194
4195 static tree
4196 lookup_tag (form, name, binding_level, thislevel_only)
4197 enum tree_code form;
4198 tree name;
4199 struct binding_level *binding_level;
4200 int thislevel_only;
4201 {
4202 register struct binding_level *level;
4203
4204 for (level = binding_level; level; level = level->level_chain)
4205 {
4206 register tree tail;
4207 if (ANON_AGGRNAME_P (name))
4208 for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
4209 {
4210 /* There's no need for error checking here, because
4211 anon names are unique throughout the compilation. */
4212 if (TYPE_IDENTIFIER (TREE_VALUE (tail)) == name)
4213 return TREE_VALUE (tail);
4214 }
4215 else
4216 for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
4217 {
4218 if (TREE_PURPOSE (tail) == name)
4219 {
4220 enum tree_code code = TREE_CODE (TREE_VALUE (tail));
4221 /* Should tighten this up; it'll probably permit
4222 UNION_TYPE and a struct template, for example. */
4223 if (code != form
4224 && !(form != ENUMERAL_TYPE && code == TEMPLATE_DECL))
4225 {
4226 /* Definition isn't the kind we were looking for. */
4227 cp_error ("`%#D' redeclared as %C", TREE_VALUE (tail),
4228 form);
4229 return NULL_TREE;
4230 }
4231 return TREE_VALUE (tail);
4232 }
4233 }
4234 if (thislevel_only && ! level->tag_transparent)
4235 {
4236 if (level->pseudo_global)
4237 {
4238 tree t = IDENTIFIER_GLOBAL_VALUE (name);
4239 if (t && TREE_CODE (t) == TEMPLATE_DECL
4240 && TREE_CODE (DECL_TEMPLATE_RESULT (t)) == TYPE_DECL)
4241 return TREE_TYPE (t);
4242 }
4243 return NULL_TREE;
4244 }
4245 if (current_class_type && level->level_chain == global_binding_level)
4246 {
4247 /* Try looking in this class's tags before heading into
4248 global binding level. */
4249 tree context = current_class_type;
4250 while (context)
4251 {
4252 switch (TREE_CODE_CLASS (TREE_CODE (context)))
4253 {
4254 tree these_tags;
4255 case 't':
4256 these_tags = CLASSTYPE_TAGS (context);
4257 if (ANON_AGGRNAME_P (name))
4258 while (these_tags)
4259 {
4260 if (TYPE_IDENTIFIER (TREE_VALUE (these_tags))
4261 == name)
4262 return TREE_VALUE (tail);
4263 these_tags = TREE_CHAIN (these_tags);
4264 }
4265 else
4266 while (these_tags)
4267 {
4268 if (TREE_PURPOSE (these_tags) == name)
4269 {
4270 if (TREE_CODE (TREE_VALUE (these_tags)) != form)
4271 {
4272 cp_error ("`%#D' redeclared as %C in class scope",
4273 TREE_VALUE (tail), form);
4274 return NULL_TREE;
4275 }
4276 return TREE_VALUE (tail);
4277 }
4278 these_tags = TREE_CHAIN (these_tags);
4279 }
4280 /* If this type is not yet complete, then don't
4281 look at its context. */
4282 if (TYPE_SIZE (context) == NULL_TREE)
4283 goto no_context;
4284 /* Go to next enclosing type, if any. */
4285 context = DECL_CONTEXT (TYPE_MAIN_DECL (context));
4286 break;
4287 case 'd':
4288 context = DECL_CONTEXT (context);
4289 break;
4290 default:
4291 my_friendly_abort (10);
4292 }
4293 continue;
4294 no_context:
4295 break;
4296 }
4297 }
4298 }
4299 return NULL_TREE;
4300 }
4301
4302 #if 0
4303 void
4304 set_current_level_tags_transparency (tags_transparent)
4305 int tags_transparent;
4306 {
4307 current_binding_level->tag_transparent = tags_transparent;
4308 }
4309 #endif
4310
4311 /* Given a type, find the tag that was defined for it and return the tag name.
4312 Otherwise return 0. However, the value can never be 0
4313 in the cases in which this is used.
4314
4315 C++: If NAME is non-zero, this is the new name to install. This is
4316 done when replacing anonymous tags with real tag names. */
4317
4318 static tree
4319 lookup_tag_reverse (type, name)
4320 tree type;
4321 tree name;
4322 {
4323 register struct binding_level *level;
4324
4325 for (level = current_binding_level; level; level = level->level_chain)
4326 {
4327 register tree tail;
4328 for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
4329 {
4330 if (TREE_VALUE (tail) == type)
4331 {
4332 if (name)
4333 TREE_PURPOSE (tail) = name;
4334 return TREE_PURPOSE (tail);
4335 }
4336 }
4337 }
4338 return NULL_TREE;
4339 }
4340 \f
4341 /* Lookup TYPE in CONTEXT (a chain of nested types or a FUNCTION_DECL).
4342 Return the type value, or NULL_TREE if not found. */
4343
4344 static tree
4345 lookup_nested_type (type, context)
4346 tree type;
4347 tree context;
4348 {
4349 if (context == NULL_TREE)
4350 return NULL_TREE;
4351 while (context)
4352 {
4353 switch (TREE_CODE (context))
4354 {
4355 case TYPE_DECL:
4356 {
4357 tree ctype = TREE_TYPE (context);
4358 tree match = value_member (type, CLASSTYPE_TAGS (ctype));
4359 if (match)
4360 return TREE_VALUE (match);
4361 context = DECL_CONTEXT (context);
4362
4363 /* When we have a nested class whose member functions have
4364 local types (e.g., a set of enums), we'll arrive here
4365 with the DECL_CONTEXT as the actual RECORD_TYPE node for
4366 the enclosing class. Instead, we want to make sure we
4367 come back in here with the TYPE_DECL, not the RECORD_TYPE. */
4368 if (context && TREE_CODE (context) == RECORD_TYPE)
4369 context = TREE_CHAIN (context);
4370 }
4371 break;
4372 case FUNCTION_DECL:
4373 if (TYPE_NAME (type) && TYPE_IDENTIFIER (type))
4374 return lookup_name (TYPE_IDENTIFIER (type), 1);
4375 return NULL_TREE;
4376 default:
4377 my_friendly_abort (12);
4378 }
4379 }
4380 return NULL_TREE;
4381 }
4382
4383 /* Look up NAME in the NAMESPACE. */
4384
4385 tree
4386 lookup_namespace_name (namespace, name)
4387 tree namespace, name;
4388 {
4389 struct binding_level *b = (struct binding_level *)NAMESPACE_LEVEL (namespace);
4390 tree x = NULL_TREE;
4391
4392 #if 1
4393 /* This searches just one level. */
4394 if (b)
4395 {
4396 for (x = b->names; x; x = TREE_CHAIN (x))
4397 if (DECL_NAME (x) == name || DECL_ASSEMBLER_NAME (x) == name)
4398 break;
4399 }
4400 #else
4401 /* This searches all levels. */
4402 for (; b && !x; b = b->level_chain)
4403 {
4404 for (x = b->names; x; x = TREE_CHAIN (x))
4405 if (DECL_NAME (x) == name || DECL_ASSEMBLER_NAME (x) == name)
4406 break;
4407 }
4408 #endif
4409 return x;
4410 }
4411
4412 tree
4413 make_typename_type (context, name)
4414 tree context, name;
4415 {
4416 tree t, d;
4417
4418 if (TREE_CODE_CLASS (TREE_CODE (name)) == 't')
4419 name = TYPE_IDENTIFIER (name);
4420 else if (TREE_CODE (name) == TYPE_DECL)
4421 name = DECL_NAME (name);
4422 else if (TREE_CODE (name) != IDENTIFIER_NODE)
4423 my_friendly_abort (2000);
4424
4425 if (! uses_template_parms (context)
4426 || context == current_class_type)
4427 {
4428 if (IS_AGGR_TYPE (context))
4429 t = lookup_field (context, name, 0, 1);
4430 else
4431 t = NULL_TREE;
4432
4433 if (t == NULL_TREE)
4434 {
4435 cp_error ("no type named `%#T' in `%#T'", name, context);
4436 return error_mark_node;
4437 }
4438 return TREE_TYPE (t);
4439 }
4440
4441 if (processing_template_decl)
4442 push_obstacks (&permanent_obstack, &permanent_obstack);
4443 t = make_lang_type (TYPENAME_TYPE);
4444 d = build_decl (TYPE_DECL, name, t);
4445 if (processing_template_decl)
4446 pop_obstacks ();
4447
4448 TYPE_CONTEXT (t) = context;
4449 TYPE_NAME (TREE_TYPE (d)) = d;
4450 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
4451 DECL_CONTEXT (d) = context;
4452 CLASSTYPE_GOT_SEMICOLON (t) = 1;
4453
4454 return t;
4455 }
4456
4457 /* Given a TYPE_DECL T looked up in CONTEXT, return a TYPENAME_TYPE
4458 where the scope is either CONTEXT or the first base of CONTEXT along the
4459 inheritance chain to T that depends on template parameters.
4460
4461 Called from lookup_name_real to implement the implicit typename
4462 extension. */
4463
4464 static tree
4465 make_implicit_typename (context, t)
4466 tree context, t;
4467 {
4468 tree retval;
4469
4470 if (uses_template_parms (DECL_CONTEXT (t))
4471 && DECL_CONTEXT (t) != context)
4472 {
4473 tree binfo = get_binfo (DECL_CONTEXT (t), context, 0);
4474 while (binfo)
4475 {
4476 tree next = BINFO_INHERITANCE_CHAIN (binfo);
4477 if (! uses_template_parms (BINFO_TYPE (next))
4478 || BINFO_TYPE (next) == context)
4479 break;
4480 binfo = next;
4481 }
4482 if (binfo)
4483 retval = make_typename_type (BINFO_TYPE (binfo), DECL_NAME (t));
4484 else
4485 /* FIXME: find the enclosing class whose base t comes from. */
4486 retval = make_typename_type (DECL_CONTEXT (t), DECL_NAME (t));
4487 }
4488 else
4489 retval = make_typename_type (context, DECL_NAME (t));
4490
4491 TREE_TYPE (retval) = TREE_TYPE (t);
4492 return retval;
4493 }
4494
4495 /* Look up NAME in the current binding level and its superiors in the
4496 namespace of variables, functions and typedefs. Return a ..._DECL
4497 node of some kind representing its definition if there is only one
4498 such declaration, or return a TREE_LIST with all the overloaded
4499 definitions if there are many, or return 0 if it is undefined.
4500
4501 If PREFER_TYPE is > 0, we prefer TYPE_DECLs.
4502 If PREFER_TYPE is -2, we're being called from yylex(). (UGLY)
4503 Otherwise we prefer non-TYPE_DECLs. */
4504
4505 static tree
4506 lookup_name_real (name, prefer_type, nonclass)
4507 tree name;
4508 int prefer_type, nonclass;
4509 {
4510 register tree val;
4511 int yylex = 0;
4512 tree from_obj = NULL_TREE;
4513 tree locval, classval;
4514
4515 if (prefer_type == -2)
4516 {
4517 extern int looking_for_typename;
4518 tree type = NULL_TREE;
4519
4520 yylex = 1;
4521 prefer_type = looking_for_typename;
4522
4523 /* std:: becomes :: for now. */
4524 if (got_scope == std_node)
4525 got_scope = void_type_node;
4526
4527 if (got_scope)
4528 type = got_scope;
4529 else if (got_object != error_mark_node)
4530 type = got_object;
4531
4532 if (type)
4533 {
4534 if (type == error_mark_node)
4535 return error_mark_node;
4536 if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
4537 type = TREE_TYPE (type);
4538
4539 type = complete_type (type);
4540
4541 if (type == void_type_node)
4542 val = IDENTIFIER_GLOBAL_VALUE (name);
4543 else if (TREE_CODE (type) == NAMESPACE_DECL)
4544 {
4545 val = lookup_namespace_name (type, name);
4546 }
4547 else if (! IS_AGGR_TYPE (type)
4548 || TREE_CODE (type) == TEMPLATE_TYPE_PARM
4549 || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM
4550 || TREE_CODE (type) == TYPENAME_TYPE)
4551 /* Someone else will give an error about this if needed. */
4552 val = NULL_TREE;
4553 else if (TYPE_BEING_DEFINED (type))
4554 {
4555 val = IDENTIFIER_CLASS_VALUE (name);
4556 if (val && DECL_CONTEXT (val) != type)
4557 {
4558 struct binding_level *b = class_binding_level;
4559 for (val = NULL_TREE; b; b = b->level_chain)
4560 {
4561 tree t = purpose_member (name, b->class_shadowed);
4562 if (t && TREE_VALUE (t)
4563 && DECL_CONTEXT (TREE_VALUE (t)) == type)
4564 {
4565 val = TREE_VALUE (t);
4566 break;
4567 }
4568 }
4569 }
4570 if (val == NULL_TREE)
4571 val = lookup_field (type, name, 0, 1);
4572 }
4573 else if (type == current_class_type)
4574 val = IDENTIFIER_CLASS_VALUE (name);
4575 else
4576 val = lookup_field (type, name, 0, prefer_type);
4577 }
4578 else
4579 val = NULL_TREE;
4580
4581 /* Add implicit 'typename' to scoped types from other classes. */
4582 if (got_scope && processing_template_decl
4583 && got_scope != current_class_type
4584 && uses_template_parms (got_scope)
4585 && val && TREE_CODE (val) == TYPE_DECL
4586 && ! DECL_ARTIFICIAL (val))
4587 {
4588 tree t = make_implicit_typename (got_scope, val);
4589 val = TYPE_MAIN_DECL (t);
4590 }
4591
4592 if (got_scope)
4593 goto done;
4594 else if (got_object && val)
4595 from_obj = val;
4596 }
4597
4598 locval = classval = NULL_TREE;
4599
4600 if (current_binding_level != global_binding_level
4601 && IDENTIFIER_LOCAL_VALUE (name))
4602 locval = IDENTIFIER_LOCAL_VALUE (name);
4603
4604 /* In C++ class fields are between local and global scope,
4605 just before the global scope. */
4606 if (current_class_type && ! nonclass)
4607 {
4608 classval = IDENTIFIER_CLASS_VALUE (name);
4609 if (classval == NULL_TREE && TYPE_BEING_DEFINED (current_class_type))
4610 /* Try to find values from base classes if we are presently
4611 defining a type. We are presently only interested in
4612 TYPE_DECLs. */
4613 classval = lookup_field (current_class_type, name, 0, 1);
4614
4615 /* yylex() calls this with -2, since we should never start digging for
4616 the nested name at the point where we haven't even, for example,
4617 created the COMPONENT_REF or anything like that. */
4618 if (classval == NULL_TREE)
4619 classval = lookup_nested_field (name, ! yylex);
4620
4621 /* Add implicit 'typename' to types from base classes. */
4622 if (processing_template_decl
4623 && classval && TREE_CODE (classval) == TYPE_DECL
4624 && DECL_CONTEXT (classval) != current_class_type
4625 && uses_template_parms (DECL_CONTEXT (classval))
4626 && ! DECL_ARTIFICIAL (classval))
4627 {
4628 tree t = make_implicit_typename (current_class_type, classval);
4629 classval = TYPE_MAIN_DECL (t);
4630 }
4631 }
4632
4633 if (locval && classval)
4634 {
4635 if (current_scope () == current_function_decl
4636 && ! hack_decl_function_context (current_function_decl))
4637 /* Not in a nested function. */
4638 val = locval;
4639 else
4640 {
4641 /* This is incredibly horrible. The whole concept of
4642 IDENTIFIER_LOCAL_VALUE / IDENTIFIER_CLASS_VALUE /
4643 IDENTIFIER_GLOBAL_VALUE needs to be scrapped for local
4644 classes. */
4645 tree lctx = hack_decl_function_context (locval);
4646 tree cctx = hack_decl_function_context (classval);
4647
4648 if (lctx == current_scope ())
4649 val = locval;
4650 else if (lctx == cctx)
4651 val = classval;
4652 else
4653 /* I don't know which is right; let's just guess for now. */
4654 val = locval;
4655 }
4656 }
4657 else if (locval)
4658 val = locval;
4659 else if (classval)
4660 val = classval;
4661 else
4662 val = IDENTIFIER_GLOBAL_VALUE (name);
4663
4664 done:
4665 if (val)
4666 {
4667 /* This should only warn about types used in qualified-ids. */
4668 if (from_obj && from_obj != val)
4669 {
4670 if (looking_for_typename && TREE_CODE (from_obj) == TYPE_DECL
4671 && TREE_CODE (val) == TYPE_DECL
4672 && TREE_TYPE (from_obj) != TREE_TYPE (val))
4673 {
4674 cp_pedwarn ("lookup of `%D' in the scope of `%#T' (`%#T')",
4675 name, got_object, TREE_TYPE (from_obj));
4676 cp_pedwarn (" does not match lookup in the current scope (`%#T')",
4677 TREE_TYPE (val));
4678 }
4679
4680 val = from_obj;
4681 }
4682
4683 if (TREE_CODE (val) == TEMPLATE_DECL && arg_looking_for_template)
4684 {
4685 /* TEMPLATE_TEMPLATE_PARM node is preferred over TEMPLATE_DECL. */
4686 if (DECL_TEMPLATE_TEMPLATE_PARM_P (val))
4687 val = TREE_TYPE (val);
4688 }
4689 else if ((TREE_CODE (val) == TEMPLATE_DECL && looking_for_template)
4690 || TREE_CODE (val) == TYPE_DECL || prefer_type <= 0)
4691 ;
4692 else if (IDENTIFIER_HAS_TYPE_VALUE (name))
4693 val = TYPE_MAIN_DECL (IDENTIFIER_TYPE_VALUE (name));
4694 else if (TREE_TYPE (val) == error_mark_node)
4695 val = error_mark_node;
4696 }
4697 else if (from_obj)
4698 val = from_obj;
4699
4700 return val;
4701 }
4702
4703 tree
4704 lookup_name_nonclass (name)
4705 tree name;
4706 {
4707 return lookup_name_real (name, 0, 1);
4708 }
4709
4710 tree
4711 lookup_name (name, prefer_type)
4712 tree name;
4713 int prefer_type;
4714 {
4715 return lookup_name_real (name, prefer_type, 0);
4716 }
4717
4718 /* Similar to `lookup_name' but look only at current binding level. */
4719
4720 tree
4721 lookup_name_current_level (name)
4722 tree name;
4723 {
4724 register tree t = NULL_TREE;
4725
4726 if (current_binding_level == global_binding_level)
4727 {
4728 t = IDENTIFIER_GLOBAL_VALUE (name);
4729
4730 /* extern "C" function() */
4731 if (t != NULL_TREE && TREE_CODE (t) == TREE_LIST)
4732 t = TREE_VALUE (t);
4733 }
4734 else if (IDENTIFIER_LOCAL_VALUE (name) != NULL_TREE)
4735 {
4736 struct binding_level *b = current_binding_level;
4737 while (1)
4738 {
4739 for (t = b->names; t; t = TREE_CHAIN (t))
4740 if (DECL_NAME (t) == name || DECL_ASSEMBLER_NAME (t) == name)
4741 goto out;
4742 if (b->keep == 2)
4743 b = b->level_chain;
4744 else
4745 break;
4746 }
4747 out:
4748 ;
4749 }
4750
4751 return t;
4752 }
4753 \f
4754 /* Arrange for the user to get a source line number, even when the
4755 compiler is going down in flames, so that she at least has a
4756 chance of working around problems in the compiler. We used to
4757 call error(), but that let the segmentation fault continue
4758 through; now, it's much more passive by asking them to send the
4759 maintainers mail about the problem. */
4760
4761 static void
4762 signal_catch (sig)
4763 int sig;
4764 {
4765 signal (SIGSEGV, SIG_DFL);
4766 #ifdef SIGIOT
4767 signal (SIGIOT, SIG_DFL);
4768 #endif
4769 #ifdef SIGILL
4770 signal (SIGILL, SIG_DFL);
4771 #endif
4772 #ifdef SIGABRT
4773 signal (SIGABRT, SIG_DFL);
4774 #endif
4775 #ifdef SIGBUS
4776 signal (SIGBUS, SIG_DFL);
4777 #endif
4778 my_friendly_abort (0);
4779 }
4780
4781 #if 0
4782 /* Unused -- brendan 970107 */
4783 /* Array for holding types considered "built-in". These types
4784 are output in the module in which `main' is defined. */
4785 static tree *builtin_type_tdescs_arr;
4786 static int builtin_type_tdescs_len, builtin_type_tdescs_max;
4787 #endif
4788
4789 /* Push the declarations of builtin types into the namespace.
4790 RID_INDEX, if < RID_MAX is the index of the builtin type
4791 in the array RID_POINTERS. NAME is the name used when looking
4792 up the builtin type. TYPE is the _TYPE node for the builtin type. */
4793
4794 static void
4795 record_builtin_type (rid_index, name, type)
4796 enum rid rid_index;
4797 char *name;
4798 tree type;
4799 {
4800 tree rname = NULL_TREE, tname = NULL_TREE;
4801 tree tdecl = NULL_TREE;
4802
4803 if ((int) rid_index < (int) RID_MAX)
4804 rname = ridpointers[(int) rid_index];
4805 if (name)
4806 tname = get_identifier (name);
4807
4808 TYPE_BUILT_IN (type) = 1;
4809
4810 if (tname)
4811 {
4812 tdecl = pushdecl (build_decl (TYPE_DECL, tname, type));
4813 set_identifier_type_value (tname, NULL_TREE);
4814 if ((int) rid_index < (int) RID_MAX)
4815 IDENTIFIER_GLOBAL_VALUE (tname) = tdecl;
4816 }
4817 if (rname != NULL_TREE)
4818 {
4819 if (tname != NULL_TREE)
4820 {
4821 set_identifier_type_value (rname, NULL_TREE);
4822 IDENTIFIER_GLOBAL_VALUE (rname) = tdecl;
4823 }
4824 else
4825 {
4826 tdecl = pushdecl (build_decl (TYPE_DECL, rname, type));
4827 set_identifier_type_value (rname, NULL_TREE);
4828 }
4829 }
4830 }
4831
4832 /* Push overloaded decl, in global scope, with one argument so it
4833 can be used as a callback from define_function. */
4834
4835 static void
4836 push_overloaded_decl_1 (x)
4837 tree x;
4838 {
4839 push_overloaded_decl (x, 0);
4840 }
4841
4842 #ifdef __GNUC__
4843 __inline
4844 #endif
4845 tree
4846 auto_function (name, type, code)
4847 tree name, type;
4848 enum built_in_function code;
4849 {
4850 return define_function
4851 (IDENTIFIER_POINTER (name), type, code, push_overloaded_decl_1,
4852 IDENTIFIER_POINTER (build_decl_overload (name, TYPE_ARG_TYPES (type),
4853 0)));
4854 }
4855
4856 /* Create the predefined scalar types of C,
4857 and some nodes representing standard constants (0, 1, (void *)0).
4858 Initialize the global binding level.
4859 Make definitions for built-in primitive functions. */
4860
4861 void
4862 init_decl_processing ()
4863 {
4864 tree decl;
4865 register tree endlink, int_endlink, double_endlink, unsigned_endlink;
4866 tree fields[20];
4867 /* Data type of memcpy. */
4868 tree memcpy_ftype, strlen_ftype;
4869 int wchar_type_size;
4870 tree temp;
4871 tree array_domain_type;
4872 extern int flag_strict_prototype;
4873 tree vb_off_identifier = NULL_TREE;
4874 /* Function type `char *(char *, char *)' and similar ones */
4875 tree string_ftype_ptr_ptr, int_ftype_string_string;
4876 tree sizetype_endlink;
4877 tree ptr_ftype, ptr_ftype_unsigned, ptr_ftype_sizetype;
4878 tree void_ftype, void_ftype_int, void_ftype_ptr, ptr_ftype_void;
4879
4880 /* Have to make these distinct before we try using them. */
4881 lang_name_cplusplus = get_identifier ("C++");
4882 lang_name_c = get_identifier ("C");
4883
4884 if (flag_strict_prototype == 2)
4885 {
4886 if (pedantic)
4887 strict_prototypes_lang_c = strict_prototypes_lang_cplusplus;
4888 }
4889 else
4890 strict_prototypes_lang_c = flag_strict_prototype;
4891
4892 /* Initially, C. */
4893 current_lang_name = lang_name_c;
4894
4895 current_function_decl = NULL_TREE;
4896 named_labels = NULL_TREE;
4897 named_label_uses = NULL;
4898 current_binding_level = NULL_BINDING_LEVEL;
4899 free_binding_level = NULL_BINDING_LEVEL;
4900
4901 #ifndef __CYGWIN32__
4902 /* Because most segmentation signals can be traced back into user
4903 code, catch them and at least give the user a chance of working
4904 around compiler bugs. */
4905 signal (SIGSEGV, signal_catch);
4906
4907 /* We will also catch aborts in the back-end through signal_catch and
4908 give the user a chance to see where the error might be, and to defeat
4909 aborts in the back-end when there have been errors previously in their
4910 code. */
4911 #ifdef SIGIOT
4912 signal (SIGIOT, signal_catch);
4913 #endif
4914 #ifdef SIGILL
4915 signal (SIGILL, signal_catch);
4916 #endif
4917 #ifdef SIGABRT
4918 signal (SIGABRT, signal_catch);
4919 #endif
4920 #ifdef SIGBUS
4921 signal (SIGBUS, signal_catch);
4922 #endif
4923 #else /* ndef __CYGWIN32__ */
4924 /* Cygwin32 cannot handle catching signals other than
4925 SIGABRT yet. We hope this will cease to be the case soon. */
4926 #ifdef SIGABRT
4927 signal (SIGABRT, signal_catch);
4928 #endif
4929 #endif /* ndef __CYGWIN32__ */
4930
4931 gcc_obstack_init (&decl_obstack);
4932
4933 /* Must lay these out before anything else gets laid out. */
4934 error_mark_node = make_node (ERROR_MARK);
4935 TREE_PERMANENT (error_mark_node) = 1;
4936 TREE_TYPE (error_mark_node) = error_mark_node;
4937 error_mark_list = build_tree_list (error_mark_node, error_mark_node);
4938 TREE_TYPE (error_mark_list) = error_mark_node;
4939
4940 /* Make the binding_level structure for global names. */
4941 pushlevel (0);
4942 global_binding_level = current_binding_level;
4943
4944 this_identifier = get_identifier (THIS_NAME);
4945 in_charge_identifier = get_identifier (IN_CHARGE_NAME);
4946 ctor_identifier = get_identifier (CTOR_NAME);
4947 dtor_identifier = get_identifier (DTOR_NAME);
4948 pfn_identifier = get_identifier (VTABLE_PFN_NAME);
4949 index_identifier = get_identifier (VTABLE_INDEX_NAME);
4950 delta_identifier = get_identifier (VTABLE_DELTA_NAME);
4951 delta2_identifier = get_identifier (VTABLE_DELTA2_NAME);
4952 pfn_or_delta2_identifier = get_identifier ("__pfn_or_delta2");
4953 if (flag_handle_signatures)
4954 {
4955 tag_identifier = get_identifier (SIGTABLE_TAG_NAME);
4956 vb_off_identifier = get_identifier (SIGTABLE_VB_OFF_NAME);
4957 vt_off_identifier = get_identifier (SIGTABLE_VT_OFF_NAME);
4958 }
4959
4960 /* Define `int' and `char' first so that dbx will output them first. */
4961
4962 integer_type_node = make_signed_type (INT_TYPE_SIZE);
4963 record_builtin_type (RID_INT, NULL_PTR, integer_type_node);
4964
4965 /* Define `char', which is like either `signed char' or `unsigned char'
4966 but not the same as either. */
4967
4968 char_type_node
4969 = (flag_signed_char
4970 ? make_signed_type (CHAR_TYPE_SIZE)
4971 : make_unsigned_type (CHAR_TYPE_SIZE));
4972 record_builtin_type (RID_CHAR, "char", char_type_node);
4973
4974 long_integer_type_node = make_signed_type (LONG_TYPE_SIZE);
4975 record_builtin_type (RID_LONG, "long int", long_integer_type_node);
4976
4977 unsigned_type_node = make_unsigned_type (INT_TYPE_SIZE);
4978 record_builtin_type (RID_UNSIGNED, "unsigned int", unsigned_type_node);
4979
4980 long_unsigned_type_node = make_unsigned_type (LONG_TYPE_SIZE);
4981 record_builtin_type (RID_MAX, "long unsigned int", long_unsigned_type_node);
4982 record_builtin_type (RID_MAX, "unsigned long", long_unsigned_type_node);
4983
4984 long_long_integer_type_node = make_signed_type (LONG_LONG_TYPE_SIZE);
4985 record_builtin_type (RID_MAX, "long long int", long_long_integer_type_node);
4986
4987 long_long_unsigned_type_node = make_unsigned_type (LONG_LONG_TYPE_SIZE);
4988 record_builtin_type (RID_MAX, "long long unsigned int",
4989 long_long_unsigned_type_node);
4990 record_builtin_type (RID_MAX, "long long unsigned",
4991 long_long_unsigned_type_node);
4992
4993 short_integer_type_node = make_signed_type (SHORT_TYPE_SIZE);
4994 record_builtin_type (RID_SHORT, "short int", short_integer_type_node);
4995 short_unsigned_type_node = make_unsigned_type (SHORT_TYPE_SIZE);
4996 record_builtin_type (RID_MAX, "short unsigned int", short_unsigned_type_node);
4997 record_builtin_type (RID_MAX, "unsigned short", short_unsigned_type_node);
4998
4999 /* `unsigned long' is the standard type for sizeof.
5000 Note that stddef.h uses `unsigned long',
5001 and this must agree, even if long and int are the same size. */
5002 set_sizetype
5003 (TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (SIZE_TYPE))));
5004
5005 ptrdiff_type_node
5006 = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (PTRDIFF_TYPE)));
5007
5008 /* Define both `signed char' and `unsigned char'. */
5009 signed_char_type_node = make_signed_type (CHAR_TYPE_SIZE);
5010 record_builtin_type (RID_MAX, "signed char", signed_char_type_node);
5011 unsigned_char_type_node = make_unsigned_type (CHAR_TYPE_SIZE);
5012 record_builtin_type (RID_MAX, "unsigned char", unsigned_char_type_node);
5013
5014 /* These are types that type_for_size and type_for_mode use. */
5015 intQI_type_node = make_signed_type (GET_MODE_BITSIZE (QImode));
5016 pushdecl (build_decl (TYPE_DECL, NULL_TREE, intQI_type_node));
5017 intHI_type_node = make_signed_type (GET_MODE_BITSIZE (HImode));
5018 pushdecl (build_decl (TYPE_DECL, NULL_TREE, intHI_type_node));
5019 intSI_type_node = make_signed_type (GET_MODE_BITSIZE (SImode));
5020 pushdecl (build_decl (TYPE_DECL, NULL_TREE, intSI_type_node));
5021 intDI_type_node = make_signed_type (GET_MODE_BITSIZE (DImode));
5022 pushdecl (build_decl (TYPE_DECL, NULL_TREE, intDI_type_node));
5023 unsigned_intQI_type_node = make_unsigned_type (GET_MODE_BITSIZE (QImode));
5024 pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intQI_type_node));
5025 unsigned_intHI_type_node = make_unsigned_type (GET_MODE_BITSIZE (HImode));
5026 pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intHI_type_node));
5027 unsigned_intSI_type_node = make_unsigned_type (GET_MODE_BITSIZE (SImode));
5028 pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intSI_type_node));
5029 unsigned_intDI_type_node = make_unsigned_type (GET_MODE_BITSIZE (DImode));
5030 pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intDI_type_node));
5031
5032 float_type_node = make_node (REAL_TYPE);
5033 TYPE_PRECISION (float_type_node) = FLOAT_TYPE_SIZE;
5034 record_builtin_type (RID_FLOAT, NULL_PTR, float_type_node);
5035 layout_type (float_type_node);
5036
5037 double_type_node = make_node (REAL_TYPE);
5038 if (flag_short_double)
5039 TYPE_PRECISION (double_type_node) = FLOAT_TYPE_SIZE;
5040 else
5041 TYPE_PRECISION (double_type_node) = DOUBLE_TYPE_SIZE;
5042 record_builtin_type (RID_DOUBLE, NULL_PTR, double_type_node);
5043 layout_type (double_type_node);
5044
5045 long_double_type_node = make_node (REAL_TYPE);
5046 TYPE_PRECISION (long_double_type_node) = LONG_DOUBLE_TYPE_SIZE;
5047 record_builtin_type (RID_MAX, "long double", long_double_type_node);
5048 layout_type (long_double_type_node);
5049
5050 complex_integer_type_node = make_node (COMPLEX_TYPE);
5051 pushdecl (build_decl (TYPE_DECL, get_identifier ("complex int"),
5052 complex_integer_type_node));
5053 TREE_TYPE (complex_integer_type_node) = integer_type_node;
5054 layout_type (complex_integer_type_node);
5055
5056 complex_float_type_node = make_node (COMPLEX_TYPE);
5057 pushdecl (build_decl (TYPE_DECL, get_identifier ("complex float"),
5058 complex_float_type_node));
5059 TREE_TYPE (complex_float_type_node) = float_type_node;
5060 layout_type (complex_float_type_node);
5061
5062 complex_double_type_node = make_node (COMPLEX_TYPE);
5063 pushdecl (build_decl (TYPE_DECL, get_identifier ("complex double"),
5064 complex_double_type_node));
5065 TREE_TYPE (complex_double_type_node) = double_type_node;
5066 layout_type (complex_double_type_node);
5067
5068 complex_long_double_type_node = make_node (COMPLEX_TYPE);
5069 pushdecl (build_decl (TYPE_DECL, get_identifier ("complex long double"),
5070 complex_long_double_type_node));
5071 TREE_TYPE (complex_long_double_type_node) = long_double_type_node;
5072 layout_type (complex_long_double_type_node);
5073
5074 integer_zero_node = build_int_2 (0, 0);
5075 TREE_TYPE (integer_zero_node) = integer_type_node;
5076 integer_one_node = build_int_2 (1, 0);
5077 TREE_TYPE (integer_one_node) = integer_type_node;
5078 integer_two_node = build_int_2 (2, 0);
5079 TREE_TYPE (integer_two_node) = integer_type_node;
5080 integer_three_node = build_int_2 (3, 0);
5081 TREE_TYPE (integer_three_node) = integer_type_node;
5082
5083 boolean_type_node = make_unsigned_type (BOOL_TYPE_SIZE);
5084 TREE_SET_CODE (boolean_type_node, BOOLEAN_TYPE);
5085 record_builtin_type (RID_BOOL, "bool", boolean_type_node);
5086 boolean_false_node = build_int_2 (0, 0);
5087 TREE_TYPE (boolean_false_node) = boolean_type_node;
5088 boolean_true_node = build_int_2 (1, 0);
5089 TREE_TYPE (boolean_true_node) = boolean_type_node;
5090
5091 /* These are needed by stor-layout.c. */
5092 size_zero_node = size_int (0);
5093 size_one_node = size_int (1);
5094
5095 signed_size_zero_node = build_int_2 (0, 0);
5096 TREE_TYPE (signed_size_zero_node) = make_signed_type (TYPE_PRECISION (sizetype));
5097
5098 void_type_node = make_node (VOID_TYPE);
5099 record_builtin_type (RID_VOID, NULL_PTR, void_type_node);
5100 layout_type (void_type_node); /* Uses integer_zero_node. */
5101 void_list_node = build_tree_list (NULL_TREE, void_type_node);
5102 TREE_PARMLIST (void_list_node) = 1;
5103
5104 null_pointer_node = build_int_2 (0, 0);
5105 TREE_TYPE (null_pointer_node) = build_pointer_type (void_type_node);
5106 layout_type (TREE_TYPE (null_pointer_node));
5107
5108 /* Used for expressions that do nothing, but are not errors. */
5109 void_zero_node = build_int_2 (0, 0);
5110 TREE_TYPE (void_zero_node) = void_type_node;
5111
5112 string_type_node = build_pointer_type (char_type_node);
5113 const_string_type_node
5114 = build_pointer_type (build_type_variant (char_type_node, 1, 0));
5115 #if 0
5116 record_builtin_type (RID_MAX, NULL_PTR, string_type_node);
5117 #endif
5118
5119 /* Make a type to be the domain of a few array types
5120 whose domains don't really matter.
5121 200 is small enough that it always fits in size_t
5122 and large enough that it can hold most function names for the
5123 initializations of __FUNCTION__ and __PRETTY_FUNCTION__. */
5124 array_domain_type = build_index_type (build_int_2 (200, 0));
5125
5126 /* make a type for arrays of characters.
5127 With luck nothing will ever really depend on the length of this
5128 array type. */
5129 char_array_type_node
5130 = build_array_type (char_type_node, array_domain_type);
5131 /* Likewise for arrays of ints. */
5132 int_array_type_node
5133 = build_array_type (integer_type_node, array_domain_type);
5134
5135 /* This is just some anonymous class type. Nobody should ever
5136 need to look inside this envelope. */
5137 class_star_type_node = build_pointer_type (make_lang_type (RECORD_TYPE));
5138
5139 default_function_type
5140 = build_function_type (integer_type_node, NULL_TREE);
5141
5142 ptr_type_node = build_pointer_type (void_type_node);
5143 const_ptr_type_node
5144 = build_pointer_type (build_type_variant (void_type_node, 1, 0));
5145 #if 0
5146 record_builtin_type (RID_MAX, NULL_PTR, ptr_type_node);
5147 #endif
5148 endlink = void_list_node;
5149 int_endlink = tree_cons (NULL_TREE, integer_type_node, endlink);
5150 double_endlink = tree_cons (NULL_TREE, double_type_node, endlink);
5151 unsigned_endlink = tree_cons (NULL_TREE, unsigned_type_node, endlink);
5152
5153 ptr_ftype = build_function_type (ptr_type_node, NULL_TREE);
5154 ptr_ftype_unsigned = build_function_type (ptr_type_node, unsigned_endlink);
5155 sizetype_endlink = tree_cons (NULL_TREE, sizetype, endlink);
5156 /* We realloc here because sizetype could be int or unsigned. S'ok. */
5157 ptr_ftype_sizetype = build_function_type (ptr_type_node, sizetype_endlink);
5158
5159 void_ftype = build_function_type (void_type_node, endlink);
5160 void_ftype_int = build_function_type (void_type_node, int_endlink);
5161 void_ftype_ptr
5162 = build_function_type (void_type_node,
5163 tree_cons (NULL_TREE, ptr_type_node, endlink));
5164 void_ftype_ptr
5165 = build_exception_variant (void_ftype_ptr,
5166 tree_cons (NULL_TREE, NULL_TREE, NULL_TREE));
5167
5168 float_ftype_float
5169 = build_function_type (float_type_node,
5170 tree_cons (NULL_TREE, float_type_node, endlink));
5171
5172 double_ftype_double
5173 = build_function_type (double_type_node, double_endlink);
5174
5175 ldouble_ftype_ldouble
5176 = build_function_type (long_double_type_node,
5177 tree_cons (NULL_TREE, long_double_type_node,
5178 endlink));
5179
5180 double_ftype_double_double
5181 = build_function_type (double_type_node,
5182 tree_cons (NULL_TREE, double_type_node,
5183 double_endlink));
5184
5185 int_ftype_int
5186 = build_function_type (integer_type_node, int_endlink);
5187
5188 long_ftype_long
5189 = build_function_type (long_integer_type_node,
5190 tree_cons (NULL_TREE, long_integer_type_node,
5191 endlink));
5192
5193 int_ftype_cptr_cptr_sizet
5194 = build_function_type (integer_type_node,
5195 tree_cons (NULL_TREE, const_ptr_type_node,
5196 tree_cons (NULL_TREE, const_ptr_type_node,
5197 tree_cons (NULL_TREE,
5198 sizetype,
5199 endlink))));
5200
5201 string_ftype_ptr_ptr /* strcpy prototype */
5202 = build_function_type (string_type_node,
5203 tree_cons (NULL_TREE, string_type_node,
5204 tree_cons (NULL_TREE,
5205 const_string_type_node,
5206 endlink)));
5207
5208 int_ftype_string_string /* strcmp prototype */
5209 = build_function_type (integer_type_node,
5210 tree_cons (NULL_TREE, const_string_type_node,
5211 tree_cons (NULL_TREE,
5212 const_string_type_node,
5213 endlink)));
5214
5215 strlen_ftype /* strlen prototype */
5216 = build_function_type (sizetype,
5217 tree_cons (NULL_TREE, const_string_type_node,
5218 endlink));
5219
5220 memcpy_ftype /* memcpy prototype */
5221 = build_function_type (ptr_type_node,
5222 tree_cons (NULL_TREE, ptr_type_node,
5223 tree_cons (NULL_TREE, const_ptr_type_node,
5224 sizetype_endlink)));
5225
5226 if (flag_huge_objects)
5227 delta_type_node = long_integer_type_node;
5228 else
5229 delta_type_node = short_integer_type_node;
5230
5231 builtin_function ("__builtin_constant_p", default_function_type,
5232 BUILT_IN_CONSTANT_P, NULL_PTR);
5233
5234 builtin_return_address_fndecl
5235 = builtin_function ("__builtin_return_address", ptr_ftype_unsigned,
5236 BUILT_IN_RETURN_ADDRESS, NULL_PTR);
5237
5238 builtin_function ("__builtin_frame_address", ptr_ftype_unsigned,
5239 BUILT_IN_FRAME_ADDRESS, NULL_PTR);
5240
5241 ptr_ftype_void = build_function_type (ptr_type_node, endlink);
5242 builtin_function ("__builtin_fp", ptr_ftype_void, BUILT_IN_FP, NULL_PTR);
5243 builtin_function ("__builtin_sp", ptr_ftype_void, BUILT_IN_SP, NULL_PTR);
5244
5245 builtin_function ("__builtin_alloca", ptr_ftype_sizetype,
5246 BUILT_IN_ALLOCA, "alloca");
5247 builtin_function ("__builtin_ffs", int_ftype_int, BUILT_IN_FFS, NULL_PTR);
5248 /* Define alloca, ffs as builtins.
5249 Declare _exit just to mark it as volatile. */
5250 if (! flag_no_builtin && !flag_no_nonansi_builtin)
5251 {
5252 temp = builtin_function ("alloca", ptr_ftype_sizetype,
5253 BUILT_IN_ALLOCA, NULL_PTR);
5254 /* Suppress error if redefined as a non-function. */
5255 DECL_BUILT_IN_NONANSI (temp) = 1;
5256 temp = builtin_function ("ffs", int_ftype_int, BUILT_IN_FFS, NULL_PTR);
5257 /* Suppress error if redefined as a non-function. */
5258 DECL_BUILT_IN_NONANSI (temp) = 1;
5259 temp = builtin_function ("_exit", void_ftype_int,
5260 NOT_BUILT_IN, NULL_PTR);
5261 TREE_THIS_VOLATILE (temp) = 1;
5262 TREE_SIDE_EFFECTS (temp) = 1;
5263 /* Suppress error if redefined as a non-function. */
5264 DECL_BUILT_IN_NONANSI (temp) = 1;
5265 }
5266
5267 builtin_function ("__builtin_abs", int_ftype_int, BUILT_IN_ABS, NULL_PTR);
5268 builtin_function ("__builtin_fabsf", float_ftype_float, BUILT_IN_FABS,
5269 NULL_PTR);
5270 builtin_function ("__builtin_fabs", double_ftype_double, BUILT_IN_FABS,
5271 NULL_PTR);
5272 builtin_function ("__builtin_fabsl", ldouble_ftype_ldouble, BUILT_IN_FABS,
5273 NULL_PTR);
5274 builtin_function ("__builtin_labs", long_ftype_long,
5275 BUILT_IN_LABS, NULL_PTR);
5276 builtin_function ("__builtin_saveregs", ptr_ftype,
5277 BUILT_IN_SAVEREGS, NULL_PTR);
5278 builtin_function ("__builtin_classify_type", default_function_type,
5279 BUILT_IN_CLASSIFY_TYPE, NULL_PTR);
5280 builtin_function ("__builtin_next_arg", ptr_ftype,
5281 BUILT_IN_NEXT_ARG, NULL_PTR);
5282 builtin_function ("__builtin_args_info", int_ftype_int,
5283 BUILT_IN_ARGS_INFO, NULL_PTR);
5284 builtin_function ("__builtin_setjmp",
5285 build_function_type (integer_type_node,
5286 tree_cons (NULL_TREE, ptr_type_node,
5287 endlink)),
5288 BUILT_IN_SETJMP, NULL_PTR);
5289 builtin_function ("__builtin_longjmp",
5290 build_function_type (integer_type_node,
5291 tree_cons (NULL_TREE, ptr_type_node,
5292 tree_cons (NULL_TREE,
5293 integer_type_node,
5294 endlink))),
5295 BUILT_IN_LONGJMP, NULL_PTR);
5296
5297 /* Untyped call and return. */
5298 builtin_function ("__builtin_apply_args", ptr_ftype,
5299 BUILT_IN_APPLY_ARGS, NULL_PTR);
5300
5301 temp = tree_cons (NULL_TREE,
5302 build_pointer_type (build_function_type (void_type_node,
5303 NULL_TREE)),
5304 ptr_ftype_sizetype);
5305 builtin_function ("__builtin_apply",
5306 build_function_type (ptr_type_node, temp),
5307 BUILT_IN_APPLY, NULL_PTR);
5308 builtin_function ("__builtin_return", void_ftype_ptr,
5309 BUILT_IN_RETURN, NULL_PTR);
5310
5311 /* Currently under experimentation. */
5312 builtin_function ("__builtin_memcpy", memcpy_ftype,
5313 BUILT_IN_MEMCPY, "memcpy");
5314 builtin_function ("__builtin_memcmp", int_ftype_cptr_cptr_sizet,
5315 BUILT_IN_MEMCMP, "memcmp");
5316 builtin_function ("__builtin_strcmp", int_ftype_string_string,
5317 BUILT_IN_STRCMP, "strcmp");
5318 builtin_function ("__builtin_strcpy", string_ftype_ptr_ptr,
5319 BUILT_IN_STRCPY, "strcpy");
5320 builtin_function ("__builtin_strlen", strlen_ftype,
5321 BUILT_IN_STRLEN, "strlen");
5322 builtin_function ("__builtin_sqrtf", float_ftype_float,
5323 BUILT_IN_FSQRT, "sqrtf");
5324 builtin_function ("__builtin_fsqrt", double_ftype_double,
5325 BUILT_IN_FSQRT, NULL_PTR);
5326 builtin_function ("__builtin_sqrtl", ldouble_ftype_ldouble,
5327 BUILT_IN_FSQRT, "sqrtl");
5328 builtin_function ("__builtin_sinf", float_ftype_float,
5329 BUILT_IN_SIN, "sinf");
5330 builtin_function ("__builtin_sin", double_ftype_double,
5331 BUILT_IN_SIN, "sin");
5332 builtin_function ("__builtin_sinl", ldouble_ftype_ldouble,
5333 BUILT_IN_SIN, "sinl");
5334 builtin_function ("__builtin_cosf", float_ftype_float,
5335 BUILT_IN_COS, "cosf");
5336 builtin_function ("__builtin_cos", double_ftype_double,
5337 BUILT_IN_COS, "cos");
5338 builtin_function ("__builtin_cosl", ldouble_ftype_ldouble,
5339 BUILT_IN_COS, "cosl");
5340
5341 if (!flag_no_builtin)
5342 {
5343 #if 0 /* These do not work well with libg++. */
5344 builtin_function ("abs", int_ftype_int, BUILT_IN_ABS, NULL_PTR);
5345 builtin_function ("fabs", double_ftype_double, BUILT_IN_FABS, NULL_PTR);
5346 builtin_function ("labs", long_ftype_long, BUILT_IN_LABS, NULL_PTR);
5347 #endif
5348 builtin_function ("fabsf", float_ftype_float, BUILT_IN_FABS, NULL_PTR);
5349 builtin_function ("fabsl", ldouble_ftype_ldouble, BUILT_IN_FABS,
5350 NULL_PTR);
5351 builtin_function ("memcpy", memcpy_ftype, BUILT_IN_MEMCPY, NULL_PTR);
5352 builtin_function ("memcmp", int_ftype_cptr_cptr_sizet, BUILT_IN_MEMCMP,
5353 NULL_PTR);
5354 builtin_function ("strcmp", int_ftype_string_string, BUILT_IN_STRCMP,
5355 NULL_PTR);
5356 builtin_function ("strcpy", string_ftype_ptr_ptr, BUILT_IN_STRCPY,
5357 NULL_PTR);
5358 builtin_function ("strlen", strlen_ftype, BUILT_IN_STRLEN, NULL_PTR);
5359 builtin_function ("sqrtf", float_ftype_float, BUILT_IN_FSQRT, NULL_PTR);
5360 builtin_function ("sqrt", double_ftype_double, BUILT_IN_FSQRT, NULL_PTR);
5361 builtin_function ("sqrtl", ldouble_ftype_ldouble, BUILT_IN_FSQRT,
5362 NULL_PTR);
5363 builtin_function ("sinf", float_ftype_float, BUILT_IN_SIN, NULL_PTR);
5364 builtin_function ("sin", double_ftype_double, BUILT_IN_SIN, NULL_PTR);
5365 builtin_function ("sinl", ldouble_ftype_ldouble, BUILT_IN_SIN, NULL_PTR);
5366 builtin_function ("cosf", float_ftype_float, BUILT_IN_COS, NULL_PTR);
5367 builtin_function ("cos", double_ftype_double, BUILT_IN_COS, NULL_PTR);
5368 builtin_function ("cosl", ldouble_ftype_ldouble, BUILT_IN_COS, NULL_PTR);
5369
5370 /* Declare these functions volatile
5371 to avoid spurious "control drops through" warnings. */
5372 temp = builtin_function ("abort", void_ftype,
5373 NOT_BUILT_IN, NULL_PTR);
5374 TREE_THIS_VOLATILE (temp) = 1;
5375 TREE_SIDE_EFFECTS (temp) = 1;
5376 /* Well, these are actually ANSI, but we can't set DECL_BUILT_IN on
5377 them... */
5378 DECL_BUILT_IN_NONANSI (temp) = 1;
5379 temp = builtin_function ("exit", void_ftype_int,
5380 NOT_BUILT_IN, NULL_PTR);
5381 TREE_THIS_VOLATILE (temp) = 1;
5382 TREE_SIDE_EFFECTS (temp) = 1;
5383 DECL_BUILT_IN_NONANSI (temp) = 1;
5384 }
5385
5386 #if 0
5387 /* Support for these has not been written in either expand_builtin
5388 or build_function_call. */
5389 builtin_function ("__builtin_div", default_ftype, BUILT_IN_DIV, NULL_PTR);
5390 builtin_function ("__builtin_ldiv", default_ftype, BUILT_IN_LDIV, NULL_PTR);
5391 builtin_function ("__builtin_ffloor", double_ftype_double, BUILT_IN_FFLOOR,
5392 NULL_PTR);
5393 builtin_function ("__builtin_fceil", double_ftype_double, BUILT_IN_FCEIL,
5394 NULL_PTR);
5395 builtin_function ("__builtin_fmod", double_ftype_double_double,
5396 BUILT_IN_FMOD, NULL_PTR);
5397 builtin_function ("__builtin_frem", double_ftype_double_double,
5398 BUILT_IN_FREM, NULL_PTR);
5399 builtin_function ("__builtin_memset", ptr_ftype_ptr_int_int,
5400 BUILT_IN_MEMSET, NULL_PTR);
5401 builtin_function ("__builtin_getexp", double_ftype_double, BUILT_IN_GETEXP,
5402 NULL_PTR);
5403 builtin_function ("__builtin_getman", double_ftype_double, BUILT_IN_GETMAN,
5404 NULL_PTR);
5405 #endif
5406
5407 /* C++ extensions */
5408
5409 unknown_type_node = make_node (UNKNOWN_TYPE);
5410 decl = pushdecl (build_decl (TYPE_DECL, get_identifier ("unknown type"),
5411 unknown_type_node));
5412 /* Make sure the "unknown type" typedecl gets ignored for debug info. */
5413 DECL_IGNORED_P (decl) = 1;
5414 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
5415 TYPE_SIZE (unknown_type_node) = TYPE_SIZE (void_type_node);
5416 TYPE_ALIGN (unknown_type_node) = 1;
5417 TYPE_MODE (unknown_type_node) = TYPE_MODE (void_type_node);
5418 /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node. */
5419 TREE_TYPE (unknown_type_node) = unknown_type_node;
5420
5421 if (flag_ansi)
5422 TREE_TYPE (null_node) = type_for_size (POINTER_SIZE, 0);
5423 else
5424 TREE_TYPE (null_node) = build_pointer_type (unknown_type_node);
5425
5426 /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
5427 result. */
5428 TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
5429 TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
5430
5431 /* This is for handling opaque types in signatures. */
5432 opaque_type_node = copy_node (ptr_type_node);
5433 TYPE_MAIN_VARIANT (opaque_type_node) = opaque_type_node;
5434 record_builtin_type (RID_MAX, 0, opaque_type_node);
5435
5436 /* This is special for C++ so functions can be overloaded. */
5437 wchar_type_node
5438 = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (WCHAR_TYPE)));
5439 wchar_type_size = TYPE_PRECISION (wchar_type_node);
5440 signed_wchar_type_node = make_signed_type (wchar_type_size);
5441 unsigned_wchar_type_node = make_unsigned_type (wchar_type_size);
5442 wchar_type_node
5443 = TREE_UNSIGNED (wchar_type_node)
5444 ? unsigned_wchar_type_node
5445 : signed_wchar_type_node;
5446 record_builtin_type (RID_WCHAR, "__wchar_t", wchar_type_node);
5447
5448 /* Artificial declaration of wchar_t -- can be bashed */
5449 wchar_decl_node = build_decl (TYPE_DECL, get_identifier ("wchar_t"),
5450 wchar_type_node);
5451 pushdecl (wchar_decl_node);
5452
5453 /* This is for wide string constants. */
5454 wchar_array_type_node
5455 = build_array_type (wchar_type_node, array_domain_type);
5456
5457 if (flag_vtable_thunks)
5458 {
5459 /* Make sure we get a unique function type, so we can give
5460 its pointer type a name. (This wins for gdb.) */
5461 tree vfunc_type = make_node (FUNCTION_TYPE);
5462 TREE_TYPE (vfunc_type) = integer_type_node;
5463 TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
5464 layout_type (vfunc_type);
5465
5466 vtable_entry_type = build_pointer_type (vfunc_type);
5467 }
5468 else
5469 {
5470 vtable_entry_type = make_lang_type (RECORD_TYPE);
5471 fields[0] = build_lang_field_decl (FIELD_DECL, delta_identifier,
5472 delta_type_node);
5473 fields[1] = build_lang_field_decl (FIELD_DECL, index_identifier,
5474 delta_type_node);
5475 fields[2] = build_lang_field_decl (FIELD_DECL, pfn_identifier,
5476 ptr_type_node);
5477 finish_builtin_type (vtable_entry_type, VTBL_PTR_TYPE, fields, 2,
5478 double_type_node);
5479
5480 /* Make this part of an invisible union. */
5481 fields[3] = copy_node (fields[2]);
5482 TREE_TYPE (fields[3]) = delta_type_node;
5483 DECL_NAME (fields[3]) = delta2_identifier;
5484 DECL_MODE (fields[3]) = TYPE_MODE (delta_type_node);
5485 DECL_SIZE (fields[3]) = TYPE_SIZE (delta_type_node);
5486 TREE_UNSIGNED (fields[3]) = 0;
5487 TREE_CHAIN (fields[2]) = fields[3];
5488 vtable_entry_type = build_type_variant (vtable_entry_type, 1, 0);
5489 }
5490 record_builtin_type (RID_MAX, VTBL_PTR_TYPE, vtable_entry_type);
5491
5492 vtbl_type_node
5493 = build_array_type (vtable_entry_type, NULL_TREE);
5494 layout_type (vtbl_type_node);
5495 vtbl_type_node = cp_build_type_variant (vtbl_type_node, 1, 0);
5496 record_builtin_type (RID_MAX, NULL_PTR, vtbl_type_node);
5497
5498 /* Simplify life by making a "sigtable_entry_type". Give its
5499 fields names so that the debugger can use them. */
5500
5501 if (flag_handle_signatures)
5502 {
5503 sigtable_entry_type = make_lang_type (RECORD_TYPE);
5504 fields[0] = build_lang_field_decl (FIELD_DECL, tag_identifier,
5505 delta_type_node);
5506 fields[1] = build_lang_field_decl (FIELD_DECL, vb_off_identifier,
5507 delta_type_node);
5508 fields[2] = build_lang_field_decl (FIELD_DECL, delta_identifier,
5509 delta_type_node);
5510 fields[3] = build_lang_field_decl (FIELD_DECL, index_identifier,
5511 delta_type_node);
5512 fields[4] = build_lang_field_decl (FIELD_DECL, pfn_identifier,
5513 ptr_type_node);
5514
5515 /* Set the alignment to the max of the alignment of ptr_type_node and
5516 delta_type_node. Double alignment wastes a word on the Sparc. */
5517 finish_builtin_type (sigtable_entry_type, SIGTABLE_PTR_TYPE, fields, 4,
5518 (TYPE_ALIGN (ptr_type_node) > TYPE_ALIGN (delta_type_node))
5519 ? ptr_type_node
5520 : delta_type_node);
5521
5522 /* Make this part of an invisible union. */
5523 fields[5] = copy_node (fields[4]);
5524 TREE_TYPE (fields[5]) = delta_type_node;
5525 DECL_NAME (fields[5]) = vt_off_identifier;
5526 DECL_MODE (fields[5]) = TYPE_MODE (delta_type_node);
5527 DECL_SIZE (fields[5]) = TYPE_SIZE (delta_type_node);
5528 TREE_UNSIGNED (fields[5]) = 0;
5529 TREE_CHAIN (fields[4]) = fields[5];
5530
5531 sigtable_entry_type = build_type_variant (sigtable_entry_type, 1, 0);
5532 record_builtin_type (RID_MAX, SIGTABLE_PTR_TYPE, sigtable_entry_type);
5533 }
5534
5535 std_node = build_decl (NAMESPACE_DECL, get_identifier ("std"),
5536 void_type_node);
5537 pushdecl (std_node);
5538
5539 #if 0
5540 if (flag_rtti)
5541 {
5542 /* Must build __t_desc type. Currently, type descriptors look like this:
5543
5544 struct __t_desc
5545 {
5546 const char *name;
5547 int size;
5548 int bits;
5549 struct __t_desc *points_to;
5550 int ivars_count, meths_count;
5551 struct __i_desc *ivars[];
5552 struct __m_desc *meths[];
5553 struct __t_desc *parents[];
5554 struct __t_desc *vbases[];
5555 int offsets[];
5556 };
5557
5558 ...as per Linton's paper. */
5559
5560 __t_desc_type_node = make_lang_type (RECORD_TYPE);
5561 __i_desc_type_node = make_lang_type (RECORD_TYPE);
5562 __m_desc_type_node = make_lang_type (RECORD_TYPE);
5563 __t_desc_array_type
5564 = build_array_type (build_pointer_type (__t_desc_type_node),
5565 NULL_TREE);
5566 __i_desc_array_type
5567 = build_array_type (build_pointer_type (__i_desc_type_node),
5568 NULL_TREE);
5569 __m_desc_array_type
5570 = build_array_type (build_pointer_type (__m_desc_type_node),
5571 NULL_TREE);
5572
5573 fields[0] = build_lang_field_decl (FIELD_DECL, get_identifier ("name"),
5574 string_type_node);
5575 fields[1] = build_lang_field_decl (FIELD_DECL, get_identifier ("size"),
5576 unsigned_type_node);
5577 fields[2] = build_lang_field_decl (FIELD_DECL, get_identifier ("bits"),
5578 unsigned_type_node);
5579 fields[3] = build_lang_field_decl (FIELD_DECL,
5580 get_identifier ("points_to"),
5581 build_pointer_type (__t_desc_type_node));
5582 fields[4] = build_lang_field_decl (FIELD_DECL,
5583 get_identifier ("ivars_count"),
5584 integer_type_node);
5585 fields[5] = build_lang_field_decl (FIELD_DECL,
5586 get_identifier ("meths_count"),
5587 integer_type_node);
5588 fields[6] = build_lang_field_decl (FIELD_DECL, get_identifier ("ivars"),
5589 build_pointer_type (__i_desc_array_type));
5590 fields[7] = build_lang_field_decl (FIELD_DECL, get_identifier ("meths"),
5591 build_pointer_type (__m_desc_array_type));
5592 fields[8] = build_lang_field_decl (FIELD_DECL, get_identifier ("parents"),
5593 build_pointer_type (__t_desc_array_type));
5594 fields[9] = build_lang_field_decl (FIELD_DECL, get_identifier ("vbases"),
5595 build_pointer_type (__t_desc_array_type));
5596 fields[10] = build_lang_field_decl (FIELD_DECL, get_identifier ("offsets"),
5597 build_pointer_type (integer_type_node));
5598 finish_builtin_type (__t_desc_type_node, "__t_desc", fields, 10, integer_type_node);
5599
5600 /* ivar descriptors look like this:
5601
5602 struct __i_desc
5603 {
5604 const char *name;
5605 int offset;
5606 struct __t_desc *type;
5607 };
5608 */
5609
5610 fields[0] = build_lang_field_decl (FIELD_DECL, get_identifier ("name"),
5611 string_type_node);
5612 fields[1] = build_lang_field_decl (FIELD_DECL, get_identifier ("offset"),
5613 integer_type_node);
5614 fields[2] = build_lang_field_decl (FIELD_DECL, get_identifier ("type"),
5615 build_pointer_type (__t_desc_type_node));
5616 finish_builtin_type (__i_desc_type_node, "__i_desc", fields, 2,
5617 integer_type_node);
5618
5619 /* method descriptors look like this:
5620
5621 struct __m_desc
5622 {
5623 const char *name;
5624 int vindex;
5625 struct __t_desc *vcontext;
5626 struct __t_desc *return_type;
5627 void (*address)();
5628 short parm_count;
5629 short required_parms;
5630 struct __t_desc *parm_types[];
5631 };
5632 */
5633
5634 fields[0] = build_lang_field_decl (FIELD_DECL, get_identifier ("name"),
5635 string_type_node);
5636 fields[1] = build_lang_field_decl (FIELD_DECL, get_identifier ("vindex"),
5637 integer_type_node);
5638 fields[2] = build_lang_field_decl (FIELD_DECL, get_identifier ("vcontext"),
5639 build_pointer_type (__t_desc_type_node));
5640 fields[3] = build_lang_field_decl (FIELD_DECL, get_identifier ("return_type"),
5641 build_pointer_type (__t_desc_type_node));
5642 fields[4] = build_lang_field_decl (FIELD_DECL, get_identifier ("address"),
5643 build_pointer_type (default_function_type));
5644 fields[5] = build_lang_field_decl (FIELD_DECL, get_identifier ("parm_count"),
5645 short_integer_type_node);
5646 fields[6] = build_lang_field_decl (FIELD_DECL, get_identifier ("required_parms"),
5647 short_integer_type_node);
5648 fields[7] = build_lang_field_decl (FIELD_DECL, get_identifier ("parm_types"),
5649 build_pointer_type (build_array_type (build_pointer_type (__t_desc_type_node), NULL_TREE)));
5650 finish_builtin_type (__m_desc_type_node, "__m_desc", fields, 7,
5651 integer_type_node);
5652 }
5653 #endif /*flag_rtti*/
5654
5655 /* Now, C++. */
5656 current_lang_name = lang_name_cplusplus;
5657
5658 {
5659 tree bad_alloc_type_node = xref_tag
5660 (class_type_node, get_identifier ("bad_alloc"), NULL_TREE, 1);
5661 tree newtype = build_exception_variant
5662 (ptr_ftype_sizetype, build_tree_list (NULL_TREE, bad_alloc_type_node));
5663 tree deltype = build_exception_variant
5664 (void_ftype_ptr, build_tree_list (NULL_TREE, NULL_TREE));
5665 auto_function (ansi_opname[(int) NEW_EXPR], newtype, NOT_BUILT_IN);
5666 auto_function (ansi_opname[(int) VEC_NEW_EXPR], newtype, NOT_BUILT_IN);
5667 auto_function (ansi_opname[(int) DELETE_EXPR], deltype, NOT_BUILT_IN);
5668 auto_function (ansi_opname[(int) VEC_DELETE_EXPR], deltype, NOT_BUILT_IN);
5669 }
5670
5671 abort_fndecl
5672 = define_function ("__pure_virtual", void_ftype,
5673 NOT_BUILT_IN, 0, 0);
5674
5675 /* Perform other language dependent initializations. */
5676 init_class_processing ();
5677 init_init_processing ();
5678 init_search_processing ();
5679 if (flag_rtti)
5680 init_rtti_processing ();
5681
5682 if (flag_exceptions)
5683 init_exception_processing ();
5684 if (flag_no_inline)
5685 {
5686 flag_inline_functions = 0;
5687 }
5688
5689 if (! supports_one_only ())
5690 flag_weak = 0;
5691
5692 /* Create the global bindings for __FUNCTION__ and __PRETTY_FUNCTION__. */
5693 declare_function_name ();
5694
5695 /* Prepare to check format strings against argument lists. */
5696 init_function_format_info ();
5697
5698 /* Show we use EH for cleanups. */
5699 using_eh_for_cleanups ();
5700 }
5701
5702 /* initialize type descriptor type node of various rtti type. */
5703
5704 int
5705 init_type_desc()
5706 {
5707 tree tdecl;
5708
5709 tdecl = lookup_name (get_identifier ("type_info"), 0);
5710 if (tdecl == NULL_TREE)
5711 return 0;
5712 __t_desc_type_node = TREE_TYPE (tdecl);
5713 #if 0
5714 __tp_desc_type_node = build_pointer_type (__t_desc_type_node);
5715 #endif
5716
5717 #if 0
5718 tdecl = lookup_name (get_identifier ("__baselist_type_info"), 0);
5719 if (tdecl == NULL_TREE)
5720 return 0;
5721 __baselist_desc_type_node = TREE_TYPE (tdecl);
5722 #endif
5723
5724 tdecl = lookup_name (get_identifier ("__builtin_type_info"), 0);
5725 if (tdecl == NULL_TREE)
5726 return 0;
5727 __bltn_desc_type_node = TREE_TYPE (tdecl);
5728
5729 tdecl = lookup_name (get_identifier ("__user_type_info"), 0);
5730 if (tdecl == NULL_TREE)
5731 return 0;
5732 __user_desc_type_node = TREE_TYPE (tdecl);
5733
5734 tdecl = lookup_name (get_identifier ("__class_type_info"), 0);
5735 if (tdecl == NULL_TREE)
5736 return 0;
5737 __class_desc_type_node = TREE_TYPE (tdecl);
5738
5739 tdecl = lookup_field (__class_desc_type_node,
5740 get_identifier ("access_mode"), 0, 0);
5741 if (tdecl == NULL_TREE)
5742 return 0;
5743 __access_mode_type_node = TREE_TYPE (tdecl);
5744
5745 tdecl = lookup_name (get_identifier ("__attr_type_info"), 0);
5746 if (tdecl == NULL_TREE)
5747 return 0;
5748 __attr_desc_type_node = TREE_TYPE (tdecl);
5749
5750 tdecl = lookup_name (get_identifier ("__pointer_type_info"), 0);
5751 if (tdecl == NULL_TREE)
5752 return 0;
5753 __ptr_desc_type_node = TREE_TYPE (tdecl);
5754
5755 tdecl = lookup_name (get_identifier ("__func_type_info"), 0);
5756 if (tdecl == NULL_TREE)
5757 return 0;
5758 __func_desc_type_node = TREE_TYPE (tdecl);
5759
5760 tdecl = lookup_name (get_identifier ("__ptmf_type_info"), 0);
5761 if (tdecl == NULL_TREE)
5762 return 0;
5763 __ptmf_desc_type_node = TREE_TYPE (tdecl);
5764
5765 tdecl = lookup_name (get_identifier ("__ptmd_type_info"), 0);
5766 if (tdecl == NULL_TREE)
5767 return 0;
5768 __ptmd_desc_type_node = TREE_TYPE (tdecl);
5769
5770 return 1;
5771 }
5772 /* Make a definition for a builtin function named NAME and whose data type
5773 is TYPE. TYPE should be a function type with argument types.
5774 FUNCTION_CODE tells later passes how to compile calls to this function.
5775 See tree.h for its possible values.
5776
5777 If LIBRARY_NAME is nonzero, use that for DECL_ASSEMBLER_NAME,
5778 the name to be called if we can't opencode the function. */
5779
5780 tree
5781 define_function (name, type, function_code, pfn, library_name)
5782 char *name;
5783 tree type;
5784 enum built_in_function function_code;
5785 void (*pfn) PROTO((tree));
5786 char *library_name;
5787 {
5788 tree decl = build_lang_decl (FUNCTION_DECL, get_identifier (name), type);
5789 DECL_EXTERNAL (decl) = 1;
5790 TREE_PUBLIC (decl) = 1;
5791 DECL_ARTIFICIAL (decl) = 1;
5792
5793 /* Since `pushdecl' relies on DECL_ASSEMBLER_NAME instead of DECL_NAME,
5794 we cannot change DECL_ASSEMBLER_NAME until we have installed this
5795 function in the namespace. */
5796 if (pfn) (*pfn) (decl);
5797 if (library_name)
5798 DECL_ASSEMBLER_NAME (decl) = get_identifier (library_name);
5799 make_function_rtl (decl);
5800 if (function_code != NOT_BUILT_IN)
5801 {
5802 DECL_BUILT_IN (decl) = 1;
5803 DECL_FUNCTION_CODE (decl) = function_code;
5804 }
5805 return decl;
5806 }
5807 \f
5808 /* Called when a declaration is seen that contains no names to declare.
5809 If its type is a reference to a structure, union or enum inherited
5810 from a containing scope, shadow that tag name for the current scope
5811 with a forward reference.
5812 If its type defines a new named structure or union
5813 or defines an enum, it is valid but we need not do anything here.
5814 Otherwise, it is an error.
5815
5816 C++: may have to grok the declspecs to learn about static,
5817 complain for anonymous unions. */
5818
5819 void
5820 shadow_tag (declspecs)
5821 tree declspecs;
5822 {
5823 int found_tag = 0;
5824 tree ob_modifier = NULL_TREE;
5825 register tree link;
5826 register enum tree_code code, ok_code = ERROR_MARK;
5827 register tree t = NULL_TREE;
5828
5829 for (link = declspecs; link; link = TREE_CHAIN (link))
5830 {
5831 register tree value = TREE_VALUE (link);
5832
5833 code = TREE_CODE (value);
5834 if (IS_AGGR_TYPE_CODE (code) || code == ENUMERAL_TYPE)
5835 {
5836 my_friendly_assert (TYPE_MAIN_DECL (value) != NULL_TREE, 261);
5837
5838 if (IS_AGGR_TYPE (value) && CLASSTYPE_USE_TEMPLATE (value))
5839 {
5840 if (CLASSTYPE_IMPLICIT_INSTANTIATION (value)
5841 && TYPE_SIZE (value) == NULL_TREE)
5842 {
5843 SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (value);
5844 if (processing_template_decl)
5845 push_template_decl (TYPE_MAIN_DECL (value));
5846 }
5847 else if (CLASSTYPE_TEMPLATE_INSTANTIATION (value))
5848 cp_error ("specialization after instantiation of `%T'", value);
5849 }
5850
5851 t = value;
5852 ok_code = code;
5853 found_tag++;
5854 }
5855 else if (value == ridpointers[(int) RID_STATIC]
5856 || value == ridpointers[(int) RID_EXTERN]
5857 || value == ridpointers[(int) RID_AUTO]
5858 || value == ridpointers[(int) RID_REGISTER]
5859 || value == ridpointers[(int) RID_INLINE]
5860 || value == ridpointers[(int) RID_VIRTUAL]
5861 || value == ridpointers[(int) RID_EXPLICIT])
5862 ob_modifier = value;
5863 }
5864
5865 /* This is where the variables in an anonymous union are
5866 declared. An anonymous union declaration looks like:
5867 union { ... } ;
5868 because there is no declarator after the union, the parser
5869 sends that declaration here. */
5870 if (ok_code == UNION_TYPE
5871 && t != NULL_TREE
5872 && ((TREE_CODE (TYPE_NAME (t)) == IDENTIFIER_NODE
5873 && ANON_AGGRNAME_P (TYPE_NAME (t)))
5874 || (TREE_CODE (TYPE_NAME (t)) == TYPE_DECL
5875 && ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))))
5876 {
5877 /* See also grok_x_components. */
5878 tree *q;
5879
5880 /* Wipe out memory of synthesized methods */
5881 TYPE_HAS_CONSTRUCTOR (t) = 0;
5882 TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
5883 TYPE_HAS_INIT_REF (t) = 0;
5884 TYPE_HAS_CONST_INIT_REF (t) = 0;
5885 TYPE_HAS_ASSIGN_REF (t) = 0;
5886 TYPE_HAS_ASSIGNMENT (t) = 0;
5887 TYPE_HAS_CONST_ASSIGN_REF (t) = 0;
5888
5889 q = &TYPE_METHODS (t);
5890 while (*q)
5891 {
5892 if (DECL_ARTIFICIAL (*q))
5893 *q = TREE_CHAIN (*q);
5894 else
5895 q = &TREE_CHAIN (*q);
5896 }
5897
5898 /* ANSI C++ June 5 1992 WP 9.5.3. Anonymous unions may not have
5899 function members. */
5900 if (TYPE_METHODS (t))
5901 error ("an anonymous union cannot have function members");
5902
5903 if (TYPE_FIELDS (t))
5904 {
5905 tree decl = grokdeclarator (NULL_TREE, declspecs, NORMAL, 0,
5906 NULL_TREE);
5907 finish_anon_union (decl);
5908 }
5909 }
5910 else
5911 {
5912 /* Anonymous unions are objects, that's why we only check for
5913 inappropriate specifiers in this branch. */
5914
5915 if (ob_modifier)
5916 {
5917 if (ob_modifier == ridpointers[(int) RID_INLINE]
5918 || ob_modifier == ridpointers[(int) RID_VIRTUAL])
5919 cp_error ("`%D' can only be specified for functions", ob_modifier);
5920 else if (ob_modifier == ridpointers[(int) RID_EXPLICIT])
5921 cp_error ("`%D' can only be specified for constructors",
5922 ob_modifier);
5923 else
5924 cp_error ("`%D' can only be specified for objects and functions",
5925 ob_modifier);
5926 }
5927
5928 if (found_tag == 0)
5929 pedwarn ("abstract declarator used as declaration");
5930 else if (found_tag > 1)
5931 pedwarn ("multiple types in one declaration");
5932 }
5933 }
5934 \f
5935 /* Decode a "typename", such as "int **", returning a ..._TYPE node. */
5936
5937 tree
5938 groktypename (typename)
5939 tree typename;
5940 {
5941 if (TREE_CODE (typename) != TREE_LIST)
5942 return typename;
5943 return grokdeclarator (TREE_VALUE (typename),
5944 TREE_PURPOSE (typename),
5945 TYPENAME, 0, NULL_TREE);
5946 }
5947
5948 /* Decode a declarator in an ordinary declaration or data definition.
5949 This is called as soon as the type information and variable name
5950 have been parsed, before parsing the initializer if any.
5951 Here we create the ..._DECL node, fill in its type,
5952 and put it on the list of decls for the current context.
5953 The ..._DECL node is returned as the value.
5954
5955 Exception: for arrays where the length is not specified,
5956 the type is left null, to be filled in by `cp_finish_decl'.
5957
5958 Function definitions do not come here; they go to start_function
5959 instead. However, external and forward declarations of functions
5960 do go through here. Structure field declarations are done by
5961 grokfield and not through here. */
5962
5963 /* Set this to zero to debug not using the temporary obstack
5964 to parse initializers. */
5965 int debug_temp_inits = 1;
5966
5967 tree
5968 start_decl (declarator, declspecs, initialized)
5969 tree declarator, declspecs;
5970 int initialized;
5971 {
5972 register tree decl;
5973 register tree type, tem;
5974 tree context;
5975 extern int have_extern_spec;
5976 extern int used_extern_spec;
5977
5978 #if 0
5979 /* See code below that used this. */
5980 int init_written = initialized;
5981 #endif
5982
5983 /* This should only be done once on the top most decl. */
5984 if (have_extern_spec && !used_extern_spec)
5985 {
5986 declspecs = decl_tree_cons (NULL_TREE, get_identifier ("extern"),
5987 declspecs);
5988 used_extern_spec = 1;
5989 }
5990
5991 decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
5992 NULL_TREE);
5993 if (decl == NULL_TREE || decl == void_type_node)
5994 return NULL_TREE;
5995
5996 type = TREE_TYPE (decl);
5997
5998 /* Don't lose if destructors must be executed at file-level. */
5999 if (! processing_template_decl && TREE_STATIC (decl)
6000 && TYPE_NEEDS_DESTRUCTOR (complete_type (type))
6001 && !TREE_PERMANENT (decl))
6002 {
6003 push_obstacks (&permanent_obstack, &permanent_obstack);
6004 decl = copy_node (decl);
6005 if (TREE_CODE (type) == ARRAY_TYPE)
6006 {
6007 tree itype = TYPE_DOMAIN (type);
6008 if (itype && ! TREE_PERMANENT (itype))
6009 {
6010 itype = build_index_type (copy_to_permanent (TYPE_MAX_VALUE (itype)));
6011 type = build_cplus_array_type (TREE_TYPE (type), itype);
6012 TREE_TYPE (decl) = type;
6013 }
6014 }
6015 pop_obstacks ();
6016 }
6017
6018 context
6019 = (TREE_CODE (decl) == FUNCTION_DECL && DECL_VIRTUAL_P (decl))
6020 ? DECL_CLASS_CONTEXT (decl)
6021 : DECL_CONTEXT (decl);
6022
6023 if (initialized)
6024 /* Is it valid for this decl to have an initializer at all?
6025 If not, set INITIALIZED to zero, which will indirectly
6026 tell `cp_finish_decl' to ignore the initializer once it is parsed. */
6027 switch (TREE_CODE (decl))
6028 {
6029 case TYPE_DECL:
6030 /* typedef foo = bar means give foo the same type as bar.
6031 We haven't parsed bar yet, so `cp_finish_decl' will fix that up.
6032 Any other case of an initialization in a TYPE_DECL is an error. */
6033 if (pedantic || list_length (declspecs) > 1)
6034 {
6035 cp_error ("typedef `%D' is initialized", decl);
6036 initialized = 0;
6037 }
6038 break;
6039
6040 case FUNCTION_DECL:
6041 cp_error ("function `%#D' is initialized like a variable", decl);
6042 initialized = 0;
6043 break;
6044
6045 default:
6046 if (! processing_template_decl)
6047 {
6048 if (type != error_mark_node)
6049 {
6050 if (TYPE_SIZE (type) != NULL_TREE
6051 && ! TREE_CONSTANT (TYPE_SIZE (type)))
6052 {
6053 cp_error
6054 ("variable-sized object `%D' may not be initialized",
6055 decl);
6056 initialized = 0;
6057 }
6058
6059 if (TREE_CODE (type) == ARRAY_TYPE
6060 && TYPE_SIZE (complete_type (TREE_TYPE (type))) == NULL_TREE)
6061 {
6062 cp_error
6063 ("elements of array `%#D' have incomplete type", decl);
6064 initialized = 0;
6065 }
6066 }
6067 }
6068 }
6069
6070 if (initialized)
6071 {
6072 if (! toplevel_bindings_p ()
6073 && DECL_EXTERNAL (decl))
6074 cp_warning ("declaration of `%#D' has `extern' and is initialized",
6075 decl);
6076 DECL_EXTERNAL (decl) = 0;
6077 if (toplevel_bindings_p ())
6078 TREE_STATIC (decl) = 1;
6079
6080 /* Tell `pushdecl' this is an initialized decl
6081 even though we don't yet have the initializer expression.
6082 Also tell `cp_finish_decl' it may store the real initializer. */
6083 DECL_INITIAL (decl) = error_mark_node;
6084 }
6085
6086 if (context && TYPE_SIZE (complete_type (context)) != NULL_TREE)
6087 {
6088 if (TREE_CODE (decl) == VAR_DECL)
6089 {
6090 tree field = lookup_field (context, DECL_NAME (decl), 0, 0);
6091 if (field == NULL_TREE || TREE_CODE (field) != VAR_DECL)
6092 cp_error ("`%#D' is not a static member of `%#T'", decl, context);
6093 else
6094 {
6095 if (DECL_CONTEXT (field) != context)
6096 {
6097 cp_pedwarn ("ANSI C++ does not permit `%T::%D' to be defined as `%T::%D'",
6098 DECL_CONTEXT (field), DECL_NAME (decl),
6099 context, DECL_NAME (decl));
6100 DECL_CONTEXT (decl) = DECL_CONTEXT (field);
6101 }
6102 /* Static data member are tricky; an in-class initialization
6103 still doesn't provide a definition, so the in-class
6104 declaration will have DECL_EXTERNAL set, but will have an
6105 initialization. Thus, duplicate_decls won't warn
6106 about this situation, and so we check here. */
6107 if (DECL_INITIAL (decl) && DECL_INITIAL (field))
6108 cp_error ("duplicate initialization of %D", decl);
6109 if (duplicate_decls (decl, field))
6110 decl = field;
6111 }
6112 }
6113 else
6114 {
6115 tree field = check_classfn (context, decl);
6116 if (field && duplicate_decls (decl, field))
6117 decl = field;
6118 }
6119
6120 /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set. */
6121 if (DECL_LANG_SPECIFIC (decl))
6122 DECL_IN_AGGR_P (decl) = 0;
6123 if (DECL_USE_TEMPLATE (decl) || CLASSTYPE_USE_TEMPLATE (context))
6124 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
6125
6126 /* Stupid stupid stupid stupid (jason 7/21/95) */
6127 if (pedantic && DECL_EXTERNAL (decl)
6128 && ! DECL_TEMPLATE_SPECIALIZATION (decl))
6129 cp_pedwarn ("declaration of `%#D' outside of class is not definition",
6130 decl);
6131
6132 pushclass (context, 2);
6133 }
6134
6135 /* Add this decl to the current binding level, but not if it
6136 comes from another scope, e.g. a static member variable.
6137 TEM may equal DECL or it may be a previous decl of the same name. */
6138
6139 if ((TREE_CODE (decl) != PARM_DECL && DECL_CONTEXT (decl) != NULL_TREE)
6140 || (TREE_CODE (decl) == TEMPLATE_DECL && !global_bindings_p ())
6141 || TREE_CODE (type) == LANG_TYPE
6142 /* The declaration of template specializations does not affect
6143 the functions available for overload resolution, so we do not
6144 call pushdecl. */
6145 || (TREE_CODE (decl) == FUNCTION_DECL
6146 && DECL_TEMPLATE_SPECIALIZATION (decl)))
6147 tem = decl;
6148 else
6149 tem = pushdecl (decl);
6150
6151 if (processing_template_decl)
6152 {
6153 if (! current_function_decl)
6154 push_template_decl (tem);
6155 else if (minimal_parse_mode)
6156 DECL_VINDEX (decl)
6157 = build_min_nt (DECL_STMT, copy_to_permanent (declarator),
6158 copy_to_permanent (declspecs),
6159 NULL_TREE);
6160 }
6161
6162
6163 #if ! defined (ASM_OUTPUT_BSS) && ! defined (ASM_OUTPUT_ALIGNED_BSS)
6164 /* Tell the back-end to use or not use .common as appropriate. If we say
6165 -fconserve-space, we want this to save .data space, at the expense of
6166 wrong semantics. If we say -fno-conserve-space, we want this to
6167 produce errors about redefs; to do this we force variables into the
6168 data segment. */
6169 DECL_COMMON (tem) = flag_conserve_space || ! TREE_PUBLIC (tem);
6170 #endif
6171
6172 if (! processing_template_decl)
6173 start_decl_1 (tem);
6174
6175 /* Corresponding pop_obstacks is done in `cp_finish_decl'. */
6176 push_obstacks_nochange ();
6177
6178 #if 0
6179 /* We have no way of knowing whether the initializer will need to be
6180 evaluated at run-time or not until we've parsed it, so let's just put
6181 it in the permanent obstack. (jason) */
6182 if (init_written
6183 && ! (TREE_CODE (tem) == PARM_DECL
6184 || (TREE_READONLY (tem)
6185 && (TREE_CODE (tem) == VAR_DECL
6186 || TREE_CODE (tem) == FIELD_DECL))))
6187 {
6188 /* When parsing and digesting the initializer,
6189 use temporary storage. Do this even if we will ignore the value. */
6190 if (toplevel_bindings_p () && debug_temp_inits)
6191 {
6192 if (processing_template_decl
6193 || TYPE_NEEDS_CONSTRUCTING (type)
6194 || TREE_CODE (type) == REFERENCE_TYPE)
6195 /* In this case, the initializer must lay down in permanent
6196 storage, since it will be saved until `finish_file' is run. */
6197 ;
6198 else
6199 temporary_allocation ();
6200 }
6201 }
6202 #endif
6203
6204 return tem;
6205 }
6206
6207 void
6208 start_decl_1 (decl)
6209 tree decl;
6210 {
6211 tree type = TREE_TYPE (decl);
6212 int initialized = (DECL_INITIAL (decl) != NULL_TREE);
6213
6214 /* If this type of object needs a cleanup, and control may
6215 jump past it, make a new binding level so that it is cleaned
6216 up only when it is initialized first. */
6217 if (TYPE_NEEDS_DESTRUCTOR (type)
6218 && current_binding_level->more_cleanups_ok == 0)
6219 pushlevel_temporary (1);
6220
6221 if (initialized)
6222 /* Is it valid for this decl to have an initializer at all?
6223 If not, set INITIALIZED to zero, which will indirectly
6224 tell `cp_finish_decl' to ignore the initializer once it is parsed. */
6225 {
6226 /* Don't allow initializations for incomplete types except for
6227 arrays which might be completed by the initialization. */
6228 if (type == error_mark_node)
6229 ; /* Don't complain again. */
6230 else if (TYPE_SIZE (complete_type (type)) != NULL_TREE)
6231 ; /* A complete type is ok. */
6232 else if (TREE_CODE (type) != ARRAY_TYPE)
6233 {
6234 cp_error ("variable `%#D' has initializer but incomplete type",
6235 decl);
6236 initialized = 0;
6237 }
6238 else if (TYPE_SIZE (complete_type (TREE_TYPE (type))) == NULL_TREE)
6239 {
6240 if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
6241 cp_error ("elements of array `%#D' have incomplete type", decl);
6242 /* else we already gave an error in start_decl. */
6243 initialized = 0;
6244 }
6245 }
6246
6247 if (!initialized
6248 && TREE_CODE (decl) != TYPE_DECL
6249 && TREE_CODE (decl) != TEMPLATE_DECL
6250 && IS_AGGR_TYPE (type) && ! DECL_EXTERNAL (decl))
6251 {
6252 if ((! processing_template_decl || ! uses_template_parms (type))
6253 && TYPE_SIZE (complete_type (type)) == NULL_TREE)
6254 {
6255 cp_error ("aggregate `%#D' has incomplete type and cannot be initialized",
6256 decl);
6257 /* Change the type so that assemble_variable will give
6258 DECL an rtl we can live with: (mem (const_int 0)). */
6259 TREE_TYPE (decl) = error_mark_node;
6260 type = error_mark_node;
6261 }
6262 else
6263 {
6264 /* If any base type in the hierarchy of TYPE needs a constructor,
6265 then we set initialized to 1. This way any nodes which are
6266 created for the purposes of initializing this aggregate
6267 will live as long as it does. This is necessary for global
6268 aggregates which do not have their initializers processed until
6269 the end of the file. */
6270 initialized = TYPE_NEEDS_CONSTRUCTING (type);
6271 }
6272 }
6273
6274 #if 0
6275 /* We don't do this yet for GNU C++. */
6276 /* For a local variable, define the RTL now. */
6277 if (! toplevel_bindings_p ()
6278 /* But not if this is a duplicate decl
6279 and we preserved the rtl from the previous one
6280 (which may or may not happen). */
6281 && DECL_RTL (tem) == NULL_RTX)
6282 {
6283 if (TYPE_SIZE (TREE_TYPE (tem)) != NULL_TREE)
6284 expand_decl (tem);
6285 else if (TREE_CODE (TREE_TYPE (tem)) == ARRAY_TYPE
6286 && DECL_INITIAL (tem) != NULL_TREE)
6287 expand_decl (tem);
6288 }
6289 #endif
6290
6291 if (! initialized)
6292 DECL_INITIAL (decl) = NULL_TREE;
6293 }
6294
6295 /* Handle initialization of references.
6296 These three arguments from from `cp_finish_decl', and have the
6297 same meaning here that they do there.
6298
6299 Quotes on semantics can be found in ARM 8.4.3. */
6300
6301 static void
6302 grok_reference_init (decl, type, init)
6303 tree decl, type, init;
6304 {
6305 tree tmp;
6306
6307 if (init == NULL_TREE)
6308 {
6309 if ((DECL_LANG_SPECIFIC (decl) == 0
6310 || DECL_IN_AGGR_P (decl) == 0)
6311 && ! DECL_THIS_EXTERN (decl))
6312 {
6313 cp_error ("`%D' declared as reference but not initialized", decl);
6314 if (TREE_CODE (decl) == VAR_DECL)
6315 SET_DECL_REFERENCE_SLOT (decl, error_mark_node);
6316 }
6317 return;
6318 }
6319
6320 if (init == error_mark_node)
6321 return;
6322
6323 if (TREE_CODE (type) == REFERENCE_TYPE
6324 && TREE_CODE (init) == CONSTRUCTOR)
6325 {
6326 cp_error ("ANSI C++ forbids use of initializer list to initialize reference `%D'", decl);
6327 return;
6328 }
6329
6330 if (TREE_TYPE (init) && TREE_CODE (TREE_TYPE (init)) == UNKNOWN_TYPE)
6331 /* decay_conversion is probably wrong for references to functions. */
6332 init = decay_conversion (instantiate_type (TREE_TYPE (type), init, 1));
6333
6334 if (TREE_CODE (init) == TREE_LIST)
6335 init = build_compound_expr (init);
6336
6337 if (TREE_CODE (TREE_TYPE (init)) == REFERENCE_TYPE)
6338 init = convert_from_reference (init);
6339
6340 if (TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE
6341 && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
6342 {
6343 /* Note: default conversion is only called in very special cases. */
6344 init = default_conversion (init);
6345 }
6346
6347 tmp = convert_to_reference
6348 (type, init, CONV_IMPLICIT,
6349 LOOKUP_SPECULATIVELY|LOOKUP_NORMAL|DIRECT_BIND, decl);
6350
6351 if (tmp == error_mark_node)
6352 goto fail;
6353 else if (tmp != NULL_TREE)
6354 {
6355 init = tmp;
6356 DECL_INITIAL (decl) = save_expr (init);
6357 }
6358 else
6359 {
6360 cp_error ("cannot initialize `%T' from `%T'", type, TREE_TYPE (init));
6361 goto fail;
6362 }
6363
6364 /* ?? Can this be optimized in some cases to
6365 hand back the DECL_INITIAL slot?? */
6366 if (TYPE_SIZE (TREE_TYPE (type)))
6367 {
6368 init = convert_from_reference (decl);
6369 if (TREE_PERMANENT (decl))
6370 init = copy_to_permanent (init);
6371 SET_DECL_REFERENCE_SLOT (decl, init);
6372 }
6373
6374 if (TREE_STATIC (decl) && ! TREE_CONSTANT (DECL_INITIAL (decl)))
6375 {
6376 expand_static_init (decl, DECL_INITIAL (decl));
6377 DECL_INITIAL (decl) = NULL_TREE;
6378 }
6379 return;
6380
6381 fail:
6382 if (TREE_CODE (decl) == VAR_DECL)
6383 SET_DECL_REFERENCE_SLOT (decl, error_mark_node);
6384 return;
6385 }
6386
6387 /* Fill in DECL_INITIAL with some magical value to prevent expand_decl from
6388 mucking with forces it does not comprehend (i.e. initialization with a
6389 constructor). If we are at global scope and won't go into COMMON, fill
6390 it in with a dummy CONSTRUCTOR to force the variable into .data;
6391 otherwise we can use error_mark_node. */
6392
6393 static tree
6394 obscure_complex_init (decl, init)
6395 tree decl, init;
6396 {
6397 if (! flag_no_inline && TREE_STATIC (decl))
6398 {
6399 if (extract_init (decl, init))
6400 return NULL_TREE;
6401 }
6402
6403 #if ! defined (ASM_OUTPUT_BSS) && ! defined (ASM_OUTPUT_ALIGNED_BSS)
6404 if (toplevel_bindings_p () && ! DECL_COMMON (decl))
6405 DECL_INITIAL (decl) = build (CONSTRUCTOR, TREE_TYPE (decl), NULL_TREE,
6406 NULL_TREE);
6407 else
6408 #endif
6409 DECL_INITIAL (decl) = error_mark_node;
6410
6411 return init;
6412 }
6413
6414 /* Finish processing of a declaration;
6415 install its line number and initial value.
6416 If the length of an array type is not known before,
6417 it must be determined now, from the initial value, or it is an error.
6418
6419 Call `pop_obstacks' iff NEED_POP is nonzero.
6420
6421 For C++, `cp_finish_decl' must be fairly evasive: it must keep initializers
6422 for aggregates that have constructors alive on the permanent obstack,
6423 so that the global initializing functions can be written at the end.
6424
6425 INIT0 holds the value of an initializer that should be allowed to escape
6426 the normal rules.
6427
6428 FLAGS is LOOKUP_ONLYCONVERTING is the = init syntax was used, else 0
6429 if the (init) syntax was used.
6430
6431 For functions that take default parameters, DECL points to its
6432 "maximal" instantiation. `cp_finish_decl' must then also declared its
6433 subsequently lower and lower forms of instantiation, checking for
6434 ambiguity as it goes. This can be sped up later. */
6435
6436 void
6437 cp_finish_decl (decl, init, asmspec_tree, need_pop, flags)
6438 tree decl, init;
6439 tree asmspec_tree;
6440 int need_pop;
6441 int flags;
6442 {
6443 register tree type;
6444 tree cleanup = NULL_TREE, ttype = NULL_TREE;
6445 int was_incomplete;
6446 int temporary = allocation_temporary_p ();
6447 char *asmspec = NULL;
6448 int was_readonly = 0;
6449 int already_used = 0;
6450
6451 /* If this is 0, then we did not change obstacks. */
6452 if (! decl)
6453 {
6454 if (init)
6455 error ("assignment (not initialization) in declaration");
6456 return;
6457 }
6458
6459 /* If a name was specified, get the string. */
6460 if (asmspec_tree)
6461 asmspec = TREE_STRING_POINTER (asmspec_tree);
6462
6463 /* If the type of the thing we are declaring either has
6464 a constructor, or has a virtual function table pointer,
6465 AND its initialization was accepted by `start_decl',
6466 then we stayed on the permanent obstack through the
6467 declaration, otherwise, changed obstacks as GCC would. */
6468
6469 type = TREE_TYPE (decl);
6470
6471 if (type == error_mark_node)
6472 {
6473 if (toplevel_bindings_p () && temporary)
6474 end_temporary_allocation ();
6475
6476 return;
6477 }
6478
6479 if (processing_template_decl)
6480 {
6481 if (init && DECL_INITIAL (decl))
6482 DECL_INITIAL (decl) = init;
6483 if (minimal_parse_mode && ! DECL_ARTIFICIAL (decl))
6484 {
6485 tree stmt = DECL_VINDEX (decl);
6486 /* If the decl is declaring a member of a local class (in a
6487 template function), there will be no associated stmt. */
6488 if (stmt != NULL_TREE)
6489 {
6490 DECL_VINDEX (decl) = NULL_TREE;
6491 TREE_OPERAND (stmt, 2) = copy_to_permanent (init);
6492 add_tree (stmt);
6493 }
6494 }
6495
6496 goto finish_end0;
6497 }
6498 /* Take care of TYPE_DECLs up front. */
6499 if (TREE_CODE (decl) == TYPE_DECL)
6500 {
6501 if (init && DECL_INITIAL (decl))
6502 {
6503 /* typedef foo = bar; store the type of bar as the type of foo. */
6504 TREE_TYPE (decl) = type = TREE_TYPE (init);
6505 DECL_INITIAL (decl) = init = NULL_TREE;
6506 }
6507 if (type != error_mark_node
6508 && IS_AGGR_TYPE (type) && DECL_NAME (decl))
6509 {
6510 if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
6511 cp_warning ("shadowing previous type declaration of `%#D'", decl);
6512 set_identifier_type_value (DECL_NAME (decl), type);
6513 CLASSTYPE_GOT_SEMICOLON (type) = 1;
6514 }
6515 GNU_xref_decl (current_function_decl, decl);
6516
6517 /* If we have installed this as the canonical typedef for this
6518 type, and that type has not been defined yet, delay emitting
6519 the debug information for it, as we will emit it later. */
6520 if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
6521 && TYPE_SIZE (TREE_TYPE (decl)) == NULL_TREE)
6522 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
6523
6524 rest_of_decl_compilation (decl, NULL_PTR,
6525 DECL_CONTEXT (decl) == NULL_TREE, at_eof);
6526 goto finish_end;
6527 }
6528 if (TREE_CODE (decl) != FUNCTION_DECL)
6529 {
6530 ttype = target_type (type);
6531 }
6532
6533 if (! DECL_EXTERNAL (decl) && TREE_READONLY (decl)
6534 && TYPE_NEEDS_CONSTRUCTING (type))
6535 {
6536
6537 /* Currently, GNU C++ puts constants in text space, making them
6538 impossible to initialize. In the future, one would hope for
6539 an operating system which understood the difference between
6540 initialization and the running of a program. */
6541 was_readonly = 1;
6542 TREE_READONLY (decl) = 0;
6543 }
6544
6545 if (TREE_CODE (decl) == FIELD_DECL)
6546 {
6547 if (init && init != error_mark_node)
6548 my_friendly_assert (TREE_PERMANENT (init), 147);
6549
6550 if (asmspec)
6551 {
6552 /* This must override the asm specifier which was placed
6553 by grokclassfn. Lay this out fresh. */
6554 DECL_RTL (TREE_TYPE (decl)) = NULL_RTX;
6555 DECL_ASSEMBLER_NAME (decl) = get_identifier (asmspec);
6556 make_decl_rtl (decl, asmspec, 0);
6557 }
6558 }
6559 /* If `start_decl' didn't like having an initialization, ignore it now. */
6560 else if (init != NULL_TREE && DECL_INITIAL (decl) == NULL_TREE)
6561 init = NULL_TREE;
6562 else if (DECL_EXTERNAL (decl))
6563 ;
6564 else if (TREE_CODE (type) == REFERENCE_TYPE
6565 || (TYPE_LANG_SPECIFIC (type) && IS_SIGNATURE_REFERENCE (type)))
6566 {
6567 if (TREE_STATIC (decl))
6568 make_decl_rtl (decl, NULL_PTR,
6569 toplevel_bindings_p ()
6570 || pseudo_global_level_p ());
6571 grok_reference_init (decl, type, init);
6572 init = NULL_TREE;
6573 }
6574
6575 GNU_xref_decl (current_function_decl, decl);
6576
6577 if (TREE_CODE (decl) == FIELD_DECL)
6578 ;
6579 else if (TREE_CODE (decl) == CONST_DECL)
6580 {
6581 my_friendly_assert (TREE_CODE (decl) != REFERENCE_TYPE, 148);
6582
6583 DECL_INITIAL (decl) = init;
6584
6585 /* This will keep us from needing to worry about our obstacks. */
6586 my_friendly_assert (init != NULL_TREE, 149);
6587 init = NULL_TREE;
6588 }
6589 else if (init)
6590 {
6591 if (TYPE_HAS_CONSTRUCTOR (type) || TYPE_NEEDS_CONSTRUCTING (type))
6592 {
6593 if (TREE_CODE (type) == ARRAY_TYPE)
6594 init = digest_init (type, init, (tree *) 0);
6595 else if (TREE_CODE (init) == CONSTRUCTOR)
6596 {
6597 if (TYPE_NON_AGGREGATE_CLASS (type))
6598 {
6599 cp_error ("`%D' must be initialized by constructor, not by `{...}'",
6600 decl);
6601 init = error_mark_node;
6602 }
6603 else
6604 goto dont_use_constructor;
6605 }
6606 }
6607 else
6608 {
6609 dont_use_constructor:
6610 if (TREE_CODE (init) != TREE_VEC)
6611 init = store_init_value (decl, init);
6612 }
6613
6614 if (init)
6615 /* We must hide the initializer so that expand_decl
6616 won't try to do something it does not understand. */
6617 init = obscure_complex_init (decl, init);
6618 }
6619 else if (DECL_EXTERNAL (decl))
6620 ;
6621 else if (TREE_CODE_CLASS (TREE_CODE (type)) == 't'
6622 && (IS_AGGR_TYPE (type) || TYPE_NEEDS_CONSTRUCTING (type)))
6623 {
6624 tree ctype = type;
6625 while (TREE_CODE (ctype) == ARRAY_TYPE)
6626 ctype = TREE_TYPE (ctype);
6627 if (! TYPE_NEEDS_CONSTRUCTING (ctype))
6628 {
6629 if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (ctype))
6630 cp_error ("structure `%D' with uninitialized const members", decl);
6631 if (CLASSTYPE_REF_FIELDS_NEED_INIT (ctype))
6632 cp_error ("structure `%D' with uninitialized reference members",
6633 decl);
6634 }
6635
6636 if (TREE_CODE (decl) == VAR_DECL
6637 && !DECL_INITIAL (decl)
6638 && !TYPE_NEEDS_CONSTRUCTING (type)
6639 && (TYPE_READONLY (type) || TREE_READONLY (decl)))
6640 cp_error ("uninitialized const `%D'", decl);
6641
6642 if (TYPE_SIZE (type) != NULL_TREE
6643 && TYPE_NEEDS_CONSTRUCTING (type))
6644 init = obscure_complex_init (decl, NULL_TREE);
6645 }
6646 else if (TREE_CODE (decl) == VAR_DECL
6647 && TREE_CODE (type) != REFERENCE_TYPE
6648 && (TYPE_READONLY (type) || TREE_READONLY (decl)))
6649 {
6650 /* ``Unless explicitly declared extern, a const object does not have
6651 external linkage and must be initialized. ($8.4; $12.1)'' ARM 7.1.6
6652 However, if it's `const int foo = 1; const int foo;', don't complain
6653 about the second decl, since it does have an initializer before.
6654 We deliberately don't complain about arrays, because they're
6655 supposed to be initialized by a constructor. */
6656 if (! DECL_INITIAL (decl)
6657 && TREE_CODE (type) != ARRAY_TYPE
6658 && (!pedantic || !current_class_type))
6659 cp_error ("uninitialized const `%#D'", decl);
6660 }
6661
6662 /* For top-level declaration, the initial value was read in
6663 the temporary obstack. MAXINDEX, rtl, etc. to be made below
6664 must go in the permanent obstack; but don't discard the
6665 temporary data yet. */
6666
6667 if (toplevel_bindings_p () && temporary)
6668 end_temporary_allocation ();
6669
6670 /* Deduce size of array from initialization, if not already known. */
6671
6672 if (TREE_CODE (type) == ARRAY_TYPE
6673 && TYPE_DOMAIN (type) == NULL_TREE
6674 && TREE_CODE (decl) != TYPE_DECL)
6675 {
6676 int do_default
6677 = (TREE_STATIC (decl)
6678 /* Even if pedantic, an external linkage array
6679 may have incomplete type at first. */
6680 ? pedantic && ! DECL_EXTERNAL (decl)
6681 : !DECL_EXTERNAL (decl));
6682 tree initializer = init ? init : DECL_INITIAL (decl);
6683 int failure = complete_array_type (type, initializer, do_default);
6684
6685 if (failure == 1)
6686 cp_error ("initializer fails to determine size of `%D'", decl);
6687
6688 if (failure == 2)
6689 {
6690 if (do_default)
6691 cp_error ("array size missing in `%D'", decl);
6692 /* If a `static' var's size isn't known, make it extern as
6693 well as static, so it does not get allocated. If it's not
6694 `static', then don't mark it extern; finish_incomplete_decl
6695 will give it a default size and it will get allocated. */
6696 else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
6697 DECL_EXTERNAL (decl) = 1;
6698 }
6699
6700 if (pedantic && TYPE_DOMAIN (type) != NULL_TREE
6701 && tree_int_cst_lt (TYPE_MAX_VALUE (TYPE_DOMAIN (type)),
6702 integer_zero_node))
6703 cp_error ("zero-size array `%D'", decl);
6704
6705 layout_decl (decl, 0);
6706 }
6707
6708 if (TREE_CODE (decl) == VAR_DECL)
6709 {
6710 if (DECL_SIZE (decl) == NULL_TREE
6711 && TYPE_SIZE (complete_type (TREE_TYPE (decl))) != NULL_TREE)
6712 layout_decl (decl, 0);
6713
6714 if (TREE_STATIC (decl) && DECL_SIZE (decl) == NULL_TREE)
6715 {
6716 /* A static variable with an incomplete type:
6717 that is an error if it is initialized.
6718 Otherwise, let it through, but if it is not `extern'
6719 then it may cause an error message later. */
6720 if (DECL_INITIAL (decl) != NULL_TREE)
6721 cp_error ("storage size of `%D' isn't known", decl);
6722 init = NULL_TREE;
6723 }
6724 else if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
6725 {
6726 /* An automatic variable with an incomplete type: that is an error.
6727 Don't talk about array types here, since we took care of that
6728 message in grokdeclarator. */
6729 cp_error ("storage size of `%D' isn't known", decl);
6730 TREE_TYPE (decl) = error_mark_node;
6731 }
6732 else if (!DECL_EXTERNAL (decl) && IS_AGGR_TYPE (ttype))
6733 /* Let debugger know it should output info for this type. */
6734 note_debug_info_needed (ttype);
6735
6736 if (TREE_STATIC (decl) && DECL_CONTEXT (decl)
6737 && TREE_CODE_CLASS (TREE_CODE (DECL_CONTEXT (decl))) == 't')
6738 note_debug_info_needed (DECL_CONTEXT (decl));
6739
6740 if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
6741 && DECL_SIZE (decl) != NULL_TREE
6742 && ! TREE_CONSTANT (DECL_SIZE (decl)))
6743 {
6744 if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
6745 constant_expression_warning (DECL_SIZE (decl));
6746 else
6747 cp_error ("storage size of `%D' isn't constant", decl);
6748 }
6749
6750 if (! DECL_EXTERNAL (decl) && TYPE_NEEDS_DESTRUCTOR (type)
6751 /* Cleanups for static variables are handled by `finish_file'. */
6752 && ! TREE_STATIC (decl))
6753 {
6754 int yes = suspend_momentary ();
6755 cleanup = maybe_build_cleanup (decl);
6756 resume_momentary (yes);
6757 }
6758 }
6759 /* PARM_DECLs get cleanups, too. */
6760 else if (TREE_CODE (decl) == PARM_DECL && TYPE_NEEDS_DESTRUCTOR (type))
6761 {
6762 if (temporary)
6763 end_temporary_allocation ();
6764 cleanup = maybe_build_cleanup (decl);
6765 if (temporary)
6766 resume_temporary_allocation ();
6767 }
6768
6769 /* Output the assembler code and/or RTL code for variables and functions,
6770 unless the type is an undefined structure or union.
6771 If not, it will get done when the type is completed. */
6772
6773 was_incomplete = (DECL_SIZE (decl) == NULL_TREE);
6774
6775 if (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == FUNCTION_DECL
6776 || TREE_CODE (decl) == RESULT_DECL)
6777 {
6778 /* ??? FIXME: What about nested classes? */
6779 int toplev = toplevel_bindings_p () || pseudo_global_level_p ();
6780 int was_temp
6781 = (TREE_STATIC (decl) && TYPE_NEEDS_DESTRUCTOR (type)
6782 && allocation_temporary_p ());
6783
6784 if (was_temp)
6785 end_temporary_allocation ();
6786
6787 /* Extern inline function static data has external linkage. */
6788 if (TREE_CODE (decl) == VAR_DECL
6789 && TREE_STATIC (decl)
6790 && current_function_decl
6791 && DECL_CONTEXT (decl) == current_function_decl
6792 && DECL_THIS_INLINE (current_function_decl)
6793 && TREE_PUBLIC (current_function_decl))
6794 {
6795 if (DECL_INTERFACE_KNOWN (current_function_decl))
6796 {
6797 TREE_PUBLIC (decl) = 1;
6798 DECL_EXTERNAL (decl) = DECL_EXTERNAL (current_function_decl);
6799 }
6800 /* We can only do this if we can use common or weak, and we
6801 can't if it has been initialized and we don't support weak. */
6802 else if (DECL_INITIAL (decl) == NULL_TREE
6803 || DECL_INITIAL (decl) == error_mark_node)
6804 {
6805 TREE_PUBLIC (decl) = 1;
6806 DECL_COMMON (decl) = 1;
6807 }
6808 else if (flag_weak)
6809 make_decl_one_only (decl);
6810
6811 if (TREE_PUBLIC (decl))
6812 DECL_ASSEMBLER_NAME (decl)
6813 = build_static_name (current_function_decl, DECL_NAME (decl));
6814 else if (! DECL_ARTIFICIAL (decl))
6815 cp_warning_at ("sorry: semantics of inline function static data `%#D' are wrong (you'll wind up with multiple copies)", decl);
6816 }
6817
6818 else if (TREE_CODE (decl) == VAR_DECL
6819 && DECL_LANG_SPECIFIC (decl)
6820 && DECL_COMDAT (decl))
6821 {
6822 /* Dynamically initialized vars go into common. */
6823 if (DECL_INITIAL (decl) == NULL_TREE
6824 || DECL_INITIAL (decl) == error_mark_node)
6825 DECL_COMMON (decl) = 1;
6826 else if (EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl)))
6827 {
6828 DECL_COMMON (decl) = 1;
6829 DECL_INITIAL (decl) = error_mark_node;
6830 }
6831 else
6832 {
6833 /* Statically initialized vars are weak or comdat, if
6834 supported. */
6835 if (flag_weak)
6836 make_decl_one_only (decl);
6837 else
6838 {
6839 /* we can't do anything useful; leave vars for explicit
6840 instantiation. */
6841 DECL_EXTERNAL (decl) = 1;
6842 DECL_NOT_REALLY_EXTERN (decl) = 0;
6843 }
6844 }
6845 }
6846
6847 if (TREE_CODE (decl) == VAR_DECL && DECL_VIRTUAL_P (decl))
6848 make_decl_rtl (decl, NULL_PTR, toplev);
6849 else if (TREE_CODE (decl) == VAR_DECL
6850 && TREE_READONLY (decl)
6851 && DECL_INITIAL (decl) != NULL_TREE
6852 && DECL_INITIAL (decl) != error_mark_node
6853 && ! EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl)))
6854 {
6855 DECL_INITIAL (decl) = save_expr (DECL_INITIAL (decl));
6856
6857 if (asmspec)
6858 DECL_ASSEMBLER_NAME (decl) = get_identifier (asmspec);
6859
6860 if (! toplev
6861 && TREE_STATIC (decl)
6862 && ! TREE_SIDE_EFFECTS (decl)
6863 && ! TREE_PUBLIC (decl)
6864 && ! DECL_EXTERNAL (decl)
6865 && ! TYPE_NEEDS_DESTRUCTOR (type)
6866 && DECL_MODE (decl) != BLKmode)
6867 {
6868 /* If this variable is really a constant, then fill its DECL_RTL
6869 slot with something which won't take up storage.
6870 If something later should take its address, we can always give
6871 it legitimate RTL at that time. */
6872 DECL_RTL (decl) = gen_reg_rtx (DECL_MODE (decl));
6873 store_expr (DECL_INITIAL (decl), DECL_RTL (decl), 0);
6874 TREE_ASM_WRITTEN (decl) = 1;
6875 }
6876 else if (toplev && ! TREE_PUBLIC (decl))
6877 {
6878 /* If this is a static const, change its apparent linkage
6879 if it belongs to a #pragma interface. */
6880 if (!interface_unknown)
6881 {
6882 TREE_PUBLIC (decl) = 1;
6883 DECL_EXTERNAL (decl) = interface_only;
6884 }
6885 make_decl_rtl (decl, asmspec, toplev);
6886 }
6887 else
6888 rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
6889 }
6890 else if (TREE_CODE (decl) == VAR_DECL
6891 && DECL_LANG_SPECIFIC (decl)
6892 && DECL_IN_AGGR_P (decl))
6893 {
6894 if (TREE_STATIC (decl))
6895 {
6896 if (init == NULL_TREE
6897 #ifdef DEFAULT_STATIC_DEFS
6898 /* If this code is dead, then users must
6899 explicitly declare static member variables
6900 outside the class def'n as well. */
6901 && TYPE_NEEDS_CONSTRUCTING (type)
6902 #endif
6903 )
6904 {
6905 DECL_EXTERNAL (decl) = 1;
6906 make_decl_rtl (decl, asmspec, 1);
6907 }
6908 else
6909 rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
6910 }
6911 else
6912 /* Just a constant field. Should not need any rtl. */
6913 goto finish_end0;
6914 }
6915 else
6916 rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
6917
6918 if (was_temp)
6919 resume_temporary_allocation ();
6920
6921 if (type != error_mark_node
6922 && TYPE_LANG_SPECIFIC (type)
6923 && CLASSTYPE_ABSTRACT_VIRTUALS (type))
6924 abstract_virtuals_error (decl, type);
6925 else if ((TREE_CODE (type) == FUNCTION_TYPE
6926 || TREE_CODE (type) == METHOD_TYPE)
6927 && TYPE_LANG_SPECIFIC (TREE_TYPE (type))
6928 && CLASSTYPE_ABSTRACT_VIRTUALS (TREE_TYPE (type)))
6929 abstract_virtuals_error (decl, TREE_TYPE (type));
6930
6931 if (TYPE_LANG_SPECIFIC (type) && IS_SIGNATURE (type))
6932 signature_error (decl, type);
6933 else if ((TREE_CODE (type) == FUNCTION_TYPE
6934 || TREE_CODE (type) == METHOD_TYPE)
6935 && TYPE_LANG_SPECIFIC (TREE_TYPE (type))
6936 && IS_SIGNATURE (TREE_TYPE (type)))
6937 signature_error (decl, TREE_TYPE (type));
6938
6939 if (TREE_CODE (decl) == FUNCTION_DECL)
6940 ;
6941 else if (DECL_EXTERNAL (decl)
6942 && ! (DECL_LANG_SPECIFIC (decl)
6943 && DECL_NOT_REALLY_EXTERN (decl)))
6944 {
6945 if (init)
6946 DECL_INITIAL (decl) = init;
6947 }
6948 else if (TREE_STATIC (decl) && type != error_mark_node)
6949 {
6950 /* Cleanups for static variables are handled by `finish_file'. */
6951 if (TYPE_NEEDS_CONSTRUCTING (type) || init != NULL_TREE
6952 || TYPE_NEEDS_DESTRUCTOR (type))
6953 expand_static_init (decl, init);
6954 }
6955 else if (! toplev)
6956 {
6957 /* This is a declared decl which must live until the
6958 end of the binding contour. It may need a cleanup. */
6959
6960 /* Recompute the RTL of a local array now
6961 if it used to be an incomplete type. */
6962 if (was_incomplete && ! TREE_STATIC (decl))
6963 {
6964 /* If we used it already as memory, it must stay in memory. */
6965 TREE_ADDRESSABLE (decl) = TREE_USED (decl);
6966 /* If it's still incomplete now, no init will save it. */
6967 if (DECL_SIZE (decl) == NULL_TREE)
6968 DECL_INITIAL (decl) = NULL_TREE;
6969 expand_decl (decl);
6970 }
6971 else if (! TREE_ASM_WRITTEN (decl)
6972 && (TYPE_SIZE (type) != NULL_TREE
6973 || TREE_CODE (type) == ARRAY_TYPE))
6974 {
6975 /* Do this here, because we did not expand this decl's
6976 rtl in start_decl. */
6977 if (DECL_RTL (decl) == NULL_RTX)
6978 expand_decl (decl);
6979 else if (cleanup)
6980 {
6981 /* XXX: Why don't we use decl here? */
6982 /* Ans: Because it was already expanded? */
6983 if (! expand_decl_cleanup (NULL_TREE, cleanup))
6984 cp_error ("parser lost in parsing declaration of `%D'",
6985 decl);
6986 /* Cleanup used up here. */
6987 cleanup = NULL_TREE;
6988 }
6989 }
6990
6991 if (current_binding_level->is_for_scope)
6992 {
6993 struct binding_level *outer = current_binding_level->level_chain;
6994
6995 /* Check to see if the same name is already bound at
6996 the outer level, either because it was directly declared,
6997 or because a dead for-decl got preserved. In either case,
6998 the code would not have been valid under the ARM
6999 scope rules, so clear is_for_scope for the
7000 current_binding_level.
7001
7002 Otherwise, we need to preserve the temp slot for decl
7003 to last into the outer binding level. */
7004
7005 int handling_dead_for_vars = 0;
7006 tree link = outer->names;
7007 for (; ; link = TREE_CHAIN (link))
7008 {
7009 if (link == NULL && handling_dead_for_vars == 0)
7010 {
7011 link = outer->dead_vars_from_for;
7012 handling_dead_for_vars = 1;
7013 }
7014 if (link == NULL)
7015 {
7016 if (DECL_IN_MEMORY_P (decl))
7017 preserve_temp_slots (DECL_RTL (decl));
7018 break;
7019 }
7020 if (DECL_NAME (link) == DECL_NAME (decl))
7021 {
7022 if (handling_dead_for_vars)
7023 {
7024 tree shadowing
7025 = purpose_member (DECL_NAME (decl),
7026 current_binding_level->shadowed);
7027 if (shadowing && TREE_VALUE (shadowing) == link)
7028 TREE_VALUE (shadowing)
7029 = DECL_SHADOWED_FOR_VAR (link);
7030 }
7031 current_binding_level->is_for_scope = 0;
7032 break;
7033 }
7034 }
7035 }
7036
7037 expand_start_target_temps ();
7038
7039 if (DECL_SIZE (decl) && type != error_mark_node)
7040 {
7041 /* Compute and store the initial value. */
7042 expand_decl_init (decl);
7043 already_used = TREE_USED (decl) || TREE_USED (type);
7044
7045 if (init || TYPE_NEEDS_CONSTRUCTING (type))
7046 {
7047 emit_line_note (DECL_SOURCE_FILE (decl),
7048 DECL_SOURCE_LINE (decl));
7049 expand_aggr_init (decl, init, 0, flags);
7050 }
7051
7052 /* Set this to 0 so we can tell whether an aggregate which
7053 was initialized was ever used. Don't do this if it has a
7054 destructor, so we don't complain about the 'resource
7055 allocation is initialization' idiom. */
7056 /* Now set attribute((unused)) on types so decls of
7057 of that type will be marked used. (see TREE_USED, above.)
7058 This avoids the warning problems this particular code
7059 tried to work around. */
7060
7061 if (TYPE_NEEDS_CONSTRUCTING (type)
7062 && ! already_used
7063 && cleanup == NULL_TREE
7064 && DECL_NAME (decl))
7065 TREE_USED (decl) = 0;
7066
7067 if (already_used)
7068 TREE_USED (decl) = 1;
7069 }
7070
7071 /* Cleanup any temporaries needed for the initial value. */
7072 expand_end_target_temps ();
7073
7074 if (DECL_SIZE (decl) && type != error_mark_node)
7075 {
7076 /* Store the cleanup, if there was one. */
7077 if (cleanup)
7078 {
7079 if (! expand_decl_cleanup (decl, cleanup))
7080 cp_error ("parser lost in parsing declaration of `%D'",
7081 decl);
7082 }
7083 }
7084 }
7085 finish_end0:
7086
7087 /* Undo call to `pushclass' that was done in `start_decl'
7088 due to initialization of qualified member variable.
7089 I.e., Foo::x = 10; */
7090 {
7091 tree context = DECL_REAL_CONTEXT (decl);
7092 if (context
7093 && TREE_CODE_CLASS (TREE_CODE (context)) == 't'
7094 && (TREE_CODE (decl) == VAR_DECL
7095 /* We also have a pushclass done that we need to undo here
7096 if we're at top level and declare a method. */
7097 || TREE_CODE (decl) == FUNCTION_DECL)
7098 /* If size hasn't been set, we're still defining it,
7099 and therefore inside the class body; don't pop
7100 the binding level.. */
7101 && TYPE_SIZE (context) != NULL_TREE
7102 && context == current_class_type)
7103 popclass (1);
7104 }
7105 }
7106
7107 finish_end:
7108
7109 /* If requested, warn about definitions of large data objects. */
7110
7111 if (warn_larger_than
7112 && ! processing_template_decl
7113 && (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == PARM_DECL)
7114 && !DECL_EXTERNAL (decl))
7115 {
7116 register tree decl_size = DECL_SIZE (decl);
7117
7118 if (decl_size && TREE_CODE (decl_size) == INTEGER_CST)
7119 {
7120 unsigned units = TREE_INT_CST_LOW (decl_size) / BITS_PER_UNIT;
7121
7122 if (units > larger_than_size)
7123 warning_with_decl (decl, "size of `%s' is %u bytes", units);
7124 }
7125 }
7126
7127 if (need_pop)
7128 {
7129 /* Resume permanent allocation, if not within a function. */
7130 /* The corresponding push_obstacks_nochange is in start_decl,
7131 start_method, groktypename, and in grokfield. */
7132 pop_obstacks ();
7133 }
7134
7135 if (was_readonly)
7136 TREE_READONLY (decl) = 1;
7137 }
7138
7139 /* This is here for a midend callback from c-common.c */
7140
7141 void
7142 finish_decl (decl, init, asmspec_tree)
7143 tree decl, init;
7144 tree asmspec_tree;
7145 {
7146 cp_finish_decl (decl, init, asmspec_tree, 1, 0);
7147 }
7148
7149 void
7150 expand_static_init (decl, init)
7151 tree decl;
7152 tree init;
7153 {
7154 tree oldstatic = value_member (decl, static_aggregates);
7155
7156 if (oldstatic)
7157 {
7158 if (TREE_PURPOSE (oldstatic) && init != NULL_TREE)
7159 cp_error ("multiple initializations given for `%D'", decl);
7160 }
7161 else if (! toplevel_bindings_p () && ! pseudo_global_level_p ())
7162 {
7163 /* Emit code to perform this initialization but once. */
7164 tree temp;
7165
7166 /* Remember this information until end of file. */
7167 push_obstacks (&permanent_obstack, &permanent_obstack);
7168
7169 /* Emit code to perform this initialization but once. */
7170 temp = get_temp_name (integer_type_node, 1);
7171 rest_of_decl_compilation (temp, NULL_PTR, 0, 0);
7172 expand_start_cond (build_binary_op (EQ_EXPR, temp,
7173 integer_zero_node, 1), 0);
7174 expand_start_target_temps ();
7175
7176 expand_assignment (temp, integer_one_node, 0, 0);
7177 if (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))
7178 || (init && TREE_CODE (init) == TREE_LIST))
7179 {
7180 expand_aggr_init (decl, init, 0, 0);
7181 do_pending_stack_adjust ();
7182 }
7183 else if (init)
7184 expand_assignment (decl, init, 0, 0);
7185
7186 /* Cleanup any temporaries needed for the initial value. */
7187 expand_end_target_temps ();
7188
7189 if (TYPE_NEEDS_DESTRUCTOR (TREE_TYPE (decl)))
7190 {
7191 tree cleanup, fcall;
7192 static tree Atexit = 0;
7193 if (Atexit == 0)
7194 {
7195 tree atexit_fndecl, PFV, pfvlist;
7196 /* Remember this information until end of file. */
7197 push_obstacks (&permanent_obstack, &permanent_obstack);
7198 PFV = build_pointer_type (build_function_type
7199 (void_type_node, void_list_node));
7200
7201 pfvlist = tree_cons (NULL_TREE, PFV, void_list_node);
7202
7203 push_lang_context (lang_name_c);
7204 atexit_fndecl
7205 = builtin_function ("atexit",
7206 build_function_type (void_type_node,
7207 pfvlist),
7208 NOT_BUILT_IN, NULL_PTR);
7209 assemble_external (atexit_fndecl);
7210 Atexit = default_conversion (atexit_fndecl);
7211 pop_lang_context ();
7212 pop_obstacks ();
7213 }
7214
7215 cleanup = start_anon_func ();
7216 expand_expr_stmt (build_cleanup (decl));
7217 end_anon_func ();
7218 mark_addressable (cleanup);
7219 cleanup = build_unary_op (ADDR_EXPR, cleanup, 0);
7220 fcall = build_function_call (Atexit, expr_tree_cons (NULL_TREE, cleanup, NULL_TREE));
7221 expand_expr_stmt (fcall);
7222 }
7223
7224 expand_end_cond ();
7225 if (TYPE_NEEDS_DESTRUCTOR (TREE_TYPE (decl)))
7226 {
7227 static_aggregates = perm_tree_cons (temp, decl, static_aggregates);
7228 TREE_STATIC (static_aggregates) = 1;
7229 }
7230
7231 /* Resume old (possibly temporary) allocation. */
7232 pop_obstacks ();
7233 }
7234 else
7235 {
7236 /* This code takes into account memory allocation
7237 policy of `start_decl'. Namely, if TYPE_NEEDS_CONSTRUCTING
7238 does not hold for this object, then we must make permanent
7239 the storage currently in the temporary obstack. */
7240 if (! TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl)))
7241 preserve_initializer ();
7242 static_aggregates = perm_tree_cons (init, decl, static_aggregates);
7243 }
7244 }
7245 \f
7246 /* Make TYPE a complete type based on INITIAL_VALUE.
7247 Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
7248 2 if there was no information (in which case assume 1 if DO_DEFAULT). */
7249
7250 int
7251 complete_array_type (type, initial_value, do_default)
7252 tree type, initial_value;
7253 int do_default;
7254 {
7255 register tree maxindex = NULL_TREE;
7256 int value = 0;
7257
7258 if (initial_value)
7259 {
7260 /* Note MAXINDEX is really the maximum index,
7261 one less than the size. */
7262 if (TREE_CODE (initial_value) == STRING_CST)
7263 {
7264 int eltsize
7265 = int_size_in_bytes (TREE_TYPE (TREE_TYPE (initial_value)));
7266 maxindex = build_int_2 ((TREE_STRING_LENGTH (initial_value)
7267 / eltsize) - 1, 0);
7268 }
7269 else if (TREE_CODE (initial_value) == CONSTRUCTOR)
7270 {
7271 tree elts = CONSTRUCTOR_ELTS (initial_value);
7272 maxindex = size_binop (MINUS_EXPR, integer_zero_node, size_one_node);
7273 for (; elts; elts = TREE_CHAIN (elts))
7274 {
7275 if (TREE_PURPOSE (elts))
7276 maxindex = TREE_PURPOSE (elts);
7277 else
7278 maxindex = size_binop (PLUS_EXPR, maxindex, size_one_node);
7279 }
7280 maxindex = copy_node (maxindex);
7281 }
7282 else
7283 {
7284 /* Make an error message unless that happened already. */
7285 if (initial_value != error_mark_node)
7286 value = 1;
7287
7288 /* Prevent further error messages. */
7289 maxindex = build_int_2 (0, 0);
7290 }
7291 }
7292
7293 if (!maxindex)
7294 {
7295 if (do_default)
7296 maxindex = build_int_2 (0, 0);
7297 value = 2;
7298 }
7299
7300 if (maxindex)
7301 {
7302 tree itype;
7303
7304 TYPE_DOMAIN (type) = build_index_type (maxindex);
7305 if (! TREE_TYPE (maxindex))
7306 TREE_TYPE (maxindex) = TYPE_DOMAIN (type);
7307 if (initial_value)
7308 itype = TREE_TYPE (initial_value);
7309 else
7310 itype = NULL;
7311 if (itype && !TYPE_DOMAIN (itype))
7312 TYPE_DOMAIN (itype) = TYPE_DOMAIN (type);
7313 /* The type of the main variant should never be used for arrays
7314 of different sizes. It should only ever be completed with the
7315 size of the array. */
7316 if (! TYPE_DOMAIN (TYPE_MAIN_VARIANT (type)))
7317 TYPE_DOMAIN (TYPE_MAIN_VARIANT (type)) = TYPE_DOMAIN (type);
7318 }
7319
7320 /* Lay out the type now that we can get the real answer. */
7321
7322 layout_type (type);
7323
7324 return value;
7325 }
7326 \f
7327 /* Return zero if something is declared to be a member of type
7328 CTYPE when in the context of CUR_TYPE. STRING is the error
7329 message to print in that case. Otherwise, quietly return 1. */
7330
7331 static int
7332 member_function_or_else (ctype, cur_type, string)
7333 tree ctype, cur_type;
7334 char *string;
7335 {
7336 if (ctype && ctype != cur_type)
7337 {
7338 error (string, TYPE_NAME_STRING (ctype));
7339 return 0;
7340 }
7341 return 1;
7342 }
7343 \f
7344 /* Subroutine of `grokdeclarator'. */
7345
7346 /* Generate errors possibly applicable for a given set of specifiers.
7347 This is for ARM $7.1.2. */
7348
7349 static void
7350 bad_specifiers (object, type, virtualp, quals, inlinep, friendp, raises)
7351 tree object;
7352 char *type;
7353 int virtualp, quals, friendp, raises, inlinep;
7354 {
7355 if (virtualp)
7356 cp_error ("`%D' declared as a `virtual' %s", object, type);
7357 if (inlinep)
7358 cp_error ("`%D' declared as an `inline' %s", object, type);
7359 if (quals)
7360 cp_error ("`const' and `volatile' function specifiers on `%D' invalid in %s declaration",
7361 object, type);
7362 if (friendp)
7363 cp_error_at ("invalid friend declaration", object);
7364 if (raises)
7365 cp_error_at ("invalid exception specifications", object);
7366 }
7367
7368 /* CTYPE is class type, or null if non-class.
7369 TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
7370 or METHOD_TYPE.
7371 DECLARATOR is the function's name.
7372 VIRTUALP is truthvalue of whether the function is virtual or not.
7373 FLAGS are to be passed through to `grokclassfn'.
7374 QUALS are qualifiers indicating whether the function is `const'
7375 or `volatile'.
7376 RAISES is a list of exceptions that this function can raise.
7377 CHECK is 1 if we must find this method in CTYPE, 0 if we should
7378 not look, and -1 if we should not call `grokclassfn' at all. */
7379
7380 static tree
7381 grokfndecl (ctype, type, declarator, orig_declarator, virtualp, flags, quals,
7382 raises, attrlist, check, friendp, publicp, inlinep, funcdef_flag,
7383 template_count)
7384 tree ctype, type;
7385 tree declarator;
7386 tree orig_declarator;
7387 int virtualp;
7388 enum overload_flags flags;
7389 tree quals, raises, attrlist;
7390 int check, friendp, publicp, inlinep, funcdef_flag, template_count;
7391 {
7392 tree cname, decl;
7393 int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
7394 tree t;
7395
7396 if (ctype)
7397 cname = TREE_CODE (TYPE_NAME (ctype)) == TYPE_DECL
7398 ? TYPE_IDENTIFIER (ctype) : TYPE_NAME (ctype);
7399 else
7400 cname = NULL_TREE;
7401
7402 if (raises)
7403 {
7404 type = build_exception_variant (type, raises);
7405 }
7406
7407 decl = build_lang_decl (FUNCTION_DECL, declarator, type);
7408 /* propagate volatile out from type to decl */
7409 if (TYPE_VOLATILE (type))
7410 TREE_THIS_VOLATILE (decl) = 1;
7411
7412 /* Should probably propagate const out from type to decl I bet (mrs). */
7413 if (staticp)
7414 {
7415 DECL_STATIC_FUNCTION_P (decl) = 1;
7416 DECL_CONTEXT (decl) = ctype;
7417 }
7418
7419 if (ctype)
7420 DECL_CLASS_CONTEXT (decl) = ctype;
7421
7422 if (ctype == NULL_TREE && ! strcmp (IDENTIFIER_POINTER (declarator), "main"))
7423 {
7424 if (inlinep)
7425 error ("cannot declare `main' to be inline");
7426 else if (! publicp)
7427 error ("cannot declare `main' to be static");
7428 inlinep = 0;
7429 publicp = 1;
7430 }
7431
7432 TREE_PUBLIC (decl) = publicp;
7433 if (! publicp)
7434 {
7435 DECL_INTERFACE_KNOWN (decl) = 1;
7436 DECL_NOT_REALLY_EXTERN (decl) = 1;
7437 }
7438
7439 if (inlinep)
7440 DECL_THIS_INLINE (decl) = DECL_INLINE (decl) = 1;
7441
7442 DECL_EXTERNAL (decl) = 1;
7443 if (quals != NULL_TREE && TREE_CODE (type) == FUNCTION_TYPE)
7444 {
7445 cp_error ("%smember function `%D' cannot have `%T' method qualifier",
7446 (ctype ? "static " : "non-"), decl, TREE_VALUE (quals));
7447 quals = NULL_TREE;
7448 }
7449
7450 if (IDENTIFIER_OPNAME_P (DECL_NAME (decl)))
7451 grok_op_properties (decl, virtualp, check < 0);
7452
7453 if (ctype && hack_decl_function_context (decl))
7454 DECL_NO_STATIC_CHAIN (decl) = 1;
7455
7456 for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
7457 if (TREE_PURPOSE (t)
7458 && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
7459 {
7460 add_defarg_fn (decl);
7461 break;
7462 }
7463
7464 if (friendp &&
7465 TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
7466 /* A friend declaration of the form friend void f<>(). */
7467 SET_DECL_IMPLICIT_INSTANTIATION (decl);
7468
7469 /* Caller will do the rest of this. */
7470 if (check < 0)
7471 return decl;
7472
7473 if (check && funcdef_flag)
7474 DECL_INITIAL (decl) = error_mark_node;
7475
7476 if (flags == NO_SPECIAL && ctype && constructor_name (cname) == declarator)
7477 {
7478 tree tmp;
7479 /* Just handle constructors here. We could do this
7480 inside the following if stmt, but I think
7481 that the code is more legible by breaking this
7482 case out. See comments below for what each of
7483 the following calls is supposed to do. */
7484 DECL_CONSTRUCTOR_P (decl) = 1;
7485
7486 grokclassfn (ctype, declarator, decl, flags, quals);
7487
7488 decl = check_explicit_specialization (orig_declarator, decl,
7489 template_count,
7490 funcdef_flag ? 2 :
7491 (friendp ? 3 : 0));
7492
7493 if (check)
7494 {
7495 tmp = check_classfn (ctype, decl);
7496
7497 if (tmp && TREE_CODE (tmp) == TEMPLATE_DECL)
7498 tmp = DECL_TEMPLATE_RESULT(tmp);
7499
7500 if (tmp && DECL_ARTIFICIAL (tmp))
7501 cp_error ("definition of implicitly-declared `%D'", tmp);
7502 if (tmp && duplicate_decls (decl, tmp))
7503 return tmp;
7504 }
7505 if (! grok_ctor_properties (ctype, decl))
7506 return NULL_TREE;
7507
7508 if (check == 0 && ! current_function_decl)
7509 {
7510 tmp = IDENTIFIER_GLOBAL_VALUE (DECL_ASSEMBLER_NAME (decl));
7511 if (tmp == NULL_TREE)
7512 IDENTIFIER_GLOBAL_VALUE (DECL_ASSEMBLER_NAME (decl)) = decl;
7513 else if (TREE_CODE (tmp) != TREE_CODE (decl))
7514 cp_error ("inconsistent declarations for `%D'", decl);
7515 else
7516 {
7517 duplicate_decls (decl, tmp);
7518 decl = tmp;
7519 /* avoid creating circularities. */
7520 DECL_CHAIN (decl) = NULL_TREE;
7521 }
7522 make_decl_rtl (decl, NULL_PTR, 1);
7523 }
7524 }
7525 else
7526 {
7527 tree tmp;
7528
7529 /* Function gets the ugly name, field gets the nice one.
7530 This call may change the type of the function (because
7531 of default parameters)! */
7532 if (ctype != NULL_TREE)
7533 grokclassfn (ctype, cname, decl, flags, quals);
7534
7535 decl = check_explicit_specialization (orig_declarator, decl,
7536 template_count,
7537 funcdef_flag ? 2 :
7538 (friendp ? 3 : 0));
7539
7540 if (ctype != NULL_TREE && check)
7541 {
7542 tmp = check_classfn (ctype, decl);
7543
7544 if (tmp && TREE_CODE (tmp) == TEMPLATE_DECL)
7545 tmp = DECL_TEMPLATE_RESULT (tmp);
7546
7547 if (tmp && DECL_STATIC_FUNCTION_P (tmp)
7548 && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
7549 {
7550 /* Remove the `this' parm added by grokclassfn.
7551 XXX Isn't this done in start_function, too? */
7552 revert_static_member_fn (&decl, NULL, NULL);
7553 last_function_parms = TREE_CHAIN (last_function_parms);
7554 }
7555 if (tmp && DECL_ARTIFICIAL (tmp))
7556 cp_error ("definition of implicitly-declared `%D'", tmp);
7557 if (tmp)
7558 {
7559 if (!duplicate_decls (decl, tmp))
7560 my_friendly_abort (892);
7561 return tmp;
7562 }
7563 }
7564
7565 if (ctype == NULL_TREE || check)
7566 return decl;
7567
7568 /* Now install the declaration of this function so that others may
7569 find it (esp. its DECL_FRIENDLIST). Don't do this for local class
7570 methods, though. */
7571 if (! current_function_decl)
7572 {
7573 if (!DECL_TEMPLATE_SPECIALIZATION (decl))
7574 {
7575 /* We don't do this for specializations since the
7576 equivalent checks will be done later. Also, at this
7577 point the DECL_ASSEMBLER_NAME is not yet fully
7578 accurate. */
7579
7580 /* FIXME: this should only need to look at
7581 IDENTIFIER_GLOBAL_VALUE. */
7582 tmp = lookup_name (DECL_ASSEMBLER_NAME (decl), 0);
7583 if (tmp == NULL_TREE)
7584 IDENTIFIER_GLOBAL_VALUE (DECL_ASSEMBLER_NAME (decl)) = decl;
7585 else if (TREE_CODE (tmp) != TREE_CODE (decl))
7586 cp_error ("inconsistent declarations for `%D'", decl);
7587 else
7588 {
7589 duplicate_decls (decl, tmp);
7590 decl = tmp;
7591 /* avoid creating circularities. */
7592 DECL_CHAIN (decl) = NULL_TREE;
7593 }
7594 }
7595
7596 if (attrlist)
7597 cplus_decl_attributes (decl, TREE_PURPOSE (attrlist),
7598 TREE_VALUE (attrlist));
7599 make_decl_rtl (decl, NULL_PTR, 1);
7600 }
7601 if (virtualp)
7602 {
7603 DECL_VIRTUAL_P (decl) = 1;
7604 if (DECL_VINDEX (decl) == NULL_TREE)
7605 DECL_VINDEX (decl) = error_mark_node;
7606 IDENTIFIER_VIRTUAL_P (DECL_NAME (decl)) = 1;
7607 }
7608 }
7609 return decl;
7610 }
7611
7612 static tree
7613 grokvardecl (type, declarator, specbits_in, initialized, constp)
7614 tree type;
7615 tree declarator;
7616 RID_BIT_TYPE *specbits_in;
7617 int initialized;
7618 int constp;
7619 {
7620 tree decl;
7621 RID_BIT_TYPE specbits;
7622
7623 specbits = *specbits_in;
7624
7625 if (TREE_CODE (type) == OFFSET_TYPE)
7626 {
7627 /* If you declare a static member so that it
7628 can be initialized, the code will reach here. */
7629 tree basetype = TYPE_OFFSET_BASETYPE (type);
7630 type = TREE_TYPE (type);
7631 decl = build_lang_field_decl (VAR_DECL, declarator, type);
7632 DECL_CONTEXT (decl) = basetype;
7633 DECL_CLASS_CONTEXT (decl) = basetype;
7634 DECL_ASSEMBLER_NAME (decl) = build_static_name (basetype, declarator);
7635 }
7636 else
7637 decl = build_decl (VAR_DECL, declarator, complete_type (type));
7638
7639 DECL_ASSEMBLER_NAME (decl) = current_namespace_id (DECL_ASSEMBLER_NAME (decl));
7640
7641 if (RIDBIT_SETP (RID_EXTERN, specbits))
7642 {
7643 DECL_THIS_EXTERN (decl) = 1;
7644 DECL_EXTERNAL (decl) = !initialized;
7645 }
7646
7647 /* In class context, static means one per class,
7648 public access, and static storage. */
7649 if (DECL_FIELD_CONTEXT (decl) != NULL_TREE
7650 && IS_AGGR_TYPE (DECL_FIELD_CONTEXT (decl)))
7651 {
7652 TREE_PUBLIC (decl) = 1;
7653 TREE_STATIC (decl) = 1;
7654 DECL_EXTERNAL (decl) = 0;
7655 }
7656 /* At top level, either `static' or no s.c. makes a definition
7657 (perhaps tentative), and absence of `static' makes it public. */
7658 else if (toplevel_bindings_p ())
7659 {
7660 TREE_PUBLIC (decl) = (RIDBIT_NOTSETP (RID_STATIC, specbits)
7661 && (DECL_THIS_EXTERN (decl) || ! constp));
7662 TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
7663 }
7664 /* Not at top level, only `static' makes a static definition. */
7665 else
7666 {
7667 TREE_STATIC (decl) = !! RIDBIT_SETP (RID_STATIC, specbits);
7668 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
7669 }
7670 return decl;
7671 }
7672
7673 /* Create a canonical pointer to member function type. */
7674
7675 tree
7676 build_ptrmemfunc_type (type)
7677 tree type;
7678 {
7679 tree fields[4];
7680 tree t;
7681 tree u;
7682
7683 /* If a canonical type already exists for this type, use it. We use
7684 this method instead of type_hash_canon, because it only does a
7685 simple equality check on the list of field members. */
7686
7687 if ((t = TYPE_GET_PTRMEMFUNC_TYPE (type)))
7688 return t;
7689
7690 push_obstacks (TYPE_OBSTACK (type), TYPE_OBSTACK (type));
7691
7692 u = make_lang_type (UNION_TYPE);
7693 IS_AGGR_TYPE (u) = 0;
7694 fields[0] = build_lang_field_decl (FIELD_DECL, pfn_identifier, type);
7695 fields[1] = build_lang_field_decl (FIELD_DECL, delta2_identifier,
7696 delta_type_node);
7697 finish_builtin_type (u, "__ptrmemfunc_type", fields, 1, ptr_type_node);
7698 TYPE_NAME (u) = NULL_TREE;
7699
7700 t = make_lang_type (RECORD_TYPE);
7701
7702 /* Let the front-end know this is a pointer to member function. */
7703 TYPE_PTRMEMFUNC_FLAG (t) = 1;
7704 /* and not really an aggregate. */
7705 IS_AGGR_TYPE (t) = 0;
7706
7707 fields[0] = build_lang_field_decl (FIELD_DECL, delta_identifier,
7708 delta_type_node);
7709 fields[1] = build_lang_field_decl (FIELD_DECL, index_identifier,
7710 delta_type_node);
7711 fields[2] = build_lang_field_decl (FIELD_DECL, pfn_or_delta2_identifier, u);
7712 finish_builtin_type (t, "__ptrmemfunc_type", fields, 2, ptr_type_node);
7713
7714 pop_obstacks ();
7715
7716 /* Zap out the name so that the back-end will give us the debugging
7717 information for this anonymous RECORD_TYPE. */
7718 TYPE_NAME (t) = NULL_TREE;
7719
7720 TYPE_SET_PTRMEMFUNC_TYPE (type, t);
7721
7722 /* Seems to be wanted. */
7723 CLASSTYPE_GOT_SEMICOLON (t) = 1;
7724 return t;
7725 }
7726
7727 /* Given declspecs and a declarator,
7728 determine the name and type of the object declared
7729 and construct a ..._DECL node for it.
7730 (In one case we can return a ..._TYPE node instead.
7731 For invalid input we sometimes return 0.)
7732
7733 DECLSPECS is a chain of tree_list nodes whose value fields
7734 are the storage classes and type specifiers.
7735
7736 DECL_CONTEXT says which syntactic context this declaration is in:
7737 NORMAL for most contexts. Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
7738 FUNCDEF for a function definition. Like NORMAL but a few different
7739 error messages in each case. Return value may be zero meaning
7740 this definition is too screwy to try to parse.
7741 MEMFUNCDEF for a function definition. Like FUNCDEF but prepares to
7742 handle member functions (which have FIELD context).
7743 Return value may be zero meaning this definition is too screwy to
7744 try to parse.
7745 PARM for a parameter declaration (either within a function prototype
7746 or before a function body). Make a PARM_DECL, or return void_type_node.
7747 CATCHPARM for a parameter declaration before a catch clause.
7748 TYPENAME if for a typename (in a cast or sizeof).
7749 Don't make a DECL node; just return the ..._TYPE node.
7750 FIELD for a struct or union field; make a FIELD_DECL.
7751 BITFIELD for a field with specified width.
7752 INITIALIZED is 1 if the decl has an initializer.
7753
7754 In the TYPENAME case, DECLARATOR is really an absolute declarator.
7755 It may also be so in the PARM case, for a prototype where the
7756 argument type is specified but not the name.
7757
7758 This function is where the complicated C meanings of `static'
7759 and `extern' are interpreted.
7760
7761 For C++, if there is any monkey business to do, the function which
7762 calls this one must do it, i.e., prepending instance variables,
7763 renaming overloaded function names, etc.
7764
7765 Note that for this C++, it is an error to define a method within a class
7766 which does not belong to that class.
7767
7768 Except in the case where SCOPE_REFs are implicitly known (such as
7769 methods within a class being redundantly qualified),
7770 declarations which involve SCOPE_REFs are returned as SCOPE_REFs
7771 (class_name::decl_name). The caller must also deal with this.
7772
7773 If a constructor or destructor is seen, and the context is FIELD,
7774 then the type gains the attribute TREE_HAS_x. If such a declaration
7775 is erroneous, NULL_TREE is returned.
7776
7777 QUALS is used only for FUNCDEF and MEMFUNCDEF cases. For a member
7778 function, these are the qualifiers to give to the `this' pointer.
7779
7780 May return void_type_node if the declarator turned out to be a friend.
7781 See grokfield for details. */
7782
7783 enum return_types { return_normal, return_ctor, return_dtor, return_conversion };
7784
7785 tree
7786 grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
7787 tree declspecs;
7788 tree declarator;
7789 enum decl_context decl_context;
7790 int initialized;
7791 tree attrlist;
7792 {
7793 RID_BIT_TYPE specbits;
7794 int nclasses = 0;
7795 tree spec;
7796 tree type = NULL_TREE;
7797 int longlong = 0;
7798 int constp;
7799 int volatilep;
7800 int virtualp, explicitp, friendp, inlinep, staticp;
7801 int explicit_int = 0;
7802 int explicit_char = 0;
7803 int defaulted_int = 0;
7804 int opaque_typedef = 0;
7805 tree typedef_decl = NULL_TREE;
7806 char *name;
7807 tree typedef_type = NULL_TREE;
7808 int funcdef_flag = 0;
7809 enum tree_code innermost_code = ERROR_MARK;
7810 int bitfield = 0;
7811 #if 0
7812 /* See the code below that used this. */
7813 tree decl_machine_attr = NULL_TREE;
7814 #endif
7815 /* Set this to error_mark_node for FIELD_DECLs we could not handle properly.
7816 All FIELD_DECLs we build here have `init' put into their DECL_INITIAL. */
7817 tree init = NULL_TREE;
7818
7819 /* Keep track of what sort of function is being processed
7820 so that we can warn about default return values, or explicit
7821 return values which do not match prescribed defaults. */
7822 enum return_types return_type = return_normal;
7823
7824 tree dname = NULL_TREE;
7825 tree ctype = current_class_type;
7826 tree ctor_return_type = NULL_TREE;
7827 enum overload_flags flags = NO_SPECIAL;
7828 tree quals = NULL_TREE;
7829 tree raises = NULL_TREE;
7830 int template_count = 0;
7831
7832 RIDBIT_RESET_ALL (specbits);
7833 if (decl_context == FUNCDEF)
7834 funcdef_flag = 1, decl_context = NORMAL;
7835 else if (decl_context == MEMFUNCDEF)
7836 funcdef_flag = -1, decl_context = FIELD;
7837 else if (decl_context == BITFIELD)
7838 bitfield = 1, decl_context = FIELD;
7839
7840 /* Look inside a declarator for the name being declared
7841 and get it as a string, for an error message. */
7842 {
7843 tree *next = &declarator;
7844 register tree decl;
7845 name = NULL;
7846
7847 while (next && *next)
7848 {
7849 decl = *next;
7850 switch (TREE_CODE (decl))
7851 {
7852 case COND_EXPR:
7853 ctype = NULL_TREE;
7854 next = &TREE_OPERAND (decl, 0);
7855 break;
7856
7857 case BIT_NOT_EXPR: /* for C++ destructors! */
7858 {
7859 tree name = TREE_OPERAND (decl, 0);
7860 tree rename = NULL_TREE;
7861
7862 my_friendly_assert (flags == NO_SPECIAL, 152);
7863 flags = DTOR_FLAG;
7864 return_type = return_dtor;
7865 if (TREE_CODE (name) == TYPE_DECL)
7866 TREE_OPERAND (decl, 0) = name = constructor_name (name);
7867 my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 153);
7868 if (ctype == NULL_TREE)
7869 {
7870 if (current_class_type == NULL_TREE)
7871 {
7872 error ("destructors must be member functions");
7873 flags = NO_SPECIAL;
7874 }
7875 else
7876 {
7877 tree t = constructor_name (current_class_name);
7878 if (t != name)
7879 rename = t;
7880 }
7881 }
7882 else
7883 {
7884 tree t = constructor_name (ctype);
7885 if (t != name)
7886 rename = t;
7887 }
7888
7889 if (rename)
7890 {
7891 cp_error ("destructor `%T' must match class name `%T'",
7892 name, rename);
7893 TREE_OPERAND (decl, 0) = rename;
7894 }
7895 next = &name;
7896 }
7897 break;
7898
7899 case ADDR_EXPR: /* C++ reference declaration */
7900 /* fall through */
7901 case ARRAY_REF:
7902 case INDIRECT_REF:
7903 ctype = NULL_TREE;
7904 innermost_code = TREE_CODE (decl);
7905 next = &TREE_OPERAND (decl, 0);
7906 break;
7907
7908 case CALL_EXPR:
7909 if (parmlist_is_exprlist (TREE_OPERAND (decl, 1)))
7910 {
7911 /* This is actually a variable declaration using constructor
7912 syntax. We need to call start_decl and cp_finish_decl so we
7913 can get the variable initialized... */
7914
7915 *next = TREE_OPERAND (decl, 0);
7916 init = TREE_OPERAND (decl, 1);
7917
7918 decl = start_decl (declarator, declspecs, 1);
7919 /* Look for __unused__ attribute */
7920 if (TREE_USED (TREE_TYPE (decl)))
7921 TREE_USED (decl) = 1;
7922 finish_decl (decl, init, NULL_TREE);
7923 return 0;
7924 }
7925 innermost_code = TREE_CODE (decl);
7926 if (decl_context == FIELD && ctype == NULL_TREE)
7927 ctype = current_class_type;
7928 if (ctype
7929 && TREE_OPERAND (decl, 0)
7930 && (TREE_CODE (TREE_OPERAND (decl, 0)) == TYPE_DECL
7931 && ((DECL_NAME (TREE_OPERAND (decl, 0))
7932 == constructor_name_full (ctype))
7933 || (DECL_NAME (TREE_OPERAND (decl, 0))
7934 == constructor_name (ctype)))))
7935 TREE_OPERAND (decl, 0) = constructor_name (ctype);
7936 next = &TREE_OPERAND (decl, 0);
7937 decl = *next;
7938 if (ctype != NULL_TREE
7939 && decl != NULL_TREE && flags != DTOR_FLAG
7940 && decl == constructor_name (ctype))
7941 {
7942 return_type = return_ctor;
7943 ctor_return_type = ctype;
7944 }
7945 ctype = NULL_TREE;
7946 break;
7947
7948 case TEMPLATE_ID_EXPR:
7949 {
7950 tree fns = TREE_OPERAND (decl, 0);
7951
7952 if (TREE_CODE (fns) == LOOKUP_EXPR)
7953 fns = TREE_OPERAND (fns, 0);
7954
7955 if (TREE_CODE (fns) == IDENTIFIER_NODE)
7956 dname = fns;
7957 else if (really_overloaded_fn (fns))
7958 dname = DECL_NAME (get_first_fn (fns));
7959 else
7960 dname = DECL_NAME (fns);
7961 }
7962 /* fall through */
7963
7964 case IDENTIFIER_NODE:
7965 if (TREE_CODE (decl) == IDENTIFIER_NODE)
7966 dname = decl;
7967
7968 next = 0;
7969
7970 if (is_rid (dname))
7971 {
7972 cp_error ("declarator-id missing; using reserved word `%D'",
7973 dname);
7974 name = IDENTIFIER_POINTER (dname);
7975 }
7976 if (! IDENTIFIER_OPNAME_P (dname)
7977 /* GNU/Linux headers use '__op'. Arrgh. */
7978 || (IDENTIFIER_TYPENAME_P (dname) && ! TREE_TYPE (dname)))
7979 name = IDENTIFIER_POINTER (dname);
7980 else
7981 {
7982 if (IDENTIFIER_TYPENAME_P (dname))
7983 {
7984 my_friendly_assert (flags == NO_SPECIAL, 154);
7985 flags = TYPENAME_FLAG;
7986 ctor_return_type = TREE_TYPE (dname);
7987 return_type = return_conversion;
7988 }
7989 name = operator_name_string (dname);
7990 }
7991 break;
7992
7993 /* C++ extension */
7994 case SCOPE_REF:
7995 {
7996 /* Perform error checking, and decide on a ctype. */
7997 tree cname = TREE_OPERAND (decl, 0);
7998 if (cname == NULL_TREE)
7999 ctype = NULL_TREE;
8000 else if (! is_aggr_type (cname, 1))
8001 TREE_OPERAND (decl, 0) = NULL_TREE;
8002 /* Must test TREE_OPERAND (decl, 1), in case user gives
8003 us `typedef (class::memfunc)(int); memfunc *memfuncptr;' */
8004 else if (TREE_OPERAND (decl, 1)
8005 && TREE_CODE (TREE_OPERAND (decl, 1)) == INDIRECT_REF)
8006 ctype = cname;
8007 else if (TREE_CODE (cname) == TEMPLATE_TYPE_PARM
8008 || TREE_CODE (cname) == TEMPLATE_TEMPLATE_PARM)
8009 {
8010 cp_error ("`%T::%D' is not a valid declarator", cname,
8011 TREE_OPERAND (decl, 1));
8012 cp_error (" perhaps you want `typename %T::%D' to make it a type",
8013 cname, TREE_OPERAND (decl, 1));
8014 return void_type_node;
8015 }
8016 else if (ctype == NULL_TREE)
8017 ctype = cname;
8018 else if (TREE_COMPLEXITY (decl) == current_class_depth)
8019 TREE_OPERAND (decl, 0) = ctype;
8020 else
8021 {
8022 if (! UNIQUELY_DERIVED_FROM_P (cname, ctype))
8023 {
8024 cp_error ("type `%T' is not derived from type `%T'",
8025 cname, ctype);
8026 TREE_OPERAND (decl, 0) = NULL_TREE;
8027 }
8028 else
8029 ctype = cname;
8030 }
8031
8032 if (ctype && TREE_CODE (TREE_OPERAND (decl, 1)) == TYPE_DECL
8033 && ((DECL_NAME (TREE_OPERAND (decl, 1))
8034 == constructor_name_full (ctype))
8035 || (DECL_NAME (TREE_OPERAND (decl, 1))
8036 == constructor_name (ctype))))
8037 TREE_OPERAND (decl, 1) = constructor_name (ctype);
8038 next = &TREE_OPERAND (decl, 1);
8039 decl = *next;
8040 if (ctype)
8041 {
8042 if (TREE_CODE (decl) == IDENTIFIER_NODE
8043 && constructor_name (ctype) == decl)
8044 {
8045 return_type = return_ctor;
8046 ctor_return_type = ctype;
8047 }
8048 else if (TREE_CODE (decl) == BIT_NOT_EXPR
8049 && TREE_CODE (TREE_OPERAND (decl, 0)) == IDENTIFIER_NODE
8050 && (constructor_name (ctype) == TREE_OPERAND (decl, 0)
8051 || constructor_name_full (ctype) == TREE_OPERAND (decl, 0)))
8052 {
8053 return_type = return_dtor;
8054 ctor_return_type = ctype;
8055 flags = DTOR_FLAG;
8056 TREE_OPERAND (decl, 0) = constructor_name (ctype);
8057 next = &TREE_OPERAND (decl, 0);
8058 }
8059 }
8060 }
8061 break;
8062
8063 case ERROR_MARK:
8064 next = 0;
8065 break;
8066
8067 case TYPE_DECL:
8068 /* Parse error puts this typespec where
8069 a declarator should go. */
8070 cp_error ("`%T' specified as declarator-id", DECL_NAME (decl));
8071 if (TREE_TYPE (decl) == current_class_type)
8072 cp_error (" perhaps you want `%T' for a constructor",
8073 current_class_name);
8074 dname = DECL_NAME (decl);
8075 name = IDENTIFIER_POINTER (dname);
8076
8077 /* Avoid giving two errors for this. */
8078 IDENTIFIER_CLASS_VALUE (dname) = NULL_TREE;
8079
8080 declspecs = temp_tree_cons (NULL_TREE, integer_type_node,
8081 declspecs);
8082 *next = dname;
8083 next = 0;
8084 break;
8085
8086 default:
8087 cp_compiler_error ("`%D' as declarator", decl);
8088 return 0; /* We used to do a 155 abort here. */
8089 }
8090 }
8091 if (name == NULL)
8092 name = "type name";
8093 }
8094
8095 /* A function definition's declarator must have the form of
8096 a function declarator. */
8097
8098 if (funcdef_flag && innermost_code != CALL_EXPR)
8099 return 0;
8100
8101 if (((dname && IDENTIFIER_OPNAME_P (dname)) || flags == TYPENAME_FLAG)
8102 && innermost_code != CALL_EXPR
8103 && ! (ctype && declspecs == NULL_TREE))
8104 {
8105 cp_error ("declaration of `%D' as non-function", dname);
8106 return void_type_node;
8107 }
8108
8109 /* Anything declared one level down from the top level
8110 must be one of the parameters of a function
8111 (because the body is at least two levels down). */
8112
8113 /* This heuristic cannot be applied to C++ nodes! Fixed, however,
8114 by not allowing C++ class definitions to specify their parameters
8115 with xdecls (must be spec.d in the parmlist).
8116
8117 Since we now wait to push a class scope until we are sure that
8118 we are in a legitimate method context, we must set oldcname
8119 explicitly (since current_class_name is not yet alive).
8120
8121 We also want to avoid calling this a PARM if it is in a namespace. */
8122
8123 if (decl_context == NORMAL && ! namespace_bindings_p ()
8124 && ! pseudo_global_level_p ())
8125 {
8126 struct binding_level *b = current_binding_level;
8127 current_binding_level = b->level_chain;
8128 if (current_binding_level != 0 && toplevel_bindings_p ())
8129 decl_context = PARM;
8130 current_binding_level = b;
8131 }
8132
8133 /* Look through the decl specs and record which ones appear.
8134 Some typespecs are defined as built-in typenames.
8135 Others, the ones that are modifiers of other types,
8136 are represented by bits in SPECBITS: set the bits for
8137 the modifiers that appear. Storage class keywords are also in SPECBITS.
8138
8139 If there is a typedef name or a type, store the type in TYPE.
8140 This includes builtin typedefs such as `int'.
8141
8142 Set EXPLICIT_INT if the type is `int' or `char' and did not
8143 come from a user typedef.
8144
8145 Set LONGLONG if `long' is mentioned twice.
8146
8147 For C++, constructors and destructors have their own fast treatment. */
8148
8149 for (spec = declspecs; spec; spec = TREE_CHAIN (spec))
8150 {
8151 register int i;
8152 register tree id;
8153
8154 /* Certain parse errors slip through. For example,
8155 `int class;' is not caught by the parser. Try
8156 weakly to recover here. */
8157 if (TREE_CODE (spec) != TREE_LIST)
8158 return 0;
8159
8160 id = TREE_VALUE (spec);
8161
8162 if (TREE_CODE (id) == IDENTIFIER_NODE)
8163 {
8164 if (id == ridpointers[(int) RID_INT]
8165 || id == ridpointers[(int) RID_CHAR]
8166 || id == ridpointers[(int) RID_BOOL]
8167 || id == ridpointers[(int) RID_WCHAR])
8168 {
8169 if (type)
8170 {
8171 if (id == ridpointers[(int) RID_BOOL])
8172 error ("`bool' is now a keyword");
8173 else
8174 cp_error ("extraneous `%T' ignored", id);
8175 }
8176 else
8177 {
8178 if (id == ridpointers[(int) RID_INT])
8179 explicit_int = 1;
8180 else if (id == ridpointers[(int) RID_CHAR])
8181 explicit_char = 1;
8182 type = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (id));
8183 }
8184 goto found;
8185 }
8186 /* C++ aggregate types. */
8187 if (IDENTIFIER_HAS_TYPE_VALUE (id))
8188 {
8189 if (type)
8190 cp_error ("multiple declarations `%T' and `%T'", type, id);
8191 else
8192 type = IDENTIFIER_TYPE_VALUE (id);
8193 goto found;
8194 }
8195
8196 for (i = (int) RID_FIRST_MODIFIER; i <= (int) RID_LAST_MODIFIER; i++)
8197 {
8198 if (ridpointers[i] == id)
8199 {
8200 if (i == (int) RID_LONG && RIDBIT_SETP (i, specbits))
8201 {
8202 if (pedantic && ! in_system_header)
8203 pedwarn ("ANSI C++ does not support `long long'");
8204 if (longlong)
8205 error ("`long long long' is too long for GCC");
8206 else
8207 longlong = 1;
8208 }
8209 else if (RIDBIT_SETP (i, specbits))
8210 pedwarn ("duplicate `%s'", IDENTIFIER_POINTER (id));
8211 RIDBIT_SET (i, specbits);
8212 goto found;
8213 }
8214 }
8215 }
8216 /* C++ aggregate types. */
8217 else if (TREE_CODE (id) == TYPE_DECL || TREE_CODE (id) == TEMPLATE_DECL)
8218 {
8219 if (type)
8220 cp_error ("multiple declarations `%T' and `%T'", type,
8221 TREE_TYPE (id));
8222 else
8223 {
8224 type = TREE_TYPE (id);
8225 TREE_VALUE (spec) = type;
8226 }
8227 goto found;
8228 }
8229 if (type)
8230 error ("two or more data types in declaration of `%s'", name);
8231 else if (TREE_CODE (id) == IDENTIFIER_NODE)
8232 {
8233 register tree t = lookup_name (id, 1);
8234 if (!t || TREE_CODE (t) != TYPE_DECL)
8235 error ("`%s' fails to be a typedef or built in type",
8236 IDENTIFIER_POINTER (id));
8237 else
8238 {
8239 type = TREE_TYPE (t);
8240 #if 0
8241 /* See the code below that used this. */
8242 decl_machine_attr = DECL_MACHINE_ATTRIBUTES (id);
8243 #endif
8244 typedef_decl = t;
8245 }
8246 }
8247 else if (id != error_mark_node)
8248 /* Can't change CLASS nodes into RECORD nodes here! */
8249 type = id;
8250
8251 found: ;
8252 }
8253
8254 typedef_type = type;
8255
8256 /* No type at all: default to `int', and set DEFAULTED_INT
8257 because it was not a user-defined typedef.
8258 Except when we have a `typedef' inside a signature, in
8259 which case the type defaults to `unknown type' and is
8260 instantiated when assigning to a signature pointer or ref. */
8261
8262 if (type == NULL_TREE
8263 && (RIDBIT_SETP (RID_SIGNED, specbits)
8264 || RIDBIT_SETP (RID_UNSIGNED, specbits)
8265 || RIDBIT_SETP (RID_LONG, specbits)
8266 || RIDBIT_SETP (RID_SHORT, specbits)))
8267 {
8268 /* These imply 'int'. */
8269 type = integer_type_node;
8270 defaulted_int = 1;
8271 }
8272
8273 if (type == NULL_TREE)
8274 {
8275 explicit_int = -1;
8276 if (return_type == return_dtor)
8277 type = void_type_node;
8278 else if (return_type == return_ctor)
8279 type = build_pointer_type (ctor_return_type);
8280 else if (return_type == return_conversion)
8281 type = ctor_return_type;
8282 else if (current_class_type
8283 && IS_SIGNATURE (current_class_type)
8284 && RIDBIT_SETP (RID_TYPEDEF, specbits)
8285 && (decl_context == FIELD || decl_context == NORMAL))
8286 {
8287 explicit_int = 0;
8288 opaque_typedef = 1;
8289 type = copy_node (opaque_type_node);
8290 }
8291 else
8292 {
8293 if (funcdef_flag)
8294 {
8295 if (warn_return_type
8296 && return_type == return_normal)
8297 /* Save warning until we know what is really going on. */
8298 warn_about_return_type = 1;
8299 }
8300 else if (RIDBIT_SETP (RID_TYPEDEF, specbits))
8301 pedwarn ("ANSI C++ forbids typedef which does not specify a type");
8302 else if (innermost_code != CALL_EXPR || pedantic
8303 || (warn_return_type && return_type == return_normal))
8304 {
8305 if (innermost_code == CALL_EXPR)
8306 cp_pedwarn ("return-type of `%D' defaults to `int'", dname);
8307 else
8308 cp_pedwarn ("ANSI C++ forbids declaration `%D' with no type",
8309 dname);
8310 }
8311 type = integer_type_node;
8312 }
8313 }
8314 else if (return_type == return_dtor)
8315 {
8316 error ("return type specification for destructor invalid");
8317 type = void_type_node;
8318 }
8319 else if (return_type == return_ctor)
8320 {
8321 error ("return type specification for constructor invalid");
8322 type = build_pointer_type (ctor_return_type);
8323 }
8324 else if (return_type == return_conversion)
8325 {
8326 if (comptypes (type, ctor_return_type, 1) == 0)
8327 cp_error ("operator `%T' declared to return `%T'",
8328 ctor_return_type, type);
8329 else
8330 cp_pedwarn ("return type specified for `operator %T'",
8331 ctor_return_type);
8332
8333 type = ctor_return_type;
8334 }
8335
8336 ctype = NULL_TREE;
8337
8338 /* Now process the modifiers that were specified
8339 and check for invalid combinations. */
8340
8341 /* Long double is a special combination. */
8342
8343 if (RIDBIT_SETP (RID_LONG, specbits)
8344 && TYPE_MAIN_VARIANT (type) == double_type_node)
8345 {
8346 RIDBIT_RESET (RID_LONG, specbits);
8347 type = build_type_variant (long_double_type_node, TYPE_READONLY (type),
8348 TYPE_VOLATILE (type));
8349 }
8350
8351 /* Check all other uses of type modifiers. */
8352
8353 if (RIDBIT_SETP (RID_UNSIGNED, specbits)
8354 || RIDBIT_SETP (RID_SIGNED, specbits)
8355 || RIDBIT_SETP (RID_LONG, specbits)
8356 || RIDBIT_SETP (RID_SHORT, specbits))
8357 {
8358 int ok = 0;
8359
8360 if (TREE_CODE (type) == REAL_TYPE)
8361 error ("short, signed or unsigned invalid for `%s'", name);
8362 else if (TREE_CODE (type) != INTEGER_TYPE)
8363 error ("long, short, signed or unsigned invalid for `%s'", name);
8364 else if (RIDBIT_SETP (RID_LONG, specbits)
8365 && RIDBIT_SETP (RID_SHORT, specbits))
8366 error ("long and short specified together for `%s'", name);
8367 else if ((RIDBIT_SETP (RID_LONG, specbits)
8368 || RIDBIT_SETP (RID_SHORT, specbits))
8369 && explicit_char)
8370 error ("long or short specified with char for `%s'", name);
8371 else if ((RIDBIT_SETP (RID_LONG, specbits)
8372 || RIDBIT_SETP (RID_SHORT, specbits))
8373 && TREE_CODE (type) == REAL_TYPE)
8374 error ("long or short specified with floating type for `%s'", name);
8375 else if (RIDBIT_SETP (RID_SIGNED, specbits)
8376 && RIDBIT_SETP (RID_UNSIGNED, specbits))
8377 error ("signed and unsigned given together for `%s'", name);
8378 else
8379 {
8380 ok = 1;
8381 if (!explicit_int && !defaulted_int && !explicit_char && pedantic)
8382 {
8383 pedwarn ("long, short, signed or unsigned used invalidly for `%s'",
8384 name);
8385 if (flag_pedantic_errors)
8386 ok = 0;
8387 }
8388 }
8389
8390 /* Discard the type modifiers if they are invalid. */
8391 if (! ok)
8392 {
8393 RIDBIT_RESET (RID_UNSIGNED, specbits);
8394 RIDBIT_RESET (RID_SIGNED, specbits);
8395 RIDBIT_RESET (RID_LONG, specbits);
8396 RIDBIT_RESET (RID_SHORT, specbits);
8397 longlong = 0;
8398 }
8399 }
8400
8401 if (RIDBIT_SETP (RID_COMPLEX, specbits)
8402 && TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
8403 {
8404 error ("complex invalid for `%s'", name);
8405 RIDBIT_RESET (RID_COMPLEX, specbits);
8406 }
8407
8408 /* Decide whether an integer type is signed or not.
8409 Optionally treat bitfields as signed by default. */
8410 if (RIDBIT_SETP (RID_UNSIGNED, specbits)
8411 || (bitfield && ! flag_signed_bitfields
8412 && (explicit_int || defaulted_int || explicit_char
8413 /* A typedef for plain `int' without `signed'
8414 can be controlled just like plain `int'. */
8415 || ! (typedef_decl != NULL_TREE
8416 && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
8417 && TREE_CODE (type) != ENUMERAL_TYPE
8418 && RIDBIT_NOTSETP (RID_SIGNED, specbits)))
8419 {
8420 if (longlong)
8421 type = long_long_unsigned_type_node;
8422 else if (RIDBIT_SETP (RID_LONG, specbits))
8423 type = long_unsigned_type_node;
8424 else if (RIDBIT_SETP (RID_SHORT, specbits))
8425 type = short_unsigned_type_node;
8426 else if (type == char_type_node)
8427 type = unsigned_char_type_node;
8428 else if (typedef_decl)
8429 type = unsigned_type (type);
8430 else
8431 type = unsigned_type_node;
8432 }
8433 else if (RIDBIT_SETP (RID_SIGNED, specbits)
8434 && type == char_type_node)
8435 type = signed_char_type_node;
8436 else if (longlong)
8437 type = long_long_integer_type_node;
8438 else if (RIDBIT_SETP (RID_LONG, specbits))
8439 type = long_integer_type_node;
8440 else if (RIDBIT_SETP (RID_SHORT, specbits))
8441 type = short_integer_type_node;
8442
8443 if (RIDBIT_SETP (RID_COMPLEX, specbits))
8444 {
8445 /* If we just have "complex", it is equivalent to
8446 "complex double", but if any modifiers at all are specified it is
8447 the complex form of TYPE. E.g, "complex short" is
8448 "complex short int". */
8449
8450 if (defaulted_int && ! longlong
8451 && ! (RIDBIT_SETP (RID_LONG, specbits)
8452 || RIDBIT_SETP (RID_SHORT, specbits)
8453 || RIDBIT_SETP (RID_SIGNED, specbits)
8454 || RIDBIT_SETP (RID_UNSIGNED, specbits)))
8455 type = complex_double_type_node;
8456 else if (type == integer_type_node)
8457 type = complex_integer_type_node;
8458 else if (type == float_type_node)
8459 type = complex_float_type_node;
8460 else if (type == double_type_node)
8461 type = complex_double_type_node;
8462 else if (type == long_double_type_node)
8463 type = complex_long_double_type_node;
8464 else
8465 type = build_complex_type (type);
8466 }
8467
8468 /* Set CONSTP if this declaration is `const', whether by
8469 explicit specification or via a typedef.
8470 Likewise for VOLATILEP. */
8471
8472 constp = !! RIDBIT_SETP (RID_CONST, specbits) + TYPE_READONLY (type);
8473 volatilep = !! RIDBIT_SETP (RID_VOLATILE, specbits) + TYPE_VOLATILE (type);
8474 staticp = 0;
8475 inlinep = !! RIDBIT_SETP (RID_INLINE, specbits);
8476 virtualp = RIDBIT_SETP (RID_VIRTUAL, specbits);
8477 RIDBIT_RESET (RID_VIRTUAL, specbits);
8478 explicitp = RIDBIT_SETP (RID_EXPLICIT, specbits) != 0;
8479 RIDBIT_RESET (RID_EXPLICIT, specbits);
8480
8481 if (RIDBIT_SETP (RID_STATIC, specbits))
8482 staticp = 1 + (decl_context == FIELD);
8483
8484 if (virtualp && staticp == 2)
8485 {
8486 cp_error ("member `%D' cannot be declared both virtual and static",
8487 dname);
8488 staticp = 0;
8489 }
8490 friendp = RIDBIT_SETP (RID_FRIEND, specbits);
8491 RIDBIT_RESET (RID_FRIEND, specbits);
8492
8493 if (RIDBIT_SETP (RID_MUTABLE, specbits))
8494 {
8495 if (decl_context == PARM)
8496 {
8497 error ("non-member `%s' cannot be declared `mutable'", name);
8498 RIDBIT_RESET (RID_MUTABLE, specbits);
8499 }
8500 else if (friendp || decl_context == TYPENAME)
8501 {
8502 error ("non-object member `%s' cannot be declared `mutable'", name);
8503 RIDBIT_RESET (RID_MUTABLE, specbits);
8504 }
8505 }
8506
8507 /* Warn if two storage classes are given. Default to `auto'. */
8508
8509 if (RIDBIT_ANY_SET (specbits))
8510 {
8511 if (RIDBIT_SETP (RID_STATIC, specbits)) nclasses++;
8512 if (RIDBIT_SETP (RID_EXTERN, specbits)) nclasses++;
8513 if (decl_context == PARM && nclasses > 0)
8514 error ("storage class specifiers invalid in parameter declarations");
8515 if (RIDBIT_SETP (RID_TYPEDEF, specbits))
8516 {
8517 if (decl_context == PARM)
8518 error ("typedef declaration invalid in parameter declaration");
8519 nclasses++;
8520 }
8521 if (RIDBIT_SETP (RID_AUTO, specbits)) nclasses++;
8522 if (RIDBIT_SETP (RID_REGISTER, specbits)) nclasses++;
8523 }
8524
8525 /* Give error if `virtual' is used outside of class declaration. */
8526 if (virtualp
8527 && (current_class_name == NULL_TREE || decl_context != FIELD))
8528 {
8529 error ("virtual outside class declaration");
8530 virtualp = 0;
8531 }
8532 if (current_class_name == NULL_TREE && RIDBIT_SETP (RID_MUTABLE, specbits))
8533 {
8534 error ("only members can be declared mutable");
8535 RIDBIT_RESET (RID_MUTABLE, specbits);
8536 }
8537
8538 /* Static anonymous unions are dealt with here. */
8539 if (staticp && decl_context == TYPENAME
8540 && TREE_CODE (declspecs) == TREE_LIST
8541 && TREE_CODE (TREE_VALUE (declspecs)) == UNION_TYPE
8542 && ANON_AGGRNAME_P (TYPE_IDENTIFIER (TREE_VALUE (declspecs))))
8543 decl_context = FIELD;
8544
8545 /* Give error if `const,' `volatile,' `inline,' `friend,' or `virtual'
8546 is used in a signature member function declaration. */
8547 if (decl_context == FIELD
8548 && IS_SIGNATURE (current_class_type)
8549 && RIDBIT_NOTSETP (RID_TYPEDEF, specbits))
8550 {
8551 if (constp)
8552 {
8553 error ("`const' specified for signature member function `%s'", name);
8554 constp = 0;
8555 }
8556 if (volatilep)
8557 {
8558 error ("`volatile' specified for signature member function `%s'",
8559 name);
8560 volatilep = 0;
8561 }
8562 if (inlinep)
8563 {
8564 error ("`inline' specified for signature member function `%s'", name);
8565 /* Later, we'll make signature member functions inline. */
8566 inlinep = 0;
8567 }
8568 if (friendp)
8569 {
8570 error ("`friend' declaration in signature definition");
8571 friendp = 0;
8572 }
8573 if (virtualp)
8574 {
8575 error ("`virtual' specified for signature member function `%s'",
8576 name);
8577 /* Later, we'll make signature member functions virtual. */
8578 virtualp = 0;
8579 }
8580 }
8581
8582 /* Warn about storage classes that are invalid for certain
8583 kinds of declarations (parameters, typenames, etc.). */
8584
8585 if (nclasses > 1)
8586 error ("multiple storage classes in declaration of `%s'", name);
8587 else if (decl_context != NORMAL && nclasses > 0)
8588 {
8589 if ((decl_context == PARM || decl_context == CATCHPARM)
8590 && (RIDBIT_SETP (RID_REGISTER, specbits)
8591 || RIDBIT_SETP (RID_AUTO, specbits)))
8592 ;
8593 else if (RIDBIT_SETP (RID_TYPEDEF, specbits))
8594 ;
8595 else if (decl_context == FIELD
8596 && ! IS_SIGNATURE (current_class_type)
8597 /* C++ allows static class elements */
8598 && RIDBIT_SETP (RID_STATIC, specbits))
8599 /* C++ also allows inlines and signed and unsigned elements,
8600 but in those cases we don't come in here. */
8601 ;
8602 else
8603 {
8604 if (decl_context == FIELD)
8605 {
8606 tree tmp = NULL_TREE;
8607 register int op = 0;
8608
8609 if (declarator)
8610 {
8611 /* Avoid trying to get an operand off an identifier node. */
8612 if (TREE_CODE (declarator) == IDENTIFIER_NODE)
8613 tmp = declarator;
8614 else
8615 tmp = TREE_OPERAND (declarator, 0);
8616 op = IDENTIFIER_OPNAME_P (tmp);
8617 }
8618 error ("storage class specified for %s `%s'",
8619 IS_SIGNATURE (current_class_type)
8620 ? (op
8621 ? "signature member operator"
8622 : "signature member function")
8623 : (op ? "member operator" : "field"),
8624 op ? operator_name_string (tmp) : name);
8625 }
8626 else
8627 error (((decl_context == PARM || decl_context == CATCHPARM)
8628 ? "storage class specified for parameter `%s'"
8629 : "storage class specified for typename"), name);
8630 RIDBIT_RESET (RID_REGISTER, specbits);
8631 RIDBIT_RESET (RID_AUTO, specbits);
8632 RIDBIT_RESET (RID_EXTERN, specbits);
8633
8634 if (decl_context == FIELD && IS_SIGNATURE (current_class_type))
8635 {
8636 RIDBIT_RESET (RID_STATIC, specbits);
8637 staticp = 0;
8638 }
8639 }
8640 }
8641 else if (RIDBIT_SETP (RID_EXTERN, specbits) && initialized && !funcdef_flag)
8642 {
8643 if (toplevel_bindings_p ())
8644 {
8645 /* It's common practice (and completely valid) to have a const
8646 be initialized and declared extern. */
8647 if (! constp)
8648 warning ("`%s' initialized and declared `extern'", name);
8649 }
8650 else
8651 error ("`%s' has both `extern' and initializer", name);
8652 }
8653 else if (RIDBIT_SETP (RID_EXTERN, specbits) && funcdef_flag
8654 && ! toplevel_bindings_p ())
8655 error ("nested function `%s' declared `extern'", name);
8656 else if (toplevel_bindings_p ())
8657 {
8658 if (RIDBIT_SETP (RID_AUTO, specbits))
8659 error ("top-level declaration of `%s' specifies `auto'", name);
8660 }
8661
8662 if (nclasses > 0 && friendp)
8663 error ("storage class specifiers invalid in friend function declarations");
8664
8665 /* Now figure out the structure of the declarator proper.
8666 Descend through it, creating more complex types, until we reach
8667 the declared identifier (or NULL_TREE, in an absolute declarator). */
8668
8669 while (declarator && TREE_CODE (declarator) != IDENTIFIER_NODE
8670 && TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
8671 {
8672 /* Each level of DECLARATOR is either an ARRAY_REF (for ...[..]),
8673 an INDIRECT_REF (for *...),
8674 a CALL_EXPR (for ...(...)),
8675 an identifier (for the name being declared)
8676 or a null pointer (for the place in an absolute declarator
8677 where the name was omitted).
8678 For the last two cases, we have just exited the loop.
8679
8680 For C++ it could also be
8681 a SCOPE_REF (for class :: ...). In this case, we have converted
8682 sensible names to types, and those are the values we use to
8683 qualify the member name.
8684 an ADDR_EXPR (for &...),
8685 a BIT_NOT_EXPR (for destructors)
8686
8687 At this point, TYPE is the type of elements of an array,
8688 or for a function to return, or for a pointer to point to.
8689 After this sequence of ifs, TYPE is the type of the
8690 array or function or pointer, and DECLARATOR has had its
8691 outermost layer removed. */
8692
8693 if (type == error_mark_node)
8694 {
8695 if (TREE_CODE (declarator) == SCOPE_REF)
8696 declarator = TREE_OPERAND (declarator, 1);
8697 else
8698 declarator = TREE_OPERAND (declarator, 0);
8699 continue;
8700 }
8701 if (quals != NULL_TREE
8702 && (declarator == NULL_TREE
8703 || TREE_CODE (declarator) != SCOPE_REF))
8704 {
8705 if (ctype == NULL_TREE && TREE_CODE (type) == METHOD_TYPE)
8706 ctype = TYPE_METHOD_BASETYPE (type);
8707 if (ctype != NULL_TREE)
8708 {
8709 tree dummy = build_decl (TYPE_DECL, NULL_TREE, type);
8710 ctype = grok_method_quals (ctype, dummy, quals);
8711 type = TREE_TYPE (dummy);
8712 quals = NULL_TREE;
8713 }
8714 }
8715 switch (TREE_CODE (declarator))
8716 {
8717 case ARRAY_REF:
8718 {
8719 register tree itype = NULL_TREE;
8720 register tree size = TREE_OPERAND (declarator, 1);
8721 /* The index is a signed object `sizetype' bits wide. */
8722 tree index_type = signed_type (sizetype);
8723
8724 declarator = TREE_OPERAND (declarator, 0);
8725
8726 /* Check for some types that there cannot be arrays of. */
8727
8728 if (TYPE_MAIN_VARIANT (type) == void_type_node)
8729 {
8730 cp_error ("declaration of `%D' as array of voids", dname);
8731 type = error_mark_node;
8732 }
8733
8734 if (TREE_CODE (type) == FUNCTION_TYPE)
8735 {
8736 cp_error ("declaration of `%D' as array of functions", dname);
8737 type = error_mark_node;
8738 }
8739
8740 /* ARM $8.4.3: Since you can't have a pointer to a reference,
8741 you can't have arrays of references. If we allowed them,
8742 then we'd be saying x[i] is valid for an array x, but
8743 then you'd have to ask: what does `*(x + i)' mean? */
8744 if (TREE_CODE (type) == REFERENCE_TYPE)
8745 {
8746 if (decl_context == TYPENAME)
8747 cp_error ("cannot make arrays of references");
8748 else
8749 cp_error ("declaration of `%D' as array of references",
8750 dname);
8751 type = error_mark_node;
8752 }
8753
8754 if (TREE_CODE (type) == OFFSET_TYPE)
8755 {
8756 cp_error ("declaration of `%D' as array of data members",
8757 dname);
8758 type = error_mark_node;
8759 }
8760
8761 if (TREE_CODE (type) == METHOD_TYPE)
8762 {
8763 cp_error ("declaration of `%D' as array of function members",
8764 dname);
8765 type = error_mark_node;
8766 }
8767
8768 if (size == error_mark_node)
8769 type = error_mark_node;
8770
8771 if (type == error_mark_node)
8772 continue;
8773
8774 if (size)
8775 {
8776 /* Must suspend_momentary here because the index
8777 type may need to live until the end of the function.
8778 For example, it is used in the declaration of a
8779 variable which requires destructing at the end of
8780 the function; then build_vec_delete will need this
8781 value. */
8782 int yes = suspend_momentary ();
8783 /* might be a cast */
8784 if (TREE_CODE (size) == NOP_EXPR
8785 && TREE_TYPE (size) == TREE_TYPE (TREE_OPERAND (size, 0)))
8786 size = TREE_OPERAND (size, 0);
8787
8788 /* If this involves a template parameter, it'll be
8789 constant, but we don't know what the value is yet. */
8790 if (processing_template_decl)
8791 {
8792 itype = make_node (INTEGER_TYPE);
8793 TYPE_MIN_VALUE (itype) = size_zero_node;
8794 TYPE_MAX_VALUE (itype) = build_min
8795 (MINUS_EXPR, sizetype, size, integer_one_node);
8796 goto dont_grok_size;
8797 }
8798
8799 if (TREE_CODE (TREE_TYPE (size)) != INTEGER_TYPE
8800 && TREE_CODE (TREE_TYPE (size)) != ENUMERAL_TYPE)
8801 {
8802 cp_error ("size of array `%D' has non-integer type",
8803 dname);
8804 size = integer_one_node;
8805 }
8806 if (TREE_READONLY_DECL_P (size))
8807 size = decl_constant_value (size);
8808 if (pedantic && integer_zerop (size))
8809 cp_pedwarn ("ANSI C++ forbids zero-size array `%D'", dname);
8810 if (TREE_CONSTANT (size))
8811 {
8812 int old_flag_pedantic_errors = flag_pedantic_errors;
8813 int old_pedantic = pedantic;
8814 pedantic = flag_pedantic_errors = 1;
8815 /* Always give overflow errors on array subscripts. */
8816 constant_expression_warning (size);
8817 pedantic = old_pedantic;
8818 flag_pedantic_errors = old_flag_pedantic_errors;
8819 if (INT_CST_LT (size, integer_zero_node))
8820 {
8821 cp_error ("size of array `%D' is negative", dname);
8822 size = integer_one_node;
8823 }
8824 }
8825 else
8826 {
8827 if (pedantic)
8828 {
8829 if (dname)
8830 cp_pedwarn ("ANSI C++ forbids variable-size array `%D'",
8831 dname);
8832 else
8833 cp_pedwarn ("ANSI C++ forbids variable-size array");
8834 }
8835 }
8836
8837 itype
8838 = fold (build_binary_op (MINUS_EXPR,
8839 cp_convert (index_type, size),
8840 cp_convert (index_type,
8841 integer_one_node), 1));
8842 if (! TREE_CONSTANT (itype))
8843 itype = variable_size (itype);
8844 else if (TREE_OVERFLOW (itype))
8845 {
8846 error ("overflow in array dimension");
8847 TREE_OVERFLOW (itype) = 0;
8848 }
8849
8850 /* If we're a parm, we need to have a permanent type so
8851 mangling checks for re-use will work right. If both the
8852 element and index types are permanent, the array type
8853 will be, too. */
8854 if (decl_context == PARM
8855 && allocation_temporary_p () && TREE_PERMANENT (type))
8856 {
8857 push_obstacks (&permanent_obstack, &permanent_obstack);
8858 itype = build_index_type (itype);
8859 pop_obstacks ();
8860 }
8861 else
8862 itype = build_index_type (itype);
8863
8864 dont_grok_size:
8865 resume_momentary (yes);
8866 }
8867
8868 /* Build the array type itself, then merge any constancy or
8869 volatility into the target type. We must do it in this order
8870 to ensure that the TYPE_MAIN_VARIANT field of the array type
8871 is set correctly. */
8872
8873 type = build_cplus_array_type (type, itype);
8874 if (constp || volatilep)
8875 type = cp_build_type_variant (type, constp, volatilep);
8876
8877 ctype = NULL_TREE;
8878 }
8879 break;
8880
8881 case CALL_EXPR:
8882 {
8883 tree arg_types;
8884 int funcdecl_p;
8885 tree inner_parms = TREE_OPERAND (declarator, 1);
8886 tree inner_decl = TREE_OPERAND (declarator, 0);
8887
8888 /* Declaring a function type.
8889 Make sure we have a valid type for the function to return. */
8890 #if 0
8891 /* Is this an error? Should they be merged into TYPE here? */
8892 if (pedantic && (constp || volatilep))
8893 pedwarn ("function declared to return const or volatile result");
8894 #else
8895 /* Merge any constancy or volatility into the function return
8896 type. */
8897
8898 if (constp || volatilep)
8899 {
8900 type = cp_build_type_variant (type, constp, volatilep);
8901 if (IS_AGGR_TYPE (type))
8902 build_pointer_type (type);
8903 constp = 0;
8904 volatilep = 0;
8905 }
8906 #endif
8907
8908 /* Warn about some types functions can't return. */
8909
8910 if (TREE_CODE (type) == FUNCTION_TYPE)
8911 {
8912 error ("`%s' declared as function returning a function", name);
8913 type = integer_type_node;
8914 }
8915 if (TREE_CODE (type) == ARRAY_TYPE)
8916 {
8917 error ("`%s' declared as function returning an array", name);
8918 type = integer_type_node;
8919 }
8920
8921 if (inner_decl && TREE_CODE (inner_decl) == SCOPE_REF)
8922 inner_decl = TREE_OPERAND (inner_decl, 1);
8923
8924 if (inner_decl && TREE_CODE (inner_decl) == TEMPLATE_ID_EXPR)
8925 inner_decl = dname;
8926
8927 /* Pick up type qualifiers which should be applied to `this'. */
8928 quals = TREE_OPERAND (declarator, 2);
8929
8930 /* Pick up the exception specifications. */
8931 raises = TREE_TYPE (declarator);
8932
8933 /* Say it's a definition only for the CALL_EXPR
8934 closest to the identifier. */
8935 funcdecl_p
8936 = inner_decl
8937 && (TREE_CODE (inner_decl) == IDENTIFIER_NODE
8938 || TREE_CODE (inner_decl) == TEMPLATE_ID_EXPR
8939 || TREE_CODE (inner_decl) == BIT_NOT_EXPR);
8940
8941 if (ctype == NULL_TREE
8942 && decl_context == FIELD
8943 && funcdecl_p
8944 && (friendp == 0 || dname == current_class_name))
8945 ctype = current_class_type;
8946
8947 if (ctype && return_type == return_conversion)
8948 TYPE_HAS_CONVERSION (ctype) = 1;
8949 if (ctype && constructor_name (ctype) == dname)
8950 {
8951 /* We are within a class's scope. If our declarator name
8952 is the same as the class name, and we are defining
8953 a function, then it is a constructor/destructor, and
8954 therefore returns a void type. */
8955
8956 if (flags == DTOR_FLAG)
8957 {
8958 /* ANSI C++ June 5 1992 WP 12.4.1. A destructor may
8959 not be declared const or volatile. A destructor
8960 may not be static. */
8961 if (staticp == 2)
8962 error ("destructor cannot be static member function");
8963 if (quals)
8964 {
8965 error ("destructors cannot be declared `const' or `volatile'");
8966 return void_type_node;
8967 }
8968 if (decl_context == FIELD)
8969 {
8970 if (! member_function_or_else (ctype, current_class_type,
8971 "destructor for alien class `%s' cannot be a member"))
8972 return void_type_node;
8973 }
8974 }
8975 else /* it's a constructor. */
8976 {
8977 if (explicitp == 1)
8978 explicitp = 2;
8979 /* ANSI C++ June 5 1992 WP 12.1.2. A constructor may
8980 not be declared const or volatile. A constructor may
8981 not be virtual. A constructor may not be static. */
8982 if (staticp == 2)
8983 error ("constructor cannot be static member function");
8984 if (virtualp)
8985 {
8986 pedwarn ("constructors cannot be declared virtual");
8987 virtualp = 0;
8988 }
8989 if (quals)
8990 {
8991 error ("constructors cannot be declared `const' or `volatile'");
8992 return void_type_node;
8993 }
8994 {
8995 RID_BIT_TYPE tmp_bits;
8996 bcopy ((void*)&specbits, (void*)&tmp_bits, sizeof (RID_BIT_TYPE));
8997 RIDBIT_RESET (RID_INLINE, tmp_bits);
8998 RIDBIT_RESET (RID_STATIC, tmp_bits);
8999 if (RIDBIT_ANY_SET (tmp_bits))
9000 error ("return value type specifier for constructor ignored");
9001 }
9002 type = build_pointer_type (ctype);
9003 if (decl_context == FIELD
9004 && IS_SIGNATURE (current_class_type))
9005 {
9006 error ("constructor not allowed in signature");
9007 return void_type_node;
9008 }
9009 else if (decl_context == FIELD)
9010 {
9011 if (! member_function_or_else (ctype, current_class_type,
9012 "constructor for alien class `%s' cannot be member"))
9013 return void_type_node;
9014 TYPE_HAS_CONSTRUCTOR (ctype) = 1;
9015 if (return_type != return_ctor)
9016 return NULL_TREE;
9017 }
9018 }
9019 if (decl_context == FIELD)
9020 staticp = 0;
9021 }
9022 else if (friendp)
9023 {
9024 if (initialized)
9025 error ("can't initialize friend function `%s'", name);
9026 if (virtualp)
9027 {
9028 /* Cannot be both friend and virtual. */
9029 error ("virtual functions cannot be friends");
9030 RIDBIT_RESET (RID_FRIEND, specbits);
9031 friendp = 0;
9032 }
9033 if (decl_context == NORMAL)
9034 error ("friend declaration not in class definition");
9035 if (current_function_decl && funcdef_flag)
9036 cp_error ("can't define friend function `%s' in a local class definition",
9037 name);
9038 }
9039
9040 /* Construct the function type and go to the next
9041 inner layer of declarator. */
9042
9043 declarator = TREE_OPERAND (declarator, 0);
9044
9045 /* FIXME: This is where default args should be fully
9046 processed. */
9047
9048 arg_types = grokparms (inner_parms, funcdecl_p ? funcdef_flag : 0);
9049
9050 if (declarator)
9051 {
9052 /* Get past destructors, etc.
9053 We know we have one because FLAGS will be non-zero.
9054
9055 Complain about improper parameter lists here. */
9056 if (TREE_CODE (declarator) == BIT_NOT_EXPR)
9057 {
9058 declarator = TREE_OPERAND (declarator, 0);
9059
9060 if (strict_prototype == 0 && arg_types == NULL_TREE)
9061 arg_types = void_list_node;
9062 else if (arg_types == NULL_TREE
9063 || arg_types != void_list_node)
9064 {
9065 error ("destructors cannot be specified with parameters");
9066 arg_types = void_list_node;
9067 }
9068 }
9069 }
9070
9071 /* ANSI says that `const int foo ();'
9072 does not make the function foo const. */
9073 type = build_function_type (type, arg_types);
9074
9075 {
9076 tree t;
9077 for (t = arg_types; t; t = TREE_CHAIN (t))
9078 if (TREE_PURPOSE (t)
9079 && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
9080 {
9081 add_defarg_fn (type);
9082 break;
9083 }
9084 }
9085 }
9086 break;
9087
9088 case ADDR_EXPR:
9089 case INDIRECT_REF:
9090 /* Filter out pointers-to-references and references-to-references.
9091 We can get these if a TYPE_DECL is used. */
9092
9093 if (TREE_CODE (type) == REFERENCE_TYPE)
9094 {
9095 error ("cannot declare %s to references",
9096 TREE_CODE (declarator) == ADDR_EXPR
9097 ? "references" : "pointers");
9098 declarator = TREE_OPERAND (declarator, 0);
9099 continue;
9100 }
9101
9102 if (TREE_CODE (type) == OFFSET_TYPE
9103 && (TREE_CODE (TREE_TYPE (type)) == VOID_TYPE
9104 || TREE_CODE (TREE_TYPE (type)) == REFERENCE_TYPE))
9105 {
9106 cp_error ("cannot declare pointer to `%#T' member",
9107 TREE_TYPE (type));
9108 type = TREE_TYPE (type);
9109 }
9110
9111 /* Merge any constancy or volatility into the target type
9112 for the pointer. */
9113
9114 if (constp || volatilep)
9115 {
9116 /* A const or volatile signature pointer/reference is
9117 pointing to a const or volatile object, i.e., the
9118 `optr' is const or volatile, respectively, not the
9119 signature pointer/reference itself. */
9120 if (! IS_SIGNATURE (type))
9121 {
9122 type = cp_build_type_variant (type, constp, volatilep);
9123 if (IS_AGGR_TYPE (type))
9124 build_pointer_type (type);
9125 constp = 0;
9126 volatilep = 0;
9127 }
9128 }
9129
9130 if (IS_SIGNATURE (type))
9131 {
9132 if (TREE_CODE (declarator) == ADDR_EXPR)
9133 {
9134 if (CLASSTYPE_METHOD_VEC (type) == NULL_TREE
9135 && TYPE_SIZE (type))
9136 cp_warning ("empty signature `%T' used in signature reference declaration",
9137 type);
9138 #if 0
9139 type = build_signature_reference_type (type,
9140 constp, volatilep);
9141 #else
9142 sorry ("signature reference");
9143 return NULL_TREE;
9144 #endif
9145 }
9146 else
9147 {
9148 if (CLASSTYPE_METHOD_VEC (type) == NULL_TREE
9149 && TYPE_SIZE (type))
9150 cp_warning ("empty signature `%T' used in signature pointer declaration",
9151 type);
9152 type = build_signature_pointer_type (type,
9153 constp, volatilep);
9154 }
9155 constp = 0;
9156 volatilep = 0;
9157 }
9158 else if (TREE_CODE (declarator) == ADDR_EXPR)
9159 {
9160 if (TREE_CODE (type) == FUNCTION_TYPE)
9161 {
9162 error ("cannot declare references to functions; use pointer to function instead");
9163 type = build_pointer_type (type);
9164 }
9165 else
9166 {
9167 if (TYPE_MAIN_VARIANT (type) == void_type_node)
9168 error ("invalid type: `void &'");
9169 else
9170 type = build_reference_type (type);
9171 }
9172 }
9173 else if (TREE_CODE (type) == METHOD_TYPE)
9174 {
9175 type = build_ptrmemfunc_type (build_pointer_type (type));
9176 }
9177 else
9178 type = build_pointer_type (type);
9179
9180 /* Process a list of type modifier keywords (such as
9181 const or volatile) that were given inside the `*' or `&'. */
9182
9183 if (TREE_TYPE (declarator))
9184 {
9185 register tree typemodlist;
9186 int erred = 0;
9187 for (typemodlist = TREE_TYPE (declarator); typemodlist;
9188 typemodlist = TREE_CHAIN (typemodlist))
9189 {
9190 if (TREE_VALUE (typemodlist) == ridpointers[(int) RID_CONST])
9191 constp++;
9192 else if (TREE_VALUE (typemodlist) == ridpointers[(int) RID_VOLATILE])
9193 volatilep++;
9194 else if (!erred)
9195 {
9196 erred = 1;
9197 error ("invalid type modifier within %s declarator",
9198 TREE_CODE (declarator) == ADDR_EXPR
9199 ? "reference" : "pointer");
9200 }
9201 }
9202 if (constp > 1)
9203 pedwarn ("duplicate `const'");
9204 if (volatilep > 1)
9205 pedwarn ("duplicate `volatile'");
9206 if (TREE_CODE (declarator) == ADDR_EXPR
9207 && (constp || volatilep))
9208 {
9209 if (constp)
9210 pedwarn ("discarding `const' applied to a reference");
9211 if (volatilep)
9212 pedwarn ("discarding `volatile' applied to a reference");
9213 constp = volatilep = 0;
9214 }
9215 }
9216 declarator = TREE_OPERAND (declarator, 0);
9217 ctype = NULL_TREE;
9218 break;
9219
9220 case SCOPE_REF:
9221 {
9222 /* We have converted type names to NULL_TREE if the
9223 name was bogus, or to a _TYPE node, if not.
9224
9225 The variable CTYPE holds the type we will ultimately
9226 resolve to. The code here just needs to build
9227 up appropriate member types. */
9228 tree sname = TREE_OPERAND (declarator, 1);
9229 tree t;
9230
9231 /* Destructors can have their visibilities changed as well. */
9232 if (TREE_CODE (sname) == BIT_NOT_EXPR)
9233 sname = TREE_OPERAND (sname, 0);
9234
9235 if (TREE_COMPLEXITY (declarator) == 0)
9236 /* This needs to be here, in case we are called
9237 multiple times. */ ;
9238 else if (friendp && (TREE_COMPLEXITY (declarator) < 2))
9239 /* don't fall out into global scope. Hides real bug? --eichin */ ;
9240 else if (! IS_AGGR_TYPE_CODE
9241 (TREE_CODE (TREE_OPERAND (declarator, 0))))
9242 ;
9243 else if (TREE_COMPLEXITY (declarator) == current_class_depth)
9244 {
9245 /* Resolve any TYPENAME_TYPEs from the decl-specifier-seq
9246 that refer to ctype. They couldn't be resolved earlier
9247 because we hadn't pushed into the class yet.
9248 Example: resolve 'B<T>::type' in
9249 'B<typename B<T>::type> B<T>::f () { }'. */
9250 if (current_template_parms
9251 && uses_template_parms (type)
9252 && uses_template_parms (current_class_type))
9253 {
9254 tree args = current_template_args ();
9255 type = tsubst (type, args,
9256 TREE_VEC_LENGTH (TREE_VEC_ELT
9257 (args, 0)),
9258 NULL_TREE);
9259 }
9260
9261 /* This pop_nested_class corresponds to the
9262 push_nested_class used to push into class scope for
9263 parsing the argument list of a function decl, in
9264 qualified_id. */
9265 pop_nested_class (1);
9266 TREE_COMPLEXITY (declarator) = current_class_depth;
9267 }
9268 else
9269 my_friendly_abort (16);
9270
9271 if (TREE_OPERAND (declarator, 0) == NULL_TREE)
9272 {
9273 /* We had a reference to a global decl, or
9274 perhaps we were given a non-aggregate typedef,
9275 in which case we cleared this out, and should just
9276 keep going as though it wasn't there. */
9277 declarator = sname;
9278 continue;
9279 }
9280 ctype = TREE_OPERAND (declarator, 0);
9281
9282 t = ctype;
9283 while (t != NULL_TREE)
9284 {
9285 if (CLASSTYPE_TEMPLATE_INFO (t) &&
9286 !CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
9287 template_count += 1;
9288 t = TYPE_MAIN_DECL (t);
9289 if (DECL_LANG_SPECIFIC (t))
9290 t = DECL_CLASS_CONTEXT (t);
9291 else
9292 t = NULL_TREE;
9293 }
9294
9295 if (sname == NULL_TREE)
9296 goto done_scoping;
9297
9298 if (TREE_CODE (sname) == IDENTIFIER_NODE)
9299 {
9300 /* This is the `standard' use of the scoping operator:
9301 basetype :: member . */
9302
9303 if (ctype == current_class_type)
9304 {
9305 /* class A {
9306 void A::f ();
9307 };
9308
9309 Is this ill-formed? */
9310
9311 if (pedantic)
9312 cp_pedwarn ("extra qualification `%T::' on member `%s' ignored",
9313 ctype, name);
9314 }
9315 else if (TREE_CODE (type) == FUNCTION_TYPE)
9316 {
9317 if (current_class_type == NULL_TREE
9318 || friendp)
9319 type = build_cplus_method_type (build_type_variant (ctype, constp, volatilep),
9320 TREE_TYPE (type), TYPE_ARG_TYPES (type));
9321 else
9322 {
9323 cp_error ("cannot declare member function `%T::%s' within `%T'",
9324 ctype, name, current_class_type);
9325 return void_type_node;
9326 }
9327 }
9328 else if (RIDBIT_SETP (RID_TYPEDEF, specbits)
9329 || TYPE_SIZE (complete_type (ctype)) != NULL_TREE)
9330 {
9331 /* have to move this code elsewhere in this function.
9332 this code is used for i.e., typedef int A::M; M *pm;
9333
9334 It is? How? jason 10/2/94 */
9335
9336 if (current_class_type)
9337 {
9338 cp_error ("cannot declare member `%T::%s' within `%T'",
9339 ctype, name, current_class_type);
9340 return void_type_node;
9341 }
9342 type = build_offset_type (ctype, type);
9343 }
9344 else if (uses_template_parms (ctype))
9345 {
9346 if (TREE_CODE (type) == FUNCTION_TYPE)
9347 type
9348 = build_cplus_method_type (build_type_variant (ctype,
9349 constp,
9350 volatilep),
9351 TREE_TYPE (type),
9352 TYPE_ARG_TYPES (type));
9353 }
9354 else
9355 {
9356 cp_error ("structure `%T' not yet defined", ctype);
9357 return error_mark_node;
9358 }
9359
9360 declarator = sname;
9361 }
9362 else if (TREE_CODE (sname) == SCOPE_REF)
9363 my_friendly_abort (17);
9364 else
9365 {
9366 done_scoping:
9367 declarator = TREE_OPERAND (declarator, 1);
9368 if (declarator && TREE_CODE (declarator) == CALL_EXPR)
9369 /* In this case, we will deal with it later. */
9370 ;
9371 else
9372 {
9373 if (TREE_CODE (type) == FUNCTION_TYPE)
9374 type = build_cplus_method_type (build_type_variant (ctype, constp, volatilep), TREE_TYPE (type), TYPE_ARG_TYPES (type));
9375 else
9376 type = build_offset_type (ctype, type);
9377 }
9378 }
9379 }
9380 break;
9381
9382 case BIT_NOT_EXPR:
9383 declarator = TREE_OPERAND (declarator, 0);
9384 break;
9385
9386 case RECORD_TYPE:
9387 case UNION_TYPE:
9388 case ENUMERAL_TYPE:
9389 declarator = NULL_TREE;
9390 break;
9391
9392 case ERROR_MARK:
9393 declarator = NULL_TREE;
9394 break;
9395
9396 default:
9397 my_friendly_abort (158);
9398 }
9399 }
9400
9401 if (explicitp == 1)
9402 {
9403 error ("only constructors can be declared `explicit'");
9404 explicitp = 0;
9405 }
9406
9407 /* Now TYPE has the actual type. */
9408
9409 /* If this is declaring a typedef name, return a TYPE_DECL. */
9410
9411 if (RIDBIT_SETP (RID_MUTABLE, specbits))
9412 {
9413 if (constp)
9414 {
9415 error ("const `%s' cannot be declared `mutable'", name);
9416 RIDBIT_RESET (RID_MUTABLE, specbits);
9417 }
9418 else if (staticp)
9419 {
9420 error ("static `%s' cannot be declared `mutable'", name);
9421 RIDBIT_RESET (RID_MUTABLE, specbits);
9422 }
9423 }
9424
9425 if (RIDBIT_SETP (RID_TYPEDEF, specbits) && decl_context != TYPENAME)
9426 {
9427 tree decl;
9428
9429 /* Note that the grammar rejects storage classes
9430 in typenames, fields or parameters. */
9431 if (constp || volatilep)
9432 type = cp_build_type_variant (type, constp, volatilep);
9433
9434 if (decl_context == FIELD)
9435 {
9436 if (declarator == current_class_name)
9437 cp_pedwarn ("ANSI C++ forbids nested type `%D' with same name as enclosing class",
9438 declarator);
9439 decl = build_lang_decl (TYPE_DECL, declarator, type);
9440 if (IS_SIGNATURE (current_class_type) && opaque_typedef)
9441 SIGNATURE_HAS_OPAQUE_TYPEDECLS (current_class_type) = 1;
9442 }
9443 else
9444 decl = build_decl (TYPE_DECL, declarator, type);
9445
9446 /* If the user declares "struct {...} foo" then `foo' will have
9447 an anonymous name. Fill that name in now. Nothing can
9448 refer to it, so nothing needs know about the name change.
9449 The TYPE_NAME field was filled in by build_struct_xref. */
9450 if (type != error_mark_node
9451 && TYPE_NAME (type)
9452 && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
9453 && ANON_AGGRNAME_P (TYPE_IDENTIFIER (type)))
9454 {
9455 /* replace the anonymous name with the real name everywhere. */
9456 lookup_tag_reverse (type, declarator);
9457 TYPE_NAME (type) = decl;
9458
9459 if (TYPE_LANG_SPECIFIC (type))
9460 TYPE_WAS_ANONYMOUS (type) = 1;
9461
9462 DECL_ASSEMBLER_NAME (decl) = DECL_NAME (decl);
9463 DECL_ASSEMBLER_NAME (decl)
9464 = get_identifier (build_overload_name (type, 1, 1));
9465 }
9466
9467 if (TREE_CODE (type) == OFFSET_TYPE || TREE_CODE (type) == METHOD_TYPE)
9468 {
9469 cp_error_at ("typedef name may not be class-qualified", decl);
9470 return NULL_TREE;
9471 }
9472 else if (quals)
9473 {
9474 if (ctype == NULL_TREE)
9475 {
9476 if (TREE_CODE (type) != METHOD_TYPE)
9477 cp_error_at ("invalid type qualifier for non-method type", decl);
9478 else
9479 ctype = TYPE_METHOD_BASETYPE (type);
9480 }
9481 if (ctype != NULL_TREE)
9482 grok_method_quals (ctype, decl, quals);
9483 }
9484
9485 if (RIDBIT_SETP (RID_SIGNED, specbits)
9486 || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
9487 C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
9488
9489 if (RIDBIT_SETP (RID_MUTABLE, specbits))
9490 {
9491 error ("non-object member `%s' cannot be declared mutable", name);
9492 }
9493
9494 bad_specifiers (decl, "type", virtualp, quals != NULL_TREE,
9495 inlinep, friendp, raises != NULL_TREE);
9496
9497 if (initialized)
9498 error ("typedef declaration includes an initializer");
9499
9500 return decl;
9501 }
9502
9503 /* Detect the case of an array type of unspecified size
9504 which came, as such, direct from a typedef name.
9505 We must copy the type, so that each identifier gets
9506 a distinct type, so that each identifier's size can be
9507 controlled separately by its own initializer. */
9508
9509 if (type == typedef_type && TREE_CODE (type) == ARRAY_TYPE
9510 && TYPE_DOMAIN (type) == NULL_TREE)
9511 {
9512 type = build_cplus_array_type (TREE_TYPE (type), TYPE_DOMAIN (type));
9513 }
9514
9515 /* If this is a type name (such as, in a cast or sizeof),
9516 compute the type and return it now. */
9517
9518 if (decl_context == TYPENAME)
9519 {
9520 /* Note that the grammar rejects storage classes
9521 in typenames, fields or parameters. */
9522 if (constp || volatilep)
9523 {
9524 if (IS_SIGNATURE (type))
9525 error ("`const' or `volatile' specified with signature type");
9526 else
9527 type = cp_build_type_variant (type, constp, volatilep);
9528 }
9529
9530 /* Special case: "friend class foo" looks like a TYPENAME context. */
9531 if (friendp)
9532 {
9533 if (volatilep)
9534 {
9535 cp_error ("`volatile' specified for friend class declaration");
9536 volatilep = 0;
9537 }
9538 if (inlinep)
9539 {
9540 cp_error ("`inline' specified for friend class declaration");
9541 inlinep = 0;
9542 }
9543
9544 /* Only try to do this stuff if we didn't already give up. */
9545 if (type != integer_type_node)
9546 {
9547 /* A friendly class? */
9548 if (current_class_type)
9549 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type));
9550 else
9551 error ("trying to make class `%s' a friend of global scope",
9552 TYPE_NAME_STRING (type));
9553 type = void_type_node;
9554 }
9555 }
9556 else if (quals)
9557 {
9558 tree dummy = build_decl (TYPE_DECL, declarator, type);
9559 if (ctype == NULL_TREE)
9560 {
9561 my_friendly_assert (TREE_CODE (type) == METHOD_TYPE, 159);
9562 ctype = TYPE_METHOD_BASETYPE (type);
9563 }
9564 grok_method_quals (ctype, dummy, quals);
9565 type = TREE_TYPE (dummy);
9566 }
9567
9568 return type;
9569 }
9570 else if (declarator == NULL_TREE && decl_context != PARM
9571 && decl_context != CATCHPARM
9572 && TREE_CODE (type) != UNION_TYPE
9573 && ! bitfield)
9574 {
9575 cp_error ("abstract declarator `%T' used as declaration", type);
9576 declarator = make_anon_name ();
9577 }
9578
9579 /* `void' at top level (not within pointer)
9580 is allowed only in typedefs or type names.
9581 We don't complain about parms either, but that is because
9582 a better error message can be made later. */
9583
9584 if (TYPE_MAIN_VARIANT (type) == void_type_node && decl_context != PARM)
9585 {
9586 if (! declarator)
9587 error ("unnamed variable or field declared void");
9588 else if (TREE_CODE (declarator) == IDENTIFIER_NODE)
9589 {
9590 if (IDENTIFIER_OPNAME_P (declarator))
9591 my_friendly_abort (356);
9592 else
9593 error ("variable or field `%s' declared void", name);
9594 }
9595 else
9596 error ("variable or field declared void");
9597 type = integer_type_node;
9598 }
9599
9600 /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
9601 or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE. */
9602
9603 {
9604 register tree decl;
9605
9606 if (decl_context == PARM)
9607 {
9608 if (ctype)
9609 error ("cannot use `::' in parameter declaration");
9610
9611 /* A parameter declared as an array of T is really a pointer to T.
9612 One declared as a function is really a pointer to a function.
9613 One declared as a member is really a pointer to member. */
9614
9615 if (TREE_CODE (type) == ARRAY_TYPE)
9616 {
9617 /* Transfer const-ness of array into that of type pointed to. */
9618 type = build_pointer_type
9619 (cp_build_type_variant (TREE_TYPE (type), constp, volatilep));
9620 volatilep = constp = 0;
9621 }
9622 else if (TREE_CODE (type) == FUNCTION_TYPE)
9623 type = build_pointer_type (type);
9624 else if (TREE_CODE (type) == OFFSET_TYPE)
9625 type = build_pointer_type (type);
9626 else if (type == void_type_node && declarator)
9627 {
9628 error ("declaration of `%s' as void", name);
9629 return NULL_TREE;
9630 }
9631
9632 decl = build_decl (PARM_DECL, declarator, complete_type (type));
9633
9634 bad_specifiers (decl, "parameter", virtualp, quals != NULL_TREE,
9635 inlinep, friendp, raises != NULL_TREE);
9636 if (current_class_type
9637 && IS_SIGNATURE (current_class_type))
9638 {
9639 if (inlinep)
9640 error ("parameter of signature member function declared `inline'");
9641 if (RIDBIT_SETP (RID_AUTO, specbits))
9642 error ("parameter of signature member function declared `auto'");
9643 if (RIDBIT_SETP (RID_REGISTER, specbits))
9644 error ("parameter of signature member function declared `register'");
9645 }
9646
9647 /* Compute the type actually passed in the parmlist,
9648 for the case where there is no prototype.
9649 (For example, shorts and chars are passed as ints.)
9650 When there is a prototype, this is overridden later. */
9651
9652 DECL_ARG_TYPE (decl) = type_promotes_to (type);
9653 }
9654 else if (decl_context == FIELD)
9655 {
9656 if (type == error_mark_node)
9657 {
9658 /* Happens when declaring arrays of sizes which
9659 are error_mark_node, for example. */
9660 decl = NULL_TREE;
9661 }
9662 else if (TREE_CODE (type) == FUNCTION_TYPE)
9663 {
9664 int publicp = 0;
9665 tree function_context;
9666
9667 /* We catch the others as conflicts with the builtin
9668 typedefs. */
9669 if (friendp && declarator == ridpointers[(int) RID_SIGNED])
9670 {
9671 cp_error ("function `%D' cannot be declared friend",
9672 declarator);
9673 friendp = 0;
9674 }
9675
9676 if (friendp == 0)
9677 {
9678 if (ctype == NULL_TREE)
9679 ctype = current_class_type;
9680
9681 if (ctype == NULL_TREE)
9682 {
9683 cp_error ("can't make `%D' into a method -- not in a class",
9684 declarator);
9685 return void_type_node;
9686 }
9687
9688 /* ``A union may [ ... ] not [ have ] virtual functions.''
9689 ARM 9.5 */
9690 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
9691 {
9692 cp_error ("function `%D' declared virtual inside a union",
9693 declarator);
9694 return void_type_node;
9695 }
9696
9697 if (declarator == ansi_opname[(int) NEW_EXPR]
9698 || declarator == ansi_opname[(int) VEC_NEW_EXPR]
9699 || declarator == ansi_opname[(int) DELETE_EXPR]
9700 || declarator == ansi_opname[(int) VEC_DELETE_EXPR])
9701 {
9702 if (virtualp)
9703 {
9704 cp_error ("`%D' cannot be declared virtual, since it is always static",
9705 declarator);
9706 virtualp = 0;
9707 }
9708 }
9709 else if (staticp < 2)
9710 type = build_cplus_method_type (build_type_variant (ctype, constp, volatilep),
9711 TREE_TYPE (type), TYPE_ARG_TYPES (type));
9712 }
9713
9714 /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node. */
9715 function_context = (ctype != NULL_TREE) ?
9716 hack_decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
9717 publicp = (! friendp || ! staticp)
9718 && function_context == NULL_TREE;
9719 decl = grokfndecl (ctype, type,
9720 TREE_CODE (declarator) != TEMPLATE_ID_EXPR
9721 ? declarator : dname,
9722 declarator,
9723 virtualp, flags, quals, raises, attrlist,
9724 friendp ? -1 : 0, friendp, publicp, inlinep,
9725 funcdef_flag, template_count);
9726 if (decl == NULL_TREE)
9727 return NULL_TREE;
9728 #if 0
9729 /* This clobbers the attrs stored in `decl' from `attrlist'. */
9730 /* The decl and setting of decl_machine_attr is also turned off. */
9731 decl = build_decl_attribute_variant (decl, decl_machine_attr);
9732 #endif
9733
9734 if (explicitp == 2)
9735 DECL_NONCONVERTING_P (decl) = 1;
9736 }
9737 else if (TREE_CODE (type) == METHOD_TYPE)
9738 {
9739 /* We only get here for friend declarations of
9740 members of other classes. */
9741 /* All method decls are public, so tell grokfndecl to set
9742 TREE_PUBLIC, also. */
9743 decl = grokfndecl (ctype, type, declarator, declarator,
9744 virtualp, flags, quals, raises, attrlist,
9745 friendp ? -1 : 0, friendp, 1, 0, funcdef_flag,
9746 template_count);
9747 if (decl == NULL_TREE)
9748 return NULL_TREE;
9749 }
9750 else if (!staticp && ! processing_template_decl
9751 && TYPE_SIZE (complete_type (type)) == NULL_TREE
9752 && (TREE_CODE (type) != ARRAY_TYPE || initialized == 0))
9753 {
9754 if (declarator)
9755 cp_error ("field `%D' has incomplete type", declarator);
9756 else
9757 cp_error ("name `%T' has incomplete type", type);
9758
9759 /* If we're instantiating a template, tell them which
9760 instantiation made the field's type be incomplete. */
9761 if (current_class_type
9762 && TYPE_NAME (current_class_type)
9763 && IDENTIFIER_TEMPLATE (TYPE_IDENTIFIER (current_class_type))
9764 && declspecs && TREE_VALUE (declspecs)
9765 && TREE_TYPE (TREE_VALUE (declspecs)) == type)
9766 cp_error (" in instantiation of template `%T'",
9767 current_class_type);
9768
9769 type = error_mark_node;
9770 decl = NULL_TREE;
9771 }
9772 else
9773 {
9774 if (friendp)
9775 {
9776 error ("`%s' is neither function nor method; cannot be declared friend",
9777 IDENTIFIER_POINTER (declarator));
9778 friendp = 0;
9779 }
9780 decl = NULL_TREE;
9781 }
9782
9783 if (friendp)
9784 {
9785 /* Friends are treated specially. */
9786 if (ctype == current_class_type)
9787 warning ("member functions are implicitly friends of their class");
9788 else
9789 {
9790 tree t = NULL_TREE;
9791 if (decl && DECL_NAME (decl))
9792 t = do_friend (ctype, declarator, decl,
9793 last_function_parms, flags, quals,
9794 funcdef_flag);
9795 if (t && funcdef_flag)
9796 return t;
9797
9798 return void_type_node;
9799 }
9800 }
9801
9802 /* Structure field. It may not be a function, except for C++ */
9803
9804 if (decl == NULL_TREE)
9805 {
9806 if (initialized)
9807 {
9808 /* Motion 10 at San Diego: If a static const integral data
9809 member is initialized with an integral constant
9810 expression, the initializer may appear either in the
9811 declaration (within the class), or in the definition,
9812 but not both. If it appears in the class, the member is
9813 a member constant. The file-scope definition is always
9814 required. */
9815 if (staticp)
9816 {
9817 if (pedantic)
9818 {
9819 if (! constp)
9820 cp_pedwarn ("ANSI C++ forbids in-class initialization of non-const static member `%D'",
9821 declarator);
9822
9823 else if (! INTEGRAL_TYPE_P (type))
9824 cp_pedwarn ("ANSI C++ forbids member constant `%D' of non-integral type `%T'", declarator, type);
9825 }
9826 }
9827
9828 /* Note that initialization of const members is prohibited
9829 by the draft ANSI standard, though it appears to be in
9830 common practice. 12.6.2: The argument list is used to
9831 initialize the named nonstatic member.... This (or an
9832 initializer list) is the only way to initialize
9833 nonstatic const and reference members. */
9834 else if (pedantic || ! constp)
9835 cp_pedwarn ("ANSI C++ forbids initialization of %s `%D'",
9836 constp ? "const member" : "member", declarator);
9837 }
9838
9839 if (staticp || (constp && initialized))
9840 {
9841 /* ANSI C++ Apr '95 wp 9.2 */
9842 if (staticp && declarator == current_class_name)
9843 cp_pedwarn ("ANSI C++ forbids static member `%D' with same name as enclosing class",
9844 declarator);
9845
9846 /* C++ allows static class members.
9847 All other work for this is done by grokfield.
9848 This VAR_DECL is built by build_lang_field_decl.
9849 All other VAR_DECLs are built by build_decl. */
9850 decl = build_lang_field_decl (VAR_DECL, declarator, type);
9851 TREE_STATIC (decl) = 1;
9852 /* In class context, 'static' means public access. */
9853 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl) = !!staticp;
9854 }
9855 else
9856 {
9857 decl = build_lang_field_decl (FIELD_DECL, declarator, type);
9858 if (RIDBIT_SETP (RID_MUTABLE, specbits))
9859 {
9860 DECL_MUTABLE_P (decl) = 1;
9861 RIDBIT_RESET (RID_MUTABLE, specbits);
9862 }
9863 }
9864
9865 bad_specifiers (decl, "field", virtualp, quals != NULL_TREE,
9866 inlinep, friendp, raises != NULL_TREE);
9867 }
9868 }
9869 else if (TREE_CODE (type) == FUNCTION_TYPE || TREE_CODE (type) == METHOD_TYPE)
9870 {
9871 tree original_name;
9872 int publicp = 0;
9873
9874 if (! declarator)
9875 return NULL_TREE;
9876
9877 if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
9878 original_name = dname;
9879 else
9880 original_name = declarator;
9881
9882 if (RIDBIT_SETP (RID_AUTO, specbits))
9883 error ("storage class `auto' invalid for function `%s'", name);
9884 else if (RIDBIT_SETP (RID_REGISTER, specbits))
9885 error ("storage class `register' invalid for function `%s'", name);
9886
9887 /* Function declaration not at top level.
9888 Storage classes other than `extern' are not allowed
9889 and `extern' makes no difference. */
9890 if (! toplevel_bindings_p ()
9891 && (RIDBIT_SETP (RID_STATIC, specbits)
9892 || RIDBIT_SETP (RID_INLINE, specbits))
9893 && pedantic)
9894 {
9895 if (RIDBIT_SETP (RID_STATIC, specbits))
9896 pedwarn ("storage class `static' invalid for function `%s' declared out of global scope", name);
9897 else
9898 pedwarn ("storage class `inline' invalid for function `%s' declared out of global scope", name);
9899 }
9900
9901 if (ctype == NULL_TREE)
9902 {
9903 if (virtualp)
9904 {
9905 error ("virtual non-class function `%s'", name);
9906 virtualp = 0;
9907 }
9908
9909 if (current_lang_name == lang_name_cplusplus
9910 && ! processing_template_decl
9911 && ! (IDENTIFIER_LENGTH (original_name) == 4
9912 && IDENTIFIER_POINTER (original_name)[0] == 'm'
9913 && strcmp (IDENTIFIER_POINTER (original_name), "main") == 0)
9914 && ! (IDENTIFIER_LENGTH (original_name) > 10
9915 && IDENTIFIER_POINTER (original_name)[0] == '_'
9916 && IDENTIFIER_POINTER (original_name)[1] == '_'
9917 && strncmp (IDENTIFIER_POINTER (original_name)+2, "builtin_", 8) == 0))
9918 /* Plain overloading: will not be grok'd by grokclassfn. */
9919 if (name_mangling_version < 1
9920 || TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
9921 declarator = build_decl_overload (dname, TYPE_ARG_TYPES (type), 0);
9922 }
9923 else if (TREE_CODE (type) == FUNCTION_TYPE && staticp < 2)
9924 type = build_cplus_method_type (build_type_variant (ctype, constp, volatilep),
9925 TREE_TYPE (type), TYPE_ARG_TYPES (type));
9926
9927 /* Record presence of `static'. */
9928 publicp = (ctype != NULL_TREE
9929 || RIDBIT_SETP (RID_EXTERN, specbits)
9930 || !RIDBIT_SETP (RID_STATIC, specbits));
9931
9932 decl = grokfndecl (ctype, type, original_name, declarator,
9933 virtualp, flags, quals, raises, attrlist,
9934 1, friendp,
9935 publicp, inlinep, funcdef_flag,
9936 template_count);
9937 if (decl == NULL_TREE)
9938 return NULL_TREE;
9939
9940 if (ctype == NULL_TREE && DECL_LANGUAGE (decl) != lang_c
9941 && (!DECL_TEMPLATE_SPECIALIZATION (decl) ||
9942 name_mangling_version < 1))
9943 DECL_ASSEMBLER_NAME (decl) = current_namespace_id (declarator);
9944
9945 if (staticp == 1)
9946 {
9947 int illegal_static = 0;
9948
9949 /* Don't allow a static member function in a class, and forbid
9950 declaring main to be static. */
9951 if (TREE_CODE (type) == METHOD_TYPE)
9952 {
9953 cp_pedwarn ("cannot declare member function `%D' to have static linkage", decl);
9954 illegal_static = 1;
9955 }
9956 else if (current_function_decl)
9957 {
9958 /* FIXME need arm citation */
9959 error ("cannot declare static function inside another function");
9960 illegal_static = 1;
9961 }
9962
9963 if (illegal_static)
9964 {
9965 staticp = 0;
9966 RIDBIT_RESET (RID_STATIC, specbits);
9967 }
9968 }
9969 }
9970 else
9971 {
9972 /* It's a variable. */
9973
9974 if (decl_context == CATCHPARM)
9975 {
9976 if (ctype)
9977 {
9978 ctype = NULL_TREE;
9979 error ("cannot use `::' in parameter declaration");
9980 }
9981
9982 /* A parameter declared as an array of T is really a pointer to T.
9983 One declared as a function is really a pointer to a function.
9984 One declared as a member is really a pointer to member. */
9985
9986 if (TREE_CODE (type) == ARRAY_TYPE)
9987 {
9988 /* Transfer const-ness of array into that of type
9989 pointed to. */
9990 type = build_pointer_type
9991 (cp_build_type_variant (TREE_TYPE (type), constp, volatilep));
9992 volatilep = constp = 0;
9993 }
9994 else if (TREE_CODE (type) == FUNCTION_TYPE)
9995 type = build_pointer_type (type);
9996 else if (TREE_CODE (type) == OFFSET_TYPE)
9997 type = build_pointer_type (type);
9998 }
9999
10000 /* An uninitialized decl with `extern' is a reference. */
10001 decl = grokvardecl (type, declarator, &specbits, initialized, constp);
10002 bad_specifiers (decl, "variable", virtualp, quals != NULL_TREE,
10003 inlinep, friendp, raises != NULL_TREE);
10004
10005 if (ctype)
10006 {
10007 DECL_CONTEXT (decl) = ctype;
10008 if (staticp == 1)
10009 {
10010 cp_pedwarn ("static member `%D' re-declared as static", decl);
10011 staticp = 0;
10012 RIDBIT_RESET (RID_STATIC, specbits);
10013 }
10014 if (RIDBIT_SETP (RID_REGISTER, specbits) && TREE_STATIC (decl))
10015 {
10016 cp_error ("static member `%D' declared `register'", decl);
10017 RIDBIT_RESET (RID_REGISTER, specbits);
10018 }
10019 if (RIDBIT_SETP (RID_EXTERN, specbits) && pedantic)
10020 {
10021 cp_pedwarn ("cannot explicitly declare member `%#D' to have extern linkage",
10022 decl);
10023 RIDBIT_RESET (RID_EXTERN, specbits);
10024 }
10025 }
10026 }
10027
10028 if (RIDBIT_SETP (RID_MUTABLE, specbits))
10029 {
10030 error ("`%s' cannot be declared mutable", name);
10031 }
10032
10033 /* Record `register' declaration for warnings on &
10034 and in case doing stupid register allocation. */
10035
10036 if (RIDBIT_SETP (RID_REGISTER, specbits))
10037 DECL_REGISTER (decl) = 1;
10038
10039 if (RIDBIT_SETP (RID_EXTERN, specbits))
10040 DECL_THIS_EXTERN (decl) = 1;
10041
10042 if (RIDBIT_SETP (RID_STATIC, specbits))
10043 DECL_THIS_STATIC (decl) = 1;
10044
10045 /* Record constancy and volatility. */
10046
10047 if (constp)
10048 TREE_READONLY (decl) = TREE_CODE (type) != REFERENCE_TYPE;
10049 if (volatilep)
10050 {
10051 TREE_SIDE_EFFECTS (decl) = 1;
10052 TREE_THIS_VOLATILE (decl) = 1;
10053 }
10054
10055 return decl;
10056 }
10057 }
10058 \f
10059 /* Tell if a parmlist/exprlist looks like an exprlist or a parmlist.
10060 An empty exprlist is a parmlist. An exprlist which
10061 contains only identifiers at the global level
10062 is a parmlist. Otherwise, it is an exprlist. */
10063
10064 int
10065 parmlist_is_exprlist (exprs)
10066 tree exprs;
10067 {
10068 if (exprs == NULL_TREE || TREE_PARMLIST (exprs))
10069 return 0;
10070
10071 if (toplevel_bindings_p ())
10072 {
10073 /* At the global level, if these are all identifiers,
10074 then it is a parmlist. */
10075 while (exprs)
10076 {
10077 if (TREE_CODE (TREE_VALUE (exprs)) != IDENTIFIER_NODE)
10078 return 1;
10079 exprs = TREE_CHAIN (exprs);
10080 }
10081 return 0;
10082 }
10083 return 1;
10084 }
10085
10086 /* Subroutine of `grokparms'. In a fcn definition, arg types must
10087 be complete.
10088
10089 C++: also subroutine of `start_function'. */
10090
10091 static void
10092 require_complete_types_for_parms (parms)
10093 tree parms;
10094 {
10095 if (processing_template_decl)
10096 return;
10097
10098 while (parms)
10099 {
10100 tree type = TREE_TYPE (parms);
10101 if (TYPE_SIZE (complete_type (type)) == NULL_TREE)
10102 {
10103 if (DECL_NAME (parms))
10104 error ("parameter `%s' has incomplete type",
10105 IDENTIFIER_POINTER (DECL_NAME (parms)));
10106 else
10107 error ("parameter has incomplete type");
10108 TREE_TYPE (parms) = error_mark_node;
10109 }
10110 #if 0
10111 /* If the arg types are incomplete in a declaration,
10112 they must include undefined tags.
10113 These tags can never be defined in the scope of the declaration,
10114 so the types can never be completed,
10115 and no call can be compiled successfully. */
10116 /* This is not the right behavior for C++, but not having
10117 it is also probably wrong. */
10118 else
10119 {
10120 /* Now warn if is a pointer to an incomplete type. */
10121 while (TREE_CODE (type) == POINTER_TYPE
10122 || TREE_CODE (type) == REFERENCE_TYPE)
10123 type = TREE_TYPE (type);
10124 type = TYPE_MAIN_VARIANT (type);
10125 if (TYPE_SIZE (type) == NULL_TREE)
10126 {
10127 if (DECL_NAME (parm) != NULL_TREE)
10128 warning ("parameter `%s' points to incomplete type",
10129 IDENTIFIER_POINTER (DECL_NAME (parm)));
10130 else
10131 warning ("parameter points to incomplete type");
10132 }
10133 }
10134 #endif
10135 parms = TREE_CHAIN (parms);
10136 }
10137 }
10138
10139 /* Decode the list of parameter types for a function type.
10140 Given the list of things declared inside the parens,
10141 return a list of types.
10142
10143 The list we receive can have three kinds of elements:
10144 an IDENTIFIER_NODE for names given without types,
10145 a TREE_LIST node for arguments given as typespecs or names with typespecs,
10146 or void_type_node, to mark the end of an argument list
10147 when additional arguments are not permitted (... was not used).
10148
10149 FUNCDEF_FLAG is nonzero for a function definition, 0 for
10150 a mere declaration. A nonempty identifier-list gets an error message
10151 when FUNCDEF_FLAG is zero.
10152 If FUNCDEF_FLAG is 1, then parameter types must be complete.
10153 If FUNCDEF_FLAG is -1, then parameter types may be incomplete.
10154
10155 If all elements of the input list contain types,
10156 we return a list of the types.
10157 If all elements contain no type (except perhaps a void_type_node
10158 at the end), we return a null list.
10159 If some have types and some do not, it is an error, and we
10160 return a null list.
10161
10162 Also set last_function_parms to either
10163 a list of names (IDENTIFIER_NODEs) or a chain of PARM_DECLs.
10164 A list of names is converted to a chain of PARM_DECLs
10165 by store_parm_decls so that ultimately it is always a chain of decls.
10166
10167 Note that in C++, parameters can take default values. These default
10168 values are in the TREE_PURPOSE field of the TREE_LIST. It is
10169 an error to specify default values which are followed by parameters
10170 that have no default values, or an ELLIPSES. For simplicities sake,
10171 only parameters which are specified with their types can take on
10172 default values. */
10173
10174 static tree
10175 grokparms (first_parm, funcdef_flag)
10176 tree first_parm;
10177 int funcdef_flag;
10178 {
10179 tree result = NULL_TREE;
10180 tree decls = NULL_TREE;
10181
10182 if (first_parm != NULL_TREE
10183 && TREE_CODE (TREE_VALUE (first_parm)) == IDENTIFIER_NODE)
10184 {
10185 if (! funcdef_flag)
10186 pedwarn ("parameter names (without types) in function declaration");
10187 last_function_parms = first_parm;
10188 return NULL_TREE;
10189 }
10190 else if (first_parm != NULL_TREE
10191 && TREE_CODE (TREE_VALUE (first_parm)) != TREE_LIST
10192 && TREE_VALUE (first_parm) != void_type_node)
10193 my_friendly_abort (145);
10194 else
10195 {
10196 /* Types were specified. This is a list of declarators
10197 each represented as a TREE_LIST node. */
10198 register tree parm, chain;
10199 int any_init = 0, any_error = 0;
10200
10201 if (first_parm != NULL_TREE)
10202 {
10203 tree last_result = NULL_TREE;
10204 tree last_decl = NULL_TREE;
10205
10206 for (parm = first_parm; parm != NULL_TREE; parm = chain)
10207 {
10208 tree type = NULL_TREE, list_node = parm;
10209 register tree decl = TREE_VALUE (parm);
10210 tree init = TREE_PURPOSE (parm);
10211
10212 chain = TREE_CHAIN (parm);
10213 /* @@ weak defense against parse errors. */
10214 if (decl != void_type_node && TREE_CODE (decl) != TREE_LIST)
10215 {
10216 /* Give various messages as the need arises. */
10217 if (TREE_CODE (decl) == STRING_CST)
10218 cp_error ("invalid string constant `%E'", decl);
10219 else if (TREE_CODE (decl) == INTEGER_CST)
10220 error ("invalid integer constant in parameter list, did you forget to give parameter name?");
10221 continue;
10222 }
10223
10224 if (decl != void_type_node)
10225 {
10226 decl = grokdeclarator (TREE_VALUE (decl),
10227 TREE_PURPOSE (decl),
10228 PARM, init != NULL_TREE,
10229 NULL_TREE);
10230 if (! decl)
10231 continue;
10232 type = TREE_TYPE (decl);
10233 if (TYPE_MAIN_VARIANT (type) == void_type_node)
10234 decl = void_type_node;
10235 else if (TREE_CODE (type) == METHOD_TYPE)
10236 {
10237 if (DECL_NAME (decl))
10238 /* Cannot use the decl here because
10239 we don't have DECL_CONTEXT set up yet. */
10240 cp_error ("parameter `%D' invalidly declared method type",
10241 DECL_NAME (decl));
10242 else
10243 error ("parameter invalidly declared method type");
10244 type = build_pointer_type (type);
10245 TREE_TYPE (decl) = type;
10246 }
10247 else if (TREE_CODE (type) == OFFSET_TYPE)
10248 {
10249 if (DECL_NAME (decl))
10250 cp_error ("parameter `%D' invalidly declared offset type",
10251 DECL_NAME (decl));
10252 else
10253 error ("parameter invalidly declared offset type");
10254 type = build_pointer_type (type);
10255 TREE_TYPE (decl) = type;
10256 }
10257 else if (TREE_CODE (type) == RECORD_TYPE
10258 && TYPE_LANG_SPECIFIC (type)
10259 && CLASSTYPE_ABSTRACT_VIRTUALS (type))
10260 {
10261 abstract_virtuals_error (decl, type);
10262 any_error = 1; /* seems like a good idea */
10263 }
10264 else if (TREE_CODE (type) == RECORD_TYPE
10265 && TYPE_LANG_SPECIFIC (type)
10266 && IS_SIGNATURE (type))
10267 {
10268 signature_error (decl, type);
10269 any_error = 1; /* seems like a good idea */
10270 }
10271 }
10272
10273 if (decl == void_type_node)
10274 {
10275 if (result == NULL_TREE)
10276 {
10277 result = void_list_node;
10278 last_result = result;
10279 }
10280 else
10281 {
10282 TREE_CHAIN (last_result) = void_list_node;
10283 last_result = void_list_node;
10284 }
10285 if (chain
10286 && (chain != void_list_node || TREE_CHAIN (chain)))
10287 error ("`void' in parameter list must be entire list");
10288 break;
10289 }
10290
10291 /* Since there is a prototype, args are passed in their own types. */
10292 DECL_ARG_TYPE (decl) = TREE_TYPE (decl);
10293 #ifdef PROMOTE_PROTOTYPES
10294 if ((TREE_CODE (type) == INTEGER_TYPE
10295 || TREE_CODE (type) == ENUMERAL_TYPE)
10296 && TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node))
10297 DECL_ARG_TYPE (decl) = integer_type_node;
10298 #endif
10299 if (!any_error)
10300 {
10301 if (init)
10302 {
10303 any_init++;
10304 if (TREE_CODE (init) == SAVE_EXPR)
10305 PARM_DECL_EXPR (init) = 1;
10306 else if (processing_template_decl)
10307 ;
10308 /* Unparsed default arg from in-class decl. */
10309 else if (TREE_CODE (init) == DEFAULT_ARG)
10310 ;
10311 else if (TREE_CODE (init) == VAR_DECL
10312 || TREE_CODE (init) == PARM_DECL)
10313 {
10314 if (IDENTIFIER_LOCAL_VALUE (DECL_NAME (init)))
10315 {
10316 /* ``Local variables may not be used in default
10317 argument expressions.'' dpANSI C++ 8.2.6 */
10318 /* If extern int i; within a function is not
10319 considered a local variable, then this code is
10320 wrong. */
10321 cp_error ("local variable `%D' may not be used as a default argument", init);
10322 any_error = 1;
10323 }
10324 else if (TREE_READONLY_DECL_P (init))
10325 init = decl_constant_value (init);
10326 }
10327 else
10328 init = require_instantiated_type (type, init, integer_zero_node);
10329 if (! processing_template_decl
10330 && TREE_CODE (init) != DEFAULT_ARG
10331 && ! can_convert_arg (type, TREE_TYPE (init), init))
10332 cp_pedwarn ("invalid type `%T' for default argument to `%#D'",
10333 TREE_TYPE (init), decl);
10334 }
10335 }
10336 else
10337 init = NULL_TREE;
10338
10339 if (decls == NULL_TREE)
10340 {
10341 decls = decl;
10342 last_decl = decls;
10343 }
10344 else
10345 {
10346 TREE_CHAIN (last_decl) = decl;
10347 last_decl = decl;
10348 }
10349 if (! current_function_decl && TREE_PERMANENT (list_node))
10350 {
10351 TREE_PURPOSE (list_node) = init;
10352 TREE_VALUE (list_node) = type;
10353 TREE_CHAIN (list_node) = NULL_TREE;
10354 }
10355 else
10356 list_node = saveable_tree_cons (init, type, NULL_TREE);
10357 if (result == NULL_TREE)
10358 {
10359 result = list_node;
10360 last_result = result;
10361 }
10362 else
10363 {
10364 TREE_CHAIN (last_result) = list_node;
10365 last_result = list_node;
10366 }
10367 }
10368 if (last_result)
10369 TREE_CHAIN (last_result) = NULL_TREE;
10370 /* If there are no parameters, and the function does not end
10371 with `...', then last_decl will be NULL_TREE. */
10372 if (last_decl != NULL_TREE)
10373 TREE_CHAIN (last_decl) = NULL_TREE;
10374 }
10375 }
10376
10377 last_function_parms = decls;
10378
10379 /* In a fcn definition, arg types must be complete. */
10380 if (funcdef_flag > 0)
10381 require_complete_types_for_parms (last_function_parms);
10382
10383 return result;
10384 }
10385
10386 /* Called from the parser to update an element of TYPE_ARG_TYPES for some
10387 FUNCTION_TYPE with the newly parsed version of its default argument, which
10388 was previously digested as text. See snarf_defarg et al in lex.c. */
10389
10390 void
10391 replace_defarg (arg, init)
10392 tree arg, init;
10393 {
10394 if (! processing_template_decl
10395 && ! can_convert_arg (TREE_VALUE (arg), TREE_TYPE (init), init))
10396 cp_pedwarn ("invalid type `%T' for default argument to `%T'",
10397 TREE_TYPE (init), TREE_VALUE (arg));
10398 TREE_PURPOSE (arg) = init;
10399 }
10400 \f
10401 int
10402 copy_args_p (d)
10403 tree d;
10404 {
10405 tree t = FUNCTION_ARG_CHAIN (d);
10406 if (DECL_CONSTRUCTOR_P (d)
10407 && TYPE_USES_VIRTUAL_BASECLASSES (DECL_CONTEXT (d)))
10408 t = TREE_CHAIN (t);
10409 if (t && TREE_CODE (TREE_VALUE (t)) == REFERENCE_TYPE
10410 && (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_VALUE (t)))
10411 == DECL_CLASS_CONTEXT (d))
10412 && (TREE_CHAIN (t) == NULL_TREE
10413 || TREE_CHAIN (t) == void_list_node
10414 || TREE_PURPOSE (TREE_CHAIN (t))))
10415 return 1;
10416 return 0;
10417 }
10418
10419 /* These memoizing functions keep track of special properties which
10420 a class may have. `grok_ctor_properties' notices whether a class
10421 has a constructor of the form X(X&), and also complains
10422 if the class has a constructor of the form X(X).
10423 `grok_op_properties' takes notice of the various forms of
10424 operator= which are defined, as well as what sorts of type conversion
10425 may apply. Both functions take a FUNCTION_DECL as an argument. */
10426
10427 int
10428 grok_ctor_properties (ctype, decl)
10429 tree ctype, decl;
10430 {
10431 tree parmtypes = FUNCTION_ARG_CHAIN (decl);
10432 tree parmtype = parmtypes ? TREE_VALUE (parmtypes) : void_type_node;
10433
10434 /* When a type has virtual baseclasses, a magical first int argument is
10435 added to any ctor so we can tell if the class has been initialized
10436 yet. This could screw things up in this function, so we deliberately
10437 ignore the leading int if we're in that situation. */
10438 if (parmtypes
10439 && TREE_VALUE (parmtypes) == integer_type_node
10440 && TYPE_USES_VIRTUAL_BASECLASSES (ctype))
10441 {
10442 parmtypes = TREE_CHAIN (parmtypes);
10443 parmtype = TREE_VALUE (parmtypes);
10444 }
10445
10446 if (TREE_CODE (parmtype) == REFERENCE_TYPE
10447 && TYPE_MAIN_VARIANT (TREE_TYPE (parmtype)) == ctype)
10448 {
10449 if (TREE_CHAIN (parmtypes) == NULL_TREE
10450 || TREE_CHAIN (parmtypes) == void_list_node
10451 || TREE_PURPOSE (TREE_CHAIN (parmtypes)))
10452 {
10453 TYPE_HAS_INIT_REF (ctype) = 1;
10454 if (TYPE_READONLY (TREE_TYPE (parmtype)))
10455 TYPE_HAS_CONST_INIT_REF (ctype) = 1;
10456 }
10457 else
10458 TYPE_GETS_INIT_AGGR (ctype) = 1;
10459 }
10460 else if (TYPE_MAIN_VARIANT (parmtype) == ctype)
10461 {
10462 if (TREE_CHAIN (parmtypes) != NULL_TREE
10463 && TREE_CHAIN (parmtypes) == void_list_node)
10464 {
10465 cp_error ("invalid constructor; you probably meant `%T (const %T&)'",
10466 ctype, ctype);
10467 SET_IDENTIFIER_ERROR_LOCUS (DECL_NAME (decl), ctype);
10468
10469 return 0;
10470 }
10471 else
10472 TYPE_GETS_INIT_AGGR (ctype) = 1;
10473 }
10474 else if (TREE_CODE (parmtype) == VOID_TYPE
10475 || TREE_PURPOSE (parmtypes) != NULL_TREE)
10476 TYPE_HAS_DEFAULT_CONSTRUCTOR (ctype) = 1;
10477
10478 return 1;
10479 }
10480
10481 /* An operator with this name can be either unary or binary. */
10482
10483 static int
10484 ambi_op_p (name)
10485 tree name;
10486 {
10487 return (name == ansi_opname [(int) INDIRECT_REF]
10488 || name == ansi_opname [(int) ADDR_EXPR]
10489 || name == ansi_opname [(int) NEGATE_EXPR]
10490 || name == ansi_opname[(int) POSTINCREMENT_EXPR]
10491 || name == ansi_opname[(int) POSTDECREMENT_EXPR]
10492 || name == ansi_opname [(int) CONVERT_EXPR]);
10493 }
10494
10495 /* An operator with this name can only be unary. */
10496
10497 static int
10498 unary_op_p (name)
10499 tree name;
10500 {
10501 return (name == ansi_opname [(int) TRUTH_NOT_EXPR]
10502 || name == ansi_opname [(int) BIT_NOT_EXPR]
10503 || name == ansi_opname [(int) COMPONENT_REF]
10504 || OPERATOR_TYPENAME_P (name));
10505 }
10506
10507 /* Do a little sanity-checking on how they declared their operator. */
10508
10509 void
10510 grok_op_properties (decl, virtualp, friendp)
10511 tree decl;
10512 int virtualp, friendp;
10513 {
10514 tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
10515 int methodp = (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE);
10516 tree name = DECL_NAME (decl);
10517
10518 if (current_class_type == NULL_TREE)
10519 friendp = 1;
10520
10521 if (! friendp)
10522 {
10523 if (name == ansi_opname[(int) MODIFY_EXPR])
10524 TYPE_HAS_ASSIGNMENT (current_class_type) = 1;
10525 else if (name == ansi_opname[(int) CALL_EXPR])
10526 TYPE_OVERLOADS_CALL_EXPR (current_class_type) = 1;
10527 else if (name == ansi_opname[(int) ARRAY_REF])
10528 TYPE_OVERLOADS_ARRAY_REF (current_class_type) = 1;
10529 else if (name == ansi_opname[(int) COMPONENT_REF]
10530 || name == ansi_opname[(int) MEMBER_REF])
10531 TYPE_OVERLOADS_ARROW (current_class_type) = 1;
10532 else if (name == ansi_opname[(int) NEW_EXPR])
10533 TYPE_GETS_NEW (current_class_type) |= 1;
10534 else if (name == ansi_opname[(int) DELETE_EXPR])
10535 TYPE_GETS_DELETE (current_class_type) |= 1;
10536 else if (name == ansi_opname[(int) VEC_NEW_EXPR])
10537 TYPE_GETS_NEW (current_class_type) |= 2;
10538 else if (name == ansi_opname[(int) VEC_DELETE_EXPR])
10539 TYPE_GETS_DELETE (current_class_type) |= 2;
10540 }
10541
10542 if (name == ansi_opname[(int) NEW_EXPR]
10543 || name == ansi_opname[(int) VEC_NEW_EXPR])
10544 {
10545 /* When the compiler encounters the definition of A::operator new, it
10546 doesn't look at the class declaration to find out if it's static. */
10547 if (methodp)
10548 revert_static_member_fn (&decl, NULL, NULL);
10549
10550 /* Take care of function decl if we had syntax errors. */
10551 if (argtypes == NULL_TREE)
10552 TREE_TYPE (decl)
10553 = build_function_type (ptr_type_node,
10554 hash_tree_chain (integer_type_node,
10555 void_list_node));
10556 else
10557 TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
10558 }
10559 else if (name == ansi_opname[(int) DELETE_EXPR]
10560 || name == ansi_opname[(int) VEC_DELETE_EXPR])
10561 {
10562 if (methodp)
10563 revert_static_member_fn (&decl, NULL, NULL);
10564
10565 if (argtypes == NULL_TREE)
10566 TREE_TYPE (decl)
10567 = build_function_type (void_type_node,
10568 hash_tree_chain (ptr_type_node,
10569 void_list_node));
10570 else
10571 {
10572 TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
10573
10574 if (! friendp && name == ansi_opname[(int) VEC_DELETE_EXPR]
10575 && (TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)))
10576 != void_list_node))
10577 TYPE_VEC_DELETE_TAKES_SIZE (current_class_type) = 1;
10578 }
10579 }
10580 else
10581 {
10582 /* An operator function must either be a non-static member function
10583 or have at least one parameter of a class, a reference to a class,
10584 an enumeration, or a reference to an enumeration. 13.4.0.6 */
10585 if (! methodp || DECL_STATIC_FUNCTION_P (decl))
10586 {
10587 if (OPERATOR_TYPENAME_P (name)
10588 || name == ansi_opname[(int) CALL_EXPR]
10589 || name == ansi_opname[(int) MODIFY_EXPR]
10590 || name == ansi_opname[(int) COMPONENT_REF]
10591 || name == ansi_opname[(int) ARRAY_REF])
10592 cp_error ("`%D' must be a nonstatic member function", decl);
10593 else
10594 {
10595 tree p = argtypes;
10596
10597 if (DECL_STATIC_FUNCTION_P (decl))
10598 cp_error ("`%D' must be either a non-static member function or a non-member function", decl);
10599
10600 if (p)
10601 for (; TREE_VALUE (p) != void_type_node ; p = TREE_CHAIN (p))
10602 {
10603 tree arg = TREE_VALUE (p);
10604 if (TREE_CODE (arg) == REFERENCE_TYPE)
10605 arg = TREE_TYPE (arg);
10606
10607 /* This lets bad template code slip through. */
10608 if (IS_AGGR_TYPE (arg)
10609 || TREE_CODE (arg) == ENUMERAL_TYPE
10610 || TREE_CODE (arg) == TEMPLATE_TYPE_PARM
10611 || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
10612 goto foundaggr;
10613 }
10614 cp_error
10615 ("`%D' must have an argument of class or enumerated type",
10616 decl);
10617 foundaggr:
10618 ;
10619 }
10620 }
10621
10622 if (name == ansi_opname[(int) CALL_EXPR]
10623 || name == ansi_opname[(int) METHOD_CALL_EXPR])
10624 return; /* no restrictions on args */
10625
10626 if (IDENTIFIER_TYPENAME_P (name) && ! DECL_TEMPLATE_INFO (decl))
10627 {
10628 tree t = TREE_TYPE (name);
10629 if (TREE_CODE (t) == VOID_TYPE)
10630 pedwarn ("void is not a valid type conversion operator");
10631 else if (! friendp)
10632 {
10633 int ref = (TREE_CODE (t) == REFERENCE_TYPE);
10634 char *what = 0;
10635 if (ref)
10636 t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
10637
10638 if (t == current_class_type)
10639 what = "the same type";
10640 /* Don't force t to be complete here. */
10641 else if (IS_AGGR_TYPE (t)
10642 && TYPE_SIZE (t)
10643 && DERIVED_FROM_P (t, current_class_type))
10644 what = "a base class";
10645
10646 if (what)
10647 warning ("conversion to %s%s will never use a type conversion operator",
10648 ref ? "a reference to " : "", what);
10649 }
10650 }
10651
10652 if (name == ansi_opname[(int) MODIFY_EXPR])
10653 {
10654 tree parmtype;
10655
10656 if (list_length (argtypes) != 3 && methodp)
10657 {
10658 cp_error ("`%D' must take exactly one argument", decl);
10659 return;
10660 }
10661 parmtype = TREE_VALUE (TREE_CHAIN (argtypes));
10662
10663 if (copy_assignment_arg_p (parmtype, virtualp)
10664 && ! friendp)
10665 {
10666 TYPE_HAS_ASSIGN_REF (current_class_type) = 1;
10667 if (TREE_CODE (parmtype) != REFERENCE_TYPE
10668 || TYPE_READONLY (TREE_TYPE (parmtype)))
10669 TYPE_HAS_CONST_ASSIGN_REF (current_class_type) = 1;
10670 }
10671 }
10672 else if (name == ansi_opname[(int) COND_EXPR])
10673 {
10674 /* 13.4.0.3 */
10675 pedwarn ("ANSI C++ prohibits overloading operator ?:");
10676 if (list_length (argtypes) != 4)
10677 cp_error ("`%D' must take exactly three arguments", decl);
10678 }
10679 else if (ambi_op_p (name))
10680 {
10681 if (list_length (argtypes) == 2)
10682 /* prefix */;
10683 else if (list_length (argtypes) == 3)
10684 {
10685 if ((name == ansi_opname[(int) POSTINCREMENT_EXPR]
10686 || name == ansi_opname[(int) POSTDECREMENT_EXPR])
10687 && ! processing_template_decl
10688 && TREE_VALUE (TREE_CHAIN (argtypes)) != integer_type_node)
10689 {
10690 if (methodp)
10691 cp_error ("postfix `%D' must take `int' as its argument",
10692 decl);
10693 else
10694 cp_error
10695 ("postfix `%D' must take `int' as its second argument",
10696 decl);
10697 }
10698 }
10699 else
10700 {
10701 if (methodp)
10702 cp_error ("`%D' must take either zero or one argument", decl);
10703 else
10704 cp_error ("`%D' must take either one or two arguments", decl);
10705 }
10706
10707 /* More Effective C++ rule 6. */
10708 if (warn_ecpp
10709 && (name == ansi_opname[(int) POSTINCREMENT_EXPR]
10710 || name == ansi_opname[(int) POSTDECREMENT_EXPR]))
10711 {
10712 tree arg = TREE_VALUE (argtypes);
10713 tree ret = TREE_TYPE (TREE_TYPE (decl));
10714 if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
10715 arg = TREE_TYPE (arg);
10716 arg = TYPE_MAIN_VARIANT (arg);
10717 if (list_length (argtypes) == 2)
10718 {
10719 if (TREE_CODE (ret) != REFERENCE_TYPE
10720 || !comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (ret)),
10721 arg, 1))
10722 cp_warning ("prefix `%D' should return `%T'", decl,
10723 build_reference_type (arg));
10724 }
10725 else
10726 {
10727 if (!comptypes (TYPE_MAIN_VARIANT (ret), arg, 1))
10728 cp_warning ("postfix `%D' should return `%T'", decl, arg);
10729 }
10730 }
10731 }
10732 else if (unary_op_p (name))
10733 {
10734 if (list_length (argtypes) != 2)
10735 {
10736 if (methodp)
10737 cp_error ("`%D' must take `void'", decl);
10738 else
10739 cp_error ("`%D' must take exactly one argument", decl);
10740 }
10741 }
10742 else /* if (binary_op_p (name)) */
10743 {
10744 if (list_length (argtypes) != 3)
10745 {
10746 if (methodp)
10747 cp_error ("`%D' must take exactly one argument", decl);
10748 else
10749 cp_error ("`%D' must take exactly two arguments", decl);
10750 }
10751
10752 /* More Effective C++ rule 7. */
10753 if (warn_ecpp
10754 && (name == ansi_opname [TRUTH_ANDIF_EXPR]
10755 || name == ansi_opname [TRUTH_ORIF_EXPR]
10756 || name == ansi_opname [COMPOUND_EXPR]))
10757 cp_warning ("user-defined `%D' always evaluates both arguments",
10758 decl);
10759 }
10760
10761 /* Effective C++ rule 23. */
10762 if (warn_ecpp
10763 && list_length (argtypes) == 3
10764 && (name == ansi_opname [PLUS_EXPR]
10765 || name == ansi_opname [MINUS_EXPR]
10766 || name == ansi_opname [TRUNC_DIV_EXPR]
10767 || name == ansi_opname [MULT_EXPR])
10768 && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
10769 cp_warning ("`%D' should return by value", decl);
10770
10771 /* 13.4.0.8 */
10772 if (argtypes)
10773 for (; argtypes != void_list_node ; argtypes = TREE_CHAIN (argtypes))
10774 if (TREE_PURPOSE (argtypes))
10775 {
10776 TREE_PURPOSE (argtypes) = NULL_TREE;
10777 if (name == ansi_opname[(int) POSTINCREMENT_EXPR]
10778 || name == ansi_opname[(int) POSTDECREMENT_EXPR])
10779 {
10780 if (pedantic)
10781 cp_pedwarn ("`%D' cannot have default arguments", decl);
10782 }
10783 else
10784 cp_error ("`%D' cannot have default arguments", decl);
10785 }
10786 }
10787 }
10788 \f
10789 /* Get the struct, enum or union (CODE says which) with tag NAME.
10790 Define the tag as a forward-reference if it is not defined.
10791
10792 C++: If a class derivation is given, process it here, and report
10793 an error if multiple derivation declarations are not identical.
10794
10795 If this is a definition, come in through xref_tag and only look in
10796 the current frame for the name (since C++ allows new names in any
10797 scope.) */
10798
10799 tree
10800 xref_tag (code_type_node, name, binfo, globalize)
10801 tree code_type_node;
10802 tree name, binfo;
10803 int globalize;
10804 {
10805 enum tag_types tag_code;
10806 enum tree_code code;
10807 int temp = 0;
10808 register tree ref, t;
10809 struct binding_level *b = inner_binding_level;
10810 int got_type = 0;
10811
10812 tag_code = (enum tag_types) TREE_INT_CST_LOW (code_type_node);
10813 switch (tag_code)
10814 {
10815 case record_type:
10816 case class_type:
10817 case signature_type:
10818 code = RECORD_TYPE;
10819 break;
10820 case union_type:
10821 code = UNION_TYPE;
10822 break;
10823 case enum_type:
10824 code = ENUMERAL_TYPE;
10825 break;
10826 default:
10827 my_friendly_abort (18);
10828 }
10829
10830 /* If a cross reference is requested, look up the type
10831 already defined for this tag and return it. */
10832 if (TREE_CODE_CLASS (TREE_CODE (name)) == 't')
10833 {
10834 t = name;
10835 name = TYPE_IDENTIFIER (t);
10836 got_type = 1;
10837 }
10838 else
10839 t = IDENTIFIER_TYPE_VALUE (name);
10840 if (t && TREE_CODE (t) != code && TREE_CODE (t) != TEMPLATE_TYPE_PARM
10841 && TREE_CODE (t) != TEMPLATE_TEMPLATE_PARM)
10842 t = NULL_TREE;
10843
10844 if (! globalize)
10845 {
10846 if (pedantic && t && (TREE_CODE (t) == TEMPLATE_TYPE_PARM
10847 || TREE_CODE (t) == TEMPLATE_TEMPLATE_PARM))
10848 {
10849 cp_pedwarn ("redeclaration of template type-parameter `%T'", name);
10850 cp_pedwarn_at (" previously declared here", t);
10851 }
10852 if (t && TYPE_CONTEXT (t) && got_type)
10853 ref = t;
10854 else
10855 {
10856 /* If we know we are defining this tag, only look it up in
10857 this scope and don't try to find it as a type. */
10858 ref = lookup_tag (code, name, b, 1);
10859 }
10860 }
10861 else
10862 {
10863 if (t)
10864 ref = t;
10865 else
10866 ref = lookup_tag (code, name, b, 0);
10867
10868 if (! ref)
10869 {
10870 /* Try finding it as a type declaration. If that wins, use it. */
10871 ref = lookup_name (name, 1);
10872 if (ref && TREE_CODE (ref) == TYPE_DECL
10873 && TREE_CODE (TREE_TYPE (ref)) == code)
10874 ref = TREE_TYPE (ref);
10875 else
10876 ref = NULL_TREE;
10877 }
10878 }
10879
10880 push_obstacks_nochange ();
10881
10882 if (! ref)
10883 {
10884 /* If no such tag is yet defined, create a forward-reference node
10885 and record it as the "definition".
10886 When a real declaration of this type is found,
10887 the forward-reference will be altered into a real type. */
10888
10889 /* In C++, since these migrate into the global scope, we must
10890 build them on the permanent obstack. */
10891
10892 temp = allocation_temporary_p ();
10893 if (temp)
10894 end_temporary_allocation ();
10895
10896 if (code == ENUMERAL_TYPE)
10897 {
10898 cp_error ("use of enum `%#D' without previous declaration", name);
10899
10900 ref = make_node (ENUMERAL_TYPE);
10901
10902 /* Give the type a default layout like unsigned int
10903 to avoid crashing if it does not get defined. */
10904 TYPE_MODE (ref) = TYPE_MODE (unsigned_type_node);
10905 TYPE_ALIGN (ref) = TYPE_ALIGN (unsigned_type_node);
10906 TREE_UNSIGNED (ref) = 1;
10907 TYPE_PRECISION (ref) = TYPE_PRECISION (unsigned_type_node);
10908 TYPE_MIN_VALUE (ref) = TYPE_MIN_VALUE (unsigned_type_node);
10909 TYPE_MAX_VALUE (ref) = TYPE_MAX_VALUE (unsigned_type_node);
10910
10911 /* Enable us to recognize when a type is created in class context.
10912 To do nested classes correctly, this should probably be cleared
10913 out when we leave this classes scope. Currently this in only
10914 done in `start_enum'. */
10915
10916 pushtag (name, ref, globalize);
10917 }
10918 else
10919 {
10920 struct binding_level *old_b = class_binding_level;
10921
10922 ref = make_lang_type (code);
10923
10924 if (tag_code == signature_type)
10925 {
10926 SET_SIGNATURE (ref);
10927 /* Since a signature type will be turned into the type
10928 of signature tables, it's not only an interface. */
10929 CLASSTYPE_INTERFACE_ONLY (ref) = 0;
10930 SET_CLASSTYPE_INTERFACE_KNOWN (ref);
10931 /* A signature doesn't have a vtable. */
10932 CLASSTYPE_VTABLE_NEEDS_WRITING (ref) = 0;
10933 }
10934
10935 #ifdef NONNESTED_CLASSES
10936 /* Class types don't nest the way enums do. */
10937 class_binding_level = (struct binding_level *)0;
10938 #endif
10939 pushtag (name, ref, globalize);
10940 class_binding_level = old_b;
10941 }
10942 }
10943 else
10944 {
10945 /* If it no longer looks like a nested type, make sure it's
10946 in global scope. */
10947 if (b == global_binding_level && !class_binding_level
10948 && IDENTIFIER_GLOBAL_VALUE (name) == NULL_TREE)
10949 IDENTIFIER_GLOBAL_VALUE (name) = TYPE_NAME (ref);
10950 }
10951
10952 if (binfo)
10953 xref_basetypes (code_type_node, name, ref, binfo);
10954
10955 /* Until the type is defined, tentatively accept whatever
10956 structure tag the user hands us. */
10957 if (TYPE_SIZE (ref) == NULL_TREE
10958 && ref != current_class_type
10959 /* Have to check this, in case we have contradictory tag info. */
10960 && IS_AGGR_TYPE_CODE (TREE_CODE (ref)))
10961 {
10962 if (tag_code == class_type)
10963 CLASSTYPE_DECLARED_CLASS (ref) = 1;
10964 else if (tag_code == record_type || tag_code == signature_type)
10965 CLASSTYPE_DECLARED_CLASS (ref) = 0;
10966 }
10967
10968 pop_obstacks ();
10969
10970 return ref;
10971 }
10972
10973 tree
10974 xref_tag_from_type (old, id, globalize)
10975 tree old, id;
10976 int globalize;
10977 {
10978 tree code_type_node;
10979
10980 if (TREE_CODE (old) == RECORD_TYPE)
10981 code_type_node = (CLASSTYPE_DECLARED_CLASS (old)
10982 ? class_type_node : record_type_node);
10983 else
10984 code_type_node = union_type_node;
10985
10986 if (id == NULL_TREE)
10987 id = TYPE_IDENTIFIER (old);
10988
10989 return xref_tag (code_type_node, id, NULL_TREE, globalize);
10990 }
10991
10992 void
10993 xref_basetypes (code_type_node, name, ref, binfo)
10994 tree code_type_node;
10995 tree name, ref;
10996 tree binfo;
10997 {
10998 /* In the declaration `A : X, Y, ... Z' we mark all the types
10999 (A, X, Y, ..., Z) so we can check for duplicates. */
11000 tree binfos;
11001 int i, len;
11002 enum tag_types tag_code = (enum tag_types) TREE_INT_CST_LOW (code_type_node);
11003
11004 if (tag_code == union_type)
11005 {
11006 cp_error ("derived union `%T' invalid", ref);
11007 return;
11008 }
11009
11010 len = list_length (binfo);
11011 push_obstacks (TYPE_OBSTACK (ref), TYPE_OBSTACK (ref));
11012
11013 SET_CLASSTYPE_MARKED (ref);
11014 BINFO_BASETYPES (TYPE_BINFO (ref)) = binfos = make_tree_vec (len);
11015
11016 for (i = 0; binfo; binfo = TREE_CHAIN (binfo))
11017 {
11018 /* The base of a derived struct is public by default. */
11019 int via_public
11020 = (TREE_PURPOSE (binfo) == access_public_node
11021 || TREE_PURPOSE (binfo) == access_public_virtual_node
11022 || (tag_code != class_type
11023 && (TREE_PURPOSE (binfo) == access_default_node
11024 || TREE_PURPOSE (binfo) == access_default_virtual_node)));
11025 int via_protected = TREE_PURPOSE (binfo) == access_protected_node;
11026 int via_virtual
11027 = (TREE_PURPOSE (binfo) == access_private_virtual_node
11028 || TREE_PURPOSE (binfo) == access_public_virtual_node
11029 || TREE_PURPOSE (binfo) == access_default_virtual_node);
11030 tree basetype = TREE_VALUE (binfo);
11031 tree base_binfo;
11032
11033 GNU_xref_hier (IDENTIFIER_POINTER (name),
11034 IDENTIFIER_POINTER (TREE_VALUE (binfo)),
11035 via_public, via_virtual, 0);
11036
11037 if (basetype && TREE_CODE (basetype) == TYPE_DECL)
11038 basetype = TREE_TYPE (basetype);
11039 if (!basetype
11040 || (TREE_CODE (basetype) != RECORD_TYPE
11041 && TREE_CODE (basetype) != TYPENAME_TYPE
11042 && TREE_CODE (basetype) != TEMPLATE_TYPE_PARM
11043 && TREE_CODE (basetype) != TEMPLATE_TEMPLATE_PARM))
11044 {
11045 cp_error ("base type `%T' fails to be a struct or class type",
11046 TREE_VALUE (binfo));
11047 continue;
11048 }
11049 #if 1
11050 /* This code replaces similar code in layout_basetypes. */
11051 else if (! (current_template_parms && uses_template_parms (basetype))
11052 && TYPE_SIZE (complete_type (basetype)) == NULL_TREE)
11053 {
11054 cp_error ("base class `%T' has incomplete type", basetype);
11055 continue;
11056 }
11057 #endif
11058 else
11059 {
11060 if (CLASSTYPE_MARKED (basetype))
11061 {
11062 if (basetype == ref)
11063 cp_error ("recursive type `%T' undefined", basetype);
11064 else
11065 cp_error ("duplicate base type `%T' invalid", basetype);
11066 continue;
11067 }
11068
11069 /* Note that the BINFO records which describe individual
11070 inheritances are *not* shared in the lattice! They
11071 cannot be shared because a given baseclass may be
11072 inherited with different `accessibility' by different
11073 derived classes. (Each BINFO record describing an
11074 individual inheritance contains flags which say what
11075 the `accessibility' of that particular inheritance is.) */
11076
11077 base_binfo = make_binfo (integer_zero_node, basetype,
11078 TYPE_BINFO_VTABLE (basetype),
11079 TYPE_BINFO_VIRTUALS (basetype), NULL_TREE);
11080
11081 TREE_VEC_ELT (binfos, i) = base_binfo;
11082 TREE_VIA_PUBLIC (base_binfo) = via_public;
11083 TREE_VIA_PROTECTED (base_binfo) = via_protected;
11084 TREE_VIA_VIRTUAL (base_binfo) = via_virtual;
11085 BINFO_INHERITANCE_CHAIN (base_binfo) = TYPE_BINFO (ref);
11086
11087 SET_CLASSTYPE_MARKED (basetype);
11088
11089 /* We are free to modify these bits because they are meaningless
11090 at top level, and BASETYPE is a top-level type. */
11091 if (via_virtual || TYPE_USES_VIRTUAL_BASECLASSES (basetype))
11092 {
11093 TYPE_USES_VIRTUAL_BASECLASSES (ref) = 1;
11094 TYPE_USES_COMPLEX_INHERITANCE (ref) = 1;
11095 }
11096
11097 TYPE_OVERLOADS_METHOD_CALL_EXPR (ref) |= TYPE_OVERLOADS_METHOD_CALL_EXPR (basetype);
11098 TYPE_GETS_NEW (ref) |= TYPE_GETS_NEW (basetype);
11099 TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
11100 CLASSTYPE_LOCAL_TYPEDECLS (ref) |= CLASSTYPE_LOCAL_TYPEDECLS (basetype);
11101 i += 1;
11102 }
11103 }
11104 if (i)
11105 TREE_VEC_LENGTH (binfos) = i;
11106 else
11107 BINFO_BASETYPES (TYPE_BINFO (ref)) = NULL_TREE;
11108
11109 if (i > 1)
11110 TYPE_USES_MULTIPLE_INHERITANCE (ref) = 1;
11111 else if (i == 1)
11112 TYPE_USES_MULTIPLE_INHERITANCE (ref)
11113 = TYPE_USES_MULTIPLE_INHERITANCE (BINFO_TYPE (TREE_VEC_ELT (binfos, 0)));
11114 if (TYPE_USES_MULTIPLE_INHERITANCE (ref))
11115 TYPE_USES_COMPLEX_INHERITANCE (ref) = 1;
11116
11117 /* Unmark all the types. */
11118 while (--i >= 0)
11119 CLEAR_CLASSTYPE_MARKED (BINFO_TYPE (TREE_VEC_ELT (binfos, i)));
11120 CLEAR_CLASSTYPE_MARKED (ref);
11121
11122 pop_obstacks ();
11123 }
11124
11125 \f
11126 tree current_local_enum = NULL_TREE;
11127
11128 /* Begin compiling the definition of an enumeration type.
11129 NAME is its name (or null if anonymous).
11130 Returns the type object, as yet incomplete.
11131 Also records info about it so that build_enumerator
11132 may be used to declare the individual values as they are read. */
11133
11134 tree
11135 start_enum (name)
11136 tree name;
11137 {
11138 register tree enumtype = NULL_TREE;
11139 struct binding_level *b = inner_binding_level;
11140
11141 if (processing_template_decl && current_function_decl)
11142 end_temporary_allocation ();
11143
11144 /* If this is the real definition for a previous forward reference,
11145 fill in the contents in the same object that used to be the
11146 forward reference. */
11147
11148 if (name != NULL_TREE)
11149 enumtype = lookup_tag (ENUMERAL_TYPE, name, b, 1);
11150
11151 if (enumtype != NULL_TREE && TREE_CODE (enumtype) == ENUMERAL_TYPE)
11152 cp_error ("multiple definition of `%#T'", enumtype);
11153 else
11154 {
11155 enumtype = make_node (ENUMERAL_TYPE);
11156 pushtag (name, enumtype, 0);
11157 }
11158
11159 if (b->pseudo_global)
11160 cp_error ("template declaration of `%#T'", enumtype);
11161
11162 if (current_class_type)
11163 TREE_ADDRESSABLE (b->tags) = 1;
11164
11165 current_local_enum = NULL_TREE;
11166
11167 /* We don't copy this value because build_enumerator needs to do it. */
11168 enum_next_value = integer_zero_node;
11169 enum_overflow = 0;
11170
11171 GNU_xref_decl (current_function_decl, enumtype);
11172 return enumtype;
11173 }
11174
11175 /* After processing and defining all the values of an enumeration type,
11176 install their decls in the enumeration type and finish it off.
11177 ENUMTYPE is the type object and VALUES a list of name-value pairs.
11178 Returns ENUMTYPE. */
11179
11180 tree
11181 finish_enum (enumtype, values)
11182 register tree enumtype, values;
11183 {
11184 register tree minnode = NULL_TREE, maxnode = NULL_TREE;
11185 /* Calculate the maximum value of any enumerator in this type. */
11186
11187 if (values)
11188 {
11189 register tree pair;
11190 register tree value = DECL_INITIAL (TREE_VALUE (values));
11191
11192 if (! processing_template_decl)
11193 {
11194 /* Speed up the main loop by performing some precalculations */
11195 TREE_TYPE (TREE_VALUE (values)) = enumtype;
11196 TREE_TYPE (value) = enumtype;
11197 minnode = maxnode = value;
11198 }
11199 TREE_VALUE (values) = value;
11200
11201 for (pair = TREE_CHAIN (values); pair; pair = TREE_CHAIN (pair))
11202 {
11203 value = DECL_INITIAL (TREE_VALUE (pair));
11204 if (! processing_template_decl)
11205 {
11206 TREE_TYPE (TREE_VALUE (pair)) = enumtype;
11207 TREE_TYPE (value) = enumtype;
11208 if (tree_int_cst_lt (maxnode, value))
11209 maxnode = value;
11210 else if (tree_int_cst_lt (value, minnode))
11211 minnode = value;
11212 }
11213 TREE_VALUE (pair) = value;
11214 }
11215 }
11216 else
11217 maxnode = minnode = integer_zero_node;
11218
11219 TYPE_VALUES (enumtype) = nreverse (values);
11220
11221 if (processing_template_decl)
11222 {
11223 if (current_function_decl)
11224 {
11225 add_tree (build_min (TAG_DEFN, enumtype));
11226 resume_temporary_allocation ();
11227 }
11228 return enumtype;
11229 }
11230
11231 {
11232 int unsignedp = tree_int_cst_sgn (minnode) >= 0;
11233 int lowprec = min_precision (minnode, unsignedp);
11234 int highprec = min_precision (maxnode, unsignedp);
11235 int precision = MAX (lowprec, highprec);
11236
11237 TYPE_SIZE (enumtype) = NULL_TREE;
11238
11239 /* Set TYPE_MIN_VALUE and TYPE_MAX_VALUE according to `precision'. */
11240
11241 TYPE_PRECISION (enumtype) = precision;
11242 if (unsignedp)
11243 fixup_unsigned_type (enumtype);
11244 else
11245 fixup_signed_type (enumtype);
11246
11247 if (flag_short_enums || (precision > TYPE_PRECISION (integer_type_node)))
11248 /* Use the width of the narrowest normal C type which is wide enough. */
11249 TYPE_PRECISION (enumtype) = TYPE_PRECISION (type_for_size
11250 (precision, 1));
11251 else
11252 TYPE_PRECISION (enumtype) = TYPE_PRECISION (integer_type_node);
11253
11254 TYPE_SIZE (enumtype) = 0;
11255 layout_type (enumtype);
11256 }
11257
11258 {
11259 register tree tem;
11260
11261 /* Fix up all variant types of this enum type. */
11262 for (tem = TYPE_MAIN_VARIANT (enumtype); tem;
11263 tem = TYPE_NEXT_VARIANT (tem))
11264 {
11265 TYPE_VALUES (tem) = TYPE_VALUES (enumtype);
11266 TYPE_MIN_VALUE (tem) = TYPE_MIN_VALUE (enumtype);
11267 TYPE_MAX_VALUE (tem) = TYPE_MAX_VALUE (enumtype);
11268 TYPE_SIZE (tem) = TYPE_SIZE (enumtype);
11269 TYPE_MODE (tem) = TYPE_MODE (enumtype);
11270 TYPE_PRECISION (tem) = TYPE_PRECISION (enumtype);
11271 TYPE_ALIGN (tem) = TYPE_ALIGN (enumtype);
11272 TREE_UNSIGNED (tem) = TREE_UNSIGNED (enumtype);
11273 }
11274 }
11275
11276 /* Finish debugging output for this type. */
11277 rest_of_type_compilation (enumtype, global_bindings_p ());
11278
11279 return enumtype;
11280 }
11281
11282 /* Build and install a CONST_DECL for one value of the
11283 current enumeration type (one that was begun with start_enum).
11284 Return a tree-list containing the name and its value.
11285 Assignment of sequential values by default is handled here. */
11286
11287 tree
11288 build_enumerator (name, value)
11289 tree name, value;
11290 {
11291 tree decl, result;
11292
11293 /* Remove no-op casts from the value. */
11294 if (value)
11295 STRIP_TYPE_NOPS (value);
11296
11297 if (! processing_template_decl)
11298 {
11299 /* Validate and default VALUE. */
11300 if (value != NULL_TREE)
11301 {
11302 if (TREE_READONLY_DECL_P (value))
11303 value = decl_constant_value (value);
11304
11305 if (TREE_CODE (value) == INTEGER_CST)
11306 {
11307 value = default_conversion (value);
11308 constant_expression_warning (value);
11309 }
11310 else
11311 {
11312 cp_error ("enumerator value for `%D' not integer constant", name);
11313 value = NULL_TREE;
11314 }
11315 }
11316
11317 /* Default based on previous value. */
11318 if (value == NULL_TREE && ! processing_template_decl)
11319 {
11320 value = enum_next_value;
11321 if (enum_overflow)
11322 cp_error ("overflow in enumeration values at `%D'", name);
11323 }
11324
11325 /* Remove no-op casts from the value. */
11326 if (value)
11327 STRIP_TYPE_NOPS (value);
11328
11329 /* We have to always copy here; not all INTEGER_CSTs are unshared,
11330 and there's no wedding ring. Look at size_int()...*/
11331 value = copy_node (value);
11332 #if 0
11333 /* To fix MAX_VAL enum consts. (bkoz) */
11334 TREE_TYPE (value) = integer_type_node;
11335 #endif
11336 }
11337
11338 /* C++ associates enums with global, function, or class declarations. */
11339
11340 decl = current_scope ();
11341 if (decl && decl == current_class_type)
11342 {
11343 /* This enum declaration is local to the class, so we must put
11344 it in that class's list of decls. */
11345 decl = build_lang_field_decl (CONST_DECL, name, integer_type_node);
11346 DECL_INITIAL (decl) = value;
11347 TREE_READONLY (decl) = 1;
11348 pushdecl_class_level (decl);
11349 TREE_CHAIN (decl) = current_local_enum;
11350 current_local_enum = decl;
11351 }
11352 else
11353 {
11354 /* It's a global enum, or it's local to a function. (Note local to
11355 a function could mean local to a class method. */
11356 decl = build_decl (CONST_DECL, name, integer_type_node);
11357 DECL_INITIAL (decl) = value;
11358 TREE_READONLY (decl) = 1;
11359
11360 pushdecl (decl);
11361 GNU_xref_decl (current_function_decl, decl);
11362 }
11363
11364 if (! processing_template_decl)
11365 {
11366 /* Set basis for default for next value. */
11367 enum_next_value = build_binary_op_nodefault (PLUS_EXPR, value,
11368 integer_one_node, PLUS_EXPR);
11369 enum_overflow = tree_int_cst_lt (enum_next_value, value);
11370 }
11371
11372 result = saveable_tree_cons (name, decl, NULL_TREE);
11373 return result;
11374 }
11375
11376 tree
11377 grok_enum_decls (decl)
11378 tree decl;
11379 {
11380 tree d = current_local_enum;
11381
11382 if (d == NULL_TREE)
11383 return decl;
11384
11385 while (1)
11386 {
11387 if (TREE_CHAIN (d) == NULL_TREE)
11388 {
11389 TREE_CHAIN (d) = decl;
11390 break;
11391 }
11392 d = TREE_CHAIN (d);
11393 }
11394
11395 decl = current_local_enum;
11396 current_local_enum = NULL_TREE;
11397
11398 return decl;
11399 }
11400 \f
11401 static int function_depth;
11402
11403 /* Create the FUNCTION_DECL for a function definition.
11404 DECLSPECS and DECLARATOR are the parts of the declaration;
11405 they describe the function's name and the type it returns,
11406 but twisted together in a fashion that parallels the syntax of C.
11407
11408 This function creates a binding context for the function body
11409 as well as setting up the FUNCTION_DECL in current_function_decl.
11410
11411 Returns 1 on success. If the DECLARATOR is not suitable for a function
11412 (it defines a datum instead), we return 0, which tells
11413 yyparse to report a parse error.
11414
11415 For C++, we must first check whether that datum makes any sense.
11416 For example, "class A local_a(1,2);" means that variable local_a
11417 is an aggregate of type A, which should have a constructor
11418 applied to it with the argument list [1, 2].
11419
11420 @@ There is currently no way to retrieve the storage
11421 @@ allocated to FUNCTION (or all of its parms) if we return
11422 @@ something we had previously. */
11423
11424 int
11425 start_function (declspecs, declarator, attrs, pre_parsed_p)
11426 tree declspecs, declarator, attrs;
11427 int pre_parsed_p;
11428 {
11429 tree decl1;
11430 tree ctype = NULL_TREE;
11431 tree fntype;
11432 tree restype;
11433 extern int have_extern_spec;
11434 extern int used_extern_spec;
11435 int doing_friend = 0;
11436
11437 /* Sanity check. */
11438 my_friendly_assert (TREE_VALUE (void_list_node) == void_type_node, 160);
11439 my_friendly_assert (TREE_CHAIN (void_list_node) == NULL_TREE, 161);
11440
11441 /* Assume, until we see it does. */
11442 current_function_returns_value = 0;
11443 current_function_returns_null = 0;
11444 warn_about_return_type = 0;
11445 named_labels = 0;
11446 shadowed_labels = 0;
11447 current_function_assigns_this = 0;
11448 current_function_just_assigned_this = 0;
11449 current_function_parms_stored = 0;
11450 original_result_rtx = NULL_RTX;
11451 base_init_expr = NULL_TREE;
11452 current_base_init_list = NULL_TREE;
11453 current_member_init_list = NULL_TREE;
11454 ctor_label = dtor_label = NULL_TREE;
11455 static_labelno = 0;
11456
11457 clear_temp_name ();
11458
11459 /* This should only be done once on the top most decl. */
11460 if (have_extern_spec && !used_extern_spec)
11461 {
11462 declspecs = decl_tree_cons (NULL_TREE, get_identifier ("extern"), declspecs);
11463 used_extern_spec = 1;
11464 }
11465
11466 if (pre_parsed_p)
11467 {
11468 decl1 = declarator;
11469
11470 if (! DECL_ARGUMENTS (decl1)
11471 && !DECL_STATIC_FUNCTION_P (decl1)
11472 && DECL_CONTEXT (decl1)
11473 && TYPE_IDENTIFIER (DECL_CONTEXT (decl1))
11474 && IDENTIFIER_TEMPLATE (TYPE_IDENTIFIER (DECL_CONTEXT (decl1))))
11475 {
11476 cp_error ("redeclaration of `%#D'", decl1);
11477 if (IDENTIFIER_CLASS_VALUE (DECL_NAME (decl1)))
11478 cp_error_at ("previous declaration here", IDENTIFIER_CLASS_VALUE (DECL_NAME (decl1)));
11479 else if (IDENTIFIER_GLOBAL_VALUE (DECL_NAME (decl1)))
11480 cp_error_at ("previous declaration here", IDENTIFIER_GLOBAL_VALUE (DECL_NAME (decl1)));
11481 }
11482
11483 fntype = TREE_TYPE (decl1);
11484 if (TREE_CODE (fntype) == METHOD_TYPE)
11485 ctype = TYPE_METHOD_BASETYPE (fntype);
11486
11487 /* ANSI C++ June 5 1992 WP 11.4.5. A friend function defined in a
11488 class is in the (lexical) scope of the class in which it is
11489 defined. */
11490 if (!ctype && DECL_FRIEND_P (decl1))
11491 {
11492 ctype = DECL_CLASS_CONTEXT (decl1);
11493
11494 /* CTYPE could be null here if we're dealing with a template;
11495 for example, `inline friend float foo()' inside a template
11496 will have no CTYPE set. */
11497 if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
11498 ctype = NULL_TREE;
11499 else
11500 doing_friend = 1;
11501 }
11502
11503 /* In a fcn definition, arg types must be complete. */
11504 require_complete_types_for_parms (DECL_ARGUMENTS (decl1));
11505
11506 /* In case some arg types were completed since the declaration was
11507 parsed, fix up the decls. */
11508 {
11509 tree t = DECL_ARGUMENTS (decl1);
11510 for (; t; t = TREE_CHAIN (t))
11511 layout_decl (t, 0);
11512 }
11513
11514 last_function_parms = DECL_ARGUMENTS (decl1);
11515 last_function_parm_tags = NULL_TREE;
11516 }
11517 else
11518 {
11519 decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, NULL_TREE);
11520 /* If the declarator is not suitable for a function definition,
11521 cause a syntax error. */
11522 if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL) return 0;
11523
11524 fntype = TREE_TYPE (decl1);
11525
11526 restype = TREE_TYPE (fntype);
11527 if (IS_AGGR_TYPE (restype) && ! TYPE_PTRMEMFUNC_P (restype)
11528 && ! CLASSTYPE_GOT_SEMICOLON (restype))
11529 {
11530 cp_error ("semicolon missing after declaration of `%#T'", restype);
11531 shadow_tag (build_expr_list (NULL_TREE, restype));
11532 CLASSTYPE_GOT_SEMICOLON (restype) = 1;
11533 if (TREE_CODE (fntype) == FUNCTION_TYPE)
11534 fntype = build_function_type (integer_type_node,
11535 TYPE_ARG_TYPES (fntype));
11536 else
11537 fntype = build_cplus_method_type (build_type_variant (TYPE_METHOD_BASETYPE (fntype), TREE_READONLY (decl1), TREE_SIDE_EFFECTS (decl1)),
11538 integer_type_node,
11539 TYPE_ARG_TYPES (fntype));
11540 TREE_TYPE (decl1) = fntype;
11541 }
11542
11543 if (TREE_CODE (fntype) == METHOD_TYPE)
11544 ctype = TYPE_METHOD_BASETYPE (fntype);
11545 else if (IDENTIFIER_LENGTH (DECL_NAME (decl1)) == 4
11546 && ! strcmp (IDENTIFIER_POINTER (DECL_NAME (decl1)), "main")
11547 && DECL_CONTEXT (decl1) == NULL_TREE)
11548 {
11549 /* If this doesn't return integer_type, complain. */
11550 if (TREE_TYPE (TREE_TYPE (decl1)) != integer_type_node)
11551 {
11552 if (pedantic || warn_return_type)
11553 pedwarn ("return type for `main' changed to `int'");
11554 TREE_TYPE (decl1) = fntype = default_function_type;
11555 }
11556 warn_about_return_type = 0;
11557 }
11558 }
11559
11560 /* Warn if function was previously implicitly declared
11561 (but not if we warned then). */
11562 if (! warn_implicit
11563 && IDENTIFIER_IMPLICIT_DECL (DECL_NAME (decl1)) != NULL_TREE)
11564 cp_warning_at ("`%D' implicitly declared before its definition", IDENTIFIER_IMPLICIT_DECL (DECL_NAME (decl1)));
11565
11566 current_function_decl = decl1;
11567 /* Save the parm names or decls from this function's declarator
11568 where store_parm_decls will find them. */
11569 current_function_parms = last_function_parms;
11570 current_function_parm_tags = last_function_parm_tags;
11571
11572 announce_function (decl1);
11573
11574 if (! processing_template_decl)
11575 {
11576 if (TYPE_SIZE (complete_type (TREE_TYPE (fntype))) == NULL_TREE)
11577 {
11578 cp_error ("return-type `%#T' is an incomplete type",
11579 TREE_TYPE (fntype));
11580
11581 /* Make it return void instead, but don't change the
11582 type of the DECL_RESULT, in case we have a named return value. */
11583 if (ctype)
11584 TREE_TYPE (decl1)
11585 = build_cplus_method_type (build_type_variant (ctype,
11586 TREE_READONLY (decl1),
11587 TREE_SIDE_EFFECTS (decl1)),
11588 void_type_node,
11589 FUNCTION_ARG_CHAIN (decl1));
11590 else
11591 TREE_TYPE (decl1)
11592 = build_function_type (void_type_node,
11593 TYPE_ARG_TYPES (TREE_TYPE (decl1)));
11594 DECL_RESULT (decl1)
11595 = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (TREE_TYPE (fntype)));
11596 TREE_READONLY (DECL_RESULT (decl1)) = TYPE_READONLY (TREE_TYPE (fntype));
11597 TREE_THIS_VOLATILE (DECL_RESULT (decl1)) = TYPE_VOLATILE (TREE_TYPE (fntype));
11598 }
11599
11600 if (TYPE_LANG_SPECIFIC (TREE_TYPE (fntype))
11601 && CLASSTYPE_ABSTRACT_VIRTUALS (TREE_TYPE (fntype)))
11602 abstract_virtuals_error (decl1, TREE_TYPE (fntype));
11603 }
11604
11605 if (warn_about_return_type)
11606 pedwarn ("return-type defaults to `int'");
11607
11608 /* Effective C++ rule 15. See also c_expand_return. */
11609 if (warn_ecpp
11610 && DECL_NAME (decl1) == ansi_opname[(int) MODIFY_EXPR]
11611 && TREE_TYPE (fntype) == void_type_node)
11612 cp_warning ("`operator=' should return a reference to `*this'");
11613
11614 /* Make the init_value nonzero so pushdecl knows this is not tentative.
11615 error_mark_node is replaced below (in poplevel) with the BLOCK. */
11616 DECL_INITIAL (decl1) = error_mark_node;
11617
11618 /* This function exists in static storage.
11619 (This does not mean `static' in the C sense!) */
11620 TREE_STATIC (decl1) = 1;
11621
11622 /* Record the decl so that the function name is defined.
11623 If we already have a decl for this name, and it is a FUNCTION_DECL,
11624 use the old decl. */
11625
11626 if (processing_template_decl)
11627 push_template_decl (decl1);
11628 else if (pre_parsed_p == 0)
11629 {
11630 /* A specialization is not used to guide overload resolution. */
11631 if (flag_guiding_decls
11632 || !DECL_TEMPLATE_SPECIALIZATION (decl1))
11633 decl1 = pushdecl (decl1);
11634 DECL_MAIN_VARIANT (decl1) = decl1;
11635 fntype = TREE_TYPE (decl1);
11636 }
11637
11638 current_function_decl = decl1;
11639
11640 if (DECL_INTERFACE_KNOWN (decl1))
11641 {
11642 tree ctx = hack_decl_function_context (decl1);
11643
11644 if (DECL_NOT_REALLY_EXTERN (decl1))
11645 DECL_EXTERNAL (decl1) = 0;
11646
11647 if (ctx != NULL_TREE && DECL_THIS_INLINE (ctx)
11648 && TREE_PUBLIC (ctx))
11649 /* This is a function in a local class in an extern inline
11650 function. */
11651 comdat_linkage (decl1);
11652 }
11653 /* If this function belongs to an interface, it is public.
11654 If it belongs to someone else's interface, it is also external.
11655 It doesn't matter whether it's inline or not. */
11656 else if (interface_unknown == 0
11657 && (! DECL_TEMPLATE_INSTANTIATION (decl1)
11658 || flag_alt_external_templates))
11659 {
11660 if (DECL_THIS_INLINE (decl1) || DECL_TEMPLATE_INSTANTIATION (decl1)
11661 || processing_template_decl)
11662 DECL_EXTERNAL (decl1)
11663 = (interface_only
11664 || (DECL_THIS_INLINE (decl1) && ! flag_implement_inlines));
11665 else
11666 DECL_EXTERNAL (decl1) = 0;
11667 DECL_NOT_REALLY_EXTERN (decl1) = 0;
11668 DECL_INTERFACE_KNOWN (decl1) = 1;
11669 }
11670 else
11671 {
11672 /* This is a definition, not a reference.
11673 So clear DECL_EXTERNAL. */
11674 DECL_EXTERNAL (decl1) = 0;
11675
11676 if ((DECL_THIS_INLINE (decl1) || DECL_TEMPLATE_INSTANTIATION (decl1))
11677 && ! DECL_INTERFACE_KNOWN (decl1)
11678 /* Don't try to defer nested functions for now. */
11679 && ! hack_decl_function_context (decl1))
11680 DECL_DEFER_OUTPUT (decl1) = 1;
11681 else
11682 DECL_INTERFACE_KNOWN (decl1) = 1;
11683 }
11684
11685 if (ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1))
11686 {
11687 if (TREE_CODE (fntype) == METHOD_TYPE)
11688 TREE_TYPE (decl1) = fntype
11689 = build_function_type (TREE_TYPE (fntype),
11690 TREE_CHAIN (TYPE_ARG_TYPES (fntype)));
11691 current_function_parms = TREE_CHAIN (current_function_parms);
11692 DECL_ARGUMENTS (decl1) = current_function_parms;
11693 ctype = NULL_TREE;
11694 }
11695 restype = TREE_TYPE (fntype);
11696
11697 if (ctype)
11698 {
11699 push_nested_class (ctype, 1);
11700
11701 /* If we're compiling a friend function, neither of the variables
11702 current_class_ptr nor current_class_type will have values. */
11703 if (! doing_friend)
11704 {
11705 /* We know that this was set up by `grokclassfn'.
11706 We do not wait until `store_parm_decls', since evil
11707 parse errors may never get us to that point. Here
11708 we keep the consistency between `current_class_type'
11709 and `current_class_ptr'. */
11710 tree t = current_function_parms;
11711
11712 my_friendly_assert (t != NULL_TREE
11713 && TREE_CODE (t) == PARM_DECL, 162);
11714
11715 if (TREE_CODE (TREE_TYPE (t)) == POINTER_TYPE)
11716 {
11717 int i = suspend_momentary ();
11718
11719 /* Fool build_indirect_ref. */
11720 current_class_ptr = NULL_TREE;
11721 current_class_ref = build_indirect_ref (t, NULL_PTR);
11722 current_class_ptr = t;
11723 resume_momentary (i);
11724 }
11725 else
11726 /* We're having a signature pointer here. */
11727 current_class_ref = current_class_ptr = t;
11728
11729 }
11730 }
11731 else
11732 {
11733 if (DECL_STATIC_FUNCTION_P (decl1))
11734 push_nested_class (DECL_CONTEXT (decl1), 2);
11735 else
11736 push_memoized_context (0, 1);
11737 current_class_ptr = current_class_ref = NULL_TREE;
11738 }
11739
11740 pushlevel (0);
11741 current_binding_level->parm_flag = 1;
11742
11743 GNU_xref_function (decl1, current_function_parms);
11744
11745 if (attrs)
11746 cplus_decl_attributes (decl1, NULL_TREE, attrs);
11747 make_function_rtl (decl1);
11748
11749 /* Promote the value to int before returning it. */
11750 if (C_PROMOTING_INTEGER_TYPE_P (restype))
11751 restype = type_promotes_to (restype);
11752
11753 /* If this fcn was already referenced via a block-scope `extern' decl
11754 (or an implicit decl), propagate certain information about the usage. */
11755 if (TREE_ADDRESSABLE (DECL_ASSEMBLER_NAME (decl1)))
11756 TREE_ADDRESSABLE (decl1) = 1;
11757
11758 if (DECL_RESULT (decl1) == NULL_TREE)
11759 {
11760 DECL_RESULT (decl1)
11761 = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (restype));
11762 TREE_READONLY (DECL_RESULT (decl1)) = TYPE_READONLY (restype);
11763 TREE_THIS_VOLATILE (DECL_RESULT (decl1)) = TYPE_VOLATILE (restype);
11764 }
11765
11766 /* Allocate further tree nodes temporarily during compilation
11767 of this function only. Tiemann moved up here from bottom of fn. */
11768 temporary_allocation ();
11769
11770 if (processing_template_decl)
11771 {
11772 ++minimal_parse_mode;
11773 last_tree = DECL_SAVED_TREE (decl1)
11774 = build_nt (EXPR_STMT, void_zero_node);
11775 }
11776
11777 ++function_depth;
11778
11779 if (DESTRUCTOR_NAME_P (DECL_ASSEMBLER_NAME (decl1))
11780 && DECL_LANGUAGE (decl1) == lang_cplusplus)
11781 {
11782 dtor_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
11783 ctor_label = NULL_TREE;
11784 }
11785 else
11786 {
11787 dtor_label = NULL_TREE;
11788 if (DECL_CONSTRUCTOR_P (decl1))
11789 ctor_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
11790 }
11791
11792 return 1;
11793 }
11794 \f
11795 /* Called after store_parm_decls for a function-try-block. We need to update
11796 last_parm_cleanup_insn so that the base initializers for a constructor
11797 are run within this block, not before it. */
11798
11799 void
11800 expand_start_early_try_stmts ()
11801 {
11802 expand_start_try_stmts ();
11803 last_parm_cleanup_insn = get_last_insn ();
11804 }
11805
11806 /* Store the parameter declarations into the current function declaration.
11807 This is called after parsing the parameter declarations, before
11808 digesting the body of the function.
11809
11810 Also install to binding contour return value identifier, if any. */
11811
11812 void
11813 store_parm_decls ()
11814 {
11815 register tree fndecl = current_function_decl;
11816 register tree parm;
11817 int parms_have_cleanups = 0;
11818 tree cleanups = NULL_TREE;
11819
11820 /* This is either a chain of PARM_DECLs (when a prototype is used). */
11821 tree specparms = current_function_parms;
11822
11823 /* This is a list of types declared among parms in a prototype. */
11824 tree parmtags = current_function_parm_tags;
11825
11826 /* This is a chain of any other decls that came in among the parm
11827 declarations. If a parm is declared with enum {foo, bar} x;
11828 then CONST_DECLs for foo and bar are put here. */
11829 tree nonparms = NULL_TREE;
11830
11831 if (toplevel_bindings_p ())
11832 fatal ("parse errors have confused me too much");
11833
11834 /* Initialize RTL machinery. */
11835 init_function_start (fndecl, input_filename, lineno);
11836
11837 /* Declare __FUNCTION__ and __PRETTY_FUNCTION__ for this function. */
11838 declare_function_name ();
11839
11840 /* Create a binding level for the parms. */
11841 expand_start_bindings (0);
11842
11843 if (specparms != NULL_TREE)
11844 {
11845 /* This case is when the function was defined with an ANSI prototype.
11846 The parms already have decls, so we need not do anything here
11847 except record them as in effect
11848 and complain if any redundant old-style parm decls were written. */
11849
11850 register tree next;
11851
11852 /* Must clear this because it might contain TYPE_DECLs declared
11853 at class level. */
11854 storedecls (NULL_TREE);
11855
11856 for (parm = nreverse (specparms); parm; parm = next)
11857 {
11858 next = TREE_CHAIN (parm);
11859 if (TREE_CODE (parm) == PARM_DECL)
11860 {
11861 tree cleanup;
11862 if (DECL_NAME (parm) == NULL_TREE)
11863 {
11864 pushdecl (parm);
11865 }
11866 else if (TYPE_MAIN_VARIANT (TREE_TYPE (parm)) == void_type_node)
11867 cp_error ("parameter `%D' declared void", parm);
11868 else
11869 {
11870 /* Now fill in DECL_REFERENCE_SLOT for any of the parm decls.
11871 A parameter is assumed not to have any side effects.
11872 If this should change for any reason, then this
11873 will have to wrap the bashed reference type in a save_expr.
11874
11875 Also, if the parameter type is declared to be an X
11876 and there is an X(X&) constructor, we cannot lay it
11877 into the stack (any more), so we make this parameter
11878 look like it is really of reference type. Functions
11879 which pass parameters to this function will know to
11880 create a temporary in their frame, and pass a reference
11881 to that. */
11882
11883 if (TREE_CODE (TREE_TYPE (parm)) == REFERENCE_TYPE
11884 && TYPE_SIZE (TREE_TYPE (TREE_TYPE (parm))))
11885 SET_DECL_REFERENCE_SLOT (parm, convert_from_reference (parm));
11886
11887 pushdecl (parm);
11888 }
11889 if (! processing_template_decl
11890 && (cleanup = maybe_build_cleanup (parm), cleanup))
11891 {
11892 expand_decl (parm);
11893 parms_have_cleanups = 1;
11894
11895 /* Keep track of the cleanups. */
11896 cleanups = tree_cons (parm, cleanup, cleanups);
11897 }
11898 }
11899 else
11900 {
11901 /* If we find an enum constant or a type tag,
11902 put it aside for the moment. */
11903 TREE_CHAIN (parm) = NULL_TREE;
11904 nonparms = chainon (nonparms, parm);
11905 }
11906 }
11907
11908 /* Get the decls in their original chain order
11909 and record in the function. This is all and only the
11910 PARM_DECLs that were pushed into scope by the loop above. */
11911 DECL_ARGUMENTS (fndecl) = getdecls ();
11912
11913 storetags (chainon (parmtags, gettags ()));
11914 }
11915 else
11916 DECL_ARGUMENTS (fndecl) = NULL_TREE;
11917
11918 /* Now store the final chain of decls for the arguments
11919 as the decl-chain of the current lexical scope.
11920 Put the enumerators in as well, at the front so that
11921 DECL_ARGUMENTS is not modified. */
11922
11923 storedecls (chainon (nonparms, DECL_ARGUMENTS (fndecl)));
11924
11925 /* Initialize the RTL code for the function. */
11926 DECL_SAVED_INSNS (fndecl) = NULL_RTX;
11927 if (! processing_template_decl)
11928 expand_function_start (fndecl, parms_have_cleanups);
11929
11930 current_function_parms_stored = 1;
11931
11932 /* If this function is `main', emit a call to `__main'
11933 to run global initializers, etc. */
11934 if (DECL_NAME (fndecl)
11935 && IDENTIFIER_LENGTH (DECL_NAME (fndecl)) == 4
11936 && strcmp (IDENTIFIER_POINTER (DECL_NAME (fndecl)), "main") == 0
11937 && DECL_CONTEXT (fndecl) == NULL_TREE)
11938 {
11939 expand_main_function ();
11940 }
11941
11942 /* Now that we have initialized the parms, we can start their
11943 cleanups. We cannot do this before, since expand_decl_cleanup
11944 should not be called before the parm can be used. */
11945 if (cleanups
11946 && ! processing_template_decl)
11947 {
11948 for (cleanups = nreverse (cleanups); cleanups; cleanups = TREE_CHAIN (cleanups))
11949 {
11950 if (! expand_decl_cleanup (TREE_PURPOSE (cleanups), TREE_VALUE (cleanups)))
11951 cp_error ("parser lost in parsing declaration of `%D'",
11952 TREE_PURPOSE (cleanups));
11953 }
11954 }
11955
11956 /* Create a binding contour which can be used to catch
11957 cleanup-generated temporaries. Also, if the return value needs or
11958 has initialization, deal with that now. */
11959 if (parms_have_cleanups)
11960 {
11961 pushlevel (0);
11962 expand_start_bindings (0);
11963 }
11964
11965 if (! processing_template_decl && flag_exceptions)
11966 {
11967 /* Do the starting of the exception specifications, if we have any. */
11968 if (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (current_function_decl)))
11969 expand_start_eh_spec ();
11970 }
11971
11972 last_parm_cleanup_insn = get_last_insn ();
11973 last_dtor_insn = get_last_insn ();
11974 }
11975
11976 /* Bind a name and initialization to the return value of
11977 the current function. */
11978
11979 void
11980 store_return_init (return_id, init)
11981 tree return_id, init;
11982 {
11983 tree decl = DECL_RESULT (current_function_decl);
11984
11985 if (pedantic)
11986 /* Give this error as many times as there are occurrences,
11987 so that users can use Emacs compilation buffers to find
11988 and fix all such places. */
11989 pedwarn ("ANSI C++ does not permit named return values");
11990
11991 if (return_id != NULL_TREE)
11992 {
11993 if (DECL_NAME (decl) == NULL_TREE)
11994 {
11995 DECL_NAME (decl) = return_id;
11996 DECL_ASSEMBLER_NAME (decl) = return_id;
11997 }
11998 else
11999 cp_error ("return identifier `%D' already in place", decl);
12000 }
12001
12002 /* Can't let this happen for constructors. */
12003 if (DECL_CONSTRUCTOR_P (current_function_decl))
12004 {
12005 error ("can't redefine default return value for constructors");
12006 return;
12007 }
12008
12009 /* If we have a named return value, put that in our scope as well. */
12010 if (DECL_NAME (decl) != NULL_TREE)
12011 {
12012 /* If this named return value comes in a register,
12013 put it in a pseudo-register. */
12014 if (DECL_REGISTER (decl))
12015 {
12016 original_result_rtx = DECL_RTL (decl);
12017 DECL_RTL (decl) = gen_reg_rtx (DECL_MODE (decl));
12018 }
12019
12020 /* Let `cp_finish_decl' know that this initializer is ok. */
12021 DECL_INITIAL (decl) = init;
12022 pushdecl (decl);
12023
12024 if (minimal_parse_mode)
12025 add_tree (build_min_nt (RETURN_INIT, return_id,
12026 copy_to_permanent (init)));
12027 else
12028 cp_finish_decl (decl, init, NULL_TREE, 0, 0);
12029 }
12030 }
12031
12032 \f
12033 /* Finish up a function declaration and compile that function
12034 all the way to assembler language output. The free the storage
12035 for the function definition.
12036
12037 This is called after parsing the body of the function definition.
12038 LINENO is the current line number.
12039
12040 C++: CALL_POPLEVEL is non-zero if an extra call to poplevel
12041 (and expand_end_bindings) must be made to take care of the binding
12042 contour for the base initializers. This is only relevant for
12043 constructors.
12044
12045 NESTED is nonzero if we were in the middle of compiling another function
12046 when we started on this one. */
12047
12048 void
12049 finish_function (lineno, call_poplevel, nested)
12050 int lineno;
12051 int call_poplevel;
12052 int nested;
12053 {
12054 register tree fndecl = current_function_decl;
12055 tree fntype, ctype = NULL_TREE;
12056 rtx last_parm_insn, insns;
12057 /* Label to use if this function is supposed to return a value. */
12058 tree no_return_label = NULL_TREE;
12059 tree decls = NULL_TREE;
12060
12061 /* When we get some parse errors, we can end up without a
12062 current_function_decl, so cope. */
12063 if (fndecl == NULL_TREE)
12064 return;
12065
12066 if (! nested && function_depth > 1)
12067 nested = 1;
12068
12069 fntype = TREE_TYPE (fndecl);
12070
12071 /* TREE_READONLY (fndecl) = 1;
12072 This caused &foo to be of type ptr-to-const-function
12073 which then got a warning when stored in a ptr-to-function variable. */
12074
12075 /* This happens on strange parse errors. */
12076 if (! current_function_parms_stored)
12077 {
12078 call_poplevel = 0;
12079 store_parm_decls ();
12080 }
12081
12082 if (processing_template_decl)
12083 {
12084 if (DECL_CONSTRUCTOR_P (fndecl) && call_poplevel)
12085 {
12086 decls = getdecls ();
12087 expand_end_bindings (decls, decls != NULL_TREE, 0);
12088 poplevel (decls != NULL_TREE, 0, 0);
12089 }
12090 }
12091 else
12092 {
12093 if (write_symbols != NO_DEBUG /*&& TREE_CODE (fntype) != METHOD_TYPE*/)
12094 {
12095 tree ttype = target_type (fntype);
12096 tree parmdecl;
12097
12098 if (IS_AGGR_TYPE (ttype))
12099 /* Let debugger know it should output info for this type. */
12100 note_debug_info_needed (ttype);
12101
12102 for (parmdecl = DECL_ARGUMENTS (fndecl); parmdecl; parmdecl = TREE_CHAIN (parmdecl))
12103 {
12104 ttype = target_type (TREE_TYPE (parmdecl));
12105 if (IS_AGGR_TYPE (ttype))
12106 /* Let debugger know it should output info for this type. */
12107 note_debug_info_needed (ttype);
12108 }
12109 }
12110
12111 /* Clean house because we will need to reorder insns here. */
12112 do_pending_stack_adjust ();
12113
12114 if (dtor_label)
12115 {
12116 tree binfo = TYPE_BINFO (current_class_type);
12117 tree cond = integer_one_node;
12118 tree exprstmt;
12119 tree in_charge_node = lookup_name (in_charge_identifier, 0);
12120 tree virtual_size;
12121 int ok_to_optimize_dtor = 0;
12122 int empty_dtor = get_last_insn () == last_dtor_insn;
12123
12124 if (current_function_assigns_this)
12125 cond = build (NE_EXPR, boolean_type_node,
12126 current_class_ptr, integer_zero_node);
12127 else
12128 {
12129 int n_baseclasses = CLASSTYPE_N_BASECLASSES (current_class_type);
12130
12131 /* If this destructor is empty, then we don't need to check
12132 whether `this' is NULL in some cases. */
12133 if ((flag_this_is_variable & 1) == 0)
12134 ok_to_optimize_dtor = 1;
12135 else if (empty_dtor)
12136 ok_to_optimize_dtor
12137 = (n_baseclasses == 0
12138 || (n_baseclasses == 1
12139 && TYPE_HAS_DESTRUCTOR (TYPE_BINFO_BASETYPE (current_class_type, 0))));
12140 }
12141
12142 /* These initializations might go inline. Protect
12143 the binding level of the parms. */
12144 pushlevel (0);
12145 expand_start_bindings (0);
12146
12147 if (current_function_assigns_this)
12148 {
12149 current_function_assigns_this = 0;
12150 current_function_just_assigned_this = 0;
12151 }
12152
12153 /* Generate the code to call destructor on base class.
12154 If this destructor belongs to a class with virtual
12155 functions, then set the virtual function table
12156 pointer to represent the type of our base class. */
12157
12158 /* This side-effect makes call to `build_delete' generate the
12159 code we have to have at the end of this destructor. */
12160 TYPE_HAS_DESTRUCTOR (current_class_type) = 0;
12161
12162 /* These are two cases where we cannot delegate deletion. */
12163 if (TYPE_USES_VIRTUAL_BASECLASSES (current_class_type)
12164 || TYPE_GETS_REG_DELETE (current_class_type))
12165 exprstmt = build_delete (current_class_type, current_class_ref, integer_zero_node,
12166 LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR|LOOKUP_NORMAL, 0);
12167 else
12168 exprstmt = build_delete (current_class_type, current_class_ref, in_charge_node,
12169 LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR|LOOKUP_NORMAL, 0);
12170
12171 /* If we did not assign to this, then `this' is non-zero at
12172 the end of a destructor. As a special optimization, don't
12173 emit test if this is an empty destructor. If it does nothing,
12174 it does nothing. If it calls a base destructor, the base
12175 destructor will perform the test. */
12176
12177 if (exprstmt != error_mark_node
12178 && (TREE_CODE (exprstmt) != NOP_EXPR
12179 || TREE_OPERAND (exprstmt, 0) != integer_zero_node
12180 || TYPE_USES_VIRTUAL_BASECLASSES (current_class_type)))
12181 {
12182 expand_label (dtor_label);
12183 if (cond != integer_one_node)
12184 expand_start_cond (cond, 0);
12185 if (exprstmt != void_zero_node)
12186 /* Don't call `expand_expr_stmt' if we're not going to do
12187 anything, since -Wall will give a diagnostic. */
12188 expand_expr_stmt (exprstmt);
12189
12190 /* Run destructor on all virtual baseclasses. */
12191 if (TYPE_USES_VIRTUAL_BASECLASSES (current_class_type))
12192 {
12193 tree vbases = nreverse (copy_list (CLASSTYPE_VBASECLASSES (current_class_type)));
12194 expand_start_cond (build (BIT_AND_EXPR, integer_type_node,
12195 in_charge_node, integer_two_node), 0);
12196 while (vbases)
12197 {
12198 if (TYPE_NEEDS_DESTRUCTOR (BINFO_TYPE (vbases)))
12199 {
12200 tree vb = get_vbase
12201 (BINFO_TYPE (vbases),
12202 TYPE_BINFO (current_class_type));
12203 expand_expr_stmt
12204 (build_scoped_method_call
12205 (current_class_ref, vb, dtor_identifier,
12206 build_expr_list (NULL_TREE, integer_zero_node)));
12207 }
12208 vbases = TREE_CHAIN (vbases);
12209 }
12210 expand_end_cond ();
12211 }
12212
12213 do_pending_stack_adjust ();
12214 if (cond != integer_one_node)
12215 expand_end_cond ();
12216 }
12217
12218 TYPE_HAS_DESTRUCTOR (current_class_type) = 1;
12219
12220 virtual_size = c_sizeof (current_class_type);
12221
12222 /* At the end, call delete if that's what's requested. */
12223 if (TYPE_GETS_REG_DELETE (current_class_type))
12224 /* This NOP_EXPR means we are in a static call context. */
12225 exprstmt
12226 = build_method_call (build_indirect_ref (build1 (NOP_EXPR,
12227 build_pointer_type (current_class_type),
12228 error_mark_node),
12229 NULL_PTR),
12230 ansi_opname[(int) DELETE_EXPR],
12231 expr_tree_cons (NULL_TREE, current_class_ptr,
12232 build_expr_list (NULL_TREE, virtual_size)),
12233 NULL_TREE, LOOKUP_NORMAL);
12234 else if (TYPE_USES_VIRTUAL_BASECLASSES (current_class_type))
12235 exprstmt = build_x_delete (ptr_type_node, current_class_ptr, 0,
12236 virtual_size);
12237 else
12238 exprstmt = NULL_TREE;
12239
12240 if (exprstmt)
12241 {
12242 cond = build (BIT_AND_EXPR, integer_type_node,
12243 in_charge_node, integer_one_node);
12244 expand_start_cond (cond, 0);
12245 expand_expr_stmt (exprstmt);
12246 expand_end_cond ();
12247 }
12248
12249 /* End of destructor. */
12250 expand_end_bindings (NULL_TREE, getdecls () != NULL_TREE, 0);
12251 poplevel (2, 0, 0); /* XXX change to 1 */
12252
12253 /* Back to the top of destructor. */
12254 /* Don't execute destructor code if `this' is NULL. */
12255
12256 start_sequence ();
12257
12258 /* If the dtor is empty, and we know there is not possible way we
12259 could use any vtable entries, before they are possibly set by
12260 a base class dtor, we don't have to setup the vtables, as we
12261 know that any base class dtoring will set up any vtables it
12262 needs. We avoid MI, because one base class dtor can do a
12263 virtual dispatch to an overridden function that would need to
12264 have a non-related vtable set up, we cannot avoid setting up
12265 vtables in that case. We could change this to see if there is
12266 just one vtable. */
12267 if (! empty_dtor || TYPE_USES_COMPLEX_INHERITANCE (current_class_type))
12268 {
12269 /* Make all virtual function table pointers in non-virtual base
12270 classes point to CURRENT_CLASS_TYPE's virtual function
12271 tables. */
12272 expand_direct_vtbls_init (binfo, binfo, 1, 0, current_class_ptr);
12273
12274 if (TYPE_USES_VIRTUAL_BASECLASSES (current_class_type))
12275 expand_indirect_vtbls_init (binfo, current_class_ref, current_class_ptr);
12276 }
12277
12278 if (! ok_to_optimize_dtor)
12279 {
12280 cond = build_binary_op (NE_EXPR,
12281 current_class_ptr, integer_zero_node, 1);
12282 expand_start_cond (cond, 0);
12283 }
12284
12285 insns = get_insns ();
12286 end_sequence ();
12287
12288 last_parm_insn = get_first_nonparm_insn ();
12289 if (last_parm_insn == NULL_RTX)
12290 last_parm_insn = get_last_insn ();
12291 else
12292 last_parm_insn = previous_insn (last_parm_insn);
12293
12294 emit_insns_after (insns, last_parm_insn);
12295
12296 if (! ok_to_optimize_dtor)
12297 expand_end_cond ();
12298 }
12299 else if (current_function_assigns_this)
12300 {
12301 /* Does not need to call emit_base_init, because
12302 that is done (if needed) just after assignment to this
12303 is seen. */
12304
12305 if (DECL_CONSTRUCTOR_P (current_function_decl))
12306 {
12307 end_protect_partials ();
12308 expand_label (ctor_label);
12309 ctor_label = NULL_TREE;
12310
12311 if (call_poplevel)
12312 {
12313 decls = getdecls ();
12314 expand_end_bindings (decls, decls != NULL_TREE, 0);
12315 poplevel (decls != NULL_TREE, 0, 0);
12316 }
12317 c_expand_return (current_class_ptr);
12318 }
12319 else if (TYPE_MAIN_VARIANT (TREE_TYPE (
12320 DECL_RESULT (current_function_decl))) != void_type_node
12321 && return_label != NULL_RTX)
12322 no_return_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
12323
12324 current_function_assigns_this = 0;
12325 current_function_just_assigned_this = 0;
12326 base_init_expr = NULL_TREE;
12327 }
12328 else if (DECL_CONSTRUCTOR_P (fndecl))
12329 {
12330 tree cond = NULL_TREE, thenclause = NULL_TREE;
12331 /* Allow constructor for a type to get a new instance of the object
12332 using `build_new'. */
12333 tree abstract_virtuals = CLASSTYPE_ABSTRACT_VIRTUALS (current_class_type);
12334 CLASSTYPE_ABSTRACT_VIRTUALS (current_class_type) = NULL_TREE;
12335
12336 DECL_RETURNS_FIRST_ARG (fndecl) = 1;
12337
12338 if (flag_this_is_variable > 0)
12339 {
12340 cond = build_binary_op (EQ_EXPR,
12341 current_class_ptr, integer_zero_node, 1);
12342 thenclause = build_modify_expr (current_class_ptr, NOP_EXPR,
12343 build_new (NULL_TREE, current_class_type, void_type_node, 0));
12344 }
12345
12346 CLASSTYPE_ABSTRACT_VIRTUALS (current_class_type) = abstract_virtuals;
12347
12348 start_sequence ();
12349
12350 if (flag_this_is_variable > 0)
12351 {
12352 expand_start_cond (cond, 0);
12353 expand_expr_stmt (thenclause);
12354 expand_end_cond ();
12355 }
12356
12357 /* Emit insns from `emit_base_init' which sets up virtual
12358 function table pointer(s). */
12359 if (base_init_expr)
12360 {
12361 expand_expr_stmt (base_init_expr);
12362 base_init_expr = NULL_TREE;
12363 }
12364
12365 insns = get_insns ();
12366 end_sequence ();
12367
12368 /* This is where the body of the constructor begins. */
12369
12370 emit_insns_after (insns, last_parm_cleanup_insn);
12371
12372 end_protect_partials ();
12373
12374 /* This is where the body of the constructor ends. */
12375 expand_label (ctor_label);
12376 ctor_label = NULL_TREE;
12377
12378 if (call_poplevel)
12379 {
12380 decls = getdecls ();
12381 expand_end_bindings (decls, decls != NULL_TREE, 0);
12382 poplevel (decls != NULL_TREE, 1, 0);
12383 }
12384
12385 c_expand_return (current_class_ptr);
12386
12387 current_function_assigns_this = 0;
12388 current_function_just_assigned_this = 0;
12389 }
12390 else if (IDENTIFIER_LENGTH (DECL_NAME (fndecl)) == 4
12391 && ! strcmp (IDENTIFIER_POINTER (DECL_NAME (fndecl)), "main")
12392 && DECL_CONTEXT (fndecl) == NULL_TREE)
12393 {
12394 /* Make it so that `main' always returns 0 by default. */
12395 #ifdef VMS
12396 c_expand_return (integer_one_node);
12397 #else
12398 c_expand_return (integer_zero_node);
12399 #endif
12400 }
12401 else if (return_label != NULL_RTX
12402 && current_function_return_value == NULL_TREE
12403 && ! DECL_NAME (DECL_RESULT (current_function_decl)))
12404 no_return_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
12405
12406 if (flag_exceptions)
12407 expand_exception_blocks ();
12408
12409 /* If this function is supposed to return a value, ensure that
12410 we do not fall into the cleanups by mistake. The end of our
12411 function will look like this:
12412
12413 user code (may have return stmt somewhere)
12414 goto no_return_label
12415 cleanup_label:
12416 cleanups
12417 goto return_label
12418 no_return_label:
12419 NOTE_INSN_FUNCTION_END
12420 return_label:
12421 things for return
12422
12423 If the user omits a return stmt in the USER CODE section, we
12424 will have a control path which reaches NOTE_INSN_FUNCTION_END.
12425 Otherwise, we won't. */
12426 if (no_return_label)
12427 {
12428 DECL_CONTEXT (no_return_label) = fndecl;
12429 DECL_INITIAL (no_return_label) = error_mark_node;
12430 DECL_SOURCE_FILE (no_return_label) = input_filename;
12431 DECL_SOURCE_LINE (no_return_label) = lineno;
12432 expand_goto (no_return_label);
12433 }
12434
12435 if (cleanup_label)
12436 {
12437 /* remove the binding contour which is used
12438 to catch cleanup-generated temporaries. */
12439 expand_end_bindings (0, 0, 0);
12440 poplevel (0, 0, 0);
12441
12442 /* Emit label at beginning of cleanup code for parameters. */
12443 emit_label (cleanup_label);
12444 }
12445
12446 /* Get return value into register if that's where it's supposed to be. */
12447 if (original_result_rtx)
12448 fixup_result_decl (DECL_RESULT (fndecl), original_result_rtx);
12449
12450 /* Finish building code that will trigger warnings if users forget
12451 to make their functions return values. */
12452 if (no_return_label || cleanup_label)
12453 emit_jump (return_label);
12454 if (no_return_label)
12455 {
12456 /* We don't need to call `expand_*_return' here because we
12457 don't need any cleanups here--this path of code is only
12458 for error checking purposes. */
12459 expand_label (no_return_label);
12460 }
12461
12462 /* Generate rtl for function exit. */
12463 expand_function_end (input_filename, lineno, 1);
12464 }
12465
12466 /* This must come after expand_function_end because cleanups might
12467 have declarations (from inline functions) that need to go into
12468 this function's blocks. */
12469 if (current_binding_level->parm_flag != 1)
12470 my_friendly_abort (122);
12471 poplevel (1, 0, 1);
12472
12473 /* reset scope for C++: if we were in the scope of a class,
12474 then when we finish this function, we are not longer so.
12475 This cannot be done until we know for sure that no more
12476 class members will ever be referenced in this function
12477 (i.e., calls to destructors). */
12478 if (current_class_name)
12479 {
12480 ctype = current_class_type;
12481 pop_nested_class (1);
12482 }
12483 else
12484 pop_memoized_context (1);
12485
12486 /* Must mark the RESULT_DECL as being in this function. */
12487 DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
12488
12489 /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
12490 to the FUNCTION_DECL node itself. */
12491 BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
12492
12493 if (! processing_template_decl)
12494 {
12495 int saved_flag_keep_inline_functions =
12496 flag_keep_inline_functions;
12497
12498 /* So we can tell if jump_optimize sets it to 1. */
12499 can_reach_end = 0;
12500
12501 if (DECL_CONTEXT (fndecl) != NULL_TREE
12502 && hack_decl_function_context (fndecl))
12503 /* Trick rest_of_compilation into not deferring output of this
12504 function, even if it is inline, since the rtl_obstack for
12505 this function is the function_obstack of the enclosing
12506 function and will be deallocated when the enclosing
12507 function is gone. See save_tree_status. */
12508 flag_keep_inline_functions = 1;
12509
12510 /* Run the optimizers and output the assembler code for this
12511 function. */
12512
12513 if (DECL_ARTIFICIAL (fndecl))
12514 {
12515 /* Do we really *want* to inline this synthesized method? */
12516
12517 int save_fif = flag_inline_functions;
12518 flag_inline_functions = 1;
12519
12520 /* Turn off DECL_INLINE for the moment so function_cannot_inline_p
12521 will check our size. */
12522 DECL_INLINE (fndecl) = 0;
12523
12524 rest_of_compilation (fndecl);
12525 flag_inline_functions = save_fif;
12526 }
12527 else
12528 rest_of_compilation (fndecl);
12529
12530 flag_keep_inline_functions = saved_flag_keep_inline_functions;
12531
12532 if (DECL_SAVED_INSNS (fndecl) && ! TREE_ASM_WRITTEN (fndecl))
12533 {
12534 /* Set DECL_EXTERNAL so that assemble_external will be called as
12535 necessary. We'll clear it again in finish_file. */
12536 if (! DECL_EXTERNAL (fndecl))
12537 DECL_NOT_REALLY_EXTERN (fndecl) = 1;
12538 DECL_EXTERNAL (fndecl) = 1;
12539 mark_inline_for_output (fndecl);
12540 }
12541
12542 if (ctype && TREE_ASM_WRITTEN (fndecl))
12543 note_debug_info_needed (ctype);
12544
12545 current_function_returns_null |= can_reach_end;
12546
12547 /* Since we don't normally go through c_expand_return for constructors,
12548 this normally gets the wrong value.
12549 Also, named return values have their return codes emitted after
12550 NOTE_INSN_FUNCTION_END, confusing jump.c. */
12551 if (DECL_CONSTRUCTOR_P (fndecl)
12552 || DECL_NAME (DECL_RESULT (fndecl)) != NULL_TREE)
12553 current_function_returns_null = 0;
12554
12555 if (TREE_THIS_VOLATILE (fndecl) && current_function_returns_null)
12556 cp_warning ("`noreturn' function `%D' does return", fndecl);
12557 else if ((warn_return_type || pedantic)
12558 && current_function_returns_null
12559 && TYPE_MAIN_VARIANT (TREE_TYPE (fntype)) != void_type_node)
12560 {
12561 /* If this function returns non-void and control can drop through,
12562 complain. */
12563 cp_warning ("control reaches end of non-void function `%D'", fndecl);
12564 }
12565 /* With just -W, complain only if function returns both with
12566 and without a value. */
12567 else if (extra_warnings
12568 && current_function_returns_value && current_function_returns_null)
12569 warning ("this function may return with or without a value");
12570 }
12571
12572 --function_depth;
12573
12574 /* Free all the tree nodes making up this function. */
12575 /* Switch back to allocating nodes permanently
12576 until we start another function. */
12577 if (processing_template_decl)
12578 {
12579 --minimal_parse_mode;
12580 DECL_SAVED_TREE (fndecl) = TREE_CHAIN (DECL_SAVED_TREE (fndecl));
12581 }
12582
12583 if (! nested)
12584 permanent_allocation (1);
12585
12586 if (DECL_SAVED_INSNS (fndecl) == NULL_RTX)
12587 {
12588 tree t;
12589
12590 /* Stop pointing to the local nodes about to be freed. */
12591 /* But DECL_INITIAL must remain nonzero so we know this
12592 was an actual function definition. */
12593 DECL_INITIAL (fndecl) = error_mark_node;
12594 for (t = DECL_ARGUMENTS (fndecl); t; t = TREE_CHAIN (t))
12595 DECL_RTL (t) = DECL_INCOMING_RTL (t) = NULL_RTX;
12596 }
12597
12598 if (DECL_STATIC_CONSTRUCTOR (fndecl))
12599 static_ctors = perm_tree_cons (NULL_TREE, fndecl, static_ctors);
12600 if (DECL_STATIC_DESTRUCTOR (fndecl))
12601 static_dtors = perm_tree_cons (NULL_TREE, fndecl, static_dtors);
12602
12603 if (! nested)
12604 {
12605 /* Let the error reporting routines know that we're outside a
12606 function. For a nested function, this value is used in
12607 pop_cp_function_context and then reset via pop_function_context. */
12608 current_function_decl = NULL_TREE;
12609 }
12610
12611 named_label_uses = NULL;
12612 current_class_ptr = NULL_TREE;
12613 current_class_ref = NULL_TREE;
12614 }
12615 \f
12616 /* Create the FUNCTION_DECL for a function definition.
12617 LINE1 is the line number that the definition absolutely begins on.
12618 LINE2 is the line number that the name of the function appears on.
12619 DECLSPECS and DECLARATOR are the parts of the declaration;
12620 they describe the return type and the name of the function,
12621 but twisted together in a fashion that parallels the syntax of C.
12622
12623 This function creates a binding context for the function body
12624 as well as setting up the FUNCTION_DECL in current_function_decl.
12625
12626 Returns a FUNCTION_DECL on success.
12627
12628 If the DECLARATOR is not suitable for a function (it defines a datum
12629 instead), we return 0, which tells yyparse to report a parse error.
12630
12631 May return void_type_node indicating that this method is actually
12632 a friend. See grokfield for more details.
12633
12634 Came here with a `.pushlevel' .
12635
12636 DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
12637 CHANGES TO CODE IN `grokfield'. */
12638
12639 tree
12640 start_method (declspecs, declarator)
12641 tree declarator, declspecs;
12642 {
12643 tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
12644 NULL_TREE);
12645
12646 /* Something too ugly to handle. */
12647 if (fndecl == NULL_TREE)
12648 return NULL_TREE;
12649
12650 /* Pass friends other than inline friend functions back. */
12651 if (TYPE_MAIN_VARIANT (fndecl) == void_type_node)
12652 return fndecl;
12653
12654 if (TREE_CODE (fndecl) != FUNCTION_DECL)
12655 /* Not a function, tell parser to report parse error. */
12656 return NULL_TREE;
12657
12658 if (IS_SIGNATURE (current_class_type))
12659 IS_DEFAULT_IMPLEMENTATION (fndecl) = 1;
12660
12661 if (DECL_IN_AGGR_P (fndecl))
12662 {
12663 if (IDENTIFIER_ERROR_LOCUS (DECL_ASSEMBLER_NAME (fndecl)) != current_class_type)
12664 {
12665 if (DECL_CONTEXT (fndecl))
12666 cp_error ("`%D' is already defined in class %s", fndecl,
12667 TYPE_NAME_STRING (DECL_CONTEXT (fndecl)));
12668 }
12669 return void_type_node;
12670 }
12671
12672 DECL_THIS_INLINE (fndecl) = 1;
12673
12674 if (flag_default_inline)
12675 DECL_INLINE (fndecl) = 1;
12676
12677 if (processing_template_decl)
12678 push_template_decl (fndecl);
12679
12680 /* We read in the parameters on the maybepermanent_obstack,
12681 but we won't be getting back to them until after we
12682 may have clobbered them. So the call to preserve_data
12683 will keep them safe. */
12684 preserve_data ();
12685
12686 if (! DECL_FRIEND_P (fndecl))
12687 {
12688 if (DECL_CHAIN (fndecl) != NULL_TREE)
12689 {
12690 /* Need a fresh node here so that we don't get circularity
12691 when we link these together. If FNDECL was a friend, then
12692 `pushdecl' does the right thing, which is nothing wrt its
12693 current value of DECL_CHAIN. */
12694 fndecl = copy_node (fndecl);
12695 }
12696 if (TREE_CHAIN (fndecl))
12697 {
12698 fndecl = copy_node (fndecl);
12699 TREE_CHAIN (fndecl) = NULL_TREE;
12700 }
12701
12702 if (DECL_CONSTRUCTOR_P (fndecl))
12703 {
12704 if (! grok_ctor_properties (current_class_type, fndecl))
12705 return void_type_node;
12706 }
12707 else if (IDENTIFIER_OPNAME_P (DECL_NAME (fndecl)))
12708 grok_op_properties (fndecl, DECL_VIRTUAL_P (fndecl), 0);
12709 }
12710
12711 cp_finish_decl (fndecl, NULL_TREE, NULL_TREE, 0, 0);
12712
12713 /* Make a place for the parms */
12714 pushlevel (0);
12715 current_binding_level->parm_flag = 1;
12716
12717 DECL_IN_AGGR_P (fndecl) = 1;
12718 return fndecl;
12719 }
12720
12721 /* Go through the motions of finishing a function definition.
12722 We don't compile this method until after the whole class has
12723 been processed.
12724
12725 FINISH_METHOD must return something that looks as though it
12726 came from GROKFIELD (since we are defining a method, after all).
12727
12728 This is called after parsing the body of the function definition.
12729 STMTS is the chain of statements that makes up the function body.
12730
12731 DECL is the ..._DECL that `start_method' provided. */
12732
12733 tree
12734 finish_method (decl)
12735 tree decl;
12736 {
12737 register tree fndecl = decl;
12738 tree old_initial;
12739
12740 register tree link;
12741
12742 if (TYPE_MAIN_VARIANT (decl) == void_type_node)
12743 return decl;
12744
12745 old_initial = DECL_INITIAL (fndecl);
12746
12747 /* Undo the level for the parms (from start_method).
12748 This is like poplevel, but it causes nothing to be
12749 saved. Saving information here confuses symbol-table
12750 output routines. Besides, this information will
12751 be correctly output when this method is actually
12752 compiled. */
12753
12754 /* Clear out the meanings of the local variables of this level;
12755 also record in each decl which block it belongs to. */
12756
12757 for (link = current_binding_level->names; link; link = TREE_CHAIN (link))
12758 {
12759 if (DECL_NAME (link) != NULL_TREE)
12760 IDENTIFIER_LOCAL_VALUE (DECL_NAME (link)) = 0;
12761 my_friendly_assert (TREE_CODE (link) != FUNCTION_DECL, 163);
12762 DECL_CONTEXT (link) = NULL_TREE;
12763 }
12764
12765 /* Restore all name-meanings of the outer levels
12766 that were shadowed by this level. */
12767
12768 for (link = current_binding_level->shadowed; link; link = TREE_CHAIN (link))
12769 IDENTIFIER_LOCAL_VALUE (TREE_PURPOSE (link)) = TREE_VALUE (link);
12770 for (link = current_binding_level->class_shadowed;
12771 link; link = TREE_CHAIN (link))
12772 IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (link)) = TREE_VALUE (link);
12773 for (link = current_binding_level->type_shadowed;
12774 link; link = TREE_CHAIN (link))
12775 IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (link)) = TREE_VALUE (link);
12776
12777 GNU_xref_end_scope ((HOST_WIDE_INT) current_binding_level,
12778 (HOST_WIDE_INT) current_binding_level->level_chain,
12779 current_binding_level->parm_flag,
12780 current_binding_level->keep);
12781
12782 poplevel (0, 0, 0);
12783
12784 DECL_INITIAL (fndecl) = old_initial;
12785
12786 /* We used to check if the context of FNDECL was different from
12787 current_class_type as another way to get inside here. This didn't work
12788 for String.cc in libg++. */
12789 if (DECL_FRIEND_P (fndecl))
12790 {
12791 CLASSTYPE_INLINE_FRIENDS (current_class_type)
12792 = tree_cons (NULL_TREE, fndecl, CLASSTYPE_INLINE_FRIENDS (current_class_type));
12793 decl = void_type_node;
12794 }
12795
12796 return decl;
12797 }
12798 \f
12799 /* Called when a new struct TYPE is defined.
12800 If this structure or union completes the type of any previous
12801 variable declaration, lay it out and output its rtl. */
12802
12803 void
12804 hack_incomplete_structures (type)
12805 tree type;
12806 {
12807 tree *list;
12808
12809 if (current_binding_level->incomplete == NULL_TREE)
12810 return;
12811
12812 if (!type) /* Don't do this for class templates. */
12813 return;
12814
12815 for (list = &current_binding_level->incomplete; *list; )
12816 {
12817 tree decl = TREE_VALUE (*list);
12818 if ((decl && TREE_TYPE (decl) == type)
12819 || (TREE_TYPE (decl)
12820 && TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
12821 && TREE_TYPE (TREE_TYPE (decl)) == type))
12822 {
12823 int toplevel = toplevel_bindings_p ();
12824 if (TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
12825 && TREE_TYPE (TREE_TYPE (decl)) == type)
12826 layout_type (TREE_TYPE (decl));
12827 layout_decl (decl, 0);
12828 rest_of_decl_compilation (decl, NULL_PTR, toplevel, 0);
12829 if (! toplevel)
12830 {
12831 tree cleanup;
12832 expand_decl (decl);
12833 cleanup = maybe_build_cleanup (decl);
12834 expand_decl_init (decl);
12835 if (! expand_decl_cleanup (decl, cleanup))
12836 cp_error ("parser lost in parsing declaration of `%D'",
12837 decl);
12838 }
12839 *list = TREE_CHAIN (*list);
12840 }
12841 else
12842 list = &TREE_CHAIN (*list);
12843 }
12844 }
12845
12846 /* If DECL is of a type which needs a cleanup, build that cleanup here.
12847 See build_delete for information about AUTO_DELETE.
12848
12849 Don't build these on the momentary obstack; they must live
12850 the life of the binding contour. */
12851
12852 static tree
12853 maybe_build_cleanup_1 (decl, auto_delete)
12854 tree decl, auto_delete;
12855 {
12856 tree type = TREE_TYPE (decl);
12857 if (TYPE_NEEDS_DESTRUCTOR (type))
12858 {
12859 int temp = 0, flags = LOOKUP_NORMAL|LOOKUP_DESTRUCTOR;
12860 tree rval;
12861
12862 if (TREE_CODE (decl) != PARM_DECL)
12863 temp = suspend_momentary ();
12864
12865 if (TREE_CODE (type) == ARRAY_TYPE)
12866 rval = decl;
12867 else
12868 {
12869 mark_addressable (decl);
12870 rval = build_unary_op (ADDR_EXPR, decl, 0);
12871 }
12872
12873 /* Optimize for space over speed here. */
12874 if (! TYPE_USES_VIRTUAL_BASECLASSES (type)
12875 || flag_expensive_optimizations)
12876 flags |= LOOKUP_NONVIRTUAL;
12877
12878 rval = build_delete (TREE_TYPE (rval), rval, auto_delete, flags, 0);
12879
12880 if (TYPE_USES_VIRTUAL_BASECLASSES (type)
12881 && ! TYPE_HAS_DESTRUCTOR (type))
12882 rval = build_compound_expr (expr_tree_cons (NULL_TREE, rval,
12883 build_expr_list (NULL_TREE, build_vbase_delete (type, decl))));
12884
12885 if (TREE_CODE (decl) != PARM_DECL)
12886 resume_momentary (temp);
12887
12888 return rval;
12889 }
12890 return 0;
12891 }
12892
12893 /* If DECL is of a type which needs a cleanup, build that cleanup
12894 here. The cleanup does free the storage with a call to delete. */
12895
12896 tree
12897 maybe_build_cleanup_and_delete (decl)
12898 tree decl;
12899 {
12900 return maybe_build_cleanup_1 (decl, integer_three_node);
12901 }
12902
12903 /* If DECL is of a type which needs a cleanup, build that cleanup
12904 here. The cleanup does not free the storage with a call a delete. */
12905
12906 tree
12907 maybe_build_cleanup (decl)
12908 tree decl;
12909 {
12910 return maybe_build_cleanup_1 (decl, integer_two_node);
12911 }
12912 \f
12913 /* Expand a C++ expression at the statement level.
12914 This is needed to ferret out nodes which have UNKNOWN_TYPE.
12915 The C++ type checker should get all of these out when
12916 expressions are combined with other, type-providing, expressions,
12917 leaving only orphan expressions, such as:
12918
12919 &class::bar; / / takes its address, but does nothing with it. */
12920
12921 void
12922 cplus_expand_expr_stmt (exp)
12923 tree exp;
12924 {
12925 if (processing_template_decl)
12926 {
12927 add_tree (build_min_nt (EXPR_STMT, exp));
12928 return;
12929 }
12930
12931 /* Arrange for all temps to disappear. */
12932 expand_start_target_temps ();
12933
12934 if (TREE_TYPE (exp) == unknown_type_node)
12935 {
12936 if (TREE_CODE (exp) == ADDR_EXPR || TREE_CODE (exp) == TREE_LIST)
12937 error ("address of overloaded function with no contextual type information");
12938 else if (TREE_CODE (exp) == COMPONENT_REF)
12939 warning ("useless reference to a member function name, did you forget the ()?");
12940 }
12941 else
12942 {
12943 if (TREE_CODE (exp) == FUNCTION_DECL)
12944 {
12945 cp_warning ("reference, not call, to function `%D'", exp);
12946 warning ("at this point in file");
12947 }
12948
12949 #if 0
12950 /* We should do this eventually, but right now this causes regex.o from
12951 libg++ to miscompile, and tString to core dump. */
12952 exp = build1 (CLEANUP_POINT_EXPR, TREE_TYPE (exp), exp);
12953 #endif
12954 /* If we don't do this, we end up down inside expand_expr
12955 trying to do TYPE_MODE on the ERROR_MARK, and really
12956 go outside the bounds of the type. */
12957 if (exp != error_mark_node)
12958 expand_expr_stmt (break_out_cleanups (exp));
12959 }
12960
12961 /* Clean up any pending cleanups. This happens when a function call
12962 returns a cleanup-needing value that nobody uses. */
12963 expand_end_target_temps ();
12964 }
12965
12966 /* When a stmt has been parsed, this function is called.
12967
12968 Currently, this function only does something within a
12969 constructor's scope: if a stmt has just assigned to this,
12970 and we are in a derived class, we call `emit_base_init'. */
12971
12972 void
12973 finish_stmt ()
12974 {
12975 extern struct nesting *cond_stack, *loop_stack, *case_stack;
12976
12977
12978 if (current_function_assigns_this
12979 || ! current_function_just_assigned_this)
12980 return;
12981 if (DECL_CONSTRUCTOR_P (current_function_decl))
12982 {
12983 /* Constructors must wait until we are out of control
12984 zones before calling base constructors. */
12985 if (cond_stack || loop_stack || case_stack)
12986 return;
12987 expand_expr_stmt (base_init_expr);
12988 check_base_init (current_class_type);
12989 }
12990 current_function_assigns_this = 1;
12991 }
12992
12993 /* Change a static member function definition into a FUNCTION_TYPE, instead
12994 of the METHOD_TYPE that we create when it's originally parsed.
12995
12996 WARNING: DO NOT pass &TREE_TYPE (decl) to FN or &TYPE_ARG_TYPES
12997 (TREE_TYPE (decl)) to ARGTYPES, as doing so will corrupt the types of
12998 other decls. Either pass the addresses of local variables or NULL. */
12999
13000 static void
13001 revert_static_member_fn (decl, fn, argtypes)
13002 tree *decl, *fn, *argtypes;
13003 {
13004 tree tmp;
13005 tree function = fn ? *fn : TREE_TYPE (*decl);
13006 tree args = argtypes ? *argtypes : TYPE_ARG_TYPES (function);
13007
13008 if (TYPE_READONLY (TREE_TYPE (TREE_VALUE (args))))
13009 cp_error ("static member function `%#D' declared const", *decl);
13010 if (TYPE_VOLATILE (TREE_TYPE (TREE_VALUE (args))))
13011 cp_error ("static member function `%#D' declared volatile", *decl);
13012
13013 args = TREE_CHAIN (args);
13014 tmp = build_function_type (TREE_TYPE (function), args);
13015 tmp = build_type_variant (tmp, TYPE_READONLY (function),
13016 TYPE_VOLATILE (function));
13017 tmp = build_exception_variant (tmp,
13018 TYPE_RAISES_EXCEPTIONS (function));
13019 TREE_TYPE (*decl) = tmp;
13020 if (DECL_ARGUMENTS (*decl))
13021 DECL_ARGUMENTS (*decl) = TREE_CHAIN (DECL_ARGUMENTS (*decl));
13022 DECL_STATIC_FUNCTION_P (*decl) = 1;
13023 if (fn)
13024 *fn = tmp;
13025 if (argtypes)
13026 *argtypes = args;
13027 }
13028
13029 int
13030 id_in_current_class (id)
13031 tree id;
13032 {
13033 return !!purpose_member (id, class_binding_level->class_shadowed);
13034 }
13035
13036 struct cp_function
13037 {
13038 int returns_value;
13039 int returns_null;
13040 int warn_about_return_type;
13041 int assigns_this;
13042 int just_assigned_this;
13043 int parms_stored;
13044 int temp_name_counter;
13045 tree named_labels;
13046 tree shadowed_labels;
13047 tree ctor_label;
13048 tree dtor_label;
13049 rtx last_dtor_insn;
13050 rtx last_parm_cleanup_insn;
13051 tree base_init_list;
13052 tree member_init_list;
13053 tree base_init_expr;
13054 tree current_class_ptr;
13055 tree current_class_ref;
13056 rtx result_rtx;
13057 struct cp_function *next;
13058 struct binding_level *binding_level;
13059 int static_labelno;
13060 };
13061
13062 static struct cp_function *cp_function_chain;
13063
13064 extern int temp_name_counter;
13065
13066 /* Save and reinitialize the variables
13067 used during compilation of a C++ function. */
13068
13069 void
13070 push_cp_function_context (context)
13071 tree context;
13072 {
13073 struct cp_function *p
13074 = (struct cp_function *) xmalloc (sizeof (struct cp_function));
13075
13076 push_function_context_to (context);
13077
13078 p->next = cp_function_chain;
13079 cp_function_chain = p;
13080
13081 p->named_labels = named_labels;
13082 p->shadowed_labels = shadowed_labels;
13083 p->returns_value = current_function_returns_value;
13084 p->returns_null = current_function_returns_null;
13085 p->warn_about_return_type = warn_about_return_type;
13086 p->binding_level = current_binding_level;
13087 p->ctor_label = ctor_label;
13088 p->dtor_label = dtor_label;
13089 p->last_dtor_insn = last_dtor_insn;
13090 p->last_parm_cleanup_insn = last_parm_cleanup_insn;
13091 p->assigns_this = current_function_assigns_this;
13092 p->just_assigned_this = current_function_just_assigned_this;
13093 p->parms_stored = current_function_parms_stored;
13094 p->result_rtx = original_result_rtx;
13095 p->base_init_expr = base_init_expr;
13096 p->temp_name_counter = temp_name_counter;
13097 p->base_init_list = current_base_init_list;
13098 p->member_init_list = current_member_init_list;
13099 p->current_class_ptr = current_class_ptr;
13100 p->current_class_ref = current_class_ref;
13101 p->static_labelno = static_labelno;
13102 }
13103
13104 /* Restore the variables used during compilation of a C++ function. */
13105
13106 void
13107 pop_cp_function_context (context)
13108 tree context;
13109 {
13110 struct cp_function *p = cp_function_chain;
13111 tree link;
13112
13113 /* Bring back all the labels that were shadowed. */
13114 for (link = shadowed_labels; link; link = TREE_CHAIN (link))
13115 if (DECL_NAME (TREE_VALUE (link)) != 0)
13116 SET_IDENTIFIER_LABEL_VALUE (DECL_NAME (TREE_VALUE (link)),
13117 TREE_VALUE (link));
13118
13119 pop_function_context_from (context);
13120
13121 cp_function_chain = p->next;
13122
13123 named_labels = p->named_labels;
13124 shadowed_labels = p->shadowed_labels;
13125 current_function_returns_value = p->returns_value;
13126 current_function_returns_null = p->returns_null;
13127 warn_about_return_type = p->warn_about_return_type;
13128 current_binding_level = p->binding_level;
13129 ctor_label = p->ctor_label;
13130 dtor_label = p->dtor_label;
13131 last_dtor_insn = p->last_dtor_insn;
13132 last_parm_cleanup_insn = p->last_parm_cleanup_insn;
13133 current_function_assigns_this = p->assigns_this;
13134 current_function_just_assigned_this = p->just_assigned_this;
13135 current_function_parms_stored = p->parms_stored;
13136 original_result_rtx = p->result_rtx;
13137 base_init_expr = p->base_init_expr;
13138 temp_name_counter = p->temp_name_counter;
13139 current_base_init_list = p->base_init_list;
13140 current_member_init_list = p->member_init_list;
13141 current_class_ptr = p->current_class_ptr;
13142 current_class_ref = p->current_class_ref;
13143 static_labelno = p->static_labelno;
13144
13145 free (p);
13146 }
13147
13148 int
13149 in_function_p ()
13150 {
13151 return function_depth != 0;
13152 }
13153
13154 /* FSF LOCAL dje prefix attributes */
13155 /* Strip attributes from SPECS_ATTRS, a list of declspecs and attributes.
13156 This function is used by the parser when a rule will accept attributes
13157 in a particular position, but we don't want to support that just yet.
13158
13159 A warning is issued for every ignored attribute. */
13160
13161 tree
13162 strip_attrs (specs_attrs)
13163 tree specs_attrs;
13164 {
13165 tree specs, attrs;
13166
13167 split_specs_attrs (specs_attrs, &specs, &attrs);
13168
13169 while (attrs)
13170 {
13171 warning ("`%s' attribute ignored",
13172 IDENTIFIER_POINTER (TREE_PURPOSE (attrs)));
13173 attrs = TREE_CHAIN (attrs);
13174 }
13175
13176 return specs;
13177 }
13178 /* END FSF LOCAL */
13179
This page took 0.802074 seconds and 5 git commands to generate.