]> gcc.gnu.org Git - gcc.git/blame - gcc/cp/decl.c
cp-tree.def (CPLUS_BINDING): Update documentation.
[gcc.git] / gcc / cp / decl.c
CommitLineData
e5e809f4
JL
1/* Process declarations and variables for C compiler.
2 Copyright (C) 1988, 92-97, 1998 Free Software Foundation, Inc.
3 Contributed by Michael Tiemann (tiemann@cygnus.com)
8d08fdba
MS
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"
8d052bc7 31#include "system.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"
8d08fdba
MS
38#include <signal.h>
39#include "obstack.h"
72b7eeff 40#include "defaults.h"
49c249e1
JM
41#include "output.h"
42#include "except.h"
54f92bfb 43#include "toplev.h"
7ddedda4 44#include "../hash.h"
8d08fdba
MS
45
46#define obstack_chunk_alloc xmalloc
47#define obstack_chunk_free free
48
8d2733ca
MS
49extern tree builtin_return_address_fndecl;
50
8d08fdba 51extern struct obstack permanent_obstack;
ae0a6181 52extern struct obstack* saveable_obstack;
8d08fdba
MS
53
54extern int current_class_depth;
55
e1cd6e56
MS
56extern tree static_ctors, static_dtors;
57
42976354
BK
58extern int static_labelno;
59
30394414
JM
60extern tree current_namespace;
61extern tree global_namespace;
62
62c154ed
JM
63extern void (*print_error_function) PROTO((char *));
64
8d08fdba
MS
65/* Stack of places to restore the search obstack back to. */
66
67/* Obstack used for remembering local class declarations (like
68 enums and static (const) members. */
69#include "stack.h"
5566b478 70struct obstack decl_obstack;
8d08fdba
MS
71static struct stack_level *decl_stack;
72
73#ifndef CHAR_TYPE_SIZE
74#define CHAR_TYPE_SIZE BITS_PER_UNIT
75#endif
76
77#ifndef SHORT_TYPE_SIZE
78#define SHORT_TYPE_SIZE (BITS_PER_UNIT * MIN ((UNITS_PER_WORD + 1) / 2, 2))
79#endif
80
81#ifndef INT_TYPE_SIZE
82#define INT_TYPE_SIZE BITS_PER_WORD
83#endif
84
85#ifndef LONG_TYPE_SIZE
86#define LONG_TYPE_SIZE BITS_PER_WORD
87#endif
88
89#ifndef LONG_LONG_TYPE_SIZE
90#define LONG_LONG_TYPE_SIZE (BITS_PER_WORD * 2)
91#endif
92
93#ifndef WCHAR_UNSIGNED
94#define WCHAR_UNSIGNED 0
95#endif
96
97#ifndef FLOAT_TYPE_SIZE
98#define FLOAT_TYPE_SIZE BITS_PER_WORD
99#endif
100
101#ifndef DOUBLE_TYPE_SIZE
102#define DOUBLE_TYPE_SIZE (BITS_PER_WORD * 2)
103#endif
104
105#ifndef LONG_DOUBLE_TYPE_SIZE
106#define LONG_DOUBLE_TYPE_SIZE (BITS_PER_WORD * 2)
107#endif
108
255512c1 109#ifndef BOOL_TYPE_SIZE
e1cd6e56 110#ifdef SLOW_BYTE_ACCESS
d2e5ee5c 111#define BOOL_TYPE_SIZE ((SLOW_BYTE_ACCESS) ? (POINTER_SIZE) : (CHAR_TYPE_SIZE))
e1cd6e56 112#else
d2e5ee5c 113#define BOOL_TYPE_SIZE CHAR_TYPE_SIZE
e1cd6e56 114#endif
255512c1
JM
115#endif
116
8d08fdba
MS
117/* We let tm.h override the types used here, to handle trivial differences
118 such as the choice of unsigned int or long unsigned int for size_t.
119 When machines start needing nontrivial differences in the size type,
120 it would be best to do something here to figure out automatically
121 from other information what type to use. */
122
123#ifndef SIZE_TYPE
124#define SIZE_TYPE "long unsigned int"
125#endif
126
127#ifndef PTRDIFF_TYPE
128#define PTRDIFF_TYPE "long int"
129#endif
130
131#ifndef WCHAR_TYPE
132#define WCHAR_TYPE "int"
133#endif
134
8d08fdba
MS
135static tree grokparms PROTO((tree, int));
136static tree lookup_nested_type PROTO((tree, tree));
8251199e 137static char *redeclaration_error_message PROTO((tree, tree));
bd6dd845 138static tree push_overloaded_decl PROTO((tree, int));
8d08fdba 139
49c249e1
JM
140static struct stack_level *push_decl_level PROTO((struct stack_level *,
141 struct obstack *));
142static void push_binding_level PROTO((struct binding_level *, int,
143 int));
144static void pop_binding_level PROTO((void));
145static void suspend_binding_level PROTO((void));
146static void resume_binding_level PROTO((struct binding_level *));
147static struct binding_level *make_binding_level PROTO((void));
148static int namespace_bindings_p PROTO((void));
149static void declare_namespace_level PROTO((void));
1ddb2906 150static void signal_catch PROTO((int)) ATTRIBUTE_NORETURN;
49c249e1
JM
151static void storedecls PROTO((tree));
152static void storetags PROTO((tree));
153static void require_complete_types_for_parms PROTO((tree));
154static void push_overloaded_decl_1 PROTO((tree));
155static int ambi_op_p PROTO((tree));
156static int unary_op_p PROTO((tree));
157static tree store_bindings PROTO((tree, tree));
158static tree lookup_tag_reverse PROTO((tree, tree));
159static tree obscure_complex_init PROTO((tree, tree));
160static tree maybe_build_cleanup_1 PROTO((tree, tree));
3e3f722c 161static tree lookup_name_real PROTO((tree, int, int, int));
49c249e1 162static void warn_extern_redeclared_static PROTO((tree, tree));
a703fb38 163static void grok_reference_init PROTO((tree, tree, tree));
386b8a85 164static tree grokfndecl PROTO((tree, tree, tree, tree, int,
2c73f9f5
ML
165 enum overload_flags, tree,
166 tree, tree, int, int, int, int, int, int, tree));
167static tree grokvardecl PROTO((tree, tree, RID_BIT_TYPE *, int, int, tree));
49c249e1
JM
168static tree lookup_tag PROTO((enum tree_code, tree,
169 struct binding_level *, int));
170static void set_identifier_type_value_with_scope
171 PROTO((tree, tree, struct binding_level *));
172static void record_builtin_type PROTO((enum rid, char *, tree));
036407f7 173static void record_unknown_type PROTO((tree, char *));
49c249e1
JM
174static int member_function_or_else PROTO((tree, tree, char *));
175static void bad_specifiers PROTO((tree, char *, int, int, int, int,
176 int));
62c154ed 177static void lang_print_error_function PROTO((char *));
39c01e4c 178static tree maybe_process_template_type_declaration PROTO((tree, int, struct binding_level*));
91063b51 179static void check_for_uninitialized_const_var PROTO((tree));
7ddedda4
MM
180static unsigned long typename_hash PROTO((hash_table_key));
181static boolean typename_compare PROTO((hash_table_key, hash_table_key));
f181d4ae
MM
182static void push_binding PROTO((tree, tree, struct binding_level*));
183static void pop_binding PROTO((tree));
8d08fdba 184
69ac77ce
JL
185#if defined (DEBUG_CP_BINDING_LEVELS)
186static void indent PROTO((void));
187#endif
188
2c73f9f5 189/* A node which has tree code ERROR_MARK, and whose type is itself.
8d08fdba
MS
190 All erroneous expressions are replaced with this node. All functions
191 that accept nodes as arguments should avoid generating error messages
192 if this node is one of the arguments, since it is undesirable to get
193 multiple error messages from one error in the input. */
194
195tree error_mark_node;
196
197/* Erroneous argument lists can use this *IFF* they do not modify it. */
198tree error_mark_list;
199
200/* INTEGER_TYPE and REAL_TYPE nodes for the standard data types */
201
202tree short_integer_type_node;
203tree integer_type_node;
204tree long_integer_type_node;
205tree long_long_integer_type_node;
206
207tree short_unsigned_type_node;
208tree unsigned_type_node;
209tree long_unsigned_type_node;
210tree long_long_unsigned_type_node;
211
212tree ptrdiff_type_node;
213
214tree unsigned_char_type_node;
215tree signed_char_type_node;
216tree char_type_node;
217tree wchar_type_node;
218tree signed_wchar_type_node;
219tree unsigned_wchar_type_node;
220
f376e137
MS
221tree wchar_decl_node;
222
8d08fdba
MS
223tree float_type_node;
224tree double_type_node;
225tree long_double_type_node;
226
37c46b43
MS
227tree complex_integer_type_node;
228tree complex_float_type_node;
229tree complex_double_type_node;
230tree complex_long_double_type_node;
231
8d08fdba
MS
232tree intQI_type_node;
233tree intHI_type_node;
234tree intSI_type_node;
235tree intDI_type_node;
946dc1c8 236#if HOST_BITS_PER_WIDE_INT >= 64
f7554e8c 237tree intTI_type_node;
946dc1c8 238#endif
8d08fdba
MS
239
240tree unsigned_intQI_type_node;
241tree unsigned_intHI_type_node;
242tree unsigned_intSI_type_node;
243tree unsigned_intDI_type_node;
946dc1c8 244#if HOST_BITS_PER_WIDE_INT >= 64
f7554e8c 245tree unsigned_intTI_type_node;
946dc1c8 246#endif
8d08fdba 247
eff71ab0
PB
248tree java_byte_type_node;
249tree java_short_type_node;
250tree java_int_type_node;
251tree java_long_type_node;
252tree java_float_type_node;
253tree java_double_type_node;
254tree java_char_type_node;
255tree java_boolean_type_node;
256
2c73f9f5 257/* A VOID_TYPE node, and the same, packaged in a TREE_LIST. */
8d08fdba
MS
258
259tree void_type_node, void_list_node;
260tree void_zero_node;
261
262/* Nodes for types `void *' and `const void *'. */
263
bd6dd845 264tree ptr_type_node;
6c20b7e9 265tree const_ptr_type_node;
8d08fdba
MS
266
267/* Nodes for types `char *' and `const char *'. */
268
269tree string_type_node, const_string_type_node;
270
271/* Type `char[256]' or something like it.
272 Used when an array of char is needed and the size is irrelevant. */
273
274tree char_array_type_node;
275
276/* Type `int[256]' or something like it.
277 Used when an array of int needed and the size is irrelevant. */
278
279tree int_array_type_node;
280
281/* Type `wchar_t[256]' or something like it.
282 Used when a wide string literal is created. */
283
284tree wchar_array_type_node;
285
2986ae00 286/* The bool data type, and constants */
255512c1 287tree boolean_type_node, boolean_true_node, boolean_false_node;
2986ae00 288
2c73f9f5 289/* Type `int ()' -- used for implicit declaration of functions. */
8d08fdba
MS
290
291tree default_function_type;
292
2c73f9f5 293/* Function types `double (double)' and `double (double, double)', etc. */
8d08fdba 294
bd6dd845
MS
295static tree double_ftype_double, double_ftype_double_double;
296static tree int_ftype_int, long_ftype_long;
297static tree float_ftype_float;
298static tree ldouble_ftype_ldouble;
8d08fdba 299
8d08fdba 300/* Function type `int (const void *, const void *, size_t)' */
5566b478 301static tree int_ftype_cptr_cptr_sizet;
8d08fdba
MS
302
303/* C++ extensions */
700f8a87 304tree vtable_entry_type;
8d08fdba 305tree delta_type_node;
db5ae43f 306#if 0
e92cc029 307/* Old rtti stuff. */
db5ae43f
MS
308tree __baselist_desc_type_node;
309tree __i_desc_type_node, __m_desc_type_node;
8d08fdba 310tree __t_desc_array_type, __i_desc_array_type, __m_desc_array_type;
db5ae43f 311#endif
5566b478
MS
312tree __t_desc_type_node;
313#if 0
314tree __tp_desc_type_node;
315#endif
db5ae43f
MS
316tree __access_mode_type_node;
317tree __bltn_desc_type_node, __user_desc_type_node, __class_desc_type_node;
318tree __ptr_desc_type_node, __attr_desc_type_node, __func_desc_type_node;
319tree __ptmf_desc_type_node, __ptmd_desc_type_node;
320#if 0
321/* Not needed yet? May be needed one day? */
322tree __bltn_desc_array_type, __user_desc_array_type, __class_desc_array_type;
323tree __ptr_desc_array_type, __attr_dec_array_type, __func_desc_array_type;
324tree __ptmf_desc_array_type, __ptmd_desc_array_type;
325#endif
326
2c73f9f5
ML
327/* Indicates that there is a type value in some namespace, although
328 that is not necessarily in scope at the moment. */
329
330static tree global_type_node;
331
8d08fdba
MS
332tree class_star_type_node;
333tree class_type_node, record_type_node, union_type_node, enum_type_node;
db5ae43f 334tree unknown_type_node;
8d08fdba
MS
335tree opaque_type_node, signature_type_node;
336tree sigtable_entry_type;
8d08fdba 337
8d08fdba
MS
338/* Array type `vtable_entry_type[]' */
339tree vtbl_type_node;
849da744 340tree vtbl_ptr_type_node;
8d08fdba 341
6633d636
MS
342/* namespace std */
343tree std_node;
2c73f9f5 344int in_std = 0;
6633d636 345
3e3f722c
ML
346/* Expect only namespace names now. */
347static int only_namespace_names;
348
8d08fdba
MS
349/* In a destructor, the point at which all derived class destroying
350 has been done, just before any base class destroying will be done. */
351
352tree dtor_label;
353
72b7eeff
MS
354/* In a destructor, the last insn emitted after the start of the
355 function and the parms. */
356
bd6dd845 357static rtx last_dtor_insn;
72b7eeff 358
b87692e5 359/* In a constructor, the last insn emitted after the start of the
9664b89e
JM
360 function and the parms, the exception specification and any
361 function-try-block. The constructor initializers are emitted after
362 this insn. */
b87692e5
MS
363
364static rtx last_parm_cleanup_insn;
365
8d08fdba
MS
366/* In a constructor, the point at which we are ready to return
367 the pointer to the initialized object. */
368
369tree ctor_label;
370
8d08fdba
MS
371/* A FUNCTION_DECL which can call `abort'. Not necessarily the
372 one that the user will declare, but sufficient to be called
373 by routines that want to abort the program. */
374
375tree abort_fndecl;
376
94e098d1
MM
377/* A FUNCTION_DECL for the default `::operator delete'. */
378
379tree global_delete_fndecl;
380
8d08fdba
MS
381extern rtx cleanup_label, return_label;
382
383/* If original DECL_RESULT of current function was a register,
384 but due to being an addressable named return value, would up
385 on the stack, this variable holds the named return value's
386 original location. */
bd6dd845 387static rtx original_result_rtx;
8d08fdba
MS
388
389/* Sequence of insns which represents base initialization. */
a9aedbc2 390tree base_init_expr;
8d08fdba
MS
391
392/* C++: Keep these around to reduce calls to `get_identifier'.
393 Identifiers for `this' in member functions and the auto-delete
394 parameter for destructors. */
395tree this_identifier, in_charge_identifier;
fc378698 396tree ctor_identifier, dtor_identifier;
e92cc029 397/* Used in pointer to member functions, in vtables, and in sigtables. */
8d08fdba 398tree pfn_identifier, index_identifier, delta_identifier, delta2_identifier;
9dd70aa4 399tree pfn_or_delta2_identifier, tag_identifier;
5566b478 400tree vt_off_identifier;
8d08fdba 401
e349ee73
MS
402struct named_label_list
403{
404 struct binding_level *binding_level;
405 tree names_in_scope;
406 tree label_decl;
407 char *filename_o_goto;
408 int lineno_o_goto;
409 struct named_label_list *next;
410};
411
8d08fdba
MS
412/* A list (chain of TREE_LIST nodes) of named label uses.
413 The TREE_PURPOSE field is the list of variables defined
38e01259 414 in the label's scope defined at the point of use.
8d08fdba
MS
415 The TREE_VALUE field is the LABEL_DECL used.
416 The TREE_TYPE field holds `current_binding_level' at the
417 point of the label's use.
418
e349ee73
MS
419 BWAHAHAAHAHahhahahahaah. No, no, no, said the little chicken.
420
421 Look at the pretty struct named_label_list. See the pretty struct
422 with the pretty named fields that describe what they do. See the
423 pretty lack of gratuitous casts. Notice the code got a lot cleaner.
424
8d08fdba
MS
425 Used only for jumps to as-yet undefined labels, since
426 jumps to defined labels can have their validity checked
427 by stmt.c. */
428
e349ee73 429static struct named_label_list *named_label_uses = NULL;
8d08fdba
MS
430
431/* A list of objects which have constructors or destructors
432 which reside in the global scope. The decl is stored in
433 the TREE_VALUE slot and the initializer is stored
434 in the TREE_PURPOSE slot. */
435tree static_aggregates;
436
8d08fdba
MS
437/* -- end of C++ */
438
439/* Two expressions that are constants with value zero.
440 The first is of type `int', the second of type `void *'. */
441
442tree integer_zero_node;
443tree null_pointer_node;
444
03d0f4af
MM
445/* The value for __null (NULL), namely, a zero of an integer type with
446 the same number of bits as a pointer. */
d11ad92e
MS
447tree null_node;
448
8d08fdba
MS
449/* A node for the integer constants 1, 2, and 3. */
450
451tree integer_one_node, integer_two_node, integer_three_node;
452
8d08fdba
MS
453/* While defining an enum type, this is 1 plus the last enumerator
454 constant value. */
455
456static tree enum_next_value;
457
7177d104
MS
458/* Nonzero means that there was overflow computing enum_next_value. */
459
460static int enum_overflow;
461
8d08fdba
MS
462/* Parsing a function declarator leaves a list of parameter names
463 or a chain or parameter decls here. */
464
465tree last_function_parms;
466
467/* Parsing a function declarator leaves here a chain of structure
468 and enum types declared in the parmlist. */
469
470static tree last_function_parm_tags;
471
472/* After parsing the declarator that starts a function definition,
473 `start_function' puts here the list of parameter names or chain of decls.
474 `store_parm_decls' finds it here. */
475
476static tree current_function_parms;
477
478/* Similar, for last_function_parm_tags. */
479static tree current_function_parm_tags;
480
481/* A list (chain of TREE_LIST nodes) of all LABEL_DECLs in the function
482 that have names. Here so we can clear out their names' definitions
483 at the end of the function. */
484
485static tree named_labels;
486
487/* A list of LABEL_DECLs from outer contexts that are currently shadowed. */
488
489static tree shadowed_labels;
490
8d08fdba
MS
491/* The FUNCTION_DECL for the function currently being compiled,
492 or 0 if between functions. */
493tree current_function_decl;
494
495/* Set to 0 at beginning of a function definition, set to 1 if
496 a return statement that specifies a return value is seen. */
497
498int current_function_returns_value;
499
500/* Set to 0 at beginning of a function definition, set to 1 if
501 a return statement with no argument is seen. */
502
503int current_function_returns_null;
504
505/* Set to 0 at beginning of a function definition, and whenever
506 a label (case or named) is defined. Set to value of expression
507 returned from function when that value can be transformed into
508 a named return value. */
509
510tree current_function_return_value;
511
8d08fdba
MS
512/* Nonzero means give `double' the same size as `float'. */
513
514extern int flag_short_double;
515
516/* Nonzero means don't recognize any builtin functions. */
517
518extern int flag_no_builtin;
519
00595019
MS
520/* Nonzero means don't recognize the non-ANSI builtin functions.
521 -ansi sets this. */
522
523extern int flag_no_nonansi_builtin;
524
e1cd6e56
MS
525/* Nonzero means enable obscure ANSI features and disable GNU extensions
526 that might cause ANSI-compliant code to be miscompiled. */
8d08fdba
MS
527
528extern int flag_ansi;
529
530/* Nonzero if we want to support huge (> 2^(sizeof(short)*8-1) bytes)
e92cc029 531 objects. */
8d08fdba
MS
532extern int flag_huge_objects;
533
534/* Nonzero if we want to conserve space in the .o files. We do this
535 by putting uninitialized data and runtime initialized data into
ddd5a7c1 536 .common instead of .data at the expense of not flagging multiple
8d08fdba
MS
537 definitions. */
538extern int flag_conserve_space;
539
540/* Pointers to the base and current top of the language name stack. */
541
542extern tree *current_lang_base, *current_lang_stack;
543\f
51c184be 544/* C and C++ flags are in decl2.c. */
8d08fdba
MS
545
546/* Set to 0 at beginning of a constructor, set to 1
547 if that function does an allocation before referencing its
548 instance variable. */
5566b478 549static int current_function_assigns_this;
8d08fdba
MS
550int current_function_just_assigned_this;
551
552/* Set to 0 at beginning of a function. Set non-zero when
553 store_parm_decls is called. Don't call store_parm_decls
554 if this flag is non-zero! */
555int current_function_parms_stored;
556
51c184be 557/* Flag used when debugging spew.c */
8d08fdba
MS
558
559extern int spew_debug;
560
561/* This is a copy of the class_shadowed list of the previous class binding
562 contour when at global scope. It's used to reset IDENTIFIER_CLASS_VALUEs
563 when entering another class scope (i.e. a cache miss). */
564extern tree previous_class_values;
565
e92cc029
MS
566/* A expression of value 0 with the same precision as a sizetype
567 node, but signed. */
568tree signed_size_zero_node;
569
0c8feefe
MM
570/* The name of the anonymous namespace, throughout this translation
571 unit. */
572tree anonymous_namespace_name;
573
8d08fdba
MS
574\f
575/* Allocate a level of searching. */
e92cc029 576
824b9a4c 577static
8d08fdba
MS
578struct stack_level *
579push_decl_level (stack, obstack)
580 struct stack_level *stack;
581 struct obstack *obstack;
582{
583 struct stack_level tem;
584 tem.prev = stack;
585
586 return push_stack_level (obstack, (char *)&tem, sizeof (tem));
587}
588\f
589/* For each binding contour we allocate a binding_level structure
e92cc029
MS
590 which records the names defined in that contour.
591 Contours include:
592 0) the global one
593 1) one for each function definition,
594 where internal declarations of the parameters appear.
595 2) one for each compound statement,
596 to record its declarations.
597
598 The current meaning of a name can be found by searching the levels
599 from the current one out to the global one.
600
601 Off to the side, may be the class_binding_level. This exists only
602 to catch class-local declarations. It is otherwise nonexistent.
603
604 Also there may be binding levels that catch cleanups that must be
605 run when exceptions occur. */
8d08fdba
MS
606
607/* Note that the information in the `names' component of the global contour
608 is duplicated in the IDENTIFIER_GLOBAL_VALUEs of all identifiers. */
609
610struct binding_level
611 {
612 /* A chain of _DECL nodes for all variables, constants, functions,
e92cc029 613 and typedef types. These are in the reverse of the order
f181d4ae
MM
614 supplied. There may be OVERLOADs on this list, too, but they
615 are wrapped in TREE_LISTs; the TREE_VALUE is the OVERLOAD. */
8d08fdba
MS
616 tree names;
617
e92cc029
MS
618 /* A list of structure, union and enum definitions, for looking up
619 tag names.
620 It is a chain of TREE_LIST nodes, each of whose TREE_PURPOSE is a name,
621 or NULL_TREE; and whose TREE_VALUE is a RECORD_TYPE, UNION_TYPE,
622 or ENUMERAL_TYPE node.
623
624 C++: the TREE_VALUE nodes can be simple types for
625 component_bindings. */
8d08fdba
MS
626 tree tags;
627
2c73f9f5
ML
628 /* A list of USING_DECL nodes. */
629 tree usings;
630
ea9635c7
ML
631 /* A list of used namespaces. PURPOSE is the namespace,
632 VALUE the common ancestor with this binding_level's namespace. */
633 tree using_directives;
634
f181d4ae
MM
635 /* If this binding level is the binding level for a class, then
636 class_shadowed is a TREE_LIST. The TREE_PURPOSE of each node
637 is the name of an entity bound in the class; the TREE_VALUE is
638 the IDENTIFIER_CLASS_VALUE before we entered the class. Thus,
639 when leaving class scope, we can restore the
640 IDENTIFIER_CLASS_VALUE by walking this list. */
8d08fdba
MS
641 tree class_shadowed;
642
f181d4ae
MM
643 /* Similar to class_shadowed, but for IDENTIFIER_TYPE_VALUE, and
644 is used for all binding levels. */
8d08fdba
MS
645 tree type_shadowed;
646
647 /* For each level (except not the global one),
648 a chain of BLOCK nodes for all the levels
649 that were entered and exited one level down. */
650 tree blocks;
651
652 /* The BLOCK node for this level, if one has been preallocated.
653 If 0, the BLOCK is allocated (if needed) when the level is popped. */
654 tree this_block;
655
656 /* The binding level which this one is contained in (inherits from). */
657 struct binding_level *level_chain;
658
f30432d7 659 /* List of decls in `names' that have incomplete
8d08fdba 660 structure or union types. */
f30432d7 661 tree incomplete;
8d08fdba 662
8d6e462b 663 /* List of VAR_DECLS saved from a previous for statement.
abc95ed3 664 These would be dead in ANSI-conforming code, but might
f181d4ae
MM
665 be referenced in ARM-era code. These are stored in a
666 TREE_LIST; the TREE_VALUE is the actual declaration. */
8d6e462b
PB
667 tree dead_vars_from_for;
668
8d08fdba
MS
669 /* 1 for the level that holds the parameters of a function.
670 2 for the level that holds a class declaration.
671 3 for levels that hold parameter declarations. */
672 unsigned parm_flag : 4;
673
674 /* 1 means make a BLOCK for this level regardless of all else.
675 2 for temporary binding contours created by the compiler. */
676 unsigned keep : 3;
677
678 /* Nonzero if this level "doesn't exist" for tags. */
679 unsigned tag_transparent : 1;
680
681 /* Nonzero if this level can safely have additional
682 cleanup-needing variables added to it. */
683 unsigned more_cleanups_ok : 1;
684 unsigned have_cleanups : 1;
685
5566b478
MS
686 /* Nonzero if this level is for storing the decls for template
687 parameters and generic decls; these decls will be discarded and
688 replaced with a TEMPLATE_DECL. */
8d08fdba
MS
689 unsigned pseudo_global : 1;
690
a9aedbc2
MS
691 /* This is set for a namespace binding level. */
692 unsigned namespace_p : 1;
693
2ee887f2 694 /* True if this level is that of a for-statement where we need to
d22c8596 695 worry about ambiguous (ARM or ANSI) scope rules. */
8d6e462b
PB
696 unsigned is_for_scope : 1;
697
5566b478 698 /* Two bits left for this word. */
8d08fdba
MS
699
700#if defined(DEBUG_CP_BINDING_LEVELS)
701 /* Binding depth at which this level began. */
702 unsigned binding_depth;
703#endif /* defined(DEBUG_CP_BINDING_LEVELS) */
704 };
705
706#define NULL_BINDING_LEVEL ((struct binding_level *) NULL)
707
708/* The (non-class) binding level currently in effect. */
709
710static struct binding_level *current_binding_level;
711
712/* The binding level of the current class, if any. */
713
714static struct binding_level *class_binding_level;
715
716/* The current (class or non-class) binding level currently in effect. */
717
718#define inner_binding_level \
719 (class_binding_level ? class_binding_level : current_binding_level)
720
721/* A chain of binding_level structures awaiting reuse. */
722
723static struct binding_level *free_binding_level;
724
725/* The outermost binding level, for names of file scope.
726 This is created when the compiler is started and exists
727 through the entire run. */
728
729static struct binding_level *global_binding_level;
730
731/* Binding level structures are initialized by copying this one. */
732
733static struct binding_level clear_binding_level;
734
735/* Nonzero means unconditionally make a BLOCK for the next level pushed. */
736
737static int keep_next_level_flag;
738
739#if defined(DEBUG_CP_BINDING_LEVELS)
740static int binding_depth = 0;
741static int is_class_level = 0;
742
743static void
744indent ()
745{
746 register unsigned i;
747
748 for (i = 0; i < binding_depth*2; i++)
749 putc (' ', stderr);
750}
751#endif /* defined(DEBUG_CP_BINDING_LEVELS) */
752
753static tree pushdecl_with_scope PROTO((tree, struct binding_level *));
754
755static void
756push_binding_level (newlevel, tag_transparent, keep)
757 struct binding_level *newlevel;
758 int tag_transparent, keep;
759{
760 /* Add this level to the front of the chain (stack) of levels that
761 are active. */
762 *newlevel = clear_binding_level;
763 if (class_binding_level)
764 {
765 newlevel->level_chain = class_binding_level;
766 class_binding_level = (struct binding_level *)0;
767 }
768 else
769 {
770 newlevel->level_chain = current_binding_level;
771 }
772 current_binding_level = newlevel;
773 newlevel->tag_transparent = tag_transparent;
774 newlevel->more_cleanups_ok = 1;
8d08fdba
MS
775 newlevel->keep = keep;
776#if defined(DEBUG_CP_BINDING_LEVELS)
777 newlevel->binding_depth = binding_depth;
778 indent ();
779 fprintf (stderr, "push %s level 0x%08x line %d\n",
780 (is_class_level) ? "class" : "block", newlevel, lineno);
781 is_class_level = 0;
782 binding_depth++;
783#endif /* defined(DEBUG_CP_BINDING_LEVELS) */
784}
785
786static void
787pop_binding_level ()
788{
789 if (class_binding_level)
790 current_binding_level = class_binding_level;
791
792 if (global_binding_level)
793 {
2c73f9f5 794 /* Cannot pop a level, if there are none left to pop. */
8d08fdba
MS
795 if (current_binding_level == global_binding_level)
796 my_friendly_abort (123);
797 }
798 /* Pop the current level, and free the structure for reuse. */
799#if defined(DEBUG_CP_BINDING_LEVELS)
800 binding_depth--;
801 indent ();
802 fprintf (stderr, "pop %s level 0x%08x line %d\n",
803 (is_class_level) ? "class" : "block",
804 current_binding_level, lineno);
805 if (is_class_level != (current_binding_level == class_binding_level))
9e9ff709
MS
806 {
807 indent ();
808 fprintf (stderr, "XXX is_class_level != (current_binding_level == class_binding_level)\n");
809 }
8d08fdba
MS
810 is_class_level = 0;
811#endif /* defined(DEBUG_CP_BINDING_LEVELS) */
812 {
813 register struct binding_level *level = current_binding_level;
814 current_binding_level = current_binding_level->level_chain;
815 level->level_chain = free_binding_level;
816#if 0 /* defined(DEBUG_CP_BINDING_LEVELS) */
817 if (level->binding_depth != binding_depth)
818 abort ();
819#endif /* defined(DEBUG_CP_BINDING_LEVELS) */
820 free_binding_level = level;
821
822 class_binding_level = current_binding_level;
823 if (class_binding_level->parm_flag != 2)
824 class_binding_level = 0;
825 while (current_binding_level->parm_flag == 2)
826 current_binding_level = current_binding_level->level_chain;
827 }
828}
a9aedbc2
MS
829
830static void
831suspend_binding_level ()
832{
833 if (class_binding_level)
834 current_binding_level = class_binding_level;
835
836 if (global_binding_level)
837 {
2c73f9f5 838 /* Cannot suspend a level, if there are none left to suspend. */
a9aedbc2
MS
839 if (current_binding_level == global_binding_level)
840 my_friendly_abort (123);
841 }
842 /* Suspend the current level. */
843#if defined(DEBUG_CP_BINDING_LEVELS)
844 binding_depth--;
845 indent ();
846 fprintf (stderr, "suspend %s level 0x%08x line %d\n",
847 (is_class_level) ? "class" : "block",
848 current_binding_level, lineno);
849 if (is_class_level != (current_binding_level == class_binding_level))
9e9ff709
MS
850 {
851 indent ();
852 fprintf (stderr, "XXX is_class_level != (current_binding_level == class_binding_level)\n");
853 }
a9aedbc2
MS
854 is_class_level = 0;
855#endif /* defined(DEBUG_CP_BINDING_LEVELS) */
856 {
a9aedbc2 857 current_binding_level = current_binding_level->level_chain;
a9aedbc2
MS
858 class_binding_level = current_binding_level;
859 if (class_binding_level->parm_flag != 2)
860 class_binding_level = 0;
861 while (current_binding_level->parm_flag == 2)
862 current_binding_level = current_binding_level->level_chain;
863 }
864}
865
824b9a4c 866static void
a9aedbc2
MS
867resume_binding_level (b)
868 struct binding_level *b;
869{
2c73f9f5
ML
870 /* Resuming binding levels is meant only for namespaces,
871 and those cannot nest into classes. */
872 my_friendly_assert(!class_binding_level, 386);
873 /* Also, resuming a non-directly nested namespace is a no-no. */
874 my_friendly_assert(b->level_chain == current_binding_level, 386);
a9aedbc2
MS
875 current_binding_level = b;
876#if defined(DEBUG_CP_BINDING_LEVELS)
877 b->binding_depth = binding_depth;
878 indent ();
879 fprintf (stderr, "resume %s level 0x%08x line %d\n",
880 (is_class_level) ? "class" : "block", b, lineno);
881 is_class_level = 0;
882 binding_depth++;
883#endif /* defined(DEBUG_CP_BINDING_LEVELS) */
884}
8d08fdba 885\f
cffa8729
MS
886/* Create a new `struct binding_level'. */
887
888static
889struct binding_level *
890make_binding_level ()
891{
892 /* NOSTRICT */
893 return (struct binding_level *) xmalloc (sizeof (struct binding_level));
894}
895
8d08fdba
MS
896/* Nonzero if we are currently in the global binding level. */
897
898int
899global_bindings_p ()
900{
901 return current_binding_level == global_binding_level;
902}
903
a9aedbc2
MS
904/* Nonzero if we are currently in a toplevel binding level. This
905 means either the global binding level or a namespace in a toplevel
2c73f9f5
ML
906 binding level.
907 Since there are no non-toplevel namespace levels, this really
908 means any namespace or pseudo-global level. */
a9aedbc2
MS
909
910int
911toplevel_bindings_p ()
912{
2c73f9f5
ML
913 return current_binding_level->namespace_p
914 || current_binding_level->pseudo_global;
a9aedbc2
MS
915}
916
917/* Nonzero if this is a namespace scope. */
918
824b9a4c 919static int
a9aedbc2
MS
920namespace_bindings_p ()
921{
922 return current_binding_level->namespace_p;
923}
924
8d08fdba
MS
925void
926keep_next_level ()
927{
928 keep_next_level_flag = 1;
929}
930
931/* Nonzero if the current level needs to have a BLOCK made. */
932
933int
934kept_level_p ()
935{
936 return (current_binding_level->blocks != NULL_TREE
937 || current_binding_level->keep
938 || current_binding_level->names != NULL_TREE
939 || (current_binding_level->tags != NULL_TREE
940 && !current_binding_level->tag_transparent));
941}
942
943/* Identify this binding level as a level of parameters. */
944
945void
946declare_parm_level ()
947{
948 current_binding_level->parm_flag = 1;
949}
950
8d08fdba
MS
951void
952declare_pseudo_global_level ()
953{
954 current_binding_level->pseudo_global = 1;
955}
956
824b9a4c 957static void
a9aedbc2
MS
958declare_namespace_level ()
959{
960 current_binding_level->namespace_p = 1;
961}
962
8d08fdba
MS
963int
964pseudo_global_level_p ()
965{
966 return current_binding_level->pseudo_global;
967}
968
969void
970set_class_shadows (shadows)
971 tree shadows;
972{
973 class_binding_level->class_shadowed = shadows;
974}
975
976/* Enter a new binding level.
977 If TAG_TRANSPARENT is nonzero, do so only for the name space of variables,
978 not for that of tags. */
979
980void
981pushlevel (tag_transparent)
982 int tag_transparent;
983{
984 register struct binding_level *newlevel = NULL_BINDING_LEVEL;
985
986 /* If this is the top level of a function,
987 just make sure that NAMED_LABELS is 0.
988 They should have been set to 0 at the end of the previous function. */
989
990 if (current_binding_level == global_binding_level)
991 my_friendly_assert (named_labels == NULL_TREE, 134);
992
993 /* Reuse or create a struct for this binding level. */
994
995#if defined(DEBUG_CP_BINDING_LEVELS)
996 if (0)
997#else /* !defined(DEBUG_CP_BINDING_LEVELS) */
998 if (free_binding_level)
999#endif /* !defined(DEBUG_CP_BINDING_LEVELS) */
1000 {
1001 newlevel = free_binding_level;
1002 free_binding_level = free_binding_level->level_chain;
1003 }
1004 else
1005 {
cffa8729 1006 newlevel = make_binding_level ();
8d08fdba 1007 }
cffa8729 1008
8d08fdba
MS
1009 push_binding_level (newlevel, tag_transparent, keep_next_level_flag);
1010 GNU_xref_start_scope ((HOST_WIDE_INT) newlevel);
1011 keep_next_level_flag = 0;
1012}
1013
5566b478 1014void
8d6e462b
PB
1015note_level_for_for ()
1016{
1017 current_binding_level->is_for_scope = 1;
1018}
1019
8d08fdba
MS
1020void
1021pushlevel_temporary (tag_transparent)
1022 int tag_transparent;
1023{
1024 pushlevel (tag_transparent);
1025 current_binding_level->keep = 2;
1026 clear_last_expr ();
1027
1028 /* Note we don't call push_momentary() here. Otherwise, it would cause
1029 cleanups to be allocated on the momentary obstack, and they will be
1030 overwritten by the next statement. */
1031
1032 expand_start_bindings (0);
1033}
1034
f181d4ae
MM
1035/* For a binding between a name and an entity at a block scope,
1036 this is the `struct binding_level' for the block. */
1037#define BINDING_LEVEL(NODE) \
1038 ((struct binding_level*) ((struct tree_binding*)NODE)->scope)
1039
1040/* These are currently unused, but permanent, CPLUS_BINDING nodes.
1041 They are kept here because they are allocated from the permanent
1042 obstack and cannot be easily freed. */
1043static tree free_binding_nodes;
1044
1045/* Make DECL the innermost binding for ID. The LEVEL is the binding
1046 level at which this declaration is being bound. */
1047
1048static void
1049push_binding (id, decl, level)
1050 tree id;
1051 tree decl;
1052 struct binding_level* level;
1053{
1054 tree binding;
1055
1056 if (!free_binding_nodes)
1057 {
1058 /* There are no free nodes, so we must build one here. */
1059 push_obstacks_nochange ();
1060 end_temporary_allocation ();
1061 binding = make_node (CPLUS_BINDING);
1062 pop_obstacks ();
1063 }
1064 else
1065 {
1066 /* There are nodes on the free list. Grab the first one. */
1067 binding = free_binding_nodes;
1068
1069 /* And update the free list. */
1070 free_binding_nodes = TREE_CHAIN (free_binding_nodes);
1071 }
1072
1073 /* Now, fill in the binding information. */
1074 BINDING_VALUE (binding) = decl;
1075 BINDING_LEVEL (binding) = level;
1076 LOCAL_BINDING_P (binding) = (level != class_binding_level);
1077
1078 /* And put it on the front of the ilst of bindings for ID. */
1079 TREE_CHAIN (binding) = IDENTIFIER_BINDING (id);
1080 IDENTIFIER_BINDING (id) = binding;
1081}
1082
1083/* Bind DECL to ID in the current_binding_level. */
1084
1085void
1086push_local_binding (id, decl)
1087 tree id;
1088 tree decl;
1089{
1090 tree d = decl;;
1091
1092 if (TREE_CODE (decl) == OVERLOAD)
1093 /* We must put the OVERLOAD into a TREE_LIST since the
1094 TREE_CHAIN of an OVERLOAD is already used. */
1095 decl = build_tree_list (NULL_TREE, decl);
1096
1097 /* Create a binding, hanging off of ID. */
1098 push_binding (id, d, current_binding_level);
1099
1100 /* And put DECL on the list of things declared by the current
1101 binding level. */
1102 TREE_CHAIN (decl) = current_binding_level->names;
1103 current_binding_level->names = decl;
1104}
1105
1106/* Bind DECL to ID in the class_binding_level. */
1107
1108void
1109push_class_binding (id, decl)
1110 tree id;
1111 tree decl;
1112{
1113 push_binding (id, decl, class_binding_level);
1114}
1115
1116/* Remove the innermost binding for ID; it has gone out of scope. */
1117
1118static void
1119pop_binding (id)
1120 tree id;
1121{
1122 tree binding;
1123
1124 if (id == NULL_TREE)
1125 /* It's easiest to write the loops that call this function without
1126 checking whether or not the entities involved have names. We
1127 get here for such an entity. */
1128 return;
1129
1130 my_friendly_assert (IDENTIFIER_BINDING (id) != NULL_TREE, 0);
1131
1132 /* Unhook the innermost binding from the list of bindings. */
1133 binding = IDENTIFIER_BINDING (id);
1134 IDENTIFIER_BINDING (id) = TREE_CHAIN (binding);
1135
1136 /* And place this list node on the free list. */
1137 TREE_CHAIN (binding) = free_binding_nodes;
1138 free_binding_nodes = binding;
1139}
1140
8d08fdba
MS
1141/* Exit a binding level.
1142 Pop the level off, and restore the state of the identifier-decl mappings
1143 that were in effect when this level was entered.
1144
1145 If KEEP == 1, this level had explicit declarations, so
1146 and create a "block" (a BLOCK node) for the level
1147 to record its declarations and subblocks for symbol table output.
1148
8d08fdba
MS
1149 If FUNCTIONBODY is nonzero, this level is the body of a function,
1150 so create a block as if KEEP were set and also clear out all
1151 label names.
1152
1153 If REVERSE is nonzero, reverse the order of decls before putting
1154 them into the BLOCK. */
1155
1156tree
1157poplevel (keep, reverse, functionbody)
1158 int keep;
1159 int reverse;
1160 int functionbody;
1161{
1162 register tree link;
1163 /* The chain of decls was accumulated in reverse order.
1164 Put it into forward order, just for cleanliness. */
1165 tree decls;
1166 int tmp = functionbody;
8d08fdba
MS
1167 int real_functionbody = current_binding_level->keep == 2
1168 ? ((functionbody = 0), tmp) : functionbody;
1169 tree tags = functionbody >= 0 ? current_binding_level->tags : 0;
1170 tree subblocks = functionbody >= 0 ? current_binding_level->blocks : 0;
1171 tree block = NULL_TREE;
1172 tree decl;
1173 int block_previously_created;
f181d4ae
MM
1174 int leaving_for_scope;
1175
1176 if (current_binding_level->parm_flag == 2
1177 || current_binding_level->class_shadowed)
1178 /* We should not be using poplevel to pop a class binding level.
1179 Use poplevel_class instead. */
1180 my_friendly_abort (0);
8d08fdba 1181
536333d4
MM
1182 /* We used to use KEEP == 2 to indicate that the new block should go
1183 at the beginning of the list of blocks at this binding level,
1184 rather than the end. This hack is no longer used. */
1185 my_friendly_assert (keep == 0 || keep == 1, 0);
1186
8d08fdba
MS
1187 GNU_xref_end_scope ((HOST_WIDE_INT) current_binding_level,
1188 (HOST_WIDE_INT) current_binding_level->level_chain,
1189 current_binding_level->parm_flag,
5566b478 1190 current_binding_level->keep);
8d08fdba
MS
1191
1192 if (current_binding_level->keep == 1)
1193 keep = 1;
1194
8d08fdba
MS
1195 /* Get the decls in the order they were written.
1196 Usually current_binding_level->names is in reverse order.
1197 But parameter decls were previously put in forward order. */
1198
1199 if (reverse)
1200 current_binding_level->names
1201 = decls = nreverse (current_binding_level->names);
1202 else
1203 decls = current_binding_level->names;
1204
1205 /* Output any nested inline functions within this block
1206 if they weren't already output. */
1207
1208 for (decl = decls; decl; decl = TREE_CHAIN (decl))
1209 if (TREE_CODE (decl) == FUNCTION_DECL
1210 && ! TREE_ASM_WRITTEN (decl)
1211 && DECL_INITIAL (decl) != NULL_TREE
6060a796
MS
1212 && TREE_ADDRESSABLE (decl)
1213 && decl_function_context (decl) == current_function_decl)
8d08fdba
MS
1214 {
1215 /* If this decl was copied from a file-scope decl
1216 on account of a block-scope extern decl,
1217 propagate TREE_ADDRESSABLE to the file-scope decl. */
1218 if (DECL_ABSTRACT_ORIGIN (decl) != NULL_TREE)
1219 TREE_ADDRESSABLE (DECL_ABSTRACT_ORIGIN (decl)) = 1;
1220 else
1221 {
1222 push_function_context ();
1223 output_inline_function (decl);
1224 pop_function_context ();
1225 }
1226 }
1227
1228 /* If there were any declarations or structure tags in that level,
1229 or if this level is a function body,
1230 create a BLOCK to record them for the life of this function. */
1231
1232 block = NULL_TREE;
1233 block_previously_created = (current_binding_level->this_block != NULL_TREE);
1234 if (block_previously_created)
1235 block = current_binding_level->this_block;
1236 else if (keep == 1 || functionbody)
1237 block = make_node (BLOCK);
1238 if (block != NULL_TREE)
1239 {
72b7eeff
MS
1240 if (block_previously_created)
1241 {
1242 if (decls || tags || subblocks)
1243 {
be99da77 1244 if (BLOCK_VARS (block) || BLOCK_TYPE_TAGS (block))
f181d4ae
MM
1245 warning ("internal compiler error: debugging info corrupted");
1246
72b7eeff
MS
1247 BLOCK_VARS (block) = decls;
1248 BLOCK_TYPE_TAGS (block) = tags;
be99da77
MS
1249
1250 /* We can have previous subblocks and new subblocks when
1251 doing fixup_gotos with complex cleanups. We chain the new
1252 subblocks onto the end of any pre-existing subblocks. */
1253 BLOCK_SUBBLOCKS (block) = chainon (BLOCK_SUBBLOCKS (block),
1254 subblocks);
72b7eeff 1255 }
be99da77
MS
1256 /* If we created the block earlier on, and we are just
1257 diddling it now, then it already should have a proper
1258 BLOCK_END_NOTE value associated with it. */
72b7eeff
MS
1259 }
1260 else
1261 {
1262 BLOCK_VARS (block) = decls;
1263 BLOCK_TYPE_TAGS (block) = tags;
1264 BLOCK_SUBBLOCKS (block) = subblocks;
f181d4ae
MM
1265 /* Otherwise, for a new block, install a new BLOCK_END_NOTE
1266 value. */
72b7eeff
MS
1267 remember_end_note (block);
1268 }
8d08fdba
MS
1269 }
1270
1271 /* In each subblock, record that this is its superior. */
1272
1273 if (keep >= 0)
1274 for (link = subblocks; link; link = TREE_CHAIN (link))
1275 BLOCK_SUPERCONTEXT (link) = block;
1276
f181d4ae
MM
1277 /* We still support the old for-scope rules, whereby the variables
1278 in a for-init statement were in scope after the for-statement
1279 ended. We only use the new rules in flag_new_for_scope is
1280 nonzero. */
1281 leaving_for_scope
1282 = current_binding_level->is_for_scope && flag_new_for_scope == 1;
1283
1284 /* Remove declarations for all the DECLs in this level. */
1285 for (link = decls; link; link = TREE_CHAIN (link))
1286 {
1287 if (leaving_for_scope && TREE_CODE (link) == VAR_DECL)
1288 {
1289 tree outer_binding
1290 = TREE_CHAIN (IDENTIFIER_BINDING (DECL_NAME (link)));
1291 tree ns_binding;
1292
1293 if (!outer_binding)
1294 ns_binding = IDENTIFIER_NAMESPACE_VALUE (DECL_NAME (link));
1295
1296 if (outer_binding
1297 && (BINDING_LEVEL (outer_binding)
1298 == current_binding_level->level_chain))
1299 /* We have something like:
1300
1301 int i;
1302 for (int i; ;);
1303
1304 and we are leaving the `for' scope. There's no reason to
1305 keep the binding of the inner `i' in this case. */
1306 pop_binding (DECL_NAME (link));
1307 else if ((outer_binding
1308 && (TREE_CODE (BINDING_VALUE (outer_binding))
1309 == TYPE_DECL))
1310 || (ns_binding
1311 && TREE_CODE (ns_binding) == TYPE_DECL))
1312 /* Here, we have something like:
1313
1314 typedef int I;
1315
1316 void f () {
1317 for (int I; ;);
1318 }
1319
1320 We must pop the for-scope binding so we know what's a
1321 type and what isn't. */
1322 pop_binding (DECL_NAME (link));
e76a2646 1323 else
e76a2646 1324 {
f181d4ae
MM
1325 /* Mark this VAR_DECL as dead so that we can tell we left it
1326 there only for backward compatibility. */
1327 DECL_DEAD_FOR_LOCAL (link) = 1;
1328
1329 /* Keep track of what should of have happenned when we
1330 popped the binding. */
1331 if (outer_binding && BINDING_VALUE (outer_binding))
1332 DECL_SHADOWED_FOR_VAR (link)
1333 = BINDING_VALUE (outer_binding);
1334
1335 /* Add it to the list of dead variables in the next
1336 outermost binding to that we can remove these when we
1337 leave that binding. */
1338 current_binding_level->level_chain->dead_vars_from_for
1339 = tree_cons (NULL_TREE, link,
1340 current_binding_level->level_chain->
1341 dead_vars_from_for);
1342
1343 /* Although we don't pop the CPLUS_BINDING, we do clear
1344 its BINDING_LEVEL since the level is going away now. */
1345 BINDING_LEVEL (IDENTIFIER_BINDING (DECL_NAME (link)))
1346 = 0;
e76a2646 1347 }
2ee887f2 1348 }
f181d4ae 1349 else
8d6e462b 1350 {
f181d4ae
MM
1351 /* Remove the binding. */
1352 if (TREE_CODE_CLASS (TREE_CODE (link)) == 'd')
1353 pop_binding (DECL_NAME (link));
1354 else if (TREE_CODE (link) == TREE_LIST)
1355 pop_binding (DECL_NAME (OVL_FUNCTION (TREE_VALUE (link))));
1356 else
1357 my_friendly_abort (0);
8d08fdba 1358 }
f181d4ae 1359 }
8d08fdba 1360
f181d4ae
MM
1361 /* Remove declarations for any `for' variables from inner scopes
1362 that we kept around. */
1363 for (link = current_binding_level->dead_vars_from_for;
1364 link; link = TREE_CHAIN (link))
1365 pop_binding (DECL_NAME (TREE_VALUE (link)));
2ee887f2 1366
f181d4ae
MM
1367 /* Restore the IDENTIFIER_TYPE_VALUEs. */
1368 for (link = current_binding_level->type_shadowed;
1369 link; link = TREE_CHAIN (link))
1370 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (link), TREE_VALUE (link));
1371
1372 /* There may be OVERLOADs (wrapped in TREE_LISTs) on the BLOCK_VARs
1373 list if a `using' declaration put them there. The debugging
1374 back-ends won't understand OVERLOAD, so we remove them here.
1375 Because the BLOCK_VARS are (temporarily) shared with
1376 CURRENT_BINDING_LEVEL->NAMES we must do this fixup after we have
1377 popped all the bindings. */
1378 if (block)
1379 {
1380 tree* d;
8d6e462b 1381
f181d4ae
MM
1382 for (d = &BLOCK_VARS (block);
1383 *d;
1384 d = *d ? &TREE_CHAIN (*d) : d)
1385 if (TREE_CODE (*d) == TREE_LIST)
1386 *d = TREE_CHAIN (*d);
8d6e462b 1387 }
8d08fdba
MS
1388
1389 /* If the level being exited is the top level of a function,
1390 check over all the labels. */
1391
1392 if (functionbody)
1393 {
1394 /* If this is the top level block of a function,
1395 the vars are the function's parameters.
1396 Don't leave them in the BLOCK because they are
1397 found in the FUNCTION_DECL instead. */
1398
1399 BLOCK_VARS (block) = 0;
1400
1401 /* Clear out the definitions of all label names,
1402 since their scopes end here. */
1403
1404 for (link = named_labels; link; link = TREE_CHAIN (link))
1405 {
1406 register tree label = TREE_VALUE (link);
1407
1408 if (DECL_INITIAL (label) == NULL_TREE)
1409 {
8251199e 1410 cp_error_at ("label `%D' used but not defined", label);
8d08fdba
MS
1411 /* Avoid crashing later. */
1412 define_label (input_filename, 1, DECL_NAME (label));
1413 }
1414 else if (warn_unused && !TREE_USED (label))
8251199e 1415 cp_warning_at ("label `%D' defined but not used", label);
8d08fdba
MS
1416 SET_IDENTIFIER_LABEL_VALUE (DECL_NAME (label), NULL_TREE);
1417
1418 /* Put the labels into the "variables" of the
1419 top-level block, so debugger can see them. */
1420 TREE_CHAIN (label) = BLOCK_VARS (block);
1421 BLOCK_VARS (block) = label;
1422 }
1423
1424 named_labels = NULL_TREE;
1425 }
1426
1427 /* Any uses of undefined labels now operate under constraints
1428 of next binding contour. */
1429 {
1430 struct binding_level *level_chain;
1431 level_chain = current_binding_level->level_chain;
1432 if (level_chain)
1433 {
e349ee73
MS
1434 struct named_label_list *labels;
1435 for (labels = named_label_uses; labels; labels = labels->next)
1436 if (labels->binding_level == current_binding_level)
8d08fdba 1437 {
e349ee73
MS
1438 labels->binding_level = level_chain;
1439 labels->names_in_scope = level_chain->names;
8d08fdba
MS
1440 }
1441 }
1442 }
1443
1444 tmp = current_binding_level->keep;
1445
1446 pop_binding_level ();
1447 if (functionbody)
1448 DECL_INITIAL (current_function_decl) = block;
1449 else if (block)
1450 {
1451 if (!block_previously_created)
1452 current_binding_level->blocks
1453 = chainon (current_binding_level->blocks, block);
1454 }
1455 /* If we did not make a block for the level just exited,
1456 any blocks made for inner levels
1457 (since they cannot be recorded as subblocks in that level)
1458 must be carried forward so they will later become subblocks
1459 of something else. */
1460 else if (subblocks)
536333d4
MM
1461 current_binding_level->blocks
1462 = chainon (current_binding_level->blocks, subblocks);
8d08fdba
MS
1463
1464 /* Take care of compiler's internal binding structures. */
a4443a08 1465 if (tmp == 2)
8d08fdba 1466 {
8d08fdba
MS
1467 expand_end_bindings (getdecls (), keep, 1);
1468 /* Each and every BLOCK node created here in `poplevel' is important
1469 (e.g. for proper debugging information) so if we created one
1470 earlier, mark it as "used". */
1471 if (block)
1472 TREE_USED (block) = 1;
1473 block = poplevel (keep, reverse, real_functionbody);
1474 }
1475
1476 /* Each and every BLOCK node created here in `poplevel' is important
1477 (e.g. for proper debugging information) so if we created one
1478 earlier, mark it as "used". */
1479 if (block)
1480 TREE_USED (block) = 1;
1481 return block;
1482}
1483
1484/* Delete the node BLOCK from the current binding level.
1485 This is used for the block inside a stmt expr ({...})
1486 so that the block can be reinserted where appropriate. */
1487
1488void
1489delete_block (block)
1490 tree block;
1491{
1492 tree t;
1493 if (current_binding_level->blocks == block)
1494 current_binding_level->blocks = TREE_CHAIN (block);
1495 for (t = current_binding_level->blocks; t;)
1496 {
1497 if (TREE_CHAIN (t) == block)
1498 TREE_CHAIN (t) = TREE_CHAIN (block);
1499 else
1500 t = TREE_CHAIN (t);
1501 }
1502 TREE_CHAIN (block) = NULL_TREE;
1503 /* Clear TREE_USED which is always set by poplevel.
1504 The flag is set again if insert_block is called. */
1505 TREE_USED (block) = 0;
1506}
1507
1508/* Insert BLOCK at the end of the list of subblocks of the
1509 current binding level. This is used when a BIND_EXPR is expanded,
1510 to handle the BLOCK node inside the BIND_EXPR. */
1511
1512void
1513insert_block (block)
1514 tree block;
1515{
1516 TREE_USED (block) = 1;
1517 current_binding_level->blocks
1518 = chainon (current_binding_level->blocks, block);
1519}
1520
8d08fdba
MS
1521/* Set the BLOCK node for the innermost scope
1522 (the one we are currently in). */
1523
1524void
1525set_block (block)
1526 register tree block;
1527{
1528 current_binding_level->this_block = block;
1529}
1530
1531/* Do a pushlevel for class declarations. */
e92cc029 1532
8d08fdba
MS
1533void
1534pushlevel_class ()
1535{
1536 register struct binding_level *newlevel;
1537
1538 /* Reuse or create a struct for this binding level. */
1539#if defined(DEBUG_CP_BINDING_LEVELS)
1540 if (0)
1541#else /* !defined(DEBUG_CP_BINDING_LEVELS) */
1542 if (free_binding_level)
1543#endif /* !defined(DEBUG_CP_BINDING_LEVELS) */
1544 {
1545 newlevel = free_binding_level;
1546 free_binding_level = free_binding_level->level_chain;
1547 }
1548 else
f181d4ae 1549 newlevel = make_binding_level ();
8d08fdba
MS
1550
1551#if defined(DEBUG_CP_BINDING_LEVELS)
1552 is_class_level = 1;
1553#endif /* defined(DEBUG_CP_BINDING_LEVELS) */
1554
1555 push_binding_level (newlevel, 0, 0);
1556
1557 decl_stack = push_decl_level (decl_stack, &decl_obstack);
1558 class_binding_level = current_binding_level;
1559 class_binding_level->parm_flag = 2;
1560 /* We have just pushed into a new binding level. Now, fake out the rest
1561 of the compiler. Set the `current_binding_level' back to point to
1562 the most closely containing non-class binding level. */
1563 do
1564 {
1565 current_binding_level = current_binding_level->level_chain;
1566 }
1567 while (current_binding_level->parm_flag == 2);
1568}
1569
700f8a87
MS
1570/* ...and a poplevel for class declarations. FORCE is used to force
1571 clearing out of CLASS_VALUEs after a class definition. */
e92cc029 1572
8d08fdba 1573tree
700f8a87
MS
1574poplevel_class (force)
1575 int force;
8d08fdba
MS
1576{
1577 register struct binding_level *level = class_binding_level;
1578 tree block = NULL_TREE;
1579 tree shadowed;
1580
1581 my_friendly_assert (level != 0, 354);
1582
1583 decl_stack = pop_stack_level (decl_stack);
8d08fdba 1584 /* If we're leaving a toplevel class, don't bother to do the setting
ddd5a7c1 1585 of IDENTIFIER_CLASS_VALUE to NULL_TREE, since first of all this slot
8d08fdba 1586 shouldn't even be used when current_class_type isn't set, and second,
ddd5a7c1 1587 if we don't touch it here, we're able to use the cache effect if the
8d08fdba 1588 next time we're entering a class scope, it is the same class. */
700f8a87 1589 if (current_class_depth != 1 || force)
8d08fdba
MS
1590 for (shadowed = level->class_shadowed;
1591 shadowed;
1592 shadowed = TREE_CHAIN (shadowed))
1593 IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (shadowed)) = TREE_VALUE (shadowed);
1594 else
1595 /* Remember to save what IDENTIFIER's were bound in this scope so we
1596 can recover from cache misses. */
e76a2646
MS
1597 {
1598 previous_class_type = current_class_type;
1599 previous_class_values = class_binding_level->class_shadowed;
1600 }
8d08fdba
MS
1601 for (shadowed = level->type_shadowed;
1602 shadowed;
1603 shadowed = TREE_CHAIN (shadowed))
2c73f9f5 1604 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (shadowed), TREE_VALUE (shadowed));
8d08fdba 1605
f181d4ae
MM
1606 /* Remove the bindings for all of the class-level declarations. */
1607 for (shadowed = level->class_shadowed;
1608 shadowed;
1609 shadowed = TREE_CHAIN (shadowed))
1610 pop_binding (TREE_PURPOSE (shadowed));
1611
8d08fdba
MS
1612 GNU_xref_end_scope ((HOST_WIDE_INT) class_binding_level,
1613 (HOST_WIDE_INT) class_binding_level->level_chain,
1614 class_binding_level->parm_flag,
5566b478 1615 class_binding_level->keep);
8d08fdba
MS
1616
1617 if (class_binding_level->parm_flag != 2)
1618 class_binding_level = (struct binding_level *)0;
1619
38e01259 1620 /* Now, pop out of the binding level which we created up in the
8d08fdba
MS
1621 `pushlevel_class' routine. */
1622#if defined(DEBUG_CP_BINDING_LEVELS)
1623 is_class_level = 1;
1624#endif /* defined(DEBUG_CP_BINDING_LEVELS) */
1625
1626 pop_binding_level ();
1627
1628 return block;
1629}
1630\f
1631/* For debugging. */
5566b478
MS
1632static int no_print_functions = 0;
1633static int no_print_builtins = 0;
8d08fdba
MS
1634
1635void
1636print_binding_level (lvl)
1637 struct binding_level *lvl;
1638{
1639 tree t;
1640 int i = 0, len;
1641 fprintf (stderr, " blocks=");
1642 fprintf (stderr, HOST_PTR_PRINTF, lvl->blocks);
1643 fprintf (stderr, " n_incomplete=%d parm_flag=%d keep=%d",
f30432d7 1644 list_length (lvl->incomplete), lvl->parm_flag, lvl->keep);
8d08fdba
MS
1645 if (lvl->tag_transparent)
1646 fprintf (stderr, " tag-transparent");
1647 if (lvl->more_cleanups_ok)
1648 fprintf (stderr, " more-cleanups-ok");
1649 if (lvl->have_cleanups)
1650 fprintf (stderr, " have-cleanups");
8d08fdba
MS
1651 fprintf (stderr, "\n");
1652 if (lvl->names)
1653 {
1654 fprintf (stderr, " names:\t");
1655 /* We can probably fit 3 names to a line? */
1656 for (t = lvl->names; t; t = TREE_CHAIN (t))
1657 {
fc378698 1658 if (no_print_functions && (TREE_CODE (t) == FUNCTION_DECL))
8d08fdba
MS
1659 continue;
1660 if (no_print_builtins
fc378698
MS
1661 && (TREE_CODE (t) == TYPE_DECL)
1662 && (!strcmp (DECL_SOURCE_FILE (t),"<built-in>")))
8d08fdba
MS
1663 continue;
1664
1665 /* Function decls tend to have longer names. */
1666 if (TREE_CODE (t) == FUNCTION_DECL)
1667 len = 3;
1668 else
1669 len = 2;
1670 i += len;
1671 if (i > 6)
1672 {
1673 fprintf (stderr, "\n\t");
1674 i = len;
1675 }
1676 print_node_brief (stderr, "", t, 0);
bd6dd845 1677 if (t == error_mark_node)
8d08fdba
MS
1678 break;
1679 }
1680 if (i)
1681 fprintf (stderr, "\n");
1682 }
1683 if (lvl->tags)
1684 {
1685 fprintf (stderr, " tags:\t");
1686 i = 0;
1687 for (t = lvl->tags; t; t = TREE_CHAIN (t))
1688 {
1689 if (TREE_PURPOSE (t) == NULL_TREE)
1690 len = 3;
1691 else if (TREE_PURPOSE (t) == TYPE_IDENTIFIER (TREE_VALUE (t)))
1692 len = 2;
1693 else
1694 len = 4;
1695 i += len;
1696 if (i > 5)
1697 {
1698 fprintf (stderr, "\n\t");
1699 i = len;
1700 }
1701 if (TREE_PURPOSE (t) == NULL_TREE)
1702 {
1703 print_node_brief (stderr, "<unnamed-typedef", TREE_VALUE (t), 0);
1704 fprintf (stderr, ">");
1705 }
1706 else if (TREE_PURPOSE (t) == TYPE_IDENTIFIER (TREE_VALUE (t)))
1707 print_node_brief (stderr, "", TREE_VALUE (t), 0);
1708 else
1709 {
1710 print_node_brief (stderr, "<typedef", TREE_PURPOSE (t), 0);
1711 print_node_brief (stderr, "", TREE_VALUE (t), 0);
1712 fprintf (stderr, ">");
1713 }
1714 }
1715 if (i)
1716 fprintf (stderr, "\n");
1717 }
8d08fdba
MS
1718 if (lvl->class_shadowed)
1719 {
1720 fprintf (stderr, " class-shadowed:");
1721 for (t = lvl->class_shadowed; t; t = TREE_CHAIN (t))
1722 {
1723 fprintf (stderr, " %s ", IDENTIFIER_POINTER (TREE_PURPOSE (t)));
1724 }
1725 fprintf (stderr, "\n");
1726 }
1727 if (lvl->type_shadowed)
1728 {
1729 fprintf (stderr, " type-shadowed:");
1730 for (t = lvl->type_shadowed; t; t = TREE_CHAIN (t))
1731 {
8d08fdba 1732 fprintf (stderr, " %s ", IDENTIFIER_POINTER (TREE_PURPOSE (t)));
8d08fdba
MS
1733 }
1734 fprintf (stderr, "\n");
1735 }
1736}
1737
1738void
1739print_other_binding_stack (stack)
1740 struct binding_level *stack;
1741{
1742 struct binding_level *level;
1743 for (level = stack; level != global_binding_level; level = level->level_chain)
1744 {
1745 fprintf (stderr, "binding level ");
1746 fprintf (stderr, HOST_PTR_PRINTF, level);
1747 fprintf (stderr, "\n");
1748 print_binding_level (level);
1749 }
1750}
1751
1752void
1753print_binding_stack ()
1754{
1755 struct binding_level *b;
1756 fprintf (stderr, "current_binding_level=");
1757 fprintf (stderr, HOST_PTR_PRINTF, current_binding_level);
1758 fprintf (stderr, "\nclass_binding_level=");
1759 fprintf (stderr, HOST_PTR_PRINTF, class_binding_level);
1760 fprintf (stderr, "\nglobal_binding_level=");
1761 fprintf (stderr, HOST_PTR_PRINTF, global_binding_level);
1762 fprintf (stderr, "\n");
1763 if (class_binding_level)
1764 {
1765 for (b = class_binding_level; b; b = b->level_chain)
1766 if (b == current_binding_level)
1767 break;
1768 if (b)
1769 b = class_binding_level;
1770 else
1771 b = current_binding_level;
1772 }
1773 else
1774 b = current_binding_level;
1775 print_other_binding_stack (b);
1776 fprintf (stderr, "global:\n");
1777 print_binding_level (global_binding_level);
1778}
a9aedbc2 1779
2c73f9f5
ML
1780/* Namespace binding access routines: The namespace_bindings field of
1781 the identifier is polymorphic, with three possible values:
1782 NULL_TREE, a list of CPLUS_BINDINGS, or any other tree_node
1783 indicating the BINDING_VALUE of global_namespace. */
30394414 1784
2c73f9f5
ML
1785/* Check whether the a binding for the name to scope is known.
1786 Assumes that the bindings of the name are already a list
1787 of bindings. Returns the binding found, or NULL_TREE. */
1788
1789static tree
1790find_binding (name, scope)
30394414
JM
1791 tree name;
1792 tree scope;
1793{
2c73f9f5 1794 tree iter, prev = NULL_TREE;
3e3f722c
ML
1795
1796 scope = ORIGINAL_NAMESPACE (scope);
1797
30394414
JM
1798 for (iter = IDENTIFIER_NAMESPACE_BINDINGS (name); iter;
1799 iter = TREE_CHAIN (iter))
1800 {
1801 my_friendly_assert (TREE_CODE (iter) == CPLUS_BINDING, 374);
1802 if (BINDING_SCOPE (iter) == scope)
2c73f9f5
ML
1803 {
1804 /* Move binding found to the fron of the list, so
1805 subsequent lookups will find it faster. */
1806 if (prev)
1807 {
1808 TREE_CHAIN (prev) = TREE_CHAIN (iter);
1809 TREE_CHAIN (iter) = IDENTIFIER_NAMESPACE_BINDINGS (name);
1810 IDENTIFIER_NAMESPACE_BINDINGS (name) = iter;
1811 }
1812 return iter;
1813 }
1814 prev = iter;
30394414 1815 }
2c73f9f5
ML
1816 return NULL_TREE;
1817}
1818
1819/* Always returns a binding for name in scope. If the
1820 namespace_bindings is not a list, convert it to one first.
1821 If no binding is found, make a new one. */
1822
1823tree
1824binding_for_name (name, scope)
1825 tree name;
1826 tree scope;
1827{
1828 tree b = IDENTIFIER_NAMESPACE_BINDINGS (name);
1829 tree result;
3e3f722c
ML
1830
1831 scope = ORIGINAL_NAMESPACE (scope);
1832
2c73f9f5
ML
1833 if (b && TREE_CODE (b) != CPLUS_BINDING)
1834 {
1835 /* Get rid of optimization for global scope. */
1836 IDENTIFIER_NAMESPACE_BINDINGS (name) = NULL_TREE;
1837 BINDING_VALUE (binding_for_name (name, global_namespace)) = b;
1838 b = IDENTIFIER_NAMESPACE_BINDINGS (name);
1839 }
1840 if (b && (result = find_binding (name, scope)))
1841 return result;
1842 /* Not found, make a new permanent one. */
30394414 1843 push_obstacks (&permanent_obstack, &permanent_obstack);
2c73f9f5
ML
1844 result = make_node (CPLUS_BINDING);
1845 TREE_CHAIN (result) = b;
1846 IDENTIFIER_NAMESPACE_BINDINGS (name) = result;
1847 BINDING_SCOPE (result) = scope;
1848 BINDING_TYPE (result) = NULL_TREE;
1849 BINDING_VALUE (result) = NULL_TREE;
30394414 1850 pop_obstacks ();
2c73f9f5
ML
1851 return result;
1852}
1853
1854/* Return the binding value for name in scope, considering that
1855 namespace_binding may or may not be a list of CPLUS_BINDINGS. */
1856
1857tree
1858namespace_binding (name, scope)
1859 tree name;
1860 tree scope;
1861{
1862 tree b = IDENTIFIER_NAMESPACE_BINDINGS (name);
1863 if (b == NULL_TREE)
1864 return NULL_TREE;
cb0dbb9a
JM
1865 if (scope == NULL_TREE)
1866 scope = global_namespace;
2c73f9f5
ML
1867 if (TREE_CODE (b) != CPLUS_BINDING)
1868 return (scope == global_namespace) ? b : NULL_TREE;
1869 name = find_binding (name,scope);
1870 if (name == NULL_TREE)
1871 return name;
1872 return BINDING_VALUE (name);
1873}
1874
1875/* Set the binding value for name in scope. If modifying the binding
1876 of global_namespace is attempted, try to optimize it. */
1877
1878void
1879set_namespace_binding (name, scope, val)
1880 tree name;
1881 tree scope;
1882 tree val;
1883{
1884 tree b;
cb0dbb9a
JM
1885
1886 if (scope == NULL_TREE)
1887 scope = global_namespace;
1888
2c73f9f5
ML
1889 if (scope == global_namespace)
1890 {
1891 b = IDENTIFIER_NAMESPACE_BINDINGS (name);
1892 if (b == NULL_TREE || TREE_CODE (b) != CPLUS_BINDING)
1893 {
1894 IDENTIFIER_NAMESPACE_BINDINGS (name) = val;
1895 return;
1896 }
1897 }
1898 b = binding_for_name (name, scope);
1899 BINDING_VALUE (b) = val;
30394414
JM
1900}
1901
dff6b454
RK
1902/* Push into the scope of the NAME namespace. If NAME is NULL_TREE, then we
1903 select a name that is unique to this compilation unit. */
e92cc029 1904
a9aedbc2
MS
1905void
1906push_namespace (name)
1907 tree name;
1908{
b370501f 1909 tree d = NULL_TREE;
30394414
JM
1910 int need_new = 1;
1911 int implicit_use = 0;
2c73f9f5 1912 int global = 0;
30394414
JM
1913 if (!global_namespace)
1914 {
2c73f9f5 1915 /* This must be ::. */
30394414 1916 my_friendly_assert (name == get_identifier ("::"), 377);
2c73f9f5 1917 global = 1;
30394414
JM
1918 }
1919 else if (!name)
1920 {
3ab52652
ML
1921 /* The name of anonymous namespace is unique for the translation
1922 unit. */
0c8feefe
MM
1923 if (!anonymous_namespace_name)
1924 anonymous_namespace_name = get_file_function_name ('N');
1925 name = anonymous_namespace_name;
3ab52652
ML
1926 d = IDENTIFIER_NAMESPACE_VALUE (name);
1927 if (d)
1928 /* Reopening anonymous namespace. */
1929 need_new = 0;
30394414 1930 implicit_use = 1;
2c73f9f5
ML
1931 }
1932 else if (current_namespace == global_namespace
1933 && name == DECL_NAME (std_node))
1934 {
1935 in_std++;
1936 return;
1937 }
30394414
JM
1938 else
1939 {
2c73f9f5 1940 /* Check whether this is an extended namespace definition. */
30394414
JM
1941 d = IDENTIFIER_NAMESPACE_VALUE (name);
1942 if (d != NULL_TREE && TREE_CODE (d) == NAMESPACE_DECL)
3e3f722c
ML
1943 {
1944 need_new = 0;
1945 if (DECL_NAMESPACE_ALIAS (d))
1946 {
8251199e 1947 cp_error ("namespace alias `%D' not allowed here, assuming `%D'",
3e3f722c
ML
1948 d, DECL_NAMESPACE_ALIAS (d));
1949 d = DECL_NAMESPACE_ALIAS (d);
1950 }
1951 }
30394414 1952 }
6633d636 1953
30394414
JM
1954 if (need_new)
1955 {
2c73f9f5 1956 /* Make a new namespace, binding the name to it. */
6b57ac29 1957 d = build_lang_decl (NAMESPACE_DECL, name, void_type_node);
2c73f9f5
ML
1958 /* The global namespace is not pushed, and the global binding
1959 level is set elsewhere. */
1960 if (!global)
1961 {
1962 d = pushdecl (d);
1963 pushlevel (0);
1964 declare_namespace_level ();
1965 NAMESPACE_LEVEL (d) = current_binding_level;
1966 }
30394414 1967 }
2c73f9f5
ML
1968 else
1969 resume_binding_level (NAMESPACE_LEVEL (d));
1970
30394414
JM
1971 if (implicit_use)
1972 do_using_directive (d);
2c73f9f5 1973 /* Enter the name space. */
30394414 1974 current_namespace = d;
a9aedbc2
MS
1975}
1976
1977/* Pop from the scope of the current namespace. */
e92cc029 1978
a9aedbc2
MS
1979void
1980pop_namespace ()
1981{
2c73f9f5
ML
1982 if (current_namespace == global_namespace)
1983 {
1984 my_friendly_assert (in_std>0, 980421);
1985 in_std--;
1986 return;
1987 }
cb0dbb9a 1988 current_namespace = CP_DECL_CONTEXT (current_namespace);
2c73f9f5
ML
1989 /* The binding level is not popped, as it might be re-opened later. */
1990 suspend_binding_level ();
1991}
a9aedbc2 1992
2c73f9f5 1993/* Concatenate the binding levels of all namespaces. */
a9aedbc2 1994
2c73f9f5
ML
1995void
1996cat_namespace_levels()
1997{
1998 tree current;
1999 tree last;
2000 struct binding_level *b;
a9aedbc2 2001
2c73f9f5
ML
2002 last = NAMESPACE_LEVEL (global_namespace) -> names;
2003 /* The nested namespaces appear in the names list of their ancestors. */
2004 for (current = last; current; current = TREE_CHAIN (current))
a9aedbc2 2005 {
85c6cbaf
ML
2006 if (TREE_CODE (current) != NAMESPACE_DECL
2007 || DECL_NAMESPACE_ALIAS (current))
2c73f9f5
ML
2008 continue;
2009 if (!DECL_LANG_SPECIFIC (current))
a9aedbc2 2010 {
2c73f9f5
ML
2011 /* Hmm. std. */
2012 my_friendly_assert (current == std_node, 393);
2013 continue;
a9aedbc2 2014 }
2c73f9f5
ML
2015 b = NAMESPACE_LEVEL (current);
2016 while (TREE_CHAIN (last))
2017 last = TREE_CHAIN (last);
2018 TREE_CHAIN (last) = NAMESPACE_LEVEL (current) -> names;
a9aedbc2 2019 }
a9aedbc2 2020}
8d08fdba
MS
2021\f
2022/* Subroutines for reverting temporarily to top-level for instantiation
2023 of templates and such. We actually need to clear out the class- and
2024 local-value slots of all identifiers, so that only the global values
2025 are at all visible. Simply setting current_binding_level to the global
2026 scope isn't enough, because more binding levels may be pushed. */
2027struct saved_scope {
2028 struct binding_level *old_binding_level;
2029 tree old_bindings;
2c73f9f5 2030 tree old_namespace;
8d08fdba 2031 struct saved_scope *prev;
61a127b3
MM
2032 tree class_name, class_type;
2033 tree access_specifier;
2034 tree function_decl;
8d08fdba 2035 struct binding_level *class_bindings;
51c184be
MS
2036 tree *lang_base, *lang_stack, lang_name;
2037 int lang_stacksize;
5566b478
MS
2038 int minimal_parse_mode;
2039 tree last_function_parms;
e76a2646 2040 tree template_parms;
5156628f 2041 HOST_WIDE_INT processing_template_decl;
a50f0918 2042 tree previous_class_type, previous_class_values;
e1467ff2
MM
2043 int processing_specialization;
2044 int processing_explicit_instantiation;
8d08fdba
MS
2045};
2046static struct saved_scope *current_saved_scope;
8d08fdba 2047
78957a2a
JM
2048/* A chain of the binding vecs created by store_bindings. We create a
2049 whole bunch of these during compilation, on permanent_obstack, so we
2050 can't just throw them away. */
2051static tree free_binding_vecs;
2052
e92cc029 2053static tree
45537677
MS
2054store_bindings (names, old_bindings)
2055 tree names, old_bindings;
2056{
2057 tree t;
2058 for (t = names; t; t = TREE_CHAIN (t))
2059 {
2060 tree binding, t1, id;
2061
2062 if (TREE_CODE (t) == TREE_LIST)
2063 id = TREE_PURPOSE (t);
2064 else
2065 id = DECL_NAME (t);
2066
f181d4ae
MM
2067 if (!id
2068 /* Note that we may have an IDENTIFIER_CLASS_VALUE even when
2069 we have no IDENTIFIER_BINDING if we have left the class
2070 scope, but cached the class-level declarations. */
2071 || !(IDENTIFIER_BINDING (id) || IDENTIFIER_CLASS_VALUE (id)))
45537677
MS
2072 continue;
2073
2074 for (t1 = old_bindings; t1; t1 = TREE_CHAIN (t1))
2075 if (TREE_VEC_ELT (t1, 0) == id)
2076 goto skip_it;
78957a2a
JM
2077
2078 if (free_binding_vecs)
2079 {
2080 binding = free_binding_vecs;
2081 free_binding_vecs = TREE_CHAIN (free_binding_vecs);
2082 }
2083 else
2084 binding = make_tree_vec (4);
2085
45537677
MS
2086 if (id)
2087 {
2088 my_friendly_assert (TREE_CODE (id) == IDENTIFIER_NODE, 135);
2089 TREE_VEC_ELT (binding, 0) = id;
2c73f9f5 2090 TREE_VEC_ELT (binding, 1) = REAL_IDENTIFIER_TYPE_VALUE (id);
f181d4ae 2091 TREE_VEC_ELT (binding, 2) = IDENTIFIER_BINDING (id);
45537677 2092 TREE_VEC_ELT (binding, 3) = IDENTIFIER_CLASS_VALUE (id);
f181d4ae 2093 IDENTIFIER_BINDING (id) = NULL_TREE;
45537677
MS
2094 IDENTIFIER_CLASS_VALUE (id) = NULL_TREE;
2095 }
2096 TREE_CHAIN (binding) = old_bindings;
2097 old_bindings = binding;
2098 skip_it:
2099 ;
2100 }
2101 return old_bindings;
2102}
2103
8d08fdba 2104void
5566b478
MS
2105maybe_push_to_top_level (pseudo)
2106 int pseudo;
8d08fdba 2107{
51c184be 2108 extern int current_lang_stacksize;
beb53fb8
JM
2109 struct saved_scope *s
2110 = (struct saved_scope *) xmalloc (sizeof (struct saved_scope));
5566b478 2111 struct binding_level *b = inner_binding_level;
8d08fdba
MS
2112 tree old_bindings = NULL_TREE;
2113
e349ee73
MS
2114 if (current_function_decl)
2115 push_cp_function_context (NULL_TREE);
2116
a50f0918
MS
2117 if (previous_class_type)
2118 old_bindings = store_bindings (previous_class_values, old_bindings);
2119
8d08fdba
MS
2120 /* Have to include global_binding_level, because class-level decls
2121 aren't listed anywhere useful. */
2122 for (; b; b = b->level_chain)
2123 {
2124 tree t;
2125
2c73f9f5
ML
2126 /* Template IDs are inserted into the global level. If they were
2127 inserted into namespace level, finish_file wouldn't find them
2128 when doing pending instantiations. Therefore, don't stop at
2129 namespace level, but continue until :: . */
5566b478
MS
2130 if (b == global_binding_level || (pseudo && b->pseudo_global))
2131 break;
8d08fdba 2132
45537677 2133 old_bindings = store_bindings (b->names, old_bindings);
cffa8729 2134 /* We also need to check class_shadowed to save class-level type
45537677
MS
2135 bindings, since pushclass doesn't fill in b->names. */
2136 if (b->parm_flag == 2)
cffa8729 2137 old_bindings = store_bindings (b->class_shadowed, old_bindings);
8d08fdba 2138
8d08fdba
MS
2139 /* Unwind type-value slots back to top level. */
2140 for (t = b->type_shadowed; t; t = TREE_CHAIN (t))
2141 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (t), TREE_VALUE (t));
2142 }
8d08fdba
MS
2143
2144 s->old_binding_level = current_binding_level;
5566b478 2145 current_binding_level = b;
8d08fdba 2146
2c73f9f5 2147 s->old_namespace = current_namespace;
8d08fdba
MS
2148 s->class_name = current_class_name;
2149 s->class_type = current_class_type;
61a127b3 2150 s->access_specifier = current_access_specifier;
8d08fdba
MS
2151 s->function_decl = current_function_decl;
2152 s->class_bindings = class_binding_level;
51c184be
MS
2153 s->lang_stack = current_lang_stack;
2154 s->lang_base = current_lang_base;
2155 s->lang_stacksize = current_lang_stacksize;
2156 s->lang_name = current_lang_name;
5566b478
MS
2157 s->minimal_parse_mode = minimal_parse_mode;
2158 s->last_function_parms = last_function_parms;
e76a2646 2159 s->template_parms = current_template_parms;
5156628f 2160 s->processing_template_decl = processing_template_decl;
a50f0918
MS
2161 s->previous_class_type = previous_class_type;
2162 s->previous_class_values = previous_class_values;
e1467ff2
MM
2163 s->processing_specialization = processing_specialization;
2164 s->processing_explicit_instantiation = processing_explicit_instantiation;
e349ee73 2165
5f34005f 2166 current_class_name = current_class_type = NULL_TREE;
8d08fdba
MS
2167 current_function_decl = NULL_TREE;
2168 class_binding_level = (struct binding_level *)0;
51c184be
MS
2169 current_lang_stacksize = 10;
2170 current_lang_stack = current_lang_base
2171 = (tree *) xmalloc (current_lang_stacksize * sizeof (tree));
2172 current_lang_name = lang_name_cplusplus;
2173 strict_prototype = strict_prototypes_lang_cplusplus;
2174 named_labels = NULL_TREE;
120722ac 2175 shadowed_labels = NULL_TREE;
5566b478 2176 minimal_parse_mode = 0;
a50f0918 2177 previous_class_type = previous_class_values = NULL_TREE;
e1467ff2
MM
2178 processing_specialization = 0;
2179 processing_explicit_instantiation = 0;
eae97bd9
MM
2180 current_template_parms = NULL_TREE;
2181 processing_template_decl = 0;
2c73f9f5 2182 current_namespace = global_namespace;
8d08fdba
MS
2183
2184 s->prev = current_saved_scope;
2185 s->old_bindings = old_bindings;
2186 current_saved_scope = s;
5566b478
MS
2187
2188 push_obstacks (&permanent_obstack, &permanent_obstack);
2189}
2190
2191void
2192push_to_top_level ()
2193{
2194 maybe_push_to_top_level (0);
8d08fdba
MS
2195}
2196
2197void
2198pop_from_top_level ()
2199{
51c184be 2200 extern int current_lang_stacksize;
8d08fdba
MS
2201 struct saved_scope *s = current_saved_scope;
2202 tree t;
2203
e76a2646 2204 /* Clear out class-level bindings cache. */
8d08fdba 2205 if (previous_class_type)
e76a2646
MS
2206 {
2207 popclass (-1);
2208 previous_class_type = NULL_TREE;
2209 }
8d08fdba 2210
5566b478
MS
2211 pop_obstacks ();
2212
8d08fdba
MS
2213 current_binding_level = s->old_binding_level;
2214 current_saved_scope = s->prev;
78957a2a 2215 for (t = s->old_bindings; t; )
8d08fdba 2216 {
78957a2a 2217 tree save = t;
8d08fdba
MS
2218 tree id = TREE_VEC_ELT (t, 0);
2219 if (id)
2220 {
2c73f9f5 2221 SET_IDENTIFIER_TYPE_VALUE (id, TREE_VEC_ELT (t, 1));
f181d4ae 2222 IDENTIFIER_BINDING (id) = TREE_VEC_ELT (t, 2);
8d08fdba
MS
2223 IDENTIFIER_CLASS_VALUE (id) = TREE_VEC_ELT (t, 3);
2224 }
78957a2a
JM
2225 t = TREE_CHAIN (t);
2226 TREE_CHAIN (save) = free_binding_vecs;
2227 free_binding_vecs = save;
8d08fdba 2228 }
2c73f9f5 2229 current_namespace = s->old_namespace;
8d08fdba
MS
2230 current_class_name = s->class_name;
2231 current_class_type = s->class_type;
61a127b3 2232 current_access_specifier = s->access_specifier;
8d08fdba
MS
2233 current_function_decl = s->function_decl;
2234 class_binding_level = s->class_bindings;
51c184be
MS
2235 free (current_lang_base);
2236 current_lang_base = s->lang_base;
2237 current_lang_stack = s->lang_stack;
2238 current_lang_name = s->lang_name;
2239 current_lang_stacksize = s->lang_stacksize;
2240 if (current_lang_name == lang_name_cplusplus)
2241 strict_prototype = strict_prototypes_lang_cplusplus;
2242 else if (current_lang_name == lang_name_c)
2243 strict_prototype = strict_prototypes_lang_c;
5566b478
MS
2244 minimal_parse_mode = s->minimal_parse_mode;
2245 last_function_parms = s->last_function_parms;
e76a2646 2246 current_template_parms = s->template_parms;
5156628f 2247 processing_template_decl = s->processing_template_decl;
a50f0918
MS
2248 previous_class_type = s->previous_class_type;
2249 previous_class_values = s->previous_class_values;
e1467ff2
MM
2250 processing_specialization = s->processing_specialization;
2251 processing_explicit_instantiation = s->processing_explicit_instantiation;
51c184be 2252
8d08fdba 2253 free (s);
e349ee73
MS
2254
2255 if (current_function_decl)
2256 pop_cp_function_context (NULL_TREE);
8d08fdba
MS
2257}
2258\f
2259/* Push a definition of struct, union or enum tag "name".
2260 into binding_level "b". "type" should be the type node,
2261 We assume that the tag "name" is not already defined.
2262
2263 Note that the definition may really be just a forward reference.
2264 In that case, the TYPE_SIZE will be a NULL_TREE.
2265
e92cc029 2266 C++ gratuitously puts all these tags in the name space. */
8d08fdba
MS
2267
2268/* When setting the IDENTIFIER_TYPE_VALUE field of an identifier ID,
2269 record the shadowed value for this binding contour. TYPE is
2270 the type that ID maps to. */
2271
2272static void
2273set_identifier_type_value_with_scope (id, type, b)
2274 tree id;
2275 tree type;
2276 struct binding_level *b;
2277{
2c73f9f5 2278 if (!b->namespace_p)
8d08fdba 2279 {
2c73f9f5
ML
2280 /* Shadow the marker, not the real thing, so that the marker
2281 gets restored later. */
2282 tree old_type_value = REAL_IDENTIFIER_TYPE_VALUE (id);
8d08fdba
MS
2283 b->type_shadowed
2284 = tree_cons (id, old_type_value, b->type_shadowed);
2285 }
2c73f9f5
ML
2286 else
2287 {
2288 tree binding = binding_for_name (id, current_namespace);
2289 BINDING_TYPE (binding) = type;
2290 /* Store marker instead of real type. */
2291 type = global_type_node;
2292 }
8d08fdba
MS
2293 SET_IDENTIFIER_TYPE_VALUE (id, type);
2294}
2295
e92cc029 2296/* As set_identifier_type_value_with_scope, but using inner_binding_level. */
8d08fdba
MS
2297
2298void
2299set_identifier_type_value (id, type)
2300 tree id;
2301 tree type;
2302{
2303 set_identifier_type_value_with_scope (id, type, inner_binding_level);
2304}
2305
2c73f9f5
ML
2306/* Return the type associated with id. */
2307
2308tree
2309identifier_type_value (id)
2310 tree id;
2311{
2312 /* There is no type with that name, anywhere. */
2313 if (REAL_IDENTIFIER_TYPE_VALUE (id) == NULL_TREE)
2314 return NULL_TREE;
2315 /* This is not the type marker, but the real thing. */
2316 if (REAL_IDENTIFIER_TYPE_VALUE (id) != global_type_node)
2317 return REAL_IDENTIFIER_TYPE_VALUE (id);
2318 /* Have to search for it. It must be on the global level, now.
2319 Ask lookup_name not to return non-types. */
3e3f722c 2320 id = lookup_name_real (id, 2, 1, 0);
2c73f9f5
ML
2321 if (id)
2322 return TREE_TYPE (id);
2323 return NULL_TREE;
2324}
2325
a9aedbc2
MS
2326/* Pop off extraneous binding levels left over due to syntax errors.
2327
2328 We don't pop past namespaces, as they might be valid. */
e92cc029 2329
8926095f
MS
2330void
2331pop_everything ()
2332{
2333#ifdef DEBUG_CP_BINDING_LEVELS
2334 fprintf (stderr, "XXX entering pop_everything ()\n");
2335#endif
a9aedbc2 2336 while (! toplevel_bindings_p () && ! pseudo_global_level_p ())
8926095f
MS
2337 {
2338 if (class_binding_level)
2339 pop_nested_class (1);
2340 else
2341 poplevel (0, 0, 0);
2342 }
2343#ifdef DEBUG_CP_BINDING_LEVELS
2344 fprintf (stderr, "XXX leaving pop_everything ()\n");
2345#endif
2346}
2347
39c01e4c
MM
2348/* The type TYPE is being declared. If it is a class template, or a
2349 specialization of a class template, do any processing required and
2350 perform error-checking. If IS_FRIEND is non-zero, this TYPE is
2351 being declared a friend. B is the binding level at which this TYPE
2352 should be bound.
2353
2354 Returns the TYPE_DECL for TYPE, which may have been altered by this
2355 processing. */
2356
2357static tree
2358maybe_process_template_type_declaration (type, globalize, b)
2359 tree type;
2360 int globalize;
2361 struct binding_level* b;
2362{
2363 tree decl = TYPE_NAME (type);
2364
2365 if (processing_template_parmlist)
2366 /* You can't declare a new template type in a template parameter
2367 list. But, you can declare a non-template type:
2368
2369 template <class A*> struct S;
2370
2371 is a forward-declaration of `A'. */
2372 ;
2373 else
2374 {
2375 maybe_check_template_type (type);
2376
ed44da02
MM
2377 my_friendly_assert (IS_AGGR_TYPE (type)
2378 || TREE_CODE (type) == ENUMERAL_TYPE, 0);
2379
2380
2381 if (/* If !GLOBALIZE then we are looking at a definition.
2382 It may not be a primary template. (For example, in:
39c01e4c 2383
ed44da02
MM
2384 template <class T>
2385 struct S1 { class S2 {}; }
39c01e4c 2386
ed44da02
MM
2387 we have to push_template_decl for S2.) */
2388 (processing_template_decl && !globalize)
2389 /* If we are declaring a friend template class, we will
2390 have GLOBALIZE set, since something like:
39c01e4c 2391
ed44da02
MM
2392 template <class T>
2393 struct S1 {
2394 template <class U>
2395 friend class S2;
2396 };
39c01e4c 2397
ed44da02
MM
2398 declares S2 to be at global scope. */
2399 || PROCESSING_REAL_TEMPLATE_DECL_P ())
39c01e4c
MM
2400 {
2401 /* This may change after the call to
2402 push_template_decl_real, but we want the original value. */
2403 tree name = DECL_NAME (decl);
2404
2405 decl = push_template_decl_real (decl, globalize);
2406 /* If the current binding level is the binding level for the
2407 template parameters (see the comment in
2408 begin_template_parm_list) and the enclosing level is a class
2409 scope, and we're not looking at a friend, push the
2410 declaration of the member class into the class scope. In the
2411 friend case, push_template_decl will already have put the
2412 friend into global scope, if appropriate. */
ed44da02
MM
2413 if (TREE_CODE (type) != ENUMERAL_TYPE
2414 && !globalize && b->pseudo_global
39c01e4c
MM
2415 && b->level_chain->parm_flag == 2)
2416 {
2417 pushdecl_with_scope (CLASSTYPE_TI_TEMPLATE (type),
2418 b->level_chain);
61a127b3 2419 finish_member_declaration (CLASSTYPE_TI_TEMPLATE (type));
39c01e4c
MM
2420 /* Put this tag on the list of tags for the class, since
2421 that won't happen below because B is not the class
2422 binding level, but is instead the pseudo-global level. */
2423 b->level_chain->tags =
2424 saveable_tree_cons (name, type, b->level_chain->tags);
2425 TREE_NONLOCAL_FLAG (type) = 1;
2426 if (TYPE_SIZE (current_class_type) == NULL_TREE)
2427 CLASSTYPE_TAGS (current_class_type) = b->level_chain->tags;
2428 }
2429 }
2430 }
2431
2432 return decl;
2433}
2434
8d08fdba 2435/* Push a tag name NAME for struct/class/union/enum type TYPE.
6757edfe 2436 Normally put it into the inner-most non-tag-transparent scope,
8d08fdba 2437 but if GLOBALIZE is true, put it in the inner-most non-class scope.
e92cc029 2438 The latter is needed for implicit declarations. */
8d08fdba
MS
2439
2440void
2441pushtag (name, type, globalize)
2442 tree name, type;
2443 int globalize;
2444{
2445 register struct binding_level *b;
7177d104 2446 tree context = 0;
2986ae00 2447 tree c_decl = 0;
8d08fdba
MS
2448
2449 b = inner_binding_level;
2450 while (b->tag_transparent
2451 || (globalize && b->parm_flag == 2))
2452 b = b->level_chain;
2453
a9aedbc2 2454 if (toplevel_bindings_p ())
8d08fdba
MS
2455 b->tags = perm_tree_cons (name, type, b->tags);
2456 else
2457 b->tags = saveable_tree_cons (name, type, b->tags);
2458
2459 if (name)
2460 {
7177d104 2461 context = type ? TYPE_CONTEXT (type) : NULL_TREE;
297dcfb3
MM
2462 if (! context)
2463 {
2464 tree cs = current_scope ();
2465
2466 if (! globalize)
2467 context = cs;
2468 else if (cs != NULL_TREE
2469 && TREE_CODE_CLASS (TREE_CODE (cs)) == 't')
2470 /* When declaring a friend class of a local class, we want
2471 to inject the newly named class into the scope
2472 containing the local class, not the namespace scope. */
2473 context = hack_decl_function_context (get_type_decl (cs));
2474 }
7177d104 2475 if (context)
2986ae00 2476 c_decl = TREE_CODE (context) == FUNCTION_DECL
e1cd6e56 2477 ? context : TYPE_MAIN_DECL (context);
8d08fdba 2478
2c73f9f5
ML
2479 if (!context)
2480 context = current_namespace;
2481
8d08fdba 2482 /* Do C++ gratuitous typedefing. */
db5ae43f 2483 if (IDENTIFIER_TYPE_VALUE (name) != type)
8d08fdba 2484 {
93cdc044
JM
2485 register tree d = NULL_TREE;
2486 int newdecl = 0, in_class = 0;
8d08fdba 2487
93cdc044
JM
2488 if ((b->pseudo_global && b->level_chain->parm_flag == 2)
2489 || b->parm_flag == 2)
2490 in_class = 1;
8d08fdba 2491 else
93cdc044
JM
2492 d = lookup_nested_type (type, c_decl);
2493
2494 if (d == NULL_TREE)
8d08fdba 2495 {
8d08fdba 2496 newdecl = 1;
a0a33927 2497 d = build_decl (TYPE_DECL, name, type);
eff71ab0
PB
2498 if (current_lang_name == lang_name_java)
2499 TYPE_FOR_JAVA (type) = 1;
00595019 2500 SET_DECL_ARTIFICIAL (d);
93cdc044
JM
2501 if (! in_class)
2502 set_identifier_type_value_with_scope (name, type, b);
2503 }
2504 else
2505 d = TYPE_MAIN_DECL (d);
2506
2507 TYPE_NAME (type) = d;
cb0dbb9a 2508 DECL_CONTEXT (d) = FROB_CONTEXT (context);
e1cd6e56 2509
39c01e4c
MM
2510 d = maybe_process_template_type_declaration (type,
2511 globalize, b);
93cdc044
JM
2512
2513 if (b->parm_flag == 2)
61a127b3
MM
2514 {
2515 pushdecl_class_level (d);
2516 if (newdecl && !PROCESSING_REAL_TEMPLATE_DECL_P ())
2517 /* Put this TYPE_DECL on the TYPE_FIELDS list for the
2518 class. But if it's a member template class, we
2519 want the TEMPLATE_DECL, not the TYPE_DECL, so this
2520 is done later. */
2521 finish_member_declaration (d);
2522 }
93cdc044
JM
2523 else
2524 d = pushdecl_with_scope (d, b);
2525
8ccc31eb 2526 if (newdecl)
8d08fdba 2527 {
d2e5ee5c
MS
2528 if (ANON_AGGRNAME_P (name))
2529 DECL_IGNORED_P (d) = 1;
8ccc31eb 2530
5566b478 2531 TYPE_CONTEXT (type) = DECL_CONTEXT (d);
1f06b267 2532 DECL_ASSEMBLER_NAME (d) = DECL_NAME (d);
e4a84209
MM
2533 if (!uses_template_parms (type))
2534 DECL_ASSEMBLER_NAME (d)
2535 = get_identifier (build_overload_name (type, 1, 1));
8d08fdba 2536 }
8d08fdba
MS
2537 }
2538 if (b->parm_flag == 2)
2539 {
2540 TREE_NONLOCAL_FLAG (type) = 1;
2541 if (TYPE_SIZE (current_class_type) == NULL_TREE)
2542 CLASSTYPE_TAGS (current_class_type) = b->tags;
2543 }
2544 }
2545
2546 if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL)
2547 /* Use the canonical TYPE_DECL for this node. */
2548 TYPE_STUB_DECL (type) = TYPE_NAME (type);
2549 else
2550 {
2551 /* Create a fake NULL-named TYPE_DECL node whose TREE_TYPE
2552 will be the tagged type we just added to the current
2553 binding level. This fake NULL-named TYPE_DECL node helps
2554 dwarfout.c to know when it needs to output a
2555 representation of a tagged type, and it also gives us a
2556 convenient place to record the "scope start" address for
2557 the tagged type. */
2558
8d08fdba 2559 tree d = build_decl (TYPE_DECL, NULL_TREE, type);
8d08fdba
MS
2560 TYPE_STUB_DECL (type) = pushdecl_with_scope (d, b);
2561 }
2562}
2563
2564/* Counter used to create anonymous type names. */
e92cc029 2565
8d08fdba
MS
2566static int anon_cnt = 0;
2567
2568/* Return an IDENTIFIER which can be used as a name for
2569 anonymous structs and unions. */
e92cc029 2570
8d08fdba
MS
2571tree
2572make_anon_name ()
2573{
2574 char buf[32];
2575
2576 sprintf (buf, ANON_AGGRNAME_FORMAT, anon_cnt++);
2577 return get_identifier (buf);
2578}
2579
2580/* Clear the TREE_PURPOSE slot of tags which have anonymous typenames.
2581 This keeps dbxout from getting confused. */
e92cc029 2582
8d08fdba
MS
2583void
2584clear_anon_tags ()
2585{
2586 register struct binding_level *b;
2587 register tree tags;
2588 static int last_cnt = 0;
2589
2590 /* Fast out if no new anon names were declared. */
2591 if (last_cnt == anon_cnt)
2592 return;
2593
2594 b = current_binding_level;
2595 while (b->tag_transparent)
2596 b = b->level_chain;
2597 tags = b->tags;
2598 while (tags)
2599 {
2600 /* A NULL purpose means we have already processed all tags
2601 from here to the end of the list. */
2602 if (TREE_PURPOSE (tags) == NULL_TREE)
2603 break;
2604 if (ANON_AGGRNAME_P (TREE_PURPOSE (tags)))
2605 TREE_PURPOSE (tags) = NULL_TREE;
2606 tags = TREE_CHAIN (tags);
2607 }
2608 last_cnt = anon_cnt;
2609}
2610\f
2611/* Subroutine of duplicate_decls: return truthvalue of whether
2612 or not types of these decls match.
2613
2614 For C++, we must compare the parameter list so that `int' can match
2615 `int&' in a parameter position, but `int&' is not confused with
2616 `const int&'. */
e92cc029 2617
6060a796 2618int
8d08fdba
MS
2619decls_match (newdecl, olddecl)
2620 tree newdecl, olddecl;
2621{
2622 int types_match;
2623
6b4b3deb
MM
2624 if (TREE_CODE (newdecl) != TREE_CODE (olddecl))
2625 /* If the two DECLs are not even the same kind of thing, we're not
2626 interested in their types. */
2627 return 0;
2628
2629 if (TREE_CODE (newdecl) == FUNCTION_DECL)
8d08fdba
MS
2630 {
2631 tree f1 = TREE_TYPE (newdecl);
2632 tree f2 = TREE_TYPE (olddecl);
2633 tree p1 = TYPE_ARG_TYPES (f1);
2634 tree p2 = TYPE_ARG_TYPES (f2);
2635
c5a6fc45
JM
2636 if (DECL_REAL_CONTEXT (newdecl) != DECL_REAL_CONTEXT (olddecl)
2637 && ! (DECL_LANGUAGE (newdecl) == lang_c
2638 && DECL_LANGUAGE (olddecl) == lang_c))
2639 return 0;
2640
8d08fdba
MS
2641 /* When we parse a static member function definition,
2642 we put together a FUNCTION_DECL which thinks its type
2643 is METHOD_TYPE. Change that to FUNCTION_TYPE, and
2644 proceed. */
2645 if (TREE_CODE (f1) == METHOD_TYPE && DECL_STATIC_FUNCTION_P (olddecl))
700f8a87 2646 revert_static_member_fn (&newdecl, &f1, &p1);
8d08fdba
MS
2647 else if (TREE_CODE (f2) == METHOD_TYPE
2648 && DECL_STATIC_FUNCTION_P (newdecl))
700f8a87 2649 revert_static_member_fn (&olddecl, &f2, &p2);
8d08fdba
MS
2650
2651 /* Here we must take care of the case where new default
2652 parameters are specified. Also, warn if an old
2653 declaration becomes ambiguous because default
2654 parameters may cause the two to be ambiguous. */
2655 if (TREE_CODE (f1) != TREE_CODE (f2))
2656 {
2657 if (TREE_CODE (f1) == OFFSET_TYPE)
8251199e 2658 cp_compiler_error ("`%D' redeclared as member function", newdecl);
8d08fdba 2659 else
8251199e 2660 cp_compiler_error ("`%D' redeclared as non-member function", newdecl);
8d08fdba
MS
2661 return 0;
2662 }
2663
3bfdc719 2664 if (same_type_p (TREE_TYPE (f1), TREE_TYPE (f2)))
8926095f 2665 {
a28e3c7f 2666 if (! strict_prototypes_lang_c && DECL_LANGUAGE (olddecl) == lang_c
8926095f 2667 && p2 == NULL_TREE)
a28e3c7f
MS
2668 {
2669 types_match = self_promoting_args_p (p1);
2670 if (p1 == void_list_node)
2671 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
2672 }
2673 else if (!strict_prototypes_lang_c && DECL_LANGUAGE (olddecl)==lang_c
2674 && DECL_LANGUAGE (newdecl) == lang_c && p1 == NULL_TREE)
2675 {
2676 types_match = self_promoting_args_p (p2);
2677 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
2678 }
8926095f 2679 else
91063b51 2680 types_match = compparms (p1, p2);
8926095f 2681 }
8d08fdba
MS
2682 else
2683 types_match = 0;
2684 }
6b4b3deb 2685 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
51c184be 2686 {
f84b4be9
JM
2687 if (!comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
2688 DECL_TEMPLATE_PARMS (olddecl)))
2689 return 0;
2690
2691 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
2692 types_match = 1;
2693 else
2694 types_match = decls_match (DECL_TEMPLATE_RESULT (olddecl),
2695 DECL_TEMPLATE_RESULT (newdecl));
51c184be 2696 }
8d08fdba
MS
2697 else
2698 {
2699 if (TREE_TYPE (newdecl) == error_mark_node)
2700 types_match = TREE_TYPE (olddecl) == error_mark_node;
2701 else if (TREE_TYPE (olddecl) == NULL_TREE)
2702 types_match = TREE_TYPE (newdecl) == NULL_TREE;
a0a33927
MS
2703 else if (TREE_TYPE (newdecl) == NULL_TREE)
2704 types_match = 0;
8d08fdba 2705 else
01240200 2706 types_match = comptypes (TREE_TYPE (newdecl),
3bfdc719
MM
2707 TREE_TYPE (olddecl),
2708 COMPARE_REDECLARATION);
8d08fdba
MS
2709 }
2710
2711 return types_match;
2712}
2713
2714/* If NEWDECL is `static' and an `extern' was seen previously,
2715 warn about it. (OLDDECL may be NULL_TREE; NAME contains
2716 information about previous usage as an `extern'.)
2717
2718 Note that this does not apply to the C++ case of declaring
2719 a variable `extern const' and then later `const'.
2720
8d08fdba
MS
2721 Don't complain about built-in functions, since they are beyond
2722 the user's control. */
2723
2724static void
2725warn_extern_redeclared_static (newdecl, olddecl)
2726 tree newdecl, olddecl;
2727{
2728 tree name;
2729
8251199e
JM
2730 static char *explicit_extern_static_warning
2731 = "`%D' was declared `extern' and later `static'";
2732 static char *implicit_extern_static_warning
2733 = "`%D' was declared implicitly `extern' and later `static'";
2734
d22c8596 2735 if (TREE_CODE (newdecl) == TYPE_DECL)
8d08fdba
MS
2736 return;
2737
2738 name = DECL_ASSEMBLER_NAME (newdecl);
faae18ab 2739 if (TREE_PUBLIC (name) && DECL_THIS_STATIC (newdecl))
8d08fdba
MS
2740 {
2741 /* It's okay to redeclare an ANSI built-in function as static,
2742 or to declare a non-ANSI built-in function as anything. */
2743 if (! (TREE_CODE (newdecl) == FUNCTION_DECL
2744 && olddecl != NULL_TREE
2745 && TREE_CODE (olddecl) == FUNCTION_DECL
2746 && (DECL_BUILT_IN (olddecl)
2747 || DECL_BUILT_IN_NONANSI (olddecl))))
2748 {
a9aedbc2 2749 cp_pedwarn (IDENTIFIER_IMPLICIT_DECL (name)
8251199e
JM
2750 ? implicit_extern_static_warning
2751 : explicit_extern_static_warning, newdecl);
8d08fdba 2752 if (olddecl != NULL_TREE)
8251199e 2753 cp_pedwarn_at ("previous declaration of `%D'", olddecl);
8d08fdba
MS
2754 }
2755 }
2756}
2757
2758/* Handle when a new declaration NEWDECL has the same name as an old
2759 one OLDDECL in the same binding contour. Prints an error message
2760 if appropriate.
2761
2762 If safely possible, alter OLDDECL to look like NEWDECL, and return 1.
2763 Otherwise, return 0. */
2764
51c184be 2765int
8d08fdba 2766duplicate_decls (newdecl, olddecl)
824b9a4c 2767 tree newdecl, olddecl;
8d08fdba
MS
2768{
2769 extern struct obstack permanent_obstack;
2770 unsigned olddecl_uid = DECL_UID (olddecl);
2771 int olddecl_friend = 0, types_match = 0;
0b60dfe3 2772 int new_defines_function = 0;
5566b478
MS
2773
2774 if (newdecl == olddecl)
2775 return 1;
8d08fdba 2776
8926095f 2777 types_match = decls_match (newdecl, olddecl);
8d08fdba 2778
8d08fdba
MS
2779 /* If either the type of the new decl or the type of the old decl is an
2780 error_mark_node, then that implies that we have already issued an
2781 error (earlier) for some bogus type specification, and in that case,
2782 it is rather pointless to harass the user with yet more error message
0b60dfe3 2783 about the same declaration, so just pretend the types match here. */
bd6dd845
MS
2784 if (TREE_TYPE (newdecl) == error_mark_node
2785 || TREE_TYPE (olddecl) == error_mark_node)
8d08fdba 2786 types_match = 1;
0b60dfe3
BK
2787
2788 /* Check for redeclaration and other discrepancies. */
d22c8596
MS
2789 if (TREE_CODE (olddecl) == FUNCTION_DECL
2790 && DECL_ARTIFICIAL (olddecl)
2791 && (DECL_BUILT_IN (olddecl) || DECL_BUILT_IN_NONANSI (olddecl)))
8d08fdba
MS
2792 {
2793 /* If you declare a built-in or predefined function name as static,
a4443a08
MS
2794 the old definition is overridden, but optionally warn this was a
2795 bad choice of name. Ditto for overloads. */
893de33c 2796 if (! TREE_PUBLIC (newdecl)
a4443a08
MS
2797 || (TREE_CODE (newdecl) == FUNCTION_DECL
2798 && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl)))
2799 {
2800 if (warn_shadow)
8251199e 2801 cp_warning ("shadowing %s function `%#D'",
a4443a08
MS
2802 DECL_BUILT_IN (olddecl) ? "built-in" : "library",
2803 olddecl);
2804 /* Discard the old built-in function. */
2805 return 0;
2806 }
2807 else if (! types_match)
8d08fdba 2808 {
a4443a08
MS
2809 if (TREE_CODE (newdecl) != FUNCTION_DECL)
2810 {
2811 /* If the built-in is not ansi, then programs can override
2812 it even globally without an error. */
2813 if (! DECL_BUILT_IN (olddecl))
8251199e 2814 cp_warning ("library function `%#D' redeclared as non-function `%#D'",
a4443a08
MS
2815 olddecl, newdecl);
2816 else
2817 {
8251199e
JM
2818 cp_error ("declaration of `%#D'", newdecl);
2819 cp_error ("conflicts with built-in declaration `%#D'",
a4443a08
MS
2820 olddecl);
2821 }
2822 return 0;
2823 }
2824
8251199e
JM
2825 cp_warning ("declaration of `%#D'", newdecl);
2826 cp_warning ("conflicts with built-in declaration `%#D'",
8d08fdba 2827 olddecl);
8d08fdba 2828 }
39211cd5
MS
2829 }
2830 else if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
2831 {
9ed182dc
JM
2832 if ((TREE_CODE (olddecl) == TYPE_DECL && DECL_ARTIFICIAL (olddecl)
2833 && TREE_CODE (newdecl) != TYPE_DECL
2834 && ! (TREE_CODE (newdecl) == TEMPLATE_DECL
2835 && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL))
2836 || (TREE_CODE (newdecl) == TYPE_DECL && DECL_ARTIFICIAL (newdecl)
2837 && TREE_CODE (olddecl) != TYPE_DECL
2838 && ! (TREE_CODE (olddecl) == TEMPLATE_DECL
2839 && (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl))
2840 == TYPE_DECL))))
2841 {
2842 /* We do nothing special here, because C++ does such nasty
2843 things with TYPE_DECLs. Instead, just let the TYPE_DECL
2844 get shadowed, and know that if we need to find a TYPE_DECL
2845 for a given name, we can look in the IDENTIFIER_TYPE_VALUE
2846 slot of the identifier. */
2847 return 0;
2848 }
2849
39211cd5 2850 if ((TREE_CODE (newdecl) == FUNCTION_DECL
5566b478 2851 && DECL_FUNCTION_TEMPLATE_P (olddecl))
39211cd5 2852 || (TREE_CODE (olddecl) == FUNCTION_DECL
5566b478 2853 && DECL_FUNCTION_TEMPLATE_P (newdecl)))
39211cd5 2854 return 0;
9ed182dc 2855
8251199e 2856 cp_error ("`%#D' redeclared as different kind of symbol", newdecl);
39211cd5
MS
2857 if (TREE_CODE (olddecl) == TREE_LIST)
2858 olddecl = TREE_VALUE (olddecl);
8251199e 2859 cp_error_at ("previous declaration of `%#D'", olddecl);
39211cd5
MS
2860
2861 /* New decl is completely inconsistent with the old one =>
2862 tell caller to replace the old one. */
2863
2864 return 0;
8d08fdba 2865 }
8d08fdba
MS
2866 else if (!types_match)
2867 {
8926095f 2868 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
f0e01782
MS
2869 {
2870 /* The name of a class template may not be declared to refer to
2871 any other template, class, function, object, namespace, value,
e92cc029 2872 or type in the same scope. */
5566b478
MS
2873 if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == TYPE_DECL
2874 || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
f0e01782 2875 {
8251199e
JM
2876 cp_error ("declaration of template `%#D'", newdecl);
2877 cp_error_at ("conflicts with previous declaration `%#D'",
f0e01782
MS
2878 olddecl);
2879 }
ec255269
MS
2880 else if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == FUNCTION_DECL
2881 && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
2882 && compparms (TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl))),
91063b51 2883 TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl))))
75650646
MM
2884 && comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
2885 DECL_TEMPLATE_PARMS (olddecl)))
ec255269 2886 {
8251199e
JM
2887 cp_error ("new declaration `%#D'", newdecl);
2888 cp_error_at ("ambiguates old declaration `%#D'", olddecl);
ec255269 2889 }
f0e01782
MS
2890 return 0;
2891 }
8926095f
MS
2892 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2893 {
2894 if (DECL_LANGUAGE (newdecl) == lang_c
2895 && DECL_LANGUAGE (olddecl) == lang_c)
2896 {
8251199e 2897 cp_error ("declaration of C function `%#D' conflicts with",
8926095f 2898 newdecl);
8251199e 2899 cp_error_at ("previous declaration `%#D' here", olddecl);
8926095f 2900 }
00595019 2901 else if (compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
91063b51 2902 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
700f8a87 2903 {
8251199e
JM
2904 cp_error ("new declaration `%#D'", newdecl);
2905 cp_error_at ("ambiguates old declaration `%#D'", olddecl);
700f8a87
MS
2906 }
2907 else
2908 return 0;
8926095f 2909 }
8d08fdba
MS
2910
2911 /* Already complained about this, so don't do so again. */
a4443a08 2912 else if (current_class_type == NULL_TREE
8d08fdba
MS
2913 || IDENTIFIER_ERROR_LOCUS (DECL_ASSEMBLER_NAME (newdecl)) != current_class_type)
2914 {
8251199e
JM
2915 cp_error ("conflicting types for `%#D'", newdecl);
2916 cp_error_at ("previous declaration as `%#D'", olddecl);
8d08fdba
MS
2917 }
2918 }
75650646
MM
2919 else if (TREE_CODE (newdecl) == FUNCTION_DECL
2920 && ((DECL_TEMPLATE_SPECIALIZATION (olddecl)
2921 && (!DECL_TEMPLATE_INFO (newdecl)
2922 || (DECL_TI_TEMPLATE (newdecl)
2923 != DECL_TI_TEMPLATE (olddecl))))
2924 || (DECL_TEMPLATE_SPECIALIZATION (newdecl)
2925 && (!DECL_TEMPLATE_INFO (olddecl)
2926 || (DECL_TI_TEMPLATE (olddecl)
2927 != DECL_TI_TEMPLATE (newdecl))))))
386b8a85
JM
2928 /* It's OK to have a template specialization and a non-template
2929 with the same type, or to have specializations of two
75650646
MM
2930 different templates with the same type. Note that if one is a
2931 specialization, and the other is an instantiation of the same
2932 template, that we do not exit at this point. That situation
2933 can occur if we instantiate a template class, and then
2934 specialize one of its methods. This situation is legal, but
2935 the declarations must be merged in the usual way. */
2936 return 0;
2937 else if (TREE_CODE (newdecl) == FUNCTION_DECL
2938 && ((DECL_TEMPLATE_INSTANTIATION (olddecl)
2939 && !DECL_USE_TEMPLATE (newdecl))
2940 || (DECL_TEMPLATE_INSTANTIATION (newdecl)
2941 && !DECL_USE_TEMPLATE (olddecl))))
2942 /* One of the declarations is a template instantiation, and the
2943 other is not a template at all. That's OK. */
386b8a85 2944 return 0;
85c6cbaf
ML
2945 else if (TREE_CODE (newdecl) == NAMESPACE_DECL
2946 && DECL_NAMESPACE_ALIAS (newdecl)
2947 && DECL_NAMESPACE_ALIAS (newdecl) == DECL_NAMESPACE_ALIAS (olddecl))
2948 /* Redeclaration of namespace alias, ignore it. */
2949 return 1;
8d08fdba
MS
2950 else
2951 {
8251199e
JM
2952 char *errmsg = redeclaration_error_message (newdecl, olddecl);
2953 if (errmsg)
8d08fdba 2954 {
8251199e 2955 cp_error (errmsg, newdecl);
8d08fdba
MS
2956 if (DECL_NAME (olddecl) != NULL_TREE)
2957 cp_error_at ((DECL_INITIAL (olddecl)
2c73f9f5 2958 && namespace_bindings_p ())
8251199e
JM
2959 ? "`%#D' previously defined here"
2960 : "`%#D' previously declared here", olddecl);
8d08fdba
MS
2961 }
2962 else if (TREE_CODE (olddecl) == FUNCTION_DECL
2963 && DECL_INITIAL (olddecl) != NULL_TREE
2964 && TYPE_ARG_TYPES (TREE_TYPE (olddecl)) == NULL_TREE
2965 && TYPE_ARG_TYPES (TREE_TYPE (newdecl)) != NULL_TREE)
2966 {
2967 /* Prototype decl follows defn w/o prototype. */
8251199e
JM
2968 cp_warning_at ("prototype for `%#D'", newdecl);
2969 cp_warning_at ("follows non-prototype definition here", olddecl);
8d08fdba
MS
2970 }
2971 else if (TREE_CODE (olddecl) == FUNCTION_DECL
2972 && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl))
8926095f
MS
2973 {
2974 /* extern "C" int foo ();
2975 int foo () { bar (); }
2976 is OK. */
2977 if (current_lang_stack == current_lang_base)
a28e3c7f 2978 DECL_LANGUAGE (newdecl) = DECL_LANGUAGE (olddecl);
8926095f
MS
2979 else
2980 {
8251199e 2981 cp_error_at ("previous declaration of `%#D' with %L linkage",
8926095f 2982 olddecl, DECL_LANGUAGE (olddecl));
8251199e 2983 cp_error ("conflicts with new declaration with %L linkage",
8926095f
MS
2984 DECL_LANGUAGE (newdecl));
2985 }
2986 }
e1cd6e56 2987
a6f02587 2988 if (DECL_LANG_SPECIFIC (olddecl) && DECL_USE_TEMPLATE (olddecl))
c32381b1
JM
2989 ;
2990 else if (TREE_CODE (olddecl) == FUNCTION_DECL)
e1cd6e56
MS
2991 {
2992 tree t1 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
2993 tree t2 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
2994 int i = 1;
2995
2996 if (TREE_CODE (TREE_TYPE (newdecl)) == METHOD_TYPE)
2997 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2);
2998
2999 for (; t1 && t1 != void_list_node;
3000 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2), i++)
3001 if (TREE_PURPOSE (t1) && TREE_PURPOSE (t2))
3002 {
2507f3b5
RK
3003 if (1 == simple_cst_equal (TREE_PURPOSE (t1),
3004 TREE_PURPOSE (t2)))
e1cd6e56
MS
3005 {
3006 if (pedantic)
3007 {
8251199e 3008 cp_pedwarn ("default argument given for parameter %d of `%#D'",
e1cd6e56 3009 i, newdecl);
8251199e 3010 cp_pedwarn_at ("after previous specification in `%#D'",
e1cd6e56
MS
3011 olddecl);
3012 }
3013 }
3014 else
3015 {
8251199e 3016 cp_error ("default argument given for parameter %d of `%#D'",
e1cd6e56 3017 i, newdecl);
8251199e 3018 cp_error_at ("after previous specification in `%#D'",
e1cd6e56
MS
3019 olddecl);
3020 }
3021 }
a5894242 3022
7fcdf4c2
MS
3023 if (DECL_THIS_INLINE (newdecl) && ! DECL_THIS_INLINE (olddecl)
3024 && TREE_ADDRESSABLE (olddecl) && warn_inline)
dff6b454 3025 {
8251199e 3026 cp_warning ("`%#D' was used before it was declared inline",
7fcdf4c2 3027 newdecl);
8251199e 3028 cp_warning_at ("previous non-inline declaration here",
7fcdf4c2 3029 olddecl);
dff6b454 3030 }
e1cd6e56 3031 }
8d08fdba
MS
3032 }
3033
3034 /* If new decl is `static' and an `extern' was seen previously,
3035 warn about it. */
3036 warn_extern_redeclared_static (newdecl, olddecl);
3037
e92cc029 3038 /* We have committed to returning 1 at this point. */
8d08fdba
MS
3039 if (TREE_CODE (newdecl) == FUNCTION_DECL)
3040 {
3041 /* Now that functions must hold information normally held
3042 by field decls, there is extra work to do so that
3043 declaration information does not get destroyed during
3044 definition. */
3045 if (DECL_VINDEX (olddecl))
3046 DECL_VINDEX (newdecl) = DECL_VINDEX (olddecl);
3047 if (DECL_CONTEXT (olddecl))
3048 DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
3049 if (DECL_CLASS_CONTEXT (olddecl))
3050 DECL_CLASS_CONTEXT (newdecl) = DECL_CLASS_CONTEXT (olddecl);
8d08fdba
MS
3051 if (DECL_PENDING_INLINE_INFO (newdecl) == (struct pending_inline *)0)
3052 DECL_PENDING_INLINE_INFO (newdecl) = DECL_PENDING_INLINE_INFO (olddecl);
e1cd6e56
MS
3053 DECL_STATIC_CONSTRUCTOR (newdecl) |= DECL_STATIC_CONSTRUCTOR (olddecl);
3054 DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
7215f9a0 3055 DECL_ABSTRACT_VIRTUAL_P (newdecl) |= DECL_ABSTRACT_VIRTUAL_P (olddecl);
864b83b9 3056 DECL_VIRTUAL_P (newdecl) |= DECL_VIRTUAL_P (olddecl);
4a67c9e9 3057 DECL_NEEDS_FINAL_OVERRIDER_P (newdecl) |= DECL_NEEDS_FINAL_OVERRIDER_P (olddecl);
0b60dfe3
BK
3058 new_defines_function = DECL_INITIAL (newdecl) != NULL_TREE;
3059
3060 /* Optionally warn about more than one declaration for the same
3061 name, but don't warn about a function declaration followed by a
3062 definition. */
3063 if (warn_redundant_decls && ! DECL_ARTIFICIAL (olddecl)
3064 && !(new_defines_function && DECL_INITIAL (olddecl) == NULL_TREE)
3065 /* Don't warn about extern decl followed by definition. */
3066 && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl))
3067 /* Don't warn about friends, let add_friend take care of it. */
3068 && ! DECL_FRIEND_P (newdecl))
3069 {
8251199e
JM
3070 cp_warning ("redundant redeclaration of `%D' in same scope", newdecl);
3071 cp_warning_at ("previous declaration of `%D'", olddecl);
0b60dfe3 3072 }
8d08fdba
MS
3073 }
3074
3075 /* Deal with C++: must preserve virtual function table size. */
3076 if (TREE_CODE (olddecl) == TYPE_DECL)
3077 {
3078 register tree newtype = TREE_TYPE (newdecl);
3079 register tree oldtype = TREE_TYPE (olddecl);
3080
3081 if (newtype != error_mark_node && oldtype != error_mark_node
3082 && TYPE_LANG_SPECIFIC (newtype) && TYPE_LANG_SPECIFIC (oldtype))
3083 {
3084 CLASSTYPE_VSIZE (newtype) = CLASSTYPE_VSIZE (oldtype);
3085 CLASSTYPE_FRIEND_CLASSES (newtype)
3086 = CLASSTYPE_FRIEND_CLASSES (oldtype);
3087 }
8d08fdba
MS
3088 }
3089
8d08fdba
MS
3090 /* Copy all the DECL_... slots specified in the new decl
3091 except for any that we copy here from the old type. */
0b60dfe3
BK
3092 DECL_MACHINE_ATTRIBUTES (newdecl)
3093 = merge_machine_decl_attributes (olddecl, newdecl);
8d08fdba 3094
5566b478
MS
3095 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
3096 {
4d85e00e
MM
3097 if (! duplicate_decls (DECL_TEMPLATE_RESULT (newdecl),
3098 DECL_TEMPLATE_RESULT (olddecl)))
8251199e 3099 cp_error ("invalid redeclaration of %D", newdecl);
4d85e00e 3100 TREE_TYPE (olddecl) = TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl));
4d85e00e
MM
3101 DECL_TEMPLATE_SPECIALIZATIONS (olddecl)
3102 = chainon (DECL_TEMPLATE_SPECIALIZATIONS (olddecl),
3103 DECL_TEMPLATE_SPECIALIZATIONS (newdecl));
0b60dfe3 3104
5566b478
MS
3105 return 1;
3106 }
0b60dfe3 3107
8d08fdba
MS
3108 if (types_match)
3109 {
3110 /* Automatically handles default parameters. */
3111 tree oldtype = TREE_TYPE (olddecl);
e1cd6e56 3112 tree newtype;
8d08fdba 3113
e1cd6e56
MS
3114 /* Make sure we put the new type in the same obstack as the old one. */
3115 if (oldtype)
39211cd5
MS
3116 push_obstacks (TYPE_OBSTACK (oldtype), TYPE_OBSTACK (oldtype));
3117 else
3118 {
3119 push_obstacks_nochange ();
3120 end_temporary_allocation ();
3121 }
3122
e1cd6e56
MS
3123 /* Merge the data types specified in the two decls. */
3124 newtype = common_type (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
3125
8d08fdba
MS
3126 if (TREE_CODE (newdecl) == VAR_DECL)
3127 DECL_THIS_EXTERN (newdecl) |= DECL_THIS_EXTERN (olddecl);
3128 /* Do this after calling `common_type' so that default
3129 parameters don't confuse us. */
3130 else if (TREE_CODE (newdecl) == FUNCTION_DECL
3131 && (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl))
3132 != TYPE_RAISES_EXCEPTIONS (TREE_TYPE (olddecl))))
3133 {
f30432d7 3134 TREE_TYPE (newdecl) = build_exception_variant (newtype,
8d08fdba 3135 TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl)));
f30432d7 3136 TREE_TYPE (olddecl) = build_exception_variant (newtype,
8d08fdba
MS
3137 TYPE_RAISES_EXCEPTIONS (oldtype));
3138
9a224b4a
JM
3139 if ((pedantic || ! DECL_IN_SYSTEM_HEADER (olddecl))
3140 && DECL_SOURCE_LINE (olddecl) != 0
da20811c 3141 && flag_exceptions
824b9a4c 3142 && ! compexcepttypes (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
8d08fdba 3143 {
8251199e 3144 cp_pedwarn ("declaration of `%D' throws different exceptions",
a28e3c7f 3145 newdecl);
8251199e 3146 cp_pedwarn_at ("previous declaration here", olddecl);
8d08fdba
MS
3147 }
3148 }
3149 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
3150
3151 /* Lay the type out, unless already done. */
53929c47 3152 if (newtype != canonical_type_variant (oldtype)
5566b478 3153 && TREE_TYPE (newdecl) != error_mark_node
5156628f 3154 && !(processing_template_decl && uses_template_parms (newdecl)))
b7484fbe
MS
3155 layout_type (TREE_TYPE (newdecl));
3156
5566b478
MS
3157 if ((TREE_CODE (newdecl) == VAR_DECL
3158 || TREE_CODE (newdecl) == PARM_DECL
3159 || TREE_CODE (newdecl) == RESULT_DECL
3160 || TREE_CODE (newdecl) == FIELD_DECL
3161 || TREE_CODE (newdecl) == TYPE_DECL)
5156628f 3162 && !(processing_template_decl && uses_template_parms (newdecl)))
b7484fbe 3163 layout_decl (newdecl, 0);
8d08fdba
MS
3164
3165 /* Merge the type qualifiers. */
3166 if (TREE_READONLY (newdecl))
3167 TREE_READONLY (olddecl) = 1;
3168 if (TREE_THIS_VOLATILE (newdecl))
3169 TREE_THIS_VOLATILE (olddecl) = 1;
3170
3171 /* Merge the initialization information. */
8926095f
MS
3172 if (DECL_INITIAL (newdecl) == NULL_TREE
3173 && DECL_INITIAL (olddecl) != NULL_TREE)
3174 {
3175 DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
3176 DECL_SOURCE_FILE (newdecl) = DECL_SOURCE_FILE (olddecl);
3177 DECL_SOURCE_LINE (newdecl) = DECL_SOURCE_LINE (olddecl);
4d85e00e
MM
3178 if (DECL_LANG_SPECIFIC (newdecl)
3179 && DECL_LANG_SPECIFIC (olddecl))
3180 DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
8926095f 3181 }
39211cd5
MS
3182
3183 /* Merge the section attribute.
3184 We want to issue an error if the sections conflict but that must be
3185 done later in decl_attributes since we are called before attributes
3186 are assigned. */
3187 if (DECL_SECTION_NAME (newdecl) == NULL_TREE)
3188 DECL_SECTION_NAME (newdecl) = DECL_SECTION_NAME (olddecl);
3189
8d08fdba
MS
3190 /* Keep the old rtl since we can safely use it, unless it's the
3191 call to abort() used for abstract virtuals. */
3192 if ((DECL_LANG_SPECIFIC (olddecl)
3193 && !DECL_ABSTRACT_VIRTUAL_P (olddecl))
3194 || DECL_RTL (olddecl) != DECL_RTL (abort_fndecl))
3195 DECL_RTL (newdecl) = DECL_RTL (olddecl);
39211cd5
MS
3196
3197 pop_obstacks ();
8d08fdba
MS
3198 }
3199 /* If cannot merge, then use the new type and qualifiers,
3200 and don't preserve the old rtl. */
3201 else
3202 {
3203 /* Clean out any memory we had of the old declaration. */
3204 tree oldstatic = value_member (olddecl, static_aggregates);
3205 if (oldstatic)
3206 TREE_VALUE (oldstatic) = error_mark_node;
3207
3208 TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
3209 TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
3210 TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
3211 TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
3212 }
3213
3214 /* Merge the storage class information. */
a9aedbc2 3215 DECL_WEAK (newdecl) |= DECL_WEAK (olddecl);
e92cc029 3216 DECL_ONE_ONLY (newdecl) |= DECL_ONE_ONLY (olddecl);
a9aedbc2
MS
3217 TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
3218 TREE_STATIC (olddecl) = TREE_STATIC (newdecl) |= TREE_STATIC (olddecl);
3219 if (! DECL_EXTERNAL (olddecl))
3220 DECL_EXTERNAL (newdecl) = 0;
0b60dfe3
BK
3221
3222 if (DECL_LANG_SPECIFIC (newdecl) && DECL_LANG_SPECIFIC (olddecl))
8d08fdba 3223 {
a9aedbc2
MS
3224 DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl);
3225 DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl);
77be6f82 3226 DECL_COMDAT (newdecl) |= DECL_COMDAT (olddecl);
0b60dfe3
BK
3227 /* Don't really know how much of the language-specific
3228 values we should copy from old to new. */
3229 DECL_IN_AGGR_P (newdecl) = DECL_IN_AGGR_P (olddecl);
3230 DECL_ACCESS (newdecl) = DECL_ACCESS (olddecl);
3231 DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl);
fbf1c34b 3232 DECL_TEMPLATE_INFO (newdecl) = DECL_TEMPLATE_INFO (olddecl);
0b60dfe3 3233 olddecl_friend = DECL_FRIEND_P (olddecl);
8d08fdba
MS
3234 }
3235
8d08fdba
MS
3236 if (TREE_CODE (newdecl) == FUNCTION_DECL)
3237 {
75650646
MM
3238 if (DECL_TEMPLATE_INSTANTIATION (olddecl)
3239 && !DECL_TEMPLATE_INSTANTIATION (newdecl))
3240 {
3241 /* If newdecl is not a specialization, then it is not a
3242 template-related function at all. And that means that we
3243 shoud have exited above, returning 0. */
3244 my_friendly_assert (DECL_TEMPLATE_SPECIALIZATION (newdecl),
3245 0);
3246
3247 if (TREE_USED (olddecl))
3248 /* From [temp.expl.spec]:
3249
3250 If a template, a member template or the member of a class
3251 template is explicitly specialized then that
3252 specialization shall be declared before the first use of
3253 that specialization that would cause an implicit
3254 instantiation to take place, in every translation unit in
3255 which such a use occurs. */
8251199e 3256 cp_error ("explicit specialization of %D after first use",
75650646
MM
3257 olddecl);
3258
3259 SET_DECL_TEMPLATE_SPECIALIZATION (olddecl);
3260 }
faae18ab
MS
3261 DECL_THIS_INLINE (newdecl) |= DECL_THIS_INLINE (olddecl);
3262
3263 /* If either decl says `inline', this fn is inline, unless its
3264 definition was passed already. */
3265 if (DECL_INLINE (newdecl) && DECL_INITIAL (olddecl) == NULL_TREE)
3266 DECL_INLINE (olddecl) = 1;
3267 DECL_INLINE (newdecl) = DECL_INLINE (olddecl);
3268
700f8a87
MS
3269 if (! types_match)
3270 {
3271 DECL_LANGUAGE (olddecl) = DECL_LANGUAGE (newdecl);
3272 DECL_ASSEMBLER_NAME (olddecl) = DECL_ASSEMBLER_NAME (newdecl);
5566b478
MS
3273 DECL_RTL (olddecl) = DECL_RTL (newdecl);
3274 }
3275 if (! types_match || new_defines_function)
3276 {
3277 /* These need to be copied so that the names are available. */
700f8a87
MS
3278 DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
3279 DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
700f8a87 3280 }
8d08fdba
MS
3281 if (new_defines_function)
3282 /* If defining a function declared with other language
3283 linkage, use the previously declared language linkage. */
3284 DECL_LANGUAGE (newdecl) = DECL_LANGUAGE (olddecl);
3285 else
3286 {
3287 /* If redeclaring a builtin function, and not a definition,
3288 it stays built in. */
3289 if (DECL_BUILT_IN (olddecl))
3290 {
3291 DECL_BUILT_IN (newdecl) = 1;
39211cd5 3292 DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
8d08fdba
MS
3293 /* If we're keeping the built-in definition, keep the rtl,
3294 regardless of declaration matches. */
3295 DECL_RTL (newdecl) = DECL_RTL (olddecl);
3296 }
3297 else
3298 DECL_FRAME_SIZE (newdecl) = DECL_FRAME_SIZE (olddecl);
3299
3300 DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
8926095f 3301 if ((DECL_SAVED_INSNS (newdecl) = DECL_SAVED_INSNS (olddecl)))
8d08fdba
MS
3302 /* Previously saved insns go together with
3303 the function's previous definition. */
3304 DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
3305 /* Don't clear out the arguments if we're redefining a function. */
3306 if (DECL_ARGUMENTS (olddecl))
3307 DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
3308 }
6060a796
MS
3309 if (DECL_LANG_SPECIFIC (olddecl))
3310 DECL_MAIN_VARIANT (newdecl) = DECL_MAIN_VARIANT (olddecl);
8d08fdba
MS
3311 }
3312
a9aedbc2
MS
3313 if (TREE_CODE (newdecl) == NAMESPACE_DECL)
3314 {
3315 NAMESPACE_LEVEL (newdecl) = NAMESPACE_LEVEL (olddecl);
3316 }
3317
8d08fdba
MS
3318 /* Now preserve various other info from the definition. */
3319 TREE_ADDRESSABLE (newdecl) = TREE_ADDRESSABLE (olddecl);
3320 TREE_ASM_WRITTEN (newdecl) = TREE_ASM_WRITTEN (olddecl);
3321 DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
f376e137 3322 DECL_ASSEMBLER_NAME (newdecl) = DECL_ASSEMBLER_NAME (olddecl);
8d08fdba 3323
8d08fdba
MS
3324 if (TREE_CODE (newdecl) == FUNCTION_DECL)
3325 {
3326 int function_size;
3327 struct lang_decl *ol = DECL_LANG_SPECIFIC (olddecl);
3328 struct lang_decl *nl = DECL_LANG_SPECIFIC (newdecl);
3329
3330 function_size = sizeof (struct tree_decl);
3331
3332 bcopy ((char *) newdecl + sizeof (struct tree_common),
3333 (char *) olddecl + sizeof (struct tree_common),
3334 function_size - sizeof (struct tree_common));
3335
3336 /* Can we safely free the storage used by newdecl? */
3337
3338#define ROUND(x) ((x + obstack_alignment_mask (&permanent_obstack)) \
3339 & ~ obstack_alignment_mask (&permanent_obstack))
3340
75650646
MM
3341 if (DECL_TEMPLATE_INSTANTIATION (newdecl))
3342 {
3343 /* If newdecl is a template instantiation, it is possible that
3344 the following sequence of events has occurred:
3345
3346 o A friend function was declared in a class template. The
3347 class template was instantiated.
3348
3349 o The instantiation of the friend declaration was
3350 recorded on the instantiation list, and is newdecl.
3351
3352 o Later, however, instantiate_class_template called pushdecl
3353 on the newdecl to perform name injection. But, pushdecl in
3354 turn called duplicate_decls when it discovered that another
3355 declaration of a global function with the same name already
3356 existed.
3357
3358 o Here, in duplicate_decls, we decided to clobber newdecl.
3359
3360 If we're going to do that, we'd better make sure that
3361 olddecl, and not newdecl, is on the list of
3362 instantiations so that if we try to do the instantiation
3363 again we won't get the clobbered declaration. */
3364
3365 tree tmpl = DECL_TI_TEMPLATE (newdecl);
3366 tree decls = DECL_TEMPLATE_SPECIALIZATIONS (tmpl);
3367
3368 for (; decls; decls = TREE_CHAIN (decls))
3369 if (TREE_VALUE (decls) == newdecl)
3370 TREE_VALUE (decls) = olddecl;
3371 }
3372
3a56f0ab
JM
3373 if (((char *)newdecl + ROUND (function_size) == (char *)nl
3374 && ((char *)newdecl + ROUND (function_size)
3375 + ROUND (sizeof (struct lang_decl))
3376 == obstack_next_free (&permanent_obstack)))
3377 || ((char *)newdecl + ROUND (function_size)
3378 == obstack_next_free (&permanent_obstack)))
8d08fdba
MS
3379 {
3380 DECL_MAIN_VARIANT (newdecl) = olddecl;
3381 DECL_LANG_SPECIFIC (olddecl) = ol;
3382 bcopy ((char *)nl, (char *)ol, sizeof (struct lang_decl));
3383
3384 obstack_free (&permanent_obstack, newdecl);
3385 }
d22c8596 3386 else if (LANG_DECL_PERMANENT (ol) && ol != nl)
8d08fdba
MS
3387 {
3388 if (DECL_MAIN_VARIANT (olddecl) == olddecl)
3389 {
3390 /* Save these lang_decls that would otherwise be lost. */
3391 extern tree free_lang_decl_chain;
3392 tree free_lang_decl = (tree) ol;
d22c8596
MS
3393
3394 if (DECL_LANG_SPECIFIC (olddecl) == ol)
3395 abort ();
3396
8d08fdba
MS
3397 TREE_CHAIN (free_lang_decl) = free_lang_decl_chain;
3398 free_lang_decl_chain = free_lang_decl;
3399 }
3400 else
3401 {
bd6dd845 3402 /* Storage leak. */;
8d08fdba
MS
3403 }
3404 }
3405 }
3406 else
3407 {
3408 bcopy ((char *) newdecl + sizeof (struct tree_common),
3409 (char *) olddecl + sizeof (struct tree_common),
3410 sizeof (struct tree_decl) - sizeof (struct tree_common)
3411 + tree_code_length [(int)TREE_CODE (newdecl)] * sizeof (char *));
3412 }
3413
3414 DECL_UID (olddecl) = olddecl_uid;
3415 if (olddecl_friend)
3416 DECL_FRIEND_P (olddecl) = 1;
3417
d9525bec
BK
3418 /* NEWDECL contains the merged attribute lists.
3419 Update OLDDECL to be the same. */
3420 DECL_MACHINE_ATTRIBUTES (olddecl) = DECL_MACHINE_ATTRIBUTES (newdecl);
3421
8d08fdba
MS
3422 return 1;
3423}
3424
3425/* Record a decl-node X as belonging to the current lexical scope.
3426 Check for errors (such as an incompatible declaration for the same
3427 name already seen in the same scope).
3428
3429 Returns either X or an old decl for the same name.
3430 If an old decl is returned, it may have been smashed
3431 to agree with what X says. */
3432
3433tree
3434pushdecl (x)
3435 tree x;
3436{
3437 register tree t;
8d08fdba 3438 register tree name = DECL_ASSEMBLER_NAME (x);
f181d4ae 3439 int need_new_binding = 1;
8d08fdba 3440
2c73f9f5
ML
3441 if (current_function_decl && x != current_function_decl
3442 /* A local declaration for a function doesn't constitute nesting. */
3443 && (TREE_CODE (x) != FUNCTION_DECL || DECL_INITIAL (x))
700f8a87
MS
3444 /* Don't change DECL_CONTEXT of virtual methods. */
3445 && (TREE_CODE (x) != FUNCTION_DECL || !DECL_VIRTUAL_P (x))
f181d4ae 3446 && !DECL_CONTEXT (x))
8d08fdba 3447 DECL_CONTEXT (x) = current_function_decl;
2c73f9f5 3448 if (!DECL_CONTEXT (x))
cb0dbb9a 3449 DECL_CONTEXT (x) = FROB_CONTEXT (current_namespace);
8d08fdba 3450
8d08fdba 3451 /* Type are looked up using the DECL_NAME, as that is what the rest of the
e92cc029 3452 compiler wants to use. */
a9aedbc2 3453 if (TREE_CODE (x) == TYPE_DECL || TREE_CODE (x) == VAR_DECL
73b0fce8
KL
3454 || TREE_CODE (x) == NAMESPACE_DECL || TREE_CODE (x) == TEMPLATE_TYPE_PARM
3455 || TREE_CODE (x) == TEMPLATE_TEMPLATE_PARM)
8d08fdba 3456 name = DECL_NAME (x);
8d08fdba
MS
3457
3458 if (name)
3459 {
5566b478
MS
3460#if 0
3461 /* Not needed...see below. */
8d08fdba
MS
3462 char *file;
3463 int line;
5566b478 3464#endif
386b8a85
JM
3465 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
3466 name = TREE_OPERAND (name, 0);
3467
2c73f9f5 3468 /* Namespace-scoped variables are not found in the current level. */
6eb3bb27 3469 if (TREE_CODE (x) == VAR_DECL && DECL_NAMESPACE_SCOPE_P (x))
2c73f9f5
ML
3470 t = namespace_binding (name, DECL_CONTEXT (x));
3471 else
3472 t = lookup_name_current_level (name);
8d08fdba
MS
3473 if (t == error_mark_node)
3474 {
3475 /* error_mark_node is 0 for a while during initialization! */
3476 t = NULL_TREE;
8251199e 3477 cp_error_at ("`%#D' used prior to declaration", x);
8d08fdba
MS
3478 }
3479
51c184be 3480 else if (t != NULL_TREE)
8d08fdba 3481 {
5566b478
MS
3482#if 0
3483 /* This is turned off until I have time to do it right (bpk). */
e92cc029 3484 /* With the code below that uses it... */
8d6e462b
PB
3485 file = DECL_SOURCE_FILE (t);
3486 line = DECL_SOURCE_LINE (t);
5566b478 3487#endif
2ee887f2 3488 if (TREE_CODE (t) == PARM_DECL)
8d08fdba
MS
3489 {
3490 if (DECL_CONTEXT (t) == NULL_TREE)
3491 fatal ("parse errors have confused me too much");
be99da77 3492
e92cc029 3493 /* Check for duplicate params. */
be99da77
MS
3494 if (duplicate_decls (x, t))
3495 return t;
8d08fdba 3496 }
8d6e462b 3497 else if (((TREE_CODE (x) == FUNCTION_DECL && DECL_LANGUAGE (x) == lang_c)
5566b478
MS
3498 || DECL_FUNCTION_TEMPLATE_P (x))
3499 && is_overloaded_fn (t))
2c73f9f5 3500 /* Don't do anything just yet. */;
e1cd6e56
MS
3501 else if (t == wchar_decl_node)
3502 {
3503 if (pedantic && ! DECL_IN_SYSTEM_HEADER (x))
8251199e 3504 cp_pedwarn ("redeclaration of wchar_t as `%T'", TREE_TYPE (x));
e1cd6e56
MS
3505
3506 /* Throw away the redeclaration. */
3507 return t;
3508 }
8926095f 3509 else if (TREE_CODE (t) != TREE_CODE (x))
8d08fdba 3510 {
9ed182dc 3511 if (duplicate_decls (x, t))
51c184be 3512 return t;
8d08fdba
MS
3513 }
3514 else if (duplicate_decls (x, t))
51c184be 3515 {
8d08fdba 3516#if 0
8926095f 3517 /* This is turned off until I have time to do it right (bpk). */
8d08fdba 3518
8926095f
MS
3519 /* Also warn if they did a prototype with `static' on it, but
3520 then later left the `static' off. */
3521 if (! TREE_PUBLIC (name) && TREE_PUBLIC (x))
8d08fdba 3522 {
8926095f
MS
3523 if (DECL_LANG_SPECIFIC (t) && DECL_FRIEND_P (t))
3524 return t;
8d08fdba 3525
8926095f
MS
3526 if (extra_warnings)
3527 {
8251199e 3528 cp_warning ("`static' missing from declaration of `%D'",
a28e3c7f 3529 t);
8926095f
MS
3530 warning_with_file_and_line (file, line,
3531 "previous declaration of `%s'",
3532 decl_as_string (t, 0));
3533 }
8d08fdba 3534
8926095f
MS
3535 /* Now fix things so it'll do what they expect. */
3536 if (current_function_decl)
3537 TREE_PUBLIC (current_function_decl) = 0;
3538 }
51c184be
MS
3539 /* Due to interference in memory reclamation (X may be
3540 obstack-deallocated at this point), we must guard against
8926095f
MS
3541 one really special case. [jason: This should be handled
3542 by start_function] */
51c184be
MS
3543 if (current_function_decl == x)
3544 current_function_decl = t;
8926095f 3545#endif
7177d104
MS
3546 if (TREE_CODE (t) == TYPE_DECL)
3547 SET_IDENTIFIER_TYPE_VALUE (name, TREE_TYPE (t));
f30432d7
MS
3548 else if (TREE_CODE (t) == FUNCTION_DECL)
3549 check_default_args (t);
7177d104 3550
51c184be
MS
3551 return t;
3552 }
35680744
MM
3553 else if (DECL_MAIN_P (x))
3554 {
3555 /* A redeclaration of main, but not a duplicate of the
3556 previous one.
3557
3558 [basic.start.main]
3559
3560 This function shall not be overloaded. */
8251199e
JM
3561 cp_error_at ("invalid redeclaration of `%D'", t);
3562 cp_error ("as `%D'", x);
35680744
MM
3563 /* We don't try to push this declaration since that
3564 causes a crash. */
3565 return x;
3566 }
8d08fdba 3567 }
8926095f 3568
f3400fe2
JM
3569 check_template_shadow (x);
3570
8926095f
MS
3571 if (TREE_CODE (x) == FUNCTION_DECL && ! DECL_FUNCTION_MEMBER_P (x))
3572 {
3573 t = push_overloaded_decl (x, 1);
3574 if (t != x || DECL_LANGUAGE (x) == lang_c)
3575 return t;
f181d4ae
MM
3576 if (!namespace_bindings_p ())
3577 /* We do not need to create a binding for this name;
3578 push_overloaded_decl will have already done so if
3579 necessary. */
3580 need_new_binding = 0;
8926095f 3581 }
6eb3bb27 3582 else if (DECL_FUNCTION_TEMPLATE_P (x) && DECL_NAMESPACE_SCOPE_P (x))
8926095f 3583 return push_overloaded_decl (x, 0);
8d08fdba 3584
a1774733
BK
3585 /* If declaring a type as a typedef, copy the type (unless we're
3586 at line 0), and install this TYPE_DECL as the new type's typedef
3587 name. See the extensive comment in ../c-decl.c (pushdecl). */
8d08fdba
MS
3588 if (TREE_CODE (x) == TYPE_DECL)
3589 {
3590 tree type = TREE_TYPE (x);
a1774733
BK
3591 if (DECL_SOURCE_LINE (x) == 0)
3592 {
3593 if (TYPE_NAME (type) == 0)
3594 TYPE_NAME (type) = x;
3595 }
1c80fb65
MM
3596 else if (type != error_mark_node && TYPE_NAME (type) != x
3597 /* We don't want to copy the type when all we're
3598 doing is making a TYPE_DECL for the purposes of
3599 inlining. */
3600 && (!TYPE_NAME (type)
3601 || TYPE_NAME (type) != DECL_ABSTRACT_ORIGIN (x)))
a1774733 3602 {
ae0a6181
MM
3603 push_obstacks (TYPE_OBSTACK (type), TYPE_OBSTACK (type));
3604
a1774733
BK
3605 DECL_ORIGINAL_TYPE (x) = type;
3606 type = build_type_copy (type);
3607 TYPE_STUB_DECL (type) = TYPE_STUB_DECL (DECL_ORIGINAL_TYPE (x));
3608 TYPE_NAME (type) = x;
3609 TREE_TYPE (x) = type;
ae0a6181
MM
3610
3611 pop_obstacks ();
a1774733 3612 }
8d08fdba 3613
8d08fdba
MS
3614 if (type != error_mark_node
3615 && TYPE_NAME (type)
3616 && TYPE_IDENTIFIER (type))
f181d4ae
MM
3617 set_identifier_type_value_with_scope (DECL_NAME (x), type,
3618 current_binding_level);
3619
3620 if (TREE_CODE (x) == TYPE_DECL
3621 && DECL_ARTIFICIAL (x)
3622 && t != NULL_TREE)
3623 /* We don't want an artificial TYPE_DECL is we already
3624 have another DECL with the same name. */
3625 need_new_binding = 0;
8d08fdba
MS
3626 }
3627
3628 /* Multiple external decls of the same identifier ought to match.
3629
3630 We get warnings about inline functions where they are defined.
39211cd5
MS
3631 We get warnings about other functions from push_overloaded_decl.
3632
8d08fdba 3633 Avoid duplicate warnings where they are used. */
39211cd5 3634 if (TREE_PUBLIC (x) && TREE_CODE (x) != FUNCTION_DECL)
8d08fdba
MS
3635 {
3636 tree decl;
3637
31928556
JM
3638 if (IDENTIFIER_NAMESPACE_VALUE (name) != NULL_TREE
3639 && (DECL_EXTERNAL (IDENTIFIER_NAMESPACE_VALUE (name))
3640 || TREE_PUBLIC (IDENTIFIER_NAMESPACE_VALUE (name))))
3641 decl = IDENTIFIER_NAMESPACE_VALUE (name);
8d08fdba
MS
3642 else
3643 decl = NULL_TREE;
3644
39211cd5 3645 if (decl
8d08fdba
MS
3646 /* If different sort of thing, we already gave an error. */
3647 && TREE_CODE (decl) == TREE_CODE (x)
3bfdc719 3648 && !same_type_p (TREE_TYPE (x), TREE_TYPE (decl)))
8d08fdba 3649 {
8251199e
JM
3650 cp_pedwarn ("type mismatch with previous external decl", x);
3651 cp_pedwarn_at ("previous external decl of `%#D'", decl);
8d08fdba
MS
3652 }
3653 }
3654
8d08fdba
MS
3655 /* This name is new in its binding level.
3656 Install the new declaration and return it. */
2c73f9f5 3657 if (namespace_bindings_p ())
8d08fdba
MS
3658 {
3659 /* Install a global value. */
3660
8d08fdba
MS
3661 /* If the first global decl has external linkage,
3662 warn if we later see static one. */
31928556 3663 if (IDENTIFIER_GLOBAL_VALUE (name) == NULL_TREE && TREE_PUBLIC (x))
8d08fdba
MS
3664 TREE_PUBLIC (name) = 1;
3665
f181d4ae 3666 if (need_new_binding)
30394414
JM
3667 {
3668 if (TREE_CODE (x) == FUNCTION_DECL)
31928556
JM
3669 my_friendly_assert
3670 ((IDENTIFIER_GLOBAL_VALUE (name) == NULL_TREE)
3671 || (IDENTIFIER_GLOBAL_VALUE (name) == x), 378);
3672 SET_IDENTIFIER_NAMESPACE_VALUE (name, x);
30394414 3673 }
8d08fdba
MS
3674
3675 /* Don't forget if the function was used via an implicit decl. */
3676 if (IDENTIFIER_IMPLICIT_DECL (name)
3677 && TREE_USED (IDENTIFIER_IMPLICIT_DECL (name)))
3678 TREE_USED (x) = 1;
3679
3680 /* Don't forget if its address was taken in that way. */
3681 if (IDENTIFIER_IMPLICIT_DECL (name)
3682 && TREE_ADDRESSABLE (IDENTIFIER_IMPLICIT_DECL (name)))
3683 TREE_ADDRESSABLE (x) = 1;
3684
3685 /* Warn about mismatches against previous implicit decl. */
3686 if (IDENTIFIER_IMPLICIT_DECL (name) != NULL_TREE
3687 /* If this real decl matches the implicit, don't complain. */
3688 && ! (TREE_CODE (x) == FUNCTION_DECL
3689 && TREE_TYPE (TREE_TYPE (x)) == integer_type_node))
8251199e
JM
3690 cp_warning
3691 ("`%D' was previously implicitly declared to return `int'", x);
8d08fdba
MS
3692
3693 /* If new decl is `static' and an `extern' was seen previously,
3694 warn about it. */
a0a33927
MS
3695 if (x != NULL_TREE && t != NULL_TREE && decls_match (x, t))
3696 warn_extern_redeclared_static (x, t);
8d08fdba
MS
3697 }
3698 else
3699 {
3700 /* Here to install a non-global value. */
f181d4ae 3701 tree oldlocal = IDENTIFIER_VALUE (name);
31928556 3702 tree oldglobal = IDENTIFIER_NAMESPACE_VALUE (name);
8d08fdba 3703
f181d4ae
MM
3704 if (need_new_binding)
3705 {
3706 push_local_binding (name, x);
3707 /* Because push_local_binding will hook X on to the
3708 current_binding_level's name list, we don't want to
3709 do that again below. */
3710 need_new_binding = 0;
3711 }
8d08fdba
MS
3712
3713 /* If this is a TYPE_DECL, push it into the type value slot. */
3714 if (TREE_CODE (x) == TYPE_DECL)
f181d4ae
MM
3715 set_identifier_type_value_with_scope (name, TREE_TYPE (x),
3716 current_binding_level);
8d08fdba 3717
a9aedbc2
MS
3718 /* Clear out any TYPE_DECL shadowed by a namespace so that
3719 we won't think this is a type. The C struct hack doesn't
3720 go through namespaces. */
3721 if (TREE_CODE (x) == NAMESPACE_DECL)
f181d4ae
MM
3722 set_identifier_type_value_with_scope (name, NULL_TREE,
3723 current_binding_level);
a9aedbc2 3724
8d08fdba
MS
3725 /* If this is an extern function declaration, see if we
3726 have a global definition or declaration for the function. */
3727 if (oldlocal == NULL_TREE
faae18ab 3728 && DECL_EXTERNAL (x)
31928556 3729 && oldglobal != NULL_TREE
8d08fdba 3730 && TREE_CODE (x) == FUNCTION_DECL
31928556 3731 && TREE_CODE (oldglobal) == FUNCTION_DECL)
8d08fdba
MS
3732 {
3733 /* We have one. Their types must agree. */
31928556 3734 if (decls_match (x, oldglobal))
6060a796
MS
3735 /* OK */;
3736 else
8d08fdba 3737 {
8251199e
JM
3738 cp_warning ("extern declaration of `%#D' doesn't match", x);
3739 cp_warning_at ("global declaration `%#D'", oldglobal);
8d08fdba 3740 }
8d08fdba
MS
3741 }
3742 /* If we have a local external declaration,
3743 and no file-scope declaration has yet been seen,
3744 then if we later have a file-scope decl it must not be static. */
3745 if (oldlocal == NULL_TREE
31928556 3746 && oldglobal == NULL_TREE
8d08fdba
MS
3747 && DECL_EXTERNAL (x)
3748 && TREE_PUBLIC (x))
f181d4ae 3749 TREE_PUBLIC (name) = 1;
8d08fdba
MS
3750
3751 if (DECL_FROM_INLINE (x))
3752 /* Inline decls shadow nothing. */;
3753
3754 /* Warn if shadowing an argument at the top level of the body. */
3755 else if (oldlocal != NULL_TREE && !DECL_EXTERNAL (x)
3756 && TREE_CODE (oldlocal) == PARM_DECL
3757 && TREE_CODE (x) != PARM_DECL)
3758 {
3759 /* Go to where the parms should be and see if we
3760 find them there. */
3761 struct binding_level *b = current_binding_level->level_chain;
3762
3763 if (cleanup_label)
3764 b = b->level_chain;
3765
3766 /* ARM $8.3 */
3767 if (b->parm_flag == 1)
8251199e 3768 cp_error ("declaration of `%#D' shadows a parameter", name);
8d08fdba 3769 }
f181d4ae
MM
3770 else if (warn_shadow && oldlocal != NULL_TREE
3771 && current_binding_level->is_for_scope
8d6e462b
PB
3772 && !DECL_DEAD_FOR_LOCAL (oldlocal))
3773 {
8251199e 3774 warning ("variable `%s' shadows local",
8d6e462b 3775 IDENTIFIER_POINTER (name));
8251199e 3776 cp_warning_at (" this is the shadowed declaration", oldlocal);
8d6e462b 3777 }
8d08fdba
MS
3778 /* Maybe warn if shadowing something else. */
3779 else if (warn_shadow && !DECL_EXTERNAL (x)
3780 /* No shadow warnings for internally generated vars. */
700f8a87 3781 && ! DECL_ARTIFICIAL (x)
8d08fdba
MS
3782 /* No shadow warnings for vars made for inlining. */
3783 && ! DECL_FROM_INLINE (x))
3784 {
3785 char *warnstring = NULL;
3786
3787 if (oldlocal != NULL_TREE && TREE_CODE (oldlocal) == PARM_DECL)
3788 warnstring = "declaration of `%s' shadows a parameter";
3789 else if (IDENTIFIER_CLASS_VALUE (name) != NULL_TREE
4ac14744 3790 && current_class_ptr
8d08fdba
MS
3791 && !TREE_STATIC (name))
3792 warnstring = "declaration of `%s' shadows a member of `this'";
3793 else if (oldlocal != NULL_TREE)
3794 warnstring = "declaration of `%s' shadows previous local";
31928556 3795 else if (oldglobal != NULL_TREE)
30394414 3796 /* XXX shadow warnings in outer-more namespaces */
8d08fdba
MS
3797 warnstring = "declaration of `%s' shadows global declaration";
3798
3799 if (warnstring)
3800 warning (warnstring, IDENTIFIER_POINTER (name));
3801 }
e1cd6e56 3802 }
8d08fdba 3803
e1cd6e56 3804 if (TREE_CODE (x) == FUNCTION_DECL)
f30432d7 3805 check_default_args (x);
8145f082
MS
3806
3807 /* Keep count of variables in this level with incomplete type. */
8145f082 3808 if (TREE_CODE (x) == VAR_DECL
28cbf42c 3809 && TREE_TYPE (x) != error_mark_node
f30432d7
MS
3810 && ((TYPE_SIZE (TREE_TYPE (x)) == NULL_TREE
3811 && PROMOTES_TO_AGGR_TYPE (TREE_TYPE (x), ARRAY_TYPE))
3812 /* RTTI TD entries are created while defining the type_info. */
3813 || (TYPE_LANG_SPECIFIC (TREE_TYPE (x))
3814 && TYPE_BEING_DEFINED (TREE_TYPE (x)))))
f181d4ae
MM
3815 current_binding_level->incomplete
3816 = tree_cons (NULL_TREE, x, current_binding_level->incomplete);
8d08fdba
MS
3817 }
3818
f181d4ae
MM
3819 if (need_new_binding)
3820 {
3821 /* Put decls on list in reverse order.
3822 We will reverse them later if necessary. */
3823 TREE_CHAIN (x) = current_binding_level->names;
3824 current_binding_level->names = x;
3825 if (! (current_binding_level != global_binding_level
3826 || TREE_PERMANENT (x)))
3827 my_friendly_abort (124);
3828 }
8d08fdba
MS
3829
3830 return x;
3831}
3832
5566b478
MS
3833/* Same as pushdecl, but define X in binding-level LEVEL. We rely on the
3834 caller to set DECL_CONTEXT properly. */
8d08fdba
MS
3835
3836static tree
3837pushdecl_with_scope (x, level)
3838 tree x;
3839 struct binding_level *level;
3840{
8d019cef 3841 register struct binding_level *b;
5566b478 3842 tree function_decl = current_function_decl;
8d08fdba 3843
5566b478 3844 current_function_decl = NULL_TREE;
8d019cef
JM
3845 if (level->parm_flag == 2)
3846 {
3847 b = class_binding_level;
3848 class_binding_level = level;
3849 pushdecl_class_level (x);
3850 class_binding_level = b;
3851 }
3852 else
3853 {
3854 b = current_binding_level;
3855 current_binding_level = level;
3856 x = pushdecl (x);
3857 current_binding_level = b;
3858 }
5566b478 3859 current_function_decl = function_decl;
8d08fdba
MS
3860 return x;
3861}
3862
2c73f9f5 3863/* Like pushdecl, only it places X in the current namespace,
8d08fdba 3864 if appropriate. */
e92cc029 3865
8d08fdba 3866tree
2c73f9f5 3867pushdecl_namespace_level (x)
8d08fdba
MS
3868 tree x;
3869{
3870 register struct binding_level *b = inner_binding_level;
2c73f9f5
ML
3871 register tree t;
3872
3873 t = pushdecl_with_scope (x, NAMESPACE_LEVEL (current_namespace));
8d08fdba
MS
3874
3875 /* Now, the type_shadowed stack may screw us. Munge it so it does
3876 what we want. */
3877 if (TREE_CODE (x) == TYPE_DECL)
3878 {
3879 tree name = DECL_NAME (x);
3880 tree newval;
3881 tree *ptr = (tree *)0;
3882 for (; b != global_binding_level; b = b->level_chain)
3883 {
3884 tree shadowed = b->type_shadowed;
3885 for (; shadowed; shadowed = TREE_CHAIN (shadowed))
3886 if (TREE_PURPOSE (shadowed) == name)
3887 {
3888 ptr = &TREE_VALUE (shadowed);
3889 /* Can't break out of the loop here because sometimes
3890 a binding level will have duplicate bindings for
3891 PT names. It's gross, but I haven't time to fix it. */
3892 }
3893 }
3894 newval = TREE_TYPE (x);
3895 if (ptr == (tree *)0)
3896 {
3897 /* @@ This shouldn't be needed. My test case "zstring.cc" trips
3898 up here if this is changed to an assertion. --KR */
3899 SET_IDENTIFIER_TYPE_VALUE (name, newval);
3900 }
3901 else
3902 {
8d08fdba
MS
3903 *ptr = newval;
3904 }
3905 }
3906 return t;
3907}
3908
2c73f9f5
ML
3909/* Like pushdecl, only it places X in GLOBAL_BINDING_LEVEL,
3910 if appropriate. */
3911
3912tree
3913pushdecl_top_level (x)
3914 tree x;
3915{
3916 tree cur_namespace = current_namespace;
3917 current_namespace = global_namespace;
3918 x = pushdecl_namespace_level (x);
3919 current_namespace = cur_namespace;
3920 return x;
3921}
3922
8d08fdba 3923/* Make the declaration of X appear in CLASS scope. */
e92cc029 3924
61a127b3 3925void
8d08fdba
MS
3926pushdecl_class_level (x)
3927 tree x;
3928{
3929 /* Don't use DECL_ASSEMBLER_NAME here! Everything that looks in class
3930 scope looks for the pre-mangled name. */
3931 register tree name = DECL_NAME (x);
3932
3933 if (name)
3934 {
8d2733ca
MS
3935 if (TYPE_BEING_DEFINED (current_class_type))
3936 {
57f01f45
JM
3937 /* A name N used in a class S shall refer to the same declaration
3938 in its context and when re-evaluated in the completed scope of S.
8d2733ca
MS
3939 Types, enums, and static vars are checked here; other
3940 members are checked in finish_struct. */
3941 tree icv = IDENTIFIER_CLASS_VALUE (name);
3942
4d7614e9 3943 /* This should match check_member_decl_is_same_in_complete_scope. */
5566b478 3944 if (icv && icv != x
dc8263bc 3945 && flag_optional_diags
a4443a08
MS
3946 /* Don't complain about inherited names. */
3947 && id_in_current_class (name)
3948 /* Or shadowed tags. */
35acd3f2 3949 && !(DECL_DECLARES_TYPE_P (icv)
a4443a08 3950 && DECL_CONTEXT (icv) == current_class_type))
8d2733ca 3951 {
8251199e
JM
3952 cp_pedwarn ("declaration of identifier `%D' as `%#D'", name, x);
3953 cp_pedwarn_at ("conflicts with previous use in class as `%#D'",
57f01f45 3954 icv);
8d2733ca 3955 }
a0d9f322 3956
f3400fe2 3957 check_template_shadow (x);
8d2733ca
MS
3958 }
3959
8d08fdba
MS
3960 push_class_level_binding (name, x);
3961 if (TREE_CODE (x) == TYPE_DECL)
f181d4ae 3962 set_identifier_type_value (name, TREE_TYPE (x));
8d08fdba 3963 }
8d08fdba
MS
3964}
3965
bd6dd845 3966#if 0
7177d104
MS
3967/* This function is used to push the mangled decls for nested types into
3968 the appropriate scope. Previously pushdecl_top_level was used, but that
3969 is incorrect for members of local classes. */
e92cc029 3970
5566b478 3971void
7177d104
MS
3972pushdecl_nonclass_level (x)
3973 tree x;
3974{
3975 struct binding_level *b = current_binding_level;
3976
7177d104 3977 my_friendly_assert (b->parm_flag != 2, 180);
7177d104 3978
5566b478 3979#if 0
7177d104
MS
3980 /* Get out of template binding levels */
3981 while (b->pseudo_global)
3982 b = b->level_chain;
5566b478 3983#endif
7177d104
MS
3984
3985 pushdecl_with_scope (x, b);
3986}
bd6dd845 3987#endif
7177d104 3988
8d08fdba
MS
3989/* Make the declaration(s) of X appear in CLASS scope
3990 under the name NAME. */
e92cc029 3991
8d08fdba
MS
3992void
3993push_class_level_binding (name, x)
3994 tree name;
3995 tree x;
3996{
98c1c668
JM
3997 /* The class_binding_level will be NULL if x is a template
3998 parameter name in a member template. */
3999 if (!class_binding_level)
4000 return;
4001
e1cd6e56
MS
4002 if (TREE_CODE (x) == TYPE_DECL && DECL_ARTIFICIAL (x)
4003 && purpose_member (name, class_binding_level->class_shadowed))
4004 return;
4005
f181d4ae
MM
4006 /* If this declaration shadows a declaration from an enclosing
4007 class, then we will need to restore IDENTIFIER_CLASS_VALUE when
4008 we leave this class. Record the shadowed declaration here. */
8d08fdba
MS
4009 maybe_push_cache_obstack ();
4010 class_binding_level->class_shadowed
4011 = tree_cons (name, IDENTIFIER_CLASS_VALUE (name),
4012 class_binding_level->class_shadowed);
4013 pop_obstacks ();
f181d4ae
MM
4014
4015 /* Put the binding on the stack of bindings for the identifier, and
4016 update IDENTIFIER_CLASS_VALUE. */
4017 push_class_binding (name, x);
8d08fdba 4018 IDENTIFIER_CLASS_VALUE (name) = x;
f181d4ae 4019
8d08fdba
MS
4020 obstack_ptr_grow (&decl_obstack, x);
4021}
4022
2c73f9f5
ML
4023/* Insert another USING_DECL into the current binding level,
4024 returning this declaration. If this is a redeclaration,
4025 do nothing and return NULL_TREE. */
e92cc029 4026
2c73f9f5
ML
4027tree
4028push_using_decl (scope, name)
4029 tree scope;
4030 tree name;
8d08fdba 4031{
2c73f9f5
ML
4032 tree decl;
4033
2c73f9f5
ML
4034 my_friendly_assert (TREE_CODE (scope) == NAMESPACE_DECL, 383);
4035 my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 384);
4036 for (decl = current_binding_level->usings; decl; decl = TREE_CHAIN (decl))
4037 if (DECL_INITIAL (decl) == scope && DECL_NAME (decl) == name)
4038 break;
4039 if (decl)
4040 return NULL_TREE;
4041 decl = build_lang_decl (USING_DECL, name, void_type_node);
4042 DECL_INITIAL (decl) = scope;
4043 TREE_CHAIN (decl) = current_binding_level->usings;
4044 current_binding_level->usings = decl;
4045 return decl;
8d08fdba
MS
4046}
4047
ea9635c7
ML
4048/* Add namespace to using_directives. Return NULL_TREE if nothing was
4049 changed (i.e. there was already a directive), or the fresh
4050 TREE_LIST otherwise. */
4051
4052tree
9ed182dc 4053push_using_directive (used)
ea9635c7 4054 tree used;
ea9635c7
ML
4055{
4056 tree ud = current_binding_level->using_directives;
9ed182dc 4057 tree iter, ancestor;
ea9635c7
ML
4058
4059 /* Check if we already have this. */
4060 if (purpose_member (used, ud) != NULL_TREE)
4061 return NULL_TREE;
00dc6358
JM
4062
4063 /* Recursively add all namespaces used. */
4064 for (iter = DECL_NAMESPACE_USING (used); iter; iter = TREE_CHAIN (iter))
9ed182dc 4065 push_using_directive (TREE_PURPOSE (iter));
00dc6358 4066
9ed182dc 4067 ancestor = namespace_ancestor (current_decl_namespace (), used);
00dc6358 4068 ud = current_binding_level->using_directives;
ea9635c7
ML
4069 ud = perm_tree_cons (used, ancestor, ud);
4070 current_binding_level->using_directives = ud;
4071 return ud;
4072}
4073
f181d4ae
MM
4074/* DECL is a FUNCTION_DECL for a non-member function, which may have
4075 other definitions already in place. We get around this by making
4076 the value of the identifier point to a list of all the things that
4077 want to be referenced by that name. It is then up to the users of
4078 that name to decide what to do with that list.
8d08fdba
MS
4079
4080 DECL may also be a TEMPLATE_DECL, with a FUNCTION_DECL in its DECL_RESULT
4081 slot. It is dealt with the same way.
4082
4083 The value returned may be a previous declaration if we guessed wrong
4084 about what language DECL should belong to (C or C++). Otherwise,
4085 it's always DECL (and never something that's not a _DECL). */
e92cc029 4086
bd6dd845 4087static tree
8d08fdba
MS
4088push_overloaded_decl (decl, forgettable)
4089 tree decl;
4090 int forgettable;
4091{
f181d4ae 4092 tree name = DECL_NAME (decl);
700f8a87 4093 tree old;
f181d4ae 4094 tree new_binding;
2c73f9f5 4095 int doing_global = (namespace_bindings_p () || ! forgettable);
700f8a87
MS
4096
4097 if (doing_global)
4098 {
f181d4ae 4099 old = namespace_binding (name, DECL_CONTEXT (decl));
700f8a87 4100 if (old && TREE_CODE (old) == FUNCTION_DECL
a4443a08 4101 && DECL_ARTIFICIAL (old)
700f8a87
MS
4102 && (DECL_BUILT_IN (old) || DECL_BUILT_IN_NONANSI (old)))
4103 {
a4443a08
MS
4104 if (duplicate_decls (decl, old))
4105 return old;
700f8a87
MS
4106 old = NULL_TREE;
4107 }
4108 }
4109 else
f181d4ae 4110 old = lookup_name_current_level (name);
8d08fdba 4111
700f8a87 4112 if (old)
8d08fdba 4113 {
e1cd6e56 4114 if (TREE_CODE (old) == TYPE_DECL && DECL_ARTIFICIAL (old))
8926095f 4115 {
700f8a87 4116 tree t = TREE_TYPE (old);
cdf5b885
MS
4117 if (IS_AGGR_TYPE (t) && warn_shadow
4118 && (! DECL_IN_SYSTEM_HEADER (decl)
4119 || ! DECL_IN_SYSTEM_HEADER (old)))
8251199e 4120 cp_warning ("`%#D' hides constructor for `%#T'", decl, t);
5b605f68 4121 old = NULL_TREE;
8926095f 4122 }
700f8a87 4123 else if (is_overloaded_fn (old))
8d08fdba 4124 {
8d08fdba
MS
4125 tree tmp;
4126
2c73f9f5
ML
4127 for (tmp = old; tmp; tmp = OVL_NEXT (tmp))
4128 if (decl == OVL_CURRENT (tmp)
4129 || duplicate_decls (decl, OVL_CURRENT (tmp)))
4130 return OVL_CURRENT (tmp);
8d08fdba 4131 }
e1cd6e56
MS
4132 else
4133 {
8251199e
JM
4134 cp_error_at ("previous non-function declaration `%#D'", old);
4135 cp_error ("conflicts with function declaration `%#D'", decl);
a9aedbc2 4136 return decl;
e1cd6e56 4137 }
8d08fdba 4138 }
7177d104 4139
700f8a87 4140 if (old || TREE_CODE (decl) == TEMPLATE_DECL)
8d08fdba 4141 {
2c73f9f5 4142 if (old && TREE_CODE (old) != OVERLOAD)
f181d4ae
MM
4143 new_binding = ovl_cons (decl, ovl_cons (old, NULL_TREE));
4144 else
4145 new_binding = ovl_cons (decl, old);
8d08fdba
MS
4146 }
4147 else
f181d4ae
MM
4148 /* NAME is not ambiguous. */
4149 new_binding = decl;
700f8a87
MS
4150
4151 if (doing_global)
f181d4ae 4152 set_namespace_binding (name, current_namespace, new_binding);
700f8a87 4153 else
f181d4ae
MM
4154 {
4155 /* We only create an OVERLOAD if there was a previous binding at
4156 this level. In that case, we need to remove the old binding
4157 and replace it with the new binding. We must also run
4158 through the NAMES on the current binding level to update the
4159 chain. */
4160 if (TREE_CODE (new_binding) == OVERLOAD)
4161 {
4162 tree *d;
4163
4164 for (d = &BINDING_LEVEL (IDENTIFIER_BINDING (name))->names;
4165 *d;
4166 d = &TREE_CHAIN (*d))
4167 if (*d == old
4168 || (TREE_CODE (*d) == TREE_LIST
4169 && TREE_VALUE (*d) == old))
4170 {
4171 *d = TREE_CHAIN (*d);
4172 break;
4173 }
4174
4175 pop_binding (name);
4176 }
4177
4178 /* Install the new binding. */
4179 push_local_binding (name, new_binding);
4180 }
700f8a87 4181
8d08fdba
MS
4182 return decl;
4183}
4184\f
4185/* Generate an implicit declaration for identifier FUNCTIONID
4186 as a function of type int (). Print a warning if appropriate. */
4187
4188tree
4189implicitly_declare (functionid)
4190 tree functionid;
4191{
4192 register tree decl;
4193 int temp = allocation_temporary_p ();
4194
4195 push_obstacks_nochange ();
4196
4197 /* Save the decl permanently so we can warn if definition follows.
4198 In ANSI C, warn_implicit is usually false, so the saves little space.
4199 But in C++, it's usually true, hence the extra code. */
d22c8596 4200 if (temp && (! warn_implicit || toplevel_bindings_p ()))
8d08fdba
MS
4201 end_temporary_allocation ();
4202
4203 /* We used to reuse an old implicit decl here,
4204 but this loses with inline functions because it can clobber
4205 the saved decl chains. */
4206 decl = build_lang_decl (FUNCTION_DECL, functionid, default_function_type);
4207
4208 DECL_EXTERNAL (decl) = 1;
4209 TREE_PUBLIC (decl) = 1;
4210
4211 /* ANSI standard says implicit declarations are in the innermost block.
d22c8596 4212 So we record the decl in the standard fashion. */
8d08fdba
MS
4213 pushdecl (decl);
4214 rest_of_decl_compilation (decl, NULL_PTR, 0, 0);
4215
4216 if (warn_implicit
4217 /* Only one warning per identifier. */
4218 && IDENTIFIER_IMPLICIT_DECL (functionid) == NULL_TREE)
4219 {
8251199e 4220 cp_pedwarn ("implicit declaration of function `%#D'", decl);
8d08fdba
MS
4221 }
4222
4223 SET_IDENTIFIER_IMPLICIT_DECL (functionid, decl);
4224
4225 pop_obstacks ();
4226
4227 return decl;
4228}
4229
8251199e 4230/* Return zero if the declaration NEWDECL is valid
8d08fdba
MS
4231 when the declaration OLDDECL (assumed to be for the same name)
4232 has already been seen.
4233 Otherwise return an error message format string with a %s
4234 where the identifier should go. */
4235
8251199e 4236static char *
8d08fdba
MS
4237redeclaration_error_message (newdecl, olddecl)
4238 tree newdecl, olddecl;
4239{
4240 if (TREE_CODE (newdecl) == TYPE_DECL)
4241 {
4242 /* Because C++ can put things into name space for free,
4243 constructs like "typedef struct foo { ... } foo"
4244 would look like an erroneous redeclaration. */
3bfdc719 4245 if (same_type_p (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
8251199e 4246 return 0;
8d08fdba 4247 else
8251199e 4248 return "redefinition of `%#D'";
8d08fdba
MS
4249 }
4250 else if (TREE_CODE (newdecl) == FUNCTION_DECL)
4251 {
4252 /* If this is a pure function, its olddecl will actually be
4253 the original initialization to `0' (which we force to call
4254 abort()). Don't complain about redefinition in this case. */
4255 if (DECL_LANG_SPECIFIC (olddecl) && DECL_ABSTRACT_VIRTUAL_P (olddecl))
8251199e 4256 return 0;
8d08fdba 4257
2c73f9f5
ML
4258 /* If both functions come from different namespaces, this is not
4259 a redeclaration - this is a conflict with a used function. */
6eb3bb27 4260 if (DECL_NAMESPACE_SCOPE_P (olddecl)
2c73f9f5 4261 && DECL_CONTEXT (olddecl) != DECL_CONTEXT (newdecl))
8251199e 4262 return "`%D' conflicts with used function";
2c73f9f5 4263
db5ae43f
MS
4264 /* We'll complain about linkage mismatches in
4265 warn_extern_redeclared_static. */
4266
2c73f9f5 4267 /* Defining the same name twice is no good. */
8d08fdba 4268 if (DECL_INITIAL (olddecl) != NULL_TREE
faae18ab 4269 && DECL_INITIAL (newdecl) != NULL_TREE)
8d08fdba
MS
4270 {
4271 if (DECL_NAME (olddecl) == NULL_TREE)
8251199e 4272 return "`%#D' not declared in class";
8d08fdba 4273 else
8251199e 4274 return "redefinition of `%#D'";
8d08fdba 4275 }
8251199e 4276 return 0;
8d08fdba 4277 }
51c184be
MS
4278 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
4279 {
ec255269
MS
4280 if ((TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
4281 && DECL_INITIAL (DECL_TEMPLATE_RESULT (newdecl))
4282 && DECL_INITIAL (DECL_TEMPLATE_RESULT (olddecl)))
4283 || (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL
4284 && TYPE_SIZE (TREE_TYPE (newdecl))
4285 && TYPE_SIZE (TREE_TYPE (olddecl))))
8251199e
JM
4286 return "redefinition of `%#D'";
4287 return 0;
51c184be 4288 }
5566b478 4289 else if (toplevel_bindings_p ())
8d08fdba
MS
4290 {
4291 /* Objects declared at top level: */
4292 /* If at least one is a reference, it's ok. */
4293 if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl))
8251199e 4294 return 0;
8926095f 4295 /* Reject two definitions. */
8251199e 4296 return "redefinition of `%#D'";
8d08fdba
MS
4297 }
4298 else
4299 {
4300 /* Objects declared with block scope: */
4301 /* Reject two definitions, and reject a definition
4302 together with an external reference. */
4303 if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl)))
8251199e
JM
4304 return "redeclaration of `%#D'";
4305 return 0;
8d08fdba
MS
4306 }
4307}
4308\f
4309/* Get the LABEL_DECL corresponding to identifier ID as a label.
4310 Create one if none exists so far for the current function.
4311 This function is called for both label definitions and label references. */
4312
4313tree
4314lookup_label (id)
4315 tree id;
4316{
4317 register tree decl = IDENTIFIER_LABEL_VALUE (id);
4318
4319 if (current_function_decl == NULL_TREE)
4320 {
8251199e 4321 error ("label `%s' referenced outside of any function",
8d08fdba
MS
4322 IDENTIFIER_POINTER (id));
4323 return NULL_TREE;
4324 }
4325
4326 if ((decl == NULL_TREE
4327 || DECL_SOURCE_LINE (decl) == 0)
e349ee73
MS
4328 && (named_label_uses == NULL
4329 || named_label_uses->names_in_scope != current_binding_level->names
4330 || named_label_uses->label_decl != decl))
4331 {
4332 struct named_label_list *new_ent;
4333 new_ent
4334 = (struct named_label_list*)oballoc (sizeof (struct named_label_list));
4335 new_ent->label_decl = decl;
4336 new_ent->names_in_scope = current_binding_level->names;
4337 new_ent->binding_level = current_binding_level;
4338 new_ent->lineno_o_goto = lineno;
4339 new_ent->filename_o_goto = input_filename;
4340 new_ent->next = named_label_uses;
4341 named_label_uses = new_ent;
8d08fdba
MS
4342 }
4343
4344 /* Use a label already defined or ref'd with this name. */
4345 if (decl != NULL_TREE)
4346 {
4347 /* But not if it is inherited and wasn't declared to be inheritable. */
4348 if (DECL_CONTEXT (decl) != current_function_decl
4349 && ! C_DECLARED_LABEL_FLAG (decl))
4350 return shadow_label (id);
4351 return decl;
4352 }
4353
4354 decl = build_decl (LABEL_DECL, id, void_type_node);
4355
cffa8729
MS
4356 /* Make sure every label has an rtx. */
4357 label_rtx (decl);
4358
8d08fdba
MS
4359 /* A label not explicitly declared must be local to where it's ref'd. */
4360 DECL_CONTEXT (decl) = current_function_decl;
4361
4362 DECL_MODE (decl) = VOIDmode;
4363
4364 /* Say where one reference is to the label,
4365 for the sake of the error if it is not defined. */
4366 DECL_SOURCE_LINE (decl) = lineno;
4367 DECL_SOURCE_FILE (decl) = input_filename;
4368
4369 SET_IDENTIFIER_LABEL_VALUE (id, decl);
4370
4371 named_labels = tree_cons (NULL_TREE, decl, named_labels);
e349ee73 4372 named_label_uses->label_decl = decl;
8d08fdba
MS
4373
4374 return decl;
4375}
4376
4377/* Make a label named NAME in the current function,
4378 shadowing silently any that may be inherited from containing functions
4379 or containing scopes.
4380
4381 Note that valid use, if the label being shadowed
4382 comes from another scope in the same function,
4383 requires calling declare_nonlocal_label right away. */
4384
4385tree
4386shadow_label (name)
4387 tree name;
4388{
4389 register tree decl = IDENTIFIER_LABEL_VALUE (name);
4390
4391 if (decl != NULL_TREE)
4392 {
4393 shadowed_labels = tree_cons (NULL_TREE, decl, shadowed_labels);
4394 SET_IDENTIFIER_LABEL_VALUE (name, NULL_TREE);
8d08fdba
MS
4395 }
4396
4397 return lookup_label (name);
4398}
4399
4400/* Define a label, specifying the location in the source file.
4401 Return the LABEL_DECL node for the label, if the definition is valid.
4402 Otherwise return 0. */
4403
4404tree
4405define_label (filename, line, name)
4406 char *filename;
4407 int line;
4408 tree name;
4409{
5566b478
MS
4410 tree decl;
4411
4412 if (minimal_parse_mode)
4413 {
4414 push_obstacks (&permanent_obstack, &permanent_obstack);
4415 decl = build_decl (LABEL_DECL, name, void_type_node);
4416 pop_obstacks ();
4417 DECL_SOURCE_LINE (decl) = line;
4418 DECL_SOURCE_FILE (decl) = filename;
4419 add_tree (decl);
4420 return decl;
4421 }
4422
4423 decl = lookup_label (name);
8d08fdba
MS
4424
4425 /* After labels, make any new cleanups go into their
4426 own new (temporary) binding contour. */
4427 current_binding_level->more_cleanups_ok = 0;
4428
4429 /* If label with this name is known from an outer context, shadow it. */
4430 if (decl != NULL_TREE && DECL_CONTEXT (decl) != current_function_decl)
4431 {
4432 shadowed_labels = tree_cons (NULL_TREE, decl, shadowed_labels);
4433 SET_IDENTIFIER_LABEL_VALUE (name, NULL_TREE);
4434 decl = lookup_label (name);
4435 }
4436
e1cd6e56 4437 if (name == get_identifier ("wchar_t"))
8251199e 4438 cp_pedwarn ("label named wchar_t");
e1cd6e56 4439
8d08fdba
MS
4440 if (DECL_INITIAL (decl) != NULL_TREE)
4441 {
8251199e 4442 cp_error ("duplicate label `%D'", decl);
8d08fdba
MS
4443 return 0;
4444 }
4445 else
4446 {
e349ee73 4447 struct named_label_list *uses, *prev;
28cbf42c 4448 int identified = 0;
8d08fdba
MS
4449
4450 /* Mark label as having been defined. */
4451 DECL_INITIAL (decl) = error_mark_node;
4452 /* Say where in the source. */
4453 DECL_SOURCE_FILE (decl) = filename;
4454 DECL_SOURCE_LINE (decl) = line;
4455
e349ee73
MS
4456 prev = NULL;
4457 uses = named_label_uses;
4458 while (uses != NULL)
4459 if (uses->label_decl == decl)
8d08fdba
MS
4460 {
4461 struct binding_level *b = current_binding_level;
4462 while (b)
4463 {
4464 tree new_decls = b->names;
e349ee73
MS
4465 tree old_decls = (b == uses->binding_level)
4466 ? uses->names_in_scope : NULL_TREE;
8d08fdba
MS
4467 while (new_decls != old_decls)
4468 {
4469 if (TREE_CODE (new_decls) == VAR_DECL
4470 /* Don't complain about crossing initialization
4471 of internal entities. They can't be accessed,
4472 and they should be cleaned up
4473 by the time we get to the label. */
700f8a87 4474 && ! DECL_ARTIFICIAL (new_decls)
5524676d
JM
4475 && !(DECL_INITIAL (new_decls) == NULL_TREE
4476 && pod_type_p (TREE_TYPE (new_decls))))
8d08fdba 4477 {
e349ee73
MS
4478 if (! identified)
4479 {
8251199e 4480 cp_error ("jump to label `%D'", decl);
e349ee73
MS
4481 error_with_file_and_line (uses->filename_o_goto,
4482 uses->lineno_o_goto,
4483 " from here");
4484 identified = 1;
4485 }
5524676d
JM
4486 if (DECL_INITIAL (new_decls)
4487 || TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (new_decls)))
4488 cp_error_at (" crosses initialization of `%#D'",
4489 new_decls);
4490 else
4491 cp_error_at (" enters scope of non-POD `%#D'",
4492 new_decls);
8d08fdba
MS
4493 }
4494 new_decls = TREE_CHAIN (new_decls);
4495 }
e349ee73 4496 if (b == uses->binding_level)
8d08fdba
MS
4497 break;
4498 b = b->level_chain;
4499 }
4500
e349ee73
MS
4501 if (prev != NULL)
4502 prev->next = uses->next;
8d08fdba 4503 else
e349ee73
MS
4504 named_label_uses = uses->next;
4505
4506 uses = uses->next;
4507 }
4508 else
4509 {
4510 prev = uses;
4511 uses = uses->next;
8d08fdba
MS
4512 }
4513 current_function_return_value = NULL_TREE;
4514 return decl;
4515 }
4516}
4517
a5894242
MS
4518struct cp_switch
4519{
4520 struct binding_level *level;
4521 struct cp_switch *next;
4522};
4523
4524static struct cp_switch *switch_stack;
4525
4526void
4527push_switch ()
4528{
4529 struct cp_switch *p
4530 = (struct cp_switch *) oballoc (sizeof (struct cp_switch));
4531 p->level = current_binding_level;
4532 p->next = switch_stack;
4533 switch_stack = p;
4534}
4535
4536void
4537pop_switch ()
4538{
4539 switch_stack = switch_stack->next;
4540}
4541
8d08fdba
MS
4542/* Same, but for CASE labels. If DECL is NULL_TREE, it's the default. */
4543/* XXX Note decl is never actually used. (bpk) */
e92cc029 4544
8d08fdba 4545void
b370501f 4546define_case_label ()
8d08fdba
MS
4547{
4548 tree cleanup = last_cleanup_this_contour ();
a5894242
MS
4549 struct binding_level *b = current_binding_level;
4550 int identified = 0;
4551
8d08fdba
MS
4552 if (cleanup)
4553 {
4554 static int explained = 0;
8251199e
JM
4555 cp_warning_at ("destructor needed for `%#D'", TREE_PURPOSE (cleanup));
4556 warning ("where case label appears here");
8d08fdba
MS
4557 if (!explained)
4558 {
8251199e
JM
4559 warning ("(enclose actions of previous case statements requiring");
4560 warning ("destructors in their own binding contours.)");
8d08fdba
MS
4561 explained = 1;
4562 }
4563 }
4564
a5894242
MS
4565 for (; b && b != switch_stack->level; b = b->level_chain)
4566 {
4567 tree new_decls = b->names;
4568 for (; new_decls; new_decls = TREE_CHAIN (new_decls))
4569 {
4570 if (TREE_CODE (new_decls) == VAR_DECL
4571 /* Don't complain about crossing initialization
4572 of internal entities. They can't be accessed,
4573 and they should be cleaned up
4574 by the time we get to the label. */
4575 && ! DECL_ARTIFICIAL (new_decls)
4576 && ((DECL_INITIAL (new_decls) != NULL_TREE
4577 && DECL_INITIAL (new_decls) != error_mark_node)
4578 || TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (new_decls))))
4579 {
4580 if (! identified)
8251199e 4581 error ("jump to case label");
a5894242 4582 identified = 1;
8251199e 4583 cp_error_at (" crosses initialization of `%#D'",
a5894242
MS
4584 new_decls);
4585 }
4586 }
4587 }
4588
8d08fdba
MS
4589 /* After labels, make any new cleanups go into their
4590 own new (temporary) binding contour. */
4591
4592 current_binding_level->more_cleanups_ok = 0;
4593 current_function_return_value = NULL_TREE;
4594}
4595\f
4596/* Return the list of declarations of the current level.
4597 Note that this list is in reverse order unless/until
4598 you nreverse it; and when you do nreverse it, you must
4599 store the result back using `storedecls' or you will lose. */
4600
4601tree
4602getdecls ()
4603{
4604 return current_binding_level->names;
4605}
4606
4607/* Return the list of type-tags (for structs, etc) of the current level. */
4608
4609tree
4610gettags ()
4611{
4612 return current_binding_level->tags;
4613}
4614
4615/* Store the list of declarations of the current level.
4616 This is done for the parameter declarations of a function being defined,
4617 after they are modified in the light of any missing parameters. */
4618
4619static void
4620storedecls (decls)
4621 tree decls;
4622{
4623 current_binding_level->names = decls;
4624}
4625
4626/* Similarly, store the list of tags of the current level. */
4627
4628static void
4629storetags (tags)
4630 tree tags;
4631{
4632 current_binding_level->tags = tags;
4633}
4634\f
4635/* Given NAME, an IDENTIFIER_NODE,
4636 return the structure (or union or enum) definition for that name.
4637 Searches binding levels from BINDING_LEVEL up to the global level.
4638 If THISLEVEL_ONLY is nonzero, searches only the specified context
4639 (but skips any tag-transparent contexts to find one that is
4640 meaningful for tags).
4641 FORM says which kind of type the caller wants;
4642 it is RECORD_TYPE or UNION_TYPE or ENUMERAL_TYPE.
4643 If the wrong kind of type is found, and it's not a template, an error is
4644 reported. */
4645
4646static tree
4647lookup_tag (form, name, binding_level, thislevel_only)
4648 enum tree_code form;
8d08fdba 4649 tree name;
cffa8729 4650 struct binding_level *binding_level;
8d08fdba
MS
4651 int thislevel_only;
4652{
4653 register struct binding_level *level;
36a117a5
MM
4654 /* Non-zero if, we should look past a pseudo-global level, even if
4655 THISLEVEL_ONLY. */
4656 int allow_pseudo_global = 1;
8d08fdba
MS
4657
4658 for (level = binding_level; level; level = level->level_chain)
4659 {
4660 register tree tail;
4661 if (ANON_AGGRNAME_P (name))
4662 for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
4663 {
4664 /* There's no need for error checking here, because
4665 anon names are unique throughout the compilation. */
4666 if (TYPE_IDENTIFIER (TREE_VALUE (tail)) == name)
4667 return TREE_VALUE (tail);
4668 }
2c73f9f5
ML
4669 else if (level->namespace_p)
4670 /* Do namespace lookup. */
6c011b01 4671 for (tail = current_namespace; 1; tail = CP_DECL_CONTEXT (tail))
2c73f9f5 4672 {
36a117a5
MM
4673 tree old = binding_for_name (name, tail);
4674
4675 /* If we just skipped past a pseudo global level, even
4676 though THISLEVEL_ONLY, and we find a template class
4677 declaration, then we use the _TYPE node for the
4678 template. See the example below. */
4679 if (thislevel_only && !allow_pseudo_global
4680 && old && BINDING_VALUE (old)
4681 && DECL_CLASS_TEMPLATE_P (BINDING_VALUE (old)))
4682 old = TREE_TYPE (BINDING_VALUE (old));
4683 else
4684 old = BINDING_TYPE (old);
4685
2c73f9f5
ML
4686 /* If it has an original type, it is a typedef, and we
4687 should not return it. */
4688 if (old && DECL_ORIGINAL_TYPE (TYPE_NAME (old)))
4689 old = NULL_TREE;
4690 if (old && TREE_CODE (old) != form
4691 && !(form != ENUMERAL_TYPE && TREE_CODE (old) == TEMPLATE_DECL))
4692 {
8251199e 4693 cp_error ("`%#D' redeclared as %C", old, form);
2c73f9f5
ML
4694 return NULL_TREE;
4695 }
4696 if (old)
4697 return old;
4698 if (thislevel_only || tail == global_namespace)
4699 return NULL_TREE;
4700 }
8d08fdba
MS
4701 else
4702 for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
4703 {
a80e4195 4704 if (TREE_PURPOSE (tail) == name)
8d08fdba
MS
4705 {
4706 enum tree_code code = TREE_CODE (TREE_VALUE (tail));
4707 /* Should tighten this up; it'll probably permit
4708 UNION_TYPE and a struct template, for example. */
4709 if (code != form
5566b478 4710 && !(form != ENUMERAL_TYPE && code == TEMPLATE_DECL))
8d08fdba
MS
4711 {
4712 /* Definition isn't the kind we were looking for. */
8251199e 4713 cp_error ("`%#D' redeclared as %C", TREE_VALUE (tail),
8d08fdba 4714 form);
72b7eeff 4715 return NULL_TREE;
8d08fdba
MS
4716 }
4717 return TREE_VALUE (tail);
4718 }
4719 }
4720 if (thislevel_only && ! level->tag_transparent)
5566b478 4721 {
36a117a5 4722 if (level->pseudo_global && allow_pseudo_global)
5566b478 4723 {
36a117a5
MM
4724 /* We must deal with cases like this:
4725
4726 template <class T> struct S;
4727 template <class T> struct S {};
4728
4729 When looking up `S', for the second declaration, we
4730 would like to find the first declaration. But, we
4731 are in the pseudo-global level created for the
4732 template parameters, rather than the (surrounding)
4733 namespace level. Thus, we keep going one more level,
4734 even though THISLEVEL_ONLY is non-zero. */
4735 allow_pseudo_global = 0;
4736 continue;
5566b478 4737 }
36a117a5
MM
4738 else
4739 return NULL_TREE;
5566b478 4740 }
2c73f9f5 4741 if (current_class_type && level->level_chain->namespace_p)
8d08fdba
MS
4742 {
4743 /* Try looking in this class's tags before heading into
4744 global binding level. */
4745 tree context = current_class_type;
4746 while (context)
4747 {
4748 switch (TREE_CODE_CLASS (TREE_CODE (context)))
4749 {
4750 tree these_tags;
4751 case 't':
4752 these_tags = CLASSTYPE_TAGS (context);
4753 if (ANON_AGGRNAME_P (name))
4754 while (these_tags)
4755 {
4756 if (TYPE_IDENTIFIER (TREE_VALUE (these_tags))
4757 == name)
4758 return TREE_VALUE (tail);
4759 these_tags = TREE_CHAIN (these_tags);
4760 }
4761 else
4762 while (these_tags)
4763 {
4764 if (TREE_PURPOSE (these_tags) == name)
4765 {
4766 if (TREE_CODE (TREE_VALUE (these_tags)) != form)
4767 {
8251199e 4768 cp_error ("`%#D' redeclared as %C in class scope",
8d08fdba 4769 TREE_VALUE (tail), form);
72b7eeff 4770 return NULL_TREE;
8d08fdba
MS
4771 }
4772 return TREE_VALUE (tail);
4773 }
4774 these_tags = TREE_CHAIN (these_tags);
4775 }
4776 /* If this type is not yet complete, then don't
4777 look at its context. */
4778 if (TYPE_SIZE (context) == NULL_TREE)
4779 goto no_context;
4780 /* Go to next enclosing type, if any. */
d2e5ee5c 4781 context = DECL_CONTEXT (TYPE_MAIN_DECL (context));
8d08fdba
MS
4782 break;
4783 case 'd':
4784 context = DECL_CONTEXT (context);
4785 break;
4786 default:
4787 my_friendly_abort (10);
4788 }
4789 continue;
4790 no_context:
4791 break;
4792 }
4793 }
4794 }
4795 return NULL_TREE;
4796}
4797
bd6dd845 4798#if 0
8d08fdba
MS
4799void
4800set_current_level_tags_transparency (tags_transparent)
4801 int tags_transparent;
4802{
4803 current_binding_level->tag_transparent = tags_transparent;
4804}
bd6dd845 4805#endif
8d08fdba
MS
4806
4807/* Given a type, find the tag that was defined for it and return the tag name.
4808 Otherwise return 0. However, the value can never be 0
4809 in the cases in which this is used.
4810
4811 C++: If NAME is non-zero, this is the new name to install. This is
4812 done when replacing anonymous tags with real tag names. */
4813
4814static tree
4815lookup_tag_reverse (type, name)
4816 tree type;
4817 tree name;
4818{
4819 register struct binding_level *level;
4820
4821 for (level = current_binding_level; level; level = level->level_chain)
4822 {
4823 register tree tail;
4824 for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
4825 {
4826 if (TREE_VALUE (tail) == type)
4827 {
4828 if (name)
4829 TREE_PURPOSE (tail) = name;
4830 return TREE_PURPOSE (tail);
4831 }
4832 }
4833 }
4834 return NULL_TREE;
4835}
8d08fdba
MS
4836\f
4837/* Lookup TYPE in CONTEXT (a chain of nested types or a FUNCTION_DECL).
4838 Return the type value, or NULL_TREE if not found. */
e92cc029 4839
8d08fdba
MS
4840static tree
4841lookup_nested_type (type, context)
4842 tree type;
4843 tree context;
4844{
4845 if (context == NULL_TREE)
4846 return NULL_TREE;
4847 while (context)
4848 {
4849 switch (TREE_CODE (context))
4850 {
4851 case TYPE_DECL:
4852 {
4853 tree ctype = TREE_TYPE (context);
4854 tree match = value_member (type, CLASSTYPE_TAGS (ctype));
4855 if (match)
4856 return TREE_VALUE (match);
4857 context = DECL_CONTEXT (context);
4858
4859 /* When we have a nested class whose member functions have
4860 local types (e.g., a set of enums), we'll arrive here
4861 with the DECL_CONTEXT as the actual RECORD_TYPE node for
4862 the enclosing class. Instead, we want to make sure we
4863 come back in here with the TYPE_DECL, not the RECORD_TYPE. */
4864 if (context && TREE_CODE (context) == RECORD_TYPE)
4865 context = TREE_CHAIN (context);
4866 }
4867 break;
4868 case FUNCTION_DECL:
e1cd6e56
MS
4869 if (TYPE_NAME (type) && TYPE_IDENTIFIER (type))
4870 return lookup_name (TYPE_IDENTIFIER (type), 1);
4871 return NULL_TREE;
8d08fdba
MS
4872 default:
4873 my_friendly_abort (12);
4874 }
4875 }
4876 return NULL_TREE;
4877}
4878
a9aedbc2 4879/* Look up NAME in the NAMESPACE. */
e92cc029 4880
a9aedbc2
MS
4881tree
4882lookup_namespace_name (namespace, name)
4883 tree namespace, name;
4884{
2c73f9f5 4885 struct tree_binding _b;
30394414 4886 tree val;
2c73f9f5 4887
30394414 4888 my_friendly_assert (TREE_CODE (namespace) == NAMESPACE_DECL, 370);
1231fb96
ML
4889
4890 /* This happens for A::B<int> when B is a namespace. */
4891 if (TREE_CODE (name) == NAMESPACE_DECL)
4892 return name;
4893
30394414
JM
4894 my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 373);
4895
2c73f9f5 4896 val = binding_init (&_b);
52c11ef6 4897 if (!qualified_lookup_using_namespace (name, namespace, val, 0))
2c73f9f5
ML
4898 return error_mark_node;
4899
4900 if (BINDING_VALUE (val))
1c35f5b6
JM
4901 {
4902 val = BINDING_VALUE (val);
4903
4904 /* If we have a single function from a using decl, pull it out. */
4905 if (TREE_CODE (val) == OVERLOAD && ! really_overloaded_fn (val))
4906 val = OVL_FUNCTION (val);
4907 return val;
4908 }
4909
8251199e 4910 cp_error ("`%D' undeclared in namespace `%D'", name, namespace);
30394414 4911 return error_mark_node;
a9aedbc2
MS
4912}
4913
7ddedda4
MM
4914/* Hash a TYPENAME_TYPE. K is really of type `tree'. */
4915
4916static unsigned long
4917typename_hash (k)
4918 hash_table_key k;
4919{
4920 unsigned long hash;
4921 tree t;
4922
4923 t = (tree) k;
4924 hash = (((unsigned long) TYPE_CONTEXT (t))
4925 ^ ((unsigned long) DECL_NAME (TYPE_NAME (t))));
4926
4927 return hash;
4928}
4929
4930/* Compare two TYPENAME_TYPEs. K1 and K2 are really of type `tree'. */
4931
4932static boolean
4933typename_compare (k1, k2)
4934 hash_table_key k1;
4935 hash_table_key k2;
4936{
4937 tree t1;
4938 tree t2;
4939 tree d1;
4940 tree d2;
4941
4942 t1 = (tree) k1;
4943 t2 = (tree) k2;
4944 d1 = TYPE_NAME (t1);
4945 d2 = TYPE_NAME (t2);
4946
4947 return (DECL_NAME (d1) == DECL_NAME (d2)
4948 && same_type_p (TYPE_CONTEXT (t1), TYPE_CONTEXT (t2))
4949 && ((TREE_TYPE (t1) != NULL_TREE)
4950 == (TREE_TYPE (t2) != NULL_TREE))
4951 && same_type_p (TREE_TYPE (t1), TREE_TYPE (t2))
4952 && TYPENAME_TYPE_FULLNAME (t1) == TYPENAME_TYPE_FULLNAME (t2));
4953}
4954
45869a6c
MM
4955/* Build a TYPENAME_TYPE. If the type is `typename T::t', CONTEXT is
4956 the type of `T', NAME is the IDENTIFIER_NODE for `t'. If BASE_TYPE
4957 is non-NULL, this type is being created by the implicit typename
4958 extension, and BASE_TYPE is a type named `t' in some base class of
4959 `T' which depends on template parameters.
4960
4961 Returns the new TYPENAME_TYPE. */
4962
4963tree
4964build_typename_type (context, name, fullname, base_type)
4965 tree context;
4966 tree name;
4967 tree fullname;
4968 tree base_type;
4969{
4970 tree t;
4971 tree d;
7ddedda4 4972 struct hash_entry* e;
45869a6c 4973
7ddedda4
MM
4974 static struct hash_table ht;
4975
4976 push_obstacks (&permanent_obstack, &permanent_obstack);
4977
4978 if (!ht.table
4979 && !hash_table_init (&ht, &hash_newfunc, &typename_hash,
4980 &typename_compare))
4981 fatal ("virtual memory exhausted");
45869a6c
MM
4982
4983 /* Build the TYPENAME_TYPE. */
4984 t = make_lang_type (TYPENAME_TYPE);
4985 TYPE_CONTEXT (t) = FROB_CONTEXT (context);
4986 TYPENAME_TYPE_FULLNAME (t) = fullname;
4987 TREE_TYPE (t) = base_type;
45869a6c
MM
4988
4989 /* Build the corresponding TYPE_DECL. */
4990 d = build_decl (TYPE_DECL, name, t);
4991 TYPE_NAME (TREE_TYPE (d)) = d;
4992 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
4993 DECL_CONTEXT (d) = FROB_CONTEXT (context);
2642b9bf 4994 DECL_ARTIFICIAL (d) = 1;
45869a6c 4995
7ddedda4
MM
4996 /* See if we already have this type. */
4997 e = hash_lookup (&ht, t, /*create=*/false, /*copy=*/0);
4998 if (e)
4999 {
5000 /* This will free not only TREE_TYPE, but the lang-specific data
5001 and the TYPE_DECL as well. */
5002 obstack_free (&permanent_obstack, t);
5003 t = (tree) e->key;
5004 }
5005 else
5006 /* Insert the type into the table. */
5007 hash_lookup (&ht, t, /*create=*/true, /*copy=*/0);
5008
5009 pop_obstacks ();
45869a6c
MM
5010
5011 return t;
5012}
5013
5566b478
MS
5014tree
5015make_typename_type (context, name)
5016 tree context, name;
5017{
45869a6c 5018 tree t;
b2b7d40a 5019 tree fullname;
a80e4195 5020
653cc74a
JM
5021 if (TREE_CODE_CLASS (TREE_CODE (name)) == 't')
5022 name = TYPE_IDENTIFIER (name);
5023 else if (TREE_CODE (name) == TYPE_DECL)
a80e4195 5024 name = DECL_NAME (name);
b2b7d40a
JM
5025
5026 fullname = name;
5027
5028 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
11686454
JM
5029 {
5030 name = TREE_OPERAND (name, 0);
5031 if (TREE_CODE (name) == TEMPLATE_DECL)
5032 name = TREE_OPERAND (fullname, 0) = DECL_NAME (name);
5033 }
b2b7d40a 5034 if (TREE_CODE (name) != IDENTIFIER_NODE)
a80e4195 5035 my_friendly_abort (2000);
5566b478 5036
04ddee1b
BK
5037 if (TREE_CODE (context) == NAMESPACE_DECL)
5038 {
5039 /* We can get here from typename_sub0 in the explicit_template_type
5040 expansion. Just fail. */
5041 cp_error ("no class template named `%#T' in `%#T'",
5042 name, context);
5043 return error_mark_node;
5044 }
5045
85b71cf2 5046 if (! uses_template_parms (context)
b77ead33 5047 || currently_open_class (context))
5566b478 5048 {
b2b7d40a
JM
5049 if (TREE_CODE (fullname) == TEMPLATE_ID_EXPR)
5050 {
5051 if (IS_AGGR_TYPE (context))
5052 t = lookup_field (context, name, 0, 0);
5053 else
5054 t = NULL_TREE;
5055
5056 if (t == NULL_TREE || TREE_CODE (t) != TEMPLATE_DECL
5057 || TREE_CODE (DECL_RESULT (t)) != TYPE_DECL)
5058 {
8251199e 5059 cp_error ("no class template named `%#T' in `%#T'",
b2b7d40a
JM
5060 name, context);
5061 return error_mark_node;
5062 }
ffb690bd 5063
b2b7d40a 5064 return lookup_template_class (t, TREE_OPERAND (fullname, 1),
36a117a5
MM
5065 NULL_TREE, context,
5066 /*entering_scope=*/0);
b2b7d40a
JM
5067 }
5068 else
5566b478 5069 {
b2b7d40a
JM
5070 if (IS_AGGR_TYPE (context))
5071 t = lookup_field (context, name, 0, 1);
5072 else
5073 t = NULL_TREE;
5074
5075 if (t == NULL_TREE)
5076 {
8251199e 5077 cp_error ("no type named `%#T' in `%#T'", name, context);
b2b7d40a
JM
5078 return error_mark_node;
5079 }
1107c4b3 5080
b2b7d40a 5081 return TREE_TYPE (t);
5566b478 5082 }
5566b478 5083 }
45869a6c
MM
5084
5085 return build_typename_type (context, name, fullname, NULL_TREE);
5566b478
MS
5086}
5087
2c73f9f5
ML
5088/* Select the right _DECL from multiple choices. */
5089
5090static tree
52c11ef6 5091select_decl (binding, flags)
2c73f9f5 5092 tree binding;
52c11ef6 5093 int flags;
2c73f9f5
ML
5094{
5095 tree val;
5096 val = BINDING_VALUE (binding);
52c11ef6 5097 if (LOOKUP_NAMESPACES_ONLY (flags))
3e3f722c
ML
5098 {
5099 /* We are not interested in types. */
5100 if (val && TREE_CODE (val) == NAMESPACE_DECL)
5101 return val;
5102 return NULL_TREE;
5103 }
5104
2c73f9f5
ML
5105 /* If we could have a type and
5106 we have nothing or we need a type and have none. */
5107 if (BINDING_TYPE (binding)
52c11ef6
JM
5108 && (!val || ((flags & LOOKUP_PREFER_TYPES)
5109 && TREE_CODE (val) != TYPE_DECL)))
2c73f9f5
ML
5110 val = TYPE_STUB_DECL (BINDING_TYPE (binding));
5111 /* Don't return non-types if we really prefer types. */
52c11ef6 5112 else if (val && LOOKUP_TYPES_ONLY (flags) && TREE_CODE (val) != TYPE_DECL
2c73f9f5
ML
5113 && (!looking_for_template || TREE_CODE (val) != TEMPLATE_DECL))
5114 val = NULL_TREE;
1c35f5b6 5115
2c73f9f5
ML
5116 return val;
5117}
5118
ea9635c7
ML
5119/* Unscoped lookup of a global, iterate over namespaces, considering
5120 using namespace statements. */
5121
5122static tree
52c11ef6 5123unqualified_namespace_lookup (name, flags)
ea9635c7 5124 tree name;
52c11ef6 5125 int flags;
ea9635c7
ML
5126{
5127 struct tree_binding _binding;
5128 tree b = binding_init (&_binding);
5129 tree initial = current_decl_namespace();
5130 tree scope = initial;
5131 tree siter;
5132 struct binding_level *level;
5133 tree val = NULL_TREE;
5134
5135 while (!val)
5136 {
5137 val = binding_for_name (name, scope);
5138
5139 /* Initialize binding for this context. */
5140 BINDING_VALUE (b) = BINDING_VALUE (val);
5141 BINDING_TYPE (b) = BINDING_TYPE (val);
5142
5143 /* Add all _DECLs seen through local using-directives. */
5144 for (level = current_binding_level;
5145 !level->namespace_p;
5146 level = level->level_chain)
52c11ef6
JM
5147 if (!lookup_using_namespace (name, b, level->using_directives,
5148 scope, flags))
ea9635c7
ML
5149 /* Give up because of error. */
5150 return NULL_TREE;
5151
5152 /* Add all _DECLs seen through global using-directives. */
5153 /* XXX local and global using lists should work equally. */
5154 siter = initial;
5155 while (1)
5156 {
5157 if (!lookup_using_namespace (name, b, DECL_NAMESPACE_USING (siter),
52c11ef6 5158 scope, flags))
ea9635c7
ML
5159 /* Give up because of error. */
5160 return NULL_TREE;
5161 if (siter == scope) break;
5162 siter = CP_DECL_CONTEXT (siter);
5163 }
5164
52c11ef6 5165 val = select_decl (b, flags);
ea9635c7
ML
5166 if (scope == global_namespace)
5167 break;
0c64a9ca 5168 scope = CP_DECL_CONTEXT (scope);
ea9635c7
ML
5169 }
5170 return val;
5171}
5172
52c11ef6
JM
5173/* Combine prefer_type and namespaces_only into flags. */
5174
5175static int
5176lookup_flags (prefer_type, namespaces_only)
5177 int prefer_type, namespaces_only;
5178{
5179 if (namespaces_only)
5180 return LOOKUP_PREFER_NAMESPACES;
5181 if (prefer_type > 1)
5182 return LOOKUP_PREFER_TYPES;
5183 if (prefer_type > 0)
5184 return LOOKUP_PREFER_BOTH;
5185 return 0;
5186}
5187
5188/* Given a lookup that returned VAL, use FLAGS to decide if we want to
5189 ignore it or not. Subroutine of lookup_name_real. */
5190
5191static tree
5192qualify_lookup (val, flags)
5193 tree val;
5194 int flags;
5195{
5196 if (val == NULL_TREE)
5197 return val;
6b945830
JM
5198 if ((flags & LOOKUP_PREFER_NAMESPACES) && TREE_CODE (val) == NAMESPACE_DECL)
5199 return val;
5200 if ((flags & LOOKUP_PREFER_TYPES)
5201 && (TREE_CODE (val) == TYPE_DECL
5202 || ((flags & LOOKUP_TEMPLATES_EXPECTED)
5203 && DECL_CLASS_TEMPLATE_P (val))))
5204 return val;
5205 if (flags & (LOOKUP_PREFER_NAMESPACES | LOOKUP_PREFER_TYPES))
52c11ef6
JM
5206 return NULL_TREE;
5207 return val;
5208}
5209
8d08fdba
MS
5210/* Look up NAME in the current binding level and its superiors in the
5211 namespace of variables, functions and typedefs. Return a ..._DECL
5212 node of some kind representing its definition if there is only one
5213 such declaration, or return a TREE_LIST with all the overloaded
5214 definitions if there are many, or return 0 if it is undefined.
5215
2c73f9f5
ML
5216 If PREFER_TYPE is > 0, we prefer TYPE_DECLs or namespaces.
5217 If PREFER_TYPE is > 1, we reject non-type decls (e.g. namespaces).
a28e3c7f 5218 If PREFER_TYPE is -2, we're being called from yylex(). (UGLY)
f84b4be9
JM
5219 Otherwise we prefer non-TYPE_DECLs.
5220
5221 If NONCLASS is non-zero, we don't look for the NAME in class scope,
5222 using IDENTIFIER_CLASS_VALUE. */
8d08fdba 5223
824b9a4c 5224static tree
3e3f722c 5225lookup_name_real (name, prefer_type, nonclass, namespaces_only)
8d08fdba 5226 tree name;
3e3f722c 5227 int prefer_type, nonclass, namespaces_only;
8d08fdba
MS
5228{
5229 register tree val;
a28e3c7f 5230 int yylex = 0;
e1cd6e56 5231 tree from_obj = NULL_TREE;
52c11ef6 5232 int flags;
8d08fdba 5233
3e3f722c
ML
5234 /* Hack: copy flag set by parser, if set. */
5235 if (only_namespace_names)
5236 namespaces_only = 1;
52c11ef6 5237
a28e3c7f
MS
5238 if (prefer_type == -2)
5239 {
5240 extern int looking_for_typename;
fc378698 5241 tree type = NULL_TREE;
a28e3c7f
MS
5242
5243 yylex = 1;
5244 prefer_type = looking_for_typename;
e1cd6e56 5245
52c11ef6
JM
5246 flags = lookup_flags (prefer_type, namespaces_only);
5247 /* During parsing, we need to complain. */
5248 flags |= LOOKUP_COMPLAIN;
5249 /* If the next thing is '<', class templates are types. */
5250 if (looking_for_template)
5251 flags |= LOOKUP_TEMPLATES_EXPECTED;
5252
653cc74a
JM
5253 /* std:: becomes :: for now. */
5254 if (got_scope == std_node)
5255 got_scope = void_type_node;
5256
e1cd6e56
MS
5257 if (got_scope)
5258 type = got_scope;
dff6b454 5259 else if (got_object != error_mark_node)
e1cd6e56 5260 type = got_object;
a28e3c7f 5261
e1cd6e56 5262 if (type)
a28e3c7f 5263 {
e1cd6e56 5264 if (type == error_mark_node)
f376e137 5265 return error_mark_node;
a80e4195
MS
5266 if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
5267 type = TREE_TYPE (type);
5566b478 5268
2b9dc906
JM
5269 if (TYPE_P (type))
5270 type = complete_type (type);
5566b478 5271
a1774733 5272 if (TREE_CODE (type) == VOID_TYPE)
2c73f9f5
ML
5273 type = global_namespace;
5274 if (TREE_CODE (type) == NAMESPACE_DECL)
a9aedbc2 5275 {
2c73f9f5
ML
5276 struct tree_binding b;
5277 val = binding_init (&b);
52c11ef6 5278 if (!qualified_lookup_using_namespace (name, type, val, flags))
2c73f9f5 5279 return NULL_TREE;
52c11ef6 5280 val = select_decl (val, flags);
a9aedbc2 5281 }
5566b478 5282 else if (! IS_AGGR_TYPE (type)
5156628f 5283 || TREE_CODE (type) == TEMPLATE_TYPE_PARM
73b0fce8 5284 || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM
5156628f 5285 || TREE_CODE (type) == TYPENAME_TYPE)
e92cc029 5286 /* Someone else will give an error about this if needed. */
a28e3c7f 5287 val = NULL_TREE;
e1cd6e56 5288 else if (TYPE_BEING_DEFINED (type))
700f8a87
MS
5289 {
5290 val = IDENTIFIER_CLASS_VALUE (name);
e1cd6e56 5291 if (val && DECL_CONTEXT (val) != type)
700f8a87
MS
5292 {
5293 struct binding_level *b = class_binding_level;
5294 for (val = NULL_TREE; b; b = b->level_chain)
5295 {
5296 tree t = purpose_member (name, b->class_shadowed);
5297 if (t && TREE_VALUE (t)
e1cd6e56 5298 && DECL_CONTEXT (TREE_VALUE (t)) == type)
700f8a87
MS
5299 {
5300 val = TREE_VALUE (t);
5301 break;
5302 }
5303 }
5304 }
5566b478 5305 if (val == NULL_TREE)
e1cd6e56 5306 val = lookup_field (type, name, 0, 1);
700f8a87 5307 }
e1cd6e56 5308 else if (type == current_class_type)
a28e3c7f 5309 val = IDENTIFIER_CLASS_VALUE (name);
a28e3c7f 5310 else
d23a1bb1 5311 val = lookup_member (type, name, 0, prefer_type);
a28e3c7f 5312 }
e1cd6e56
MS
5313 else
5314 val = NULL_TREE;
5315
594740f3 5316 if (got_scope)
e1cd6e56 5317 goto done;
594740f3 5318 else if (got_object && val)
e1cd6e56 5319 from_obj = val;
a28e3c7f 5320 }
52c11ef6
JM
5321 else
5322 flags = lookup_flags (prefer_type, namespaces_only);
e76a2646 5323
f181d4ae
MM
5324 /* First, look in a non-global scope, carefully avoiding any
5325 class-scope bindings if required. */
5326 val = IDENTIFIER_BINDING (name);
5327 while (val && nonclass && !LOCAL_BINDING_P (val))
5328 val = TREE_CHAIN (val);
2642b9bf 5329
f181d4ae
MM
5330 /* Get the DECL actually bound. */
5331 if (val)
5332 val = BINDING_VALUE (val);
5333
5334 /* If VAL is a type from a dependent base, we're not really supposed
5335 to be able to see it; the fact that we can is the "implicit
5336 typename" extension. We call lookup_field here to turn VAL into
5337 a TYPE_DECL for a TYPENAME_TYPE. */
5338 if (processing_template_decl && val
5339 && val == IDENTIFIER_CLASS_VALUE (name)
5340 && TREE_CODE (val) == TYPE_DECL
5341 && !currently_open_class (DECL_CONTEXT (val))
5342 && uses_template_parms (current_class_type))
5343 val = lookup_field (current_class_type, name, 0, 1);
5344
5345 /* Make sure that this binding is the sort of thing we're looking
5346 for. */
5347 val = qualify_lookup (val, flags);
5348
5349 /* We don't put names from baseclasses onto the IDENTIFIER_BINDING
5350 list when we're defining a type. It would probably be simpler to
5351 do this, but we don't. So, we must lookup names from base
5352 classes explicitly. */
5353 if (!val && !nonclass
5354 && current_class_type && TYPE_BEING_DEFINED (current_class_type))
5355 {
5356 val = qualify_lookup (lookup_field (current_class_type, name, 0, 0),
5357 flags);
5358 if (!val)
5359 val = qualify_lookup (lookup_nested_field (name, !yylex),
5360 flags);
e76a2646 5361 }
f181d4ae
MM
5362
5363 /* If we found a type from a dependent base class (using the
5364 implicit typename extension), turn it into the TYPE_DECL for a
5365 TYPENAME_TYPE here. */
5366 if (val && TREE_CODE (val) == TYPE_DECL
5367 && IMPLICIT_TYPENAME_P (TREE_TYPE (val)))
e76a2646 5368 {
f181d4ae 5369 tree global_val;
8e52e063 5370
f181d4ae
MM
5371 /* Any other name takes precedence over an implicit typename. Warn the
5372 user about this potentially confusing lookup. */
5373 global_val = unqualified_namespace_lookup (name, flags);
8e52e063 5374
f181d4ae 5375 if (global_val)
c1def683 5376 {
5eea678f
JM
5377 tree subtype;
5378
d7b3753c
JM
5379 /* Only warn when not lexing; we don't want to warn if they
5380 use this name as a declarator. */
f181d4ae 5381 subtype = TREE_TYPE (TREE_TYPE (val));
d7b3753c 5382 if (! yylex
f181d4ae 5383 && ! (TREE_CODE (global_val) == TEMPLATE_DECL
5eea678f 5384 && CLASSTYPE_TEMPLATE_INFO (subtype)
f181d4ae
MM
5385 && CLASSTYPE_TI_TEMPLATE (subtype) == global_val)
5386 && ! (TREE_CODE (global_val) == TYPE_DECL
5387 && same_type_p (TREE_TYPE (global_val), subtype)))
c1def683 5388 {
f181d4ae 5389 cp_warning ("lookup of `%D' finds `%#D'", name, global_val);
24c65984 5390 cp_warning (" instead of `%D' from dependent base class",
f181d4ae 5391 val);
24c65984
JM
5392 cp_warning (" (use `typename %T::%D' if that's what you meant)",
5393 constructor_name (current_class_type), name);
c1def683 5394 }
f181d4ae
MM
5395
5396 /* Use the global value instead of the implicit typename. */
5397 val = global_val;
c1def683
JM
5398 }
5399 }
f181d4ae
MM
5400 else if (!val)
5401 /* No local, or class-scoped binding. Look for a namespace-scope
5402 declaration. */
5403 val = unqualified_namespace_lookup (name, flags);
c1def683 5404
a28e3c7f 5405 done:
8d08fdba
MS
5406 if (val)
5407 {
c91a56d2 5408 /* This should only warn about types used in qualified-ids. */
e1cd6e56 5409 if (from_obj && from_obj != val)
5566b478 5410 {
c91a56d2
MS
5411 if (looking_for_typename && TREE_CODE (from_obj) == TYPE_DECL
5412 && TREE_CODE (val) == TYPE_DECL
5413 && TREE_TYPE (from_obj) != TREE_TYPE (val))
5414 {
8251199e 5415 cp_pedwarn ("lookup of `%D' in the scope of `%#T' (`%#T')",
c91a56d2 5416 name, got_object, TREE_TYPE (from_obj));
8251199e 5417 cp_pedwarn (" does not match lookup in the current scope (`%#T')",
c91a56d2
MS
5418 TREE_TYPE (val));
5419 }
594740f3 5420
b8b1a3c1
JM
5421 /* We don't change val to from_obj if got_object depends on
5422 template parms because that breaks implicit typename for
5423 destructor calls. */
5424 if (! uses_template_parms (got_object))
53fdbb3b 5425 val = from_obj;
5566b478 5426 }
e1cd6e56 5427
0c64a9ca
JM
5428 /* If we have a single function from a using decl, pull it out. */
5429 if (TREE_CODE (val) == OVERLOAD && ! really_overloaded_fn (val))
5430 val = OVL_FUNCTION (val);
8d08fdba 5431 }
e1cd6e56
MS
5432 else if (from_obj)
5433 val = from_obj;
8d08fdba
MS
5434
5435 return val;
5436}
5437
700f8a87
MS
5438tree
5439lookup_name_nonclass (name)
5440 tree name;
5441{
3e3f722c 5442 return lookup_name_real (name, 0, 1, 0);
700f8a87
MS
5443}
5444
2c73f9f5
ML
5445tree
5446lookup_function_nonclass (name, args)
5447 tree name;
5448 tree args;
5449{
5450 return lookup_arg_dependent (name, lookup_name_nonclass (name), args);
5451}
5452
3e3f722c
ML
5453tree
5454lookup_name_namespace_only (name)
5455 tree name;
5456{
5457 /* type-or-namespace, nonclass, namespace_only */
5458 return lookup_name_real (name, 1, 1, 1);
5459}
5460
700f8a87
MS
5461tree
5462lookup_name (name, prefer_type)
5463 tree name;
5464 int prefer_type;
5465{
3e3f722c 5466 return lookup_name_real (name, prefer_type, 0, 0);
700f8a87
MS
5467}
5468
8d08fdba
MS
5469/* Similar to `lookup_name' but look only at current binding level. */
5470
5471tree
5472lookup_name_current_level (name)
5473 tree name;
5474{
5475 register tree t = NULL_TREE;
5476
2c73f9f5 5477 if (current_binding_level->namespace_p)
8d08fdba 5478 {
30394414 5479 t = IDENTIFIER_NAMESPACE_VALUE (name);
8d08fdba
MS
5480
5481 /* extern "C" function() */
5482 if (t != NULL_TREE && TREE_CODE (t) == TREE_LIST)
5483 t = TREE_VALUE (t);
5484 }
f181d4ae
MM
5485 else if (IDENTIFIER_BINDING (name)
5486 && LOCAL_BINDING_P (IDENTIFIER_BINDING (name)))
8d08fdba 5487 {
a4443a08 5488 struct binding_level *b = current_binding_level;
f181d4ae 5489
a4443a08
MS
5490 while (1)
5491 {
f181d4ae
MM
5492 if (BINDING_LEVEL (IDENTIFIER_BINDING (name)) == b)
5493 return IDENTIFIER_VALUE (name);
5494
9ed182dc
JM
5495 if (b->keep == 2)
5496 b = b->level_chain;
5497 else
5498 break;
5499 }
5500 }
5501
5502 return t;
5503}
5504
5505/* Like lookup_name_current_level, but for types. */
5506
5507tree
5508lookup_type_current_level (name)
5509 tree name;
5510{
5511 register tree t = NULL_TREE;
5512
5513 my_friendly_assert (! current_binding_level->namespace_p, 980716);
5514
5515 if (REAL_IDENTIFIER_TYPE_VALUE (name) != NULL_TREE
5516 && REAL_IDENTIFIER_TYPE_VALUE (name) != global_type_node)
5517 {
5518 struct binding_level *b = current_binding_level;
5519 while (1)
5520 {
5521 if (purpose_member (name, b->type_shadowed))
5522 return REAL_IDENTIFIER_TYPE_VALUE (name);
a4443a08
MS
5523 if (b->keep == 2)
5524 b = b->level_chain;
5525 else
5526 break;
5527 }
8d08fdba
MS
5528 }
5529
5530 return t;
5531}
3e3f722c
ML
5532
5533void
5534begin_only_namespace_names ()
5535{
5536 only_namespace_names = 1;
5537}
5538
5539void
5540end_only_namespace_names ()
5541{
5542 only_namespace_names = 0;
5543}
8d08fdba
MS
5544\f
5545/* Arrange for the user to get a source line number, even when the
5546 compiler is going down in flames, so that she at least has a
5547 chance of working around problems in the compiler. We used to
5548 call error(), but that let the segmentation fault continue
5549 through; now, it's much more passive by asking them to send the
5550 maintainers mail about the problem. */
5551
5552static void
5553signal_catch (sig)
7dee3f36 5554 int sig ATTRIBUTE_UNUSED;
8d08fdba
MS
5555{
5556 signal (SIGSEGV, SIG_DFL);
5557#ifdef SIGIOT
5558 signal (SIGIOT, SIG_DFL);
5559#endif
5560#ifdef SIGILL
5561 signal (SIGILL, SIG_DFL);
5562#endif
5563#ifdef SIGABRT
5564 signal (SIGABRT, SIG_DFL);
5565#endif
5566#ifdef SIGBUS
5567 signal (SIGBUS, SIG_DFL);
5568#endif
5569 my_friendly_abort (0);
5570}
5571
de22184b
MS
5572#if 0
5573/* Unused -- brendan 970107 */
8d08fdba
MS
5574/* Array for holding types considered "built-in". These types
5575 are output in the module in which `main' is defined. */
5576static tree *builtin_type_tdescs_arr;
5577static int builtin_type_tdescs_len, builtin_type_tdescs_max;
de22184b 5578#endif
8d08fdba
MS
5579
5580/* Push the declarations of builtin types into the namespace.
5581 RID_INDEX, if < RID_MAX is the index of the builtin type
5582 in the array RID_POINTERS. NAME is the name used when looking
5583 up the builtin type. TYPE is the _TYPE node for the builtin type. */
5584
5585static void
5586record_builtin_type (rid_index, name, type)
5587 enum rid rid_index;
5588 char *name;
5589 tree type;
5590{
5591 tree rname = NULL_TREE, tname = NULL_TREE;
a703fb38 5592 tree tdecl = NULL_TREE;
8d08fdba
MS
5593
5594 if ((int) rid_index < (int) RID_MAX)
5595 rname = ridpointers[(int) rid_index];
5596 if (name)
5597 tname = get_identifier (name);
5598
5599 TYPE_BUILT_IN (type) = 1;
5600
5601 if (tname)
5602 {
8d08fdba 5603 tdecl = pushdecl (build_decl (TYPE_DECL, tname, type));
8d08fdba
MS
5604 set_identifier_type_value (tname, NULL_TREE);
5605 if ((int) rid_index < (int) RID_MAX)
2c73f9f5
ML
5606 /* Built-in types live in the global namespace. */
5607 SET_IDENTIFIER_GLOBAL_VALUE (tname, tdecl);
8d08fdba
MS
5608 }
5609 if (rname != NULL_TREE)
5610 {
5611 if (tname != NULL_TREE)
5612 {
5613 set_identifier_type_value (rname, NULL_TREE);
2c73f9f5 5614 SET_IDENTIFIER_GLOBAL_VALUE (rname, tdecl);
8d08fdba
MS
5615 }
5616 else
5617 {
8d08fdba 5618 tdecl = pushdecl (build_decl (TYPE_DECL, rname, type));
8d08fdba
MS
5619 set_identifier_type_value (rname, NULL_TREE);
5620 }
5621 }
8d08fdba
MS
5622}
5623
eff71ab0
PB
5624/* Record one of the standard Java types.
5625 * Declare it as having the given NAME.
5626 * If SIZE > 0, it is the size of one of the integral types;
5627 * otherwise it is the negative of the size of one of the other types. */
5628
5629static tree
5630record_builtin_java_type (name, size)
5631 char *name;
5632 int size;
5633{
5634 tree type, decl;
5635 if (size > 0)
5636 type = make_signed_type (size);
5637 else if (size > -32)
5638 { /* "__java_char" or ""__java_boolean". */
5639 type = make_unsigned_type (-size);
5640 /*if (size == -1) TREE_SET_CODE (type, BOOLEAN_TYPE);*/
5641 }
5642 else
5643 { /* "__java_float" or ""__java_double". */
5644 type = make_node (REAL_TYPE);
5645 TYPE_PRECISION (type) = - size;
5646 layout_type (type);
5647 }
5648 record_builtin_type (RID_MAX, name, type);
5649 decl = TYPE_NAME (type);
5650 DECL_IGNORED_P (decl) = 1;
5651 TYPE_FOR_JAVA (type) = 1;
5652 return type;
5653}
5654
036407f7
ML
5655/* Push a type into the namespace so that the back-ends ignore it. */
5656
5657static void
5658record_unknown_type (type, name)
5659 tree type;
5660 char *name;
5661{
5662 tree decl = pushdecl (build_decl (TYPE_DECL, get_identifier (name), type));
5663 /* Make sure the "unknown type" typedecl gets ignored for debug info. */
5664 DECL_IGNORED_P (decl) = 1;
5665 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
5666 TYPE_SIZE (type) = TYPE_SIZE (void_type_node);
5667 TYPE_ALIGN (type) = 1;
5668 TYPE_MODE (type) = TYPE_MODE (void_type_node);
5669}
5670
8d08fdba
MS
5671/* Push overloaded decl, in global scope, with one argument so it
5672 can be used as a callback from define_function. */
e92cc029 5673
8d08fdba
MS
5674static void
5675push_overloaded_decl_1 (x)
5676 tree x;
5677{
5678 push_overloaded_decl (x, 0);
5679}
5680
8ccc31eb
MS
5681#ifdef __GNUC__
5682__inline
5683#endif
6b5fbb55
MS
5684tree
5685auto_function (name, type, code)
8ccc31eb
MS
5686 tree name, type;
5687 enum built_in_function code;
5688{
5689 return define_function
49c249e1 5690 (IDENTIFIER_POINTER (name), type, code, push_overloaded_decl_1,
8ccc31eb
MS
5691 IDENTIFIER_POINTER (build_decl_overload (name, TYPE_ARG_TYPES (type),
5692 0)));
5693}
5694
8d08fdba
MS
5695/* Create the predefined scalar types of C,
5696 and some nodes representing standard constants (0, 1, (void *)0).
5697 Initialize the global binding level.
5698 Make definitions for built-in primitive functions. */
5699
5700void
5701init_decl_processing ()
5702{
de22184b 5703 register tree endlink, int_endlink, double_endlink, unsigned_endlink;
8d08fdba 5704 tree fields[20];
8d08fdba 5705 /* Data type of memcpy. */
cffa8729 5706 tree memcpy_ftype, strlen_ftype;
8d08fdba
MS
5707 int wchar_type_size;
5708 tree temp;
5709 tree array_domain_type;
a703fb38 5710 tree vb_off_identifier = NULL_TREE;
5566b478
MS
5711 /* Function type `char *(char *, char *)' and similar ones */
5712 tree string_ftype_ptr_ptr, int_ftype_string_string;
de22184b
MS
5713 tree sizetype_endlink;
5714 tree ptr_ftype, ptr_ftype_unsigned, ptr_ftype_sizetype;
5eea678f 5715 tree void_ftype, void_ftype_int, void_ftype_ptr;
8d08fdba
MS
5716
5717 /* Have to make these distinct before we try using them. */
5718 lang_name_cplusplus = get_identifier ("C++");
5719 lang_name_c = get_identifier ("C");
a1774733 5720 lang_name_java = get_identifier ("Java");
8d08fdba 5721
2c73f9f5 5722 /* Enter the global namespace. */
30394414
JM
5723 my_friendly_assert (global_namespace == NULL_TREE, 375);
5724 my_friendly_assert (current_lang_name == NULL_TREE, 375);
5725 current_lang_name = lang_name_cplusplus;
5726 push_namespace (get_identifier ("::"));
5727 global_namespace = current_namespace;
5728 current_lang_name = NULL_TREE;
5729
e1cd6e56 5730 if (flag_strict_prototype == 2)
830fcda8 5731 flag_strict_prototype = pedantic;
2642b9bf
JM
5732 if (! flag_permissive && ! pedantic)
5733 flag_pedantic_errors = 1;
830fcda8
JM
5734
5735 strict_prototypes_lang_c = flag_strict_prototype;
8926095f 5736
8d08fdba
MS
5737 /* Initially, C. */
5738 current_lang_name = lang_name_c;
5739
5740 current_function_decl = NULL_TREE;
5741 named_labels = NULL_TREE;
e349ee73 5742 named_label_uses = NULL;
8d08fdba
MS
5743 current_binding_level = NULL_BINDING_LEVEL;
5744 free_binding_level = NULL_BINDING_LEVEL;
5745
5746 /* Because most segmentation signals can be traced back into user
5747 code, catch them and at least give the user a chance of working
e92cc029 5748 around compiler bugs. */
8d08fdba
MS
5749 signal (SIGSEGV, signal_catch);
5750
5751 /* We will also catch aborts in the back-end through signal_catch and
5752 give the user a chance to see where the error might be, and to defeat
5753 aborts in the back-end when there have been errors previously in their
e92cc029 5754 code. */
8d08fdba
MS
5755#ifdef SIGIOT
5756 signal (SIGIOT, signal_catch);
5757#endif
5758#ifdef SIGILL
5759 signal (SIGILL, signal_catch);
5760#endif
5761#ifdef SIGABRT
5762 signal (SIGABRT, signal_catch);
5763#endif
5764#ifdef SIGBUS
5765 signal (SIGBUS, signal_catch);
5766#endif
5767
5768 gcc_obstack_init (&decl_obstack);
8d08fdba
MS
5769
5770 /* Must lay these out before anything else gets laid out. */
5771 error_mark_node = make_node (ERROR_MARK);
5772 TREE_PERMANENT (error_mark_node) = 1;
5773 TREE_TYPE (error_mark_node) = error_mark_node;
5774 error_mark_list = build_tree_list (error_mark_node, error_mark_node);
5775 TREE_TYPE (error_mark_list) = error_mark_node;
5776
a28e3c7f
MS
5777 /* Make the binding_level structure for global names. */
5778 pushlevel (0);
8d08fdba 5779 global_binding_level = current_binding_level;
2c73f9f5
ML
5780 /* The global level is the namespace level of ::. */
5781 NAMESPACE_LEVEL (global_namespace) = global_binding_level;
5782 declare_namespace_level ();
8d08fdba
MS
5783
5784 this_identifier = get_identifier (THIS_NAME);
5785 in_charge_identifier = get_identifier (IN_CHARGE_NAME);
fc378698
MS
5786 ctor_identifier = get_identifier (CTOR_NAME);
5787 dtor_identifier = get_identifier (DTOR_NAME);
8d08fdba
MS
5788 pfn_identifier = get_identifier (VTABLE_PFN_NAME);
5789 index_identifier = get_identifier (VTABLE_INDEX_NAME);
5790 delta_identifier = get_identifier (VTABLE_DELTA_NAME);
5791 delta2_identifier = get_identifier (VTABLE_DELTA2_NAME);
5792 pfn_or_delta2_identifier = get_identifier ("__pfn_or_delta2");
dff6b454
RK
5793 if (flag_handle_signatures)
5794 {
5795 tag_identifier = get_identifier (SIGTABLE_TAG_NAME);
9dd70aa4
GB
5796 vb_off_identifier = get_identifier (SIGTABLE_VB_OFF_NAME);
5797 vt_off_identifier = get_identifier (SIGTABLE_VT_OFF_NAME);
dff6b454 5798 }
8d08fdba
MS
5799
5800 /* Define `int' and `char' first so that dbx will output them first. */
5801
5802 integer_type_node = make_signed_type (INT_TYPE_SIZE);
5803 record_builtin_type (RID_INT, NULL_PTR, integer_type_node);
5804
5805 /* Define `char', which is like either `signed char' or `unsigned char'
5806 but not the same as either. */
5807
beb53fb8
JM
5808 char_type_node
5809 = (flag_signed_char
5810 ? make_signed_type (CHAR_TYPE_SIZE)
5811 : make_unsigned_type (CHAR_TYPE_SIZE));
8d08fdba
MS
5812 record_builtin_type (RID_CHAR, "char", char_type_node);
5813
5814 long_integer_type_node = make_signed_type (LONG_TYPE_SIZE);
5815 record_builtin_type (RID_LONG, "long int", long_integer_type_node);
5816
5817 unsigned_type_node = make_unsigned_type (INT_TYPE_SIZE);
5818 record_builtin_type (RID_UNSIGNED, "unsigned int", unsigned_type_node);
5819
5820 long_unsigned_type_node = make_unsigned_type (LONG_TYPE_SIZE);
5821 record_builtin_type (RID_MAX, "long unsigned int", long_unsigned_type_node);
5822 record_builtin_type (RID_MAX, "unsigned long", long_unsigned_type_node);
5823
5824 long_long_integer_type_node = make_signed_type (LONG_LONG_TYPE_SIZE);
5825 record_builtin_type (RID_MAX, "long long int", long_long_integer_type_node);
5826
5827 long_long_unsigned_type_node = make_unsigned_type (LONG_LONG_TYPE_SIZE);
5828 record_builtin_type (RID_MAX, "long long unsigned int",
5829 long_long_unsigned_type_node);
5830 record_builtin_type (RID_MAX, "long long unsigned",
5831 long_long_unsigned_type_node);
5832
5156628f
MS
5833 short_integer_type_node = make_signed_type (SHORT_TYPE_SIZE);
5834 record_builtin_type (RID_SHORT, "short int", short_integer_type_node);
5835 short_unsigned_type_node = make_unsigned_type (SHORT_TYPE_SIZE);
5836 record_builtin_type (RID_MAX, "short unsigned int", short_unsigned_type_node);
5837 record_builtin_type (RID_MAX, "unsigned short", short_unsigned_type_node);
5838
8d08fdba 5839 /* `unsigned long' is the standard type for sizeof.
8d08fdba 5840 Note that stddef.h uses `unsigned long',
f5426d1e
R
5841 and this must agree, even if long and int are the same size. */
5842 set_sizetype
5843 (TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (SIZE_TYPE))));
8d08fdba
MS
5844
5845 ptrdiff_type_node
5846 = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (PTRDIFF_TYPE)));
5847
8d08fdba
MS
5848 /* Define both `signed char' and `unsigned char'. */
5849 signed_char_type_node = make_signed_type (CHAR_TYPE_SIZE);
5850 record_builtin_type (RID_MAX, "signed char", signed_char_type_node);
5851 unsigned_char_type_node = make_unsigned_type (CHAR_TYPE_SIZE);
5852 record_builtin_type (RID_MAX, "unsigned char", unsigned_char_type_node);
5853
5854 /* These are types that type_for_size and type_for_mode use. */
5855 intQI_type_node = make_signed_type (GET_MODE_BITSIZE (QImode));
5856 pushdecl (build_decl (TYPE_DECL, NULL_TREE, intQI_type_node));
5857 intHI_type_node = make_signed_type (GET_MODE_BITSIZE (HImode));
5858 pushdecl (build_decl (TYPE_DECL, NULL_TREE, intHI_type_node));
5859 intSI_type_node = make_signed_type (GET_MODE_BITSIZE (SImode));
5860 pushdecl (build_decl (TYPE_DECL, NULL_TREE, intSI_type_node));
5861 intDI_type_node = make_signed_type (GET_MODE_BITSIZE (DImode));
5862 pushdecl (build_decl (TYPE_DECL, NULL_TREE, intDI_type_node));
946dc1c8 5863#if HOST_BITS_PER_WIDE_INT >= 64
f7554e8c 5864 intTI_type_node = make_signed_type (GET_MODE_BITSIZE (TImode));
5ebcdddb 5865 pushdecl (build_decl (TYPE_DECL, get_identifier ("__int128_t"), intTI_type_node));
946dc1c8 5866#endif
8d08fdba
MS
5867 unsigned_intQI_type_node = make_unsigned_type (GET_MODE_BITSIZE (QImode));
5868 pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intQI_type_node));
5869 unsigned_intHI_type_node = make_unsigned_type (GET_MODE_BITSIZE (HImode));
5870 pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intHI_type_node));
5871 unsigned_intSI_type_node = make_unsigned_type (GET_MODE_BITSIZE (SImode));
5872 pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intSI_type_node));
5873 unsigned_intDI_type_node = make_unsigned_type (GET_MODE_BITSIZE (DImode));
5874 pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intDI_type_node));
946dc1c8 5875#if HOST_BITS_PER_WIDE_INT >= 64
f7554e8c 5876 unsigned_intTI_type_node = make_unsigned_type (GET_MODE_BITSIZE (TImode));
5ebcdddb 5877 pushdecl (build_decl (TYPE_DECL, get_identifier ("__uint128_t"), unsigned_intTI_type_node));
946dc1c8 5878#endif
8d08fdba
MS
5879
5880 float_type_node = make_node (REAL_TYPE);
5881 TYPE_PRECISION (float_type_node) = FLOAT_TYPE_SIZE;
5882 record_builtin_type (RID_FLOAT, NULL_PTR, float_type_node);
5883 layout_type (float_type_node);
5884
5885 double_type_node = make_node (REAL_TYPE);
5886 if (flag_short_double)
5887 TYPE_PRECISION (double_type_node) = FLOAT_TYPE_SIZE;
5888 else
5889 TYPE_PRECISION (double_type_node) = DOUBLE_TYPE_SIZE;
5890 record_builtin_type (RID_DOUBLE, NULL_PTR, double_type_node);
5891 layout_type (double_type_node);
5892
5893 long_double_type_node = make_node (REAL_TYPE);
5894 TYPE_PRECISION (long_double_type_node) = LONG_DOUBLE_TYPE_SIZE;
5895 record_builtin_type (RID_MAX, "long double", long_double_type_node);
5896 layout_type (long_double_type_node);
5897
37c46b43
MS
5898 complex_integer_type_node = make_node (COMPLEX_TYPE);
5899 pushdecl (build_decl (TYPE_DECL, get_identifier ("complex int"),
5900 complex_integer_type_node));
5901 TREE_TYPE (complex_integer_type_node) = integer_type_node;
5902 layout_type (complex_integer_type_node);
5903
5904 complex_float_type_node = make_node (COMPLEX_TYPE);
5905 pushdecl (build_decl (TYPE_DECL, get_identifier ("complex float"),
5906 complex_float_type_node));
5907 TREE_TYPE (complex_float_type_node) = float_type_node;
5908 layout_type (complex_float_type_node);
5909
5910 complex_double_type_node = make_node (COMPLEX_TYPE);
5911 pushdecl (build_decl (TYPE_DECL, get_identifier ("complex double"),
5912 complex_double_type_node));
5913 TREE_TYPE (complex_double_type_node) = double_type_node;
5914 layout_type (complex_double_type_node);
5915
5916 complex_long_double_type_node = make_node (COMPLEX_TYPE);
5917 pushdecl (build_decl (TYPE_DECL, get_identifier ("complex long double"),
5918 complex_long_double_type_node));
5919 TREE_TYPE (complex_long_double_type_node) = long_double_type_node;
5920 layout_type (complex_long_double_type_node);
5921
eff71ab0
PB
5922 java_byte_type_node = record_builtin_java_type ("__java_byte", 8);
5923 java_short_type_node = record_builtin_java_type ("__java_short", 16);
5924 java_int_type_node = record_builtin_java_type ("__java_int", 32);
5925 java_long_type_node = record_builtin_java_type ("__java_long", 64);
5926 java_float_type_node = record_builtin_java_type ("__java_float", -32);
5927 java_double_type_node = record_builtin_java_type ("__java_double", -64);
5928 java_char_type_node = record_builtin_java_type ("__java_char", -16);
5929 java_boolean_type_node = record_builtin_java_type ("__java_boolean", -1);
5930
8d08fdba
MS
5931 integer_zero_node = build_int_2 (0, 0);
5932 TREE_TYPE (integer_zero_node) = integer_type_node;
5933 integer_one_node = build_int_2 (1, 0);
5934 TREE_TYPE (integer_one_node) = integer_type_node;
5935 integer_two_node = build_int_2 (2, 0);
5936 TREE_TYPE (integer_two_node) = integer_type_node;
5937 integer_three_node = build_int_2 (3, 0);
5938 TREE_TYPE (integer_three_node) = integer_type_node;
8d08fdba 5939
255512c1
JM
5940 boolean_type_node = make_unsigned_type (BOOL_TYPE_SIZE);
5941 TREE_SET_CODE (boolean_type_node, BOOLEAN_TYPE);
c1ea6a0b
BK
5942 TYPE_MAX_VALUE (boolean_type_node) = build_int_2 (1, 0);
5943 TREE_TYPE (TYPE_MAX_VALUE (boolean_type_node)) = boolean_type_node;
5944 TYPE_PRECISION (boolean_type_node) = 1;
255512c1
JM
5945 record_builtin_type (RID_BOOL, "bool", boolean_type_node);
5946 boolean_false_node = build_int_2 (0, 0);
5947 TREE_TYPE (boolean_false_node) = boolean_type_node;
5948 boolean_true_node = build_int_2 (1, 0);
5949 TREE_TYPE (boolean_true_node) = boolean_type_node;
2986ae00 5950
8d08fdba
MS
5951 /* These are needed by stor-layout.c. */
5952 size_zero_node = size_int (0);
5953 size_one_node = size_int (1);
5954
e92cc029
MS
5955 signed_size_zero_node = build_int_2 (0, 0);
5956 TREE_TYPE (signed_size_zero_node) = make_signed_type (TYPE_PRECISION (sizetype));
5957
8d08fdba
MS
5958 void_type_node = make_node (VOID_TYPE);
5959 record_builtin_type (RID_VOID, NULL_PTR, void_type_node);
5960 layout_type (void_type_node); /* Uses integer_zero_node. */
5961 void_list_node = build_tree_list (NULL_TREE, void_type_node);
5962 TREE_PARMLIST (void_list_node) = 1;
5963
d11ad92e 5964 null_pointer_node = build_int_2 (0, 0);
8d08fdba 5965 TREE_TYPE (null_pointer_node) = build_pointer_type (void_type_node);
d11ad92e
MS
5966 layout_type (TREE_TYPE (null_pointer_node));
5967
8d08fdba
MS
5968 /* Used for expressions that do nothing, but are not errors. */
5969 void_zero_node = build_int_2 (0, 0);
5970 TREE_TYPE (void_zero_node) = void_type_node;
5971
5972 string_type_node = build_pointer_type (char_type_node);
beb53fb8 5973 const_string_type_node
91063b51
MM
5974 = build_pointer_type (build_qualified_type (char_type_node,
5975 TYPE_QUAL_CONST));
6b5fbb55 5976#if 0
8d08fdba 5977 record_builtin_type (RID_MAX, NULL_PTR, string_type_node);
6b5fbb55 5978#endif
8d08fdba
MS
5979
5980 /* Make a type to be the domain of a few array types
5981 whose domains don't really matter.
5982 200 is small enough that it always fits in size_t
5983 and large enough that it can hold most function names for the
5984 initializations of __FUNCTION__ and __PRETTY_FUNCTION__. */
5985 array_domain_type = build_index_type (build_int_2 (200, 0));
5986
2c73f9f5 5987 /* Make a type for arrays of characters.
8d08fdba
MS
5988 With luck nothing will ever really depend on the length of this
5989 array type. */
5990 char_array_type_node
5991 = build_array_type (char_type_node, array_domain_type);
5992 /* Likewise for arrays of ints. */
5993 int_array_type_node
5994 = build_array_type (integer_type_node, array_domain_type);
5995
5996 /* This is just some anonymous class type. Nobody should ever
5997 need to look inside this envelope. */
5998 class_star_type_node = build_pointer_type (make_lang_type (RECORD_TYPE));
5999
6000 default_function_type
6001 = build_function_type (integer_type_node, NULL_TREE);
8d08fdba
MS
6002
6003 ptr_type_node = build_pointer_type (void_type_node);
beb53fb8 6004 const_ptr_type_node
91063b51
MM
6005 = build_pointer_type (build_qualified_type (void_type_node,
6006 TYPE_QUAL_CONST));
6b5fbb55 6007#if 0
8d08fdba 6008 record_builtin_type (RID_MAX, NULL_PTR, ptr_type_node);
6b5fbb55 6009#endif
8d08fdba
MS
6010 endlink = void_list_node;
6011 int_endlink = tree_cons (NULL_TREE, integer_type_node, endlink);
6012 double_endlink = tree_cons (NULL_TREE, double_type_node, endlink);
de22184b
MS
6013 unsigned_endlink = tree_cons (NULL_TREE, unsigned_type_node, endlink);
6014
6015 ptr_ftype = build_function_type (ptr_type_node, NULL_TREE);
6016 ptr_ftype_unsigned = build_function_type (ptr_type_node, unsigned_endlink);
6017 sizetype_endlink = tree_cons (NULL_TREE, sizetype, endlink);
6018 /* We realloc here because sizetype could be int or unsigned. S'ok. */
6019 ptr_ftype_sizetype = build_function_type (ptr_type_node, sizetype_endlink);
6020
6021 void_ftype = build_function_type (void_type_node, endlink);
6022 void_ftype_int = build_function_type (void_type_node, int_endlink);
6023 void_ftype_ptr
6024 = build_function_type (void_type_node,
6025 tree_cons (NULL_TREE, ptr_type_node, endlink));
824b9a4c
MS
6026 void_ftype_ptr
6027 = build_exception_variant (void_ftype_ptr,
6028 tree_cons (NULL_TREE, NULL_TREE, NULL_TREE));
8d08fdba 6029
cffa8729
MS
6030 float_ftype_float
6031 = build_function_type (float_type_node,
6032 tree_cons (NULL_TREE, float_type_node, endlink));
6033
8d08fdba
MS
6034 double_ftype_double
6035 = build_function_type (double_type_node, double_endlink);
6036
cffa8729
MS
6037 ldouble_ftype_ldouble
6038 = build_function_type (long_double_type_node,
6039 tree_cons (NULL_TREE, long_double_type_node,
6040 endlink));
6041
8d08fdba
MS
6042 double_ftype_double_double
6043 = build_function_type (double_type_node,
a28e3c7f
MS
6044 tree_cons (NULL_TREE, double_type_node,
6045 double_endlink));
8d08fdba
MS
6046
6047 int_ftype_int
6048 = build_function_type (integer_type_node, int_endlink);
6049
6050 long_ftype_long
6051 = build_function_type (long_integer_type_node,
a28e3c7f
MS
6052 tree_cons (NULL_TREE, long_integer_type_node,
6053 endlink));
8d08fdba 6054
8d08fdba
MS
6055 int_ftype_cptr_cptr_sizet
6056 = build_function_type (integer_type_node,
6057 tree_cons (NULL_TREE, const_ptr_type_node,
6058 tree_cons (NULL_TREE, const_ptr_type_node,
6059 tree_cons (NULL_TREE,
6060 sizetype,
6061 endlink))));
6062
8d08fdba
MS
6063 string_ftype_ptr_ptr /* strcpy prototype */
6064 = build_function_type (string_type_node,
6065 tree_cons (NULL_TREE, string_type_node,
6066 tree_cons (NULL_TREE,
6067 const_string_type_node,
6068 endlink)));
6069
8d08fdba
MS
6070 int_ftype_string_string /* strcmp prototype */
6071 = build_function_type (integer_type_node,
6072 tree_cons (NULL_TREE, const_string_type_node,
6073 tree_cons (NULL_TREE,
6074 const_string_type_node,
6075 endlink)));
6076
cffa8729 6077 strlen_ftype /* strlen prototype */
8d08fdba
MS
6078 = build_function_type (sizetype,
6079 tree_cons (NULL_TREE, const_string_type_node,
6080 endlink));
6081
8d08fdba 6082 memcpy_ftype /* memcpy prototype */
d22c8596 6083 = build_function_type (ptr_type_node,
8d08fdba
MS
6084 tree_cons (NULL_TREE, ptr_type_node,
6085 tree_cons (NULL_TREE, const_ptr_type_node,
de22184b 6086 sizetype_endlink)));
8d08fdba
MS
6087
6088 if (flag_huge_objects)
6089 delta_type_node = long_integer_type_node;
6090 else
6091 delta_type_node = short_integer_type_node;
6092
b9620d0e 6093 builtin_function ("__builtin_constant_p", default_function_type,
8d08fdba
MS
6094 BUILT_IN_CONSTANT_P, NULL_PTR);
6095
beb53fb8
JM
6096 builtin_return_address_fndecl
6097 = builtin_function ("__builtin_return_address", ptr_ftype_unsigned,
6098 BUILT_IN_RETURN_ADDRESS, NULL_PTR);
8926095f 6099
de22184b 6100 builtin_function ("__builtin_frame_address", ptr_ftype_unsigned,
8926095f
MS
6101 BUILT_IN_FRAME_ADDRESS, NULL_PTR);
6102
de22184b 6103 builtin_function ("__builtin_alloca", ptr_ftype_sizetype,
8d08fdba 6104 BUILT_IN_ALLOCA, "alloca");
cffa8729 6105 builtin_function ("__builtin_ffs", int_ftype_int, BUILT_IN_FFS, NULL_PTR);
00595019
MS
6106 /* Define alloca, ffs as builtins.
6107 Declare _exit just to mark it as volatile. */
6108 if (! flag_no_builtin && !flag_no_nonansi_builtin)
6109 {
de22184b 6110 temp = builtin_function ("alloca", ptr_ftype_sizetype,
00595019
MS
6111 BUILT_IN_ALLOCA, NULL_PTR);
6112 /* Suppress error if redefined as a non-function. */
6113 DECL_BUILT_IN_NONANSI (temp) = 1;
00595019
MS
6114 temp = builtin_function ("ffs", int_ftype_int, BUILT_IN_FFS, NULL_PTR);
6115 /* Suppress error if redefined as a non-function. */
6116 DECL_BUILT_IN_NONANSI (temp) = 1;
de22184b 6117 temp = builtin_function ("_exit", void_ftype_int,
00595019
MS
6118 NOT_BUILT_IN, NULL_PTR);
6119 TREE_THIS_VOLATILE (temp) = 1;
6120 TREE_SIDE_EFFECTS (temp) = 1;
6121 /* Suppress error if redefined as a non-function. */
6122 DECL_BUILT_IN_NONANSI (temp) = 1;
6123 }
8d08fdba 6124
cffa8729
MS
6125 builtin_function ("__builtin_abs", int_ftype_int, BUILT_IN_ABS, NULL_PTR);
6126 builtin_function ("__builtin_fabsf", float_ftype_float, BUILT_IN_FABS,
6127 NULL_PTR);
6128 builtin_function ("__builtin_fabs", double_ftype_double, BUILT_IN_FABS,
6129 NULL_PTR);
6130 builtin_function ("__builtin_fabsl", ldouble_ftype_ldouble, BUILT_IN_FABS,
6131 NULL_PTR);
8d08fdba
MS
6132 builtin_function ("__builtin_labs", long_ftype_long,
6133 BUILT_IN_LABS, NULL_PTR);
de22184b 6134 builtin_function ("__builtin_saveregs", ptr_ftype,
8d08fdba 6135 BUILT_IN_SAVEREGS, NULL_PTR);
8d08fdba
MS
6136 builtin_function ("__builtin_classify_type", default_function_type,
6137 BUILT_IN_CLASSIFY_TYPE, NULL_PTR);
de22184b 6138 builtin_function ("__builtin_next_arg", ptr_ftype,
8d08fdba 6139 BUILT_IN_NEXT_ARG, NULL_PTR);
de22184b 6140 builtin_function ("__builtin_args_info", int_ftype_int,
8d08fdba 6141 BUILT_IN_ARGS_INFO, NULL_PTR);
eb66be0e
MS
6142 builtin_function ("__builtin_setjmp",
6143 build_function_type (integer_type_node,
6144 tree_cons (NULL_TREE, ptr_type_node,
6145 endlink)),
6146 BUILT_IN_SETJMP, NULL_PTR);
6147 builtin_function ("__builtin_longjmp",
6148 build_function_type (integer_type_node,
6149 tree_cons (NULL_TREE, ptr_type_node,
6150 tree_cons (NULL_TREE,
6151 integer_type_node,
6152 endlink))),
6153 BUILT_IN_LONGJMP, NULL_PTR);
8d08fdba
MS
6154
6155 /* Untyped call and return. */
de22184b 6156 builtin_function ("__builtin_apply_args", ptr_ftype,
8d08fdba
MS
6157 BUILT_IN_APPLY_ARGS, NULL_PTR);
6158
6159 temp = tree_cons (NULL_TREE,
6160 build_pointer_type (build_function_type (void_type_node,
6161 NULL_TREE)),
2c73f9f5 6162 tree_cons (NULL_TREE, ptr_ftype_sizetype, NULL_TREE));
8d08fdba
MS
6163 builtin_function ("__builtin_apply",
6164 build_function_type (ptr_type_node, temp),
6165 BUILT_IN_APPLY, NULL_PTR);
de22184b 6166 builtin_function ("__builtin_return", void_ftype_ptr,
8d08fdba
MS
6167 BUILT_IN_RETURN, NULL_PTR);
6168
6169 /* Currently under experimentation. */
6170 builtin_function ("__builtin_memcpy", memcpy_ftype,
6171 BUILT_IN_MEMCPY, "memcpy");
6172 builtin_function ("__builtin_memcmp", int_ftype_cptr_cptr_sizet,
6173 BUILT_IN_MEMCMP, "memcmp");
6174 builtin_function ("__builtin_strcmp", int_ftype_string_string,
6175 BUILT_IN_STRCMP, "strcmp");
6176 builtin_function ("__builtin_strcpy", string_ftype_ptr_ptr,
6177 BUILT_IN_STRCPY, "strcpy");
cffa8729 6178 builtin_function ("__builtin_strlen", strlen_ftype,
8d08fdba 6179 BUILT_IN_STRLEN, "strlen");
cffa8729
MS
6180 builtin_function ("__builtin_sqrtf", float_ftype_float,
6181 BUILT_IN_FSQRT, "sqrtf");
6182 builtin_function ("__builtin_fsqrt", double_ftype_double,
6183 BUILT_IN_FSQRT, NULL_PTR);
6184 builtin_function ("__builtin_sqrtl", ldouble_ftype_ldouble,
6185 BUILT_IN_FSQRT, "sqrtl");
6186 builtin_function ("__builtin_sinf", float_ftype_float,
6187 BUILT_IN_SIN, "sinf");
6188 builtin_function ("__builtin_sin", double_ftype_double,
6189 BUILT_IN_SIN, "sin");
6190 builtin_function ("__builtin_sinl", ldouble_ftype_ldouble,
6191 BUILT_IN_SIN, "sinl");
6192 builtin_function ("__builtin_cosf", float_ftype_float,
6193 BUILT_IN_COS, "cosf");
6194 builtin_function ("__builtin_cos", double_ftype_double,
6195 BUILT_IN_COS, "cos");
6196 builtin_function ("__builtin_cosl", ldouble_ftype_ldouble,
6197 BUILT_IN_COS, "cosl");
8d08fdba
MS
6198
6199 if (!flag_no_builtin)
6200 {
8d08fdba
MS
6201 builtin_function ("abs", int_ftype_int, BUILT_IN_ABS, NULL_PTR);
6202 builtin_function ("fabs", double_ftype_double, BUILT_IN_FABS, NULL_PTR);
6203 builtin_function ("labs", long_ftype_long, BUILT_IN_LABS, NULL_PTR);
cffa8729
MS
6204 builtin_function ("fabsf", float_ftype_float, BUILT_IN_FABS, NULL_PTR);
6205 builtin_function ("fabsl", ldouble_ftype_ldouble, BUILT_IN_FABS,
6206 NULL_PTR);
8d08fdba
MS
6207 builtin_function ("memcpy", memcpy_ftype, BUILT_IN_MEMCPY, NULL_PTR);
6208 builtin_function ("memcmp", int_ftype_cptr_cptr_sizet, BUILT_IN_MEMCMP,
6209 NULL_PTR);
cffa8729
MS
6210 builtin_function ("strcmp", int_ftype_string_string, BUILT_IN_STRCMP,
6211 NULL_PTR);
a28e3c7f
MS
6212 builtin_function ("strcpy", string_ftype_ptr_ptr, BUILT_IN_STRCPY,
6213 NULL_PTR);
cffa8729
MS
6214 builtin_function ("strlen", strlen_ftype, BUILT_IN_STRLEN, NULL_PTR);
6215 builtin_function ("sqrtf", float_ftype_float, BUILT_IN_FSQRT, NULL_PTR);
6216 builtin_function ("sqrt", double_ftype_double, BUILT_IN_FSQRT, NULL_PTR);
6217 builtin_function ("sqrtl", ldouble_ftype_ldouble, BUILT_IN_FSQRT,
6218 NULL_PTR);
6219 builtin_function ("sinf", float_ftype_float, BUILT_IN_SIN, NULL_PTR);
8d08fdba 6220 builtin_function ("sin", double_ftype_double, BUILT_IN_SIN, NULL_PTR);
cffa8729
MS
6221 builtin_function ("sinl", ldouble_ftype_ldouble, BUILT_IN_SIN, NULL_PTR);
6222 builtin_function ("cosf", float_ftype_float, BUILT_IN_COS, NULL_PTR);
8d08fdba 6223 builtin_function ("cos", double_ftype_double, BUILT_IN_COS, NULL_PTR);
cffa8729 6224 builtin_function ("cosl", ldouble_ftype_ldouble, BUILT_IN_COS, NULL_PTR);
00595019
MS
6225
6226 /* Declare these functions volatile
6227 to avoid spurious "control drops through" warnings. */
de22184b 6228 temp = builtin_function ("abort", void_ftype,
00595019
MS
6229 NOT_BUILT_IN, NULL_PTR);
6230 TREE_THIS_VOLATILE (temp) = 1;
6231 TREE_SIDE_EFFECTS (temp) = 1;
6232 /* Well, these are actually ANSI, but we can't set DECL_BUILT_IN on
6233 them... */
6234 DECL_BUILT_IN_NONANSI (temp) = 1;
de22184b 6235 temp = builtin_function ("exit", void_ftype_int,
00595019
MS
6236 NOT_BUILT_IN, NULL_PTR);
6237 TREE_THIS_VOLATILE (temp) = 1;
6238 TREE_SIDE_EFFECTS (temp) = 1;
6239 DECL_BUILT_IN_NONANSI (temp) = 1;
8d08fdba
MS
6240 }
6241
6242#if 0
6243 /* Support for these has not been written in either expand_builtin
6244 or build_function_call. */
72b7eeff
MS
6245 builtin_function ("__builtin_div", default_ftype, BUILT_IN_DIV, NULL_PTR);
6246 builtin_function ("__builtin_ldiv", default_ftype, BUILT_IN_LDIV, NULL_PTR);
a28e3c7f 6247 builtin_function ("__builtin_ffloor", double_ftype_double, BUILT_IN_FFLOOR,
72b7eeff 6248 NULL_PTR);
cffa8729
MS
6249 builtin_function ("__builtin_fceil", double_ftype_double, BUILT_IN_FCEIL,
6250 NULL_PTR);
a28e3c7f 6251 builtin_function ("__builtin_fmod", double_ftype_double_double,
72b7eeff 6252 BUILT_IN_FMOD, NULL_PTR);
a28e3c7f 6253 builtin_function ("__builtin_frem", double_ftype_double_double,
72b7eeff 6254 BUILT_IN_FREM, NULL_PTR);
cffa8729
MS
6255 builtin_function ("__builtin_memset", ptr_ftype_ptr_int_int,
6256 BUILT_IN_MEMSET, NULL_PTR);
a28e3c7f 6257 builtin_function ("__builtin_getexp", double_ftype_double, BUILT_IN_GETEXP,
72b7eeff 6258 NULL_PTR);
a28e3c7f 6259 builtin_function ("__builtin_getman", double_ftype_double, BUILT_IN_GETMAN,
72b7eeff 6260 NULL_PTR);
8d08fdba
MS
6261#endif
6262
6263 /* C++ extensions */
6264
6265 unknown_type_node = make_node (UNKNOWN_TYPE);
036407f7
ML
6266 record_unknown_type (unknown_type_node, "unknown type");
6267
8d08fdba
MS
6268 /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node. */
6269 TREE_TYPE (unknown_type_node) = unknown_type_node;
a6967cc0 6270
03d0f4af 6271 TREE_TYPE (null_node) = type_for_size (POINTER_SIZE, 0);
a6967cc0
JM
6272
6273 /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
6274 result. */
8d08fdba
MS
6275 TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
6276 TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
6277
6278 /* This is for handling opaque types in signatures. */
6279 opaque_type_node = copy_node (ptr_type_node);
6280 TYPE_MAIN_VARIANT (opaque_type_node) = opaque_type_node;
6281 record_builtin_type (RID_MAX, 0, opaque_type_node);
6282
e92cc029 6283 /* This is special for C++ so functions can be overloaded. */
8d08fdba
MS
6284 wchar_type_node
6285 = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (WCHAR_TYPE)));
6286 wchar_type_size = TYPE_PRECISION (wchar_type_node);
6287 signed_wchar_type_node = make_signed_type (wchar_type_size);
6288 unsigned_wchar_type_node = make_unsigned_type (wchar_type_size);
6289 wchar_type_node
6290 = TREE_UNSIGNED (wchar_type_node)
6291 ? unsigned_wchar_type_node
6292 : signed_wchar_type_node;
6293 record_builtin_type (RID_WCHAR, "__wchar_t", wchar_type_node);
6294
f376e137
MS
6295 /* Artificial declaration of wchar_t -- can be bashed */
6296 wchar_decl_node = build_decl (TYPE_DECL, get_identifier ("wchar_t"),
6297 wchar_type_node);
6298 pushdecl (wchar_decl_node);
6299
8d08fdba
MS
6300 /* This is for wide string constants. */
6301 wchar_array_type_node
6302 = build_array_type (wchar_type_node, array_domain_type);
6303
8926095f 6304 if (flag_vtable_thunks)
700f8a87
MS
6305 {
6306 /* Make sure we get a unique function type, so we can give
6307 its pointer type a name. (This wins for gdb.) */
6308 tree vfunc_type = make_node (FUNCTION_TYPE);
6309 TREE_TYPE (vfunc_type) = integer_type_node;
6310 TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
6311 layout_type (vfunc_type);
6312
6313 vtable_entry_type = build_pointer_type (vfunc_type);
6314 }
8926095f 6315 else
700f8a87
MS
6316 {
6317 vtable_entry_type = make_lang_type (RECORD_TYPE);
6318 fields[0] = build_lang_field_decl (FIELD_DECL, delta_identifier,
6319 delta_type_node);
6320 fields[1] = build_lang_field_decl (FIELD_DECL, index_identifier,
6321 delta_type_node);
6322 fields[2] = build_lang_field_decl (FIELD_DECL, pfn_identifier,
6323 ptr_type_node);
6324 finish_builtin_type (vtable_entry_type, VTBL_PTR_TYPE, fields, 2,
6325 double_type_node);
6326
6327 /* Make this part of an invisible union. */
6328 fields[3] = copy_node (fields[2]);
6329 TREE_TYPE (fields[3]) = delta_type_node;
6330 DECL_NAME (fields[3]) = delta2_identifier;
6331 DECL_MODE (fields[3]) = TYPE_MODE (delta_type_node);
6332 DECL_SIZE (fields[3]) = TYPE_SIZE (delta_type_node);
6333 TREE_UNSIGNED (fields[3]) = 0;
6334 TREE_CHAIN (fields[2]) = fields[3];
91063b51
MM
6335 vtable_entry_type = build_qualified_type (vtable_entry_type,
6336 TYPE_QUAL_CONST);
700f8a87
MS
6337 }
6338 record_builtin_type (RID_MAX, VTBL_PTR_TYPE, vtable_entry_type);
8d08fdba 6339
8d08fdba 6340 vtbl_type_node
52bf7d5d 6341 = build_cplus_array_type (vtable_entry_type, NULL_TREE);
8d08fdba 6342 layout_type (vtbl_type_node);
91063b51 6343 vtbl_type_node = build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
8d08fdba 6344 record_builtin_type (RID_MAX, NULL_PTR, vtbl_type_node);
849da744
MM
6345 vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
6346 layout_type (vtbl_ptr_type_node);
6347 record_builtin_type (RID_MAX, NULL_PTR, vtbl_ptr_type_node);
8d08fdba
MS
6348
6349 /* Simplify life by making a "sigtable_entry_type". Give its
6350 fields names so that the debugger can use them. */
6351
6352 if (flag_handle_signatures)
6353 {
6354 sigtable_entry_type = make_lang_type (RECORD_TYPE);
dff6b454
RK
6355 fields[0] = build_lang_field_decl (FIELD_DECL, tag_identifier,
6356 delta_type_node);
9dd70aa4 6357 fields[1] = build_lang_field_decl (FIELD_DECL, vb_off_identifier,
dff6b454 6358 delta_type_node);
9dd70aa4 6359 fields[2] = build_lang_field_decl (FIELD_DECL, delta_identifier,
dff6b454
RK
6360 delta_type_node);
6361 fields[3] = build_lang_field_decl (FIELD_DECL, index_identifier,
6362 delta_type_node);
9dd70aa4
GB
6363 fields[4] = build_lang_field_decl (FIELD_DECL, pfn_identifier,
6364 ptr_type_node);
6365
6366 /* Set the alignment to the max of the alignment of ptr_type_node and
6367 delta_type_node. Double alignment wastes a word on the Sparc. */
6368 finish_builtin_type (sigtable_entry_type, SIGTABLE_PTR_TYPE, fields, 4,
6369 (TYPE_ALIGN (ptr_type_node) > TYPE_ALIGN (delta_type_node))
6370 ? ptr_type_node
6371 : delta_type_node);
dff6b454
RK
6372
6373 /* Make this part of an invisible union. */
9dd70aa4
GB
6374 fields[5] = copy_node (fields[4]);
6375 TREE_TYPE (fields[5]) = delta_type_node;
6376 DECL_NAME (fields[5]) = vt_off_identifier;
6377 DECL_MODE (fields[5]) = TYPE_MODE (delta_type_node);
6378 DECL_SIZE (fields[5]) = TYPE_SIZE (delta_type_node);
6379 TREE_UNSIGNED (fields[5]) = 0;
6380 TREE_CHAIN (fields[4]) = fields[5];
dff6b454 6381
91063b51
MM
6382 sigtable_entry_type = build_qualified_type (sigtable_entry_type,
6383 TYPE_QUAL_CONST);
8d08fdba
MS
6384 record_builtin_type (RID_MAX, SIGTABLE_PTR_TYPE, sigtable_entry_type);
6385 }
6386
2c73f9f5
ML
6387 std_node = build_decl (NAMESPACE_DECL,
6388 get_identifier (flag_honor_std ? "fake std":"std"),
6633d636
MS
6389 void_type_node);
6390 pushdecl (std_node);
6391
2c73f9f5 6392 global_type_node = make_node (LANG_TYPE);
036407f7 6393 record_unknown_type (global_type_node, "global type");
2c73f9f5 6394
db5ae43f
MS
6395 /* Now, C++. */
6396 current_lang_name = lang_name_cplusplus;
8d08fdba 6397
ced78d8b 6398 {
2c73f9f5
ML
6399 tree bad_alloc_type_node, newtype, deltype;
6400 if (flag_honor_std)
6401 push_namespace (get_identifier ("std"));
6402 bad_alloc_type_node = xref_tag
ca107ded 6403 (class_type_node, get_identifier ("bad_alloc"), 1);
2c73f9f5
ML
6404 if (flag_honor_std)
6405 pop_namespace ();
6406 newtype = build_exception_variant
ced78d8b 6407 (ptr_ftype_sizetype, build_tree_list (NULL_TREE, bad_alloc_type_node));
2c73f9f5 6408 deltype = build_exception_variant
ced78d8b
JM
6409 (void_ftype_ptr, build_tree_list (NULL_TREE, NULL_TREE));
6410 auto_function (ansi_opname[(int) NEW_EXPR], newtype, NOT_BUILT_IN);
6411 auto_function (ansi_opname[(int) VEC_NEW_EXPR], newtype, NOT_BUILT_IN);
94e098d1
MM
6412 global_delete_fndecl
6413 = auto_function (ansi_opname[(int) DELETE_EXPR], deltype, NOT_BUILT_IN);
ced78d8b
JM
6414 auto_function (ansi_opname[(int) VEC_DELETE_EXPR], deltype, NOT_BUILT_IN);
6415 }
8d08fdba
MS
6416
6417 abort_fndecl
de22184b 6418 = define_function ("__pure_virtual", void_ftype,
8d08fdba
MS
6419 NOT_BUILT_IN, 0, 0);
6420
8d08fdba
MS
6421 /* Perform other language dependent initializations. */
6422 init_class_processing ();
6423 init_init_processing ();
6424 init_search_processing ();
1737fe20
BK
6425 if (flag_rtti)
6426 init_rtti_processing ();
8d08fdba 6427
6467930b 6428 if (flag_exceptions)
8d2733ca 6429 init_exception_processing ();
8d08fdba
MS
6430 if (flag_no_inline)
6431 {
6432 flag_inline_functions = 0;
8d08fdba 6433 }
9e9ff709 6434
7fcdf4c2 6435 if (! supports_one_only ())
72b7eeff 6436 flag_weak = 0;
8d08fdba
MS
6437
6438 /* Create the global bindings for __FUNCTION__ and __PRETTY_FUNCTION__. */
6439 declare_function_name ();
6440
6441 /* Prepare to check format strings against argument lists. */
6442 init_function_format_info ();
e9a25f70
JL
6443
6444 /* Show we use EH for cleanups. */
6445 using_eh_for_cleanups ();
62c154ed
JM
6446
6447 print_error_function = lang_print_error_function;
501ba25a 6448 lang_get_alias_set = &c_get_alias_set;
d9cf7c82
JM
6449
6450 /* Maintain consistency. Perhaps we should just complain if they
6451 say -fwritable-strings? */
6452 if (flag_writable_strings)
6453 flag_const_strings = 0;
62c154ed
JM
6454}
6455
6456/* Function to print any language-specific context for an error message. */
6457
6458static void
6459lang_print_error_function (file)
6460 char *file;
6461{
6462 default_print_error_function (file);
6463 maybe_print_template_context ();
8d08fdba
MS
6464}
6465
6466/* Make a definition for a builtin function named NAME and whose data type
6467 is TYPE. TYPE should be a function type with argument types.
6468 FUNCTION_CODE tells later passes how to compile calls to this function.
6469 See tree.h for its possible values.
6470
6471 If LIBRARY_NAME is nonzero, use that for DECL_ASSEMBLER_NAME,
6472 the name to be called if we can't opencode the function. */
6473
6474tree
6475define_function (name, type, function_code, pfn, library_name)
6476 char *name;
6477 tree type;
6478 enum built_in_function function_code;
49c249e1 6479 void (*pfn) PROTO((tree));
8d08fdba
MS
6480 char *library_name;
6481{
6482 tree decl = build_lang_decl (FUNCTION_DECL, get_identifier (name), type);
6483 DECL_EXTERNAL (decl) = 1;
6484 TREE_PUBLIC (decl) = 1;
863adfc0 6485 DECL_ARTIFICIAL (decl) = 1;
8d08fdba 6486
2c73f9f5 6487 my_friendly_assert (DECL_CONTEXT (decl) == NULL_TREE, 392);
cb0dbb9a 6488 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
2c73f9f5 6489
8d08fdba
MS
6490 /* Since `pushdecl' relies on DECL_ASSEMBLER_NAME instead of DECL_NAME,
6491 we cannot change DECL_ASSEMBLER_NAME until we have installed this
6492 function in the namespace. */
6493 if (pfn) (*pfn) (decl);
6494 if (library_name)
6495 DECL_ASSEMBLER_NAME (decl) = get_identifier (library_name);
6496 make_function_rtl (decl);
6497 if (function_code != NOT_BUILT_IN)
6498 {
6499 DECL_BUILT_IN (decl) = 1;
39211cd5 6500 DECL_FUNCTION_CODE (decl) = function_code;
8d08fdba
MS
6501 }
6502 return decl;
6503}
6504\f
61a127b3
MM
6505/* When we call finish_struct for an anonymous union, we create
6506 default copy constructors and such. But, an anonymous union
6507 shouldn't have such things; this function undoes the damage to the
6508 anonymous union type T.
6509
6510 (The reason that we create the synthesized methods is that we don't
6511 distinguish `union { int i; }' from `typedef union { int i; } U'.
6512 The first is an anonymous union; the second is just an ordinary
6513 union type.) */
6514
6515void
6516fixup_anonymous_union (t)
6517 tree t;
6518{
6519 tree *q;
6520
6521 /* Wipe out memory of synthesized methods */
6522 TYPE_HAS_CONSTRUCTOR (t) = 0;
6523 TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
6524 TYPE_HAS_INIT_REF (t) = 0;
6525 TYPE_HAS_CONST_INIT_REF (t) = 0;
6526 TYPE_HAS_ASSIGN_REF (t) = 0;
6527 TYPE_HAS_ASSIGNMENT (t) = 0;
6528 TYPE_HAS_CONST_ASSIGN_REF (t) = 0;
6529
6530 /* Splice the implicitly generated functions out of the TYPE_METHODS
6531 list. */
6532 q = &TYPE_METHODS (t);
6533 while (*q)
6534 {
6535 if (DECL_ARTIFICIAL (*q))
6536 *q = TREE_CHAIN (*q);
6537 else
6538 q = &TREE_CHAIN (*q);
6539 }
6540
6541 /* ANSI C++ June 5 1992 WP 9.5.3. Anonymous unions may not have
6542 function members. */
6543 if (TYPE_METHODS (t))
6544 error ("an anonymous union cannot have function members");
6545}
6546
72a93143
JM
6547/* Make sure that a declaration with no declarator is well-formed, i.e.
6548 just defines a tagged type or anonymous union.
8d08fdba 6549
72a93143 6550 Returns the type defined, if any. */
8d08fdba 6551
72a93143
JM
6552tree
6553check_tag_decl (declspecs)
8d08fdba
MS
6554 tree declspecs;
6555{
72a93143 6556 int found_type = 0;
2986ae00 6557 tree ob_modifier = NULL_TREE;
8d08fdba 6558 register tree link;
8d08fdba
MS
6559 register tree t = NULL_TREE;
6560
6561 for (link = declspecs; link; link = TREE_CHAIN (link))
6562 {
6563 register tree value = TREE_VALUE (link);
6564
72a93143 6565 if (TYPE_P (value))
8d08fdba 6566 {
72a93143 6567 ++found_type;
5566b478 6568
72a93143
JM
6569 if (IS_AGGR_TYPE (value) || TREE_CODE (value) == ENUMERAL_TYPE)
6570 {
6571 my_friendly_assert (TYPE_MAIN_DECL (value) != NULL_TREE, 261);
6572 t = value;
6573 }
8d08fdba 6574 }
83f660b7
JM
6575 else if (value == ridpointers[(int) RID_FRIEND])
6576 {
83f660b7
JM
6577 if (current_class_type == NULL_TREE
6578 || current_scope () != current_class_type)
6579 ob_modifier = value;
6580 }
8d08fdba 6581 else if (value == ridpointers[(int) RID_STATIC]
2986ae00
MS
6582 || value == ridpointers[(int) RID_EXTERN]
6583 || value == ridpointers[(int) RID_AUTO]
28cbf42c
MS
6584 || value == ridpointers[(int) RID_REGISTER]
6585 || value == ridpointers[(int) RID_INLINE]
6586 || value == ridpointers[(int) RID_VIRTUAL]
72a93143
JM
6587 || value == ridpointers[(int) RID_CONST]
6588 || value == ridpointers[(int) RID_VOLATILE]
28cbf42c 6589 || value == ridpointers[(int) RID_EXPLICIT])
2986ae00 6590 ob_modifier = value;
8d08fdba
MS
6591 }
6592
72a93143
JM
6593 if (found_type > 1)
6594 error ("multiple types in one declaration");
7e2067ca
JM
6595
6596 /* Inside a class, we might be in a friend or access declaration.
6597 Until we have a good way of detecting the latter, don't warn. */
6598 if (t == NULL_TREE && ! current_class_type)
6599 pedwarn ("declaration does not declare anything");
6600 else if (t && ANON_UNION_TYPE_P (t))
83f660b7
JM
6601 /* Anonymous unions are objects, so they can have specifiers. */;
6602 else if (ob_modifier)
8d08fdba 6603 {
83f660b7
JM
6604 if (ob_modifier == ridpointers[(int) RID_INLINE]
6605 || ob_modifier == ridpointers[(int) RID_VIRTUAL])
6606 cp_error ("`%D' can only be specified for functions", ob_modifier);
6607 else if (ob_modifier == ridpointers[(int) RID_FRIEND])
6608 cp_error ("`%D' can only be specified inside a class", ob_modifier);
6609 else if (ob_modifier == ridpointers[(int) RID_EXPLICIT])
6610 cp_error ("`%D' can only be specified for constructors",
6611 ob_modifier);
6612 else
6613 cp_error ("`%D' can only be specified for objects and functions",
6614 ob_modifier);
72a93143 6615 }
8d08fdba 6616
72a93143
JM
6617 return t;
6618}
6619
6620/* Called when a declaration is seen that contains no names to declare.
6621 If its type is a reference to a structure, union or enum inherited
6622 from a containing scope, shadow that tag name for the current scope
6623 with a forward reference.
6624 If its type defines a new named structure or union
6625 or defines an enum, it is valid but we need not do anything here.
6626 Otherwise, it is an error.
6627
6628 C++: may have to grok the declspecs to learn about static,
6629 complain for anonymous unions. */
6630
6631void
6632shadow_tag (declspecs)
6633 tree declspecs;
6634{
6635 tree t = check_tag_decl (declspecs);
6636
6637 if (t)
6638 maybe_process_partial_specialization (t);
6639
6640 /* This is where the variables in an anonymous union are
6641 declared. An anonymous union declaration looks like:
6642 union { ... } ;
6643 because there is no declarator after the union, the parser
6644 sends that declaration here. */
6645 if (t && ANON_UNION_TYPE_P (t))
6646 {
6647 fixup_anonymous_union (t);
6648
6649 if (TYPE_FIELDS (t))
6650 {
6651 tree decl = grokdeclarator (NULL_TREE, declspecs, NORMAL, 0,
6652 NULL_TREE);
6653 finish_anon_union (decl);
6654 }
8d08fdba
MS
6655 }
6656}
6657\f
6658/* Decode a "typename", such as "int **", returning a ..._TYPE node. */
6659
6660tree
6661groktypename (typename)
6662 tree typename;
6663{
6664 if (TREE_CODE (typename) != TREE_LIST)
6665 return typename;
6666 return grokdeclarator (TREE_VALUE (typename),
6667 TREE_PURPOSE (typename),
c11b6f21 6668 TYPENAME, 0, NULL_TREE);
8d08fdba
MS
6669}
6670
6671/* Decode a declarator in an ordinary declaration or data definition.
6672 This is called as soon as the type information and variable name
6673 have been parsed, before parsing the initializer if any.
6674 Here we create the ..._DECL node, fill in its type,
6675 and put it on the list of decls for the current context.
6676 The ..._DECL node is returned as the value.
6677
6678 Exception: for arrays where the length is not specified,
82580166 6679 the type is left null, to be filled in by `cp_finish_decl'.
8d08fdba
MS
6680
6681 Function definitions do not come here; they go to start_function
6682 instead. However, external and forward declarations of functions
6683 do go through here. Structure field declarations are done by
6684 grokfield and not through here. */
6685
6686/* Set this to zero to debug not using the temporary obstack
6687 to parse initializers. */
6688int debug_temp_inits = 1;
6689
6690tree
a1774733 6691start_decl (declarator, declspecs, initialized, attributes, prefix_attributes)
8d08fdba
MS
6692 tree declarator, declspecs;
6693 int initialized;
a1774733 6694 tree attributes, prefix_attributes;
8d08fdba
MS
6695{
6696 register tree decl;
6697 register tree type, tem;
6698 tree context;
6699 extern int have_extern_spec;
6700 extern int used_extern_spec;
6701
5566b478
MS
6702#if 0
6703 /* See code below that used this. */
8d08fdba 6704 int init_written = initialized;
5566b478 6705#endif
8d08fdba 6706
e92cc029 6707 /* This should only be done once on the top most decl. */
8d08fdba
MS
6708 if (have_extern_spec && !used_extern_spec)
6709 {
a28e3c7f
MS
6710 declspecs = decl_tree_cons (NULL_TREE, get_identifier ("extern"),
6711 declspecs);
8d08fdba
MS
6712 used_extern_spec = 1;
6713 }
6714
c11b6f21 6715 decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
f30432d7 6716 NULL_TREE);
a1774733 6717 if (decl == NULL_TREE || TREE_CODE (decl) == VOID_TYPE)
8d08fdba
MS
6718 return NULL_TREE;
6719
6720 type = TREE_TYPE (decl);
6721
6722 /* Don't lose if destructors must be executed at file-level. */
5156628f 6723 if (! processing_template_decl && TREE_STATIC (decl)
ec255269 6724 && TYPE_NEEDS_DESTRUCTOR (complete_type (type))
8d08fdba
MS
6725 && !TREE_PERMANENT (decl))
6726 {
6727 push_obstacks (&permanent_obstack, &permanent_obstack);
6728 decl = copy_node (decl);
6729 if (TREE_CODE (type) == ARRAY_TYPE)
6730 {
6731 tree itype = TYPE_DOMAIN (type);
6732 if (itype && ! TREE_PERMANENT (itype))
6733 {
6734 itype = build_index_type (copy_to_permanent (TYPE_MAX_VALUE (itype)));
6735 type = build_cplus_array_type (TREE_TYPE (type), itype);
6736 TREE_TYPE (decl) = type;
6737 }
6738 }
6739 pop_obstacks ();
6740 }
6741
8d08fdba
MS
6742 context
6743 = (TREE_CODE (decl) == FUNCTION_DECL && DECL_VIRTUAL_P (decl))
6744 ? DECL_CLASS_CONTEXT (decl)
6745 : DECL_CONTEXT (decl);
6746
9a68c51f
JM
6747 if (initialized && context && TREE_CODE (context) == NAMESPACE_DECL
6748 && context != current_namespace && TREE_CODE (decl) == VAR_DECL)
6749 {
6750 /* When parsing the initializer, lookup should use the object's
6751 namespace. */
6752 push_decl_namespace (context);
6753 }
6754
2c73f9f5
ML
6755 /* We are only interested in class contexts, later. */
6756 if (context && TREE_CODE (context) == NAMESPACE_DECL)
6757 context = NULL_TREE;
6758
8d08fdba
MS
6759 if (initialized)
6760 /* Is it valid for this decl to have an initializer at all?
6761 If not, set INITIALIZED to zero, which will indirectly
82580166 6762 tell `cp_finish_decl' to ignore the initializer once it is parsed. */
8d08fdba
MS
6763 switch (TREE_CODE (decl))
6764 {
6765 case TYPE_DECL:
6766 /* typedef foo = bar means give foo the same type as bar.
82580166 6767 We haven't parsed bar yet, so `cp_finish_decl' will fix that up.
8d08fdba
MS
6768 Any other case of an initialization in a TYPE_DECL is an error. */
6769 if (pedantic || list_length (declspecs) > 1)
6770 {
8251199e 6771 cp_error ("typedef `%D' is initialized", decl);
8d08fdba
MS
6772 initialized = 0;
6773 }
6774 break;
6775
6776 case FUNCTION_DECL:
8251199e 6777 cp_error ("function `%#D' is initialized like a variable", decl);
8d08fdba
MS
6778 initialized = 0;
6779 break;
6780
6781 default:
5156628f 6782 if (! processing_template_decl)
8d08fdba 6783 {
bd6dd845 6784 if (type != error_mark_node)
5156628f 6785 {
bd6dd845
MS
6786 if (TYPE_SIZE (type) != NULL_TREE
6787 && ! TREE_CONSTANT (TYPE_SIZE (type)))
6788 {
8251199e
JM
6789 cp_error
6790 ("variable-sized object `%D' may not be initialized",
bd6dd845
MS
6791 decl);
6792 initialized = 0;
6793 }
5156628f 6794
bd6dd845
MS
6795 if (TREE_CODE (type) == ARRAY_TYPE
6796 && TYPE_SIZE (complete_type (TREE_TYPE (type))) == NULL_TREE)
6797 {
8251199e
JM
6798 cp_error
6799 ("elements of array `%#D' have incomplete type", decl);
bd6dd845
MS
6800 initialized = 0;
6801 }
5156628f 6802 }
8d08fdba
MS
6803 }
6804 }
6805
8d08fdba
MS
6806 if (initialized)
6807 {
a9aedbc2 6808 if (! toplevel_bindings_p ()
8d08fdba 6809 && DECL_EXTERNAL (decl))
8251199e 6810 cp_warning ("declaration of `%#D' has `extern' and is initialized",
8d08fdba
MS
6811 decl);
6812 DECL_EXTERNAL (decl) = 0;
5566b478 6813 if (toplevel_bindings_p ())
8d08fdba
MS
6814 TREE_STATIC (decl) = 1;
6815
6816 /* Tell `pushdecl' this is an initialized decl
6817 even though we don't yet have the initializer expression.
82580166 6818 Also tell `cp_finish_decl' it may store the real initializer. */
8d08fdba
MS
6819 DECL_INITIAL (decl) = error_mark_node;
6820 }
6821
5566b478 6822 if (context && TYPE_SIZE (complete_type (context)) != NULL_TREE)
5b605f68 6823 {
e97e5263
JM
6824 pushclass (context, 2);
6825
5b605f68
MS
6826 if (TREE_CODE (decl) == VAR_DECL)
6827 {
6828 tree field = lookup_field (context, DECL_NAME (decl), 0, 0);
6829 if (field == NULL_TREE || TREE_CODE (field) != VAR_DECL)
8251199e 6830 cp_error ("`%#D' is not a static member of `%#T'", decl, context);
e349ee73
MS
6831 else
6832 {
6833 if (DECL_CONTEXT (field) != context)
f2d773a2 6834 {
8251199e 6835 cp_pedwarn ("ANSI C++ does not permit `%T::%D' to be defined as `%T::%D'",
f2d773a2
JM
6836 DECL_CONTEXT (field), DECL_NAME (decl),
6837 context, DECL_NAME (decl));
6838 DECL_CONTEXT (decl) = DECL_CONTEXT (field);
6839 }
75650646
MM
6840 /* Static data member are tricky; an in-class initialization
6841 still doesn't provide a definition, so the in-class
6842 declaration will have DECL_EXTERNAL set, but will have an
6843 initialization. Thus, duplicate_decls won't warn
6844 about this situation, and so we check here. */
6845 if (DECL_INITIAL (decl) && DECL_INITIAL (field))
8251199e 6846 cp_error ("duplicate initialization of %D", decl);
e349ee73
MS
6847 if (duplicate_decls (decl, field))
6848 decl = field;
6849 }
5b605f68 6850 }
f30432d7
MS
6851 else
6852 {
5566b478 6853 tree field = check_classfn (context, decl);
f30432d7
MS
6854 if (field && duplicate_decls (decl, field))
6855 decl = field;
6856 }
6857
6858 /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set. */
dff3e828
BK
6859 DECL_IN_AGGR_P (decl) = 0;
6860 if ((DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl))
6861 || CLASSTYPE_USE_TEMPLATE (context))
84e6233f
JM
6862 {
6863 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
6864 /* [temp.expl.spec] An explicit specialization of a static data
6865 member of a template is a definition if the declaration
6866 includes an initializer; otherwise, it is a declaration.
6867
6868 We check for processing_specialization so this only applies
6869 to the new specialization syntax. */
6870 if (DECL_INITIAL (decl) == NULL_TREE && processing_specialization)
6871 DECL_EXTERNAL (decl) = 1;
6872 }
f30432d7 6873
b7698cf0 6874 if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl))
8251199e 6875 cp_pedwarn ("declaration of `%#D' outside of class is not definition",
f30432d7 6876 decl);
5b605f68
MS
6877 }
6878
3a846e6e
NC
6879#ifdef SET_DEFAULT_DECL_ATTRIBUTES
6880 SET_DEFAULT_DECL_ATTRIBUTES (decl, attributes);
6881#endif
6882
a1774733
BK
6883 /* Set attributes here so if duplicate decl, will have proper attributes. */
6884 cplus_decl_attributes (decl, attributes, prefix_attributes);
6885
8d08fdba
MS
6886 /* Add this decl to the current binding level, but not if it
6887 comes from another scope, e.g. a static member variable.
6888 TEM may equal DECL or it may be a previous decl of the same name. */
5b605f68 6889
51bcf661
JM
6890 if ((TREE_CODE (decl) != PARM_DECL && DECL_CONTEXT (decl) != NULL_TREE
6891 /* Definitions of namespace members outside their namespace are
6892 possible. */
6893 && TREE_CODE (DECL_CONTEXT (decl)) != NAMESPACE_DECL)
2c73f9f5 6894 || (TREE_CODE (decl) == TEMPLATE_DECL && !namespace_bindings_p ())
75650646
MM
6895 || TREE_CODE (type) == LANG_TYPE
6896 /* The declaration of template specializations does not affect
6897 the functions available for overload resolution, so we do not
6898 call pushdecl. */
e1467ff2 6899 || (TREE_CODE (decl) == FUNCTION_DECL
75650646 6900 && DECL_TEMPLATE_SPECIALIZATION (decl)))
8d08fdba
MS
6901 tem = decl;
6902 else
8926095f 6903 tem = pushdecl (decl);
2ee887f2 6904
5156628f 6905 if (processing_template_decl)
5566b478
MS
6906 {
6907 if (! current_function_decl)
3ac3d9ea 6908 tem = push_template_decl (tem);
5566b478 6909 else if (minimal_parse_mode)
b5effa19 6910 DECL_VINDEX (tem)
5566b478
MS
6911 = build_min_nt (DECL_STMT, copy_to_permanent (declarator),
6912 copy_to_permanent (declspecs),
c11b6f21 6913 NULL_TREE);
5566b478
MS
6914 }
6915
6916
2ee887f2 6917#if ! defined (ASM_OUTPUT_BSS) && ! defined (ASM_OUTPUT_ALIGNED_BSS)
a3203465 6918 /* Tell the back-end to use or not use .common as appropriate. If we say
a50f0918
MS
6919 -fconserve-space, we want this to save .data space, at the expense of
6920 wrong semantics. If we say -fno-conserve-space, we want this to
6921 produce errors about redefs; to do this we force variables into the
6922 data segment. */
a3203465 6923 DECL_COMMON (tem) = flag_conserve_space || ! TREE_PUBLIC (tem);
2ee887f2 6924#endif
3a846e6e 6925
5156628f 6926 if (! processing_template_decl)
5566b478 6927 start_decl_1 (tem);
8d08fdba 6928
5566b478
MS
6929 /* Corresponding pop_obstacks is done in `cp_finish_decl'. */
6930 push_obstacks_nochange ();
8d08fdba 6931
5566b478
MS
6932#if 0
6933 /* We have no way of knowing whether the initializer will need to be
6934 evaluated at run-time or not until we've parsed it, so let's just put
6935 it in the permanent obstack. (jason) */
8d08fdba
MS
6936 if (init_written
6937 && ! (TREE_CODE (tem) == PARM_DECL
6938 || (TREE_READONLY (tem)
6939 && (TREE_CODE (tem) == VAR_DECL
6940 || TREE_CODE (tem) == FIELD_DECL))))
6941 {
6942 /* When parsing and digesting the initializer,
6943 use temporary storage. Do this even if we will ignore the value. */
a9aedbc2 6944 if (toplevel_bindings_p () && debug_temp_inits)
8d08fdba 6945 {
5156628f 6946 if (processing_template_decl
5566b478 6947 || TYPE_NEEDS_CONSTRUCTING (type)
a28e3c7f 6948 || TREE_CODE (type) == REFERENCE_TYPE)
8d08fdba
MS
6949 /* In this case, the initializer must lay down in permanent
6950 storage, since it will be saved until `finish_file' is run. */
6951 ;
6952 else
6953 temporary_allocation ();
6954 }
6955 }
5566b478 6956#endif
8d08fdba 6957
8d08fdba
MS
6958 return tem;
6959}
6960
5566b478
MS
6961void
6962start_decl_1 (decl)
6963 tree decl;
8d08fdba 6964{
5566b478
MS
6965 tree type = TREE_TYPE (decl);
6966 int initialized = (DECL_INITIAL (decl) != NULL_TREE);
8d08fdba 6967
5566b478
MS
6968 /* If this type of object needs a cleanup, and control may
6969 jump past it, make a new binding level so that it is cleaned
6970 up only when it is initialized first. */
6971 if (TYPE_NEEDS_DESTRUCTOR (type)
6972 && current_binding_level->more_cleanups_ok == 0)
6973 pushlevel_temporary (1);
6974
6975 if (initialized)
6976 /* Is it valid for this decl to have an initializer at all?
6977 If not, set INITIALIZED to zero, which will indirectly
6978 tell `cp_finish_decl' to ignore the initializer once it is parsed. */
8d08fdba 6979 {
5566b478
MS
6980 /* Don't allow initializations for incomplete types except for
6981 arrays which might be completed by the initialization. */
6982 if (type == error_mark_node)
6983 ; /* Don't complain again. */
6984 else if (TYPE_SIZE (complete_type (type)) != NULL_TREE)
6985 ; /* A complete type is ok. */
6986 else if (TREE_CODE (type) != ARRAY_TYPE)
8d08fdba 6987 {
8251199e 6988 cp_error ("variable `%#D' has initializer but incomplete type",
5566b478
MS
6989 decl);
6990 initialized = 0;
25eb19ff 6991 type = TREE_TYPE (decl) = error_mark_node;
5566b478
MS
6992 }
6993 else if (TYPE_SIZE (complete_type (TREE_TYPE (type))) == NULL_TREE)
6994 {
6995 if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
8251199e 6996 cp_error ("elements of array `%#D' have incomplete type", decl);
5566b478
MS
6997 /* else we already gave an error in start_decl. */
6998 initialized = 0;
8d08fdba 6999 }
8d08fdba
MS
7000 }
7001
5566b478
MS
7002 if (!initialized
7003 && TREE_CODE (decl) != TYPE_DECL
7004 && TREE_CODE (decl) != TEMPLATE_DECL
7005 && IS_AGGR_TYPE (type) && ! DECL_EXTERNAL (decl))
8d08fdba 7006 {
5156628f 7007 if ((! processing_template_decl || ! uses_template_parms (type))
7fcdf4c2 7008 && TYPE_SIZE (complete_type (type)) == NULL_TREE)
5566b478 7009 {
8251199e 7010 cp_error ("aggregate `%#D' has incomplete type and cannot be initialized",
5566b478
MS
7011 decl);
7012 /* Change the type so that assemble_variable will give
7013 DECL an rtl we can live with: (mem (const_int 0)). */
25eb19ff 7014 type = TREE_TYPE (decl) = error_mark_node;
5566b478
MS
7015 }
7016 else
7017 {
7018 /* If any base type in the hierarchy of TYPE needs a constructor,
7019 then we set initialized to 1. This way any nodes which are
7020 created for the purposes of initializing this aggregate
7021 will live as long as it does. This is necessary for global
7022 aggregates which do not have their initializers processed until
7023 the end of the file. */
7024 initialized = TYPE_NEEDS_CONSTRUCTING (type);
7025 }
7026 }
7027
7028#if 0
7029 /* We don't do this yet for GNU C++. */
7030 /* For a local variable, define the RTL now. */
7031 if (! toplevel_bindings_p ()
7032 /* But not if this is a duplicate decl
7033 and we preserved the rtl from the previous one
7034 (which may or may not happen). */
7035 && DECL_RTL (tem) == NULL_RTX)
7036 {
7037 if (TYPE_SIZE (TREE_TYPE (tem)) != NULL_TREE)
7038 expand_decl (tem);
7039 else if (TREE_CODE (TREE_TYPE (tem)) == ARRAY_TYPE
7040 && DECL_INITIAL (tem) != NULL_TREE)
7041 expand_decl (tem);
7042 }
7043#endif
7044
7045 if (! initialized)
7046 DECL_INITIAL (decl) = NULL_TREE;
7047}
7048
7049/* Handle initialization of references.
38e01259 7050 These three arguments are from `cp_finish_decl', and have the
e92cc029
MS
7051 same meaning here that they do there.
7052
7053 Quotes on semantics can be found in ARM 8.4.3. */
7054
5566b478 7055static void
a703fb38 7056grok_reference_init (decl, type, init)
5566b478 7057 tree decl, type, init;
5566b478
MS
7058{
7059 tree tmp;
7060
7061 if (init == NULL_TREE)
7062 {
7063 if ((DECL_LANG_SPECIFIC (decl) == 0
7064 || DECL_IN_AGGR_P (decl) == 0)
7065 && ! DECL_THIS_EXTERN (decl))
7066 {
8251199e 7067 cp_error ("`%D' declared as reference but not initialized", decl);
5566b478
MS
7068 if (TREE_CODE (decl) == VAR_DECL)
7069 SET_DECL_REFERENCE_SLOT (decl, error_mark_node);
7070 }
7071 return;
7072 }
7073
7074 if (init == error_mark_node)
7075 return;
7076
7077 if (TREE_CODE (type) == REFERENCE_TYPE
7078 && TREE_CODE (init) == CONSTRUCTOR)
7079 {
8251199e 7080 cp_error ("ANSI C++ forbids use of initializer list to initialize reference `%D'", decl);
8d08fdba
MS
7081 return;
7082 }
7083
7084 if (TREE_CODE (init) == TREE_LIST)
7085 init = build_compound_expr (init);
8d08fdba 7086
8ccc31eb
MS
7087 if (TREE_CODE (TREE_TYPE (init)) == REFERENCE_TYPE)
7088 init = convert_from_reference (init);
7089
8d08fdba
MS
7090 if (TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE
7091 && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
7092 {
a3203465 7093 /* Note: default conversion is only called in very special cases. */
8d08fdba
MS
7094 init = default_conversion (init);
7095 }
7096
a3203465 7097 tmp = convert_to_reference
9a3b49ac
MS
7098 (type, init, CONV_IMPLICIT,
7099 LOOKUP_SPECULATIVELY|LOOKUP_NORMAL|DIRECT_BIND, decl);
8d08fdba 7100
a3203465
MS
7101 if (tmp == error_mark_node)
7102 goto fail;
7103 else if (tmp != NULL_TREE)
8d08fdba 7104 {
a3203465 7105 init = tmp;
4c7bdca6 7106 DECL_INITIAL (decl) = save_expr (init);
8d08fdba 7107 }
a3203465 7108 else
8d08fdba 7109 {
8251199e 7110 cp_error ("cannot initialize `%T' from `%T'", type, TREE_TYPE (init));
a3203465 7111 goto fail;
8d08fdba 7112 }
8d08fdba 7113
8d08fdba
MS
7114 /* ?? Can this be optimized in some cases to
7115 hand back the DECL_INITIAL slot?? */
7116 if (TYPE_SIZE (TREE_TYPE (type)))
7117 {
7118 init = convert_from_reference (decl);
7119 if (TREE_PERMANENT (decl))
7120 init = copy_to_permanent (init);
7121 SET_DECL_REFERENCE_SLOT (decl, init);
7122 }
7123
7124 if (TREE_STATIC (decl) && ! TREE_CONSTANT (DECL_INITIAL (decl)))
7125 {
7126 expand_static_init (decl, DECL_INITIAL (decl));
7127 DECL_INITIAL (decl) = NULL_TREE;
7128 }
7129 return;
7130
7131 fail:
7132 if (TREE_CODE (decl) == VAR_DECL)
7133 SET_DECL_REFERENCE_SLOT (decl, error_mark_node);
7134 return;
7135}
7136
6060a796
MS
7137/* Fill in DECL_INITIAL with some magical value to prevent expand_decl from
7138 mucking with forces it does not comprehend (i.e. initialization with a
7139 constructor). If we are at global scope and won't go into COMMON, fill
7140 it in with a dummy CONSTRUCTOR to force the variable into .data;
7141 otherwise we can use error_mark_node. */
7142
28cbf42c
MS
7143static tree
7144obscure_complex_init (decl, init)
7145 tree decl, init;
6060a796 7146{
28cbf42c
MS
7147 if (! flag_no_inline && TREE_STATIC (decl))
7148 {
7149 if (extract_init (decl, init))
7150 return NULL_TREE;
7151 }
7152
2ee887f2 7153#if ! defined (ASM_OUTPUT_BSS) && ! defined (ASM_OUTPUT_ALIGNED_BSS)
a9aedbc2 7154 if (toplevel_bindings_p () && ! DECL_COMMON (decl))
6060a796
MS
7155 DECL_INITIAL (decl) = build (CONSTRUCTOR, TREE_TYPE (decl), NULL_TREE,
7156 NULL_TREE);
7157 else
2ee887f2 7158#endif
6060a796 7159 DECL_INITIAL (decl) = error_mark_node;
28cbf42c
MS
7160
7161 return init;
6060a796
MS
7162}
7163
91063b51
MM
7164/* Issue an error message if DECL is an uninitialized const variable. */
7165
7166static void
7167check_for_uninitialized_const_var (decl)
7168 tree decl;
7169{
7170 tree type = TREE_TYPE (decl);
7171
7172 /* ``Unless explicitly declared extern, a const object does not have
7173 external linkage and must be initialized. ($8.4; $12.1)'' ARM
7174 7.1.6 */
7175 if (TREE_CODE (decl) == VAR_DECL
7176 && TREE_CODE (type) != REFERENCE_TYPE
7177 && CP_TYPE_CONST_P (type)
7178 && !TYPE_NEEDS_CONSTRUCTING (type)
7179 && !DECL_INITIAL (decl))
7180 cp_error ("uninitialized const `%D'", decl);
7181}
7182
8d08fdba
MS
7183/* Finish processing of a declaration;
7184 install its line number and initial value.
7185 If the length of an array type is not known before,
7186 it must be determined now, from the initial value, or it is an error.
7187
7188 Call `pop_obstacks' iff NEED_POP is nonzero.
7189
82580166 7190 For C++, `cp_finish_decl' must be fairly evasive: it must keep initializers
8d08fdba
MS
7191 for aggregates that have constructors alive on the permanent obstack,
7192 so that the global initializing functions can be written at the end.
7193
7194 INIT0 holds the value of an initializer that should be allowed to escape
7195 the normal rules.
7196
6060a796
MS
7197 FLAGS is LOOKUP_ONLYCONVERTING is the = init syntax was used, else 0
7198 if the (init) syntax was used.
7199
8d08fdba 7200 For functions that take default parameters, DECL points to its
82580166 7201 "maximal" instantiation. `cp_finish_decl' must then also declared its
8d08fdba
MS
7202 subsequently lower and lower forms of instantiation, checking for
7203 ambiguity as it goes. This can be sped up later. */
7204
7205void
82580166 7206cp_finish_decl (decl, init, asmspec_tree, need_pop, flags)
8d08fdba
MS
7207 tree decl, init;
7208 tree asmspec_tree;
7209 int need_pop;
6060a796 7210 int flags;
8d08fdba
MS
7211{
7212 register tree type;
a703fb38 7213 tree cleanup = NULL_TREE, ttype = NULL_TREE;
8d08fdba
MS
7214 int was_incomplete;
7215 int temporary = allocation_temporary_p ();
7216 char *asmspec = NULL;
7217 int was_readonly = 0;
0c4b14c4 7218 int already_used = 0;
8d08fdba
MS
7219
7220 /* If this is 0, then we did not change obstacks. */
7221 if (! decl)
7222 {
7223 if (init)
8251199e 7224 error ("assignment (not initialization) in declaration");
8d08fdba
MS
7225 return;
7226 }
7227
a4443a08 7228 /* If a name was specified, get the string. */
8d08fdba 7229 if (asmspec_tree)
8d08fdba 7230 asmspec = TREE_STRING_POINTER (asmspec_tree);
8d08fdba 7231
2c73f9f5
ML
7232 if (init && TREE_CODE (init) == NAMESPACE_DECL)
7233 {
8251199e 7234 cp_error ("Cannot initialize `%D' to namespace `%D'",
2c73f9f5
ML
7235 decl, init);
7236 init = NULL_TREE;
7237 }
7238
6ba89f8e
MM
7239 if (current_class_type
7240 && DECL_REAL_CONTEXT (decl) == current_class_type
7241 && TYPE_BEING_DEFINED (current_class_type)
7242 && (DECL_INITIAL (decl) || init))
7243 DECL_DEFINED_IN_CLASS_P (decl) = 1;
7244
9a68c51f
JM
7245 if (TREE_CODE (decl) == VAR_DECL
7246 && DECL_CONTEXT (decl)
7247 && TREE_CODE (DECL_CONTEXT (decl)) == NAMESPACE_DECL
7248 && DECL_CONTEXT (decl) != current_namespace
7249 && init)
7250 {
7251 /* Leave the namespace of the object. */
7252 pop_decl_namespace ();
7253 }
7254
8d08fdba
MS
7255 /* If the type of the thing we are declaring either has
7256 a constructor, or has a virtual function table pointer,
7257 AND its initialization was accepted by `start_decl',
7258 then we stayed on the permanent obstack through the
7259 declaration, otherwise, changed obstacks as GCC would. */
7260
7261 type = TREE_TYPE (decl);
7262
f376e137 7263 if (type == error_mark_node)
eac293a1 7264 {
a9aedbc2 7265 if (toplevel_bindings_p () && temporary)
eac293a1
MS
7266 end_temporary_allocation ();
7267
7268 return;
7269 }
f376e137 7270
5156628f 7271 if (processing_template_decl)
5566b478
MS
7272 {
7273 if (init && DECL_INITIAL (decl))
7274 DECL_INITIAL (decl) = init;
faf5394a 7275 if (minimal_parse_mode && ! DECL_ARTIFICIAL (decl))
5566b478
MS
7276 {
7277 tree stmt = DECL_VINDEX (decl);
e1467ff2 7278 /* If the decl is declaring a member of a local class (in a
8857f91e
MM
7279 template function), the DECL_VINDEX will either be NULL,
7280 or it will be an actual virtual function index, not a
7281 DECL_STMT. */
7282 if (stmt != NULL_TREE && TREE_CODE (stmt) == DECL_STMT)
75650646
MM
7283 {
7284 DECL_VINDEX (decl) = NULL_TREE;
7285 TREE_OPERAND (stmt, 2) = copy_to_permanent (init);
7286 add_tree (stmt);
7287 }
5566b478 7288 }
8d08fdba 7289
5566b478
MS
7290 goto finish_end0;
7291 }
8d08fdba
MS
7292 /* Take care of TYPE_DECLs up front. */
7293 if (TREE_CODE (decl) == TYPE_DECL)
7294 {
7295 if (init && DECL_INITIAL (decl))
7296 {
7297 /* typedef foo = bar; store the type of bar as the type of foo. */
7298 TREE_TYPE (decl) = type = TREE_TYPE (init);
7299 DECL_INITIAL (decl) = init = NULL_TREE;
7300 }
a0a33927
MS
7301 if (type != error_mark_node
7302 && IS_AGGR_TYPE (type) && DECL_NAME (decl))
8d08fdba
MS
7303 {
7304 if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
8251199e 7305 cp_warning ("shadowing previous type declaration of `%#D'", decl);
8d08fdba
MS
7306 set_identifier_type_value (DECL_NAME (decl), type);
7307 CLASSTYPE_GOT_SEMICOLON (type) = 1;
7308 }
7309 GNU_xref_decl (current_function_decl, decl);
cffa8729
MS
7310
7311 /* If we have installed this as the canonical typedef for this
7312 type, and that type has not been defined yet, delay emitting
956d6950 7313 the debug information for it, as we will emit it later. */
d2e5ee5c 7314 if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
cffa8729
MS
7315 && TYPE_SIZE (TREE_TYPE (decl)) == NULL_TREE)
7316 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
7317
8d08fdba 7318 rest_of_decl_compilation (decl, NULL_PTR,
5566b478 7319 DECL_CONTEXT (decl) == NULL_TREE, at_eof);
8d08fdba
MS
7320 goto finish_end;
7321 }
8d08fdba
MS
7322 if (TREE_CODE (decl) != FUNCTION_DECL)
7323 {
7324 ttype = target_type (type);
8d08fdba
MS
7325 }
7326
7327 if (! DECL_EXTERNAL (decl) && TREE_READONLY (decl)
7328 && TYPE_NEEDS_CONSTRUCTING (type))
7329 {
7330
7331 /* Currently, GNU C++ puts constants in text space, making them
7332 impossible to initialize. In the future, one would hope for
7333 an operating system which understood the difference between
7334 initialization and the running of a program. */
7335 was_readonly = 1;
7336 TREE_READONLY (decl) = 0;
7337 }
7338
7339 if (TREE_CODE (decl) == FIELD_DECL)
7340 {
7341 if (init && init != error_mark_node)
7342 my_friendly_assert (TREE_PERMANENT (init), 147);
7343
7344 if (asmspec)
7345 {
7346 /* This must override the asm specifier which was placed
6060a796 7347 by grokclassfn. Lay this out fresh. */
8d08fdba
MS
7348 DECL_RTL (TREE_TYPE (decl)) = NULL_RTX;
7349 DECL_ASSEMBLER_NAME (decl) = get_identifier (asmspec);
7350 make_decl_rtl (decl, asmspec, 0);
7351 }
7352 }
7353 /* If `start_decl' didn't like having an initialization, ignore it now. */
7354 else if (init != NULL_TREE && DECL_INITIAL (decl) == NULL_TREE)
7355 init = NULL_TREE;
7356 else if (DECL_EXTERNAL (decl))
7357 ;
7358 else if (TREE_CODE (type) == REFERENCE_TYPE
7359 || (TYPE_LANG_SPECIFIC (type) && IS_SIGNATURE_REFERENCE (type)))
7360 {
f376e137
MS
7361 if (TREE_STATIC (decl))
7362 make_decl_rtl (decl, NULL_PTR,
a9aedbc2 7363 toplevel_bindings_p ()
f376e137 7364 || pseudo_global_level_p ());
a703fb38 7365 grok_reference_init (decl, type, init);
8d08fdba
MS
7366 init = NULL_TREE;
7367 }
7368
7369 GNU_xref_decl (current_function_decl, decl);
7370
a0a33927 7371 if (TREE_CODE (decl) == FIELD_DECL)
8d08fdba
MS
7372 ;
7373 else if (TREE_CODE (decl) == CONST_DECL)
7374 {
7375 my_friendly_assert (TREE_CODE (decl) != REFERENCE_TYPE, 148);
7376
7377 DECL_INITIAL (decl) = init;
7378
7379 /* This will keep us from needing to worry about our obstacks. */
7380 my_friendly_assert (init != NULL_TREE, 149);
7381 init = NULL_TREE;
7382 }
7383 else if (init)
7384 {
7385 if (TYPE_HAS_CONSTRUCTOR (type) || TYPE_NEEDS_CONSTRUCTING (type))
7386 {
7387 if (TREE_CODE (type) == ARRAY_TYPE)
7388 init = digest_init (type, init, (tree *) 0);
848b92e1
JM
7389 else if (TREE_CODE (init) == CONSTRUCTOR
7390 && TREE_HAS_CONSTRUCTOR (init))
8d08fdba 7391 {
f30432d7 7392 if (TYPE_NON_AGGREGATE_CLASS (type))
8d08fdba 7393 {
8251199e 7394 cp_error ("`%D' must be initialized by constructor, not by `{...}'",
a28e3c7f 7395 decl);
8d08fdba
MS
7396 init = error_mark_node;
7397 }
7398 else
7399 goto dont_use_constructor;
7400 }
8d08fdba
MS
7401 }
7402 else
7403 {
7404 dont_use_constructor:
7405 if (TREE_CODE (init) != TREE_VEC)
7406 init = store_init_value (decl, init);
8d08fdba 7407 }
28cbf42c
MS
7408
7409 if (init)
7410 /* We must hide the initializer so that expand_decl
7411 won't try to do something it does not understand. */
7412 init = obscure_complex_init (decl, init);
8d08fdba 7413 }
a0a33927
MS
7414 else if (DECL_EXTERNAL (decl))
7415 ;
8d08fdba
MS
7416 else if (TREE_CODE_CLASS (TREE_CODE (type)) == 't'
7417 && (IS_AGGR_TYPE (type) || TYPE_NEEDS_CONSTRUCTING (type)))
7418 {
7419 tree ctype = type;
7420 while (TREE_CODE (ctype) == ARRAY_TYPE)
7421 ctype = TREE_TYPE (ctype);
7422 if (! TYPE_NEEDS_CONSTRUCTING (ctype))
7423 {
7424 if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (ctype))
8251199e 7425 cp_error ("structure `%D' with uninitialized const members", decl);
8d08fdba 7426 if (CLASSTYPE_REF_FIELDS_NEED_INIT (ctype))
8251199e 7427 cp_error ("structure `%D' with uninitialized reference members",
a28e3c7f 7428 decl);
8d08fdba
MS
7429 }
7430
91063b51 7431 check_for_uninitialized_const_var (decl);
8d08fdba 7432
6060a796
MS
7433 if (TYPE_SIZE (type) != NULL_TREE
7434 && TYPE_NEEDS_CONSTRUCTING (type))
28cbf42c 7435 init = obscure_complex_init (decl, NULL_TREE);
8d08fdba 7436
91063b51
MM
7437 }
7438 else
7439 check_for_uninitialized_const_var (decl);
7440
8d08fdba
MS
7441 /* For top-level declaration, the initial value was read in
7442 the temporary obstack. MAXINDEX, rtl, etc. to be made below
7443 must go in the permanent obstack; but don't discard the
7444 temporary data yet. */
7445
a9aedbc2 7446 if (toplevel_bindings_p () && temporary)
8d08fdba
MS
7447 end_temporary_allocation ();
7448
7449 /* Deduce size of array from initialization, if not already known. */
7450
7451 if (TREE_CODE (type) == ARRAY_TYPE
7452 && TYPE_DOMAIN (type) == NULL_TREE
7453 && TREE_CODE (decl) != TYPE_DECL)
7454 {
7455 int do_default
7456 = (TREE_STATIC (decl)
7457 /* Even if pedantic, an external linkage array
7458 may have incomplete type at first. */
7459 ? pedantic && ! DECL_EXTERNAL (decl)
7460 : !DECL_EXTERNAL (decl));
7461 tree initializer = init ? init : DECL_INITIAL (decl);
7462 int failure = complete_array_type (type, initializer, do_default);
7463
7464 if (failure == 1)
8251199e 7465 cp_error ("initializer fails to determine size of `%D'", decl);
8d08fdba
MS
7466
7467 if (failure == 2)
7468 {
7469 if (do_default)
8251199e 7470 cp_error ("array size missing in `%D'", decl);
8d08fdba
MS
7471 /* If a `static' var's size isn't known, make it extern as
7472 well as static, so it does not get allocated. If it's not
7473 `static', then don't mark it extern; finish_incomplete_decl
7474 will give it a default size and it will get allocated. */
7475 else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
7476 DECL_EXTERNAL (decl) = 1;
7477 }
7478
7479 if (pedantic && TYPE_DOMAIN (type) != NULL_TREE
7480 && tree_int_cst_lt (TYPE_MAX_VALUE (TYPE_DOMAIN (type)),
7481 integer_zero_node))
8251199e 7482 cp_error ("zero-size array `%D'", decl);
8d08fdba
MS
7483
7484 layout_decl (decl, 0);
7485 }
7486
7487 if (TREE_CODE (decl) == VAR_DECL)
7488 {
7489 if (DECL_SIZE (decl) == NULL_TREE
ec255269 7490 && TYPE_SIZE (complete_type (TREE_TYPE (decl))) != NULL_TREE)
8d08fdba
MS
7491 layout_decl (decl, 0);
7492
7493 if (TREE_STATIC (decl) && DECL_SIZE (decl) == NULL_TREE)
7494 {
7495 /* A static variable with an incomplete type:
7496 that is an error if it is initialized.
7497 Otherwise, let it through, but if it is not `extern'
7498 then it may cause an error message later. */
7499 if (DECL_INITIAL (decl) != NULL_TREE)
8251199e 7500 cp_error ("storage size of `%D' isn't known", decl);
8d08fdba
MS
7501 init = NULL_TREE;
7502 }
7503 else if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
7504 {
7505 /* An automatic variable with an incomplete type: that is an error.
7506 Don't talk about array types here, since we took care of that
7507 message in grokdeclarator. */
8251199e 7508 cp_error ("storage size of `%D' isn't known", decl);
8d08fdba
MS
7509 TREE_TYPE (decl) = error_mark_node;
7510 }
7511 else if (!DECL_EXTERNAL (decl) && IS_AGGR_TYPE (ttype))
7512 /* Let debugger know it should output info for this type. */
7513 note_debug_info_needed (ttype);
7514
6eb3bb27 7515 if (TREE_STATIC (decl) && DECL_CLASS_SCOPE_P (decl))
d2e5ee5c
MS
7516 note_debug_info_needed (DECL_CONTEXT (decl));
7517
8d08fdba
MS
7518 if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
7519 && DECL_SIZE (decl) != NULL_TREE
7520 && ! TREE_CONSTANT (DECL_SIZE (decl)))
7521 {
7522 if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
7523 constant_expression_warning (DECL_SIZE (decl));
7524 else
8251199e 7525 cp_error ("storage size of `%D' isn't constant", decl);
8d08fdba
MS
7526 }
7527
c91a56d2
MS
7528 if (! DECL_EXTERNAL (decl) && TYPE_NEEDS_DESTRUCTOR (type)
7529 /* Cleanups for static variables are handled by `finish_file'. */
7530 && ! TREE_STATIC (decl))
8d08fdba
MS
7531 {
7532 int yes = suspend_momentary ();
2ee887f2 7533 cleanup = maybe_build_cleanup (decl);
8d08fdba
MS
7534 resume_momentary (yes);
7535 }
7536 }
7537 /* PARM_DECLs get cleanups, too. */
7538 else if (TREE_CODE (decl) == PARM_DECL && TYPE_NEEDS_DESTRUCTOR (type))
7539 {
7540 if (temporary)
7541 end_temporary_allocation ();
7542 cleanup = maybe_build_cleanup (decl);
7543 if (temporary)
7544 resume_temporary_allocation ();
7545 }
7546
7547 /* Output the assembler code and/or RTL code for variables and functions,
7548 unless the type is an undefined structure or union.
7549 If not, it will get done when the type is completed. */
7550
5566b478
MS
7551 was_incomplete = (DECL_SIZE (decl) == NULL_TREE);
7552
8d08fdba
MS
7553 if (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == FUNCTION_DECL
7554 || TREE_CODE (decl) == RESULT_DECL)
7555 {
7556 /* ??? FIXME: What about nested classes? */
e1467ff2 7557 int toplev = toplevel_bindings_p () || pseudo_global_level_p ();
8d08fdba 7558 int was_temp
d22c8596 7559 = (TREE_STATIC (decl) && TYPE_NEEDS_DESTRUCTOR (type)
8d08fdba
MS
7560 && allocation_temporary_p ());
7561
7562 if (was_temp)
7563 end_temporary_allocation ();
7564
5f2c99c4
JM
7565 /* Static data in a function with comdat linkage also has comdat
7566 linkage. */
42976354
BK
7567 if (TREE_CODE (decl) == VAR_DECL
7568 && TREE_STATIC (decl)
5f2c99c4 7569 /* Don't mess with __FUNCTION__. */
aeb302bb 7570 && ! TREE_ASM_WRITTEN (decl)
42976354
BK
7571 && current_function_decl
7572 && DECL_CONTEXT (decl) == current_function_decl
5f2c99c4
JM
7573 && (DECL_THIS_INLINE (current_function_decl)
7574 || DECL_TEMPLATE_INSTANTIATION (current_function_decl))
893de33c 7575 && TREE_PUBLIC (current_function_decl))
42976354 7576 {
5f2c99c4
JM
7577 /* Rather than try to get this right with inlining, we suppress
7578 inlining of such functions. */
aeb302bb
JM
7579 current_function_cannot_inline
7580 = "function with static variable cannot be inline";
5f2c99c4
JM
7581
7582 /* If flag_weak, we don't need to mess with this, as we can just
7583 make the function weak, and let it refer to its unique local
7584 copy. This works because we don't allow the function to be
7585 inlined. */
7586 if (! flag_weak)
7587 {
7588 if (DECL_INTERFACE_KNOWN (current_function_decl))
7589 {
7590 TREE_PUBLIC (decl) = 1;
7591 DECL_EXTERNAL (decl) = DECL_EXTERNAL (current_function_decl);
7592 }
7593 else if (DECL_INITIAL (decl) == NULL_TREE
7594 || DECL_INITIAL (decl) == error_mark_node)
7595 {
7596 TREE_PUBLIC (decl) = 1;
7597 DECL_COMMON (decl) = 1;
7598 }
7599 /* else we lose. We can only do this if we can use common,
7600 which we can't if it has been initialized. */
7601
7602 if (TREE_PUBLIC (decl))
7603 DECL_ASSEMBLER_NAME (decl)
7604 = build_static_name (current_function_decl, DECL_NAME (decl));
7605 else if (! DECL_ARTIFICIAL (decl))
7606 {
7607 cp_warning_at ("sorry: semantics of inline function static data `%#D' are wrong (you'll wind up with multiple copies)", decl);
7608 cp_warning_at (" you can work around this by removing the initializer"), decl;
7609 }
7610 }
42976354
BK
7611 }
7612
77be6f82
JM
7613 else if (TREE_CODE (decl) == VAR_DECL
7614 && DECL_LANG_SPECIFIC (decl)
7615 && DECL_COMDAT (decl))
7616 {
7617 /* Dynamically initialized vars go into common. */
7618 if (DECL_INITIAL (decl) == NULL_TREE
7619 || DECL_INITIAL (decl) == error_mark_node)
7620 DECL_COMMON (decl) = 1;
7621 else if (EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl)))
7622 {
7623 DECL_COMMON (decl) = 1;
7624 DECL_INITIAL (decl) = error_mark_node;
7625 }
7626 else
7627 {
7628 /* Statically initialized vars are weak or comdat, if
7629 supported. */
7630 if (flag_weak)
7631 make_decl_one_only (decl);
7632 else
be343556 7633 {
2c73f9f5 7634 /* We can't do anything useful; leave vars for explicit
be343556
JM
7635 instantiation. */
7636 DECL_EXTERNAL (decl) = 1;
7637 DECL_NOT_REALLY_EXTERN (decl) = 0;
7638 }
77be6f82
JM
7639 }
7640 }
7641
8d08fdba
MS
7642 if (TREE_CODE (decl) == VAR_DECL && DECL_VIRTUAL_P (decl))
7643 make_decl_rtl (decl, NULL_PTR, toplev);
7644 else if (TREE_CODE (decl) == VAR_DECL
7645 && TREE_READONLY (decl)
7646 && DECL_INITIAL (decl) != NULL_TREE
7647 && DECL_INITIAL (decl) != error_mark_node
a3203465 7648 && ! EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl)))
8d08fdba
MS
7649 {
7650 DECL_INITIAL (decl) = save_expr (DECL_INITIAL (decl));
7651
7652 if (asmspec)
7653 DECL_ASSEMBLER_NAME (decl) = get_identifier (asmspec);
7654
7655 if (! toplev
7656 && TREE_STATIC (decl)
7657 && ! TREE_SIDE_EFFECTS (decl)
7658 && ! TREE_PUBLIC (decl)
7659 && ! DECL_EXTERNAL (decl)
7660 && ! TYPE_NEEDS_DESTRUCTOR (type)
7661 && DECL_MODE (decl) != BLKmode)
7662 {
7663 /* If this variable is really a constant, then fill its DECL_RTL
7664 slot with something which won't take up storage.
7665 If something later should take its address, we can always give
7666 it legitimate RTL at that time. */
7667 DECL_RTL (decl) = gen_reg_rtx (DECL_MODE (decl));
7668 store_expr (DECL_INITIAL (decl), DECL_RTL (decl), 0);
7669 TREE_ASM_WRITTEN (decl) = 1;
7670 }
a0a33927 7671 else if (toplev && ! TREE_PUBLIC (decl))
8d08fdba 7672 {
8d08fdba 7673 /* If this is a static const, change its apparent linkage
db5ae43f 7674 if it belongs to a #pragma interface. */
a0a33927 7675 if (!interface_unknown)
8d08fdba
MS
7676 {
7677 TREE_PUBLIC (decl) = 1;
7678 DECL_EXTERNAL (decl) = interface_only;
7679 }
7680 make_decl_rtl (decl, asmspec, toplev);
7681 }
7682 else
5566b478 7683 rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
8d08fdba
MS
7684 }
7685 else if (TREE_CODE (decl) == VAR_DECL
7686 && DECL_LANG_SPECIFIC (decl)
7687 && DECL_IN_AGGR_P (decl))
7688 {
7689 if (TREE_STATIC (decl))
7690 {
7691 if (init == NULL_TREE
7692#ifdef DEFAULT_STATIC_DEFS
7693 /* If this code is dead, then users must
7694 explicitly declare static member variables
7695 outside the class def'n as well. */
7696 && TYPE_NEEDS_CONSTRUCTING (type)
7697#endif
7698 )
7699 {
7700 DECL_EXTERNAL (decl) = 1;
7701 make_decl_rtl (decl, asmspec, 1);
7702 }
7703 else
5566b478 7704 rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
8d08fdba
MS
7705 }
7706 else
7707 /* Just a constant field. Should not need any rtl. */
7708 goto finish_end0;
7709 }
7710 else
5566b478 7711 rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
8d08fdba
MS
7712
7713 if (was_temp)
7714 resume_temporary_allocation ();
7715
7716 if (type != error_mark_node
7717 && TYPE_LANG_SPECIFIC (type)
7718 && CLASSTYPE_ABSTRACT_VIRTUALS (type))
7719 abstract_virtuals_error (decl, type);
7720 else if ((TREE_CODE (type) == FUNCTION_TYPE
7721 || TREE_CODE (type) == METHOD_TYPE)
7722 && TYPE_LANG_SPECIFIC (TREE_TYPE (type))
7723 && CLASSTYPE_ABSTRACT_VIRTUALS (TREE_TYPE (type)))
7724 abstract_virtuals_error (decl, TREE_TYPE (type));
7725
7726 if (TYPE_LANG_SPECIFIC (type) && IS_SIGNATURE (type))
7727 signature_error (decl, type);
7728 else if ((TREE_CODE (type) == FUNCTION_TYPE
7729 || TREE_CODE (type) == METHOD_TYPE)
7730 && TYPE_LANG_SPECIFIC (TREE_TYPE (type))
7731 && IS_SIGNATURE (TREE_TYPE (type)))
7732 signature_error (decl, TREE_TYPE (type));
7733
7734 if (TREE_CODE (decl) == FUNCTION_DECL)
faae18ab 7735 ;
67d743fe
MS
7736 else if (DECL_EXTERNAL (decl)
7737 && ! (DECL_LANG_SPECIFIC (decl)
7738 && DECL_NOT_REALLY_EXTERN (decl)))
5566b478
MS
7739 {
7740 if (init)
7741 DECL_INITIAL (decl) = init;
7742 }
8d08fdba
MS
7743 else if (TREE_STATIC (decl) && type != error_mark_node)
7744 {
7745 /* Cleanups for static variables are handled by `finish_file'. */
f30432d7
MS
7746 if (TYPE_NEEDS_CONSTRUCTING (type) || init != NULL_TREE
7747 || TYPE_NEEDS_DESTRUCTOR (type))
8d08fdba 7748 expand_static_init (decl, init);
8d08fdba
MS
7749 }
7750 else if (! toplev)
7751 {
7752 /* This is a declared decl which must live until the
7753 end of the binding contour. It may need a cleanup. */
7754
7755 /* Recompute the RTL of a local array now
7756 if it used to be an incomplete type. */
7757 if (was_incomplete && ! TREE_STATIC (decl))
7758 {
7759 /* If we used it already as memory, it must stay in memory. */
7760 TREE_ADDRESSABLE (decl) = TREE_USED (decl);
7761 /* If it's still incomplete now, no init will save it. */
7762 if (DECL_SIZE (decl) == NULL_TREE)
7763 DECL_INITIAL (decl) = NULL_TREE;
7764 expand_decl (decl);
7765 }
7766 else if (! TREE_ASM_WRITTEN (decl)
7767 && (TYPE_SIZE (type) != NULL_TREE
7768 || TREE_CODE (type) == ARRAY_TYPE))
7769 {
7770 /* Do this here, because we did not expand this decl's
7771 rtl in start_decl. */
7772 if (DECL_RTL (decl) == NULL_RTX)
7773 expand_decl (decl);
7774 else if (cleanup)
7775 {
8d2733ca
MS
7776 /* XXX: Why don't we use decl here? */
7777 /* Ans: Because it was already expanded? */
e349ee73 7778 if (! expand_decl_cleanup (NULL_TREE, cleanup))
8251199e 7779 cp_error ("parser lost in parsing declaration of `%D'",
8d2733ca 7780 decl);
8d08fdba
MS
7781 /* Cleanup used up here. */
7782 cleanup = NULL_TREE;
7783 }
7784 }
7785
2ee887f2
MS
7786 if (current_binding_level->is_for_scope)
7787 {
f181d4ae
MM
7788 struct binding_level *outer
7789 = current_binding_level->level_chain;
2ee887f2
MS
7790
7791 /* Check to see if the same name is already bound at
7792 the outer level, either because it was directly declared,
7793 or because a dead for-decl got preserved. In either case,
d22c8596 7794 the code would not have been valid under the ARM
2ee887f2
MS
7795 scope rules, so clear is_for_scope for the
7796 current_binding_level.
7797
7798 Otherwise, we need to preserve the temp slot for decl
e92cc029 7799 to last into the outer binding level. */
2ee887f2 7800
f181d4ae
MM
7801 tree outer_binding
7802 = TREE_CHAIN (IDENTIFIER_BINDING (DECL_NAME (decl)));
7803
7804 if (outer_binding && BINDING_LEVEL (outer_binding) == outer
7805 && (TREE_CODE (BINDING_VALUE (outer_binding))
7806 == VAR_DECL)
7807 && DECL_DEAD_FOR_LOCAL (BINDING_VALUE (outer_binding)))
2ee887f2 7808 {
f181d4ae
MM
7809 BINDING_VALUE (outer_binding)
7810 = DECL_SHADOWED_FOR_VAR (BINDING_VALUE (outer_binding));
7811 current_binding_level->is_for_scope = 0;
2ee887f2 7812 }
f181d4ae
MM
7813 else if (DECL_IN_MEMORY_P (decl))
7814 preserve_temp_slots (DECL_RTL (decl));
2ee887f2
MS
7815 }
7816
eb66be0e 7817 expand_start_target_temps ();
72b7eeff 7818
8d08fdba
MS
7819 if (DECL_SIZE (decl) && type != error_mark_node)
7820 {
7821 /* Compute and store the initial value. */
7822 expand_decl_init (decl);
0c4b14c4 7823 already_used = TREE_USED (decl) || TREE_USED (type);
8d08fdba
MS
7824
7825 if (init || TYPE_NEEDS_CONSTRUCTING (type))
7826 {
a28e3c7f
MS
7827 emit_line_note (DECL_SOURCE_FILE (decl),
7828 DECL_SOURCE_LINE (decl));
b370501f 7829 expand_aggr_init (decl, init, flags);
8d08fdba
MS
7830 }
7831
00595019
MS
7832 /* Set this to 0 so we can tell whether an aggregate which
7833 was initialized was ever used. Don't do this if it has a
7834 destructor, so we don't complain about the 'resource
7835 allocation is initialization' idiom. */
249555b0 7836 /* Now set attribute((unused)) on types so decls of
38e01259 7837 that type will be marked used. (see TREE_USED, above.)
249555b0
BK
7838 This avoids the warning problems this particular code
7839 tried to work around. */
0c4b14c4 7840
be99da77 7841 if (TYPE_NEEDS_CONSTRUCTING (type)
0c4b14c4 7842 && ! already_used
be99da77
MS
7843 && cleanup == NULL_TREE
7844 && DECL_NAME (decl))
8d08fdba 7845 TREE_USED (decl) = 0;
0c4b14c4
JM
7846
7847 if (already_used)
7848 TREE_USED (decl) = 1;
934c6b13 7849 }
eb66be0e 7850
934c6b13 7851 /* Cleanup any temporaries needed for the initial value. */
eb66be0e 7852 expand_end_target_temps ();
8d08fdba 7853
934c6b13
MS
7854 if (DECL_SIZE (decl) && type != error_mark_node)
7855 {
8d08fdba
MS
7856 /* Store the cleanup, if there was one. */
7857 if (cleanup)
7858 {
e349ee73 7859 if (! expand_decl_cleanup (decl, cleanup))
8251199e 7860 cp_error ("parser lost in parsing declaration of `%D'",
a28e3c7f 7861 decl);
8d08fdba
MS
7862 }
7863 }
7864 }
7865 finish_end0:
7866
7867 /* Undo call to `pushclass' that was done in `start_decl'
7868 due to initialization of qualified member variable.
7869 I.e., Foo::x = 10; */
7870 {
f30432d7 7871 tree context = DECL_REAL_CONTEXT (decl);
8d08fdba
MS
7872 if (context
7873 && TREE_CODE_CLASS (TREE_CODE (context)) == 't'
7874 && (TREE_CODE (decl) == VAR_DECL
7875 /* We also have a pushclass done that we need to undo here
7876 if we're at top level and declare a method. */
5566b478
MS
7877 || TREE_CODE (decl) == FUNCTION_DECL)
7878 /* If size hasn't been set, we're still defining it,
7879 and therefore inside the class body; don't pop
7880 the binding level.. */
7881 && TYPE_SIZE (context) != NULL_TREE
7882 && context == current_class_type)
8d08fdba
MS
7883 popclass (1);
7884 }
7885 }
7886
7887 finish_end:
7888
39211cd5
MS
7889 /* If requested, warn about definitions of large data objects. */
7890
7891 if (warn_larger_than
5156628f 7892 && ! processing_template_decl
39211cd5
MS
7893 && (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == PARM_DECL)
7894 && !DECL_EXTERNAL (decl))
7895 {
7896 register tree decl_size = DECL_SIZE (decl);
7897
7898 if (decl_size && TREE_CODE (decl_size) == INTEGER_CST)
7899 {
7900 unsigned units = TREE_INT_CST_LOW (decl_size) / BITS_PER_UNIT;
7901
7902 if (units > larger_than_size)
7903 warning_with_decl (decl, "size of `%s' is %u bytes", units);
7904 }
7905 }
7906
8d08fdba
MS
7907 if (need_pop)
7908 {
7909 /* Resume permanent allocation, if not within a function. */
7910 /* The corresponding push_obstacks_nochange is in start_decl,
7911 start_method, groktypename, and in grokfield. */
7912 pop_obstacks ();
7913 }
7914
7915 if (was_readonly)
7916 TREE_READONLY (decl) = 1;
8d08fdba
MS
7917}
7918
82580166 7919/* This is here for a midend callback from c-common.c */
e92cc029 7920
82580166
MS
7921void
7922finish_decl (decl, init, asmspec_tree)
7923 tree decl, init;
7924 tree asmspec_tree;
7925{
7926 cp_finish_decl (decl, init, asmspec_tree, 1, 0);
7927}
7928
8d08fdba
MS
7929void
7930expand_static_init (decl, init)
7931 tree decl;
7932 tree init;
7933{
7934 tree oldstatic = value_member (decl, static_aggregates);
a4443a08 7935
8d08fdba
MS
7936 if (oldstatic)
7937 {
7938 if (TREE_PURPOSE (oldstatic) && init != NULL_TREE)
8251199e 7939 cp_error ("multiple initializations given for `%D'", decl);
8d08fdba 7940 }
a9aedbc2 7941 else if (! toplevel_bindings_p () && ! pseudo_global_level_p ())
8d08fdba
MS
7942 {
7943 /* Emit code to perform this initialization but once. */
7944 tree temp;
7945
e92cc029 7946 /* Remember this information until end of file. */
8d08fdba
MS
7947 push_obstacks (&permanent_obstack, &permanent_obstack);
7948
2036a15c
MM
7949 /* Emit code to perform this initialization but once. This code
7950 looks like:
7951
7952 static int temp = 0;
7953 if (!temp) {
7954 // Do initialization.
7955 temp = 1;
7956 // Register variable for destruction at end of program.
7957 }
7958
7959 Note that the `temp' variable is only set to 1 *after* the
7960 initialization is complete. This ensures that an exception,
7961 thrown during the construction, will cause the variable to
7962 reinitialized when we pass through this code again, as per:
7963
7964 [stmt.dcl]
7965
7966 If the initialization exits by throwing an exception, the
7967 initialization is not complete, so it will be tried again
7968 the next time control enters the declaration.
7969
7970 In theory, this process should be thread-safe, too; multiple
7971 threads should not be able to initialize the variable more
7972 than once. We don't yet attempt to ensure thread-safety. */
8d08fdba
MS
7973 temp = get_temp_name (integer_type_node, 1);
7974 rest_of_decl_compilation (temp, NULL_PTR, 0, 0);
2036a15c
MM
7975
7976 /* Begin the conditional initialization. */
8d08fdba
MS
7977 expand_start_cond (build_binary_op (EQ_EXPR, temp,
7978 integer_zero_node, 1), 0);
eb66be0e 7979 expand_start_target_temps ();
72b7eeff 7980
2036a15c 7981 /* Do the initialization itself. */
28cbf42c 7982 if (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))
f30432d7 7983 || (init && TREE_CODE (init) == TREE_LIST))
8d08fdba 7984 {
b370501f 7985 expand_aggr_init (decl, init, 0);
8d08fdba
MS
7986 do_pending_stack_adjust ();
7987 }
f30432d7 7988 else if (init)
8d08fdba 7989 expand_assignment (decl, init, 0, 0);
f30432d7 7990
2036a15c
MM
7991 /* Set TEMP to 1. */
7992 expand_assignment (temp, integer_one_node, 0, 0);
7993
7994 /* Cleanup any temporaries needed for the initial value. If
7995 destroying one of the temporaries causes an exception to be
7996 thrown, then the object itself has still been fully
7997 constructed. */
eb66be0e 7998 expand_end_target_temps ();
72b7eeff 7999
2036a15c
MM
8000 /* Use atexit to register a function for destroying this static
8001 variable. */
72b7eeff
MS
8002 if (TYPE_NEEDS_DESTRUCTOR (TREE_TYPE (decl)))
8003 {
8004 tree cleanup, fcall;
8005 static tree Atexit = 0;
8006 if (Atexit == 0)
8007 {
8008 tree atexit_fndecl, PFV, pfvlist;
e92cc029 8009 /* Remember this information until end of file. */
72b7eeff
MS
8010 push_obstacks (&permanent_obstack, &permanent_obstack);
8011 PFV = build_pointer_type (build_function_type
8012 (void_type_node, void_list_node));
8013
8014 pfvlist = tree_cons (NULL_TREE, PFV, void_list_node);
8015
8016 push_lang_context (lang_name_c);
beb53fb8
JM
8017 atexit_fndecl
8018 = builtin_function ("atexit",
8019 build_function_type (void_type_node,
8020 pfvlist),
8021 NOT_BUILT_IN, NULL_PTR);
be99da77 8022 assemble_external (atexit_fndecl);
72b7eeff
MS
8023 Atexit = default_conversion (atexit_fndecl);
8024 pop_lang_context ();
8025 pop_obstacks ();
8026 }
8027
7cfac595
MM
8028 /* Call build_cleanup before we enter the anonymous function
8029 so that any access checks will be done relative to the
8030 current scope, rather than the scope of the anonymous
8031 function. */
8032 fcall = build_cleanup (decl);
72b7eeff 8033 cleanup = start_anon_func ();
7cfac595 8034 expand_expr_stmt (fcall);
72b7eeff
MS
8035 end_anon_func ();
8036 mark_addressable (cleanup);
8037 cleanup = build_unary_op (ADDR_EXPR, cleanup, 0);
e66d884e 8038 fcall = build_function_call (Atexit, expr_tree_cons (NULL_TREE, cleanup, NULL_TREE));
72b7eeff
MS
8039 expand_expr_stmt (fcall);
8040 }
8041
8d08fdba
MS
8042 expand_end_cond ();
8043 if (TYPE_NEEDS_DESTRUCTOR (TREE_TYPE (decl)))
8044 {
8045 static_aggregates = perm_tree_cons (temp, decl, static_aggregates);
8046 TREE_STATIC (static_aggregates) = 1;
8047 }
8048
e92cc029 8049 /* Resume old (possibly temporary) allocation. */
8d08fdba
MS
8050 pop_obstacks ();
8051 }
8052 else
8053 {
8054 /* This code takes into account memory allocation
8055 policy of `start_decl'. Namely, if TYPE_NEEDS_CONSTRUCTING
8056 does not hold for this object, then we must make permanent
8057 the storage currently in the temporary obstack. */
8058 if (! TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl)))
8059 preserve_initializer ();
8060 static_aggregates = perm_tree_cons (init, decl, static_aggregates);
8061 }
8062}
8063\f
8064/* Make TYPE a complete type based on INITIAL_VALUE.
8065 Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
8066 2 if there was no information (in which case assume 1 if DO_DEFAULT). */
8067
8068int
8069complete_array_type (type, initial_value, do_default)
8070 tree type, initial_value;
8071 int do_default;
8072{
8073 register tree maxindex = NULL_TREE;
8074 int value = 0;
8075
8076 if (initial_value)
8077 {
8078 /* Note MAXINDEX is really the maximum index,
8079 one less than the size. */
8080 if (TREE_CODE (initial_value) == STRING_CST)
e1cd6e56
MS
8081 {
8082 int eltsize
8083 = int_size_in_bytes (TREE_TYPE (TREE_TYPE (initial_value)));
8084 maxindex = build_int_2 ((TREE_STRING_LENGTH (initial_value)
8085 / eltsize) - 1, 0);
8086 }
8d08fdba
MS
8087 else if (TREE_CODE (initial_value) == CONSTRUCTOR)
8088 {
e1cd6e56
MS
8089 tree elts = CONSTRUCTOR_ELTS (initial_value);
8090 maxindex = size_binop (MINUS_EXPR, integer_zero_node, size_one_node);
8091 for (; elts; elts = TREE_CHAIN (elts))
8092 {
8093 if (TREE_PURPOSE (elts))
8094 maxindex = TREE_PURPOSE (elts);
8095 else
8096 maxindex = size_binop (PLUS_EXPR, maxindex, size_one_node);
8097 }
8098 maxindex = copy_node (maxindex);
8d08fdba
MS
8099 }
8100 else
8101 {
8102 /* Make an error message unless that happened already. */
8103 if (initial_value != error_mark_node)
8104 value = 1;
8105
8106 /* Prevent further error messages. */
8107 maxindex = build_int_2 (0, 0);
8108 }
8109 }
8110
8111 if (!maxindex)
8112 {
8113 if (do_default)
8114 maxindex = build_int_2 (0, 0);
8115 value = 2;
8116 }
8117
8118 if (maxindex)
8119 {
51c184be
MS
8120 tree itype;
8121
8d08fdba 8122 TYPE_DOMAIN (type) = build_index_type (maxindex);
dff6b454 8123 if (! TREE_TYPE (maxindex))
8d08fdba 8124 TREE_TYPE (maxindex) = TYPE_DOMAIN (type);
51c184be
MS
8125 if (initial_value)
8126 itype = TREE_TYPE (initial_value);
8127 else
8128 itype = NULL;
8129 if (itype && !TYPE_DOMAIN (itype))
8130 TYPE_DOMAIN (itype) = TYPE_DOMAIN (type);
dff6b454
RK
8131 /* The type of the main variant should never be used for arrays
8132 of different sizes. It should only ever be completed with the
8133 size of the array. */
8134 if (! TYPE_DOMAIN (TYPE_MAIN_VARIANT (type)))
8135 TYPE_DOMAIN (TYPE_MAIN_VARIANT (type)) = TYPE_DOMAIN (type);
8d08fdba
MS
8136 }
8137
8138 /* Lay out the type now that we can get the real answer. */
8139
8140 layout_type (type);
8141
8142 return value;
8143}
8144\f
8145/* Return zero if something is declared to be a member of type
8146 CTYPE when in the context of CUR_TYPE. STRING is the error
8147 message to print in that case. Otherwise, quietly return 1. */
e92cc029 8148
8d08fdba
MS
8149static int
8150member_function_or_else (ctype, cur_type, string)
8151 tree ctype, cur_type;
8152 char *string;
8153{
8154 if (ctype && ctype != cur_type)
8155 {
8156 error (string, TYPE_NAME_STRING (ctype));
8157 return 0;
8158 }
8159 return 1;
8160}
8161\f
8162/* Subroutine of `grokdeclarator'. */
8163
8164/* Generate errors possibly applicable for a given set of specifiers.
8165 This is for ARM $7.1.2. */
e92cc029 8166
8d08fdba
MS
8167static void
8168bad_specifiers (object, type, virtualp, quals, inlinep, friendp, raises)
8169 tree object;
8170 char *type;
8171 int virtualp, quals, friendp, raises, inlinep;
8172{
8173 if (virtualp)
8251199e 8174 cp_error ("`%D' declared as a `virtual' %s", object, type);
8d08fdba 8175 if (inlinep)
8251199e 8176 cp_error ("`%D' declared as an `inline' %s", object, type);
8d08fdba 8177 if (quals)
8251199e 8178 cp_error ("`const' and `volatile' function specifiers on `%D' invalid in %s declaration",
a28e3c7f 8179 object, type);
8d08fdba 8180 if (friendp)
8251199e 8181 cp_error_at ("invalid friend declaration", object);
8d08fdba 8182 if (raises)
8251199e 8183 cp_error_at ("invalid exception specifications", object);
8d08fdba
MS
8184}
8185
8186/* CTYPE is class type, or null if non-class.
8187 TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
8188 or METHOD_TYPE.
8189 DECLARATOR is the function's name.
8190 VIRTUALP is truthvalue of whether the function is virtual or not.
8191 FLAGS are to be passed through to `grokclassfn'.
8192 QUALS are qualifiers indicating whether the function is `const'
8193 or `volatile'.
8194 RAISES is a list of exceptions that this function can raise.
8195 CHECK is 1 if we must find this method in CTYPE, 0 if we should
3ddfb0e6
MM
8196 not look, and -1 if we should not call `grokclassfn' at all.
8197
8198 Returns `error_mark_node' if something goes wrong, after issuing
8199 applicable error messages. */
e92cc029 8200
8d08fdba 8201static tree
386b8a85
JM
8202grokfndecl (ctype, type, declarator, orig_declarator, virtualp, flags, quals,
8203 raises, attrlist, check, friendp, publicp, inlinep, funcdef_flag,
2c73f9f5 8204 template_count, in_namespace)
8d08fdba
MS
8205 tree ctype, type;
8206 tree declarator;
386b8a85 8207 tree orig_declarator;
8d08fdba
MS
8208 int virtualp;
8209 enum overload_flags flags;
f30432d7 8210 tree quals, raises, attrlist;
386b8a85 8211 int check, friendp, publicp, inlinep, funcdef_flag, template_count;
2c73f9f5 8212 tree in_namespace;
8d08fdba
MS
8213{
8214 tree cname, decl;
8215 int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
42976354 8216 tree t;
8d08fdba
MS
8217
8218 if (ctype)
8219 cname = TREE_CODE (TYPE_NAME (ctype)) == TYPE_DECL
8220 ? TYPE_IDENTIFIER (ctype) : TYPE_NAME (ctype);
8221 else
8222 cname = NULL_TREE;
8223
8224 if (raises)
8225 {
f30432d7 8226 type = build_exception_variant (type, raises);
8d08fdba 8227 }
c11b6f21 8228
8d08fdba 8229 decl = build_lang_decl (FUNCTION_DECL, declarator, type);
2c73f9f5 8230 /* Propagate volatile out from type to decl. */
8d08fdba 8231 if (TYPE_VOLATILE (type))
893de33c 8232 TREE_THIS_VOLATILE (decl) = 1;
8d08fdba 8233
79c4d4b7 8234 /* If this decl has namespace scope, set that up. */
2c73f9f5
ML
8235 if (in_namespace)
8236 set_decl_namespace (decl, in_namespace);
79c4d4b7
JM
8237 else if (publicp && ! ctype)
8238 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
2c73f9f5 8239
0f8766b8
JM
8240 /* `main' and builtins have implicit 'C' linkage. */
8241 if ((MAIN_NAME_P (declarator)
8242 || (IDENTIFIER_LENGTH (declarator) > 10
8243 && IDENTIFIER_POINTER (declarator)[0] == '_'
8244 && IDENTIFIER_POINTER (declarator)[1] == '_'
8245 && strncmp (IDENTIFIER_POINTER (declarator)+2, "builtin_", 8) == 0))
8246 && current_lang_name == lang_name_cplusplus
94706a5c 8247 && ctype == NULL_TREE
79c4d4b7
JM
8248 /* NULL_TREE means global namespace. */
8249 && DECL_CONTEXT (decl) == NULL_TREE)
0f8766b8
JM
8250 DECL_LANGUAGE (decl) = lang_c;
8251
8d08fdba
MS
8252 /* Should probably propagate const out from type to decl I bet (mrs). */
8253 if (staticp)
8254 {
8255 DECL_STATIC_FUNCTION_P (decl) = 1;
8256 DECL_CONTEXT (decl) = ctype;
8d08fdba
MS
8257 }
8258
e76a2646
MS
8259 if (ctype)
8260 DECL_CLASS_CONTEXT (decl) = ctype;
8261
0f8766b8 8262 if (ctype == NULL_TREE && DECL_MAIN_P (decl))
faae18ab 8263 {
848b92e1
JM
8264 if (processing_template_decl)
8265 error ("cannot declare `main' to be a template");
faae18ab 8266 if (inlinep)
8251199e 8267 error ("cannot declare `main' to be inline");
faae18ab 8268 else if (! publicp)
8251199e 8269 error ("cannot declare `main' to be static");
faae18ab
MS
8270 inlinep = 0;
8271 publicp = 1;
8272 }
50a6dbd7 8273
59e76fc6
JM
8274 /* Members of anonymous types and local classes have no linkage; make
8275 them internal. */
8276 if (ctype && (ANON_AGGRNAME_P (TYPE_IDENTIFIER (ctype))
8277 || hack_decl_function_context (TYPE_MAIN_DECL (ctype))))
50a6dbd7
JM
8278 publicp = 0;
8279
8280 if (publicp)
8281 {
8282 /* [basic.link]: A name with no linkage (notably, the name of a class
8283 or enumeration declared in a local scope) shall not be used to
8284 declare an entity with linkage.
8285
8286 Only check this for public decls for now. */
8287 t = no_linkage_check (TREE_TYPE (decl));
8288 if (t)
8289 {
7f7c930e
JM
8290 if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
8291 {
8292 if (DECL_LANGUAGE (decl) == lang_c)
8293 /* Allow this; it's pretty common in C. */;
8294 else
8295 cp_pedwarn ("non-local function `%#D' uses anonymous type",
8296 decl);
8297 }
50a6dbd7 8298 else
8251199e 8299 cp_pedwarn ("non-local function `%#D' uses local type `%T'",
cce2be43 8300 decl, t);
50a6dbd7
JM
8301 }
8302 }
8303
893de33c 8304 TREE_PUBLIC (decl) = publicp;
faae18ab 8305 if (! publicp)
893de33c
JM
8306 {
8307 DECL_INTERFACE_KNOWN (decl) = 1;
8308 DECL_NOT_REALLY_EXTERN (decl) = 1;
8309 }
faae18ab
MS
8310
8311 if (inlinep)
8312 DECL_THIS_INLINE (decl) = DECL_INLINE (decl) = 1;
8d08fdba
MS
8313
8314 DECL_EXTERNAL (decl) = 1;
8315 if (quals != NULL_TREE && TREE_CODE (type) == FUNCTION_TYPE)
8316 {
8251199e 8317 cp_error ("%smember function `%D' cannot have `%T' method qualifier",
8d08fdba
MS
8318 (ctype ? "static " : "non-"), decl, TREE_VALUE (quals));
8319 quals = NULL_TREE;
8320 }
8321
8322 if (IDENTIFIER_OPNAME_P (DECL_NAME (decl)))
8323 grok_op_properties (decl, virtualp, check < 0);
8324
e76a2646 8325 if (ctype && hack_decl_function_context (decl))
893de33c 8326 DECL_NO_STATIC_CHAIN (decl) = 1;
e76a2646 8327
42976354
BK
8328 for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
8329 if (TREE_PURPOSE (t)
8330 && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
8331 {
8332 add_defarg_fn (decl);
8333 break;
8334 }
8335
f9d94ea4
JM
8336 if (friendp
8337 && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
8338 {
8339 if (funcdef_flag)
8251199e
JM
8340 cp_error
8341 ("defining explicit specialization `%D' in friend declaration",
f9d94ea4
JM
8342 orig_declarator);
8343 else
8344 {
7e2421f7
MM
8345 if (PROCESSING_REAL_TEMPLATE_DECL_P ())
8346 {
8347 /* Something like `template <class T> friend void f<T>()'. */
8251199e 8348 cp_error ("template-id `%D' in declaration of primary template",
7e2421f7
MM
8349 orig_declarator);
8350 return error_mark_node;
8351 }
8352
f9d94ea4
JM
8353 /* A friend declaration of the form friend void f<>(). Record
8354 the information in the TEMPLATE_ID_EXPR. */
8355 SET_DECL_IMPLICIT_INSTANTIATION (decl);
8356 DECL_TEMPLATE_INFO (decl)
8357 = perm_tree_cons (TREE_OPERAND (orig_declarator, 0),
8358 TREE_OPERAND (orig_declarator, 1),
8359 NULL_TREE);
8360 }
f84b4be9 8361 }
386b8a85 8362
0f8766b8
JM
8363 /* Plain overloading: will not be grok'd by grokclassfn. */
8364 if (! ctype && ! processing_template_decl
8365 && DECL_LANGUAGE (decl) != lang_c
8366 && (! DECL_USE_TEMPLATE (decl) || name_mangling_version < 1))
8367 set_mangled_name_for_decl (decl);
8368
1eb0072d
JM
8369 if (funcdef_flag)
8370 /* Make the init_value nonzero so pushdecl knows this is not
8371 tentative. error_mark_node is replaced later with the BLOCK. */
8372 DECL_INITIAL (decl) = error_mark_node;
8373
75650646 8374 /* Caller will do the rest of this. */
8d08fdba
MS
8375 if (check < 0)
8376 return decl;
8377
5566b478 8378 if (check && funcdef_flag)
d2e5ee5c 8379 DECL_INITIAL (decl) = error_mark_node;
5566b478 8380
8d08fdba
MS
8381 if (flags == NO_SPECIAL && ctype && constructor_name (cname) == declarator)
8382 {
8383 tree tmp;
8384 /* Just handle constructors here. We could do this
8385 inside the following if stmt, but I think
8386 that the code is more legible by breaking this
8387 case out. See comments below for what each of
8388 the following calls is supposed to do. */
8389 DECL_CONSTRUCTOR_P (decl) = 1;
8390
b370501f 8391 grokclassfn (ctype, decl, flags, quals);
386b8a85 8392
e1467ff2
MM
8393 decl = check_explicit_specialization (orig_declarator, decl,
8394 template_count,
f84b4be9
JM
8395 2 * (funcdef_flag != 0) +
8396 4 * (friendp != 0));
6c30752f
MM
8397 if (decl == error_mark_node)
8398 return error_mark_node;
75650646 8399
b370501f 8400 if ((! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
eff71ab0 8401 && check)
5566b478
MS
8402 {
8403 tmp = check_classfn (ctype, decl);
98c1c668
JM
8404
8405 if (tmp && TREE_CODE (tmp) == TEMPLATE_DECL)
8406 tmp = DECL_TEMPLATE_RESULT(tmp);
8407
e349ee73 8408 if (tmp && DECL_ARTIFICIAL (tmp))
8251199e 8409 cp_error ("definition of implicitly-declared `%D'", tmp);
5566b478
MS
8410 if (tmp && duplicate_decls (decl, tmp))
8411 return tmp;
8412 }
a0a33927 8413 if (! grok_ctor_properties (ctype, decl))
3ddfb0e6 8414 return error_mark_node;
8d08fdba
MS
8415 }
8416 else
8417 {
8418 tree tmp;
8419
8420 /* Function gets the ugly name, field gets the nice one.
8421 This call may change the type of the function (because
8422 of default parameters)! */
8423 if (ctype != NULL_TREE)
b370501f 8424 grokclassfn (ctype, decl, flags, quals);
8d08fdba 8425
e1467ff2
MM
8426 decl = check_explicit_specialization (orig_declarator, decl,
8427 template_count,
f84b4be9
JM
8428 2 * (funcdef_flag != 0) +
8429 4 * (friendp != 0));
6c30752f
MM
8430 if (decl == error_mark_node)
8431 return error_mark_node;
8432
eff71ab0 8433 if (ctype != NULL_TREE
b370501f 8434 && (! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
eff71ab0 8435 && check)
5566b478
MS
8436 {
8437 tmp = check_classfn (ctype, decl);
98c1c668
JM
8438
8439 if (tmp && TREE_CODE (tmp) == TEMPLATE_DECL)
75650646 8440 tmp = DECL_TEMPLATE_RESULT (tmp);
98c1c668 8441
5566b478
MS
8442 if (tmp && DECL_STATIC_FUNCTION_P (tmp)
8443 && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
8444 {
8445 /* Remove the `this' parm added by grokclassfn.
8446 XXX Isn't this done in start_function, too? */
8447 revert_static_member_fn (&decl, NULL, NULL);
8448 last_function_parms = TREE_CHAIN (last_function_parms);
8449 }
e349ee73 8450 if (tmp && DECL_ARTIFICIAL (tmp))
8251199e 8451 cp_error ("definition of implicitly-declared `%D'", tmp);
7834ab39
MS
8452 if (tmp)
8453 {
8454 if (!duplicate_decls (decl, tmp))
8455 my_friendly_abort (892);
8456 return tmp;
8457 }
5566b478 8458 }
8d08fdba
MS
8459
8460 if (ctype == NULL_TREE || check)
8461 return decl;
8462
7cfac595
MM
8463 if (attrlist)
8464 cplus_decl_attributes (decl, TREE_PURPOSE (attrlist),
8465 TREE_VALUE (attrlist));
8466 make_decl_rtl (decl, NULL_PTR, 1);
8467
8d08fdba
MS
8468 if (virtualp)
8469 {
2ee887f2 8470 DECL_VIRTUAL_P (decl) = 1;
8d08fdba
MS
8471 if (DECL_VINDEX (decl) == NULL_TREE)
8472 DECL_VINDEX (decl) = error_mark_node;
8473 IDENTIFIER_VIRTUAL_P (DECL_NAME (decl)) = 1;
8d08fdba
MS
8474 }
8475 }
8476 return decl;
8477}
8478
8479static tree
2c73f9f5 8480grokvardecl (type, declarator, specbits_in, initialized, constp, in_namespace)
8d08fdba
MS
8481 tree type;
8482 tree declarator;
d2e5ee5c 8483 RID_BIT_TYPE *specbits_in;
8d08fdba 8484 int initialized;
a9aedbc2 8485 int constp;
2c73f9f5 8486 tree in_namespace;
8d08fdba
MS
8487{
8488 tree decl;
f7da6097
MS
8489 RID_BIT_TYPE specbits;
8490
8491 specbits = *specbits_in;
8d08fdba
MS
8492
8493 if (TREE_CODE (type) == OFFSET_TYPE)
8494 {
8495 /* If you declare a static member so that it
8496 can be initialized, the code will reach here. */
5b605f68
MS
8497 tree basetype = TYPE_OFFSET_BASETYPE (type);
8498 type = TREE_TYPE (type);
8499 decl = build_lang_field_decl (VAR_DECL, declarator, type);
8500 DECL_CONTEXT (decl) = basetype;
8501 DECL_CLASS_CONTEXT (decl) = basetype;
f376e137 8502 DECL_ASSEMBLER_NAME (decl) = build_static_name (basetype, declarator);
8d08fdba
MS
8503 }
8504 else
30394414 8505 {
79c4d4b7
JM
8506 tree context;
8507
8508 if (in_namespace)
8509 context = in_namespace;
8510 else if (namespace_bindings_p () || RIDBIT_SETP (RID_EXTERN, specbits))
8511 context = current_namespace;
820fcad8
JM
8512 else
8513 context = NULL_TREE;
79c4d4b7 8514
30394414 8515 decl = build_decl (VAR_DECL, declarator, complete_type (type));
79c4d4b7
JM
8516
8517 if (context)
8518 set_decl_namespace (decl, context);
8519
8520 context = DECL_CONTEXT (decl);
8521 if (declarator && context && current_lang_name != lang_name_c)
8522 DECL_ASSEMBLER_NAME (decl) = build_static_name (context, declarator);
30394414 8523 }
6060a796 8524
2c73f9f5
ML
8525 if (in_namespace)
8526 set_decl_namespace (decl, in_namespace);
8527
8d08fdba
MS
8528 if (RIDBIT_SETP (RID_EXTERN, specbits))
8529 {
8530 DECL_THIS_EXTERN (decl) = 1;
8531 DECL_EXTERNAL (decl) = !initialized;
8532 }
8533
8534 /* In class context, static means one per class,
8535 public access, and static storage. */
2b9dc906 8536 if (DECL_CLASS_SCOPE_P (decl))
8d08fdba
MS
8537 {
8538 TREE_PUBLIC (decl) = 1;
8539 TREE_STATIC (decl) = 1;
5b605f68 8540 DECL_EXTERNAL (decl) = 0;
8d08fdba
MS
8541 }
8542 /* At top level, either `static' or no s.c. makes a definition
8543 (perhaps tentative), and absence of `static' makes it public. */
a9aedbc2 8544 else if (toplevel_bindings_p ())
8d08fdba 8545 {
a9aedbc2 8546 TREE_PUBLIC (decl) = (RIDBIT_NOTSETP (RID_STATIC, specbits)
9fffd093 8547 && (DECL_THIS_EXTERN (decl) || ! constp));
8d08fdba
MS
8548 TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
8549 }
8550 /* Not at top level, only `static' makes a static definition. */
8551 else
8552 {
8553 TREE_STATIC (decl) = !! RIDBIT_SETP (RID_STATIC, specbits);
8554 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
8555 }
50a6dbd7
JM
8556
8557 if (TREE_PUBLIC (decl))
8558 {
8559 /* [basic.link]: A name with no linkage (notably, the name of a class
8560 or enumeration declared in a local scope) shall not be used to
8561 declare an entity with linkage.
8562
8563 Only check this for public decls for now. */
8564 tree t = no_linkage_check (TREE_TYPE (decl));
8565 if (t)
8566 {
8567 if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
8568 /* Ignore for now; `enum { foo } e' is pretty common. */;
8569 else
8251199e 8570 cp_pedwarn ("non-local variable `%#D' uses local type `%T'",
50a6dbd7
JM
8571 decl, t);
8572 }
8573 }
8574
8d08fdba
MS
8575 return decl;
8576}
8577
e92cc029 8578/* Create a canonical pointer to member function type. */
8d08fdba
MS
8579
8580tree
8581build_ptrmemfunc_type (type)
8582 tree type;
8583{
8584 tree fields[4];
8585 tree t;
8586 tree u;
8587
8588 /* If a canonical type already exists for this type, use it. We use
8589 this method instead of type_hash_canon, because it only does a
8590 simple equality check on the list of field members. */
8591
8592 if ((t = TYPE_GET_PTRMEMFUNC_TYPE (type)))
8593 return t;
8594
8595 push_obstacks (TYPE_OBSTACK (type), TYPE_OBSTACK (type));
8596
8597 u = make_lang_type (UNION_TYPE);
7ddedda4 8598 SET_IS_AGGR_TYPE (u, 0);
8d08fdba 8599 fields[0] = build_lang_field_decl (FIELD_DECL, pfn_identifier, type);
a28e3c7f
MS
8600 fields[1] = build_lang_field_decl (FIELD_DECL, delta2_identifier,
8601 delta_type_node);
8d08fdba
MS
8602 finish_builtin_type (u, "__ptrmemfunc_type", fields, 1, ptr_type_node);
8603 TYPE_NAME (u) = NULL_TREE;
8604
8605 t = make_lang_type (RECORD_TYPE);
8606
2c73f9f5 8607 /* Let the front-end know this is a pointer to member function... */
db5ae43f 8608 TYPE_PTRMEMFUNC_FLAG (t) = 1;
2c73f9f5 8609 /* ... and not really an aggregate. */
7ddedda4 8610 SET_IS_AGGR_TYPE (t, 0);
8d08fdba 8611
a28e3c7f
MS
8612 fields[0] = build_lang_field_decl (FIELD_DECL, delta_identifier,
8613 delta_type_node);
8614 fields[1] = build_lang_field_decl (FIELD_DECL, index_identifier,
8615 delta_type_node);
8d08fdba
MS
8616 fields[2] = build_lang_field_decl (FIELD_DECL, pfn_or_delta2_identifier, u);
8617 finish_builtin_type (t, "__ptrmemfunc_type", fields, 2, ptr_type_node);
8618
8619 pop_obstacks ();
8620
8621 /* Zap out the name so that the back-end will give us the debugging
8622 information for this anonymous RECORD_TYPE. */
8623 TYPE_NAME (t) = NULL_TREE;
8624
8625 TYPE_SET_PTRMEMFUNC_TYPE (type, t);
8626
e92cc029 8627 /* Seems to be wanted. */
8d08fdba
MS
8628 CLASSTYPE_GOT_SEMICOLON (t) = 1;
8629 return t;
8630}
8631
8632/* Given declspecs and a declarator,
8633 determine the name and type of the object declared
8634 and construct a ..._DECL node for it.
8635 (In one case we can return a ..._TYPE node instead.
8636 For invalid input we sometimes return 0.)
8637
8638 DECLSPECS is a chain of tree_list nodes whose value fields
8639 are the storage classes and type specifiers.
8640
8641 DECL_CONTEXT says which syntactic context this declaration is in:
8642 NORMAL for most contexts. Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
8643 FUNCDEF for a function definition. Like NORMAL but a few different
8644 error messages in each case. Return value may be zero meaning
8645 this definition is too screwy to try to parse.
8646 MEMFUNCDEF for a function definition. Like FUNCDEF but prepares to
8647 handle member functions (which have FIELD context).
8648 Return value may be zero meaning this definition is too screwy to
8649 try to parse.
8650 PARM for a parameter declaration (either within a function prototype
8651 or before a function body). Make a PARM_DECL, or return void_type_node.
db5ae43f 8652 CATCHPARM for a parameter declaration before a catch clause.
8d08fdba
MS
8653 TYPENAME if for a typename (in a cast or sizeof).
8654 Don't make a DECL node; just return the ..._TYPE node.
8655 FIELD for a struct or union field; make a FIELD_DECL.
8656 BITFIELD for a field with specified width.
8657 INITIALIZED is 1 if the decl has an initializer.
8658
8659 In the TYPENAME case, DECLARATOR is really an absolute declarator.
8660 It may also be so in the PARM case, for a prototype where the
8661 argument type is specified but not the name.
8662
8663 This function is where the complicated C meanings of `static'
8664 and `extern' are interpreted.
8665
8666 For C++, if there is any monkey business to do, the function which
8667 calls this one must do it, i.e., prepending instance variables,
8668 renaming overloaded function names, etc.
8669
8670 Note that for this C++, it is an error to define a method within a class
8671 which does not belong to that class.
8672
8673 Except in the case where SCOPE_REFs are implicitly known (such as
8674 methods within a class being redundantly qualified),
8675 declarations which involve SCOPE_REFs are returned as SCOPE_REFs
8676 (class_name::decl_name). The caller must also deal with this.
8677
8678 If a constructor or destructor is seen, and the context is FIELD,
8679 then the type gains the attribute TREE_HAS_x. If such a declaration
8680 is erroneous, NULL_TREE is returned.
8681
8682 QUALS is used only for FUNCDEF and MEMFUNCDEF cases. For a member
8683 function, these are the qualifiers to give to the `this' pointer.
8684
8685 May return void_type_node if the declarator turned out to be a friend.
8686 See grokfield for details. */
8687
8688enum return_types { return_normal, return_ctor, return_dtor, return_conversion };
8689
6ba89f8e
MM
8690/* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
8691 Check to see that the definition is valid. Issue appropriate error
8692 messages. Return 1 if the definition is particularly bad, or 0
8693 otherwise. */
8694
8695int
8696check_static_variable_definition (decl, type)
8697 tree decl;
8698 tree type;
8699{
8700 /* Motion 10 at San Diego: If a static const integral data member is
8701 initialized with an integral constant expression, the initializer
8702 may appear either in the declaration (within the class), or in
8703 the definition, but not both. If it appears in the class, the
8704 member is a member constant. The file-scope definition is always
8705 required. */
8706 if (CLASS_TYPE_P (type) || TREE_CODE (type) == REFERENCE_TYPE)
8707 {
8708 cp_error ("in-class initialization of static data member of non-integral type `%T'",
8709 type);
8710 /* If we just return the declaration, crashes will sometimes
8711 occur. We therefore return void_type_node, as if this was a
8712 friend declaration, to cause callers to completely ignore
8713 this declaration. */
8714 return 1;
8715 }
8716 else if (!CP_TYPE_CONST_P (type))
8717 cp_error ("ANSI C++ forbids in-class initialization of non-const static member `%D'",
8718 decl);
8719 else if (pedantic && !INTEGRAL_TYPE_P (type))
8720 cp_pedwarn ("ANSI C++ forbids initialization of member constant `%D' of non-integral type `%T'", decl, type);
8721
8722 return 0;
8723}
8724
8d08fdba 8725tree
c11b6f21 8726grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
8d08fdba
MS
8727 tree declspecs;
8728 tree declarator;
8729 enum decl_context decl_context;
8730 int initialized;
c11b6f21 8731 tree attrlist;
8d08fdba
MS
8732{
8733 RID_BIT_TYPE specbits;
8734 int nclasses = 0;
8735 tree spec;
8736 tree type = NULL_TREE;
8737 int longlong = 0;
8738 int constp;
91063b51 8739 int restrictp;
8d08fdba 8740 int volatilep;
91063b51 8741 int type_quals;
db5ae43f 8742 int virtualp, explicitp, friendp, inlinep, staticp;
8d08fdba
MS
8743 int explicit_int = 0;
8744 int explicit_char = 0;
37c46b43 8745 int defaulted_int = 0;
8d08fdba
MS
8746 int opaque_typedef = 0;
8747 tree typedef_decl = NULL_TREE;
8748 char *name;
8749 tree typedef_type = NULL_TREE;
8750 int funcdef_flag = 0;
8751 enum tree_code innermost_code = ERROR_MARK;
8752 int bitfield = 0;
6125f3be
DE
8753#if 0
8754 /* See the code below that used this. */
f6abb50a 8755 tree decl_machine_attr = NULL_TREE;
6125f3be 8756#endif
8d08fdba
MS
8757 /* Set this to error_mark_node for FIELD_DECLs we could not handle properly.
8758 All FIELD_DECLs we build here have `init' put into their DECL_INITIAL. */
8759 tree init = NULL_TREE;
8760
8761 /* Keep track of what sort of function is being processed
8762 so that we can warn about default return values, or explicit
8763 return values which do not match prescribed defaults. */
8764 enum return_types return_type = return_normal;
8765
8766 tree dname = NULL_TREE;
8767 tree ctype = current_class_type;
8768 tree ctor_return_type = NULL_TREE;
8769 enum overload_flags flags = NO_SPECIAL;
8d08fdba 8770 tree quals = NULL_TREE;
c11b6f21 8771 tree raises = NULL_TREE;
386b8a85 8772 int template_count = 0;
2c73f9f5 8773 tree in_namespace = NULL_TREE;
1eab9b56
JM
8774 tree inner_attrs;
8775 int ignore_attrs;
8d08fdba
MS
8776
8777 RIDBIT_RESET_ALL (specbits);
8778 if (decl_context == FUNCDEF)
8779 funcdef_flag = 1, decl_context = NORMAL;
8780 else if (decl_context == MEMFUNCDEF)
8781 funcdef_flag = -1, decl_context = FIELD;
8782 else if (decl_context == BITFIELD)
8783 bitfield = 1, decl_context = FIELD;
8784
8d08fdba
MS
8785 /* Look inside a declarator for the name being declared
8786 and get it as a string, for an error message. */
8787 {
be99da77
MS
8788 tree *next = &declarator;
8789 register tree decl;
8d08fdba
MS
8790 name = NULL;
8791
be99da77
MS
8792 while (next && *next)
8793 {
8794 decl = *next;
8795 switch (TREE_CODE (decl))
8d08fdba 8796 {
52fbc847
JM
8797 case TREE_LIST:
8798 /* For attributes. */
8799 next = &TREE_VALUE (decl);
8800 break;
8801
be99da77
MS
8802 case COND_EXPR:
8803 ctype = NULL_TREE;
8804 next = &TREE_OPERAND (decl, 0);
8805 break;
8d08fdba 8806
2c73f9f5 8807 case BIT_NOT_EXPR: /* For C++ destructors! */
8d08fdba 8808 {
be99da77
MS
8809 tree name = TREE_OPERAND (decl, 0);
8810 tree rename = NULL_TREE;
8811
8812 my_friendly_assert (flags == NO_SPECIAL, 152);
8813 flags = DTOR_FLAG;
8814 return_type = return_dtor;
5566b478
MS
8815 if (TREE_CODE (name) == TYPE_DECL)
8816 TREE_OPERAND (decl, 0) = name = constructor_name (name);
be99da77
MS
8817 my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 153);
8818 if (ctype == NULL_TREE)
8819 {
8820 if (current_class_type == NULL_TREE)
8821 {
8251199e 8822 error ("destructors must be member functions");
be99da77
MS
8823 flags = NO_SPECIAL;
8824 }
8825 else
8826 {
8827 tree t = constructor_name (current_class_name);
8828 if (t != name)
8829 rename = t;
8830 }
8831 }
8d08fdba 8832 else
be99da77
MS
8833 {
8834 tree t = constructor_name (ctype);
8835 if (t != name)
8836 rename = t;
8837 }
51c184be 8838
be99da77 8839 if (rename)
39211cd5 8840 {
8251199e 8841 cp_error ("destructor `%T' must match class name `%T'",
5566b478 8842 name, rename);
be99da77 8843 TREE_OPERAND (decl, 0) = rename;
39211cd5 8844 }
be99da77 8845 next = &name;
51c184be 8846 }
be99da77 8847 break;
8d08fdba 8848
be99da77 8849 case ADDR_EXPR: /* C++ reference declaration */
2c73f9f5 8850 /* Fall through. */
be99da77
MS
8851 case ARRAY_REF:
8852 case INDIRECT_REF:
8853 ctype = NULL_TREE;
8854 innermost_code = TREE_CODE (decl);
8855 next = &TREE_OPERAND (decl, 0);
8856 break;
8d08fdba 8857
be99da77
MS
8858 case CALL_EXPR:
8859 if (parmlist_is_exprlist (TREE_OPERAND (decl, 1)))
8d08fdba 8860 {
be99da77
MS
8861 /* This is actually a variable declaration using constructor
8862 syntax. We need to call start_decl and cp_finish_decl so we
8863 can get the variable initialized... */
8864
8865 *next = TREE_OPERAND (decl, 0);
8866 init = TREE_OPERAND (decl, 1);
8867
a1774733 8868 decl = start_decl (declarator, declspecs, 1, NULL_TREE, NULL_TREE);
1eb0072d
JM
8869 if (decl)
8870 {
8871 /* Look for __unused__ attribute */
8872 if (TREE_USED (TREE_TYPE (decl)))
8873 TREE_USED (decl) = 1;
8874 finish_decl (decl, init, NULL_TREE);
8875 }
8876 else
8877 cp_error ("invalid declarator");
be99da77 8878 return 0;
8d08fdba 8879 }
be99da77
MS
8880 innermost_code = TREE_CODE (decl);
8881 if (decl_context == FIELD && ctype == NULL_TREE)
8882 ctype = current_class_type;
45537677 8883 if (ctype
c11b6f21 8884 && TREE_OPERAND (decl, 0)
45537677
MS
8885 && (TREE_CODE (TREE_OPERAND (decl, 0)) == TYPE_DECL
8886 && ((DECL_NAME (TREE_OPERAND (decl, 0))
8887 == constructor_name_full (ctype))
8888 || (DECL_NAME (TREE_OPERAND (decl, 0))
8889 == constructor_name (ctype)))))
be99da77
MS
8890 TREE_OPERAND (decl, 0) = constructor_name (ctype);
8891 next = &TREE_OPERAND (decl, 0);
8892 decl = *next;
8893 if (ctype != NULL_TREE
8894 && decl != NULL_TREE && flags != DTOR_FLAG
8895 && decl == constructor_name (ctype))
8d08fdba 8896 {
be99da77
MS
8897 return_type = return_ctor;
8898 ctor_return_type = ctype;
8d08fdba 8899 }
be99da77
MS
8900 ctype = NULL_TREE;
8901 break;
386b8a85
JM
8902
8903 case TEMPLATE_ID_EXPR:
8904 {
8905 tree fns = TREE_OPERAND (decl, 0);
8906
8907 if (TREE_CODE (fns) == LOOKUP_EXPR)
8908 fns = TREE_OPERAND (fns, 0);
8909
8910 if (TREE_CODE (fns) == IDENTIFIER_NODE)
8911 dname = fns;
f84b4be9 8912 else if (is_overloaded_fn (fns))
386b8a85
JM
8913 dname = DECL_NAME (get_first_fn (fns));
8914 else
f84b4be9 8915 my_friendly_abort (0);
386b8a85 8916 }
2c73f9f5 8917 /* Fall through. */
be99da77
MS
8918
8919 case IDENTIFIER_NODE:
386b8a85
JM
8920 if (TREE_CODE (decl) == IDENTIFIER_NODE)
8921 dname = decl;
8922
be99da77
MS
8923 next = 0;
8924
8925 if (is_rid (dname))
8d08fdba 8926 {
8251199e 8927 cp_error ("declarator-id missing; using reserved word `%D'",
be99da77
MS
8928 dname);
8929 name = IDENTIFIER_POINTER (dname);
8d08fdba 8930 }
be99da77 8931 if (! IDENTIFIER_OPNAME_P (dname)
956d6950 8932 /* GNU/Linux headers use '__op'. Arrgh. */
a703fb38 8933 || (IDENTIFIER_TYPENAME_P (dname) && ! TREE_TYPE (dname)))
be99da77 8934 name = IDENTIFIER_POINTER (dname);
8d08fdba
MS
8935 else
8936 {
be99da77 8937 if (IDENTIFIER_TYPENAME_P (dname))
8d08fdba 8938 {
be99da77
MS
8939 my_friendly_assert (flags == NO_SPECIAL, 154);
8940 flags = TYPENAME_FLAG;
8941 ctor_return_type = TREE_TYPE (dname);
8942 return_type = return_conversion;
8d08fdba 8943 }
be99da77 8944 name = operator_name_string (dname);
8d08fdba 8945 }
be99da77 8946 break;
8d08fdba 8947
be99da77
MS
8948 /* C++ extension */
8949 case SCOPE_REF:
8950 {
8951 /* Perform error checking, and decide on a ctype. */
8952 tree cname = TREE_OPERAND (decl, 0);
8953 if (cname == NULL_TREE)
8954 ctype = NULL_TREE;
2c73f9f5
ML
8955 else if (TREE_CODE (cname) == NAMESPACE_DECL)
8956 {
8957 ctype = NULL_TREE;
8958 in_namespace = TREE_OPERAND (decl, 0);
8959 TREE_OPERAND (decl, 0) = NULL_TREE;
8960 }
be99da77
MS
8961 else if (! is_aggr_type (cname, 1))
8962 TREE_OPERAND (decl, 0) = NULL_TREE;
8963 /* Must test TREE_OPERAND (decl, 1), in case user gives
8964 us `typedef (class::memfunc)(int); memfunc *memfuncptr;' */
8965 else if (TREE_OPERAND (decl, 1)
8966 && TREE_CODE (TREE_OPERAND (decl, 1)) == INDIRECT_REF)
8967 ctype = cname;
73b0fce8
KL
8968 else if (TREE_CODE (cname) == TEMPLATE_TYPE_PARM
8969 || TREE_CODE (cname) == TEMPLATE_TEMPLATE_PARM)
5566b478 8970 {
8251199e 8971 cp_error ("`%T::%D' is not a valid declarator", cname,
5566b478 8972 TREE_OPERAND (decl, 1));
8251199e 8973 cp_error (" perhaps you want `typename %T::%D' to make it a type",
5566b478
MS
8974 cname, TREE_OPERAND (decl, 1));
8975 return void_type_node;
8976 }
be99da77
MS
8977 else if (ctype == NULL_TREE)
8978 ctype = cname;
8979 else if (TREE_COMPLEXITY (decl) == current_class_depth)
8980 TREE_OPERAND (decl, 0) = ctype;
8981 else
8982 {
8983 if (! UNIQUELY_DERIVED_FROM_P (cname, ctype))
8984 {
8251199e 8985 cp_error ("type `%T' is not derived from type `%T'",
be99da77
MS
8986 cname, ctype);
8987 TREE_OPERAND (decl, 0) = NULL_TREE;
8988 }
8989 else
8990 ctype = cname;
8991 }
8992
c91a56d2
MS
8993 if (ctype && TREE_CODE (TREE_OPERAND (decl, 1)) == TYPE_DECL
8994 && ((DECL_NAME (TREE_OPERAND (decl, 1))
8995 == constructor_name_full (ctype))
8996 || (DECL_NAME (TREE_OPERAND (decl, 1))
8997 == constructor_name (ctype))))
be99da77
MS
8998 TREE_OPERAND (decl, 1) = constructor_name (ctype);
8999 next = &TREE_OPERAND (decl, 1);
9000 decl = *next;
9001 if (ctype)
9002 {
9003 if (TREE_CODE (decl) == IDENTIFIER_NODE
9004 && constructor_name (ctype) == decl)
9005 {
9006 return_type = return_ctor;
9007 ctor_return_type = ctype;
9008 }
9009 else if (TREE_CODE (decl) == BIT_NOT_EXPR
9010 && TREE_CODE (TREE_OPERAND (decl, 0)) == IDENTIFIER_NODE
9011 && (constructor_name (ctype) == TREE_OPERAND (decl, 0)
9012 || constructor_name_full (ctype) == TREE_OPERAND (decl, 0)))
9013 {
9014 return_type = return_dtor;
9015 ctor_return_type = ctype;
9016 flags = DTOR_FLAG;
9017 TREE_OPERAND (decl, 0) = constructor_name (ctype);
9018 next = &TREE_OPERAND (decl, 0);
9019 }
9020 }
9021 }
9022 break;
9023
9024 case ERROR_MARK:
9025 next = 0;
9026 break;
9027
45537677
MS
9028 case TYPE_DECL:
9029 /* Parse error puts this typespec where
9030 a declarator should go. */
8251199e 9031 cp_error ("`%T' specified as declarator-id", DECL_NAME (decl));
45537677 9032 if (TREE_TYPE (decl) == current_class_type)
8251199e 9033 cp_error (" perhaps you want `%T' for a constructor",
45537677
MS
9034 current_class_name);
9035 dname = DECL_NAME (decl);
9036 name = IDENTIFIER_POINTER (dname);
9037
e92cc029 9038 /* Avoid giving two errors for this. */
45537677
MS
9039 IDENTIFIER_CLASS_VALUE (dname) = NULL_TREE;
9040
9041 declspecs = temp_tree_cons (NULL_TREE, integer_type_node,
9042 declspecs);
9043 *next = dname;
9044 next = 0;
9045 break;
9046
be99da77 9047 default:
8251199e 9048 cp_compiler_error ("`%D' as declarator", decl);
be99da77 9049 return 0; /* We used to do a 155 abort here. */
8d08fdba 9050 }
be99da77 9051 }
8d08fdba
MS
9052 if (name == NULL)
9053 name = "type name";
9054 }
9055
9056 /* A function definition's declarator must have the form of
9057 a function declarator. */
9058
9059 if (funcdef_flag && innermost_code != CALL_EXPR)
9060 return 0;
9061
e1cd6e56
MS
9062 if (((dname && IDENTIFIER_OPNAME_P (dname)) || flags == TYPENAME_FLAG)
9063 && innermost_code != CALL_EXPR
9064 && ! (ctype && declspecs == NULL_TREE))
9065 {
8251199e 9066 cp_error ("declaration of `%D' as non-function", dname);
e1cd6e56
MS
9067 return void_type_node;
9068 }
9069
8d08fdba
MS
9070 /* Anything declared one level down from the top level
9071 must be one of the parameters of a function
9072 (because the body is at least two levels down). */
9073
9074 /* This heuristic cannot be applied to C++ nodes! Fixed, however,
9075 by not allowing C++ class definitions to specify their parameters
9076 with xdecls (must be spec.d in the parmlist).
9077
9078 Since we now wait to push a class scope until we are sure that
9079 we are in a legitimate method context, we must set oldcname
a9aedbc2
MS
9080 explicitly (since current_class_name is not yet alive).
9081
9082 We also want to avoid calling this a PARM if it is in a namespace. */
8d08fdba 9083
5566b478
MS
9084 if (decl_context == NORMAL && ! namespace_bindings_p ()
9085 && ! pseudo_global_level_p ())
a9aedbc2
MS
9086 {
9087 struct binding_level *b = current_binding_level;
9088 current_binding_level = b->level_chain;
9089 if (current_binding_level != 0 && toplevel_bindings_p ())
9090 decl_context = PARM;
9091 current_binding_level = b;
9092 }
8d08fdba
MS
9093
9094 /* Look through the decl specs and record which ones appear.
9095 Some typespecs are defined as built-in typenames.
9096 Others, the ones that are modifiers of other types,
9097 are represented by bits in SPECBITS: set the bits for
9098 the modifiers that appear. Storage class keywords are also in SPECBITS.
9099
9100 If there is a typedef name or a type, store the type in TYPE.
9101 This includes builtin typedefs such as `int'.
9102
9103 Set EXPLICIT_INT if the type is `int' or `char' and did not
9104 come from a user typedef.
9105
9106 Set LONGLONG if `long' is mentioned twice.
9107
9108 For C++, constructors and destructors have their own fast treatment. */
9109
9110 for (spec = declspecs; spec; spec = TREE_CHAIN (spec))
9111 {
9112 register int i;
9113 register tree id;
9114
9115 /* Certain parse errors slip through. For example,
9116 `int class;' is not caught by the parser. Try
9117 weakly to recover here. */
9118 if (TREE_CODE (spec) != TREE_LIST)
9119 return 0;
9120
9121 id = TREE_VALUE (spec);
9122
9123 if (TREE_CODE (id) == IDENTIFIER_NODE)
9124 {
a3203465
MS
9125 if (id == ridpointers[(int) RID_INT]
9126 || id == ridpointers[(int) RID_CHAR]
9127 || id == ridpointers[(int) RID_BOOL]
9128 || id == ridpointers[(int) RID_WCHAR])
8d08fdba
MS
9129 {
9130 if (type)
8ccc31eb
MS
9131 {
9132 if (id == ridpointers[(int) RID_BOOL])
8251199e 9133 error ("`bool' is now a keyword");
8ccc31eb 9134 else
8251199e 9135 cp_error ("extraneous `%T' ignored", id);
8ccc31eb 9136 }
8d08fdba
MS
9137 else
9138 {
a3203465
MS
9139 if (id == ridpointers[(int) RID_INT])
9140 explicit_int = 1;
9141 else if (id == ridpointers[(int) RID_CHAR])
9142 explicit_char = 1;
8d08fdba
MS
9143 type = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (id));
9144 }
9145 goto found;
9146 }
e92cc029 9147 /* C++ aggregate types. */
8d08fdba
MS
9148 if (IDENTIFIER_HAS_TYPE_VALUE (id))
9149 {
9150 if (type)
8251199e 9151 cp_error ("multiple declarations `%T' and `%T'", type, id);
8d08fdba
MS
9152 else
9153 type = IDENTIFIER_TYPE_VALUE (id);
9154 goto found;
9155 }
9156
f376e137 9157 for (i = (int) RID_FIRST_MODIFIER; i <= (int) RID_LAST_MODIFIER; i++)
8d08fdba
MS
9158 {
9159 if (ridpointers[i] == id)
9160 {
9161 if (i == (int) RID_LONG && RIDBIT_SETP (i, specbits))
9162 {
795add94 9163 if (pedantic && ! in_system_header && warn_long_long)
8251199e 9164 pedwarn ("ANSI C++ does not support `long long'");
9a3b49ac 9165 if (longlong)
8251199e 9166 error ("`long long long' is too long for GCC");
8d08fdba
MS
9167 else
9168 longlong = 1;
9169 }
9170 else if (RIDBIT_SETP (i, specbits))
8251199e 9171 pedwarn ("duplicate `%s'", IDENTIFIER_POINTER (id));
8d08fdba
MS
9172 RIDBIT_SET (i, specbits);
9173 goto found;
9174 }
9175 }
9176 }
e92cc029 9177 /* C++ aggregate types. */
73b0fce8 9178 else if (TREE_CODE (id) == TYPE_DECL || TREE_CODE (id) == TEMPLATE_DECL)
45537677
MS
9179 {
9180 if (type)
8251199e 9181 cp_error ("multiple declarations `%T' and `%T'", type,
45537677
MS
9182 TREE_TYPE (id));
9183 else
5566b478
MS
9184 {
9185 type = TREE_TYPE (id);
9186 TREE_VALUE (spec) = type;
9187 }
45537677
MS
9188 goto found;
9189 }
8d08fdba 9190 if (type)
8251199e 9191 error ("two or more data types in declaration of `%s'", name);
8d08fdba
MS
9192 else if (TREE_CODE (id) == IDENTIFIER_NODE)
9193 {
9194 register tree t = lookup_name (id, 1);
9195 if (!t || TREE_CODE (t) != TYPE_DECL)
8251199e 9196 error ("`%s' fails to be a typedef or built in type",
8d08fdba
MS
9197 IDENTIFIER_POINTER (id));
9198 else
9199 {
9200 type = TREE_TYPE (t);
6125f3be
DE
9201#if 0
9202 /* See the code below that used this. */
f6abb50a 9203 decl_machine_attr = DECL_MACHINE_ATTRIBUTES (id);
6125f3be 9204#endif
8d08fdba
MS
9205 typedef_decl = t;
9206 }
9207 }
bd6dd845 9208 else if (id != error_mark_node)
8d08fdba
MS
9209 /* Can't change CLASS nodes into RECORD nodes here! */
9210 type = id;
9211
9212 found: ;
9213 }
9214
9215 typedef_type = type;
9216
37c46b43 9217 /* No type at all: default to `int', and set DEFAULTED_INT
8d08fdba
MS
9218 because it was not a user-defined typedef.
9219 Except when we have a `typedef' inside a signature, in
9220 which case the type defaults to `unknown type' and is
9221 instantiated when assigning to a signature pointer or ref. */
9222
a3203465
MS
9223 if (type == NULL_TREE
9224 && (RIDBIT_SETP (RID_SIGNED, specbits)
9225 || RIDBIT_SETP (RID_UNSIGNED, specbits)
9226 || RIDBIT_SETP (RID_LONG, specbits)
9227 || RIDBIT_SETP (RID_SHORT, specbits)))
9228 {
9229 /* These imply 'int'. */
9230 type = integer_type_node;
37c46b43 9231 defaulted_int = 1;
a3203465
MS
9232 }
9233
8d08fdba
MS
9234 if (type == NULL_TREE)
9235 {
9236 explicit_int = -1;
9237 if (return_type == return_dtor)
9238 type = void_type_node;
9239 else if (return_type == return_ctor)
f30432d7 9240 type = build_pointer_type (ctor_return_type);
51c184be
MS
9241 else if (return_type == return_conversion)
9242 type = ctor_return_type;
8d08fdba
MS
9243 else if (current_class_type
9244 && IS_SIGNATURE (current_class_type)
fc378698 9245 && RIDBIT_SETP (RID_TYPEDEF, specbits)
8d08fdba
MS
9246 && (decl_context == FIELD || decl_context == NORMAL))
9247 {
9248 explicit_int = 0;
9249 opaque_typedef = 1;
9250 type = copy_node (opaque_type_node);
9251 }
9252 else
9253 {
ff0cf464
JM
9254 if (! pedantic && ! warn_return_type
9255 && funcdef_flag
9256 && MAIN_NAME_P (dname)
9257 && ctype == NULL_TREE
9258 && in_namespace == NULL_TREE
9259 && current_namespace == global_namespace)
9260 /* Let `main () { }' slide, since it's so common. */;
9261 else
9262 cp_pedwarn ("ANSI C++ forbids declaration `%D' with no type",
9263 dname);
8d08fdba
MS
9264 type = integer_type_node;
9265 }
9266 }
9267 else if (return_type == return_dtor)
9268 {
8251199e 9269 error ("return type specification for destructor invalid");
8d08fdba
MS
9270 type = void_type_node;
9271 }
9272 else if (return_type == return_ctor)
9273 {
8251199e 9274 error ("return type specification for constructor invalid");
f30432d7 9275 type = build_pointer_type (ctor_return_type);
8d08fdba 9276 }
51c184be
MS
9277 else if (return_type == return_conversion)
9278 {
3bfdc719 9279 if (!same_type_p (type, ctor_return_type))
8251199e 9280 cp_error ("operator `%T' declared to return `%T'",
51c184be
MS
9281 ctor_return_type, type);
9282 else
8251199e 9283 cp_pedwarn ("return type specified for `operator %T'",
51c184be
MS
9284 ctor_return_type);
9285
9286 type = ctor_return_type;
9287 }
8d08fdba
MS
9288
9289 ctype = NULL_TREE;
9290
9291 /* Now process the modifiers that were specified
9292 and check for invalid combinations. */
9293
9294 /* Long double is a special combination. */
9295
9296 if (RIDBIT_SETP (RID_LONG, specbits)
9297 && TYPE_MAIN_VARIANT (type) == double_type_node)
9298 {
9299 RIDBIT_RESET (RID_LONG, specbits);
91063b51
MM
9300 type = build_qualified_type (long_double_type_node,
9301 CP_TYPE_QUALS (type));
8d08fdba
MS
9302 }
9303
9304 /* Check all other uses of type modifiers. */
9305
9306 if (RIDBIT_SETP (RID_UNSIGNED, specbits)
9307 || RIDBIT_SETP (RID_SIGNED, specbits)
9308 || RIDBIT_SETP (RID_LONG, specbits)
9309 || RIDBIT_SETP (RID_SHORT, specbits))
9310 {
9311 int ok = 0;
9312
9313 if (TREE_CODE (type) == REAL_TYPE)
8251199e 9314 error ("short, signed or unsigned invalid for `%s'", name);
b7484fbe 9315 else if (TREE_CODE (type) != INTEGER_TYPE)
8251199e 9316 error ("long, short, signed or unsigned invalid for `%s'", name);
8d08fdba
MS
9317 else if (RIDBIT_SETP (RID_LONG, specbits)
9318 && RIDBIT_SETP (RID_SHORT, specbits))
8251199e 9319 error ("long and short specified together for `%s'", name);
8d08fdba
MS
9320 else if ((RIDBIT_SETP (RID_LONG, specbits)
9321 || RIDBIT_SETP (RID_SHORT, specbits))
9322 && explicit_char)
8251199e 9323 error ("long or short specified with char for `%s'", name);
8d08fdba
MS
9324 else if ((RIDBIT_SETP (RID_LONG, specbits)
9325 || RIDBIT_SETP (RID_SHORT, specbits))
9326 && TREE_CODE (type) == REAL_TYPE)
8251199e 9327 error ("long or short specified with floating type for `%s'", name);
8d08fdba
MS
9328 else if (RIDBIT_SETP (RID_SIGNED, specbits)
9329 && RIDBIT_SETP (RID_UNSIGNED, specbits))
8251199e 9330 error ("signed and unsigned given together for `%s'", name);
8d08fdba
MS
9331 else
9332 {
9333 ok = 1;
37c46b43 9334 if (!explicit_int && !defaulted_int && !explicit_char && pedantic)
8d08fdba 9335 {
8251199e 9336 pedwarn ("long, short, signed or unsigned used invalidly for `%s'",
8d08fdba
MS
9337 name);
9338 if (flag_pedantic_errors)
9339 ok = 0;
9340 }
9341 }
9342
9343 /* Discard the type modifiers if they are invalid. */
9344 if (! ok)
9345 {
9346 RIDBIT_RESET (RID_UNSIGNED, specbits);
9347 RIDBIT_RESET (RID_SIGNED, specbits);
9348 RIDBIT_RESET (RID_LONG, specbits);
9349 RIDBIT_RESET (RID_SHORT, specbits);
9350 longlong = 0;
9351 }
9352 }
9353
37c46b43
MS
9354 if (RIDBIT_SETP (RID_COMPLEX, specbits)
9355 && TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
9356 {
8251199e 9357 error ("complex invalid for `%s'", name);
37c46b43
MS
9358 RIDBIT_RESET (RID_COMPLEX, specbits);
9359 }
9360
8d08fdba
MS
9361 /* Decide whether an integer type is signed or not.
9362 Optionally treat bitfields as signed by default. */
9363 if (RIDBIT_SETP (RID_UNSIGNED, specbits)
8d08fdba 9364 || (bitfield && ! flag_signed_bitfields
37c46b43 9365 && (explicit_int || defaulted_int || explicit_char
8d08fdba
MS
9366 /* A typedef for plain `int' without `signed'
9367 can be controlled just like plain `int'. */
9368 || ! (typedef_decl != NULL_TREE
9369 && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
9370 && TREE_CODE (type) != ENUMERAL_TYPE
9371 && RIDBIT_NOTSETP (RID_SIGNED, specbits)))
9372 {
9373 if (longlong)
9374 type = long_long_unsigned_type_node;
9375 else if (RIDBIT_SETP (RID_LONG, specbits))
9376 type = long_unsigned_type_node;
9377 else if (RIDBIT_SETP (RID_SHORT, specbits))
9378 type = short_unsigned_type_node;
9379 else if (type == char_type_node)
9380 type = unsigned_char_type_node;
9381 else if (typedef_decl)
9382 type = unsigned_type (type);
9383 else
9384 type = unsigned_type_node;
9385 }
9386 else if (RIDBIT_SETP (RID_SIGNED, specbits)
9387 && type == char_type_node)
9388 type = signed_char_type_node;
9389 else if (longlong)
9390 type = long_long_integer_type_node;
9391 else if (RIDBIT_SETP (RID_LONG, specbits))
9392 type = long_integer_type_node;
9393 else if (RIDBIT_SETP (RID_SHORT, specbits))
9394 type = short_integer_type_node;
9395
37c46b43
MS
9396 if (RIDBIT_SETP (RID_COMPLEX, specbits))
9397 {
9398 /* If we just have "complex", it is equivalent to
9399 "complex double", but if any modifiers at all are specified it is
9400 the complex form of TYPE. E.g, "complex short" is
9401 "complex short int". */
9402
9403 if (defaulted_int && ! longlong
9404 && ! (RIDBIT_SETP (RID_LONG, specbits)
9405 || RIDBIT_SETP (RID_SHORT, specbits)
9406 || RIDBIT_SETP (RID_SIGNED, specbits)
9407 || RIDBIT_SETP (RID_UNSIGNED, specbits)))
9408 type = complex_double_type_node;
9409 else if (type == integer_type_node)
9410 type = complex_integer_type_node;
9411 else if (type == float_type_node)
9412 type = complex_float_type_node;
9413 else if (type == double_type_node)
9414 type = complex_double_type_node;
9415 else if (type == long_double_type_node)
9416 type = complex_long_double_type_node;
9417 else
9418 type = build_complex_type (type);
9419 }
9420
3ac3d9ea
MM
9421 if (return_type == return_conversion
9422 && (RIDBIT_SETP (RID_CONST, specbits)
91063b51
MM
9423 || RIDBIT_SETP (RID_VOLATILE, specbits)
9424 || RIDBIT_SETP (RID_RESTRICT, specbits)))
9425 cp_error ("qualifiers are not allowed on declaration of `operator %T'",
3ac3d9ea
MM
9426 ctor_return_type);
9427
8d08fdba
MS
9428 /* Set CONSTP if this declaration is `const', whether by
9429 explicit specification or via a typedef.
9430 Likewise for VOLATILEP. */
9431
91063b51
MM
9432 constp = !! RIDBIT_SETP (RID_CONST, specbits) + CP_TYPE_CONST_P (type);
9433 restrictp =
9434 !! RIDBIT_SETP (RID_RESTRICT, specbits) + CP_TYPE_RESTRICT_P (type);
9435 volatilep =
9436 !! RIDBIT_SETP (RID_VOLATILE, specbits) + CP_TYPE_VOLATILE_P (type);
9437 type_quals = ((constp ? TYPE_QUAL_CONST : 0)
9438 | (restrictp ? TYPE_QUAL_RESTRICT : 0)
9439 | (volatilep ? TYPE_QUAL_VOLATILE : 0));
9440 type = cp_build_qualified_type (type, type_quals);
8d08fdba
MS
9441 staticp = 0;
9442 inlinep = !! RIDBIT_SETP (RID_INLINE, specbits);
8d08fdba 9443 virtualp = RIDBIT_SETP (RID_VIRTUAL, specbits);
db5ae43f
MS
9444 RIDBIT_RESET (RID_VIRTUAL, specbits);
9445 explicitp = RIDBIT_SETP (RID_EXPLICIT, specbits) != 0;
9446 RIDBIT_RESET (RID_EXPLICIT, specbits);
8d08fdba 9447
8d08fdba
MS
9448 if (RIDBIT_SETP (RID_STATIC, specbits))
9449 staticp = 1 + (decl_context == FIELD);
9450
9451 if (virtualp && staticp == 2)
9452 {
8251199e 9453 cp_error ("member `%D' cannot be declared both virtual and static",
8d08fdba
MS
9454 dname);
9455 staticp = 0;
9456 }
9457 friendp = RIDBIT_SETP (RID_FRIEND, specbits);
8d08fdba
MS
9458 RIDBIT_RESET (RID_FRIEND, specbits);
9459
7e83af84
BK
9460 /* $7.1.2, Function specifiers */
9461 if (friendp && explicitp)
9462 error ("only declarations of constructors can be `explicit'");
9463
8d08fdba
MS
9464 if (RIDBIT_SETP (RID_MUTABLE, specbits))
9465 {
9466 if (decl_context == PARM)
9467 {
8251199e 9468 error ("non-member `%s' cannot be declared `mutable'", name);
8d08fdba
MS
9469 RIDBIT_RESET (RID_MUTABLE, specbits);
9470 }
9471 else if (friendp || decl_context == TYPENAME)
9472 {
8251199e 9473 error ("non-object member `%s' cannot be declared `mutable'", name);
8d08fdba
MS
9474 RIDBIT_RESET (RID_MUTABLE, specbits);
9475 }
8d08fdba
MS
9476 }
9477
9478 /* Warn if two storage classes are given. Default to `auto'. */
9479
9480 if (RIDBIT_ANY_SET (specbits))
9481 {
9482 if (RIDBIT_SETP (RID_STATIC, specbits)) nclasses++;
9483 if (RIDBIT_SETP (RID_EXTERN, specbits)) nclasses++;
9484 if (decl_context == PARM && nclasses > 0)
8251199e 9485 error ("storage class specifiers invalid in parameter declarations");
8d08fdba
MS
9486 if (RIDBIT_SETP (RID_TYPEDEF, specbits))
9487 {
9488 if (decl_context == PARM)
8251199e 9489 error ("typedef declaration invalid in parameter declaration");
8d08fdba
MS
9490 nclasses++;
9491 }
9492 if (RIDBIT_SETP (RID_AUTO, specbits)) nclasses++;
9493 if (RIDBIT_SETP (RID_REGISTER, specbits)) nclasses++;
9494 }
9495
9496 /* Give error if `virtual' is used outside of class declaration. */
b7484fbe
MS
9497 if (virtualp
9498 && (current_class_name == NULL_TREE || decl_context != FIELD))
8d08fdba 9499 {
8251199e 9500 error ("virtual outside class declaration");
8d08fdba
MS
9501 virtualp = 0;
9502 }
9503 if (current_class_name == NULL_TREE && RIDBIT_SETP (RID_MUTABLE, specbits))
9504 {
8251199e 9505 error ("only members can be declared mutable");
8d08fdba
MS
9506 RIDBIT_RESET (RID_MUTABLE, specbits);
9507 }
9508
9509 /* Static anonymous unions are dealt with here. */
9510 if (staticp && decl_context == TYPENAME
9511 && TREE_CODE (declspecs) == TREE_LIST
67ffc812 9512 && ANON_UNION_TYPE_P (TREE_VALUE (declspecs)))
8d08fdba
MS
9513 decl_context = FIELD;
9514
9515 /* Give error if `const,' `volatile,' `inline,' `friend,' or `virtual'
9516 is used in a signature member function declaration. */
9517 if (decl_context == FIELD
9518 && IS_SIGNATURE (current_class_type)
fc378698 9519 && RIDBIT_NOTSETP (RID_TYPEDEF, specbits))
8d08fdba 9520 {
91063b51 9521 if (type_quals != TYPE_UNQUALIFIED)
8d08fdba 9522 {
91063b51
MM
9523 error ("type qualifiers specified for signature member function `%s'", name);
9524 type_quals = TYPE_UNQUALIFIED;
8d08fdba
MS
9525 }
9526 if (inlinep)
9527 {
8251199e 9528 error ("`inline' specified for signature member function `%s'", name);
8d08fdba
MS
9529 /* Later, we'll make signature member functions inline. */
9530 inlinep = 0;
9531 }
9532 if (friendp)
9533 {
8251199e 9534 error ("`friend' declaration in signature definition");
8d08fdba
MS
9535 friendp = 0;
9536 }
9537 if (virtualp)
9538 {
8251199e 9539 error ("`virtual' specified for signature member function `%s'",
a28e3c7f 9540 name);
8d08fdba
MS
9541 /* Later, we'll make signature member functions virtual. */
9542 virtualp = 0;
9543 }
9544 }
9545
9546 /* Warn about storage classes that are invalid for certain
9547 kinds of declarations (parameters, typenames, etc.). */
9548
9549 if (nclasses > 1)
8251199e 9550 error ("multiple storage classes in declaration of `%s'", name);
8d08fdba
MS
9551 else if (decl_context != NORMAL && nclasses > 0)
9552 {
db5ae43f 9553 if ((decl_context == PARM || decl_context == CATCHPARM)
8d08fdba
MS
9554 && (RIDBIT_SETP (RID_REGISTER, specbits)
9555 || RIDBIT_SETP (RID_AUTO, specbits)))
9556 ;
fc378698
MS
9557 else if (RIDBIT_SETP (RID_TYPEDEF, specbits))
9558 ;
8d08fdba 9559 else if (decl_context == FIELD
fc378698 9560 && ! IS_SIGNATURE (current_class_type)
8d08fdba
MS
9561 /* C++ allows static class elements */
9562 && RIDBIT_SETP (RID_STATIC, specbits))
9563 /* C++ also allows inlines and signed and unsigned elements,
9564 but in those cases we don't come in here. */
9565 ;
9566 else
9567 {
9568 if (decl_context == FIELD)
9569 {
b7484fbe
MS
9570 tree tmp = NULL_TREE;
9571 register int op = 0;
9572
9573 if (declarator)
9574 {
9e9ff709
MS
9575 /* Avoid trying to get an operand off an identifier node. */
9576 if (TREE_CODE (declarator) == IDENTIFIER_NODE)
9577 tmp = declarator;
9578 else
9579 tmp = TREE_OPERAND (declarator, 0);
b7484fbe
MS
9580 op = IDENTIFIER_OPNAME_P (tmp);
9581 }
8251199e 9582 error ("storage class specified for %s `%s'",
8d08fdba
MS
9583 IS_SIGNATURE (current_class_type)
9584 ? (op
9585 ? "signature member operator"
9586 : "signature member function")
b7484fbe 9587 : (op ? "member operator" : "field"),
8d08fdba
MS
9588 op ? operator_name_string (tmp) : name);
9589 }
9590 else
db5ae43f 9591 error (((decl_context == PARM || decl_context == CATCHPARM)
8d08fdba
MS
9592 ? "storage class specified for parameter `%s'"
9593 : "storage class specified for typename"), name);
9594 RIDBIT_RESET (RID_REGISTER, specbits);
9595 RIDBIT_RESET (RID_AUTO, specbits);
9596 RIDBIT_RESET (RID_EXTERN, specbits);
9597
9598 if (decl_context == FIELD && IS_SIGNATURE (current_class_type))
9599 {
9600 RIDBIT_RESET (RID_STATIC, specbits);
9601 staticp = 0;
9602 }
9603 }
9604 }
9605 else if (RIDBIT_SETP (RID_EXTERN, specbits) && initialized && !funcdef_flag)
9606 {
a9aedbc2 9607 if (toplevel_bindings_p ())
8d08fdba 9608 {
59be0cdd 9609 /* It's common practice (and completely valid) to have a const
8d08fdba 9610 be initialized and declared extern. */
950ad3c3 9611 if (!(type_quals & TYPE_QUAL_CONST))
8251199e 9612 warning ("`%s' initialized and declared `extern'", name);
8d08fdba
MS
9613 }
9614 else
8251199e 9615 error ("`%s' has both `extern' and initializer", name);
8d08fdba
MS
9616 }
9617 else if (RIDBIT_SETP (RID_EXTERN, specbits) && funcdef_flag
a9aedbc2 9618 && ! toplevel_bindings_p ())
8251199e 9619 error ("nested function `%s' declared `extern'", name);
a9aedbc2 9620 else if (toplevel_bindings_p ())
8d08fdba
MS
9621 {
9622 if (RIDBIT_SETP (RID_AUTO, specbits))
8251199e 9623 error ("top-level declaration of `%s' specifies `auto'", name);
8d08fdba
MS
9624 }
9625
909e536a 9626 if (nclasses > 0 && friendp)
8251199e 9627 error ("storage class specifiers invalid in friend function declarations");
909e536a 9628
8d08fdba
MS
9629 /* Now figure out the structure of the declarator proper.
9630 Descend through it, creating more complex types, until we reach
9631 the declared identifier (or NULL_TREE, in an absolute declarator). */
9632
1eab9b56
JM
9633 inner_attrs = NULL_TREE;
9634 ignore_attrs = 0;
9635
386b8a85
JM
9636 while (declarator && TREE_CODE (declarator) != IDENTIFIER_NODE
9637 && TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
8d08fdba
MS
9638 {
9639 /* Each level of DECLARATOR is either an ARRAY_REF (for ...[..]),
9640 an INDIRECT_REF (for *...),
9641 a CALL_EXPR (for ...(...)),
9642 an identifier (for the name being declared)
9643 or a null pointer (for the place in an absolute declarator
9644 where the name was omitted).
9645 For the last two cases, we have just exited the loop.
9646
9647 For C++ it could also be
9648 a SCOPE_REF (for class :: ...). In this case, we have converted
9649 sensible names to types, and those are the values we use to
9650 qualify the member name.
9651 an ADDR_EXPR (for &...),
9652 a BIT_NOT_EXPR (for destructors)
8d08fdba
MS
9653
9654 At this point, TYPE is the type of elements of an array,
9655 or for a function to return, or for a pointer to point to.
9656 After this sequence of ifs, TYPE is the type of the
9657 array or function or pointer, and DECLARATOR has had its
9658 outermost layer removed. */
9659
bd6dd845 9660 if (type == error_mark_node)
8d08fdba
MS
9661 {
9662 if (TREE_CODE (declarator) == SCOPE_REF)
9663 declarator = TREE_OPERAND (declarator, 1);
9664 else
9665 declarator = TREE_OPERAND (declarator, 0);
9666 continue;
9667 }
9668 if (quals != NULL_TREE
9669 && (declarator == NULL_TREE
9670 || TREE_CODE (declarator) != SCOPE_REF))
9671 {
9672 if (ctype == NULL_TREE && TREE_CODE (type) == METHOD_TYPE)
9673 ctype = TYPE_METHOD_BASETYPE (type);
9674 if (ctype != NULL_TREE)
9675 {
8d08fdba 9676 tree dummy = build_decl (TYPE_DECL, NULL_TREE, type);
8d08fdba
MS
9677 ctype = grok_method_quals (ctype, dummy, quals);
9678 type = TREE_TYPE (dummy);
9679 quals = NULL_TREE;
9680 }
9681 }
1eab9b56
JM
9682
9683 /* See the comment for the TREE_LIST case, below. */
9684 if (ignore_attrs)
9685 ignore_attrs = 0;
9686 else if (inner_attrs)
9687 {
9688 decl_attributes (type, inner_attrs, NULL_TREE);
9689 inner_attrs = NULL_TREE;
9690 }
9691
8d08fdba
MS
9692 switch (TREE_CODE (declarator))
9693 {
52fbc847
JM
9694 case TREE_LIST:
9695 {
9696 /* We encode a declarator with embedded attributes using
1eab9b56
JM
9697 a TREE_LIST. The attributes apply to the declarator
9698 directly inside them, so we have to skip an iteration
9699 before applying them to the type. If the declarator just
9700 inside is the declarator-id, we apply the attrs to the
9701 decl itself. */
9702 inner_attrs = TREE_PURPOSE (declarator);
9703 ignore_attrs = 1;
52fbc847 9704 declarator = TREE_VALUE (declarator);
52fbc847
JM
9705 }
9706 break;
9707
8d08fdba
MS
9708 case ARRAY_REF:
9709 {
9710 register tree itype = NULL_TREE;
9711 register tree size = TREE_OPERAND (declarator, 1);
b7484fbe
MS
9712 /* The index is a signed object `sizetype' bits wide. */
9713 tree index_type = signed_type (sizetype);
8d08fdba
MS
9714
9715 declarator = TREE_OPERAND (declarator, 0);
9716
9717 /* Check for some types that there cannot be arrays of. */
9718
a1774733 9719 if (TREE_CODE (type) == VOID_TYPE)
8d08fdba 9720 {
8251199e 9721 cp_error ("declaration of `%D' as array of voids", dname);
8d08fdba
MS
9722 type = error_mark_node;
9723 }
9724
9725 if (TREE_CODE (type) == FUNCTION_TYPE)
9726 {
8251199e 9727 cp_error ("declaration of `%D' as array of functions", dname);
8d08fdba
MS
9728 type = error_mark_node;
9729 }
9730
9731 /* ARM $8.4.3: Since you can't have a pointer to a reference,
9732 you can't have arrays of references. If we allowed them,
59be0cdd 9733 then we'd be saying x[i] is valid for an array x, but
8d08fdba
MS
9734 then you'd have to ask: what does `*(x + i)' mean? */
9735 if (TREE_CODE (type) == REFERENCE_TYPE)
9736 {
9737 if (decl_context == TYPENAME)
8251199e 9738 cp_error ("cannot make arrays of references");
8d08fdba 9739 else
8251199e 9740 cp_error ("declaration of `%D' as array of references",
8d08fdba
MS
9741 dname);
9742 type = error_mark_node;
9743 }
9744
9745 if (TREE_CODE (type) == OFFSET_TYPE)
9746 {
8251199e 9747 cp_error ("declaration of `%D' as array of data members",
8d08fdba
MS
9748 dname);
9749 type = error_mark_node;
9750 }
9751
9752 if (TREE_CODE (type) == METHOD_TYPE)
9753 {
8251199e 9754 cp_error ("declaration of `%D' as array of function members",
8d08fdba
MS
9755 dname);
9756 type = error_mark_node;
9757 }
9758
9759 if (size == error_mark_node)
9760 type = error_mark_node;
3bfdc719
MM
9761 else if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
9762 {
9763 /* [dcl.array]
9764
9765 the constant expressions that specify the bounds of
9766 the arrays can be omitted only for the first member
9767 of the sequence. */
9768 cp_error ("declaration of `%D' as multidimensional array",
9769 dname);
9770 cp_error ("must have bounds for all dimensions except the first");
9771 type = error_mark_node;
9772 }
8d08fdba
MS
9773
9774 if (type == error_mark_node)
9775 continue;
9776
9777 if (size)
9778 {
9779 /* Must suspend_momentary here because the index
9780 type may need to live until the end of the function.
9781 For example, it is used in the declaration of a
9782 variable which requires destructing at the end of
9783 the function; then build_vec_delete will need this
9784 value. */
9785 int yes = suspend_momentary ();
2c73f9f5 9786 /* Might be a cast. */
8d08fdba
MS
9787 if (TREE_CODE (size) == NOP_EXPR
9788 && TREE_TYPE (size) == TREE_TYPE (TREE_OPERAND (size, 0)))
9789 size = TREE_OPERAND (size, 0);
9790
5566b478
MS
9791 /* If this involves a template parameter, it'll be
9792 constant, but we don't know what the value is yet. */
5156628f 9793 if (processing_template_decl)
5566b478 9794 {
e97e5263
JM
9795 /* Resolve a qualified reference to an enumerator or
9796 static const data member of ours. */
9797 if (TREE_CODE (size) == SCOPE_REF
9798 && TREE_OPERAND (size, 0) == current_class_type)
9799 {
9800 tree t = lookup_field (current_class_type,
9801 TREE_OPERAND (size, 1), 0, 0);
9802 if (t)
9803 size = t;
9804 }
9805
5566b478
MS
9806 itype = make_node (INTEGER_TYPE);
9807 TYPE_MIN_VALUE (itype) = size_zero_node;
9808 TYPE_MAX_VALUE (itype) = build_min
9809 (MINUS_EXPR, sizetype, size, integer_one_node);
9810 goto dont_grok_size;
9811 }
8d08fdba
MS
9812
9813 if (TREE_CODE (TREE_TYPE (size)) != INTEGER_TYPE
161c12b0
JM
9814 && TREE_CODE (TREE_TYPE (size)) != ENUMERAL_TYPE
9815 && TREE_CODE (TREE_TYPE (size)) != BOOLEAN_TYPE)
8d08fdba 9816 {
8251199e 9817 cp_error ("size of array `%D' has non-integer type",
8d08fdba
MS
9818 dname);
9819 size = integer_one_node;
9820 }
9821 if (TREE_READONLY_DECL_P (size))
9822 size = decl_constant_value (size);
e1cd6e56 9823 if (pedantic && integer_zerop (size))
8251199e 9824 cp_pedwarn ("ANSI C++ forbids zero-size array `%D'", dname);
8d08fdba
MS
9825 if (TREE_CONSTANT (size))
9826 {
dff6b454
RK
9827 int old_flag_pedantic_errors = flag_pedantic_errors;
9828 int old_pedantic = pedantic;
9829 pedantic = flag_pedantic_errors = 1;
9830 /* Always give overflow errors on array subscripts. */
8d08fdba 9831 constant_expression_warning (size);
dff6b454
RK
9832 pedantic = old_pedantic;
9833 flag_pedantic_errors = old_flag_pedantic_errors;
8d08fdba
MS
9834 if (INT_CST_LT (size, integer_zero_node))
9835 {
8251199e 9836 cp_error ("size of array `%D' is negative", dname);
8d08fdba
MS
9837 size = integer_one_node;
9838 }
8d08fdba
MS
9839 }
9840 else
9841 {
e1cd6e56 9842 if (pedantic)
a0a33927
MS
9843 {
9844 if (dname)
8251199e 9845 cp_pedwarn ("ANSI C++ forbids variable-size array `%D'",
a0a33927
MS
9846 dname);
9847 else
8251199e 9848 cp_pedwarn ("ANSI C++ forbids variable-size array");
a0a33927 9849 }
8d08fdba 9850 }
b7484fbe 9851
beb53fb8
JM
9852 itype
9853 = fold (build_binary_op (MINUS_EXPR,
37c46b43
MS
9854 cp_convert (index_type, size),
9855 cp_convert (index_type,
9856 integer_one_node), 1));
b7484fbe
MS
9857 if (! TREE_CONSTANT (itype))
9858 itype = variable_size (itype);
594740f3
MS
9859 else if (TREE_OVERFLOW (itype))
9860 {
8251199e 9861 error ("overflow in array dimension");
594740f3
MS
9862 TREE_OVERFLOW (itype) = 0;
9863 }
fc378698
MS
9864
9865 /* If we're a parm, we need to have a permanent type so
9866 mangling checks for re-use will work right. If both the
9867 element and index types are permanent, the array type
9868 will be, too. */
9869 if (decl_context == PARM
9870 && allocation_temporary_p () && TREE_PERMANENT (type))
9871 {
9872 push_obstacks (&permanent_obstack, &permanent_obstack);
9873 itype = build_index_type (itype);
9874 pop_obstacks ();
9875 }
9876 else
9877 itype = build_index_type (itype);
9878
5566b478 9879 dont_grok_size:
8d08fdba
MS
9880 resume_momentary (yes);
9881 }
9882
8d08fdba 9883 type = build_cplus_array_type (type, itype);
8d08fdba
MS
9884 ctype = NULL_TREE;
9885 }
9886 break;
9887
9888 case CALL_EXPR:
9889 {
9890 tree arg_types;
f376e137
MS
9891 int funcdecl_p;
9892 tree inner_parms = TREE_OPERAND (declarator, 1);
9893 tree inner_decl = TREE_OPERAND (declarator, 0);
8d08fdba
MS
9894
9895 /* Declaring a function type.
9896 Make sure we have a valid type for the function to return. */
8d08fdba 9897
91063b51 9898 /* We now know that the TYPE_QUALS don't apply to the
14ae7e7d 9899 decl, but to its return type. */
91063b51 9900 type_quals = TYPE_UNQUALIFIED;
8d08fdba
MS
9901
9902 /* Warn about some types functions can't return. */
9903
9904 if (TREE_CODE (type) == FUNCTION_TYPE)
9905 {
8251199e 9906 error ("`%s' declared as function returning a function", name);
8d08fdba
MS
9907 type = integer_type_node;
9908 }
9909 if (TREE_CODE (type) == ARRAY_TYPE)
9910 {
8251199e 9911 error ("`%s' declared as function returning an array", name);
8d08fdba
MS
9912 type = integer_type_node;
9913 }
9914
f376e137
MS
9915 if (inner_decl && TREE_CODE (inner_decl) == SCOPE_REF)
9916 inner_decl = TREE_OPERAND (inner_decl, 1);
9917
386b8a85
JM
9918 if (inner_decl && TREE_CODE (inner_decl) == TEMPLATE_ID_EXPR)
9919 inner_decl = dname;
9920
b7484fbe
MS
9921 /* Pick up type qualifiers which should be applied to `this'. */
9922 quals = TREE_OPERAND (declarator, 2);
9923
c11b6f21
MS
9924 /* Pick up the exception specifications. */
9925 raises = TREE_TYPE (declarator);
9926
f376e137
MS
9927 /* Say it's a definition only for the CALL_EXPR
9928 closest to the identifier. */
beb53fb8 9929 funcdecl_p
386b8a85
JM
9930 = inner_decl
9931 && (TREE_CODE (inner_decl) == IDENTIFIER_NODE
9932 || TREE_CODE (inner_decl) == TEMPLATE_ID_EXPR
9933 || TREE_CODE (inner_decl) == BIT_NOT_EXPR);
9934
8d08fdba
MS
9935 if (ctype == NULL_TREE
9936 && decl_context == FIELD
f376e137 9937 && funcdecl_p
8d08fdba
MS
9938 && (friendp == 0 || dname == current_class_name))
9939 ctype = current_class_type;
9940
51c184be 9941 if (ctype && return_type == return_conversion)
8d08fdba
MS
9942 TYPE_HAS_CONVERSION (ctype) = 1;
9943 if (ctype && constructor_name (ctype) == dname)
9944 {
9945 /* We are within a class's scope. If our declarator name
9946 is the same as the class name, and we are defining
9947 a function, then it is a constructor/destructor, and
9948 therefore returns a void type. */
9949
9950 if (flags == DTOR_FLAG)
9951 {
9952 /* ANSI C++ June 5 1992 WP 12.4.1. A destructor may
9953 not be declared const or volatile. A destructor
9954 may not be static. */
9955 if (staticp == 2)
8251199e 9956 error ("destructor cannot be static member function");
b7484fbe 9957 if (quals)
8d08fdba 9958 {
4f70a846
MM
9959 cp_error ("destructors may not be `%s'",
9960 IDENTIFIER_POINTER (TREE_VALUE (quals)));
9961 quals = NULL_TREE;
8d08fdba
MS
9962 }
9963 if (decl_context == FIELD)
9964 {
9965 if (! member_function_or_else (ctype, current_class_type,
9966 "destructor for alien class `%s' cannot be a member"))
9967 return void_type_node;
9968 }
9969 }
2c73f9f5 9970 else /* It's a constructor. */
8d08fdba 9971 {
db5ae43f
MS
9972 if (explicitp == 1)
9973 explicitp = 2;
8d08fdba
MS
9974 /* ANSI C++ June 5 1992 WP 12.1.2. A constructor may
9975 not be declared const or volatile. A constructor may
9976 not be virtual. A constructor may not be static. */
9977 if (staticp == 2)
8251199e 9978 error ("constructor cannot be static member function");
8d08fdba
MS
9979 if (virtualp)
9980 {
8251199e 9981 pedwarn ("constructors cannot be declared virtual");
8d08fdba
MS
9982 virtualp = 0;
9983 }
b7484fbe 9984 if (quals)
8d08fdba 9985 {
4f70a846
MM
9986 cp_error ("constructors may not be `%s'",
9987 IDENTIFIER_POINTER (TREE_VALUE (quals)));
9988 quals = NULL_TREE;
8d08fdba 9989 }
8d08fdba 9990 {
51c184be 9991 RID_BIT_TYPE tmp_bits;
fc378698 9992 bcopy ((void*)&specbits, (void*)&tmp_bits, sizeof (RID_BIT_TYPE));
51c184be
MS
9993 RIDBIT_RESET (RID_INLINE, tmp_bits);
9994 RIDBIT_RESET (RID_STATIC, tmp_bits);
9995 if (RIDBIT_ANY_SET (tmp_bits))
8251199e 9996 error ("return value type specifier for constructor ignored");
8d08fdba 9997 }
f30432d7 9998 type = build_pointer_type (ctype);
beb53fb8
JM
9999 if (decl_context == FIELD
10000 && IS_SIGNATURE (current_class_type))
8d08fdba 10001 {
8251199e 10002 error ("constructor not allowed in signature");
8d08fdba
MS
10003 return void_type_node;
10004 }
10005 else if (decl_context == FIELD)
10006 {
10007 if (! member_function_or_else (ctype, current_class_type,
10008 "constructor for alien class `%s' cannot be member"))
10009 return void_type_node;
10010 TYPE_HAS_CONSTRUCTOR (ctype) = 1;
10011 if (return_type != return_ctor)
10012 return NULL_TREE;
10013 }
10014 }
10015 if (decl_context == FIELD)
10016 staticp = 0;
10017 }
b7484fbe 10018 else if (friendp)
8d08fdba 10019 {
b7484fbe 10020 if (initialized)
8251199e 10021 error ("can't initialize friend function `%s'", name);
b7484fbe
MS
10022 if (virtualp)
10023 {
10024 /* Cannot be both friend and virtual. */
8251199e 10025 error ("virtual functions cannot be friends");
b7484fbe
MS
10026 RIDBIT_RESET (RID_FRIEND, specbits);
10027 friendp = 0;
10028 }
28cbf42c 10029 if (decl_context == NORMAL)
8251199e 10030 error ("friend declaration not in class definition");
28cbf42c 10031 if (current_function_decl && funcdef_flag)
8251199e 10032 cp_error ("can't define friend function `%s' in a local class definition",
28cbf42c 10033 name);
8d08fdba
MS
10034 }
10035
8d08fdba
MS
10036 /* Construct the function type and go to the next
10037 inner layer of declarator. */
10038
f376e137 10039 declarator = TREE_OPERAND (declarator, 0);
8d08fdba 10040
f376e137
MS
10041 /* FIXME: This is where default args should be fully
10042 processed. */
8d08fdba 10043
f376e137 10044 arg_types = grokparms (inner_parms, funcdecl_p ? funcdef_flag : 0);
8d08fdba 10045
4f70a846 10046 if (declarator && flags == DTOR_FLAG)
8d08fdba 10047 {
4f70a846
MM
10048 /* A destructor declared in the body of a class will
10049 be represented as a BIT_NOT_EXPR. But, we just
10050 want the underlying IDENTIFIER. */
8d08fdba 10051 if (TREE_CODE (declarator) == BIT_NOT_EXPR)
4f70a846
MM
10052 declarator = TREE_OPERAND (declarator, 0);
10053
10054 if (strict_prototype == 0 && arg_types == NULL_TREE)
10055 arg_types = void_list_node;
10056 else if (arg_types == NULL_TREE
10057 || arg_types != void_list_node)
8d08fdba 10058 {
4f70a846
MM
10059 cp_error ("destructors may not have parameters");
10060 arg_types = void_list_node;
10061 last_function_parms = NULL_TREE;
8d08fdba
MS
10062 }
10063 }
10064
d22c8596 10065 /* ANSI says that `const int foo ();'
8d08fdba 10066 does not make the function foo const. */
d22c8596 10067 type = build_function_type (type, arg_types);
42976354
BK
10068
10069 {
10070 tree t;
10071 for (t = arg_types; t; t = TREE_CHAIN (t))
10072 if (TREE_PURPOSE (t)
10073 && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
10074 {
10075 add_defarg_fn (type);
10076 break;
10077 }
10078 }
8d08fdba
MS
10079 }
10080 break;
10081
10082 case ADDR_EXPR:
10083 case INDIRECT_REF:
10084 /* Filter out pointers-to-references and references-to-references.
10085 We can get these if a TYPE_DECL is used. */
10086
10087 if (TREE_CODE (type) == REFERENCE_TYPE)
10088 {
8251199e 10089 error ("cannot declare %s to references",
8d08fdba
MS
10090 TREE_CODE (declarator) == ADDR_EXPR
10091 ? "references" : "pointers");
10092 declarator = TREE_OPERAND (declarator, 0);
10093 continue;
10094 }
10095
a5894242
MS
10096 if (TREE_CODE (type) == OFFSET_TYPE
10097 && (TREE_CODE (TREE_TYPE (type)) == VOID_TYPE
10098 || TREE_CODE (TREE_TYPE (type)) == REFERENCE_TYPE))
10099 {
8251199e 10100 cp_error ("cannot declare pointer to `%#T' member",
a5894242
MS
10101 TREE_TYPE (type));
10102 type = TREE_TYPE (type);
10103 }
10104
61a127b3
MM
10105 /* Merge any constancy or volatility into the target type
10106 for the pointer. */
10107
91063b51
MM
10108 /* We now know that the TYPE_QUALS don't apply to the decl,
10109 but to the target of the pointer. */
10110 type_quals = TYPE_UNQUALIFIED;
8d08fdba
MS
10111
10112 if (IS_SIGNATURE (type))
10113 {
10114 if (TREE_CODE (declarator) == ADDR_EXPR)
10115 {
63718c49
GB
10116 if (CLASSTYPE_METHOD_VEC (type) == NULL_TREE
10117 && TYPE_SIZE (type))
8251199e 10118 cp_warning ("empty signature `%T' used in signature reference declaration",
63718c49 10119 type);
8d08fdba 10120#if 0
14ae7e7d 10121 type = build_signature_reference_type (type);
8d08fdba
MS
10122#else
10123 sorry ("signature reference");
10124 return NULL_TREE;
10125#endif
10126 }
10127 else
10128 {
63718c49
GB
10129 if (CLASSTYPE_METHOD_VEC (type) == NULL_TREE
10130 && TYPE_SIZE (type))
8251199e 10131 cp_warning ("empty signature `%T' used in signature pointer declaration",
63718c49 10132 type);
14ae7e7d 10133 type = build_signature_pointer_type (type);
8d08fdba 10134 }
8d08fdba
MS
10135 }
10136 else if (TREE_CODE (declarator) == ADDR_EXPR)
10137 {
69851283
MM
10138 if (TREE_CODE (type) == VOID_TYPE)
10139 error ("invalid type: `void &'");
8d08fdba 10140 else
69851283 10141 type = build_reference_type (type);
8d08fdba
MS
10142 }
10143 else if (TREE_CODE (type) == METHOD_TYPE)
10144 {
10145 type = build_ptrmemfunc_type (build_pointer_type (type));
10146 }
10147 else
10148 type = build_pointer_type (type);
10149
10150 /* Process a list of type modifier keywords (such as
10151 const or volatile) that were given inside the `*' or `&'. */
10152
10153 if (TREE_TYPE (declarator))
10154 {
10155 register tree typemodlist;
10156 int erred = 0;
91063b51
MM
10157
10158 constp = 0;
10159 volatilep = 0;
10160 restrictp = 0;
8d08fdba
MS
10161 for (typemodlist = TREE_TYPE (declarator); typemodlist;
10162 typemodlist = TREE_CHAIN (typemodlist))
10163 {
91063b51
MM
10164 tree qualifier = TREE_VALUE (typemodlist);
10165
10166 if (qualifier == ridpointers[(int) RID_CONST])
8d08fdba 10167 constp++;
91063b51 10168 else if (qualifier == ridpointers[(int) RID_VOLATILE])
8d08fdba 10169 volatilep++;
91063b51
MM
10170 else if (qualifier == ridpointers[(int) RID_RESTRICT])
10171 restrictp++;
8d08fdba
MS
10172 else if (!erred)
10173 {
10174 erred = 1;
91063b51 10175 error ("invalid type modifier within pointer declarator");
8d08fdba
MS
10176 }
10177 }
10178 if (constp > 1)
8251199e 10179 pedwarn ("duplicate `const'");
8d08fdba 10180 if (volatilep > 1)
8251199e 10181 pedwarn ("duplicate `volatile'");
91063b51
MM
10182 if (restrictp > 1)
10183 pedwarn ("duplicate `restrict'");
10184
10185 type_quals = ((constp ? TYPE_QUAL_CONST : 0)
10186 | (restrictp ? TYPE_QUAL_RESTRICT : 0)
10187 | (volatilep ? TYPE_QUAL_VOLATILE : 0));
a0a33927
MS
10188 if (TREE_CODE (declarator) == ADDR_EXPR
10189 && (constp || volatilep))
10190 {
10191 if (constp)
8251199e 10192 pedwarn ("discarding `const' applied to a reference");
a0a33927 10193 if (volatilep)
8251199e 10194 pedwarn ("discarding `volatile' applied to a reference");
91063b51 10195 type_quals &= ~(TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE);
a0a33927 10196 }
91063b51 10197 type = cp_build_qualified_type (type, type_quals);
8d08fdba
MS
10198 }
10199 declarator = TREE_OPERAND (declarator, 0);
10200 ctype = NULL_TREE;
10201 break;
10202
10203 case SCOPE_REF:
10204 {
10205 /* We have converted type names to NULL_TREE if the
10206 name was bogus, or to a _TYPE node, if not.
10207
10208 The variable CTYPE holds the type we will ultimately
10209 resolve to. The code here just needs to build
10210 up appropriate member types. */
10211 tree sname = TREE_OPERAND (declarator, 1);
386b8a85
JM
10212 tree t;
10213
8d08fdba
MS
10214 /* Destructors can have their visibilities changed as well. */
10215 if (TREE_CODE (sname) == BIT_NOT_EXPR)
10216 sname = TREE_OPERAND (sname, 0);
10217
10218 if (TREE_COMPLEXITY (declarator) == 0)
10219 /* This needs to be here, in case we are called
10220 multiple times. */ ;
9a68c51f
JM
10221 else if (TREE_COMPLEXITY (declarator) == -1)
10222 /* Namespace member. */
10223 pop_decl_namespace ();
8d08fdba 10224 else if (friendp && (TREE_COMPLEXITY (declarator) < 2))
2c73f9f5 10225 /* Don't fall out into global scope. Hides real bug? --eichin */ ;
5566b478
MS
10226 else if (! IS_AGGR_TYPE_CODE
10227 (TREE_CODE (TREE_OPERAND (declarator, 0))))
10228 ;
8d08fdba
MS
10229 else if (TREE_COMPLEXITY (declarator) == current_class_depth)
10230 {
9a3b49ac
MS
10231 /* Resolve any TYPENAME_TYPEs from the decl-specifier-seq
10232 that refer to ctype. They couldn't be resolved earlier
10233 because we hadn't pushed into the class yet.
10234 Example: resolve 'B<T>::type' in
10235 'B<typename B<T>::type> B<T>::f () { }'. */
10236 if (current_template_parms
10237 && uses_template_parms (type)
10238 && uses_template_parms (current_class_type))
10239 {
10240 tree args = current_template_args ();
f7d98d58 10241 type = tsubst (type, args, NULL_TREE);
9a3b49ac
MS
10242 }
10243
a28e3c7f
MS
10244 /* This pop_nested_class corresponds to the
10245 push_nested_class used to push into class scope for
10246 parsing the argument list of a function decl, in
10247 qualified_id. */
8d08fdba
MS
10248 pop_nested_class (1);
10249 TREE_COMPLEXITY (declarator) = current_class_depth;
10250 }
10251 else
10252 my_friendly_abort (16);
10253
10254 if (TREE_OPERAND (declarator, 0) == NULL_TREE)
10255 {
10256 /* We had a reference to a global decl, or
10257 perhaps we were given a non-aggregate typedef,
10258 in which case we cleared this out, and should just
10259 keep going as though it wasn't there. */
10260 declarator = sname;
10261 continue;
10262 }
10263 ctype = TREE_OPERAND (declarator, 0);
10264
386b8a85 10265 t = ctype;
7ddedda4 10266 while (t != NULL_TREE && CLASS_TYPE_P (t))
386b8a85 10267 {
75650646
MM
10268 if (CLASSTYPE_TEMPLATE_INFO (t) &&
10269 !CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
386b8a85
JM
10270 template_count += 1;
10271 t = TYPE_MAIN_DECL (t);
10272 if (DECL_LANG_SPECIFIC (t))
10273 t = DECL_CLASS_CONTEXT (t);
10274 else
10275 t = NULL_TREE;
10276 }
10277
8d08fdba
MS
10278 if (sname == NULL_TREE)
10279 goto done_scoping;
10280
10281 if (TREE_CODE (sname) == IDENTIFIER_NODE)
10282 {
10283 /* This is the `standard' use of the scoping operator:
10284 basetype :: member . */
10285
db5ae43f 10286 if (ctype == current_class_type)
28cbf42c
MS
10287 {
10288 /* class A {
10289 void A::f ();
10290 };
10291
10292 Is this ill-formed? */
10293
10294 if (pedantic)
8251199e 10295 cp_pedwarn ("extra qualification `%T::' on member `%s' ignored",
28cbf42c
MS
10296 ctype, name);
10297 }
db5ae43f 10298 else if (TREE_CODE (type) == FUNCTION_TYPE)
8d08fdba
MS
10299 {
10300 if (current_class_type == NULL_TREE
8d08fdba 10301 || friendp)
14ae7e7d
JM
10302 type = build_cplus_method_type (ctype, TREE_TYPE (type),
10303 TYPE_ARG_TYPES (type));
8d08fdba
MS
10304 else
10305 {
8251199e 10306 cp_error ("cannot declare member function `%T::%s' within `%T'",
a3203465 10307 ctype, name, current_class_type);
8d08fdba
MS
10308 return void_type_node;
10309 }
10310 }
5566b478
MS
10311 else if (RIDBIT_SETP (RID_TYPEDEF, specbits)
10312 || TYPE_SIZE (complete_type (ctype)) != NULL_TREE)
8d08fdba 10313 {
2c73f9f5 10314 /* Have to move this code elsewhere in this function.
db5ae43f
MS
10315 this code is used for i.e., typedef int A::M; M *pm;
10316
10317 It is? How? jason 10/2/94 */
8d08fdba 10318
8d08fdba
MS
10319 if (current_class_type)
10320 {
8251199e 10321 cp_error ("cannot declare member `%T::%s' within `%T'",
db5ae43f
MS
10322 ctype, name, current_class_type);
10323 return void_type_node;
8d08fdba
MS
10324 }
10325 type = build_offset_type (ctype, type);
10326 }
10327 else if (uses_template_parms (ctype))
10328 {
8d08fdba 10329 if (TREE_CODE (type) == FUNCTION_TYPE)
beb53fb8 10330 type
14ae7e7d 10331 = build_cplus_method_type (ctype, TREE_TYPE (type),
beb53fb8 10332 TYPE_ARG_TYPES (type));
8d08fdba
MS
10333 }
10334 else
10335 {
8251199e 10336 cp_error ("structure `%T' not yet defined", ctype);
8d08fdba
MS
10337 return error_mark_node;
10338 }
10339
10340 declarator = sname;
10341 }
8d08fdba
MS
10342 else if (TREE_CODE (sname) == SCOPE_REF)
10343 my_friendly_abort (17);
10344 else
10345 {
10346 done_scoping:
10347 declarator = TREE_OPERAND (declarator, 1);
10348 if (declarator && TREE_CODE (declarator) == CALL_EXPR)
10349 /* In this case, we will deal with it later. */
10350 ;
10351 else
10352 {
10353 if (TREE_CODE (type) == FUNCTION_TYPE)
14ae7e7d
JM
10354 type = build_cplus_method_type (ctype, TREE_TYPE (type),
10355 TYPE_ARG_TYPES (type));
8d08fdba
MS
10356 else
10357 type = build_offset_type (ctype, type);
10358 }
10359 }
10360 }
10361 break;
10362
10363 case BIT_NOT_EXPR:
10364 declarator = TREE_OPERAND (declarator, 0);
10365 break;
10366
8d08fdba
MS
10367 case RECORD_TYPE:
10368 case UNION_TYPE:
10369 case ENUMERAL_TYPE:
10370 declarator = NULL_TREE;
10371 break;
10372
10373 case ERROR_MARK:
10374 declarator = NULL_TREE;
10375 break;
10376
10377 default:
10378 my_friendly_abort (158);
10379 }
10380 }
10381
1eab9b56
JM
10382 /* See the comment for the TREE_LIST case, above. */
10383 if (inner_attrs)
10384 {
10385 if (! ignore_attrs)
10386 decl_attributes (type, inner_attrs, NULL_TREE);
10387 else if (attrlist)
10388 TREE_VALUE (attrlist) = chainon (inner_attrs, TREE_VALUE (attrlist));
10389 else
10390 attrlist = build_decl_list (NULL_TREE, inner_attrs);
10391 }
10392
db5ae43f
MS
10393 if (explicitp == 1)
10394 {
8251199e 10395 error ("only constructors can be declared `explicit'");
db5ae43f
MS
10396 explicitp = 0;
10397 }
10398
8d08fdba
MS
10399 /* Now TYPE has the actual type. */
10400
10401 /* If this is declaring a typedef name, return a TYPE_DECL. */
10402
f30432d7
MS
10403 if (RIDBIT_SETP (RID_MUTABLE, specbits))
10404 {
91063b51 10405 if (type_quals & TYPE_QUAL_CONST)
f30432d7 10406 {
8251199e 10407 error ("const `%s' cannot be declared `mutable'", name);
f30432d7
MS
10408 RIDBIT_RESET (RID_MUTABLE, specbits);
10409 }
10410 else if (staticp)
10411 {
8251199e 10412 error ("static `%s' cannot be declared `mutable'", name);
f30432d7
MS
10413 RIDBIT_RESET (RID_MUTABLE, specbits);
10414 }
10415 }
10416
fc378698 10417 if (RIDBIT_SETP (RID_TYPEDEF, specbits) && decl_context != TYPENAME)
8d08fdba
MS
10418 {
10419 tree decl;
10420
10421 /* Note that the grammar rejects storage classes
10422 in typenames, fields or parameters. */
eff71ab0
PB
10423 if (current_lang_name == lang_name_java)
10424 TYPE_FOR_JAVA (type) = 1;
8d08fdba 10425
d2e5ee5c
MS
10426 if (decl_context == FIELD)
10427 {
094fe153 10428 if (declarator == constructor_name (current_class_type))
8251199e 10429 cp_pedwarn ("ANSI C++ forbids nested type `%D' with same name as enclosing class",
d2e5ee5c
MS
10430 declarator);
10431 decl = build_lang_decl (TYPE_DECL, declarator, type);
10432 if (IS_SIGNATURE (current_class_type) && opaque_typedef)
10433 SIGNATURE_HAS_OPAQUE_TYPEDECLS (current_class_type) = 1;
10434 }
10435 else
7fb4a8f7
JM
10436 {
10437 /* Make sure this typedef lives as long as its type,
10438 since it might be used as a template parameter. */
1aed5355
MM
10439 if (type != error_mark_node)
10440 push_obstacks (TYPE_OBSTACK (type), TYPE_OBSTACK (type));
7fb4a8f7 10441 decl = build_decl (TYPE_DECL, declarator, type);
1aed5355
MM
10442 if (type != error_mark_node)
10443 pop_obstacks ();
7fb4a8f7 10444 }
d2e5ee5c 10445
8d08fdba
MS
10446 /* If the user declares "struct {...} foo" then `foo' will have
10447 an anonymous name. Fill that name in now. Nothing can
10448 refer to it, so nothing needs know about the name change.
10449 The TYPE_NAME field was filled in by build_struct_xref. */
10450 if (type != error_mark_node
10451 && TYPE_NAME (type)
10452 && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
10453 && ANON_AGGRNAME_P (TYPE_IDENTIFIER (type)))
10454 {
61a127b3
MM
10455 /* FIXME: This is bogus; we should not be doing this for
10456 cv-qualified types. */
10457
0d2a8b1b
BK
10458 /* For anonymous structs that are cv-qualified, need to use
10459 TYPE_MAIN_VARIANT so that name will mangle correctly. As
10460 type not referenced after this block, don't bother
10461 resetting type to original type, ie. TREE_TYPE (decl). */
10462 type = TYPE_MAIN_VARIANT (type);
10463
2c73f9f5 10464 /* Replace the anonymous name with the real name everywhere. */
8d08fdba 10465 lookup_tag_reverse (type, declarator);
d2e5ee5c 10466 TYPE_NAME (type) = decl;
8d08fdba
MS
10467
10468 if (TYPE_LANG_SPECIFIC (type))
10469 TYPE_WAS_ANONYMOUS (type) = 1;
10470
33964bf4
MM
10471 /* If this is a typedef within a template class, the nested
10472 type is a (non-primary) template. The name for the
10473 template needs updating as well. */
10474 if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
10475 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type))
10476 = TYPE_IDENTIFIER (type);
10477
2c73f9f5
ML
10478 /* XXX Temporarily set the scope.
10479 When returning, start_decl expects it as NULL_TREE,
10480 and will then then set it using pushdecl. */
10481 my_friendly_assert (DECL_CONTEXT (decl) == NULL_TREE, 980404);
10482 if (current_class_type)
10483 DECL_CONTEXT (decl) = current_class_type;
10484 else
cb0dbb9a 10485 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
2c73f9f5 10486
d2e5ee5c
MS
10487 DECL_ASSEMBLER_NAME (decl) = DECL_NAME (decl);
10488 DECL_ASSEMBLER_NAME (decl)
10489 = get_identifier (build_overload_name (type, 1, 1));
2c73f9f5 10490 DECL_CONTEXT (decl) = NULL_TREE;
50a6dbd7
JM
10491
10492 /* FIXME remangle member functions; member functions of a
10493 type with external linkage have external linkage. */
fc378698 10494 }
fc378698 10495
8d08fdba
MS
10496 if (TREE_CODE (type) == OFFSET_TYPE || TREE_CODE (type) == METHOD_TYPE)
10497 {
8251199e 10498 cp_error_at ("typedef name may not be class-qualified", decl);
a3203465 10499 return NULL_TREE;
8d08fdba
MS
10500 }
10501 else if (quals)
10502 {
10503 if (ctype == NULL_TREE)
10504 {
10505 if (TREE_CODE (type) != METHOD_TYPE)
8251199e 10506 cp_error_at ("invalid type qualifier for non-method type", decl);
8d08fdba
MS
10507 else
10508 ctype = TYPE_METHOD_BASETYPE (type);
10509 }
10510 if (ctype != NULL_TREE)
10511 grok_method_quals (ctype, decl, quals);
10512 }
10513
10514 if (RIDBIT_SETP (RID_SIGNED, specbits)
10515 || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
10516 C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
10517
10518 if (RIDBIT_SETP (RID_MUTABLE, specbits))
61a127b3 10519 error ("non-object member `%s' cannot be declared mutable", name);
8d08fdba 10520
c91a56d2
MS
10521 bad_specifiers (decl, "type", virtualp, quals != NULL_TREE,
10522 inlinep, friendp, raises != NULL_TREE);
10523
10524 if (initialized)
8251199e 10525 error ("typedef declaration includes an initializer");
c91a56d2 10526
8d08fdba
MS
10527 return decl;
10528 }
10529
10530 /* Detect the case of an array type of unspecified size
10531 which came, as such, direct from a typedef name.
10532 We must copy the type, so that each identifier gets
10533 a distinct type, so that each identifier's size can be
10534 controlled separately by its own initializer. */
10535
10536 if (type == typedef_type && TREE_CODE (type) == ARRAY_TYPE
10537 && TYPE_DOMAIN (type) == NULL_TREE)
10538 {
10539 type = build_cplus_array_type (TREE_TYPE (type), TYPE_DOMAIN (type));
10540 }
10541
10542 /* If this is a type name (such as, in a cast or sizeof),
10543 compute the type and return it now. */
10544
10545 if (decl_context == TYPENAME)
10546 {
10547 /* Note that the grammar rejects storage classes
10548 in typenames, fields or parameters. */
91063b51 10549 if (type_quals != TYPE_UNQUALIFIED)
a703fb38
KG
10550 {
10551 if (IS_SIGNATURE (type))
91063b51
MM
10552 error ("type qualifiers specified for signature type");
10553 type_quals = TYPE_UNQUALIFIED;
a703fb38 10554 }
8d08fdba
MS
10555
10556 /* Special case: "friend class foo" looks like a TYPENAME context. */
10557 if (friendp)
10558 {
91063b51 10559 if (type_quals != TYPE_UNQUALIFIED)
b7484fbe 10560 {
91063b51
MM
10561 cp_error ("type qualifiers specified for friend class declaration");
10562 type_quals = TYPE_UNQUALIFIED;
b7484fbe
MS
10563 }
10564 if (inlinep)
10565 {
8251199e 10566 cp_error ("`inline' specified for friend class declaration");
b7484fbe
MS
10567 inlinep = 0;
10568 }
10569
10570 /* Only try to do this stuff if we didn't already give up. */
10571 if (type != integer_type_node)
10572 {
10573 /* A friendly class? */
10574 if (current_class_type)
10575 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type));
10576 else
8251199e 10577 error ("trying to make class `%s' a friend of global scope",
b7484fbe
MS
10578 TYPE_NAME_STRING (type));
10579 type = void_type_node;
10580 }
8d08fdba
MS
10581 }
10582 else if (quals)
10583 {
8d08fdba 10584 tree dummy = build_decl (TYPE_DECL, declarator, type);
8d08fdba
MS
10585 if (ctype == NULL_TREE)
10586 {
10587 my_friendly_assert (TREE_CODE (type) == METHOD_TYPE, 159);
10588 ctype = TYPE_METHOD_BASETYPE (type);
10589 }
10590 grok_method_quals (ctype, dummy, quals);
10591 type = TREE_TYPE (dummy);
10592 }
10593
10594 return type;
10595 }
10596 else if (declarator == NULL_TREE && decl_context != PARM
db5ae43f 10597 && decl_context != CATCHPARM
8d08fdba
MS
10598 && TREE_CODE (type) != UNION_TYPE
10599 && ! bitfield)
10600 {
8251199e 10601 cp_error ("abstract declarator `%T' used as declaration", type);
8d08fdba
MS
10602 declarator = make_anon_name ();
10603 }
10604
10605 /* `void' at top level (not within pointer)
10606 is allowed only in typedefs or type names.
10607 We don't complain about parms either, but that is because
10608 a better error message can be made later. */
10609
a1774733 10610 if (TREE_CODE (type) == VOID_TYPE && decl_context != PARM)
8d08fdba 10611 {
b7484fbe 10612 if (! declarator)
8251199e 10613 error ("unnamed variable or field declared void");
b7484fbe 10614 else if (TREE_CODE (declarator) == IDENTIFIER_NODE)
8d08fdba
MS
10615 {
10616 if (IDENTIFIER_OPNAME_P (declarator))
8d08fdba 10617 my_friendly_abort (356);
8d08fdba 10618 else
8251199e 10619 error ("variable or field `%s' declared void", name);
8d08fdba
MS
10620 }
10621 else
8251199e 10622 error ("variable or field declared void");
8d08fdba
MS
10623 type = integer_type_node;
10624 }
10625
10626 /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
10627 or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE. */
10628
14ae7e7d
JM
10629 if (decl_context == PARM || decl_context == CATCHPARM)
10630 {
10631 if (ctype || in_namespace)
10632 error ("cannot use `::' in parameter declaration");
10633
10634 /* A parameter declared as an array of T is really a pointer to T.
10635 One declared as a function is really a pointer to a function.
10636 One declared as a member is really a pointer to member. */
10637
10638 if (TREE_CODE (type) == ARRAY_TYPE)
10639 {
10640 /* Transfer const-ness of array into that of type pointed to. */
10641 type = build_pointer_type (TREE_TYPE (type));
91063b51 10642 type_quals = TYPE_UNQUALIFIED;
14ae7e7d
JM
10643 }
10644 else if (TREE_CODE (type) == FUNCTION_TYPE)
10645 type = build_pointer_type (type);
10646 else if (TREE_CODE (type) == OFFSET_TYPE)
10647 type = build_pointer_type (type);
10648 else if (TREE_CODE (type) == VOID_TYPE && declarator)
10649 {
10650 error ("declaration of `%s' as void", name);
10651 return NULL_TREE;
10652 }
10653 }
10654
8d08fdba
MS
10655 {
10656 register tree decl;
10657
10658 if (decl_context == PARM)
10659 {
ff350acd 10660 decl = build_decl (PARM_DECL, declarator, type);
8d08fdba
MS
10661
10662 bad_specifiers (decl, "parameter", virtualp, quals != NULL_TREE,
10663 inlinep, friendp, raises != NULL_TREE);
10664 if (current_class_type
10665 && IS_SIGNATURE (current_class_type))
10666 {
10667 if (inlinep)
8251199e 10668 error ("parameter of signature member function declared `inline'");
8d08fdba 10669 if (RIDBIT_SETP (RID_AUTO, specbits))
8251199e 10670 error ("parameter of signature member function declared `auto'");
8d08fdba 10671 if (RIDBIT_SETP (RID_REGISTER, specbits))
8251199e 10672 error ("parameter of signature member function declared `register'");
8d08fdba
MS
10673 }
10674
10675 /* Compute the type actually passed in the parmlist,
10676 for the case where there is no prototype.
10677 (For example, shorts and chars are passed as ints.)
10678 When there is a prototype, this is overridden later. */
10679
39211cd5 10680 DECL_ARG_TYPE (decl) = type_promotes_to (type);
8d08fdba
MS
10681 }
10682 else if (decl_context == FIELD)
10683 {
10684 if (type == error_mark_node)
10685 {
10686 /* Happens when declaring arrays of sizes which
10687 are error_mark_node, for example. */
10688 decl = NULL_TREE;
10689 }
997a088c 10690 else if (in_namespace && !friendp)
05008fb9
MM
10691 {
10692 /* Something like struct S { int N::j; }; */
8251199e 10693 cp_error ("invalid use of `::'");
05008fb9
MM
10694 decl = NULL_TREE;
10695 }
8d08fdba
MS
10696 else if (TREE_CODE (type) == FUNCTION_TYPE)
10697 {
10698 int publicp = 0;
e1467ff2 10699 tree function_context;
8d08fdba 10700
72b7eeff
MS
10701 /* We catch the others as conflicts with the builtin
10702 typedefs. */
10703 if (friendp && declarator == ridpointers[(int) RID_SIGNED])
10704 {
8251199e 10705 cp_error ("function `%D' cannot be declared friend",
72b7eeff
MS
10706 declarator);
10707 friendp = 0;
10708 }
10709
8d08fdba
MS
10710 if (friendp == 0)
10711 {
10712 if (ctype == NULL_TREE)
10713 ctype = current_class_type;
10714
10715 if (ctype == NULL_TREE)
10716 {
8251199e 10717 cp_error ("can't make `%D' into a method -- not in a class",
8d08fdba
MS
10718 declarator);
10719 return void_type_node;
10720 }
10721
10722 /* ``A union may [ ... ] not [ have ] virtual functions.''
10723 ARM 9.5 */
10724 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
10725 {
8251199e 10726 cp_error ("function `%D' declared virtual inside a union",
8d08fdba
MS
10727 declarator);
10728 return void_type_node;
10729 }
10730
10731 if (declarator == ansi_opname[(int) NEW_EXPR]
a28e3c7f
MS
10732 || declarator == ansi_opname[(int) VEC_NEW_EXPR]
10733 || declarator == ansi_opname[(int) DELETE_EXPR]
10734 || declarator == ansi_opname[(int) VEC_DELETE_EXPR])
8d08fdba
MS
10735 {
10736 if (virtualp)
10737 {
8251199e 10738 cp_error ("`%D' cannot be declared virtual, since it is always static",
8d08fdba
MS
10739 declarator);
10740 virtualp = 0;
10741 }
10742 }
10743 else if (staticp < 2)
14ae7e7d
JM
10744 type = build_cplus_method_type (ctype, TREE_TYPE (type),
10745 TYPE_ARG_TYPES (type));
8d08fdba
MS
10746 }
10747
10748 /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node. */
e1467ff2
MM
10749 function_context = (ctype != NULL_TREE) ?
10750 hack_decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
10751 publicp = (! friendp || ! staticp)
10752 && function_context == NULL_TREE;
386b8a85
JM
10753 decl = grokfndecl (ctype, type,
10754 TREE_CODE (declarator) != TEMPLATE_ID_EXPR
10755 ? declarator : dname,
10756 declarator,
f30432d7 10757 virtualp, flags, quals, raises, attrlist,
386b8a85 10758 friendp ? -1 : 0, friendp, publicp, inlinep,
2c73f9f5 10759 funcdef_flag, template_count, in_namespace);
3ddfb0e6
MM
10760 if (decl == NULL_TREE || decl == error_mark_node)
10761 return decl;
6125f3be
DE
10762#if 0
10763 /* This clobbers the attrs stored in `decl' from `attrlist'. */
10764 /* The decl and setting of decl_machine_attr is also turned off. */
71851aaa 10765 decl = build_decl_attribute_variant (decl, decl_machine_attr);
6125f3be 10766#endif
f0e01782 10767
cc804e51
MM
10768 /* [class.conv.ctor]
10769
10770 A constructor declared without the function-specifier
10771 explicit that can be called with a single parameter
10772 specifies a conversion from the type of its first
10773 parameter to the type of its class. Such a constructor
10774 is called a converting constructor. */
db5ae43f
MS
10775 if (explicitp == 2)
10776 DECL_NONCONVERTING_P (decl) = 1;
cc804e51
MM
10777 else if (DECL_CONSTRUCTOR_P (decl))
10778 {
10779 /* The constructor can be called with exactly one
10780 parameter if there is at least one parameter, and
10781 any subsequent parameters have default arguments.
10782 We don't look at the first parameter, which is
10783 really just the `this' parameter for the new
10784 object. */
10785 tree arg_types =
10786 TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)));
10787
10788 /* Skip the `in_chrg' argument too, if present. */
10789 if (TYPE_USES_VIRTUAL_BASECLASSES (DECL_CONTEXT (decl)))
10790 arg_types = TREE_CHAIN (arg_types);
10791
10792 if (arg_types == void_list_node
10793 || (arg_types
10794 && TREE_CHAIN (arg_types)
10795 && TREE_CHAIN (arg_types) != void_list_node
10796 && !TREE_PURPOSE (TREE_CHAIN (arg_types))))
10797 DECL_NONCONVERTING_P (decl) = 1;
10798 }
8d08fdba
MS
10799 }
10800 else if (TREE_CODE (type) == METHOD_TYPE)
10801 {
faae18ab
MS
10802 /* We only get here for friend declarations of
10803 members of other classes. */
8d08fdba
MS
10804 /* All method decls are public, so tell grokfndecl to set
10805 TREE_PUBLIC, also. */
386b8a85 10806 decl = grokfndecl (ctype, type, declarator, declarator,
f30432d7 10807 virtualp, flags, quals, raises, attrlist,
386b8a85 10808 friendp ? -1 : 0, friendp, 1, 0, funcdef_flag,
2c73f9f5 10809 template_count, in_namespace);
f0e01782
MS
10810 if (decl == NULL_TREE)
10811 return NULL_TREE;
8d08fdba 10812 }
5566b478
MS
10813 else if (!staticp && ! processing_template_decl
10814 && TYPE_SIZE (complete_type (type)) == NULL_TREE
8d08fdba
MS
10815 && (TREE_CODE (type) != ARRAY_TYPE || initialized == 0))
10816 {
b7484fbe 10817 if (declarator)
8251199e 10818 cp_error ("field `%D' has incomplete type", declarator);
b7484fbe 10819 else
8251199e 10820 cp_error ("name `%T' has incomplete type", type);
8d08fdba
MS
10821
10822 /* If we're instantiating a template, tell them which
10823 instantiation made the field's type be incomplete. */
10824 if (current_class_type
10825 && TYPE_NAME (current_class_type)
d2e5ee5c 10826 && IDENTIFIER_TEMPLATE (TYPE_IDENTIFIER (current_class_type))
8d08fdba
MS
10827 && declspecs && TREE_VALUE (declspecs)
10828 && TREE_TYPE (TREE_VALUE (declspecs)) == type)
8251199e 10829 cp_error (" in instantiation of template `%T'",
db5ae43f
MS
10830 current_class_type);
10831
8d08fdba
MS
10832 type = error_mark_node;
10833 decl = NULL_TREE;
10834 }
10835 else
10836 {
10837 if (friendp)
10838 {
8251199e 10839 error ("`%s' is neither function nor method; cannot be declared friend",
8d08fdba
MS
10840 IDENTIFIER_POINTER (declarator));
10841 friendp = 0;
10842 }
10843 decl = NULL_TREE;
10844 }
10845
10846 if (friendp)
10847 {
10848 /* Friends are treated specially. */
10849 if (ctype == current_class_type)
8251199e 10850 warning ("member functions are implicitly friends of their class");
8d08fdba
MS
10851 else
10852 {
10853 tree t = NULL_TREE;
10854 if (decl && DECL_NAME (decl))
36a117a5
MM
10855 {
10856 if (template_class_depth (current_class_type) == 0)
6c30752f
MM
10857 {
10858 decl
10859 = check_explicit_specialization
10860 (declarator, decl,
10861 template_count, 2 * (funcdef_flag != 0) + 4);
10862 if (decl == error_mark_node)
10863 return error_mark_node;
10864 }
10865
36a117a5
MM
10866 t = do_friend (ctype, declarator, decl,
10867 last_function_parms, flags, quals,
10868 funcdef_flag);
10869 }
8d08fdba
MS
10870 if (t && funcdef_flag)
10871 return t;
10872
10873 return void_type_node;
10874 }
10875 }
10876
10877 /* Structure field. It may not be a function, except for C++ */
10878
10879 if (decl == NULL_TREE)
10880 {
8d08fdba
MS
10881 if (initialized)
10882 {
3ac3d9ea
MM
10883 if (!staticp)
10884 {
10885 /* An attempt is being made to initialize a non-static
10886 member. But, from [class.mem]:
10887
10888 4 A member-declarator can contain a
10889 constant-initializer only if it declares a static
10890 member (_class.static_) of integral or enumeration
10891 type, see _class.static.data_.
10892
10893 This used to be relatively common practice, but
10894 the rest of the compiler does not correctly
10895 handle the initialization unless the member is
10896 static so we make it static below. */
950ad3c3 10897 cp_pedwarn ("ANSI C++ forbids initialization of member `%D'",
3ac3d9ea 10898 declarator);
8251199e 10899 cp_pedwarn ("making `%D' static", declarator);
3ac3d9ea
MM
10900 staticp = 1;
10901 }
10902
6ba89f8e
MM
10903 if (uses_template_parms (type))
10904 /* We'll check at instantiation time. */
10905 ;
10906 else if (check_static_variable_definition (declarator,
10907 type))
10908 /* If we just return the declaration, crashes
10909 will sometimes occur. We therefore return
72a93143
JM
10910 void_type_node, as if this was a friend
10911 declaration, to cause callers to completely
10912 ignore this declaration. */
6ba89f8e 10913 return void_type_node;
8d08fdba
MS
10914 }
10915
8ebeee52 10916 /* 9.2p13 [class.mem] */
4d7614e9
JM
10917 if (declarator == constructor_name (current_class_type)
10918 /* Divergence from the standard: In extern "C", we
10919 allow non-static data members here, because C does
10920 and /usr/include/netinet/in.h uses that. */
10921 && (staticp || current_lang_name != lang_c))
8ebeee52
JM
10922 cp_pedwarn ("ANSI C++ forbids data member `%D' with same name as enclosing class",
10923 declarator);
10924
3ac3d9ea 10925 if (staticp)
8d08fdba
MS
10926 {
10927 /* C++ allows static class members.
10928 All other work for this is done by grokfield.
d7ceab7b 10929 This VAR_DCL is built by build_lang_field_decl.
8d08fdba
MS
10930 All other VAR_DECLs are built by build_decl. */
10931 decl = build_lang_field_decl (VAR_DECL, declarator, type);
5b605f68
MS
10932 TREE_STATIC (decl) = 1;
10933 /* In class context, 'static' means public access. */
3ac3d9ea 10934 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl) = 1;
8d08fdba
MS
10935 }
10936 else
10937 {
10938 decl = build_lang_field_decl (FIELD_DECL, declarator, type);
10939 if (RIDBIT_SETP (RID_MUTABLE, specbits))
10940 {
10941 DECL_MUTABLE_P (decl) = 1;
10942 RIDBIT_RESET (RID_MUTABLE, specbits);
10943 }
10944 }
10945
10946 bad_specifiers (decl, "field", virtualp, quals != NULL_TREE,
10947 inlinep, friendp, raises != NULL_TREE);
10948 }
10949 }
10950 else if (TREE_CODE (type) == FUNCTION_TYPE || TREE_CODE (type) == METHOD_TYPE)
10951 {
386b8a85 10952 tree original_name;
8d08fdba
MS
10953 int publicp = 0;
10954
10955 if (! declarator)
10956 return NULL_TREE;
10957
386b8a85
JM
10958 if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
10959 original_name = dname;
10960 else
10961 original_name = declarator;
10962
8926095f 10963 if (RIDBIT_SETP (RID_AUTO, specbits))
8251199e 10964 error ("storage class `auto' invalid for function `%s'", name);
8926095f 10965 else if (RIDBIT_SETP (RID_REGISTER, specbits))
8251199e 10966 error ("storage class `register' invalid for function `%s'", name);
8d08fdba
MS
10967
10968 /* Function declaration not at top level.
10969 Storage classes other than `extern' are not allowed
10970 and `extern' makes no difference. */
a9aedbc2 10971 if (! toplevel_bindings_p ()
8926095f
MS
10972 && (RIDBIT_SETP (RID_STATIC, specbits)
10973 || RIDBIT_SETP (RID_INLINE, specbits))
8d08fdba 10974 && pedantic)
8926095f
MS
10975 {
10976 if (RIDBIT_SETP (RID_STATIC, specbits))
8251199e 10977 pedwarn ("storage class `static' invalid for function `%s' declared out of global scope", name);
8926095f 10978 else
8251199e 10979 pedwarn ("storage class `inline' invalid for function `%s' declared out of global scope", name);
8926095f
MS
10980 }
10981
8d08fdba
MS
10982 if (ctype == NULL_TREE)
10983 {
10984 if (virtualp)
10985 {
8251199e 10986 error ("virtual non-class function `%s'", name);
8d08fdba
MS
10987 virtualp = 0;
10988 }
8d08fdba
MS
10989 }
10990 else if (TREE_CODE (type) == FUNCTION_TYPE && staticp < 2)
14ae7e7d
JM
10991 type = build_cplus_method_type (ctype, TREE_TYPE (type),
10992 TYPE_ARG_TYPES (type));
8d08fdba 10993
eb66be0e 10994 /* Record presence of `static'. */
faae18ab 10995 publicp = (ctype != NULL_TREE
a9aedbc2 10996 || RIDBIT_SETP (RID_EXTERN, specbits)
eb66be0e 10997 || !RIDBIT_SETP (RID_STATIC, specbits));
8d08fdba 10998
386b8a85 10999 decl = grokfndecl (ctype, type, original_name, declarator,
f30432d7 11000 virtualp, flags, quals, raises, attrlist,
75650646 11001 1, friendp,
386b8a85 11002 publicp, inlinep, funcdef_flag,
2c73f9f5 11003 template_count, in_namespace);
f0e01782
MS
11004 if (decl == NULL_TREE)
11005 return NULL_TREE;
8d08fdba 11006
f2e48b67
BK
11007 /* Among other times, could occur from check_explicit_specialization
11008 returning an error_mark_node. */
11009 if (decl == error_mark_node)
11010 return error_mark_node;
11011
8d08fdba
MS
11012 if (staticp == 1)
11013 {
11014 int illegal_static = 0;
11015
11016 /* Don't allow a static member function in a class, and forbid
11017 declaring main to be static. */
11018 if (TREE_CODE (type) == METHOD_TYPE)
11019 {
8251199e 11020 cp_pedwarn ("cannot declare member function `%D' to have static linkage", decl);
8d08fdba
MS
11021 illegal_static = 1;
11022 }
8d08fdba
MS
11023 else if (current_function_decl)
11024 {
11025 /* FIXME need arm citation */
8251199e 11026 error ("cannot declare static function inside another function");
8d08fdba
MS
11027 illegal_static = 1;
11028 }
11029
11030 if (illegal_static)
11031 {
11032 staticp = 0;
11033 RIDBIT_RESET (RID_STATIC, specbits);
11034 }
11035 }
8d08fdba
MS
11036 }
11037 else
11038 {
11039 /* It's a variable. */
11040
11041 /* An uninitialized decl with `extern' is a reference. */
2c73f9f5 11042 decl = grokvardecl (type, declarator, &specbits,
950ad3c3
MM
11043 initialized,
11044 (type_quals & TYPE_QUAL_CONST) != 0,
11045 in_namespace);
8d08fdba
MS
11046 bad_specifiers (decl, "variable", virtualp, quals != NULL_TREE,
11047 inlinep, friendp, raises != NULL_TREE);
11048
11049 if (ctype)
11050 {
f0e01782 11051 DECL_CONTEXT (decl) = ctype;
8d08fdba
MS
11052 if (staticp == 1)
11053 {
8251199e 11054 cp_pedwarn ("static member `%D' re-declared as static", decl);
8d08fdba
MS
11055 staticp = 0;
11056 RIDBIT_RESET (RID_STATIC, specbits);
11057 }
b7484fbe
MS
11058 if (RIDBIT_SETP (RID_REGISTER, specbits) && TREE_STATIC (decl))
11059 {
8251199e 11060 cp_error ("static member `%D' declared `register'", decl);
b7484fbe
MS
11061 RIDBIT_RESET (RID_REGISTER, specbits);
11062 }
f30432d7 11063 if (RIDBIT_SETP (RID_EXTERN, specbits) && pedantic)
8d08fdba 11064 {
8251199e 11065 cp_pedwarn ("cannot explicitly declare member `%#D' to have extern linkage",
f30432d7 11066 decl);
8d08fdba
MS
11067 RIDBIT_RESET (RID_EXTERN, specbits);
11068 }
11069 }
11070 }
11071
11072 if (RIDBIT_SETP (RID_MUTABLE, specbits))
11073 {
8251199e 11074 error ("`%s' cannot be declared mutable", name);
8d08fdba
MS
11075 }
11076
11077 /* Record `register' declaration for warnings on &
11078 and in case doing stupid register allocation. */
11079
11080 if (RIDBIT_SETP (RID_REGISTER, specbits))
11081 DECL_REGISTER (decl) = 1;
11082
8926095f
MS
11083 if (RIDBIT_SETP (RID_EXTERN, specbits))
11084 DECL_THIS_EXTERN (decl) = 1;
11085
faae18ab
MS
11086 if (RIDBIT_SETP (RID_STATIC, specbits))
11087 DECL_THIS_STATIC (decl) = 1;
11088
8d08fdba 11089 /* Record constancy and volatility. */
91063b51
MM
11090 /* FIXME: Disallow `restrict' pointer-to-member declarations. */
11091 c_apply_type_quals_to_decl (type_quals, decl);
8d08fdba
MS
11092
11093 return decl;
11094 }
11095}
11096\f
11097/* Tell if a parmlist/exprlist looks like an exprlist or a parmlist.
11098 An empty exprlist is a parmlist. An exprlist which
11099 contains only identifiers at the global level
11100 is a parmlist. Otherwise, it is an exprlist. */
e92cc029 11101
8d08fdba
MS
11102int
11103parmlist_is_exprlist (exprs)
11104 tree exprs;
11105{
11106 if (exprs == NULL_TREE || TREE_PARMLIST (exprs))
11107 return 0;
11108
a9aedbc2 11109 if (toplevel_bindings_p ())
8d08fdba
MS
11110 {
11111 /* At the global level, if these are all identifiers,
11112 then it is a parmlist. */
11113 while (exprs)
11114 {
11115 if (TREE_CODE (TREE_VALUE (exprs)) != IDENTIFIER_NODE)
11116 return 1;
11117 exprs = TREE_CHAIN (exprs);
11118 }
11119 return 0;
11120 }
11121 return 1;
11122}
11123
f181d4ae
MM
11124/* Subroutine of start_function. Ensure that each of the parameter
11125 types (as listed in PARMS) is complete, as is required for a
11126 function definition. */
e92cc029 11127
8d08fdba
MS
11128static void
11129require_complete_types_for_parms (parms)
11130 tree parms;
11131{
11132 while (parms)
11133 {
11134 tree type = TREE_TYPE (parms);
5566b478 11135 if (TYPE_SIZE (complete_type (type)) == NULL_TREE)
8d08fdba
MS
11136 {
11137 if (DECL_NAME (parms))
8251199e 11138 error ("parameter `%s' has incomplete type",
8d08fdba
MS
11139 IDENTIFIER_POINTER (DECL_NAME (parms)));
11140 else
8251199e 11141 error ("parameter has incomplete type");
8d08fdba
MS
11142 TREE_TYPE (parms) = error_mark_node;
11143 }
42f989ff
JM
11144 else
11145 layout_decl (parms, 0);
f181d4ae 11146
8d08fdba
MS
11147 parms = TREE_CHAIN (parms);
11148 }
11149}
11150
11151/* Decode the list of parameter types for a function type.
11152 Given the list of things declared inside the parens,
11153 return a list of types.
11154
11155 The list we receive can have three kinds of elements:
11156 an IDENTIFIER_NODE for names given without types,
11157 a TREE_LIST node for arguments given as typespecs or names with typespecs,
11158 or void_type_node, to mark the end of an argument list
11159 when additional arguments are not permitted (... was not used).
11160
11161 FUNCDEF_FLAG is nonzero for a function definition, 0 for
11162 a mere declaration. A nonempty identifier-list gets an error message
11163 when FUNCDEF_FLAG is zero.
11164 If FUNCDEF_FLAG is 1, then parameter types must be complete.
11165 If FUNCDEF_FLAG is -1, then parameter types may be incomplete.
11166
11167 If all elements of the input list contain types,
11168 we return a list of the types.
11169 If all elements contain no type (except perhaps a void_type_node
11170 at the end), we return a null list.
11171 If some have types and some do not, it is an error, and we
11172 return a null list.
11173
11174 Also set last_function_parms to either
11175 a list of names (IDENTIFIER_NODEs) or a chain of PARM_DECLs.
11176 A list of names is converted to a chain of PARM_DECLs
11177 by store_parm_decls so that ultimately it is always a chain of decls.
11178
11179 Note that in C++, parameters can take default values. These default
11180 values are in the TREE_PURPOSE field of the TREE_LIST. It is
11181 an error to specify default values which are followed by parameters
11182 that have no default values, or an ELLIPSES. For simplicities sake,
11183 only parameters which are specified with their types can take on
11184 default values. */
11185
11186static tree
11187grokparms (first_parm, funcdef_flag)
11188 tree first_parm;
11189 int funcdef_flag;
11190{
11191 tree result = NULL_TREE;
11192 tree decls = NULL_TREE;
11193
11194 if (first_parm != NULL_TREE
11195 && TREE_CODE (TREE_VALUE (first_parm)) == IDENTIFIER_NODE)
11196 {
11197 if (! funcdef_flag)
8251199e 11198 pedwarn ("parameter names (without types) in function declaration");
8d08fdba
MS
11199 last_function_parms = first_parm;
11200 return NULL_TREE;
11201 }
11202 else if (first_parm != NULL_TREE
11203 && TREE_CODE (TREE_VALUE (first_parm)) != TREE_LIST
a1774733 11204 && TREE_CODE (TREE_VALUE (first_parm)) != VOID_TYPE)
8d08fdba
MS
11205 my_friendly_abort (145);
11206 else
11207 {
11208 /* Types were specified. This is a list of declarators
11209 each represented as a TREE_LIST node. */
11210 register tree parm, chain;
5566b478 11211 int any_init = 0, any_error = 0;
8d08fdba
MS
11212
11213 if (first_parm != NULL_TREE)
11214 {
11215 tree last_result = NULL_TREE;
11216 tree last_decl = NULL_TREE;
11217
11218 for (parm = first_parm; parm != NULL_TREE; parm = chain)
11219 {
a703fb38 11220 tree type = NULL_TREE, list_node = parm;
8d08fdba
MS
11221 register tree decl = TREE_VALUE (parm);
11222 tree init = TREE_PURPOSE (parm);
11223
11224 chain = TREE_CHAIN (parm);
11225 /* @@ weak defense against parse errors. */
a1774733
BK
11226 if (TREE_CODE (decl) != VOID_TYPE
11227 && TREE_CODE (decl) != TREE_LIST)
8d08fdba
MS
11228 {
11229 /* Give various messages as the need arises. */
11230 if (TREE_CODE (decl) == STRING_CST)
8251199e 11231 cp_error ("invalid string constant `%E'", decl);
8d08fdba 11232 else if (TREE_CODE (decl) == INTEGER_CST)
8251199e 11233 error ("invalid integer constant in parameter list, did you forget to give parameter name?");
8d08fdba
MS
11234 continue;
11235 }
11236
a1774733 11237 if (TREE_CODE (decl) != VOID_TYPE)
8d08fdba 11238 {
8d08fdba
MS
11239 decl = grokdeclarator (TREE_VALUE (decl),
11240 TREE_PURPOSE (decl),
f30432d7 11241 PARM, init != NULL_TREE,
c11b6f21 11242 NULL_TREE);
3bfdc719 11243 if (! decl || TREE_TYPE (decl) == error_mark_node)
8d08fdba 11244 continue;
01240200
MM
11245
11246 /* Top-level qualifiers on the parameters are
11247 ignored for function types. */
11248 type = TYPE_MAIN_VARIANT (TREE_TYPE (decl));
11249
a1774733 11250 if (TREE_CODE (type) == VOID_TYPE)
8d08fdba
MS
11251 decl = void_type_node;
11252 else if (TREE_CODE (type) == METHOD_TYPE)
11253 {
11254 if (DECL_NAME (decl))
fc378698 11255 /* Cannot use the decl here because
8d08fdba 11256 we don't have DECL_CONTEXT set up yet. */
8251199e 11257 cp_error ("parameter `%D' invalidly declared method type",
fc378698 11258 DECL_NAME (decl));
8d08fdba 11259 else
8251199e 11260 error ("parameter invalidly declared method type");
8d08fdba
MS
11261 type = build_pointer_type (type);
11262 TREE_TYPE (decl) = type;
11263 }
11264 else if (TREE_CODE (type) == OFFSET_TYPE)
11265 {
11266 if (DECL_NAME (decl))
8251199e 11267 cp_error ("parameter `%D' invalidly declared offset type",
fc378698 11268 DECL_NAME (decl));
8d08fdba 11269 else
8251199e 11270 error ("parameter invalidly declared offset type");
8d08fdba
MS
11271 type = build_pointer_type (type);
11272 TREE_TYPE (decl) = type;
11273 }
11274 else if (TREE_CODE (type) == RECORD_TYPE
11275 && TYPE_LANG_SPECIFIC (type)
11276 && CLASSTYPE_ABSTRACT_VIRTUALS (type))
11277 {
11278 abstract_virtuals_error (decl, type);
2c73f9f5 11279 any_error = 1; /* Seems like a good idea. */
8d08fdba
MS
11280 }
11281 else if (TREE_CODE (type) == RECORD_TYPE
11282 && TYPE_LANG_SPECIFIC (type)
11283 && IS_SIGNATURE (type))
11284 {
11285 signature_error (decl, type);
2c73f9f5 11286 any_error = 1; /* Seems like a good idea. */
8d08fdba 11287 }
482b883f
JM
11288 else if (POINTER_TYPE_P (type))
11289 {
11290 tree t = type;
11291 while (POINTER_TYPE_P (t)
11292 || (TREE_CODE (t) == ARRAY_TYPE
11293 && TYPE_DOMAIN (t) != NULL_TREE))
11294 t = TREE_TYPE (t);
11295 if (TREE_CODE (t) == ARRAY_TYPE)
57af8358
MM
11296 cp_error ("parameter type `%T' includes %s to array of unknown bound",
11297 type,
11298 TYPE_PTR_P (type) ? "pointer" : "reference");
482b883f 11299 }
8d08fdba
MS
11300 }
11301
a1774733 11302 if (TREE_CODE (decl) == VOID_TYPE)
8d08fdba
MS
11303 {
11304 if (result == NULL_TREE)
11305 {
11306 result = void_list_node;
11307 last_result = result;
11308 }
11309 else
11310 {
11311 TREE_CHAIN (last_result) = void_list_node;
11312 last_result = void_list_node;
11313 }
8d08fdba
MS
11314 if (chain
11315 && (chain != void_list_node || TREE_CHAIN (chain)))
8251199e 11316 error ("`void' in parameter list must be entire list");
8d08fdba
MS
11317 break;
11318 }
11319
11320 /* Since there is a prototype, args are passed in their own types. */
11321 DECL_ARG_TYPE (decl) = TREE_TYPE (decl);
11322#ifdef PROMOTE_PROTOTYPES
11323 if ((TREE_CODE (type) == INTEGER_TYPE
11324 || TREE_CODE (type) == ENUMERAL_TYPE)
11325 && TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node))
11326 DECL_ARG_TYPE (decl) = integer_type_node;
11327#endif
11328 if (!any_error)
11329 {
11330 if (init)
11331 {
11332 any_init++;
11333 if (TREE_CODE (init) == SAVE_EXPR)
11334 PARM_DECL_EXPR (init) = 1;
5156628f 11335 else if (processing_template_decl)
5566b478 11336 ;
42976354
BK
11337 /* Unparsed default arg from in-class decl. */
11338 else if (TREE_CODE (init) == DEFAULT_ARG)
11339 ;
f181d4ae
MM
11340 else if (TREE_CODE (init) == PARM_DECL
11341 || TREE_CODE (init) == VAR_DECL)
8d08fdba 11342 {
f181d4ae
MM
11343 if (TREE_CODE (init) == VAR_DECL
11344 && (IDENTIFIER_VALUE (DECL_NAME (init))
11345 == init)
11346 && LOCAL_BINDING_P
11347 (IDENTIFIER_BINDING (DECL_NAME
11348 (init))))
8d08fdba 11349 {
f181d4ae
MM
11350 /* ``Local variables may not be used in
11351 default argument expressions.''
11352 dpANSI C++ 8.2.6 */
11353
8251199e 11354 cp_error ("local variable `%D' may not be used as a default argument", init);
8d08fdba
MS
11355 any_error = 1;
11356 }
11357 else if (TREE_READONLY_DECL_P (init))
11358 init = decl_constant_value (init);
11359 }
e6e174e5
JM
11360 else if (TREE_TYPE (init) == NULL_TREE)
11361 {
11362 error ("argument list may not have an initializer list");
11363 init = error_mark_node;
11364 }
11365
5156628f 11366 if (! processing_template_decl
347b5292 11367 && init != error_mark_node
42976354 11368 && TREE_CODE (init) != DEFAULT_ARG
c11b6f21 11369 && ! can_convert_arg (type, TREE_TYPE (init), init))
8251199e 11370 cp_pedwarn ("invalid type `%T' for default argument to `%#D'",
c73964b2 11371 TREE_TYPE (init), decl);
8d08fdba
MS
11372 }
11373 }
11374 else
11375 init = NULL_TREE;
11376
11377 if (decls == NULL_TREE)
11378 {
11379 decls = decl;
11380 last_decl = decls;
11381 }
11382 else
11383 {
11384 TREE_CHAIN (last_decl) = decl;
11385 last_decl = decl;
11386 }
66f2e88d 11387 if (! current_function_decl && TREE_PERMANENT (list_node))
8d08fdba
MS
11388 {
11389 TREE_PURPOSE (list_node) = init;
11390 TREE_VALUE (list_node) = type;
11391 TREE_CHAIN (list_node) = NULL_TREE;
11392 }
11393 else
11394 list_node = saveable_tree_cons (init, type, NULL_TREE);
11395 if (result == NULL_TREE)
11396 {
11397 result = list_node;
11398 last_result = result;
11399 }
11400 else
11401 {
11402 TREE_CHAIN (last_result) = list_node;
11403 last_result = list_node;
11404 }
11405 }
11406 if (last_result)
11407 TREE_CHAIN (last_result) = NULL_TREE;
11408 /* If there are no parameters, and the function does not end
11409 with `...', then last_decl will be NULL_TREE. */
11410 if (last_decl != NULL_TREE)
11411 TREE_CHAIN (last_decl) = NULL_TREE;
11412 }
11413 }
11414
11415 last_function_parms = decls;
11416
8d08fdba
MS
11417 return result;
11418}
42976354
BK
11419
11420/* Called from the parser to update an element of TYPE_ARG_TYPES for some
11421 FUNCTION_TYPE with the newly parsed version of its default argument, which
11422 was previously digested as text. See snarf_defarg et al in lex.c. */
11423
11424void
11425replace_defarg (arg, init)
11426 tree arg, init;
11427{
aa5f3bad 11428 if (! processing_template_decl
42976354 11429 && ! can_convert_arg (TREE_VALUE (arg), TREE_TYPE (init), init))
8251199e 11430 cp_pedwarn ("invalid type `%T' for default argument to `%T'",
42976354
BK
11431 TREE_TYPE (init), TREE_VALUE (arg));
11432 TREE_PURPOSE (arg) = init;
11433}
8d08fdba 11434\f
c11b6f21
MS
11435int
11436copy_args_p (d)
11437 tree d;
11438{
11439 tree t = FUNCTION_ARG_CHAIN (d);
67437d5b
JM
11440 if (DECL_CONSTRUCTOR_P (d)
11441 && TYPE_USES_VIRTUAL_BASECLASSES (DECL_CONTEXT (d)))
11442 t = TREE_CHAIN (t);
c11b6f21
MS
11443 if (t && TREE_CODE (TREE_VALUE (t)) == REFERENCE_TYPE
11444 && (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_VALUE (t)))
11445 == DECL_CLASS_CONTEXT (d))
11446 && (TREE_CHAIN (t) == NULL_TREE
11447 || TREE_CHAIN (t) == void_list_node
11448 || TREE_PURPOSE (TREE_CHAIN (t))))
11449 return 1;
11450 return 0;
11451}
11452
8d08fdba
MS
11453/* These memoizing functions keep track of special properties which
11454 a class may have. `grok_ctor_properties' notices whether a class
11455 has a constructor of the form X(X&), and also complains
11456 if the class has a constructor of the form X(X).
11457 `grok_op_properties' takes notice of the various forms of
11458 operator= which are defined, as well as what sorts of type conversion
11459 may apply. Both functions take a FUNCTION_DECL as an argument. */
e92cc029 11460
a0a33927 11461int
8d08fdba
MS
11462grok_ctor_properties (ctype, decl)
11463 tree ctype, decl;
11464{
11465 tree parmtypes = FUNCTION_ARG_CHAIN (decl);
11466 tree parmtype = parmtypes ? TREE_VALUE (parmtypes) : void_type_node;
11467
11468 /* When a type has virtual baseclasses, a magical first int argument is
11469 added to any ctor so we can tell if the class has been initialized
11470 yet. This could screw things up in this function, so we deliberately
11471 ignore the leading int if we're in that situation. */
711734a9 11472 if (TYPE_USES_VIRTUAL_BASECLASSES (ctype))
8d08fdba 11473 {
711734a9
JM
11474 my_friendly_assert (parmtypes
11475 && TREE_VALUE (parmtypes) == integer_type_node,
11476 980529);
8d08fdba
MS
11477 parmtypes = TREE_CHAIN (parmtypes);
11478 parmtype = TREE_VALUE (parmtypes);
11479 }
11480
f181d4ae
MM
11481 /* [class.copy]
11482
11483 A non-template constructor for class X is a copy constructor if
11484 its first parameter is of type X&, const X&, volatile X& or const
11485 volatile X&, and either there are no other parameters or else all
11486 other parameters have default arguments. */
8d08fdba 11487 if (TREE_CODE (parmtype) == REFERENCE_TYPE
0b41abe6
JM
11488 && TYPE_MAIN_VARIANT (TREE_TYPE (parmtype)) == ctype
11489 && (TREE_CHAIN (parmtypes) == NULL_TREE
8d08fdba 11490 || TREE_CHAIN (parmtypes) == void_list_node
f181d4ae
MM
11491 || TREE_PURPOSE (TREE_CHAIN (parmtypes)))
11492 && !(DECL_TEMPLATE_INSTANTIATION (decl)
11493 && is_member_template (DECL_TI_TEMPLATE (decl))))
0b41abe6
JM
11494 {
11495 TYPE_HAS_INIT_REF (ctype) = 1;
91063b51 11496 if (CP_TYPE_CONST_P (TREE_TYPE (parmtype)))
0b41abe6 11497 TYPE_HAS_CONST_INIT_REF (ctype) = 1;
8d08fdba 11498 }
f181d4ae
MM
11499 /* [class.copy]
11500
11501 A declaration of a constructor for a class X is ill-formed if its
11502 first parameter is of type (optionally cv-qualified) X and either
11503 there are no other parameters or else all other parameters have
11504 default arguments.
11505
11506 We *don't* complain about member template instantiations that
11507 have this form, though; they can occur as we try to decide what
11508 constructor to use during overload resolution. Since overload
11509 resolution will never prefer such a constructor to the
11510 non-template copy constructor (which is either explicitly or
11511 implicitly defined), there's no need to worry about their
11512 existence. Theoretically, they should never even be
11513 instantiated, but that's hard to forestall. */
0b41abe6 11514 else if (TYPE_MAIN_VARIANT (parmtype) == ctype
59e76fc6
JM
11515 && (TREE_CHAIN (parmtypes) == NULL_TREE
11516 || TREE_CHAIN (parmtypes) == void_list_node
f181d4ae
MM
11517 || TREE_PURPOSE (TREE_CHAIN (parmtypes)))
11518 && !(DECL_TEMPLATE_INSTANTIATION (decl)
11519 && is_member_template (DECL_TI_TEMPLATE (decl))))
8d08fdba 11520 {
8251199e 11521 cp_error ("invalid constructor; you probably meant `%T (const %T&)'",
0b41abe6
JM
11522 ctype, ctype);
11523 SET_IDENTIFIER_ERROR_LOCUS (DECL_NAME (decl), ctype);
11524 return 0;
8d08fdba
MS
11525 }
11526 else if (TREE_CODE (parmtype) == VOID_TYPE
11527 || TREE_PURPOSE (parmtypes) != NULL_TREE)
11528 TYPE_HAS_DEFAULT_CONSTRUCTOR (ctype) = 1;
a0a33927
MS
11529
11530 return 1;
8d08fdba
MS
11531}
11532
11533/* An operator with this name can be either unary or binary. */
e92cc029 11534
a28e3c7f
MS
11535static int
11536ambi_op_p (name)
8d08fdba
MS
11537 tree name;
11538{
11539 return (name == ansi_opname [(int) INDIRECT_REF]
11540 || name == ansi_opname [(int) ADDR_EXPR]
11541 || name == ansi_opname [(int) NEGATE_EXPR]
11542 || name == ansi_opname[(int) POSTINCREMENT_EXPR]
11543 || name == ansi_opname[(int) POSTDECREMENT_EXPR]
11544 || name == ansi_opname [(int) CONVERT_EXPR]);
11545}
11546
11547/* An operator with this name can only be unary. */
e92cc029 11548
a28e3c7f
MS
11549static int
11550unary_op_p (name)
8d08fdba
MS
11551 tree name;
11552{
11553 return (name == ansi_opname [(int) TRUTH_NOT_EXPR]
11554 || name == ansi_opname [(int) BIT_NOT_EXPR]
11555 || name == ansi_opname [(int) COMPONENT_REF]
11556 || OPERATOR_TYPENAME_P (name));
11557}
11558
11559/* Do a little sanity-checking on how they declared their operator. */
e92cc029 11560
5566b478 11561void
8d08fdba
MS
11562grok_op_properties (decl, virtualp, friendp)
11563 tree decl;
11564 int virtualp, friendp;
11565{
11566 tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
11567 int methodp = (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE);
11568 tree name = DECL_NAME (decl);
8d08fdba 11569
a28e3c7f
MS
11570 if (current_class_type == NULL_TREE)
11571 friendp = 1;
8d08fdba 11572
a28e3c7f
MS
11573 if (! friendp)
11574 {
f181d4ae
MM
11575 /* [class.copy]
11576
11577 A user-declared copy assignment operator X::operator= is a
11578 non-static non-template member function of class X with
11579 exactly one parameter of type X, X&, const X&, volatile X& or
11580 const volatile X&. */
11581 if (name == ansi_opname[(int) MODIFY_EXPR]
11582 && !(DECL_TEMPLATE_INSTANTIATION (decl)
11583 && is_member_template (DECL_TI_TEMPLATE (decl))))
a28e3c7f
MS
11584 TYPE_HAS_ASSIGNMENT (current_class_type) = 1;
11585 else if (name == ansi_opname[(int) CALL_EXPR])
11586 TYPE_OVERLOADS_CALL_EXPR (current_class_type) = 1;
11587 else if (name == ansi_opname[(int) ARRAY_REF])
11588 TYPE_OVERLOADS_ARRAY_REF (current_class_type) = 1;
11589 else if (name == ansi_opname[(int) COMPONENT_REF]
11590 || name == ansi_opname[(int) MEMBER_REF])
11591 TYPE_OVERLOADS_ARROW (current_class_type) = 1;
11592 else if (name == ansi_opname[(int) NEW_EXPR])
11593 TYPE_GETS_NEW (current_class_type) |= 1;
11594 else if (name == ansi_opname[(int) DELETE_EXPR])
11595 TYPE_GETS_DELETE (current_class_type) |= 1;
11596 else if (name == ansi_opname[(int) VEC_NEW_EXPR])
11597 TYPE_GETS_NEW (current_class_type) |= 2;
11598 else if (name == ansi_opname[(int) VEC_DELETE_EXPR])
11599 TYPE_GETS_DELETE (current_class_type) |= 2;
11600 }
11601
11602 if (name == ansi_opname[(int) NEW_EXPR]
11603 || name == ansi_opname[(int) VEC_NEW_EXPR])
8d08fdba 11604 {
8d08fdba
MS
11605 /* When the compiler encounters the definition of A::operator new, it
11606 doesn't look at the class declaration to find out if it's static. */
a28e3c7f 11607 if (methodp)
700f8a87 11608 revert_static_member_fn (&decl, NULL, NULL);
8d08fdba
MS
11609
11610 /* Take care of function decl if we had syntax errors. */
11611 if (argtypes == NULL_TREE)
beb53fb8
JM
11612 TREE_TYPE (decl)
11613 = build_function_type (ptr_type_node,
11614 hash_tree_chain (integer_type_node,
11615 void_list_node));
8d08fdba 11616 else
a28e3c7f 11617 TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
8d08fdba 11618 }
a28e3c7f
MS
11619 else if (name == ansi_opname[(int) DELETE_EXPR]
11620 || name == ansi_opname[(int) VEC_DELETE_EXPR])
8d08fdba 11621 {
a28e3c7f 11622 if (methodp)
700f8a87 11623 revert_static_member_fn (&decl, NULL, NULL);
8d08fdba
MS
11624
11625 if (argtypes == NULL_TREE)
beb53fb8
JM
11626 TREE_TYPE (decl)
11627 = build_function_type (void_type_node,
11628 hash_tree_chain (ptr_type_node,
11629 void_list_node));
8d08fdba 11630 else
a28e3c7f
MS
11631 {
11632 TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
11633
11634 if (! friendp && name == ansi_opname[(int) VEC_DELETE_EXPR]
11635 && (TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)))
11636 != void_list_node))
11637 TYPE_VEC_DELETE_TAKES_SIZE (current_class_type) = 1;
11638 }
8d08fdba 11639 }
8d08fdba
MS
11640 else
11641 {
11642 /* An operator function must either be a non-static member function
11643 or have at least one parameter of a class, a reference to a class,
11644 an enumeration, or a reference to an enumeration. 13.4.0.6 */
700f8a87 11645 if (! methodp || DECL_STATIC_FUNCTION_P (decl))
8d08fdba
MS
11646 {
11647 if (OPERATOR_TYPENAME_P (name)
11648 || name == ansi_opname[(int) CALL_EXPR]
11649 || name == ansi_opname[(int) MODIFY_EXPR]
11650 || name == ansi_opname[(int) COMPONENT_REF]
11651 || name == ansi_opname[(int) ARRAY_REF])
8251199e 11652 cp_error ("`%D' must be a nonstatic member function", decl);
8d08fdba
MS
11653 else
11654 {
11655 tree p = argtypes;
11656
700f8a87 11657 if (DECL_STATIC_FUNCTION_P (decl))
8251199e 11658 cp_error ("`%D' must be either a non-static member function or a non-member function", decl);
700f8a87 11659
8d08fdba 11660 if (p)
a1774733 11661 for (; TREE_CODE (TREE_VALUE (p)) != VOID_TYPE ; p = TREE_CHAIN (p))
8d08fdba
MS
11662 {
11663 tree arg = TREE_VALUE (p);
11664 if (TREE_CODE (arg) == REFERENCE_TYPE)
11665 arg = TREE_TYPE (arg);
11666
11667 /* This lets bad template code slip through. */
11668 if (IS_AGGR_TYPE (arg)
11669 || TREE_CODE (arg) == ENUMERAL_TYPE
73b0fce8
KL
11670 || TREE_CODE (arg) == TEMPLATE_TYPE_PARM
11671 || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
8d08fdba
MS
11672 goto foundaggr;
11673 }
8251199e
JM
11674 cp_error
11675 ("`%D' must have an argument of class or enumerated type",
8d08fdba
MS
11676 decl);
11677 foundaggr:
11678 ;
11679 }
11680 }
11681
277294d7 11682 if (name == ansi_opname[(int) CALL_EXPR])
2c73f9f5 11683 return; /* No restrictions on args. */
8d08fdba 11684
9a3b49ac 11685 if (IDENTIFIER_TYPENAME_P (name) && ! DECL_TEMPLATE_INFO (decl))
a0a33927
MS
11686 {
11687 tree t = TREE_TYPE (name);
11688 if (TREE_CODE (t) == VOID_TYPE)
8251199e 11689 pedwarn ("void is not a valid type conversion operator");
a0a33927
MS
11690 else if (! friendp)
11691 {
11692 int ref = (TREE_CODE (t) == REFERENCE_TYPE);
11693 char *what = 0;
11694 if (ref)
11695 t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
11696
11697 if (t == current_class_type)
11698 what = "the same type";
9a3b49ac 11699 /* Don't force t to be complete here. */
a0a33927 11700 else if (IS_AGGR_TYPE (t)
9a3b49ac 11701 && TYPE_SIZE (t)
a0a33927
MS
11702 && DERIVED_FROM_P (t, current_class_type))
11703 what = "a base class";
11704
11705 if (what)
8251199e 11706 warning ("conversion to %s%s will never use a type conversion operator",
a0a33927
MS
11707 ref ? "a reference to " : "", what);
11708 }
11709 }
11710
8d08fdba
MS
11711 if (name == ansi_opname[(int) MODIFY_EXPR])
11712 {
11713 tree parmtype;
11714
11715 if (list_length (argtypes) != 3 && methodp)
11716 {
8251199e 11717 cp_error ("`%D' must take exactly one argument", decl);
8d08fdba
MS
11718 return;
11719 }
11720 parmtype = TREE_VALUE (TREE_CHAIN (argtypes));
11721
f0e01782 11722 if (copy_assignment_arg_p (parmtype, virtualp)
a28e3c7f 11723 && ! friendp)
8d08fdba
MS
11724 {
11725 TYPE_HAS_ASSIGN_REF (current_class_type) = 1;
f0e01782 11726 if (TREE_CODE (parmtype) != REFERENCE_TYPE
91063b51 11727 || CP_TYPE_CONST_P (TREE_TYPE (parmtype)))
8d08fdba
MS
11728 TYPE_HAS_CONST_ASSIGN_REF (current_class_type) = 1;
11729 }
11730 }
11731 else if (name == ansi_opname[(int) COND_EXPR])
11732 {
11733 /* 13.4.0.3 */
8251199e 11734 pedwarn ("ANSI C++ prohibits overloading operator ?:");
8d08fdba 11735 if (list_length (argtypes) != 4)
8251199e 11736 cp_error ("`%D' must take exactly three arguments", decl);
8d08fdba
MS
11737 }
11738 else if (ambi_op_p (name))
11739 {
11740 if (list_length (argtypes) == 2)
11741 /* prefix */;
11742 else if (list_length (argtypes) == 3)
11743 {
11744 if ((name == ansi_opname[(int) POSTINCREMENT_EXPR]
11745 || name == ansi_opname[(int) POSTDECREMENT_EXPR])
5156628f 11746 && ! processing_template_decl
8d08fdba
MS
11747 && TREE_VALUE (TREE_CHAIN (argtypes)) != integer_type_node)
11748 {
11749 if (methodp)
8251199e 11750 cp_error ("postfix `%D' must take `int' as its argument",
8d08fdba
MS
11751 decl);
11752 else
8251199e
JM
11753 cp_error
11754 ("postfix `%D' must take `int' as its second argument",
11755 decl);
8d08fdba
MS
11756 }
11757 }
11758 else
11759 {
11760 if (methodp)
8251199e 11761 cp_error ("`%D' must take either zero or one argument", decl);
8d08fdba 11762 else
8251199e 11763 cp_error ("`%D' must take either one or two arguments", decl);
8d08fdba 11764 }
824b9a4c
MS
11765
11766 /* More Effective C++ rule 6. */
eb448459 11767 if (warn_ecpp
824b9a4c
MS
11768 && (name == ansi_opname[(int) POSTINCREMENT_EXPR]
11769 || name == ansi_opname[(int) POSTDECREMENT_EXPR]))
11770 {
11771 tree arg = TREE_VALUE (argtypes);
11772 tree ret = TREE_TYPE (TREE_TYPE (decl));
11773 if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
11774 arg = TREE_TYPE (arg);
11775 arg = TYPE_MAIN_VARIANT (arg);
11776 if (list_length (argtypes) == 2)
11777 {
11778 if (TREE_CODE (ret) != REFERENCE_TYPE
3bfdc719
MM
11779 || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)),
11780 arg))
8251199e 11781 cp_warning ("prefix `%D' should return `%T'", decl,
824b9a4c
MS
11782 build_reference_type (arg));
11783 }
11784 else
11785 {
3bfdc719 11786 if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
8251199e 11787 cp_warning ("postfix `%D' should return `%T'", decl, arg);
824b9a4c
MS
11788 }
11789 }
8d08fdba
MS
11790 }
11791 else if (unary_op_p (name))
11792 {
11793 if (list_length (argtypes) != 2)
11794 {
11795 if (methodp)
8251199e 11796 cp_error ("`%D' must take `void'", decl);
8d08fdba 11797 else
8251199e 11798 cp_error ("`%D' must take exactly one argument", decl);
8d08fdba
MS
11799 }
11800 }
11801 else /* if (binary_op_p (name)) */
11802 {
11803 if (list_length (argtypes) != 3)
11804 {
11805 if (methodp)
8251199e 11806 cp_error ("`%D' must take exactly one argument", decl);
8d08fdba 11807 else
8251199e 11808 cp_error ("`%D' must take exactly two arguments", decl);
8d08fdba 11809 }
824b9a4c
MS
11810
11811 /* More Effective C++ rule 7. */
eb448459 11812 if (warn_ecpp
824b9a4c
MS
11813 && (name == ansi_opname [TRUTH_ANDIF_EXPR]
11814 || name == ansi_opname [TRUTH_ORIF_EXPR]
11815 || name == ansi_opname [COMPOUND_EXPR]))
8251199e 11816 cp_warning ("user-defined `%D' always evaluates both arguments",
824b9a4c
MS
11817 decl);
11818 }
11819
11820 /* Effective C++ rule 23. */
eb448459 11821 if (warn_ecpp
824b9a4c
MS
11822 && list_length (argtypes) == 3
11823 && (name == ansi_opname [PLUS_EXPR]
11824 || name == ansi_opname [MINUS_EXPR]
11825 || name == ansi_opname [TRUNC_DIV_EXPR]
11826 || name == ansi_opname [MULT_EXPR])
11827 && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
8251199e 11828 cp_warning ("`%D' should return by value", decl);
8d08fdba
MS
11829
11830 /* 13.4.0.8 */
11831 if (argtypes)
11832 for (; argtypes != void_list_node ; argtypes = TREE_CHAIN (argtypes))
11833 if (TREE_PURPOSE (argtypes))
11834 {
11835 TREE_PURPOSE (argtypes) = NULL_TREE;
11836 if (name == ansi_opname[(int) POSTINCREMENT_EXPR]
11837 || name == ansi_opname[(int) POSTDECREMENT_EXPR])
11838 {
11839 if (pedantic)
8251199e 11840 cp_pedwarn ("`%D' cannot have default arguments", decl);
8d08fdba
MS
11841 }
11842 else
8251199e 11843 cp_error ("`%D' cannot have default arguments", decl);
8d08fdba
MS
11844 }
11845 }
11846}
11847\f
094fe153
JM
11848static char *
11849tag_name (code)
11850 enum tag_types code;
11851{
11852 switch (code)
11853 {
11854 case record_type:
11855 return "struct";
11856 case class_type:
11857 return "class";
11858 case union_type:
11859 return "union ";
11860 case enum_type:
11861 return "enum";
11862 case signature_type:
11863 return "signature";
11864 default:
11865 my_friendly_abort (981122);
11866 }
11867}
11868
8d08fdba
MS
11869/* Get the struct, enum or union (CODE says which) with tag NAME.
11870 Define the tag as a forward-reference if it is not defined.
11871
11872 C++: If a class derivation is given, process it here, and report
11873 an error if multiple derivation declarations are not identical.
11874
11875 If this is a definition, come in through xref_tag and only look in
11876 the current frame for the name (since C++ allows new names in any
11877 scope.) */
11878
8d08fdba 11879tree
ca107ded 11880xref_tag (code_type_node, name, globalize)
8d08fdba 11881 tree code_type_node;
ca107ded 11882 tree name;
8d08fdba
MS
11883 int globalize;
11884{
11885 enum tag_types tag_code;
11886 enum tree_code code;
11887 int temp = 0;
8d08fdba
MS
11888 register tree ref, t;
11889 struct binding_level *b = inner_binding_level;
a80e4195 11890 int got_type = 0;
dc8263bc
JM
11891 tree attributes = NULL_TREE;
11892
11893 /* If we are called from the parser, code_type_node will sometimes be a
11894 TREE_LIST. This indicates that the user wrote
11895 "class __attribute__ ((foo)) bar". Extract the attributes so we can
11896 use them later. */
11897 if (TREE_CODE (code_type_node) == TREE_LIST)
11898 {
11899 attributes = TREE_PURPOSE (code_type_node);
11900 code_type_node = TREE_VALUE (code_type_node);
11901 }
8d08fdba
MS
11902
11903 tag_code = (enum tag_types) TREE_INT_CST_LOW (code_type_node);
11904 switch (tag_code)
11905 {
11906 case record_type:
11907 case class_type:
8d08fdba
MS
11908 case signature_type:
11909 code = RECORD_TYPE;
8d08fdba
MS
11910 break;
11911 case union_type:
11912 code = UNION_TYPE;
8d08fdba
MS
11913 break;
11914 case enum_type:
11915 code = ENUMERAL_TYPE;
11916 break;
11917 default:
11918 my_friendly_abort (18);
11919 }
11920
11921 /* If a cross reference is requested, look up the type
11922 already defined for this tag and return it. */
be99da77
MS
11923 if (TREE_CODE_CLASS (TREE_CODE (name)) == 't')
11924 {
11925 t = name;
a80e4195
MS
11926 name = TYPE_IDENTIFIER (t);
11927 got_type = 1;
be99da77
MS
11928 }
11929 else
11930 t = IDENTIFIER_TYPE_VALUE (name);
61a127b3 11931
73b0fce8
KL
11932 if (t && TREE_CODE (t) != code && TREE_CODE (t) != TEMPLATE_TYPE_PARM
11933 && TREE_CODE (t) != TEMPLATE_TEMPLATE_PARM)
a0a33927
MS
11934 t = NULL_TREE;
11935
8ccc31eb 11936 if (! globalize)
8d08fdba 11937 {
f3400fe2
JM
11938 /* If we know we are defining this tag, only look it up in
11939 this scope and don't try to find it as a type. */
11940 ref = lookup_tag (code, name, b, 1);
8d08fdba
MS
11941 }
11942 else
11943 {
36a117a5
MM
11944 if (current_class_type
11945 && template_class_depth (current_class_type)
39c01e4c 11946 && PROCESSING_REAL_TEMPLATE_DECL_P ())
36a117a5
MM
11947 /* Since GLOBALIZE is non-zero, we are not looking at a
11948 definition of this tag. Since, in addition, we are currently
11949 processing a (member) template declaration of a template
11950 class, we don't want to do any lookup at all; consider:
11951
11952 template <class X>
11953 struct S1
11954
11955 template <class U>
11956 struct S2
11957 { template <class V>
11958 friend struct S1; };
11959
11960 Here, the S2::S1 declaration should not be confused with the
11961 outer declaration. In particular, the inner version should
11962 have a template parameter of level 2, not level 1. This
11963 would be particularly important if the member declaration
11964 were instead:
11965
11966 template <class V = U> friend struct S1;
11967
11968 say, when we should tsubst into `U' when instantiating S2. */
11969 ref = NULL_TREE;
11970 else
11971 {
11972 if (t)
094fe153
JM
11973 {
11974 if (t != TYPE_MAIN_VARIANT (t))
11975 cp_pedwarn ("using typedef-name `%D' after `%s'",
11976 TYPE_NAME (t), tag_name (tag_code));
11977 ref = t;
11978 }
36a117a5
MM
11979 else
11980 ref = lookup_tag (code, name, b, 0);
11981
11982 if (! ref)
11983 {
11984 /* Try finding it as a type declaration. If that wins,
11985 use it. */
11986 ref = lookup_name (name, 1);
11987
11988 if (ref != NULL_TREE
11989 && processing_template_decl
11990 && DECL_CLASS_TEMPLATE_P (ref)
11991 && template_class_depth (current_class_type) == 0)
11992 /* Since GLOBALIZE is true, we're declaring a global
6757edfe 11993 template, so we want this type. */
36a117a5 11994 ref = DECL_RESULT (ref);
6757edfe 11995
36a117a5
MM
11996 if (ref && TREE_CODE (ref) == TYPE_DECL
11997 && TREE_CODE (TREE_TYPE (ref)) == code)
11998 ref = TREE_TYPE (ref);
11999 else
12000 ref = NULL_TREE;
12001 }
8d08fdba
MS
12002 }
12003 }
12004
12005 push_obstacks_nochange ();
12006
12007 if (! ref)
12008 {
12009 /* If no such tag is yet defined, create a forward-reference node
12010 and record it as the "definition".
12011 When a real declaration of this type is found,
12012 the forward-reference will be altered into a real type. */
12013
12014 /* In C++, since these migrate into the global scope, we must
12015 build them on the permanent obstack. */
12016
12017 temp = allocation_temporary_p ();
12018 if (temp)
12019 end_temporary_allocation ();
12020
12021 if (code == ENUMERAL_TYPE)
12022 {
8251199e 12023 cp_error ("use of enum `%#D' without previous declaration", name);
fc378698 12024
8d08fdba
MS
12025 ref = make_node (ENUMERAL_TYPE);
12026
12027 /* Give the type a default layout like unsigned int
12028 to avoid crashing if it does not get defined. */
12029 TYPE_MODE (ref) = TYPE_MODE (unsigned_type_node);
12030 TYPE_ALIGN (ref) = TYPE_ALIGN (unsigned_type_node);
12031 TREE_UNSIGNED (ref) = 1;
12032 TYPE_PRECISION (ref) = TYPE_PRECISION (unsigned_type_node);
12033 TYPE_MIN_VALUE (ref) = TYPE_MIN_VALUE (unsigned_type_node);
12034 TYPE_MAX_VALUE (ref) = TYPE_MAX_VALUE (unsigned_type_node);
12035
12036 /* Enable us to recognize when a type is created in class context.
12037 To do nested classes correctly, this should probably be cleared
12038 out when we leave this classes scope. Currently this in only
12039 done in `start_enum'. */
12040
12041 pushtag (name, ref, globalize);
8d08fdba 12042 }
8d08fdba
MS
12043 else
12044 {
8d08fdba 12045 struct binding_level *old_b = class_binding_level;
8d08fdba
MS
12046
12047 ref = make_lang_type (code);
12048
8d08fdba
MS
12049 if (tag_code == signature_type)
12050 {
12051 SET_SIGNATURE (ref);
f376e137
MS
12052 /* Since a signature type will be turned into the type
12053 of signature tables, it's not only an interface. */
8d08fdba 12054 CLASSTYPE_INTERFACE_ONLY (ref) = 0;
f376e137
MS
12055 SET_CLASSTYPE_INTERFACE_KNOWN (ref);
12056 /* A signature doesn't have a vtable. */
00595019 12057 CLASSTYPE_VTABLE_NEEDS_WRITING (ref) = 0;
8d08fdba
MS
12058 }
12059
8d08fdba
MS
12060#ifdef NONNESTED_CLASSES
12061 /* Class types don't nest the way enums do. */
12062 class_binding_level = (struct binding_level *)0;
12063#endif
12064 pushtag (name, ref, globalize);
12065 class_binding_level = old_b;
8d08fdba
MS
12066 }
12067 }
12068 else
12069 {
8d08fdba 12070 /* If it no longer looks like a nested type, make sure it's
30394414
JM
12071 in global scope.
12072 If it is not an IDENTIFIER, this is not a declaration */
2c73f9f5 12073 if (b->namespace_p && !class_binding_level
30394414
JM
12074 && TREE_CODE (name) == IDENTIFIER_NODE)
12075 {
2c73f9f5
ML
12076 if (IDENTIFIER_NAMESPACE_VALUE (name) == NULL_TREE)
12077 SET_IDENTIFIER_NAMESPACE_VALUE (name, TYPE_NAME (ref));
30394414 12078 }
7fe6899f
MM
12079
12080 if (!globalize && processing_template_decl && IS_AGGR_TYPE (ref))
6757edfe 12081 redeclare_class_template (ref, current_template_parms);
8d08fdba
MS
12082 }
12083
8d08fdba
MS
12084 /* Until the type is defined, tentatively accept whatever
12085 structure tag the user hands us. */
12086 if (TYPE_SIZE (ref) == NULL_TREE
12087 && ref != current_class_type
12088 /* Have to check this, in case we have contradictory tag info. */
12089 && IS_AGGR_TYPE_CODE (TREE_CODE (ref)))
12090 {
12091 if (tag_code == class_type)
12092 CLASSTYPE_DECLARED_CLASS (ref) = 1;
12093 else if (tag_code == record_type || tag_code == signature_type)
12094 CLASSTYPE_DECLARED_CLASS (ref) = 0;
12095 }
12096
12097 pop_obstacks ();
12098
dc8263bc
JM
12099 TREE_TYPE (ref) = attributes;
12100
61a127b3
MM
12101 if (ref && TYPE_P (ref))
12102 {
12103 /* [dcl.type.elab]
12104
12105 If the identifier resolves to a typedef-name or a template
12106 type-parameter, the elaborated-type-specifier is
12107 ill-formed. */
12108 if (TYPE_LANG_SPECIFIC (ref) && TYPE_WAS_ANONYMOUS (ref))
12109 cp_error ("`%T' is a typedef name", ref);
12110 else if (TREE_CODE (ref) == TEMPLATE_TYPE_PARM)
12111 cp_error ("`%T' is a template type paramter", ref);
12112 }
12113
8d08fdba
MS
12114 return ref;
12115}
8ccc31eb 12116
fc378698
MS
12117tree
12118xref_tag_from_type (old, id, globalize)
12119 tree old, id;
12120 int globalize;
12121{
12122 tree code_type_node;
12123
12124 if (TREE_CODE (old) == RECORD_TYPE)
12125 code_type_node = (CLASSTYPE_DECLARED_CLASS (old)
12126 ? class_type_node : record_type_node);
12127 else
12128 code_type_node = union_type_node;
12129
12130 if (id == NULL_TREE)
12131 id = TYPE_IDENTIFIER (old);
12132
ca107ded 12133 return xref_tag (code_type_node, id, globalize);
fc378698
MS
12134}
12135
8ccc31eb
MS
12136void
12137xref_basetypes (code_type_node, name, ref, binfo)
12138 tree code_type_node;
12139 tree name, ref;
12140 tree binfo;
12141{
12142 /* In the declaration `A : X, Y, ... Z' we mark all the types
12143 (A, X, Y, ..., Z) so we can check for duplicates. */
12144 tree binfos;
12145 int i, len;
12146 enum tag_types tag_code = (enum tag_types) TREE_INT_CST_LOW (code_type_node);
12147
12148 if (tag_code == union_type)
12149 {
8251199e 12150 cp_error ("derived union `%T' invalid", ref);
8ccc31eb
MS
12151 return;
12152 }
12153
12154 len = list_length (binfo);
12155 push_obstacks (TYPE_OBSTACK (ref), TYPE_OBSTACK (ref));
12156
12157 SET_CLASSTYPE_MARKED (ref);
12158 BINFO_BASETYPES (TYPE_BINFO (ref)) = binfos = make_tree_vec (len);
12159
12160 for (i = 0; binfo; binfo = TREE_CHAIN (binfo))
12161 {
12162 /* The base of a derived struct is public by default. */
12163 int via_public
be99da77
MS
12164 = (TREE_PURPOSE (binfo) == access_public_node
12165 || TREE_PURPOSE (binfo) == access_public_virtual_node
8ccc31eb 12166 || (tag_code != class_type
be99da77
MS
12167 && (TREE_PURPOSE (binfo) == access_default_node
12168 || TREE_PURPOSE (binfo) == access_default_virtual_node)));
d8b55a76
JM
12169 int via_protected
12170 = (TREE_PURPOSE (binfo) == access_protected_node
12171 || TREE_PURPOSE (binfo) == access_protected_virtual_node);
8ccc31eb 12172 int via_virtual
be99da77 12173 = (TREE_PURPOSE (binfo) == access_private_virtual_node
d8b55a76 12174 || TREE_PURPOSE (binfo) == access_protected_virtual_node
be99da77
MS
12175 || TREE_PURPOSE (binfo) == access_public_virtual_node
12176 || TREE_PURPOSE (binfo) == access_default_virtual_node);
12177 tree basetype = TREE_VALUE (binfo);
8ccc31eb
MS
12178 tree base_binfo;
12179
8ccc31eb
MS
12180 if (basetype && TREE_CODE (basetype) == TYPE_DECL)
12181 basetype = TREE_TYPE (basetype);
5566b478
MS
12182 if (!basetype
12183 || (TREE_CODE (basetype) != RECORD_TYPE
a80e4195 12184 && TREE_CODE (basetype) != TYPENAME_TYPE
73b0fce8
KL
12185 && TREE_CODE (basetype) != TEMPLATE_TYPE_PARM
12186 && TREE_CODE (basetype) != TEMPLATE_TEMPLATE_PARM))
8ccc31eb 12187 {
8251199e 12188 cp_error ("base type `%T' fails to be a struct or class type",
8ccc31eb
MS
12189 TREE_VALUE (binfo));
12190 continue;
12191 }
2b9dc906 12192
11b5139c 12193 GNU_xref_hier (name, basetype, via_public, via_virtual, 0);
2b9dc906 12194
8ccc31eb 12195#if 1
8adf5b5e
JM
12196 /* This code replaces similar code in layout_basetypes.
12197 We put the complete_type first for implicit `typename'. */
2b9dc906
JM
12198 if (TYPE_SIZE (complete_type (basetype)) == NULL_TREE
12199 && ! (current_template_parms && uses_template_parms (basetype)))
8ccc31eb 12200 {
8251199e 12201 cp_error ("base class `%T' has incomplete type", basetype);
8ccc31eb
MS
12202 continue;
12203 }
12204#endif
12205 else
12206 {
12207 if (CLASSTYPE_MARKED (basetype))
12208 {
12209 if (basetype == ref)
8251199e 12210 cp_error ("recursive type `%T' undefined", basetype);
8ccc31eb 12211 else
8251199e 12212 cp_error ("duplicate base type `%T' invalid", basetype);
8ccc31eb
MS
12213 continue;
12214 }
12215
eff71ab0
PB
12216 if (TYPE_FOR_JAVA (basetype)
12217 && current_lang_stack == current_lang_base)
12218 TYPE_FOR_JAVA (ref) = 1;
12219
8ccc31eb
MS
12220 /* Note that the BINFO records which describe individual
12221 inheritances are *not* shared in the lattice! They
12222 cannot be shared because a given baseclass may be
12223 inherited with different `accessibility' by different
12224 derived classes. (Each BINFO record describing an
12225 individual inheritance contains flags which say what
12226 the `accessibility' of that particular inheritance is.) */
12227
7ddedda4
MM
12228 base_binfo
12229 = make_binfo (integer_zero_node, basetype,
12230 CLASS_TYPE_P (basetype)
12231 ? TYPE_BINFO_VTABLE (basetype) : NULL_TREE,
12232 CLASS_TYPE_P (basetype)
12233 ? TYPE_BINFO_VIRTUALS (basetype) : NULL_TREE);
8ccc31eb
MS
12234
12235 TREE_VEC_ELT (binfos, i) = base_binfo;
12236 TREE_VIA_PUBLIC (base_binfo) = via_public;
12237 TREE_VIA_PROTECTED (base_binfo) = via_protected;
12238 TREE_VIA_VIRTUAL (base_binfo) = via_virtual;
12239 BINFO_INHERITANCE_CHAIN (base_binfo) = TYPE_BINFO (ref);
12240
dfbcd65a
JM
12241 /* We need to unshare the binfos now so that lookups during class
12242 definition work. */
12243 unshare_base_binfos (base_binfo);
12244
8ccc31eb 12245 SET_CLASSTYPE_MARKED (basetype);
9e9ff709 12246
8ccc31eb
MS
12247 /* We are free to modify these bits because they are meaningless
12248 at top level, and BASETYPE is a top-level type. */
12249 if (via_virtual || TYPE_USES_VIRTUAL_BASECLASSES (basetype))
12250 {
12251 TYPE_USES_VIRTUAL_BASECLASSES (ref) = 1;
12252 TYPE_USES_COMPLEX_INHERITANCE (ref) = 1;
12253 }
12254
7ddedda4
MM
12255 if (CLASS_TYPE_P (basetype))
12256 {
12257 TYPE_GETS_NEW (ref) |= TYPE_GETS_NEW (basetype);
12258 TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
12259 }
12260
8ccc31eb
MS
12261 i += 1;
12262 }
12263 }
12264 if (i)
12265 TREE_VEC_LENGTH (binfos) = i;
12266 else
12267 BINFO_BASETYPES (TYPE_BINFO (ref)) = NULL_TREE;
12268
12269 if (i > 1)
12270 TYPE_USES_MULTIPLE_INHERITANCE (ref) = 1;
12271 else if (i == 1)
7ddedda4
MM
12272 {
12273 tree basetype = BINFO_TYPE (TREE_VEC_ELT (binfos, 0));
12274
12275 if (CLASS_TYPE_P (basetype))
12276 TYPE_USES_MULTIPLE_INHERITANCE (ref)
12277 = TYPE_USES_MULTIPLE_INHERITANCE (basetype);
12278 }
12279
8ccc31eb
MS
12280 if (TYPE_USES_MULTIPLE_INHERITANCE (ref))
12281 TYPE_USES_COMPLEX_INHERITANCE (ref) = 1;
12282
12283 /* Unmark all the types. */
12284 while (--i >= 0)
12285 CLEAR_CLASSTYPE_MARKED (BINFO_TYPE (TREE_VEC_ELT (binfos, i)));
12286 CLEAR_CLASSTYPE_MARKED (ref);
12287
12288 pop_obstacks ();
12289}
12290
8d08fdba 12291\f
8d08fdba
MS
12292/* Begin compiling the definition of an enumeration type.
12293 NAME is its name (or null if anonymous).
12294 Returns the type object, as yet incomplete.
12295 Also records info about it so that build_enumerator
12296 may be used to declare the individual values as they are read. */
12297
12298tree
12299start_enum (name)
12300 tree name;
12301{
12302 register tree enumtype = NULL_TREE;
12303 struct binding_level *b = inner_binding_level;
12304
8c1e8edc 12305 /* We are wasting space here and putting these on the permanent_obstack so
6e687e5e 12306 that typeid(local enum) will work correctly. */
cbf882af 12307 push_obstacks (&permanent_obstack, &permanent_obstack);
b87692e5 12308
8d08fdba
MS
12309 /* If this is the real definition for a previous forward reference,
12310 fill in the contents in the same object that used to be the
12311 forward reference. */
12312
12313 if (name != NULL_TREE)
12314 enumtype = lookup_tag (ENUMERAL_TYPE, name, b, 1);
12315
12316 if (enumtype != NULL_TREE && TREE_CODE (enumtype) == ENUMERAL_TYPE)
8251199e 12317 cp_error ("multiple definition of `%#T'", enumtype);
8d08fdba
MS
12318 else
12319 {
12320 enumtype = make_node (ENUMERAL_TYPE);
12321 pushtag (name, enumtype, 0);
12322 }
12323
12324 if (current_class_type)
12325 TREE_ADDRESSABLE (b->tags) = 1;
c91a56d2 12326
e92cc029
MS
12327 /* We don't copy this value because build_enumerator needs to do it. */
12328 enum_next_value = integer_zero_node;
7177d104 12329 enum_overflow = 0;
8d08fdba
MS
12330
12331 GNU_xref_decl (current_function_decl, enumtype);
12332 return enumtype;
12333}
12334
12335/* After processing and defining all the values of an enumeration type,
12336 install their decls in the enumeration type and finish it off.
12337 ENUMTYPE is the type object and VALUES a list of name-value pairs.
12338 Returns ENUMTYPE. */
12339
12340tree
dbfe2124
MM
12341finish_enum (enumtype)
12342 tree enumtype;
8d08fdba 12343{
a703fb38 12344 register tree minnode = NULL_TREE, maxnode = NULL_TREE;
8d08fdba
MS
12345 /* Calculate the maximum value of any enumerator in this type. */
12346
dbfe2124 12347 tree values = TYPE_VALUES (enumtype);
8d08fdba
MS
12348 if (values)
12349 {
ed44da02 12350 tree pair;
5566b478 12351
ed44da02 12352 for (pair = values; pair; pair = TREE_CHAIN (pair))
8d08fdba 12353 {
ed44da02
MM
12354 tree decl;
12355 tree value;
12356
12357 /* The TREE_VALUE is a CONST_DECL for this enumeration
12358 constant. */
12359 decl = TREE_VALUE (pair);
12360
ed44da02
MM
12361 /* The DECL_INITIAL will be NULL if we are processing a
12362 template declaration and this enumeration constant had no
12363 explicit initializer. */
12364 value = DECL_INITIAL (decl);
079e1098 12365 if (value && !processing_template_decl)
5566b478 12366 {
079e1098
MM
12367 /* Set the TREE_TYPE for the VALUE as well. That's so
12368 that when we call decl_constant_value we get an
12369 entity of the right type (but with the constant
12370 value). Since we shouldn't ever call
12371 decl_constant_value on a template type, there's no
12372 reason to do that when processing_template_decl.
12373 And, if the expression is something like a
12374 TEMPLATE_PARM_INDEX or a CAST_EXPR doing so will
12375 wreak havoc on the intended type of the expression.
12376
12377 Of course, there's also no point in trying to compute
12378 minimum or maximum values if we're in a template. */
5566b478 12379 TREE_TYPE (value) = enumtype;
ed44da02 12380
079e1098
MM
12381 if (!minnode)
12382 minnode = maxnode = value;
12383 else if (tree_int_cst_lt (maxnode, value))
12384 maxnode = value;
12385 else if (tree_int_cst_lt (value, minnode))
12386 minnode = value;
5566b478 12387 }
ed44da02 12388
72f2bd78
MM
12389 if (processing_template_decl)
12390 /* If this is just a template, leave the CONST_DECL
12391 alone. That way tsubst_copy will find CONST_DECLs for
12392 CONST_DECLs, and not INTEGER_CSTs. */
12393 ;
12394 else
12395 /* In the list we're building up, we want the enumeration
12396 values, not the CONST_DECLs. */
12397 TREE_VALUE (pair) = value;
8d08fdba
MS
12398 }
12399 }
f376e137
MS
12400 else
12401 maxnode = minnode = integer_zero_node;
8d08fdba 12402
de22184b 12403 TYPE_VALUES (enumtype) = nreverse (values);
2986ae00 12404
5156628f 12405 if (processing_template_decl)
b87692e5 12406 {
9360ac70
MM
12407 tree scope = current_scope ();
12408 if (scope && TREE_CODE (scope) == FUNCTION_DECL)
cbf882af 12409 add_tree (build_min (TAG_DEFN, enumtype));
b87692e5 12410 }
cbf882af
MM
12411 else
12412 {
12413 int unsignedp = tree_int_cst_sgn (minnode) >= 0;
12414 int lowprec = min_precision (minnode, unsignedp);
12415 int highprec = min_precision (maxnode, unsignedp);
12416 int precision = MAX (lowprec, highprec);
12417 tree tem;
5566b478 12418
cbf882af 12419 TYPE_SIZE (enumtype) = NULL_TREE;
8d08fdba 12420
cbf882af 12421 /* Set TYPE_MIN_VALUE and TYPE_MAX_VALUE according to `precision'. */
8ccc31eb 12422
cbf882af
MM
12423 TYPE_PRECISION (enumtype) = precision;
12424 if (unsignedp)
12425 fixup_unsigned_type (enumtype);
12426 else
12427 fixup_signed_type (enumtype);
8ccc31eb 12428
cbf882af
MM
12429 if (flag_short_enums || (precision > TYPE_PRECISION (integer_type_node)))
12430 /* Use the width of the narrowest normal C type which is wide
12431 enough. */
12432 TYPE_PRECISION (enumtype) = TYPE_PRECISION (type_for_size
12433 (precision, 1));
12434 else
12435 TYPE_PRECISION (enumtype) = TYPE_PRECISION (integer_type_node);
8d08fdba 12436
cbf882af
MM
12437 TYPE_SIZE (enumtype) = 0;
12438 layout_type (enumtype);
f376e137 12439
cbf882af
MM
12440 /* Fix up all variant types of this enum type. */
12441 for (tem = TYPE_MAIN_VARIANT (enumtype); tem;
12442 tem = TYPE_NEXT_VARIANT (tem))
12443 {
12444 TYPE_VALUES (tem) = TYPE_VALUES (enumtype);
12445 TYPE_MIN_VALUE (tem) = TYPE_MIN_VALUE (enumtype);
12446 TYPE_MAX_VALUE (tem) = TYPE_MAX_VALUE (enumtype);
12447 TYPE_SIZE (tem) = TYPE_SIZE (enumtype);
12448 TYPE_SIZE_UNIT (tem) = TYPE_SIZE_UNIT (enumtype);
12449 TYPE_MODE (tem) = TYPE_MODE (enumtype);
12450 TYPE_PRECISION (tem) = TYPE_PRECISION (enumtype);
12451 TYPE_ALIGN (tem) = TYPE_ALIGN (enumtype);
12452 TREE_UNSIGNED (tem) = TREE_UNSIGNED (enumtype);
12453 }
8d08fdba 12454
cbf882af
MM
12455 /* Finish debugging output for this type. */
12456 rest_of_type_compilation (enumtype, namespace_bindings_p ());
12457 }
12458
12459 /* In start_enum we pushed obstacks. Here, we must pop them. */
12460 pop_obstacks ();
8d08fdba
MS
12461
12462 return enumtype;
12463}
12464
079e1098
MM
12465/* Build and install a CONST_DECL for an enumeration constant of the
12466 enumeration type TYPE whose NAME and VALUE (if any) are provided.
8d08fdba
MS
12467 Assignment of sequential values by default is handled here. */
12468
12469tree
079e1098
MM
12470build_enumerator (name, value, type)
12471 tree name;
12472 tree value;
12473 tree type;
8d08fdba
MS
12474{
12475 tree decl, result;
e8bd800e 12476 tree context;
8d08fdba
MS
12477
12478 /* Remove no-op casts from the value. */
12479 if (value)
12480 STRIP_TYPE_NOPS (value);
12481
5156628f 12482 if (! processing_template_decl)
5566b478
MS
12483 {
12484 /* Validate and default VALUE. */
12485 if (value != NULL_TREE)
12486 {
12487 if (TREE_READONLY_DECL_P (value))
e92cc029 12488 value = decl_constant_value (value);
5566b478
MS
12489
12490 if (TREE_CODE (value) == INTEGER_CST)
12491 {
12492 value = default_conversion (value);
12493 constant_expression_warning (value);
12494 }
12495 else
12496 {
8251199e 12497 cp_error ("enumerator value for `%D' not integer constant", name);
5566b478
MS
12498 value = NULL_TREE;
12499 }
12500 }
12501
5566b478 12502 /* Default based on previous value. */
5156628f 12503 if (value == NULL_TREE && ! processing_template_decl)
5566b478
MS
12504 {
12505 value = enum_next_value;
12506 if (enum_overflow)
8251199e 12507 cp_error ("overflow in enumeration values at `%D'", name);
5566b478
MS
12508 }
12509
12510 /* Remove no-op casts from the value. */
12511 if (value)
12512 STRIP_TYPE_NOPS (value);
013bc8af
MS
12513#if 0
12514 /* To fix MAX_VAL enum consts. (bkoz) */
e92cc029 12515 TREE_TYPE (value) = integer_type_node;
013bc8af 12516#endif
5566b478 12517 }
8d08fdba 12518
079e1098
MM
12519 /* We always have to copy here; not all INTEGER_CSTs are unshared.
12520 Even in other cases, we will later (in finish_enum) be setting the
12521 type of VALUE. */
ed44da02
MM
12522 if (value != NULL_TREE)
12523 value = copy_node (value);
12524
8d08fdba 12525 /* C++ associates enums with global, function, or class declarations. */
e8bd800e
MM
12526
12527 context = current_scope ();
12528 if (context && context == current_class_type)
12529 /* This enum declaration is local to the class. */
079e1098 12530 decl = build_lang_field_decl (CONST_DECL, name, type);
e8bd800e
MM
12531 else
12532 /* It's a global enum, or it's local to a function. (Note local to
12533 a function could mean local to a class method. */
079e1098 12534 decl = build_decl (CONST_DECL, name, type);
e8bd800e
MM
12535
12536 DECL_CONTEXT (decl) = FROB_CONTEXT (context);
12537 DECL_INITIAL (decl) = value;
12538 TREE_READONLY (decl) = 1;
12539
12540 if (context && context == current_class_type)
12541 {
12542 pushdecl_class_level (decl);
61a127b3
MM
12543 /* In something like `struct S { enum E { i = 7 }; };' we put `i'
12544 on the TYPE_FIELDS list for `S'. (That's so that you can say
12545 things like `S::i' later.) */
12546 finish_member_declaration (decl);
e8bd800e
MM
12547 }
12548 else
12549 {
12550 pushdecl (decl);
12551 GNU_xref_decl (current_function_decl, decl);
12552 }
8d08fdba 12553
5156628f 12554 if (! processing_template_decl)
5566b478
MS
12555 {
12556 /* Set basis for default for next value. */
12557 enum_next_value = build_binary_op_nodefault (PLUS_EXPR, value,
12558 integer_one_node, PLUS_EXPR);
12559 enum_overflow = tree_int_cst_lt (enum_next_value, value);
5566b478 12560 }
8d08fdba 12561
8d2733ca 12562 result = saveable_tree_cons (name, decl, NULL_TREE);
8d08fdba
MS
12563 return result;
12564}
12565
8d08fdba 12566\f
5566b478
MS
12567static int function_depth;
12568
8d08fdba
MS
12569/* Create the FUNCTION_DECL for a function definition.
12570 DECLSPECS and DECLARATOR are the parts of the declaration;
12571 they describe the function's name and the type it returns,
12572 but twisted together in a fashion that parallels the syntax of C.
12573
f181d4ae
MM
12574 If PRE_PARSED_P is non-zero then DECLARATOR is really the DECL for
12575 the function we are about to process; DECLSPECS are ignored. For
12576 example, we set PRE_PARSED_P when processing the definition of
12577 inline function that was defined in-class; the definition is
12578 actually processed when the class is complete. In this case,
12579 PRE_PARSED_P is 2. We also set PRE_PARSED_P when instanting the
12580 body of a template function, and when constructing thunk functions
12581 and such; in these cases PRE_PARSED_P is 1.
12582
8d08fdba
MS
12583 This function creates a binding context for the function body
12584 as well as setting up the FUNCTION_DECL in current_function_decl.
12585
12586 Returns 1 on success. If the DECLARATOR is not suitable for a function
12587 (it defines a datum instead), we return 0, which tells
12588 yyparse to report a parse error.
12589
12590 For C++, we must first check whether that datum makes any sense.
12591 For example, "class A local_a(1,2);" means that variable local_a
12592 is an aggregate of type A, which should have a constructor
12593 applied to it with the argument list [1, 2].
12594
12595 @@ There is currently no way to retrieve the storage
12596 @@ allocated to FUNCTION (or all of its parms) if we return
12597 @@ something we had previously. */
12598
12599int
c11b6f21
MS
12600start_function (declspecs, declarator, attrs, pre_parsed_p)
12601 tree declspecs, declarator, attrs;
8d08fdba
MS
12602 int pre_parsed_p;
12603{
5566b478 12604 tree decl1;
8d08fdba
MS
12605 tree ctype = NULL_TREE;
12606 tree fntype;
12607 tree restype;
12608 extern int have_extern_spec;
12609 extern int used_extern_spec;
12610 int doing_friend = 0;
12611
8d08fdba 12612 /* Sanity check. */
a1774733 12613 my_friendly_assert (TREE_CODE (TREE_VALUE (void_list_node)) == VOID_TYPE, 160);
8d08fdba
MS
12614 my_friendly_assert (TREE_CHAIN (void_list_node) == NULL_TREE, 161);
12615
e92cc029 12616 /* Assume, until we see it does. */
8d08fdba
MS
12617 current_function_returns_value = 0;
12618 current_function_returns_null = 0;
fd378c9d
JM
12619 named_labels = 0;
12620 shadowed_labels = 0;
8d08fdba
MS
12621 current_function_assigns_this = 0;
12622 current_function_just_assigned_this = 0;
12623 current_function_parms_stored = 0;
12624 original_result_rtx = NULL_RTX;
a9aedbc2 12625 base_init_expr = NULL_TREE;
79ff2c6c
MS
12626 current_base_init_list = NULL_TREE;
12627 current_member_init_list = NULL_TREE;
f30432d7 12628 ctor_label = dtor_label = NULL_TREE;
42976354 12629 static_labelno = 0;
8d08fdba
MS
12630
12631 clear_temp_name ();
12632
e92cc029 12633 /* This should only be done once on the top most decl. */
8d08fdba
MS
12634 if (have_extern_spec && !used_extern_spec)
12635 {
12636 declspecs = decl_tree_cons (NULL_TREE, get_identifier ("extern"), declspecs);
12637 used_extern_spec = 1;
12638 }
12639
12640 if (pre_parsed_p)
12641 {
12642 decl1 = declarator;
12643
67f7c391
JM
12644#if 0
12645 /* What was this testing for, exactly? */
8d08fdba
MS
12646 if (! DECL_ARGUMENTS (decl1)
12647 && !DECL_STATIC_FUNCTION_P (decl1)
67f7c391 12648 && !DECL_ARTIFICIAL (decl1)
6eb3bb27 12649 && DECL_CLASS_SCOPE_P (decl1)
d2e5ee5c
MS
12650 && TYPE_IDENTIFIER (DECL_CONTEXT (decl1))
12651 && IDENTIFIER_TEMPLATE (TYPE_IDENTIFIER (DECL_CONTEXT (decl1))))
8d08fdba 12652 {
30394414
JM
12653 tree binding = binding_for_name (DECL_NAME (decl1),
12654 current_namespace);
8251199e 12655 cp_error ("redeclaration of `%#D'", decl1);
8d08fdba 12656 if (IDENTIFIER_CLASS_VALUE (DECL_NAME (decl1)))
8251199e 12657 cp_error_at ("previous declaration here", IDENTIFIER_CLASS_VALUE (DECL_NAME (decl1)));
30394414 12658 else if (BINDING_VALUE (binding))
8251199e 12659 cp_error_at ("previous declaration here", BINDING_VALUE (binding));
8d08fdba 12660 }
67f7c391 12661#endif
8d08fdba 12662
8d08fdba
MS
12663 fntype = TREE_TYPE (decl1);
12664 if (TREE_CODE (fntype) == METHOD_TYPE)
12665 ctype = TYPE_METHOD_BASETYPE (fntype);
12666
12667 /* ANSI C++ June 5 1992 WP 11.4.5. A friend function defined in a
12668 class is in the (lexical) scope of the class in which it is
12669 defined. */
12670 if (!ctype && DECL_FRIEND_P (decl1))
12671 {
12672 ctype = DECL_CLASS_CONTEXT (decl1);
12673
12674 /* CTYPE could be null here if we're dealing with a template;
12675 for example, `inline friend float foo()' inside a template
12676 will have no CTYPE set. */
12677 if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
12678 ctype = NULL_TREE;
12679 else
12680 doing_friend = 1;
12681 }
12682
5566b478
MS
12683 last_function_parms = DECL_ARGUMENTS (decl1);
12684 last_function_parm_tags = NULL_TREE;
8d08fdba
MS
12685 }
12686 else
12687 {
c11b6f21 12688 decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, NULL_TREE);
8d08fdba
MS
12689 /* If the declarator is not suitable for a function definition,
12690 cause a syntax error. */
12691 if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL) return 0;
12692
12693 fntype = TREE_TYPE (decl1);
12694
12695 restype = TREE_TYPE (fntype);
7ddedda4 12696 if (CLASS_TYPE_P (restype) && !CLASSTYPE_GOT_SEMICOLON (restype))
8d08fdba 12697 {
8251199e 12698 cp_error ("semicolon missing after declaration of `%#T'", restype);
e66d884e 12699 shadow_tag (build_expr_list (NULL_TREE, restype));
8d08fdba
MS
12700 CLASSTYPE_GOT_SEMICOLON (restype) = 1;
12701 if (TREE_CODE (fntype) == FUNCTION_TYPE)
12702 fntype = build_function_type (integer_type_node,
12703 TYPE_ARG_TYPES (fntype));
12704 else
12705 fntype = build_cplus_method_type (build_type_variant (TYPE_METHOD_BASETYPE (fntype), TREE_READONLY (decl1), TREE_SIDE_EFFECTS (decl1)),
12706 integer_type_node,
12707 TYPE_ARG_TYPES (fntype));
12708 TREE_TYPE (decl1) = fntype;
12709 }
12710
12711 if (TREE_CODE (fntype) == METHOD_TYPE)
12712 ctype = TYPE_METHOD_BASETYPE (fntype);
35680744 12713 else if (DECL_MAIN_P (decl1))
8d08fdba
MS
12714 {
12715 /* If this doesn't return integer_type, complain. */
12716 if (TREE_TYPE (TREE_TYPE (decl1)) != integer_type_node)
12717 {
a28e3c7f 12718 if (pedantic || warn_return_type)
8251199e 12719 pedwarn ("return type for `main' changed to `int'");
8d08fdba
MS
12720 TREE_TYPE (decl1) = fntype = default_function_type;
12721 }
8d08fdba
MS
12722 }
12723 }
12724
12725 /* Warn if function was previously implicitly declared
12726 (but not if we warned then). */
12727 if (! warn_implicit
12728 && IDENTIFIER_IMPLICIT_DECL (DECL_NAME (decl1)) != NULL_TREE)
8251199e 12729 cp_warning_at ("`%D' implicitly declared before its definition", IDENTIFIER_IMPLICIT_DECL (DECL_NAME (decl1)));
8d08fdba 12730
f181d4ae
MM
12731 announce_function (decl1);
12732
12733 /* Set up current_class_type, and enter the scope of the class, if
12734 appropriate. */
12735 if (ctype)
12736 push_nested_class (ctype, 1);
12737 else if (DECL_STATIC_FUNCTION_P (decl1))
12738 push_nested_class (DECL_CONTEXT (decl1), 2);
12739
12740 /* Now that we have entered the scope of the class, we must restore
12741 the bindings for any template parameters surrounding DECL1, if it
12742 is an inline member template. (Order is important; consider the
12743 case where a template parameter has the same name as a field of
12744 the class.) It is not until after this point that
12745 PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly. */
12746 if (pre_parsed_p == 2)
12747 maybe_begin_member_template_processing (decl1);
12748
12749 /* We are now in the scope of the function being defined. */
8d08fdba 12750 current_function_decl = decl1;
f181d4ae 12751
5566b478
MS
12752 /* Save the parm names or decls from this function's declarator
12753 where store_parm_decls will find them. */
12754 current_function_parms = last_function_parms;
12755 current_function_parm_tags = last_function_parm_tags;
8d08fdba 12756
5156628f 12757 if (! processing_template_decl)
8d08fdba 12758 {
f181d4ae
MM
12759 /* In a fcn definition, arg types must be complete. */
12760 require_complete_types_for_parms (DECL_ARGUMENTS (decl1));
12761
5566b478
MS
12762 if (TYPE_SIZE (complete_type (TREE_TYPE (fntype))) == NULL_TREE)
12763 {
8251199e 12764 cp_error ("return-type `%#T' is an incomplete type",
5566b478 12765 TREE_TYPE (fntype));
8d08fdba 12766
5566b478
MS
12767 /* Make it return void instead, but don't change the
12768 type of the DECL_RESULT, in case we have a named return value. */
12769 if (ctype)
12770 TREE_TYPE (decl1)
12771 = build_cplus_method_type (build_type_variant (ctype,
12772 TREE_READONLY (decl1),
12773 TREE_SIDE_EFFECTS (decl1)),
12774 void_type_node,
12775 FUNCTION_ARG_CHAIN (decl1));
12776 else
12777 TREE_TYPE (decl1)
12778 = build_function_type (void_type_node,
12779 TYPE_ARG_TYPES (TREE_TYPE (decl1)));
12780 DECL_RESULT (decl1)
12781 = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (TREE_TYPE (fntype)));
91063b51
MM
12782 TREE_READONLY (DECL_RESULT (decl1))
12783 = CP_TYPE_CONST_P (TREE_TYPE (fntype));
12784 TREE_THIS_VOLATILE (DECL_RESULT (decl1))
12785 = CP_TYPE_VOLATILE_P (TREE_TYPE (fntype));
5566b478
MS
12786 }
12787
12788 if (TYPE_LANG_SPECIFIC (TREE_TYPE (fntype))
12789 && CLASSTYPE_ABSTRACT_VIRTUALS (TREE_TYPE (fntype)))
12790 abstract_virtuals_error (decl1, TREE_TYPE (fntype));
12791 }
b7484fbe 12792
824b9a4c 12793 /* Effective C++ rule 15. See also c_expand_return. */
eb448459 12794 if (warn_ecpp
824b9a4c 12795 && DECL_NAME (decl1) == ansi_opname[(int) MODIFY_EXPR]
a1774733 12796 && TREE_CODE (TREE_TYPE (fntype)) == VOID_TYPE)
8251199e 12797 cp_warning ("`operator=' should return a reference to `*this'");
824b9a4c 12798
2a2480e1
JM
12799 /* Make the init_value nonzero so pushdecl knows this is not tentative.
12800 error_mark_node is replaced below (in poplevel) with the BLOCK. */
12801 DECL_INITIAL (decl1) = error_mark_node;
12802
3a846e6e 12803#ifdef SET_DEFAULT_DECL_ATTRIBUTES
76fb7947 12804 SET_DEFAULT_DECL_ATTRIBUTES (decl1, attrs);
3a846e6e
NC
12805#endif
12806
8d08fdba
MS
12807 /* This function exists in static storage.
12808 (This does not mean `static' in the C sense!) */
12809 TREE_STATIC (decl1) = 1;
12810
36a117a5
MM
12811 /* We must call push_template_decl after current_class_type is set
12812 up. (If we are processing inline definitions after exiting a
12813 class scope, current_class_type will be NULL_TREE until set above
12814 by push_nested_class.) */
12815 if (processing_template_decl)
12816 decl1 = push_template_decl (decl1);
12817
878cd289
MS
12818 /* Record the decl so that the function name is defined.
12819 If we already have a decl for this name, and it is a FUNCTION_DECL,
12820 use the old decl. */
36a117a5 12821 if (!processing_template_decl && pre_parsed_p == 0)
878cd289 12822 {
75650646 12823 /* A specialization is not used to guide overload resolution. */
959d8796
JM
12824 if ((flag_guiding_decls
12825 || !DECL_TEMPLATE_SPECIALIZATION (decl1))
12826 && ! DECL_FUNCTION_MEMBER_P (decl1))
75650646 12827 decl1 = pushdecl (decl1);
2c73f9f5 12828 else
b7698cf0
JM
12829 {
12830 /* We need to set the DECL_CONTEXT. */
12831 if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
12832 DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
12833 /* And make sure we have enough default args. */
12834 check_default_args (decl1);
12835 }
878cd289
MS
12836 DECL_MAIN_VARIANT (decl1) = decl1;
12837 fntype = TREE_TYPE (decl1);
12838 }
5566b478
MS
12839
12840 current_function_decl = decl1;
878cd289 12841
db5ae43f 12842 if (DECL_INTERFACE_KNOWN (decl1))
faae18ab 12843 {
86052cc3
JM
12844 tree ctx = hack_decl_function_context (decl1);
12845
faae18ab
MS
12846 if (DECL_NOT_REALLY_EXTERN (decl1))
12847 DECL_EXTERNAL (decl1) = 0;
86052cc3
JM
12848
12849 if (ctx != NULL_TREE && DECL_THIS_INLINE (ctx)
12850 && TREE_PUBLIC (ctx))
12851 /* This is a function in a local class in an extern inline
12852 function. */
12853 comdat_linkage (decl1);
faae18ab 12854 }
8d08fdba
MS
12855 /* If this function belongs to an interface, it is public.
12856 If it belongs to someone else's interface, it is also external.
12857 It doesn't matter whether it's inline or not. */
5566b478
MS
12858 else if (interface_unknown == 0
12859 && (! DECL_TEMPLATE_INSTANTIATION (decl1)
d11ad92e 12860 || flag_alt_external_templates))
8d08fdba 12861 {
5566b478 12862 if (DECL_THIS_INLINE (decl1) || DECL_TEMPLATE_INSTANTIATION (decl1)
5156628f 12863 || processing_template_decl)
db5ae43f
MS
12864 DECL_EXTERNAL (decl1)
12865 = (interface_only
faae18ab 12866 || (DECL_THIS_INLINE (decl1) && ! flag_implement_inlines));
db5ae43f 12867 else
893de33c 12868 DECL_EXTERNAL (decl1) = 0;
e8abc66f 12869 DECL_NOT_REALLY_EXTERN (decl1) = 0;
db5ae43f 12870 DECL_INTERFACE_KNOWN (decl1) = 1;
8d08fdba
MS
12871 }
12872 else
a0a33927
MS
12873 {
12874 /* This is a definition, not a reference.
b7484fbe
MS
12875 So clear DECL_EXTERNAL. */
12876 DECL_EXTERNAL (decl1) = 0;
faae18ab 12877
5566b478
MS
12878 if ((DECL_THIS_INLINE (decl1) || DECL_TEMPLATE_INSTANTIATION (decl1))
12879 && ! DECL_INTERFACE_KNOWN (decl1)
12880 /* Don't try to defer nested functions for now. */
e76a2646 12881 && ! hack_decl_function_context (decl1))
878cd289
MS
12882 DECL_DEFER_OUTPUT (decl1) = 1;
12883 else
893de33c 12884 DECL_INTERFACE_KNOWN (decl1) = 1;
db5ae43f 12885 }
a9aedbc2 12886
8d08fdba
MS
12887 if (ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1))
12888 {
12889 if (TREE_CODE (fntype) == METHOD_TYPE)
12890 TREE_TYPE (decl1) = fntype
12891 = build_function_type (TREE_TYPE (fntype),
12892 TREE_CHAIN (TYPE_ARG_TYPES (fntype)));
5566b478
MS
12893 current_function_parms = TREE_CHAIN (current_function_parms);
12894 DECL_ARGUMENTS (decl1) = current_function_parms;
8d08fdba
MS
12895 ctype = NULL_TREE;
12896 }
12897 restype = TREE_TYPE (fntype);
12898
8d08fdba
MS
12899 if (ctype)
12900 {
8d08fdba 12901 /* If we're compiling a friend function, neither of the variables
4ac14744 12902 current_class_ptr nor current_class_type will have values. */
8d08fdba
MS
12903 if (! doing_friend)
12904 {
12905 /* We know that this was set up by `grokclassfn'.
12906 We do not wait until `store_parm_decls', since evil
12907 parse errors may never get us to that point. Here
12908 we keep the consistency between `current_class_type'
4ac14744 12909 and `current_class_ptr'. */
5566b478 12910 tree t = current_function_parms;
5f34005f
RK
12911
12912 my_friendly_assert (t != NULL_TREE
12913 && TREE_CODE (t) == PARM_DECL, 162);
12914
dff6b454
RK
12915 if (TREE_CODE (TREE_TYPE (t)) == POINTER_TYPE)
12916 {
7ddedda4 12917 int i;
dff6b454 12918
7ddedda4
MM
12919 if (! hack_decl_function_context (decl1))
12920 temporary_allocation ();
12921 i = suspend_momentary ();
12922
12923 /* Normally, build_indirect_ref returns
12924 current_class_ref whenever current_class_ptr is
12925 dereferenced. This time, however, we want it to
12926 *create* current_class_ref, so we temporarily clear
12927 current_class_ptr to fool it. */
4ac14744
MS
12928 current_class_ptr = NULL_TREE;
12929 current_class_ref = build_indirect_ref (t, NULL_PTR);
12930 current_class_ptr = t;
7ddedda4 12931
dff6b454 12932 resume_momentary (i);
7ddedda4
MM
12933 if (! hack_decl_function_context (decl1))
12934 end_temporary_allocation ();
dff6b454
RK
12935 }
12936 else
12937 /* We're having a signature pointer here. */
4ac14744 12938 current_class_ref = current_class_ptr = t;
dff6b454 12939
8d08fdba
MS
12940 }
12941 }
12942 else
7ddedda4 12943 current_class_ptr = current_class_ref = NULL_TREE;
8d08fdba 12944
db5ae43f
MS
12945 pushlevel (0);
12946 current_binding_level->parm_flag = 1;
12947
db5ae43f
MS
12948 GNU_xref_function (decl1, current_function_parms);
12949
f30432d7
MS
12950 if (attrs)
12951 cplus_decl_attributes (decl1, NULL_TREE, attrs);
3a846e6e 12952
db5ae43f
MS
12953 make_function_rtl (decl1);
12954
8d08fdba
MS
12955 /* Promote the value to int before returning it. */
12956 if (C_PROMOTING_INTEGER_TYPE_P (restype))
5566b478
MS
12957 restype = type_promotes_to (restype);
12958
12959 /* If this fcn was already referenced via a block-scope `extern' decl
12960 (or an implicit decl), propagate certain information about the usage. */
12961 if (TREE_ADDRESSABLE (DECL_ASSEMBLER_NAME (decl1)))
12962 TREE_ADDRESSABLE (decl1) = 1;
12963
8d08fdba 12964 if (DECL_RESULT (decl1) == NULL_TREE)
f30432d7
MS
12965 {
12966 DECL_RESULT (decl1)
12967 = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (restype));
91063b51
MM
12968 TREE_READONLY (DECL_RESULT (decl1)) = CP_TYPE_CONST_P (restype);
12969 TREE_THIS_VOLATILE (DECL_RESULT (decl1)) = CP_TYPE_VOLATILE_P (restype);
f30432d7 12970 }
8d08fdba 12971
948edfa7
JW
12972 /* Allocate further tree nodes temporarily during compilation
12973 of this function only. Tiemann moved up here from bottom of fn. */
12974 /* If this is a nested function, then we must continue to allocate RTL
12975 on the permanent obstack in case we need to inline it later. */
12976 if (! hack_decl_function_context (decl1))
5566b478
MS
12977 temporary_allocation ();
12978
5156628f 12979 if (processing_template_decl)
5566b478 12980 {
5566b478
MS
12981 ++minimal_parse_mode;
12982 last_tree = DECL_SAVED_TREE (decl1)
12983 = build_nt (EXPR_STMT, void_zero_node);
12984 }
12985
12986 ++function_depth;
12987
f30432d7
MS
12988 if (DESTRUCTOR_NAME_P (DECL_ASSEMBLER_NAME (decl1))
12989 && DECL_LANGUAGE (decl1) == lang_cplusplus)
8d08fdba
MS
12990 {
12991 dtor_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
12992 ctor_label = NULL_TREE;
12993 }
12994 else
12995 {
12996 dtor_label = NULL_TREE;
12997 if (DECL_CONSTRUCTOR_P (decl1))
12998 ctor_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
12999 }
13000
8d08fdba
MS
13001 return 1;
13002}
13003\f
9664b89e
JM
13004/* Called after store_parm_decls for a function-try-block. We need to update
13005 last_parm_cleanup_insn so that the base initializers for a constructor
13006 are run within this block, not before it. */
6467930b
MS
13007
13008void
13009expand_start_early_try_stmts ()
13010{
6467930b 13011 expand_start_try_stmts ();
9664b89e 13012 last_parm_cleanup_insn = get_last_insn ();
f30432d7
MS
13013}
13014
8d08fdba
MS
13015/* Store the parameter declarations into the current function declaration.
13016 This is called after parsing the parameter declarations, before
13017 digesting the body of the function.
13018
13019 Also install to binding contour return value identifier, if any. */
13020
13021void
13022store_parm_decls ()
13023{
13024 register tree fndecl = current_function_decl;
13025 register tree parm;
13026 int parms_have_cleanups = 0;
eb66be0e 13027 tree cleanups = NULL_TREE;
8d08fdba
MS
13028
13029 /* This is either a chain of PARM_DECLs (when a prototype is used). */
13030 tree specparms = current_function_parms;
13031
13032 /* This is a list of types declared among parms in a prototype. */
13033 tree parmtags = current_function_parm_tags;
13034
13035 /* This is a chain of any other decls that came in among the parm
13036 declarations. If a parm is declared with enum {foo, bar} x;
13037 then CONST_DECLs for foo and bar are put here. */
13038 tree nonparms = NULL_TREE;
13039
a9aedbc2 13040 if (toplevel_bindings_p ())
8d08fdba
MS
13041 fatal ("parse errors have confused me too much");
13042
13043 /* Initialize RTL machinery. */
13044 init_function_start (fndecl, input_filename, lineno);
13045
8d08fdba
MS
13046 /* Create a binding level for the parms. */
13047 expand_start_bindings (0);
13048
8d08fdba
MS
13049 if (specparms != NULL_TREE)
13050 {
13051 /* This case is when the function was defined with an ANSI prototype.
13052 The parms already have decls, so we need not do anything here
13053 except record them as in effect
13054 and complain if any redundant old-style parm decls were written. */
13055
13056 register tree next;
13057
13058 /* Must clear this because it might contain TYPE_DECLs declared
13059 at class level. */
13060 storedecls (NULL_TREE);
5566b478 13061
8d08fdba
MS
13062 for (parm = nreverse (specparms); parm; parm = next)
13063 {
13064 next = TREE_CHAIN (parm);
13065 if (TREE_CODE (parm) == PARM_DECL)
13066 {
5566b478 13067 tree cleanup;
8d08fdba
MS
13068 if (DECL_NAME (parm) == NULL_TREE)
13069 {
8d08fdba 13070 pushdecl (parm);
8d08fdba 13071 }
a1774733 13072 else if (TREE_CODE (TREE_TYPE (parm)) == VOID_TYPE)
8251199e 13073 cp_error ("parameter `%D' declared void", parm);
8d08fdba
MS
13074 else
13075 {
13076 /* Now fill in DECL_REFERENCE_SLOT for any of the parm decls.
13077 A parameter is assumed not to have any side effects.
13078 If this should change for any reason, then this
13079 will have to wrap the bashed reference type in a save_expr.
13080
13081 Also, if the parameter type is declared to be an X
13082 and there is an X(X&) constructor, we cannot lay it
13083 into the stack (any more), so we make this parameter
13084 look like it is really of reference type. Functions
13085 which pass parameters to this function will know to
13086 create a temporary in their frame, and pass a reference
13087 to that. */
13088
13089 if (TREE_CODE (TREE_TYPE (parm)) == REFERENCE_TYPE
13090 && TYPE_SIZE (TREE_TYPE (TREE_TYPE (parm))))
13091 SET_DECL_REFERENCE_SLOT (parm, convert_from_reference (parm));
13092
13093 pushdecl (parm);
13094 }
5156628f 13095 if (! processing_template_decl
5566b478 13096 && (cleanup = maybe_build_cleanup (parm), cleanup))
8d08fdba
MS
13097 {
13098 expand_decl (parm);
8d08fdba 13099 parms_have_cleanups = 1;
eb66be0e
MS
13100
13101 /* Keep track of the cleanups. */
13102 cleanups = tree_cons (parm, cleanup, cleanups);
8d08fdba
MS
13103 }
13104 }
13105 else
13106 {
13107 /* If we find an enum constant or a type tag,
13108 put it aside for the moment. */
13109 TREE_CHAIN (parm) = NULL_TREE;
13110 nonparms = chainon (nonparms, parm);
13111 }
13112 }
13113
13114 /* Get the decls in their original chain order
13115 and record in the function. This is all and only the
13116 PARM_DECLs that were pushed into scope by the loop above. */
13117 DECL_ARGUMENTS (fndecl) = getdecls ();
13118
13119 storetags (chainon (parmtags, gettags ()));
13120 }
13121 else
13122 DECL_ARGUMENTS (fndecl) = NULL_TREE;
13123
13124 /* Now store the final chain of decls for the arguments
13125 as the decl-chain of the current lexical scope.
13126 Put the enumerators in as well, at the front so that
13127 DECL_ARGUMENTS is not modified. */
13128
13129 storedecls (chainon (nonparms, DECL_ARGUMENTS (fndecl)));
13130
f181d4ae
MM
13131 /* Declare __FUNCTION__ and __PRETTY_FUNCTION__ for this function. */
13132 declare_function_name ();
13133
8d08fdba
MS
13134 /* Initialize the RTL code for the function. */
13135 DECL_SAVED_INSNS (fndecl) = NULL_RTX;
5156628f 13136 if (! processing_template_decl)
5566b478 13137 expand_function_start (fndecl, parms_have_cleanups);
8d08fdba 13138
eb448459
MS
13139 current_function_parms_stored = 1;
13140
13141 /* If this function is `main', emit a call to `__main'
13142 to run global initializers, etc. */
35680744
MM
13143 if (DECL_MAIN_P (fndecl))
13144 expand_main_function ();
eb448459 13145
eb66be0e
MS
13146 /* Now that we have initialized the parms, we can start their
13147 cleanups. We cannot do this before, since expand_decl_cleanup
13148 should not be called before the parm can be used. */
eb448459 13149 if (cleanups
eb66be0e
MS
13150 && ! processing_template_decl)
13151 {
13152 for (cleanups = nreverse (cleanups); cleanups; cleanups = TREE_CHAIN (cleanups))
13153 {
13154 if (! expand_decl_cleanup (TREE_PURPOSE (cleanups), TREE_VALUE (cleanups)))
8251199e 13155 cp_error ("parser lost in parsing declaration of `%D'",
eb66be0e
MS
13156 TREE_PURPOSE (cleanups));
13157 }
13158 }
13159
8d08fdba
MS
13160 /* Create a binding contour which can be used to catch
13161 cleanup-generated temporaries. Also, if the return value needs or
13162 has initialization, deal with that now. */
13163 if (parms_have_cleanups)
13164 {
13165 pushlevel (0);
13166 expand_start_bindings (0);
13167 }
13168
5156628f 13169 if (! processing_template_decl && flag_exceptions)
f30432d7 13170 {
f30432d7
MS
13171 /* Do the starting of the exception specifications, if we have any. */
13172 if (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (current_function_decl)))
13173 expand_start_eh_spec ();
f30432d7 13174 }
eb448459 13175
5c825fc2 13176 last_parm_cleanup_insn = get_last_insn ();
72b7eeff 13177 last_dtor_insn = get_last_insn ();
8d08fdba
MS
13178}
13179
13180/* Bind a name and initialization to the return value of
13181 the current function. */
e92cc029 13182
8d08fdba
MS
13183void
13184store_return_init (return_id, init)
13185 tree return_id, init;
13186{
13187 tree decl = DECL_RESULT (current_function_decl);
13188
e1cd6e56 13189 if (pedantic)
8d08fdba
MS
13190 /* Give this error as many times as there are occurrences,
13191 so that users can use Emacs compilation buffers to find
13192 and fix all such places. */
8251199e 13193 pedwarn ("ANSI C++ does not permit named return values");
8d08fdba
MS
13194
13195 if (return_id != NULL_TREE)
13196 {
13197 if (DECL_NAME (decl) == NULL_TREE)
13198 {
13199 DECL_NAME (decl) = return_id;
13200 DECL_ASSEMBLER_NAME (decl) = return_id;
13201 }
13202 else
8251199e 13203 cp_error ("return identifier `%D' already in place", decl);
8d08fdba
MS
13204 }
13205
13206 /* Can't let this happen for constructors. */
13207 if (DECL_CONSTRUCTOR_P (current_function_decl))
13208 {
8251199e 13209 error ("can't redefine default return value for constructors");
8d08fdba
MS
13210 return;
13211 }
13212
13213 /* If we have a named return value, put that in our scope as well. */
13214 if (DECL_NAME (decl) != NULL_TREE)
13215 {
13216 /* If this named return value comes in a register,
13217 put it in a pseudo-register. */
13218 if (DECL_REGISTER (decl))
13219 {
13220 original_result_rtx = DECL_RTL (decl);
13221 DECL_RTL (decl) = gen_reg_rtx (DECL_MODE (decl));
13222 }
13223
82580166 13224 /* Let `cp_finish_decl' know that this initializer is ok. */
8d08fdba
MS
13225 DECL_INITIAL (decl) = init;
13226 pushdecl (decl);
e76a2646
MS
13227
13228 if (minimal_parse_mode)
13229 add_tree (build_min_nt (RETURN_INIT, return_id,
13230 copy_to_permanent (init)));
13231 else
dae1d6f6 13232 cp_finish_decl (decl, init, NULL_TREE, 0, 0);
8d08fdba
MS
13233 }
13234}
13235
8d08fdba
MS
13236\f
13237/* Finish up a function declaration and compile that function
13238 all the way to assembler language output. The free the storage
13239 for the function definition.
13240
13241 This is called after parsing the body of the function definition.
13242 LINENO is the current line number.
13243
f181d4ae
MM
13244 FLAGS is a bitwise or of the following values:
13245 1 - CALL_POPLEVEL
13246 An extra call to poplevel (and expand_end_bindings) must be
13247 made to take care of the binding contour for the base
13248 initializers. This is only relevant for constructors.
13249 2 - INCLASS_INLINE
13250 We just finished processing the body of an in-class inline
13251 function definition. (This processing will have taken place
13252 after the class definition is complete.)
e92cc029
MS
13253
13254 NESTED is nonzero if we were in the middle of compiling another function
13255 when we started on this one. */
8d08fdba
MS
13256
13257void
f181d4ae 13258finish_function (lineno, flags, nested)
8d08fdba 13259 int lineno;
f181d4ae 13260 int flags;
db5ae43f 13261 int nested;
8d08fdba
MS
13262{
13263 register tree fndecl = current_function_decl;
13264 tree fntype, ctype = NULL_TREE;
f30432d7 13265 rtx last_parm_insn, insns;
8d08fdba
MS
13266 /* Label to use if this function is supposed to return a value. */
13267 tree no_return_label = NULL_TREE;
13268 tree decls = NULL_TREE;
f181d4ae
MM
13269 int call_poplevel = (flags & 1) != 0;
13270 int inclass_inline = (flags & 2) != 0;
13271 int in_template;
8d08fdba
MS
13272
13273 /* When we get some parse errors, we can end up without a
13274 current_function_decl, so cope. */
13275 if (fndecl == NULL_TREE)
13276 return;
13277
e92cc029
MS
13278 if (! nested && function_depth > 1)
13279 nested = 1;
13280
8d08fdba
MS
13281 fntype = TREE_TYPE (fndecl);
13282
13283/* TREE_READONLY (fndecl) = 1;
13284 This caused &foo to be of type ptr-to-const-function
13285 which then got a warning when stored in a ptr-to-function variable. */
13286
13287 /* This happens on strange parse errors. */
13288 if (! current_function_parms_stored)
13289 {
13290 call_poplevel = 0;
13291 store_parm_decls ();
13292 }
13293
5156628f 13294 if (processing_template_decl)
8d08fdba 13295 {
5566b478
MS
13296 if (DECL_CONSTRUCTOR_P (fndecl) && call_poplevel)
13297 {
13298 decls = getdecls ();
13299 expand_end_bindings (decls, decls != NULL_TREE, 0);
13300 poplevel (decls != NULL_TREE, 0, 0);
13301 }
13302 }
13303 else
13304 {
13305 if (write_symbols != NO_DEBUG /*&& TREE_CODE (fntype) != METHOD_TYPE*/)
8d08fdba 13306 {
5566b478
MS
13307 tree ttype = target_type (fntype);
13308 tree parmdecl;
13309
8d08fdba
MS
13310 if (IS_AGGR_TYPE (ttype))
13311 /* Let debugger know it should output info for this type. */
13312 note_debug_info_needed (ttype);
5566b478
MS
13313
13314 for (parmdecl = DECL_ARGUMENTS (fndecl); parmdecl; parmdecl = TREE_CHAIN (parmdecl))
13315 {
13316 ttype = target_type (TREE_TYPE (parmdecl));
13317 if (IS_AGGR_TYPE (ttype))
13318 /* Let debugger know it should output info for this type. */
13319 note_debug_info_needed (ttype);
13320 }
8d08fdba 13321 }
8d08fdba 13322
5566b478
MS
13323 /* Clean house because we will need to reorder insns here. */
13324 do_pending_stack_adjust ();
8d08fdba 13325
5566b478 13326 if (dtor_label)
8d08fdba 13327 {
5566b478
MS
13328 tree binfo = TYPE_BINFO (current_class_type);
13329 tree cond = integer_one_node;
13330 tree exprstmt;
13331 tree in_charge_node = lookup_name (in_charge_identifier, 0);
13332 tree virtual_size;
13333 int ok_to_optimize_dtor = 0;
13334 int empty_dtor = get_last_insn () == last_dtor_insn;
8d08fdba 13335
5566b478
MS
13336 if (current_function_assigns_this)
13337 cond = build (NE_EXPR, boolean_type_node,
4ac14744 13338 current_class_ptr, integer_zero_node);
5566b478
MS
13339 else
13340 {
13341 int n_baseclasses = CLASSTYPE_N_BASECLASSES (current_class_type);
13342
13343 /* If this destructor is empty, then we don't need to check
13344 whether `this' is NULL in some cases. */
13345 if ((flag_this_is_variable & 1) == 0)
13346 ok_to_optimize_dtor = 1;
13347 else if (empty_dtor)
13348 ok_to_optimize_dtor
13349 = (n_baseclasses == 0
13350 || (n_baseclasses == 1
13351 && TYPE_HAS_DESTRUCTOR (TYPE_BINFO_BASETYPE (current_class_type, 0))));
13352 }
8d08fdba 13353
5566b478
MS
13354 /* These initializations might go inline. Protect
13355 the binding level of the parms. */
13356 pushlevel (0);
13357 expand_start_bindings (0);
8d08fdba 13358
5566b478
MS
13359 if (current_function_assigns_this)
13360 {
13361 current_function_assigns_this = 0;
13362 current_function_just_assigned_this = 0;
13363 }
8d08fdba 13364
5566b478
MS
13365 /* Generate the code to call destructor on base class.
13366 If this destructor belongs to a class with virtual
13367 functions, then set the virtual function table
13368 pointer to represent the type of our base class. */
8d08fdba 13369
5566b478 13370 /* This side-effect makes call to `build_delete' generate the
2a2480e1
JM
13371 code we have to have at the end of this destructor.
13372 `build_delete' will set the flag again. */
5566b478 13373 TYPE_HAS_DESTRUCTOR (current_class_type) = 0;
8d08fdba 13374
5566b478
MS
13375 /* These are two cases where we cannot delegate deletion. */
13376 if (TYPE_USES_VIRTUAL_BASECLASSES (current_class_type)
13377 || TYPE_GETS_REG_DELETE (current_class_type))
4ac14744 13378 exprstmt = build_delete (current_class_type, current_class_ref, integer_zero_node,
e92cc029 13379 LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR|LOOKUP_NORMAL, 0);
5566b478 13380 else
4ac14744 13381 exprstmt = build_delete (current_class_type, current_class_ref, in_charge_node,
e92cc029 13382 LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR|LOOKUP_NORMAL, 0);
5566b478
MS
13383
13384 /* If we did not assign to this, then `this' is non-zero at
13385 the end of a destructor. As a special optimization, don't
13386 emit test if this is an empty destructor. If it does nothing,
13387 it does nothing. If it calls a base destructor, the base
13388 destructor will perform the test. */
13389
13390 if (exprstmt != error_mark_node
13391 && (TREE_CODE (exprstmt) != NOP_EXPR
13392 || TREE_OPERAND (exprstmt, 0) != integer_zero_node
13393 || TYPE_USES_VIRTUAL_BASECLASSES (current_class_type)))
8d08fdba 13394 {
5566b478
MS
13395 expand_label (dtor_label);
13396 if (cond != integer_one_node)
13397 expand_start_cond (cond, 0);
13398 if (exprstmt != void_zero_node)
13399 /* Don't call `expand_expr_stmt' if we're not going to do
13400 anything, since -Wall will give a diagnostic. */
13401 expand_expr_stmt (exprstmt);
13402
13403 /* Run destructor on all virtual baseclasses. */
13404 if (TYPE_USES_VIRTUAL_BASECLASSES (current_class_type))
8d08fdba 13405 {
5566b478
MS
13406 tree vbases = nreverse (copy_list (CLASSTYPE_VBASECLASSES (current_class_type)));
13407 expand_start_cond (build (BIT_AND_EXPR, integer_type_node,
13408 in_charge_node, integer_two_node), 0);
13409 while (vbases)
8d08fdba 13410 {
5566b478
MS
13411 if (TYPE_NEEDS_DESTRUCTOR (BINFO_TYPE (vbases)))
13412 {
bd6dd845
MS
13413 tree vb = get_vbase
13414 (BINFO_TYPE (vbases),
8ea2460f 13415 TYPE_BINFO (current_class_type));
e92cc029 13416 expand_expr_stmt
bd6dd845
MS
13417 (build_scoped_method_call
13418 (current_class_ref, vb, dtor_identifier,
e66d884e 13419 build_expr_list (NULL_TREE, integer_zero_node)));
5566b478
MS
13420 }
13421 vbases = TREE_CHAIN (vbases);
8d08fdba 13422 }
5566b478 13423 expand_end_cond ();
8d08fdba 13424 }
5566b478
MS
13425
13426 do_pending_stack_adjust ();
13427 if (cond != integer_one_node)
13428 expand_end_cond ();
8d08fdba
MS
13429 }
13430
5566b478
MS
13431 virtual_size = c_sizeof (current_class_type);
13432
13433 /* At the end, call delete if that's what's requested. */
519ebd1e
JM
13434
13435 /* FDIS sez: At the point of definition of a virtual destructor
13436 (including an implicit definition), non-placement operator
13437 delete shall be looked up in the scope of the destructor's
13438 class and if found shall be accessible and unambiguous.
13439
13440 This is somewhat unclear, but I take it to mean that if the
13441 class only defines placement deletes we don't do anything here.
13442 So we pass LOOKUP_SPECULATIVELY; delete_sanity will complain
13443 for us if they ever try to delete one of these. */
13444
13445 if (TYPE_GETS_REG_DELETE (current_class_type)
13446 || TYPE_USES_VIRTUAL_BASECLASSES (current_class_type))
13447 exprstmt = build_op_delete_call
13448 (DELETE_EXPR, current_class_ptr, virtual_size,
13449 LOOKUP_NORMAL | LOOKUP_SPECULATIVELY, NULL_TREE);
5566b478
MS
13450 else
13451 exprstmt = NULL_TREE;
8d08fdba 13452
5566b478
MS
13453 if (exprstmt)
13454 {
13455 cond = build (BIT_AND_EXPR, integer_type_node,
13456 in_charge_node, integer_one_node);
13457 expand_start_cond (cond, 0);
13458 expand_expr_stmt (exprstmt);
13459 expand_end_cond ();
13460 }
8d08fdba 13461
5566b478 13462 /* End of destructor. */
fc378698 13463 expand_end_bindings (NULL_TREE, getdecls () != NULL_TREE, 0);
536333d4 13464 poplevel (getdecls () != NULL_TREE, 0, 0);
5566b478
MS
13465
13466 /* Back to the top of destructor. */
956d6950 13467 /* Don't execute destructor code if `this' is NULL. */
5566b478
MS
13468
13469 start_sequence ();
13470
13471 /* If the dtor is empty, and we know there is not possible way we
13472 could use any vtable entries, before they are possibly set by
13473 a base class dtor, we don't have to setup the vtables, as we
13474 know that any base class dtoring will set up any vtables it
13475 needs. We avoid MI, because one base class dtor can do a
13476 virtual dispatch to an overridden function that would need to
13477 have a non-related vtable set up, we cannot avoid setting up
13478 vtables in that case. We could change this to see if there is
13479 just one vtable. */
13480 if (! empty_dtor || TYPE_USES_COMPLEX_INHERITANCE (current_class_type))
13481 {
13482 /* Make all virtual function table pointers in non-virtual base
13483 classes point to CURRENT_CLASS_TYPE's virtual function
13484 tables. */
4ac14744 13485 expand_direct_vtbls_init (binfo, binfo, 1, 0, current_class_ptr);
8d08fdba 13486
5566b478 13487 if (TYPE_USES_VIRTUAL_BASECLASSES (current_class_type))
4ac14744 13488 expand_indirect_vtbls_init (binfo, current_class_ref, current_class_ptr);
5566b478
MS
13489 }
13490
13491 if (! ok_to_optimize_dtor)
13492 {
13493 cond = build_binary_op (NE_EXPR,
4ac14744 13494 current_class_ptr, integer_zero_node, 1);
5566b478
MS
13495 expand_start_cond (cond, 0);
13496 }
8d08fdba 13497
5566b478
MS
13498 insns = get_insns ();
13499 end_sequence ();
f30432d7 13500
5566b478
MS
13501 last_parm_insn = get_first_nonparm_insn ();
13502 if (last_parm_insn == NULL_RTX)
13503 last_parm_insn = get_last_insn ();
13504 else
13505 last_parm_insn = previous_insn (last_parm_insn);
8d08fdba 13506
5566b478 13507 emit_insns_after (insns, last_parm_insn);
72b7eeff 13508
5566b478
MS
13509 if (! ok_to_optimize_dtor)
13510 expand_end_cond ();
72b7eeff 13511 }
5566b478 13512 else if (current_function_assigns_this)
8d08fdba 13513 {
5566b478
MS
13514 /* Does not need to call emit_base_init, because
13515 that is done (if needed) just after assignment to this
13516 is seen. */
13517
13518 if (DECL_CONSTRUCTOR_P (current_function_decl))
13519 {
13520 end_protect_partials ();
13521 expand_label (ctor_label);
13522 ctor_label = NULL_TREE;
13523
13524 if (call_poplevel)
13525 {
13526 decls = getdecls ();
13527 expand_end_bindings (decls, decls != NULL_TREE, 0);
13528 poplevel (decls != NULL_TREE, 0, 0);
13529 }
1c2c08a5
JM
13530 /* c_expand_return knows to return 'this' from a constructor. */
13531 c_expand_return (NULL_TREE);
5566b478 13532 }
a1774733 13533 else if (TREE_CODE (TREE_TYPE (DECL_RESULT (current_function_decl))) != VOID_TYPE
5566b478
MS
13534 && return_label != NULL_RTX)
13535 no_return_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
13536
13537 current_function_assigns_this = 0;
13538 current_function_just_assigned_this = 0;
13539 base_init_expr = NULL_TREE;
8d08fdba 13540 }
5566b478
MS
13541 else if (DECL_CONSTRUCTOR_P (fndecl))
13542 {
a703fb38 13543 tree cond = NULL_TREE, thenclause = NULL_TREE;
5566b478
MS
13544 /* Allow constructor for a type to get a new instance of the object
13545 using `build_new'. */
13546 tree abstract_virtuals = CLASSTYPE_ABSTRACT_VIRTUALS (current_class_type);
13547 CLASSTYPE_ABSTRACT_VIRTUALS (current_class_type) = NULL_TREE;
f30432d7 13548
5566b478 13549 DECL_RETURNS_FIRST_ARG (fndecl) = 1;
f30432d7 13550
5566b478
MS
13551 if (flag_this_is_variable > 0)
13552 {
13553 cond = build_binary_op (EQ_EXPR,
4ac14744
MS
13554 current_class_ptr, integer_zero_node, 1);
13555 thenclause = build_modify_expr (current_class_ptr, NOP_EXPR,
5566b478
MS
13556 build_new (NULL_TREE, current_class_type, void_type_node, 0));
13557 }
f30432d7 13558
5566b478 13559 CLASSTYPE_ABSTRACT_VIRTUALS (current_class_type) = abstract_virtuals;
f30432d7 13560
5566b478
MS
13561 start_sequence ();
13562
13563 if (flag_this_is_variable > 0)
13564 {
13565 expand_start_cond (cond, 0);
13566 expand_expr_stmt (thenclause);
13567 expand_end_cond ();
13568 }
13569
13570 /* Emit insns from `emit_base_init' which sets up virtual
13571 function table pointer(s). */
13572 if (base_init_expr)
13573 {
13574 expand_expr_stmt (base_init_expr);
13575 base_init_expr = NULL_TREE;
13576 }
13577
13578 insns = get_insns ();
13579 end_sequence ();
13580
b87692e5 13581 /* This is where the body of the constructor begins. */
5566b478 13582
b87692e5 13583 emit_insns_after (insns, last_parm_cleanup_insn);
8d08fdba 13584
b7484fbe 13585 end_protect_partials ();
5566b478
MS
13586
13587 /* This is where the body of the constructor ends. */
8d08fdba
MS
13588 expand_label (ctor_label);
13589 ctor_label = NULL_TREE;
13590
13591 if (call_poplevel)
13592 {
13593 decls = getdecls ();
8d08fdba 13594 expand_end_bindings (decls, decls != NULL_TREE, 0);
5566b478 13595 poplevel (decls != NULL_TREE, 1, 0);
8d08fdba 13596 }
8d08fdba 13597
1c2c08a5
JM
13598 /* c_expand_return knows to return 'this' from a constructor. */
13599 c_expand_return (NULL_TREE);
8d08fdba 13600
5566b478
MS
13601 current_function_assigns_this = 0;
13602 current_function_just_assigned_this = 0;
13603 }
35680744 13604 else if (DECL_MAIN_P (fndecl))
8d08fdba 13605 {
5566b478
MS
13606 /* Make it so that `main' always returns 0 by default. */
13607#ifdef VMS
13608 c_expand_return (integer_one_node);
13609#else
13610 c_expand_return (integer_zero_node);
13611#endif
8d08fdba 13612 }
5566b478
MS
13613 else if (return_label != NULL_RTX
13614 && current_function_return_value == NULL_TREE
13615 && ! DECL_NAME (DECL_RESULT (current_function_decl)))
13616 no_return_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
8d08fdba 13617
eb448459
MS
13618 if (flag_exceptions)
13619 expand_exception_blocks ();
13620
5566b478
MS
13621 /* If this function is supposed to return a value, ensure that
13622 we do not fall into the cleanups by mistake. The end of our
13623 function will look like this:
13624
13625 user code (may have return stmt somewhere)
13626 goto no_return_label
13627 cleanup_label:
13628 cleanups
13629 goto return_label
13630 no_return_label:
13631 NOTE_INSN_FUNCTION_END
13632 return_label:
13633 things for return
13634
13635 If the user omits a return stmt in the USER CODE section, we
13636 will have a control path which reaches NOTE_INSN_FUNCTION_END.
13637 Otherwise, we won't. */
13638 if (no_return_label)
8d08fdba 13639 {
5566b478
MS
13640 DECL_CONTEXT (no_return_label) = fndecl;
13641 DECL_INITIAL (no_return_label) = error_mark_node;
13642 DECL_SOURCE_FILE (no_return_label) = input_filename;
13643 DECL_SOURCE_LINE (no_return_label) = lineno;
13644 expand_goto (no_return_label);
8d08fdba
MS
13645 }
13646
5566b478 13647 if (cleanup_label)
a9aedbc2 13648 {
2c73f9f5 13649 /* Remove the binding contour which is used
5566b478
MS
13650 to catch cleanup-generated temporaries. */
13651 expand_end_bindings (0, 0, 0);
13652 poplevel (0, 0, 0);
8d08fdba 13653
eb448459
MS
13654 /* Emit label at beginning of cleanup code for parameters. */
13655 emit_label (cleanup_label);
13656 }
b7484fbe 13657
5566b478
MS
13658 /* Get return value into register if that's where it's supposed to be. */
13659 if (original_result_rtx)
13660 fixup_result_decl (DECL_RESULT (fndecl), original_result_rtx);
8d08fdba 13661
5566b478
MS
13662 /* Finish building code that will trigger warnings if users forget
13663 to make their functions return values. */
13664 if (no_return_label || cleanup_label)
13665 emit_jump (return_label);
13666 if (no_return_label)
8d08fdba 13667 {
5566b478
MS
13668 /* We don't need to call `expand_*_return' here because we
13669 don't need any cleanups here--this path of code is only
13670 for error checking purposes. */
13671 expand_label (no_return_label);
8d08fdba
MS
13672 }
13673
5566b478
MS
13674 /* Generate rtl for function exit. */
13675 expand_function_end (input_filename, lineno, 1);
8d08fdba 13676 }
f181d4ae
MM
13677
13678 /* Must mark the RESULT_DECL as being in this function. */
13679 DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
13680
13681 /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
13682 to the FUNCTION_DECL node itself. */
13683 BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
13684
13685 /* If we're processing a template, squirrel away the definition
13686 until we do an instantiation. */
13687 if (processing_template_decl)
13688 {
13689 --minimal_parse_mode;
13690 DECL_SAVED_TREE (fndecl) = TREE_CHAIN (DECL_SAVED_TREE (fndecl));
13691 /* We have to save this value here in case
13692 maybe_end_member_template_processing decides to pop all the
13693 template parameters. */
13694 in_template = 1;
13695 }
13696 else
13697 in_template = 0;
8d2733ca 13698
8d08fdba
MS
13699 /* This must come after expand_function_end because cleanups might
13700 have declarations (from inline functions) that need to go into
13701 this function's blocks. */
13702 if (current_binding_level->parm_flag != 1)
13703 my_friendly_abort (122);
13704 poplevel (1, 0, 1);
13705
f181d4ae
MM
13706 /* If this is a in-class inline definition, we may have to pop the
13707 bindings for the template parameters that we added in
13708 maybe_begin_member_template_processing when start_function was
13709 called. */
13710 if (inclass_inline)
13711 maybe_end_member_template_processing ();
13712
2c73f9f5 13713 /* Reset scope for C++: if we were in the scope of a class,
db5ae43f
MS
13714 then when we finish this function, we are not longer so.
13715 This cannot be done until we know for sure that no more
13716 class members will ever be referenced in this function
13717 (i.e., calls to destructors). */
13718 if (current_class_name)
13719 {
13720 ctype = current_class_type;
13721 pop_nested_class (1);
13722 }
db5ae43f 13723
f181d4ae 13724 if (!in_template)
5566b478 13725 {
75650646
MM
13726 int saved_flag_keep_inline_functions =
13727 flag_keep_inline_functions;
13728
5566b478
MS
13729 /* So we can tell if jump_optimize sets it to 1. */
13730 can_reach_end = 0;
8d08fdba 13731
75650646 13732 if (DECL_CONTEXT (fndecl) != NULL_TREE
e1467ff2 13733 && hack_decl_function_context (fndecl))
75650646
MM
13734 /* Trick rest_of_compilation into not deferring output of this
13735 function, even if it is inline, since the rtl_obstack for
13736 this function is the function_obstack of the enclosing
13737 function and will be deallocated when the enclosing
13738 function is gone. See save_tree_status. */
13739 flag_keep_inline_functions = 1;
13740
6633d636
MS
13741 /* Run the optimizers and output the assembler code for this
13742 function. */
13743
13744 if (DECL_ARTIFICIAL (fndecl))
13745 {
13746 /* Do we really *want* to inline this synthesized method? */
13747
13748 int save_fif = flag_inline_functions;
13749 flag_inline_functions = 1;
13750
13751 /* Turn off DECL_INLINE for the moment so function_cannot_inline_p
13752 will check our size. */
13753 DECL_INLINE (fndecl) = 0;
13754
13755 rest_of_compilation (fndecl);
13756 flag_inline_functions = save_fif;
13757 }
13758 else
13759 rest_of_compilation (fndecl);
8d08fdba 13760
75650646
MM
13761 flag_keep_inline_functions = saved_flag_keep_inline_functions;
13762
5566b478
MS
13763 if (DECL_SAVED_INSNS (fndecl) && ! TREE_ASM_WRITTEN (fndecl))
13764 {
13765 /* Set DECL_EXTERNAL so that assemble_external will be called as
13766 necessary. We'll clear it again in finish_file. */
13767 if (! DECL_EXTERNAL (fndecl))
13768 DECL_NOT_REALLY_EXTERN (fndecl) = 1;
13769 DECL_EXTERNAL (fndecl) = 1;
13770 mark_inline_for_output (fndecl);
13771 }
8926095f 13772
d2e5ee5c
MS
13773 if (ctype && TREE_ASM_WRITTEN (fndecl))
13774 note_debug_info_needed (ctype);
13775
5566b478 13776 current_function_returns_null |= can_reach_end;
8d08fdba 13777
5566b478
MS
13778 /* Since we don't normally go through c_expand_return for constructors,
13779 this normally gets the wrong value.
13780 Also, named return values have their return codes emitted after
13781 NOTE_INSN_FUNCTION_END, confusing jump.c. */
13782 if (DECL_CONSTRUCTOR_P (fndecl)
13783 || DECL_NAME (DECL_RESULT (fndecl)) != NULL_TREE)
13784 current_function_returns_null = 0;
8d08fdba 13785
5566b478 13786 if (TREE_THIS_VOLATILE (fndecl) && current_function_returns_null)
8251199e 13787 cp_warning ("`noreturn' function `%D' does return", fndecl);
5566b478
MS
13788 else if ((warn_return_type || pedantic)
13789 && current_function_returns_null
a1774733 13790 && TREE_CODE (TREE_TYPE (fntype)) != VOID_TYPE)
5566b478
MS
13791 {
13792 /* If this function returns non-void and control can drop through,
13793 complain. */
8251199e 13794 cp_warning ("control reaches end of non-void function `%D'", fndecl);
5566b478
MS
13795 }
13796 /* With just -W, complain only if function returns both with
13797 and without a value. */
13798 else if (extra_warnings
13799 && current_function_returns_value && current_function_returns_null)
8251199e 13800 warning ("this function may return with or without a value");
8d08fdba 13801 }
5566b478
MS
13802
13803 --function_depth;
8d08fdba
MS
13804
13805 /* Free all the tree nodes making up this function. */
13806 /* Switch back to allocating nodes permanently
13807 until we start another function. */
db5ae43f
MS
13808 if (! nested)
13809 permanent_allocation (1);
8d08fdba 13810
8d08fdba
MS
13811 if (DECL_SAVED_INSNS (fndecl) == NULL_RTX)
13812 {
d2e5ee5c
MS
13813 tree t;
13814
8d08fdba
MS
13815 /* Stop pointing to the local nodes about to be freed. */
13816 /* But DECL_INITIAL must remain nonzero so we know this
13817 was an actual function definition. */
13818 DECL_INITIAL (fndecl) = error_mark_node;
d2e5ee5c 13819 for (t = DECL_ARGUMENTS (fndecl); t; t = TREE_CHAIN (t))
de22184b 13820 DECL_RTL (t) = DECL_INCOMING_RTL (t) = NULL_RTX;
8d08fdba
MS
13821 }
13822
e1cd6e56
MS
13823 if (DECL_STATIC_CONSTRUCTOR (fndecl))
13824 static_ctors = perm_tree_cons (NULL_TREE, fndecl, static_ctors);
13825 if (DECL_STATIC_DESTRUCTOR (fndecl))
13826 static_dtors = perm_tree_cons (NULL_TREE, fndecl, static_dtors);
13827
28cbf42c
MS
13828 if (! nested)
13829 {
13830 /* Let the error reporting routines know that we're outside a
13831 function. For a nested function, this value is used in
13832 pop_cp_function_context and then reset via pop_function_context. */
13833 current_function_decl = NULL_TREE;
13834 }
13835
e349ee73 13836 named_label_uses = NULL;
4ac14744
MS
13837 current_class_ptr = NULL_TREE;
13838 current_class_ref = NULL_TREE;
8d08fdba
MS
13839}
13840\f
13841/* Create the FUNCTION_DECL for a function definition.
8d08fdba
MS
13842 DECLSPECS and DECLARATOR are the parts of the declaration;
13843 they describe the return type and the name of the function,
13844 but twisted together in a fashion that parallels the syntax of C.
13845
13846 This function creates a binding context for the function body
13847 as well as setting up the FUNCTION_DECL in current_function_decl.
13848
13849 Returns a FUNCTION_DECL on success.
13850
13851 If the DECLARATOR is not suitable for a function (it defines a datum
13852 instead), we return 0, which tells yyparse to report a parse error.
13853
13854 May return void_type_node indicating that this method is actually
13855 a friend. See grokfield for more details.
13856
13857 Came here with a `.pushlevel' .
13858
13859 DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
13860 CHANGES TO CODE IN `grokfield'. */
e92cc029 13861
8d08fdba 13862tree
acf82af2
JM
13863start_method (declspecs, declarator, attrlist)
13864 tree declarator, declspecs, attrlist;
8d08fdba 13865{
c11b6f21 13866 tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
acf82af2 13867 attrlist);
8d08fdba
MS
13868
13869 /* Something too ugly to handle. */
13870 if (fndecl == NULL_TREE)
13871 return NULL_TREE;
13872
13873 /* Pass friends other than inline friend functions back. */
a1774733 13874 if (fndecl == void_type_node)
8d08fdba
MS
13875 return fndecl;
13876
13877 if (TREE_CODE (fndecl) != FUNCTION_DECL)
13878 /* Not a function, tell parser to report parse error. */
13879 return NULL_TREE;
13880
13881 if (IS_SIGNATURE (current_class_type))
824b9a4c 13882 IS_DEFAULT_IMPLEMENTATION (fndecl) = 1;
8d08fdba
MS
13883
13884 if (DECL_IN_AGGR_P (fndecl))
13885 {
13886 if (IDENTIFIER_ERROR_LOCUS (DECL_ASSEMBLER_NAME (fndecl)) != current_class_type)
13887 {
2c73f9f5
ML
13888 if (DECL_CONTEXT (fndecl)
13889 && TREE_CODE( DECL_CONTEXT (fndecl)) != NAMESPACE_DECL)
8251199e
JM
13890 cp_error ("`%D' is already defined in class %s", fndecl,
13891 TYPE_NAME_STRING (DECL_CONTEXT (fndecl)));
8d08fdba
MS
13892 }
13893 return void_type_node;
13894 }
13895
f3400fe2
JM
13896 check_template_shadow (fndecl);
13897
faae18ab
MS
13898 DECL_THIS_INLINE (fndecl) = 1;
13899
8926095f 13900 if (flag_default_inline)
8d08fdba
MS
13901 DECL_INLINE (fndecl) = 1;
13902
36a117a5
MM
13903 /* We process method specializations in finish_struct_1. */
13904 if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
3ac3d9ea 13905 fndecl = push_template_decl (fndecl);
a0a33927 13906
8d08fdba
MS
13907 /* We read in the parameters on the maybepermanent_obstack,
13908 but we won't be getting back to them until after we
13909 may have clobbered them. So the call to preserve_data
13910 will keep them safe. */
13911 preserve_data ();
13912
13913 if (! DECL_FRIEND_P (fndecl))
13914 {
8d08fdba
MS
13915 if (TREE_CHAIN (fndecl))
13916 {
13917 fndecl = copy_node (fndecl);
13918 TREE_CHAIN (fndecl) = NULL_TREE;
13919 }
13920
13921 if (DECL_CONSTRUCTOR_P (fndecl))
a0a33927
MS
13922 {
13923 if (! grok_ctor_properties (current_class_type, fndecl))
13924 return void_type_node;
13925 }
8d08fdba
MS
13926 else if (IDENTIFIER_OPNAME_P (DECL_NAME (fndecl)))
13927 grok_op_properties (fndecl, DECL_VIRTUAL_P (fndecl), 0);
13928 }
13929
82580166 13930 cp_finish_decl (fndecl, NULL_TREE, NULL_TREE, 0, 0);
8d08fdba
MS
13931
13932 /* Make a place for the parms */
13933 pushlevel (0);
13934 current_binding_level->parm_flag = 1;
13935
13936 DECL_IN_AGGR_P (fndecl) = 1;
13937 return fndecl;
13938}
13939
13940/* Go through the motions of finishing a function definition.
13941 We don't compile this method until after the whole class has
13942 been processed.
13943
13944 FINISH_METHOD must return something that looks as though it
13945 came from GROKFIELD (since we are defining a method, after all).
13946
13947 This is called after parsing the body of the function definition.
13948 STMTS is the chain of statements that makes up the function body.
13949
13950 DECL is the ..._DECL that `start_method' provided. */
13951
13952tree
13953finish_method (decl)
13954 tree decl;
13955{
13956 register tree fndecl = decl;
13957 tree old_initial;
8d08fdba
MS
13958
13959 register tree link;
13960
a1774733 13961 if (decl == void_type_node)
8d08fdba
MS
13962 return decl;
13963
13964 old_initial = DECL_INITIAL (fndecl);
13965
13966 /* Undo the level for the parms (from start_method).
13967 This is like poplevel, but it causes nothing to be
13968 saved. Saving information here confuses symbol-table
13969 output routines. Besides, this information will
13970 be correctly output when this method is actually
13971 compiled. */
13972
13973 /* Clear out the meanings of the local variables of this level;
13974 also record in each decl which block it belongs to. */
13975
13976 for (link = current_binding_level->names; link; link = TREE_CHAIN (link))
13977 {
13978 if (DECL_NAME (link) != NULL_TREE)
f181d4ae 13979 pop_binding (DECL_NAME (link));
8d08fdba
MS
13980 my_friendly_assert (TREE_CODE (link) != FUNCTION_DECL, 163);
13981 DECL_CONTEXT (link) = NULL_TREE;
13982 }
13983
8d08fdba
MS
13984 GNU_xref_end_scope ((HOST_WIDE_INT) current_binding_level,
13985 (HOST_WIDE_INT) current_binding_level->level_chain,
13986 current_binding_level->parm_flag,
5566b478 13987 current_binding_level->keep);
8d08fdba
MS
13988
13989 poplevel (0, 0, 0);
13990
13991 DECL_INITIAL (fndecl) = old_initial;
13992
13993 /* We used to check if the context of FNDECL was different from
13994 current_class_type as another way to get inside here. This didn't work
13995 for String.cc in libg++. */
13996 if (DECL_FRIEND_P (fndecl))
13997 {
13998 CLASSTYPE_INLINE_FRIENDS (current_class_type)
13999 = tree_cons (NULL_TREE, fndecl, CLASSTYPE_INLINE_FRIENDS (current_class_type));
14000 decl = void_type_node;
14001 }
14002
14003 return decl;
14004}
14005\f
14006/* Called when a new struct TYPE is defined.
14007 If this structure or union completes the type of any previous
14008 variable declaration, lay it out and output its rtl. */
14009
14010void
14011hack_incomplete_structures (type)
14012 tree type;
14013{
f30432d7 14014 tree *list;
8d08fdba 14015
f30432d7 14016 if (current_binding_level->incomplete == NULL_TREE)
8d08fdba
MS
14017 return;
14018
14019 if (!type) /* Don't do this for class templates. */
14020 return;
14021
f30432d7
MS
14022 for (list = &current_binding_level->incomplete; *list; )
14023 {
14024 tree decl = TREE_VALUE (*list);
a703fb38 14025 if ((decl && TREE_TYPE (decl) == type)
f30432d7
MS
14026 || (TREE_TYPE (decl)
14027 && TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
14028 && TREE_TYPE (TREE_TYPE (decl)) == type))
14029 {
14030 int toplevel = toplevel_bindings_p ();
14031 if (TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
14032 && TREE_TYPE (TREE_TYPE (decl)) == type)
14033 layout_type (TREE_TYPE (decl));
14034 layout_decl (decl, 0);
14035 rest_of_decl_compilation (decl, NULL_PTR, toplevel, 0);
14036 if (! toplevel)
14037 {
14038 tree cleanup;
14039 expand_decl (decl);
14040 cleanup = maybe_build_cleanup (decl);
14041 expand_decl_init (decl);
e349ee73 14042 if (! expand_decl_cleanup (decl, cleanup))
8251199e 14043 cp_error ("parser lost in parsing declaration of `%D'",
f30432d7
MS
14044 decl);
14045 }
14046 *list = TREE_CHAIN (*list);
14047 }
14048 else
14049 list = &TREE_CHAIN (*list);
14050 }
8d08fdba
MS
14051}
14052
8d08fdba 14053/* If DECL is of a type which needs a cleanup, build that cleanup here.
c73964b2 14054 See build_delete for information about AUTO_DELETE.
8d08fdba
MS
14055
14056 Don't build these on the momentary obstack; they must live
14057 the life of the binding contour. */
e92cc029 14058
c73964b2
MS
14059static tree
14060maybe_build_cleanup_1 (decl, auto_delete)
14061 tree decl, auto_delete;
8d08fdba
MS
14062{
14063 tree type = TREE_TYPE (decl);
14064 if (TYPE_NEEDS_DESTRUCTOR (type))
14065 {
14066 int temp = 0, flags = LOOKUP_NORMAL|LOOKUP_DESTRUCTOR;
14067 tree rval;
8d08fdba
MS
14068
14069 if (TREE_CODE (decl) != PARM_DECL)
14070 temp = suspend_momentary ();
14071
14072 if (TREE_CODE (type) == ARRAY_TYPE)
14073 rval = decl;
14074 else
14075 {
14076 mark_addressable (decl);
14077 rval = build_unary_op (ADDR_EXPR, decl, 0);
14078 }
14079
14080 /* Optimize for space over speed here. */
14081 if (! TYPE_USES_VIRTUAL_BASECLASSES (type)
14082 || flag_expensive_optimizations)
14083 flags |= LOOKUP_NONVIRTUAL;
14084
c73964b2 14085 rval = build_delete (TREE_TYPE (rval), rval, auto_delete, flags, 0);
8d08fdba
MS
14086
14087 if (TYPE_USES_VIRTUAL_BASECLASSES (type)
14088 && ! TYPE_HAS_DESTRUCTOR (type))
e66d884e
JM
14089 rval = build_compound_expr (expr_tree_cons (NULL_TREE, rval,
14090 build_expr_list (NULL_TREE, build_vbase_delete (type, decl))));
8d08fdba 14091
8d08fdba
MS
14092 if (TREE_CODE (decl) != PARM_DECL)
14093 resume_momentary (temp);
14094
8d08fdba
MS
14095 return rval;
14096 }
14097 return 0;
14098}
c73964b2
MS
14099
14100/* If DECL is of a type which needs a cleanup, build that cleanup
14101 here. The cleanup does free the storage with a call to delete. */
14102
14103tree
14104maybe_build_cleanup_and_delete (decl)
14105 tree decl;
14106{
14107 return maybe_build_cleanup_1 (decl, integer_three_node);
14108}
14109
14110/* If DECL is of a type which needs a cleanup, build that cleanup
14111 here. The cleanup does not free the storage with a call a delete. */
14112
14113tree
14114maybe_build_cleanup (decl)
14115 tree decl;
14116{
14117 return maybe_build_cleanup_1 (decl, integer_two_node);
14118}
8d08fdba
MS
14119\f
14120/* Expand a C++ expression at the statement level.
14121 This is needed to ferret out nodes which have UNKNOWN_TYPE.
14122 The C++ type checker should get all of these out when
14123 expressions are combined with other, type-providing, expressions,
14124 leaving only orphan expressions, such as:
14125
e92cc029 14126 &class::bar; / / takes its address, but does nothing with it. */
8d08fdba 14127
8d08fdba
MS
14128void
14129cplus_expand_expr_stmt (exp)
14130 tree exp;
14131{
5156628f 14132 if (processing_template_decl)
5566b478
MS
14133 {
14134 add_tree (build_min_nt (EXPR_STMT, exp));
14135 return;
14136 }
14137
eb66be0e
MS
14138 /* Arrange for all temps to disappear. */
14139 expand_start_target_temps ();
14140
8d08fdba
MS
14141 if (TREE_TYPE (exp) == unknown_type_node)
14142 {
59e76fc6 14143 if (TREE_CODE (exp) == COMPONENT_REF)
848b92e1 14144 error ("invalid reference to a member function name, did you forget the ()?");
59e76fc6
JM
14145 else
14146 error ("address of overloaded function with no contextual type information");
8d08fdba
MS
14147 }
14148 else
14149 {
8d08fdba
MS
14150 if (TREE_CODE (exp) == FUNCTION_DECL)
14151 {
8251199e
JM
14152 cp_warning ("reference, not call, to function `%D'", exp);
14153 warning ("at this point in file");
8d08fdba 14154 }
8d08fdba 14155
63c68bb7
MS
14156#if 0
14157 /* We should do this eventually, but right now this causes regex.o from
14158 libg++ to miscompile, and tString to core dump. */
5b605f68 14159 exp = build1 (CLEANUP_POINT_EXPR, TREE_TYPE (exp), exp);
63c68bb7 14160#endif
b3e401c2
JM
14161
14162 /* Strip unused implicit INDIRECT_REFs of references. */
14163 if (TREE_CODE (exp) == INDIRECT_REF
14164 && TREE_CODE (TREE_TYPE (TREE_OPERAND (exp, 0))) == REFERENCE_TYPE)
14165 exp = TREE_OPERAND (exp, 0);
14166
d2e5ee5c
MS
14167 /* If we don't do this, we end up down inside expand_expr
14168 trying to do TYPE_MODE on the ERROR_MARK, and really
14169 go outside the bounds of the type. */
14170 if (exp != error_mark_node)
14171 expand_expr_stmt (break_out_cleanups (exp));
8d08fdba
MS
14172 }
14173
14174 /* Clean up any pending cleanups. This happens when a function call
14175 returns a cleanup-needing value that nobody uses. */
eb66be0e 14176 expand_end_target_temps ();
8d08fdba
MS
14177}
14178
14179/* When a stmt has been parsed, this function is called.
14180
14181 Currently, this function only does something within a
14182 constructor's scope: if a stmt has just assigned to this,
14183 and we are in a derived class, we call `emit_base_init'. */
14184
14185void
14186finish_stmt ()
14187{
14188 extern struct nesting *cond_stack, *loop_stack, *case_stack;
14189
14190
14191 if (current_function_assigns_this
14192 || ! current_function_just_assigned_this)
14193 return;
14194 if (DECL_CONSTRUCTOR_P (current_function_decl))
14195 {
14196 /* Constructors must wait until we are out of control
14197 zones before calling base constructors. */
14198 if (cond_stack || loop_stack || case_stack)
14199 return;
a9aedbc2 14200 expand_expr_stmt (base_init_expr);
8d08fdba
MS
14201 check_base_init (current_class_type);
14202 }
14203 current_function_assigns_this = 1;
8d08fdba
MS
14204}
14205
8d08fdba 14206/* Change a static member function definition into a FUNCTION_TYPE, instead
700f8a87
MS
14207 of the METHOD_TYPE that we create when it's originally parsed.
14208
14209 WARNING: DO NOT pass &TREE_TYPE (decl) to FN or &TYPE_ARG_TYPES
14210 (TREE_TYPE (decl)) to ARGTYPES, as doing so will corrupt the types of
14211 other decls. Either pass the addresses of local variables or NULL. */
14212
8857f91e 14213void
700f8a87
MS
14214revert_static_member_fn (decl, fn, argtypes)
14215 tree *decl, *fn, *argtypes;
8d08fdba 14216{
700f8a87
MS
14217 tree tmp;
14218 tree function = fn ? *fn : TREE_TYPE (*decl);
14219 tree args = argtypes ? *argtypes : TYPE_ARG_TYPES (function);
8d08fdba 14220
91063b51
MM
14221 if (CP_TYPE_QUALS (TREE_TYPE (TREE_VALUE (args)))
14222 != TYPE_UNQUALIFIED)
14223 cp_error ("static member function `%#D' declared with type qualifiers",
14224 *decl);
f30432d7 14225
700f8a87
MS
14226 args = TREE_CHAIN (args);
14227 tmp = build_function_type (TREE_TYPE (function), args);
91063b51 14228 tmp = build_qualified_type (tmp, CP_TYPE_QUALS (function));
f30432d7 14229 tmp = build_exception_variant (tmp,
8d08fdba
MS
14230 TYPE_RAISES_EXCEPTIONS (function));
14231 TREE_TYPE (*decl) = tmp;
f30432d7
MS
14232 if (DECL_ARGUMENTS (*decl))
14233 DECL_ARGUMENTS (*decl) = TREE_CHAIN (DECL_ARGUMENTS (*decl));
8d08fdba 14234 DECL_STATIC_FUNCTION_P (*decl) = 1;
700f8a87
MS
14235 if (fn)
14236 *fn = tmp;
14237 if (argtypes)
14238 *argtypes = args;
8d08fdba 14239}
a4443a08
MS
14240
14241int
14242id_in_current_class (id)
14243 tree id;
14244{
14245 return !!purpose_member (id, class_binding_level->class_shadowed);
14246}
db5ae43f
MS
14247
14248struct cp_function
14249{
14250 int returns_value;
14251 int returns_null;
db5ae43f
MS
14252 int assigns_this;
14253 int just_assigned_this;
14254 int parms_stored;
7215f9a0 14255 int temp_name_counter;
db5ae43f 14256 tree named_labels;
5524676d 14257 struct named_label_list *named_label_uses;
db5ae43f
MS
14258 tree shadowed_labels;
14259 tree ctor_label;
14260 tree dtor_label;
72b7eeff 14261 rtx last_dtor_insn;
b87692e5 14262 rtx last_parm_cleanup_insn;
79ff2c6c
MS
14263 tree base_init_list;
14264 tree member_init_list;
a9aedbc2 14265 tree base_init_expr;
4ac14744
MS
14266 tree current_class_ptr;
14267 tree current_class_ref;
db5ae43f
MS
14268 rtx result_rtx;
14269 struct cp_function *next;
14270 struct binding_level *binding_level;
42976354 14271 int static_labelno;
db5ae43f
MS
14272};
14273
bd6dd845 14274static struct cp_function *cp_function_chain;
db5ae43f 14275
7215f9a0
MS
14276extern int temp_name_counter;
14277
db5ae43f
MS
14278/* Save and reinitialize the variables
14279 used during compilation of a C++ function. */
14280
14281void
28cbf42c
MS
14282push_cp_function_context (context)
14283 tree context;
db5ae43f
MS
14284{
14285 struct cp_function *p
14286 = (struct cp_function *) xmalloc (sizeof (struct cp_function));
14287
28cbf42c 14288 push_function_context_to (context);
db5ae43f
MS
14289
14290 p->next = cp_function_chain;
14291 cp_function_chain = p;
14292
14293 p->named_labels = named_labels;
5524676d 14294 p->named_label_uses = named_label_uses;
db5ae43f
MS
14295 p->shadowed_labels = shadowed_labels;
14296 p->returns_value = current_function_returns_value;
14297 p->returns_null = current_function_returns_null;
db5ae43f
MS
14298 p->binding_level = current_binding_level;
14299 p->ctor_label = ctor_label;
14300 p->dtor_label = dtor_label;
72b7eeff 14301 p->last_dtor_insn = last_dtor_insn;
b87692e5 14302 p->last_parm_cleanup_insn = last_parm_cleanup_insn;
db5ae43f
MS
14303 p->assigns_this = current_function_assigns_this;
14304 p->just_assigned_this = current_function_just_assigned_this;
14305 p->parms_stored = current_function_parms_stored;
14306 p->result_rtx = original_result_rtx;
a9aedbc2 14307 p->base_init_expr = base_init_expr;
7215f9a0 14308 p->temp_name_counter = temp_name_counter;
79ff2c6c
MS
14309 p->base_init_list = current_base_init_list;
14310 p->member_init_list = current_member_init_list;
4ac14744
MS
14311 p->current_class_ptr = current_class_ptr;
14312 p->current_class_ref = current_class_ref;
42976354 14313 p->static_labelno = static_labelno;
db5ae43f
MS
14314}
14315
14316/* Restore the variables used during compilation of a C++ function. */
14317
14318void
28cbf42c
MS
14319pop_cp_function_context (context)
14320 tree context;
db5ae43f
MS
14321{
14322 struct cp_function *p = cp_function_chain;
14323 tree link;
14324
14325 /* Bring back all the labels that were shadowed. */
14326 for (link = shadowed_labels; link; link = TREE_CHAIN (link))
14327 if (DECL_NAME (TREE_VALUE (link)) != 0)
14328 SET_IDENTIFIER_LABEL_VALUE (DECL_NAME (TREE_VALUE (link)),
14329 TREE_VALUE (link));
14330
28cbf42c 14331 pop_function_context_from (context);
db5ae43f
MS
14332
14333 cp_function_chain = p->next;
14334
14335 named_labels = p->named_labels;
5524676d 14336 named_label_uses = p->named_label_uses;
db5ae43f
MS
14337 shadowed_labels = p->shadowed_labels;
14338 current_function_returns_value = p->returns_value;
14339 current_function_returns_null = p->returns_null;
db5ae43f
MS
14340 current_binding_level = p->binding_level;
14341 ctor_label = p->ctor_label;
14342 dtor_label = p->dtor_label;
72b7eeff 14343 last_dtor_insn = p->last_dtor_insn;
b87692e5 14344 last_parm_cleanup_insn = p->last_parm_cleanup_insn;
db5ae43f
MS
14345 current_function_assigns_this = p->assigns_this;
14346 current_function_just_assigned_this = p->just_assigned_this;
14347 current_function_parms_stored = p->parms_stored;
14348 original_result_rtx = p->result_rtx;
a9aedbc2 14349 base_init_expr = p->base_init_expr;
7215f9a0 14350 temp_name_counter = p->temp_name_counter;
79ff2c6c
MS
14351 current_base_init_list = p->base_init_list;
14352 current_member_init_list = p->member_init_list;
4ac14744
MS
14353 current_class_ptr = p->current_class_ptr;
14354 current_class_ref = p->current_class_ref;
42976354 14355 static_labelno = p->static_labelno;
db5ae43f
MS
14356
14357 free (p);
14358}
ebfc180f 14359
5566b478
MS
14360int
14361in_function_p ()
14362{
14363 return function_depth != 0;
14364}
This page took 2.905191 seconds and 5 git commands to generate.