]> gcc.gnu.org Git - gcc.git/blame - gcc/cp/decl.c
Various fixes for -Wall problems from Kaveh. See ChangeLog for details.
[gcc.git] / gcc / cp / decl.c
CommitLineData
9e28580c 1/* Process declarations and variables for C++ compiler.
956d6950 2 Copyright (C) 1988, 92, 93, 94, 95, 96, 1997 Free Software Foundation, Inc.
8d08fdba
MS
3 Hacked by Michael Tiemann (tiemann@cygnus.com)
4
5This file is part of GNU CC.
6
7GNU CC is free software; you can redistribute it and/or modify
8it under the terms of the GNU General Public License as published by
9the Free Software Foundation; either version 2, or (at your option)
10any later version.
11
12GNU CC is distributed in the hope that it will be useful,
13but WITHOUT ANY WARRANTY; without even the implied warranty of
14MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15GNU General Public License for more details.
16
17You should have received a copy of the GNU General Public License
18along with GNU CC; see the file COPYING. If not, write to
e9fa0c7c
RK
19the Free Software Foundation, 59 Temple Place - Suite 330,
20Boston, MA 02111-1307, USA. */
8d08fdba
MS
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
8d08fdba 30#include "config.h"
da20811c 31#include <stdio.h>
8d08fdba
MS
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"
72b7eeff 41#include "defaults.h"
49c249e1
JM
42#include "output.h"
43#include "except.h"
8d08fdba 44
9f617717
L
45#ifdef HAVE_STDLIB_H
46#include <stdlib.h>
47#endif
48
49#ifdef NEED_DECLARATION_FREE
50extern void free PROTO((void *));
51#endif
52
8d08fdba
MS
53#define obstack_chunk_alloc xmalloc
54#define obstack_chunk_free free
55
8d2733ca
MS
56extern tree builtin_return_address_fndecl;
57
8d08fdba
MS
58extern struct obstack permanent_obstack;
59
60extern int current_class_depth;
61
e1cd6e56
MS
62extern tree static_ctors, static_dtors;
63
42976354
BK
64extern int static_labelno;
65
8d08fdba
MS
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"
5566b478 71struct obstack decl_obstack;
8d08fdba
MS
72static 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
255512c1 110#ifndef BOOL_TYPE_SIZE
e1cd6e56 111#ifdef SLOW_BYTE_ACCESS
d2e5ee5c 112#define BOOL_TYPE_SIZE ((SLOW_BYTE_ACCESS) ? (POINTER_SIZE) : (CHAR_TYPE_SIZE))
e1cd6e56 113#else
d2e5ee5c 114#define BOOL_TYPE_SIZE CHAR_TYPE_SIZE
e1cd6e56 115#endif
255512c1
JM
116#endif
117
8d08fdba
MS
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
8d08fdba
MS
136static tree grokparms PROTO((tree, int));
137static tree lookup_nested_type PROTO((tree, tree));
138static char *redeclaration_error_message PROTO((tree, tree));
bd6dd845
MS
139static void revert_static_member_fn PROTO((tree *, tree *, tree *));
140static tree push_overloaded_decl PROTO((tree, int));
141static void push_overloaded_decl_top_level PROTO((tree, int));
8d08fdba 142
49c249e1
JM
143static struct stack_level *push_decl_level PROTO((struct stack_level *,
144 struct obstack *));
145static void push_binding_level PROTO((struct binding_level *, int,
146 int));
147static void pop_binding_level PROTO((void));
148static void suspend_binding_level PROTO((void));
149static void resume_binding_level PROTO((struct binding_level *));
150static struct binding_level *make_binding_level PROTO((void));
151static int namespace_bindings_p PROTO((void));
152static void declare_namespace_level PROTO((void));
153static tree get_unique_name PROTO((void));
154static void signal_catch PROTO((int));
155static void storedecls PROTO((tree));
156static void storetags PROTO((tree));
157static void require_complete_types_for_parms PROTO((tree));
158static void push_overloaded_decl_1 PROTO((tree));
159static int ambi_op_p PROTO((tree));
160static int unary_op_p PROTO((tree));
161static tree store_bindings PROTO((tree, tree));
162static tree lookup_tag_reverse PROTO((tree, tree));
163static tree obscure_complex_init PROTO((tree, tree));
164static tree maybe_build_cleanup_1 PROTO((tree, tree));
165static tree lookup_name_real PROTO((tree, int, int));
166static void warn_extern_redeclared_static PROTO((tree, tree));
a703fb38 167static void grok_reference_init PROTO((tree, tree, tree));
386b8a85 168static tree grokfndecl PROTO((tree, tree, tree, tree, int,
49c249e1 169 enum overload_flags,
386b8a85 170 tree, tree, tree, int, int, int, int, int, int));
49c249e1
JM
171static tree grokvardecl PROTO((tree, tree, RID_BIT_TYPE *, int, int));
172static tree lookup_tag PROTO((enum tree_code, tree,
173 struct binding_level *, int));
174static void set_identifier_type_value_with_scope
175 PROTO((tree, tree, struct binding_level *));
176static void record_builtin_type PROTO((enum rid, char *, tree));
177static int member_function_or_else PROTO((tree, tree, char *));
178static void bad_specifiers PROTO((tree, char *, int, int, int, int,
179 int));
8d08fdba
MS
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
187tree error_mark_node;
188
189/* Erroneous argument lists can use this *IFF* they do not modify it. */
190tree error_mark_list;
191
192/* INTEGER_TYPE and REAL_TYPE nodes for the standard data types */
193
194tree short_integer_type_node;
195tree integer_type_node;
196tree long_integer_type_node;
197tree long_long_integer_type_node;
198
199tree short_unsigned_type_node;
200tree unsigned_type_node;
201tree long_unsigned_type_node;
202tree long_long_unsigned_type_node;
203
204tree ptrdiff_type_node;
205
206tree unsigned_char_type_node;
207tree signed_char_type_node;
208tree char_type_node;
209tree wchar_type_node;
210tree signed_wchar_type_node;
211tree unsigned_wchar_type_node;
212
f376e137
MS
213tree wchar_decl_node;
214
8d08fdba
MS
215tree float_type_node;
216tree double_type_node;
217tree long_double_type_node;
218
37c46b43
MS
219tree complex_integer_type_node;
220tree complex_float_type_node;
221tree complex_double_type_node;
222tree complex_long_double_type_node;
223
8d08fdba
MS
224tree intQI_type_node;
225tree intHI_type_node;
226tree intSI_type_node;
227tree intDI_type_node;
228
229tree unsigned_intQI_type_node;
230tree unsigned_intHI_type_node;
231tree unsigned_intSI_type_node;
232tree unsigned_intDI_type_node;
233
234/* a VOID_TYPE node, and the same, packaged in a TREE_LIST. */
235
236tree void_type_node, void_list_node;
237tree void_zero_node;
238
239/* Nodes for types `void *' and `const void *'. */
240
bd6dd845 241tree ptr_type_node;
6c20b7e9 242tree const_ptr_type_node;
8d08fdba
MS
243
244/* Nodes for types `char *' and `const char *'. */
245
246tree 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
251tree 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
256tree int_array_type_node;
257
258/* Type `wchar_t[256]' or something like it.
259 Used when a wide string literal is created. */
260
261tree wchar_array_type_node;
262
2986ae00 263/* The bool data type, and constants */
255512c1 264tree boolean_type_node, boolean_true_node, boolean_false_node;
2986ae00 265
8d08fdba
MS
266/* type `int ()' -- used for implicit declaration of functions. */
267
268tree default_function_type;
269
270/* function types `double (double)' and `double (double, double)', etc. */
271
bd6dd845
MS
272static tree double_ftype_double, double_ftype_double_double;
273static tree int_ftype_int, long_ftype_long;
274static tree float_ftype_float;
275static tree ldouble_ftype_ldouble;
8d08fdba 276
8d08fdba 277/* Function type `int (const void *, const void *, size_t)' */
5566b478 278static tree int_ftype_cptr_cptr_sizet;
8d08fdba
MS
279
280/* C++ extensions */
700f8a87 281tree vtable_entry_type;
8d08fdba 282tree delta_type_node;
db5ae43f 283#if 0
e92cc029 284/* Old rtti stuff. */
db5ae43f
MS
285tree __baselist_desc_type_node;
286tree __i_desc_type_node, __m_desc_type_node;
8d08fdba 287tree __t_desc_array_type, __i_desc_array_type, __m_desc_array_type;
db5ae43f 288#endif
5566b478
MS
289tree __t_desc_type_node;
290#if 0
291tree __tp_desc_type_node;
292#endif
db5ae43f
MS
293tree __access_mode_type_node;
294tree __bltn_desc_type_node, __user_desc_type_node, __class_desc_type_node;
295tree __ptr_desc_type_node, __attr_desc_type_node, __func_desc_type_node;
296tree __ptmf_desc_type_node, __ptmd_desc_type_node;
297#if 0
298/* Not needed yet? May be needed one day? */
299tree __bltn_desc_array_type, __user_desc_array_type, __class_desc_array_type;
300tree __ptr_desc_array_type, __attr_dec_array_type, __func_desc_array_type;
301tree __ptmf_desc_array_type, __ptmd_desc_array_type;
302#endif
303
8d08fdba
MS
304tree class_star_type_node;
305tree class_type_node, record_type_node, union_type_node, enum_type_node;
db5ae43f 306tree unknown_type_node;
8d08fdba
MS
307tree opaque_type_node, signature_type_node;
308tree sigtable_entry_type;
8d08fdba 309
8d08fdba
MS
310/* Array type `vtable_entry_type[]' */
311tree vtbl_type_node;
312
6633d636
MS
313/* namespace std */
314tree std_node;
315
8d08fdba
MS
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
319tree dtor_label;
320
72b7eeff
MS
321/* In a destructor, the last insn emitted after the start of the
322 function and the parms. */
323
bd6dd845 324static rtx last_dtor_insn;
72b7eeff 325
b87692e5 326/* In a constructor, the last insn emitted after the start of the
9664b89e
JM
327 function and the parms, the exception specification and any
328 function-try-block. The constructor initializers are emitted after
329 this insn. */
b87692e5
MS
330
331static rtx last_parm_cleanup_insn;
332
8d08fdba
MS
333/* In a constructor, the point at which we are ready to return
334 the pointer to the initialized object. */
335
336tree ctor_label;
337
8d08fdba
MS
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
342tree abort_fndecl;
343
344extern 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. */
bd6dd845 350static rtx original_result_rtx;
8d08fdba
MS
351
352/* Sequence of insns which represents base initialization. */
a9aedbc2 353tree base_init_expr;
8d08fdba
MS
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. */
358tree this_identifier, in_charge_identifier;
fc378698 359tree ctor_identifier, dtor_identifier;
e92cc029 360/* Used in pointer to member functions, in vtables, and in sigtables. */
8d08fdba 361tree pfn_identifier, index_identifier, delta_identifier, delta2_identifier;
9dd70aa4 362tree pfn_or_delta2_identifier, tag_identifier;
5566b478 363tree vt_off_identifier;
8d08fdba 364
e349ee73
MS
365struct 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
8d08fdba
MS
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
e349ee73
MS
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
8d08fdba
MS
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
e349ee73 392static struct named_label_list *named_label_uses = NULL;
8d08fdba
MS
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. */
398tree static_aggregates;
399
73b0fce8
KL
400/* Nonzero if we lookup name inside template argument. */
401int arg_looking_for_template;
402
8d08fdba
MS
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
408tree integer_zero_node;
409tree null_pointer_node;
410
d11ad92e
MS
411/* The value for __null (NULL), either of type `void *' or, with -ansi,
412 an integer type of the same size. */
413
414tree null_node;
415
8d08fdba
MS
416/* A node for the integer constants 1, 2, and 3. */
417
418tree integer_one_node, integer_two_node, integer_three_node;
419
8d08fdba
MS
420/* While defining an enum type, this is 1 plus the last enumerator
421 constant value. */
422
423static tree enum_next_value;
424
7177d104
MS
425/* Nonzero means that there was overflow computing enum_next_value. */
426
427static int enum_overflow;
428
8d08fdba
MS
429/* Parsing a function declarator leaves a list of parameter names
430 or a chain or parameter decls here. */
431
432tree last_function_parms;
433
434/* Parsing a function declarator leaves here a chain of structure
435 and enum types declared in the parmlist. */
436
437static 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
443static tree current_function_parms;
444
445/* Similar, for last_function_parm_tags. */
446static 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
452static tree named_labels;
453
454/* A list of LABEL_DECLs from outer contexts that are currently shadowed. */
455
456static tree shadowed_labels;
457
8d08fdba
MS
458/* The FUNCTION_DECL for the function currently being compiled,
459 or 0 if between functions. */
460tree 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
465int 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
470int 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
477tree 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
482static int warn_about_return_type;
483
8d08fdba
MS
484/* Nonzero means give `double' the same size as `float'. */
485
486extern int flag_short_double;
487
488/* Nonzero means don't recognize any builtin functions. */
489
490extern int flag_no_builtin;
491
00595019
MS
492/* Nonzero means don't recognize the non-ANSI builtin functions.
493 -ansi sets this. */
494
495extern int flag_no_nonansi_builtin;
496
e1cd6e56
MS
497/* Nonzero means enable obscure ANSI features and disable GNU extensions
498 that might cause ANSI-compliant code to be miscompiled. */
8d08fdba
MS
499
500extern int flag_ansi;
501
502/* Nonzero if we want to support huge (> 2^(sizeof(short)*8-1) bytes)
e92cc029 503 objects. */
8d08fdba
MS
504extern 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
ddd5a7c1 508 .common instead of .data at the expense of not flagging multiple
8d08fdba
MS
509 definitions. */
510extern int flag_conserve_space;
511
512/* Pointers to the base and current top of the language name stack. */
513
514extern tree *current_lang_base, *current_lang_stack;
515\f
51c184be 516/* C and C++ flags are in decl2.c. */
8d08fdba
MS
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. */
5566b478 521static int current_function_assigns_this;
8d08fdba
MS
522int 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! */
527int current_function_parms_stored;
528
51c184be 529/* Flag used when debugging spew.c */
8d08fdba
MS
530
531extern 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). */
536extern tree previous_class_values;
537
e92cc029
MS
538/* A expression of value 0 with the same precision as a sizetype
539 node, but signed. */
540tree signed_size_zero_node;
541
8d08fdba
MS
542\f
543/* Allocate a level of searching. */
e92cc029 544
824b9a4c 545static
8d08fdba
MS
546struct stack_level *
547push_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
e92cc029
MS
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. */
8d08fdba
MS
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
578struct binding_level
579 {
580 /* A chain of _DECL nodes for all variables, constants, functions,
e92cc029
MS
581 and typedef types. These are in the reverse of the order
582 supplied. */
8d08fdba
MS
583 tree names;
584
e92cc029
MS
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. */
8d08fdba
MS
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
f30432d7 619 /* List of decls in `names' that have incomplete
8d08fdba 620 structure or union types. */
f30432d7 621 tree incomplete;
8d08fdba 622
8d6e462b 623 /* List of VAR_DECLS saved from a previous for statement.
abc95ed3 624 These would be dead in ANSI-conforming code, but might
d22c8596 625 be referenced in ARM-era code. */
8d6e462b
PB
626 tree dead_vars_from_for;
627
8d08fdba
MS
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
5566b478
MS
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. */
8d08fdba
MS
648 unsigned pseudo_global : 1;
649
a9aedbc2
MS
650 /* This is set for a namespace binding level. */
651 unsigned namespace_p : 1;
652
2ee887f2 653 /* True if this level is that of a for-statement where we need to
d22c8596 654 worry about ambiguous (ARM or ANSI) scope rules. */
8d6e462b
PB
655 unsigned is_for_scope : 1;
656
5566b478 657 /* Two bits left for this word. */
8d08fdba
MS
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
669static struct binding_level *current_binding_level;
670
671/* The binding level of the current class, if any. */
672
673static 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
682static 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
688static struct binding_level *global_binding_level;
689
690/* Binding level structures are initialized by copying this one. */
691
692static struct binding_level clear_binding_level;
693
694/* Nonzero means unconditionally make a BLOCK for the next level pushed. */
695
696static int keep_next_level_flag;
697
698#if defined(DEBUG_CP_BINDING_LEVELS)
699static int binding_depth = 0;
700static int is_class_level = 0;
701
702static void
703indent ()
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
712static tree pushdecl_with_scope PROTO((tree, struct binding_level *));
713
714static void
715push_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;
8d08fdba
MS
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
745static void
746pop_binding_level ()
747{
748 if (class_binding_level)
749 current_binding_level = class_binding_level;
750
751 if (global_binding_level)
752 {
e92cc029 753 /* cannot pop a level, if there are none left to pop. */
8d08fdba
MS
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))
9e9ff709
MS
765 {
766 indent ();
767 fprintf (stderr, "XXX is_class_level != (current_binding_level == class_binding_level)\n");
768 }
8d08fdba
MS
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}
a9aedbc2
MS
788
789static void
790suspend_binding_level ()
791{
792 if (class_binding_level)
793 current_binding_level = class_binding_level;
794
795 if (global_binding_level)
796 {
e92cc029 797 /* cannot suspend a level, if there are none left to suspend. */
a9aedbc2
MS
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))
9e9ff709
MS
809 {
810 indent ();
811 fprintf (stderr, "XXX is_class_level != (current_binding_level == class_binding_level)\n");
812 }
a9aedbc2
MS
813 is_class_level = 0;
814#endif /* defined(DEBUG_CP_BINDING_LEVELS) */
815 {
a9aedbc2 816 current_binding_level = current_binding_level->level_chain;
a9aedbc2
MS
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
824b9a4c 825static void
a9aedbc2
MS
826resume_binding_level (b)
827 struct binding_level *b;
828{
829 if (class_binding_level)
830 {
831#if 1
e92cc029 832 /* These are here because we cannot deal with shadows yet. */
a9aedbc2
MS
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
e92cc029 843 /* These are here because we cannot deal with shadows yet. */
a9aedbc2
MS
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}
8d08fdba 862\f
cffa8729
MS
863/* Create a new `struct binding_level'. */
864
865static
866struct binding_level *
867make_binding_level ()
868{
869 /* NOSTRICT */
870 return (struct binding_level *) xmalloc (sizeof (struct binding_level));
871}
872
8d08fdba
MS
873/* Nonzero if we are currently in the global binding level. */
874
875int
876global_bindings_p ()
877{
878 return current_binding_level == global_binding_level;
879}
880
a9aedbc2
MS
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
885int
886toplevel_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;
5566b478
MS
894 if (b->pseudo_global)
895 return 1;
a9aedbc2
MS
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
824b9a4c 904static int
a9aedbc2
MS
905namespace_bindings_p ()
906{
907 return current_binding_level->namespace_p;
908}
909
8d08fdba
MS
910void
911keep_next_level ()
912{
913 keep_next_level_flag = 1;
914}
915
916/* Nonzero if the current level needs to have a BLOCK made. */
917
918int
919kept_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
930void
931declare_parm_level ()
932{
933 current_binding_level->parm_flag = 1;
934}
935
8d08fdba
MS
936void
937declare_pseudo_global_level ()
938{
939 current_binding_level->pseudo_global = 1;
940}
941
824b9a4c 942static void
a9aedbc2
MS
943declare_namespace_level ()
944{
945 current_binding_level->namespace_p = 1;
946}
947
8d08fdba
MS
948int
949pseudo_global_level_p ()
950{
951 return current_binding_level->pseudo_global;
952}
953
954void
955set_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
965void
966pushlevel (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 {
cffa8729 991 newlevel = make_binding_level ();
8d08fdba 992 }
cffa8729 993
8d08fdba
MS
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
5566b478 999void
8d6e462b
PB
1000note_level_for_for ()
1001{
1002 current_binding_level->is_for_scope = 1;
1003}
1004
8d08fdba
MS
1005void
1006pushlevel_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
1041tree
1042poplevel (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;
8d08fdba
MS
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,
5566b478 1063 current_binding_level->keep);
8d08fdba
MS
1064
1065 if (current_binding_level->keep == 1)
1066 keep = 1;
1067
8d08fdba
MS
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
6060a796
MS
1085 && TREE_ADDRESSABLE (decl)
1086 && decl_function_context (decl) == current_function_decl)
8d08fdba
MS
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 {
72b7eeff
MS
1113 if (block_previously_created)
1114 {
1115 if (decls || tags || subblocks)
1116 {
be99da77 1117 if (BLOCK_VARS (block) || BLOCK_TYPE_TAGS (block))
72b7eeff
MS
1118 {
1119 warning ("internal compiler error: debugging info corrupted");
1120 }
1121 BLOCK_VARS (block) = decls;
1122 BLOCK_TYPE_TAGS (block) = tags;
be99da77
MS
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);
72b7eeff 1129 }
be99da77
MS
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. */
72b7eeff
MS
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 }
8d08fdba
MS
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
8d6e462b
PB
1152 if (current_binding_level->is_for_scope && flag_new_for_scope == 1)
1153 {
2ee887f2 1154 struct binding_level *outer = current_binding_level->level_chain;
8d6e462b
PB
1155 for (link = decls; link; link = TREE_CHAIN (link))
1156 {
1157 if (TREE_CODE (link) == VAR_DECL)
1158 DECL_DEAD_FOR_LOCAL (link) = 1;
e76a2646
MS
1159 else
1160 IDENTIFIER_LOCAL_VALUE (DECL_NAME (link)) = NULL_TREE;
8d6e462b 1161 }
2ee887f2
MS
1162
1163 /* Save declarations made in a 'for' statement so we can support pre-ANSI
e92cc029 1164 'for' scoping semantics. */
2ee887f2
MS
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
e76a2646
MS
1171 if (decl && DECL_DEAD_FOR_LOCAL (decl))
1172 {
1173 /* In this case keep the dead for-decl visible,
e92cc029 1174 but remember what (if anything) it shadowed. */
e76a2646
MS
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);
2ee887f2 1181 }
8d6e462b 1182 }
e92cc029 1183 else /* Not special for scope. */
8d6e462b
PB
1184 {
1185 for (link = decls; link; link = TREE_CHAIN (link))
1186 {
1187 if (DECL_NAME (link) != NULL_TREE)
8d08fdba 1188 {
8d6e462b
PB
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;
8d08fdba 1199 }
8d08fdba 1200 }
8d08fdba 1201
2ee887f2
MS
1202 /* Restore all name-meanings of the outer levels
1203 that were shadowed by this level. */
8d08fdba 1204
2ee887f2
MS
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,
e92cc029 1220 and restore that of i#1. */
2ee887f2
MS
1221
1222 link = current_binding_level->dead_vars_from_for;
1223 for (; link != NULL_TREE; link = TREE_CHAIN (link))
8d6e462b 1224 {
2ee887f2
MS
1225 tree id = DECL_NAME (link);
1226 if (IDENTIFIER_LOCAL_VALUE (id) == link)
1227 IDENTIFIER_LOCAL_VALUE (id) = DECL_SHADOWED_FOR_VAR (link);
8d6e462b
PB
1228 }
1229
2ee887f2
MS
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);
8d6e462b 1236 }
8d08fdba
MS
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 {
e349ee73
MS
1283 struct named_label_list *labels;
1284 for (labels = named_label_uses; labels; labels = labels->next)
1285 if (labels->binding_level == current_binding_level)
8d08fdba 1286 {
e349ee73
MS
1287 labels->binding_level = level_chain;
1288 labels->names_in_scope = level_chain->names;
8d08fdba
MS
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. */
a4443a08 1320 if (tmp == 2)
8d08fdba 1321 {
8d08fdba
MS
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
a9aedbc2 1339/* Resume a binding level for a namespace. */
e92cc029 1340
a9aedbc2
MS
1341void
1342resume_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 {
cffa8729
MS
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;
a9aedbc2
MS
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
8d08fdba
MS
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
1372void
1373delete_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
1396void
1397insert_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
8d08fdba
MS
1405/* Set the BLOCK node for the innermost scope
1406 (the one we are currently in). */
1407
1408void
1409set_block (block)
1410 register tree block;
1411{
1412 current_binding_level->this_block = block;
1413}
1414
1415/* Do a pushlevel for class declarations. */
e92cc029 1416
8d08fdba
MS
1417void
1418pushlevel_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 {
cffa8729 1434 newlevel = make_binding_level ();
8d08fdba
MS
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
700f8a87
MS
1456/* ...and a poplevel for class declarations. FORCE is used to force
1457 clearing out of CLASS_VALUEs after a class definition. */
e92cc029 1458
8d08fdba 1459tree
700f8a87
MS
1460poplevel_class (force)
1461 int force;
8d08fdba
MS
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
ddd5a7c1 1473 of IDENTIFIER_CLASS_VALUE to NULL_TREE, since first of all this slot
8d08fdba 1474 shouldn't even be used when current_class_type isn't set, and second,
ddd5a7c1 1475 if we don't touch it here, we're able to use the cache effect if the
8d08fdba 1476 next time we're entering a class scope, it is the same class. */
700f8a87 1477 if (current_class_depth != 1 || force)
8d08fdba
MS
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. */
e76a2646
MS
1485 {
1486 previous_class_type = current_class_type;
1487 previous_class_values = class_binding_level->class_shadowed;
1488 }
8d08fdba
MS
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,
5566b478 1497 class_binding_level->keep);
8d08fdba
MS
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. */
5566b478
MS
1514static int no_print_functions = 0;
1515static int no_print_builtins = 0;
8d08fdba
MS
1516
1517void
1518print_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",
f30432d7 1526 list_length (lvl->incomplete), lvl->parm_flag, lvl->keep);
8d08fdba
MS
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");
8d08fdba
MS
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 {
fc378698 1540 if (no_print_functions && (TREE_CODE (t) == FUNCTION_DECL))
8d08fdba
MS
1541 continue;
1542 if (no_print_builtins
fc378698
MS
1543 && (TREE_CODE (t) == TYPE_DECL)
1544 && (!strcmp (DECL_SOURCE_FILE (t),"<built-in>")))
8d08fdba
MS
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);
bd6dd845 1559 if (t == error_mark_node)
8d08fdba
MS
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 {
8d08fdba 1623 fprintf (stderr, " %s ", IDENTIFIER_POINTER (TREE_PURPOSE (t)));
8d08fdba
MS
1624 }
1625 fprintf (stderr, "\n");
1626 }
1627}
1628
1629void
1630print_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
1643void
1644print_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}
a9aedbc2 1670
dff6b454
RK
1671extern 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. */
e92cc029 1675
dff6b454
RK
1676static tree
1677get_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')
dff6b454
RK
1701#ifndef NO_DOLLAR_IN_LABEL /* this for `$'; unlikely, but... -- kr */
1702 || *p == '$'
1703#endif
e92cc029 1704#ifndef NO_DOT_IN_LABEL /* this for `.'; unlikely, but... */
dff6b454
RK
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. */
e92cc029 1717
a9aedbc2
MS
1718void
1719push_namespace (name)
1720 tree name;
1721{
6633d636
MS
1722#if 1
1723 static int warned;
1724 if (! warned)
1725 sorry ("namespace");
1726
1727 warned = 1;
1728#else
a9aedbc2
MS
1729 extern tree current_namespace;
1730 tree old_id = get_namespace_id ();
1731 char *buf;
72b7eeff 1732 tree d;
a9aedbc2 1733
dff6b454
RK
1734 if (! name)
1735 {
abc95ed3 1736 /* Create a truly ugly name! */
dff6b454
RK
1737 name = get_unique_name ();
1738 }
1739
72b7eeff
MS
1740 d = build_lang_decl (NAMESPACE_DECL, name, void_type_node);
1741
a9aedbc2 1742 /* Mark them as external, so redeclaration_error_message doesn't think
e92cc029 1743 they are duplicates. */
72b7eeff 1744
a9aedbc2
MS
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 ();
72b7eeff 1753 NAMESPACE_LEVEL (d) = current_binding_level;
a9aedbc2
MS
1754 }
1755 else
72b7eeff 1756 resume_level (NAMESPACE_LEVEL (d));
a9aedbc2 1757
e92cc029 1758 /* This code is just is bit old now... */
a9aedbc2
MS
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);
6633d636 1765#endif
a9aedbc2
MS
1766}
1767
1768/* Pop from the scope of the current namespace. */
e92cc029 1769
a9aedbc2
MS
1770void
1771pop_namespace ()
1772{
6633d636 1773#if 0
a9aedbc2
MS
1774 extern tree current_namespace;
1775 tree decls, link;
1776 current_namespace = TREE_CHAIN (current_namespace);
1777
e92cc029 1778 /* Just in case we get out of sync. */
a9aedbc2
MS
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 ();
6633d636 1817#endif
a9aedbc2 1818}
8d08fdba
MS
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. */
1825struct saved_scope {
1826 struct binding_level *old_binding_level;
1827 tree old_bindings;
1828 struct saved_scope *prev;
5f34005f 1829 tree class_name, class_type, function_decl;
8d08fdba 1830 struct binding_level *class_bindings;
51c184be
MS
1831 tree *lang_base, *lang_stack, lang_name;
1832 int lang_stacksize;
5566b478
MS
1833 int minimal_parse_mode;
1834 tree last_function_parms;
e76a2646 1835 tree template_parms;
5156628f 1836 HOST_WIDE_INT processing_template_decl;
a50f0918 1837 tree previous_class_type, previous_class_values;
e1467ff2
MM
1838 int processing_specialization;
1839 int processing_explicit_instantiation;
8d08fdba
MS
1840};
1841static struct saved_scope *current_saved_scope;
8d08fdba 1842
e92cc029 1843static tree
45537677
MS
1844store_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
8d08fdba 1885void
5566b478
MS
1886maybe_push_to_top_level (pseudo)
1887 int pseudo;
8d08fdba 1888{
51c184be 1889 extern int current_lang_stacksize;
beb53fb8
JM
1890 struct saved_scope *s
1891 = (struct saved_scope *) xmalloc (sizeof (struct saved_scope));
5566b478 1892 struct binding_level *b = inner_binding_level;
8d08fdba
MS
1893 tree old_bindings = NULL_TREE;
1894
e349ee73
MS
1895 if (current_function_decl)
1896 push_cp_function_context (NULL_TREE);
1897
a50f0918
MS
1898 if (previous_class_type)
1899 old_bindings = store_bindings (previous_class_values, old_bindings);
1900
8d08fdba
MS
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
5566b478
MS
1907 if (b == global_binding_level || (pseudo && b->pseudo_global))
1908 break;
8d08fdba 1909
45537677 1910 old_bindings = store_bindings (b->names, old_bindings);
cffa8729 1911 /* We also need to check class_shadowed to save class-level type
45537677
MS
1912 bindings, since pushclass doesn't fill in b->names. */
1913 if (b->parm_flag == 2)
cffa8729 1914 old_bindings = store_bindings (b->class_shadowed, old_bindings);
8d08fdba 1915
8d08fdba
MS
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 }
8d08fdba
MS
1920
1921 s->old_binding_level = current_binding_level;
5566b478 1922 current_binding_level = b;
8d08fdba
MS
1923
1924 s->class_name = current_class_name;
1925 s->class_type = current_class_type;
8d08fdba
MS
1926 s->function_decl = current_function_decl;
1927 s->class_bindings = class_binding_level;
51c184be
MS
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;
5566b478
MS
1932 s->minimal_parse_mode = minimal_parse_mode;
1933 s->last_function_parms = last_function_parms;
e76a2646 1934 s->template_parms = current_template_parms;
5156628f 1935 s->processing_template_decl = processing_template_decl;
a50f0918
MS
1936 s->previous_class_type = previous_class_type;
1937 s->previous_class_values = previous_class_values;
e1467ff2
MM
1938 s->processing_specialization = processing_specialization;
1939 s->processing_explicit_instantiation = processing_explicit_instantiation;
e349ee73 1940
5f34005f 1941 current_class_name = current_class_type = NULL_TREE;
8d08fdba
MS
1942 current_function_decl = NULL_TREE;
1943 class_binding_level = (struct binding_level *)0;
51c184be
MS
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;
5566b478 1950 minimal_parse_mode = 0;
a50f0918 1951 previous_class_type = previous_class_values = NULL_TREE;
e1467ff2
MM
1952 processing_specialization = 0;
1953 processing_explicit_instantiation = 0;
e76a2646 1954 if (!pseudo)
5156628f
MS
1955 {
1956 current_template_parms = NULL_TREE;
1957 processing_template_decl = 0;
1958 }
8d08fdba
MS
1959
1960 s->prev = current_saved_scope;
1961 s->old_bindings = old_bindings;
1962 current_saved_scope = s;
5566b478
MS
1963
1964 push_obstacks (&permanent_obstack, &permanent_obstack);
1965}
1966
1967void
1968push_to_top_level ()
1969{
1970 maybe_push_to_top_level (0);
8d08fdba
MS
1971}
1972
1973void
1974pop_from_top_level ()
1975{
51c184be 1976 extern int current_lang_stacksize;
8d08fdba
MS
1977 struct saved_scope *s = current_saved_scope;
1978 tree t;
1979
e76a2646 1980 /* Clear out class-level bindings cache. */
8d08fdba 1981 if (previous_class_type)
e76a2646
MS
1982 {
1983 popclass (-1);
1984 previous_class_type = NULL_TREE;
1985 }
8d08fdba 1986
5566b478
MS
1987 pop_obstacks ();
1988
8d08fdba
MS
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;
8d08fdba
MS
2003 current_function_decl = s->function_decl;
2004 class_binding_level = s->class_bindings;
51c184be
MS
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;
5566b478
MS
2014 minimal_parse_mode = s->minimal_parse_mode;
2015 last_function_parms = s->last_function_parms;
e76a2646 2016 current_template_parms = s->template_parms;
5156628f 2017 processing_template_decl = s->processing_template_decl;
a50f0918
MS
2018 previous_class_type = s->previous_class_type;
2019 previous_class_values = s->previous_class_values;
e1467ff2
MM
2020 processing_specialization = s->processing_specialization;
2021 processing_explicit_instantiation = s->processing_explicit_instantiation;
51c184be 2022
8d08fdba 2023 free (s);
e349ee73
MS
2024
2025 if (current_function_decl)
2026 pop_cp_function_context (NULL_TREE);
8d08fdba
MS
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
e92cc029 2036 C++ gratuitously puts all these tags in the name space. */
8d08fdba
MS
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
2042static void
2043set_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
e92cc029 2057/* As set_identifier_type_value_with_scope, but using inner_binding_level. */
8d08fdba
MS
2058
2059void
2060set_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
a9aedbc2
MS
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. */
e92cc029 2070
8926095f
MS
2071void
2072pop_everything ()
2073{
2074#ifdef DEBUG_CP_BINDING_LEVELS
2075 fprintf (stderr, "XXX entering pop_everything ()\n");
2076#endif
a9aedbc2 2077 while (! toplevel_bindings_p () && ! pseudo_global_level_p ())
8926095f
MS
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
8d08fdba 2089/* Push a tag name NAME for struct/class/union/enum type TYPE.
ddd5a7c1 2090 Normally put into into the inner-most non-tag-transparent scope,
8d08fdba 2091 but if GLOBALIZE is true, put it in the inner-most non-class scope.
e92cc029 2092 The latter is needed for implicit declarations. */
8d08fdba
MS
2093
2094void
2095pushtag (name, type, globalize)
2096 tree name, type;
2097 int globalize;
2098{
2099 register struct binding_level *b;
7177d104 2100 tree context = 0;
2986ae00 2101 tree c_decl = 0;
8d08fdba
MS
2102
2103 b = inner_binding_level;
2104 while (b->tag_transparent
2105 || (globalize && b->parm_flag == 2))
2106 b = b->level_chain;
2107
a9aedbc2 2108 if (toplevel_bindings_p ())
8d08fdba
MS
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 {
7177d104
MS
2115 context = type ? TYPE_CONTEXT (type) : NULL_TREE;
2116 if (! context && ! globalize)
2117 context = current_scope ();
2118 if (context)
2986ae00 2119 c_decl = TREE_CODE (context) == FUNCTION_DECL
e1cd6e56 2120 ? context : TYPE_MAIN_DECL (context);
8d08fdba 2121
8d08fdba 2122 /* Do C++ gratuitous typedefing. */
db5ae43f 2123 if (IDENTIFIER_TYPE_VALUE (name) != type)
8d08fdba
MS
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 {
2986ae00 2131 d = lookup_nested_type (type, c_decl);
8d08fdba
MS
2132
2133 if (d == NULL_TREE)
2134 {
2135 newdecl = 1;
8d08fdba 2136 d = build_decl (TYPE_DECL, name, type);
00595019 2137 SET_DECL_ARTIFICIAL (d);
8d08fdba
MS
2138 set_identifier_type_value_with_scope (name, type, b);
2139 }
2140 else
d2e5ee5c 2141 d = TYPE_MAIN_DECL (d);
8d08fdba 2142
e1cd6e56 2143 TYPE_NAME (type) = d;
5566b478 2144 DECL_CONTEXT (d) = context;
5156628f 2145 if (! globalize && processing_template_decl && IS_AGGR_TYPE (type))
5566b478 2146 push_template_decl (d);
e1cd6e56 2147
faf5394a
MS
2148 if (b->parm_flag == 2)
2149 d = pushdecl_class_level (d);
2150 else
2151 d = pushdecl_with_scope (d, b);
8d08fdba
MS
2152 }
2153 else
2154 {
2155 /* Make nested declarations go into class-level scope. */
2156 newdecl = 1;
a0a33927 2157 d = build_decl (TYPE_DECL, name, type);
00595019 2158 SET_DECL_ARTIFICIAL (d);
d2e5ee5c 2159 TYPE_NAME (type) = d;
5566b478 2160 DECL_CONTEXT (d) = context;
5156628f 2161 if (! globalize && processing_template_decl && IS_AGGR_TYPE (type))
5566b478 2162 push_template_decl (d);
e1cd6e56 2163
8d08fdba 2164 d = pushdecl_class_level (d);
8d08fdba 2165 }
8ccc31eb 2166 if (newdecl)
8d08fdba 2167 {
d2e5ee5c
MS
2168 if (ANON_AGGRNAME_P (name))
2169 DECL_IGNORED_P (d) = 1;
8ccc31eb 2170
5566b478 2171 TYPE_CONTEXT (type) = DECL_CONTEXT (d);
1f06b267 2172 DECL_ASSEMBLER_NAME (d) = DECL_NAME (d);
8ccc31eb
MS
2173 DECL_ASSEMBLER_NAME (d)
2174 = get_identifier (build_overload_name (type, 1, 1));
8d08fdba 2175 }
8d08fdba
MS
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
8d08fdba 2198 tree d = build_decl (TYPE_DECL, NULL_TREE, type);
8d08fdba
MS
2199 TYPE_STUB_DECL (type) = pushdecl_with_scope (d, b);
2200 }
2201}
2202
2203/* Counter used to create anonymous type names. */
e92cc029 2204
8d08fdba
MS
2205static int anon_cnt = 0;
2206
2207/* Return an IDENTIFIER which can be used as a name for
2208 anonymous structs and unions. */
e92cc029 2209
8d08fdba
MS
2210tree
2211make_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. */
e92cc029 2221
8d08fdba
MS
2222void
2223clear_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&'. */
e92cc029 2256
6060a796 2257int
8d08fdba
MS
2258decls_match (newdecl, olddecl)
2259 tree newdecl, olddecl;
2260{
2261 int types_match;
2262
a28e3c7f
MS
2263 if (TREE_CODE (newdecl) == FUNCTION_DECL
2264 && TREE_CODE (olddecl) == FUNCTION_DECL)
8d08fdba
MS
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))
700f8a87 2276 revert_static_member_fn (&newdecl, &f1, &p1);
8d08fdba
MS
2277 else if (TREE_CODE (f2) == METHOD_TYPE
2278 && DECL_STATIC_FUNCTION_P (newdecl))
700f8a87 2279 revert_static_member_fn (&olddecl, &f2, &p2);
8d08fdba
MS
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
39211cd5 2294 if (comptypes (TREE_TYPE (f1), TREE_TYPE (f2), 1))
8926095f 2295 {
a28e3c7f 2296 if (! strict_prototypes_lang_c && DECL_LANGUAGE (olddecl) == lang_c
8926095f 2297 && p2 == NULL_TREE)
a28e3c7f
MS
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 }
8926095f 2309 else
a4443a08 2310 types_match = compparms (p1, p2, 3);
8926095f 2311 }
8d08fdba
MS
2312 else
2313 types_match = 0;
2314 }
51c184be
MS
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);
98c1c668 2320 int i;
51c184be 2321
956d6950 2322 /* Run through all the levels of template parameters, checking
98c1c668
JM
2323 that they match. */
2324 while (newargs && oldargs)
51c184be 2325 {
98c1c668
JM
2326 int len = TREE_VEC_LENGTH (INNERMOST_TEMPLATE_PARMS (newargs));
2327
2328 if (TREE_VEC_LENGTH (INNERMOST_TEMPLATE_PARMS (oldargs)) != len)
51c184be 2329 return 0;
98c1c668
JM
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);
51c184be
MS
2348 }
2349
98c1c668
JM
2350 if ((newargs == NULL_TREE) != (oldargs == NULL_TREE))
2351 /* One declaration has more levels that the other. */
2352 return 0;
2353
5566b478 2354 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
51c184be
MS
2355 types_match = 1;
2356 else
2357 types_match = decls_match (DECL_TEMPLATE_RESULT (olddecl),
2358 DECL_TEMPLATE_RESULT (newdecl));
2359 }
8d08fdba
MS
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;
a0a33927
MS
2366 else if (TREE_TYPE (newdecl) == NULL_TREE)
2367 types_match = 0;
72b7eeff
MS
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);
8d08fdba 2380 else
72b7eeff 2381 types_match = 0;
8d08fdba
MS
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
8d08fdba
MS
2394 Don't complain about built-in functions, since they are beyond
2395 the user's control. */
2396
2397static void
2398warn_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
d22c8596 2408 if (TREE_CODE (newdecl) == TYPE_DECL)
8d08fdba
MS
2409 return;
2410
2411 name = DECL_ASSEMBLER_NAME (newdecl);
faae18ab 2412 if (TREE_PUBLIC (name) && DECL_THIS_STATIC (newdecl))
8d08fdba
MS
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 {
a9aedbc2 2422 cp_pedwarn (IDENTIFIER_IMPLICIT_DECL (name)
8d08fdba
MS
2423 ? implicit_extern_static_warning
2424 : explicit_extern_static_warning, newdecl);
2425 if (olddecl != NULL_TREE)
a9aedbc2 2426 cp_pedwarn_at ("previous declaration of `%D'", olddecl);
8d08fdba
MS
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
51c184be 2438int
8d08fdba 2439duplicate_decls (newdecl, olddecl)
824b9a4c 2440 tree newdecl, olddecl;
8d08fdba
MS
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;
5566b478
MS
2446
2447 if (newdecl == olddecl)
2448 return 1;
8d08fdba 2449
f6abb50a
BK
2450 if (TREE_CODE_CLASS (TREE_CODE (olddecl)) == 'd')
2451 DECL_MACHINE_ATTRIBUTES (newdecl) = DECL_MACHINE_ATTRIBUTES (olddecl);
2452
8926095f 2453 types_match = decls_match (newdecl, olddecl);
8d08fdba
MS
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. */
bd6dd845
MS
2463 if (TREE_TYPE (newdecl) == error_mark_node
2464 || TREE_TYPE (olddecl) == error_mark_node)
8d08fdba
MS
2465 types_match = 1;
2466
d22c8596
MS
2467 if (TREE_CODE (olddecl) == FUNCTION_DECL
2468 && DECL_ARTIFICIAL (olddecl)
2469 && (DECL_BUILT_IN (olddecl) || DECL_BUILT_IN_NONANSI (olddecl)))
8d08fdba
MS
2470 {
2471 /* If you declare a built-in or predefined function name as static,
a4443a08
MS
2472 the old definition is overridden, but optionally warn this was a
2473 bad choice of name. Ditto for overloads. */
893de33c 2474 if (! TREE_PUBLIC (newdecl)
a4443a08
MS
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)
8d08fdba 2486 {
a4443a08
MS
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
8d08fdba
MS
2503 cp_warning ("declaration of `%#D'", newdecl);
2504 cp_warning ("conflicts with built-in declaration `%#D'",
2505 olddecl);
8d08fdba 2506 }
39211cd5
MS
2507 }
2508 else if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
2509 {
2510 if ((TREE_CODE (newdecl) == FUNCTION_DECL
5566b478 2511 && DECL_FUNCTION_TEMPLATE_P (olddecl))
39211cd5 2512 || (TREE_CODE (olddecl) == FUNCTION_DECL
5566b478 2513 && DECL_FUNCTION_TEMPLATE_P (newdecl)))
39211cd5
MS
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;
8d08fdba 2525 }
8d08fdba
MS
2526 else if (!types_match)
2527 {
8926095f 2528 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
f0e01782
MS
2529 {
2530 /* The name of a class template may not be declared to refer to
2531 any other template, class, function, object, namespace, value,
e92cc029 2532 or type in the same scope. */
5566b478
MS
2533 if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == TYPE_DECL
2534 || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
f0e01782
MS
2535 {
2536 cp_error ("declaration of template `%#D'", newdecl);
2537 cp_error_at ("conflicts with previous declaration `%#D'",
2538 olddecl);
2539 }
ec255269
MS
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))),
75650646
MM
2543 TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl))), 3)
2544 && comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
2545 DECL_TEMPLATE_PARMS (olddecl)))
ec255269
MS
2546 {
2547 cp_error ("new declaration `%#D'", newdecl);
2548 cp_error_at ("ambiguates old declaration `%#D'", olddecl);
2549 }
f0e01782
MS
2550 return 0;
2551 }
8926095f
MS
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 }
00595019 2561 else if (compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
28cbf42c 2562 TYPE_ARG_TYPES (TREE_TYPE (olddecl)), 3))
700f8a87
MS
2563 {
2564 cp_error ("new declaration `%#D'", newdecl);
2565 cp_error_at ("ambiguates old declaration `%#D'", olddecl);
2566 }
2567 else
2568 return 0;
8926095f 2569 }
8d08fdba
MS
2570
2571 /* Already complained about this, so don't do so again. */
a4443a08 2572 else if (current_class_type == NULL_TREE
8d08fdba
MS
2573 || IDENTIFIER_ERROR_LOCUS (DECL_ASSEMBLER_NAME (newdecl)) != current_class_type)
2574 {
f376e137 2575 cp_error ("conflicting types for `%#D'", newdecl);
8926095f 2576 cp_error_at ("previous declaration as `%#D'", olddecl);
8d08fdba
MS
2577 }
2578 }
75650646
MM
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))))))
386b8a85
JM
2588 /* It's OK to have a template specialization and a non-template
2589 with the same type, or to have specializations of two
75650646
MM
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. */
386b8a85 2604 return 0;
8d08fdba
MS
2605 else
2606 {
2607 char *errmsg = redeclaration_error_message (newdecl, olddecl);
2608 if (errmsg)
2609 {
51c184be 2610 cp_error (errmsg, newdecl);
8d08fdba
MS
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))
8926095f
MS
2628 {
2629 /* extern "C" int foo ();
2630 int foo () { bar (); }
2631 is OK. */
2632 if (current_lang_stack == current_lang_base)
a28e3c7f 2633 DECL_LANGUAGE (newdecl) = DECL_LANGUAGE (olddecl);
8926095f
MS
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 }
e1cd6e56 2642
a6f02587 2643 if (DECL_LANG_SPECIFIC (olddecl) && DECL_USE_TEMPLATE (olddecl))
c32381b1
JM
2644 ;
2645 else if (TREE_CODE (olddecl) == FUNCTION_DECL)
e1cd6e56
MS
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 {
2507f3b5
RK
2658 if (1 == simple_cst_equal (TREE_PURPOSE (t1),
2659 TREE_PURPOSE (t2)))
e1cd6e56
MS
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);
da20811c 2673 cp_error_at ("after previous specification in `%#D'",
e1cd6e56
MS
2674 olddecl);
2675 }
2676 }
a5894242 2677
7fcdf4c2
MS
2678 if (DECL_THIS_INLINE (newdecl) && ! DECL_THIS_INLINE (olddecl)
2679 && TREE_ADDRESSABLE (olddecl) && warn_inline)
dff6b454 2680 {
7fcdf4c2
MS
2681 cp_warning ("`%#D' was used before it was declared inline",
2682 newdecl);
2683 cp_warning_at ("previous non-inline declaration here",
2684 olddecl);
dff6b454 2685 }
e1cd6e56 2686 }
8ccc31eb
MS
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 }
8d08fdba
MS
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
e92cc029 2700 /* We have committed to returning 1 at this point. */
8d08fdba
MS
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);
e1cd6e56
MS
2717 DECL_STATIC_CONSTRUCTOR (newdecl) |= DECL_STATIC_CONSTRUCTOR (olddecl);
2718 DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
7215f9a0 2719 DECL_ABSTRACT_VIRTUAL_P (newdecl) |= DECL_ABSTRACT_VIRTUAL_P (olddecl);
864b83b9 2720 DECL_VIRTUAL_P (newdecl) |= DECL_VIRTUAL_P (olddecl);
8d08fdba
MS
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 }
8d08fdba
MS
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
700f8a87 2745 && ! DECL_ARTIFICIAL (olddecl)
8d08fdba
MS
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);
44a8d0b3 2751 cp_warning_at ("previous declaration of `%D'", olddecl);
8d08fdba
MS
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
5566b478
MS
2757 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
2758 {
37dac039
JM
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 }
5566b478
MS
2765 return 1;
2766 }
2767
8d08fdba
MS
2768 if (types_match)
2769 {
2770 /* Automatically handles default parameters. */
2771 tree oldtype = TREE_TYPE (olddecl);
e1cd6e56 2772 tree newtype;
8d08fdba 2773
e1cd6e56
MS
2774 /* Make sure we put the new type in the same obstack as the old one. */
2775 if (oldtype)
39211cd5
MS
2776 push_obstacks (TYPE_OBSTACK (oldtype), TYPE_OBSTACK (oldtype));
2777 else
2778 {
2779 push_obstacks_nochange ();
2780 end_temporary_allocation ();
2781 }
2782
e1cd6e56
MS
2783 /* Merge the data types specified in the two decls. */
2784 newtype = common_type (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
2785
8d08fdba
MS
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 {
f30432d7 2794 TREE_TYPE (newdecl) = build_exception_variant (newtype,
8d08fdba 2795 TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl)));
f30432d7 2796 TREE_TYPE (olddecl) = build_exception_variant (newtype,
8d08fdba
MS
2797 TYPE_RAISES_EXCEPTIONS (oldtype));
2798
047f64a3
JM
2799 if ((pedantic || (! DECL_IN_SYSTEM_HEADER (olddecl)
2800 && DECL_SOURCE_LINE (olddecl) != 0))
da20811c 2801 && flag_exceptions
824b9a4c 2802 && ! compexcepttypes (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
8d08fdba 2803 {
824b9a4c 2804 cp_pedwarn ("declaration of `%D' throws different exceptions",
a28e3c7f 2805 newdecl);
824b9a4c 2806 cp_pedwarn_at ("previous declaration here", olddecl);
8d08fdba
MS
2807 }
2808 }
2809 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
2810
2811 /* Lay the type out, unless already done. */
b7484fbe 2812 if (oldtype != TREE_TYPE (newdecl)
5566b478 2813 && TREE_TYPE (newdecl) != error_mark_node
5156628f 2814 && !(processing_template_decl && uses_template_parms (newdecl)))
b7484fbe
MS
2815 layout_type (TREE_TYPE (newdecl));
2816
5566b478
MS
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)
5156628f 2822 && !(processing_template_decl && uses_template_parms (newdecl)))
b7484fbe 2823 layout_decl (newdecl, 0);
8d08fdba
MS
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. */
8926095f
MS
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 }
39211cd5
MS
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
8d08fdba
MS
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);
39211cd5
MS
2853
2854 pop_obstacks ();
8d08fdba
MS
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. */
a9aedbc2 2872 DECL_WEAK (newdecl) |= DECL_WEAK (olddecl);
e92cc029 2873 DECL_ONE_ONLY (newdecl) |= DECL_ONE_ONLY (olddecl);
a9aedbc2
MS
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;
8d08fdba 2878
5566b478 2879 if (DECL_LANG_SPECIFIC (newdecl))
8d08fdba 2880 {
a9aedbc2
MS
2881 DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl);
2882 DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl);
77be6f82 2883 DECL_COMDAT (newdecl) |= DECL_COMDAT (olddecl);
8d08fdba
MS
2884 }
2885
8d08fdba
MS
2886 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2887 {
75650646
MM
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 }
faae18ab
MS
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
700f8a87
MS
2919 if (! types_match)
2920 {
2921 DECL_LANGUAGE (olddecl) = DECL_LANGUAGE (newdecl);
2922 DECL_ASSEMBLER_NAME (olddecl) = DECL_ASSEMBLER_NAME (newdecl);
5566b478
MS
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. */
700f8a87
MS
2928 DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
2929 DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
700f8a87 2930 }
8d08fdba
MS
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;
39211cd5 2942 DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
8d08fdba
MS
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);
8926095f 2951 if ((DECL_SAVED_INSNS (newdecl) = DECL_SAVED_INSNS (olddecl)))
8d08fdba
MS
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 }
6060a796
MS
2959 if (DECL_LANG_SPECIFIC (olddecl))
2960 DECL_MAIN_VARIANT (newdecl) = DECL_MAIN_VARIANT (olddecl);
8d08fdba
MS
2961 }
2962
a9aedbc2
MS
2963 if (TREE_CODE (newdecl) == NAMESPACE_DECL)
2964 {
2965 NAMESPACE_LEVEL (newdecl) = NAMESPACE_LEVEL (olddecl);
2966 }
2967
8926095f
MS
2968 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
2969 {
75650646
MM
2970 DECL_TEMPLATE_SPECIALIZATIONS (newdecl)
2971 = DECL_TEMPLATE_SPECIALIZATIONS (olddecl);
f376e137
MS
2972 if (DECL_CHAIN (newdecl) == NULL_TREE)
2973 DECL_CHAIN (newdecl) = DECL_CHAIN (olddecl);
8926095f 2974 }
5566b478 2975
8d08fdba
MS
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);
f376e137 2980 DECL_ASSEMBLER_NAME (newdecl) = DECL_ASSEMBLER_NAME (olddecl);
8d08fdba
MS
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);
db5ae43f 2988 DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl);
5566b478
MS
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 }
8d08fdba
MS
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
75650646
MM
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
8d08fdba
MS
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 }
d22c8596 3055 else if (LANG_DECL_PERMANENT (ol) && ol != nl)
8d08fdba
MS
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;
d22c8596
MS
3062
3063 if (DECL_LANG_SPECIFIC (olddecl) == ol)
3064 abort ();
3065
8d08fdba
MS
3066 TREE_CHAIN (free_lang_decl) = free_lang_decl_chain;
3067 free_lang_decl_chain = free_lang_decl;
3068 }
3069 else
3070 {
bd6dd845 3071 /* Storage leak. */;
8d08fdba
MS
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
3098tree
3099pushdecl (x)
3100 tree x;
3101{
3102 register tree t;
8d08fdba 3103 register tree name = DECL_ASSEMBLER_NAME (x);
8d08fdba
MS
3104 register struct binding_level *b = current_binding_level;
3105
8d08fdba 3106 if (x != current_function_decl
700f8a87
MS
3107 /* Don't change DECL_CONTEXT of virtual methods. */
3108 && (TREE_CODE (x) != FUNCTION_DECL || !DECL_VIRTUAL_P (x))
8d08fdba
MS
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
8d08fdba 3115 /* Type are looked up using the DECL_NAME, as that is what the rest of the
e92cc029 3116 compiler wants to use. */
a9aedbc2 3117 if (TREE_CODE (x) == TYPE_DECL || TREE_CODE (x) == VAR_DECL
73b0fce8
KL
3118 || TREE_CODE (x) == NAMESPACE_DECL || TREE_CODE (x) == TEMPLATE_TYPE_PARM
3119 || TREE_CODE (x) == TEMPLATE_TEMPLATE_PARM)
8d08fdba 3120 name = DECL_NAME (x);
8d08fdba
MS
3121
3122 if (name)
3123 {
5566b478
MS
3124#if 0
3125 /* Not needed...see below. */
8d08fdba
MS
3126 char *file;
3127 int line;
5566b478 3128#endif
386b8a85
JM
3129 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
3130 name = TREE_OPERAND (name, 0);
3131
700f8a87 3132 t = lookup_name_current_level (name);
8d08fdba
MS
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
51c184be 3140 else if (t != NULL_TREE)
8d08fdba 3141 {
5566b478
MS
3142#if 0
3143 /* This is turned off until I have time to do it right (bpk). */
e92cc029 3144 /* With the code below that uses it... */
8d6e462b
PB
3145 file = DECL_SOURCE_FILE (t);
3146 line = DECL_SOURCE_LINE (t);
5566b478 3147#endif
2ee887f2 3148 if (TREE_CODE (t) == PARM_DECL)
8d08fdba
MS
3149 {
3150 if (DECL_CONTEXT (t) == NULL_TREE)
3151 fatal ("parse errors have confused me too much");
be99da77 3152
e92cc029 3153 /* Check for duplicate params. */
be99da77
MS
3154 if (duplicate_decls (x, t))
3155 return t;
8d08fdba 3156 }
8d6e462b 3157 else if (((TREE_CODE (x) == FUNCTION_DECL && DECL_LANGUAGE (x) == lang_c)
5566b478
MS
3158 || DECL_FUNCTION_TEMPLATE_P (x))
3159 && is_overloaded_fn (t))
8926095f 3160 /* don't do anything just yet */;
e1cd6e56
MS
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 }
8926095f 3169 else if (TREE_CODE (t) != TREE_CODE (x))
8d08fdba 3170 {
ec255269
MS
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))))
51c184be
MS
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;
8d08fdba
MS
3190 }
3191 else if (duplicate_decls (x, t))
51c184be 3192 {
8d08fdba 3193#if 0
8926095f 3194 /* This is turned off until I have time to do it right (bpk). */
8d08fdba 3195
8926095f
MS
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))
8d08fdba 3199 {
8926095f
MS
3200 if (DECL_LANG_SPECIFIC (t) && DECL_FRIEND_P (t))
3201 return t;
8d08fdba 3202
8926095f
MS
3203 if (extra_warnings)
3204 {
a28e3c7f
MS
3205 cp_warning ("`static' missing from declaration of `%D'",
3206 t);
8926095f
MS
3207 warning_with_file_and_line (file, line,
3208 "previous declaration of `%s'",
3209 decl_as_string (t, 0));
3210 }
8d08fdba 3211
8926095f
MS
3212 /* Now fix things so it'll do what they expect. */
3213 if (current_function_decl)
3214 TREE_PUBLIC (current_function_decl) = 0;
3215 }
51c184be
MS
3216 /* Due to interference in memory reclamation (X may be
3217 obstack-deallocated at this point), we must guard against
8926095f
MS
3218 one really special case. [jason: This should be handled
3219 by start_function] */
51c184be
MS
3220 if (current_function_decl == x)
3221 current_function_decl = t;
8926095f 3222#endif
7177d104
MS
3223 if (TREE_CODE (t) == TYPE_DECL)
3224 SET_IDENTIFIER_TYPE_VALUE (name, TREE_TYPE (t));
f30432d7
MS
3225 else if (TREE_CODE (t) == FUNCTION_DECL)
3226 check_default_args (t);
7177d104 3227
51c184be
MS
3228 return t;
3229 }
8d08fdba 3230 }
8926095f
MS
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 }
5566b478 3238 else if (DECL_FUNCTION_TEMPLATE_P (x) && DECL_CONTEXT (x) == NULL_TREE)
8926095f 3239 return push_overloaded_decl (x, 0);
8d08fdba
MS
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 }
8d08fdba
MS
3256 my_friendly_assert (TREE_CODE (name) == TYPE_DECL, 140);
3257
8d08fdba
MS
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.
39211cd5
MS
3267 We get warnings about other functions from push_overloaded_decl.
3268
8d08fdba 3269 Avoid duplicate warnings where they are used. */
39211cd5 3270 if (TREE_PUBLIC (x) && TREE_CODE (x) != FUNCTION_DECL)
8d08fdba
MS
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
39211cd5 3281 if (decl
8d08fdba
MS
3282 /* If different sort of thing, we already gave an error. */
3283 && TREE_CODE (decl) == TREE_CODE (x)
39211cd5 3284 && ! comptypes (TREE_TYPE (x), TREE_TYPE (decl), 1))
8d08fdba
MS
3285 {
3286 cp_pedwarn ("type mismatch with previous external decl", x);
8926095f 3287 cp_pedwarn_at ("previous external decl of `%#D'", decl);
8d08fdba
MS
3288 }
3289 }
3290
8d08fdba
MS
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
8d08fdba
MS
3297 /* If the first global decl has external linkage,
3298 warn if we later see static one. */
893de33c 3299 if (IDENTIFIER_GLOBAL_VALUE (name) == NULL_TREE && TREE_PUBLIC (x))
8d08fdba
MS
3300 TREE_PUBLIC (name) = 1;
3301
e1cd6e56
MS
3302 /* Don't install an artificial TYPE_DECL if we already have
3303 another _DECL with that name. */
8d08fdba
MS
3304 if (TREE_CODE (x) != TYPE_DECL
3305 || t == NULL_TREE
e1cd6e56 3306 || ! DECL_ARTIFICIAL (x))
8d08fdba
MS
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. */
a0a33927
MS
3329 if (x != NULL_TREE && t != NULL_TREE && decls_match (x, t))
3330 warn_extern_redeclared_static (x, t);
8d08fdba
MS
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
e1cd6e56
MS
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 }
8d08fdba
MS
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
a9aedbc2
MS
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
8d08fdba
MS
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
faae18ab 3361 && DECL_EXTERNAL (x)
8d08fdba
MS
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. */
44a8d0b3 3367 if (decls_match (x, oldglobal))
6060a796
MS
3368 /* OK */;
3369 else
8d08fdba
MS
3370 {
3371 cp_warning ("extern declaration of `%#D' doesn't match", x);
3372 cp_warning_at ("global declaration `%#D'", oldglobal);
3373 }
8d08fdba
MS
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 }
72b7eeff 3405 else if (warn_shadow && oldlocal != NULL_TREE && b->is_for_scope
8d6e462b
PB
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 }
8d08fdba
MS
3412 /* Maybe warn if shadowing something else. */
3413 else if (warn_shadow && !DECL_EXTERNAL (x)
3414 /* No shadow warnings for internally generated vars. */
700f8a87 3415 && ! DECL_ARTIFICIAL (x)
8d08fdba
MS
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
4ac14744 3424 && current_class_ptr
8d08fdba
MS
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 }
e1cd6e56 3435 }
8d08fdba 3436
e1cd6e56 3437 if (TREE_CODE (x) == FUNCTION_DECL)
f30432d7 3438 check_default_args (x);
8145f082
MS
3439
3440 /* Keep count of variables in this level with incomplete type. */
8145f082 3441 if (TREE_CODE (x) == VAR_DECL
28cbf42c 3442 && TREE_TYPE (x) != error_mark_node
f30432d7
MS
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);
8d08fdba
MS
3449 }
3450
8d08fdba
MS
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
5566b478
MS
3461/* Same as pushdecl, but define X in binding-level LEVEL. We rely on the
3462 caller to set DECL_CONTEXT properly. */
8d08fdba
MS
3463
3464static tree
3465pushdecl_with_scope (x, level)
3466 tree x;
3467 struct binding_level *level;
3468{
3469 register struct binding_level *b = current_binding_level;
5566b478 3470 tree function_decl = current_function_decl;
8d08fdba 3471
5566b478 3472 current_function_decl = NULL_TREE;
8d08fdba
MS
3473 current_binding_level = level;
3474 x = pushdecl (x);
3475 current_binding_level = b;
5566b478 3476 current_function_decl = function_decl;
8d08fdba
MS
3477 return x;
3478}
3479
3480/* Like pushdecl, only it places X in GLOBAL_BINDING_LEVEL,
3481 if appropriate. */
e92cc029 3482
8d08fdba
MS
3483tree
3484pushdecl_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 {
8d08fdba
MS
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. */
e92cc029 3526
bd6dd845 3527static void
8d08fdba
MS
3528push_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. */
e92cc029 3540
8d08fdba
MS
3541tree
3542pushdecl_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 {
8d2733ca
MS
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
5566b478 3558 if (icv && icv != x
a4443a08
MS
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))
8d2733ca
MS
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
8d08fdba
MS
3571 push_class_level_binding (name, x);
3572 if (TREE_CODE (x) == TYPE_DECL)
3573 {
3574 set_identifier_type_value (name, TREE_TYPE (x));
8d08fdba
MS
3575 }
3576 }
3577 return x;
3578}
3579
bd6dd845 3580#if 0
7177d104
MS
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. */
e92cc029 3584
5566b478 3585void
7177d104
MS
3586pushdecl_nonclass_level (x)
3587 tree x;
3588{
3589 struct binding_level *b = current_binding_level;
3590
7177d104 3591 my_friendly_assert (b->parm_flag != 2, 180);
7177d104 3592
5566b478 3593#if 0
7177d104
MS
3594 /* Get out of template binding levels */
3595 while (b->pseudo_global)
3596 b = b->level_chain;
5566b478 3597#endif
7177d104
MS
3598
3599 pushdecl_with_scope (x, b);
3600}
bd6dd845 3601#endif
7177d104 3602
8d08fdba
MS
3603/* Make the declaration(s) of X appear in CLASS scope
3604 under the name NAME. */
e92cc029 3605
8d08fdba
MS
3606void
3607push_class_level_binding (name, x)
3608 tree name;
3609 tree x;
3610{
98c1c668
JM
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
e1cd6e56
MS
3616 if (TREE_CODE (x) == TYPE_DECL && DECL_ARTIFICIAL (x)
3617 && purpose_member (name, class_binding_level->class_shadowed))
3618 return;
3619
8d08fdba
MS
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. */
e92cc029 3631
8d08fdba
MS
3632int
3633overloaded_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;
8d08fdba 3641 /* Do commit caller to not seeing them as globals. */
5566b478
MS
3642 if (TREE_CODE (TREE_VALUE (list)) == TREE_LIST)
3643 return 0;
3644 /* Do commit caller to seeing them as globals. */
3645 return 1;
8d08fdba
MS
3646}
3647
700f8a87
MS
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
8d08fdba
MS
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). */
e92cc029 3660
bd6dd845 3661static tree
8d08fdba
MS
3662push_overloaded_decl (decl, forgettable)
3663 tree decl;
3664 int forgettable;
3665{
3666 tree orig_name = DECL_NAME (decl);
700f8a87 3667 tree old;
5566b478 3668 int doing_global = (global_bindings_p () || ! forgettable);
700f8a87
MS
3669
3670 if (doing_global)
3671 {
3672 old = IDENTIFIER_GLOBAL_VALUE (orig_name);
3673 if (old && TREE_CODE (old) == FUNCTION_DECL
a4443a08 3674 && DECL_ARTIFICIAL (old)
700f8a87
MS
3675 && (DECL_BUILT_IN (old) || DECL_BUILT_IN_NONANSI (old)))
3676 {
a4443a08
MS
3677 if (duplicate_decls (decl, old))
3678 return old;
700f8a87
MS
3679 old = NULL_TREE;
3680 }
3681 }
3682 else
3683 {
3684 old = IDENTIFIER_LOCAL_VALUE (orig_name);
a4443a08 3685
700f8a87
MS
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 }
8d08fdba 3693
700f8a87 3694 if (old)
8d08fdba 3695 {
e1cd6e56 3696 if (TREE_CODE (old) == TYPE_DECL && DECL_ARTIFICIAL (old))
8926095f 3697 {
700f8a87 3698 tree t = TREE_TYPE (old);
cdf5b885
MS
3699 if (IS_AGGR_TYPE (t) && warn_shadow
3700 && (! DECL_IN_SYSTEM_HEADER (decl)
3701 || ! DECL_IN_SYSTEM_HEADER (old)))
8926095f 3702 cp_warning ("`%#D' hides constructor for `%#T'", decl, t);
5b605f68 3703 old = NULL_TREE;
8926095f 3704 }
700f8a87 3705 else if (is_overloaded_fn (old))
8d08fdba 3706 {
8d08fdba
MS
3707 tree tmp;
3708
700f8a87
MS
3709 for (tmp = get_first_fn (old); tmp; tmp = DECL_CHAIN (tmp))
3710 if (decl == tmp || duplicate_decls (decl, tmp))
3711 return tmp;
8d08fdba 3712 }
e1cd6e56
MS
3713 else
3714 {
3715 cp_error_at ("previous non-function declaration `%#D'", old);
3716 cp_error ("conflicts with function declaration `%#D'", decl);
a9aedbc2 3717 return decl;
e1cd6e56 3718 }
8d08fdba 3719 }
7177d104 3720
700f8a87 3721 if (old || TREE_CODE (decl) == TEMPLATE_DECL)
8d08fdba 3722 {
700f8a87
MS
3723 if (old && is_overloaded_fn (old))
3724 DECL_CHAIN (decl) = get_first_fn (old);
8d08fdba
MS
3725 else
3726 DECL_CHAIN (decl) = NULL_TREE;
700f8a87
MS
3727 old = tree_cons (orig_name, decl, NULL_TREE);
3728 TREE_TYPE (old) = unknown_type_node;
8d08fdba
MS
3729 }
3730 else
3731 /* orig_name is not ambiguous. */
700f8a87
MS
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
8d08fdba
MS
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
3745tree
3746implicitly_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. */
d22c8596 3757 if (temp && (! warn_implicit || toplevel_bindings_p ()))
8d08fdba
MS
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.
d22c8596 3769 So we record the decl in the standard fashion. */
8d08fdba
MS
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
3793static char *
3794redeclaration_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. */
8926095f 3802 if (comptypes (TREE_TYPE (newdecl), TREE_TYPE (olddecl), 0))
8d08fdba
MS
3803 return 0;
3804 else
51c184be 3805 return "redefinition of `%#D'";
8d08fdba
MS
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
db5ae43f
MS
3815 /* We'll complain about linkage mismatches in
3816 warn_extern_redeclared_static. */
3817
3818 /* defining the same name twice is no good. */
8d08fdba 3819 if (DECL_INITIAL (olddecl) != NULL_TREE
faae18ab 3820 && DECL_INITIAL (newdecl) != NULL_TREE)
8d08fdba
MS
3821 {
3822 if (DECL_NAME (olddecl) == NULL_TREE)
51c184be 3823 return "`%#D' not declared in class";
8d08fdba 3824 else
51c184be 3825 return "redefinition of `%#D'";
8d08fdba
MS
3826 }
3827 return 0;
3828 }
51c184be
MS
3829 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
3830 {
ec255269
MS
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))))
51c184be
MS
3837 return "redefinition of `%#D'";
3838 return 0;
3839 }
5566b478 3840 else if (toplevel_bindings_p ())
8d08fdba
MS
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;
8926095f
MS
3846 /* Reject two definitions. */
3847 return "redefinition of `%#D'";
8d08fdba
MS
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)))
51c184be 3855 return "redeclaration of `%#D'";
8d08fdba
MS
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
3864tree
3865lookup_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)
e349ee73
MS
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;
8d08fdba
MS
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
cffa8729
MS
3907 /* Make sure every label has an rtx. */
3908 label_rtx (decl);
3909
8d08fdba
MS
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);
e349ee73 3923 named_label_uses->label_decl = decl;
8d08fdba
MS
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
3936tree
3937shadow_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
3956tree
3957define_label (filename, line, name)
3958 char *filename;
3959 int line;
3960 tree name;
3961{
5566b478
MS
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);
8d08fdba
MS
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
e1cd6e56
MS
3989 if (name == get_identifier ("wchar_t"))
3990 cp_pedwarn ("label named wchar_t");
3991
8d08fdba
MS
3992 if (DECL_INITIAL (decl) != NULL_TREE)
3993 {
3994 cp_error ("duplicate label `%D'", decl);
3995 return 0;
3996 }
3997 else
3998 {
e349ee73 3999 struct named_label_list *uses, *prev;
28cbf42c 4000 int identified = 0;
8d08fdba
MS
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
e349ee73
MS
4008 prev = NULL;
4009 uses = named_label_uses;
4010 while (uses != NULL)
4011 if (uses->label_decl == decl)
8d08fdba
MS
4012 {
4013 struct binding_level *b = current_binding_level;
4014 while (b)
4015 {
4016 tree new_decls = b->names;
e349ee73
MS
4017 tree old_decls = (b == uses->binding_level)
4018 ? uses->names_in_scope : NULL_TREE;
8d08fdba
MS
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. */
700f8a87 4026 && ! DECL_ARTIFICIAL (new_decls)
8d08fdba
MS
4027 && ((DECL_INITIAL (new_decls) != NULL_TREE
4028 && DECL_INITIAL (new_decls) != error_mark_node)
4029 || TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (new_decls))))
4030 {
e349ee73
MS
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 }
28cbf42c
MS
4039 cp_error_at (" crosses initialization of `%#D'",
4040 new_decls);
8d08fdba
MS
4041 }
4042 new_decls = TREE_CHAIN (new_decls);
4043 }
e349ee73 4044 if (b == uses->binding_level)
8d08fdba
MS
4045 break;
4046 b = b->level_chain;
4047 }
4048
e349ee73
MS
4049 if (prev != NULL)
4050 prev->next = uses->next;
8d08fdba 4051 else
e349ee73
MS
4052 named_label_uses = uses->next;
4053
4054 uses = uses->next;
4055 }
4056 else
4057 {
4058 prev = uses;
4059 uses = uses->next;
8d08fdba
MS
4060 }
4061 current_function_return_value = NULL_TREE;
4062 return decl;
4063 }
4064}
4065
a5894242
MS
4066struct cp_switch
4067{
4068 struct binding_level *level;
4069 struct cp_switch *next;
4070};
4071
4072static struct cp_switch *switch_stack;
4073
4074void
4075push_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
4084void
4085pop_switch ()
4086{
4087 switch_stack = switch_stack->next;
4088}
4089
8d08fdba
MS
4090/* Same, but for CASE labels. If DECL is NULL_TREE, it's the default. */
4091/* XXX Note decl is never actually used. (bpk) */
e92cc029 4092
8d08fdba
MS
4093void
4094define_case_label (decl)
4095 tree decl;
4096{
4097 tree cleanup = last_cleanup_this_contour ();
a5894242
MS
4098 struct binding_level *b = current_binding_level;
4099 int identified = 0;
4100
8d08fdba
MS
4101 if (cleanup)
4102 {
4103 static int explained = 0;
a5894242
MS
4104 cp_warning_at ("destructor needed for `%#D'", TREE_PURPOSE (cleanup));
4105 warning ("where case label appears here");
8d08fdba
MS
4106 if (!explained)
4107 {
a5894242
MS
4108 warning ("(enclose actions of previous case statements requiring");
4109 warning ("destructors in their own binding contours.)");
8d08fdba
MS
4110 explained = 1;
4111 }
4112 }
4113
a5894242
MS
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
8d08fdba
MS
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
4150tree
4151getdecls ()
4152{
4153 return current_binding_level->names;
4154}
4155
4156/* Return the list of type-tags (for structs, etc) of the current level. */
4157
4158tree
4159gettags ()
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
4168static void
4169storedecls (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
4177static void
4178storetags (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
4195static tree
4196lookup_tag (form, name, binding_level, thislevel_only)
4197 enum tree_code form;
8d08fdba 4198 tree name;
cffa8729 4199 struct binding_level *binding_level;
8d08fdba
MS
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 {
a80e4195 4218 if (TREE_PURPOSE (tail) == name)
8d08fdba
MS
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
5566b478 4224 && !(form != ENUMERAL_TYPE && code == TEMPLATE_DECL))
8d08fdba
MS
4225 {
4226 /* Definition isn't the kind we were looking for. */
4227 cp_error ("`%#D' redeclared as %C", TREE_VALUE (tail),
4228 form);
72b7eeff 4229 return NULL_TREE;
8d08fdba
MS
4230 }
4231 return TREE_VALUE (tail);
4232 }
4233 }
4234 if (thislevel_only && ! level->tag_transparent)
5566b478
MS
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 }
8d08fdba
MS
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);
72b7eeff 4274 return NULL_TREE;
8d08fdba
MS
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. */
d2e5ee5c 4285 context = DECL_CONTEXT (TYPE_MAIN_DECL (context));
8d08fdba
MS
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
bd6dd845 4302#if 0
8d08fdba
MS
4303void
4304set_current_level_tags_transparency (tags_transparent)
4305 int tags_transparent;
4306{
4307 current_binding_level->tag_transparent = tags_transparent;
4308}
bd6dd845 4309#endif
8d08fdba
MS
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
4318static tree
4319lookup_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}
8d08fdba
MS
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. */
e92cc029 4343
8d08fdba
MS
4344static tree
4345lookup_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:
e1cd6e56
MS
4373 if (TYPE_NAME (type) && TYPE_IDENTIFIER (type))
4374 return lookup_name (TYPE_IDENTIFIER (type), 1);
4375 return NULL_TREE;
8d08fdba
MS
4376 default:
4377 my_friendly_abort (12);
4378 }
4379 }
4380 return NULL_TREE;
4381}
4382
a9aedbc2 4383/* Look up NAME in the NAMESPACE. */
e92cc029 4384
a9aedbc2
MS
4385tree
4386lookup_namespace_name (namespace, name)
4387 tree namespace, name;
4388{
4389 struct binding_level *b = (struct binding_level *)NAMESPACE_LEVEL (namespace);
fc378698 4390 tree x = NULL_TREE;
a9aedbc2 4391
fc378698
MS
4392#if 1
4393 /* This searches just one level. */
4394 if (b)
a9aedbc2
MS
4395 {
4396 for (x = b->names; x; x = TREE_CHAIN (x))
4397 if (DECL_NAME (x) == name || DECL_ASSEMBLER_NAME (x) == name)
4398 break;
a9aedbc2 4399 }
fc378698
MS
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
a9aedbc2
MS
4409 return x;
4410}
4411
5566b478
MS
4412tree
4413make_typename_type (context, name)
4414 tree context, name;
4415{
a80e4195
MS
4416 tree t, d;
4417
653cc74a
JM
4418 if (TREE_CODE_CLASS (TREE_CODE (name)) == 't')
4419 name = TYPE_IDENTIFIER (name);
4420 else if (TREE_CODE (name) == TYPE_DECL)
a80e4195
MS
4421 name = DECL_NAME (name);
4422 else if (TREE_CODE (name) != IDENTIFIER_NODE)
4423 my_friendly_abort (2000);
5566b478 4424
85b71cf2 4425 if (! uses_template_parms (context)
7fcdf4c2 4426 || context == current_class_type)
5566b478 4427 {
ffb690bd
JM
4428 if (IS_AGGR_TYPE (context))
4429 t = lookup_field (context, name, 0, 1);
4430 else
4431 t = NULL_TREE;
4432
5566b478
MS
4433 if (t == NULL_TREE)
4434 {
e76a2646 4435 cp_error ("no type named `%#T' in `%#T'", name, context);
5566b478
MS
4436 return error_mark_node;
4437 }
4438 return TREE_TYPE (t);
4439 }
4440
5156628f 4441 if (processing_template_decl)
5566b478
MS
4442 push_obstacks (&permanent_obstack, &permanent_obstack);
4443 t = make_lang_type (TYPENAME_TYPE);
4444 d = build_decl (TYPE_DECL, name, t);
5156628f 4445 if (processing_template_decl)
5566b478
MS
4446 pop_obstacks ();
4447
4448 TYPE_CONTEXT (t) = context;
d2e5ee5c
MS
4449 TYPE_NAME (TREE_TYPE (d)) = d;
4450 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
5566b478 4451 DECL_CONTEXT (d) = context;
7fcdf4c2 4452 CLASSTYPE_GOT_SEMICOLON (t) = 1;
5566b478
MS
4453
4454 return t;
4455}
4456
bd2a82a6
JM
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
4464static tree
4465make_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);
5951f637 4474 while (binfo)
bd2a82a6
JM
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 }
5951f637
JM
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));
bd2a82a6
JM
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
8d08fdba
MS
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.
a28e3c7f 4502 If PREFER_TYPE is -2, we're being called from yylex(). (UGLY)
51c184be 4503 Otherwise we prefer non-TYPE_DECLs. */
8d08fdba 4504
824b9a4c 4505static tree
700f8a87 4506lookup_name_real (name, prefer_type, nonclass)
8d08fdba 4507 tree name;
700f8a87 4508 int prefer_type, nonclass;
8d08fdba
MS
4509{
4510 register tree val;
a28e3c7f 4511 int yylex = 0;
e1cd6e56 4512 tree from_obj = NULL_TREE;
e76a2646 4513 tree locval, classval;
8d08fdba 4514
a28e3c7f
MS
4515 if (prefer_type == -2)
4516 {
4517 extern int looking_for_typename;
fc378698 4518 tree type = NULL_TREE;
a28e3c7f
MS
4519
4520 yylex = 1;
4521 prefer_type = looking_for_typename;
e1cd6e56 4522
653cc74a
JM
4523 /* std:: becomes :: for now. */
4524 if (got_scope == std_node)
4525 got_scope = void_type_node;
4526
e1cd6e56
MS
4527 if (got_scope)
4528 type = got_scope;
dff6b454 4529 else if (got_object != error_mark_node)
e1cd6e56 4530 type = got_object;
a28e3c7f 4531
e1cd6e56 4532 if (type)
a28e3c7f 4533 {
e1cd6e56 4534 if (type == error_mark_node)
f376e137 4535 return error_mark_node;
a80e4195
MS
4536 if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
4537 type = TREE_TYPE (type);
5566b478
MS
4538
4539 type = complete_type (type);
4540
4541 if (type == void_type_node)
a28e3c7f 4542 val = IDENTIFIER_GLOBAL_VALUE (name);
a9aedbc2
MS
4543 else if (TREE_CODE (type) == NAMESPACE_DECL)
4544 {
4545 val = lookup_namespace_name (type, name);
4546 }
5566b478 4547 else if (! IS_AGGR_TYPE (type)
5156628f 4548 || TREE_CODE (type) == TEMPLATE_TYPE_PARM
73b0fce8 4549 || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM
5156628f 4550 || TREE_CODE (type) == TYPENAME_TYPE)
e92cc029 4551 /* Someone else will give an error about this if needed. */
a28e3c7f 4552 val = NULL_TREE;
e1cd6e56 4553 else if (TYPE_BEING_DEFINED (type))
700f8a87
MS
4554 {
4555 val = IDENTIFIER_CLASS_VALUE (name);
e1cd6e56 4556 if (val && DECL_CONTEXT (val) != type)
700f8a87
MS
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)
e1cd6e56 4563 && DECL_CONTEXT (TREE_VALUE (t)) == type)
700f8a87
MS
4564 {
4565 val = TREE_VALUE (t);
4566 break;
4567 }
4568 }
4569 }
5566b478 4570 if (val == NULL_TREE)
e1cd6e56 4571 val = lookup_field (type, name, 0, 1);
700f8a87 4572 }
e1cd6e56 4573 else if (type == current_class_type)
a28e3c7f 4574 val = IDENTIFIER_CLASS_VALUE (name);
a28e3c7f 4575 else
e1cd6e56 4576 val = lookup_field (type, name, 0, prefer_type);
a28e3c7f 4577 }
e1cd6e56
MS
4578 else
4579 val = NULL_TREE;
4580
85b71cf2 4581 /* Add implicit 'typename' to scoped types from other classes. */
5156628f 4582 if (got_scope && processing_template_decl
7fcdf4c2 4583 && got_scope != current_class_type
a80e4195
MS
4584 && uses_template_parms (got_scope)
4585 && val && TREE_CODE (val) == TYPE_DECL
4586 && ! DECL_ARTIFICIAL (val))
4587 {
bd2a82a6 4588 tree t = make_implicit_typename (got_scope, val);
a80e4195
MS
4589 val = TYPE_MAIN_DECL (t);
4590 }
a80e4195 4591
594740f3 4592 if (got_scope)
e1cd6e56 4593 goto done;
594740f3 4594 else if (got_object && val)
e1cd6e56 4595 from_obj = val;
a28e3c7f 4596 }
e76a2646
MS
4597
4598 locval = classval = NULL_TREE;
4599
8d08fdba
MS
4600 if (current_binding_level != global_binding_level
4601 && IDENTIFIER_LOCAL_VALUE (name))
e76a2646
MS
4602 locval = IDENTIFIER_LOCAL_VALUE (name);
4603
8d08fdba
MS
4604 /* In C++ class fields are between local and global scope,
4605 just before the global scope. */
e76a2646 4606 if (current_class_type && ! nonclass)
8d08fdba 4607 {
e76a2646
MS
4608 classval = IDENTIFIER_CLASS_VALUE (name);
4609 if (classval == NULL_TREE && TYPE_BEING_DEFINED (current_class_type))
700f8a87
MS
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. */
e76a2646 4613 classval = lookup_field (current_class_type, name, 0, 1);
8d08fdba
MS
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. */
e76a2646
MS
4618 if (classval == NULL_TREE)
4619 classval = lookup_nested_field (name, ! yylex);
85b71cf2
JM
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 {
bd2a82a6 4628 tree t = make_implicit_typename (current_class_type, classval);
85b71cf2
JM
4629 classval = TYPE_MAIN_DECL (t);
4630 }
e76a2646 4631 }
8d08fdba 4632
e76a2646
MS
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 }
8d08fdba 4656 }
e76a2646
MS
4657 else if (locval)
4658 val = locval;
4659 else if (classval)
4660 val = classval;
8d08fdba
MS
4661 else
4662 val = IDENTIFIER_GLOBAL_VALUE (name);
4663
a28e3c7f 4664 done:
8d08fdba
MS
4665 if (val)
4666 {
c91a56d2 4667 /* This should only warn about types used in qualified-ids. */
e1cd6e56 4668 if (from_obj && from_obj != val)
5566b478 4669 {
c91a56d2
MS
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 }
594740f3
MS
4679
4680 val = from_obj;
5566b478 4681 }
e1cd6e56 4682
73b0fce8
KL
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)
a0a33927 4690 || TREE_CODE (val) == TYPE_DECL || prefer_type <= 0)
e1cd6e56
MS
4691 ;
4692 else if (IDENTIFIER_HAS_TYPE_VALUE (name))
d2e5ee5c 4693 val = TYPE_MAIN_DECL (IDENTIFIER_TYPE_VALUE (name));
e1cd6e56
MS
4694 else if (TREE_TYPE (val) == error_mark_node)
4695 val = error_mark_node;
8d08fdba 4696 }
e1cd6e56
MS
4697 else if (from_obj)
4698 val = from_obj;
8d08fdba
MS
4699
4700 return val;
4701}
4702
700f8a87
MS
4703tree
4704lookup_name_nonclass (name)
4705 tree name;
4706{
4707 return lookup_name_real (name, 0, 1);
4708}
4709
4710tree
4711lookup_name (name, prefer_type)
4712 tree name;
4713 int prefer_type;
4714{
4715 return lookup_name_real (name, prefer_type, 0);
4716}
4717
8d08fdba
MS
4718/* Similar to `lookup_name' but look only at current binding level. */
4719
4720tree
4721lookup_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 {
a4443a08
MS
4736 struct binding_level *b = current_binding_level;
4737 while (1)
4738 {
4739 for (t = b->names; t; t = TREE_CHAIN (t))
e1cd6e56 4740 if (DECL_NAME (t) == name || DECL_ASSEMBLER_NAME (t) == name)
a4443a08
MS
4741 goto out;
4742 if (b->keep == 2)
4743 b = b->level_chain;
4744 else
4745 break;
4746 }
4747 out:
4748 ;
8d08fdba
MS
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
4761static void
4762signal_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
de22184b
MS
4781#if 0
4782/* Unused -- brendan 970107 */
8d08fdba
MS
4783/* Array for holding types considered "built-in". These types
4784 are output in the module in which `main' is defined. */
4785static tree *builtin_type_tdescs_arr;
4786static int builtin_type_tdescs_len, builtin_type_tdescs_max;
de22184b 4787#endif
8d08fdba
MS
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
4794static void
4795record_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;
a703fb38 4801 tree tdecl = NULL_TREE;
8d08fdba
MS
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 {
8d08fdba 4812 tdecl = pushdecl (build_decl (TYPE_DECL, tname, type));
8d08fdba
MS
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 {
8d08fdba 4826 tdecl = pushdecl (build_decl (TYPE_DECL, rname, type));
8d08fdba
MS
4827 set_identifier_type_value (rname, NULL_TREE);
4828 }
4829 }
8d08fdba
MS
4830}
4831
8d08fdba
MS
4832/* Push overloaded decl, in global scope, with one argument so it
4833 can be used as a callback from define_function. */
e92cc029 4834
8d08fdba
MS
4835static void
4836push_overloaded_decl_1 (x)
4837 tree x;
4838{
4839 push_overloaded_decl (x, 0);
4840}
4841
8ccc31eb
MS
4842#ifdef __GNUC__
4843__inline
4844#endif
6b5fbb55
MS
4845tree
4846auto_function (name, type, code)
8ccc31eb
MS
4847 tree name, type;
4848 enum built_in_function code;
4849{
4850 return define_function
49c249e1 4851 (IDENTIFIER_POINTER (name), type, code, push_overloaded_decl_1,
8ccc31eb
MS
4852 IDENTIFIER_POINTER (build_decl_overload (name, TYPE_ARG_TYPES (type),
4853 0)));
4854}
4855
8d08fdba
MS
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
4861void
4862init_decl_processing ()
4863{
4864 tree decl;
de22184b 4865 register tree endlink, int_endlink, double_endlink, unsigned_endlink;
8d08fdba 4866 tree fields[20];
8d08fdba 4867 /* Data type of memcpy. */
cffa8729 4868 tree memcpy_ftype, strlen_ftype;
8d08fdba
MS
4869 int wchar_type_size;
4870 tree temp;
4871 tree array_domain_type;
e1cd6e56 4872 extern int flag_strict_prototype;
a703fb38 4873 tree vb_off_identifier = NULL_TREE;
5566b478
MS
4874 /* Function type `char *(char *, char *)' and similar ones */
4875 tree string_ftype_ptr_ptr, int_ftype_string_string;
de22184b
MS
4876 tree sizetype_endlink;
4877 tree ptr_ftype, ptr_ftype_unsigned, ptr_ftype_sizetype;
ca55abae 4878 tree void_ftype, void_ftype_int, void_ftype_ptr, ptr_ftype_void;
8d08fdba
MS
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
e1cd6e56
MS
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;
8926095f 4891
8d08fdba
MS
4892 /* Initially, C. */
4893 current_lang_name = lang_name_c;
4894
4895 current_function_decl = NULL_TREE;
4896 named_labels = NULL_TREE;
e349ee73 4897 named_label_uses = NULL;
8d08fdba
MS
4898 current_binding_level = NULL_BINDING_LEVEL;
4899 free_binding_level = NULL_BINDING_LEVEL;
4900
42976354 4901#ifndef __CYGWIN32__
8d08fdba
MS
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
e92cc029 4904 around compiler bugs. */
8d08fdba
MS
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
e92cc029 4910 code. */
8d08fdba
MS
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
7834ab39
MS
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__ */
8d08fdba
MS
4930
4931 gcc_obstack_init (&decl_obstack);
8d08fdba
MS
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
a28e3c7f
MS
4940 /* Make the binding_level structure for global names. */
4941 pushlevel (0);
8d08fdba
MS
4942 global_binding_level = current_binding_level;
4943
4944 this_identifier = get_identifier (THIS_NAME);
4945 in_charge_identifier = get_identifier (IN_CHARGE_NAME);
fc378698
MS
4946 ctor_identifier = get_identifier (CTOR_NAME);
4947 dtor_identifier = get_identifier (DTOR_NAME);
8d08fdba
MS
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");
dff6b454
RK
4953 if (flag_handle_signatures)
4954 {
4955 tag_identifier = get_identifier (SIGTABLE_TAG_NAME);
9dd70aa4
GB
4956 vb_off_identifier = get_identifier (SIGTABLE_VB_OFF_NAME);
4957 vt_off_identifier = get_identifier (SIGTABLE_VT_OFF_NAME);
dff6b454 4958 }
8d08fdba
MS
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
beb53fb8
JM
4968 char_type_node
4969 = (flag_signed_char
4970 ? make_signed_type (CHAR_TYPE_SIZE)
4971 : make_unsigned_type (CHAR_TYPE_SIZE));
8d08fdba
MS
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
5156628f
MS
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
8d08fdba 4999 /* `unsigned long' is the standard type for sizeof.
8d08fdba 5000 Note that stddef.h uses `unsigned long',
f5426d1e
R
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))));
8d08fdba
MS
5004
5005 ptrdiff_type_node
5006 = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (PTRDIFF_TYPE)));
5007
8d08fdba
MS
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
37c46b43
MS
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
8d08fdba
MS
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;
8d08fdba 5082
255512c1
JM
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;
2986ae00 5090
8d08fdba
MS
5091 /* These are needed by stor-layout.c. */
5092 size_zero_node = size_int (0);
5093 size_one_node = size_int (1);
5094
e92cc029
MS
5095 signed_size_zero_node = build_int_2 (0, 0);
5096 TREE_TYPE (signed_size_zero_node) = make_signed_type (TYPE_PRECISION (sizetype));
5097
8d08fdba
MS
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
d11ad92e 5104 null_pointer_node = build_int_2 (0, 0);
8d08fdba 5105 TREE_TYPE (null_pointer_node) = build_pointer_type (void_type_node);
d11ad92e
MS
5106 layout_type (TREE_TYPE (null_pointer_node));
5107
8d08fdba
MS
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);
beb53fb8
JM
5113 const_string_type_node
5114 = build_pointer_type (build_type_variant (char_type_node, 1, 0));
6b5fbb55 5115#if 0
8d08fdba 5116 record_builtin_type (RID_MAX, NULL_PTR, string_type_node);
6b5fbb55 5117#endif
8d08fdba
MS
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);
8d08fdba
MS
5141
5142 ptr_type_node = build_pointer_type (void_type_node);
beb53fb8
JM
5143 const_ptr_type_node
5144 = build_pointer_type (build_type_variant (void_type_node, 1, 0));
6b5fbb55 5145#if 0
8d08fdba 5146 record_builtin_type (RID_MAX, NULL_PTR, ptr_type_node);
6b5fbb55 5147#endif
8d08fdba
MS
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);
de22184b
MS
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));
824b9a4c
MS
5164 void_ftype_ptr
5165 = build_exception_variant (void_ftype_ptr,
5166 tree_cons (NULL_TREE, NULL_TREE, NULL_TREE));
8d08fdba 5167
cffa8729
MS
5168 float_ftype_float
5169 = build_function_type (float_type_node,
5170 tree_cons (NULL_TREE, float_type_node, endlink));
5171
8d08fdba
MS
5172 double_ftype_double
5173 = build_function_type (double_type_node, double_endlink);
5174
cffa8729
MS
5175 ldouble_ftype_ldouble
5176 = build_function_type (long_double_type_node,
5177 tree_cons (NULL_TREE, long_double_type_node,
5178 endlink));
5179
8d08fdba
MS
5180 double_ftype_double_double
5181 = build_function_type (double_type_node,
a28e3c7f
MS
5182 tree_cons (NULL_TREE, double_type_node,
5183 double_endlink));
8d08fdba
MS
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,
a28e3c7f
MS
5190 tree_cons (NULL_TREE, long_integer_type_node,
5191 endlink));
8d08fdba 5192
8d08fdba
MS
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
8d08fdba
MS
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
8d08fdba
MS
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
cffa8729 5215 strlen_ftype /* strlen prototype */
8d08fdba
MS
5216 = build_function_type (sizetype,
5217 tree_cons (NULL_TREE, const_string_type_node,
5218 endlink));
5219
8d08fdba 5220 memcpy_ftype /* memcpy prototype */
d22c8596 5221 = build_function_type (ptr_type_node,
8d08fdba
MS
5222 tree_cons (NULL_TREE, ptr_type_node,
5223 tree_cons (NULL_TREE, const_ptr_type_node,
de22184b 5224 sizetype_endlink)));
8d08fdba
MS
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
b9620d0e 5231 builtin_function ("__builtin_constant_p", default_function_type,
8d08fdba
MS
5232 BUILT_IN_CONSTANT_P, NULL_PTR);
5233
beb53fb8
JM
5234 builtin_return_address_fndecl
5235 = builtin_function ("__builtin_return_address", ptr_ftype_unsigned,
5236 BUILT_IN_RETURN_ADDRESS, NULL_PTR);
8926095f 5237
de22184b 5238 builtin_function ("__builtin_frame_address", ptr_ftype_unsigned,
8926095f
MS
5239 BUILT_IN_FRAME_ADDRESS, NULL_PTR);
5240
ca55abae
JM
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
de22184b 5245 builtin_function ("__builtin_alloca", ptr_ftype_sizetype,
8d08fdba 5246 BUILT_IN_ALLOCA, "alloca");
cffa8729 5247 builtin_function ("__builtin_ffs", int_ftype_int, BUILT_IN_FFS, NULL_PTR);
00595019
MS
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 {
de22184b 5252 temp = builtin_function ("alloca", ptr_ftype_sizetype,
00595019
MS
5253 BUILT_IN_ALLOCA, NULL_PTR);
5254 /* Suppress error if redefined as a non-function. */
5255 DECL_BUILT_IN_NONANSI (temp) = 1;
00595019
MS
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;
de22184b 5259 temp = builtin_function ("_exit", void_ftype_int,
00595019
MS
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 }
8d08fdba 5266
cffa8729
MS
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);
8d08fdba
MS
5274 builtin_function ("__builtin_labs", long_ftype_long,
5275 BUILT_IN_LABS, NULL_PTR);
de22184b 5276 builtin_function ("__builtin_saveregs", ptr_ftype,
8d08fdba 5277 BUILT_IN_SAVEREGS, NULL_PTR);
8d08fdba
MS
5278 builtin_function ("__builtin_classify_type", default_function_type,
5279 BUILT_IN_CLASSIFY_TYPE, NULL_PTR);
de22184b 5280 builtin_function ("__builtin_next_arg", ptr_ftype,
8d08fdba 5281 BUILT_IN_NEXT_ARG, NULL_PTR);
de22184b 5282 builtin_function ("__builtin_args_info", int_ftype_int,
8d08fdba 5283 BUILT_IN_ARGS_INFO, NULL_PTR);
eb66be0e
MS
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);
8d08fdba
MS
5296
5297 /* Untyped call and return. */
de22184b 5298 builtin_function ("__builtin_apply_args", ptr_ftype,
8d08fdba
MS
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)),
de22184b 5304 ptr_ftype_sizetype);
8d08fdba
MS
5305 builtin_function ("__builtin_apply",
5306 build_function_type (ptr_type_node, temp),
5307 BUILT_IN_APPLY, NULL_PTR);
de22184b 5308 builtin_function ("__builtin_return", void_ftype_ptr,
8d08fdba
MS
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");
cffa8729 5320 builtin_function ("__builtin_strlen", strlen_ftype,
8d08fdba 5321 BUILT_IN_STRLEN, "strlen");
cffa8729
MS
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");
8d08fdba
MS
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
cffa8729
MS
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);
8d08fdba
MS
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);
cffa8729
MS
5354 builtin_function ("strcmp", int_ftype_string_string, BUILT_IN_STRCMP,
5355 NULL_PTR);
a28e3c7f
MS
5356 builtin_function ("strcpy", string_ftype_ptr_ptr, BUILT_IN_STRCPY,
5357 NULL_PTR);
cffa8729
MS
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);
8d08fdba 5364 builtin_function ("sin", double_ftype_double, BUILT_IN_SIN, NULL_PTR);
cffa8729
MS
5365 builtin_function ("sinl", ldouble_ftype_ldouble, BUILT_IN_SIN, NULL_PTR);
5366 builtin_function ("cosf", float_ftype_float, BUILT_IN_COS, NULL_PTR);
8d08fdba 5367 builtin_function ("cos", double_ftype_double, BUILT_IN_COS, NULL_PTR);
cffa8729 5368 builtin_function ("cosl", ldouble_ftype_ldouble, BUILT_IN_COS, NULL_PTR);
00595019
MS
5369
5370 /* Declare these functions volatile
5371 to avoid spurious "control drops through" warnings. */
de22184b 5372 temp = builtin_function ("abort", void_ftype,
00595019
MS
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;
de22184b 5379 temp = builtin_function ("exit", void_ftype_int,
00595019
MS
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;
8d08fdba
MS
5384 }
5385
5386#if 0
5387 /* Support for these has not been written in either expand_builtin
5388 or build_function_call. */
72b7eeff
MS
5389 builtin_function ("__builtin_div", default_ftype, BUILT_IN_DIV, NULL_PTR);
5390 builtin_function ("__builtin_ldiv", default_ftype, BUILT_IN_LDIV, NULL_PTR);
a28e3c7f 5391 builtin_function ("__builtin_ffloor", double_ftype_double, BUILT_IN_FFLOOR,
72b7eeff 5392 NULL_PTR);
cffa8729
MS
5393 builtin_function ("__builtin_fceil", double_ftype_double, BUILT_IN_FCEIL,
5394 NULL_PTR);
a28e3c7f 5395 builtin_function ("__builtin_fmod", double_ftype_double_double,
72b7eeff 5396 BUILT_IN_FMOD, NULL_PTR);
a28e3c7f 5397 builtin_function ("__builtin_frem", double_ftype_double_double,
72b7eeff 5398 BUILT_IN_FREM, NULL_PTR);
cffa8729
MS
5399 builtin_function ("__builtin_memset", ptr_ftype_ptr_int_int,
5400 BUILT_IN_MEMSET, NULL_PTR);
a28e3c7f 5401 builtin_function ("__builtin_getexp", double_ftype_double, BUILT_IN_GETEXP,
72b7eeff 5402 NULL_PTR);
a28e3c7f 5403 builtin_function ("__builtin_getman", double_ftype_double, BUILT_IN_GETMAN,
72b7eeff 5404 NULL_PTR);
8d08fdba
MS
5405#endif
5406
5407 /* C++ extensions */
5408
5409 unknown_type_node = make_node (UNKNOWN_TYPE);
8d08fdba
MS
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;
39211cd5 5414 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
8d08fdba
MS
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;
a6967cc0
JM
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. */
8d08fdba
MS
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
e92cc029 5436 /* This is special for C++ so functions can be overloaded. */
8d08fdba
MS
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
f376e137
MS
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
8d08fdba
MS
5453 /* This is for wide string constants. */
5454 wchar_array_type_node
5455 = build_array_type (wchar_type_node, array_domain_type);
5456
8926095f 5457 if (flag_vtable_thunks)
700f8a87
MS
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 }
8926095f 5468 else
700f8a87
MS
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);
8d08fdba 5491
8d08fdba
MS
5492 vtbl_type_node
5493 = build_array_type (vtable_entry_type, NULL_TREE);
5494 layout_type (vtbl_type_node);
f376e137 5495 vtbl_type_node = cp_build_type_variant (vtbl_type_node, 1, 0);
8d08fdba
MS
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);
dff6b454
RK
5504 fields[0] = build_lang_field_decl (FIELD_DECL, tag_identifier,
5505 delta_type_node);
9dd70aa4 5506 fields[1] = build_lang_field_decl (FIELD_DECL, vb_off_identifier,
dff6b454 5507 delta_type_node);
9dd70aa4 5508 fields[2] = build_lang_field_decl (FIELD_DECL, delta_identifier,
dff6b454
RK
5509 delta_type_node);
5510 fields[3] = build_lang_field_decl (FIELD_DECL, index_identifier,
5511 delta_type_node);
9dd70aa4
GB
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);
dff6b454
RK
5521
5522 /* Make this part of an invisible union. */
9dd70aa4
GB
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];
dff6b454 5530
8d08fdba
MS
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
6633d636
MS
5535 std_node = build_decl (NAMESPACE_DECL, get_identifier ("std"),
5536 void_type_node);
5537 pushdecl (std_node);
5538
db5ae43f
MS
5539#if 0
5540 if (flag_rtti)
8d08fdba
MS
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);
beb53fb8
JM
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);
8d08fdba
MS
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);
a28e3c7f
MS
5579 fields[3] = build_lang_field_decl (FIELD_DECL,
5580 get_identifier ("points_to"),
f30432d7 5581 build_pointer_type (__t_desc_type_node));
8d08fdba
MS
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"),
f30432d7 5615 build_pointer_type (__t_desc_type_node));
a28e3c7f
MS
5616 finish_builtin_type (__i_desc_type_node, "__i_desc", fields, 2,
5617 integer_type_node);
8d08fdba
MS
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"),
f30432d7 5639 build_pointer_type (__t_desc_type_node));
8d08fdba 5640 fields[3] = build_lang_field_decl (FIELD_DECL, get_identifier ("return_type"),
f30432d7 5641 build_pointer_type (__t_desc_type_node));
8d08fdba
MS
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"),
f30432d7 5649 build_pointer_type (build_array_type (build_pointer_type (__t_desc_type_node), NULL_TREE)));
a28e3c7f
MS
5650 finish_builtin_type (__m_desc_type_node, "__m_desc", fields, 7,
5651 integer_type_node);
8d08fdba 5652 }
db5ae43f
MS
5653#endif /*flag_rtti*/
5654
5655 /* Now, C++. */
5656 current_lang_name = lang_name_cplusplus;
8d08fdba 5657
ced78d8b
JM
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 }
8d08fdba
MS
5670
5671 abort_fndecl
de22184b 5672 = define_function ("__pure_virtual", void_ftype,
8d08fdba
MS
5673 NOT_BUILT_IN, 0, 0);
5674
8d08fdba
MS
5675 /* Perform other language dependent initializations. */
5676 init_class_processing ();
5677 init_init_processing ();
5678 init_search_processing ();
1737fe20
BK
5679 if (flag_rtti)
5680 init_rtti_processing ();
8d08fdba 5681
6467930b 5682 if (flag_exceptions)
8d2733ca 5683 init_exception_processing ();
8d08fdba
MS
5684 if (flag_no_inline)
5685 {
5686 flag_inline_functions = 0;
8d08fdba 5687 }
9e9ff709 5688
7fcdf4c2 5689 if (! supports_one_only ())
72b7eeff 5690 flag_weak = 0;
8d08fdba
MS
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 ();
e9a25f70
JL
5697
5698 /* Show we use EH for cleanups. */
5699 using_eh_for_cleanups ();
8d08fdba
MS
5700}
5701
e92cc029 5702/* initialize type descriptor type node of various rtti type. */
db5ae43f
MS
5703
5704int
5705init_type_desc()
5706{
5707 tree tdecl;
5708
5709 tdecl = lookup_name (get_identifier ("type_info"), 0);
5710 if (tdecl == NULL_TREE)
5711 return 0;
fc378698 5712 __t_desc_type_node = TREE_TYPE (tdecl);
5566b478 5713#if 0
db5ae43f 5714 __tp_desc_type_node = build_pointer_type (__t_desc_type_node);
5566b478 5715#endif
db5ae43f
MS
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}
8d08fdba
MS
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
5780tree
5781define_function (name, type, function_code, pfn, library_name)
5782 char *name;
5783 tree type;
5784 enum built_in_function function_code;
49c249e1 5785 void (*pfn) PROTO((tree));
8d08fdba
MS
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;
863adfc0 5791 DECL_ARTIFICIAL (decl) = 1;
8d08fdba
MS
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;
39211cd5 5803 DECL_FUNCTION_CODE (decl) = function_code;
8d08fdba
MS
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
5819void
5820shadow_tag (declspecs)
5821 tree declspecs;
5822{
5823 int found_tag = 0;
2986ae00 5824 tree ob_modifier = NULL_TREE;
8d08fdba
MS
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)
8d08fdba 5835 {
d2e5ee5c 5836 my_friendly_assert (TYPE_MAIN_DECL (value) != NULL_TREE, 261);
8d08fdba 5837
fc378698 5838 if (IS_AGGR_TYPE (value) && CLASSTYPE_USE_TEMPLATE (value))
5566b478
MS
5839 {
5840 if (CLASSTYPE_IMPLICIT_INSTANTIATION (value)
5841 && TYPE_SIZE (value) == NULL_TREE)
73aad9b9
JM
5842 {
5843 SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (value);
5156628f 5844 if (processing_template_decl)
73aad9b9
JM
5845 push_template_decl (TYPE_MAIN_DECL (value));
5846 }
5566b478
MS
5847 else if (CLASSTYPE_TEMPLATE_INSTANTIATION (value))
5848 cp_error ("specialization after instantiation of `%T'", value);
5849 }
5850
b8bca6f2
JM
5851 t = value;
5852 ok_code = code;
5853 found_tag++;
8d08fdba
MS
5854 }
5855 else if (value == ridpointers[(int) RID_STATIC]
2986ae00
MS
5856 || value == ridpointers[(int) RID_EXTERN]
5857 || value == ridpointers[(int) RID_AUTO]
28cbf42c
MS
5858 || value == ridpointers[(int) RID_REGISTER]
5859 || value == ridpointers[(int) RID_INLINE]
5860 || value == ridpointers[(int) RID_VIRTUAL]
5861 || value == ridpointers[(int) RID_EXPLICIT])
2986ae00 5862 ob_modifier = value;
8d08fdba
MS
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 {
d2e5ee5c 5877 /* See also grok_x_components. */
d2e5ee5c
MS
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 }
f49422da 5897
8d08fdba
MS
5898 /* ANSI C++ June 5 1992 WP 9.5.3. Anonymous unions may not have
5899 function members. */
d2e5ee5c
MS
5900 if (TYPE_METHODS (t))
5901 error ("an anonymous union cannot have function members");
c91a56d2 5902
8d08fdba
MS
5903 if (TYPE_FIELDS (t))
5904 {
a28e3c7f 5905 tree decl = grokdeclarator (NULL_TREE, declspecs, NORMAL, 0,
c11b6f21 5906 NULL_TREE);
8d08fdba
MS
5907 finish_anon_union (decl);
5908 }
8d08fdba
MS
5909 }
5910 else
5911 {
5912 /* Anonymous unions are objects, that's why we only check for
2986ae00 5913 inappropriate specifiers in this branch. */
28cbf42c 5914
2986ae00 5915 if (ob_modifier)
28cbf42c
MS
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 }
8d08fdba 5927
b8bca6f2 5928 if (found_tag == 0)
2986ae00 5929 pedwarn ("abstract declarator used as declaration");
b8bca6f2 5930 else if (found_tag > 1)
2986ae00 5931 pedwarn ("multiple types in one declaration");
8d08fdba
MS
5932 }
5933}
5934\f
5935/* Decode a "typename", such as "int **", returning a ..._TYPE node. */
5936
5937tree
5938groktypename (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),
c11b6f21 5945 TYPENAME, 0, NULL_TREE);
8d08fdba
MS
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,
82580166 5956 the type is left null, to be filled in by `cp_finish_decl'.
8d08fdba
MS
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. */
5965int debug_temp_inits = 1;
5966
5967tree
c11b6f21 5968start_decl (declarator, declspecs, initialized)
8d08fdba
MS
5969 tree declarator, declspecs;
5970 int initialized;
8d08fdba
MS
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
5566b478
MS
5978#if 0
5979 /* See code below that used this. */
8d08fdba 5980 int init_written = initialized;
5566b478 5981#endif
8d08fdba 5982
e92cc029 5983 /* This should only be done once on the top most decl. */
8d08fdba
MS
5984 if (have_extern_spec && !used_extern_spec)
5985 {
a28e3c7f
MS
5986 declspecs = decl_tree_cons (NULL_TREE, get_identifier ("extern"),
5987 declspecs);
8d08fdba
MS
5988 used_extern_spec = 1;
5989 }
5990
c11b6f21 5991 decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
f30432d7 5992 NULL_TREE);
8d08fdba
MS
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. */
5156628f 5999 if (! processing_template_decl && TREE_STATIC (decl)
ec255269 6000 && TYPE_NEEDS_DESTRUCTOR (complete_type (type))
8d08fdba
MS
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
8d08fdba
MS
6018 context
6019 = (TREE_CODE (decl) == FUNCTION_DECL && DECL_VIRTUAL_P (decl))
6020 ? DECL_CLASS_CONTEXT (decl)
6021 : DECL_CONTEXT (decl);
6022
8d08fdba
MS
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
82580166 6026 tell `cp_finish_decl' to ignore the initializer once it is parsed. */
8d08fdba
MS
6027 switch (TREE_CODE (decl))
6028 {
6029 case TYPE_DECL:
6030 /* typedef foo = bar means give foo the same type as bar.
82580166 6031 We haven't parsed bar yet, so `cp_finish_decl' will fix that up.
8d08fdba
MS
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:
5156628f 6046 if (! processing_template_decl)
8d08fdba 6047 {
bd6dd845 6048 if (type != error_mark_node)
5156628f 6049 {
bd6dd845
MS
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 }
5156628f 6058
bd6dd845
MS
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 }
5156628f 6066 }
8d08fdba
MS
6067 }
6068 }
6069
8d08fdba
MS
6070 if (initialized)
6071 {
a9aedbc2 6072 if (! toplevel_bindings_p ()
8d08fdba
MS
6073 && DECL_EXTERNAL (decl))
6074 cp_warning ("declaration of `%#D' has `extern' and is initialized",
6075 decl);
6076 DECL_EXTERNAL (decl) = 0;
5566b478 6077 if (toplevel_bindings_p ())
8d08fdba
MS
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.
82580166 6082 Also tell `cp_finish_decl' it may store the real initializer. */
8d08fdba
MS
6083 DECL_INITIAL (decl) = error_mark_node;
6084 }
6085
5566b478 6086 if (context && TYPE_SIZE (complete_type (context)) != NULL_TREE)
5b605f68
MS
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);
e349ee73
MS
6093 else
6094 {
6095 if (DECL_CONTEXT (field) != context)
f2d773a2
JM
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 }
75650646
MM
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);
e349ee73
MS
6109 if (duplicate_decls (decl, field))
6110 decl = field;
6111 }
5b605f68 6112 }
f30432d7
MS
6113 else
6114 {
5566b478 6115 tree field = check_classfn (context, decl);
f30432d7
MS
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. */
5b605f68
MS
6121 if (DECL_LANG_SPECIFIC (decl))
6122 DECL_IN_AGGR_P (decl) = 0;
f30432d7
MS
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
5b605f68
MS
6132 pushclass (context, 2);
6133 }
6134
8d08fdba
MS
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. */
5b605f68 6138
8d08fdba
MS
6139 if ((TREE_CODE (decl) != PARM_DECL && DECL_CONTEXT (decl) != NULL_TREE)
6140 || (TREE_CODE (decl) == TEMPLATE_DECL && !global_bindings_p ())
75650646
MM
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. */
e1467ff2 6145 || (TREE_CODE (decl) == FUNCTION_DECL
75650646 6146 && DECL_TEMPLATE_SPECIALIZATION (decl)))
8d08fdba
MS
6147 tem = decl;
6148 else
8926095f 6149 tem = pushdecl (decl);
2ee887f2 6150
5156628f 6151 if (processing_template_decl)
5566b478
MS
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),
c11b6f21 6159 NULL_TREE);
5566b478
MS
6160 }
6161
6162
2ee887f2 6163#if ! defined (ASM_OUTPUT_BSS) && ! defined (ASM_OUTPUT_ALIGNED_BSS)
a3203465 6164 /* Tell the back-end to use or not use .common as appropriate. If we say
a50f0918
MS
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. */
a3203465 6169 DECL_COMMON (tem) = flag_conserve_space || ! TREE_PUBLIC (tem);
2ee887f2 6170#endif
8d08fdba 6171
5156628f 6172 if (! processing_template_decl)
5566b478 6173 start_decl_1 (tem);
8d08fdba 6174
5566b478
MS
6175 /* Corresponding pop_obstacks is done in `cp_finish_decl'. */
6176 push_obstacks_nochange ();
8d08fdba 6177
5566b478
MS
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) */
8d08fdba
MS
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. */
a9aedbc2 6190 if (toplevel_bindings_p () && debug_temp_inits)
8d08fdba 6191 {
5156628f 6192 if (processing_template_decl
5566b478 6193 || TYPE_NEEDS_CONSTRUCTING (type)
a28e3c7f 6194 || TREE_CODE (type) == REFERENCE_TYPE)
8d08fdba
MS
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 }
5566b478 6202#endif
8d08fdba 6203
8d08fdba
MS
6204 return tem;
6205}
6206
5566b478
MS
6207void
6208start_decl_1 (decl)
6209 tree decl;
8d08fdba 6210{
5566b478
MS
6211 tree type = TREE_TYPE (decl);
6212 int initialized = (DECL_INITIAL (decl) != NULL_TREE);
8d08fdba 6213
5566b478
MS
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. */
8d08fdba 6225 {
5566b478
MS
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)
8d08fdba 6233 {
5566b478
MS
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;
8d08fdba 6244 }
8d08fdba
MS
6245 }
6246
5566b478
MS
6247 if (!initialized
6248 && TREE_CODE (decl) != TYPE_DECL
6249 && TREE_CODE (decl) != TEMPLATE_DECL
6250 && IS_AGGR_TYPE (type) && ! DECL_EXTERNAL (decl))
8d08fdba 6251 {
5156628f 6252 if ((! processing_template_decl || ! uses_template_parms (type))
7fcdf4c2 6253 && TYPE_SIZE (complete_type (type)) == NULL_TREE)
5566b478
MS
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
e92cc029
MS
6297 same meaning here that they do there.
6298
6299 Quotes on semantics can be found in ARM 8.4.3. */
6300
5566b478 6301static void
a703fb38 6302grok_reference_init (decl, type, init)
5566b478 6303 tree decl, type, init;
5566b478
MS
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);
8d08fdba
MS
6327 return;
6328 }
6329
ec255269
MS
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
8d08fdba
MS
6334 if (TREE_CODE (init) == TREE_LIST)
6335 init = build_compound_expr (init);
8d08fdba 6336
8ccc31eb
MS
6337 if (TREE_CODE (TREE_TYPE (init)) == REFERENCE_TYPE)
6338 init = convert_from_reference (init);
6339
8d08fdba
MS
6340 if (TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE
6341 && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
6342 {
a3203465 6343 /* Note: default conversion is only called in very special cases. */
8d08fdba
MS
6344 init = default_conversion (init);
6345 }
6346
a3203465 6347 tmp = convert_to_reference
9a3b49ac
MS
6348 (type, init, CONV_IMPLICIT,
6349 LOOKUP_SPECULATIVELY|LOOKUP_NORMAL|DIRECT_BIND, decl);
8d08fdba 6350
a3203465
MS
6351 if (tmp == error_mark_node)
6352 goto fail;
6353 else if (tmp != NULL_TREE)
8d08fdba 6354 {
a3203465 6355 init = tmp;
4c7bdca6 6356 DECL_INITIAL (decl) = save_expr (init);
8d08fdba 6357 }
a3203465 6358 else
8d08fdba 6359 {
a3203465
MS
6360 cp_error ("cannot initialize `%T' from `%T'", type, TREE_TYPE (init));
6361 goto fail;
8d08fdba 6362 }
8d08fdba 6363
8d08fdba
MS
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
6060a796
MS
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
28cbf42c
MS
6393static tree
6394obscure_complex_init (decl, init)
6395 tree decl, init;
6060a796 6396{
28cbf42c
MS
6397 if (! flag_no_inline && TREE_STATIC (decl))
6398 {
6399 if (extract_init (decl, init))
6400 return NULL_TREE;
6401 }
6402
2ee887f2 6403#if ! defined (ASM_OUTPUT_BSS) && ! defined (ASM_OUTPUT_ALIGNED_BSS)
a9aedbc2 6404 if (toplevel_bindings_p () && ! DECL_COMMON (decl))
6060a796
MS
6405 DECL_INITIAL (decl) = build (CONSTRUCTOR, TREE_TYPE (decl), NULL_TREE,
6406 NULL_TREE);
6407 else
2ee887f2 6408#endif
6060a796 6409 DECL_INITIAL (decl) = error_mark_node;
28cbf42c
MS
6410
6411 return init;
6060a796
MS
6412}
6413
8d08fdba
MS
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
82580166 6421 For C++, `cp_finish_decl' must be fairly evasive: it must keep initializers
8d08fdba
MS
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
6060a796
MS
6428 FLAGS is LOOKUP_ONLYCONVERTING is the = init syntax was used, else 0
6429 if the (init) syntax was used.
6430
8d08fdba 6431 For functions that take default parameters, DECL points to its
82580166 6432 "maximal" instantiation. `cp_finish_decl' must then also declared its
8d08fdba
MS
6433 subsequently lower and lower forms of instantiation, checking for
6434 ambiguity as it goes. This can be sped up later. */
6435
6436void
82580166 6437cp_finish_decl (decl, init, asmspec_tree, need_pop, flags)
8d08fdba
MS
6438 tree decl, init;
6439 tree asmspec_tree;
6440 int need_pop;
6060a796 6441 int flags;
8d08fdba
MS
6442{
6443 register tree type;
a703fb38 6444 tree cleanup = NULL_TREE, ttype = NULL_TREE;
8d08fdba
MS
6445 int was_incomplete;
6446 int temporary = allocation_temporary_p ();
6447 char *asmspec = NULL;
6448 int was_readonly = 0;
0c4b14c4 6449 int already_used = 0;
8d08fdba
MS
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
a4443a08 6459 /* If a name was specified, get the string. */
8d08fdba 6460 if (asmspec_tree)
8d08fdba 6461 asmspec = TREE_STRING_POINTER (asmspec_tree);
8d08fdba
MS
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
f376e137 6471 if (type == error_mark_node)
eac293a1 6472 {
a9aedbc2 6473 if (toplevel_bindings_p () && temporary)
eac293a1
MS
6474 end_temporary_allocation ();
6475
6476 return;
6477 }
f376e137 6478
5156628f 6479 if (processing_template_decl)
5566b478
MS
6480 {
6481 if (init && DECL_INITIAL (decl))
6482 DECL_INITIAL (decl) = init;
faf5394a 6483 if (minimal_parse_mode && ! DECL_ARTIFICIAL (decl))
5566b478
MS
6484 {
6485 tree stmt = DECL_VINDEX (decl);
e1467ff2
MM
6486 /* If the decl is declaring a member of a local class (in a
6487 template function), there will be no associated stmt. */
75650646
MM
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 }
5566b478 6494 }
8d08fdba 6495
5566b478
MS
6496 goto finish_end0;
6497 }
8d08fdba
MS
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 }
a0a33927
MS
6507 if (type != error_mark_node
6508 && IS_AGGR_TYPE (type) && DECL_NAME (decl))
8d08fdba
MS
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);
cffa8729
MS
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
956d6950 6519 the debug information for it, as we will emit it later. */
d2e5ee5c 6520 if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
cffa8729
MS
6521 && TYPE_SIZE (TREE_TYPE (decl)) == NULL_TREE)
6522 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
6523
8d08fdba 6524 rest_of_decl_compilation (decl, NULL_PTR,
5566b478 6525 DECL_CONTEXT (decl) == NULL_TREE, at_eof);
8d08fdba
MS
6526 goto finish_end;
6527 }
8d08fdba
MS
6528 if (TREE_CODE (decl) != FUNCTION_DECL)
6529 {
6530 ttype = target_type (type);
8d08fdba
MS
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
6060a796 6553 by grokclassfn. Lay this out fresh. */
8d08fdba
MS
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 {
f376e137
MS
6567 if (TREE_STATIC (decl))
6568 make_decl_rtl (decl, NULL_PTR,
a9aedbc2 6569 toplevel_bindings_p ()
f376e137 6570 || pseudo_global_level_p ());
a703fb38 6571 grok_reference_init (decl, type, init);
8d08fdba
MS
6572 init = NULL_TREE;
6573 }
6574
6575 GNU_xref_decl (current_function_decl, decl);
6576
a0a33927 6577 if (TREE_CODE (decl) == FIELD_DECL)
8d08fdba
MS
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);
a3203465 6595 else if (TREE_CODE (init) == CONSTRUCTOR)
8d08fdba 6596 {
f30432d7 6597 if (TYPE_NON_AGGREGATE_CLASS (type))
8d08fdba 6598 {
a28e3c7f
MS
6599 cp_error ("`%D' must be initialized by constructor, not by `{...}'",
6600 decl);
8d08fdba
MS
6601 init = error_mark_node;
6602 }
6603 else
6604 goto dont_use_constructor;
6605 }
8d08fdba
MS
6606 }
6607 else
6608 {
6609 dont_use_constructor:
6610 if (TREE_CODE (init) != TREE_VEC)
6611 init = store_init_value (decl, init);
8d08fdba 6612 }
28cbf42c
MS
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);
8d08fdba 6618 }
a0a33927
MS
6619 else if (DECL_EXTERNAL (decl))
6620 ;
8d08fdba
MS
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))
a28e3c7f
MS
6632 cp_error ("structure `%D' with uninitialized reference members",
6633 decl);
8d08fdba
MS
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
6060a796
MS
6642 if (TYPE_SIZE (type) != NULL_TREE
6643 && TYPE_NEEDS_CONSTRUCTING (type))
28cbf42c 6644 init = obscure_complex_init (decl, NULL_TREE);
8d08fdba
MS
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
a9aedbc2 6667 if (toplevel_bindings_p () && temporary)
8d08fdba
MS
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
ec255269 6711 && TYPE_SIZE (complete_type (TREE_TYPE (decl))) != NULL_TREE)
8d08fdba
MS
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
d2e5ee5c
MS
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
8d08fdba
MS
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
c91a56d2
MS
6750 if (! DECL_EXTERNAL (decl) && TYPE_NEEDS_DESTRUCTOR (type)
6751 /* Cleanups for static variables are handled by `finish_file'. */
6752 && ! TREE_STATIC (decl))
8d08fdba
MS
6753 {
6754 int yes = suspend_momentary ();
2ee887f2 6755 cleanup = maybe_build_cleanup (decl);
8d08fdba
MS
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
5566b478
MS
6773 was_incomplete = (DECL_SIZE (decl) == NULL_TREE);
6774
8d08fdba
MS
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? */
e1467ff2 6779 int toplev = toplevel_bindings_p () || pseudo_global_level_p ();
8d08fdba 6780 int was_temp
d22c8596 6781 = (TREE_STATIC (decl) && TYPE_NEEDS_DESTRUCTOR (type)
8d08fdba
MS
6782 && allocation_temporary_p ());
6783
6784 if (was_temp)
6785 end_temporary_allocation ();
6786
42976354
BK
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)
893de33c 6793 && TREE_PUBLIC (current_function_decl))
42976354 6794 {
818045b6
JM
6795 if (DECL_INTERFACE_KNOWN (current_function_decl))
6796 {
6797 TREE_PUBLIC (decl) = 1;
6798 DECL_EXTERNAL (decl) = DECL_EXTERNAL (current_function_decl);
6799 }
42976354
BK
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. */
818045b6
JM
6802 else if (DECL_INITIAL (decl) == NULL_TREE
6803 || DECL_INITIAL (decl) == error_mark_node)
42976354
BK
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
77be6f82
JM
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
be343556
JM
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 }
77be6f82
JM
6844 }
6845 }
6846
8d08fdba
MS
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
a3203465 6853 && ! EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl)))
8d08fdba
MS
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 }
a0a33927 6876 else if (toplev && ! TREE_PUBLIC (decl))
8d08fdba 6877 {
8d08fdba 6878 /* If this is a static const, change its apparent linkage
db5ae43f 6879 if it belongs to a #pragma interface. */
a0a33927 6880 if (!interface_unknown)
8d08fdba
MS
6881 {
6882 TREE_PUBLIC (decl) = 1;
6883 DECL_EXTERNAL (decl) = interface_only;
6884 }
6885 make_decl_rtl (decl, asmspec, toplev);
6886 }
6887 else
5566b478 6888 rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
8d08fdba
MS
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
5566b478 6909 rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
8d08fdba
MS
6910 }
6911 else
6912 /* Just a constant field. Should not need any rtl. */
6913 goto finish_end0;
6914 }
6915 else
5566b478 6916 rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
8d08fdba
MS
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)
faae18ab 6940 ;
67d743fe
MS
6941 else if (DECL_EXTERNAL (decl)
6942 && ! (DECL_LANG_SPECIFIC (decl)
6943 && DECL_NOT_REALLY_EXTERN (decl)))
5566b478
MS
6944 {
6945 if (init)
6946 DECL_INITIAL (decl) = init;
6947 }
8d08fdba
MS
6948 else if (TREE_STATIC (decl) && type != error_mark_node)
6949 {
6950 /* Cleanups for static variables are handled by `finish_file'. */
f30432d7
MS
6951 if (TYPE_NEEDS_CONSTRUCTING (type) || init != NULL_TREE
6952 || TYPE_NEEDS_DESTRUCTOR (type))
8d08fdba 6953 expand_static_init (decl, init);
8d08fdba
MS
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 {
8d2733ca
MS
6981 /* XXX: Why don't we use decl here? */
6982 /* Ans: Because it was already expanded? */
e349ee73 6983 if (! expand_decl_cleanup (NULL_TREE, cleanup))
8d2733ca
MS
6984 cp_error ("parser lost in parsing declaration of `%D'",
6985 decl);
8d08fdba
MS
6986 /* Cleanup used up here. */
6987 cleanup = NULL_TREE;
6988 }
6989 }
6990
2ee887f2
MS
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,
d22c8596 6998 the code would not have been valid under the ARM
2ee887f2
MS
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
e92cc029 7003 to last into the outer binding level. */
2ee887f2
MS
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 {
cffa8729 7016 if (DECL_IN_MEMORY_P (decl))
2ee887f2
MS
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
eb66be0e 7037 expand_start_target_temps ();
72b7eeff 7038
8d08fdba
MS
7039 if (DECL_SIZE (decl) && type != error_mark_node)
7040 {
7041 /* Compute and store the initial value. */
7042 expand_decl_init (decl);
0c4b14c4 7043 already_used = TREE_USED (decl) || TREE_USED (type);
8d08fdba
MS
7044
7045 if (init || TYPE_NEEDS_CONSTRUCTING (type))
7046 {
a28e3c7f
MS
7047 emit_line_note (DECL_SOURCE_FILE (decl),
7048 DECL_SOURCE_LINE (decl));
6060a796 7049 expand_aggr_init (decl, init, 0, flags);
8d08fdba
MS
7050 }
7051
00595019
MS
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. */
249555b0
BK
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. */
0c4b14c4 7060
be99da77 7061 if (TYPE_NEEDS_CONSTRUCTING (type)
0c4b14c4 7062 && ! already_used
be99da77
MS
7063 && cleanup == NULL_TREE
7064 && DECL_NAME (decl))
8d08fdba 7065 TREE_USED (decl) = 0;
0c4b14c4
JM
7066
7067 if (already_used)
7068 TREE_USED (decl) = 1;
934c6b13 7069 }
eb66be0e 7070
934c6b13 7071 /* Cleanup any temporaries needed for the initial value. */
eb66be0e 7072 expand_end_target_temps ();
8d08fdba 7073
934c6b13
MS
7074 if (DECL_SIZE (decl) && type != error_mark_node)
7075 {
8d08fdba
MS
7076 /* Store the cleanup, if there was one. */
7077 if (cleanup)
7078 {
e349ee73 7079 if (! expand_decl_cleanup (decl, cleanup))
a28e3c7f
MS
7080 cp_error ("parser lost in parsing declaration of `%D'",
7081 decl);
8d08fdba
MS
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 {
f30432d7 7091 tree context = DECL_REAL_CONTEXT (decl);
8d08fdba
MS
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. */
5566b478
MS
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)
8d08fdba
MS
7103 popclass (1);
7104 }
7105 }
7106
7107 finish_end:
7108
39211cd5
MS
7109 /* If requested, warn about definitions of large data objects. */
7110
7111 if (warn_larger_than
5156628f 7112 && ! processing_template_decl
39211cd5
MS
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
8d08fdba
MS
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;
8d08fdba
MS
7137}
7138
82580166 7139/* This is here for a midend callback from c-common.c */
e92cc029 7140
82580166
MS
7141void
7142finish_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
8d08fdba
MS
7149void
7150expand_static_init (decl, init)
7151 tree decl;
7152 tree init;
7153{
7154 tree oldstatic = value_member (decl, static_aggregates);
a4443a08 7155
8d08fdba
MS
7156 if (oldstatic)
7157 {
7158 if (TREE_PURPOSE (oldstatic) && init != NULL_TREE)
7159 cp_error ("multiple initializations given for `%D'", decl);
7160 }
a9aedbc2 7161 else if (! toplevel_bindings_p () && ! pseudo_global_level_p ())
8d08fdba
MS
7162 {
7163 /* Emit code to perform this initialization but once. */
7164 tree temp;
7165
e92cc029 7166 /* Remember this information until end of file. */
8d08fdba
MS
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);
eb66be0e 7174 expand_start_target_temps ();
72b7eeff 7175
8d08fdba 7176 expand_assignment (temp, integer_one_node, 0, 0);
28cbf42c 7177 if (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))
f30432d7 7178 || (init && TREE_CODE (init) == TREE_LIST))
8d08fdba 7179 {
6060a796 7180 expand_aggr_init (decl, init, 0, 0);
8d08fdba
MS
7181 do_pending_stack_adjust ();
7182 }
f30432d7 7183 else if (init)
8d08fdba 7184 expand_assignment (decl, init, 0, 0);
f30432d7 7185
a4443a08 7186 /* Cleanup any temporaries needed for the initial value. */
eb66be0e 7187 expand_end_target_temps ();
72b7eeff
MS
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;
e92cc029 7196 /* Remember this information until end of file. */
72b7eeff
MS
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);
beb53fb8
JM
7204 atexit_fndecl
7205 = builtin_function ("atexit",
7206 build_function_type (void_type_node,
7207 pfvlist),
7208 NOT_BUILT_IN, NULL_PTR);
be99da77 7209 assemble_external (atexit_fndecl);
72b7eeff
MS
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);
e66d884e 7220 fcall = build_function_call (Atexit, expr_tree_cons (NULL_TREE, cleanup, NULL_TREE));
72b7eeff
MS
7221 expand_expr_stmt (fcall);
7222 }
7223
8d08fdba
MS
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
e92cc029 7231 /* Resume old (possibly temporary) allocation. */
8d08fdba
MS
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
7250int
7251complete_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)
e1cd6e56
MS
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 }
8d08fdba
MS
7269 else if (TREE_CODE (initial_value) == CONSTRUCTOR)
7270 {
e1cd6e56
MS
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);
8d08fdba
MS
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 {
51c184be
MS
7302 tree itype;
7303
8d08fdba 7304 TYPE_DOMAIN (type) = build_index_type (maxindex);
dff6b454 7305 if (! TREE_TYPE (maxindex))
8d08fdba 7306 TREE_TYPE (maxindex) = TYPE_DOMAIN (type);
51c184be
MS
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);
dff6b454
RK
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);
8d08fdba
MS
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. */
e92cc029 7330
8d08fdba
MS
7331static int
7332member_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. */
e92cc029 7348
8d08fdba
MS
7349static void
7350bad_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)
a28e3c7f
MS
7360 cp_error ("`const' and `volatile' function specifiers on `%D' invalid in %s declaration",
7361 object, type);
8d08fdba
MS
7362 if (friendp)
7363 cp_error_at ("invalid friend declaration", object);
7364 if (raises)
6060a796 7365 cp_error_at ("invalid exception specifications", object);
8d08fdba
MS
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. */
e92cc029 7379
8d08fdba 7380static tree
386b8a85
JM
7381grokfndecl (ctype, type, declarator, orig_declarator, virtualp, flags, quals,
7382 raises, attrlist, check, friendp, publicp, inlinep, funcdef_flag,
7383 template_count)
8d08fdba
MS
7384 tree ctype, type;
7385 tree declarator;
386b8a85 7386 tree orig_declarator;
8d08fdba
MS
7387 int virtualp;
7388 enum overload_flags flags;
f30432d7 7389 tree quals, raises, attrlist;
386b8a85 7390 int check, friendp, publicp, inlinep, funcdef_flag, template_count;
8d08fdba
MS
7391{
7392 tree cname, decl;
7393 int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
42976354 7394 tree t;
8d08fdba
MS
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 {
f30432d7 7404 type = build_exception_variant (type, raises);
8d08fdba 7405 }
c11b6f21 7406
8d08fdba
MS
7407 decl = build_lang_decl (FUNCTION_DECL, declarator, type);
7408 /* propagate volatile out from type to decl */
7409 if (TYPE_VOLATILE (type))
893de33c 7410 TREE_THIS_VOLATILE (decl) = 1;
8d08fdba
MS
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;
8d08fdba
MS
7417 }
7418
e76a2646
MS
7419 if (ctype)
7420 DECL_CLASS_CONTEXT (decl) = ctype;
7421
faae18ab
MS
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
893de33c 7432 TREE_PUBLIC (decl) = publicp;
faae18ab 7433 if (! publicp)
893de33c
JM
7434 {
7435 DECL_INTERFACE_KNOWN (decl) = 1;
7436 DECL_NOT_REALLY_EXTERN (decl) = 1;
7437 }
faae18ab
MS
7438
7439 if (inlinep)
7440 DECL_THIS_INLINE (decl) = DECL_INLINE (decl) = 1;
8d08fdba
MS
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
e76a2646 7453 if (ctype && hack_decl_function_context (decl))
893de33c 7454 DECL_NO_STATIC_CHAIN (decl) = 1;
e76a2646 7455
42976354
BK
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
75650646
MM
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);
386b8a85 7468
75650646 7469 /* Caller will do the rest of this. */
8d08fdba
MS
7470 if (check < 0)
7471 return decl;
7472
5566b478 7473 if (check && funcdef_flag)
d2e5ee5c 7474 DECL_INITIAL (decl) = error_mark_node;
5566b478 7475
8d08fdba
MS
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);
386b8a85 7487
e1467ff2
MM
7488 decl = check_explicit_specialization (orig_declarator, decl,
7489 template_count,
7490 funcdef_flag ? 2 :
7491 (friendp ? 3 : 0));
75650646 7492
8d08fdba 7493 if (check)
5566b478
MS
7494 {
7495 tmp = check_classfn (ctype, decl);
98c1c668
JM
7496
7497 if (tmp && TREE_CODE (tmp) == TEMPLATE_DECL)
7498 tmp = DECL_TEMPLATE_RESULT(tmp);
7499
e349ee73
MS
7500 if (tmp && DECL_ARTIFICIAL (tmp))
7501 cp_error ("definition of implicitly-declared `%D'", tmp);
5566b478
MS
7502 if (tmp && duplicate_decls (decl, tmp))
7503 return tmp;
7504 }
a0a33927
MS
7505 if (! grok_ctor_properties (ctype, decl))
7506 return NULL_TREE;
7507
7177d104 7508 if (check == 0 && ! current_function_decl)
8d08fdba 7509 {
37c46b43 7510 tmp = IDENTIFIER_GLOBAL_VALUE (DECL_ASSEMBLER_NAME (decl));
8d08fdba
MS
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
e1467ff2
MM
7535 decl = check_explicit_specialization (orig_declarator, decl,
7536 template_count,
7537 funcdef_flag ? 2 :
7538 (friendp ? 3 : 0));
75650646 7539
8d08fdba 7540 if (ctype != NULL_TREE && check)
5566b478
MS
7541 {
7542 tmp = check_classfn (ctype, decl);
98c1c668
JM
7543
7544 if (tmp && TREE_CODE (tmp) == TEMPLATE_DECL)
75650646 7545 tmp = DECL_TEMPLATE_RESULT (tmp);
98c1c668 7546
5566b478
MS
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 }
e349ee73
MS
7555 if (tmp && DECL_ARTIFICIAL (tmp))
7556 cp_error ("definition of implicitly-declared `%D'", tmp);
7834ab39
MS
7557 if (tmp)
7558 {
7559 if (!duplicate_decls (decl, tmp))
7560 my_friendly_abort (892);
7561 return tmp;
7562 }
5566b478 7563 }
8d08fdba
MS
7564
7565 if (ctype == NULL_TREE || check)
7566 return decl;
7567
7177d104
MS
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)
8d08fdba 7572 {
75650646 7573 if (!DECL_TEMPLATE_SPECIALIZATION (decl))
7177d104 7574 {
75650646
MM
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 }
7177d104 7594 }
f30432d7
MS
7595
7596 if (attrlist)
7597 cplus_decl_attributes (decl, TREE_PURPOSE (attrlist),
7598 TREE_VALUE (attrlist));
7177d104 7599 make_decl_rtl (decl, NULL_PTR, 1);
8d08fdba 7600 }
8d08fdba
MS
7601 if (virtualp)
7602 {
2ee887f2 7603 DECL_VIRTUAL_P (decl) = 1;
8d08fdba
MS
7604 if (DECL_VINDEX (decl) == NULL_TREE)
7605 DECL_VINDEX (decl) = error_mark_node;
7606 IDENTIFIER_VIRTUAL_P (DECL_NAME (decl)) = 1;
8d08fdba
MS
7607 }
7608 }
7609 return decl;
7610}
7611
7612static tree
d2e5ee5c 7613grokvardecl (type, declarator, specbits_in, initialized, constp)
8d08fdba
MS
7614 tree type;
7615 tree declarator;
d2e5ee5c 7616 RID_BIT_TYPE *specbits_in;
8d08fdba 7617 int initialized;
a9aedbc2 7618 int constp;
8d08fdba
MS
7619{
7620 tree decl;
f7da6097
MS
7621 RID_BIT_TYPE specbits;
7622
7623 specbits = *specbits_in;
8d08fdba
MS
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. */
5b605f68
MS
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;
f376e137 7634 DECL_ASSEMBLER_NAME (decl) = build_static_name (basetype, declarator);
8d08fdba
MS
7635 }
7636 else
e349ee73 7637 decl = build_decl (VAR_DECL, declarator, complete_type (type));
8d08fdba 7638
6060a796
MS
7639 DECL_ASSEMBLER_NAME (decl) = current_namespace_id (DECL_ASSEMBLER_NAME (decl));
7640
8d08fdba
MS
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;
5b605f68 7654 DECL_EXTERNAL (decl) = 0;
8d08fdba
MS
7655 }
7656 /* At top level, either `static' or no s.c. makes a definition
7657 (perhaps tentative), and absence of `static' makes it public. */
a9aedbc2 7658 else if (toplevel_bindings_p ())
8d08fdba 7659 {
a9aedbc2 7660 TREE_PUBLIC (decl) = (RIDBIT_NOTSETP (RID_STATIC, specbits)
9fffd093 7661 && (DECL_THIS_EXTERN (decl) || ! constp));
8d08fdba
MS
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
e92cc029 7673/* Create a canonical pointer to member function type. */
8d08fdba
MS
7674
7675tree
7676build_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);
f30432d7 7693 IS_AGGR_TYPE (u) = 0;
8d08fdba 7694 fields[0] = build_lang_field_decl (FIELD_DECL, pfn_identifier, type);
a28e3c7f
MS
7695 fields[1] = build_lang_field_decl (FIELD_DECL, delta2_identifier,
7696 delta_type_node);
8d08fdba
MS
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
e92cc029 7702 /* Let the front-end know this is a pointer to member function. */
db5ae43f 7703 TYPE_PTRMEMFUNC_FLAG (t) = 1;
f376e137
MS
7704 /* and not really an aggregate. */
7705 IS_AGGR_TYPE (t) = 0;
8d08fdba 7706
a28e3c7f
MS
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);
8d08fdba
MS
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
e92cc029 7722 /* Seems to be wanted. */
8d08fdba
MS
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.
db5ae43f 7747 CATCHPARM for a parameter declaration before a catch clause.
8d08fdba
MS
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
7783enum return_types { return_normal, return_ctor, return_dtor, return_conversion };
7784
7785tree
c11b6f21 7786grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
8d08fdba
MS
7787 tree declspecs;
7788 tree declarator;
7789 enum decl_context decl_context;
7790 int initialized;
c11b6f21 7791 tree attrlist;
8d08fdba
MS
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;
db5ae43f 7800 int virtualp, explicitp, friendp, inlinep, staticp;
8d08fdba
MS
7801 int explicit_int = 0;
7802 int explicit_char = 0;
37c46b43 7803 int defaulted_int = 0;
8d08fdba
MS
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;
6125f3be
DE
7811#if 0
7812 /* See the code below that used this. */
f6abb50a 7813 tree decl_machine_attr = NULL_TREE;
6125f3be 7814#endif
8d08fdba
MS
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;
8d08fdba 7828 tree quals = NULL_TREE;
c11b6f21 7829 tree raises = NULL_TREE;
386b8a85 7830 int template_count = 0;
8d08fdba
MS
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
8d08fdba
MS
7840 /* Look inside a declarator for the name being declared
7841 and get it as a string, for an error message. */
7842 {
be99da77
MS
7843 tree *next = &declarator;
7844 register tree decl;
8d08fdba
MS
7845 name = NULL;
7846
be99da77
MS
7847 while (next && *next)
7848 {
7849 decl = *next;
7850 switch (TREE_CODE (decl))
8d08fdba 7851 {
be99da77
MS
7852 case COND_EXPR:
7853 ctype = NULL_TREE;
7854 next = &TREE_OPERAND (decl, 0);
7855 break;
8d08fdba 7856
be99da77 7857 case BIT_NOT_EXPR: /* for C++ destructors! */
8d08fdba 7858 {
be99da77
MS
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;
5566b478
MS
7865 if (TREE_CODE (name) == TYPE_DECL)
7866 TREE_OPERAND (decl, 0) = name = constructor_name (name);
be99da77
MS
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 }
8d08fdba 7882 else
be99da77
MS
7883 {
7884 tree t = constructor_name (ctype);
7885 if (t != name)
7886 rename = t;
7887 }
51c184be 7888
be99da77 7889 if (rename)
39211cd5 7890 {
5566b478
MS
7891 cp_error ("destructor `%T' must match class name `%T'",
7892 name, rename);
be99da77 7893 TREE_OPERAND (decl, 0) = rename;
39211cd5 7894 }
be99da77 7895 next = &name;
51c184be 7896 }
be99da77 7897 break;
8d08fdba 7898
be99da77
MS
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;
8d08fdba 7907
be99da77
MS
7908 case CALL_EXPR:
7909 if (parmlist_is_exprlist (TREE_OPERAND (decl, 1)))
8d08fdba 7910 {
be99da77
MS
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
c11b6f21 7918 decl = start_decl (declarator, declspecs, 1);
249555b0
BK
7919 /* Look for __unused__ attribute */
7920 if (TREE_USED (TREE_TYPE (decl)))
7921 TREE_USED (decl) = 1;
be99da77
MS
7922 finish_decl (decl, init, NULL_TREE);
7923 return 0;
8d08fdba 7924 }
be99da77
MS
7925 innermost_code = TREE_CODE (decl);
7926 if (decl_context == FIELD && ctype == NULL_TREE)
7927 ctype = current_class_type;
45537677 7928 if (ctype
c11b6f21 7929 && TREE_OPERAND (decl, 0)
45537677
MS
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)))))
be99da77
MS
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))
8d08fdba 7941 {
be99da77
MS
7942 return_type = return_ctor;
7943 ctor_return_type = ctype;
8d08fdba 7944 }
be99da77
MS
7945 ctype = NULL_TREE;
7946 break;
386b8a85
JM
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 */
be99da77
MS
7963
7964 case IDENTIFIER_NODE:
386b8a85
JM
7965 if (TREE_CODE (decl) == IDENTIFIER_NODE)
7966 dname = decl;
7967
be99da77
MS
7968 next = 0;
7969
7970 if (is_rid (dname))
8d08fdba 7971 {
be99da77
MS
7972 cp_error ("declarator-id missing; using reserved word `%D'",
7973 dname);
7974 name = IDENTIFIER_POINTER (dname);
8d08fdba 7975 }
be99da77 7976 if (! IDENTIFIER_OPNAME_P (dname)
956d6950 7977 /* GNU/Linux headers use '__op'. Arrgh. */
a703fb38 7978 || (IDENTIFIER_TYPENAME_P (dname) && ! TREE_TYPE (dname)))
be99da77 7979 name = IDENTIFIER_POINTER (dname);
8d08fdba
MS
7980 else
7981 {
be99da77 7982 if (IDENTIFIER_TYPENAME_P (dname))
8d08fdba 7983 {
be99da77
MS
7984 my_friendly_assert (flags == NO_SPECIAL, 154);
7985 flags = TYPENAME_FLAG;
7986 ctor_return_type = TREE_TYPE (dname);
7987 return_type = return_conversion;
8d08fdba 7988 }
be99da77 7989 name = operator_name_string (dname);
8d08fdba 7990 }
be99da77 7991 break;
8d08fdba 7992
be99da77
MS
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;
73b0fce8
KL
8007 else if (TREE_CODE (cname) == TEMPLATE_TYPE_PARM
8008 || TREE_CODE (cname) == TEMPLATE_TEMPLATE_PARM)
5566b478
MS
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 }
be99da77
MS
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
c91a56d2
MS
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))))
be99da77
MS
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
45537677
MS
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
e92cc029 8077 /* Avoid giving two errors for this. */
45537677
MS
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
be99da77 8086 default:
be99da77
MS
8087 cp_compiler_error ("`%D' as declarator", decl);
8088 return 0; /* We used to do a 155 abort here. */
8d08fdba 8089 }
be99da77 8090 }
8d08fdba
MS
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
e1cd6e56
MS
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
8d08fdba
MS
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
a9aedbc2
MS
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. */
8d08fdba 8122
5566b478
MS
8123 if (decl_context == NORMAL && ! namespace_bindings_p ()
8124 && ! pseudo_global_level_p ())
a9aedbc2
MS
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 }
8d08fdba
MS
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 {
a3203465
MS
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])
8d08fdba
MS
8168 {
8169 if (type)
8ccc31eb
MS
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 }
8d08fdba
MS
8176 else
8177 {
a3203465
MS
8178 if (id == ridpointers[(int) RID_INT])
8179 explicit_int = 1;
8180 else if (id == ridpointers[(int) RID_CHAR])
8181 explicit_char = 1;
8d08fdba
MS
8182 type = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (id));
8183 }
8184 goto found;
8185 }
e92cc029 8186 /* C++ aggregate types. */
8d08fdba
MS
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
f376e137 8196 for (i = (int) RID_FIRST_MODIFIER; i <= (int) RID_LAST_MODIFIER; i++)
8d08fdba
MS
8197 {
8198 if (ridpointers[i] == id)
8199 {
8200 if (i == (int) RID_LONG && RIDBIT_SETP (i, specbits))
8201 {
e1cd6e56
MS
8202 if (pedantic && ! in_system_header)
8203 pedwarn ("ANSI C++ does not support `long long'");
9a3b49ac 8204 if (longlong)
a0a33927 8205 error ("`long long long' is too long for GCC");
8d08fdba
MS
8206 else
8207 longlong = 1;
8208 }
8209 else if (RIDBIT_SETP (i, specbits))
a0a33927 8210 pedwarn ("duplicate `%s'", IDENTIFIER_POINTER (id));
8d08fdba
MS
8211 RIDBIT_SET (i, specbits);
8212 goto found;
8213 }
8214 }
8215 }
e92cc029 8216 /* C++ aggregate types. */
73b0fce8 8217 else if (TREE_CODE (id) == TYPE_DECL || TREE_CODE (id) == TEMPLATE_DECL)
45537677
MS
8218 {
8219 if (type)
8220 cp_error ("multiple declarations `%T' and `%T'", type,
8221 TREE_TYPE (id));
8222 else
5566b478
MS
8223 {
8224 type = TREE_TYPE (id);
8225 TREE_VALUE (spec) = type;
8226 }
45537677
MS
8227 goto found;
8228 }
8d08fdba
MS
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);
6125f3be
DE
8240#if 0
8241 /* See the code below that used this. */
f6abb50a 8242 decl_machine_attr = DECL_MACHINE_ATTRIBUTES (id);
6125f3be 8243#endif
8d08fdba
MS
8244 typedef_decl = t;
8245 }
8246 }
bd6dd845 8247 else if (id != error_mark_node)
8d08fdba
MS
8248 /* Can't change CLASS nodes into RECORD nodes here! */
8249 type = id;
8250
8251 found: ;
8252 }
8253
8254 typedef_type = type;
8255
37c46b43 8256 /* No type at all: default to `int', and set DEFAULTED_INT
8d08fdba
MS
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
a3203465
MS
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;
37c46b43 8270 defaulted_int = 1;
a3203465
MS
8271 }
8272
8d08fdba
MS
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)
f30432d7 8279 type = build_pointer_type (ctor_return_type);
51c184be
MS
8280 else if (return_type == return_conversion)
8281 type = ctor_return_type;
8d08fdba
MS
8282 else if (current_class_type
8283 && IS_SIGNATURE (current_class_type)
fc378698 8284 && RIDBIT_SETP (RID_TYPEDEF, specbits)
8d08fdba
MS
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 {
a28e3c7f
MS
8293 if (funcdef_flag)
8294 {
8295 if (warn_return_type
a3203465 8296 && return_type == return_normal)
a28e3c7f
MS
8297 /* Save warning until we know what is really going on. */
8298 warn_about_return_type = 1;
8299 }
a3203465
MS
8300 else if (RIDBIT_SETP (RID_TYPEDEF, specbits))
8301 pedwarn ("ANSI C++ forbids typedef which does not specify a type");
343fdf03
JM
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 }
8d08fdba
MS
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");
f30432d7 8322 type = build_pointer_type (ctor_return_type);
8d08fdba 8323 }
51c184be
MS
8324 else if (return_type == return_conversion)
8325 {
e1cd6e56 8326 if (comptypes (type, ctor_return_type, 1) == 0)
51c184be
MS
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 }
8d08fdba
MS
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);
b7484fbe 8362 else if (TREE_CODE (type) != INTEGER_TYPE)
8d08fdba
MS
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;
37c46b43 8381 if (!explicit_int && !defaulted_int && !explicit_char && pedantic)
8d08fdba
MS
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
37c46b43
MS
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
8d08fdba
MS
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)
8d08fdba 8411 || (bitfield && ! flag_signed_bitfields
37c46b43 8412 && (explicit_int || defaulted_int || explicit_char
8d08fdba
MS
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
37c46b43
MS
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
8d08fdba
MS
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);
8d08fdba 8476 virtualp = RIDBIT_SETP (RID_VIRTUAL, specbits);
db5ae43f
MS
8477 RIDBIT_RESET (RID_VIRTUAL, specbits);
8478 explicitp = RIDBIT_SETP (RID_EXPLICIT, specbits) != 0;
8479 RIDBIT_RESET (RID_EXPLICIT, specbits);
8d08fdba 8480
8d08fdba
MS
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);
8d08fdba
MS
8491 RIDBIT_RESET (RID_FRIEND, specbits);
8492
8493 if (RIDBIT_SETP (RID_MUTABLE, specbits))
8494 {
8495 if (decl_context == PARM)
8496 {
db5ae43f 8497 error ("non-member `%s' cannot be declared `mutable'", name);
8d08fdba
MS
8498 RIDBIT_RESET (RID_MUTABLE, specbits);
8499 }
8500 else if (friendp || decl_context == TYPENAME)
8501 {
db5ae43f 8502 error ("non-object member `%s' cannot be declared `mutable'", name);
8d08fdba
MS
8503 RIDBIT_RESET (RID_MUTABLE, specbits);
8504 }
8d08fdba
MS
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. */
b7484fbe
MS
8526 if (virtualp
8527 && (current_class_name == NULL_TREE || decl_context != FIELD))
8d08fdba
MS
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)
fc378698 8549 && RIDBIT_NOTSETP (RID_TYPEDEF, specbits))
8d08fdba
MS
8550 {
8551 if (constp)
8552 {
8553 error ("`const' specified for signature member function `%s'", name);
8554 constp = 0;
8555 }
8556 if (volatilep)
8557 {
a28e3c7f
MS
8558 error ("`volatile' specified for signature member function `%s'",
8559 name);
8d08fdba
MS
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 {
a28e3c7f
MS
8575 error ("`virtual' specified for signature member function `%s'",
8576 name);
8d08fdba
MS
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 {
db5ae43f 8589 if ((decl_context == PARM || decl_context == CATCHPARM)
8d08fdba
MS
8590 && (RIDBIT_SETP (RID_REGISTER, specbits)
8591 || RIDBIT_SETP (RID_AUTO, specbits)))
8592 ;
fc378698
MS
8593 else if (RIDBIT_SETP (RID_TYPEDEF, specbits))
8594 ;
8d08fdba 8595 else if (decl_context == FIELD
fc378698 8596 && ! IS_SIGNATURE (current_class_type)
8d08fdba
MS
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 {
b7484fbe
MS
8606 tree tmp = NULL_TREE;
8607 register int op = 0;
8608
8609 if (declarator)
8610 {
9e9ff709
MS
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);
b7484fbe
MS
8616 op = IDENTIFIER_OPNAME_P (tmp);
8617 }
8d08fdba
MS
8618 error ("storage class specified for %s `%s'",
8619 IS_SIGNATURE (current_class_type)
8620 ? (op
8621 ? "signature member operator"
8622 : "signature member function")
b7484fbe 8623 : (op ? "member operator" : "field"),
8d08fdba
MS
8624 op ? operator_name_string (tmp) : name);
8625 }
8626 else
db5ae43f 8627 error (((decl_context == PARM || decl_context == CATCHPARM)
8d08fdba
MS
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 {
a9aedbc2 8643 if (toplevel_bindings_p ())
8d08fdba 8644 {
59be0cdd 8645 /* It's common practice (and completely valid) to have a const
8d08fdba
MS
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
a9aedbc2 8654 && ! toplevel_bindings_p ())
8d08fdba 8655 error ("nested function `%s' declared `extern'", name);
a9aedbc2 8656 else if (toplevel_bindings_p ())
8d08fdba
MS
8657 {
8658 if (RIDBIT_SETP (RID_AUTO, specbits))
8659 error ("top-level declaration of `%s' specifies `auto'", name);
8d08fdba
MS
8660 }
8661
909e536a
MS
8662 if (nclasses > 0 && friendp)
8663 error ("storage class specifiers invalid in friend function declarations");
8664
8d08fdba
MS
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
386b8a85
JM
8669 while (declarator && TREE_CODE (declarator) != IDENTIFIER_NODE
8670 && TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
8d08fdba
MS
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)
8d08fdba
MS
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
bd6dd845 8693 if (type == error_mark_node)
8d08fdba
MS
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 {
8d08fdba 8709 tree dummy = build_decl (TYPE_DECL, NULL_TREE, type);
8d08fdba
MS
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);
b7484fbe
MS
8721 /* The index is a signed object `sizetype' bits wide. */
8722 tree index_type = signed_type (sizetype);
8d08fdba
MS
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,
59be0cdd 8742 then we'd be saying x[i] is valid for an array x, but
8d08fdba
MS
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
5566b478
MS
8788 /* If this involves a template parameter, it'll be
8789 constant, but we don't know what the value is yet. */
5156628f 8790 if (processing_template_decl)
5566b478
MS
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 }
8d08fdba
MS
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);
e1cd6e56 8808 if (pedantic && integer_zerop (size))
8d08fdba
MS
8809 cp_pedwarn ("ANSI C++ forbids zero-size array `%D'", dname);
8810 if (TREE_CONSTANT (size))
8811 {
dff6b454
RK
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. */
8d08fdba 8816 constant_expression_warning (size);
dff6b454
RK
8817 pedantic = old_pedantic;
8818 flag_pedantic_errors = old_flag_pedantic_errors;
8d08fdba
MS
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 }
8d08fdba
MS
8824 }
8825 else
8826 {
e1cd6e56 8827 if (pedantic)
a0a33927
MS
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 }
8d08fdba 8835 }
b7484fbe 8836
beb53fb8
JM
8837 itype
8838 = fold (build_binary_op (MINUS_EXPR,
37c46b43
MS
8839 cp_convert (index_type, size),
8840 cp_convert (index_type,
8841 integer_one_node), 1));
b7484fbe
MS
8842 if (! TREE_CONSTANT (itype))
8843 itype = variable_size (itype);
594740f3
MS
8844 else if (TREE_OVERFLOW (itype))
8845 {
8846 error ("overflow in array dimension");
8847 TREE_OVERFLOW (itype) = 0;
8848 }
fc378698
MS
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
5566b478 8864 dont_grok_size:
8d08fdba
MS
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)
f376e137 8875 type = cp_build_type_variant (type, constp, volatilep);
8d08fdba
MS
8876
8877 ctype = NULL_TREE;
8878 }
8879 break;
8880
8881 case CALL_EXPR:
8882 {
8883 tree arg_types;
f376e137
MS
8884 int funcdecl_p;
8885 tree inner_parms = TREE_OPERAND (declarator, 1);
8886 tree inner_decl = TREE_OPERAND (declarator, 0);
8d08fdba
MS
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
21474714
MS
8895 /* Merge any constancy or volatility into the function return
8896 type. */
8d08fdba
MS
8897
8898 if (constp || volatilep)
8899 {
f376e137 8900 type = cp_build_type_variant (type, constp, volatilep);
8d08fdba
MS
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
f376e137
MS
8921 if (inner_decl && TREE_CODE (inner_decl) == SCOPE_REF)
8922 inner_decl = TREE_OPERAND (inner_decl, 1);
8923
386b8a85
JM
8924 if (inner_decl && TREE_CODE (inner_decl) == TEMPLATE_ID_EXPR)
8925 inner_decl = dname;
8926
b7484fbe
MS
8927 /* Pick up type qualifiers which should be applied to `this'. */
8928 quals = TREE_OPERAND (declarator, 2);
8929
c11b6f21
MS
8930 /* Pick up the exception specifications. */
8931 raises = TREE_TYPE (declarator);
8932
f376e137
MS
8933 /* Say it's a definition only for the CALL_EXPR
8934 closest to the identifier. */
beb53fb8 8935 funcdecl_p
386b8a85
JM
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
8d08fdba
MS
8941 if (ctype == NULL_TREE
8942 && decl_context == FIELD
f376e137 8943 && funcdecl_p
8d08fdba
MS
8944 && (friendp == 0 || dname == current_class_name))
8945 ctype = current_class_type;
8946
51c184be 8947 if (ctype && return_type == return_conversion)
8d08fdba
MS
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");
b7484fbe 8963 if (quals)
8d08fdba 8964 {
b7484fbe 8965 error ("destructors cannot be declared `const' or `volatile'");
8d08fdba
MS
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 }
e92cc029 8975 else /* it's a constructor. */
8d08fdba 8976 {
db5ae43f
MS
8977 if (explicitp == 1)
8978 explicitp = 2;
8d08fdba
MS
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 }
b7484fbe 8989 if (quals)
8d08fdba 8990 {
b7484fbe 8991 error ("constructors cannot be declared `const' or `volatile'");
8d08fdba
MS
8992 return void_type_node;
8993 }
8d08fdba 8994 {
51c184be 8995 RID_BIT_TYPE tmp_bits;
fc378698 8996 bcopy ((void*)&specbits, (void*)&tmp_bits, sizeof (RID_BIT_TYPE));
51c184be
MS
8997 RIDBIT_RESET (RID_INLINE, tmp_bits);
8998 RIDBIT_RESET (RID_STATIC, tmp_bits);
8999 if (RIDBIT_ANY_SET (tmp_bits))
8d08fdba 9000 error ("return value type specifier for constructor ignored");
8d08fdba 9001 }
f30432d7 9002 type = build_pointer_type (ctype);
beb53fb8
JM
9003 if (decl_context == FIELD
9004 && IS_SIGNATURE (current_class_type))
8d08fdba
MS
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 }
b7484fbe 9022 else if (friendp)
8d08fdba 9023 {
b7484fbe
MS
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 }
28cbf42c
MS
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);
8d08fdba
MS
9038 }
9039
8d08fdba
MS
9040 /* Construct the function type and go to the next
9041 inner layer of declarator. */
9042
f376e137 9043 declarator = TREE_OPERAND (declarator, 0);
8d08fdba 9044
f376e137
MS
9045 /* FIXME: This is where default args should be fully
9046 processed. */
8d08fdba 9047
f376e137 9048 arg_types = grokparms (inner_parms, funcdecl_p ? funcdef_flag : 0);
8d08fdba
MS
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
d22c8596 9071 /* ANSI says that `const int foo ();'
8d08fdba 9072 does not make the function foo const. */
d22c8596 9073 type = build_function_type (type, arg_types);
42976354
BK
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 }
8d08fdba
MS
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
a5894242
MS
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
8d08fdba
MS
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 {
f376e137 9122 type = cp_build_type_variant (type, constp, volatilep);
8d08fdba
MS
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 {
63718c49
GB
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);
8d08fdba
MS
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 {
63718c49
GB
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);
8d08fdba
MS
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)
a0a33927 9203 pedwarn ("duplicate `const'");
8d08fdba 9204 if (volatilep > 1)
a0a33927
MS
9205 pedwarn ("duplicate `volatile'");
9206 if (TREE_CODE (declarator) == ADDR_EXPR
9207 && (constp || volatilep))
9208 {
9209 if (constp)
e1cd6e56 9210 pedwarn ("discarding `const' applied to a reference");
a0a33927 9211 if (volatilep)
e1cd6e56 9212 pedwarn ("discarding `volatile' applied to a reference");
a0a33927
MS
9213 constp = volatilep = 0;
9214 }
8d08fdba
MS
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);
386b8a85
JM
9229 tree t;
9230
8d08fdba
MS
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 */ ;
5566b478
MS
9240 else if (! IS_AGGR_TYPE_CODE
9241 (TREE_CODE (TREE_OPERAND (declarator, 0))))
9242 ;
8d08fdba
MS
9243 else if (TREE_COMPLEXITY (declarator) == current_class_depth)
9244 {
9a3b49ac
MS
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 ();
98c1c668
JM
9255 type = tsubst (type, args,
9256 TREE_VEC_LENGTH (TREE_VEC_ELT
9257 (args, 0)),
9258 NULL_TREE);
9a3b49ac
MS
9259 }
9260
a28e3c7f
MS
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. */
8d08fdba
MS
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
386b8a85
JM
9282 t = ctype;
9283 while (t != NULL_TREE)
9284 {
75650646
MM
9285 if (CLASSTYPE_TEMPLATE_INFO (t) &&
9286 !CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
386b8a85
JM
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
8d08fdba
MS
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
db5ae43f 9303 if (ctype == current_class_type)
28cbf42c
MS
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 }
db5ae43f 9315 else if (TREE_CODE (type) == FUNCTION_TYPE)
8d08fdba
MS
9316 {
9317 if (current_class_type == NULL_TREE
8d08fdba
MS
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 {
5b605f68 9323 cp_error ("cannot declare member function `%T::%s' within `%T'",
a3203465 9324 ctype, name, current_class_type);
8d08fdba
MS
9325 return void_type_node;
9326 }
9327 }
5566b478
MS
9328 else if (RIDBIT_SETP (RID_TYPEDEF, specbits)
9329 || TYPE_SIZE (complete_type (ctype)) != NULL_TREE)
8d08fdba 9330 {
8d08fdba 9331 /* have to move this code elsewhere in this function.
db5ae43f
MS
9332 this code is used for i.e., typedef int A::M; M *pm;
9333
9334 It is? How? jason 10/2/94 */
8d08fdba 9335
8d08fdba
MS
9336 if (current_class_type)
9337 {
db5ae43f
MS
9338 cp_error ("cannot declare member `%T::%s' within `%T'",
9339 ctype, name, current_class_type);
9340 return void_type_node;
8d08fdba
MS
9341 }
9342 type = build_offset_type (ctype, type);
9343 }
9344 else if (uses_template_parms (ctype))
9345 {
8d08fdba 9346 if (TREE_CODE (type) == FUNCTION_TYPE)
beb53fb8
JM
9347 type
9348 = build_cplus_method_type (build_type_variant (ctype,
9349 constp,
9350 volatilep),
9351 TREE_TYPE (type),
9352 TYPE_ARG_TYPES (type));
8d08fdba
MS
9353 }
9354 else
9355 {
9356 cp_error ("structure `%T' not yet defined", ctype);
9357 return error_mark_node;
9358 }
9359
9360 declarator = sname;
9361 }
8d08fdba
MS
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
8d08fdba
MS
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
db5ae43f
MS
9401 if (explicitp == 1)
9402 {
9403 error ("only constructors can be declared `explicit'");
9404 explicitp = 0;
9405 }
9406
8d08fdba
MS
9407 /* Now TYPE has the actual type. */
9408
9409 /* If this is declaring a typedef name, return a TYPE_DECL. */
9410
f30432d7
MS
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
fc378698 9425 if (RIDBIT_SETP (RID_TYPEDEF, specbits) && decl_context != TYPENAME)
8d08fdba
MS
9426 {
9427 tree decl;
9428
9429 /* Note that the grammar rejects storage classes
9430 in typenames, fields or parameters. */
9431 if (constp || volatilep)
f376e137 9432 type = cp_build_type_variant (type, constp, volatilep);
8d08fdba 9433
d2e5ee5c
MS
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
8d08fdba
MS
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);
d2e5ee5c 9457 TYPE_NAME (type) = decl;
8d08fdba
MS
9458
9459 if (TYPE_LANG_SPECIFIC (type))
9460 TYPE_WAS_ANONYMOUS (type) = 1;
9461
d2e5ee5c
MS
9462 DECL_ASSEMBLER_NAME (decl) = DECL_NAME (decl);
9463 DECL_ASSEMBLER_NAME (decl)
9464 = get_identifier (build_overload_name (type, 1, 1));
fc378698 9465 }
fc378698 9466
8d08fdba
MS
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);
a3203465 9470 return NULL_TREE;
8d08fdba
MS
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
c91a56d2
MS
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
8d08fdba
MS
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)
a703fb38
KG
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 }
8d08fdba
MS
9529
9530 /* Special case: "friend class foo" looks like a TYPENAME context. */
9531 if (friendp)
9532 {
b7484fbe
MS
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 }
8d08fdba
MS
9555 }
9556 else if (quals)
9557 {
8d08fdba 9558 tree dummy = build_decl (TYPE_DECL, declarator, type);
8d08fdba
MS
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
db5ae43f 9571 && decl_context != CATCHPARM
8d08fdba
MS
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 {
b7484fbe
MS
9586 if (! declarator)
9587 error ("unnamed variable or field declared void");
9588 else if (TREE_CODE (declarator) == IDENTIFIER_NODE)
8d08fdba
MS
9589 {
9590 if (IDENTIFIER_OPNAME_P (declarator))
8d08fdba 9591 my_friendly_abort (356);
8d08fdba
MS
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 {
8d08fdba
MS
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.
39211cd5 9613 One declared as a member is really a pointer to member. */
8d08fdba
MS
9614
9615 if (TREE_CODE (type) == ARRAY_TYPE)
9616 {
e92cc029 9617 /* Transfer const-ness of array into that of type pointed to. */
39211cd5 9618 type = build_pointer_type
f376e137 9619 (cp_build_type_variant (TREE_TYPE (type), constp, volatilep));
39211cd5 9620 volatilep = constp = 0;
8d08fdba
MS
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);
b7484fbe
MS
9626 else if (type == void_type_node && declarator)
9627 {
9628 error ("declaration of `%s' as void", name);
9629 return NULL_TREE;
9630 }
8d08fdba 9631
e349ee73 9632 decl = build_decl (PARM_DECL, declarator, complete_type (type));
8d08fdba
MS
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
39211cd5 9652 DECL_ARG_TYPE (decl) = type_promotes_to (type);
8d08fdba
MS
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;
e1467ff2 9665 tree function_context;
8d08fdba 9666
72b7eeff
MS
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
8d08fdba
MS
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]
a28e3c7f
MS
9698 || declarator == ansi_opname[(int) VEC_NEW_EXPR]
9699 || declarator == ansi_opname[(int) DELETE_EXPR]
9700 || declarator == ansi_opname[(int) VEC_DELETE_EXPR])
8d08fdba
MS
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. */
e1467ff2
MM
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;
386b8a85
JM
9719 decl = grokfndecl (ctype, type,
9720 TREE_CODE (declarator) != TEMPLATE_ID_EXPR
9721 ? declarator : dname,
9722 declarator,
f30432d7 9723 virtualp, flags, quals, raises, attrlist,
386b8a85
JM
9724 friendp ? -1 : 0, friendp, publicp, inlinep,
9725 funcdef_flag, template_count);
f0e01782
MS
9726 if (decl == NULL_TREE)
9727 return NULL_TREE;
6125f3be
DE
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. */
71851aaa 9731 decl = build_decl_attribute_variant (decl, decl_machine_attr);
6125f3be 9732#endif
f0e01782 9733
db5ae43f
MS
9734 if (explicitp == 2)
9735 DECL_NONCONVERTING_P (decl) = 1;
8d08fdba
MS
9736 }
9737 else if (TREE_CODE (type) == METHOD_TYPE)
9738 {
faae18ab
MS
9739 /* We only get here for friend declarations of
9740 members of other classes. */
8d08fdba
MS
9741 /* All method decls are public, so tell grokfndecl to set
9742 TREE_PUBLIC, also. */
386b8a85 9743 decl = grokfndecl (ctype, type, declarator, declarator,
f30432d7 9744 virtualp, flags, quals, raises, attrlist,
386b8a85
JM
9745 friendp ? -1 : 0, friendp, 1, 0, funcdef_flag,
9746 template_count);
f0e01782
MS
9747 if (decl == NULL_TREE)
9748 return NULL_TREE;
8d08fdba 9749 }
5566b478
MS
9750 else if (!staticp && ! processing_template_decl
9751 && TYPE_SIZE (complete_type (type)) == NULL_TREE
8d08fdba
MS
9752 && (TREE_CODE (type) != ARRAY_TYPE || initialized == 0))
9753 {
b7484fbe
MS
9754 if (declarator)
9755 cp_error ("field `%D' has incomplete type", declarator);
9756 else
9757 cp_error ("name `%T' has incomplete type", type);
8d08fdba
MS
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)
d2e5ee5c 9763 && IDENTIFIER_TEMPLATE (TYPE_IDENTIFIER (current_class_type))
8d08fdba
MS
9764 && declspecs && TREE_VALUE (declspecs)
9765 && TREE_TYPE (TREE_VALUE (declspecs)) == type)
db5ae43f
MS
9766 cp_error (" in instantiation of template `%T'",
9767 current_class_type);
9768
8d08fdba
MS
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,
5566b478
MS
9793 last_function_parms, flags, quals,
9794 funcdef_flag);
8d08fdba
MS
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 {
8d08fdba
MS
9806 if (initialized)
9807 {
a0a33927
MS
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. */
8d08fdba 9815 if (staticp)
a0a33927
MS
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
8d08fdba
MS
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
7177d104
MS
9832 initializer list) is the only way to initialize
9833 nonstatic const and reference members. */
e1cd6e56 9834 else if (pedantic || ! constp)
a0a33927
MS
9835 cp_pedwarn ("ANSI C++ forbids initialization of %s `%D'",
9836 constp ? "const member" : "member", declarator);
8d08fdba
MS
9837 }
9838
9839 if (staticp || (constp && initialized))
9840 {
f30432d7
MS
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
8d08fdba
MS
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);
5b605f68
MS
9851 TREE_STATIC (decl) = 1;
9852 /* In class context, 'static' means public access. */
9853 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl) = !!staticp;
8d08fdba
MS
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 {
386b8a85 9871 tree original_name;
8d08fdba
MS
9872 int publicp = 0;
9873
9874 if (! declarator)
9875 return NULL_TREE;
9876
386b8a85
JM
9877 if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
9878 original_name = dname;
9879 else
9880 original_name = declarator;
9881
8926095f
MS
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);
8d08fdba
MS
9886
9887 /* Function declaration not at top level.
9888 Storage classes other than `extern' are not allowed
9889 and `extern' makes no difference. */
a9aedbc2 9890 if (! toplevel_bindings_p ()
8926095f
MS
9891 && (RIDBIT_SETP (RID_STATIC, specbits)
9892 || RIDBIT_SETP (RID_INLINE, specbits))
8d08fdba 9893 && pedantic)
8926095f
MS
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
8d08fdba
MS
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
5156628f 9910 && ! processing_template_decl
8d08fdba
MS
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))
8926095f 9918 /* Plain overloading: will not be grok'd by grokclassfn. */
386b8a85
JM
9919 if (name_mangling_version < 1
9920 || TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
9921 declarator = build_decl_overload (dname, TYPE_ARG_TYPES (type), 0);
8d08fdba
MS
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
eb66be0e 9927 /* Record presence of `static'. */
faae18ab 9928 publicp = (ctype != NULL_TREE
a9aedbc2 9929 || RIDBIT_SETP (RID_EXTERN, specbits)
eb66be0e 9930 || !RIDBIT_SETP (RID_STATIC, specbits));
8d08fdba 9931
386b8a85 9932 decl = grokfndecl (ctype, type, original_name, declarator,
f30432d7 9933 virtualp, flags, quals, raises, attrlist,
75650646 9934 1, friendp,
386b8a85
JM
9935 publicp, inlinep, funcdef_flag,
9936 template_count);
f0e01782
MS
9937 if (decl == NULL_TREE)
9938 return NULL_TREE;
8d08fdba 9939
386b8a85
JM
9940 if (ctype == NULL_TREE && DECL_LANGUAGE (decl) != lang_c
9941 && (!DECL_TEMPLATE_SPECIALIZATION (decl) ||
9942 name_mangling_version < 1))
6060a796 9943 DECL_ASSEMBLER_NAME (decl) = current_namespace_id (declarator);
386b8a85 9944
8d08fdba
MS
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 {
00595019 9953 cp_pedwarn ("cannot declare member function `%D' to have static linkage", decl);
8d08fdba
MS
9954 illegal_static = 1;
9955 }
8d08fdba
MS
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 }
8d08fdba
MS
9969 }
9970 else
9971 {
9972 /* It's a variable. */
9973
db5ae43f
MS
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 {
e92cc029
MS
9988 /* Transfer const-ness of array into that of type
9989 pointed to. */
db5ae43f
MS
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
8d08fdba 10000 /* An uninitialized decl with `extern' is a reference. */
d2e5ee5c 10001 decl = grokvardecl (type, declarator, &specbits, initialized, constp);
8d08fdba
MS
10002 bad_specifiers (decl, "variable", virtualp, quals != NULL_TREE,
10003 inlinep, friendp, raises != NULL_TREE);
10004
10005 if (ctype)
10006 {
f0e01782 10007 DECL_CONTEXT (decl) = ctype;
8d08fdba
MS
10008 if (staticp == 1)
10009 {
f30432d7 10010 cp_pedwarn ("static member `%D' re-declared as static", decl);
8d08fdba
MS
10011 staticp = 0;
10012 RIDBIT_RESET (RID_STATIC, specbits);
10013 }
b7484fbe
MS
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 }
f30432d7 10019 if (RIDBIT_SETP (RID_EXTERN, specbits) && pedantic)
8d08fdba 10020 {
f30432d7
MS
10021 cp_pedwarn ("cannot explicitly declare member `%#D' to have extern linkage",
10022 decl);
8d08fdba
MS
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
8926095f
MS
10039 if (RIDBIT_SETP (RID_EXTERN, specbits))
10040 DECL_THIS_EXTERN (decl) = 1;
10041
faae18ab
MS
10042 if (RIDBIT_SETP (RID_STATIC, specbits))
10043 DECL_THIS_STATIC (decl) = 1;
10044
8d08fdba
MS
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. */
e92cc029 10063
8d08fdba
MS
10064int
10065parmlist_is_exprlist (exprs)
10066 tree exprs;
10067{
10068 if (exprs == NULL_TREE || TREE_PARMLIST (exprs))
10069 return 0;
10070
a9aedbc2 10071 if (toplevel_bindings_p ())
8d08fdba
MS
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'. */
e92cc029 10090
8d08fdba
MS
10091static void
10092require_complete_types_for_parms (parms)
10093 tree parms;
10094{
5566b478
MS
10095 if (processing_template_decl)
10096 return;
10097
8d08fdba
MS
10098 while (parms)
10099 {
10100 tree type = TREE_TYPE (parms);
5566b478 10101 if (TYPE_SIZE (complete_type (type)) == NULL_TREE)
8d08fdba
MS
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
10174static tree
10175grokparms (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;
5566b478 10199 int any_init = 0, any_error = 0;
8d08fdba
MS
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 {
a703fb38 10208 tree type = NULL_TREE, list_node = parm;
8d08fdba
MS
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)
fc378698 10218 cp_error ("invalid string constant `%E'", decl);
8d08fdba
MS
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 {
8d08fdba
MS
10226 decl = grokdeclarator (TREE_VALUE (decl),
10227 TREE_PURPOSE (decl),
f30432d7 10228 PARM, init != NULL_TREE,
c11b6f21 10229 NULL_TREE);
8d08fdba
MS
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))
fc378698 10238 /* Cannot use the decl here because
8d08fdba 10239 we don't have DECL_CONTEXT set up yet. */
fc378698
MS
10240 cp_error ("parameter `%D' invalidly declared method type",
10241 DECL_NAME (decl));
8d08fdba
MS
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))
fc378698
MS
10250 cp_error ("parameter `%D' invalidly declared offset type",
10251 DECL_NAME (decl));
8d08fdba
MS
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 }
8d08fdba
MS
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;
5156628f 10306 else if (processing_template_decl)
5566b478 10307 ;
42976354
BK
10308 /* Unparsed default arg from in-class decl. */
10309 else if (TREE_CODE (init) == DEFAULT_ARG)
10310 ;
b7484fbe
MS
10311 else if (TREE_CODE (init) == VAR_DECL
10312 || TREE_CODE (init) == PARM_DECL)
8d08fdba
MS
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
e92cc029 10320 wrong. */
8d08fdba
MS
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);
5156628f 10329 if (! processing_template_decl
42976354 10330 && TREE_CODE (init) != DEFAULT_ARG
c11b6f21 10331 && ! can_convert_arg (type, TREE_TYPE (init), init))
c73964b2
MS
10332 cp_pedwarn ("invalid type `%T' for default argument to `%#D'",
10333 TREE_TYPE (init), decl);
8d08fdba
MS
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 }
66f2e88d 10349 if (! current_function_decl && TREE_PERMANENT (list_node))
8d08fdba
MS
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}
42976354
BK
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
10390void
10391replace_defarg (arg, init)
10392 tree arg, init;
10393{
aa5f3bad 10394 if (! processing_template_decl
42976354
BK
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}
8d08fdba 10400\f
c11b6f21
MS
10401int
10402copy_args_p (d)
10403 tree d;
10404{
10405 tree t = FUNCTION_ARG_CHAIN (d);
67437d5b
JM
10406 if (DECL_CONSTRUCTOR_P (d)
10407 && TYPE_USES_VIRTUAL_BASECLASSES (DECL_CONTEXT (d)))
10408 t = TREE_CHAIN (t);
c11b6f21
MS
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
8d08fdba
MS
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. */
e92cc029 10426
a0a33927 10427int
8d08fdba
MS
10428grok_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)
a0a33927 10464 {
f7da6097 10465 cp_error ("invalid constructor; you probably meant `%T (const %T&)'",
a0a33927
MS
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;
8d08fdba
MS
10473 }
10474 else if (TREE_CODE (parmtype) == VOID_TYPE
10475 || TREE_PURPOSE (parmtypes) != NULL_TREE)
10476 TYPE_HAS_DEFAULT_CONSTRUCTOR (ctype) = 1;
a0a33927
MS
10477
10478 return 1;
8d08fdba
MS
10479}
10480
10481/* An operator with this name can be either unary or binary. */
e92cc029 10482
a28e3c7f
MS
10483static int
10484ambi_op_p (name)
8d08fdba
MS
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. */
e92cc029 10496
a28e3c7f
MS
10497static int
10498unary_op_p (name)
8d08fdba
MS
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. */
e92cc029 10508
5566b478 10509void
8d08fdba
MS
10510grok_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);
8d08fdba 10517
a28e3c7f
MS
10518 if (current_class_type == NULL_TREE)
10519 friendp = 1;
8d08fdba 10520
a28e3c7f
MS
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])
8d08fdba 10544 {
8d08fdba
MS
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. */
a28e3c7f 10547 if (methodp)
700f8a87 10548 revert_static_member_fn (&decl, NULL, NULL);
8d08fdba
MS
10549
10550 /* Take care of function decl if we had syntax errors. */
10551 if (argtypes == NULL_TREE)
beb53fb8
JM
10552 TREE_TYPE (decl)
10553 = build_function_type (ptr_type_node,
10554 hash_tree_chain (integer_type_node,
10555 void_list_node));
8d08fdba 10556 else
a28e3c7f 10557 TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
8d08fdba 10558 }
a28e3c7f
MS
10559 else if (name == ansi_opname[(int) DELETE_EXPR]
10560 || name == ansi_opname[(int) VEC_DELETE_EXPR])
8d08fdba 10561 {
a28e3c7f 10562 if (methodp)
700f8a87 10563 revert_static_member_fn (&decl, NULL, NULL);
8d08fdba
MS
10564
10565 if (argtypes == NULL_TREE)
beb53fb8
JM
10566 TREE_TYPE (decl)
10567 = build_function_type (void_type_node,
10568 hash_tree_chain (ptr_type_node,
10569 void_list_node));
8d08fdba 10570 else
a28e3c7f
MS
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 }
8d08fdba 10579 }
8d08fdba
MS
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 */
700f8a87 10585 if (! methodp || DECL_STATIC_FUNCTION_P (decl))
8d08fdba
MS
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
700f8a87
MS
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
8d08fdba
MS
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
73b0fce8
KL
10610 || TREE_CODE (arg) == TEMPLATE_TYPE_PARM
10611 || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
8d08fdba
MS
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
9a3b49ac 10626 if (IDENTIFIER_TYPENAME_P (name) && ! DECL_TEMPLATE_INFO (decl))
a0a33927
MS
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";
9a3b49ac 10640 /* Don't force t to be complete here. */
a0a33927 10641 else if (IS_AGGR_TYPE (t)
9a3b49ac 10642 && TYPE_SIZE (t)
a0a33927
MS
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
8d08fdba
MS
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
f0e01782 10663 if (copy_assignment_arg_p (parmtype, virtualp)
a28e3c7f 10664 && ! friendp)
8d08fdba
MS
10665 {
10666 TYPE_HAS_ASSIGN_REF (current_class_type) = 1;
f0e01782
MS
10667 if (TREE_CODE (parmtype) != REFERENCE_TYPE
10668 || TYPE_READONLY (TREE_TYPE (parmtype)))
8d08fdba
MS
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])
5156628f 10687 && ! processing_template_decl
8d08fdba
MS
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 }
824b9a4c
MS
10706
10707 /* More Effective C++ rule 6. */
eb448459 10708 if (warn_ecpp
824b9a4c
MS
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 }
8d08fdba
MS
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 }
824b9a4c
MS
10751
10752 /* More Effective C++ rule 7. */
eb448459 10753 if (warn_ecpp
824b9a4c
MS
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. */
eb448459 10762 if (warn_ecpp
824b9a4c
MS
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);
8d08fdba
MS
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
8d08fdba
MS
10799tree
10800xref_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;
8d08fdba
MS
10808 register tree ref, t;
10809 struct binding_level *b = inner_binding_level;
a80e4195 10810 int got_type = 0;
8d08fdba
MS
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:
8d08fdba
MS
10817 case signature_type:
10818 code = RECORD_TYPE;
8d08fdba
MS
10819 break;
10820 case union_type:
10821 code = UNION_TYPE;
8d08fdba
MS
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. */
be99da77
MS
10832 if (TREE_CODE_CLASS (TREE_CODE (name)) == 't')
10833 {
10834 t = name;
a80e4195
MS
10835 name = TYPE_IDENTIFIER (t);
10836 got_type = 1;
be99da77
MS
10837 }
10838 else
10839 t = IDENTIFIER_TYPE_VALUE (name);
73b0fce8
KL
10840 if (t && TREE_CODE (t) != code && TREE_CODE (t) != TEMPLATE_TYPE_PARM
10841 && TREE_CODE (t) != TEMPLATE_TEMPLATE_PARM)
a0a33927
MS
10842 t = NULL_TREE;
10843
8ccc31eb 10844 if (! globalize)
8d08fdba 10845 {
73b0fce8
KL
10846 if (pedantic && t && (TREE_CODE (t) == TEMPLATE_TYPE_PARM
10847 || TREE_CODE (t) == TEMPLATE_TEMPLATE_PARM))
ec255269
MS
10848 {
10849 cp_pedwarn ("redeclaration of template type-parameter `%T'", name);
10850 cp_pedwarn_at (" previously declared here", t);
10851 }
a80e4195 10852 if (t && TYPE_CONTEXT (t) && got_type)
8ccc31eb 10853 ref = t;
8d08fdba 10854 else
e92cc029
MS
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 }
8d08fdba
MS
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 {
fc378698
MS
10898 cp_error ("use of enum `%#D' without previous declaration", name);
10899
8d08fdba
MS
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);
8d08fdba 10917 }
8d08fdba
MS
10918 else
10919 {
8d08fdba 10920 struct binding_level *old_b = class_binding_level;
8d08fdba
MS
10921
10922 ref = make_lang_type (code);
10923
8d08fdba
MS
10924 if (tag_code == signature_type)
10925 {
10926 SET_SIGNATURE (ref);
f376e137
MS
10927 /* Since a signature type will be turned into the type
10928 of signature tables, it's not only an interface. */
8d08fdba 10929 CLASSTYPE_INTERFACE_ONLY (ref) = 0;
f376e137
MS
10930 SET_CLASSTYPE_INTERFACE_KNOWN (ref);
10931 /* A signature doesn't have a vtable. */
00595019 10932 CLASSTYPE_VTABLE_NEEDS_WRITING (ref) = 0;
8d08fdba
MS
10933 }
10934
8d08fdba
MS
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;
8d08fdba
MS
10941 }
10942 }
10943 else
10944 {
8d08fdba
MS
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);
8d08fdba
MS
10950 }
10951
10952 if (binfo)
8ccc31eb 10953 xref_basetypes (code_type_node, name, ref, binfo);
8d08fdba 10954
8d08fdba
MS
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}
8ccc31eb 10972
fc378698
MS
10973tree
10974xref_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
8ccc31eb
MS
10992void
10993xref_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
be99da77
MS
11020 = (TREE_PURPOSE (binfo) == access_public_node
11021 || TREE_PURPOSE (binfo) == access_public_virtual_node
8ccc31eb 11022 || (tag_code != class_type
be99da77
MS
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;
8ccc31eb 11026 int via_virtual
be99da77
MS
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);
8ccc31eb
MS
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);
5566b478
MS
11039 if (!basetype
11040 || (TREE_CODE (basetype) != RECORD_TYPE
a80e4195 11041 && TREE_CODE (basetype) != TYPENAME_TYPE
73b0fce8
KL
11042 && TREE_CODE (basetype) != TEMPLATE_TYPE_PARM
11043 && TREE_CODE (basetype) != TEMPLATE_TEMPLATE_PARM))
8ccc31eb
MS
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. */
75650646
MM
11051 else if (! (current_template_parms && uses_template_parms (basetype))
11052 && TYPE_SIZE (complete_type (basetype)) == NULL_TREE)
8ccc31eb
MS
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);
9e9ff709 11088
8ccc31eb
MS
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
8d08fdba 11125\f
b3d5a58b 11126tree current_local_enum = NULL_TREE;
8d08fdba
MS
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
11134tree
11135start_enum (name)
11136 tree name;
11137{
11138 register tree enumtype = NULL_TREE;
11139 struct binding_level *b = inner_binding_level;
11140
b87692e5
MS
11141 if (processing_template_decl && current_function_decl)
11142 end_temporary_allocation ();
11143
8d08fdba
MS
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)
c91a56d2 11152 cp_error ("multiple definition of `%#T'", enumtype);
8d08fdba
MS
11153 else
11154 {
11155 enumtype = make_node (ENUMERAL_TYPE);
11156 pushtag (name, enumtype, 0);
11157 }
11158
c91a56d2
MS
11159 if (b->pseudo_global)
11160 cp_error ("template declaration of `%#T'", enumtype);
11161
8d08fdba
MS
11162 if (current_class_type)
11163 TREE_ADDRESSABLE (b->tags) = 1;
c91a56d2 11164
8d08fdba
MS
11165 current_local_enum = NULL_TREE;
11166
e92cc029
MS
11167 /* We don't copy this value because build_enumerator needs to do it. */
11168 enum_next_value = integer_zero_node;
7177d104 11169 enum_overflow = 0;
8d08fdba
MS
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
11180tree
11181finish_enum (enumtype, values)
11182 register tree enumtype, values;
11183{
a703fb38 11184 register tree minnode = NULL_TREE, maxnode = NULL_TREE;
8d08fdba
MS
11185 /* Calculate the maximum value of any enumerator in this type. */
11186
11187 if (values)
11188 {
f376e137
MS
11189 register tree pair;
11190 register tree value = DECL_INITIAL (TREE_VALUE (values));
5566b478 11191
5156628f 11192 if (! processing_template_decl)
5566b478
MS
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 }
f376e137 11199 TREE_VALUE (values) = value;
8d08fdba
MS
11200
11201 for (pair = TREE_CHAIN (values); pair; pair = TREE_CHAIN (pair))
11202 {
f376e137 11203 value = DECL_INITIAL (TREE_VALUE (pair));
5156628f 11204 if (! processing_template_decl)
5566b478
MS
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 }
f376e137 11213 TREE_VALUE (pair) = value;
8d08fdba
MS
11214 }
11215 }
f376e137
MS
11216 else
11217 maxnode = minnode = integer_zero_node;
8d08fdba 11218
de22184b 11219 TYPE_VALUES (enumtype) = nreverse (values);
2986ae00 11220
5156628f 11221 if (processing_template_decl)
b87692e5
MS
11222 {
11223 if (current_function_decl)
11224 {
11225 add_tree (build_min (TAG_DEFN, enumtype));
11226 resume_temporary_allocation ();
11227 }
11228 return enumtype;
11229 }
5566b478 11230
f376e137
MS
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);
8d08fdba 11236
6060a796 11237 TYPE_SIZE (enumtype) = NULL_TREE;
13fbb038 11238
8ccc31eb 11239 /* Set TYPE_MIN_VALUE and TYPE_MAX_VALUE according to `precision'. */
8d08fdba 11240
f376e137 11241 TYPE_PRECISION (enumtype) = precision;
f376e137 11242 if (unsignedp)
8d08fdba 11243 fixup_unsigned_type (enumtype);
f376e137
MS
11244 else
11245 fixup_signed_type (enumtype);
8ccc31eb 11246
5566b478 11247 if (flag_short_enums || (precision > TYPE_PRECISION (integer_type_node)))
8ccc31eb
MS
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);
f376e137 11256 }
8d08fdba 11257
f376e137
MS
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 }
8d08fdba
MS
11275
11276 /* Finish debugging output for this type. */
d2e5ee5c 11277 rest_of_type_compilation (enumtype, global_bindings_p ());
8d08fdba
MS
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
11287tree
11288build_enumerator (name, value)
11289 tree name, value;
11290{
11291 tree decl, result;
8d08fdba
MS
11292
11293 /* Remove no-op casts from the value. */
11294 if (value)
11295 STRIP_TYPE_NOPS (value);
11296
5156628f 11297 if (! processing_template_decl)
5566b478
MS
11298 {
11299 /* Validate and default VALUE. */
11300 if (value != NULL_TREE)
11301 {
11302 if (TREE_READONLY_DECL_P (value))
e92cc029 11303 value = decl_constant_value (value);
5566b478
MS
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
5566b478 11317 /* Default based on previous value. */
5156628f 11318 if (value == NULL_TREE && ! processing_template_decl)
5566b478
MS
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
e92cc029
MS
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);
013bc8af
MS
11332#if 0
11333 /* To fix MAX_VAL enum consts. (bkoz) */
e92cc029 11334 TREE_TYPE (value) = integer_type_node;
013bc8af 11335#endif
5566b478 11336 }
8d08fdba 11337
8d08fdba
MS
11338 /* C++ associates enums with global, function, or class declarations. */
11339
7177d104
MS
11340 decl = current_scope ();
11341 if (decl && decl == current_class_type)
8d08fdba
MS
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;
42976354 11358 TREE_READONLY (decl) = 1;
8d08fdba
MS
11359
11360 pushdecl (decl);
11361 GNU_xref_decl (current_function_decl, decl);
11362 }
11363
5156628f 11364 if (! processing_template_decl)
5566b478
MS
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);
5566b478 11370 }
8d08fdba 11371
8d2733ca 11372 result = saveable_tree_cons (name, decl, NULL_TREE);
8d08fdba
MS
11373 return result;
11374}
11375
11376tree
86052cc3
JM
11377grok_enum_decls (decl)
11378 tree decl;
8d08fdba
MS
11379{
11380 tree d = current_local_enum;
11381
11382 if (d == NULL_TREE)
11383 return decl;
11384
11385 while (1)
11386 {
8d08fdba
MS
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
5566b478
MS
11401static int function_depth;
11402
8d08fdba
MS
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
11424int
c11b6f21
MS
11425start_function (declspecs, declarator, attrs, pre_parsed_p)
11426 tree declspecs, declarator, attrs;
8d08fdba
MS
11427 int pre_parsed_p;
11428{
5566b478 11429 tree decl1;
8d08fdba
MS
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
8d08fdba
MS
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
e92cc029 11441 /* Assume, until we see it does. */
8d08fdba
MS
11442 current_function_returns_value = 0;
11443 current_function_returns_null = 0;
11444 warn_about_return_type = 0;
fd378c9d
JM
11445 named_labels = 0;
11446 shadowed_labels = 0;
8d08fdba
MS
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;
a9aedbc2 11451 base_init_expr = NULL_TREE;
79ff2c6c
MS
11452 current_base_init_list = NULL_TREE;
11453 current_member_init_list = NULL_TREE;
f30432d7 11454 ctor_label = dtor_label = NULL_TREE;
42976354 11455 static_labelno = 0;
8d08fdba
MS
11456
11457 clear_temp_name ();
11458
e92cc029 11459 /* This should only be done once on the top most decl. */
8d08fdba
MS
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)
d2e5ee5c
MS
11473 && TYPE_IDENTIFIER (DECL_CONTEXT (decl1))
11474 && IDENTIFIER_TEMPLATE (TYPE_IDENTIFIER (DECL_CONTEXT (decl1))))
8d08fdba
MS
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
8d08fdba
MS
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
8d08fdba 11503 /* In a fcn definition, arg types must be complete. */
5566b478 11504 require_complete_types_for_parms (DECL_ARGUMENTS (decl1));
9fffd093
RK
11505
11506 /* In case some arg types were completed since the declaration was
11507 parsed, fix up the decls. */
11508 {
5566b478 11509 tree t = DECL_ARGUMENTS (decl1);
9fffd093
RK
11510 for (; t; t = TREE_CHAIN (t))
11511 layout_decl (t, 0);
11512 }
5566b478
MS
11513
11514 last_function_parms = DECL_ARGUMENTS (decl1);
11515 last_function_parm_tags = NULL_TREE;
8d08fdba
MS
11516 }
11517 else
11518 {
c11b6f21 11519 decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, NULL_TREE);
8d08fdba
MS
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);
e66d884e 11531 shadow_tag (build_expr_list (NULL_TREE, restype));
8d08fdba
MS
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 {
a28e3c7f 11552 if (pedantic || warn_return_type)
5566b478 11553 pedwarn ("return type for `main' changed to `int'");
8d08fdba
MS
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;
5566b478
MS
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;
8d08fdba 11571
9e9ff709 11572 announce_function (decl1);
8d08fdba 11573
5156628f 11574 if (! processing_template_decl)
8d08fdba 11575 {
5566b478
MS
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));
8d08fdba 11580
5566b478
MS
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 }
b7484fbe 11604
8d08fdba 11605 if (warn_about_return_type)
59f1f2c4 11606 pedwarn ("return-type defaults to `int'");
8d08fdba 11607
824b9a4c 11608 /* Effective C++ rule 15. See also c_expand_return. */
eb448459 11609 if (warn_ecpp
824b9a4c
MS
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
8d08fdba
MS
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
8d08fdba
MS
11618 /* This function exists in static storage.
11619 (This does not mean `static' in the C sense!) */
11620 TREE_STATIC (decl1) = 1;
11621
878cd289
MS
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
5156628f 11626 if (processing_template_decl)
5566b478
MS
11627 push_template_decl (decl1);
11628 else if (pre_parsed_p == 0)
878cd289 11629 {
75650646
MM
11630 /* A specialization is not used to guide overload resolution. */
11631 if (flag_guiding_decls
11632 || !DECL_TEMPLATE_SPECIALIZATION (decl1))
11633 decl1 = pushdecl (decl1);
878cd289
MS
11634 DECL_MAIN_VARIANT (decl1) = decl1;
11635 fntype = TREE_TYPE (decl1);
11636 }
5566b478
MS
11637
11638 current_function_decl = decl1;
878cd289 11639
db5ae43f 11640 if (DECL_INTERFACE_KNOWN (decl1))
faae18ab 11641 {
86052cc3
JM
11642 tree ctx = hack_decl_function_context (decl1);
11643
faae18ab
MS
11644 if (DECL_NOT_REALLY_EXTERN (decl1))
11645 DECL_EXTERNAL (decl1) = 0;
86052cc3
JM
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);
faae18ab 11652 }
8d08fdba
MS
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. */
5566b478
MS
11656 else if (interface_unknown == 0
11657 && (! DECL_TEMPLATE_INSTANTIATION (decl1)
d11ad92e 11658 || flag_alt_external_templates))
8d08fdba 11659 {
5566b478 11660 if (DECL_THIS_INLINE (decl1) || DECL_TEMPLATE_INSTANTIATION (decl1)
5156628f 11661 || processing_template_decl)
db5ae43f
MS
11662 DECL_EXTERNAL (decl1)
11663 = (interface_only
faae18ab 11664 || (DECL_THIS_INLINE (decl1) && ! flag_implement_inlines));
db5ae43f 11665 else
893de33c 11666 DECL_EXTERNAL (decl1) = 0;
e8abc66f 11667 DECL_NOT_REALLY_EXTERN (decl1) = 0;
db5ae43f 11668 DECL_INTERFACE_KNOWN (decl1) = 1;
8d08fdba
MS
11669 }
11670 else
a0a33927
MS
11671 {
11672 /* This is a definition, not a reference.
b7484fbe
MS
11673 So clear DECL_EXTERNAL. */
11674 DECL_EXTERNAL (decl1) = 0;
faae18ab 11675
5566b478
MS
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. */
e76a2646 11679 && ! hack_decl_function_context (decl1))
878cd289
MS
11680 DECL_DEFER_OUTPUT (decl1) = 1;
11681 else
893de33c 11682 DECL_INTERFACE_KNOWN (decl1) = 1;
db5ae43f 11683 }
a9aedbc2 11684
8d08fdba
MS
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)));
5566b478
MS
11691 current_function_parms = TREE_CHAIN (current_function_parms);
11692 DECL_ARGUMENTS (decl1) = current_function_parms;
8d08fdba
MS
11693 ctype = NULL_TREE;
11694 }
11695 restype = TREE_TYPE (fntype);
11696
8d08fdba
MS
11697 if (ctype)
11698 {
11699 push_nested_class (ctype, 1);
11700
11701 /* If we're compiling a friend function, neither of the variables
4ac14744 11702 current_class_ptr nor current_class_type will have values. */
8d08fdba
MS
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'
4ac14744 11709 and `current_class_ptr'. */
5566b478 11710 tree t = current_function_parms;
5f34005f
RK
11711
11712 my_friendly_assert (t != NULL_TREE
11713 && TREE_CODE (t) == PARM_DECL, 162);
11714
dff6b454
RK
11715 if (TREE_CODE (TREE_TYPE (t)) == POINTER_TYPE)
11716 {
11717 int i = suspend_momentary ();
11718
11719 /* Fool build_indirect_ref. */
4ac14744
MS
11720 current_class_ptr = NULL_TREE;
11721 current_class_ref = build_indirect_ref (t, NULL_PTR);
11722 current_class_ptr = t;
dff6b454
RK
11723 resume_momentary (i);
11724 }
11725 else
11726 /* We're having a signature pointer here. */
4ac14744 11727 current_class_ref = current_class_ptr = t;
dff6b454 11728
8d08fdba
MS
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);
4ac14744 11737 current_class_ptr = current_class_ref = NULL_TREE;
8d08fdba
MS
11738 }
11739
db5ae43f
MS
11740 pushlevel (0);
11741 current_binding_level->parm_flag = 1;
11742
db5ae43f
MS
11743 GNU_xref_function (decl1, current_function_parms);
11744
f30432d7
MS
11745 if (attrs)
11746 cplus_decl_attributes (decl1, NULL_TREE, attrs);
db5ae43f
MS
11747 make_function_rtl (decl1);
11748
8d08fdba
MS
11749 /* Promote the value to int before returning it. */
11750 if (C_PROMOTING_INTEGER_TYPE_P (restype))
5566b478
MS
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
8d08fdba 11758 if (DECL_RESULT (decl1) == NULL_TREE)
f30432d7
MS
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 }
8d08fdba 11765
5566b478
MS
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
5156628f 11770 if (processing_template_decl)
5566b478 11771 {
5566b478
MS
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
f30432d7
MS
11779 if (DESTRUCTOR_NAME_P (DECL_ASSEMBLER_NAME (decl1))
11780 && DECL_LANGUAGE (decl1) == lang_cplusplus)
8d08fdba
MS
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
8d08fdba
MS
11792 return 1;
11793}
11794\f
9664b89e
JM
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. */
6467930b
MS
11798
11799void
11800expand_start_early_try_stmts ()
11801{
6467930b 11802 expand_start_try_stmts ();
9664b89e 11803 last_parm_cleanup_insn = get_last_insn ();
f30432d7
MS
11804}
11805
8d08fdba
MS
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
11812void
11813store_parm_decls ()
11814{
11815 register tree fndecl = current_function_decl;
11816 register tree parm;
11817 int parms_have_cleanups = 0;
eb66be0e 11818 tree cleanups = NULL_TREE;
8d08fdba
MS
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
a9aedbc2 11831 if (toplevel_bindings_p ())
8d08fdba
MS
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
8d08fdba
MS
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);
5566b478 11855
8d08fdba
MS
11856 for (parm = nreverse (specparms); parm; parm = next)
11857 {
11858 next = TREE_CHAIN (parm);
11859 if (TREE_CODE (parm) == PARM_DECL)
11860 {
5566b478 11861 tree cleanup;
8d08fdba
MS
11862 if (DECL_NAME (parm) == NULL_TREE)
11863 {
8d08fdba 11864 pushdecl (parm);
8d08fdba
MS
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 }
5156628f 11889 if (! processing_template_decl
5566b478 11890 && (cleanup = maybe_build_cleanup (parm), cleanup))
8d08fdba
MS
11891 {
11892 expand_decl (parm);
8d08fdba 11893 parms_have_cleanups = 1;
eb66be0e
MS
11894
11895 /* Keep track of the cleanups. */
11896 cleanups = tree_cons (parm, cleanup, cleanups);
8d08fdba
MS
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;
5156628f 11927 if (! processing_template_decl)
5566b478 11928 expand_function_start (fndecl, parms_have_cleanups);
8d08fdba 11929
eb448459
MS
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
eb66be0e
MS
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. */
eb448459 11945 if (cleanups
eb66be0e
MS
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
8d08fdba
MS
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
5156628f 11965 if (! processing_template_decl && flag_exceptions)
f30432d7 11966 {
f30432d7
MS
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 ();
f30432d7 11970 }
eb448459 11971
5c825fc2 11972 last_parm_cleanup_insn = get_last_insn ();
72b7eeff 11973 last_dtor_insn = get_last_insn ();
8d08fdba
MS
11974}
11975
11976/* Bind a name and initialization to the return value of
11977 the current function. */
e92cc029 11978
8d08fdba
MS
11979void
11980store_return_init (return_id, init)
11981 tree return_id, init;
11982{
11983 tree decl = DECL_RESULT (current_function_decl);
11984
e1cd6e56 11985 if (pedantic)
8d08fdba
MS
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. */
8926095f 11989 pedwarn ("ANSI C++ does not permit named return values");
8d08fdba
MS
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
e76a2646 11999 cp_error ("return identifier `%D' already in place", decl);
8d08fdba
MS
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
82580166 12020 /* Let `cp_finish_decl' know that this initializer is ok. */
8d08fdba
MS
12021 DECL_INITIAL (decl) = init;
12022 pushdecl (decl);
e76a2646
MS
12023
12024 if (minimal_parse_mode)
12025 add_tree (build_min_nt (RETURN_INIT, return_id,
12026 copy_to_permanent (init)));
12027 else
dae1d6f6 12028 cp_finish_decl (decl, init, NULL_TREE, 0, 0);
8d08fdba
MS
12029 }
12030}
12031
8d08fdba
MS
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
e92cc029
MS
12043 constructors.
12044
12045 NESTED is nonzero if we were in the middle of compiling another function
12046 when we started on this one. */
8d08fdba
MS
12047
12048void
db5ae43f 12049finish_function (lineno, call_poplevel, nested)
8d08fdba
MS
12050 int lineno;
12051 int call_poplevel;
db5ae43f 12052 int nested;
8d08fdba
MS
12053{
12054 register tree fndecl = current_function_decl;
12055 tree fntype, ctype = NULL_TREE;
f30432d7 12056 rtx last_parm_insn, insns;
8d08fdba
MS
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
e92cc029
MS
12066 if (! nested && function_depth > 1)
12067 nested = 1;
12068
8d08fdba
MS
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
5156628f 12082 if (processing_template_decl)
8d08fdba 12083 {
5566b478
MS
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*/)
8d08fdba 12094 {
5566b478
MS
12095 tree ttype = target_type (fntype);
12096 tree parmdecl;
12097
8d08fdba
MS
12098 if (IS_AGGR_TYPE (ttype))
12099 /* Let debugger know it should output info for this type. */
12100 note_debug_info_needed (ttype);
5566b478
MS
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 }
8d08fdba 12109 }
8d08fdba 12110
5566b478
MS
12111 /* Clean house because we will need to reorder insns here. */
12112 do_pending_stack_adjust ();
8d08fdba 12113
5566b478 12114 if (dtor_label)
8d08fdba 12115 {
5566b478
MS
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;
8d08fdba 12123
5566b478
MS
12124 if (current_function_assigns_this)
12125 cond = build (NE_EXPR, boolean_type_node,
4ac14744 12126 current_class_ptr, integer_zero_node);
5566b478
MS
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 }
8d08fdba 12141
5566b478
MS
12142 /* These initializations might go inline. Protect
12143 the binding level of the parms. */
12144 pushlevel (0);
12145 expand_start_bindings (0);
8d08fdba 12146
5566b478
MS
12147 if (current_function_assigns_this)
12148 {
12149 current_function_assigns_this = 0;
12150 current_function_just_assigned_this = 0;
12151 }
8d08fdba 12152
5566b478
MS
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. */
8d08fdba 12157
5566b478
MS
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;
8d08fdba 12161
5566b478
MS
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))
4ac14744 12165 exprstmt = build_delete (current_class_type, current_class_ref, integer_zero_node,
e92cc029 12166 LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR|LOOKUP_NORMAL, 0);
5566b478 12167 else
4ac14744 12168 exprstmt = build_delete (current_class_type, current_class_ref, in_charge_node,
e92cc029 12169 LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR|LOOKUP_NORMAL, 0);
5566b478
MS
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)))
8d08fdba 12181 {
5566b478
MS
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))
8d08fdba 12192 {
5566b478
MS
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)
8d08fdba 12197 {
5566b478
MS
12198 if (TYPE_NEEDS_DESTRUCTOR (BINFO_TYPE (vbases)))
12199 {
bd6dd845
MS
12200 tree vb = get_vbase
12201 (BINFO_TYPE (vbases),
12202 TYPE_BINFO (current_class_type));
e92cc029 12203 expand_expr_stmt
bd6dd845
MS
12204 (build_scoped_method_call
12205 (current_class_ref, vb, dtor_identifier,
e66d884e 12206 build_expr_list (NULL_TREE, integer_zero_node)));
5566b478
MS
12207 }
12208 vbases = TREE_CHAIN (vbases);
8d08fdba 12209 }
5566b478 12210 expand_end_cond ();
8d08fdba 12211 }
5566b478
MS
12212
12213 do_pending_stack_adjust ();
12214 if (cond != integer_one_node)
12215 expand_end_cond ();
8d08fdba
MS
12216 }
12217
5566b478
MS
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. */
beb53fb8
JM
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],
e66d884e
JM
12231 expr_tree_cons (NULL_TREE, current_class_ptr,
12232 build_expr_list (NULL_TREE, virtual_size)),
beb53fb8 12233 NULL_TREE, LOOKUP_NORMAL);
5566b478 12234 else if (TYPE_USES_VIRTUAL_BASECLASSES (current_class_type))
4ac14744 12235 exprstmt = build_x_delete (ptr_type_node, current_class_ptr, 0,
5566b478
MS
12236 virtual_size);
12237 else
12238 exprstmt = NULL_TREE;
8d08fdba 12239
5566b478
MS
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 }
8d08fdba 12248
5566b478 12249 /* End of destructor. */
fc378698 12250 expand_end_bindings (NULL_TREE, getdecls () != NULL_TREE, 0);
5566b478
MS
12251 poplevel (2, 0, 0); /* XXX change to 1 */
12252
12253 /* Back to the top of destructor. */
956d6950 12254 /* Don't execute destructor code if `this' is NULL. */
5566b478
MS
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. */
4ac14744 12272 expand_direct_vtbls_init (binfo, binfo, 1, 0, current_class_ptr);
8d08fdba 12273
5566b478 12274 if (TYPE_USES_VIRTUAL_BASECLASSES (current_class_type))
4ac14744 12275 expand_indirect_vtbls_init (binfo, current_class_ref, current_class_ptr);
5566b478
MS
12276 }
12277
12278 if (! ok_to_optimize_dtor)
12279 {
12280 cond = build_binary_op (NE_EXPR,
4ac14744 12281 current_class_ptr, integer_zero_node, 1);
5566b478
MS
12282 expand_start_cond (cond, 0);
12283 }
8d08fdba 12284
5566b478
MS
12285 insns = get_insns ();
12286 end_sequence ();
f30432d7 12287
5566b478
MS
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);
8d08fdba 12293
5566b478 12294 emit_insns_after (insns, last_parm_insn);
72b7eeff 12295
5566b478
MS
12296 if (! ok_to_optimize_dtor)
12297 expand_end_cond ();
72b7eeff 12298 }
5566b478 12299 else if (current_function_assigns_this)
8d08fdba 12300 {
5566b478
MS
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 }
4ac14744 12317 c_expand_return (current_class_ptr);
5566b478
MS
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;
8d08fdba 12327 }
5566b478
MS
12328 else if (DECL_CONSTRUCTOR_P (fndecl))
12329 {
a703fb38 12330 tree cond = NULL_TREE, thenclause = NULL_TREE;
5566b478
MS
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;
f30432d7 12335
5566b478 12336 DECL_RETURNS_FIRST_ARG (fndecl) = 1;
f30432d7 12337
5566b478
MS
12338 if (flag_this_is_variable > 0)
12339 {
12340 cond = build_binary_op (EQ_EXPR,
4ac14744
MS
12341 current_class_ptr, integer_zero_node, 1);
12342 thenclause = build_modify_expr (current_class_ptr, NOP_EXPR,
5566b478
MS
12343 build_new (NULL_TREE, current_class_type, void_type_node, 0));
12344 }
f30432d7 12345
5566b478 12346 CLASSTYPE_ABSTRACT_VIRTUALS (current_class_type) = abstract_virtuals;
f30432d7 12347
5566b478
MS
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
b87692e5 12368 /* This is where the body of the constructor begins. */
5566b478 12369
b87692e5 12370 emit_insns_after (insns, last_parm_cleanup_insn);
8d08fdba 12371
b7484fbe 12372 end_protect_partials ();
5566b478
MS
12373
12374 /* This is where the body of the constructor ends. */
8d08fdba
MS
12375 expand_label (ctor_label);
12376 ctor_label = NULL_TREE;
12377
12378 if (call_poplevel)
12379 {
12380 decls = getdecls ();
8d08fdba 12381 expand_end_bindings (decls, decls != NULL_TREE, 0);
5566b478 12382 poplevel (decls != NULL_TREE, 1, 0);
8d08fdba 12383 }
8d08fdba 12384
4ac14744 12385 c_expand_return (current_class_ptr);
8d08fdba 12386
5566b478
MS
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)
8d08fdba 12393 {
5566b478
MS
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
8d08fdba 12400 }
5566b478
MS
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);
8d08fdba 12405
eb448459
MS
12406 if (flag_exceptions)
12407 expand_exception_blocks ();
12408
5566b478
MS
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)
8d08fdba 12427 {
5566b478
MS
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);
8d08fdba
MS
12433 }
12434
5566b478 12435 if (cleanup_label)
a9aedbc2 12436 {
5566b478
MS
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);
8d08fdba 12441
eb448459
MS
12442 /* Emit label at beginning of cleanup code for parameters. */
12443 emit_label (cleanup_label);
12444 }
b7484fbe 12445
5566b478
MS
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);
8d08fdba 12449
5566b478
MS
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)
8d08fdba 12455 {
5566b478
MS
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);
8d08fdba
MS
12460 }
12461
5566b478
MS
12462 /* Generate rtl for function exit. */
12463 expand_function_end (input_filename, lineno, 1);
8d08fdba 12464 }
8d2733ca 12465
8d08fdba
MS
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
db5ae43f
MS
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
8d08fdba 12486 /* Must mark the RESULT_DECL as being in this function. */
c73964b2 12487 DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
8d08fdba 12488
8d08fdba
MS
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
5156628f 12493 if (! processing_template_decl)
5566b478 12494 {
75650646
MM
12495 int saved_flag_keep_inline_functions =
12496 flag_keep_inline_functions;
12497
5566b478
MS
12498 /* So we can tell if jump_optimize sets it to 1. */
12499 can_reach_end = 0;
8d08fdba 12500
75650646 12501 if (DECL_CONTEXT (fndecl) != NULL_TREE
e1467ff2 12502 && hack_decl_function_context (fndecl))
75650646
MM
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
6633d636
MS
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);
8d08fdba 12529
75650646
MM
12530 flag_keep_inline_functions = saved_flag_keep_inline_functions;
12531
5566b478
MS
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 }
8926095f 12541
d2e5ee5c
MS
12542 if (ctype && TREE_ASM_WRITTEN (fndecl))
12543 note_debug_info_needed (ctype);
12544
5566b478 12545 current_function_returns_null |= can_reach_end;
8d08fdba 12546
5566b478
MS
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;
8d08fdba 12554
5566b478
MS
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. */
238109cd 12563 cp_warning ("control reaches end of non-void function `%D'", fndecl);
5566b478
MS
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");
8d08fdba 12570 }
5566b478
MS
12571
12572 --function_depth;
8d08fdba
MS
12573
12574 /* Free all the tree nodes making up this function. */
12575 /* Switch back to allocating nodes permanently
12576 until we start another function. */
5156628f 12577 if (processing_template_decl)
5566b478
MS
12578 {
12579 --minimal_parse_mode;
12580 DECL_SAVED_TREE (fndecl) = TREE_CHAIN (DECL_SAVED_TREE (fndecl));
12581 }
12582
db5ae43f
MS
12583 if (! nested)
12584 permanent_allocation (1);
8d08fdba 12585
8d08fdba
MS
12586 if (DECL_SAVED_INSNS (fndecl) == NULL_RTX)
12587 {
d2e5ee5c
MS
12588 tree t;
12589
8d08fdba
MS
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;
d2e5ee5c 12594 for (t = DECL_ARGUMENTS (fndecl); t; t = TREE_CHAIN (t))
de22184b 12595 DECL_RTL (t) = DECL_INCOMING_RTL (t) = NULL_RTX;
8d08fdba
MS
12596 }
12597
e1cd6e56
MS
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
28cbf42c
MS
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
e349ee73 12611 named_label_uses = NULL;
4ac14744
MS
12612 current_class_ptr = NULL_TREE;
12613 current_class_ref = NULL_TREE;
8d08fdba
MS
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'. */
e92cc029 12638
8d08fdba 12639tree
c11b6f21
MS
12640start_method (declspecs, declarator)
12641 tree declarator, declspecs;
8d08fdba 12642{
c11b6f21 12643 tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
f30432d7 12644 NULL_TREE);
8d08fdba
MS
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))
824b9a4c 12659 IS_DEFAULT_IMPLEMENTATION (fndecl) = 1;
8d08fdba
MS
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
faae18ab
MS
12672 DECL_THIS_INLINE (fndecl) = 1;
12673
8926095f 12674 if (flag_default_inline)
8d08fdba
MS
12675 DECL_INLINE (fndecl) = 1;
12676
75650646 12677 if (processing_template_decl)
5566b478 12678 push_template_decl (fndecl);
a0a33927 12679
8d08fdba
MS
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))
a0a33927
MS
12703 {
12704 if (! grok_ctor_properties (current_class_type, fndecl))
12705 return void_type_node;
12706 }
8d08fdba
MS
12707 else if (IDENTIFIER_OPNAME_P (DECL_NAME (fndecl)))
12708 grok_op_properties (fndecl, DECL_VIRTUAL_P (fndecl), 0);
12709 }
12710
82580166 12711 cp_finish_decl (fndecl, NULL_TREE, NULL_TREE, 0, 0);
8d08fdba
MS
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
12733tree
12734finish_method (decl)
12735 tree decl;
12736{
12737 register tree fndecl = decl;
12738 tree old_initial;
8d08fdba
MS
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,
5566b478 12780 current_binding_level->keep);
8d08fdba
MS
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
12803void
12804hack_incomplete_structures (type)
12805 tree type;
12806{
f30432d7 12807 tree *list;
8d08fdba 12808
f30432d7 12809 if (current_binding_level->incomplete == NULL_TREE)
8d08fdba
MS
12810 return;
12811
12812 if (!type) /* Don't do this for class templates. */
12813 return;
12814
f30432d7
MS
12815 for (list = &current_binding_level->incomplete; *list; )
12816 {
12817 tree decl = TREE_VALUE (*list);
a703fb38 12818 if ((decl && TREE_TYPE (decl) == type)
f30432d7
MS
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);
e349ee73 12835 if (! expand_decl_cleanup (decl, cleanup))
f30432d7
MS
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 }
8d08fdba
MS
12844}
12845
8d08fdba 12846/* If DECL is of a type which needs a cleanup, build that cleanup here.
c73964b2 12847 See build_delete for information about AUTO_DELETE.
8d08fdba
MS
12848
12849 Don't build these on the momentary obstack; they must live
12850 the life of the binding contour. */
e92cc029 12851
c73964b2
MS
12852static tree
12853maybe_build_cleanup_1 (decl, auto_delete)
12854 tree decl, auto_delete;
8d08fdba
MS
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;
8d08fdba
MS
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
c73964b2 12878 rval = build_delete (TREE_TYPE (rval), rval, auto_delete, flags, 0);
8d08fdba
MS
12879
12880 if (TYPE_USES_VIRTUAL_BASECLASSES (type)
12881 && ! TYPE_HAS_DESTRUCTOR (type))
e66d884e
JM
12882 rval = build_compound_expr (expr_tree_cons (NULL_TREE, rval,
12883 build_expr_list (NULL_TREE, build_vbase_delete (type, decl))));
8d08fdba 12884
8d08fdba
MS
12885 if (TREE_CODE (decl) != PARM_DECL)
12886 resume_momentary (temp);
12887
8d08fdba
MS
12888 return rval;
12889 }
12890 return 0;
12891}
c73964b2
MS
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
12896tree
12897maybe_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
12906tree
12907maybe_build_cleanup (decl)
12908 tree decl;
12909{
12910 return maybe_build_cleanup_1 (decl, integer_two_node);
12911}
8d08fdba
MS
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
e92cc029 12919 &class::bar; / / takes its address, but does nothing with it. */
8d08fdba 12920
8d08fdba
MS
12921void
12922cplus_expand_expr_stmt (exp)
12923 tree exp;
12924{
5156628f 12925 if (processing_template_decl)
5566b478
MS
12926 {
12927 add_tree (build_min_nt (EXPR_STMT, exp));
12928 return;
12929 }
12930
eb66be0e
MS
12931 /* Arrange for all temps to disappear. */
12932 expand_start_target_temps ();
12933
8d08fdba
MS
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 {
8d08fdba
MS
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 }
8d08fdba 12948
63c68bb7
MS
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. */
5b605f68 12952 exp = build1 (CLEANUP_POINT_EXPR, TREE_TYPE (exp), exp);
63c68bb7 12953#endif
d2e5ee5c
MS
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));
8d08fdba
MS
12959 }
12960
12961 /* Clean up any pending cleanups. This happens when a function call
12962 returns a cleanup-needing value that nobody uses. */
eb66be0e 12963 expand_end_target_temps ();
8d08fdba
MS
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
12972void
12973finish_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;
a9aedbc2 12987 expand_expr_stmt (base_init_expr);
8d08fdba
MS
12988 check_base_init (current_class_type);
12989 }
12990 current_function_assigns_this = 1;
8d08fdba
MS
12991}
12992
8d08fdba 12993/* Change a static member function definition into a FUNCTION_TYPE, instead
700f8a87
MS
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
bd6dd845 13000static void
700f8a87
MS
13001revert_static_member_fn (decl, fn, argtypes)
13002 tree *decl, *fn, *argtypes;
8d08fdba 13003{
700f8a87
MS
13004 tree tmp;
13005 tree function = fn ? *fn : TREE_TYPE (*decl);
13006 tree args = argtypes ? *argtypes : TYPE_ARG_TYPES (function);
8d08fdba 13007
f30432d7
MS
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
700f8a87
MS
13013 args = TREE_CHAIN (args);
13014 tmp = build_function_type (TREE_TYPE (function), args);
8d08fdba
MS
13015 tmp = build_type_variant (tmp, TYPE_READONLY (function),
13016 TYPE_VOLATILE (function));
f30432d7 13017 tmp = build_exception_variant (tmp,
8d08fdba
MS
13018 TYPE_RAISES_EXCEPTIONS (function));
13019 TREE_TYPE (*decl) = tmp;
f30432d7
MS
13020 if (DECL_ARGUMENTS (*decl))
13021 DECL_ARGUMENTS (*decl) = TREE_CHAIN (DECL_ARGUMENTS (*decl));
8d08fdba 13022 DECL_STATIC_FUNCTION_P (*decl) = 1;
700f8a87
MS
13023 if (fn)
13024 *fn = tmp;
13025 if (argtypes)
13026 *argtypes = args;
8d08fdba 13027}
a4443a08
MS
13028
13029int
13030id_in_current_class (id)
13031 tree id;
13032{
13033 return !!purpose_member (id, class_binding_level->class_shadowed);
13034}
db5ae43f
MS
13035
13036struct cp_function
13037{
13038 int returns_value;
13039 int returns_null;
13040 int warn_about_return_type;
db5ae43f
MS
13041 int assigns_this;
13042 int just_assigned_this;
13043 int parms_stored;
7215f9a0 13044 int temp_name_counter;
db5ae43f
MS
13045 tree named_labels;
13046 tree shadowed_labels;
13047 tree ctor_label;
13048 tree dtor_label;
72b7eeff 13049 rtx last_dtor_insn;
b87692e5 13050 rtx last_parm_cleanup_insn;
79ff2c6c
MS
13051 tree base_init_list;
13052 tree member_init_list;
a9aedbc2 13053 tree base_init_expr;
4ac14744
MS
13054 tree current_class_ptr;
13055 tree current_class_ref;
db5ae43f
MS
13056 rtx result_rtx;
13057 struct cp_function *next;
13058 struct binding_level *binding_level;
42976354 13059 int static_labelno;
db5ae43f
MS
13060};
13061
bd6dd845 13062static struct cp_function *cp_function_chain;
db5ae43f 13063
7215f9a0
MS
13064extern int temp_name_counter;
13065
db5ae43f
MS
13066/* Save and reinitialize the variables
13067 used during compilation of a C++ function. */
13068
13069void
28cbf42c
MS
13070push_cp_function_context (context)
13071 tree context;
db5ae43f
MS
13072{
13073 struct cp_function *p
13074 = (struct cp_function *) xmalloc (sizeof (struct cp_function));
13075
28cbf42c 13076 push_function_context_to (context);
db5ae43f
MS
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;
db5ae43f
MS
13086 p->binding_level = current_binding_level;
13087 p->ctor_label = ctor_label;
13088 p->dtor_label = dtor_label;
72b7eeff 13089 p->last_dtor_insn = last_dtor_insn;
b87692e5 13090 p->last_parm_cleanup_insn = last_parm_cleanup_insn;
db5ae43f
MS
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;
a9aedbc2 13095 p->base_init_expr = base_init_expr;
7215f9a0 13096 p->temp_name_counter = temp_name_counter;
79ff2c6c
MS
13097 p->base_init_list = current_base_init_list;
13098 p->member_init_list = current_member_init_list;
4ac14744
MS
13099 p->current_class_ptr = current_class_ptr;
13100 p->current_class_ref = current_class_ref;
42976354 13101 p->static_labelno = static_labelno;
db5ae43f
MS
13102}
13103
13104/* Restore the variables used during compilation of a C++ function. */
13105
13106void
28cbf42c
MS
13107pop_cp_function_context (context)
13108 tree context;
db5ae43f
MS
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
28cbf42c 13119 pop_function_context_from (context);
db5ae43f
MS
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;
db5ae43f
MS
13128 current_binding_level = p->binding_level;
13129 ctor_label = p->ctor_label;
13130 dtor_label = p->dtor_label;
72b7eeff 13131 last_dtor_insn = p->last_dtor_insn;
b87692e5 13132 last_parm_cleanup_insn = p->last_parm_cleanup_insn;
db5ae43f
MS
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;
a9aedbc2 13137 base_init_expr = p->base_init_expr;
7215f9a0 13138 temp_name_counter = p->temp_name_counter;
79ff2c6c
MS
13139 current_base_init_list = p->base_init_list;
13140 current_member_init_list = p->member_init_list;
4ac14744
MS
13141 current_class_ptr = p->current_class_ptr;
13142 current_class_ref = p->current_class_ref;
42976354 13143 static_labelno = p->static_labelno;
db5ae43f
MS
13144
13145 free (p);
13146}
ebfc180f 13147
5566b478
MS
13148int
13149in_function_p ()
13150{
13151 return function_depth != 0;
13152}
13153
ebfc180f 13154/* FSF LOCAL dje prefix attributes */
ebfc180f
MS
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
13161tree
13162strip_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 2.189657 seconds and 5 git commands to generate.