]> gcc.gnu.org Git - gcc.git/blame - gcc/cp/decl.c
configure.in: Define macros that affect features before testing for features.
[gcc.git] / gcc / cp / decl.c
CommitLineData
e5e809f4 1/* Process declarations and variables for C compiler.
06ceef4e
RK
2 Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000
3 Free Software Foundation, Inc.
e5e809f4 4 Contributed by Michael Tiemann (tiemann@cygnus.com)
8d08fdba
MS
5
6This file is part of GNU CC.
7
8GNU CC is free software; you can redistribute it and/or modify
9it under the terms of the GNU General Public License as published by
10the Free Software Foundation; either version 2, or (at your option)
11any later version.
12
13GNU CC is distributed in the hope that it will be useful,
14but WITHOUT ANY WARRANTY; without even the implied warranty of
15MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16GNU General Public License for more details.
17
18You should have received a copy of the GNU General Public License
19along with GNU CC; see the file COPYING. If not, write to
e9fa0c7c
RK
20the Free Software Foundation, 59 Temple Place - Suite 330,
21Boston, MA 02111-1307, USA. */
8d08fdba
MS
22
23
24/* Process declarations and symbol lookup for C front end.
25 Also constructs types; the standard scalar types at initialization,
26 and structure, union, array and enum types when they are declared. */
27
28/* ??? not all decl nodes are given the most useful possible
29 line numbers. For example, the CONST_DECLs for enum values. */
30
8d08fdba 31#include "config.h"
8d052bc7 32#include "system.h"
8d08fdba
MS
33#include "tree.h"
34#include "rtl.h"
3bdf5ad1 35#include "expr.h"
8d08fdba
MS
36#include "flags.h"
37#include "cp-tree.h"
38#include "decl.h"
39#include "lex.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"
4519c0a8 45#include "ggc.h"
8d08fdba 46
8d08fdba
MS
47extern int current_class_depth;
48
30394414
JM
49extern tree global_namespace;
50
158991b7 51extern int (*valid_lang_attribute) PARAMS ((tree, tree, tree, tree));
62c154ed 52
47e19316 53/* Use garbage collection. */
fc6af6e3 54
47e19316 55int ggc_p = 1;
fc6af6e3 56
255512c1 57#ifndef BOOL_TYPE_SIZE
e1cd6e56 58#ifdef SLOW_BYTE_ACCESS
2ef16140
MM
59/* In the new ABI, `bool' has size and alignment `1', on all
60 platforms. */
61#define BOOL_TYPE_SIZE \
62 ((SLOW_BYTE_ACCESS && !flag_new_abi) ? (POINTER_SIZE) : (CHAR_TYPE_SIZE))
e1cd6e56 63#else
d2e5ee5c 64#define BOOL_TYPE_SIZE CHAR_TYPE_SIZE
e1cd6e56 65#endif
255512c1
JM
66#endif
67
8d08fdba
MS
68/* We let tm.h override the types used here, to handle trivial differences
69 such as the choice of unsigned int or long unsigned int for size_t.
70 When machines start needing nontrivial differences in the size type,
71 it would be best to do something here to figure out automatically
72 from other information what type to use. */
73
74#ifndef SIZE_TYPE
75#define SIZE_TYPE "long unsigned int"
76#endif
77
78#ifndef PTRDIFF_TYPE
79#define PTRDIFF_TYPE "long int"
80#endif
81
82#ifndef WCHAR_TYPE
83#define WCHAR_TYPE "int"
84#endif
85
158991b7
KG
86static tree grokparms PARAMS ((tree, int));
87static const char *redeclaration_error_message PARAMS ((tree, tree));
8d08fdba 88
158991b7 89static void push_binding_level PARAMS ((struct binding_level *, int,
49c249e1 90 int));
158991b7
KG
91static void pop_binding_level PARAMS ((void));
92static void suspend_binding_level PARAMS ((void));
93static void resume_binding_level PARAMS ((struct binding_level *));
94static struct binding_level *make_binding_level PARAMS ((void));
95static void declare_namespace_level PARAMS ((void));
6625cdb5 96static int decl_jump_unsafe PARAMS ((tree));
158991b7
KG
97static void storedecls PARAMS ((tree));
98static void require_complete_types_for_parms PARAMS ((tree));
596ea4e5
AS
99static int ambi_op_p PARAMS ((enum tree_code));
100static int unary_op_p PARAMS ((enum tree_code));
158991b7
KG
101static tree store_bindings PARAMS ((tree, tree));
102static tree lookup_tag_reverse PARAMS ((tree, tree));
103static tree obscure_complex_init PARAMS ((tree, tree));
158991b7
KG
104static tree lookup_name_real PARAMS ((tree, int, int, int));
105static void warn_extern_redeclared_static PARAMS ((tree, tree));
106static void grok_reference_init PARAMS ((tree, tree, tree));
107static tree grokfndecl PARAMS ((tree, tree, tree, tree, int,
2c73f9f5 108 enum overload_flags, tree,
7a8f9fa9 109 tree, int, int, int, int, int, int, tree));
158991b7
KG
110static tree grokvardecl PARAMS ((tree, tree, RID_BIT_TYPE *, int, int, tree));
111static tree lookup_tag PARAMS ((enum tree_code, tree,
49c249e1
JM
112 struct binding_level *, int));
113static void set_identifier_type_value_with_scope
158991b7
KG
114 PARAMS ((tree, tree, struct binding_level *));
115static void record_builtin_type PARAMS ((enum rid, const char *, tree));
116static void record_unknown_type PARAMS ((tree, const char *));
596ea4e5 117static tree build_library_fn_1 PARAMS ((tree, enum tree_code, tree));
158991b7
KG
118static int member_function_or_else PARAMS ((tree, tree, enum overload_flags));
119static void bad_specifiers PARAMS ((tree, const char *, int, int, int, int,
49c249e1 120 int));
158991b7
KG
121static tree maybe_process_template_type_declaration PARAMS ((tree, int, struct binding_level*));
122static void check_for_uninitialized_const_var PARAMS ((tree));
123static unsigned long typename_hash PARAMS ((hash_table_key));
124static boolean typename_compare PARAMS ((hash_table_key, hash_table_key));
125static void push_binding PARAMS ((tree, tree, struct binding_level*));
126static int add_binding PARAMS ((tree, tree));
127static void pop_binding PARAMS ((tree, tree));
128static tree local_variable_p_walkfn PARAMS ((tree *, int *, void *));
129static tree find_binding PARAMS ((tree, tree));
130static tree select_decl PARAMS ((tree, int));
131static int lookup_flags PARAMS ((int, int));
132static tree qualify_lookup PARAMS ((tree, int));
133static tree record_builtin_java_type PARAMS ((const char *, int));
134static const char *tag_name PARAMS ((enum tag_types code));
135static void find_class_binding_level PARAMS ((void));
136static struct binding_level *innermost_nonclass_level PARAMS ((void));
137static void warn_about_implicit_typename_lookup PARAMS ((tree, tree));
138static int walk_namespaces_r PARAMS ((tree, walk_namespaces_fn, void *));
139static int walk_globals_r PARAMS ((tree, void *));
140static void add_decl_to_level PARAMS ((tree, struct binding_level *));
141static tree make_label_decl PARAMS ((tree, int));
6625cdb5
JM
142static void use_label PARAMS ((tree));
143static void check_previous_goto_1 PARAMS ((tree, struct binding_level *, tree,
144 const char *, int));
145static void check_previous_goto PARAMS ((struct named_label_use_list *));
146static void check_switch_goto PARAMS ((struct binding_level *));
147static void check_previous_gotos PARAMS ((tree));
148static void pop_label PARAMS ((tree, tree));
158991b7
KG
149static void pop_labels PARAMS ((tree));
150static void maybe_deduce_size_from_array_init PARAMS ((tree, tree));
151static void layout_var_decl PARAMS ((tree));
152static void maybe_commonize_var PARAMS ((tree));
153static tree check_initializer PARAMS ((tree, tree));
154static void make_rtl_for_nonlocal_decl PARAMS ((tree, tree, const char *));
155static void push_cp_function_context PARAMS ((struct function *));
156static void pop_cp_function_context PARAMS ((struct function *));
157static void mark_binding_level PARAMS ((void *));
2f8edb39 158static void mark_named_label_lists PARAMS ((void *, void *));
158991b7
KG
159static void mark_cp_function_context PARAMS ((struct function *));
160static void mark_saved_scope PARAMS ((void *));
ae499cce
MM
161static void mark_lang_function PARAMS ((struct cp_language_function *));
162static void mark_stmt_tree PARAMS ((stmt_tree));
158991b7 163static void save_function_data PARAMS ((tree));
f444e36b 164static void check_function_type PARAMS ((tree, tree));
158991b7
KG
165static void destroy_local_var PARAMS ((tree));
166static void finish_constructor_body PARAMS ((void));
167static void finish_destructor_body PARAMS ((void));
168static tree create_array_type_for_decl PARAMS ((tree, tree, tree));
169static tree get_atexit_node PARAMS ((void));
170static tree get_dso_handle_node PARAMS ((void));
171static tree start_cleanup_fn PARAMS ((void));
172static void end_cleanup_fn PARAMS ((void));
2ce07e2d 173static tree cp_make_fname_decl PARAMS ((tree, const char *, int));
d43829f9 174static void initialize_predefined_identifiers PARAMS ((void));
3dbc07b6
MM
175static tree check_special_function_return_type
176 PARAMS ((special_function_kind, tree, tree, tree));
596ea4e5
AS
177static tree push_cp_library_fn PARAMS ((enum tree_code, tree));
178static tree build_cp_library_fn PARAMS ((tree, enum tree_code, tree));
56cb9733 179static int case_compare PARAMS ((splay_tree_key, splay_tree_key));
f444e36b 180static void store_parm_decls PARAMS ((tree));
8d08fdba 181
69ac77ce 182#if defined (DEBUG_CP_BINDING_LEVELS)
158991b7 183static void indent PARAMS ((void));
69ac77ce
JL
184#endif
185
8d08fdba
MS
186/* Erroneous argument lists can use this *IFF* they do not modify it. */
187tree error_mark_list;
188
7f4edbcb 189/* The following symbols are subsumed in the cp_global_trees array, and
68642fb6 190 listed here individually for documentation purposes.
8d08fdba 191
7f4edbcb
BS
192 C++ extensions
193 tree wchar_decl_node;
37c46b43 194
7f4edbcb
BS
195 tree vtable_entry_type;
196 tree delta_type_node;
197#if 0
198 Old rtti stuff.
199 tree __baselist_desc_type_node;
200 tree __i_desc_type_node, __m_desc_type_node;
201 tree __t_desc_array_type, __i_desc_array_type, __m_desc_array_type;
946dc1c8 202#endif
7f4edbcb
BS
203 tree __t_desc_type_node;
204#if 0
205 tree __tp_desc_type_node;
206#endif
db1147b2 207 tree ti_desc_type_node;
1f4cb92b 208 tree bltn_desc_type_node, ptr_desc_type_node;
db1147b2
NS
209 tree ary_desc_type_node, func_desc_type_node, enum_desc_type_node;
210 tree class_desc_type_node, si_class_desc_type_node, vmi_class_desc_type_node;
387769ed 211 tree ptm_desc_type_node;
db1147b2 212 tree base_desc_type_node;
7f4edbcb
BS
213#if 0
214 Not needed yet? May be needed one day?
215 tree __bltn_desc_array_type, __user_desc_array_type, __class_desc_array_type;
216 tree __ptr_desc_array_type, __attr_dec_array_type, __func_desc_array_type;
217 tree __ptmf_desc_array_type, __ptmd_desc_array_type;
946dc1c8 218#endif
8d08fdba 219
7f4edbcb
BS
220 tree class_type_node, record_type_node, union_type_node, enum_type_node;
221 tree unknown_type_node;
8d08fdba 222
7f4edbcb 223 Array type `vtable_entry_type[]'
8d08fdba 224
7f4edbcb
BS
225 tree vtbl_type_node;
226 tree vtbl_ptr_type_node;
8d08fdba 227
2854d3c6 228 Namespaces,
8d08fdba 229
7f4edbcb 230 tree std_node;
2854d3c6 231 tree abi_node;
8d08fdba 232
7f4edbcb
BS
233 A FUNCTION_DECL which can call `abort'. Not necessarily the
234 one that the user will declare, but sufficient to be called
235 by routines that want to abort the program.
8d08fdba 236
7f4edbcb 237 tree abort_fndecl;
8d08fdba 238
7f4edbcb 239 The FUNCTION_DECL for the default `::operator delete'.
2986ae00 240
7f4edbcb 241 tree global_delete_fndecl;
8d08fdba 242
7f4edbcb 243 Used by RTTI
669ec2b4
JM
244 tree type_info_type_node, tinfo_decl_id, tinfo_decl_type;
245 tree tinfo_var_id;
246
7f4edbcb 247*/
8d08fdba 248
7f4edbcb 249tree cp_global_trees[CPTI_MAX];
8d08fdba 250
2c73f9f5 251/* Indicates that there is a type value in some namespace, although
7f4edbcb 252 that is not necessarily in scope at the moment. */
2c73f9f5
ML
253
254static tree global_type_node;
255
7f4edbcb 256/* Namespace std. */
0dde4175 257int in_std;
6633d636 258
3e3f722c
ML
259/* Expect only namespace names now. */
260static int only_namespace_names;
261
6625cdb5
JM
262/* Used only for jumps to as-yet undefined labels, since jumps to
263 defined labels can have their validity checked immediately. */
264
265struct named_label_use_list
e349ee73
MS
266{
267 struct binding_level *binding_level;
268 tree names_in_scope;
269 tree label_decl;
9c0758dd 270 const char *filename_o_goto;
e349ee73 271 int lineno_o_goto;
6625cdb5 272 struct named_label_use_list *next;
e349ee73
MS
273};
274
ed5511d9 275#define named_label_uses cp_function_chain->x_named_label_uses
8d08fdba
MS
276
277/* A list of objects which have constructors or destructors
278 which reside in the global scope. The decl is stored in
279 the TREE_VALUE slot and the initializer is stored
280 in the TREE_PURPOSE slot. */
281tree static_aggregates;
282
8d08fdba
MS
283/* -- end of C++ */
284
81b3411c 285/* A node for the integer constants 2, and 3. */
d11ad92e 286
81b3411c 287tree integer_two_node, integer_three_node;
8d08fdba 288
8d08fdba
MS
289/* Parsing a function declarator leaves here a chain of structure
290 and enum types declared in the parmlist. */
291
292static tree last_function_parm_tags;
293
8d08fdba 294/* Similar, for last_function_parm_tags. */
9cd64686 295tree last_function_parms;
8d08fdba
MS
296static tree current_function_parm_tags;
297
6625cdb5
JM
298/* A list of all LABEL_DECLs in the function that have names. Here so
299 we can clear out their names' definitions at the end of the
300 function, and so we can check the validity of jumps to these labels. */
301
302struct named_label_list
303{
304 struct binding_level *binding_level;
305 tree names_in_scope;
306 tree old_value;
307 tree label_decl;
308 tree bad_decls;
309 int eh_region;
310 struct named_label_list *next;
311};
8d08fdba 312
4519c0a8 313#define named_labels cp_function_chain->x_named_labels
8d08fdba 314
8d08fdba
MS
315/* Set to 0 at beginning of a function definition, and whenever
316 a label (case or named) is defined. Set to value of expression
317 returned from function when that value can be transformed into
318 a named return value. */
319
320tree current_function_return_value;
321
b8458e3e
JM
322/* Nonzero means use the ISO C94 dialect of C. */
323
324int flag_isoc94;
325
83309c26 326/* Nonzero means use the ISO C99 dialect of C. */
68642fb6 327
83309c26 328int flag_isoc99;
68642fb6 329
93e2382f
JM
330/* Nonzero means we are a hosted implementation for code shared with C. */
331
332int flag_hosted = 1;
333
334/* Nonzero means add default format_arg attributes for functions not
335 in ISO C. */
336
337int flag_noniso_default_format_attributes = 1;
338
8d08fdba
MS
339/* Nonzero means give `double' the same size as `float'. */
340
341extern int flag_short_double;
342
343/* Nonzero means don't recognize any builtin functions. */
344
345extern int flag_no_builtin;
346
00595019
MS
347/* Nonzero means don't recognize the non-ANSI builtin functions.
348 -ansi sets this. */
349
350extern int flag_no_nonansi_builtin;
351
8d08fdba
MS
352/* Nonzero if we want to conserve space in the .o files. We do this
353 by putting uninitialized data and runtime initialized data into
ddd5a7c1 354 .common instead of .data at the expense of not flagging multiple
8d08fdba
MS
355 definitions. */
356extern int flag_conserve_space;
8d08fdba 357\f
51c184be 358/* C and C++ flags are in decl2.c. */
8d08fdba 359
51c184be 360/* Flag used when debugging spew.c */
8d08fdba
MS
361
362extern int spew_debug;
363
e92cc029
MS
364/* A expression of value 0 with the same precision as a sizetype
365 node, but signed. */
366tree signed_size_zero_node;
367
0c8feefe
MM
368/* The name of the anonymous namespace, throughout this translation
369 unit. */
370tree anonymous_namespace_name;
371
b2244c65
MM
372/* The number of function bodies which we are currently processing.
373 (Zero if we are at namespace scope, one inside the body of a
374 function, two inside the body of a function in a local class, etc.) */
375int function_depth;
8d08fdba
MS
376\f
377/* For each binding contour we allocate a binding_level structure
e92cc029
MS
378 which records the names defined in that contour.
379 Contours include:
380 0) the global one
381 1) one for each function definition,
382 where internal declarations of the parameters appear.
383 2) one for each compound statement,
384 to record its declarations.
385
386 The current meaning of a name can be found by searching the levels
387 from the current one out to the global one.
388
389 Off to the side, may be the class_binding_level. This exists only
390 to catch class-local declarations. It is otherwise nonexistent.
391
392 Also there may be binding levels that catch cleanups that must be
d8f8dca1
MM
393 run when exceptions occur. Thus, to see whether a name is bound in
394 the current scope, it is not enough to look in the
395 CURRENT_BINDING_LEVEL. You should use lookup_name_current_level
396 instead. */
8d08fdba
MS
397
398/* Note that the information in the `names' component of the global contour
399 is duplicated in the IDENTIFIER_GLOBAL_VALUEs of all identifiers. */
400
401struct binding_level
402 {
403 /* A chain of _DECL nodes for all variables, constants, functions,
e92cc029 404 and typedef types. These are in the reverse of the order
f181d4ae
MM
405 supplied. There may be OVERLOADs on this list, too, but they
406 are wrapped in TREE_LISTs; the TREE_VALUE is the OVERLOAD. */
8d08fdba
MS
407 tree names;
408
e92cc029
MS
409 /* A list of structure, union and enum definitions, for looking up
410 tag names.
411 It is a chain of TREE_LIST nodes, each of whose TREE_PURPOSE is a name,
412 or NULL_TREE; and whose TREE_VALUE is a RECORD_TYPE, UNION_TYPE,
413 or ENUMERAL_TYPE node.
414
415 C++: the TREE_VALUE nodes can be simple types for
416 component_bindings. */
8d08fdba
MS
417 tree tags;
418
2c73f9f5
ML
419 /* A list of USING_DECL nodes. */
420 tree usings;
421
ea9635c7
ML
422 /* A list of used namespaces. PURPOSE is the namespace,
423 VALUE the common ancestor with this binding_level's namespace. */
424 tree using_directives;
425
f181d4ae
MM
426 /* If this binding level is the binding level for a class, then
427 class_shadowed is a TREE_LIST. The TREE_PURPOSE of each node
428 is the name of an entity bound in the class; the TREE_VALUE is
429 the IDENTIFIER_CLASS_VALUE before we entered the class. Thus,
430 when leaving class scope, we can restore the
d8f8dca1
MM
431 IDENTIFIER_CLASS_VALUE by walking this list. The TREE_TYPE is
432 the DECL bound by this name in the class. */
8d08fdba
MS
433 tree class_shadowed;
434
f181d4ae
MM
435 /* Similar to class_shadowed, but for IDENTIFIER_TYPE_VALUE, and
436 is used for all binding levels. */
8d08fdba
MS
437 tree type_shadowed;
438
acef433b
MM
439 /* A TREE_LIST. Each TREE_VALUE is the LABEL_DECL for a local
440 label in this scope. The TREE_PURPOSE is the previous value of
441 the IDENTIFIER_LABEL VALUE. */
442 tree shadowed_labels;
443
8d08fdba
MS
444 /* For each level (except not the global one),
445 a chain of BLOCK nodes for all the levels
446 that were entered and exited one level down. */
447 tree blocks;
448
70adf8a9
JM
449 /* The _TYPE node for this level, if parm_flag == 2. */
450 tree this_class;
451
8d08fdba
MS
452 /* The binding level which this one is contained in (inherits from). */
453 struct binding_level *level_chain;
454
f30432d7 455 /* List of decls in `names' that have incomplete
8d08fdba 456 structure or union types. */
f30432d7 457 tree incomplete;
8d08fdba 458
8d6e462b 459 /* List of VAR_DECLS saved from a previous for statement.
cab1f180 460 These would be dead in ISO-conforming code, but might
f181d4ae
MM
461 be referenced in ARM-era code. These are stored in a
462 TREE_LIST; the TREE_VALUE is the actual declaration. */
8d6e462b
PB
463 tree dead_vars_from_for;
464
8d08fdba 465 /* 1 for the level that holds the parameters of a function.
74b846e0
MM
466 2 for the level that holds a class declaration. */
467 unsigned parm_flag : 2;
8d08fdba
MS
468
469 /* 1 means make a BLOCK for this level regardless of all else.
470 2 for temporary binding contours created by the compiler. */
74b846e0 471 unsigned keep : 2;
8d08fdba
MS
472
473 /* Nonzero if this level "doesn't exist" for tags. */
474 unsigned tag_transparent : 1;
475
476 /* Nonzero if this level can safely have additional
477 cleanup-needing variables added to it. */
478 unsigned more_cleanups_ok : 1;
479 unsigned have_cleanups : 1;
480
74b846e0 481 /* Nonzero if this scope is for storing the decls for template
5566b478
MS
482 parameters and generic decls; these decls will be discarded and
483 replaced with a TEMPLATE_DECL. */
74b846e0
MM
484 unsigned template_parms_p : 1;
485
486 /* Nonzero if this scope corresponds to the `<>' in a
487 `template <>' clause. Whenever this flag is set,
488 TEMPLATE_PARMS_P will be set as well. */
489 unsigned template_spec_p : 1;
8d08fdba 490
a9aedbc2
MS
491 /* This is set for a namespace binding level. */
492 unsigned namespace_p : 1;
493
2ee887f2 494 /* True if this level is that of a for-statement where we need to
cab1f180 495 worry about ambiguous (ARM or ISO) scope rules. */
8d6e462b
PB
496 unsigned is_for_scope : 1;
497
6625cdb5
JM
498 /* True if this level corresponds to an EH region, as for a try block.
499 Currently this information is only available while building the
500 tree structure. */
227cf171
JM
501 unsigned eh_region : 1;
502
74b846e0 503 /* Four bits left for this word. */
8d08fdba
MS
504
505#if defined(DEBUG_CP_BINDING_LEVELS)
506 /* Binding depth at which this level began. */
507 unsigned binding_depth;
508#endif /* defined(DEBUG_CP_BINDING_LEVELS) */
509 };
510
511#define NULL_BINDING_LEVEL ((struct binding_level *) NULL)
68642fb6 512
8f032717 513/* The binding level currently in effect. */
8d08fdba 514
a8f73d4b 515#define current_binding_level \
01d939e8 516 (cfun \
a8f73d4b
MM
517 ? cp_function_chain->bindings \
518 : scope_chain->bindings)
8d08fdba
MS
519
520/* The binding level of the current class, if any. */
521
9cd64686 522#define class_binding_level scope_chain->class_bindings
8d08fdba 523
8d08fdba
MS
524/* A chain of binding_level structures awaiting reuse. */
525
526static struct binding_level *free_binding_level;
527
528/* The outermost binding level, for names of file scope.
529 This is created when the compiler is started and exists
530 through the entire run. */
531
532static struct binding_level *global_binding_level;
533
8d08fdba
MS
534/* Nonzero means unconditionally make a BLOCK for the next level pushed. */
535
536static int keep_next_level_flag;
537
538#if defined(DEBUG_CP_BINDING_LEVELS)
539static int binding_depth = 0;
540static int is_class_level = 0;
541
542static void
543indent ()
544{
545 register unsigned i;
546
547 for (i = 0; i < binding_depth*2; i++)
548 putc (' ', stderr);
549}
550#endif /* defined(DEBUG_CP_BINDING_LEVELS) */
551
158991b7 552static tree pushdecl_with_scope PARAMS ((tree, struct binding_level *));
8d08fdba
MS
553
554static void
555push_binding_level (newlevel, tag_transparent, keep)
556 struct binding_level *newlevel;
557 int tag_transparent, keep;
558{
559 /* Add this level to the front of the chain (stack) of levels that
560 are active. */
acef433b 561 bzero ((char*) newlevel, sizeof (struct binding_level));
8f032717 562 newlevel->level_chain = current_binding_level;
8d08fdba
MS
563 current_binding_level = newlevel;
564 newlevel->tag_transparent = tag_transparent;
565 newlevel->more_cleanups_ok = 1;
227cf171 566
8d08fdba
MS
567 newlevel->keep = keep;
568#if defined(DEBUG_CP_BINDING_LEVELS)
569 newlevel->binding_depth = binding_depth;
570 indent ();
571 fprintf (stderr, "push %s level 0x%08x line %d\n",
572 (is_class_level) ? "class" : "block", newlevel, lineno);
573 is_class_level = 0;
574 binding_depth++;
575#endif /* defined(DEBUG_CP_BINDING_LEVELS) */
576}
577
8f032717
MM
578/* Find the innermost enclosing class scope, and reset
579 CLASS_BINDING_LEVEL appropriately. */
580
581static void
582find_class_binding_level ()
583{
584 struct binding_level *level = current_binding_level;
585
586 while (level && level->parm_flag != 2)
587 level = level->level_chain;
588 if (level && level->parm_flag == 2)
589 class_binding_level = level;
590 else
591 class_binding_level = 0;
592}
593
8d08fdba
MS
594static void
595pop_binding_level ()
596{
8d08fdba
MS
597 if (global_binding_level)
598 {
2c73f9f5 599 /* Cannot pop a level, if there are none left to pop. */
8d08fdba
MS
600 if (current_binding_level == global_binding_level)
601 my_friendly_abort (123);
602 }
603 /* Pop the current level, and free the structure for reuse. */
604#if defined(DEBUG_CP_BINDING_LEVELS)
605 binding_depth--;
606 indent ();
607 fprintf (stderr, "pop %s level 0x%08x line %d\n",
608 (is_class_level) ? "class" : "block",
609 current_binding_level, lineno);
610 if (is_class_level != (current_binding_level == class_binding_level))
9e9ff709
MS
611 {
612 indent ();
613 fprintf (stderr, "XXX is_class_level != (current_binding_level == class_binding_level)\n");
614 }
8d08fdba
MS
615 is_class_level = 0;
616#endif /* defined(DEBUG_CP_BINDING_LEVELS) */
617 {
618 register struct binding_level *level = current_binding_level;
619 current_binding_level = current_binding_level->level_chain;
620 level->level_chain = free_binding_level;
621#if 0 /* defined(DEBUG_CP_BINDING_LEVELS) */
622 if (level->binding_depth != binding_depth)
623 abort ();
624#endif /* defined(DEBUG_CP_BINDING_LEVELS) */
8f032717
MM
625 free_binding_level = level;
626 find_class_binding_level ();
8d08fdba
MS
627 }
628}
a9aedbc2
MS
629
630static void
631suspend_binding_level ()
632{
633 if (class_binding_level)
634 current_binding_level = class_binding_level;
635
636 if (global_binding_level)
637 {
2c73f9f5 638 /* Cannot suspend a level, if there are none left to suspend. */
a9aedbc2
MS
639 if (current_binding_level == global_binding_level)
640 my_friendly_abort (123);
641 }
642 /* Suspend the current level. */
643#if defined(DEBUG_CP_BINDING_LEVELS)
644 binding_depth--;
645 indent ();
646 fprintf (stderr, "suspend %s level 0x%08x line %d\n",
647 (is_class_level) ? "class" : "block",
648 current_binding_level, lineno);
649 if (is_class_level != (current_binding_level == class_binding_level))
9e9ff709
MS
650 {
651 indent ();
652 fprintf (stderr, "XXX is_class_level != (current_binding_level == class_binding_level)\n");
653 }
a9aedbc2
MS
654 is_class_level = 0;
655#endif /* defined(DEBUG_CP_BINDING_LEVELS) */
8f032717
MM
656 current_binding_level = current_binding_level->level_chain;
657 find_class_binding_level ();
a9aedbc2
MS
658}
659
824b9a4c 660static void
a9aedbc2
MS
661resume_binding_level (b)
662 struct binding_level *b;
663{
2c73f9f5
ML
664 /* Resuming binding levels is meant only for namespaces,
665 and those cannot nest into classes. */
666 my_friendly_assert(!class_binding_level, 386);
667 /* Also, resuming a non-directly nested namespace is a no-no. */
668 my_friendly_assert(b->level_chain == current_binding_level, 386);
a9aedbc2
MS
669 current_binding_level = b;
670#if defined(DEBUG_CP_BINDING_LEVELS)
671 b->binding_depth = binding_depth;
672 indent ();
673 fprintf (stderr, "resume %s level 0x%08x line %d\n",
674 (is_class_level) ? "class" : "block", b, lineno);
675 is_class_level = 0;
676 binding_depth++;
677#endif /* defined(DEBUG_CP_BINDING_LEVELS) */
678}
8d08fdba 679\f
cffa8729
MS
680/* Create a new `struct binding_level'. */
681
682static
683struct binding_level *
684make_binding_level ()
685{
686 /* NOSTRICT */
687 return (struct binding_level *) xmalloc (sizeof (struct binding_level));
688}
689
8d08fdba
MS
690/* Nonzero if we are currently in the global binding level. */
691
692int
693global_bindings_p ()
694{
695 return current_binding_level == global_binding_level;
696}
697
8f032717
MM
698/* Return the innermost binding level that is not for a class scope. */
699
700static struct binding_level *
701innermost_nonclass_level ()
702{
703 struct binding_level *b;
704
705 b = current_binding_level;
706 while (b->parm_flag == 2)
707 b = b->level_chain;
708
709 return b;
710}
711
a9aedbc2
MS
712/* Nonzero if we are currently in a toplevel binding level. This
713 means either the global binding level or a namespace in a toplevel
8f032717 714 binding level. Since there are no non-toplevel namespace levels,
74b846e0
MM
715 this really means any namespace or template parameter level. We
716 also include a class whose context is toplevel. */
a9aedbc2
MS
717
718int
719toplevel_bindings_p ()
720{
8f032717
MM
721 struct binding_level *b = innermost_nonclass_level ();
722
74b846e0 723 return b->namespace_p || b->template_parms_p;
a9aedbc2
MS
724}
725
8f032717
MM
726/* Nonzero if this is a namespace scope, or if we are defining a class
727 which is itself at namespace scope, or whose enclosing class is
728 such a class, etc. */
a9aedbc2 729
7bdbfa05 730int
a9aedbc2
MS
731namespace_bindings_p ()
732{
8f032717
MM
733 struct binding_level *b = innermost_nonclass_level ();
734
735 return b->namespace_p;
a9aedbc2
MS
736}
737
f1dedc31
MM
738/* If KEEP is non-zero, make a BLOCK node for the next binding level,
739 unconditionally. Otherwise, use the normal logic to decide whether
740 or not to create a BLOCK. */
741
8d08fdba 742void
f1dedc31
MM
743keep_next_level (keep)
744 int keep;
8d08fdba 745{
f1dedc31 746 keep_next_level_flag = keep;
8d08fdba
MS
747}
748
749/* Nonzero if the current level needs to have a BLOCK made. */
750
751int
752kept_level_p ()
753{
754 return (current_binding_level->blocks != NULL_TREE
755 || current_binding_level->keep
756 || current_binding_level->names != NULL_TREE
757 || (current_binding_level->tags != NULL_TREE
758 && !current_binding_level->tag_transparent));
759}
760
824b9a4c 761static void
a9aedbc2
MS
762declare_namespace_level ()
763{
764 current_binding_level->namespace_p = 1;
765}
766
74b846e0
MM
767/* Returns non-zero if this scope was created to store template
768 parameters. */
769
8d08fdba 770int
74b846e0 771template_parm_scope_p ()
8d08fdba 772{
74b846e0
MM
773 return current_binding_level->template_parms_p;
774}
775
776/* Returns the kind of template specialization we are currently
777 processing, given that it's declaration contained N_CLASS_SCOPES
778 explicit scope qualifications. */
779
780tmpl_spec_kind
781current_tmpl_spec_kind (n_class_scopes)
782 int n_class_scopes;
783{
784 int n_template_parm_scopes = 0;
785 int seen_specialization_p = 0;
786 int innermost_specialization_p = 0;
787 struct binding_level *b;
788
789 /* Scan through the template parameter scopes. */
790 for (b = current_binding_level; b->template_parms_p; b = b->level_chain)
791 {
792 /* If we see a specialization scope inside a parameter scope,
793 then something is wrong. That corresponds to a declaration
794 like:
795
796 template <class T> template <> ...
797
798 which is always illegal since [temp.expl.spec] forbids the
799 specialization of a class member template if the enclosing
800 class templates are not explicitly specialized as well. */
801 if (b->template_spec_p)
802 {
803 if (n_template_parm_scopes == 0)
804 innermost_specialization_p = 1;
805 else
806 seen_specialization_p = 1;
807 }
808 else if (seen_specialization_p == 1)
809 return tsk_invalid_member_spec;
810
811 ++n_template_parm_scopes;
812 }
813
814 /* Handle explicit instantiations. */
815 if (processing_explicit_instantiation)
816 {
817 if (n_template_parm_scopes != 0)
818 /* We've seen a template parameter list during an explicit
819 instantiation. For example:
820
821 template <class T> template void f(int);
822
823 This is erroneous. */
824 return tsk_invalid_expl_inst;
825 else
826 return tsk_expl_inst;
827 }
828
829 if (n_template_parm_scopes < n_class_scopes)
830 /* We've not seen enough template headers to match all the
831 specialized classes present. For example:
832
833 template <class T> void R<T>::S<T>::f(int);
834
835 This is illegal; there needs to be one set of template
836 parameters for each class. */
837 return tsk_insufficient_parms;
838 else if (n_template_parm_scopes == n_class_scopes)
839 /* We're processing a non-template declaration (even though it may
840 be a member of a template class.) For example:
841
842 template <class T> void S<T>::f(int);
843
844 The `class T' maches the `S<T>', leaving no template headers
845 corresponding to the `f'. */
846 return tsk_none;
847 else if (n_template_parm_scopes > n_class_scopes + 1)
848 /* We've got too many template headers. For example:
849
850 template <> template <class T> void f (T);
851
852 There need to be more enclosing classes. */
853 return tsk_excessive_parms;
854 else
855 /* This must be a template. It's of the form:
856
857 template <class T> template <class U> void S<T>::f(U);
858
859 This is a specialization if the innermost level was a
860 specialization; otherwise it's just a definition of the
861 template. */
862 return innermost_specialization_p ? tsk_expl_spec : tsk_template;
8d08fdba
MS
863}
864
865void
866set_class_shadows (shadows)
867 tree shadows;
868{
869 class_binding_level->class_shadowed = shadows;
870}
871
872/* Enter a new binding level.
873 If TAG_TRANSPARENT is nonzero, do so only for the name space of variables,
874 not for that of tags. */
875
876void
877pushlevel (tag_transparent)
878 int tag_transparent;
879{
b35d4555 880 struct binding_level *newlevel;
8d08fdba 881
01d939e8 882 if (cfun && !doing_semantic_analysis_p ())
b35d4555 883 return;
8d08fdba 884
b35d4555 885 /* Reuse or create a struct for this binding level. */
8d08fdba
MS
886#if defined(DEBUG_CP_BINDING_LEVELS)
887 if (0)
888#else /* !defined(DEBUG_CP_BINDING_LEVELS) */
889 if (free_binding_level)
890#endif /* !defined(DEBUG_CP_BINDING_LEVELS) */
891 {
892 newlevel = free_binding_level;
893 free_binding_level = free_binding_level->level_chain;
894 }
895 else
acef433b 896 newlevel = make_binding_level ();
cffa8729 897
8d08fdba
MS
898 push_binding_level (newlevel, tag_transparent, keep_next_level_flag);
899 GNU_xref_start_scope ((HOST_WIDE_INT) newlevel);
900 keep_next_level_flag = 0;
901}
902
74b846e0
MM
903/* Enter a new scope. The KIND indicates what kind of scope is being
904 created. */
905
906void
907begin_scope (sk)
908 scope_kind sk;
909{
910 pushlevel (0);
911
912 switch (sk)
913 {
914 case sk_template_spec:
915 current_binding_level->template_spec_p = 1;
916 /* Fall through. */
917
918 case sk_template_parms:
919 current_binding_level->template_parms_p = 1;
920 break;
921
922 default:
923 my_friendly_abort (20000309);
924 }
925}
926
927/* Exit the current scope. */
928
929void
930finish_scope ()
931{
932 poplevel (0, 0, 0);
933}
934
5566b478 935void
8d6e462b
PB
936note_level_for_for ()
937{
938 current_binding_level->is_for_scope = 1;
939}
940
6625cdb5
JM
941/* Record that the current binding level represents a try block. */
942
943void
944note_level_for_eh ()
945{
946 current_binding_level->eh_region = 1;
947}
948
f181d4ae
MM
949/* For a binding between a name and an entity at a block scope,
950 this is the `struct binding_level' for the block. */
951#define BINDING_LEVEL(NODE) \
c7a932b1 952 (((struct tree_binding*)NODE)->scope.level)
f181d4ae 953
f181d4ae
MM
954/* Make DECL the innermost binding for ID. The LEVEL is the binding
955 level at which this declaration is being bound. */
956
957static void
958push_binding (id, decl, level)
959 tree id;
960 tree decl;
961 struct binding_level* level;
962{
963 tree binding;
964
87e3dbc9 965 binding = make_node (CPLUS_BINDING);
f181d4ae
MM
966
967 /* Now, fill in the binding information. */
968 BINDING_VALUE (binding) = decl;
d8f8dca1 969 BINDING_TYPE (binding) = NULL_TREE;
f181d4ae 970 BINDING_LEVEL (binding) = level;
8f032717 971 INHERITED_VALUE_BINDING_P (binding) = 0;
f181d4ae 972 LOCAL_BINDING_P (binding) = (level != class_binding_level);
87e3dbc9 973 BINDING_HAS_LEVEL_P (binding) = 1;
f181d4ae 974
c45df9c1 975 /* And put it on the front of the list of bindings for ID. */
f181d4ae
MM
976 TREE_CHAIN (binding) = IDENTIFIER_BINDING (id);
977 IDENTIFIER_BINDING (id) = binding;
978}
979
d8f8dca1
MM
980/* ID is already bound in the current scope. But, DECL is an
981 additional binding for ID in the same scope. This is the `struct
982 stat' hack whereby a non-typedef class-name or enum-name can be
983 bound at the same level as some other kind of entity. It's the
984 responsibility of the caller to check that inserting this name is
8f032717
MM
985 legal here. Returns nonzero if the new binding was successful. */
986static int
d8f8dca1
MM
987add_binding (id, decl)
988 tree id;
989 tree decl;
990{
991 tree binding = IDENTIFIER_BINDING (id);
8f032717 992 int ok = 1;
d8f8dca1
MM
993
994 if (TREE_CODE (decl) == TYPE_DECL && DECL_ARTIFICIAL (decl))
995 /* The new name is the type name. */
996 BINDING_TYPE (binding) = decl;
8f032717
MM
997 else if (!BINDING_VALUE (binding))
998 /* This situation arises when push_class_level_binding moves an
999 inherited type-binding out of the way to make room for a new
1000 value binding. */
1001 BINDING_VALUE (binding) = decl;
1002 else if (TREE_CODE (BINDING_VALUE (binding)) == TYPE_DECL
1003 && DECL_ARTIFICIAL (BINDING_VALUE (binding)))
1004 {
1005 /* The old binding was a type name. It was placed in
1006 BINDING_VALUE because it was thought, at the point it was
1007 declared, to be the only entity with such a name. Move the
1008 type name into the type slot; it is now hidden by the new
1009 binding. */
d8f8dca1
MM
1010 BINDING_TYPE (binding) = BINDING_VALUE (binding);
1011 BINDING_VALUE (binding) = decl;
8f032717 1012 INHERITED_VALUE_BINDING_P (binding) = 0;
d8f8dca1 1013 }
263505af
MM
1014 else if (TREE_CODE (BINDING_VALUE (binding)) == TYPE_DECL
1015 && TREE_CODE (decl) == TYPE_DECL
1016 && DECL_NAME (decl) == DECL_NAME (BINDING_VALUE (binding))
1017 && same_type_p (TREE_TYPE (decl),
1018 TREE_TYPE (BINDING_VALUE (binding))))
1019 /* We have two typedef-names, both naming the same type to have
1020 the same name. This is OK because of:
1021
1022 [dcl.typedef]
1023
1024 In a given scope, a typedef specifier can be used to redefine
1025 the name of any type declared in that scope to refer to the
1026 type to which it already refers. */
1027 ok = 0;
7b176381
MM
1028 /* There can be two block-scope declarations of the same variable,
1029 so long as they are `extern' declarations. */
1030 else if (TREE_CODE (decl) == VAR_DECL
1031 && TREE_CODE (BINDING_VALUE (binding)) == VAR_DECL
1032 && DECL_EXTERNAL (decl)
1033 && DECL_EXTERNAL (BINDING_VALUE (binding)))
1034 {
1035 duplicate_decls (decl, BINDING_VALUE (binding));
1036 ok = 0;
1037 }
8f032717
MM
1038 else
1039 {
1040 cp_error ("declaration of `%#D'", decl);
1041 cp_error_at ("conflicts with previous declaration `%#D'",
1042 BINDING_VALUE (binding));
1043 ok = 0;
1044 }
1045
1046 return ok;
d8f8dca1
MM
1047}
1048
cfe507be
MM
1049/* Add DECL to the list of things declared in B. */
1050
1051static void
1052add_decl_to_level (decl, b)
1053 tree decl;
1054 struct binding_level *b;
1055{
cfe507be
MM
1056 /* We build up the list in reverse order, and reverse it later if
1057 necessary. */
1058 TREE_CHAIN (decl) = b->names;
1059 b->names = decl;
1060}
1061
1062/* Bind DECL to ID in the current_binding_level, assumed to be a local
1063 binding level. If PUSH_USING is set in FLAGS, we know that DECL
1064 doesn't really belong to this binding level, that it got here
1065 through a using-declaration. */
f181d4ae
MM
1066
1067void
0034cf72 1068push_local_binding (id, decl, flags)
f181d4ae
MM
1069 tree id;
1070 tree decl;
0034cf72 1071 int flags;
f181d4ae 1072{
8f032717
MM
1073 struct binding_level *b;
1074
1075 /* Skip over any local classes. This makes sense if we call
1076 push_local_binding with a friend decl of a local class. */
1077 b = current_binding_level;
1078 while (b->parm_flag == 2)
1079 b = b->level_chain;
f181d4ae 1080
d8f8dca1 1081 if (lookup_name_current_level (id))
8f032717
MM
1082 {
1083 /* Supplement the existing binding. */
1084 if (!add_binding (id, decl))
1085 /* It didn't work. Something else must be bound at this
1086 level. Do not add DECL to the list of things to pop
1087 later. */
1088 return;
1089 }
d8f8dca1
MM
1090 else
1091 /* Create a new binding. */
8f032717 1092 push_binding (id, decl, b);
f181d4ae 1093
0034cf72 1094 if (TREE_CODE (decl) == OVERLOAD || (flags & PUSH_USING))
a06d48ef
JM
1095 /* We must put the OVERLOAD into a TREE_LIST since the
1096 TREE_CHAIN of an OVERLOAD is already used. Similarly for
1097 decls that got here through a using-declaration. */
1098 decl = build_tree_list (NULL_TREE, decl);
1099
f181d4ae
MM
1100 /* And put DECL on the list of things declared by the current
1101 binding level. */
cfe507be 1102 add_decl_to_level (decl, b);
f181d4ae
MM
1103}
1104
8f032717
MM
1105/* Bind DECL to ID in the class_binding_level. Returns nonzero if the
1106 binding was successful. */
f181d4ae 1107
8f032717 1108int
f181d4ae
MM
1109push_class_binding (id, decl)
1110 tree id;
1111 tree decl;
1112{
8f032717
MM
1113 int result = 1;
1114 tree binding = IDENTIFIER_BINDING (id);
1115 tree context;
1116
1117 /* Note that we declared this value so that we can issue an error if
1118 this an illegal redeclaration of a name already used for some
1119 other purpose. */
1120 note_name_declared_in_class (id, decl);
1121
1122 if (binding && BINDING_LEVEL (binding) == class_binding_level)
d8f8dca1 1123 /* Supplement the existing binding. */
8f032717 1124 result = add_binding (id, decl);
d8f8dca1
MM
1125 else
1126 /* Create a new binding. */
1127 push_binding (id, decl, class_binding_level);
1128
1129 /* Update the IDENTIFIER_CLASS_VALUE for this ID to be the
1130 class-level declaration. Note that we do not use DECL here
1131 because of the possibility of the `struct stat' hack; if DECL is
1132 a class-name or enum-name we might prefer a field-name, or some
1133 such. */
1134 IDENTIFIER_CLASS_VALUE (id) = BINDING_VALUE (IDENTIFIER_BINDING (id));
8f032717
MM
1135
1136 /* If this is a binding from a base class, mark it as such. */
1137 binding = IDENTIFIER_BINDING (id);
1138 if (BINDING_VALUE (binding) == decl && TREE_CODE (decl) != TREE_LIST)
1139 {
280f9385
MM
1140 /* Any implicit typename must be from a base-class. The
1141 context for an implicit typename declaration is always
1142 the derived class in which the lookup was done, so the checks
1143 based on the context of DECL below will not trigger. */
83233dca 1144 if (IMPLICIT_TYPENAME_TYPE_DECL_P (decl))
280f9385 1145 INHERITED_VALUE_BINDING_P (binding) = 1;
8f032717
MM
1146 else
1147 {
280f9385 1148 if (TREE_CODE (decl) == OVERLOAD)
4f1c5b7d 1149 context = CP_DECL_CONTEXT (OVL_CURRENT (decl));
280f9385
MM
1150 else
1151 {
2f939d94 1152 my_friendly_assert (DECL_P (decl), 0);
4f1c5b7d 1153 context = CP_DECL_CONTEXT (decl);
280f9385 1154 }
8f032717 1155
280f9385
MM
1156 if (is_properly_derived_from (current_class_type, context))
1157 INHERITED_VALUE_BINDING_P (binding) = 1;
1158 else
1159 INHERITED_VALUE_BINDING_P (binding) = 0;
1160 }
8f032717
MM
1161 }
1162 else if (BINDING_VALUE (binding) == decl)
1163 /* We only encounter a TREE_LIST when push_class_decls detects an
1164 ambiguity. Such an ambiguity can be overridden by a definition
1165 in this class. */
1166 INHERITED_VALUE_BINDING_P (binding) = 1;
1167
1168 return result;
f181d4ae
MM
1169}
1170
d8f8dca1
MM
1171/* Remove the binding for DECL which should be the innermost binding
1172 for ID. */
f181d4ae 1173
68642fb6
UD
1174static void
1175pop_binding (id, decl)
f181d4ae 1176 tree id;
d8f8dca1 1177 tree decl;
f181d4ae
MM
1178{
1179 tree binding;
68642fb6 1180
f181d4ae
MM
1181 if (id == NULL_TREE)
1182 /* It's easiest to write the loops that call this function without
1183 checking whether or not the entities involved have names. We
1184 get here for such an entity. */
1185 return;
1186
d8f8dca1 1187 /* Get the innermost binding for ID. */
f181d4ae 1188 binding = IDENTIFIER_BINDING (id);
f181d4ae 1189
d8f8dca1
MM
1190 /* The name should be bound. */
1191 my_friendly_assert (binding != NULL_TREE, 0);
1192
1193 /* The DECL will be either the ordinary binding or the type
1194 binding for this identifier. Remove that binding. */
1195 if (BINDING_VALUE (binding) == decl)
1196 BINDING_VALUE (binding) = NULL_TREE;
1197 else if (BINDING_TYPE (binding) == decl)
1198 BINDING_TYPE (binding) = NULL_TREE;
1199 else
1200 my_friendly_abort (0);
1201
1202 if (!BINDING_VALUE (binding) && !BINDING_TYPE (binding))
87e3dbc9
MM
1203 /* We're completely done with the innermost binding for this
1204 identifier. Unhook it from the list of bindings. */
1205 IDENTIFIER_BINDING (id) = TREE_CHAIN (binding);
f181d4ae
MM
1206}
1207
acef433b
MM
1208/* When a label goes out of scope, check to see if that label was used
1209 in a valid manner, and issue any appropriate warnings or errors. */
1210
1211static void
6625cdb5
JM
1212pop_label (label, old_value)
1213 tree label;
1214 tree old_value;
acef433b 1215{
88848bde 1216 if (!processing_template_decl && doing_semantic_analysis_p ())
acef433b 1217 {
88848bde
MM
1218 if (DECL_INITIAL (label) == NULL_TREE)
1219 {
1220 cp_error_at ("label `%D' used but not defined", label);
1221 /* Avoid crashing later. */
1222 define_label (input_filename, 1, DECL_NAME (label));
1223 }
078721e1 1224 else if (warn_unused_label && !TREE_USED (label))
88848bde 1225 cp_warning_at ("label `%D' defined but not used", label);
acef433b 1226 }
acef433b 1227
6625cdb5 1228 SET_IDENTIFIER_LABEL_VALUE (DECL_NAME (label), old_value);
acef433b
MM
1229}
1230
0811ea8f 1231/* At the end of a function, all labels declared within the function
68642fb6 1232 go out of scope. BLOCK is the top-level block for the
acef433b
MM
1233 function. */
1234
1235static void
1236pop_labels (block)
1237 tree block;
1238{
6625cdb5 1239 struct named_label_list *link;
acef433b
MM
1240
1241 /* Clear out the definitions of all label names, since their scopes
1242 end here. */
6625cdb5 1243 for (link = named_labels; link; link = link->next)
acef433b 1244 {
6625cdb5 1245 pop_label (link->label_decl, link->old_value);
acef433b
MM
1246 /* Put the labels into the "variables" of the top-level block,
1247 so debugger can see them. */
6625cdb5
JM
1248 TREE_CHAIN (link->label_decl) = BLOCK_VARS (block);
1249 BLOCK_VARS (block) = link->label_decl;
acef433b
MM
1250 }
1251
6625cdb5 1252 named_labels = NULL;
acef433b
MM
1253}
1254
8d08fdba
MS
1255/* Exit a binding level.
1256 Pop the level off, and restore the state of the identifier-decl mappings
1257 that were in effect when this level was entered.
1258
1259 If KEEP == 1, this level had explicit declarations, so
1260 and create a "block" (a BLOCK node) for the level
1261 to record its declarations and subblocks for symbol table output.
1262
8d08fdba
MS
1263 If FUNCTIONBODY is nonzero, this level is the body of a function,
1264 so create a block as if KEEP were set and also clear out all
1265 label names.
1266
1267 If REVERSE is nonzero, reverse the order of decls before putting
1268 them into the BLOCK. */
1269
1270tree
1271poplevel (keep, reverse, functionbody)
1272 int keep;
1273 int reverse;
1274 int functionbody;
1275{
1276 register tree link;
1277 /* The chain of decls was accumulated in reverse order.
1278 Put it into forward order, just for cleanliness. */
1279 tree decls;
1280 int tmp = functionbody;
b35d4555
MM
1281 int real_functionbody;
1282 tree tags;
1283 tree subblocks;
8d08fdba
MS
1284 tree block = NULL_TREE;
1285 tree decl;
f181d4ae
MM
1286 int leaving_for_scope;
1287
01d939e8 1288 if (cfun && !doing_semantic_analysis_p ())
b35d4555
MM
1289 return NULL_TREE;
1290
273a708f
MM
1291 my_friendly_assert (current_binding_level->parm_flag != 2,
1292 19990916);
b74a0560 1293
b35d4555
MM
1294 real_functionbody = (current_binding_level->keep == 2
1295 ? ((functionbody = 0), tmp) : functionbody);
1296 tags = functionbody >= 0 ? current_binding_level->tags : 0;
1297 subblocks = functionbody >= 0 ? current_binding_level->blocks : 0;
1298
b74a0560
MM
1299 my_friendly_assert (!current_binding_level->class_shadowed,
1300 19990414);
8d08fdba 1301
536333d4
MM
1302 /* We used to use KEEP == 2 to indicate that the new block should go
1303 at the beginning of the list of blocks at this binding level,
1304 rather than the end. This hack is no longer used. */
1305 my_friendly_assert (keep == 0 || keep == 1, 0);
1306
8d08fdba
MS
1307 GNU_xref_end_scope ((HOST_WIDE_INT) current_binding_level,
1308 (HOST_WIDE_INT) current_binding_level->level_chain,
1309 current_binding_level->parm_flag,
5566b478 1310 current_binding_level->keep);
8d08fdba
MS
1311
1312 if (current_binding_level->keep == 1)
1313 keep = 1;
1314
6625cdb5
JM
1315 /* Any uses of undefined labels, and any defined labels, now operate
1316 under constraints of next binding contour. */
1317 if (cfun && !functionbody)
1318 {
1319 struct binding_level *level_chain;
1320 level_chain = current_binding_level->level_chain;
1321 if (level_chain)
1322 {
1323 struct named_label_use_list *uses;
1324 struct named_label_list *labels;
1325 for (labels = named_labels; labels; labels = labels->next)
1326 if (labels->binding_level == current_binding_level)
1327 {
1328 tree decl;
1329 if (current_binding_level->eh_region)
1330 labels->eh_region = 1;
1331 for (decl = labels->names_in_scope; decl;
1332 decl = TREE_CHAIN (decl))
1333 if (decl_jump_unsafe (decl))
1334 labels->bad_decls = tree_cons (NULL_TREE, decl,
1335 labels->bad_decls);
1336 labels->binding_level = level_chain;
1337 labels->names_in_scope = level_chain->names;
1338 }
1339
1340 for (uses = named_label_uses; uses; uses = uses->next)
1341 if (uses->binding_level == current_binding_level)
1342 {
1343 uses->binding_level = level_chain;
1344 uses->names_in_scope = level_chain->names;
1345 }
1346 }
1347 }
1348
8d08fdba
MS
1349 /* Get the decls in the order they were written.
1350 Usually current_binding_level->names is in reverse order.
1351 But parameter decls were previously put in forward order. */
1352
1353 if (reverse)
1354 current_binding_level->names
1355 = decls = nreverse (current_binding_level->names);
1356 else
1357 decls = current_binding_level->names;
1358
1359 /* Output any nested inline functions within this block
1360 if they weren't already output. */
8d08fdba
MS
1361 for (decl = decls; decl; decl = TREE_CHAIN (decl))
1362 if (TREE_CODE (decl) == FUNCTION_DECL
1363 && ! TREE_ASM_WRITTEN (decl)
1364 && DECL_INITIAL (decl) != NULL_TREE
6060a796
MS
1365 && TREE_ADDRESSABLE (decl)
1366 && decl_function_context (decl) == current_function_decl)
8d08fdba
MS
1367 {
1368 /* If this decl was copied from a file-scope decl
1369 on account of a block-scope extern decl,
1370 propagate TREE_ADDRESSABLE to the file-scope decl. */
1371 if (DECL_ABSTRACT_ORIGIN (decl) != NULL_TREE)
1372 TREE_ADDRESSABLE (DECL_ABSTRACT_ORIGIN (decl)) = 1;
1373 else
1374 {
1375 push_function_context ();
1376 output_inline_function (decl);
1377 pop_function_context ();
1378 }
1379 }
1380
d9b2d9da
MM
1381 /* When not in function-at-a-time mode, expand_end_bindings will
1382 warn about unused variables. But, in function-at-a-time mode
1383 expand_end_bindings is not passed the list of variables in the
1384 current scope, and therefore no warning is emitted. So, we
1385 explicitly warn here. */
1386 if (!processing_template_decl)
1387 warn_about_unused_variables (getdecls ());
1388
8d08fdba
MS
1389 /* If there were any declarations or structure tags in that level,
1390 or if this level is a function body,
1391 create a BLOCK to record them for the life of this function. */
8d08fdba 1392 block = NULL_TREE;
f444e36b 1393 if (keep == 1 || functionbody)
8d08fdba
MS
1394 block = make_node (BLOCK);
1395 if (block != NULL_TREE)
1396 {
f444e36b
MM
1397 BLOCK_VARS (block) = decls;
1398 BLOCK_SUBBLOCKS (block) = subblocks;
8d08fdba
MS
1399 }
1400
1401 /* In each subblock, record that this is its superior. */
8d08fdba
MS
1402 if (keep >= 0)
1403 for (link = subblocks; link; link = TREE_CHAIN (link))
1404 BLOCK_SUPERCONTEXT (link) = block;
1405
f181d4ae
MM
1406 /* We still support the old for-scope rules, whereby the variables
1407 in a for-init statement were in scope after the for-statement
1408 ended. We only use the new rules in flag_new_for_scope is
1409 nonzero. */
68642fb6 1410 leaving_for_scope
f181d4ae
MM
1411 = current_binding_level->is_for_scope && flag_new_for_scope == 1;
1412
1413 /* Remove declarations for all the DECLs in this level. */
1414 for (link = decls; link; link = TREE_CHAIN (link))
1415 {
c3783399
NS
1416 if (leaving_for_scope && TREE_CODE (link) == VAR_DECL
1417 && DECL_NAME (link))
f181d4ae 1418 {
68642fb6 1419 tree outer_binding
f181d4ae
MM
1420 = TREE_CHAIN (IDENTIFIER_BINDING (DECL_NAME (link)));
1421 tree ns_binding;
1422
1423 if (!outer_binding)
1424 ns_binding = IDENTIFIER_NAMESPACE_VALUE (DECL_NAME (link));
c7dda1e3
MM
1425 else
1426 ns_binding = NULL_TREE;
1427
68642fb6
UD
1428 if (outer_binding
1429 && (BINDING_LEVEL (outer_binding)
f181d4ae
MM
1430 == current_binding_level->level_chain))
1431 /* We have something like:
68642fb6 1432
f181d4ae
MM
1433 int i;
1434 for (int i; ;);
68642fb6 1435
f181d4ae
MM
1436 and we are leaving the `for' scope. There's no reason to
1437 keep the binding of the inner `i' in this case. */
d8f8dca1 1438 pop_binding (DECL_NAME (link), link);
68642fb6
UD
1439 else if ((outer_binding
1440 && (TREE_CODE (BINDING_VALUE (outer_binding))
f181d4ae 1441 == TYPE_DECL))
68642fb6 1442 || (ns_binding
f181d4ae
MM
1443 && TREE_CODE (ns_binding) == TYPE_DECL))
1444 /* Here, we have something like:
1445
1446 typedef int I;
1447
1448 void f () {
1449 for (int I; ;);
1450 }
1451
1452 We must pop the for-scope binding so we know what's a
1453 type and what isn't. */
d8f8dca1 1454 pop_binding (DECL_NAME (link), link);
e76a2646 1455 else
e76a2646 1456 {
f181d4ae
MM
1457 /* Mark this VAR_DECL as dead so that we can tell we left it
1458 there only for backward compatibility. */
1459 DECL_DEAD_FOR_LOCAL (link) = 1;
68642fb6 1460
f181d4ae
MM
1461 /* Keep track of what should of have happenned when we
1462 popped the binding. */
1463 if (outer_binding && BINDING_VALUE (outer_binding))
68642fb6 1464 DECL_SHADOWED_FOR_VAR (link)
f181d4ae
MM
1465 = BINDING_VALUE (outer_binding);
1466
1467 /* Add it to the list of dead variables in the next
1468 outermost binding to that we can remove these when we
1469 leave that binding. */
1470 current_binding_level->level_chain->dead_vars_from_for
1471 = tree_cons (NULL_TREE, link,
1472 current_binding_level->level_chain->
1473 dead_vars_from_for);
1474
1475 /* Although we don't pop the CPLUS_BINDING, we do clear
1476 its BINDING_LEVEL since the level is going away now. */
1477 BINDING_LEVEL (IDENTIFIER_BINDING (DECL_NAME (link)))
1478 = 0;
e76a2646 1479 }
2ee887f2 1480 }
68642fb6 1481 else
8d6e462b 1482 {
f181d4ae 1483 /* Remove the binding. */
0034cf72
JM
1484 decl = link;
1485 if (TREE_CODE (decl) == TREE_LIST)
1486 decl = TREE_VALUE (decl);
2f939d94 1487 if (DECL_P (decl))
0034cf72
JM
1488 pop_binding (DECL_NAME (decl), decl);
1489 else if (TREE_CODE (decl) == OVERLOAD)
1490 pop_binding (DECL_NAME (OVL_FUNCTION (decl)), decl);
68642fb6 1491 else
f181d4ae 1492 my_friendly_abort (0);
8d08fdba 1493 }
f181d4ae 1494 }
8d08fdba 1495
f181d4ae
MM
1496 /* Remove declarations for any `for' variables from inner scopes
1497 that we kept around. */
1498 for (link = current_binding_level->dead_vars_from_for;
1499 link; link = TREE_CHAIN (link))
d8f8dca1 1500 pop_binding (DECL_NAME (TREE_VALUE (link)), TREE_VALUE (link));
2ee887f2 1501
f181d4ae
MM
1502 /* Restore the IDENTIFIER_TYPE_VALUEs. */
1503 for (link = current_binding_level->type_shadowed;
1504 link; link = TREE_CHAIN (link))
1505 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (link), TREE_VALUE (link));
acef433b
MM
1506
1507 /* Restore the IDENTIFIER_LABEL_VALUEs for local labels. */
1508 for (link = current_binding_level->shadowed_labels;
68642fb6 1509 link;
acef433b 1510 link = TREE_CHAIN (link))
6625cdb5 1511 pop_label (TREE_VALUE (link), TREE_PURPOSE (link));
acef433b 1512
f181d4ae
MM
1513 /* There may be OVERLOADs (wrapped in TREE_LISTs) on the BLOCK_VARs
1514 list if a `using' declaration put them there. The debugging
1515 back-ends won't understand OVERLOAD, so we remove them here.
1516 Because the BLOCK_VARS are (temporarily) shared with
1517 CURRENT_BINDING_LEVEL->NAMES we must do this fixup after we have
1518 popped all the bindings. */
1519 if (block)
1520 {
1521 tree* d;
8d6e462b 1522
a06d48ef
JM
1523 for (d = &BLOCK_VARS (block); *d; )
1524 {
1525 if (TREE_CODE (*d) == TREE_LIST)
1526 *d = TREE_CHAIN (*d);
1527 else
1528 d = &TREE_CHAIN (*d);
1529 }
8d6e462b 1530 }
8d08fdba
MS
1531
1532 /* If the level being exited is the top level of a function,
1533 check over all the labels. */
8d08fdba
MS
1534 if (functionbody)
1535 {
acef433b
MM
1536 /* Since this is the top level block of a function, the vars are
1537 the function's parameters. Don't leave them in the BLOCK
1538 because they are found in the FUNCTION_DECL instead. */
8d08fdba 1539 BLOCK_VARS (block) = 0;
acef433b 1540 pop_labels (block);
8d08fdba
MS
1541 }
1542
8d08fdba
MS
1543 tmp = current_binding_level->keep;
1544
1545 pop_binding_level ();
1546 if (functionbody)
1547 DECL_INITIAL (current_function_decl) = block;
1548 else if (block)
f444e36b
MM
1549 current_binding_level->blocks
1550 = chainon (current_binding_level->blocks, block);
1551
8d08fdba
MS
1552 /* If we did not make a block for the level just exited,
1553 any blocks made for inner levels
1554 (since they cannot be recorded as subblocks in that level)
1555 must be carried forward so they will later become subblocks
1556 of something else. */
1557 else if (subblocks)
536333d4
MM
1558 current_binding_level->blocks
1559 = chainon (current_binding_level->blocks, subblocks);
8d08fdba 1560
d9b2d9da
MM
1561 /* Each and every BLOCK node created here in `poplevel' is important
1562 (e.g. for proper debugging information) so if we created one
1563 earlier, mark it as "used". */
1564 if (block)
1565 TREE_USED (block) = 1;
1566
8d08fdba 1567 /* Take care of compiler's internal binding structures. */
a4443a08 1568 if (tmp == 2)
8d08fdba 1569 {
d9b2d9da
MM
1570 tree scope_stmts;
1571
68642fb6 1572 scope_stmts
d9b2d9da 1573 = add_scope_stmt (/*begin_p=*/0, /*partial_p=*/1);
8d08fdba 1574 if (block)
d9b2d9da
MM
1575 {
1576 SCOPE_STMT_BLOCK (TREE_PURPOSE (scope_stmts)) = block;
1577 SCOPE_STMT_BLOCK (TREE_VALUE (scope_stmts)) = block;
1578 }
1579
8f471b0d 1580 block = poplevel (keep, reverse, functionbody);
8d08fdba
MS
1581 }
1582
8d08fdba
MS
1583 return block;
1584}
1585
1586/* Delete the node BLOCK from the current binding level.
1587 This is used for the block inside a stmt expr ({...})
1588 so that the block can be reinserted where appropriate. */
1589
1590void
1591delete_block (block)
1592 tree block;
1593{
1594 tree t;
1595 if (current_binding_level->blocks == block)
1596 current_binding_level->blocks = TREE_CHAIN (block);
1597 for (t = current_binding_level->blocks; t;)
1598 {
1599 if (TREE_CHAIN (t) == block)
1600 TREE_CHAIN (t) = TREE_CHAIN (block);
1601 else
1602 t = TREE_CHAIN (t);
1603 }
1604 TREE_CHAIN (block) = NULL_TREE;
1605 /* Clear TREE_USED which is always set by poplevel.
1606 The flag is set again if insert_block is called. */
1607 TREE_USED (block) = 0;
1608}
1609
1610/* Insert BLOCK at the end of the list of subblocks of the
1611 current binding level. This is used when a BIND_EXPR is expanded,
1612 to handle the BLOCK node inside the BIND_EXPR. */
1613
1614void
1615insert_block (block)
1616 tree block;
1617{
1618 TREE_USED (block) = 1;
1619 current_binding_level->blocks
1620 = chainon (current_binding_level->blocks, block);
1621}
1622
8d08fdba
MS
1623/* Set the BLOCK node for the innermost scope
1624 (the one we are currently in). */
1625
1626void
1627set_block (block)
f444e36b 1628 tree block ATTRIBUTE_UNUSED;
8d08fdba 1629{
f444e36b
MM
1630 /* The RTL expansion machinery requires us to provide this callback,
1631 but it is not applicable in function-at-a-time mode. */
1632 my_friendly_assert (cfun && !doing_semantic_analysis_p (), 20000911);
8d08fdba
MS
1633}
1634
1635/* Do a pushlevel for class declarations. */
e92cc029 1636
8d08fdba
MS
1637void
1638pushlevel_class ()
1639{
1640 register struct binding_level *newlevel;
1641
1642 /* Reuse or create a struct for this binding level. */
1643#if defined(DEBUG_CP_BINDING_LEVELS)
1644 if (0)
1645#else /* !defined(DEBUG_CP_BINDING_LEVELS) */
1646 if (free_binding_level)
1647#endif /* !defined(DEBUG_CP_BINDING_LEVELS) */
1648 {
1649 newlevel = free_binding_level;
1650 free_binding_level = free_binding_level->level_chain;
1651 }
1652 else
f181d4ae 1653 newlevel = make_binding_level ();
8d08fdba
MS
1654
1655#if defined(DEBUG_CP_BINDING_LEVELS)
1656 is_class_level = 1;
1657#endif /* defined(DEBUG_CP_BINDING_LEVELS) */
1658
1659 push_binding_level (newlevel, 0, 0);
1660
8d08fdba
MS
1661 class_binding_level = current_binding_level;
1662 class_binding_level->parm_flag = 2;
70adf8a9 1663 class_binding_level->this_class = current_class_type;
8d08fdba
MS
1664}
1665
b74a0560 1666/* ...and a poplevel for class declarations. */
e92cc029 1667
273a708f 1668void
b74a0560 1669poplevel_class ()
8d08fdba
MS
1670{
1671 register struct binding_level *level = class_binding_level;
8d08fdba
MS
1672 tree shadowed;
1673
1674 my_friendly_assert (level != 0, 354);
68642fb6 1675
8d08fdba 1676 /* If we're leaving a toplevel class, don't bother to do the setting
ddd5a7c1 1677 of IDENTIFIER_CLASS_VALUE to NULL_TREE, since first of all this slot
8d08fdba 1678 shouldn't even be used when current_class_type isn't set, and second,
ddd5a7c1 1679 if we don't touch it here, we're able to use the cache effect if the
8d08fdba 1680 next time we're entering a class scope, it is the same class. */
b74a0560 1681 if (current_class_depth != 1)
8f032717
MM
1682 {
1683 struct binding_level* b;
1684
1685 /* Clear out our IDENTIFIER_CLASS_VALUEs. */
1686 for (shadowed = level->class_shadowed;
1687 shadowed;
1688 shadowed = TREE_CHAIN (shadowed))
1689 IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (shadowed)) = NULL_TREE;
68642fb6 1690
8f032717
MM
1691 /* Find the next enclosing class, and recreate
1692 IDENTIFIER_CLASS_VALUEs appropriate for that class. */
1693 b = level->level_chain;
1694 while (b && b->parm_flag != 2)
1695 b = b->level_chain;
1696
1697 if (b)
68642fb6
UD
1698 for (shadowed = b->class_shadowed;
1699 shadowed;
8f032717
MM
1700 shadowed = TREE_CHAIN (shadowed))
1701 {
1702 tree t;
1703
1704 t = IDENTIFIER_BINDING (TREE_PURPOSE (shadowed));
1705 while (t && BINDING_LEVEL (t) != b)
1706 t = TREE_CHAIN (t);
68642fb6 1707
8f032717 1708 if (t)
68642fb6 1709 IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (shadowed))
8f032717
MM
1710 = BINDING_VALUE (t);
1711 }
1712 }
8d08fdba
MS
1713 else
1714 /* Remember to save what IDENTIFIER's were bound in this scope so we
1715 can recover from cache misses. */
e76a2646
MS
1716 {
1717 previous_class_type = current_class_type;
1718 previous_class_values = class_binding_level->class_shadowed;
1719 }
8d08fdba
MS
1720 for (shadowed = level->type_shadowed;
1721 shadowed;
1722 shadowed = TREE_CHAIN (shadowed))
2c73f9f5 1723 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (shadowed), TREE_VALUE (shadowed));
8d08fdba 1724
f181d4ae 1725 /* Remove the bindings for all of the class-level declarations. */
68642fb6
UD
1726 for (shadowed = level->class_shadowed;
1727 shadowed;
f181d4ae 1728 shadowed = TREE_CHAIN (shadowed))
d8f8dca1 1729 pop_binding (TREE_PURPOSE (shadowed), TREE_TYPE (shadowed));
f181d4ae 1730
8d08fdba
MS
1731 GNU_xref_end_scope ((HOST_WIDE_INT) class_binding_level,
1732 (HOST_WIDE_INT) class_binding_level->level_chain,
1733 class_binding_level->parm_flag,
5566b478 1734 class_binding_level->keep);
8d08fdba 1735
38e01259 1736 /* Now, pop out of the binding level which we created up in the
8d08fdba
MS
1737 `pushlevel_class' routine. */
1738#if defined(DEBUG_CP_BINDING_LEVELS)
1739 is_class_level = 1;
1740#endif /* defined(DEBUG_CP_BINDING_LEVELS) */
1741
1742 pop_binding_level ();
8d08fdba 1743}
8f032717
MM
1744
1745/* We are entering the scope of a class. Clear IDENTIFIER_CLASS_VALUE
1746 for any names in enclosing classes. */
1747
1748void
1749clear_identifier_class_values ()
1750{
1751 tree t;
1752
1753 if (!class_binding_level)
1754 return;
1755
1756 for (t = class_binding_level->class_shadowed;
1757 t;
1758 t = TREE_CHAIN (t))
1759 IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (t)) = NULL_TREE;
1760}
1761
0aafb128
MM
1762/* Returns non-zero if T is a virtual function table. */
1763
1764int
1765vtable_decl_p (t, data)
1766 tree t;
1767 void *data ATTRIBUTE_UNUSED;
1768{
1769 return (TREE_CODE (t) == VAR_DECL && DECL_VIRTUAL_P (t));
1770}
1771
1772/* Returns non-zero if T is a TYPE_DECL for a type with virtual
1773 functions. */
1774
1775int
1776vtype_decl_p (t, data)
1777 tree t;
1778 void *data ATTRIBUTE_UNUSED;
1779{
1780 return (TREE_CODE (t) == TYPE_DECL
34249844
NS
1781 && TREE_CODE (TREE_TYPE (t)) == RECORD_TYPE
1782 && TYPE_POLYMORPHIC_P (TREE_TYPE (t)));
0aafb128
MM
1783}
1784
f71f87f9
MM
1785/* Return the declarations that are members of the namespace NS. */
1786
1787tree
1788cp_namespace_decls (ns)
1789 tree ns;
1790{
1791 return NAMESPACE_LEVEL (ns)->names;
1792}
1793
0aafb128
MM
1794/* Walk all the namespaces contained NAMESPACE, including NAMESPACE
1795 itself, calling F for each. The DATA is passed to F as well. */
1796
1797static int
1798walk_namespaces_r (namespace, f, data)
1799 tree namespace;
1800 walk_namespaces_fn f;
1801 void *data;
1802{
1803 tree current;
1804 int result = 0;
1805
1806 result |= (*f) (namespace, data);
1807
f71f87f9 1808 for (current = cp_namespace_decls (namespace);
0aafb128
MM
1809 current;
1810 current = TREE_CHAIN (current))
1811 {
1812 if (TREE_CODE (current) != NAMESPACE_DECL
1813 || DECL_NAMESPACE_ALIAS (current))
1814 continue;
1815 if (!DECL_LANG_SPECIFIC (current))
1816 {
1817 /* Hmm. std. */
1818 my_friendly_assert (current == std_node, 393);
1819 continue;
1820 }
1821
1822 /* We found a namespace. */
1823 result |= walk_namespaces_r (current, f, data);
1824 }
1825
1826 return result;
1827}
1828
1829/* Walk all the namespaces, calling F for each. The DATA is passed to
1830 F as well. */
1831
1832int
1833walk_namespaces (f, data)
1834 walk_namespaces_fn f;
1835 void *data;
1836{
1837 return walk_namespaces_r (global_namespace, f, data);
1838}
1839
1840struct walk_globals_data {
1841 walk_globals_pred p;
1842 walk_globals_fn f;
1843 void *data;
1844};
1845
1846/* Walk the global declarations in NAMESPACE. Whenever one is found
1847 for which P returns non-zero, call F with its address. If any call
1848 to F returns a non-zero value, return a non-zero value. */
1849
68642fb6 1850static int
0aafb128
MM
1851walk_globals_r (namespace, data)
1852 tree namespace;
1853 void *data;
1854{
1855 struct walk_globals_data* wgd = (struct walk_globals_data *) data;
1856 walk_globals_pred p = wgd->p;
1857 walk_globals_fn f = wgd->f;
1858 void *d = wgd->data;
1859 tree *t;
1860 int result = 0;
1861
1862 t = &NAMESPACE_LEVEL (namespace)->names;
1863
1864 while (*t)
1865 {
1866 tree glbl = *t;
1867
1868 if ((*p) (glbl, d))
1869 result |= (*f) (t, d);
1870
1871 /* If F changed *T, then *T still points at the next item to
1872 examine. */
1873 if (*t == glbl)
1874 t = &TREE_CHAIN (*t);
1875 }
1876
1877 return result;
1878}
1879
1880/* Walk the global declarations. Whenever one is found for which P
1881 returns non-zero, call F with its address. If any call to F
1882 returns a non-zero value, return a non-zero value. */
1883
1884int
1885walk_globals (p, f, data)
1886 walk_globals_pred p;
1887 walk_globals_fn f;
1888 void *data;
1889{
1890 struct walk_globals_data wgd;
1891 wgd.p = p;
1892 wgd.f = f;
1893 wgd.data = data;
1894
1895 return walk_namespaces (walk_globals_r, &wgd);
1896}
1897
1898/* Call wrapup_globals_declarations for the globals in NAMESPACE. If
1899 DATA is non-NULL, this is the last time we will call
1900 wrapup_global_declarations for this NAMESPACE. */
1901
1902int
1903wrapup_globals_for_namespace (namespace, data)
1904 tree namespace;
1905 void *data;
1906{
f71f87f9 1907 tree globals = cp_namespace_decls (namespace);
0aafb128
MM
1908 int len = list_length (globals);
1909 tree *vec = (tree *) alloca (sizeof (tree) * len);
1910 int i;
0352cfc8 1911 int result;
0aafb128
MM
1912 tree decl;
1913 int last_time = (data != 0);
1914
1915 if (last_time && namespace == global_namespace)
1916 /* Let compile_file handle the global namespace. */
1917 return 0;
1918
1919 /* Process the decls in reverse order--earliest first.
1920 Put them into VEC from back to front, then take out from front. */
68642fb6 1921
0aafb128 1922 for (i = 0, decl = globals; i < len; i++, decl = TREE_CHAIN (decl))
2ce07e2d
NS
1923 {
1924 /* Pretend we've output an unused static variable. This ensures
1925 that the toplevel __FUNCTION__ etc won't be emitted, unless
1926 needed. */
cf74fb86
JM
1927 if (TREE_CODE (decl) == VAR_DECL && DECL_ARTIFICIAL (decl)
1928 && !TREE_PUBLIC (decl) && !TREE_USED (decl))
1929 {
1930 TREE_ASM_WRITTEN (decl) = 1;
1931 DECL_IGNORED_P (decl) = 1;
1932 }
2ce07e2d
NS
1933 vec[len - i - 1] = decl;
1934 }
68642fb6 1935
0352cfc8
MM
1936 if (last_time)
1937 {
1938 check_global_declarations (vec, len);
1939 return 0;
1940 }
1941
1942 /* Temporarily mark vtables as external. That prevents
1943 wrapup_global_declarations from writing them out; we must process
1944 them ourselves in finish_vtable_vardecl. */
1945 for (i = 0; i < len; ++i)
91f2aa22 1946 if (vtable_decl_p (vec[i], /*data=*/0) && !DECL_EXTERNAL (vec[i]))
0352cfc8
MM
1947 {
1948 DECL_NOT_REALLY_EXTERN (vec[i]) = 1;
1949 DECL_EXTERNAL (vec[i]) = 1;
1950 }
0aafb128 1951
0352cfc8
MM
1952 /* Write out any globals that need to be output. */
1953 result = wrapup_global_declarations (vec, len);
1954
1955 /* Undo the hack to DECL_EXTERNAL above. */
1956 for (i = 0; i < len; ++i)
1957 if (vtable_decl_p (vec[i], /*data=*/0)
1958 && DECL_NOT_REALLY_EXTERN (vec[i]))
1959 {
1960 DECL_NOT_REALLY_EXTERN (vec[i]) = 0;
1961 DECL_EXTERNAL (vec[i]) = 0;
1962 }
1963
1964 return result;
0aafb128
MM
1965}
1966
4519c0a8 1967\f
fc6af6e3
RH
1968/* Mark ARG (which is really a struct binding_level **) for GC. */
1969
4519c0a8
MM
1970static void
1971mark_binding_level (arg)
1972 void *arg;
1973{
1974 struct binding_level *lvl = *(struct binding_level **)arg;
1975
6625cdb5 1976 for (; lvl; lvl = lvl->level_chain)
4519c0a8
MM
1977 {
1978 ggc_mark_tree (lvl->names);
1979 ggc_mark_tree (lvl->tags);
1980 ggc_mark_tree (lvl->usings);
1981 ggc_mark_tree (lvl->using_directives);
1982 ggc_mark_tree (lvl->class_shadowed);
1983 ggc_mark_tree (lvl->type_shadowed);
1984 ggc_mark_tree (lvl->shadowed_labels);
1985 ggc_mark_tree (lvl->blocks);
70adf8a9 1986 ggc_mark_tree (lvl->this_class);
4519c0a8
MM
1987 ggc_mark_tree (lvl->incomplete);
1988 ggc_mark_tree (lvl->dead_vars_from_for);
6625cdb5
JM
1989 }
1990}
1991
1992static void
1993mark_named_label_lists (labs, uses)
1994 void *labs;
1995 void *uses;
1996{
1997 struct named_label_list *l = *(struct named_label_list **)labs;
1998 struct named_label_use_list *u = *(struct named_label_use_list **)uses;
4519c0a8 1999
6625cdb5
JM
2000 for (; l; l = l->next)
2001 {
2002 ggc_mark (l);
2003 mark_binding_level (l->binding_level);
2004 ggc_mark_tree (l->old_value);
2005 ggc_mark_tree (l->label_decl);
2006 ggc_mark_tree (l->bad_decls);
4519c0a8 2007 }
6625cdb5
JM
2008
2009 for (; u; u = u->next)
2010 ggc_mark (u);
4519c0a8 2011}
8d08fdba
MS
2012\f
2013/* For debugging. */
5566b478
MS
2014static int no_print_functions = 0;
2015static int no_print_builtins = 0;
8d08fdba
MS
2016
2017void
2018print_binding_level (lvl)
2019 struct binding_level *lvl;
2020{
2021 tree t;
2022 int i = 0, len;
2023 fprintf (stderr, " blocks=");
2024 fprintf (stderr, HOST_PTR_PRINTF, lvl->blocks);
2025 fprintf (stderr, " n_incomplete=%d parm_flag=%d keep=%d",
f30432d7 2026 list_length (lvl->incomplete), lvl->parm_flag, lvl->keep);
8d08fdba
MS
2027 if (lvl->tag_transparent)
2028 fprintf (stderr, " tag-transparent");
2029 if (lvl->more_cleanups_ok)
2030 fprintf (stderr, " more-cleanups-ok");
2031 if (lvl->have_cleanups)
2032 fprintf (stderr, " have-cleanups");
8d08fdba
MS
2033 fprintf (stderr, "\n");
2034 if (lvl->names)
2035 {
2036 fprintf (stderr, " names:\t");
2037 /* We can probably fit 3 names to a line? */
2038 for (t = lvl->names; t; t = TREE_CHAIN (t))
2039 {
68642fb6 2040 if (no_print_functions && (TREE_CODE (t) == FUNCTION_DECL))
8d08fdba
MS
2041 continue;
2042 if (no_print_builtins
fc378698
MS
2043 && (TREE_CODE (t) == TYPE_DECL)
2044 && (!strcmp (DECL_SOURCE_FILE (t),"<built-in>")))
8d08fdba
MS
2045 continue;
2046
2047 /* Function decls tend to have longer names. */
2048 if (TREE_CODE (t) == FUNCTION_DECL)
2049 len = 3;
2050 else
2051 len = 2;
2052 i += len;
2053 if (i > 6)
2054 {
2055 fprintf (stderr, "\n\t");
2056 i = len;
2057 }
2058 print_node_brief (stderr, "", t, 0);
bd6dd845 2059 if (t == error_mark_node)
8d08fdba
MS
2060 break;
2061 }
2062 if (i)
2063 fprintf (stderr, "\n");
2064 }
2065 if (lvl->tags)
2066 {
2067 fprintf (stderr, " tags:\t");
2068 i = 0;
2069 for (t = lvl->tags; t; t = TREE_CHAIN (t))
2070 {
2071 if (TREE_PURPOSE (t) == NULL_TREE)
2072 len = 3;
2073 else if (TREE_PURPOSE (t) == TYPE_IDENTIFIER (TREE_VALUE (t)))
2074 len = 2;
2075 else
2076 len = 4;
2077 i += len;
2078 if (i > 5)
2079 {
2080 fprintf (stderr, "\n\t");
2081 i = len;
2082 }
2083 if (TREE_PURPOSE (t) == NULL_TREE)
2084 {
2085 print_node_brief (stderr, "<unnamed-typedef", TREE_VALUE (t), 0);
2086 fprintf (stderr, ">");
2087 }
2088 else if (TREE_PURPOSE (t) == TYPE_IDENTIFIER (TREE_VALUE (t)))
2089 print_node_brief (stderr, "", TREE_VALUE (t), 0);
2090 else
2091 {
2092 print_node_brief (stderr, "<typedef", TREE_PURPOSE (t), 0);
2093 print_node_brief (stderr, "", TREE_VALUE (t), 0);
2094 fprintf (stderr, ">");
2095 }
2096 }
2097 if (i)
2098 fprintf (stderr, "\n");
2099 }
8d08fdba
MS
2100 if (lvl->class_shadowed)
2101 {
2102 fprintf (stderr, " class-shadowed:");
2103 for (t = lvl->class_shadowed; t; t = TREE_CHAIN (t))
2104 {
2105 fprintf (stderr, " %s ", IDENTIFIER_POINTER (TREE_PURPOSE (t)));
2106 }
2107 fprintf (stderr, "\n");
2108 }
2109 if (lvl->type_shadowed)
2110 {
2111 fprintf (stderr, " type-shadowed:");
2112 for (t = lvl->type_shadowed; t; t = TREE_CHAIN (t))
2113 {
8d08fdba 2114 fprintf (stderr, " %s ", IDENTIFIER_POINTER (TREE_PURPOSE (t)));
8d08fdba
MS
2115 }
2116 fprintf (stderr, "\n");
2117 }
2118}
2119
2120void
2121print_other_binding_stack (stack)
2122 struct binding_level *stack;
2123{
2124 struct binding_level *level;
2125 for (level = stack; level != global_binding_level; level = level->level_chain)
2126 {
2127 fprintf (stderr, "binding level ");
2128 fprintf (stderr, HOST_PTR_PRINTF, level);
2129 fprintf (stderr, "\n");
2130 print_binding_level (level);
2131 }
2132}
2133
2134void
2135print_binding_stack ()
2136{
2137 struct binding_level *b;
2138 fprintf (stderr, "current_binding_level=");
2139 fprintf (stderr, HOST_PTR_PRINTF, current_binding_level);
2140 fprintf (stderr, "\nclass_binding_level=");
2141 fprintf (stderr, HOST_PTR_PRINTF, class_binding_level);
2142 fprintf (stderr, "\nglobal_binding_level=");
2143 fprintf (stderr, HOST_PTR_PRINTF, global_binding_level);
2144 fprintf (stderr, "\n");
2145 if (class_binding_level)
2146 {
2147 for (b = class_binding_level; b; b = b->level_chain)
2148 if (b == current_binding_level)
2149 break;
2150 if (b)
2151 b = class_binding_level;
2152 else
2153 b = current_binding_level;
2154 }
2155 else
2156 b = current_binding_level;
2157 print_other_binding_stack (b);
2158 fprintf (stderr, "global:\n");
2159 print_binding_level (global_binding_level);
2160}
a9aedbc2 2161
2c73f9f5
ML
2162/* Namespace binding access routines: The namespace_bindings field of
2163 the identifier is polymorphic, with three possible values:
2164 NULL_TREE, a list of CPLUS_BINDINGS, or any other tree_node
2165 indicating the BINDING_VALUE of global_namespace. */
30394414 2166
2c73f9f5
ML
2167/* Check whether the a binding for the name to scope is known.
2168 Assumes that the bindings of the name are already a list
2169 of bindings. Returns the binding found, or NULL_TREE. */
2170
2171static tree
2172find_binding (name, scope)
30394414
JM
2173 tree name;
2174 tree scope;
2175{
2c73f9f5 2176 tree iter, prev = NULL_TREE;
3e3f722c
ML
2177
2178 scope = ORIGINAL_NAMESPACE (scope);
68642fb6 2179
30394414
JM
2180 for (iter = IDENTIFIER_NAMESPACE_BINDINGS (name); iter;
2181 iter = TREE_CHAIN (iter))
2182 {
2183 my_friendly_assert (TREE_CODE (iter) == CPLUS_BINDING, 374);
2184 if (BINDING_SCOPE (iter) == scope)
2c73f9f5 2185 {
cfe507be 2186 /* Move binding found to the front of the list, so
2c73f9f5
ML
2187 subsequent lookups will find it faster. */
2188 if (prev)
2189 {
2190 TREE_CHAIN (prev) = TREE_CHAIN (iter);
2191 TREE_CHAIN (iter) = IDENTIFIER_NAMESPACE_BINDINGS (name);
2192 IDENTIFIER_NAMESPACE_BINDINGS (name) = iter;
2193 }
2194 return iter;
2195 }
2196 prev = iter;
30394414 2197 }
2c73f9f5
ML
2198 return NULL_TREE;
2199}
2200
2201/* Always returns a binding for name in scope. If the
2202 namespace_bindings is not a list, convert it to one first.
2203 If no binding is found, make a new one. */
2204
2205tree
2206binding_for_name (name, scope)
2207 tree name;
2208 tree scope;
2209{
2210 tree b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2211 tree result;
3e3f722c
ML
2212
2213 scope = ORIGINAL_NAMESPACE (scope);
68642fb6 2214
2c73f9f5
ML
2215 if (b && TREE_CODE (b) != CPLUS_BINDING)
2216 {
2217 /* Get rid of optimization for global scope. */
2218 IDENTIFIER_NAMESPACE_BINDINGS (name) = NULL_TREE;
2219 BINDING_VALUE (binding_for_name (name, global_namespace)) = b;
2220 b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2221 }
2222 if (b && (result = find_binding (name, scope)))
2223 return result;
cd9f6678 2224 /* Not found, make a new one. */
2c73f9f5
ML
2225 result = make_node (CPLUS_BINDING);
2226 TREE_CHAIN (result) = b;
2227 IDENTIFIER_NAMESPACE_BINDINGS (name) = result;
2228 BINDING_SCOPE (result) = scope;
2229 BINDING_TYPE (result) = NULL_TREE;
2230 BINDING_VALUE (result) = NULL_TREE;
2c73f9f5
ML
2231 return result;
2232}
2233
2234/* Return the binding value for name in scope, considering that
2235 namespace_binding may or may not be a list of CPLUS_BINDINGS. */
2236
2237tree
2238namespace_binding (name, scope)
2239 tree name;
2240 tree scope;
2241{
2242 tree b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2243 if (b == NULL_TREE)
2244 return NULL_TREE;
cb0dbb9a
JM
2245 if (scope == NULL_TREE)
2246 scope = global_namespace;
2c73f9f5
ML
2247 if (TREE_CODE (b) != CPLUS_BINDING)
2248 return (scope == global_namespace) ? b : NULL_TREE;
2249 name = find_binding (name,scope);
2250 if (name == NULL_TREE)
2251 return name;
2252 return BINDING_VALUE (name);
2253}
2254
2255/* Set the binding value for name in scope. If modifying the binding
2256 of global_namespace is attempted, try to optimize it. */
2257
2258void
2259set_namespace_binding (name, scope, val)
2260 tree name;
2261 tree scope;
2262 tree val;
2263{
2264 tree b;
cb0dbb9a
JM
2265
2266 if (scope == NULL_TREE)
2267 scope = global_namespace;
68642fb6 2268
2c73f9f5
ML
2269 if (scope == global_namespace)
2270 {
2271 b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2272 if (b == NULL_TREE || TREE_CODE (b) != CPLUS_BINDING)
2273 {
2274 IDENTIFIER_NAMESPACE_BINDINGS (name) = val;
2275 return;
2276 }
2277 }
2278 b = binding_for_name (name, scope);
2279 BINDING_VALUE (b) = val;
30394414
JM
2280}
2281
dff6b454
RK
2282/* Push into the scope of the NAME namespace. If NAME is NULL_TREE, then we
2283 select a name that is unique to this compilation unit. */
e92cc029 2284
a9aedbc2
MS
2285void
2286push_namespace (name)
2287 tree name;
2288{
b370501f 2289 tree d = NULL_TREE;
30394414
JM
2290 int need_new = 1;
2291 int implicit_use = 0;
2c73f9f5 2292 int global = 0;
30394414
JM
2293 if (!global_namespace)
2294 {
2c73f9f5 2295 /* This must be ::. */
30394414 2296 my_friendly_assert (name == get_identifier ("::"), 377);
2c73f9f5 2297 global = 1;
30394414
JM
2298 }
2299 else if (!name)
2300 {
3ab52652
ML
2301 /* The name of anonymous namespace is unique for the translation
2302 unit. */
0c8feefe
MM
2303 if (!anonymous_namespace_name)
2304 anonymous_namespace_name = get_file_function_name ('N');
2305 name = anonymous_namespace_name;
3ab52652
ML
2306 d = IDENTIFIER_NAMESPACE_VALUE (name);
2307 if (d)
2308 /* Reopening anonymous namespace. */
2309 need_new = 0;
30394414 2310 implicit_use = 1;
2c73f9f5
ML
2311 }
2312 else if (current_namespace == global_namespace
2313 && name == DECL_NAME (std_node))
2314 {
2315 in_std++;
2316 return;
2317 }
30394414
JM
2318 else
2319 {
2c73f9f5 2320 /* Check whether this is an extended namespace definition. */
30394414
JM
2321 d = IDENTIFIER_NAMESPACE_VALUE (name);
2322 if (d != NULL_TREE && TREE_CODE (d) == NAMESPACE_DECL)
3e3f722c
ML
2323 {
2324 need_new = 0;
2325 if (DECL_NAMESPACE_ALIAS (d))
2326 {
8251199e 2327 cp_error ("namespace alias `%D' not allowed here, assuming `%D'",
3e3f722c
ML
2328 d, DECL_NAMESPACE_ALIAS (d));
2329 d = DECL_NAMESPACE_ALIAS (d);
2330 }
2331 }
30394414 2332 }
68642fb6 2333
30394414
JM
2334 if (need_new)
2335 {
2c73f9f5 2336 /* Make a new namespace, binding the name to it. */
6b57ac29 2337 d = build_lang_decl (NAMESPACE_DECL, name, void_type_node);
2c73f9f5
ML
2338 /* The global namespace is not pushed, and the global binding
2339 level is set elsewhere. */
2340 if (!global)
2341 {
40f1e342 2342 DECL_CONTEXT (d) = FROB_CONTEXT (current_namespace);
2c73f9f5
ML
2343 d = pushdecl (d);
2344 pushlevel (0);
2345 declare_namespace_level ();
2346 NAMESPACE_LEVEL (d) = current_binding_level;
2347 }
30394414 2348 }
2c73f9f5
ML
2349 else
2350 resume_binding_level (NAMESPACE_LEVEL (d));
2351
30394414
JM
2352 if (implicit_use)
2353 do_using_directive (d);
2c73f9f5 2354 /* Enter the name space. */
30394414 2355 current_namespace = d;
a9aedbc2
MS
2356}
2357
2358/* Pop from the scope of the current namespace. */
e92cc029 2359
a9aedbc2
MS
2360void
2361pop_namespace ()
2362{
2c73f9f5
ML
2363 if (current_namespace == global_namespace)
2364 {
2365 my_friendly_assert (in_std>0, 980421);
2366 in_std--;
2367 return;
2368 }
cb0dbb9a 2369 current_namespace = CP_DECL_CONTEXT (current_namespace);
2c73f9f5
ML
2370 /* The binding level is not popped, as it might be re-opened later. */
2371 suspend_binding_level ();
2372}
a9aedbc2 2373
61fc8c9e
MM
2374/* Push into the scope of the namespace NS, even if it is deeply
2375 nested within another namespace. */
2376
2377void
2378push_nested_namespace (ns)
2379 tree ns;
2380{
2381 if (ns == global_namespace)
2382 push_to_top_level ();
2383 else
2384 {
2385 push_nested_namespace (CP_DECL_CONTEXT (ns));
2386 push_namespace (DECL_NAME (ns));
2387 }
2388}
2389
2390/* Pop back from the scope of the namespace NS, which was previously
2391 entered with push_nested_namespace. */
68642fb6 2392
61fc8c9e
MM
2393void
2394pop_nested_namespace (ns)
2395 tree ns;
2396{
2397 while (ns != global_namespace)
2398 {
2399 pop_namespace ();
2400 ns = CP_DECL_CONTEXT (ns);
2401 }
2402
2403 pop_from_top_level ();
2404}
2405
8d08fdba
MS
2406\f
2407/* Subroutines for reverting temporarily to top-level for instantiation
2408 of templates and such. We actually need to clear out the class- and
2409 local-value slots of all identifiers, so that only the global values
2410 are at all visible. Simply setting current_binding_level to the global
2411 scope isn't enough, because more binding levels may be pushed. */
9cd64686 2412struct saved_scope *scope_chain;
8d08fdba 2413
6f80451c
MM
2414/* Mark ST for GC. */
2415
2416static void
2417mark_stmt_tree (st)
ae499cce 2418 stmt_tree st;
6f80451c
MM
2419{
2420 ggc_mark_tree (st->x_last_stmt);
2421 ggc_mark_tree (st->x_last_expr_type);
2422}
2423
9cd64686 2424/* Mark ARG (which is really a struct saved_scope **) for GC. */
fc6af6e3
RH
2425
2426static void
2427mark_saved_scope (arg)
2428 void *arg;
2429{
2430 struct saved_scope *t = *(struct saved_scope **)arg;
2431 while (t)
2432 {
fc6af6e3
RH
2433 mark_binding_level (&t->class_bindings);
2434 ggc_mark_tree (t->old_bindings);
2435 ggc_mark_tree (t->old_namespace);
2436 ggc_mark_tree (t->class_name);
2437 ggc_mark_tree (t->class_type);
2438 ggc_mark_tree (t->access_specifier);
a8f73d4b 2439 ggc_mark_tree (t->function_decl);
fc6af6e3 2440 if (t->lang_base)
9cd64686 2441 ggc_mark_tree_varray (t->lang_base);
fc6af6e3 2442 ggc_mark_tree (t->lang_name);
fc6af6e3 2443 ggc_mark_tree (t->template_parms);
9cd64686
MM
2444 ggc_mark_tree (t->x_previous_class_type);
2445 ggc_mark_tree (t->x_previous_class_values);
6f80451c 2446 ggc_mark_tree (t->x_saved_tree);
70adf8a9
JM
2447 ggc_mark_tree (t->incomplete);
2448 ggc_mark_tree (t->lookups);
6f80451c
MM
2449
2450 mark_stmt_tree (&t->x_stmt_tree);
a8f73d4b 2451 mark_binding_level (&t->bindings);
fc6af6e3
RH
2452 t = t->prev;
2453 }
2454}
2455
e92cc029 2456static tree
45537677
MS
2457store_bindings (names, old_bindings)
2458 tree names, old_bindings;
2459{
2460 tree t;
2461 for (t = names; t; t = TREE_CHAIN (t))
2462 {
2463 tree binding, t1, id;
2464
2465 if (TREE_CODE (t) == TREE_LIST)
2466 id = TREE_PURPOSE (t);
2467 else
2468 id = DECL_NAME (t);
2469
68642fb6 2470 if (!id
f181d4ae
MM
2471 /* Note that we may have an IDENTIFIER_CLASS_VALUE even when
2472 we have no IDENTIFIER_BINDING if we have left the class
2473 scope, but cached the class-level declarations. */
2474 || !(IDENTIFIER_BINDING (id) || IDENTIFIER_CLASS_VALUE (id)))
45537677
MS
2475 continue;
2476
2477 for (t1 = old_bindings; t1; t1 = TREE_CHAIN (t1))
2478 if (TREE_VEC_ELT (t1, 0) == id)
2479 goto skip_it;
78957a2a 2480
87e3dbc9 2481 binding = make_tree_vec (4);
78957a2a 2482
45537677
MS
2483 if (id)
2484 {
2485 my_friendly_assert (TREE_CODE (id) == IDENTIFIER_NODE, 135);
2486 TREE_VEC_ELT (binding, 0) = id;
2c73f9f5 2487 TREE_VEC_ELT (binding, 1) = REAL_IDENTIFIER_TYPE_VALUE (id);
f181d4ae 2488 TREE_VEC_ELT (binding, 2) = IDENTIFIER_BINDING (id);
45537677 2489 TREE_VEC_ELT (binding, 3) = IDENTIFIER_CLASS_VALUE (id);
f181d4ae 2490 IDENTIFIER_BINDING (id) = NULL_TREE;
45537677
MS
2491 IDENTIFIER_CLASS_VALUE (id) = NULL_TREE;
2492 }
2493 TREE_CHAIN (binding) = old_bindings;
2494 old_bindings = binding;
2495 skip_it:
2496 ;
2497 }
2498 return old_bindings;
2499}
2500
8d08fdba 2501void
5566b478
MS
2502maybe_push_to_top_level (pseudo)
2503 int pseudo;
8d08fdba 2504{
a8f73d4b 2505 struct saved_scope *s;
9cd64686 2506 struct binding_level *b;
a8f73d4b
MM
2507 tree old_bindings;
2508 int need_pop;
2509
2510 s = (struct saved_scope *) xcalloc (1, sizeof (struct saved_scope));
8d08fdba 2511
9cd64686
MM
2512 b = scope_chain ? current_binding_level : 0;
2513
a8f73d4b 2514 /* If we're in the middle of some function, save our state. */
01d939e8 2515 if (cfun)
a8f73d4b
MM
2516 {
2517 need_pop = 1;
2518 push_function_context_to (NULL_TREE);
2519 }
2520 else
2521 need_pop = 0;
e349ee73 2522
a8f73d4b 2523 old_bindings = NULL_TREE;
9cd64686 2524 if (scope_chain && previous_class_type)
a50f0918
MS
2525 old_bindings = store_bindings (previous_class_values, old_bindings);
2526
8d08fdba
MS
2527 /* Have to include global_binding_level, because class-level decls
2528 aren't listed anywhere useful. */
2529 for (; b; b = b->level_chain)
2530 {
2531 tree t;
2532
2c73f9f5
ML
2533 /* Template IDs are inserted into the global level. If they were
2534 inserted into namespace level, finish_file wouldn't find them
2535 when doing pending instantiations. Therefore, don't stop at
2536 namespace level, but continue until :: . */
74b846e0 2537 if (b == global_binding_level || (pseudo && b->template_parms_p))
5566b478 2538 break;
8d08fdba 2539
45537677 2540 old_bindings = store_bindings (b->names, old_bindings);
cffa8729 2541 /* We also need to check class_shadowed to save class-level type
45537677
MS
2542 bindings, since pushclass doesn't fill in b->names. */
2543 if (b->parm_flag == 2)
cffa8729 2544 old_bindings = store_bindings (b->class_shadowed, old_bindings);
8d08fdba 2545
8d08fdba
MS
2546 /* Unwind type-value slots back to top level. */
2547 for (t = b->type_shadowed; t; t = TREE_CHAIN (t))
2548 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (t), TREE_VALUE (t));
2549 }
fc0e7bf5
MM
2550 s->prev = scope_chain;
2551 s->old_bindings = old_bindings;
a8f73d4b
MM
2552 s->bindings = b;
2553 s->need_pop_function_context = need_pop;
2554 s->function_decl = current_function_decl;
fc0e7bf5
MM
2555
2556 scope_chain = s;
8d08fdba 2557 current_function_decl = NULL_TREE;
9cd64686
MM
2558 VARRAY_TREE_INIT (current_lang_base, 10, "current_lang_base");
2559 current_lang_stack = &VARRAY_TREE (current_lang_base, 0);
51c184be 2560 current_lang_name = lang_name_cplusplus;
2c73f9f5 2561 current_namespace = global_namespace;
5566b478
MS
2562}
2563
2564void
2565push_to_top_level ()
2566{
2567 maybe_push_to_top_level (0);
8d08fdba
MS
2568}
2569
2570void
2571pop_from_top_level ()
2572{
9cd64686 2573 struct saved_scope *s = scope_chain;
8d08fdba
MS
2574 tree t;
2575
e76a2646 2576 /* Clear out class-level bindings cache. */
8d08fdba 2577 if (previous_class_type)
8f032717 2578 invalidate_class_lookup_cache ();
8d08fdba 2579
9cd64686
MM
2580 VARRAY_FREE (current_lang_base);
2581
2582 scope_chain = s->prev;
87e3dbc9 2583 for (t = s->old_bindings; t; t = TREE_CHAIN (t))
8d08fdba
MS
2584 {
2585 tree id = TREE_VEC_ELT (t, 0);
2586 if (id)
2587 {
2c73f9f5 2588 SET_IDENTIFIER_TYPE_VALUE (id, TREE_VEC_ELT (t, 1));
f181d4ae 2589 IDENTIFIER_BINDING (id) = TREE_VEC_ELT (t, 2);
8d08fdba 2590 IDENTIFIER_CLASS_VALUE (id) = TREE_VEC_ELT (t, 3);
9cd64686 2591 }
8d08fdba 2592 }
9cd64686 2593
a8f73d4b
MM
2594 /* If we were in the middle of compiling a function, restore our
2595 state. */
2596 if (s->need_pop_function_context)
2597 pop_function_context_from (NULL_TREE);
2598 current_function_decl = s->function_decl;
e349ee73 2599
a8f73d4b 2600 free (s);
8d08fdba
MS
2601}
2602\f
2603/* Push a definition of struct, union or enum tag "name".
68642fb6 2604 into binding_level "b". "type" should be the type node,
8d08fdba
MS
2605 We assume that the tag "name" is not already defined.
2606
2607 Note that the definition may really be just a forward reference.
2608 In that case, the TYPE_SIZE will be a NULL_TREE.
2609
e92cc029 2610 C++ gratuitously puts all these tags in the name space. */
8d08fdba
MS
2611
2612/* When setting the IDENTIFIER_TYPE_VALUE field of an identifier ID,
2613 record the shadowed value for this binding contour. TYPE is
2614 the type that ID maps to. */
2615
2616static void
2617set_identifier_type_value_with_scope (id, type, b)
2618 tree id;
2619 tree type;
2620 struct binding_level *b;
2621{
2c73f9f5 2622 if (!b->namespace_p)
8d08fdba 2623 {
2c73f9f5
ML
2624 /* Shadow the marker, not the real thing, so that the marker
2625 gets restored later. */
2626 tree old_type_value = REAL_IDENTIFIER_TYPE_VALUE (id);
8d08fdba
MS
2627 b->type_shadowed
2628 = tree_cons (id, old_type_value, b->type_shadowed);
2629 }
2c73f9f5
ML
2630 else
2631 {
2632 tree binding = binding_for_name (id, current_namespace);
2633 BINDING_TYPE (binding) = type;
2634 /* Store marker instead of real type. */
2635 type = global_type_node;
2636 }
8d08fdba
MS
2637 SET_IDENTIFIER_TYPE_VALUE (id, type);
2638}
2639
8f032717 2640/* As set_identifier_type_value_with_scope, but using current_binding_level. */
8d08fdba
MS
2641
2642void
2643set_identifier_type_value (id, type)
2644 tree id;
2645 tree type;
2646{
8f032717 2647 set_identifier_type_value_with_scope (id, type, current_binding_level);
8d08fdba
MS
2648}
2649
2c73f9f5
ML
2650/* Return the type associated with id. */
2651
2652tree
2653identifier_type_value (id)
2654 tree id;
2655{
2656 /* There is no type with that name, anywhere. */
2657 if (REAL_IDENTIFIER_TYPE_VALUE (id) == NULL_TREE)
2658 return NULL_TREE;
2659 /* This is not the type marker, but the real thing. */
2660 if (REAL_IDENTIFIER_TYPE_VALUE (id) != global_type_node)
2661 return REAL_IDENTIFIER_TYPE_VALUE (id);
2662 /* Have to search for it. It must be on the global level, now.
2663 Ask lookup_name not to return non-types. */
3e3f722c 2664 id = lookup_name_real (id, 2, 1, 0);
2c73f9f5
ML
2665 if (id)
2666 return TREE_TYPE (id);
2667 return NULL_TREE;
2668}
2669
a9aedbc2
MS
2670/* Pop off extraneous binding levels left over due to syntax errors.
2671
2672 We don't pop past namespaces, as they might be valid. */
e92cc029 2673
8926095f
MS
2674void
2675pop_everything ()
2676{
2677#ifdef DEBUG_CP_BINDING_LEVELS
2678 fprintf (stderr, "XXX entering pop_everything ()\n");
2679#endif
8f032717 2680 while (!toplevel_bindings_p ())
8926095f 2681 {
8f032717 2682 if (current_binding_level->parm_flag == 2)
b74a0560 2683 pop_nested_class ();
8926095f
MS
2684 else
2685 poplevel (0, 0, 0);
2686 }
2687#ifdef DEBUG_CP_BINDING_LEVELS
2688 fprintf (stderr, "XXX leaving pop_everything ()\n");
2689#endif
2690}
2691
39c01e4c
MM
2692/* The type TYPE is being declared. If it is a class template, or a
2693 specialization of a class template, do any processing required and
2694 perform error-checking. If IS_FRIEND is non-zero, this TYPE is
2695 being declared a friend. B is the binding level at which this TYPE
2696 should be bound.
2697
2698 Returns the TYPE_DECL for TYPE, which may have been altered by this
2699 processing. */
2700
68642fb6 2701static tree
39c01e4c
MM
2702maybe_process_template_type_declaration (type, globalize, b)
2703 tree type;
2704 int globalize;
2705 struct binding_level* b;
2706{
2707 tree decl = TYPE_NAME (type);
68642fb6 2708
39c01e4c
MM
2709 if (processing_template_parmlist)
2710 /* You can't declare a new template type in a template parameter
2711 list. But, you can declare a non-template type:
68642fb6 2712
39c01e4c 2713 template <class A*> struct S;
68642fb6 2714
39c01e4c
MM
2715 is a forward-declaration of `A'. */
2716 ;
68642fb6 2717 else
39c01e4c
MM
2718 {
2719 maybe_check_template_type (type);
2720
68642fb6 2721 my_friendly_assert (IS_AGGR_TYPE (type)
ed44da02 2722 || TREE_CODE (type) == ENUMERAL_TYPE, 0);
68642fb6
UD
2723
2724
3ebc5c52 2725 if (processing_template_decl)
39c01e4c
MM
2726 {
2727 /* This may change after the call to
2728 push_template_decl_real, but we want the original value. */
2729 tree name = DECL_NAME (decl);
2730
2731 decl = push_template_decl_real (decl, globalize);
2732 /* If the current binding level is the binding level for the
2733 template parameters (see the comment in
2734 begin_template_parm_list) and the enclosing level is a class
2735 scope, and we're not looking at a friend, push the
2736 declaration of the member class into the class scope. In the
2737 friend case, push_template_decl will already have put the
2738 friend into global scope, if appropriate. */
ed44da02 2739 if (TREE_CODE (type) != ENUMERAL_TYPE
74b846e0 2740 && !globalize && b->template_parms_p
39c01e4c
MM
2741 && b->level_chain->parm_flag == 2)
2742 {
61a127b3 2743 finish_member_declaration (CLASSTYPE_TI_TEMPLATE (type));
39c01e4c
MM
2744 /* Put this tag on the list of tags for the class, since
2745 that won't happen below because B is not the class
2746 binding level, but is instead the pseudo-global level. */
68642fb6 2747 b->level_chain->tags =
e1b3e07d 2748 tree_cons (name, type, b->level_chain->tags);
d0f062fb 2749 if (!COMPLETE_TYPE_P (current_class_type))
39c01e4c
MM
2750 CLASSTYPE_TAGS (current_class_type) = b->level_chain->tags;
2751 }
2752 }
2753 }
2754
2755 return decl;
2756}
2757
9188c363
MM
2758/* In C++, you don't have to write `struct S' to refer to `S'; you
2759 can just use `S'. We accomplish this by creating a TYPE_DECL as
2760 if the user had written `typedef struct S S'. Create and return
2761 the TYPE_DECL for TYPE. */
2762
2763tree
2764create_implicit_typedef (name, type)
2765 tree name;
2766 tree type;
2767{
2768 tree decl;
2769
2770 decl = build_decl (TYPE_DECL, name, type);
c727aa5e 2771 DECL_ARTIFICIAL (decl) = 1;
9188c363
MM
2772 /* There are other implicit type declarations, like the one *within*
2773 a class that allows you to write `S::S'. We must distinguish
2774 amongst these. */
2775 SET_DECL_IMPLICIT_TYPEDEF_P (decl);
2776 TYPE_NAME (type) = decl;
2777
2778 return decl;
2779}
2780
8d08fdba 2781/* Push a tag name NAME for struct/class/union/enum type TYPE.
6757edfe 2782 Normally put it into the inner-most non-tag-transparent scope,
8d08fdba 2783 but if GLOBALIZE is true, put it in the inner-most non-class scope.
e92cc029 2784 The latter is needed for implicit declarations. */
8d08fdba
MS
2785
2786void
2787pushtag (name, type, globalize)
2788 tree name, type;
2789 int globalize;
2790{
2791 register struct binding_level *b;
8d08fdba 2792
8f032717 2793 b = current_binding_level;
8d08fdba
MS
2794 while (b->tag_transparent
2795 || (globalize && b->parm_flag == 2))
2796 b = b->level_chain;
2797
e1b3e07d 2798 b->tags = tree_cons (name, type, b->tags);
8d08fdba
MS
2799
2800 if (name)
2801 {
8d08fdba 2802 /* Do C++ gratuitous typedefing. */
db5ae43f 2803 if (IDENTIFIER_TYPE_VALUE (name) != type)
8d08fdba 2804 {
93cdc044 2805 register tree d = NULL_TREE;
848cf1e0 2806 int in_class = 0;
9188c363 2807 tree context = TYPE_CONTEXT (type);
280f9385 2808
280f9385
MM
2809 if (! context)
2810 {
2811 tree cs = current_scope ();
2812
2813 if (! globalize)
2814 context = cs;
2f939d94 2815 else if (cs != NULL_TREE && TYPE_P (cs))
280f9385
MM
2816 /* When declaring a friend class of a local class, we want
2817 to inject the newly named class into the scope
2818 containing the local class, not the namespace scope. */
4f1c5b7d 2819 context = decl_function_context (get_type_decl (cs));
280f9385 2820 }
280f9385
MM
2821 if (!context)
2822 context = current_namespace;
8d08fdba 2823
74b846e0 2824 if ((b->template_parms_p && b->level_chain->parm_flag == 2)
93cdc044
JM
2825 || b->parm_flag == 2)
2826 in_class = 1;
93cdc044 2827
848cf1e0
MM
2828 if (current_lang_name == lang_name_java)
2829 TYPE_FOR_JAVA (type) = 1;
93cdc044 2830
9188c363 2831 d = create_implicit_typedef (name, type);
cb0dbb9a 2832 DECL_CONTEXT (d) = FROB_CONTEXT (context);
9188c363
MM
2833 if (! in_class)
2834 set_identifier_type_value_with_scope (name, type, b);
e1cd6e56 2835
39c01e4c
MM
2836 d = maybe_process_template_type_declaration (type,
2837 globalize, b);
93cdc044
JM
2838
2839 if (b->parm_flag == 2)
61a127b3 2840 {
848cf1e0 2841 if (!PROCESSING_REAL_TEMPLATE_DECL_P ())
61a127b3
MM
2842 /* Put this TYPE_DECL on the TYPE_FIELDS list for the
2843 class. But if it's a member template class, we
2844 want the TEMPLATE_DECL, not the TYPE_DECL, so this
2845 is done later. */
2846 finish_member_declaration (d);
8f032717
MM
2847 else
2848 pushdecl_class_level (d);
61a127b3 2849 }
93cdc044
JM
2850 else
2851 d = pushdecl_with_scope (d, b);
2852
848cf1e0
MM
2853 if (ANON_AGGRNAME_P (name))
2854 DECL_IGNORED_P (d) = 1;
2855
2856 TYPE_CONTEXT (type) = DECL_CONTEXT (d);
2857 DECL_ASSEMBLER_NAME (d) = DECL_NAME (d);
1f6e1acc
AS
2858
2859 /* If this is a local class, keep track of it. We need this
2860 information for name-mangling, and so that it is possible to find
2861 all function definitions in a translation unit in a convenient
2862 way. (It's otherwise tricky to find a member function definition
2863 it's only pointed to from within a local class.) */
2864 if (TYPE_CONTEXT (type)
089acd57
MM
2865 && TREE_CODE (TYPE_CONTEXT (type)) == FUNCTION_DECL
2866 && !processing_template_decl)
1f6e1acc
AS
2867 VARRAY_PUSH_TREE (local_classes, type);
2868
2869 if (!uses_template_parms (type))
669ec2b4
JM
2870 {
2871 if (flag_new_abi)
2872 DECL_ASSEMBLER_NAME (d) = mangle_type (type);
2873 else
2874 DECL_ASSEMBLER_NAME (d)
2875 = get_identifier (build_overload_name (type, 1, 1));
2876 }
8d08fdba
MS
2877 }
2878 if (b->parm_flag == 2)
2879 {
d0f062fb 2880 if (!COMPLETE_TYPE_P (current_class_type))
8d08fdba
MS
2881 CLASSTYPE_TAGS (current_class_type) = b->tags;
2882 }
2883 }
2884
2885 if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL)
2886 /* Use the canonical TYPE_DECL for this node. */
2887 TYPE_STUB_DECL (type) = TYPE_NAME (type);
2888 else
2889 {
2890 /* Create a fake NULL-named TYPE_DECL node whose TREE_TYPE
2891 will be the tagged type we just added to the current
2892 binding level. This fake NULL-named TYPE_DECL node helps
2893 dwarfout.c to know when it needs to output a
2894 representation of a tagged type, and it also gives us a
2895 convenient place to record the "scope start" address for
2896 the tagged type. */
2897
8d08fdba 2898 tree d = build_decl (TYPE_DECL, NULL_TREE, type);
8d08fdba
MS
2899 TYPE_STUB_DECL (type) = pushdecl_with_scope (d, b);
2900 }
2901}
2902
2903/* Counter used to create anonymous type names. */
e92cc029 2904
8d08fdba
MS
2905static int anon_cnt = 0;
2906
2907/* Return an IDENTIFIER which can be used as a name for
2908 anonymous structs and unions. */
e92cc029 2909
8d08fdba
MS
2910tree
2911make_anon_name ()
2912{
2913 char buf[32];
2914
2915 sprintf (buf, ANON_AGGRNAME_FORMAT, anon_cnt++);
2916 return get_identifier (buf);
2917}
2918
2919/* Clear the TREE_PURPOSE slot of tags which have anonymous typenames.
2920 This keeps dbxout from getting confused. */
e92cc029 2921
8d08fdba
MS
2922void
2923clear_anon_tags ()
2924{
2925 register struct binding_level *b;
2926 register tree tags;
2927 static int last_cnt = 0;
2928
2929 /* Fast out if no new anon names were declared. */
2930 if (last_cnt == anon_cnt)
2931 return;
2932
2933 b = current_binding_level;
2934 while (b->tag_transparent)
2935 b = b->level_chain;
2936 tags = b->tags;
2937 while (tags)
2938 {
2939 /* A NULL purpose means we have already processed all tags
2940 from here to the end of the list. */
2941 if (TREE_PURPOSE (tags) == NULL_TREE)
2942 break;
2943 if (ANON_AGGRNAME_P (TREE_PURPOSE (tags)))
2944 TREE_PURPOSE (tags) = NULL_TREE;
2945 tags = TREE_CHAIN (tags);
2946 }
2947 last_cnt = anon_cnt;
2948}
2949\f
2950/* Subroutine of duplicate_decls: return truthvalue of whether
2951 or not types of these decls match.
2952
2953 For C++, we must compare the parameter list so that `int' can match
2954 `int&' in a parameter position, but `int&' is not confused with
2955 `const int&'. */
e92cc029 2956
6060a796 2957int
8d08fdba
MS
2958decls_match (newdecl, olddecl)
2959 tree newdecl, olddecl;
2960{
2961 int types_match;
2962
347d73d7
ML
2963 if (newdecl == olddecl)
2964 return 1;
2965
6b4b3deb
MM
2966 if (TREE_CODE (newdecl) != TREE_CODE (olddecl))
2967 /* If the two DECLs are not even the same kind of thing, we're not
2968 interested in their types. */
2969 return 0;
2970
2971 if (TREE_CODE (newdecl) == FUNCTION_DECL)
8d08fdba
MS
2972 {
2973 tree f1 = TREE_TYPE (newdecl);
2974 tree f2 = TREE_TYPE (olddecl);
2975 tree p1 = TYPE_ARG_TYPES (f1);
2976 tree p2 = TYPE_ARG_TYPES (f2);
2977
4f1c5b7d 2978 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
eb68cb58
MM
2979 && ! (DECL_EXTERN_C_P (newdecl)
2980 && DECL_EXTERN_C_P (olddecl)))
c5a6fc45
JM
2981 return 0;
2982
8d08fdba 2983 if (TREE_CODE (f1) != TREE_CODE (f2))
e867a179 2984 return 0;
8d08fdba 2985
3bfdc719 2986 if (same_type_p (TREE_TYPE (f1), TREE_TYPE (f2)))
8926095f 2987 {
8b27e9ef
NS
2988 if (p2 == NULL_TREE && DECL_EXTERN_C_P (olddecl)
2989 && (DECL_BUILT_IN (olddecl)
2990#ifndef NO_IMPLICIT_EXTERN_C
2991 || (DECL_IN_SYSTEM_HEADER (newdecl) && !DECL_CLASS_SCOPE_P (newdecl))
2992 || (DECL_IN_SYSTEM_HEADER (olddecl) && !DECL_CLASS_SCOPE_P (olddecl))
2993#endif
2994 ))
a28e3c7f
MS
2995 {
2996 types_match = self_promoting_args_p (p1);
2997 if (p1 == void_list_node)
2998 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
2999 }
8b27e9ef
NS
3000#ifndef NO_IMPLICIT_EXTERN_C
3001 else if (p1 == NULL_TREE
3002 && (DECL_EXTERN_C_P (olddecl)
3003 && DECL_IN_SYSTEM_HEADER (olddecl)
3004 && !DECL_CLASS_SCOPE_P (olddecl))
3005 && (DECL_EXTERN_C_P (newdecl)
3006 && DECL_IN_SYSTEM_HEADER (newdecl)
3007 && !DECL_CLASS_SCOPE_P (newdecl)))
a28e3c7f
MS
3008 {
3009 types_match = self_promoting_args_p (p2);
3010 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
3011 }
8b27e9ef 3012#endif
8926095f 3013 else
91063b51 3014 types_match = compparms (p1, p2);
8926095f 3015 }
8d08fdba
MS
3016 else
3017 types_match = 0;
3018 }
6b4b3deb 3019 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
51c184be 3020 {
f84b4be9
JM
3021 if (!comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
3022 DECL_TEMPLATE_PARMS (olddecl)))
3023 return 0;
68642fb6 3024
2bb5d995
JM
3025 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl))
3026 != TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)))
3027 return 0;
3028
f84b4be9
JM
3029 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
3030 types_match = 1;
3031 else
3032 types_match = decls_match (DECL_TEMPLATE_RESULT (olddecl),
3033 DECL_TEMPLATE_RESULT (newdecl));
51c184be 3034 }
8d08fdba
MS
3035 else
3036 {
3037 if (TREE_TYPE (newdecl) == error_mark_node)
3038 types_match = TREE_TYPE (olddecl) == error_mark_node;
3039 else if (TREE_TYPE (olddecl) == NULL_TREE)
3040 types_match = TREE_TYPE (newdecl) == NULL_TREE;
a0a33927
MS
3041 else if (TREE_TYPE (newdecl) == NULL_TREE)
3042 types_match = 0;
8d08fdba 3043 else
01240200 3044 types_match = comptypes (TREE_TYPE (newdecl),
3bfdc719
MM
3045 TREE_TYPE (olddecl),
3046 COMPARE_REDECLARATION);
8d08fdba
MS
3047 }
3048
3049 return types_match;
3050}
3051
3052/* If NEWDECL is `static' and an `extern' was seen previously,
24f30ed4 3053 warn about it. OLDDECL is the previous declaration.
8d08fdba
MS
3054
3055 Note that this does not apply to the C++ case of declaring
3056 a variable `extern const' and then later `const'.
3057
8d08fdba
MS
3058 Don't complain about built-in functions, since they are beyond
3059 the user's control. */
3060
3061static void
3062warn_extern_redeclared_static (newdecl, olddecl)
3063 tree newdecl, olddecl;
3064{
d8e178a0 3065 static const char *explicit_extern_static_warning
8251199e 3066 = "`%D' was declared `extern' and later `static'";
d8e178a0 3067 static const char *implicit_extern_static_warning
8251199e
JM
3068 = "`%D' was declared implicitly `extern' and later `static'";
3069
24f30ed4
MM
3070 tree name;
3071
68642fb6 3072 if (TREE_CODE (newdecl) == TYPE_DECL
655dc6ee
JM
3073 || TREE_CODE (newdecl) == TEMPLATE_DECL
3074 || TREE_CODE (newdecl) == CONST_DECL)
8d08fdba 3075 return;
68642fb6 3076
963d5758
MM
3077 /* Don't get confused by static member functions; that's a different
3078 use of `static'. */
3079 if (TREE_CODE (newdecl) == FUNCTION_DECL
3080 && DECL_STATIC_FUNCTION_P (newdecl))
3081 return;
8d08fdba 3082
24f30ed4
MM
3083 /* If the old declaration was `static', or the new one isn't, then
3084 then everything is OK. */
3085 if (DECL_THIS_STATIC (olddecl) || !DECL_THIS_STATIC (newdecl))
3086 return;
3087
3088 /* It's OK to declare a builtin function as `static'. */
3089 if (TREE_CODE (olddecl) == FUNCTION_DECL
3090 && DECL_ARTIFICIAL (olddecl))
3091 return;
3092
8d08fdba 3093 name = DECL_ASSEMBLER_NAME (newdecl);
24f30ed4
MM
3094 cp_pedwarn (IDENTIFIER_IMPLICIT_DECL (name)
3095 ? implicit_extern_static_warning
3096 : explicit_extern_static_warning, newdecl);
3097 cp_pedwarn_at ("previous declaration of `%D'", olddecl);
8d08fdba
MS
3098}
3099
3100/* Handle when a new declaration NEWDECL has the same name as an old
3101 one OLDDECL in the same binding contour. Prints an error message
3102 if appropriate.
3103
3104 If safely possible, alter OLDDECL to look like NEWDECL, and return 1.
3105 Otherwise, return 0. */
3106
51c184be 3107int
8d08fdba 3108duplicate_decls (newdecl, olddecl)
824b9a4c 3109 tree newdecl, olddecl;
8d08fdba 3110{
8d08fdba
MS
3111 unsigned olddecl_uid = DECL_UID (olddecl);
3112 int olddecl_friend = 0, types_match = 0;
0b60dfe3 3113 int new_defines_function = 0;
5566b478
MS
3114
3115 if (newdecl == olddecl)
3116 return 1;
8d08fdba 3117
8926095f 3118 types_match = decls_match (newdecl, olddecl);
8d08fdba 3119
8d08fdba
MS
3120 /* If either the type of the new decl or the type of the old decl is an
3121 error_mark_node, then that implies that we have already issued an
3122 error (earlier) for some bogus type specification, and in that case,
3123 it is rather pointless to harass the user with yet more error message
0b60dfe3 3124 about the same declaration, so just pretend the types match here. */
bd6dd845
MS
3125 if (TREE_TYPE (newdecl) == error_mark_node
3126 || TREE_TYPE (olddecl) == error_mark_node)
8d08fdba 3127 types_match = 1;
68642fb6 3128
0b60dfe3 3129 /* Check for redeclaration and other discrepancies. */
d22c8596 3130 if (TREE_CODE (olddecl) == FUNCTION_DECL
9f33663b
JM
3131 && DECL_ARTIFICIAL (olddecl))
3132 {
3133 if (TREE_CODE (newdecl) != FUNCTION_DECL)
3134 {
3135 /* If you declare a built-in or predefined function name as static,
3136 the old definition is overridden, but optionally warn this was a
3137 bad choice of name. */
3138 if (! TREE_PUBLIC (newdecl))
3139 {
3140 if (warn_shadow)
3141 cp_warning ("shadowing %s function `%#D'",
3142 DECL_BUILT_IN (olddecl) ? "built-in" : "library",
3143 olddecl);
3144 /* Discard the old built-in function. */
3145 return 0;
3146 }
3147 /* If the built-in is not ansi, then programs can override
3148 it even globally without an error. */
3149 else if (! DECL_BUILT_IN (olddecl))
3150 cp_warning ("library function `%#D' redeclared as non-function `%#D'",
3151 olddecl, newdecl);
3152 else
3153 {
3154 cp_error ("declaration of `%#D'", newdecl);
3155 cp_error ("conflicts with built-in declaration `%#D'",
a4443a08 3156 olddecl);
9f33663b 3157 }
a4443a08
MS
3158 return 0;
3159 }
9f33663b 3160 else if (!types_match)
8d08fdba 3161 {
eb68cb58
MM
3162 if ((DECL_EXTERN_C_P (newdecl)
3163 && DECL_EXTERN_C_P (olddecl))
9f33663b
JM
3164 || compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
3165 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
a4443a08 3166 {
9f33663b
JM
3167 /* A near match; override the builtin. */
3168
3169 if (TREE_PUBLIC (newdecl))
a4443a08 3170 {
9f33663b
JM
3171 cp_warning ("new declaration `%#D'", newdecl);
3172 cp_warning ("ambiguates built-in declaration `%#D'",
3173 olddecl);
a4443a08 3174 }
9f33663b
JM
3175 else if (warn_shadow)
3176 cp_warning ("shadowing %s function `%#D'",
3177 DECL_BUILT_IN (olddecl) ? "built-in" : "library",
3178 olddecl);
a4443a08 3179 }
9f33663b
JM
3180 else
3181 /* Discard the old built-in function. */
3182 return 0;
8d08fdba 3183 }
68642fb6 3184
24f30ed4
MM
3185 if (DECL_THIS_STATIC (newdecl) && !DECL_THIS_STATIC (olddecl))
3186 {
3187 /* If a builtin function is redeclared as `static', merge
3188 the declarations, but make the original one static. */
3189 DECL_THIS_STATIC (olddecl) = 1;
3190 TREE_PUBLIC (olddecl) = 0;
9bfadf57 3191
421844e7
MM
3192 /* Make the old declaration consistent with the new one so
3193 that all remnants of the builtin-ness of this function
3194 will be banished. */
9bfadf57
MM
3195 DECL_LANGUAGE (olddecl) = DECL_LANGUAGE (newdecl);
3196 DECL_RTL (olddecl) = DECL_RTL (newdecl);
3197 DECL_ASSEMBLER_NAME (olddecl) = DECL_ASSEMBLER_NAME (newdecl);
3198 SET_IDENTIFIER_GLOBAL_VALUE (DECL_ASSEMBLER_NAME (newdecl),
3199 newdecl);
24f30ed4 3200 }
39211cd5
MS
3201 }
3202 else if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
3203 {
9ed182dc
JM
3204 if ((TREE_CODE (olddecl) == TYPE_DECL && DECL_ARTIFICIAL (olddecl)
3205 && TREE_CODE (newdecl) != TYPE_DECL
3206 && ! (TREE_CODE (newdecl) == TEMPLATE_DECL
3207 && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL))
3208 || (TREE_CODE (newdecl) == TYPE_DECL && DECL_ARTIFICIAL (newdecl)
3209 && TREE_CODE (olddecl) != TYPE_DECL
3210 && ! (TREE_CODE (olddecl) == TEMPLATE_DECL
3211 && (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl))
3212 == TYPE_DECL))))
3213 {
3214 /* We do nothing special here, because C++ does such nasty
3215 things with TYPE_DECLs. Instead, just let the TYPE_DECL
3216 get shadowed, and know that if we need to find a TYPE_DECL
3217 for a given name, we can look in the IDENTIFIER_TYPE_VALUE
3218 slot of the identifier. */
3219 return 0;
3220 }
3221
39211cd5 3222 if ((TREE_CODE (newdecl) == FUNCTION_DECL
5566b478 3223 && DECL_FUNCTION_TEMPLATE_P (olddecl))
39211cd5 3224 || (TREE_CODE (olddecl) == FUNCTION_DECL
5566b478 3225 && DECL_FUNCTION_TEMPLATE_P (newdecl)))
39211cd5 3226 return 0;
9ed182dc 3227
8251199e 3228 cp_error ("`%#D' redeclared as different kind of symbol", newdecl);
39211cd5
MS
3229 if (TREE_CODE (olddecl) == TREE_LIST)
3230 olddecl = TREE_VALUE (olddecl);
8251199e 3231 cp_error_at ("previous declaration of `%#D'", olddecl);
39211cd5
MS
3232
3233 /* New decl is completely inconsistent with the old one =>
3234 tell caller to replace the old one. */
3235
3236 return 0;
8d08fdba 3237 }
8d08fdba
MS
3238 else if (!types_match)
3239 {
4f1c5b7d 3240 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl))
7bdbfa05
MM
3241 /* These are certainly not duplicate declarations; they're
3242 from different scopes. */
3243 return 0;
3244
8926095f 3245 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
f0e01782
MS
3246 {
3247 /* The name of a class template may not be declared to refer to
3248 any other template, class, function, object, namespace, value,
e92cc029 3249 or type in the same scope. */
5566b478
MS
3250 if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == TYPE_DECL
3251 || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
f0e01782 3252 {
8251199e
JM
3253 cp_error ("declaration of template `%#D'", newdecl);
3254 cp_error_at ("conflicts with previous declaration `%#D'",
f0e01782
MS
3255 olddecl);
3256 }
ec255269
MS
3257 else if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == FUNCTION_DECL
3258 && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
3259 && compparms (TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl))),
91063b51 3260 TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl))))
75650646
MM
3261 && comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
3262 DECL_TEMPLATE_PARMS (olddecl)))
ec255269 3263 {
8251199e
JM
3264 cp_error ("new declaration `%#D'", newdecl);
3265 cp_error_at ("ambiguates old declaration `%#D'", olddecl);
ec255269 3266 }
f0e01782
MS
3267 return 0;
3268 }
8926095f
MS
3269 if (TREE_CODE (newdecl) == FUNCTION_DECL)
3270 {
eb68cb58 3271 if (DECL_EXTERN_C_P (newdecl) && DECL_EXTERN_C_P (olddecl))
8926095f 3272 {
8251199e 3273 cp_error ("declaration of C function `%#D' conflicts with",
8926095f 3274 newdecl);
8251199e 3275 cp_error_at ("previous declaration `%#D' here", olddecl);
8926095f 3276 }
00595019 3277 else if (compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
91063b51 3278 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
700f8a87 3279 {
8251199e
JM
3280 cp_error ("new declaration `%#D'", newdecl);
3281 cp_error_at ("ambiguates old declaration `%#D'", olddecl);
700f8a87
MS
3282 }
3283 else
3284 return 0;
8926095f 3285 }
8d08fdba
MS
3286
3287 /* Already complained about this, so don't do so again. */
a4443a08 3288 else if (current_class_type == NULL_TREE
8d08fdba
MS
3289 || IDENTIFIER_ERROR_LOCUS (DECL_ASSEMBLER_NAME (newdecl)) != current_class_type)
3290 {
8251199e
JM
3291 cp_error ("conflicting types for `%#D'", newdecl);
3292 cp_error_at ("previous declaration as `%#D'", olddecl);
8d08fdba
MS
3293 }
3294 }
68642fb6 3295 else if (TREE_CODE (newdecl) == FUNCTION_DECL
75650646
MM
3296 && ((DECL_TEMPLATE_SPECIALIZATION (olddecl)
3297 && (!DECL_TEMPLATE_INFO (newdecl)
68642fb6 3298 || (DECL_TI_TEMPLATE (newdecl)
75650646
MM
3299 != DECL_TI_TEMPLATE (olddecl))))
3300 || (DECL_TEMPLATE_SPECIALIZATION (newdecl)
3301 && (!DECL_TEMPLATE_INFO (olddecl)
68642fb6 3302 || (DECL_TI_TEMPLATE (olddecl)
75650646 3303 != DECL_TI_TEMPLATE (newdecl))))))
386b8a85
JM
3304 /* It's OK to have a template specialization and a non-template
3305 with the same type, or to have specializations of two
75650646
MM
3306 different templates with the same type. Note that if one is a
3307 specialization, and the other is an instantiation of the same
3308 template, that we do not exit at this point. That situation
3309 can occur if we instantiate a template class, and then
3310 specialize one of its methods. This situation is legal, but
3311 the declarations must be merged in the usual way. */
3312 return 0;
68642fb6
UD
3313 else if (TREE_CODE (newdecl) == FUNCTION_DECL
3314 && ((DECL_TEMPLATE_INSTANTIATION (olddecl)
75650646
MM
3315 && !DECL_USE_TEMPLATE (newdecl))
3316 || (DECL_TEMPLATE_INSTANTIATION (newdecl)
3317 && !DECL_USE_TEMPLATE (olddecl))))
3318 /* One of the declarations is a template instantiation, and the
3319 other is not a template at all. That's OK. */
386b8a85 3320 return 0;
85c6cbaf
ML
3321 else if (TREE_CODE (newdecl) == NAMESPACE_DECL
3322 && DECL_NAMESPACE_ALIAS (newdecl)
3323 && DECL_NAMESPACE_ALIAS (newdecl) == DECL_NAMESPACE_ALIAS (olddecl))
3324 /* Redeclaration of namespace alias, ignore it. */
3325 return 1;
8d08fdba
MS
3326 else
3327 {
d8e178a0 3328 const char *errmsg = redeclaration_error_message (newdecl, olddecl);
8251199e 3329 if (errmsg)
8d08fdba 3330 {
8251199e 3331 cp_error (errmsg, newdecl);
8d08fdba
MS
3332 if (DECL_NAME (olddecl) != NULL_TREE)
3333 cp_error_at ((DECL_INITIAL (olddecl)
2c73f9f5 3334 && namespace_bindings_p ())
8251199e
JM
3335 ? "`%#D' previously defined here"
3336 : "`%#D' previously declared here", olddecl);
8d08fdba
MS
3337 }
3338 else if (TREE_CODE (olddecl) == FUNCTION_DECL
3339 && DECL_INITIAL (olddecl) != NULL_TREE
3340 && TYPE_ARG_TYPES (TREE_TYPE (olddecl)) == NULL_TREE
3341 && TYPE_ARG_TYPES (TREE_TYPE (newdecl)) != NULL_TREE)
3342 {
3343 /* Prototype decl follows defn w/o prototype. */
8251199e
JM
3344 cp_warning_at ("prototype for `%#D'", newdecl);
3345 cp_warning_at ("follows non-prototype definition here", olddecl);
8d08fdba
MS
3346 }
3347 else if (TREE_CODE (olddecl) == FUNCTION_DECL
3348 && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl))
8926095f
MS
3349 {
3350 /* extern "C" int foo ();
3351 int foo () { bar (); }
3352 is OK. */
9cd64686
MM
3353 if (current_lang_stack
3354 == &VARRAY_TREE (current_lang_base, 0))
a28e3c7f 3355 DECL_LANGUAGE (newdecl) = DECL_LANGUAGE (olddecl);
8926095f
MS
3356 else
3357 {
8251199e 3358 cp_error_at ("previous declaration of `%#D' with %L linkage",
8926095f 3359 olddecl, DECL_LANGUAGE (olddecl));
8251199e 3360 cp_error ("conflicts with new declaration with %L linkage",
8926095f
MS
3361 DECL_LANGUAGE (newdecl));
3362 }
3363 }
e1cd6e56 3364
a6f02587 3365 if (DECL_LANG_SPECIFIC (olddecl) && DECL_USE_TEMPLATE (olddecl))
c32381b1
JM
3366 ;
3367 else if (TREE_CODE (olddecl) == FUNCTION_DECL)
e1cd6e56
MS
3368 {
3369 tree t1 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
3370 tree t2 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
3371 int i = 1;
3372
3373 if (TREE_CODE (TREE_TYPE (newdecl)) == METHOD_TYPE)
3374 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2);
68642fb6 3375
e1cd6e56
MS
3376 for (; t1 && t1 != void_list_node;
3377 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2), i++)
3378 if (TREE_PURPOSE (t1) && TREE_PURPOSE (t2))
3379 {
2507f3b5
RK
3380 if (1 == simple_cst_equal (TREE_PURPOSE (t1),
3381 TREE_PURPOSE (t2)))
e1cd6e56
MS
3382 {
3383 if (pedantic)
3384 {
8251199e 3385 cp_pedwarn ("default argument given for parameter %d of `%#D'",
e1cd6e56 3386 i, newdecl);
8251199e 3387 cp_pedwarn_at ("after previous specification in `%#D'",
e1cd6e56
MS
3388 olddecl);
3389 }
3390 }
3391 else
3392 {
8251199e 3393 cp_error ("default argument given for parameter %d of `%#D'",
e1cd6e56 3394 i, newdecl);
8251199e 3395 cp_error_at ("after previous specification in `%#D'",
e1cd6e56
MS
3396 olddecl);
3397 }
3398 }
a5894242 3399
7fcdf4c2
MS
3400 if (DECL_THIS_INLINE (newdecl) && ! DECL_THIS_INLINE (olddecl)
3401 && TREE_ADDRESSABLE (olddecl) && warn_inline)
dff6b454 3402 {
8251199e 3403 cp_warning ("`%#D' was used before it was declared inline",
7fcdf4c2 3404 newdecl);
8251199e 3405 cp_warning_at ("previous non-inline declaration here",
7fcdf4c2 3406 olddecl);
dff6b454 3407 }
e1cd6e56 3408 }
8d08fdba
MS
3409 }
3410
3411 /* If new decl is `static' and an `extern' was seen previously,
3412 warn about it. */
3413 warn_extern_redeclared_static (newdecl, olddecl);
3414
e92cc029 3415 /* We have committed to returning 1 at this point. */
8d08fdba
MS
3416 if (TREE_CODE (newdecl) == FUNCTION_DECL)
3417 {
3418 /* Now that functions must hold information normally held
3419 by field decls, there is extra work to do so that
3420 declaration information does not get destroyed during
3421 definition. */
3422 if (DECL_VINDEX (olddecl))
3423 DECL_VINDEX (newdecl) = DECL_VINDEX (olddecl);
4f1c5b7d
MM
3424 if (DECL_VIRTUAL_CONTEXT (olddecl))
3425 DECL_VIRTUAL_CONTEXT (newdecl) = DECL_VIRTUAL_CONTEXT (olddecl);
8d08fdba
MS
3426 if (DECL_CONTEXT (olddecl))
3427 DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
0e5921e8 3428 if (DECL_PENDING_INLINE_INFO (newdecl) == 0)
8d08fdba 3429 DECL_PENDING_INLINE_INFO (newdecl) = DECL_PENDING_INLINE_INFO (olddecl);
e1cd6e56
MS
3430 DECL_STATIC_CONSTRUCTOR (newdecl) |= DECL_STATIC_CONSTRUCTOR (olddecl);
3431 DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
fee7654e 3432 DECL_PURE_VIRTUAL_P (newdecl) |= DECL_PURE_VIRTUAL_P (olddecl);
864b83b9 3433 DECL_VIRTUAL_P (newdecl) |= DECL_VIRTUAL_P (olddecl);
4a67c9e9 3434 DECL_NEEDS_FINAL_OVERRIDER_P (newdecl) |= DECL_NEEDS_FINAL_OVERRIDER_P (olddecl);
963d5758 3435 DECL_THIS_STATIC (newdecl) |= DECL_THIS_STATIC (olddecl);
596ea4e5 3436 DECL_LANG_SPECIFIC (newdecl)->u2 = DECL_LANG_SPECIFIC (olddecl)->u2;
0b60dfe3 3437 new_defines_function = DECL_INITIAL (newdecl) != NULL_TREE;
68642fb6 3438
0b60dfe3
BK
3439 /* Optionally warn about more than one declaration for the same
3440 name, but don't warn about a function declaration followed by a
3441 definition. */
3442 if (warn_redundant_decls && ! DECL_ARTIFICIAL (olddecl)
3443 && !(new_defines_function && DECL_INITIAL (olddecl) == NULL_TREE)
3444 /* Don't warn about extern decl followed by definition. */
3445 && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl))
3446 /* Don't warn about friends, let add_friend take care of it. */
3447 && ! DECL_FRIEND_P (newdecl))
3448 {
8251199e
JM
3449 cp_warning ("redundant redeclaration of `%D' in same scope", newdecl);
3450 cp_warning_at ("previous declaration of `%D'", olddecl);
0b60dfe3 3451 }
8d08fdba
MS
3452 }
3453
3454 /* Deal with C++: must preserve virtual function table size. */
3455 if (TREE_CODE (olddecl) == TYPE_DECL)
3456 {
3457 register tree newtype = TREE_TYPE (newdecl);
3458 register tree oldtype = TREE_TYPE (olddecl);
3459
3460 if (newtype != error_mark_node && oldtype != error_mark_node
3461 && TYPE_LANG_SPECIFIC (newtype) && TYPE_LANG_SPECIFIC (oldtype))
3462 {
3463 CLASSTYPE_VSIZE (newtype) = CLASSTYPE_VSIZE (oldtype);
3464 CLASSTYPE_FRIEND_CLASSES (newtype)
3465 = CLASSTYPE_FRIEND_CLASSES (oldtype);
3466 }
970d6386
MM
3467
3468 DECL_ORIGINAL_TYPE (newdecl) = DECL_ORIGINAL_TYPE (olddecl);
8d08fdba
MS
3469 }
3470
8d08fdba
MS
3471 /* Copy all the DECL_... slots specified in the new decl
3472 except for any that we copy here from the old type. */
68642fb6 3473 DECL_MACHINE_ATTRIBUTES (newdecl)
0b60dfe3 3474 = merge_machine_decl_attributes (olddecl, newdecl);
8d08fdba 3475
5566b478
MS
3476 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
3477 {
4d85e00e 3478 TREE_TYPE (olddecl) = TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl));
68642fb6 3479 DECL_TEMPLATE_SPECIALIZATIONS (olddecl)
4d85e00e
MM
3480 = chainon (DECL_TEMPLATE_SPECIALIZATIONS (olddecl),
3481 DECL_TEMPLATE_SPECIALIZATIONS (newdecl));
68642fb6 3482
5566b478
MS
3483 return 1;
3484 }
68642fb6 3485
8d08fdba
MS
3486 if (types_match)
3487 {
3488 /* Automatically handles default parameters. */
3489 tree oldtype = TREE_TYPE (olddecl);
e1cd6e56 3490 tree newtype;
8d08fdba 3491
e1cd6e56
MS
3492 /* Merge the data types specified in the two decls. */
3493 newtype = common_type (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
3494
9076e292
JM
3495 /* If common_type produces a non-typedef type, just use the old type. */
3496 if (TREE_CODE (newdecl) == TYPE_DECL
3497 && newtype == DECL_ORIGINAL_TYPE (newdecl))
3498 newtype = oldtype;
3499
8d08fdba
MS
3500 if (TREE_CODE (newdecl) == VAR_DECL)
3501 DECL_THIS_EXTERN (newdecl) |= DECL_THIS_EXTERN (olddecl);
3502 /* Do this after calling `common_type' so that default
3503 parameters don't confuse us. */
3504 else if (TREE_CODE (newdecl) == FUNCTION_DECL
3505 && (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl))
3506 != TYPE_RAISES_EXCEPTIONS (TREE_TYPE (olddecl))))
3507 {
f30432d7 3508 TREE_TYPE (newdecl) = build_exception_variant (newtype,
8d08fdba 3509 TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl)));
f30432d7 3510 TREE_TYPE (olddecl) = build_exception_variant (newtype,
8d08fdba
MS
3511 TYPE_RAISES_EXCEPTIONS (oldtype));
3512
9a224b4a
JM
3513 if ((pedantic || ! DECL_IN_SYSTEM_HEADER (olddecl))
3514 && DECL_SOURCE_LINE (olddecl) != 0
da20811c 3515 && flag_exceptions
4cc1d462
NS
3516 && !comp_except_specs (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl)),
3517 TYPE_RAISES_EXCEPTIONS (TREE_TYPE (olddecl)), 1))
8d08fdba 3518 {
4cc1d462 3519 cp_error ("declaration of `%F' throws different exceptions",
a28e3c7f 3520 newdecl);
a09ba2e0 3521 cp_error_at ("than previous declaration `%F'", olddecl);
8d08fdba
MS
3522 }
3523 }
3524 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
3525
3526 /* Lay the type out, unless already done. */
407f03b8 3527 if (! same_type_p (newtype, oldtype)
5566b478 3528 && TREE_TYPE (newdecl) != error_mark_node
5156628f 3529 && !(processing_template_decl && uses_template_parms (newdecl)))
b7484fbe
MS
3530 layout_type (TREE_TYPE (newdecl));
3531
5566b478
MS
3532 if ((TREE_CODE (newdecl) == VAR_DECL
3533 || TREE_CODE (newdecl) == PARM_DECL
3534 || TREE_CODE (newdecl) == RESULT_DECL
3535 || TREE_CODE (newdecl) == FIELD_DECL
3536 || TREE_CODE (newdecl) == TYPE_DECL)
5156628f 3537 && !(processing_template_decl && uses_template_parms (newdecl)))
b7484fbe 3538 layout_decl (newdecl, 0);
8d08fdba
MS
3539
3540 /* Merge the type qualifiers. */
3541 if (TREE_READONLY (newdecl))
3542 TREE_READONLY (olddecl) = 1;
3543 if (TREE_THIS_VOLATILE (newdecl))
3544 TREE_THIS_VOLATILE (olddecl) = 1;
3545
3546 /* Merge the initialization information. */
8926095f
MS
3547 if (DECL_INITIAL (newdecl) == NULL_TREE
3548 && DECL_INITIAL (olddecl) != NULL_TREE)
3549 {
3550 DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
3551 DECL_SOURCE_FILE (newdecl) = DECL_SOURCE_FILE (olddecl);
3552 DECL_SOURCE_LINE (newdecl) = DECL_SOURCE_LINE (olddecl);
b0d06515
MM
3553 if (CAN_HAVE_FULL_LANG_DECL_P (newdecl)
3554 && DECL_LANG_SPECIFIC (newdecl)
4d85e00e
MM
3555 && DECL_LANG_SPECIFIC (olddecl))
3556 DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
8926095f 3557 }
39211cd5
MS
3558
3559 /* Merge the section attribute.
3560 We want to issue an error if the sections conflict but that must be
3561 done later in decl_attributes since we are called before attributes
3562 are assigned. */
3563 if (DECL_SECTION_NAME (newdecl) == NULL_TREE)
3564 DECL_SECTION_NAME (newdecl) = DECL_SECTION_NAME (olddecl);
3565
5d73aa63
MM
3566 /* Keep the old rtl since we can safely use it. */
3567 DECL_RTL (newdecl) = DECL_RTL (olddecl);
a157febd
GK
3568
3569 if (TREE_CODE (newdecl) == FUNCTION_DECL)
3570 {
3571 DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (newdecl)
3572 |= DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (olddecl);
3573 DECL_NO_CHECK_MEMORY_USAGE (newdecl)
3574 |= DECL_NO_CHECK_MEMORY_USAGE (olddecl);
3575 DECL_NO_LIMIT_STACK (newdecl)
3576 |= DECL_NO_LIMIT_STACK (olddecl);
3577 }
8d08fdba
MS
3578 }
3579 /* If cannot merge, then use the new type and qualifiers,
3580 and don't preserve the old rtl. */
3581 else
3582 {
3583 /* Clean out any memory we had of the old declaration. */
3584 tree oldstatic = value_member (olddecl, static_aggregates);
3585 if (oldstatic)
3586 TREE_VALUE (oldstatic) = error_mark_node;
3587
3588 TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
3589 TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
3590 TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
3591 TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
3592 }
3593
3594 /* Merge the storage class information. */
a9aedbc2 3595 DECL_WEAK (newdecl) |= DECL_WEAK (olddecl);
e92cc029 3596 DECL_ONE_ONLY (newdecl) |= DECL_ONE_ONLY (olddecl);
794d4a61 3597 DECL_DEFER_OUTPUT (newdecl) |= DECL_DEFER_OUTPUT (olddecl);
a9aedbc2
MS
3598 TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
3599 TREE_STATIC (olddecl) = TREE_STATIC (newdecl) |= TREE_STATIC (olddecl);
3600 if (! DECL_EXTERNAL (olddecl))
3601 DECL_EXTERNAL (newdecl) = 0;
68642fb6 3602
0b60dfe3 3603 if (DECL_LANG_SPECIFIC (newdecl) && DECL_LANG_SPECIFIC (olddecl))
8d08fdba 3604 {
a9aedbc2
MS
3605 DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl);
3606 DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl);
77be6f82 3607 DECL_COMDAT (newdecl) |= DECL_COMDAT (olddecl);
68642fb6 3608 DECL_TEMPLATE_INSTANTIATED (newdecl)
2b0a63a3 3609 |= DECL_TEMPLATE_INSTANTIATED (olddecl);
0b60dfe3
BK
3610 /* Don't really know how much of the language-specific
3611 values we should copy from old to new. */
3612 DECL_IN_AGGR_P (newdecl) = DECL_IN_AGGR_P (olddecl);
3613 DECL_ACCESS (newdecl) = DECL_ACCESS (olddecl);
3614 DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl);
fbf1c34b 3615 DECL_TEMPLATE_INFO (newdecl) = DECL_TEMPLATE_INFO (olddecl);
0b60dfe3 3616 olddecl_friend = DECL_FRIEND_P (olddecl);
6a629cac
MM
3617
3618 /* Only functions have DECL_BEFRIENDING_CLASSES. */
3619 if (TREE_CODE (newdecl) == FUNCTION_DECL
3620 || DECL_FUNCTION_TEMPLATE_P (newdecl))
3621 DECL_BEFRIENDING_CLASSES (newdecl)
3622 = chainon (DECL_BEFRIENDING_CLASSES (newdecl),
3623 DECL_BEFRIENDING_CLASSES (olddecl));
8d08fdba
MS
3624 }
3625
8d08fdba
MS
3626 if (TREE_CODE (newdecl) == FUNCTION_DECL)
3627 {
68642fb6
UD
3628 if (DECL_TEMPLATE_INSTANTIATION (olddecl)
3629 && !DECL_TEMPLATE_INSTANTIATION (newdecl))
75650646
MM
3630 {
3631 /* If newdecl is not a specialization, then it is not a
3632 template-related function at all. And that means that we
3633 shoud have exited above, returning 0. */
3634 my_friendly_assert (DECL_TEMPLATE_SPECIALIZATION (newdecl),
3635 0);
3636
68642fb6 3637 if (TREE_USED (olddecl))
75650646 3638 /* From [temp.expl.spec]:
68642fb6 3639
75650646
MM
3640 If a template, a member template or the member of a class
3641 template is explicitly specialized then that
3642 specialization shall be declared before the first use of
3643 that specialization that would cause an implicit
3644 instantiation to take place, in every translation unit in
3645 which such a use occurs. */
68642fb6 3646 cp_error ("explicit specialization of %D after first use",
75650646
MM
3647 olddecl);
3648
3649 SET_DECL_TEMPLATE_SPECIALIZATION (olddecl);
3650 }
faae18ab
MS
3651 DECL_THIS_INLINE (newdecl) |= DECL_THIS_INLINE (olddecl);
3652
3653 /* If either decl says `inline', this fn is inline, unless its
3654 definition was passed already. */
3655 if (DECL_INLINE (newdecl) && DECL_INITIAL (olddecl) == NULL_TREE)
3656 DECL_INLINE (olddecl) = 1;
3657 DECL_INLINE (newdecl) = DECL_INLINE (olddecl);
3658
700f8a87
MS
3659 if (! types_match)
3660 {
3661 DECL_LANGUAGE (olddecl) = DECL_LANGUAGE (newdecl);
3662 DECL_ASSEMBLER_NAME (olddecl) = DECL_ASSEMBLER_NAME (newdecl);
5566b478
MS
3663 DECL_RTL (olddecl) = DECL_RTL (newdecl);
3664 }
3665 if (! types_match || new_defines_function)
3666 {
6f1b4c42
JM
3667 /* These need to be copied so that the names are available.
3668 Note that if the types do match, we'll preserve inline
3669 info and other bits, but if not, we won't. */
700f8a87
MS
3670 DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
3671 DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
700f8a87 3672 }
8d08fdba
MS
3673 if (new_defines_function)
3674 /* If defining a function declared with other language
3675 linkage, use the previously declared language linkage. */
3676 DECL_LANGUAGE (newdecl) = DECL_LANGUAGE (olddecl);
6f1b4c42 3677 else if (types_match)
8d08fdba
MS
3678 {
3679 /* If redeclaring a builtin function, and not a definition,
3680 it stays built in. */
3681 if (DECL_BUILT_IN (olddecl))
3682 {
26db82d8 3683 DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
39211cd5 3684 DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
8d08fdba
MS
3685 /* If we're keeping the built-in definition, keep the rtl,
3686 regardless of declaration matches. */
3687 DECL_RTL (newdecl) = DECL_RTL (olddecl);
3688 }
3689 else
3690 DECL_FRAME_SIZE (newdecl) = DECL_FRAME_SIZE (olddecl);
3691
3692 DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
8926095f 3693 if ((DECL_SAVED_INSNS (newdecl) = DECL_SAVED_INSNS (olddecl)))
8d08fdba
MS
3694 /* Previously saved insns go together with
3695 the function's previous definition. */
3696 DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
3697 /* Don't clear out the arguments if we're redefining a function. */
3698 if (DECL_ARGUMENTS (olddecl))
3699 DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
3700 }
3701 }
3702
a9aedbc2
MS
3703 if (TREE_CODE (newdecl) == NAMESPACE_DECL)
3704 {
3705 NAMESPACE_LEVEL (newdecl) = NAMESPACE_LEVEL (olddecl);
3706 }
3707
8d08fdba
MS
3708 /* Now preserve various other info from the definition. */
3709 TREE_ADDRESSABLE (newdecl) = TREE_ADDRESSABLE (olddecl);
3710 TREE_ASM_WRITTEN (newdecl) = TREE_ASM_WRITTEN (olddecl);
3711 DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
f376e137 3712 DECL_ASSEMBLER_NAME (newdecl) = DECL_ASSEMBLER_NAME (olddecl);
8d08fdba 3713
8d08fdba
MS
3714 if (TREE_CODE (newdecl) == FUNCTION_DECL)
3715 {
3716 int function_size;
8d08fdba
MS
3717
3718 function_size = sizeof (struct tree_decl);
3719
3720 bcopy ((char *) newdecl + sizeof (struct tree_common),
3721 (char *) olddecl + sizeof (struct tree_common),
3722 function_size - sizeof (struct tree_common));
3723
75650646
MM
3724 if (DECL_TEMPLATE_INSTANTIATION (newdecl))
3725 {
3726 /* If newdecl is a template instantiation, it is possible that
3727 the following sequence of events has occurred:
3728
3729 o A friend function was declared in a class template. The
68642fb6 3730 class template was instantiated.
75650646 3731
68642fb6
UD
3732 o The instantiation of the friend declaration was
3733 recorded on the instantiation list, and is newdecl.
75650646
MM
3734
3735 o Later, however, instantiate_class_template called pushdecl
3736 on the newdecl to perform name injection. But, pushdecl in
3737 turn called duplicate_decls when it discovered that another
3738 declaration of a global function with the same name already
68642fb6 3739 existed.
75650646
MM
3740
3741 o Here, in duplicate_decls, we decided to clobber newdecl.
3742
3743 If we're going to do that, we'd better make sure that
3744 olddecl, and not newdecl, is on the list of
3745 instantiations so that if we try to do the instantiation
3746 again we won't get the clobbered declaration. */
3747
68642fb6
UD
3748 tree tmpl = DECL_TI_TEMPLATE (newdecl);
3749 tree decls = DECL_TEMPLATE_SPECIALIZATIONS (tmpl);
75650646
MM
3750
3751 for (; decls; decls = TREE_CHAIN (decls))
3752 if (TREE_VALUE (decls) == newdecl)
3753 TREE_VALUE (decls) = olddecl;
3754 }
8d08fdba
MS
3755 }
3756 else
3757 {
3758 bcopy ((char *) newdecl + sizeof (struct tree_common),
3759 (char *) olddecl + sizeof (struct tree_common),
3760 sizeof (struct tree_decl) - sizeof (struct tree_common)
3761 + tree_code_length [(int)TREE_CODE (newdecl)] * sizeof (char *));
3762 }
3763
3764 DECL_UID (olddecl) = olddecl_uid;
3765 if (olddecl_friend)
3766 DECL_FRIEND_P (olddecl) = 1;
3767
d9525bec
BK
3768 /* NEWDECL contains the merged attribute lists.
3769 Update OLDDECL to be the same. */
3770 DECL_MACHINE_ATTRIBUTES (olddecl) = DECL_MACHINE_ATTRIBUTES (newdecl);
3771
8d08fdba
MS
3772 return 1;
3773}
3774
3775/* Record a decl-node X as belonging to the current lexical scope.
3776 Check for errors (such as an incompatible declaration for the same
3777 name already seen in the same scope).
3778
3779 Returns either X or an old decl for the same name.
3780 If an old decl is returned, it may have been smashed
3781 to agree with what X says. */
3782
3783tree
3784pushdecl (x)
3785 tree x;
3786{
3787 register tree t;
b35d4555
MM
3788 register tree name;
3789 int need_new_binding;
3790
3791 /* We shouldn't be calling pushdecl when we're generating RTL for a
3792 function that we already did semantic analysis on previously. */
01d939e8 3793 my_friendly_assert (!cfun || doing_semantic_analysis_p (),
b35d4555
MM
3794 19990913);
3795
b35d4555 3796 need_new_binding = 1;
8d08fdba 3797
50714e79
MM
3798 if (DECL_TEMPLATE_PARM_P (x))
3799 /* Template parameters have no context; they are not X::T even
3800 when declared within a class or namespace. */
3801 ;
3802 else
3803 {
3804 if (current_function_decl && x != current_function_decl
3805 /* A local declaration for a function doesn't constitute
3806 nesting. */
f39ee884
MM
3807 && !(TREE_CODE (x) == FUNCTION_DECL && !DECL_INITIAL (x))
3808 /* A local declaration for an `extern' variable is in the
94dfccd1 3809 scope of the current namespace, not the current
f39ee884
MM
3810 function. */
3811 && !(TREE_CODE (x) == VAR_DECL && DECL_EXTERNAL (x))
50714e79
MM
3812 && !DECL_CONTEXT (x))
3813 DECL_CONTEXT (x) = current_function_decl;
cd9f6678
MM
3814
3815 /* If this is the declaration for a namespace-scope function,
3816 but the declaration itself is in a local scope, mark the
3817 declaration. */
68642fb6 3818 if (TREE_CODE (x) == FUNCTION_DECL
cd9f6678
MM
3819 && DECL_NAMESPACE_SCOPE_P (x)
3820 && current_function_decl
3821 && x != current_function_decl)
3822 DECL_LOCAL_FUNCTION_P (x) = 1;
50714e79 3823 }
8d08fdba 3824
fe8fadc1 3825 name = DECL_NAME (x);
8d08fdba
MS
3826 if (name)
3827 {
94dfccd1
JM
3828 int different_binding_level = 0;
3829
386b8a85
JM
3830 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
3831 name = TREE_OPERAND (name, 0);
68642fb6 3832
94dfccd1
JM
3833 /* In case this decl was explicitly namespace-qualified, look it
3834 up in its namespace context. */
3835 if (TREE_CODE (x) == VAR_DECL && DECL_NAMESPACE_SCOPE_P (x)
3836 && namespace_bindings_p ())
2c73f9f5
ML
3837 t = namespace_binding (name, DECL_CONTEXT (x));
3838 else
3839 t = lookup_name_current_level (name);
fe8fadc1 3840
94dfccd1
JM
3841 /* [basic.link] If there is a visible declaration of an entity
3842 with linkage having the same name and type, ignoring entities
3843 declared outside the innermost enclosing namespace scope, the
3844 block scope declaration declares that same entity and
3845 receives the linkage of the previous declaration. */
3846 if (! t && current_function_decl && x != current_function_decl
3847 && (TREE_CODE (x) == FUNCTION_DECL || TREE_CODE (x) == VAR_DECL)
3848 && DECL_EXTERNAL (x))
3849 {
3850 /* Look in block scope. */
3851 t = IDENTIFIER_VALUE (name);
3852 /* Or in the innermost namespace. */
3853 if (! t)
3854 t = namespace_binding (name, DECL_CONTEXT (x));
3855 /* Does it have linkage? */
3856 if (t && ! (TREE_STATIC (t) || DECL_EXTERNAL (t)))
3857 t = NULL_TREE;
3858 if (t)
3859 different_binding_level = 1;
3860 }
3861
fe8fadc1
MM
3862 /* If we are declaring a function, and the result of name-lookup
3863 was an OVERLOAD, look for an overloaded instance that is
3864 actually the same as the function we are declaring. (If
3865 there is one, we have to merge our declaration with the
3866 previous declaration.) */
655dc6ee 3867 if (t && TREE_CODE (t) == OVERLOAD)
fe8fadc1
MM
3868 {
3869 tree match;
3870
655dc6ee
JM
3871 if (TREE_CODE (x) == FUNCTION_DECL)
3872 for (match = t; match; match = OVL_NEXT (match))
3873 {
3874 if (DECL_ASSEMBLER_NAME (OVL_CURRENT (t))
3875 == DECL_ASSEMBLER_NAME (x))
3876 break;
3877 }
3878 else
3879 /* Just choose one. */
3880 match = t;
fe8fadc1
MM
3881
3882 if (match)
3883 t = OVL_CURRENT (match);
3884 else
3885 t = NULL_TREE;
3886 }
3887
8d08fdba
MS
3888 if (t == error_mark_node)
3889 {
3890 /* error_mark_node is 0 for a while during initialization! */
3891 t = NULL_TREE;
8251199e 3892 cp_error_at ("`%#D' used prior to declaration", x);
8d08fdba 3893 }
51c184be 3894 else if (t != NULL_TREE)
8d08fdba 3895 {
94dfccd1
JM
3896 if (different_binding_level)
3897 {
3898 if (decls_match (x, t))
3899 /* The standard only says that the local extern
3900 inherits linkage from the previous decl; in
3901 particular, default args are not shared. It would
3902 be nice to propagate inlining info, though. FIXME. */
3903 TREE_PUBLIC (x) = TREE_PUBLIC (t);
3904 }
3905 else if (TREE_CODE (t) == PARM_DECL)
8d08fdba
MS
3906 {
3907 if (DECL_CONTEXT (t) == NULL_TREE)
3908 fatal ("parse errors have confused me too much");
be99da77 3909
e92cc029 3910 /* Check for duplicate params. */
be99da77
MS
3911 if (duplicate_decls (x, t))
3912 return t;
8d08fdba 3913 }
eb68cb58 3914 else if ((DECL_EXTERN_C_FUNCTION_P (x)
5566b478
MS
3915 || DECL_FUNCTION_TEMPLATE_P (x))
3916 && is_overloaded_fn (t))
2c73f9f5 3917 /* Don't do anything just yet. */;
e1cd6e56
MS
3918 else if (t == wchar_decl_node)
3919 {
3920 if (pedantic && ! DECL_IN_SYSTEM_HEADER (x))
8251199e 3921 cp_pedwarn ("redeclaration of wchar_t as `%T'", TREE_TYPE (x));
e1cd6e56
MS
3922
3923 /* Throw away the redeclaration. */
3924 return t;
3925 }
8926095f 3926 else if (TREE_CODE (t) != TREE_CODE (x))
8d08fdba 3927 {
9ed182dc 3928 if (duplicate_decls (x, t))
51c184be 3929 return t;
8d08fdba
MS
3930 }
3931 else if (duplicate_decls (x, t))
51c184be 3932 {
7177d104
MS
3933 if (TREE_CODE (t) == TYPE_DECL)
3934 SET_IDENTIFIER_TYPE_VALUE (name, TREE_TYPE (t));
f30432d7
MS
3935 else if (TREE_CODE (t) == FUNCTION_DECL)
3936 check_default_args (t);
7177d104 3937
51c184be
MS
3938 return t;
3939 }
35680744
MM
3940 else if (DECL_MAIN_P (x))
3941 {
3942 /* A redeclaration of main, but not a duplicate of the
68642fb6 3943 previous one.
35680744
MM
3944
3945 [basic.start.main]
3946
3947 This function shall not be overloaded. */
8251199e
JM
3948 cp_error_at ("invalid redeclaration of `%D'", t);
3949 cp_error ("as `%D'", x);
35680744
MM
3950 /* We don't try to push this declaration since that
3951 causes a crash. */
3952 return x;
3953 }
8d08fdba 3954 }
8926095f 3955
f3400fe2
JM
3956 check_template_shadow (x);
3957
fcfcdfc8
JM
3958 /* If this is a function conjured up by the backend, massage it
3959 so it looks friendly. */
eb68cb58 3960 if (DECL_NON_THUNK_FUNCTION_P (x) && ! DECL_LANG_SPECIFIC (x))
fcfcdfc8
JM
3961 {
3962 retrofit_lang_decl (x);
3963 DECL_LANGUAGE (x) = lang_c;
3964 }
3965
eb68cb58 3966 if (DECL_NON_THUNK_FUNCTION_P (x) && ! DECL_FUNCTION_MEMBER_P (x))
8926095f 3967 {
7bdbfa05 3968 t = push_overloaded_decl (x, PUSH_LOCAL);
5fdaba89 3969 if (t != x)
8926095f 3970 return t;
f181d4ae
MM
3971 if (!namespace_bindings_p ())
3972 /* We do not need to create a binding for this name;
3973 push_overloaded_decl will have already done so if
3974 necessary. */
3975 need_new_binding = 0;
8926095f 3976 }
6eb3bb27 3977 else if (DECL_FUNCTION_TEMPLATE_P (x) && DECL_NAMESPACE_SCOPE_P (x))
cfe507be
MM
3978 {
3979 t = push_overloaded_decl (x, PUSH_GLOBAL);
3980 if (t == x)
3981 add_decl_to_level (x, NAMESPACE_LEVEL (CP_DECL_CONTEXT (t)));
3982 return t;
3983 }
8d08fdba 3984
a1774733
BK
3985 /* If declaring a type as a typedef, copy the type (unless we're
3986 at line 0), and install this TYPE_DECL as the new type's typedef
3987 name. See the extensive comment in ../c-decl.c (pushdecl). */
8d08fdba
MS
3988 if (TREE_CODE (x) == TYPE_DECL)
3989 {
3990 tree type = TREE_TYPE (x);
655dc6ee 3991 if (DECL_SOURCE_LINE (x) == 0)
a1774733
BK
3992 {
3993 if (TYPE_NAME (type) == 0)
3994 TYPE_NAME (type) = x;
3995 }
1c80fb65
MM
3996 else if (type != error_mark_node && TYPE_NAME (type) != x
3997 /* We don't want to copy the type when all we're
3998 doing is making a TYPE_DECL for the purposes of
3999 inlining. */
68642fb6 4000 && (!TYPE_NAME (type)
1c80fb65 4001 || TYPE_NAME (type) != DECL_ABSTRACT_ORIGIN (x)))
a1774733
BK
4002 {
4003 DECL_ORIGINAL_TYPE (x) = type;
4004 type = build_type_copy (type);
4005 TYPE_STUB_DECL (type) = TYPE_STUB_DECL (DECL_ORIGINAL_TYPE (x));
4006 TYPE_NAME (type) = x;
4007 TREE_TYPE (x) = type;
4008 }
8d08fdba 4009
8d08fdba
MS
4010 if (type != error_mark_node
4011 && TYPE_NAME (type)
4012 && TYPE_IDENTIFIER (type))
68642fb6 4013 set_identifier_type_value_with_scope (DECL_NAME (x), type,
f181d4ae
MM
4014 current_binding_level);
4015
8d08fdba
MS
4016 }
4017
4018 /* Multiple external decls of the same identifier ought to match.
4019
4020 We get warnings about inline functions where they are defined.
39211cd5 4021 We get warnings about other functions from push_overloaded_decl.
68642fb6 4022
8d08fdba 4023 Avoid duplicate warnings where they are used. */
39211cd5 4024 if (TREE_PUBLIC (x) && TREE_CODE (x) != FUNCTION_DECL)
8d08fdba
MS
4025 {
4026 tree decl;
4027
f49fad00
JM
4028 decl = IDENTIFIER_NAMESPACE_VALUE (name);
4029 if (decl && TREE_CODE (decl) == OVERLOAD)
4030 decl = OVL_FUNCTION (decl);
8d08fdba 4031
f49fad00
JM
4032 if (decl && decl != error_mark_node
4033 && (DECL_EXTERNAL (decl) || TREE_PUBLIC (decl))
8d08fdba
MS
4034 /* If different sort of thing, we already gave an error. */
4035 && TREE_CODE (decl) == TREE_CODE (x)
3bfdc719 4036 && !same_type_p (TREE_TYPE (x), TREE_TYPE (decl)))
8d08fdba 4037 {
8251199e
JM
4038 cp_pedwarn ("type mismatch with previous external decl", x);
4039 cp_pedwarn_at ("previous external decl of `%#D'", decl);
8d08fdba
MS
4040 }
4041 }
4042
8d08fdba
MS
4043 /* This name is new in its binding level.
4044 Install the new declaration and return it. */
2c73f9f5 4045 if (namespace_bindings_p ())
8d08fdba
MS
4046 {
4047 /* Install a global value. */
4048
8d08fdba
MS
4049 /* If the first global decl has external linkage,
4050 warn if we later see static one. */
31928556 4051 if (IDENTIFIER_GLOBAL_VALUE (name) == NULL_TREE && TREE_PUBLIC (x))
8d08fdba 4052 TREE_PUBLIC (name) = 1;
fe8fadc1
MM
4053
4054 /* Bind the mangled name for the entity. In the future, we
4055 should not need to do this; mangled names are an
4056 implementation detail of which the front-end should not
4057 need to be aware. */
d8f8dca1 4058 if (!(TREE_CODE (x) == TYPE_DECL && DECL_ARTIFICIAL (x)
5fdaba89
MM
4059 && t != NULL_TREE)
4060 /* For an ordinary function, we create a binding from
4061 the mangled name (i.e., NAME) to the DECL. But, for
4062 an `extern "C"' function, the mangled name and the
4063 ordinary name are the same so we need not do this. */
eb68cb58 4064 && !DECL_EXTERN_C_FUNCTION_P (x))
30394414 4065 {
fe8fadc1
MM
4066 tree mangled_name;
4067
4068 if (TREE_CODE (x) == TYPE_DECL || TREE_CODE (x) == VAR_DECL
4069 || TREE_CODE (x) == NAMESPACE_DECL)
4070 mangled_name = name;
4071 else
4072 mangled_name = DECL_ASSEMBLER_NAME (x);
4073
30394414 4074 if (TREE_CODE (x) == FUNCTION_DECL)
68642fb6 4075 my_friendly_assert
fe8fadc1
MM
4076 ((IDENTIFIER_GLOBAL_VALUE (mangled_name) == NULL_TREE)
4077 || (IDENTIFIER_GLOBAL_VALUE (mangled_name) == x), 378);
4078 SET_IDENTIFIER_NAMESPACE_VALUE (mangled_name, x);
30394414 4079 }
8d08fdba
MS
4080
4081 /* Don't forget if the function was used via an implicit decl. */
4082 if (IDENTIFIER_IMPLICIT_DECL (name)
4083 && TREE_USED (IDENTIFIER_IMPLICIT_DECL (name)))
4084 TREE_USED (x) = 1;
4085
4086 /* Don't forget if its address was taken in that way. */
4087 if (IDENTIFIER_IMPLICIT_DECL (name)
4088 && TREE_ADDRESSABLE (IDENTIFIER_IMPLICIT_DECL (name)))
4089 TREE_ADDRESSABLE (x) = 1;
4090
4091 /* Warn about mismatches against previous implicit decl. */
4092 if (IDENTIFIER_IMPLICIT_DECL (name) != NULL_TREE
4093 /* If this real decl matches the implicit, don't complain. */
4094 && ! (TREE_CODE (x) == FUNCTION_DECL
4095 && TREE_TYPE (TREE_TYPE (x)) == integer_type_node))
8251199e
JM
4096 cp_warning
4097 ("`%D' was previously implicitly declared to return `int'", x);
8d08fdba
MS
4098
4099 /* If new decl is `static' and an `extern' was seen previously,
4100 warn about it. */
a0a33927
MS
4101 if (x != NULL_TREE && t != NULL_TREE && decls_match (x, t))
4102 warn_extern_redeclared_static (x, t);
8d08fdba
MS
4103 }
4104 else
4105 {
4106 /* Here to install a non-global value. */
f181d4ae 4107 tree oldlocal = IDENTIFIER_VALUE (name);
31928556 4108 tree oldglobal = IDENTIFIER_NAMESPACE_VALUE (name);
8d08fdba 4109
f181d4ae
MM
4110 if (need_new_binding)
4111 {
0034cf72 4112 push_local_binding (name, x, 0);
f181d4ae
MM
4113 /* Because push_local_binding will hook X on to the
4114 current_binding_level's name list, we don't want to
4115 do that again below. */
4116 need_new_binding = 0;
4117 }
8d08fdba
MS
4118
4119 /* If this is a TYPE_DECL, push it into the type value slot. */
4120 if (TREE_CODE (x) == TYPE_DECL)
68642fb6 4121 set_identifier_type_value_with_scope (name, TREE_TYPE (x),
f181d4ae 4122 current_binding_level);
8d08fdba 4123
a9aedbc2
MS
4124 /* Clear out any TYPE_DECL shadowed by a namespace so that
4125 we won't think this is a type. The C struct hack doesn't
4126 go through namespaces. */
4127 if (TREE_CODE (x) == NAMESPACE_DECL)
68642fb6 4128 set_identifier_type_value_with_scope (name, NULL_TREE,
f181d4ae 4129 current_binding_level);
a9aedbc2 4130
e905ac8a
MS
4131 if (oldlocal)
4132 {
4133 tree d = oldlocal;
17aec3eb 4134
74dc0d8c
MS
4135 while (oldlocal
4136 && TREE_CODE (oldlocal) == VAR_DECL
4137 && DECL_DEAD_FOR_LOCAL (oldlocal))
17aec3eb
RK
4138 oldlocal = DECL_SHADOWED_FOR_VAR (oldlocal);
4139
e905ac8a
MS
4140 if (oldlocal == NULL_TREE)
4141 oldlocal = IDENTIFIER_NAMESPACE_VALUE (DECL_NAME (d));
4142 }
4143
8d08fdba
MS
4144 /* If this is an extern function declaration, see if we
4145 have a global definition or declaration for the function. */
4146 if (oldlocal == NULL_TREE
faae18ab 4147 && DECL_EXTERNAL (x)
31928556 4148 && oldglobal != NULL_TREE
8d08fdba 4149 && TREE_CODE (x) == FUNCTION_DECL
31928556 4150 && TREE_CODE (oldglobal) == FUNCTION_DECL)
8d08fdba
MS
4151 {
4152 /* We have one. Their types must agree. */
31928556 4153 if (decls_match (x, oldglobal))
6060a796
MS
4154 /* OK */;
4155 else
8d08fdba 4156 {
8251199e
JM
4157 cp_warning ("extern declaration of `%#D' doesn't match", x);
4158 cp_warning_at ("global declaration `%#D'", oldglobal);
8d08fdba 4159 }
8d08fdba
MS
4160 }
4161 /* If we have a local external declaration,
4162 and no file-scope declaration has yet been seen,
4163 then if we later have a file-scope decl it must not be static. */
4164 if (oldlocal == NULL_TREE
31928556 4165 && oldglobal == NULL_TREE
8d08fdba
MS
4166 && DECL_EXTERNAL (x)
4167 && TREE_PUBLIC (x))
f181d4ae 4168 TREE_PUBLIC (name) = 1;
8d08fdba 4169
8d08fdba 4170 /* Warn if shadowing an argument at the top level of the body. */
e905ac8a
MS
4171 if (oldlocal != NULL_TREE && !DECL_EXTERNAL (x)
4172 /* Inline decls shadow nothing. */
4173 && !DECL_FROM_INLINE (x)
4174 && TREE_CODE (oldlocal) == PARM_DECL
4175 /* Don't complain if it's from an enclosing function. */
4176 && DECL_CONTEXT (oldlocal) == current_function_decl
4177 && TREE_CODE (x) != PARM_DECL)
8d08fdba
MS
4178 {
4179 /* Go to where the parms should be and see if we
4180 find them there. */
4181 struct binding_level *b = current_binding_level->level_chain;
4182
4183 if (cleanup_label)
4184 b = b->level_chain;
4185
4186 /* ARM $8.3 */
4187 if (b->parm_flag == 1)
8251199e 4188 cp_error ("declaration of `%#D' shadows a parameter", name);
8d08fdba 4189 }
e905ac8a 4190
8d08fdba 4191 /* Maybe warn if shadowing something else. */
e905ac8a
MS
4192 if (warn_shadow && !DECL_EXTERNAL (x)
4193 /* Inline decls shadow nothing. */
4194 && !DECL_FROM_INLINE (x)
4195 /* No shadow warnings for internally generated vars. */
4196 && ! DECL_ARTIFICIAL (x)
4197 /* No shadow warnings for vars made for inlining. */
4198 && ! DECL_FROM_INLINE (x))
8d08fdba 4199 {
8d08fdba 4200 if (oldlocal != NULL_TREE && TREE_CODE (oldlocal) == PARM_DECL)
b9d12519
KG
4201 warning ("declaration of `%s' shadows a parameter",
4202 IDENTIFIER_POINTER (name));
8d08fdba 4203 else if (IDENTIFIER_CLASS_VALUE (name) != NULL_TREE
4ac14744 4204 && current_class_ptr
8d08fdba 4205 && !TREE_STATIC (name))
b9d12519
KG
4206 warning ("declaration of `%s' shadows a member of `this'",
4207 IDENTIFIER_POINTER (name));
8d08fdba 4208 else if (oldlocal != NULL_TREE)
b9d12519
KG
4209 warning ("declaration of `%s' shadows previous local",
4210 IDENTIFIER_POINTER (name));
31928556 4211 else if (oldglobal != NULL_TREE)
30394414 4212 /* XXX shadow warnings in outer-more namespaces */
b9d12519
KG
4213 warning ("declaration of `%s' shadows global declaration",
4214 IDENTIFIER_POINTER (name));
8d08fdba 4215 }
e1cd6e56 4216 }
8d08fdba 4217
e1cd6e56 4218 if (TREE_CODE (x) == FUNCTION_DECL)
f30432d7 4219 check_default_args (x);
8145f082
MS
4220
4221 /* Keep count of variables in this level with incomplete type. */
8145f082 4222 if (TREE_CODE (x) == VAR_DECL
28cbf42c 4223 && TREE_TYPE (x) != error_mark_node
d0f062fb 4224 && ((!COMPLETE_TYPE_P (TREE_TYPE (x))
f30432d7
MS
4225 && PROMOTES_TO_AGGR_TYPE (TREE_TYPE (x), ARRAY_TYPE))
4226 /* RTTI TD entries are created while defining the type_info. */
4227 || (TYPE_LANG_SPECIFIC (TREE_TYPE (x))
4228 && TYPE_BEING_DEFINED (TREE_TYPE (x)))))
70adf8a9
JM
4229 {
4230 if (namespace_bindings_p ())
4231 namespace_scope_incomplete
4232 = tree_cons (NULL_TREE, x, namespace_scope_incomplete);
4233 else
4234 current_binding_level->incomplete
4235 = tree_cons (NULL_TREE, x, current_binding_level->incomplete);
4236 }
8d08fdba
MS
4237 }
4238
f181d4ae 4239 if (need_new_binding)
68642fb6 4240 add_decl_to_level (x,
efee38a9
MM
4241 DECL_NAMESPACE_SCOPE_P (x)
4242 ? NAMESPACE_LEVEL (CP_DECL_CONTEXT (x))
4243 : current_binding_level);
8d08fdba
MS
4244
4245 return x;
4246}
4247
5566b478
MS
4248/* Same as pushdecl, but define X in binding-level LEVEL. We rely on the
4249 caller to set DECL_CONTEXT properly. */
8d08fdba
MS
4250
4251static tree
4252pushdecl_with_scope (x, level)
4253 tree x;
4254 struct binding_level *level;
4255{
8d019cef 4256 register struct binding_level *b;
5566b478 4257 tree function_decl = current_function_decl;
8d08fdba 4258
5566b478 4259 current_function_decl = NULL_TREE;
8d019cef
JM
4260 if (level->parm_flag == 2)
4261 {
4262 b = class_binding_level;
4263 class_binding_level = level;
4264 pushdecl_class_level (x);
4265 class_binding_level = b;
4266 }
4267 else
4268 {
4269 b = current_binding_level;
4270 current_binding_level = level;
4271 x = pushdecl (x);
4272 current_binding_level = b;
4273 }
5566b478 4274 current_function_decl = function_decl;
8d08fdba
MS
4275 return x;
4276}
4277
2c73f9f5 4278/* Like pushdecl, only it places X in the current namespace,
8d08fdba 4279 if appropriate. */
e92cc029 4280
8d08fdba 4281tree
2c73f9f5 4282pushdecl_namespace_level (x)
8d08fdba
MS
4283 tree x;
4284{
8f032717 4285 register struct binding_level *b = current_binding_level;
2c73f9f5
ML
4286 register tree t;
4287
4288 t = pushdecl_with_scope (x, NAMESPACE_LEVEL (current_namespace));
8d08fdba
MS
4289
4290 /* Now, the type_shadowed stack may screw us. Munge it so it does
4291 what we want. */
4292 if (TREE_CODE (x) == TYPE_DECL)
4293 {
4294 tree name = DECL_NAME (x);
4295 tree newval;
4296 tree *ptr = (tree *)0;
4297 for (; b != global_binding_level; b = b->level_chain)
4298 {
4299 tree shadowed = b->type_shadowed;
4300 for (; shadowed; shadowed = TREE_CHAIN (shadowed))
4301 if (TREE_PURPOSE (shadowed) == name)
4302 {
4303 ptr = &TREE_VALUE (shadowed);
4304 /* Can't break out of the loop here because sometimes
4305 a binding level will have duplicate bindings for
4306 PT names. It's gross, but I haven't time to fix it. */
4307 }
4308 }
4309 newval = TREE_TYPE (x);
4310 if (ptr == (tree *)0)
4311 {
4312 /* @@ This shouldn't be needed. My test case "zstring.cc" trips
4313 up here if this is changed to an assertion. --KR */
4314 SET_IDENTIFIER_TYPE_VALUE (name, newval);
4315 }
4316 else
4317 {
8d08fdba
MS
4318 *ptr = newval;
4319 }
4320 }
4321 return t;
4322}
4323
2c73f9f5
ML
4324/* Like pushdecl, only it places X in GLOBAL_BINDING_LEVEL,
4325 if appropriate. */
4326
4327tree
4328pushdecl_top_level (x)
4329 tree x;
4330{
b35d4555 4331 push_to_top_level ();
2c73f9f5 4332 x = pushdecl_namespace_level (x);
b35d4555 4333 pop_from_top_level ();
2c73f9f5
ML
4334 return x;
4335}
4336
8d08fdba 4337/* Make the declaration of X appear in CLASS scope. */
e92cc029 4338
61a127b3 4339void
8d08fdba
MS
4340pushdecl_class_level (x)
4341 tree x;
4342{
4343 /* Don't use DECL_ASSEMBLER_NAME here! Everything that looks in class
4344 scope looks for the pre-mangled name. */
8f032717
MM
4345 register tree name;
4346
4347 if (TREE_CODE (x) == OVERLOAD)
4348 x = OVL_CURRENT (x);
4349 name = DECL_NAME (x);
8d08fdba
MS
4350
4351 if (name)
4352 {
4353 push_class_level_binding (name, x);
4354 if (TREE_CODE (x) == TYPE_DECL)
f181d4ae 4355 set_identifier_type_value (name, TREE_TYPE (x));
8d08fdba 4356 }
6bdb8141 4357 else if (ANON_AGGR_TYPE_P (TREE_TYPE (x)))
8f032717
MM
4358 {
4359 tree f;
4360
4361 for (f = TYPE_FIELDS (TREE_TYPE (x));
4362 f;
4363 f = TREE_CHAIN (f))
4364 pushdecl_class_level (f);
4365 }
8d08fdba
MS
4366}
4367
9188c363
MM
4368/* Enter DECL into the symbol table, if that's appropriate. Returns
4369 DECL, or a modified version thereof. */
4370
4371tree
4372maybe_push_decl (decl)
4373 tree decl;
4374{
4375 tree type = TREE_TYPE (decl);
4376
4377 /* Add this decl to the current binding level, but not if it comes
4378 from another scope, e.g. a static member variable. TEM may equal
4379 DECL or it may be a previous decl of the same name. */
07c88314
MM
4380 if (decl == error_mark_node
4381 || (TREE_CODE (decl) != PARM_DECL
4382 && DECL_CONTEXT (decl) != NULL_TREE
4383 /* Definitions of namespace members outside their namespace are
4384 possible. */
4385 && TREE_CODE (DECL_CONTEXT (decl)) != NAMESPACE_DECL)
9188c363
MM
4386 || (TREE_CODE (decl) == TEMPLATE_DECL && !namespace_bindings_p ())
4387 || TREE_CODE (type) == UNKNOWN_TYPE
558475f0 4388 /* The declaration of a template specialization does not affect
9188c363
MM
4389 the functions available for overload resolution, so we do not
4390 call pushdecl. */
4391 || (TREE_CODE (decl) == FUNCTION_DECL
4392 && DECL_TEMPLATE_SPECIALIZATION (decl)))
4393 return decl;
4394 else
4395 return pushdecl (decl);
4396}
4397
8d08fdba
MS
4398/* Make the declaration(s) of X appear in CLASS scope
4399 under the name NAME. */
e92cc029 4400
8d08fdba
MS
4401void
4402push_class_level_binding (name, x)
4403 tree name;
4404 tree x;
4405{
8f032717 4406 tree binding;
68642fb6 4407 /* The class_binding_level will be NULL if x is a template
98c1c668
JM
4408 parameter name in a member template. */
4409 if (!class_binding_level)
4410 return;
4411
908c4e83
MM
4412 /* Make sure that this new member does not have the same name
4413 as a template parameter. */
4414 if (TYPE_BEING_DEFINED (current_class_type))
4415 check_template_shadow (x);
4416
f181d4ae
MM
4417 /* If this declaration shadows a declaration from an enclosing
4418 class, then we will need to restore IDENTIFIER_CLASS_VALUE when
4419 we leave this class. Record the shadowed declaration here. */
8f032717 4420 binding = IDENTIFIER_BINDING (name);
68642fb6 4421 if (binding
8f032717
MM
4422 && ((TREE_CODE (x) == OVERLOAD
4423 && BINDING_VALUE (binding)
4424 && is_overloaded_fn (BINDING_VALUE (binding)))
4425 || INHERITED_VALUE_BINDING_P (binding)))
4426 {
4427 tree shadow;
4428 tree old_decl;
4429
4430 /* If the old binding was from a base class, and was for a tag
4431 name, slide it over to make room for the new binding. The
4432 old binding is still visible if explicitly qualified with a
4433 class-key. */
4434 if (INHERITED_VALUE_BINDING_P (binding)
4435 && BINDING_VALUE (binding)
4436 && TREE_CODE (BINDING_VALUE (binding)) == TYPE_DECL
4437 && DECL_ARTIFICIAL (BINDING_VALUE (binding))
4438 && !(TREE_CODE (x) == TYPE_DECL && DECL_ARTIFICIAL (x)))
4439 {
4440 old_decl = BINDING_TYPE (binding);
4441 BINDING_TYPE (binding) = BINDING_VALUE (binding);
4442 BINDING_VALUE (binding) = NULL_TREE;
4443 INHERITED_VALUE_BINDING_P (binding) = 0;
4444 }
4445 else
4446 old_decl = BINDING_VALUE (binding);
4447
4448 /* There was already a binding for X containing fewer
4449 functions than are named in X. Find the previous
4450 declaration of X on the class-shadowed list, and update it. */
4451 for (shadow = class_binding_level->class_shadowed;
4452 shadow;
4453 shadow = TREE_CHAIN (shadow))
4454 if (TREE_PURPOSE (shadow) == name
4455 && TREE_TYPE (shadow) == old_decl)
4456 {
4457 BINDING_VALUE (binding) = x;
4458 INHERITED_VALUE_BINDING_P (binding) = 0;
4459 TREE_TYPE (shadow) = x;
4460 return;
4461 }
4462 }
f181d4ae 4463
8f032717
MM
4464 /* If we didn't replace an existing binding, put the binding on the
4465 stack of bindings for the identifier, and update
4466 IDENTIFIER_CLASS_VALUE. */
4467 if (push_class_binding (name, x))
4468 {
8f032717
MM
4469 class_binding_level->class_shadowed
4470 = tree_cons (name, IDENTIFIER_CLASS_VALUE (name),
4471 class_binding_level->class_shadowed);
8f032717
MM
4472 /* Record the value we are binding NAME to so that we can know
4473 what to pop later. */
4474 TREE_TYPE (class_binding_level->class_shadowed) = x;
4475 }
8d08fdba
MS
4476}
4477
dd4fae80
ML
4478/* Insert another USING_DECL into the current binding level, returning
4479 this declaration. If this is a redeclaration, do nothing, and
4480 return NULL_TREE if this not in namespace scope (in namespace
4481 scope, a using decl might extend any previous bindings). */
e92cc029 4482
2c73f9f5
ML
4483tree
4484push_using_decl (scope, name)
4485 tree scope;
4486 tree name;
8d08fdba 4487{
2c73f9f5 4488 tree decl;
68642fb6 4489
2c73f9f5
ML
4490 my_friendly_assert (TREE_CODE (scope) == NAMESPACE_DECL, 383);
4491 my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 384);
4492 for (decl = current_binding_level->usings; decl; decl = TREE_CHAIN (decl))
4493 if (DECL_INITIAL (decl) == scope && DECL_NAME (decl) == name)
4494 break;
4495 if (decl)
dd4fae80 4496 return namespace_bindings_p () ? decl : NULL_TREE;
4ce3d537 4497 decl = build_lang_decl (USING_DECL, name, void_type_node);
2c73f9f5
ML
4498 DECL_INITIAL (decl) = scope;
4499 TREE_CHAIN (decl) = current_binding_level->usings;
4500 current_binding_level->usings = decl;
4501 return decl;
8d08fdba
MS
4502}
4503
ea9635c7
ML
4504/* Add namespace to using_directives. Return NULL_TREE if nothing was
4505 changed (i.e. there was already a directive), or the fresh
4506 TREE_LIST otherwise. */
4507
4508tree
9ed182dc 4509push_using_directive (used)
ea9635c7 4510 tree used;
ea9635c7
ML
4511{
4512 tree ud = current_binding_level->using_directives;
9ed182dc 4513 tree iter, ancestor;
68642fb6 4514
ea9635c7
ML
4515 /* Check if we already have this. */
4516 if (purpose_member (used, ud) != NULL_TREE)
4517 return NULL_TREE;
00dc6358
JM
4518
4519 /* Recursively add all namespaces used. */
4520 for (iter = DECL_NAMESPACE_USING (used); iter; iter = TREE_CHAIN (iter))
9ed182dc 4521 push_using_directive (TREE_PURPOSE (iter));
00dc6358 4522
9ed182dc 4523 ancestor = namespace_ancestor (current_decl_namespace (), used);
00dc6358 4524 ud = current_binding_level->using_directives;
e1b3e07d 4525 ud = tree_cons (used, ancestor, ud);
ea9635c7
ML
4526 current_binding_level->using_directives = ud;
4527 return ud;
4528}
4529
f181d4ae
MM
4530/* DECL is a FUNCTION_DECL for a non-member function, which may have
4531 other definitions already in place. We get around this by making
4532 the value of the identifier point to a list of all the things that
4533 want to be referenced by that name. It is then up to the users of
4534 that name to decide what to do with that list.
8d08fdba 4535
17aec3eb
RK
4536 DECL may also be a TEMPLATE_DECL, with a FUNCTION_DECL in its
4537 DECL_TEMPLATE_RESULT. It is dealt with the same way.
8d08fdba 4538
7bdbfa05
MM
4539 FLAGS is a bitwise-or of the following values:
4540 PUSH_LOCAL: Bind DECL in the current scope, rather than at
4541 namespace scope.
4542 PUSH_USING: DECL is being pushed as the result of a using
68642fb6 4543 declaration.
7bdbfa05 4544
8d08fdba
MS
4545 The value returned may be a previous declaration if we guessed wrong
4546 about what language DECL should belong to (C or C++). Otherwise,
4547 it's always DECL (and never something that's not a _DECL). */
e92cc029 4548
7bdbfa05
MM
4549tree
4550push_overloaded_decl (decl, flags)
8d08fdba 4551 tree decl;
7bdbfa05 4552 int flags;
8d08fdba 4553{
f181d4ae 4554 tree name = DECL_NAME (decl);
700f8a87 4555 tree old;
f181d4ae 4556 tree new_binding;
7bdbfa05 4557 int doing_global = (namespace_bindings_p () || !(flags & PUSH_LOCAL));
700f8a87
MS
4558
4559 if (doing_global)
9f33663b 4560 old = namespace_binding (name, DECL_CONTEXT (decl));
700f8a87 4561 else
f181d4ae 4562 old = lookup_name_current_level (name);
8d08fdba 4563
700f8a87 4564 if (old)
8d08fdba 4565 {
e1cd6e56 4566 if (TREE_CODE (old) == TYPE_DECL && DECL_ARTIFICIAL (old))
8926095f 4567 {
700f8a87 4568 tree t = TREE_TYPE (old);
cdf5b885
MS
4569 if (IS_AGGR_TYPE (t) && warn_shadow
4570 && (! DECL_IN_SYSTEM_HEADER (decl)
4571 || ! DECL_IN_SYSTEM_HEADER (old)))
8251199e 4572 cp_warning ("`%#D' hides constructor for `%#T'", decl, t);
5b605f68 4573 old = NULL_TREE;
8926095f 4574 }
700f8a87 4575 else if (is_overloaded_fn (old))
8d08fdba 4576 {
8d08fdba 4577 tree tmp;
68642fb6 4578
2c73f9f5 4579 for (tmp = old; tmp; tmp = OVL_NEXT (tmp))
7bdbfa05
MM
4580 {
4581 tree fn = OVL_CURRENT (tmp);
4582
4583 if (TREE_CODE (tmp) == OVERLOAD && OVL_USED (tmp)
4584 && !(flags & PUSH_USING)
4585 && compparms (TYPE_ARG_TYPES (TREE_TYPE (fn)),
4586 TYPE_ARG_TYPES (TREE_TYPE (decl))))
4587 cp_error ("`%#D' conflicts with previous using declaration `%#D'",
4588 decl, fn);
68642fb6 4589
7bdbfa05
MM
4590 if (duplicate_decls (decl, fn))
4591 return fn;
4592 }
8d08fdba 4593 }
655dc6ee
JM
4594 else if (old == error_mark_node)
4595 /* Ignore the undefined symbol marker. */
4596 old = NULL_TREE;
e1cd6e56
MS
4597 else
4598 {
8251199e
JM
4599 cp_error_at ("previous non-function declaration `%#D'", old);
4600 cp_error ("conflicts with function declaration `%#D'", decl);
a9aedbc2 4601 return decl;
e1cd6e56 4602 }
8d08fdba 4603 }
7177d104 4604
700f8a87 4605 if (old || TREE_CODE (decl) == TEMPLATE_DECL)
8d08fdba 4606 {
2c73f9f5 4607 if (old && TREE_CODE (old) != OVERLOAD)
f181d4ae
MM
4608 new_binding = ovl_cons (decl, ovl_cons (old, NULL_TREE));
4609 else
4610 new_binding = ovl_cons (decl, old);
347d73d7
ML
4611 if (flags & PUSH_USING)
4612 OVL_USED (new_binding) = 1;
8d08fdba
MS
4613 }
4614 else
f181d4ae
MM
4615 /* NAME is not ambiguous. */
4616 new_binding = decl;
700f8a87
MS
4617
4618 if (doing_global)
f181d4ae 4619 set_namespace_binding (name, current_namespace, new_binding);
700f8a87 4620 else
f181d4ae
MM
4621 {
4622 /* We only create an OVERLOAD if there was a previous binding at
0580c9aa
ML
4623 this level, or if decl is a template. In the former case, we
4624 need to remove the old binding and replace it with the new
4625 binding. We must also run through the NAMES on the binding
4626 level where the name was bound to update the chain. */
4627
4628 if (TREE_CODE (new_binding) == OVERLOAD && old)
f181d4ae
MM
4629 {
4630 tree *d;
68642fb6 4631
f181d4ae
MM
4632 for (d = &BINDING_LEVEL (IDENTIFIER_BINDING (name))->names;
4633 *d;
4634 d = &TREE_CHAIN (*d))
4635 if (*d == old
4636 || (TREE_CODE (*d) == TREE_LIST
4637 && TREE_VALUE (*d) == old))
4638 {
d8f8dca1
MM
4639 if (TREE_CODE (*d) == TREE_LIST)
4640 /* Just replace the old binding with the new. */
4641 TREE_VALUE (*d) = new_binding;
4642 else
4643 /* Build a TREE_LIST to wrap the OVERLOAD. */
68642fb6 4644 *d = tree_cons (NULL_TREE, new_binding,
ed5511d9 4645 TREE_CHAIN (*d));
d8f8dca1
MM
4646
4647 /* And update the CPLUS_BINDING node. */
4648 BINDING_VALUE (IDENTIFIER_BINDING (name))
4649 = new_binding;
4650 return decl;
f181d4ae
MM
4651 }
4652
d8f8dca1
MM
4653 /* We should always find a previous binding in this case. */
4654 my_friendly_abort (0);
f181d4ae
MM
4655 }
4656
4657 /* Install the new binding. */
0034cf72 4658 push_local_binding (name, new_binding, flags);
f181d4ae 4659 }
700f8a87 4660
8d08fdba
MS
4661 return decl;
4662}
4663\f
4664/* Generate an implicit declaration for identifier FUNCTIONID
4665 as a function of type int (). Print a warning if appropriate. */
4666
4667tree
4668implicitly_declare (functionid)
4669 tree functionid;
4670{
4671 register tree decl;
8d08fdba
MS
4672
4673 /* We used to reuse an old implicit decl here,
4674 but this loses with inline functions because it can clobber
4675 the saved decl chains. */
4676 decl = build_lang_decl (FUNCTION_DECL, functionid, default_function_type);
4677
4678 DECL_EXTERNAL (decl) = 1;
4679 TREE_PUBLIC (decl) = 1;
4680
cab1f180 4681 /* ISO standard says implicit declarations are in the innermost block.
d22c8596 4682 So we record the decl in the standard fashion. */
8d08fdba
MS
4683 pushdecl (decl);
4684 rest_of_decl_compilation (decl, NULL_PTR, 0, 0);
4685
4686 if (warn_implicit
4687 /* Only one warning per identifier. */
4688 && IDENTIFIER_IMPLICIT_DECL (functionid) == NULL_TREE)
4689 {
8251199e 4690 cp_pedwarn ("implicit declaration of function `%#D'", decl);
8d08fdba
MS
4691 }
4692
4693 SET_IDENTIFIER_IMPLICIT_DECL (functionid, decl);
4694
8d08fdba
MS
4695 return decl;
4696}
4697
8251199e 4698/* Return zero if the declaration NEWDECL is valid
8d08fdba
MS
4699 when the declaration OLDDECL (assumed to be for the same name)
4700 has already been seen.
4701 Otherwise return an error message format string with a %s
4702 where the identifier should go. */
4703
d8e178a0 4704static const char *
8d08fdba
MS
4705redeclaration_error_message (newdecl, olddecl)
4706 tree newdecl, olddecl;
4707{
4708 if (TREE_CODE (newdecl) == TYPE_DECL)
4709 {
4710 /* Because C++ can put things into name space for free,
4711 constructs like "typedef struct foo { ... } foo"
4712 would look like an erroneous redeclaration. */
3bfdc719 4713 if (same_type_p (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
8251199e 4714 return 0;
8d08fdba 4715 else
8251199e 4716 return "redefinition of `%#D'";
8d08fdba
MS
4717 }
4718 else if (TREE_CODE (newdecl) == FUNCTION_DECL)
4719 {
4720 /* If this is a pure function, its olddecl will actually be
4721 the original initialization to `0' (which we force to call
4722 abort()). Don't complain about redefinition in this case. */
fee7654e 4723 if (DECL_LANG_SPECIFIC (olddecl) && DECL_PURE_VIRTUAL_P (olddecl))
8251199e 4724 return 0;
8d08fdba 4725
2c73f9f5
ML
4726 /* If both functions come from different namespaces, this is not
4727 a redeclaration - this is a conflict with a used function. */
6eb3bb27 4728 if (DECL_NAMESPACE_SCOPE_P (olddecl)
2c73f9f5 4729 && DECL_CONTEXT (olddecl) != DECL_CONTEXT (newdecl))
8251199e 4730 return "`%D' conflicts with used function";
2c73f9f5 4731
db5ae43f
MS
4732 /* We'll complain about linkage mismatches in
4733 warn_extern_redeclared_static. */
4734
2c73f9f5 4735 /* Defining the same name twice is no good. */
8d08fdba 4736 if (DECL_INITIAL (olddecl) != NULL_TREE
faae18ab 4737 && DECL_INITIAL (newdecl) != NULL_TREE)
8d08fdba
MS
4738 {
4739 if (DECL_NAME (olddecl) == NULL_TREE)
8251199e 4740 return "`%#D' not declared in class";
8d08fdba 4741 else
8251199e 4742 return "redefinition of `%#D'";
8d08fdba 4743 }
8251199e 4744 return 0;
8d08fdba 4745 }
51c184be
MS
4746 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
4747 {
ec255269 4748 if ((TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
f4381d62
MM
4749 && (DECL_TEMPLATE_RESULT (newdecl)
4750 != DECL_TEMPLATE_RESULT (olddecl))
ec255269
MS
4751 && DECL_INITIAL (DECL_TEMPLATE_RESULT (newdecl))
4752 && DECL_INITIAL (DECL_TEMPLATE_RESULT (olddecl)))
4753 || (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL
d0f062fb
NS
4754 && COMPLETE_TYPE_P (TREE_TYPE (newdecl))
4755 && COMPLETE_TYPE_P (TREE_TYPE (olddecl))))
8251199e
JM
4756 return "redefinition of `%#D'";
4757 return 0;
51c184be 4758 }
1f51a992 4759 else if (toplevel_bindings_p () || DECL_NAMESPACE_SCOPE_P (newdecl))
8d08fdba
MS
4760 {
4761 /* Objects declared at top level: */
4762 /* If at least one is a reference, it's ok. */
4763 if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl))
8251199e 4764 return 0;
8926095f 4765 /* Reject two definitions. */
8251199e 4766 return "redefinition of `%#D'";
8d08fdba
MS
4767 }
4768 else
4769 {
4770 /* Objects declared with block scope: */
4771 /* Reject two definitions, and reject a definition
4772 together with an external reference. */
4773 if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl)))
8251199e
JM
4774 return "redeclaration of `%#D'";
4775 return 0;
8d08fdba
MS
4776 }
4777}
4778\f
acef433b 4779/* Create a new label, named ID. */
8d08fdba 4780
acef433b
MM
4781static tree
4782make_label_decl (id, local_p)
8d08fdba 4783 tree id;
acef433b 4784 int local_p;
8d08fdba 4785{
acef433b 4786 tree decl;
8d08fdba 4787
acef433b 4788 decl = build_decl (LABEL_DECL, id, void_type_node);
b35d4555 4789 if (expanding_p)
acef433b
MM
4790 /* Make sure every label has an rtx. */
4791 label_rtx (decl);
4792
4793 DECL_CONTEXT (decl) = current_function_decl;
4794 DECL_MODE (decl) = VOIDmode;
4795 C_DECLARED_LABEL_FLAG (decl) = local_p;
8d08fdba 4796
acef433b
MM
4797 /* Say where one reference is to the label, for the sake of the
4798 error if it is not defined. */
4799 DECL_SOURCE_LINE (decl) = lineno;
4800 DECL_SOURCE_FILE (decl) = input_filename;
4801
4802 /* Record the fact that this identifier is bound to this label. */
4803 SET_IDENTIFIER_LABEL_VALUE (id, decl);
4804
6625cdb5
JM
4805 return decl;
4806}
4807
4808/* Record this label on the list of used labels so that we can check
4809 at the end of the function to see whether or not the label was
4810 actually defined, and so we can check when the label is defined whether
4811 this use is valid. */
4812
4813static void
4814use_label (decl)
4815 tree decl;
4816{
4817 if (named_label_uses == NULL
4818 || named_label_uses->names_in_scope != current_binding_level->names
4819 || named_label_uses->label_decl != decl)
4820 {
4821 struct named_label_use_list *new_ent;
4822 new_ent = ((struct named_label_use_list *)
4823 ggc_alloc (sizeof (struct named_label_use_list)));
e349ee73
MS
4824 new_ent->label_decl = decl;
4825 new_ent->names_in_scope = current_binding_level->names;
4826 new_ent->binding_level = current_binding_level;
4827 new_ent->lineno_o_goto = lineno;
4828 new_ent->filename_o_goto = input_filename;
4829 new_ent->next = named_label_uses;
4830 named_label_uses = new_ent;
8d08fdba 4831 }
acef433b 4832}
8d08fdba 4833
acef433b
MM
4834/* Look for a label named ID in the current function. If one cannot
4835 be found, create one. (We keep track of used, but undefined,
4836 labels, and complain about them at the end of a function.) */
8d08fdba 4837
68642fb6 4838tree
acef433b
MM
4839lookup_label (id)
4840 tree id;
4841{
4842 tree decl;
6625cdb5 4843 struct named_label_list *ent;
8d08fdba 4844
acef433b
MM
4845 /* You can't use labels at global scope. */
4846 if (current_function_decl == NULL_TREE)
4847 {
4848 error ("label `%s' referenced outside of any function",
4849 IDENTIFIER_POINTER (id));
4850 return NULL_TREE;
4851 }
68642fb6 4852
acef433b
MM
4853 /* See if we've already got this label. */
4854 decl = IDENTIFIER_LABEL_VALUE (id);
4855 if (decl != NULL_TREE && DECL_CONTEXT (decl) == current_function_decl)
4856 return decl;
8d08fdba 4857
acef433b
MM
4858 /* Record this label on the list of labels used in this function.
4859 We do this before calling make_label_decl so that we get the
4860 IDENTIFIER_LABEL_VALUE before the new label is declared. */
6625cdb5 4861 ent = ((struct named_label_list *)
f8a83ee3 4862 ggc_alloc_cleared (sizeof (struct named_label_list)));
6625cdb5
JM
4863 ent->old_value = IDENTIFIER_LABEL_VALUE (id);
4864 ent->next = named_labels;
4865 named_labels = ent;
4866
acef433b
MM
4867 /* We need a new label. */
4868 decl = make_label_decl (id, /*local_p=*/0);
6625cdb5 4869
acef433b 4870 /* Now fill in the information we didn't have before. */
6625cdb5 4871 ent->label_decl = decl;
8d08fdba
MS
4872
4873 return decl;
4874}
4875
acef433b 4876/* Declare a local label named ID. */
8d08fdba
MS
4877
4878tree
acef433b
MM
4879declare_local_label (id)
4880 tree id;
8d08fdba 4881{
acef433b 4882 tree decl;
8d08fdba 4883
acef433b
MM
4884 /* Add a new entry to the SHADOWED_LABELS list so that when we leave
4885 this scope we can restore the old value of
4886 IDENTIFIER_TYPE_VALUE. */
68642fb6 4887 current_binding_level->shadowed_labels
acef433b
MM
4888 = tree_cons (IDENTIFIER_LABEL_VALUE (id), NULL_TREE,
4889 current_binding_level->shadowed_labels);
4890 /* Look for the label. */
4891 decl = make_label_decl (id, /*local_p=*/1);
4892 /* Now fill in the information we didn't have before. */
4893 TREE_VALUE (current_binding_level->shadowed_labels) = decl;
68642fb6 4894
acef433b 4895 return decl;
8d08fdba
MS
4896}
4897
6625cdb5
JM
4898/* Returns nonzero if it is ill-formed to jump past the declaration of
4899 DECL. Returns 2 if it's also a real problem. */
4900
4901static int
4902decl_jump_unsafe (decl)
4903 tree decl;
4904{
4905 if (TREE_CODE (decl) != VAR_DECL || TREE_STATIC (decl))
4906 return 0;
4907
4908 if (DECL_INITIAL (decl) == NULL_TREE
4909 && pod_type_p (TREE_TYPE (decl)))
4910 return 0;
4911
4912 /* This is really only important if we're crossing an initialization.
4913 The POD stuff is just pedantry; why should it matter if the class
4914 contains a field of pointer to member type? */
4915 if (DECL_INITIAL (decl)
4916 || (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))))
4917 return 2;
4918 return 1;
4919}
4920
4921/* Check that a single previously seen jump to a newly defined label
4922 is OK. DECL is the LABEL_DECL or 0; LEVEL is the binding_level for
4923 the jump context; NAMES are the names in scope in LEVEL at the jump
4924 context; FILE and LINE are the source position of the jump or 0. */
4925
4926static void
4927check_previous_goto_1 (decl, level, names, file, line)
4928 tree decl;
4929 struct binding_level *level;
4930 tree names;
4931 const char *file;
4932 int line;
4933{
4934 int identified = 0;
4935 int saw_eh = 0;
4936 struct binding_level *b = current_binding_level;
4937 for (; b; b = b->level_chain)
4938 {
4939 tree new_decls = b->names;
4940 tree old_decls = (b == level ? names : NULL_TREE);
4941 for (; new_decls != old_decls;
4942 new_decls = TREE_CHAIN (new_decls))
4943 {
4944 int problem = decl_jump_unsafe (new_decls);
4945 if (! problem)
4946 continue;
4947
4948 if (! identified)
4949 {
4950 if (decl)
4951 cp_pedwarn ("jump to label `%D'", decl);
4952 else
4953 pedwarn ("jump to case label");
4954
4955 if (file)
4956 pedwarn_with_file_and_line (file, line, " from here");
4957 identified = 1;
4958 }
4959
4960 if (problem > 1 && DECL_ARTIFICIAL (new_decls))
4961 /* Can't skip init of __exception_info. */
4962 cp_error_at (" enters catch block", new_decls);
4963 else if (problem > 1)
4964 cp_error_at (" crosses initialization of `%#D'",
4965 new_decls);
4966 else
4967 cp_pedwarn_at (" enters scope of non-POD `%#D'",
4968 new_decls);
4969 }
4970
4971 if (b == level)
4972 break;
4973 if (b->eh_region && ! saw_eh)
4974 {
4975 if (! identified)
4976 {
4977 if (decl)
4978 cp_pedwarn ("jump to label `%D'", decl);
4979 else
4980 pedwarn ("jump to case label");
4981
4982 if (file)
4983 pedwarn_with_file_and_line (file, line, " from here");
4984 identified = 1;
4985 }
4986 error (" enters try block");
4987 saw_eh = 1;
4988 }
4989 }
4990}
4991
4992static void
4993check_previous_goto (use)
4994 struct named_label_use_list *use;
4995{
4996 check_previous_goto_1 (use->label_decl, use->binding_level,
4997 use->names_in_scope, use->filename_o_goto,
4998 use->lineno_o_goto);
4999}
5000
5001static void
5002check_switch_goto (level)
5003 struct binding_level *level;
5004{
5005 check_previous_goto_1 (NULL_TREE, level, level->names, NULL, 0);
5006}
5007
5008/* Check that any previously seen jumps to a newly defined label DECL
5009 are OK. Called by define_label. */
5010
5011static void
5012check_previous_gotos (decl)
5013 tree decl;
5014{
5015 struct named_label_use_list **usep;
5016
5017 if (! TREE_USED (decl))
5018 return;
5019
5020 for (usep = &named_label_uses; *usep; )
5021 {
5022 struct named_label_use_list *use = *usep;
5023 if (use->label_decl == decl)
5024 {
5025 check_previous_goto (use);
5026 *usep = use->next;
5027 }
5028 else
5029 usep = &(use->next);
5030 }
5031}
5032
5033/* Check that a new jump to a label DECL is OK. Called by
5034 finish_goto_stmt. */
5035
5036void
5037check_goto (decl)
5038 tree decl;
5039{
5040 int identified = 0;
5041 tree bad;
5042 struct named_label_list *lab;
5043
e3cd9945
APB
5044 /* We can't know where a computed goto is jumping. So we assume
5045 that it's OK. */
5046 if (! DECL_P (decl))
5047 return;
5048
6625cdb5
JM
5049 /* If the label hasn't been defined yet, defer checking. */
5050 if (! DECL_INITIAL (decl))
5051 {
5052 use_label (decl);
5053 return;
5054 }
5055
5056 for (lab = named_labels; lab; lab = lab->next)
5057 if (decl == lab->label_decl)
5058 break;
5059
5060 /* If the label is not on named_labels it's a gcc local label, so
5061 it must be in an outer scope, so jumping to it is always OK. */
5062 if (lab == 0)
5063 return;
5064
5065 if ((lab->eh_region || lab->bad_decls) && !identified)
5066 {
5067 cp_pedwarn_at ("jump to label `%D'", decl);
5068 pedwarn (" from here");
5069 identified = 1;
5070 }
5071
5072 for (bad = lab->bad_decls; bad; bad = TREE_CHAIN (bad))
5073 {
5074 tree b = TREE_VALUE (bad);
5075 int u = decl_jump_unsafe (b);
5076
5077 if (u > 1 && DECL_ARTIFICIAL (b))
5078 /* Can't skip init of __exception_info. */
5079 cp_error_at (" enters catch block", b);
5080 else if (u > 1)
5081 cp_error_at (" skips initialization of `%#D'", b);
5082 else
5083 cp_pedwarn_at (" enters scope of non-POD `%#D'", b);
5084 }
5085
5086 if (lab->eh_region)
5087 error (" enters try block");
5088}
5089
8d08fdba
MS
5090/* Define a label, specifying the location in the source file.
5091 Return the LABEL_DECL node for the label, if the definition is valid.
5092 Otherwise return 0. */
5093
5094tree
5095define_label (filename, line, name)
3b304f5b 5096 const char *filename;
8d08fdba
MS
5097 int line;
5098 tree name;
5099{
f01b0acb 5100 tree decl = lookup_label (name);
6625cdb5
JM
5101 struct named_label_list *ent;
5102
5103 for (ent = named_labels; ent; ent = ent->next)
5104 if (ent->label_decl == decl)
5105 break;
8d08fdba
MS
5106
5107 /* After labels, make any new cleanups go into their
5108 own new (temporary) binding contour. */
5109 current_binding_level->more_cleanups_ok = 0;
5110
e1cd6e56 5111 if (name == get_identifier ("wchar_t"))
8251199e 5112 cp_pedwarn ("label named wchar_t");
e1cd6e56 5113
8d08fdba
MS
5114 if (DECL_INITIAL (decl) != NULL_TREE)
5115 {
8251199e 5116 cp_error ("duplicate label `%D'", decl);
8d08fdba
MS
5117 return 0;
5118 }
5119 else
5120 {
8d08fdba
MS
5121 /* Mark label as having been defined. */
5122 DECL_INITIAL (decl) = error_mark_node;
5123 /* Say where in the source. */
5124 DECL_SOURCE_FILE (decl) = filename;
5125 DECL_SOURCE_LINE (decl) = line;
6625cdb5
JM
5126 if (ent)
5127 {
5128 ent->names_in_scope = current_binding_level->names;
5129 ent->binding_level = current_binding_level;
5130 }
5131 check_previous_gotos (decl);
8d08fdba
MS
5132 current_function_return_value = NULL_TREE;
5133 return decl;
5134 }
5135}
5136
a5894242
MS
5137struct cp_switch
5138{
5139 struct binding_level *level;
5140 struct cp_switch *next;
56cb9733
MM
5141 /* The SWITCH_STMT being built. */
5142 tree switch_stmt;
5143 /* A splay-tree mapping the low element of a case range to the high
5144 element, or NULL_TREE if there is no high element. Used to
5145 determine whether or not a new case label duplicates an old case
5146 label. We need a tree, rather than simply a hash table, because
5147 of the GNU case range extension. */
5148 splay_tree cases;
a5894242
MS
5149};
5150
56cb9733
MM
5151/* A stack of the currently active switch statements. The innermost
5152 switch statement is on the top of the stack. There is no need to
5153 mark the stack for garbage collection because it is only active
5154 during the processing of the body of a function, and we never
5155 collect at that point. */
5156
a5894242
MS
5157static struct cp_switch *switch_stack;
5158
56cb9733
MM
5159static int
5160case_compare (k1, k2)
5161 splay_tree_key k1;
5162 splay_tree_key k2;
5163{
5164 /* Consider a NULL key (such as arises with a `default' label) to be
5165 smaller than anything else. */
5166 if (!k1)
5167 return k2 ? -1 : 0;
5168 else if (!k2)
5169 return k1 ? 1 : 0;
5170
5171 return tree_int_cst_compare ((tree) k1, (tree) k2);
5172}
5173
5174/* Called right after a switch-statement condition is parsed.
5175 SWITCH_STMT is the switch statement being parsed. */
5176
a5894242 5177void
56cb9733
MM
5178push_switch (switch_stmt)
5179 tree switch_stmt;
a5894242
MS
5180{
5181 struct cp_switch *p
bedda2da 5182 = (struct cp_switch *) xmalloc (sizeof (struct cp_switch));
a5894242
MS
5183 p->level = current_binding_level;
5184 p->next = switch_stack;
56cb9733
MM
5185 p->switch_stmt = switch_stmt;
5186 p->cases = splay_tree_new (case_compare, NULL, NULL);
a5894242
MS
5187 switch_stack = p;
5188}
5189
5190void
5191pop_switch ()
5192{
bedda2da
MM
5193 struct cp_switch *cs;
5194
5195 cs = switch_stack;
56cb9733 5196 splay_tree_delete (cs->cases);
a5894242 5197 switch_stack = switch_stack->next;
bedda2da 5198 free (cs);
a5894242
MS
5199}
5200
b0a1da19
JM
5201/* Note that we've seen a definition of a case label, and complain if this
5202 is a bad place for one. */
e92cc029 5203
8d08fdba 5204void
56cb9733
MM
5205finish_case_label (low_value, high_value)
5206 tree low_value;
5207 tree high_value;
8d08fdba 5208{
56cb9733
MM
5209 tree label;
5210 tree cleanup;
5211 tree type;
5212 tree cond;
5213 tree case_label;
5214 splay_tree_node node;
a5894242 5215
b0a1da19 5216 if (! switch_stack)
56cb9733
MM
5217 {
5218 if (high_value)
5219 error ("case label not within a switch statement");
5220 else if (low_value)
5221 cp_error ("case label `%E' not within a switch statement",
5222 low_value);
5223 else
5224 error ("`default' label not within a switch statement");
5225 return;
5226 }
5227
5228 label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
71ad4a16 5229 DECL_CONTEXT (label) = current_function_decl;
56cb9733
MM
5230
5231 if (processing_template_decl)
5232 {
5233 /* For templates, just add the case label; we'll do semantic
5234 analysis at instantiation-time. */
5235 add_stmt (build_case_label (low_value, high_value, label));
5236 return;
5237 }
5238
5239 /* Find the condition on which this switch statement depends. */
5240 cond = SWITCH_COND (switch_stack->switch_stmt);
5241 if (cond && TREE_CODE (cond) == TREE_LIST)
5242 cond = TREE_VALUE (cond);
5243 /* If there was an error processing the switch condition, bail now
5244 before we get more confused. */
5245 if (!cond || cond == error_mark_node)
b0a1da19 5246 return;
56cb9733 5247 type = TREE_TYPE (cond);
68642fb6 5248
56cb9733
MM
5249 if ((low_value && TREE_TYPE (low_value)
5250 && POINTER_TYPE_P (TREE_TYPE (low_value)))
5251 || (high_value && TREE_TYPE (high_value)
5252 && POINTER_TYPE_P (TREE_TYPE (high_value))))
5253 error ("pointers are not permitted as case values");
5254
5255 /* Case ranges are a GNU extension. */
5256 if (high_value && pedantic)
5257 pedwarn ("ISO C++ forbids range expressions in switch statement");
5258
5259 if (low_value)
5260 {
5261 low_value = check_case_value (low_value);
5262 low_value = convert_and_check (type, low_value);
5263 }
5264 if (high_value)
5265 {
5266 high_value = check_case_value (high_value);
5267 high_value = convert_and_check (type, high_value);
5268 }
5269
5270 /* If an error has occurred, bail out now. */
5271 if (low_value == error_mark_node || high_value == error_mark_node)
5272 return;
5273
5274 /* If the LOW_VALUE and HIGH_VALUE are the same, then this isn't
5275 really a case range, even though it was written that way. Remove
5276 the HIGH_VALUE to simplify later processing. */
5277 if (tree_int_cst_equal (low_value, high_value))
5278 high_value = NULL_TREE;
5279 if (low_value && high_value
5280 && !tree_int_cst_lt (low_value, high_value))
5281 warning ("empty range specified");
5282
5283 /* Look up the LOW_VALUE in the table of case labels we already
5284 have. */
5285 node = splay_tree_lookup (switch_stack->cases, (splay_tree_key) low_value);
5286 /* If there was not an exact match, check for overlapping ranges.
5287 There's no need to do this if there's no LOW_VALUE or HIGH_VALUE;
5288 that's a `default' label and the only overlap is an exact match. */
5289 if (!node && (low_value || high_value))
5290 {
5291 splay_tree_node low_bound;
5292 splay_tree_node high_bound;
5293
5294 /* Even though there wasn't an exact match, there might be an
5295 overlap between this case range and another case range.
5296 Since we've (inductively) not allowed any overlapping case
5297 ranges, we simply need to find the greatest low case label
5298 that is smaller that LOW_VALUE, and the smallest low case
5299 label that is greater than LOW_VALUE. If there is an overlap
5300 it will occur in one of these two ranges. */
5301 low_bound = splay_tree_predecessor (switch_stack->cases,
5302 (splay_tree_key) low_value);
5303 high_bound = splay_tree_successor (switch_stack->cases,
5304 (splay_tree_key) low_value);
5305
5306 /* Check to see if the LOW_BOUND overlaps. It is smaller than
5307 the LOW_VALUE, so there is no need to check unless the
5308 LOW_BOUND is in fact itself a case range. */
5309 if (low_bound
5310 && CASE_HIGH ((tree) low_bound->value)
5311 && tree_int_cst_compare (CASE_HIGH ((tree) low_bound->value),
5312 low_value) >= 0)
5313 node = low_bound;
5314 /* Check to see if the HIGH_BOUND overlaps. The low end of that
5315 range is bigger than the low end of the current range, so we
5316 are only interested if the current range is a real range, and
5317 not an ordinary case label. */
5318 else if (high_bound
5319 && high_value
5320 && (tree_int_cst_compare ((tree) high_bound->key,
5321 high_value)
5322 <= 0))
5323 node = high_bound;
5324 }
5325 /* If there was an overlap, issue an error. */
5326 if (node)
5327 {
5328 tree duplicate = CASE_LABEL_DECL ((tree) node->value);
5329
5330 if (high_value)
5331 {
5332 error ("duplicate (or overlapping) case value");
5333 cp_error_at ("this is the first entry overlapping that value",
5334 duplicate);
5335 }
5336 else if (low_value)
5337 {
5338 cp_error ("duplicate case value `%E'", low_value) ;
5339 cp_error_at ("previously used here", duplicate);
5340 }
5341 else
5342 {
5343 error ("multiple default labels in one switch");
5344 cp_error_at ("this is the first default label", duplicate);
5345 }
5346 return;
5347 }
5348
5349 cleanup = last_cleanup_this_contour ();
8d08fdba
MS
5350 if (cleanup)
5351 {
5352 static int explained = 0;
8251199e
JM
5353 cp_warning_at ("destructor needed for `%#D'", TREE_PURPOSE (cleanup));
5354 warning ("where case label appears here");
8d08fdba
MS
5355 if (!explained)
5356 {
b1ce3eb2 5357 warning ("(enclose actions of previous case statements requiring destructors in their own scope.)");
8d08fdba
MS
5358 explained = 1;
5359 }
5360 }
5361
6625cdb5 5362 check_switch_goto (switch_stack->level);
a5894242 5363
8d08fdba
MS
5364 /* After labels, make any new cleanups go into their
5365 own new (temporary) binding contour. */
8d08fdba
MS
5366 current_binding_level->more_cleanups_ok = 0;
5367 current_function_return_value = NULL_TREE;
56cb9733
MM
5368
5369 /* Add a representation for the case label to the statement
5370 tree. */
5371 case_label = build_case_label (low_value, high_value, label);
5372 add_stmt (case_label);
5373
5374 /* Register this case label in the splay tree. */
5375 splay_tree_insert (switch_stack->cases,
5376 (splay_tree_key) low_value,
5377 (splay_tree_value) case_label);
8d08fdba
MS
5378}
5379\f
5380/* Return the list of declarations of the current level.
5381 Note that this list is in reverse order unless/until
5382 you nreverse it; and when you do nreverse it, you must
5383 store the result back using `storedecls' or you will lose. */
5384
5385tree
5386getdecls ()
5387{
5388 return current_binding_level->names;
5389}
5390
5391/* Return the list of type-tags (for structs, etc) of the current level. */
5392
5393tree
5394gettags ()
5395{
5396 return current_binding_level->tags;
5397}
5398
5399/* Store the list of declarations of the current level.
5400 This is done for the parameter declarations of a function being defined,
5401 after they are modified in the light of any missing parameters. */
5402
5403static void
5404storedecls (decls)
5405 tree decls;
5406{
5407 current_binding_level->names = decls;
5408}
5409
5410/* Similarly, store the list of tags of the current level. */
5411
280f9385 5412void
8d08fdba
MS
5413storetags (tags)
5414 tree tags;
5415{
5416 current_binding_level->tags = tags;
5417}
5418\f
5419/* Given NAME, an IDENTIFIER_NODE,
5420 return the structure (or union or enum) definition for that name.
5421 Searches binding levels from BINDING_LEVEL up to the global level.
5422 If THISLEVEL_ONLY is nonzero, searches only the specified context
5423 (but skips any tag-transparent contexts to find one that is
5424 meaningful for tags).
5425 FORM says which kind of type the caller wants;
5426 it is RECORD_TYPE or UNION_TYPE or ENUMERAL_TYPE.
5427 If the wrong kind of type is found, and it's not a template, an error is
5428 reported. */
5429
5430static tree
5431lookup_tag (form, name, binding_level, thislevel_only)
5432 enum tree_code form;
8d08fdba 5433 tree name;
cffa8729 5434 struct binding_level *binding_level;
8d08fdba
MS
5435 int thislevel_only;
5436{
5437 register struct binding_level *level;
74b846e0
MM
5438 /* Non-zero if, we should look past a template parameter level, even
5439 if THISLEVEL_ONLY. */
5440 int allow_template_parms_p = 1;
8d08fdba
MS
5441
5442 for (level = binding_level; level; level = level->level_chain)
5443 {
5444 register tree tail;
5445 if (ANON_AGGRNAME_P (name))
5446 for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
5447 {
5448 /* There's no need for error checking here, because
5449 anon names are unique throughout the compilation. */
5450 if (TYPE_IDENTIFIER (TREE_VALUE (tail)) == name)
5451 return TREE_VALUE (tail);
5452 }
2c73f9f5
ML
5453 else if (level->namespace_p)
5454 /* Do namespace lookup. */
6c011b01 5455 for (tail = current_namespace; 1; tail = CP_DECL_CONTEXT (tail))
2c73f9f5 5456 {
36a117a5
MM
5457 tree old = binding_for_name (name, tail);
5458
74b846e0
MM
5459 /* If we just skipped past a template parameter level,
5460 even though THISLEVEL_ONLY, and we find a template
5461 class declaration, then we use the _TYPE node for the
36a117a5 5462 template. See the example below. */
74b846e0 5463 if (thislevel_only && !allow_template_parms_p
68642fb6 5464 && old && BINDING_VALUE (old)
36a117a5
MM
5465 && DECL_CLASS_TEMPLATE_P (BINDING_VALUE (old)))
5466 old = TREE_TYPE (BINDING_VALUE (old));
68642fb6 5467 else
36a117a5
MM
5468 old = BINDING_TYPE (old);
5469
2c73f9f5
ML
5470 /* If it has an original type, it is a typedef, and we
5471 should not return it. */
5472 if (old && DECL_ORIGINAL_TYPE (TYPE_NAME (old)))
5473 old = NULL_TREE;
5474 if (old && TREE_CODE (old) != form
5475 && !(form != ENUMERAL_TYPE && TREE_CODE (old) == TEMPLATE_DECL))
5476 {
8251199e 5477 cp_error ("`%#D' redeclared as %C", old, form);
2c73f9f5
ML
5478 return NULL_TREE;
5479 }
5480 if (old)
5481 return old;
5482 if (thislevel_only || tail == global_namespace)
5483 return NULL_TREE;
5484 }
8d08fdba
MS
5485 else
5486 for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
5487 {
a80e4195 5488 if (TREE_PURPOSE (tail) == name)
8d08fdba
MS
5489 {
5490 enum tree_code code = TREE_CODE (TREE_VALUE (tail));
5491 /* Should tighten this up; it'll probably permit
5492 UNION_TYPE and a struct template, for example. */
5493 if (code != form
5566b478 5494 && !(form != ENUMERAL_TYPE && code == TEMPLATE_DECL))
8d08fdba
MS
5495 {
5496 /* Definition isn't the kind we were looking for. */
8251199e 5497 cp_error ("`%#D' redeclared as %C", TREE_VALUE (tail),
8d08fdba 5498 form);
72b7eeff 5499 return NULL_TREE;
8d08fdba
MS
5500 }
5501 return TREE_VALUE (tail);
5502 }
5503 }
5504 if (thislevel_only && ! level->tag_transparent)
5566b478 5505 {
74b846e0 5506 if (level->template_parms_p && allow_template_parms_p)
5566b478 5507 {
36a117a5 5508 /* We must deal with cases like this:
68642fb6 5509
36a117a5
MM
5510 template <class T> struct S;
5511 template <class T> struct S {};
68642fb6 5512
36a117a5
MM
5513 When looking up `S', for the second declaration, we
5514 would like to find the first declaration. But, we
5515 are in the pseudo-global level created for the
5516 template parameters, rather than the (surrounding)
5517 namespace level. Thus, we keep going one more level,
5518 even though THISLEVEL_ONLY is non-zero. */
74b846e0 5519 allow_template_parms_p = 0;
36a117a5 5520 continue;
5566b478 5521 }
36a117a5
MM
5522 else
5523 return NULL_TREE;
5566b478 5524 }
8d08fdba
MS
5525 }
5526 return NULL_TREE;
5527}
5528
bd6dd845 5529#if 0
8d08fdba
MS
5530void
5531set_current_level_tags_transparency (tags_transparent)
5532 int tags_transparent;
5533{
5534 current_binding_level->tag_transparent = tags_transparent;
5535}
bd6dd845 5536#endif
8d08fdba
MS
5537
5538/* Given a type, find the tag that was defined for it and return the tag name.
5539 Otherwise return 0. However, the value can never be 0
5540 in the cases in which this is used.
5541
5542 C++: If NAME is non-zero, this is the new name to install. This is
5543 done when replacing anonymous tags with real tag names. */
5544
5545static tree
5546lookup_tag_reverse (type, name)
5547 tree type;
5548 tree name;
5549{
5550 register struct binding_level *level;
5551
5552 for (level = current_binding_level; level; level = level->level_chain)
5553 {
5554 register tree tail;
5555 for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
5556 {
5557 if (TREE_VALUE (tail) == type)
5558 {
5559 if (name)
5560 TREE_PURPOSE (tail) = name;
5561 return TREE_PURPOSE (tail);
5562 }
5563 }
5564 }
5565 return NULL_TREE;
5566}
8d08fdba 5567\f
a9aedbc2 5568/* Look up NAME in the NAMESPACE. */
e92cc029 5569
a9aedbc2
MS
5570tree
5571lookup_namespace_name (namespace, name)
5572 tree namespace, name;
5573{
30394414 5574 tree val;
f30c84c9 5575 tree template_id = NULL_TREE;
2c73f9f5 5576
30394414 5577 my_friendly_assert (TREE_CODE (namespace) == NAMESPACE_DECL, 370);
1231fb96 5578
1231fb96 5579 if (TREE_CODE (name) == NAMESPACE_DECL)
d8f8dca1 5580 /* This happens for A::B<int> when B is a namespace. */
1231fb96 5581 return name;
d8f8dca1
MM
5582 else if (TREE_CODE (name) == TEMPLATE_DECL)
5583 {
5584 /* This happens for A::B where B is a template, and there are no
5585 template arguments. */
5586 cp_error ("invalid use of `%D'", name);
5587 return error_mark_node;
5588 }
1231fb96 5589
b262d64c
JM
5590 namespace = ORIGINAL_NAMESPACE (namespace);
5591
f30c84c9
MM
5592 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
5593 {
5594 template_id = name;
5595 name = TREE_OPERAND (name, 0);
5596 if (TREE_CODE (name) == OVERLOAD)
5597 name = DECL_NAME (OVL_CURRENT (name));
2f939d94 5598 else if (DECL_P (name))
f30c84c9
MM
5599 name = DECL_NAME (name);
5600 }
5601
30394414 5602 my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 373);
68642fb6 5603
87e3dbc9 5604 val = make_node (CPLUS_BINDING);
52c11ef6 5605 if (!qualified_lookup_using_namespace (name, namespace, val, 0))
2c73f9f5
ML
5606 return error_mark_node;
5607
5608 if (BINDING_VALUE (val))
1c35f5b6
JM
5609 {
5610 val = BINDING_VALUE (val);
5611
f30c84c9
MM
5612 if (template_id)
5613 {
5614 if (DECL_CLASS_TEMPLATE_P (val))
68642fb6 5615 val = lookup_template_class (val,
f30c84c9
MM
5616 TREE_OPERAND (template_id, 1),
5617 /*in_decl=*/NULL_TREE,
5618 /*context=*/NULL_TREE,
5619 /*entering_scope=*/0);
5620 else if (DECL_FUNCTION_TEMPLATE_P (val)
5621 || TREE_CODE (val) == OVERLOAD)
68642fb6 5622 val = lookup_template_function (val,
f30c84c9
MM
5623 TREE_OPERAND (template_id, 1));
5624 else
5625 {
5626 cp_error ("`%D::%D' is not a template",
5627 namespace, name);
5628 return error_mark_node;
5629 }
5630 }
5631
1c35f5b6
JM
5632 /* If we have a single function from a using decl, pull it out. */
5633 if (TREE_CODE (val) == OVERLOAD && ! really_overloaded_fn (val))
5634 val = OVL_FUNCTION (val);
5635 return val;
5636 }
5637
8251199e 5638 cp_error ("`%D' undeclared in namespace `%D'", name, namespace);
30394414 5639 return error_mark_node;
a9aedbc2
MS
5640}
5641
7ddedda4
MM
5642/* Hash a TYPENAME_TYPE. K is really of type `tree'. */
5643
5644static unsigned long
5645typename_hash (k)
5646 hash_table_key k;
5647{
5648 unsigned long hash;
5649 tree t;
5650
5651 t = (tree) k;
5652 hash = (((unsigned long) TYPE_CONTEXT (t))
5653 ^ ((unsigned long) DECL_NAME (TYPE_NAME (t))));
5654
5655 return hash;
5656}
5657
5658/* Compare two TYPENAME_TYPEs. K1 and K2 are really of type `tree'. */
5659
5660static boolean
5661typename_compare (k1, k2)
5662 hash_table_key k1;
5663 hash_table_key k2;
5664{
5665 tree t1;
5666 tree t2;
5667 tree d1;
5668 tree d2;
5669
5670 t1 = (tree) k1;
5671 t2 = (tree) k2;
5672 d1 = TYPE_NAME (t1);
5673 d2 = TYPE_NAME (t2);
68642fb6 5674
7ddedda4
MM
5675 return (DECL_NAME (d1) == DECL_NAME (d2)
5676 && same_type_p (TYPE_CONTEXT (t1), TYPE_CONTEXT (t2))
68642fb6 5677 && ((TREE_TYPE (t1) != NULL_TREE)
7ddedda4
MM
5678 == (TREE_TYPE (t2) != NULL_TREE))
5679 && same_type_p (TREE_TYPE (t1), TREE_TYPE (t2))
5680 && TYPENAME_TYPE_FULLNAME (t1) == TYPENAME_TYPE_FULLNAME (t2));
5681}
5682
45869a6c
MM
5683/* Build a TYPENAME_TYPE. If the type is `typename T::t', CONTEXT is
5684 the type of `T', NAME is the IDENTIFIER_NODE for `t'. If BASE_TYPE
5685 is non-NULL, this type is being created by the implicit typename
5686 extension, and BASE_TYPE is a type named `t' in some base class of
68642fb6 5687 `T' which depends on template parameters.
45869a6c
MM
5688
5689 Returns the new TYPENAME_TYPE. */
5690
5691tree
5692build_typename_type (context, name, fullname, base_type)
5693 tree context;
5694 tree name;
5695 tree fullname;
5696 tree base_type;
5697{
5698 tree t;
5699 tree d;
7ddedda4 5700 struct hash_entry* e;
45869a6c 5701
7ddedda4
MM
5702 static struct hash_table ht;
5703
9cd64686
MM
5704 if (!ht.table)
5705 {
5706 static struct hash_table *h = &ht;
68642fb6 5707 if (!hash_table_init (&ht, &hash_newfunc, &typename_hash,
9cd64686
MM
5708 &typename_compare))
5709 fatal ("virtual memory exhausted");
5710 ggc_add_tree_hash_table_root (&h, 1);
5711 }
45869a6c
MM
5712
5713 /* Build the TYPENAME_TYPE. */
33848bb0 5714 t = make_aggr_type (TYPENAME_TYPE);
45869a6c
MM
5715 TYPE_CONTEXT (t) = FROB_CONTEXT (context);
5716 TYPENAME_TYPE_FULLNAME (t) = fullname;
5717 TREE_TYPE (t) = base_type;
45869a6c
MM
5718
5719 /* Build the corresponding TYPE_DECL. */
5720 d = build_decl (TYPE_DECL, name, t);
5721 TYPE_NAME (TREE_TYPE (d)) = d;
5722 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
5723 DECL_CONTEXT (d) = FROB_CONTEXT (context);
2642b9bf 5724 DECL_ARTIFICIAL (d) = 1;
45869a6c 5725
7ddedda4
MM
5726 /* See if we already have this type. */
5727 e = hash_lookup (&ht, t, /*create=*/false, /*copy=*/0);
5728 if (e)
87e3dbc9 5729 t = (tree) e->key;
7ddedda4
MM
5730 else
5731 /* Insert the type into the table. */
5732 hash_lookup (&ht, t, /*create=*/true, /*copy=*/0);
5733
45869a6c
MM
5734 return t;
5735}
5736
3baa501d
MM
5737/* Resolve `typename CONTEXT::NAME'. Returns an appropriate type,
5738 unless an error occurs, in which case error_mark_node is returned.
5739 If COMPLAIN zero, don't complain about any errors that occur. */
5740
5566b478 5741tree
3baa501d 5742make_typename_type (context, name, complain)
5566b478 5743 tree context, name;
3baa501d 5744 int complain;
5566b478 5745{
b2b7d40a 5746 tree fullname;
a80e4195 5747
2f939d94 5748 if (TYPE_P (name))
78638e24 5749 {
68642fb6
UD
5750 if (!(TYPE_LANG_SPECIFIC (name)
5751 && (CLASSTYPE_IS_TEMPLATE (name)
78638e24
MM
5752 || CLASSTYPE_USE_TEMPLATE (name))))
5753 name = TYPE_IDENTIFIER (name);
5754 else
5755 /* Create a TEMPLATE_ID_EXPR for the type. */
5756 name = build_nt (TEMPLATE_ID_EXPR,
5757 CLASSTYPE_TI_TEMPLATE (name),
5758 CLASSTYPE_TI_ARGS (name));
5759 }
653cc74a 5760 else if (TREE_CODE (name) == TYPE_DECL)
a80e4195 5761 name = DECL_NAME (name);
b2b7d40a
JM
5762
5763 fullname = name;
5764
5765 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
11686454
JM
5766 {
5767 name = TREE_OPERAND (name, 0);
5768 if (TREE_CODE (name) == TEMPLATE_DECL)
5769 name = TREE_OPERAND (fullname, 0) = DECL_NAME (name);
5770 }
b2b7d40a 5771 if (TREE_CODE (name) != IDENTIFIER_NODE)
a80e4195 5772 my_friendly_abort (2000);
5566b478 5773
04ddee1b
BK
5774 if (TREE_CODE (context) == NAMESPACE_DECL)
5775 {
5776 /* We can get here from typename_sub0 in the explicit_template_type
5777 expansion. Just fail. */
3baa501d
MM
5778 if (complain)
5779 cp_error ("no class template named `%#T' in `%#T'",
5780 name, context);
04ddee1b
BK
5781 return error_mark_node;
5782 }
5783
85b71cf2 5784 if (! uses_template_parms (context)
b77ead33 5785 || currently_open_class (context))
5566b478 5786 {
b2b7d40a
JM
5787 if (TREE_CODE (fullname) == TEMPLATE_ID_EXPR)
5788 {
ad810b22 5789 tree tmpl = NULL_TREE;
b2b7d40a 5790 if (IS_AGGR_TYPE (context))
ad810b22
MM
5791 tmpl = lookup_field (context, name, 0, 0);
5792 if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
b2b7d40a 5793 {
3baa501d
MM
5794 if (complain)
5795 cp_error ("no class template named `%#T' in `%#T'",
5796 name, context);
b2b7d40a
JM
5797 return error_mark_node;
5798 }
ffb690bd 5799
68642fb6 5800 return lookup_template_class (tmpl,
ad810b22 5801 TREE_OPERAND (fullname, 1),
68642fb6 5802 NULL_TREE, context,
ad810b22 5803 /*entering_scope=*/0);
b2b7d40a
JM
5804 }
5805 else
5566b478 5806 {
b4f70b3d 5807 tree t;
68642fb6 5808
b4f70b3d 5809 if (!IS_AGGR_TYPE (context))
b2b7d40a 5810 {
3baa501d
MM
5811 if (complain)
5812 cp_error ("no type named `%#T' in `%#T'", name, context);
b2b7d40a
JM
5813 return error_mark_node;
5814 }
1107c4b3 5815
b4f70b3d 5816 t = lookup_field (context, name, 0, 1);
7d4bdeed
MM
5817 if (t)
5818 return TREE_TYPE (t);
5566b478 5819 }
5566b478 5820 }
11249cf0
MM
5821
5822 /* If the CONTEXT is not a template type, then either the field is
5823 there now or its never going to be. */
b4f70b3d 5824 if (!uses_template_parms (context))
11249cf0 5825 {
3baa501d
MM
5826 if (complain)
5827 cp_error ("no type named `%#T' in `%#T'", name, context);
11249cf0
MM
5828 return error_mark_node;
5829 }
68642fb6
UD
5830
5831
45869a6c 5832 return build_typename_type (context, name, fullname, NULL_TREE);
5566b478
MS
5833}
5834
2c73f9f5
ML
5835/* Select the right _DECL from multiple choices. */
5836
5837static tree
52c11ef6 5838select_decl (binding, flags)
2c73f9f5 5839 tree binding;
52c11ef6 5840 int flags;
2c73f9f5
ML
5841{
5842 tree val;
5843 val = BINDING_VALUE (binding);
52c11ef6 5844 if (LOOKUP_NAMESPACES_ONLY (flags))
3e3f722c
ML
5845 {
5846 /* We are not interested in types. */
5847 if (val && TREE_CODE (val) == NAMESPACE_DECL)
5848 return val;
5849 return NULL_TREE;
5850 }
68642fb6 5851
2c73f9f5
ML
5852 /* If we could have a type and
5853 we have nothing or we need a type and have none. */
5854 if (BINDING_TYPE (binding)
52c11ef6
JM
5855 && (!val || ((flags & LOOKUP_PREFER_TYPES)
5856 && TREE_CODE (val) != TYPE_DECL)))
2c73f9f5
ML
5857 val = TYPE_STUB_DECL (BINDING_TYPE (binding));
5858 /* Don't return non-types if we really prefer types. */
52c11ef6 5859 else if (val && LOOKUP_TYPES_ONLY (flags) && TREE_CODE (val) != TYPE_DECL
c592d5d2
ML
5860 && (TREE_CODE (val) != TEMPLATE_DECL
5861 || !DECL_CLASS_TEMPLATE_P (val)))
2c73f9f5 5862 val = NULL_TREE;
1c35f5b6 5863
2c73f9f5
ML
5864 return val;
5865}
5866
2c169bab
JM
5867/* Unscoped lookup of a global: iterate over current namespaces,
5868 considering using-directives. If SPACESP is non-NULL, store a list
5869 of the namespaces we've considered in it. */
ea9635c7 5870
2c169bab
JM
5871tree
5872unqualified_namespace_lookup (name, flags, spacesp)
ea9635c7 5873 tree name;
52c11ef6 5874 int flags;
2c169bab 5875 tree *spacesp;
ea9635c7 5876{
87e3dbc9 5877 tree b = make_node (CPLUS_BINDING);
ea9635c7
ML
5878 tree initial = current_decl_namespace();
5879 tree scope = initial;
5880 tree siter;
5881 struct binding_level *level;
5882 tree val = NULL_TREE;
5883
2c169bab
JM
5884 if (spacesp)
5885 *spacesp = NULL_TREE;
5886
5887 for (; !val; scope = CP_DECL_CONTEXT (scope))
ea9635c7 5888 {
2c169bab 5889 if (spacesp)
e1b3e07d 5890 *spacesp = tree_cons (scope, NULL_TREE, *spacesp);
ea9635c7
ML
5891 val = binding_for_name (name, scope);
5892
5893 /* Initialize binding for this context. */
5894 BINDING_VALUE (b) = BINDING_VALUE (val);
5895 BINDING_TYPE (b) = BINDING_TYPE (val);
5896
5897 /* Add all _DECLs seen through local using-directives. */
68642fb6 5898 for (level = current_binding_level;
ea9635c7
ML
5899 !level->namespace_p;
5900 level = level->level_chain)
52c11ef6 5901 if (!lookup_using_namespace (name, b, level->using_directives,
2c169bab 5902 scope, flags, spacesp))
ea9635c7 5903 /* Give up because of error. */
5b163de4 5904 return error_mark_node;
ea9635c7
ML
5905
5906 /* Add all _DECLs seen through global using-directives. */
5907 /* XXX local and global using lists should work equally. */
5908 siter = initial;
5909 while (1)
5910 {
68642fb6 5911 if (!lookup_using_namespace (name, b, DECL_NAMESPACE_USING (siter),
2c169bab 5912 scope, flags, spacesp))
ea9635c7 5913 /* Give up because of error. */
5b163de4 5914 return error_mark_node;
ea9635c7
ML
5915 if (siter == scope) break;
5916 siter = CP_DECL_CONTEXT (siter);
5917 }
5918
52c11ef6 5919 val = select_decl (b, flags);
ea9635c7
ML
5920 if (scope == global_namespace)
5921 break;
ea9635c7
ML
5922 }
5923 return val;
5924}
5925
52c11ef6
JM
5926/* Combine prefer_type and namespaces_only into flags. */
5927
5928static int
5929lookup_flags (prefer_type, namespaces_only)
5930 int prefer_type, namespaces_only;
5931{
5932 if (namespaces_only)
5933 return LOOKUP_PREFER_NAMESPACES;
5934 if (prefer_type > 1)
5935 return LOOKUP_PREFER_TYPES;
5936 if (prefer_type > 0)
5937 return LOOKUP_PREFER_BOTH;
5938 return 0;
5939}
5940
5941/* Given a lookup that returned VAL, use FLAGS to decide if we want to
5942 ignore it or not. Subroutine of lookup_name_real. */
5943
5944static tree
5945qualify_lookup (val, flags)
5946 tree val;
5947 int flags;
5948{
5949 if (val == NULL_TREE)
5950 return val;
6b945830
JM
5951 if ((flags & LOOKUP_PREFER_NAMESPACES) && TREE_CODE (val) == NAMESPACE_DECL)
5952 return val;
5953 if ((flags & LOOKUP_PREFER_TYPES)
5954 && (TREE_CODE (val) == TYPE_DECL
5955 || ((flags & LOOKUP_TEMPLATES_EXPECTED)
5956 && DECL_CLASS_TEMPLATE_P (val))))
5957 return val;
5958 if (flags & (LOOKUP_PREFER_NAMESPACES | LOOKUP_PREFER_TYPES))
52c11ef6
JM
5959 return NULL_TREE;
5960 return val;
5961}
5962
235f734d
MM
5963/* Any other BINDING overrides an implicit TYPENAME. Warn about
5964 that. */
5965
5966static void
5967warn_about_implicit_typename_lookup (typename, binding)
5968 tree typename;
5969 tree binding;
5970{
5971 tree subtype = TREE_TYPE (TREE_TYPE (typename));
5972 tree name = DECL_NAME (typename);
5973
5974 if (! (TREE_CODE (binding) == TEMPLATE_DECL
5975 && CLASSTYPE_TEMPLATE_INFO (subtype)
5976 && CLASSTYPE_TI_TEMPLATE (subtype) == binding)
5977 && ! (TREE_CODE (binding) == TYPE_DECL
5978 && same_type_p (TREE_TYPE (binding), subtype)))
5979 {
68642fb6 5980 cp_warning ("lookup of `%D' finds `%#D'",
235f734d
MM
5981 name, binding);
5982 cp_warning (" instead of `%D' from dependent base class",
5983 typename);
5984 cp_warning (" (use `typename %T::%D' if that's what you meant)",
5985 constructor_name (current_class_type), name);
5986 }
5987}
5988
8d08fdba
MS
5989/* Look up NAME in the current binding level and its superiors in the
5990 namespace of variables, functions and typedefs. Return a ..._DECL
5991 node of some kind representing its definition if there is only one
5992 such declaration, or return a TREE_LIST with all the overloaded
5993 definitions if there are many, or return 0 if it is undefined.
5994
2c73f9f5
ML
5995 If PREFER_TYPE is > 0, we prefer TYPE_DECLs or namespaces.
5996 If PREFER_TYPE is > 1, we reject non-type decls (e.g. namespaces).
a28e3c7f 5997 If PREFER_TYPE is -2, we're being called from yylex(). (UGLY)
68642fb6 5998 Otherwise we prefer non-TYPE_DECLs.
f84b4be9
JM
5999
6000 If NONCLASS is non-zero, we don't look for the NAME in class scope,
6001 using IDENTIFIER_CLASS_VALUE. */
8d08fdba 6002
824b9a4c 6003static tree
3e3f722c 6004lookup_name_real (name, prefer_type, nonclass, namespaces_only)
8d08fdba 6005 tree name;
3e3f722c 6006 int prefer_type, nonclass, namespaces_only;
8d08fdba 6007{
235f734d
MM
6008 tree t;
6009 tree val = NULL_TREE;
a28e3c7f 6010 int yylex = 0;
e1cd6e56 6011 tree from_obj = NULL_TREE;
52c11ef6 6012 int flags;
235f734d 6013 int val_is_implicit_typename = 0;
8d08fdba 6014
3e3f722c
ML
6015 /* Hack: copy flag set by parser, if set. */
6016 if (only_namespace_names)
6017 namespaces_only = 1;
52c11ef6 6018
a28e3c7f
MS
6019 if (prefer_type == -2)
6020 {
6021 extern int looking_for_typename;
fc378698 6022 tree type = NULL_TREE;
a28e3c7f
MS
6023
6024 yylex = 1;
6025 prefer_type = looking_for_typename;
e1cd6e56 6026
52c11ef6 6027 flags = lookup_flags (prefer_type, namespaces_only);
52c11ef6
JM
6028 /* If the next thing is '<', class templates are types. */
6029 if (looking_for_template)
6030 flags |= LOOKUP_TEMPLATES_EXPECTED;
6031
653cc74a
JM
6032 /* std:: becomes :: for now. */
6033 if (got_scope == std_node)
6034 got_scope = void_type_node;
6035
e1cd6e56
MS
6036 if (got_scope)
6037 type = got_scope;
dff6b454 6038 else if (got_object != error_mark_node)
e1cd6e56 6039 type = got_object;
68642fb6 6040
e1cd6e56 6041 if (type)
a28e3c7f 6042 {
e1cd6e56 6043 if (type == error_mark_node)
f376e137 6044 return error_mark_node;
a80e4195
MS
6045 if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
6046 type = TREE_TYPE (type);
5566b478 6047
2b9dc906
JM
6048 if (TYPE_P (type))
6049 type = complete_type (type);
5566b478 6050
a1774733 6051 if (TREE_CODE (type) == VOID_TYPE)
2c73f9f5
ML
6052 type = global_namespace;
6053 if (TREE_CODE (type) == NAMESPACE_DECL)
a9aedbc2 6054 {
87e3dbc9 6055 val = make_node (CPLUS_BINDING);
6ad07332 6056 flags |= LOOKUP_COMPLAIN;
52c11ef6 6057 if (!qualified_lookup_using_namespace (name, type, val, flags))
2c73f9f5 6058 return NULL_TREE;
52c11ef6 6059 val = select_decl (val, flags);
a9aedbc2 6060 }
5566b478 6061 else if (! IS_AGGR_TYPE (type)
5156628f 6062 || TREE_CODE (type) == TEMPLATE_TYPE_PARM
a1281f45 6063 || TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM
5156628f 6064 || TREE_CODE (type) == TYPENAME_TYPE)
e92cc029 6065 /* Someone else will give an error about this if needed. */
a28e3c7f 6066 val = NULL_TREE;
e1cd6e56 6067 else if (type == current_class_type)
a28e3c7f 6068 val = IDENTIFIER_CLASS_VALUE (name);
a28e3c7f 6069 else
70adf8a9
JM
6070 {
6071 val = lookup_member (type, name, 0, prefer_type);
6072 type_access_control (type, val);
e69c8072
JM
6073
6074 /* Restore the containing TYPENAME_TYPE if we looked
6075 through it before. */
6076 if (got_scope && got_scope != type
6077 && val && TREE_CODE (val) == TYPE_DECL
6078 && TREE_CODE (TREE_TYPE (val)) == TYPENAME_TYPE)
6079 TYPE_CONTEXT (TREE_TYPE (val)) = got_scope;
70adf8a9 6080 }
a28e3c7f 6081 }
e1cd6e56
MS
6082 else
6083 val = NULL_TREE;
6084
594740f3 6085 if (got_scope)
e1cd6e56 6086 goto done;
594740f3 6087 else if (got_object && val)
e1cd6e56 6088 from_obj = val;
a28e3c7f 6089 }
52c11ef6 6090 else
5b163de4
JM
6091 {
6092 flags = lookup_flags (prefer_type, namespaces_only);
6093 /* If we're not parsing, we need to complain. */
6094 flags |= LOOKUP_COMPLAIN;
6095 }
e76a2646 6096
d8f8dca1 6097 /* First, look in non-namespace scopes. */
6f1b4c42
JM
6098
6099 if (current_class_type == NULL_TREE)
6100 nonclass = 1;
6101
235f734d 6102 for (t = IDENTIFIER_BINDING (name); t; t = TREE_CHAIN (t))
d8f8dca1 6103 {
235f734d
MM
6104 tree binding;
6105
6106 if (!LOCAL_BINDING_P (t) && nonclass)
d8f8dca1
MM
6107 /* We're not looking for class-scoped bindings, so keep going. */
6108 continue;
68642fb6 6109
d8f8dca1 6110 /* If this is the kind of thing we're looking for, we're done. */
235f734d
MM
6111 if (qualify_lookup (BINDING_VALUE (t), flags))
6112 binding = BINDING_VALUE (t);
68642fb6 6113 else if ((flags & LOOKUP_PREFER_TYPES)
235f734d
MM
6114 && qualify_lookup (BINDING_TYPE (t), flags))
6115 binding = BINDING_TYPE (t);
6116 else
6117 binding = NULL_TREE;
6118
70adf8a9
JM
6119 /* Handle access control on types from enclosing or base classes. */
6120 if (binding && ! yylex
6121 && BINDING_LEVEL (t) && BINDING_LEVEL (t)->parm_flag == 2)
6122 type_access_control (BINDING_LEVEL (t)->this_class, binding);
6123
235f734d 6124 if (binding
83233dca 6125 && (!val || !IMPLICIT_TYPENAME_TYPE_DECL_P (binding)))
d8f8dca1 6126 {
235f734d
MM
6127 if (val_is_implicit_typename && !yylex)
6128 warn_about_implicit_typename_lookup (val, binding);
6129 val = binding;
68642fb6 6130 val_is_implicit_typename
83233dca 6131 = IMPLICIT_TYPENAME_TYPE_DECL_P (val);
235f734d
MM
6132 if (!val_is_implicit_typename)
6133 break;
d8f8dca1
MM
6134 }
6135 }
f181d4ae 6136
235f734d
MM
6137 /* Now lookup in namespace scopes. */
6138 if (!val || val_is_implicit_typename)
e76a2646 6139 {
2c169bab 6140 t = unqualified_namespace_lookup (name, flags, 0);
235f734d 6141 if (t)
c1def683 6142 {
235f734d
MM
6143 if (val_is_implicit_typename && !yylex)
6144 warn_about_implicit_typename_lookup (val, t);
6145 val = t;
c1def683
JM
6146 }
6147 }
6148
a28e3c7f 6149 done:
8d08fdba
MS
6150 if (val)
6151 {
c91a56d2 6152 /* This should only warn about types used in qualified-ids. */
e1cd6e56 6153 if (from_obj && from_obj != val)
5566b478 6154 {
c91a56d2
MS
6155 if (looking_for_typename && TREE_CODE (from_obj) == TYPE_DECL
6156 && TREE_CODE (val) == TYPE_DECL
6157 && TREE_TYPE (from_obj) != TREE_TYPE (val))
6158 {
8251199e 6159 cp_pedwarn ("lookup of `%D' in the scope of `%#T' (`%#T')",
c91a56d2 6160 name, got_object, TREE_TYPE (from_obj));
8251199e 6161 cp_pedwarn (" does not match lookup in the current scope (`%#T')",
c91a56d2
MS
6162 TREE_TYPE (val));
6163 }
594740f3 6164
b8b1a3c1
JM
6165 /* We don't change val to from_obj if got_object depends on
6166 template parms because that breaks implicit typename for
6167 destructor calls. */
6168 if (! uses_template_parms (got_object))
53fdbb3b 6169 val = from_obj;
5566b478 6170 }
e1cd6e56 6171
0c64a9ca
JM
6172 /* If we have a single function from a using decl, pull it out. */
6173 if (TREE_CODE (val) == OVERLOAD && ! really_overloaded_fn (val))
6174 val = OVL_FUNCTION (val);
8d08fdba 6175 }
e1cd6e56
MS
6176 else if (from_obj)
6177 val = from_obj;
8d08fdba
MS
6178
6179 return val;
6180}
6181
700f8a87
MS
6182tree
6183lookup_name_nonclass (name)
6184 tree name;
6185{
3e3f722c 6186 return lookup_name_real (name, 0, 1, 0);
700f8a87
MS
6187}
6188
2c73f9f5
ML
6189tree
6190lookup_function_nonclass (name, args)
6191 tree name;
6192 tree args;
6193{
6194 return lookup_arg_dependent (name, lookup_name_nonclass (name), args);
6195}
6196
3e3f722c
ML
6197tree
6198lookup_name_namespace_only (name)
6199 tree name;
6200{
6201 /* type-or-namespace, nonclass, namespace_only */
6202 return lookup_name_real (name, 1, 1, 1);
6203}
6204
700f8a87
MS
6205tree
6206lookup_name (name, prefer_type)
6207 tree name;
6208 int prefer_type;
6209{
3e3f722c 6210 return lookup_name_real (name, prefer_type, 0, 0);
700f8a87
MS
6211}
6212
a7d2d407
MM
6213/* Similar to `lookup_name' but look only in the innermost non-class
6214 binding level. */
8d08fdba
MS
6215
6216tree
6217lookup_name_current_level (name)
6218 tree name;
6219{
a7d2d407
MM
6220 struct binding_level *b;
6221 tree t = NULL_TREE;
8d08fdba 6222
a7d2d407
MM
6223 b = current_binding_level;
6224 while (b->parm_flag == 2)
6225 b = b->level_chain;
6226
6227 if (b->namespace_p)
8d08fdba 6228 {
5fdaba89 6229 t = IDENTIFIER_NAMESPACE_VALUE (name);
8d08fdba
MS
6230
6231 /* extern "C" function() */
6232 if (t != NULL_TREE && TREE_CODE (t) == TREE_LIST)
6233 t = TREE_VALUE (t);
6234 }
68642fb6 6235 else if (IDENTIFIER_BINDING (name)
f181d4ae 6236 && LOCAL_BINDING_P (IDENTIFIER_BINDING (name)))
8d08fdba 6237 {
a4443a08
MS
6238 while (1)
6239 {
f181d4ae
MM
6240 if (BINDING_LEVEL (IDENTIFIER_BINDING (name)) == b)
6241 return IDENTIFIER_VALUE (name);
68642fb6 6242
9ed182dc
JM
6243 if (b->keep == 2)
6244 b = b->level_chain;
6245 else
6246 break;
6247 }
6248 }
6249
6250 return t;
6251}
6252
6253/* Like lookup_name_current_level, but for types. */
6254
6255tree
6256lookup_type_current_level (name)
6257 tree name;
6258{
6259 register tree t = NULL_TREE;
6260
6261 my_friendly_assert (! current_binding_level->namespace_p, 980716);
6262
6263 if (REAL_IDENTIFIER_TYPE_VALUE (name) != NULL_TREE
6264 && REAL_IDENTIFIER_TYPE_VALUE (name) != global_type_node)
6265 {
6266 struct binding_level *b = current_binding_level;
6267 while (1)
6268 {
6269 if (purpose_member (name, b->type_shadowed))
6270 return REAL_IDENTIFIER_TYPE_VALUE (name);
a4443a08
MS
6271 if (b->keep == 2)
6272 b = b->level_chain;
6273 else
6274 break;
6275 }
8d08fdba
MS
6276 }
6277
6278 return t;
6279}
3e3f722c
ML
6280
6281void
6282begin_only_namespace_names ()
6283{
6284 only_namespace_names = 1;
6285}
6286
6287void
6288end_only_namespace_names ()
6289{
6290 only_namespace_names = 0;
6291}
8d08fdba 6292\f
8d08fdba 6293/* Push the declarations of builtin types into the namespace.
0e5921e8 6294 RID_INDEX is the index of the builtin type
8d08fdba
MS
6295 in the array RID_POINTERS. NAME is the name used when looking
6296 up the builtin type. TYPE is the _TYPE node for the builtin type. */
6297
6298static void
6299record_builtin_type (rid_index, name, type)
6300 enum rid rid_index;
d8e178a0 6301 const char *name;
8d08fdba
MS
6302 tree type;
6303{
6304 tree rname = NULL_TREE, tname = NULL_TREE;
a703fb38 6305 tree tdecl = NULL_TREE;
8d08fdba 6306
0e5921e8 6307 if ((int) rid_index < (int) RID_MAX)
8d08fdba
MS
6308 rname = ridpointers[(int) rid_index];
6309 if (name)
6310 tname = get_identifier (name);
6311
6312 TYPE_BUILT_IN (type) = 1;
68642fb6 6313
8d08fdba
MS
6314 if (tname)
6315 {
8d08fdba 6316 tdecl = pushdecl (build_decl (TYPE_DECL, tname, type));
8d08fdba 6317 set_identifier_type_value (tname, NULL_TREE);
0e5921e8 6318 if ((int) rid_index < (int) RID_MAX)
2c73f9f5
ML
6319 /* Built-in types live in the global namespace. */
6320 SET_IDENTIFIER_GLOBAL_VALUE (tname, tdecl);
8d08fdba
MS
6321 }
6322 if (rname != NULL_TREE)
6323 {
6324 if (tname != NULL_TREE)
6325 {
6326 set_identifier_type_value (rname, NULL_TREE);
2c73f9f5 6327 SET_IDENTIFIER_GLOBAL_VALUE (rname, tdecl);
8d08fdba
MS
6328 }
6329 else
6330 {
8d08fdba 6331 tdecl = pushdecl (build_decl (TYPE_DECL, rname, type));
8d08fdba
MS
6332 set_identifier_type_value (rname, NULL_TREE);
6333 }
6334 }
8d08fdba
MS
6335}
6336
eff71ab0 6337/* Record one of the standard Java types.
4d8a1dd6
MM
6338 * Declare it as having the given NAME.
6339 * If SIZE > 0, it is the size of one of the integral types;
6340 * otherwise it is the negative of the size of one of the other types. */
eff71ab0
PB
6341
6342static tree
6343record_builtin_java_type (name, size)
d8e178a0 6344 const char *name;
eff71ab0
PB
6345 int size;
6346{
6347 tree type, decl;
6348 if (size > 0)
6349 type = make_signed_type (size);
6350 else if (size > -32)
6351 { /* "__java_char" or ""__java_boolean". */
6352 type = make_unsigned_type (-size);
6353 /*if (size == -1) TREE_SET_CODE (type, BOOLEAN_TYPE);*/
6354 }
6355 else
6356 { /* "__java_float" or ""__java_double". */
6357 type = make_node (REAL_TYPE);
6358 TYPE_PRECISION (type) = - size;
6359 layout_type (type);
6360 }
0e5921e8 6361 record_builtin_type (RID_MAX, name, type);
eff71ab0 6362 decl = TYPE_NAME (type);
e229f2cd
PB
6363
6364 /* Suppress generate debug symbol entries for these types,
6365 since for normal C++ they are just clutter.
6366 However, push_lang_context undoes this if extern "Java" is seen. */
eff71ab0 6367 DECL_IGNORED_P (decl) = 1;
e229f2cd 6368
eff71ab0
PB
6369 TYPE_FOR_JAVA (type) = 1;
6370 return type;
6371}
6372
036407f7
ML
6373/* Push a type into the namespace so that the back-ends ignore it. */
6374
6375static void
6376record_unknown_type (type, name)
6377 tree type;
d8e178a0 6378 const char *name;
036407f7
ML
6379{
6380 tree decl = pushdecl (build_decl (TYPE_DECL, get_identifier (name), type));
6381 /* Make sure the "unknown type" typedecl gets ignored for debug info. */
6382 DECL_IGNORED_P (decl) = 1;
6383 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
6384 TYPE_SIZE (type) = TYPE_SIZE (void_type_node);
6385 TYPE_ALIGN (type) = 1;
11cf4d18 6386 TYPE_USER_ALIGN (type) = 0;
036407f7 6387 TYPE_MODE (type) = TYPE_MODE (void_type_node);
68642fb6 6388}
036407f7 6389
d43829f9
MM
6390/* An string for which we should create an IDENTIFIER_NODE at
6391 startup. */
6392
6393typedef struct predefined_identifier
6394{
6395 /* The name of the identifier. */
6396 const char *name;
6397 /* The place where the IDENTIFIER_NODE should be stored. */
6398 tree *node;
298d6f60
MM
6399 /* Non-zero if this is the name of a constructor or destructor. */
6400 int ctor_or_dtor_p;
d43829f9
MM
6401} predefined_identifier;
6402
6403/* Create all the predefined identifiers. */
6404
6405static void
6406initialize_predefined_identifiers ()
6407{
6408 struct predefined_identifier *pid;
6409
6410 /* A table of identifiers to create at startup. */
6411 static predefined_identifier predefined_identifiers[] = {
298d6f60
MM
6412 { "C++", &lang_name_cplusplus, 0 },
6413 { "C", &lang_name_c, 0 },
6414 { "Java", &lang_name_java, 0 },
6415 { CTOR_NAME, &ctor_identifier, 1 },
6416 { "__base_ctor", &base_ctor_identifier, 1 },
6417 { "__comp_ctor", &complete_ctor_identifier, 1 },
6418 { DTOR_NAME, &dtor_identifier, 1 },
6419 { "__comp_dtor", &complete_dtor_identifier, 1 },
6420 { "__base_dtor", &base_dtor_identifier, 1 },
6421 { "__deleting_dtor", &deleting_dtor_identifier, 1 },
6422 { VTABLE_DELTA2_NAME, &delta2_identifier, 0 },
6423 { VTABLE_DELTA_NAME, &delta_identifier, 0 },
6424 { IN_CHARGE_NAME, &in_charge_identifier, 0 },
6425 { VTABLE_INDEX_NAME, &index_identifier, 0 },
6426 { "nelts", &nelts_identifier, 0 },
6427 { THIS_NAME, &this_identifier, 0 },
6428 { VTABLE_PFN_NAME, &pfn_identifier, 0 },
6429 { "__pfn_or_delta2", &pfn_or_delta2_identifier, 0 },
6430 { "_vptr", &vptr_identifier, 0 },
6431 { "__cp_push_exception", &cp_push_exception_identifier, 0 },
3ec6bad3 6432 { "__vtt_parm", &vtt_parm_identifier, 0 },
1f6e1acc 6433 { "std", &std_identifier, 0 },
298d6f60 6434 { NULL, NULL, 0 }
d43829f9
MM
6435 };
6436
6437 for (pid = predefined_identifiers; pid->name; ++pid)
298d6f60
MM
6438 {
6439 *pid->node = get_identifier (pid->name);
6440 if (pid->ctor_or_dtor_p)
6441 IDENTIFIER_CTOR_OR_DTOR_P (*pid->node) = 1;
6442 }
d43829f9
MM
6443}
6444
8d08fdba
MS
6445/* Create the predefined scalar types of C,
6446 and some nodes representing standard constants (0, 1, (void *)0).
6447 Initialize the global binding level.
6448 Make definitions for built-in primitive functions. */
6449
6450void
6451init_decl_processing ()
6452{
8d08fdba 6453 tree fields[20];
8d08fdba 6454 int wchar_type_size;
8d08fdba
MS
6455 tree array_domain_type;
6456
5bb2a292
MM
6457 /* Check to see that the user did not specify an invalid combination
6458 of command-line options. */
6459 if (flag_new_abi && !flag_vtable_thunks)
6460 fatal ("the new ABI requires vtable thunks");
6461
d43829f9
MM
6462 /* Create all the identifiers we need. */
6463 initialize_predefined_identifiers ();
8d08fdba 6464
99dccabc
MM
6465 /* Let the back-end now how to save and restore language-specific
6466 per-function globals. */
a8f73d4b
MM
6467 init_lang_status = &push_cp_function_context;
6468 free_lang_status = &pop_cp_function_context;
b4b8bee7 6469 mark_lang_status = &mark_cp_function_context;
99dccabc 6470
fc6af6e3
RH
6471 cp_parse_init ();
6472 init_decl2 ();
9cd64686 6473 init_pt ();
fc6af6e3 6474
9cd64686
MM
6475 /* Create the global variables. */
6476 push_to_top_level ();
8012c983 6477
2c73f9f5 6478 /* Enter the global namespace. */
30394414 6479 my_friendly_assert (global_namespace == NULL_TREE, 375);
30394414
JM
6480 push_namespace (get_identifier ("::"));
6481 global_namespace = current_namespace;
6482 current_lang_name = NULL_TREE;
6483
bccd95ae 6484 /* Adjust various flags based on command-line settings. */
2642b9bf
JM
6485 if (! flag_permissive && ! pedantic)
6486 flag_pedantic_errors = 1;
bccd95ae
MM
6487 if (!flag_no_inline)
6488 flag_inline_trees = 1;
830fcda8 6489
8d08fdba
MS
6490 /* Initially, C. */
6491 current_lang_name = lang_name_c;
6492
6493 current_function_decl = NULL_TREE;
8d08fdba
MS
6494 current_binding_level = NULL_BINDING_LEVEL;
6495 free_binding_level = NULL_BINDING_LEVEL;
6496
81b3411c
BS
6497 build_common_tree_nodes (flag_signed_char);
6498
8d08fdba
MS
6499 error_mark_list = build_tree_list (error_mark_node, error_mark_node);
6500 TREE_TYPE (error_mark_list) = error_mark_node;
6501
a28e3c7f
MS
6502 /* Make the binding_level structure for global names. */
6503 pushlevel (0);
8d08fdba 6504 global_binding_level = current_binding_level;
2c73f9f5
ML
6505 /* The global level is the namespace level of ::. */
6506 NAMESPACE_LEVEL (global_namespace) = global_binding_level;
6507 declare_namespace_level ();
8d08fdba 6508
8d08fdba 6509 /* Define `int' and `char' first so that dbx will output them first. */
8d08fdba 6510 record_builtin_type (RID_INT, NULL_PTR, integer_type_node);
8d08fdba
MS
6511 record_builtin_type (RID_CHAR, "char", char_type_node);
6512
45075bf3
NS
6513 /* `signed' is the same as `int' */
6514 record_builtin_type (RID_SIGNED, NULL_PTR, integer_type_node);
8d08fdba 6515 record_builtin_type (RID_LONG, "long int", long_integer_type_node);
8d08fdba 6516 record_builtin_type (RID_UNSIGNED, "unsigned int", unsigned_type_node);
0e5921e8 6517 record_builtin_type (RID_MAX, "long unsigned int",
f09f1de5 6518 long_unsigned_type_node);
0e5921e8
ZW
6519 record_builtin_type (RID_MAX, "unsigned long", long_unsigned_type_node);
6520 record_builtin_type (RID_MAX, "long long int",
f09f1de5 6521 long_long_integer_type_node);
0e5921e8 6522 record_builtin_type (RID_MAX, "long long unsigned int",
8d08fdba 6523 long_long_unsigned_type_node);
0e5921e8 6524 record_builtin_type (RID_MAX, "long long unsigned",
8d08fdba 6525 long_long_unsigned_type_node);
5156628f 6526 record_builtin_type (RID_SHORT, "short int", short_integer_type_node);
0e5921e8 6527 record_builtin_type (RID_MAX, "short unsigned int",
f09f1de5 6528 short_unsigned_type_node);
0e5921e8 6529 record_builtin_type (RID_MAX, "unsigned short",
f09f1de5 6530 short_unsigned_type_node);
5156628f 6531
8d08fdba
MS
6532 ptrdiff_type_node
6533 = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (PTRDIFF_TYPE)));
6534
8d08fdba 6535 /* Define both `signed char' and `unsigned char'. */
0e5921e8
ZW
6536 record_builtin_type (RID_MAX, "signed char", signed_char_type_node);
6537 record_builtin_type (RID_MAX, "unsigned char", unsigned_char_type_node);
8d08fdba 6538
81b3411c
BS
6539 /* `unsigned long' is the standard type for sizeof.
6540 Note that stddef.h uses `unsigned long',
6541 and this must agree, even if long and int are the same size. */
6542 set_sizetype
6543 (TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (SIZE_TYPE))));
6544
835f9b4d
GRK
6545 /* Create the widest literal types. */
6546 widest_integer_literal_type_node = make_signed_type (HOST_BITS_PER_WIDE_INT * 2);
68642fb6 6547 pushdecl (build_decl (TYPE_DECL, NULL_TREE,
835f9b4d
GRK
6548 widest_integer_literal_type_node));
6549
6550 widest_unsigned_literal_type_node = make_unsigned_type (HOST_BITS_PER_WIDE_INT * 2);
68642fb6 6551 pushdecl (build_decl (TYPE_DECL, NULL_TREE,
835f9b4d
GRK
6552 widest_unsigned_literal_type_node));
6553
8d08fdba 6554 /* These are types that type_for_size and type_for_mode use. */
8d08fdba 6555 pushdecl (build_decl (TYPE_DECL, NULL_TREE, intQI_type_node));
8d08fdba 6556 pushdecl (build_decl (TYPE_DECL, NULL_TREE, intHI_type_node));
8d08fdba 6557 pushdecl (build_decl (TYPE_DECL, NULL_TREE, intSI_type_node));
8d08fdba 6558 pushdecl (build_decl (TYPE_DECL, NULL_TREE, intDI_type_node));
946dc1c8 6559#if HOST_BITS_PER_WIDE_INT >= 64
5ebcdddb 6560 pushdecl (build_decl (TYPE_DECL, get_identifier ("__int128_t"), intTI_type_node));
946dc1c8 6561#endif
8d08fdba 6562 pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intQI_type_node));
8d08fdba 6563 pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intHI_type_node));
8d08fdba 6564 pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intSI_type_node));
8d08fdba 6565 pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intDI_type_node));
946dc1c8 6566#if HOST_BITS_PER_WIDE_INT >= 64
5ebcdddb 6567 pushdecl (build_decl (TYPE_DECL, get_identifier ("__uint128_t"), unsigned_intTI_type_node));
946dc1c8 6568#endif
8d08fdba 6569
81b3411c 6570 build_common_tree_nodes_2 (flag_short_double);
37c46b43 6571
4d8a1dd6
MM
6572 java_byte_type_node = record_builtin_java_type ("__java_byte", 8);
6573 java_short_type_node = record_builtin_java_type ("__java_short", 16);
6574 java_int_type_node = record_builtin_java_type ("__java_int", 32);
6575 java_long_type_node = record_builtin_java_type ("__java_long", 64);
6576 java_float_type_node = record_builtin_java_type ("__java_float", -32);
6577 java_double_type_node = record_builtin_java_type ("__java_double", -64);
6578 java_char_type_node = record_builtin_java_type ("__java_char", -16);
6579 java_boolean_type_node = record_builtin_java_type ("__java_boolean", -1);
eff71ab0 6580
8d08fdba
MS
6581 integer_two_node = build_int_2 (2, 0);
6582 TREE_TYPE (integer_two_node) = integer_type_node;
6583 integer_three_node = build_int_2 (3, 0);
6584 TREE_TYPE (integer_three_node) = integer_type_node;
8d08fdba 6585
255512c1
JM
6586 boolean_type_node = make_unsigned_type (BOOL_TYPE_SIZE);
6587 TREE_SET_CODE (boolean_type_node, BOOLEAN_TYPE);
c1ea6a0b
BK
6588 TYPE_MAX_VALUE (boolean_type_node) = build_int_2 (1, 0);
6589 TREE_TYPE (TYPE_MAX_VALUE (boolean_type_node)) = boolean_type_node;
6590 TYPE_PRECISION (boolean_type_node) = 1;
255512c1
JM
6591 record_builtin_type (RID_BOOL, "bool", boolean_type_node);
6592 boolean_false_node = build_int_2 (0, 0);
6593 TREE_TYPE (boolean_false_node) = boolean_type_node;
6594 boolean_true_node = build_int_2 (1, 0);
6595 TREE_TYPE (boolean_true_node) = boolean_type_node;
2986ae00 6596
ff0bee63
JM
6597 signed_size_zero_node = build_int_2 (0, 0);
6598 record_builtin_type (RID_FLOAT, NULL_PTR, float_type_node);
81b3411c 6599 record_builtin_type (RID_DOUBLE, NULL_PTR, double_type_node);
0e5921e8 6600 record_builtin_type (RID_MAX, "long double", long_double_type_node);
81b3411c
BS
6601
6602 pushdecl (build_decl (TYPE_DECL, get_identifier ("complex int"),
6603 complex_integer_type_node));
6604 pushdecl (build_decl (TYPE_DECL, get_identifier ("complex float"),
6605 complex_float_type_node));
6606 pushdecl (build_decl (TYPE_DECL, get_identifier ("complex double"),
6607 complex_double_type_node));
6608 pushdecl (build_decl (TYPE_DECL, get_identifier ("complex long double"),
6609 complex_long_double_type_node));
8d08fdba 6610
e92cc029
MS
6611 TREE_TYPE (signed_size_zero_node) = make_signed_type (TYPE_PRECISION (sizetype));
6612
8d08fdba 6613 record_builtin_type (RID_VOID, NULL_PTR, void_type_node);
8d08fdba
MS
6614 void_list_node = build_tree_list (NULL_TREE, void_type_node);
6615 TREE_PARMLIST (void_list_node) = 1;
6616
8d08fdba 6617 string_type_node = build_pointer_type (char_type_node);
beb53fb8 6618 const_string_type_node
68642fb6 6619 = build_pointer_type (build_qualified_type (char_type_node,
91063b51 6620 TYPE_QUAL_CONST));
4cc1d462 6621 empty_except_spec = build_tree_list (NULL_TREE, NULL_TREE);
6b5fbb55 6622#if 0
0e5921e8 6623 record_builtin_type (RID_MAX, NULL_PTR, string_type_node);
6b5fbb55 6624#endif
8d08fdba
MS
6625
6626 /* Make a type to be the domain of a few array types
6627 whose domains don't really matter.
2ce07e2d 6628 200 is small enough that it always fits in size_t. */
8d08fdba
MS
6629 array_domain_type = build_index_type (build_int_2 (200, 0));
6630
2c73f9f5 6631 /* Make a type for arrays of characters.
8d08fdba
MS
6632 With luck nothing will ever really depend on the length of this
6633 array type. */
6634 char_array_type_node
6635 = build_array_type (char_type_node, array_domain_type);
3bdf5ad1 6636
8d08fdba
MS
6637 /* Likewise for arrays of ints. */
6638 int_array_type_node
6639 = build_array_type (integer_type_node, array_domain_type);
6640
c7e266a6
MM
6641 if (flag_new_abi)
6642 delta_type_node = ptrdiff_type_node;
6643 else if (flag_huge_objects)
7f4edbcb
BS
6644 delta_type_node = long_integer_type_node;
6645 else
6646 delta_type_node = short_integer_type_node;
6647
c7e266a6
MM
6648 if (flag_new_abi)
6649 vtable_index_type = ptrdiff_type_node;
6650 else
6651 vtable_index_type = delta_type_node;
6652
8d08fdba
MS
6653 default_function_type
6654 = build_function_type (integer_type_node, NULL_TREE);
8d08fdba
MS
6655
6656 ptr_type_node = build_pointer_type (void_type_node);
beb53fb8 6657 const_ptr_type_node
91063b51 6658 = build_pointer_type (build_qualified_type (void_type_node,
7f4edbcb 6659 TYPE_QUAL_CONST));
3ec6bad3 6660 vtt_parm_type = build_pointer_type (const_ptr_type_node);
7f4edbcb 6661 c_common_nodes_and_builtins (1, flag_no_builtin, flag_no_nonansi_builtin);
356955cf 6662 lang_type_promotes_to = convert_type_from_ellipsis;
7f4edbcb 6663
824b9a4c 6664 void_ftype_ptr
4cc1d462 6665 = build_exception_variant (void_ftype_ptr, empty_except_spec);
8d08fdba 6666
8d08fdba
MS
6667 /* C++ extensions */
6668
6669 unknown_type_node = make_node (UNKNOWN_TYPE);
036407f7
ML
6670 record_unknown_type (unknown_type_node, "unknown type");
6671
8d08fdba
MS
6672 /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node. */
6673 TREE_TYPE (unknown_type_node) = unknown_type_node;
a6967cc0 6674
03d0f4af 6675 TREE_TYPE (null_node) = type_for_size (POINTER_SIZE, 0);
a6967cc0
JM
6676
6677 /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
6678 result. */
8d08fdba
MS
6679 TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
6680 TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
6681
e92cc029 6682 /* This is special for C++ so functions can be overloaded. */
5096c664
JM
6683 wchar_type_node = get_identifier (flag_short_wchar
6684 ? "short unsigned int"
6685 : WCHAR_TYPE);
6686 wchar_type_node = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (wchar_type_node));
8d08fdba 6687 wchar_type_size = TYPE_PRECISION (wchar_type_node);
7b019c19
MM
6688 if (TREE_UNSIGNED (wchar_type_node))
6689 wchar_type_node = make_signed_type (wchar_type_size);
6690 else
6691 wchar_type_node = make_unsigned_type (wchar_type_size);
8d08fdba
MS
6692 record_builtin_type (RID_WCHAR, "__wchar_t", wchar_type_node);
6693
f376e137
MS
6694 /* Artificial declaration of wchar_t -- can be bashed */
6695 wchar_decl_node = build_decl (TYPE_DECL, get_identifier ("wchar_t"),
6696 wchar_type_node);
6697 pushdecl (wchar_decl_node);
6698
8d08fdba
MS
6699 /* This is for wide string constants. */
6700 wchar_array_type_node
6701 = build_array_type (wchar_type_node, array_domain_type);
6702
8926095f 6703 if (flag_vtable_thunks)
700f8a87
MS
6704 {
6705 /* Make sure we get a unique function type, so we can give
6706 its pointer type a name. (This wins for gdb.) */
6707 tree vfunc_type = make_node (FUNCTION_TYPE);
6708 TREE_TYPE (vfunc_type) = integer_type_node;
6709 TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
6710 layout_type (vfunc_type);
6711
6712 vtable_entry_type = build_pointer_type (vfunc_type);
6713 }
8926095f 6714 else
700f8a87 6715 {
33848bb0 6716 vtable_entry_type = make_aggr_type (RECORD_TYPE);
721c3b42
MM
6717 fields[0] = build_decl (FIELD_DECL, delta_identifier,
6718 delta_type_node);
6719 fields[1] = build_decl (FIELD_DECL, index_identifier,
6720 delta_type_node);
6721 fields[2] = build_decl (FIELD_DECL, pfn_identifier,
6722 ptr_type_node);
700f8a87
MS
6723 finish_builtin_type (vtable_entry_type, VTBL_PTR_TYPE, fields, 2,
6724 double_type_node);
6725
6726 /* Make this part of an invisible union. */
6727 fields[3] = copy_node (fields[2]);
6728 TREE_TYPE (fields[3]) = delta_type_node;
6729 DECL_NAME (fields[3]) = delta2_identifier;
6730 DECL_MODE (fields[3]) = TYPE_MODE (delta_type_node);
6731 DECL_SIZE (fields[3]) = TYPE_SIZE (delta_type_node);
06ceef4e 6732 DECL_SIZE_UNIT (fields[3]) = TYPE_SIZE_UNIT (delta_type_node);
700f8a87
MS
6733 TREE_UNSIGNED (fields[3]) = 0;
6734 TREE_CHAIN (fields[2]) = fields[3];
91063b51
MM
6735 vtable_entry_type = build_qualified_type (vtable_entry_type,
6736 TYPE_QUAL_CONST);
700f8a87 6737 }
0e5921e8 6738 record_builtin_type (RID_MAX, VTBL_PTR_TYPE, vtable_entry_type);
8d08fdba 6739
8d08fdba 6740 vtbl_type_node
52bf7d5d 6741 = build_cplus_array_type (vtable_entry_type, NULL_TREE);
8d08fdba 6742 layout_type (vtbl_type_node);
91063b51 6743 vtbl_type_node = build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
0e5921e8 6744 record_builtin_type (RID_MAX, NULL_PTR, vtbl_type_node);
849da744
MM
6745 vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
6746 layout_type (vtbl_ptr_type_node);
0e5921e8 6747 record_builtin_type (RID_MAX, NULL_PTR, vtbl_ptr_type_node);
8d08fdba 6748
68642fb6 6749 std_node = build_decl (NAMESPACE_DECL,
1f6e1acc
AS
6750 flag_honor_std
6751 ? get_identifier ("fake std") : std_identifier,
6633d636
MS
6752 void_type_node);
6753 pushdecl (std_node);
2854d3c6
NS
6754
6755 if (flag_new_abi)
6756 {
6757 push_namespace (get_identifier ("__cxxabiv1"));
6758 abi_node = current_namespace;
6759 pop_namespace ();
6760 }
6633d636 6761
2c73f9f5 6762 global_type_node = make_node (LANG_TYPE);
036407f7 6763 record_unknown_type (global_type_node, "global type");
2c73f9f5 6764
db5ae43f
MS
6765 /* Now, C++. */
6766 current_lang_name = lang_name_cplusplus;
8d08fdba 6767
ced78d8b 6768 {
2c73f9f5
ML
6769 tree bad_alloc_type_node, newtype, deltype;
6770 if (flag_honor_std)
6771 push_namespace (get_identifier ("std"));
6772 bad_alloc_type_node = xref_tag
ca107ded 6773 (class_type_node, get_identifier ("bad_alloc"), 1);
2c73f9f5
ML
6774 if (flag_honor_std)
6775 pop_namespace ();
6776 newtype = build_exception_variant
4cc1d462
NS
6777 (ptr_ftype_sizetype, add_exception_specifier (NULL_TREE, bad_alloc_type_node, -1));
6778 deltype = build_exception_variant (void_ftype_ptr, empty_except_spec);
596ea4e5
AS
6779 push_cp_library_fn (NEW_EXPR, newtype);
6780 push_cp_library_fn (VEC_NEW_EXPR, newtype);
6781 global_delete_fndecl = push_cp_library_fn (DELETE_EXPR, deltype);
6782 push_cp_library_fn (VEC_DELETE_EXPR, deltype);
ced78d8b 6783 }
8d08fdba
MS
6784
6785 abort_fndecl
0c11ada6 6786 = build_library_fn_ptr ("__pure_virtual", void_ftype);
8d08fdba 6787
8d08fdba
MS
6788 /* Perform other language dependent initializations. */
6789 init_class_processing ();
6790 init_init_processing ();
6791 init_search_processing ();
db48b831 6792 init_rtti_processing ();
8d08fdba 6793
6467930b 6794 if (flag_exceptions)
8d2733ca 6795 init_exception_processing ();
8d08fdba
MS
6796 if (flag_no_inline)
6797 {
6798 flag_inline_functions = 0;
8d08fdba 6799 }
9e9ff709 6800
7fcdf4c2 6801 if (! supports_one_only ())
72b7eeff 6802 flag_weak = 0;
8d08fdba
MS
6803
6804 /* Create the global bindings for __FUNCTION__ and __PRETTY_FUNCTION__. */
63ad61ed
ZW
6805 function_id_node = get_identifier ("__FUNCTION__");
6806 pretty_function_id_node = get_identifier ("__PRETTY_FUNCTION__");
6807 func_id_node = get_identifier ("__func__");
6808
2ce07e2d 6809 make_fname_decl = cp_make_fname_decl;
8d08fdba
MS
6810 declare_function_name ();
6811
6812 /* Prepare to check format strings against argument lists. */
6813 init_function_format_info ();
e9a25f70
JL
6814
6815 /* Show we use EH for cleanups. */
6816 using_eh_for_cleanups ();
62c154ed 6817
e5dc5fb2 6818 valid_lang_attribute = cp_valid_lang_attribute;
d9cf7c82
JM
6819
6820 /* Maintain consistency. Perhaps we should just complain if they
6821 say -fwritable-strings? */
6822 if (flag_writable_strings)
6823 flag_const_strings = 0;
fc6af6e3
RH
6824
6825 /* Add GC roots for all of our global variables. */
6826 ggc_add_tree_root (c_global_trees, sizeof c_global_trees / sizeof(tree));
6827 ggc_add_tree_root (cp_global_trees, sizeof cp_global_trees / sizeof(tree));
fc6af6e3
RH
6828 ggc_add_tree_root (&integer_three_node, 1);
6829 ggc_add_tree_root (&integer_two_node, 1);
fc6af6e3 6830 ggc_add_tree_root (&signed_size_zero_node, 1);
fc6af6e3
RH
6831 ggc_add_tree_root (&size_one_node, 1);
6832 ggc_add_tree_root (&size_zero_node, 1);
fc6af6e3
RH
6833 ggc_add_root (&global_binding_level, 1, sizeof global_binding_level,
6834 mark_binding_level);
9cd64686 6835 ggc_add_root (&scope_chain, 1, sizeof scope_chain, &mark_saved_scope);
fc6af6e3
RH
6836 ggc_add_tree_root (&static_ctors, 1);
6837 ggc_add_tree_root (&static_dtors, 1);
9cd64686 6838 ggc_add_tree_root (&lastiddecl, 1);
fc6af6e3 6839
fc6af6e3
RH
6840 ggc_add_tree_root (&last_function_parm_tags, 1);
6841 ggc_add_tree_root (&current_function_return_value, 1);
fc6af6e3 6842 ggc_add_tree_root (&current_function_parm_tags, 1);
9cd64686 6843 ggc_add_tree_root (&last_function_parms, 1);
fc6af6e3 6844 ggc_add_tree_root (&error_mark_list, 1);
9cd64686 6845
fc6af6e3 6846 ggc_add_tree_root (&global_namespace, 1);
fc6af6e3
RH
6847 ggc_add_tree_root (&global_type_node, 1);
6848 ggc_add_tree_root (&anonymous_namespace_name, 1);
9cd64686
MM
6849
6850 ggc_add_tree_root (&got_object, 1);
6851 ggc_add_tree_root (&got_scope, 1);
6852
6853 ggc_add_tree_root (&current_lang_name, 1);
6854 ggc_add_tree_root (&static_aggregates, 1);
62c154ed
JM
6855}
6856
2ce07e2d
NS
6857/* Create the VAR_DECL for __FUNCTION__ etc. ID is the name to give the
6858 decl, NAME is the initialization string and TYPE_DEP indicates whether
6859 NAME depended on the type of the function. We make use of that to detect
6860 __PRETTY_FUNCTION__ inside a template fn. Because we build a tree for
6861 the function before emitting any of it, we don't need to treat the
6862 VAR_DECL specially. We can decide whether to emit it later, if it was
6863 used. */
6864
6865static tree
6866cp_make_fname_decl (id, name, type_dep)
6867 tree id;
6868 const char *name;
6869 int type_dep;
6870{
6871 tree decl, type, init;
6872 size_t length = strlen (name);
6873 tree domain = NULL_TREE;
6874
6875 if (!processing_template_decl)
6876 type_dep = 0;
6877 if (!type_dep)
6878 domain = build_index_type (build_int_2 (length, 0));
6879
6880 type = build_cplus_array_type
6881 (build_qualified_type (char_type_node, TYPE_QUAL_CONST),
6882 domain);
6883
6dfbb909 6884 decl = build_decl (VAR_DECL, id, type);
2ce07e2d
NS
6885 TREE_STATIC (decl) = 1;
6886 TREE_READONLY (decl) = 1;
6887 DECL_SOURCE_LINE (decl) = 0;
6888 DECL_ARTIFICIAL (decl) = 1;
6889 DECL_IN_SYSTEM_HEADER (decl) = 1;
6890 pushdecl (decl);
6891 if (processing_template_decl)
6892 decl = push_template_decl (decl);
6893 if (type_dep)
6894 {
6895 init = build (FUNCTION_NAME, type);
6896 DECL_PRETTY_FUNCTION_P (decl) = 1;
6897 }
6898 else
6899 {
6900 init = build_string (length + 1, name);
6901 TREE_TYPE (init) = type;
6902 }
6903 DECL_INITIAL (decl) = init;
6904 cp_finish_decl (decl, init, NULL_TREE, LOOKUP_ONLYCONVERTING);
6905
6906 /* We will have to make sure we only emit this, if it is actually used. */
6907 return decl;
6908}
6909
0c11ada6
JM
6910/* Entry point for the benefit of c_common_nodes_and_builtins.
6911
6912 Make a definition for a builtin function named NAME and whose data type
8d08fdba 6913 is TYPE. TYPE should be a function type with argument types.
8d08fdba 6914
0c11ada6
JM
6915 CLASS and CODE tell later passes how to compile calls to this function.
6916 See tree.h for possible values.
6917
6918 If LIBNAME is nonzero, use that for DECL_ASSEMBLER_NAME,
8d08fdba
MS
6919 the name to be called if we can't opencode the function. */
6920
6921tree
0c11ada6 6922builtin_function (name, type, code, class, libname)
d8e178a0 6923 const char *name;
8d08fdba 6924 tree type;
0c11ada6
JM
6925 int code;
6926 enum built_in_class class;
6927 const char *libname;
8d08fdba 6928{
596ea4e5 6929 tree decl = build_library_fn_1 (get_identifier (name), ERROR_MARK, type);
0c11ada6
JM
6930 DECL_BUILT_IN_CLASS (decl) = class;
6931 DECL_FUNCTION_CODE (decl) = code;
12a22e76 6932
2c73f9f5 6933 my_friendly_assert (DECL_CONTEXT (decl) == NULL_TREE, 392);
2c73f9f5 6934
8d08fdba
MS
6935 /* Since `pushdecl' relies on DECL_ASSEMBLER_NAME instead of DECL_NAME,
6936 we cannot change DECL_ASSEMBLER_NAME until we have installed this
6937 function in the namespace. */
0c11ada6
JM
6938 pushdecl (decl);
6939 if (libname)
6940 DECL_ASSEMBLER_NAME (decl) = get_identifier (libname);
8d08fdba 6941 make_function_rtl (decl);
935d1834
ZW
6942
6943 /* Warn if a function in the namespace for users
6944 is used without an occasion to consider it declared. */
6945 if (name[0] != '_' || name[1] != '_')
6946 DECL_ANTICIPATED (decl) = 1;
6947
8d08fdba
MS
6948 return decl;
6949}
7f4edbcb 6950
0c11ada6
JM
6951/* Generate a FUNCTION_DECL with the typical flags for a runtime library
6952 function. Not called directly. */
6953
6954static tree
596ea4e5 6955build_library_fn_1 (name, operator_code, type)
0c11ada6 6956 tree name;
596ea4e5 6957 enum tree_code operator_code;
0c11ada6
JM
6958 tree type;
6959{
6960 tree fn = build_lang_decl (FUNCTION_DECL, name, type);
6961 DECL_EXTERNAL (fn) = 1;
6962 TREE_PUBLIC (fn) = 1;
6963 DECL_ARTIFICIAL (fn) = 1;
6964 TREE_NOTHROW (fn) = 1;
596ea4e5 6965 SET_OVERLOADED_OPERATOR_CODE (fn, operator_code);
0c11ada6
JM
6966 return fn;
6967}
c2a37c55 6968
0c11ada6
JM
6969/* Returns the _DECL for a library function with C linkage.
6970 We assume that such functions never throw; if this is incorrect,
6971 callers should unset TREE_NOTHROW. */
c2a37c55 6972
7f4edbcb 6973tree
0c11ada6
JM
6974build_library_fn (name, type)
6975 tree name;
6976 tree type;
6977{
596ea4e5 6978 tree fn = build_library_fn_1 (name, ERROR_MARK, type);
0c11ada6
JM
6979 make_function_rtl (fn);
6980 return fn;
6981}
6982
6983/* Returns the _DECL for a library function with C++ linkage. */
6984
596ea4e5
AS
6985static tree
6986build_cp_library_fn (name, operator_code, type)
0c11ada6 6987 tree name;
596ea4e5 6988 enum tree_code operator_code;
0c11ada6
JM
6989 tree type;
6990{
596ea4e5 6991 tree fn = build_library_fn_1 (name, operator_code, type);
0c11ada6 6992 TREE_NOTHROW (fn) = TYPE_NOTHROW_P (type);
6bbf1598 6993 DECL_CONTEXT (fn) = FROB_CONTEXT (current_namespace);
0c11ada6
JM
6994 set_mangled_name_for_decl (fn);
6995 make_function_rtl (fn);
6996 return fn;
6997}
6998
6999/* Like build_library_fn, but takes a C string instead of an
7000 IDENTIFIER_NODE. */
7001
7002tree
7003build_library_fn_ptr (name, type)
7f4edbcb
BS
7004 const char *name;
7005 tree type;
7f4edbcb 7006{
0c11ada6
JM
7007 return build_library_fn (get_identifier (name), type);
7008}
7009
7010/* Like build_cp_library_fn, but takes a C string instead of an
7011 IDENTIFIER_NODE. */
7012
7013tree
7014build_cp_library_fn_ptr (name, type)
7015 const char *name;
7016 tree type;
7017{
596ea4e5 7018 return build_cp_library_fn (get_identifier (name), ERROR_MARK, type);
0c11ada6
JM
7019}
7020
7021/* Like build_library_fn, but also pushes the function so that we will
7022 be able to find it via IDENTIFIER_GLOBAL_VALUE. */
7023
7024tree
7025push_library_fn (name, type)
7026 tree name, type;
7027{
7028 tree fn = build_library_fn (name, type);
7029 pushdecl_top_level (fn);
7030 return fn;
7031}
7032
7033/* Like build_cp_library_fn, but also pushes the function so that it
7034 will be found by normal lookup. */
7035
596ea4e5
AS
7036static tree
7037push_cp_library_fn (operator_code, type)
7038 enum tree_code operator_code;
0c11ada6
JM
7039 tree type;
7040{
596ea4e5
AS
7041 tree fn = build_cp_library_fn (ansi_opname (operator_code),
7042 operator_code,
7043 type);
0c11ada6
JM
7044 pushdecl (fn);
7045 return fn;
7046}
7047
7048/* Like push_library_fn, but takes a TREE_LIST of parm types rather than
7049 a FUNCTION_TYPE. */
7050
7051tree
7052push_void_library_fn (name, parmtypes)
7053 tree name, parmtypes;
7054{
7055 tree type = build_function_type (void_type_node, parmtypes);
7056 return push_library_fn (name, type);
7057}
7058
cf74fb86 7059/* Like push_library_fn, but also note that this function throws
0c11ada6
JM
7060 and does not return. Used for __throw_foo and the like. */
7061
7062tree
cf74fb86
JM
7063push_throw_library_fn (name, type)
7064 tree name, type;
0c11ada6 7065{
cf74fb86 7066 tree fn = push_library_fn (name, type);
0c11ada6
JM
7067 TREE_THIS_VOLATILE (fn) = 1;
7068 TREE_NOTHROW (fn) = 0;
7069 return fn;
7f4edbcb 7070}
8d08fdba 7071\f
61a127b3
MM
7072/* When we call finish_struct for an anonymous union, we create
7073 default copy constructors and such. But, an anonymous union
7074 shouldn't have such things; this function undoes the damage to the
7075 anonymous union type T.
7076
7077 (The reason that we create the synthesized methods is that we don't
7078 distinguish `union { int i; }' from `typedef union { int i; } U'.
7079 The first is an anonymous union; the second is just an ordinary
7080 union type.) */
7081
7082void
6bdb8141 7083fixup_anonymous_aggr (t)
61a127b3
MM
7084 tree t;
7085{
7086 tree *q;
7087
7088 /* Wipe out memory of synthesized methods */
7089 TYPE_HAS_CONSTRUCTOR (t) = 0;
7090 TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
7091 TYPE_HAS_INIT_REF (t) = 0;
7092 TYPE_HAS_CONST_INIT_REF (t) = 0;
7093 TYPE_HAS_ASSIGN_REF (t) = 0;
61a127b3
MM
7094 TYPE_HAS_CONST_ASSIGN_REF (t) = 0;
7095
7096 /* Splice the implicitly generated functions out of the TYPE_METHODS
7097 list. */
7098 q = &TYPE_METHODS (t);
7099 while (*q)
7100 {
7101 if (DECL_ARTIFICIAL (*q))
7102 *q = TREE_CHAIN (*q);
7103 else
7104 q = &TREE_CHAIN (*q);
7105 }
7106
cab1f180 7107 /* ISO C++ 9.5.3. Anonymous unions may not have function members. */
61a127b3
MM
7108 if (TYPE_METHODS (t))
7109 error ("an anonymous union cannot have function members");
7110}
7111
72a93143
JM
7112/* Make sure that a declaration with no declarator is well-formed, i.e.
7113 just defines a tagged type or anonymous union.
8d08fdba 7114
72a93143 7115 Returns the type defined, if any. */
8d08fdba 7116
72a93143
JM
7117tree
7118check_tag_decl (declspecs)
8d08fdba
MS
7119 tree declspecs;
7120{
72a93143 7121 int found_type = 0;
2bdb0643 7122 int saw_friend = 0;
2986ae00 7123 tree ob_modifier = NULL_TREE;
8d08fdba 7124 register tree link;
8d08fdba
MS
7125 register tree t = NULL_TREE;
7126
7127 for (link = declspecs; link; link = TREE_CHAIN (link))
7128 {
7129 register tree value = TREE_VALUE (link);
7130
2bdb0643
JM
7131 if (TYPE_P (value)
7132 || (TREE_CODE (value) == IDENTIFIER_NODE
7133 && IDENTIFIER_GLOBAL_VALUE (value)
7134 && TYPE_P (IDENTIFIER_GLOBAL_VALUE (value))))
8d08fdba 7135 {
72a93143 7136 ++found_type;
5566b478 7137
73ae5c34
NS
7138 if ((TREE_CODE (value) != TYPENAME_TYPE && IS_AGGR_TYPE (value))
7139 || TREE_CODE (value) == ENUMERAL_TYPE)
72a93143
JM
7140 {
7141 my_friendly_assert (TYPE_MAIN_DECL (value) != NULL_TREE, 261);
7142 t = value;
7143 }
8d08fdba 7144 }
83f660b7
JM
7145 else if (value == ridpointers[(int) RID_FRIEND])
7146 {
83f660b7
JM
7147 if (current_class_type == NULL_TREE
7148 || current_scope () != current_class_type)
7149 ob_modifier = value;
2bdb0643
JM
7150 else
7151 saw_friend = 1;
83f660b7 7152 }
8d08fdba 7153 else if (value == ridpointers[(int) RID_STATIC]
2986ae00
MS
7154 || value == ridpointers[(int) RID_EXTERN]
7155 || value == ridpointers[(int) RID_AUTO]
28cbf42c
MS
7156 || value == ridpointers[(int) RID_REGISTER]
7157 || value == ridpointers[(int) RID_INLINE]
7158 || value == ridpointers[(int) RID_VIRTUAL]
72a93143
JM
7159 || value == ridpointers[(int) RID_CONST]
7160 || value == ridpointers[(int) RID_VOLATILE]
28cbf42c 7161 || value == ridpointers[(int) RID_EXPLICIT])
2986ae00 7162 ob_modifier = value;
8d08fdba
MS
7163 }
7164
72a93143
JM
7165 if (found_type > 1)
7166 error ("multiple types in one declaration");
7e2067ca 7167
2bdb0643 7168 if (t == NULL_TREE && ! saw_friend)
7e2067ca 7169 pedwarn ("declaration does not declare anything");
0dd3962d
JM
7170
7171 /* Check for an anonymous union. We're careful
7172 accessing TYPE_IDENTIFIER because some built-in types, like
7173 pointer-to-member types, do not have TYPE_NAME. */
6bdb8141 7174 else if (t && IS_AGGR_TYPE_CODE (TREE_CODE (t))
0dd3962d
JM
7175 && TYPE_NAME (t)
7176 && ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
7177 {
7178 /* Anonymous unions are objects, so they can have specifiers. */;
6bdb8141
JM
7179 SET_ANON_AGGR_TYPE_P (t);
7180
7181 if (TREE_CODE (t) != UNION_TYPE && pedantic && ! in_system_header)
7182 pedwarn ("ISO C++ prohibits anonymous structs");
0dd3962d
JM
7183 }
7184
83f660b7 7185 else if (ob_modifier)
8d08fdba 7186 {
83f660b7
JM
7187 if (ob_modifier == ridpointers[(int) RID_INLINE]
7188 || ob_modifier == ridpointers[(int) RID_VIRTUAL])
7189 cp_error ("`%D' can only be specified for functions", ob_modifier);
7190 else if (ob_modifier == ridpointers[(int) RID_FRIEND])
7191 cp_error ("`%D' can only be specified inside a class", ob_modifier);
7192 else if (ob_modifier == ridpointers[(int) RID_EXPLICIT])
7193 cp_error ("`%D' can only be specified for constructors",
7194 ob_modifier);
7195 else
7196 cp_error ("`%D' can only be specified for objects and functions",
7197 ob_modifier);
72a93143 7198 }
8d08fdba 7199
72a93143
JM
7200 return t;
7201}
7202
7203/* Called when a declaration is seen that contains no names to declare.
7204 If its type is a reference to a structure, union or enum inherited
7205 from a containing scope, shadow that tag name for the current scope
7206 with a forward reference.
7207 If its type defines a new named structure or union
7208 or defines an enum, it is valid but we need not do anything here.
7209 Otherwise, it is an error.
7210
7211 C++: may have to grok the declspecs to learn about static,
7212 complain for anonymous unions. */
7213
7214void
7215shadow_tag (declspecs)
7216 tree declspecs;
7217{
7218 tree t = check_tag_decl (declspecs);
7219
7220 if (t)
7221 maybe_process_partial_specialization (t);
7222
7223 /* This is where the variables in an anonymous union are
7224 declared. An anonymous union declaration looks like:
7225 union { ... } ;
7226 because there is no declarator after the union, the parser
7227 sends that declaration here. */
6bdb8141 7228 if (t && ANON_AGGR_TYPE_P (t))
72a93143 7229 {
6bdb8141 7230 fixup_anonymous_aggr (t);
72a93143
JM
7231
7232 if (TYPE_FIELDS (t))
7233 {
7234 tree decl = grokdeclarator (NULL_TREE, declspecs, NORMAL, 0,
7235 NULL_TREE);
7236 finish_anon_union (decl);
7237 }
8d08fdba
MS
7238 }
7239}
7240\f
7241/* Decode a "typename", such as "int **", returning a ..._TYPE node. */
7242
7243tree
7244groktypename (typename)
7245 tree typename;
7246{
7247 if (TREE_CODE (typename) != TREE_LIST)
7248 return typename;
7249 return grokdeclarator (TREE_VALUE (typename),
7250 TREE_PURPOSE (typename),
c11b6f21 7251 TYPENAME, 0, NULL_TREE);
8d08fdba
MS
7252}
7253
7254/* Decode a declarator in an ordinary declaration or data definition.
7255 This is called as soon as the type information and variable name
7256 have been parsed, before parsing the initializer if any.
7257 Here we create the ..._DECL node, fill in its type,
7258 and put it on the list of decls for the current context.
7259 The ..._DECL node is returned as the value.
7260
7261 Exception: for arrays where the length is not specified,
82580166 7262 the type is left null, to be filled in by `cp_finish_decl'.
8d08fdba
MS
7263
7264 Function definitions do not come here; they go to start_function
7265 instead. However, external and forward declarations of functions
7266 do go through here. Structure field declarations are done by
7267 grokfield and not through here. */
7268
8d08fdba 7269tree
a1774733 7270start_decl (declarator, declspecs, initialized, attributes, prefix_attributes)
8d08fdba
MS
7271 tree declarator, declspecs;
7272 int initialized;
a1774733 7273 tree attributes, prefix_attributes;
8d08fdba
MS
7274{
7275 register tree decl;
7276 register tree type, tem;
7277 tree context;
7278 extern int have_extern_spec;
7279 extern int used_extern_spec;
b17e2870 7280 tree attrlist;
8d08fdba 7281
5566b478
MS
7282#if 0
7283 /* See code below that used this. */
8d08fdba 7284 int init_written = initialized;
5566b478 7285#endif
8d08fdba 7286
e92cc029 7287 /* This should only be done once on the top most decl. */
8d08fdba
MS
7288 if (have_extern_spec && !used_extern_spec)
7289 {
a28e3c7f
MS
7290 declspecs = decl_tree_cons (NULL_TREE, get_identifier ("extern"),
7291 declspecs);
8d08fdba
MS
7292 used_extern_spec = 1;
7293 }
7294
b17e2870 7295 if (attributes || prefix_attributes)
051e6fd7 7296 attrlist = build_tree_list (attributes, prefix_attributes);
b17e2870
JM
7297 else
7298 attrlist = NULL_TREE;
7299
c11b6f21 7300 decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
b17e2870 7301 attrlist);
68642fb6 7302
a1774733 7303 if (decl == NULL_TREE || TREE_CODE (decl) == VOID_TYPE)
8d08fdba
MS
7304 return NULL_TREE;
7305
7306 type = TREE_TYPE (decl);
7307
44689c12
ML
7308 if (type == error_mark_node)
7309 return NULL_TREE;
7310
4f1c5b7d 7311 context = DECL_CONTEXT (decl);
8d08fdba 7312
9a68c51f
JM
7313 if (initialized && context && TREE_CODE (context) == NAMESPACE_DECL
7314 && context != current_namespace && TREE_CODE (decl) == VAR_DECL)
7315 {
7316 /* When parsing the initializer, lookup should use the object's
7317 namespace. */
7318 push_decl_namespace (context);
7319 }
7320
2c73f9f5
ML
7321 /* We are only interested in class contexts, later. */
7322 if (context && TREE_CODE (context) == NAMESPACE_DECL)
7323 context = NULL_TREE;
7324
8d08fdba
MS
7325 if (initialized)
7326 /* Is it valid for this decl to have an initializer at all?
7327 If not, set INITIALIZED to zero, which will indirectly
82580166 7328 tell `cp_finish_decl' to ignore the initializer once it is parsed. */
8d08fdba
MS
7329 switch (TREE_CODE (decl))
7330 {
7331 case TYPE_DECL:
7332 /* typedef foo = bar means give foo the same type as bar.
82580166 7333 We haven't parsed bar yet, so `cp_finish_decl' will fix that up.
8d08fdba
MS
7334 Any other case of an initialization in a TYPE_DECL is an error. */
7335 if (pedantic || list_length (declspecs) > 1)
7336 {
8251199e 7337 cp_error ("typedef `%D' is initialized", decl);
8d08fdba
MS
7338 initialized = 0;
7339 }
7340 break;
7341
7342 case FUNCTION_DECL:
8251199e 7343 cp_error ("function `%#D' is initialized like a variable", decl);
8d08fdba
MS
7344 initialized = 0;
7345 break;
7346
7347 default:
3e41d13b 7348 break;
8d08fdba
MS
7349 }
7350
8d08fdba
MS
7351 if (initialized)
7352 {
a9aedbc2 7353 if (! toplevel_bindings_p ()
8d08fdba 7354 && DECL_EXTERNAL (decl))
8251199e 7355 cp_warning ("declaration of `%#D' has `extern' and is initialized",
8d08fdba
MS
7356 decl);
7357 DECL_EXTERNAL (decl) = 0;
5566b478 7358 if (toplevel_bindings_p ())
8d08fdba
MS
7359 TREE_STATIC (decl) = 1;
7360
7361 /* Tell `pushdecl' this is an initialized decl
7362 even though we don't yet have the initializer expression.
82580166 7363 Also tell `cp_finish_decl' it may store the real initializer. */
8d08fdba
MS
7364 DECL_INITIAL (decl) = error_mark_node;
7365 }
7366
fa20888b
MK
7367#ifdef SET_DEFAULT_DECL_ATTRIBUTES
7368 SET_DEFAULT_DECL_ATTRIBUTES (decl, attributes);
7369#endif
68642fb6 7370
fa20888b
MK
7371 /* Set attributes here so if duplicate decl, will have proper attributes. */
7372 cplus_decl_attributes (decl, attributes, prefix_attributes);
7373
d0f062fb 7374 if (context && COMPLETE_TYPE_P (complete_type (context)))
5b605f68 7375 {
6b400b21 7376 push_nested_class (context, 2);
e97e5263 7377
5b605f68
MS
7378 if (TREE_CODE (decl) == VAR_DECL)
7379 {
7380 tree field = lookup_field (context, DECL_NAME (decl), 0, 0);
7381 if (field == NULL_TREE || TREE_CODE (field) != VAR_DECL)
8251199e 7382 cp_error ("`%#D' is not a static member of `%#T'", decl, context);
e349ee73
MS
7383 else
7384 {
7385 if (DECL_CONTEXT (field) != context)
f2d773a2 7386 {
cb9a3ff8 7387 cp_pedwarn ("ISO C++ does not permit `%T::%D' to be defined as `%T::%D'",
f2d773a2
JM
7388 DECL_CONTEXT (field), DECL_NAME (decl),
7389 context, DECL_NAME (decl));
7390 DECL_CONTEXT (decl) = DECL_CONTEXT (field);
7391 }
75650646
MM
7392 /* Static data member are tricky; an in-class initialization
7393 still doesn't provide a definition, so the in-class
7394 declaration will have DECL_EXTERNAL set, but will have an
7395 initialization. Thus, duplicate_decls won't warn
7396 about this situation, and so we check here. */
7397 if (DECL_INITIAL (decl) && DECL_INITIAL (field))
8251199e 7398 cp_error ("duplicate initialization of %D", decl);
e349ee73
MS
7399 if (duplicate_decls (decl, field))
7400 decl = field;
7401 }
5b605f68 7402 }
f30432d7
MS
7403 else
7404 {
5566b478 7405 tree field = check_classfn (context, decl);
f30432d7
MS
7406 if (field && duplicate_decls (decl, field))
7407 decl = field;
7408 }
7409
7410 /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set. */
dff3e828 7411 DECL_IN_AGGR_P (decl) = 0;
68642fb6 7412 if ((DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl))
1f6e1acc 7413 || CLASSTYPE_TEMPLATE_INSTANTIATION (context))
84e6233f
JM
7414 {
7415 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
7416 /* [temp.expl.spec] An explicit specialization of a static data
7417 member of a template is a definition if the declaration
7418 includes an initializer; otherwise, it is a declaration.
7419
7420 We check for processing_specialization so this only applies
7421 to the new specialization syntax. */
7422 if (DECL_INITIAL (decl) == NULL_TREE && processing_specialization)
7423 DECL_EXTERNAL (decl) = 1;
7424 }
f30432d7 7425
b7698cf0 7426 if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl))
8251199e 7427 cp_pedwarn ("declaration of `%#D' outside of class is not definition",
f30432d7 7428 decl);
5b605f68
MS
7429 }
7430
9188c363
MM
7431 /* Enter this declaration into the symbol table. */
7432 tem = maybe_push_decl (decl);
2ee887f2 7433
5156628f 7434 if (processing_template_decl)
cd9f6678 7435 tem = push_template_decl (tem);
5566b478 7436
2ee887f2 7437#if ! defined (ASM_OUTPUT_BSS) && ! defined (ASM_OUTPUT_ALIGNED_BSS)
a3203465 7438 /* Tell the back-end to use or not use .common as appropriate. If we say
a50f0918
MS
7439 -fconserve-space, we want this to save .data space, at the expense of
7440 wrong semantics. If we say -fno-conserve-space, we want this to
7441 produce errors about redefs; to do this we force variables into the
7442 data segment. */
a3203465 7443 DECL_COMMON (tem) = flag_conserve_space || ! TREE_PUBLIC (tem);
2ee887f2 7444#endif
68642fb6 7445
5156628f 7446 if (! processing_template_decl)
5566b478 7447 start_decl_1 (tem);
8d08fdba 7448
8d08fdba
MS
7449 return tem;
7450}
7451
5566b478
MS
7452void
7453start_decl_1 (decl)
7454 tree decl;
8d08fdba 7455{
5566b478
MS
7456 tree type = TREE_TYPE (decl);
7457 int initialized = (DECL_INITIAL (decl) != NULL_TREE);
8d08fdba 7458
44689c12
ML
7459 if (type == error_mark_node)
7460 return;
7461
8f471b0d
MM
7462 /* If this type of object needs a cleanup, but we're not allowed to
7463 add any more objects with cleanups to the current scope, create a
7464 new binding level. */
834c6dff 7465 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
5566b478 7466 && current_binding_level->more_cleanups_ok == 0)
8f471b0d
MM
7467 {
7468 keep_next_level (2);
7469 pushlevel (1);
7470 clear_last_expr ();
7471 add_scope_stmt (/*begin_p=*/1, /*partial_p=*/1);
7472 }
5566b478
MS
7473
7474 if (initialized)
7475 /* Is it valid for this decl to have an initializer at all?
7476 If not, set INITIALIZED to zero, which will indirectly
7477 tell `cp_finish_decl' to ignore the initializer once it is parsed. */
8d08fdba 7478 {
5566b478
MS
7479 /* Don't allow initializations for incomplete types except for
7480 arrays which might be completed by the initialization. */
d0f062fb 7481 if (COMPLETE_TYPE_P (complete_type (type)))
5566b478
MS
7482 ; /* A complete type is ok. */
7483 else if (TREE_CODE (type) != ARRAY_TYPE)
8d08fdba 7484 {
8251199e 7485 cp_error ("variable `%#D' has initializer but incomplete type",
5566b478
MS
7486 decl);
7487 initialized = 0;
25eb19ff 7488 type = TREE_TYPE (decl) = error_mark_node;
5566b478 7489 }
d0f062fb 7490 else if (!COMPLETE_TYPE_P (complete_type (TREE_TYPE (type))))
5566b478
MS
7491 {
7492 if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
8251199e 7493 cp_error ("elements of array `%#D' have incomplete type", decl);
5566b478
MS
7494 /* else we already gave an error in start_decl. */
7495 initialized = 0;
8d08fdba 7496 }
8d08fdba
MS
7497 }
7498
5566b478
MS
7499 if (!initialized
7500 && TREE_CODE (decl) != TYPE_DECL
7501 && TREE_CODE (decl) != TEMPLATE_DECL
07c88314
MM
7502 && type != error_mark_node
7503 && IS_AGGR_TYPE (type)
7504 && ! DECL_EXTERNAL (decl))
8d08fdba 7505 {
5156628f 7506 if ((! processing_template_decl || ! uses_template_parms (type))
d0f062fb 7507 && !COMPLETE_TYPE_P (complete_type (type)))
5566b478 7508 {
8251199e 7509 cp_error ("aggregate `%#D' has incomplete type and cannot be initialized",
5566b478
MS
7510 decl);
7511 /* Change the type so that assemble_variable will give
7512 DECL an rtl we can live with: (mem (const_int 0)). */
25eb19ff 7513 type = TREE_TYPE (decl) = error_mark_node;
5566b478
MS
7514 }
7515 else
7516 {
7517 /* If any base type in the hierarchy of TYPE needs a constructor,
7518 then we set initialized to 1. This way any nodes which are
7519 created for the purposes of initializing this aggregate
7520 will live as long as it does. This is necessary for global
7521 aggregates which do not have their initializers processed until
7522 the end of the file. */
7523 initialized = TYPE_NEEDS_CONSTRUCTING (type);
7524 }
7525 }
7526
5566b478
MS
7527 if (! initialized)
7528 DECL_INITIAL (decl) = NULL_TREE;
7529}
7530
7531/* Handle initialization of references.
38e01259 7532 These three arguments are from `cp_finish_decl', and have the
e92cc029
MS
7533 same meaning here that they do there.
7534
7535 Quotes on semantics can be found in ARM 8.4.3. */
7536
5566b478 7537static void
a703fb38 7538grok_reference_init (decl, type, init)
5566b478 7539 tree decl, type, init;
5566b478
MS
7540{
7541 tree tmp;
7542
7543 if (init == NULL_TREE)
7544 {
7545 if ((DECL_LANG_SPECIFIC (decl) == 0
7546 || DECL_IN_AGGR_P (decl) == 0)
7547 && ! DECL_THIS_EXTERN (decl))
ed5511d9 7548 cp_error ("`%D' declared as reference but not initialized", decl);
5566b478
MS
7549 return;
7550 }
7551
7552 if (init == error_mark_node)
7553 return;
7554
ed5511d9 7555 if (TREE_CODE (init) == CONSTRUCTOR)
5566b478 7556 {
cb9a3ff8 7557 cp_error ("ISO C++ forbids use of initializer list to initialize reference `%D'", decl);
8d08fdba
MS
7558 return;
7559 }
7560
7561 if (TREE_CODE (init) == TREE_LIST)
7562 init = build_compound_expr (init);
8d08fdba 7563
8ccc31eb
MS
7564 if (TREE_CODE (TREE_TYPE (init)) == REFERENCE_TYPE)
7565 init = convert_from_reference (init);
7566
8d08fdba
MS
7567 if (TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE
7568 && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
7569 {
a3203465 7570 /* Note: default conversion is only called in very special cases. */
8d08fdba
MS
7571 init = default_conversion (init);
7572 }
68642fb6 7573
24bef158
MM
7574 /* Convert INIT to the reference type TYPE. This may involve the
7575 creation of a temporary, whose lifetime must be the same as that
7576 of the reference. If so, a DECL_STMT for the temporary will be
7577 added just after the DECL_STMT for DECL. That's why we don't set
7578 DECL_INITIAL for local references (instead assigning to them
7579 explicitly); we need to allow the temporary to be initialized
7580 first. */
a3203465 7581 tmp = convert_to_reference
9a3b49ac 7582 (type, init, CONV_IMPLICIT,
ce7715bd
JM
7583 LOOKUP_ONLYCONVERTING|LOOKUP_SPECULATIVELY|LOOKUP_NORMAL|DIRECT_BIND,
7584 decl);
8d08fdba 7585
a3203465 7586 if (tmp == error_mark_node)
ed5511d9 7587 return;
a3203465 7588 else if (tmp != NULL_TREE)
8d08fdba 7589 {
a3203465 7590 init = tmp;
24bef158
MM
7591 tmp = save_expr (tmp);
7592 if (building_stmt_tree ())
7593 {
7594 /* Initialize the declaration. */
7595 tmp = build (INIT_EXPR, TREE_TYPE (decl), decl, tmp);
24bef158
MM
7596 finish_expr_stmt (tmp);
7597 }
7598 else
7599 DECL_INITIAL (decl) = tmp;
8d08fdba 7600 }
a3203465 7601 else
8d08fdba 7602 {
8251199e 7603 cp_error ("cannot initialize `%T' from `%T'", type, TREE_TYPE (init));
ed5511d9 7604 return;
8d08fdba 7605 }
8d08fdba 7606
8d08fdba
MS
7607 if (TREE_STATIC (decl) && ! TREE_CONSTANT (DECL_INITIAL (decl)))
7608 {
7609 expand_static_init (decl, DECL_INITIAL (decl));
7610 DECL_INITIAL (decl) = NULL_TREE;
7611 }
7612 return;
8d08fdba
MS
7613}
7614
6060a796
MS
7615/* Fill in DECL_INITIAL with some magical value to prevent expand_decl from
7616 mucking with forces it does not comprehend (i.e. initialization with a
7617 constructor). If we are at global scope and won't go into COMMON, fill
7618 it in with a dummy CONSTRUCTOR to force the variable into .data;
7619 otherwise we can use error_mark_node. */
7620
28cbf42c
MS
7621static tree
7622obscure_complex_init (decl, init)
7623 tree decl, init;
6060a796 7624{
28cbf42c
MS
7625 if (! flag_no_inline && TREE_STATIC (decl))
7626 {
7627 if (extract_init (decl, init))
7628 return NULL_TREE;
7629 }
7630
2ee887f2 7631#if ! defined (ASM_OUTPUT_BSS) && ! defined (ASM_OUTPUT_ALIGNED_BSS)
a9aedbc2 7632 if (toplevel_bindings_p () && ! DECL_COMMON (decl))
6060a796
MS
7633 DECL_INITIAL (decl) = build (CONSTRUCTOR, TREE_TYPE (decl), NULL_TREE,
7634 NULL_TREE);
7635 else
2ee887f2 7636#endif
6060a796 7637 DECL_INITIAL (decl) = error_mark_node;
28cbf42c
MS
7638
7639 return init;
6060a796
MS
7640}
7641
27778b73
MM
7642/* When parsing `int a[] = {1, 2};' we don't know the size of the
7643 array until we finish parsing the initializer. If that's the
7644 situation we're in, update DECL accordingly. */
7645
7646static void
7647maybe_deduce_size_from_array_init (decl, init)
7648 tree decl;
7649 tree init;
7650{
7651 tree type = TREE_TYPE (decl);
7652
7653 if (TREE_CODE (type) == ARRAY_TYPE
7654 && TYPE_DOMAIN (type) == NULL_TREE
7655 && TREE_CODE (decl) != TYPE_DECL)
7656 {
f2ae0c45
JM
7657 /* do_default is really a C-ism to deal with tentative definitions.
7658 But let's leave it here to ease the eventual merge. */
7659 int do_default = !DECL_EXTERNAL (decl);
27778b73
MM
7660 tree initializer = init ? init : DECL_INITIAL (decl);
7661 int failure = complete_array_type (type, initializer, do_default);
7662
7663 if (failure == 1)
7664 cp_error ("initializer fails to determine size of `%D'", decl);
7665
7666 if (failure == 2)
7667 {
7668 if (do_default)
7669 cp_error ("array size missing in `%D'", decl);
7670 /* If a `static' var's size isn't known, make it extern as
7671 well as static, so it does not get allocated. If it's not
7672 `static', then don't mark it extern; finish_incomplete_decl
7673 will give it a default size and it will get allocated. */
7674 else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
7675 DECL_EXTERNAL (decl) = 1;
7676 }
7677
7678 if (pedantic && TYPE_DOMAIN (type) != NULL_TREE
7679 && tree_int_cst_lt (TYPE_MAX_VALUE (TYPE_DOMAIN (type)),
7680 integer_zero_node))
7681 cp_error ("zero-size array `%D'", decl);
7682
7683 layout_decl (decl, 0);
7684 }
7685}
7686
7687/* Set DECL_SIZE, DECL_ALIGN, etc. for DECL (a VAR_DECL), and issue
57b52417 7688 any appropriate error messages regarding the layout. */
27778b73 7689
57b52417
MM
7690static void
7691layout_var_decl (decl)
27778b73 7692 tree decl;
27778b73 7693{
57b52417 7694 tree type = TREE_TYPE (decl);
c95cd22e 7695#if 0
57b52417 7696 tree ttype = target_type (type);
c95cd22e 7697#endif
57b52417
MM
7698
7699 /* If we haven't already layed out this declaration, do so now.
7700 Note that we must not call complete type for an external object
7701 because it's type might involve templates that we are not
68642fb6 7702 supposed to isntantiate yet. (And it's perfectly legal to say
57b52417
MM
7703 `extern X x' for some incomplete type `X'.) */
7704 if (!DECL_EXTERNAL (decl))
7705 complete_type (type);
d0f062fb 7706 if (!DECL_SIZE (decl) && COMPLETE_TYPE_P (type))
27778b73
MM
7707 layout_decl (decl, 0);
7708
c82dbd95 7709 if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
27778b73
MM
7710 {
7711 /* An automatic variable with an incomplete type: that is an error.
7712 Don't talk about array types here, since we took care of that
7713 message in grokdeclarator. */
7714 cp_error ("storage size of `%D' isn't known", decl);
7715 TREE_TYPE (decl) = error_mark_node;
7716 }
ae673f14
JM
7717#if 0
7718 /* Keep this code around in case we later want to control debug info
7719 based on whether a type is "used". (jason 1999-11-11) */
7720
27778b73
MM
7721 else if (!DECL_EXTERNAL (decl) && IS_AGGR_TYPE (ttype))
7722 /* Let debugger know it should output info for this type. */
7723 note_debug_info_needed (ttype);
7724
7725 if (TREE_STATIC (decl) && DECL_CLASS_SCOPE_P (decl))
7726 note_debug_info_needed (DECL_CONTEXT (decl));
ae673f14 7727#endif
27778b73
MM
7728
7729 if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
7730 && DECL_SIZE (decl) != NULL_TREE
7731 && ! TREE_CONSTANT (DECL_SIZE (decl)))
7732 {
7733 if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
7734 constant_expression_warning (DECL_SIZE (decl));
7735 else
7736 cp_error ("storage size of `%D' isn't constant", decl);
7737 }
7738}
7739
27778b73
MM
7740/* If a local static variable is declared in an inline function, or if
7741 we have a weak definition, we must endeavor to create only one
7742 instance of the variable at link-time. */
7743
7744static void
7745maybe_commonize_var (decl)
7746 tree decl;
7747{
7748 /* Static data in a function with comdat linkage also has comdat
7749 linkage. */
7750 if (TREE_STATIC (decl)
7751 /* Don't mess with __FUNCTION__. */
cf74fb86 7752 && ! DECL_ARTIFICIAL (decl)
27778b73
MM
7753 && current_function_decl
7754 && DECL_CONTEXT (decl) == current_function_decl
7755 && (DECL_THIS_INLINE (current_function_decl)
7756 || DECL_TEMPLATE_INSTANTIATION (current_function_decl))
7757 && TREE_PUBLIC (current_function_decl))
7758 {
7759 /* Rather than try to get this right with inlining, we suppress
7760 inlining of such functions. */
7761 current_function_cannot_inline
7762 = "function with static variable cannot be inline";
7763
7764 /* If flag_weak, we don't need to mess with this, as we can just
7765 make the function weak, and let it refer to its unique local
7766 copy. This works because we don't allow the function to be
7767 inlined. */
7768 if (! flag_weak)
7769 {
7770 if (DECL_INTERFACE_KNOWN (current_function_decl))
7771 {
7772 TREE_PUBLIC (decl) = 1;
7773 DECL_EXTERNAL (decl) = DECL_EXTERNAL (current_function_decl);
7774 }
7775 else if (DECL_INITIAL (decl) == NULL_TREE
7776 || DECL_INITIAL (decl) == error_mark_node)
7777 {
7778 TREE_PUBLIC (decl) = 1;
7779 DECL_COMMON (decl) = 1;
7780 }
7781 /* else we lose. We can only do this if we can use common,
7782 which we can't if it has been initialized. */
7783
7784 if (TREE_PUBLIC (decl))
669ec2b4
JM
7785 DECL_ASSEMBLER_NAME (decl)
7786 = build_static_name (current_function_decl, DECL_NAME (decl));
cf74fb86 7787 else
27778b73
MM
7788 {
7789 cp_warning_at ("sorry: semantics of inline function static data `%#D' are wrong (you'll wind up with multiple copies)", decl);
7790 cp_warning_at (" you can work around this by removing the initializer", decl);
7791 }
7792 }
7793 }
7794 else if (DECL_LANG_SPECIFIC (decl) && DECL_COMDAT (decl))
7795 /* Set it up again; we might have set DECL_INITIAL since the last
7796 time. */
7797 comdat_linkage (decl);
7798}
7799
91063b51
MM
7800/* Issue an error message if DECL is an uninitialized const variable. */
7801
7802static void
7803check_for_uninitialized_const_var (decl)
7804 tree decl;
7805{
7806 tree type = TREE_TYPE (decl);
7807
7808 /* ``Unless explicitly declared extern, a const object does not have
7809 external linkage and must be initialized. ($8.4; $12.1)'' ARM
7810 7.1.6 */
7811 if (TREE_CODE (decl) == VAR_DECL
7812 && TREE_CODE (type) != REFERENCE_TYPE
7813 && CP_TYPE_CONST_P (type)
7814 && !TYPE_NEEDS_CONSTRUCTING (type)
7815 && !DECL_INITIAL (decl))
7816 cp_error ("uninitialized const `%D'", decl);
7817}
7818
c82dbd95
MM
7819/* Verify INIT (the initializer for DECL), and record the
7820 initialization in DECL_INITIAL, if appropriate. Returns a new
7821 value for INIT. */
27778b73 7822
c82dbd95
MM
7823static tree
7824check_initializer (decl, init)
27778b73 7825 tree decl;
c82dbd95 7826 tree init;
27778b73 7827{
27778b73
MM
7828 tree type;
7829
7830 if (TREE_CODE (decl) == FIELD_DECL)
c82dbd95 7831 return init;
27778b73 7832
fc0e7bf5
MM
7833 type = TREE_TYPE (decl);
7834
27778b73
MM
7835 /* If `start_decl' didn't like having an initialization, ignore it now. */
7836 if (init != NULL_TREE && DECL_INITIAL (decl) == NULL_TREE)
7837 init = NULL_TREE;
27778b73 7838
c82dbd95 7839 /* Check the initializer. */
27778b73
MM
7840 if (init)
7841 {
c82dbd95
MM
7842 /* Things that are going to be initialized need to have complete
7843 type. */
7844 TREE_TYPE (decl) = type = complete_type (TREE_TYPE (decl));
7845
7846 if (type == error_mark_node)
7847 /* We will have already complained. */
7848 init = NULL_TREE;
d0f062fb 7849 else if (COMPLETE_TYPE_P (type) && !TREE_CONSTANT (TYPE_SIZE (type)))
27778b73
MM
7850 {
7851 cp_error ("variable-sized object `%D' may not be initialized", decl);
7852 init = NULL_TREE;
7853 }
c82dbd95 7854 else if (TREE_CODE (type) == ARRAY_TYPE
d0f062fb 7855 && !COMPLETE_TYPE_P (TREE_TYPE (type)))
27778b73
MM
7856 {
7857 cp_error ("elements of array `%#D' have incomplete type", decl);
7858 init = NULL_TREE;
7859 }
d0f062fb 7860 else if (!COMPLETE_TYPE_P (type))
c82dbd95
MM
7861 {
7862 cp_error ("`%D' has incomplete type", decl);
7863 TREE_TYPE (decl) = error_mark_node;
7864 init = NULL_TREE;
7865 }
27778b73
MM
7866 }
7867
7868 if (TREE_CODE (decl) == CONST_DECL)
7869 {
7870 my_friendly_assert (TREE_CODE (decl) != REFERENCE_TYPE, 148);
7871
7872 DECL_INITIAL (decl) = init;
7873
7874 /* This will keep us from needing to worry about our obstacks. */
7875 my_friendly_assert (init != NULL_TREE, 149);
7876 init = NULL_TREE;
7877 }
c82dbd95
MM
7878 else if (!DECL_EXTERNAL (decl) && TREE_CODE (type) == REFERENCE_TYPE)
7879 {
7880 if (TREE_STATIC (decl))
7881 make_decl_rtl (decl, NULL_PTR, toplevel_bindings_p ());
7882 grok_reference_init (decl, type, init);
7883 init = NULL_TREE;
7884 }
27778b73
MM
7885 else if (init)
7886 {
7887 if (TYPE_HAS_CONSTRUCTOR (type) || TYPE_NEEDS_CONSTRUCTING (type))
7888 {
7889 if (TREE_CODE (type) == ARRAY_TYPE)
7890 init = digest_init (type, init, (tree *) 0);
7891 else if (TREE_CODE (init) == CONSTRUCTOR
7892 && TREE_HAS_CONSTRUCTOR (init))
7893 {
7894 if (TYPE_NON_AGGREGATE_CLASS (type))
7895 {
7896 cp_error ("`%D' must be initialized by constructor, not by `{...}'",
7897 decl);
7898 init = error_mark_node;
7899 }
7900 else
7901 goto dont_use_constructor;
7902 }
7903 }
7904 else
7905 {
7906 dont_use_constructor:
7907 if (TREE_CODE (init) != TREE_VEC)
7908 init = store_init_value (decl, init);
7909 }
7910
7911 if (init)
7912 /* We must hide the initializer so that expand_decl
7913 won't try to do something it does not understand. */
7914 init = obscure_complex_init (decl, init);
7915 }
7916 else if (DECL_EXTERNAL (decl))
7917 ;
2f939d94 7918 else if (TYPE_P (type)
27778b73
MM
7919 && (IS_AGGR_TYPE (type) || TYPE_NEEDS_CONSTRUCTING (type)))
7920 {
7921 tree core_type = strip_array_types (type);
7922
7923 if (! TYPE_NEEDS_CONSTRUCTING (core_type))
7924 {
7925 if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type))
7926 cp_error ("structure `%D' with uninitialized const members", decl);
7927 if (CLASSTYPE_REF_FIELDS_NEED_INIT (core_type))
7928 cp_error ("structure `%D' with uninitialized reference members",
7929 decl);
7930 }
7931
7932 check_for_uninitialized_const_var (decl);
7933
d0f062fb 7934 if (COMPLETE_TYPE_P (type) && TYPE_NEEDS_CONSTRUCTING (type))
27778b73
MM
7935 init = obscure_complex_init (decl, NULL_TREE);
7936
7937 }
7938 else
7939 check_for_uninitialized_const_var (decl);
68642fb6 7940
c82dbd95 7941 return init;
27778b73
MM
7942}
7943
7944/* If DECL is not a local variable, give it RTL. */
7945
7946static void
7947make_rtl_for_nonlocal_decl (decl, init, asmspec)
7948 tree decl;
7949 tree init;
7950 const char *asmspec;
7951{
95ee998c
MM
7952 int toplev = toplevel_bindings_p ();
7953 int defer_p;
27778b73 7954
f39ee884
MM
7955 /* Handle non-variables up front. */
7956 if (TREE_CODE (decl) != VAR_DECL)
7957 {
7958 rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
7959 return;
7960 }
7961
95ee998c
MM
7962 /* If we see a class member here, it should be a static data
7963 member. */
7964 if (DECL_LANG_SPECIFIC (decl) && DECL_IN_AGGR_P (decl))
7965 {
7966 my_friendly_assert (TREE_STATIC (decl), 19990828);
7967 /* An in-class declaration of a static data member should be
7968 external; it is only a declaration, and not a definition. */
7969 if (init == NULL_TREE)
7970 my_friendly_assert (DECL_EXTERNAL (decl), 20000723);
7971 }
7972
f39ee884
MM
7973 /* Set the DECL_ASSEMBLER_NAME for the variable. */
7974 if (asmspec)
7975 DECL_ASSEMBLER_NAME (decl) = get_identifier (asmspec);
7976
95ee998c
MM
7977 /* We don't create any RTL for local variables. */
7978 if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
7979 return;
27778b73 7980
95ee998c
MM
7981 /* We defer emission of local statics until the corresponding
7982 DECL_STMT is expanded. */
7983 defer_p = DECL_FUNCTION_SCOPE_P (decl) || DECL_VIRTUAL_P (decl);
7984
7985 /* We try to defer namespace-scope static constants so that they are
7986 not emitted into the object file unncessarily. */
7987 if (!DECL_VIRTUAL_P (decl)
7988 && TREE_READONLY (decl)
7989 && DECL_INITIAL (decl) != NULL_TREE
7990 && DECL_INITIAL (decl) != error_mark_node
7991 && ! EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl))
7992 && toplev
7993 && !TREE_PUBLIC (decl))
7994 {
7995 /* Fool with the linkage according to #pragma interface. */
7996 if (!interface_unknown)
27778b73 7997 {
95ee998c
MM
7998 TREE_PUBLIC (decl) = 1;
7999 DECL_EXTERNAL (decl) = interface_only;
27778b73 8000 }
27778b73 8001
95ee998c 8002 defer_p = 1;
27778b73 8003 }
95ee998c
MM
8004
8005 /* If we're deferring the variable, just make RTL. Do not actually
8006 emit the variable. */
8007 if (defer_p)
8008 make_decl_rtl (decl, asmspec, toplev);
8009 /* If we're not deferring, go ahead and assemble the variable. */
8010 else
27778b73 8011 rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
27778b73
MM
8012}
8013
8014/* The old ARM scoping rules injected variables declared in the
8015 initialization statement of a for-statement into the surrounding
8016 scope. We support this usage, in order to be backward-compatible.
8017 DECL is a just-declared VAR_DECL; if necessary inject its
8018 declaration into the surrounding scope. */
8019
b7b8bcd2 8020void
27778b73
MM
8021maybe_inject_for_scope_var (decl)
8022 tree decl;
8023{
c3783399
NS
8024 if (!DECL_NAME (decl))
8025 return;
8026
27778b73
MM
8027 if (current_binding_level->is_for_scope)
8028 {
68642fb6 8029 struct binding_level *outer
27778b73
MM
8030 = current_binding_level->level_chain;
8031
8032 /* Check to see if the same name is already bound at the outer
8033 level, either because it was directly declared, or because a
8034 dead for-decl got preserved. In either case, the code would
8035 not have been valid under the ARM scope rules, so clear
8036 is_for_scope for the current_binding_level.
8037
8038 Otherwise, we need to preserve the temp slot for decl to last
8039 into the outer binding level. */
8040
68642fb6 8041 tree outer_binding
27778b73 8042 = TREE_CHAIN (IDENTIFIER_BINDING (DECL_NAME (decl)));
68642fb6 8043
27778b73 8044 if (outer_binding && BINDING_LEVEL (outer_binding) == outer
68642fb6 8045 && (TREE_CODE (BINDING_VALUE (outer_binding))
27778b73
MM
8046 == VAR_DECL)
8047 && DECL_DEAD_FOR_LOCAL (BINDING_VALUE (outer_binding)))
8048 {
8049 BINDING_VALUE (outer_binding)
8050 = DECL_SHADOWED_FOR_VAR (BINDING_VALUE (outer_binding));
8051 current_binding_level->is_for_scope = 0;
8052 }
8053 else if (DECL_IN_MEMORY_P (decl))
8054 preserve_temp_slots (DECL_RTL (decl));
8055 }
8056}
8057
ed5511d9 8058/* Generate code to initialize DECL (a local variable). */
27778b73 8059
b7b8bcd2
MM
8060void
8061initialize_local_var (decl, init, flags)
27778b73
MM
8062 tree decl;
8063 tree init;
27778b73
MM
8064 int flags;
8065{
9ed9e79a 8066 tree type = TREE_TYPE (decl);
27778b73 8067
9ed9e79a
MM
8068 /* If the type is bogus, don't bother initializing the variable. */
8069 if (type == error_mark_node)
8070 return;
b7b8bcd2 8071
b7b8bcd2
MM
8072 if (DECL_SIZE (decl) == NULL_TREE && !TREE_STATIC (decl))
8073 {
8074 /* If we used it already as memory, it must stay in memory. */
8075 DECL_INITIAL (decl) = NULL_TREE;
8076 TREE_ADDRESSABLE (decl) = TREE_USED (decl);
8077 }
8078
9ed9e79a
MM
8079 /* Local statics are handled differently from ordinary automatic
8080 variables. */
8081 if (TREE_STATIC (decl))
8082 {
8083 if (TYPE_NEEDS_CONSTRUCTING (type) || init != NULL_TREE
834c6dff 8084 || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
9ed9e79a
MM
8085 expand_static_init (decl, init);
8086 return;
8087 }
8088
27778b73
MM
8089 if (DECL_SIZE (decl) && type != error_mark_node)
8090 {
8091 int already_used;
68642fb6 8092
27778b73 8093 /* Compute and store the initial value. */
27778b73
MM
8094 already_used = TREE_USED (decl) || TREE_USED (type);
8095
8096 if (init || TYPE_NEEDS_CONSTRUCTING (type))
8097 {
24bef158
MM
8098 int saved_stmts_are_full_exprs_p;
8099
3a0d3e1e 8100 my_friendly_assert (building_stmt_tree (), 20000906);
f2c5f623 8101 saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
ae499cce 8102 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
3a0d3e1e 8103 finish_expr_stmt (build_aggr_init (decl, init, flags));
ae499cce
MM
8104 current_stmt_tree ()->stmts_are_full_exprs_p =
8105 saved_stmts_are_full_exprs_p;
27778b73
MM
8106 }
8107
8108 /* Set this to 0 so we can tell whether an aggregate which was
8109 initialized was ever used. Don't do this if it has a
8110 destructor, so we don't complain about the 'resource
b7b8bcd2
MM
8111 allocation is initialization' idiom. Now set
8112 attribute((unused)) on types so decls of that type will be
8113 marked used. (see TREE_USED, above.) */
27778b73
MM
8114 if (TYPE_NEEDS_CONSTRUCTING (type)
8115 && ! already_used
834c6dff 8116 && TYPE_HAS_TRIVIAL_DESTRUCTOR (type)
27778b73
MM
8117 && DECL_NAME (decl))
8118 TREE_USED (decl) = 0;
b7b8bcd2 8119 else if (already_used)
27778b73
MM
8120 TREE_USED (decl) = 1;
8121 }
24bef158 8122}
27778b73 8123
24bef158
MM
8124/* Generate code to destroy DECL (a local variable). */
8125
68642fb6 8126static void
24bef158
MM
8127destroy_local_var (decl)
8128 tree decl;
8129{
9d85d30c
MM
8130 tree type = TREE_TYPE (decl);
8131 tree cleanup;
8132
8133 /* Only variables get cleaned up. */
8134 if (TREE_CODE (decl) != VAR_DECL)
8135 return;
68642fb6 8136
9d85d30c 8137 /* And only things with destructors need cleaning up. */
655dc6ee
JM
8138 if (type == error_mark_node
8139 || TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
9d85d30c
MM
8140 return;
8141
8142 if (TREE_CODE (decl) == VAR_DECL &&
8143 (DECL_EXTERNAL (decl) || TREE_STATIC (decl)))
8144 /* We don't clean up things that aren't defined in this
8145 translation unit, or that need a static cleanup. The latter
8146 are handled by finish_file. */
8147 return;
68642fb6 8148
9d85d30c
MM
8149 /* Compute the cleanup. */
8150 cleanup = maybe_build_cleanup (decl);
27778b73 8151
b7b8bcd2 8152 /* Record the cleanup required for this declaration. */
24bef158
MM
8153 if (DECL_SIZE (decl) && TREE_TYPE (decl) != error_mark_node
8154 && cleanup)
8155 finish_decl_cleanup (decl, cleanup);
8156}
8157
8d08fdba
MS
8158/* Finish processing of a declaration;
8159 install its line number and initial value.
8160 If the length of an array type is not known before,
8161 it must be determined now, from the initial value, or it is an error.
8162
8b27e9ef 8163 INIT holds the value of an initializer that should be allowed to escape
8d08fdba
MS
8164 the normal rules.
8165
920f9474 8166 FLAGS is LOOKUP_ONLYCONVERTING if the = init syntax was used, else 0
f78c7bc6 8167 if the (init) syntax was used. */
8d08fdba
MS
8168
8169void
cd9f6678 8170cp_finish_decl (decl, init, asmspec_tree, flags)
8d08fdba
MS
8171 tree decl, init;
8172 tree asmspec_tree;
6060a796 8173 int flags;
8d08fdba
MS
8174{
8175 register tree type;
27778b73 8176 tree ttype = NULL_TREE;
9c0758dd 8177 const char *asmspec = NULL;
8d08fdba
MS
8178 int was_readonly = 0;
8179
8d08fdba
MS
8180 if (! decl)
8181 {
8182 if (init)
8251199e 8183 error ("assignment (not initialization) in declaration");
8d08fdba
MS
8184 return;
8185 }
8186
a4443a08 8187 /* If a name was specified, get the string. */
8d08fdba 8188 if (asmspec_tree)
8d08fdba 8189 asmspec = TREE_STRING_POINTER (asmspec_tree);
8d08fdba 8190
2c73f9f5
ML
8191 if (init && TREE_CODE (init) == NAMESPACE_DECL)
8192 {
920f9474 8193 cp_error ("cannot initialize `%D' to namespace `%D'",
2c73f9f5
ML
8194 decl, init);
8195 init = NULL_TREE;
8196 }
8197
6ba89f8e 8198 if (current_class_type
4f1c5b7d 8199 && CP_DECL_CONTEXT (decl) == current_class_type
6ba89f8e
MM
8200 && TYPE_BEING_DEFINED (current_class_type)
8201 && (DECL_INITIAL (decl) || init))
8202 DECL_DEFINED_IN_CLASS_P (decl) = 1;
8203
68642fb6 8204 if (TREE_CODE (decl) == VAR_DECL
9a68c51f
JM
8205 && DECL_CONTEXT (decl)
8206 && TREE_CODE (DECL_CONTEXT (decl)) == NAMESPACE_DECL
8207 && DECL_CONTEXT (decl) != current_namespace
8208 && init)
8209 {
8210 /* Leave the namespace of the object. */
8211 pop_decl_namespace ();
8212 }
8213
c82dbd95 8214 type = TREE_TYPE (decl);
8d08fdba 8215
f376e137 8216 if (type == error_mark_node)
cd9f6678 8217 return;
2f939d94 8218
24bef158 8219 /* Add this declaration to the statement-tree. */
44835fdd
MM
8220 if (building_stmt_tree ()
8221 && at_function_scope_p ()
8222 && TREE_CODE (decl) != RESULT_DECL)
24bef158
MM
8223 add_decl_stmt (decl);
8224
a7a7710d
NS
8225 if (TYPE_HAS_MUTABLE_P (type))
8226 TREE_READONLY (decl) = 0;
24bef158 8227
5156628f 8228 if (processing_template_decl)
5566b478
MS
8229 {
8230 if (init && DECL_INITIAL (decl))
2a1e9fdd 8231 DECL_INITIAL (decl) = init;
5566b478
MS
8232 goto finish_end0;
8233 }
3e41d13b 8234
27778b73
MM
8235 /* Parameters are handled by store_parm_decls, not cp_finish_decl. */
8236 my_friendly_assert (TREE_CODE (decl) != PARM_DECL, 19990828);
8237
8d08fdba
MS
8238 /* Take care of TYPE_DECLs up front. */
8239 if (TREE_CODE (decl) == TYPE_DECL)
8240 {
8241 if (init && DECL_INITIAL (decl))
8242 {
8243 /* typedef foo = bar; store the type of bar as the type of foo. */
8244 TREE_TYPE (decl) = type = TREE_TYPE (init);
8245 DECL_INITIAL (decl) = init = NULL_TREE;
8246 }
a0a33927
MS
8247 if (type != error_mark_node
8248 && IS_AGGR_TYPE (type) && DECL_NAME (decl))
8d08fdba
MS
8249 {
8250 if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
8251199e 8251 cp_warning ("shadowing previous type declaration of `%#D'", decl);
8d08fdba
MS
8252 set_identifier_type_value (DECL_NAME (decl), type);
8253 CLASSTYPE_GOT_SEMICOLON (type) = 1;
8254 }
8255 GNU_xref_decl (current_function_decl, decl);
cffa8729
MS
8256
8257 /* If we have installed this as the canonical typedef for this
8258 type, and that type has not been defined yet, delay emitting
956d6950 8259 the debug information for it, as we will emit it later. */
d2e5ee5c 8260 if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
d0f062fb 8261 && !COMPLETE_TYPE_P (TREE_TYPE (decl)))
cffa8729
MS
8262 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
8263
8d08fdba 8264 rest_of_decl_compilation (decl, NULL_PTR,
5566b478 8265 DECL_CONTEXT (decl) == NULL_TREE, at_eof);
8d08fdba
MS
8266 goto finish_end;
8267 }
3e41d13b 8268
8d08fdba 8269 if (TREE_CODE (decl) != FUNCTION_DECL)
3e41d13b 8270 ttype = target_type (type);
8d08fdba
MS
8271
8272 if (! DECL_EXTERNAL (decl) && TREE_READONLY (decl)
8273 && TYPE_NEEDS_CONSTRUCTING (type))
8274 {
8d08fdba
MS
8275 /* Currently, GNU C++ puts constants in text space, making them
8276 impossible to initialize. In the future, one would hope for
8277 an operating system which understood the difference between
8278 initialization and the running of a program. */
8279 was_readonly = 1;
8280 TREE_READONLY (decl) = 0;
8281 }
8282
27778b73 8283 if (TREE_CODE (decl) == FIELD_DECL && asmspec)
8d08fdba 8284 {
27778b73
MM
8285 /* This must override the asm specifier which was placed by
8286 grokclassfn. Lay this out fresh. */
8287 DECL_RTL (TREE_TYPE (decl)) = NULL_RTX;
8288 DECL_ASSEMBLER_NAME (decl) = get_identifier (asmspec);
8289 make_decl_rtl (decl, asmspec, 0);
8d08fdba
MS
8290 }
8291
c82dbd95
MM
8292 /* Deduce size of array from initialization, if not already known. */
8293 maybe_deduce_size_from_array_init (decl, init);
8294 init = check_initializer (decl, init);
3e41d13b 8295
8d08fdba
MS
8296 GNU_xref_decl (current_function_decl, decl);
8297
8d08fdba 8298 if (TREE_CODE (decl) == VAR_DECL)
57b52417 8299 layout_var_decl (decl);
8d08fdba
MS
8300
8301 /* Output the assembler code and/or RTL code for variables and functions,
8302 unless the type is an undefined structure or union.
8303 If not, it will get done when the type is completed. */
8d08fdba
MS
8304 if (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == FUNCTION_DECL
8305 || TREE_CODE (decl) == RESULT_DECL)
8306 {
27778b73
MM
8307 if (TREE_CODE (decl) == VAR_DECL)
8308 maybe_commonize_var (decl);
8d08fdba 8309
27778b73 8310 make_rtl_for_nonlocal_decl (decl, init, asmspec);
8d08fdba 8311
68642fb6 8312 if (TREE_CODE (type) == FUNCTION_TYPE
27778b73 8313 || TREE_CODE (type) == METHOD_TYPE)
68642fb6 8314 abstract_virtuals_error (decl,
27778b73 8315 strip_array_types (TREE_TYPE (type)));
68642fb6 8316 else
27778b73 8317 abstract_virtuals_error (decl, strip_array_types (type));
8d08fdba 8318
8d08fdba 8319 if (TREE_CODE (decl) == FUNCTION_DECL)
faae18ab 8320 ;
67d743fe
MS
8321 else if (DECL_EXTERNAL (decl)
8322 && ! (DECL_LANG_SPECIFIC (decl)
8323 && DECL_NOT_REALLY_EXTERN (decl)))
5566b478
MS
8324 {
8325 if (init)
8326 DECL_INITIAL (decl) = init;
8327 }
b35d4555 8328 else if (TREE_CODE (CP_DECL_CONTEXT (decl)) == FUNCTION_DECL)
8d08fdba 8329 {
b7b8bcd2 8330 /* This is a local declaration. */
b35d4555
MM
8331 if (doing_semantic_analysis_p ())
8332 maybe_inject_for_scope_var (decl);
b7b8bcd2
MM
8333 /* Initialize the local variable. But, if we're building a
8334 statement-tree, we'll do the initialization when we
8335 expand the tree. */
24bef158
MM
8336 if (processing_template_decl)
8337 {
8338 if (init || DECL_INITIAL (decl) == error_mark_node)
8339 DECL_INITIAL (decl) = init;
8340 }
8341 else
8342 {
b35d4555
MM
8343 /* If we're not building RTL, then we need to do so
8344 now. */
44835fdd 8345 my_friendly_assert (building_stmt_tree (), 20000906);
b35d4555 8346 /* Initialize the variable. */
24bef158
MM
8347 initialize_local_var (decl, init, flags);
8348 /* Clean up the variable. */
8349 destroy_local_var (decl);
8350 }
8d08fdba 8351 }
9ed9e79a
MM
8352 else if (TREE_STATIC (decl) && type != error_mark_node)
8353 {
8354 /* Cleanups for static variables are handled by `finish_file'. */
8355 if (TYPE_NEEDS_CONSTRUCTING (type) || init != NULL_TREE
834c6dff 8356 || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
9ed9e79a
MM
8357 expand_static_init (decl, init);
8358 }
8d08fdba
MS
8359 finish_end0:
8360
8361 /* Undo call to `pushclass' that was done in `start_decl'
8362 due to initialization of qualified member variable.
8363 I.e., Foo::x = 10; */
8364 {
4f1c5b7d 8365 tree context = CP_DECL_CONTEXT (decl);
8d08fdba 8366 if (context
2f939d94 8367 && TYPE_P (context)
8d08fdba
MS
8368 && (TREE_CODE (decl) == VAR_DECL
8369 /* We also have a pushclass done that we need to undo here
8370 if we're at top level and declare a method. */
5566b478
MS
8371 || TREE_CODE (decl) == FUNCTION_DECL)
8372 /* If size hasn't been set, we're still defining it,
8373 and therefore inside the class body; don't pop
8374 the binding level.. */
d0f062fb 8375 && COMPLETE_TYPE_P (context)
5566b478 8376 && context == current_class_type)
6b400b21 8377 pop_nested_class ();
8d08fdba
MS
8378 }
8379 }
8380
8381 finish_end:
8382
8d08fdba
MS
8383 if (was_readonly)
8384 TREE_READONLY (decl) = 1;
8d08fdba
MS
8385}
8386
82580166 8387/* This is here for a midend callback from c-common.c */
e92cc029 8388
82580166
MS
8389void
8390finish_decl (decl, init, asmspec_tree)
8391 tree decl, init;
8392 tree asmspec_tree;
8393{
cd9f6678 8394 cp_finish_decl (decl, init, asmspec_tree, 0);
82580166
MS
8395}
8396
db4283a0
MM
8397/* Returns a declaration for a VAR_DECL as if:
8398
8399 extern "C" TYPE NAME;
8400
8401 had been seen. Used to create compiler-generated global
8402 variables. */
8403
8404tree
8405declare_global_var (name, type)
8406 tree name;
8407 tree type;
8408{
8409 tree decl;
8410
8411 push_to_top_level ();
8412 decl = build_decl (VAR_DECL, name, type);
8413 TREE_PUBLIC (decl) = 1;
8414 DECL_EXTERNAL (decl) = 1;
8415 DECL_ARTIFICIAL (decl) = 1;
8416 pushdecl (decl);
8417 cp_finish_decl (decl, NULL_TREE, NULL_TREE, 0);
8418 pop_from_top_level ();
8419
8420 return decl;
8421}
8422
8423/* Returns a pointer to the `atexit' function. Note that if
8424 FLAG_USE_CXA_ATEXIT is non-zero, then this will actually be the new
8425 `__cxa_atexit' function specified in the IA64 C++ ABI. */
8426
8427static tree
8428get_atexit_node ()
8429{
8430 tree atexit_fndecl;
8431 tree arg_types;
8432 tree fn_type;
8433 tree fn_ptr_type;
8434 const char *name;
8435
8436 if (atexit_node)
8437 return atexit_node;
8438
8439 if (flag_use_cxa_atexit)
8440 {
8441 /* The declaration for `__cxa_atexit' is:
8442
8443 int __cxa_atexit (void (*)(void *), void *, void *)
8444
8445 We build up the argument types and then then function type
8446 itself. */
68642fb6 8447
db4283a0
MM
8448 /* First, build the pointer-to-function type for the first
8449 argument. */
8450 arg_types = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
8451 fn_type = build_function_type (void_type_node, arg_types);
8452 fn_ptr_type = build_pointer_type (fn_type);
8453 /* Then, build the rest of the argument types. */
8454 arg_types = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
8455 arg_types = tree_cons (NULL_TREE, ptr_type_node, arg_types);
8456 arg_types = tree_cons (NULL_TREE, fn_ptr_type, arg_types);
8457 /* And the final __cxa_atexit type. */
8458 fn_type = build_function_type (integer_type_node, arg_types);
8459 fn_ptr_type = build_pointer_type (fn_type);
8460 name = "__cxa_atexit";
8461 }
8462 else
8463 {
8464 /* The declaration for `atexit' is:
68642fb6 8465
db4283a0
MM
8466 int atexit (void (*)());
8467
8468 We build up the argument types and then then function type
8469 itself. */
8470 fn_type = build_function_type (void_type_node, void_list_node);
8471 fn_ptr_type = build_pointer_type (fn_type);
8472 arg_types = tree_cons (NULL_TREE, fn_ptr_type, void_list_node);
8473 /* Build the final atexit type. */
8474 fn_type = build_function_type (integer_type_node, arg_types);
8475 name = "atexit";
8476 }
8477
8478 /* Now, build the function declaration. */
8479 push_lang_context (lang_name_c);
0c11ada6 8480 atexit_fndecl = build_library_fn_ptr (name, fn_type);
db4283a0
MM
8481 mark_used (atexit_fndecl);
8482 pop_lang_context ();
8483 atexit_node = default_conversion (atexit_fndecl);
8484
8485 return atexit_node;
8486}
8487
8488/* Returns the __dso_handle VAR_DECL. */
8489
8490static tree
8491get_dso_handle_node ()
8492{
8493 if (dso_handle_node)
8494 return dso_handle_node;
8495
8496 /* Declare the variable. */
8497 dso_handle_node = declare_global_var (get_identifier ("__dso_handle"),
8498 ptr_type_node);
8499
8500 return dso_handle_node;
8501}
8502
8503/* Begin a new function with internal linkage whose job will be simply
8504 to destroy some particular variable. */
8505
8506static tree
8507start_cleanup_fn ()
8508{
8509 static int counter = 0;
8510 int old_interface_unknown = interface_unknown;
8511 char name[32];
8512 tree parmtypes;
8513 tree fntype;
8514 tree fndecl;
8515
8516 push_to_top_level ();
8517
8518 /* No need to mangle this. */
8519 push_lang_context (lang_name_c);
8520
8521 interface_unknown = 1;
8522
8523 /* Build the parameter-types. */
8524 parmtypes = void_list_node;
8525 /* Functions passed to __cxa_atexit take an additional parameter.
8526 We'll just ignore it. After we implement the new calling
8527 convention for destructors, we can eliminate the use of
8528 additional cleanup functions entirely in the -fnew-abi case. */
8529 if (flag_use_cxa_atexit)
8530 parmtypes = tree_cons (NULL_TREE, ptr_type_node, parmtypes);
8531 /* Build the function type itself. */
8532 fntype = build_function_type (void_type_node, parmtypes);
8533 /* Build the name of the function. */
8534 sprintf (name, "__tcf_%d", counter++);
8535 /* Build the function declaration. */
8536 fndecl = build_lang_decl (FUNCTION_DECL, get_identifier (name), fntype);
8537 /* It's a function with internal linkage, generated by the
8538 compiler. */
8539 TREE_PUBLIC (fndecl) = 0;
8540 DECL_ARTIFICIAL (fndecl) = 1;
5a728aca
MM
8541 /* Make the function `inline' so that it is only emitted if it is
8542 actually needed. It is unlikely that it will be inlined, since
8543 it is only called via a function pointer, but we avoid unncessary
8544 emissions this way. */
8545 DECL_INLINE (fndecl) = 1;
db4283a0
MM
8546 /* Build the parameter. */
8547 if (flag_use_cxa_atexit)
8548 {
8549 tree parmdecl;
8550
8551 parmdecl = build_decl (PARM_DECL, NULL_TREE, ptr_type_node);
8552 DECL_CONTEXT (parmdecl) = fndecl;
8553 DECL_ARG_TYPE (parmdecl) = ptr_type_node;
8554 TREE_USED (parmdecl) = 1;
8555 DECL_ARGUMENTS (fndecl) = parmdecl;
8556 }
8557
09ed39ad 8558 pushdecl (fndecl);
db4283a0
MM
8559 start_function (/*specs=*/NULL_TREE, fndecl, NULL_TREE, SF_PRE_PARSED);
8560 do_pushlevel ();
8561
8562 interface_unknown = old_interface_unknown;
8563
8564 pop_lang_context ();
8565
8566 return current_function_decl;
8567}
8568
8569/* Finish the cleanup function begun by start_cleanup_fn. */
8570
8571static void
8572end_cleanup_fn ()
8573{
8574 do_poplevel ();
8575
0acf7199 8576 expand_body (finish_function (0));
db4283a0
MM
8577
8578 pop_from_top_level ();
8579}
8580
bf419747
MM
8581/* Generate code to handle the destruction of DECL, an object with
8582 static storage duration. */
f0105ed3 8583
bf419747
MM
8584void
8585register_dtor_fn (decl)
f0105ed3
MM
8586 tree decl;
8587{
db4283a0 8588 tree cleanup;
f0105ed3 8589 tree compound_stmt;
db4283a0
MM
8590 tree args;
8591 tree fcall;
f0105ed3 8592
db4283a0 8593 int saved_flag_access_control;
f0105ed3 8594
834c6dff 8595 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
bf419747
MM
8596 return;
8597
f0105ed3
MM
8598 /* Call build_cleanup before we enter the anonymous function so that
8599 any access checks will be done relative to the current scope,
8600 rather than the scope of the anonymous function. */
8601 build_cleanup (decl);
8602
8603 /* Now start the function. */
db4283a0 8604 cleanup = start_cleanup_fn ();
f0105ed3
MM
8605
8606 /* Now, recompute the cleanup. It may contain SAVE_EXPRs that refer
8607 to the original function, rather than the anonymous one. That
8608 will make the back-end think that nested functions are in use,
8609 which causes confusion. */
8610 saved_flag_access_control = flag_access_control;
8611 flag_access_control = 0;
8612 fcall = build_cleanup (decl);
8613 flag_access_control = saved_flag_access_control;
8614
8615 /* Create the body of the anonymous function. */
8616 compound_stmt = begin_compound_stmt (/*has_no_scope=*/0);
8617 finish_expr_stmt (fcall);
8618 finish_compound_stmt (/*has_no_scope=*/0, compound_stmt);
db4283a0 8619 end_cleanup_fn ();
f0105ed3
MM
8620
8621 /* Call atexit with the cleanup function. */
8622 mark_addressable (cleanup);
8623 cleanup = build_unary_op (ADDR_EXPR, cleanup, 0);
db4283a0
MM
8624 if (flag_use_cxa_atexit)
8625 {
8626 args = tree_cons (NULL_TREE, get_dso_handle_node (), NULL_TREE);
8627 args = tree_cons (NULL_TREE, null_pointer_node, args);
8628 args = tree_cons (NULL_TREE, cleanup, args);
8629 }
8630 else
8631 args = tree_cons (NULL_TREE, cleanup, NULL_TREE);
8632 finish_expr_stmt (build_function_call (get_atexit_node (), args));
f0105ed3
MM
8633}
8634
8d08fdba
MS
8635void
8636expand_static_init (decl, init)
8637 tree decl;
8638 tree init;
8639{
8640 tree oldstatic = value_member (decl, static_aggregates);
a4443a08 8641
8d08fdba
MS
8642 if (oldstatic)
8643 {
8644 if (TREE_PURPOSE (oldstatic) && init != NULL_TREE)
8251199e 8645 cp_error ("multiple initializations given for `%D'", decl);
8d08fdba 8646 }
0aafb128 8647 else if (! toplevel_bindings_p ())
8d08fdba
MS
8648 {
8649 /* Emit code to perform this initialization but once. */
b7b8bcd2 8650 tree if_stmt;
f0105ed3 8651 tree then_clause;
f1dedc31 8652 tree assignment;
c395453c
MM
8653 tree guard;
8654 tree guard_init;
8d08fdba 8655
2036a15c
MM
8656 /* Emit code to perform this initialization but once. This code
8657 looks like:
8658
c395453c
MM
8659 static int guard = 0;
8660 if (!guard) {
2036a15c 8661 // Do initialization.
c395453c 8662 guard = 1;
2036a15c
MM
8663 // Register variable for destruction at end of program.
8664 }
8665
8666 Note that the `temp' variable is only set to 1 *after* the
8667 initialization is complete. This ensures that an exception,
8668 thrown during the construction, will cause the variable to
8669 reinitialized when we pass through this code again, as per:
68642fb6 8670
2036a15c
MM
8671 [stmt.dcl]
8672
8673 If the initialization exits by throwing an exception, the
8674 initialization is not complete, so it will be tried again
8675 the next time control enters the declaration.
8676
8677 In theory, this process should be thread-safe, too; multiple
8678 threads should not be able to initialize the variable more
8679 than once. We don't yet attempt to ensure thread-safety. */
c395453c
MM
8680
8681 /* Create the guard variable. */
8682 guard = get_guard (decl);
2036a15c
MM
8683
8684 /* Begin the conditional initialization. */
b7b8bcd2 8685 if_stmt = begin_if_stmt ();
c395453c 8686 finish_if_stmt_cond (get_guard_cond (guard), if_stmt);
f0105ed3 8687 then_clause = begin_compound_stmt (/*has_no_scope=*/0);
72b7eeff 8688
2036a15c 8689 /* Do the initialization itself. */
28cbf42c 8690 if (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))
f30432d7 8691 || (init && TREE_CODE (init) == TREE_LIST))
f1dedc31 8692 assignment = build_aggr_init (decl, init, 0);
f30432d7 8693 else if (init)
c557501d
MM
8694 /* The initialization we're doing here is just a bitwise
8695 copy. */
8696 assignment = build (INIT_EXPR, TREE_TYPE (decl), decl, init);
f1dedc31
MM
8697 else
8698 assignment = NULL_TREE;
8699
8700 /* Once the assignment is complete, set TEMP to 1. Since the
8701 construction of the static object is complete at this point,
8702 we want to make sure TEMP is set to 1 even if a temporary
8703 constructed during the initialization throws an exception
8704 when it is destroyed. So, we combine the initialization and
8705 the assignment to TEMP into a single expression, ensuring
8706 that when we call finish_expr_stmt the cleanups will not be
8707 run until after TEMP is set to 1. */
c395453c 8708 guard_init = set_guard (guard);
f1dedc31
MM
8709 if (assignment)
8710 {
8711 assignment = tree_cons (NULL_TREE, assignment,
68642fb6 8712 build_tree_list (NULL_TREE,
c395453c 8713 guard_init));
f1dedc31
MM
8714 assignment = build_compound_expr (assignment);
8715 }
8716 else
c395453c 8717 assignment = guard_init;
f1dedc31 8718 finish_expr_stmt (assignment);
72b7eeff 8719
2036a15c
MM
8720 /* Use atexit to register a function for destroying this static
8721 variable. */
bf419747 8722 register_dtor_fn (decl);
72b7eeff 8723
f0105ed3 8724 finish_compound_stmt (/*has_no_scope=*/0, then_clause);
b7b8bcd2
MM
8725 finish_then_clause (if_stmt);
8726 finish_if_stmt ();
8d08fdba
MS
8727 }
8728 else
bbd15aac 8729 static_aggregates = tree_cons (init, decl, static_aggregates);
8d08fdba 8730}
3c5c0849
MM
8731
8732/* Finish the declaration of a catch-parameter. */
8733
b35d4555 8734tree
3c5c0849
MM
8735start_handler_parms (declspecs, declarator)
8736 tree declspecs;
8737 tree declarator;
8738{
8739 tree decl;
8740 if (declspecs)
8741 {
8742 decl = grokdeclarator (declarator, declspecs, CATCHPARM,
8743 1, NULL_TREE);
8744 if (decl == NULL_TREE)
8745 error ("invalid catch parameter");
8746 }
8747 else
8748 decl = NULL_TREE;
b35d4555
MM
8749
8750 return decl;
3c5c0849
MM
8751}
8752
8d08fdba
MS
8753\f
8754/* Make TYPE a complete type based on INITIAL_VALUE.
8755 Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
6ab5c740 8756 2 if there was no information (in which case assume 0 if DO_DEFAULT). */
8d08fdba
MS
8757
8758int
8759complete_array_type (type, initial_value, do_default)
8760 tree type, initial_value;
8761 int do_default;
8762{
8763 register tree maxindex = NULL_TREE;
8764 int value = 0;
68642fb6 8765
8d08fdba
MS
8766 if (initial_value)
8767 {
7b019c19
MM
8768 /* An array of character type can be initialized from a
8769 brace-enclosed string constant. */
8770 if (char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (type)))
8771 && TREE_CODE (initial_value) == CONSTRUCTOR
8772 && CONSTRUCTOR_ELTS (initial_value)
8773 && (TREE_CODE (TREE_VALUE (CONSTRUCTOR_ELTS (initial_value)))
8774 == STRING_CST)
8775 && TREE_CHAIN (CONSTRUCTOR_ELTS (initial_value)) == NULL_TREE)
8776 initial_value = TREE_VALUE (CONSTRUCTOR_ELTS (initial_value));
8777
8778 /* Note MAXINDEX is really the maximum index, one less than the
8779 size. */
8d08fdba 8780 if (TREE_CODE (initial_value) == STRING_CST)
e1cd6e56
MS
8781 {
8782 int eltsize
8783 = int_size_in_bytes (TREE_TYPE (TREE_TYPE (initial_value)));
8784 maxindex = build_int_2 ((TREE_STRING_LENGTH (initial_value)
8785 / eltsize) - 1, 0);
8786 }
8d08fdba
MS
8787 else if (TREE_CODE (initial_value) == CONSTRUCTOR)
8788 {
e1cd6e56 8789 tree elts = CONSTRUCTOR_ELTS (initial_value);
fed3cef0
RK
8790
8791 maxindex = ssize_int (-1);
e1cd6e56
MS
8792 for (; elts; elts = TREE_CHAIN (elts))
8793 {
8794 if (TREE_PURPOSE (elts))
8795 maxindex = TREE_PURPOSE (elts);
8796 else
fed3cef0 8797 maxindex = size_binop (PLUS_EXPR, maxindex, ssize_int (1));
e1cd6e56
MS
8798 }
8799 maxindex = copy_node (maxindex);
8d08fdba
MS
8800 }
8801 else
8802 {
8803 /* Make an error message unless that happened already. */
8804 if (initial_value != error_mark_node)
8805 value = 1;
0db982be
ML
8806 else
8807 initial_value = NULL_TREE;
8d08fdba
MS
8808
8809 /* Prevent further error messages. */
8810 maxindex = build_int_2 (0, 0);
8811 }
8812 }
8813
8814 if (!maxindex)
8815 {
8816 if (do_default)
8817 maxindex = build_int_2 (0, 0);
8818 value = 2;
8819 }
8820
8821 if (maxindex)
8822 {
51c184be 8823 tree itype;
6ab5c740
NS
8824 tree domain;
8825
8826 domain = build_index_type (maxindex);
8827 TYPE_DOMAIN (type) = domain;
51c184be 8828
dff6b454 8829 if (! TREE_TYPE (maxindex))
6ab5c740 8830 TREE_TYPE (maxindex) = domain;
51c184be
MS
8831 if (initial_value)
8832 itype = TREE_TYPE (initial_value);
8833 else
8834 itype = NULL;
8835 if (itype && !TYPE_DOMAIN (itype))
6ab5c740 8836 TYPE_DOMAIN (itype) = domain;
dff6b454
RK
8837 /* The type of the main variant should never be used for arrays
8838 of different sizes. It should only ever be completed with the
8839 size of the array. */
8840 if (! TYPE_DOMAIN (TYPE_MAIN_VARIANT (type)))
6ab5c740 8841 TYPE_DOMAIN (TYPE_MAIN_VARIANT (type)) = domain;
8d08fdba
MS
8842 }
8843
8844 /* Lay out the type now that we can get the real answer. */
8845
8846 layout_type (type);
8847
8848 return value;
8849}
8850\f
8851/* Return zero if something is declared to be a member of type
8852 CTYPE when in the context of CUR_TYPE. STRING is the error
8853 message to print in that case. Otherwise, quietly return 1. */
e92cc029 8854
8d08fdba 8855static int
4dacf5bd 8856member_function_or_else (ctype, cur_type, flags)
8d08fdba 8857 tree ctype, cur_type;
4dacf5bd 8858 enum overload_flags flags;
8d08fdba
MS
8859{
8860 if (ctype && ctype != cur_type)
8861 {
4dacf5bd 8862 if (flags == DTOR_FLAG)
2ae7bada
NS
8863 cp_error ("destructor for alien class `%T' cannot be a member",
8864 ctype);
4dacf5bd 8865 else
2ae7bada
NS
8866 cp_error ("constructor for alien class `%T' cannot be a member",
8867 ctype);
8d08fdba
MS
8868 return 0;
8869 }
8870 return 1;
8871}
8872\f
8873/* Subroutine of `grokdeclarator'. */
8874
8875/* Generate errors possibly applicable for a given set of specifiers.
8876 This is for ARM $7.1.2. */
e92cc029 8877
8d08fdba
MS
8878static void
8879bad_specifiers (object, type, virtualp, quals, inlinep, friendp, raises)
8880 tree object;
d8e178a0 8881 const char *type;
8d08fdba
MS
8882 int virtualp, quals, friendp, raises, inlinep;
8883{
8884 if (virtualp)
8251199e 8885 cp_error ("`%D' declared as a `virtual' %s", object, type);
8d08fdba 8886 if (inlinep)
8251199e 8887 cp_error ("`%D' declared as an `inline' %s", object, type);
8d08fdba 8888 if (quals)
8251199e 8889 cp_error ("`const' and `volatile' function specifiers on `%D' invalid in %s declaration",
a28e3c7f 8890 object, type);
8d08fdba 8891 if (friendp)
f8e55f34 8892 cp_error_at ("`%D' declared as a friend", object);
f3e4d63c 8893 if (raises)
f8e55f34 8894 cp_error_at ("`%D' declared with an exception specification", object);
8d08fdba
MS
8895}
8896
8897/* CTYPE is class type, or null if non-class.
8898 TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
8899 or METHOD_TYPE.
8900 DECLARATOR is the function's name.
8901 VIRTUALP is truthvalue of whether the function is virtual or not.
8902 FLAGS are to be passed through to `grokclassfn'.
8903 QUALS are qualifiers indicating whether the function is `const'
8904 or `volatile'.
8905 RAISES is a list of exceptions that this function can raise.
8906 CHECK is 1 if we must find this method in CTYPE, 0 if we should
68642fb6 8907 not look, and -1 if we should not call `grokclassfn' at all.
3ddfb0e6 8908
20496fa2 8909 Returns `NULL_TREE' if something goes wrong, after issuing
3ddfb0e6 8910 applicable error messages. */
e92cc029 8911
8d08fdba 8912static tree
386b8a85 8913grokfndecl (ctype, type, declarator, orig_declarator, virtualp, flags, quals,
7a8f9fa9 8914 raises, check, friendp, publicp, inlinep, funcdef_flag,
2c73f9f5 8915 template_count, in_namespace)
8d08fdba
MS
8916 tree ctype, type;
8917 tree declarator;
386b8a85 8918 tree orig_declarator;
8d08fdba
MS
8919 int virtualp;
8920 enum overload_flags flags;
7a8f9fa9 8921 tree quals, raises;
386b8a85 8922 int check, friendp, publicp, inlinep, funcdef_flag, template_count;
2c73f9f5 8923 tree in_namespace;
8d08fdba
MS
8924{
8925 tree cname, decl;
8926 int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
856216bb 8927 int has_default_arg = 0;
42976354 8928 tree t;
8d08fdba
MS
8929
8930 if (ctype)
8931 cname = TREE_CODE (TYPE_NAME (ctype)) == TYPE_DECL
8932 ? TYPE_IDENTIFIER (ctype) : TYPE_NAME (ctype);
8933 else
8934 cname = NULL_TREE;
8935
8936 if (raises)
8937 {
f30432d7 8938 type = build_exception_variant (type, raises);
8d08fdba 8939 }
c11b6f21 8940
8d08fdba 8941 decl = build_lang_decl (FUNCTION_DECL, declarator, type);
2c73f9f5 8942 /* Propagate volatile out from type to decl. */
8d08fdba 8943 if (TYPE_VOLATILE (type))
893de33c 8944 TREE_THIS_VOLATILE (decl) = 1;
8d08fdba 8945
79c4d4b7 8946 /* If this decl has namespace scope, set that up. */
2c73f9f5 8947 if (in_namespace)
b262d64c 8948 set_decl_namespace (decl, in_namespace, friendp);
adae082f 8949 else if (!ctype)
79c4d4b7 8950 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
2c73f9f5 8951
0f8766b8
JM
8952 /* `main' and builtins have implicit 'C' linkage. */
8953 if ((MAIN_NAME_P (declarator)
8954 || (IDENTIFIER_LENGTH (declarator) > 10
8955 && IDENTIFIER_POINTER (declarator)[0] == '_'
8956 && IDENTIFIER_POINTER (declarator)[1] == '_'
8957 && strncmp (IDENTIFIER_POINTER (declarator)+2, "builtin_", 8) == 0))
8958 && current_lang_name == lang_name_cplusplus
94706a5c 8959 && ctype == NULL_TREE
79c4d4b7
JM
8960 /* NULL_TREE means global namespace. */
8961 && DECL_CONTEXT (decl) == NULL_TREE)
0f8766b8
JM
8962 DECL_LANGUAGE (decl) = lang_c;
8963
8d08fdba
MS
8964 /* Should probably propagate const out from type to decl I bet (mrs). */
8965 if (staticp)
8966 {
8967 DECL_STATIC_FUNCTION_P (decl) = 1;
8968 DECL_CONTEXT (decl) = ctype;
8d08fdba
MS
8969 }
8970
e76a2646 8971 if (ctype)
4f1c5b7d 8972 DECL_CONTEXT (decl) = ctype;
e76a2646 8973
0f8766b8 8974 if (ctype == NULL_TREE && DECL_MAIN_P (decl))
faae18ab 8975 {
848b92e1 8976 if (processing_template_decl)
cb9a3ff8 8977 error ("cannot declare `::main' to be a template");
faae18ab 8978 if (inlinep)
cb9a3ff8 8979 error ("cannot declare `::main' to be inline");
f22967f3 8980 if (!publicp)
cb9a3ff8 8981 error ("cannot declare `::main' to be static");
f22967f3
MM
8982 if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
8983 integer_type_node))
8984 error ("`main' must return `int'");
faae18ab
MS
8985 inlinep = 0;
8986 publicp = 1;
8987 }
50a6dbd7 8988
59e76fc6
JM
8989 /* Members of anonymous types and local classes have no linkage; make
8990 them internal. */
8991 if (ctype && (ANON_AGGRNAME_P (TYPE_IDENTIFIER (ctype))
4f1c5b7d 8992 || decl_function_context (TYPE_MAIN_DECL (ctype))))
50a6dbd7
JM
8993 publicp = 0;
8994
8995 if (publicp)
8996 {
8997 /* [basic.link]: A name with no linkage (notably, the name of a class
8998 or enumeration declared in a local scope) shall not be used to
8999 declare an entity with linkage.
9000
9001 Only check this for public decls for now. */
9002 t = no_linkage_check (TREE_TYPE (decl));
9003 if (t)
9004 {
7f7c930e
JM
9005 if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
9006 {
eb68cb58 9007 if (DECL_EXTERN_C_P (decl))
7f7c930e
JM
9008 /* Allow this; it's pretty common in C. */;
9009 else
9010 cp_pedwarn ("non-local function `%#D' uses anonymous type",
9011 decl);
9012 }
50a6dbd7 9013 else
8251199e 9014 cp_pedwarn ("non-local function `%#D' uses local type `%T'",
cce2be43 9015 decl, t);
50a6dbd7
JM
9016 }
9017 }
9018
893de33c 9019 TREE_PUBLIC (decl) = publicp;
faae18ab 9020 if (! publicp)
893de33c
JM
9021 {
9022 DECL_INTERFACE_KNOWN (decl) = 1;
9023 DECL_NOT_REALLY_EXTERN (decl) = 1;
9024 }
faae18ab
MS
9025
9026 if (inlinep)
9027 DECL_THIS_INLINE (decl) = DECL_INLINE (decl) = 1;
8d08fdba
MS
9028
9029 DECL_EXTERNAL (decl) = 1;
9030 if (quals != NULL_TREE && TREE_CODE (type) == FUNCTION_TYPE)
9031 {
8251199e 9032 cp_error ("%smember function `%D' cannot have `%T' method qualifier",
8d08fdba
MS
9033 (ctype ? "static " : "non-"), decl, TREE_VALUE (quals));
9034 quals = NULL_TREE;
9035 }
9036
596ea4e5 9037 if (IDENTIFIER_OPNAME_P (DECL_NAME (decl)))
8d08fdba
MS
9038 grok_op_properties (decl, virtualp, check < 0);
9039
4f1c5b7d 9040 if (ctype && decl_function_context (decl))
893de33c 9041 DECL_NO_STATIC_CHAIN (decl) = 1;
e76a2646 9042
42976354
BK
9043 for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
9044 if (TREE_PURPOSE (t)
9045 && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
9046 {
856216bb 9047 has_default_arg = 1;
42976354
BK
9048 break;
9049 }
9050
f9d94ea4
JM
9051 if (friendp
9052 && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
9053 {
9054 if (funcdef_flag)
8251199e
JM
9055 cp_error
9056 ("defining explicit specialization `%D' in friend declaration",
f9d94ea4
JM
9057 orig_declarator);
9058 else
9059 {
7e2421f7
MM
9060 if (PROCESSING_REAL_TEMPLATE_DECL_P ())
9061 {
9062 /* Something like `template <class T> friend void f<T>()'. */
cb9a3ff8 9063 cp_error ("invalid use of template-id `%D' in declaration of primary template",
7e2421f7 9064 orig_declarator);
20496fa2 9065 return NULL_TREE;
7e2421f7
MM
9066 }
9067
856216bb 9068
f9d94ea4
JM
9069 /* A friend declaration of the form friend void f<>(). Record
9070 the information in the TEMPLATE_ID_EXPR. */
9071 SET_DECL_IMPLICIT_INSTANTIATION (decl);
9072 DECL_TEMPLATE_INFO (decl)
e1b3e07d
MM
9073 = tree_cons (TREE_OPERAND (orig_declarator, 0),
9074 TREE_OPERAND (orig_declarator, 1),
9075 NULL_TREE);
856216bb
MM
9076
9077 if (has_default_arg)
9078 {
9079 cp_error ("default arguments are not allowed in declaration of friend template specialization `%D'",
9080 decl);
9081 return NULL_TREE;
9082 }
9083
9084 if (inlinep)
9085 {
68642fb6 9086 cp_error ("`inline' is not allowed in declaration of friend template specialization `%D'",
856216bb
MM
9087 decl);
9088 return NULL_TREE;
9089 }
f9d94ea4 9090 }
f84b4be9 9091 }
386b8a85 9092
856216bb
MM
9093 if (has_default_arg)
9094 add_defarg_fn (decl);
9095
0f8766b8 9096 /* Plain overloading: will not be grok'd by grokclassfn. */
669ec2b4 9097 if (! ctype && ! processing_template_decl
eb68cb58 9098 && !DECL_EXTERN_C_P (decl)
669ec2b4 9099 && (! DECL_USE_TEMPLATE (decl) || name_mangling_version < 1))
0f8766b8
JM
9100 set_mangled_name_for_decl (decl);
9101
1eb0072d
JM
9102 if (funcdef_flag)
9103 /* Make the init_value nonzero so pushdecl knows this is not
9104 tentative. error_mark_node is replaced later with the BLOCK. */
9105 DECL_INITIAL (decl) = error_mark_node;
9106
93ca4ba7 9107 if (TYPE_NOTHROW_P (type) || nothrow_libfn_p (decl))
1660cb3a
JM
9108 TREE_NOTHROW (decl) = 1;
9109
75650646 9110 /* Caller will do the rest of this. */
8d08fdba
MS
9111 if (check < 0)
9112 return decl;
9113
9114 if (flags == NO_SPECIAL && ctype && constructor_name (cname) == declarator)
74b846e0
MM
9115 DECL_CONSTRUCTOR_P (decl) = 1;
9116
9117 /* Function gets the ugly name, field gets the nice one. This call
9118 may change the type of the function (because of default
9119 parameters)! */
9120 if (ctype != NULL_TREE)
9121 grokclassfn (ctype, decl, flags, quals);
9122
9123 decl = check_explicit_specialization (orig_declarator, decl,
9124 template_count,
9125 2 * (funcdef_flag != 0) +
9126 4 * (friendp != 0));
9127 if (decl == error_mark_node)
9128 return NULL_TREE;
98c1c668 9129
74b846e0
MM
9130 if (ctype != NULL_TREE
9131 && (! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
9132 && check)
8d08fdba 9133 {
74b846e0 9134 tree old_decl;
8d08fdba 9135
74b846e0 9136 old_decl = check_classfn (ctype, decl);
8d08fdba 9137
74b846e0
MM
9138 if (old_decl && TREE_CODE (old_decl) == TEMPLATE_DECL)
9139 /* Because grokfndecl is always supposed to return a
9140 FUNCTION_DECL, we pull out the DECL_TEMPLATE_RESULT
9141 here. We depend on our callers to figure out that its
9142 really a template that's being returned. */
9143 old_decl = DECL_TEMPLATE_RESULT (old_decl);
6c30752f 9144
74b846e0
MM
9145 if (old_decl && DECL_STATIC_FUNCTION_P (old_decl)
9146 && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
5566b478 9147 {
74b846e0
MM
9148 /* Remove the `this' parm added by grokclassfn.
9149 XXX Isn't this done in start_function, too? */
3afb32a4 9150 revert_static_member_fn (decl);
74b846e0 9151 last_function_parms = TREE_CHAIN (last_function_parms);
5566b478 9152 }
74b846e0
MM
9153 if (old_decl && DECL_ARTIFICIAL (old_decl))
9154 cp_error ("definition of implicitly-declared `%D'", old_decl);
8d08fdba 9155
74b846e0 9156 if (old_decl)
8d08fdba 9157 {
74b846e0
MM
9158 /* Since we've smashed OLD_DECL to its
9159 DECL_TEMPLATE_RESULT, we must do the same to DECL. */
9160 if (TREE_CODE (decl) == TEMPLATE_DECL)
9161 decl = DECL_TEMPLATE_RESULT (decl);
9162
9163 /* Attempt to merge the declarations. This can fail, in
9164 the case of some illegal specialization declarations. */
9165 if (!duplicate_decls (decl, old_decl))
9166 cp_error ("no `%#D' member function declared in class `%T'",
9167 decl, ctype);
9168 return old_decl;
8d08fdba
MS
9169 }
9170 }
74b846e0
MM
9171
9172 if (DECL_CONSTRUCTOR_P (decl) && !grok_ctor_properties (ctype, decl))
9173 return NULL_TREE;
9174
9175 if (ctype == NULL_TREE || check)
9176 return decl;
9177
9178 if (virtualp)
9179 {
9180 DECL_VIRTUAL_P (decl) = 1;
9181 if (DECL_VINDEX (decl) == NULL_TREE)
9182 DECL_VINDEX (decl) = error_mark_node;
9183 IDENTIFIER_VIRTUAL_P (DECL_NAME (decl)) = 1;
9184 }
9185
8d08fdba
MS
9186 return decl;
9187}
9188
9189static tree
2c73f9f5 9190grokvardecl (type, declarator, specbits_in, initialized, constp, in_namespace)
8d08fdba
MS
9191 tree type;
9192 tree declarator;
d2e5ee5c 9193 RID_BIT_TYPE *specbits_in;
8d08fdba 9194 int initialized;
a9aedbc2 9195 int constp;
2c73f9f5 9196 tree in_namespace;
8d08fdba
MS
9197{
9198 tree decl;
f7da6097
MS
9199 RID_BIT_TYPE specbits;
9200
9201 specbits = *specbits_in;
8d08fdba
MS
9202
9203 if (TREE_CODE (type) == OFFSET_TYPE)
9204 {
9205 /* If you declare a static member so that it
9206 can be initialized, the code will reach here. */
5b605f68
MS
9207 tree basetype = TYPE_OFFSET_BASETYPE (type);
9208 type = TREE_TYPE (type);
4ce3d537 9209 decl = build_lang_decl (VAR_DECL, declarator, type);
5b605f68 9210 DECL_CONTEXT (decl) = basetype;
1f6e1acc
AS
9211 /* DECL_ASSEMBLER_NAME is needed only for full-instantiated
9212 templates. */
9213 if (!uses_template_parms (decl))
669ec2b4
JM
9214 {
9215 if (flag_new_abi)
9216 DECL_ASSEMBLER_NAME (decl) = mangle_decl (decl);
9217 else
9218 DECL_ASSEMBLER_NAME (decl) = build_static_name (basetype,
9219 declarator);
9220 }
8d08fdba
MS
9221 }
9222 else
30394414 9223 {
79c4d4b7
JM
9224 tree context;
9225
9226 if (in_namespace)
9227 context = in_namespace;
9228 else if (namespace_bindings_p () || RIDBIT_SETP (RID_EXTERN, specbits))
9229 context = current_namespace;
820fcad8
JM
9230 else
9231 context = NULL_TREE;
79c4d4b7 9232
6dfbb909
MM
9233 if (processing_template_decl && context)
9234 /* For global variables, declared in a template, we need the
9235 full lang_decl. */
cd9f6678 9236 decl = build_lang_decl (VAR_DECL, declarator, type);
9188c363 9237 else
c82dbd95 9238 decl = build_decl (VAR_DECL, declarator, type);
79c4d4b7
JM
9239
9240 if (context)
b262d64c 9241 set_decl_namespace (decl, context, 0);
79c4d4b7
JM
9242
9243 context = DECL_CONTEXT (decl);
1f6e1acc 9244 if (declarator && context && current_lang_name != lang_name_c)
669ec2b4
JM
9245 {
9246 if (flag_new_abi)
9247 DECL_ASSEMBLER_NAME (decl) = mangle_decl (decl);
9248 else
9249 DECL_ASSEMBLER_NAME (decl)
9250 = build_static_name (context, declarator);
9251 }
30394414 9252 }
6060a796 9253
2c73f9f5 9254 if (in_namespace)
b262d64c 9255 set_decl_namespace (decl, in_namespace, 0);
2c73f9f5 9256
8d08fdba
MS
9257 if (RIDBIT_SETP (RID_EXTERN, specbits))
9258 {
9259 DECL_THIS_EXTERN (decl) = 1;
9260 DECL_EXTERNAL (decl) = !initialized;
9261 }
9262
9263 /* In class context, static means one per class,
9264 public access, and static storage. */
2b9dc906 9265 if (DECL_CLASS_SCOPE_P (decl))
8d08fdba
MS
9266 {
9267 TREE_PUBLIC (decl) = 1;
9268 TREE_STATIC (decl) = 1;
5b605f68 9269 DECL_EXTERNAL (decl) = 0;
8d08fdba
MS
9270 }
9271 /* At top level, either `static' or no s.c. makes a definition
9272 (perhaps tentative), and absence of `static' makes it public. */
a9aedbc2 9273 else if (toplevel_bindings_p ())
8d08fdba 9274 {
a9aedbc2 9275 TREE_PUBLIC (decl) = (RIDBIT_NOTSETP (RID_STATIC, specbits)
9fffd093 9276 && (DECL_THIS_EXTERN (decl) || ! constp));
8d08fdba
MS
9277 TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
9278 }
9279 /* Not at top level, only `static' makes a static definition. */
9280 else
9281 {
9282 TREE_STATIC (decl) = !! RIDBIT_SETP (RID_STATIC, specbits);
9283 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
9284 }
50a6dbd7
JM
9285
9286 if (TREE_PUBLIC (decl))
9287 {
9288 /* [basic.link]: A name with no linkage (notably, the name of a class
9289 or enumeration declared in a local scope) shall not be used to
9290 declare an entity with linkage.
9291
9292 Only check this for public decls for now. */
9293 tree t = no_linkage_check (TREE_TYPE (decl));
9294 if (t)
9295 {
9296 if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
9297 /* Ignore for now; `enum { foo } e' is pretty common. */;
9298 else
8251199e 9299 cp_pedwarn ("non-local variable `%#D' uses local type `%T'",
50a6dbd7
JM
9300 decl, t);
9301 }
9302 }
9303
8d08fdba
MS
9304 return decl;
9305}
9306
d8f8dca1
MM
9307/* Create and return a canonical pointer to member function type, for
9308 TYPE, which is a POINTER_TYPE to a METHOD_TYPE. */
8d08fdba
MS
9309
9310tree
9311build_ptrmemfunc_type (type)
9312 tree type;
9313{
9314 tree fields[4];
9315 tree t;
9316 tree u;
46cbda4a 9317 tree unqualified_variant = NULL_TREE;
8d08fdba
MS
9318
9319 /* If a canonical type already exists for this type, use it. We use
9320 this method instead of type_hash_canon, because it only does a
9321 simple equality check on the list of field members. */
9322
9323 if ((t = TYPE_GET_PTRMEMFUNC_TYPE (type)))
9324 return t;
9325
46cbda4a
MM
9326 /* Make sure that we always have the unqualified pointer-to-member
9327 type first. */
9328 if (CP_TYPE_QUALS (type) != TYPE_UNQUALIFIED)
68642fb6 9329 unqualified_variant
46cbda4a
MM
9330 = build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type));
9331
33848bb0 9332 t = make_aggr_type (RECORD_TYPE);
2c73f9f5 9333 /* Let the front-end know this is a pointer to member function... */
db5ae43f 9334 TYPE_PTRMEMFUNC_FLAG (t) = 1;
2c73f9f5 9335 /* ... and not really an aggregate. */
7ddedda4 9336 SET_IS_AGGR_TYPE (t, 0);
8d08fdba 9337
c7e266a6
MM
9338 if (!flag_new_abi)
9339 {
9340 u = make_aggr_type (UNION_TYPE);
9341 SET_IS_AGGR_TYPE (u, 0);
721c3b42
MM
9342 fields[0] = build_decl (FIELD_DECL, pfn_identifier, type);
9343 fields[1] = build_decl (FIELD_DECL, delta2_identifier,
9344 delta_type_node);
c7e266a6
MM
9345 finish_builtin_type (u, "__ptrmemfunc_type", fields, 1, ptr_type_node);
9346 TYPE_NAME (u) = NULL_TREE;
9347
721c3b42
MM
9348 fields[0] = build_decl (FIELD_DECL, delta_identifier,
9349 delta_type_node);
9350 fields[1] = build_decl (FIELD_DECL, index_identifier,
9351 delta_type_node);
9352 fields[2] = build_decl (FIELD_DECL, pfn_or_delta2_identifier, u);
c7e266a6
MM
9353 finish_builtin_type (t, "__ptrmemfunc_type", fields, 2, ptr_type_node);
9354 }
9355 else
9356 {
721c3b42
MM
9357 fields[0] = build_decl (FIELD_DECL, pfn_identifier, type);
9358 fields[1] = build_decl (FIELD_DECL, delta_identifier,
9359 delta_type_node);
c7e266a6
MM
9360 finish_builtin_type (t, "__ptrmemfunc_type", fields, 1, ptr_type_node);
9361 }
8d08fdba 9362
8d08fdba
MS
9363 /* Zap out the name so that the back-end will give us the debugging
9364 information for this anonymous RECORD_TYPE. */
9365 TYPE_NAME (t) = NULL_TREE;
9366
46cbda4a
MM
9367 /* If this is not the unqualified form of this pointer-to-member
9368 type, set the TYPE_MAIN_VARIANT for this type to be the
9369 unqualified type. Since they are actually RECORD_TYPEs that are
9370 not variants of each other, we must do this manually. */
9371 if (CP_TYPE_QUALS (type) != TYPE_UNQUALIFIED)
9372 {
9373 t = build_qualified_type (t, CP_TYPE_QUALS (type));
9374 TYPE_MAIN_VARIANT (t) = unqualified_variant;
9375 TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (unqualified_variant);
9376 TYPE_NEXT_VARIANT (unqualified_variant) = t;
9377 }
9378
9379 /* Cache this pointer-to-member type so that we can find it again
9380 later. */
8d08fdba
MS
9381 TYPE_SET_PTRMEMFUNC_TYPE (type, t);
9382
e92cc029 9383 /* Seems to be wanted. */
8d08fdba 9384 CLASSTYPE_GOT_SEMICOLON (t) = 1;
46cbda4a 9385
8d08fdba
MS
9386 return t;
9387}
9388
b17e2870
JM
9389/* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
9390 Check to see that the definition is valid. Issue appropriate error
9391 messages. Return 1 if the definition is particularly bad, or 0
9392 otherwise. */
9393
9394int
9395check_static_variable_definition (decl, type)
9396 tree decl;
9397 tree type;
9398{
9399 /* Motion 10 at San Diego: If a static const integral data member is
9400 initialized with an integral constant expression, the initializer
9401 may appear either in the declaration (within the class), or in
9402 the definition, but not both. If it appears in the class, the
9403 member is a member constant. The file-scope definition is always
9404 required. */
9405 if (CLASS_TYPE_P (type) || TREE_CODE (type) == REFERENCE_TYPE)
9406 {
cb9a3ff8 9407 cp_error ("invalid in-class initialization of static data member of non-integral type `%T'",
b17e2870
JM
9408 type);
9409 /* If we just return the declaration, crashes will sometimes
9410 occur. We therefore return void_type_node, as if this was a
9411 friend declaration, to cause callers to completely ignore
9412 this declaration. */
9413 return 1;
9414 }
9415 else if (!CP_TYPE_CONST_P (type))
cb9a3ff8 9416 cp_error ("ISO C++ forbids in-class initialization of non-const static member `%D'",
b17e2870
JM
9417 decl);
9418 else if (pedantic && !INTEGRAL_TYPE_P (type))
cb9a3ff8 9419 cp_pedwarn ("ISO C++ forbids initialization of member constant `%D' of non-integral type `%T'", decl, type);
b17e2870
JM
9420
9421 return 0;
9422}
9423
2848ad0f
MM
9424/* Given the SIZE (i.e., number of elements) in an array, compute an
9425 appropriate index type for the array. If non-NULL, NAME is the
9426 name of the thing being declared. */
9427
c95cd22e 9428tree
2848ad0f
MM
9429compute_array_index_type (name, size)
9430 tree name;
9431 tree size;
9432{
9433 tree itype;
9434
9435 /* The size might be the result of a cast. */
9436 STRIP_TYPE_NOPS (size);
9437
9438 /* It might be a const variable or enumeration constant. */
fc611ce0 9439 size = decl_constant_value (size);
2848ad0f
MM
9440
9441 /* If this involves a template parameter, it will be a constant at
9442 instantiation time, but we don't know what the value is yet.
9443 Even if no template parameters are involved, we may an expression
9444 that is not a constant; we don't even simplify `1 + 2' when
9445 processing a template. */
9446 if (processing_template_decl)
9447 {
9448 /* Resolve a qualified reference to an enumerator or static
9449 const data member of ours. */
9450 if (TREE_CODE (size) == SCOPE_REF
9451 && TREE_OPERAND (size, 0) == current_class_type)
9452 {
9453 tree t = lookup_field (current_class_type,
9454 TREE_OPERAND (size, 1), 0, 0);
9455 if (t)
9456 size = t;
9457 }
9458
9459 return build_index_type (build_min (MINUS_EXPR, sizetype,
9460 size, integer_one_node));
9461 }
9462
9463 /* The array bound must be an integer type. */
9464 if (TREE_CODE (TREE_TYPE (size)) != INTEGER_TYPE
9465 && TREE_CODE (TREE_TYPE (size)) != ENUMERAL_TYPE
9466 && TREE_CODE (TREE_TYPE (size)) != BOOLEAN_TYPE)
9467 {
d67cdbc3
JM
9468 if (name)
9469 cp_error ("size of array `%D' has non-integer type", name);
9470 else
9471 cp_error ("size of array has non-integer type");
2848ad0f
MM
9472 size = integer_one_node;
9473 }
9474
9475 /* Normally, the array-bound will be a constant. */
2bb5d995 9476 if (TREE_CODE (size) == INTEGER_CST)
2848ad0f
MM
9477 {
9478 /* Check to see if the array bound overflowed. Make that an
9479 error, no matter how generous we're being. */
9480 int old_flag_pedantic_errors = flag_pedantic_errors;
9481 int old_pedantic = pedantic;
9482 pedantic = flag_pedantic_errors = 1;
9483 constant_expression_warning (size);
9484 pedantic = old_pedantic;
9485 flag_pedantic_errors = old_flag_pedantic_errors;
9486
9487 /* An array must have a positive number of elements. */
9488 if (INT_CST_LT (size, integer_zero_node))
9489 {
d67cdbc3
JM
9490 if (name)
9491 cp_error ("size of array `%D' is negative", name);
9492 else
9493 cp_error ("size of array is negative");
2848ad0f
MM
9494 size = integer_one_node;
9495 }
9496 /* Except that an extension we allow zero-sized arrays. We
68642fb6 9497 always allow them in system headers because glibc uses
2848ad0f
MM
9498 them. */
9499 else if (integer_zerop (size) && pedantic && !in_system_header)
d67cdbc3
JM
9500 {
9501 if (name)
cb9a3ff8 9502 cp_pedwarn ("ISO C++ forbids zero-size array `%D'", name);
d67cdbc3 9503 else
cb9a3ff8 9504 cp_pedwarn ("ISO C++ forbids zero-size array");
d67cdbc3 9505 }
2848ad0f 9506 }
2bb5d995
JM
9507 else if (TREE_CONSTANT (size))
9508 {
9509 /* `(int) &fn' is not a valid array bound. */
9510 if (name)
9511 cp_error ("size of array `%D' is not an integral constant-expression",
9512 name);
9513 else
9514 cp_error ("size of array is not an integral constant-expression");
9515 }
2848ad0f
MM
9516
9517 /* Compute the index of the largest element in the array. It is
9518 one less than the number of elements in the array. */
9519 itype
ab76ca54
MM
9520 = fold (cp_build_binary_op (MINUS_EXPR,
9521 cp_convert (ssizetype, size),
9522 cp_convert (ssizetype,
9523 integer_one_node)));
68642fb6 9524
2848ad0f
MM
9525 /* Check for variable-sized arrays. We allow such things as an
9526 extension, even though they are not allowed in ANSI/ISO C++. */
9527 if (!TREE_CONSTANT (itype))
9528 {
9529 if (pedantic)
9530 {
9531 if (name)
cb9a3ff8 9532 cp_pedwarn ("ISO C++ forbids variable-size array `%D'",
2848ad0f
MM
9533 name);
9534 else
cb9a3ff8 9535 cp_pedwarn ("ISO C++ forbids variable-size array");
2848ad0f
MM
9536 }
9537
9538 /* Create a variable-sized array index type. */
9539 itype = variable_size (itype);
9540 }
9541 /* Make sure that there was no overflow when creating to a signed
9542 index type. (For example, on a 32-bit machine, an array with
9543 size 2^32 - 1 is too big.) */
9544 else if (TREE_OVERFLOW (itype))
9545 {
9546 error ("overflow in array dimension");
9547 TREE_OVERFLOW (itype) = 0;
9548 }
68642fb6 9549
2848ad0f
MM
9550 /* Create and return the appropriate index type. */
9551 return build_index_type (itype);
9552}
9553
9554/* Returns an ARRAY_TYPE for an array with SIZE elements of the
9555 indicated TYPE. If non-NULL, NAME is the NAME of the declaration
9556 with this type. */
9557
9558static tree
9559create_array_type_for_decl (name, type, size)
9560 tree name;
9561 tree type;
9562 tree size;
9563{
9564 tree itype = NULL_TREE;
9565 const char* error_msg;
9566
9567 /* If things have already gone awry, bail now. */
9568 if (type == error_mark_node || size == error_mark_node)
9569 return error_mark_node;
9570
9571 /* Assume that everything will go OK. */
9572 error_msg = NULL;
9573
9574 /* There are some types which cannot be array elements. */
9575 switch (TREE_CODE (type))
9576 {
9577 case VOID_TYPE:
9578 error_msg = "array of void";
9579 break;
9580
9581 case FUNCTION_TYPE:
9582 error_msg = "array of functions";
9583 break;
9584
9585 case REFERENCE_TYPE:
9586 error_msg = "array of references";
9587 break;
9588
9589 case OFFSET_TYPE:
9590 error_msg = "array of data members";
9591 break;
9592
9593 case METHOD_TYPE:
9594 error_msg = "array of function members";
9595 break;
9596
9597 default:
9598 break;
9599 }
9600
9601 /* If something went wrong, issue an error-message and return. */
9602 if (error_msg)
9603 {
9604 if (name)
9605 cp_error ("declaration of `%D' as %s", name, error_msg);
9606 else
9607 cp_error ("creating %s", error_msg);
9608
9609 return error_mark_node;
9610 }
9611
9612 /* [dcl.array]
68642fb6 9613
2848ad0f
MM
9614 The constant expressions that specify the bounds of the arrays
9615 can be omitted only for the first member of the sequence. */
9616 if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
9617 {
cb9a3ff8 9618 cp_error ("declaration of `%D' as multidimensional array must have bounds for all dimensions except the first",
2848ad0f 9619 name);
2848ad0f
MM
9620
9621 return error_mark_node;
9622 }
9623
9624 /* Figure out the index type for the array. */
9625 if (size)
9626 itype = compute_array_index_type (name, size);
9627
9628 return build_cplus_array_type (type, itype);
9629}
9630
3dbc07b6
MM
9631/* Check that it's OK to declare a function with the indicated TYPE.
9632 SFK indicates the kind of special function (if any) that this
9633 function is. CTYPE is the class of which this function is a
9634 member. OPTYPE is the type given in a conversion operator
9635 declaration. Returns the actual return type of the function; that
9636 may be different than TYPE if an error occurs, or for certain
9637 special functions. */
9638
9639static tree
9640check_special_function_return_type (sfk, type, ctype, optype)
9641 special_function_kind sfk;
9642 tree type;
9643 tree ctype;
9644 tree optype;
9645{
9646 switch (sfk)
9647 {
9648 case sfk_constructor:
9649 if (type)
9650 cp_error ("return type specification for constructor invalid");
9651
9652 /* In the old ABI, we return `this'; in the new ABI we don't
9653 bother. */
9654 type = flag_new_abi ? void_type_node : build_pointer_type (ctype);
9655 break;
9656
9657 case sfk_destructor:
9658 if (type)
9659 cp_error ("return type specification for destructor invalid");
9660 type = void_type_node;
9661 break;
9662
9663 case sfk_conversion:
9664 if (type && !same_type_p (type, optype))
9665 cp_error ("operator `%T' declared to return `%T'", optype, type);
9666 else if (type)
9667 cp_pedwarn ("return type specified for `operator %T'", optype);
9668 type = optype;
9669 break;
9670
9671 default:
9672 my_friendly_abort (20000408);
9673 break;
9674 }
9675
9676 return type;
9677}
9678
8d08fdba
MS
9679/* Given declspecs and a declarator,
9680 determine the name and type of the object declared
9681 and construct a ..._DECL node for it.
9682 (In one case we can return a ..._TYPE node instead.
9683 For invalid input we sometimes return 0.)
9684
9685 DECLSPECS is a chain of tree_list nodes whose value fields
9686 are the storage classes and type specifiers.
9687
9688 DECL_CONTEXT says which syntactic context this declaration is in:
9689 NORMAL for most contexts. Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
9690 FUNCDEF for a function definition. Like NORMAL but a few different
9691 error messages in each case. Return value may be zero meaning
9692 this definition is too screwy to try to parse.
9693 MEMFUNCDEF for a function definition. Like FUNCDEF but prepares to
9694 handle member functions (which have FIELD context).
9695 Return value may be zero meaning this definition is too screwy to
9696 try to parse.
9697 PARM for a parameter declaration (either within a function prototype
9698 or before a function body). Make a PARM_DECL, or return void_type_node.
db5ae43f 9699 CATCHPARM for a parameter declaration before a catch clause.
8d08fdba
MS
9700 TYPENAME if for a typename (in a cast or sizeof).
9701 Don't make a DECL node; just return the ..._TYPE node.
9702 FIELD for a struct or union field; make a FIELD_DECL.
9703 BITFIELD for a field with specified width.
9704 INITIALIZED is 1 if the decl has an initializer.
9705
b17e2870
JM
9706 ATTRLIST is a TREE_LIST node with prefix attributes in TREE_VALUE and
9707 normal attributes in TREE_PURPOSE, or NULL_TREE.
9708
70adf8a9 9709 In the TYPENAME case, DECLARATOR is really an abstract declarator.
8d08fdba
MS
9710 It may also be so in the PARM case, for a prototype where the
9711 argument type is specified but not the name.
9712
9713 This function is where the complicated C meanings of `static'
9714 and `extern' are interpreted.
9715
9716 For C++, if there is any monkey business to do, the function which
9717 calls this one must do it, i.e., prepending instance variables,
9718 renaming overloaded function names, etc.
9719
9720 Note that for this C++, it is an error to define a method within a class
9721 which does not belong to that class.
9722
9723 Except in the case where SCOPE_REFs are implicitly known (such as
9724 methods within a class being redundantly qualified),
9725 declarations which involve SCOPE_REFs are returned as SCOPE_REFs
9726 (class_name::decl_name). The caller must also deal with this.
9727
9728 If a constructor or destructor is seen, and the context is FIELD,
9729 then the type gains the attribute TREE_HAS_x. If such a declaration
9730 is erroneous, NULL_TREE is returned.
9731
9732 QUALS is used only for FUNCDEF and MEMFUNCDEF cases. For a member
535233a8
NS
9733 function, these are the qualifiers to give to the `this' pointer. We
9734 apply TYPE_QUAL_RESTRICT to the this ptr, not the object.
8d08fdba
MS
9735
9736 May return void_type_node if the declarator turned out to be a friend.
9737 See grokfield for details. */
9738
8d08fdba 9739tree
c11b6f21 9740grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
8d08fdba
MS
9741 tree declspecs;
9742 tree declarator;
9743 enum decl_context decl_context;
9744 int initialized;
c11b6f21 9745 tree attrlist;
8d08fdba
MS
9746{
9747 RID_BIT_TYPE specbits;
9748 int nclasses = 0;
9749 tree spec;
9750 tree type = NULL_TREE;
9751 int longlong = 0;
9752 int constp;
91063b51 9753 int restrictp;
8d08fdba 9754 int volatilep;
91063b51 9755 int type_quals;
db5ae43f 9756 int virtualp, explicitp, friendp, inlinep, staticp;
8d08fdba
MS
9757 int explicit_int = 0;
9758 int explicit_char = 0;
37c46b43 9759 int defaulted_int = 0;
8d08fdba 9760 tree typedef_decl = NULL_TREE;
9c0758dd 9761 const char *name;
8d08fdba
MS
9762 tree typedef_type = NULL_TREE;
9763 int funcdef_flag = 0;
9764 enum tree_code innermost_code = ERROR_MARK;
9765 int bitfield = 0;
6125f3be
DE
9766#if 0
9767 /* See the code below that used this. */
f6abb50a 9768 tree decl_machine_attr = NULL_TREE;
6125f3be 9769#endif
8d08fdba
MS
9770 /* Set this to error_mark_node for FIELD_DECLs we could not handle properly.
9771 All FIELD_DECLs we build here have `init' put into their DECL_INITIAL. */
9772 tree init = NULL_TREE;
9773
9774 /* Keep track of what sort of function is being processed
9775 so that we can warn about default return values, or explicit
9776 return values which do not match prescribed defaults. */
3dbc07b6 9777 special_function_kind sfk = sfk_none;
8d08fdba
MS
9778
9779 tree dname = NULL_TREE;
9780 tree ctype = current_class_type;
9781 tree ctor_return_type = NULL_TREE;
9782 enum overload_flags flags = NO_SPECIAL;
8d08fdba 9783 tree quals = NULL_TREE;
c11b6f21 9784 tree raises = NULL_TREE;
386b8a85 9785 int template_count = 0;
2c73f9f5 9786 tree in_namespace = NULL_TREE;
1eab9b56
JM
9787 tree inner_attrs;
9788 int ignore_attrs;
8d08fdba
MS
9789
9790 RIDBIT_RESET_ALL (specbits);
9791 if (decl_context == FUNCDEF)
9792 funcdef_flag = 1, decl_context = NORMAL;
9793 else if (decl_context == MEMFUNCDEF)
9794 funcdef_flag = -1, decl_context = FIELD;
9795 else if (decl_context == BITFIELD)
9796 bitfield = 1, decl_context = FIELD;
9797
8d08fdba
MS
9798 /* Look inside a declarator for the name being declared
9799 and get it as a string, for an error message. */
9800 {
be99da77
MS
9801 tree *next = &declarator;
9802 register tree decl;
8d08fdba
MS
9803 name = NULL;
9804
be99da77
MS
9805 while (next && *next)
9806 {
9807 decl = *next;
9808 switch (TREE_CODE (decl))
8d08fdba 9809 {
52fbc847
JM
9810 case TREE_LIST:
9811 /* For attributes. */
9812 next = &TREE_VALUE (decl);
9813 break;
9814
be99da77
MS
9815 case COND_EXPR:
9816 ctype = NULL_TREE;
9817 next = &TREE_OPERAND (decl, 0);
9818 break;
8d08fdba 9819
2c73f9f5 9820 case BIT_NOT_EXPR: /* For C++ destructors! */
8d08fdba 9821 {
be99da77
MS
9822 tree name = TREE_OPERAND (decl, 0);
9823 tree rename = NULL_TREE;
9824
9825 my_friendly_assert (flags == NO_SPECIAL, 152);
9826 flags = DTOR_FLAG;
3dbc07b6 9827 sfk = sfk_destructor;
5566b478
MS
9828 if (TREE_CODE (name) == TYPE_DECL)
9829 TREE_OPERAND (decl, 0) = name = constructor_name (name);
be99da77
MS
9830 my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 153);
9831 if (ctype == NULL_TREE)
9832 {
9833 if (current_class_type == NULL_TREE)
9834 {
8251199e 9835 error ("destructors must be member functions");
be99da77
MS
9836 flags = NO_SPECIAL;
9837 }
9838 else
9839 {
9840 tree t = constructor_name (current_class_name);
9841 if (t != name)
9842 rename = t;
9843 }
9844 }
8d08fdba 9845 else
be99da77
MS
9846 {
9847 tree t = constructor_name (ctype);
9848 if (t != name)
9849 rename = t;
9850 }
51c184be 9851
be99da77 9852 if (rename)
39211cd5 9853 {
8251199e 9854 cp_error ("destructor `%T' must match class name `%T'",
5566b478 9855 name, rename);
be99da77 9856 TREE_OPERAND (decl, 0) = rename;
39211cd5 9857 }
be99da77 9858 next = &name;
51c184be 9859 }
be99da77 9860 break;
8d08fdba 9861
be99da77 9862 case ADDR_EXPR: /* C++ reference declaration */
2c73f9f5 9863 /* Fall through. */
be99da77
MS
9864 case ARRAY_REF:
9865 case INDIRECT_REF:
9866 ctype = NULL_TREE;
9867 innermost_code = TREE_CODE (decl);
9868 next = &TREE_OPERAND (decl, 0);
9869 break;
8d08fdba 9870
be99da77 9871 case CALL_EXPR:
43f887f9 9872 if (parmlist_is_exprlist (CALL_DECLARATOR_PARMS (decl)))
8d08fdba 9873 {
b17e2870
JM
9874 /* This is actually a variable declaration using
9875 constructor syntax. We need to call start_decl and
9876 cp_finish_decl so we can get the variable
9877 initialized... */
9878
9879 tree attributes, prefix_attributes;
be99da77
MS
9880
9881 *next = TREE_OPERAND (decl, 0);
43f887f9 9882 init = CALL_DECLARATOR_PARMS (decl);
be99da77 9883
b17e2870
JM
9884 if (attrlist)
9885 {
9886 attributes = TREE_PURPOSE (attrlist);
9887 prefix_attributes = TREE_VALUE (attrlist);
9888 }
9889 else
9890 {
9891 attributes = NULL_TREE;
9892 prefix_attributes = NULL_TREE;
9893 }
9894
9895 decl = start_decl (declarator, declspecs, 1,
9896 attributes, prefix_attributes);
9fc336c7 9897 decl_type_access_control (decl);
1eb0072d
JM
9898 if (decl)
9899 {
9900 /* Look for __unused__ attribute */
9901 if (TREE_USED (TREE_TYPE (decl)))
9902 TREE_USED (decl) = 1;
9903 finish_decl (decl, init, NULL_TREE);
9904 }
9905 else
9906 cp_error ("invalid declarator");
be99da77 9907 return 0;
8d08fdba 9908 }
be99da77
MS
9909 innermost_code = TREE_CODE (decl);
9910 if (decl_context == FIELD && ctype == NULL_TREE)
9911 ctype = current_class_type;
45537677 9912 if (ctype
c11b6f21 9913 && TREE_OPERAND (decl, 0)
45537677
MS
9914 && (TREE_CODE (TREE_OPERAND (decl, 0)) == TYPE_DECL
9915 && ((DECL_NAME (TREE_OPERAND (decl, 0))
9916 == constructor_name_full (ctype))
9917 || (DECL_NAME (TREE_OPERAND (decl, 0))
9918 == constructor_name (ctype)))))
be99da77
MS
9919 TREE_OPERAND (decl, 0) = constructor_name (ctype);
9920 next = &TREE_OPERAND (decl, 0);
9921 decl = *next;
9922 if (ctype != NULL_TREE
9923 && decl != NULL_TREE && flags != DTOR_FLAG
9924 && decl == constructor_name (ctype))
8d08fdba 9925 {
3dbc07b6 9926 sfk = sfk_constructor;
be99da77 9927 ctor_return_type = ctype;
8d08fdba 9928 }
be99da77
MS
9929 ctype = NULL_TREE;
9930 break;
68642fb6 9931
386b8a85
JM
9932 case TEMPLATE_ID_EXPR:
9933 {
9934 tree fns = TREE_OPERAND (decl, 0);
9935
9936 if (TREE_CODE (fns) == LOOKUP_EXPR)
9937 fns = TREE_OPERAND (fns, 0);
9938
8f032717
MM
9939 dname = fns;
9940 if (TREE_CODE (dname) == COMPONENT_REF)
9941 dname = TREE_OPERAND (dname, 1);
9942 if (TREE_CODE (dname) != IDENTIFIER_NODE)
9943 {
9944 my_friendly_assert (is_overloaded_fn (dname),
9945 19990331);
9946 dname = DECL_NAME (get_first_fn (dname));
9947 }
386b8a85 9948 }
2c73f9f5 9949 /* Fall through. */
be99da77
MS
9950
9951 case IDENTIFIER_NODE:
386b8a85
JM
9952 if (TREE_CODE (decl) == IDENTIFIER_NODE)
9953 dname = decl;
9954
be99da77
MS
9955 next = 0;
9956
0e5921e8 9957 if (C_IS_RESERVED_WORD (dname))
8d08fdba 9958 {
8251199e 9959 cp_error ("declarator-id missing; using reserved word `%D'",
be99da77
MS
9960 dname);
9961 name = IDENTIFIER_POINTER (dname);
8d08fdba 9962 }
596ea4e5 9963 else if (!IDENTIFIER_TYPENAME_P (dname))
be99da77 9964 name = IDENTIFIER_POINTER (dname);
8d08fdba
MS
9965 else
9966 {
596ea4e5
AS
9967 my_friendly_assert (flags == NO_SPECIAL, 154);
9968 flags = TYPENAME_FLAG;
9969 ctor_return_type = TREE_TYPE (dname);
9970 sfk = sfk_conversion;
9971 if (IDENTIFIER_GLOBAL_VALUE (dname)
9972 && (TREE_CODE (IDENTIFIER_GLOBAL_VALUE (dname))
9973 == TYPE_DECL))
9974 name = IDENTIFIER_POINTER (dname);
9975 else
9976 name = "<invalid operator>";
8d08fdba 9977 }
be99da77 9978 break;
8d08fdba 9979
be99da77
MS
9980 /* C++ extension */
9981 case SCOPE_REF:
9982 {
9983 /* Perform error checking, and decide on a ctype. */
9984 tree cname = TREE_OPERAND (decl, 0);
9985 if (cname == NULL_TREE)
9986 ctype = NULL_TREE;
2c73f9f5
ML
9987 else if (TREE_CODE (cname) == NAMESPACE_DECL)
9988 {
9989 ctype = NULL_TREE;
9990 in_namespace = TREE_OPERAND (decl, 0);
9991 TREE_OPERAND (decl, 0) = NULL_TREE;
9992 }
be99da77
MS
9993 else if (! is_aggr_type (cname, 1))
9994 TREE_OPERAND (decl, 0) = NULL_TREE;
9995 /* Must test TREE_OPERAND (decl, 1), in case user gives
9996 us `typedef (class::memfunc)(int); memfunc *memfuncptr;' */
9997 else if (TREE_OPERAND (decl, 1)
9998 && TREE_CODE (TREE_OPERAND (decl, 1)) == INDIRECT_REF)
9999 ctype = cname;
73b0fce8 10000 else if (TREE_CODE (cname) == TEMPLATE_TYPE_PARM
a1281f45 10001 || TREE_CODE (cname) == BOUND_TEMPLATE_TEMPLATE_PARM)
5566b478 10002 {
8251199e 10003 cp_error ("`%T::%D' is not a valid declarator", cname,
5566b478 10004 TREE_OPERAND (decl, 1));
8251199e 10005 cp_error (" perhaps you want `typename %T::%D' to make it a type",
5566b478
MS
10006 cname, TREE_OPERAND (decl, 1));
10007 return void_type_node;
10008 }
be99da77
MS
10009 else if (ctype == NULL_TREE)
10010 ctype = cname;
10011 else if (TREE_COMPLEXITY (decl) == current_class_depth)
10012 TREE_OPERAND (decl, 0) = ctype;
10013 else
10014 {
10015 if (! UNIQUELY_DERIVED_FROM_P (cname, ctype))
10016 {
8251199e 10017 cp_error ("type `%T' is not derived from type `%T'",
be99da77
MS
10018 cname, ctype);
10019 TREE_OPERAND (decl, 0) = NULL_TREE;
10020 }
10021 else
10022 ctype = cname;
10023 }
10024
c91a56d2
MS
10025 if (ctype && TREE_CODE (TREE_OPERAND (decl, 1)) == TYPE_DECL
10026 && ((DECL_NAME (TREE_OPERAND (decl, 1))
10027 == constructor_name_full (ctype))
10028 || (DECL_NAME (TREE_OPERAND (decl, 1))
10029 == constructor_name (ctype))))
be99da77
MS
10030 TREE_OPERAND (decl, 1) = constructor_name (ctype);
10031 next = &TREE_OPERAND (decl, 1);
10032 decl = *next;
10033 if (ctype)
10034 {
10035 if (TREE_CODE (decl) == IDENTIFIER_NODE
10036 && constructor_name (ctype) == decl)
10037 {
3dbc07b6 10038 sfk = sfk_constructor;
be99da77
MS
10039 ctor_return_type = ctype;
10040 }
10041 else if (TREE_CODE (decl) == BIT_NOT_EXPR
10042 && TREE_CODE (TREE_OPERAND (decl, 0)) == IDENTIFIER_NODE
10043 && (constructor_name (ctype) == TREE_OPERAND (decl, 0)
10044 || constructor_name_full (ctype) == TREE_OPERAND (decl, 0)))
10045 {
3dbc07b6 10046 sfk = sfk_destructor;
be99da77
MS
10047 ctor_return_type = ctype;
10048 flags = DTOR_FLAG;
10049 TREE_OPERAND (decl, 0) = constructor_name (ctype);
10050 next = &TREE_OPERAND (decl, 0);
10051 }
10052 }
10053 }
10054 break;
10055
10056 case ERROR_MARK:
10057 next = 0;
10058 break;
10059
45537677
MS
10060 case TYPE_DECL:
10061 /* Parse error puts this typespec where
10062 a declarator should go. */
8251199e 10063 cp_error ("`%T' specified as declarator-id", DECL_NAME (decl));
45537677 10064 if (TREE_TYPE (decl) == current_class_type)
8251199e 10065 cp_error (" perhaps you want `%T' for a constructor",
45537677
MS
10066 current_class_name);
10067 dname = DECL_NAME (decl);
10068 name = IDENTIFIER_POINTER (dname);
10069
e92cc029 10070 /* Avoid giving two errors for this. */
45537677
MS
10071 IDENTIFIER_CLASS_VALUE (dname) = NULL_TREE;
10072
58010b57 10073 declspecs = tree_cons (NULL_TREE, integer_type_node, declspecs);
45537677
MS
10074 *next = dname;
10075 next = 0;
10076 break;
10077
be99da77 10078 default:
8251199e 10079 cp_compiler_error ("`%D' as declarator", decl);
be99da77 10080 return 0; /* We used to do a 155 abort here. */
8d08fdba 10081 }
be99da77 10082 }
8d08fdba
MS
10083 }
10084
10085 /* A function definition's declarator must have the form of
10086 a function declarator. */
10087
10088 if (funcdef_flag && innermost_code != CALL_EXPR)
10089 return 0;
10090
e1cd6e56
MS
10091 if (((dname && IDENTIFIER_OPNAME_P (dname)) || flags == TYPENAME_FLAG)
10092 && innermost_code != CALL_EXPR
10093 && ! (ctype && declspecs == NULL_TREE))
10094 {
8251199e 10095 cp_error ("declaration of `%D' as non-function", dname);
e1cd6e56
MS
10096 return void_type_node;
10097 }
10098
8d08fdba
MS
10099 /* Anything declared one level down from the top level
10100 must be one of the parameters of a function
10101 (because the body is at least two levels down). */
10102
10103 /* This heuristic cannot be applied to C++ nodes! Fixed, however,
10104 by not allowing C++ class definitions to specify their parameters
10105 with xdecls (must be spec.d in the parmlist).
10106
10107 Since we now wait to push a class scope until we are sure that
10108 we are in a legitimate method context, we must set oldcname
a9aedbc2
MS
10109 explicitly (since current_class_name is not yet alive).
10110
10111 We also want to avoid calling this a PARM if it is in a namespace. */
8d08fdba 10112
9188c363 10113 if (decl_context == NORMAL && !toplevel_bindings_p ())
a9aedbc2
MS
10114 {
10115 struct binding_level *b = current_binding_level;
10116 current_binding_level = b->level_chain;
10117 if (current_binding_level != 0 && toplevel_bindings_p ())
10118 decl_context = PARM;
10119 current_binding_level = b;
10120 }
8d08fdba 10121
34fc957d
NS
10122 if (name == NULL)
10123 name = decl_context == PARM ? "parameter" : "type name";
68642fb6 10124
8d08fdba
MS
10125 /* Look through the decl specs and record which ones appear.
10126 Some typespecs are defined as built-in typenames.
10127 Others, the ones that are modifiers of other types,
10128 are represented by bits in SPECBITS: set the bits for
10129 the modifiers that appear. Storage class keywords are also in SPECBITS.
10130
10131 If there is a typedef name or a type, store the type in TYPE.
10132 This includes builtin typedefs such as `int'.
10133
10134 Set EXPLICIT_INT if the type is `int' or `char' and did not
10135 come from a user typedef.
10136
10137 Set LONGLONG if `long' is mentioned twice.
10138
10139 For C++, constructors and destructors have their own fast treatment. */
10140
10141 for (spec = declspecs; spec; spec = TREE_CHAIN (spec))
10142 {
10143 register int i;
10144 register tree id;
10145
10146 /* Certain parse errors slip through. For example,
10147 `int class;' is not caught by the parser. Try
10148 weakly to recover here. */
10149 if (TREE_CODE (spec) != TREE_LIST)
10150 return 0;
10151
10152 id = TREE_VALUE (spec);
10153
10154 if (TREE_CODE (id) == IDENTIFIER_NODE)
10155 {
a3203465
MS
10156 if (id == ridpointers[(int) RID_INT]
10157 || id == ridpointers[(int) RID_CHAR]
10158 || id == ridpointers[(int) RID_BOOL]
10159 || id == ridpointers[(int) RID_WCHAR])
8d08fdba
MS
10160 {
10161 if (type)
8ccc31eb
MS
10162 {
10163 if (id == ridpointers[(int) RID_BOOL])
8251199e 10164 error ("`bool' is now a keyword");
8ccc31eb 10165 else
8251199e 10166 cp_error ("extraneous `%T' ignored", id);
8ccc31eb 10167 }
8d08fdba
MS
10168 else
10169 {
a3203465
MS
10170 if (id == ridpointers[(int) RID_INT])
10171 explicit_int = 1;
10172 else if (id == ridpointers[(int) RID_CHAR])
10173 explicit_char = 1;
8d08fdba
MS
10174 type = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (id));
10175 }
10176 goto found;
10177 }
e92cc029 10178 /* C++ aggregate types. */
8d08fdba
MS
10179 if (IDENTIFIER_HAS_TYPE_VALUE (id))
10180 {
10181 if (type)
8251199e 10182 cp_error ("multiple declarations `%T' and `%T'", type, id);
8d08fdba
MS
10183 else
10184 type = IDENTIFIER_TYPE_VALUE (id);
10185 goto found;
10186 }
10187
f376e137 10188 for (i = (int) RID_FIRST_MODIFIER; i <= (int) RID_LAST_MODIFIER; i++)
8d08fdba
MS
10189 {
10190 if (ridpointers[i] == id)
10191 {
10192 if (i == (int) RID_LONG && RIDBIT_SETP (i, specbits))
10193 {
795add94 10194 if (pedantic && ! in_system_header && warn_long_long)
cb9a3ff8 10195 pedwarn ("ISO C++ does not support `long long'");
9a3b49ac 10196 if (longlong)
8251199e 10197 error ("`long long long' is too long for GCC");
8d08fdba
MS
10198 else
10199 longlong = 1;
10200 }
10201 else if (RIDBIT_SETP (i, specbits))
8251199e 10202 pedwarn ("duplicate `%s'", IDENTIFIER_POINTER (id));
8d08fdba
MS
10203 RIDBIT_SET (i, specbits);
10204 goto found;
10205 }
10206 }
10207 }
e92cc029 10208 /* C++ aggregate types. */
1899c3a4 10209 else if (TREE_CODE (id) == TYPE_DECL)
45537677
MS
10210 {
10211 if (type)
8251199e 10212 cp_error ("multiple declarations `%T' and `%T'", type,
45537677
MS
10213 TREE_TYPE (id));
10214 else
5566b478
MS
10215 {
10216 type = TREE_TYPE (id);
10217 TREE_VALUE (spec) = type;
10218 }
45537677
MS
10219 goto found;
10220 }
8d08fdba 10221 if (type)
8251199e 10222 error ("two or more data types in declaration of `%s'", name);
8d08fdba
MS
10223 else if (TREE_CODE (id) == IDENTIFIER_NODE)
10224 {
10225 register tree t = lookup_name (id, 1);
10226 if (!t || TREE_CODE (t) != TYPE_DECL)
8251199e 10227 error ("`%s' fails to be a typedef or built in type",
8d08fdba
MS
10228 IDENTIFIER_POINTER (id));
10229 else
10230 {
10231 type = TREE_TYPE (t);
6125f3be
DE
10232#if 0
10233 /* See the code below that used this. */
f6abb50a 10234 decl_machine_attr = DECL_MACHINE_ATTRIBUTES (id);
6125f3be 10235#endif
8d08fdba
MS
10236 typedef_decl = t;
10237 }
10238 }
bd6dd845 10239 else if (id != error_mark_node)
8d08fdba
MS
10240 /* Can't change CLASS nodes into RECORD nodes here! */
10241 type = id;
10242
10243 found: ;
10244 }
10245
10246 typedef_type = type;
10247
37c46b43 10248 /* No type at all: default to `int', and set DEFAULTED_INT
6eabb241 10249 because it was not a user-defined typedef. */
8d08fdba 10250
a3203465
MS
10251 if (type == NULL_TREE
10252 && (RIDBIT_SETP (RID_SIGNED, specbits)
10253 || RIDBIT_SETP (RID_UNSIGNED, specbits)
10254 || RIDBIT_SETP (RID_LONG, specbits)
10255 || RIDBIT_SETP (RID_SHORT, specbits)))
10256 {
10257 /* These imply 'int'. */
10258 type = integer_type_node;
37c46b43 10259 defaulted_int = 1;
a3203465
MS
10260 }
10261
3dbc07b6
MM
10262 if (sfk != sfk_none)
10263 type = check_special_function_return_type (sfk, type,
10264 ctor_return_type,
10265 ctor_return_type);
10266 else if (type == NULL_TREE)
8d08fdba 10267 {
3dbc07b6
MM
10268 int is_main;
10269
8d08fdba 10270 explicit_int = -1;
3dbc07b6 10271
41eff652
JM
10272 /* We handle `main' specially here, because 'main () { }' is so
10273 common. With no options, it is allowed. With -Wreturn-type,
10274 it is a warning. It is only an error with -pedantic-errors. */
3dbc07b6
MM
10275 is_main = (funcdef_flag
10276 && MAIN_NAME_P (dname)
10277 && ctype == NULL_TREE
10278 && in_namespace == NULL_TREE
10279 && current_namespace == global_namespace);
10280
10281 if (in_system_header || flag_ms_extensions)
10282 /* Allow it, sigh. */;
10283 else if (pedantic || ! is_main)
10284 cp_pedwarn ("ISO C++ forbids declaration of `%s' with no type",
10285 name);
10286 else if (warn_return_type)
10287 cp_warning ("ISO C++ forbids declaration of `%s' with no type",
10288 name);
41eff652 10289
3dbc07b6 10290 type = integer_type_node;
51c184be 10291 }
8d08fdba
MS
10292
10293 ctype = NULL_TREE;
10294
10295 /* Now process the modifiers that were specified
10296 and check for invalid combinations. */
10297
10298 /* Long double is a special combination. */
10299
10300 if (RIDBIT_SETP (RID_LONG, specbits)
10301 && TYPE_MAIN_VARIANT (type) == double_type_node)
10302 {
10303 RIDBIT_RESET (RID_LONG, specbits);
68642fb6 10304 type = build_qualified_type (long_double_type_node,
91063b51 10305 CP_TYPE_QUALS (type));
8d08fdba
MS
10306 }
10307
10308 /* Check all other uses of type modifiers. */
10309
10310 if (RIDBIT_SETP (RID_UNSIGNED, specbits)
10311 || RIDBIT_SETP (RID_SIGNED, specbits)
10312 || RIDBIT_SETP (RID_LONG, specbits)
10313 || RIDBIT_SETP (RID_SHORT, specbits))
10314 {
10315 int ok = 0;
10316
10317 if (TREE_CODE (type) == REAL_TYPE)
8251199e 10318 error ("short, signed or unsigned invalid for `%s'", name);
b7484fbe 10319 else if (TREE_CODE (type) != INTEGER_TYPE)
8251199e 10320 error ("long, short, signed or unsigned invalid for `%s'", name);
8d08fdba
MS
10321 else if (RIDBIT_SETP (RID_LONG, specbits)
10322 && RIDBIT_SETP (RID_SHORT, specbits))
8251199e 10323 error ("long and short specified together for `%s'", name);
8d08fdba
MS
10324 else if ((RIDBIT_SETP (RID_LONG, specbits)
10325 || RIDBIT_SETP (RID_SHORT, specbits))
10326 && explicit_char)
8251199e 10327 error ("long or short specified with char for `%s'", name);
8d08fdba
MS
10328 else if ((RIDBIT_SETP (RID_LONG, specbits)
10329 || RIDBIT_SETP (RID_SHORT, specbits))
10330 && TREE_CODE (type) == REAL_TYPE)
8251199e 10331 error ("long or short specified with floating type for `%s'", name);
8d08fdba
MS
10332 else if (RIDBIT_SETP (RID_SIGNED, specbits)
10333 && RIDBIT_SETP (RID_UNSIGNED, specbits))
8251199e 10334 error ("signed and unsigned given together for `%s'", name);
8d08fdba
MS
10335 else
10336 {
10337 ok = 1;
37c46b43 10338 if (!explicit_int && !defaulted_int && !explicit_char && pedantic)
8d08fdba 10339 {
8251199e 10340 pedwarn ("long, short, signed or unsigned used invalidly for `%s'",
8d08fdba
MS
10341 name);
10342 if (flag_pedantic_errors)
10343 ok = 0;
10344 }
10345 }
10346
10347 /* Discard the type modifiers if they are invalid. */
10348 if (! ok)
10349 {
10350 RIDBIT_RESET (RID_UNSIGNED, specbits);
10351 RIDBIT_RESET (RID_SIGNED, specbits);
10352 RIDBIT_RESET (RID_LONG, specbits);
10353 RIDBIT_RESET (RID_SHORT, specbits);
10354 longlong = 0;
10355 }
10356 }
10357
37c46b43
MS
10358 if (RIDBIT_SETP (RID_COMPLEX, specbits)
10359 && TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
10360 {
8251199e 10361 error ("complex invalid for `%s'", name);
37c46b43
MS
10362 RIDBIT_RESET (RID_COMPLEX, specbits);
10363 }
10364
8d08fdba
MS
10365 /* Decide whether an integer type is signed or not.
10366 Optionally treat bitfields as signed by default. */
10367 if (RIDBIT_SETP (RID_UNSIGNED, specbits)
b89c5a7b
MM
10368 /* [class.bit]
10369
10370 It is implementation-defined whether a plain (neither
10371 explicitly signed or unsigned) char, short, int, or long
10372 bit-field is signed or unsigned.
68642fb6 10373
b89c5a7b
MM
10374 Naturally, we extend this to long long as well. Note that
10375 this does not include wchar_t. */
10376 || (bitfield && !flag_signed_bitfields
10377 && RIDBIT_NOTSETP (RID_SIGNED, specbits)
10378 /* A typedef for plain `int' without `signed' can be
10379 controlled just like plain `int', but a typedef for
10380 `signed int' cannot be so controlled. */
68642fb6 10381 && !(typedef_decl
29bbeb1c 10382 && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
b89c5a7b
MM
10383 && (TREE_CODE (type) == INTEGER_TYPE
10384 || TREE_CODE (type) == CHAR_TYPE)
29bbeb1c 10385 && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
8d08fdba
MS
10386 {
10387 if (longlong)
10388 type = long_long_unsigned_type_node;
10389 else if (RIDBIT_SETP (RID_LONG, specbits))
10390 type = long_unsigned_type_node;
10391 else if (RIDBIT_SETP (RID_SHORT, specbits))
10392 type = short_unsigned_type_node;
10393 else if (type == char_type_node)
10394 type = unsigned_char_type_node;
10395 else if (typedef_decl)
10396 type = unsigned_type (type);
10397 else
10398 type = unsigned_type_node;
10399 }
10400 else if (RIDBIT_SETP (RID_SIGNED, specbits)
10401 && type == char_type_node)
10402 type = signed_char_type_node;
10403 else if (longlong)
10404 type = long_long_integer_type_node;
10405 else if (RIDBIT_SETP (RID_LONG, specbits))
10406 type = long_integer_type_node;
10407 else if (RIDBIT_SETP (RID_SHORT, specbits))
10408 type = short_integer_type_node;
10409
37c46b43
MS
10410 if (RIDBIT_SETP (RID_COMPLEX, specbits))
10411 {
10412 /* If we just have "complex", it is equivalent to
10413 "complex double", but if any modifiers at all are specified it is
10414 the complex form of TYPE. E.g, "complex short" is
10415 "complex short int". */
10416
10417 if (defaulted_int && ! longlong
10418 && ! (RIDBIT_SETP (RID_LONG, specbits)
10419 || RIDBIT_SETP (RID_SHORT, specbits)
10420 || RIDBIT_SETP (RID_SIGNED, specbits)
10421 || RIDBIT_SETP (RID_UNSIGNED, specbits)))
10422 type = complex_double_type_node;
10423 else if (type == integer_type_node)
10424 type = complex_integer_type_node;
10425 else if (type == float_type_node)
10426 type = complex_float_type_node;
10427 else if (type == double_type_node)
10428 type = complex_double_type_node;
10429 else if (type == long_double_type_node)
10430 type = complex_long_double_type_node;
10431 else
10432 type = build_complex_type (type);
10433 }
10434
3dbc07b6 10435 if (sfk == sfk_conversion
3ac3d9ea 10436 && (RIDBIT_SETP (RID_CONST, specbits)
91063b51
MM
10437 || RIDBIT_SETP (RID_VOLATILE, specbits)
10438 || RIDBIT_SETP (RID_RESTRICT, specbits)))
10439 cp_error ("qualifiers are not allowed on declaration of `operator %T'",
3ac3d9ea
MM
10440 ctor_return_type);
10441
8d08fdba
MS
10442 /* Set CONSTP if this declaration is `const', whether by
10443 explicit specification or via a typedef.
10444 Likewise for VOLATILEP. */
10445
91063b51 10446 constp = !! RIDBIT_SETP (RID_CONST, specbits) + CP_TYPE_CONST_P (type);
68642fb6 10447 restrictp =
91063b51 10448 !! RIDBIT_SETP (RID_RESTRICT, specbits) + CP_TYPE_RESTRICT_P (type);
68642fb6 10449 volatilep =
91063b51
MM
10450 !! RIDBIT_SETP (RID_VOLATILE, specbits) + CP_TYPE_VOLATILE_P (type);
10451 type_quals = ((constp ? TYPE_QUAL_CONST : 0)
10452 | (restrictp ? TYPE_QUAL_RESTRICT : 0)
10453 | (volatilep ? TYPE_QUAL_VOLATILE : 0));
10454 type = cp_build_qualified_type (type, type_quals);
8d08fdba
MS
10455 staticp = 0;
10456 inlinep = !! RIDBIT_SETP (RID_INLINE, specbits);
8d08fdba 10457 virtualp = RIDBIT_SETP (RID_VIRTUAL, specbits);
db5ae43f
MS
10458 RIDBIT_RESET (RID_VIRTUAL, specbits);
10459 explicitp = RIDBIT_SETP (RID_EXPLICIT, specbits) != 0;
10460 RIDBIT_RESET (RID_EXPLICIT, specbits);
8d08fdba 10461
8d08fdba
MS
10462 if (RIDBIT_SETP (RID_STATIC, specbits))
10463 staticp = 1 + (decl_context == FIELD);
10464
10465 if (virtualp && staticp == 2)
10466 {
8251199e 10467 cp_error ("member `%D' cannot be declared both virtual and static",
8d08fdba
MS
10468 dname);
10469 staticp = 0;
10470 }
10471 friendp = RIDBIT_SETP (RID_FRIEND, specbits);
8d08fdba
MS
10472 RIDBIT_RESET (RID_FRIEND, specbits);
10473
8d08fdba
MS
10474 /* Warn if two storage classes are given. Default to `auto'. */
10475
10476 if (RIDBIT_ANY_SET (specbits))
10477 {
10478 if (RIDBIT_SETP (RID_STATIC, specbits)) nclasses++;
10479 if (RIDBIT_SETP (RID_EXTERN, specbits)) nclasses++;
10480 if (decl_context == PARM && nclasses > 0)
8251199e 10481 error ("storage class specifiers invalid in parameter declarations");
8d08fdba
MS
10482 if (RIDBIT_SETP (RID_TYPEDEF, specbits))
10483 {
10484 if (decl_context == PARM)
8251199e 10485 error ("typedef declaration invalid in parameter declaration");
8d08fdba
MS
10486 nclasses++;
10487 }
10488 if (RIDBIT_SETP (RID_AUTO, specbits)) nclasses++;
10489 if (RIDBIT_SETP (RID_REGISTER, specbits)) nclasses++;
10490 }
10491
10492 /* Give error if `virtual' is used outside of class declaration. */
b7484fbe
MS
10493 if (virtualp
10494 && (current_class_name == NULL_TREE || decl_context != FIELD))
8d08fdba 10495 {
8251199e 10496 error ("virtual outside class declaration");
8d08fdba
MS
10497 virtualp = 0;
10498 }
8d08fdba
MS
10499
10500 /* Static anonymous unions are dealt with here. */
10501 if (staticp && decl_context == TYPENAME
10502 && TREE_CODE (declspecs) == TREE_LIST
6bdb8141 10503 && ANON_AGGR_TYPE_P (TREE_VALUE (declspecs)))
8d08fdba
MS
10504 decl_context = FIELD;
10505
8d08fdba
MS
10506 /* Warn about storage classes that are invalid for certain
10507 kinds of declarations (parameters, typenames, etc.). */
10508
10509 if (nclasses > 1)
8251199e 10510 error ("multiple storage classes in declaration of `%s'", name);
8d08fdba
MS
10511 else if (decl_context != NORMAL && nclasses > 0)
10512 {
db5ae43f 10513 if ((decl_context == PARM || decl_context == CATCHPARM)
8d08fdba
MS
10514 && (RIDBIT_SETP (RID_REGISTER, specbits)
10515 || RIDBIT_SETP (RID_AUTO, specbits)))
10516 ;
fc378698
MS
10517 else if (RIDBIT_SETP (RID_TYPEDEF, specbits))
10518 ;
8d08fdba 10519 else if (decl_context == FIELD
8d08fdba
MS
10520 /* C++ allows static class elements */
10521 && RIDBIT_SETP (RID_STATIC, specbits))
10522 /* C++ also allows inlines and signed and unsigned elements,
10523 but in those cases we don't come in here. */
10524 ;
10525 else
10526 {
10527 if (decl_context == FIELD)
10528 {
b7484fbe
MS
10529 tree tmp = NULL_TREE;
10530 register int op = 0;
10531
10532 if (declarator)
10533 {
68642fb6 10534 /* Avoid trying to get an operand off an identifier node. */
9e9ff709
MS
10535 if (TREE_CODE (declarator) == IDENTIFIER_NODE)
10536 tmp = declarator;
10537 else
10538 tmp = TREE_OPERAND (declarator, 0);
b7484fbe 10539 op = IDENTIFIER_OPNAME_P (tmp);
596ea4e5
AS
10540 if (IDENTIFIER_TYPENAME_P (tmp))
10541 {
10542 if (IDENTIFIER_GLOBAL_VALUE (tmp)
10543 && (TREE_CODE (IDENTIFIER_GLOBAL_VALUE (tmp))
10544 == TYPE_DECL))
10545 name = IDENTIFIER_POINTER (tmp);
10546 else
10547 name = "<invalid operator>";
10548 }
b7484fbe 10549 }
8251199e 10550 error ("storage class specified for %s `%s'",
6eabb241 10551 op ? "member operator" : "field",
596ea4e5 10552 name);
8d08fdba
MS
10553 }
10554 else
b9d12519
KG
10555 {
10556 if (decl_context == PARM || decl_context == CATCHPARM)
10557 error ("storage class specified for parameter `%s'", name);
10558 else
10559 error ("storage class specified for typename");
10560 }
8d08fdba
MS
10561 RIDBIT_RESET (RID_REGISTER, specbits);
10562 RIDBIT_RESET (RID_AUTO, specbits);
10563 RIDBIT_RESET (RID_EXTERN, specbits);
8d08fdba
MS
10564 }
10565 }
10566 else if (RIDBIT_SETP (RID_EXTERN, specbits) && initialized && !funcdef_flag)
10567 {
a9aedbc2 10568 if (toplevel_bindings_p ())
8d08fdba 10569 {
59be0cdd 10570 /* It's common practice (and completely valid) to have a const
8d08fdba 10571 be initialized and declared extern. */
950ad3c3 10572 if (!(type_quals & TYPE_QUAL_CONST))
8251199e 10573 warning ("`%s' initialized and declared `extern'", name);
8d08fdba
MS
10574 }
10575 else
8251199e 10576 error ("`%s' has both `extern' and initializer", name);
8d08fdba
MS
10577 }
10578 else if (RIDBIT_SETP (RID_EXTERN, specbits) && funcdef_flag
a9aedbc2 10579 && ! toplevel_bindings_p ())
8251199e 10580 error ("nested function `%s' declared `extern'", name);
a9aedbc2 10581 else if (toplevel_bindings_p ())
8d08fdba
MS
10582 {
10583 if (RIDBIT_SETP (RID_AUTO, specbits))
8251199e 10584 error ("top-level declaration of `%s' specifies `auto'", name);
8d08fdba
MS
10585 }
10586
909e536a 10587 if (nclasses > 0 && friendp)
8251199e 10588 error ("storage class specifiers invalid in friend function declarations");
909e536a 10589
8d08fdba
MS
10590 /* Now figure out the structure of the declarator proper.
10591 Descend through it, creating more complex types, until we reach
10592 the declared identifier (or NULL_TREE, in an absolute declarator). */
10593
1eab9b56 10594 inner_attrs = NULL_TREE;
68642fb6 10595 ignore_attrs = 0;
1eab9b56 10596
386b8a85
JM
10597 while (declarator && TREE_CODE (declarator) != IDENTIFIER_NODE
10598 && TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
8d08fdba
MS
10599 {
10600 /* Each level of DECLARATOR is either an ARRAY_REF (for ...[..]),
10601 an INDIRECT_REF (for *...),
10602 a CALL_EXPR (for ...(...)),
10603 an identifier (for the name being declared)
10604 or a null pointer (for the place in an absolute declarator
10605 where the name was omitted).
10606 For the last two cases, we have just exited the loop.
10607
10608 For C++ it could also be
10609 a SCOPE_REF (for class :: ...). In this case, we have converted
10610 sensible names to types, and those are the values we use to
10611 qualify the member name.
10612 an ADDR_EXPR (for &...),
10613 a BIT_NOT_EXPR (for destructors)
8d08fdba
MS
10614
10615 At this point, TYPE is the type of elements of an array,
10616 or for a function to return, or for a pointer to point to.
10617 After this sequence of ifs, TYPE is the type of the
10618 array or function or pointer, and DECLARATOR has had its
10619 outermost layer removed. */
10620
bd6dd845 10621 if (type == error_mark_node)
8d08fdba
MS
10622 {
10623 if (TREE_CODE (declarator) == SCOPE_REF)
10624 declarator = TREE_OPERAND (declarator, 1);
10625 else
10626 declarator = TREE_OPERAND (declarator, 0);
10627 continue;
10628 }
10629 if (quals != NULL_TREE
10630 && (declarator == NULL_TREE
10631 || TREE_CODE (declarator) != SCOPE_REF))
10632 {
10633 if (ctype == NULL_TREE && TREE_CODE (type) == METHOD_TYPE)
10634 ctype = TYPE_METHOD_BASETYPE (type);
10635 if (ctype != NULL_TREE)
10636 {
8d08fdba 10637 tree dummy = build_decl (TYPE_DECL, NULL_TREE, type);
535233a8 10638 grok_method_quals (ctype, dummy, quals);
8d08fdba 10639 type = TREE_TYPE (dummy);
535233a8 10640 ctype = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (type)));
8d08fdba
MS
10641 quals = NULL_TREE;
10642 }
10643 }
1eab9b56
JM
10644
10645 /* See the comment for the TREE_LIST case, below. */
10646 if (ignore_attrs)
10647 ignore_attrs = 0;
10648 else if (inner_attrs)
10649 {
10650 decl_attributes (type, inner_attrs, NULL_TREE);
10651 inner_attrs = NULL_TREE;
10652 }
10653
8d08fdba
MS
10654 switch (TREE_CODE (declarator))
10655 {
52fbc847
JM
10656 case TREE_LIST:
10657 {
10658 /* We encode a declarator with embedded attributes using
1eab9b56
JM
10659 a TREE_LIST. The attributes apply to the declarator
10660 directly inside them, so we have to skip an iteration
10661 before applying them to the type. If the declarator just
10662 inside is the declarator-id, we apply the attrs to the
10663 decl itself. */
10664 inner_attrs = TREE_PURPOSE (declarator);
10665 ignore_attrs = 1;
52fbc847 10666 declarator = TREE_VALUE (declarator);
52fbc847
JM
10667 }
10668 break;
10669
8d08fdba
MS
10670 case ARRAY_REF:
10671 {
2848ad0f 10672 register tree size;
8d08fdba 10673
2848ad0f 10674 size = TREE_OPERAND (declarator, 1);
8d08fdba 10675
f2e2cbd4 10676 /* VC++ spells a zero-sized array with []. */
e8ea7036
MM
10677 if (size == NULL_TREE && decl_context == FIELD && ! staticp
10678 && ! RIDBIT_SETP (RID_TYPEDEF, specbits))
f2e2cbd4
JM
10679 size = integer_zero_node;
10680
2848ad0f 10681 declarator = TREE_OPERAND (declarator, 0);
8d08fdba 10682
2848ad0f 10683 type = create_array_type_for_decl (dname, type, size);
c1b177ec
ML
10684
10685 /* VLAs never work as fields. */
10686 if (decl_context == FIELD && !processing_template_decl
10687 && TREE_CODE (type) == ARRAY_TYPE
10688 && TYPE_DOMAIN (type) != NULL_TREE
10689 && !TREE_CONSTANT (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))
10690 {
10691 cp_error ("size of member `%D' is not constant", dname);
10692 /* Proceed with arbitrary constant size, so that offset
10693 computations don't get confused. */
10694 type = create_array_type_for_decl (dname, TREE_TYPE (type),
10695 integer_one_node);
10696 }
10697
8d08fdba
MS
10698 ctype = NULL_TREE;
10699 }
10700 break;
10701
10702 case CALL_EXPR:
10703 {
10704 tree arg_types;
f376e137 10705 int funcdecl_p;
43f887f9 10706 tree inner_parms = CALL_DECLARATOR_PARMS (declarator);
f376e137 10707 tree inner_decl = TREE_OPERAND (declarator, 0);
8d08fdba
MS
10708
10709 /* Declaring a function type.
10710 Make sure we have a valid type for the function to return. */
8d08fdba 10711
91063b51 10712 /* We now know that the TYPE_QUALS don't apply to the
14ae7e7d 10713 decl, but to its return type. */
91063b51 10714 type_quals = TYPE_UNQUALIFIED;
8d08fdba
MS
10715
10716 /* Warn about some types functions can't return. */
10717
10718 if (TREE_CODE (type) == FUNCTION_TYPE)
10719 {
8251199e 10720 error ("`%s' declared as function returning a function", name);
8d08fdba
MS
10721 type = integer_type_node;
10722 }
10723 if (TREE_CODE (type) == ARRAY_TYPE)
10724 {
8251199e 10725 error ("`%s' declared as function returning an array", name);
8d08fdba
MS
10726 type = integer_type_node;
10727 }
10728
f376e137
MS
10729 if (inner_decl && TREE_CODE (inner_decl) == SCOPE_REF)
10730 inner_decl = TREE_OPERAND (inner_decl, 1);
10731
68642fb6 10732 if (inner_decl && TREE_CODE (inner_decl) == TEMPLATE_ID_EXPR)
386b8a85
JM
10733 inner_decl = dname;
10734
b7484fbe 10735 /* Pick up type qualifiers which should be applied to `this'. */
43f887f9 10736 quals = CALL_DECLARATOR_QUALS (declarator);
b7484fbe 10737
c11b6f21 10738 /* Pick up the exception specifications. */
43f887f9 10739 raises = CALL_DECLARATOR_EXCEPTION_SPEC (declarator);
c11b6f21 10740
f376e137
MS
10741 /* Say it's a definition only for the CALL_EXPR
10742 closest to the identifier. */
beb53fb8 10743 funcdecl_p
68642fb6 10744 = inner_decl
386b8a85 10745 && (TREE_CODE (inner_decl) == IDENTIFIER_NODE
68642fb6 10746 || TREE_CODE (inner_decl) == TEMPLATE_ID_EXPR
386b8a85 10747 || TREE_CODE (inner_decl) == BIT_NOT_EXPR);
68642fb6 10748
8d08fdba
MS
10749 if (ctype == NULL_TREE
10750 && decl_context == FIELD
f376e137 10751 && funcdecl_p
8d08fdba
MS
10752 && (friendp == 0 || dname == current_class_name))
10753 ctype = current_class_type;
10754
3dbc07b6 10755 if (ctype && sfk == sfk_conversion)
8d08fdba
MS
10756 TYPE_HAS_CONVERSION (ctype) = 1;
10757 if (ctype && constructor_name (ctype) == dname)
10758 {
10759 /* We are within a class's scope. If our declarator name
10760 is the same as the class name, and we are defining
10761 a function, then it is a constructor/destructor, and
10762 therefore returns a void type. */
10763
10764 if (flags == DTOR_FLAG)
10765 {
cab1f180
ML
10766 /* ISO C++ 12.4/2. A destructor may not be
10767 declared const or volatile. A destructor may
10768 not be static. */
8d08fdba 10769 if (staticp == 2)
8251199e 10770 error ("destructor cannot be static member function");
b7484fbe 10771 if (quals)
8d08fdba 10772 {
4f70a846
MM
10773 cp_error ("destructors may not be `%s'",
10774 IDENTIFIER_POINTER (TREE_VALUE (quals)));
10775 quals = NULL_TREE;
8d08fdba
MS
10776 }
10777 if (decl_context == FIELD)
10778 {
4dacf5bd
KG
10779 if (! member_function_or_else (ctype,
10780 current_class_type,
10781 flags))
8d08fdba
MS
10782 return void_type_node;
10783 }
10784 }
2c73f9f5 10785 else /* It's a constructor. */
8d08fdba 10786 {
db5ae43f
MS
10787 if (explicitp == 1)
10788 explicitp = 2;
cab1f180
ML
10789 /* ISO C++ 12.1. A constructor may not be
10790 declared const or volatile. A constructor may
10791 not be virtual. A constructor may not be
10792 static. */
8d08fdba 10793 if (staticp == 2)
8251199e 10794 error ("constructor cannot be static member function");
8d08fdba
MS
10795 if (virtualp)
10796 {
8251199e 10797 pedwarn ("constructors cannot be declared virtual");
8d08fdba
MS
10798 virtualp = 0;
10799 }
b7484fbe 10800 if (quals)
8d08fdba 10801 {
4f70a846
MM
10802 cp_error ("constructors may not be `%s'",
10803 IDENTIFIER_POINTER (TREE_VALUE (quals)));
10804 quals = NULL_TREE;
8d08fdba 10805 }
8d08fdba 10806 {
51c184be 10807 RID_BIT_TYPE tmp_bits;
fc378698 10808 bcopy ((void*)&specbits, (void*)&tmp_bits, sizeof (RID_BIT_TYPE));
51c184be
MS
10809 RIDBIT_RESET (RID_INLINE, tmp_bits);
10810 RIDBIT_RESET (RID_STATIC, tmp_bits);
10811 if (RIDBIT_ANY_SET (tmp_bits))
8251199e 10812 error ("return value type specifier for constructor ignored");
8d08fdba 10813 }
6eabb241 10814 if (decl_context == FIELD)
8d08fdba 10815 {
4dacf5bd
KG
10816 if (! member_function_or_else (ctype,
10817 current_class_type,
10818 flags))
8d08fdba
MS
10819 return void_type_node;
10820 TYPE_HAS_CONSTRUCTOR (ctype) = 1;
3dbc07b6 10821 if (sfk != sfk_constructor)
8d08fdba
MS
10822 return NULL_TREE;
10823 }
10824 }
10825 if (decl_context == FIELD)
10826 staticp = 0;
10827 }
b7484fbe 10828 else if (friendp)
8d08fdba 10829 {
b7484fbe 10830 if (initialized)
8251199e 10831 error ("can't initialize friend function `%s'", name);
b7484fbe
MS
10832 if (virtualp)
10833 {
10834 /* Cannot be both friend and virtual. */
8251199e 10835 error ("virtual functions cannot be friends");
b7484fbe
MS
10836 RIDBIT_RESET (RID_FRIEND, specbits);
10837 friendp = 0;
10838 }
28cbf42c 10839 if (decl_context == NORMAL)
8251199e 10840 error ("friend declaration not in class definition");
28cbf42c 10841 if (current_function_decl && funcdef_flag)
8251199e 10842 cp_error ("can't define friend function `%s' in a local class definition",
28cbf42c 10843 name);
8d08fdba
MS
10844 }
10845
8d08fdba
MS
10846 /* Construct the function type and go to the next
10847 inner layer of declarator. */
10848
f376e137 10849 declarator = TREE_OPERAND (declarator, 0);
8d08fdba 10850
f376e137
MS
10851 /* FIXME: This is where default args should be fully
10852 processed. */
8d08fdba 10853
f376e137 10854 arg_types = grokparms (inner_parms, funcdecl_p ? funcdef_flag : 0);
8d08fdba 10855
4f70a846 10856 if (declarator && flags == DTOR_FLAG)
8d08fdba 10857 {
4f70a846
MM
10858 /* A destructor declared in the body of a class will
10859 be represented as a BIT_NOT_EXPR. But, we just
10860 want the underlying IDENTIFIER. */
8d08fdba 10861 if (TREE_CODE (declarator) == BIT_NOT_EXPR)
4f70a846 10862 declarator = TREE_OPERAND (declarator, 0);
68642fb6 10863
8b27e9ef 10864 if (arg_types != void_list_node)
8d08fdba 10865 {
4f70a846
MM
10866 cp_error ("destructors may not have parameters");
10867 arg_types = void_list_node;
10868 last_function_parms = NULL_TREE;
8d08fdba
MS
10869 }
10870 }
10871
d22c8596 10872 /* ANSI says that `const int foo ();'
8d08fdba 10873 does not make the function foo const. */
d22c8596 10874 type = build_function_type (type, arg_types);
42976354
BK
10875
10876 {
10877 tree t;
10878 for (t = arg_types; t; t = TREE_CHAIN (t))
10879 if (TREE_PURPOSE (t)
10880 && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
10881 {
10882 add_defarg_fn (type);
10883 break;
10884 }
10885 }
8d08fdba
MS
10886 }
10887 break;
10888
10889 case ADDR_EXPR:
10890 case INDIRECT_REF:
10891 /* Filter out pointers-to-references and references-to-references.
10892 We can get these if a TYPE_DECL is used. */
10893
10894 if (TREE_CODE (type) == REFERENCE_TYPE)
10895 {
8251199e 10896 error ("cannot declare %s to references",
8d08fdba
MS
10897 TREE_CODE (declarator) == ADDR_EXPR
10898 ? "references" : "pointers");
10899 declarator = TREE_OPERAND (declarator, 0);
10900 continue;
10901 }
10902
a5894242
MS
10903 if (TREE_CODE (type) == OFFSET_TYPE
10904 && (TREE_CODE (TREE_TYPE (type)) == VOID_TYPE
10905 || TREE_CODE (TREE_TYPE (type)) == REFERENCE_TYPE))
10906 {
8251199e 10907 cp_error ("cannot declare pointer to `%#T' member",
a5894242
MS
10908 TREE_TYPE (type));
10909 type = TREE_TYPE (type);
10910 }
10911
61a127b3
MM
10912 /* Merge any constancy or volatility into the target type
10913 for the pointer. */
10914
91063b51
MM
10915 /* We now know that the TYPE_QUALS don't apply to the decl,
10916 but to the target of the pointer. */
10917 type_quals = TYPE_UNQUALIFIED;
8d08fdba 10918
6eabb241 10919 if (TREE_CODE (declarator) == ADDR_EXPR)
8d08fdba 10920 {
69851283
MM
10921 if (TREE_CODE (type) == VOID_TYPE)
10922 error ("invalid type: `void &'");
8d08fdba 10923 else
69851283 10924 type = build_reference_type (type);
8d08fdba
MS
10925 }
10926 else if (TREE_CODE (type) == METHOD_TYPE)
d8f8dca1 10927 type = build_ptrmemfunc_type (build_pointer_type (type));
8d08fdba
MS
10928 else
10929 type = build_pointer_type (type);
10930
10931 /* Process a list of type modifier keywords (such as
10932 const or volatile) that were given inside the `*' or `&'. */
10933
10934 if (TREE_TYPE (declarator))
10935 {
10936 register tree typemodlist;
10937 int erred = 0;
91063b51
MM
10938
10939 constp = 0;
10940 volatilep = 0;
10941 restrictp = 0;
8d08fdba
MS
10942 for (typemodlist = TREE_TYPE (declarator); typemodlist;
10943 typemodlist = TREE_CHAIN (typemodlist))
10944 {
91063b51
MM
10945 tree qualifier = TREE_VALUE (typemodlist);
10946
10947 if (qualifier == ridpointers[(int) RID_CONST])
8d08fdba 10948 constp++;
91063b51 10949 else if (qualifier == ridpointers[(int) RID_VOLATILE])
8d08fdba 10950 volatilep++;
91063b51
MM
10951 else if (qualifier == ridpointers[(int) RID_RESTRICT])
10952 restrictp++;
8d08fdba
MS
10953 else if (!erred)
10954 {
10955 erred = 1;
91063b51 10956 error ("invalid type modifier within pointer declarator");
8d08fdba
MS
10957 }
10958 }
10959 if (constp > 1)
8251199e 10960 pedwarn ("duplicate `const'");
8d08fdba 10961 if (volatilep > 1)
8251199e 10962 pedwarn ("duplicate `volatile'");
91063b51
MM
10963 if (restrictp > 1)
10964 pedwarn ("duplicate `restrict'");
10965
10966 type_quals = ((constp ? TYPE_QUAL_CONST : 0)
10967 | (restrictp ? TYPE_QUAL_RESTRICT : 0)
10968 | (volatilep ? TYPE_QUAL_VOLATILE : 0));
a0a33927
MS
10969 if (TREE_CODE (declarator) == ADDR_EXPR
10970 && (constp || volatilep))
10971 {
10972 if (constp)
8251199e 10973 pedwarn ("discarding `const' applied to a reference");
a0a33927 10974 if (volatilep)
8251199e 10975 pedwarn ("discarding `volatile' applied to a reference");
91063b51 10976 type_quals &= ~(TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE);
a0a33927 10977 }
91063b51 10978 type = cp_build_qualified_type (type, type_quals);
8d08fdba
MS
10979 }
10980 declarator = TREE_OPERAND (declarator, 0);
10981 ctype = NULL_TREE;
10982 break;
10983
10984 case SCOPE_REF:
10985 {
10986 /* We have converted type names to NULL_TREE if the
10987 name was bogus, or to a _TYPE node, if not.
10988
10989 The variable CTYPE holds the type we will ultimately
10990 resolve to. The code here just needs to build
10991 up appropriate member types. */
10992 tree sname = TREE_OPERAND (declarator, 1);
386b8a85
JM
10993 tree t;
10994
8d08fdba
MS
10995 /* Destructors can have their visibilities changed as well. */
10996 if (TREE_CODE (sname) == BIT_NOT_EXPR)
10997 sname = TREE_OPERAND (sname, 0);
10998
10999 if (TREE_COMPLEXITY (declarator) == 0)
11000 /* This needs to be here, in case we are called
11001 multiple times. */ ;
9a68c51f
JM
11002 else if (TREE_COMPLEXITY (declarator) == -1)
11003 /* Namespace member. */
11004 pop_decl_namespace ();
8d08fdba 11005 else if (friendp && (TREE_COMPLEXITY (declarator) < 2))
2c73f9f5 11006 /* Don't fall out into global scope. Hides real bug? --eichin */ ;
5566b478
MS
11007 else if (! IS_AGGR_TYPE_CODE
11008 (TREE_CODE (TREE_OPERAND (declarator, 0))))
11009 ;
8d08fdba
MS
11010 else if (TREE_COMPLEXITY (declarator) == current_class_depth)
11011 {
9a3b49ac
MS
11012 /* Resolve any TYPENAME_TYPEs from the decl-specifier-seq
11013 that refer to ctype. They couldn't be resolved earlier
11014 because we hadn't pushed into the class yet.
11015 Example: resolve 'B<T>::type' in
11016 'B<typename B<T>::type> B<T>::f () { }'. */
11017 if (current_template_parms
11018 && uses_template_parms (type)
11019 && uses_template_parms (current_class_type))
11020 {
11021 tree args = current_template_args ();
4393e105 11022 type = tsubst (type, args, /*complain=*/1, NULL_TREE);
9a3b49ac
MS
11023 }
11024
a28e3c7f
MS
11025 /* This pop_nested_class corresponds to the
11026 push_nested_class used to push into class scope for
11027 parsing the argument list of a function decl, in
11028 qualified_id. */
b74a0560 11029 pop_nested_class ();
8d08fdba
MS
11030 TREE_COMPLEXITY (declarator) = current_class_depth;
11031 }
11032 else
11033 my_friendly_abort (16);
11034
11035 if (TREE_OPERAND (declarator, 0) == NULL_TREE)
11036 {
11037 /* We had a reference to a global decl, or
11038 perhaps we were given a non-aggregate typedef,
11039 in which case we cleared this out, and should just
11040 keep going as though it wasn't there. */
11041 declarator = sname;
11042 continue;
11043 }
11044 ctype = TREE_OPERAND (declarator, 0);
11045
386b8a85 11046 t = ctype;
68642fb6 11047 while (t != NULL_TREE && CLASS_TYPE_P (t))
386b8a85 11048 {
da8a7456
MM
11049 /* You're supposed to have one `template <...>'
11050 for every template class, but you don't need one
11051 for a full specialization. For example:
11052
11053 template <class T> struct S{};
11054 template <> struct S<int> { void f(); };
11055 void S<int>::f () {}
11056
11057 is correct; there shouldn't be a `template <>' for
11058 the definition of `S<int>::f'. */
11059 if (CLASSTYPE_TEMPLATE_INFO (t)
11060 && (CLASSTYPE_TEMPLATE_INSTANTIATION (t)
11061 || uses_template_parms (CLASSTYPE_TI_ARGS (t))))
386b8a85 11062 template_count += 1;
da8a7456 11063
386b8a85
JM
11064 t = TYPE_MAIN_DECL (t);
11065 if (DECL_LANG_SPECIFIC (t))
4f1c5b7d 11066 t = DECL_CONTEXT (t);
386b8a85
JM
11067 else
11068 t = NULL_TREE;
11069 }
11070
8d08fdba
MS
11071 if (sname == NULL_TREE)
11072 goto done_scoping;
11073
11074 if (TREE_CODE (sname) == IDENTIFIER_NODE)
11075 {
11076 /* This is the `standard' use of the scoping operator:
11077 basetype :: member . */
11078
db5ae43f 11079 if (ctype == current_class_type)
28cbf42c
MS
11080 {
11081 /* class A {
11082 void A::f ();
11083 };
11084
11085 Is this ill-formed? */
11086
11087 if (pedantic)
8251199e 11088 cp_pedwarn ("extra qualification `%T::' on member `%s' ignored",
28cbf42c
MS
11089 ctype, name);
11090 }
db5ae43f 11091 else if (TREE_CODE (type) == FUNCTION_TYPE)
8d08fdba
MS
11092 {
11093 if (current_class_type == NULL_TREE
8d08fdba 11094 || friendp)
14ae7e7d
JM
11095 type = build_cplus_method_type (ctype, TREE_TYPE (type),
11096 TYPE_ARG_TYPES (type));
8d08fdba
MS
11097 else
11098 {
8251199e 11099 cp_error ("cannot declare member function `%T::%s' within `%T'",
a3203465 11100 ctype, name, current_class_type);
8d08fdba
MS
11101 return void_type_node;
11102 }
11103 }
5566b478 11104 else if (RIDBIT_SETP (RID_TYPEDEF, specbits)
d0f062fb 11105 || COMPLETE_TYPE_P (complete_type (ctype)))
8d08fdba 11106 {
2c73f9f5 11107 /* Have to move this code elsewhere in this function.
db5ae43f
MS
11108 this code is used for i.e., typedef int A::M; M *pm;
11109
11110 It is? How? jason 10/2/94 */
8d08fdba 11111
8d08fdba
MS
11112 if (current_class_type)
11113 {
8251199e 11114 cp_error ("cannot declare member `%T::%s' within `%T'",
db5ae43f
MS
11115 ctype, name, current_class_type);
11116 return void_type_node;
8d08fdba
MS
11117 }
11118 type = build_offset_type (ctype, type);
11119 }
11120 else if (uses_template_parms (ctype))
11121 {
8d08fdba 11122 if (TREE_CODE (type) == FUNCTION_TYPE)
beb53fb8 11123 type
14ae7e7d 11124 = build_cplus_method_type (ctype, TREE_TYPE (type),
beb53fb8 11125 TYPE_ARG_TYPES (type));
8d08fdba
MS
11126 }
11127 else
11128 {
8251199e 11129 cp_error ("structure `%T' not yet defined", ctype);
8d08fdba
MS
11130 return error_mark_node;
11131 }
11132
11133 declarator = sname;
11134 }
8d08fdba
MS
11135 else if (TREE_CODE (sname) == SCOPE_REF)
11136 my_friendly_abort (17);
11137 else
11138 {
11139 done_scoping:
11140 declarator = TREE_OPERAND (declarator, 1);
11141 if (declarator && TREE_CODE (declarator) == CALL_EXPR)
11142 /* In this case, we will deal with it later. */
11143 ;
11144 else
11145 {
11146 if (TREE_CODE (type) == FUNCTION_TYPE)
14ae7e7d
JM
11147 type = build_cplus_method_type (ctype, TREE_TYPE (type),
11148 TYPE_ARG_TYPES (type));
8d08fdba
MS
11149 else
11150 type = build_offset_type (ctype, type);
11151 }
11152 }
11153 }
11154 break;
11155
11156 case BIT_NOT_EXPR:
11157 declarator = TREE_OPERAND (declarator, 0);
11158 break;
11159
8d08fdba
MS
11160 case RECORD_TYPE:
11161 case UNION_TYPE:
11162 case ENUMERAL_TYPE:
11163 declarator = NULL_TREE;
11164 break;
11165
11166 case ERROR_MARK:
11167 declarator = NULL_TREE;
11168 break;
11169
11170 default:
11171 my_friendly_abort (158);
11172 }
11173 }
11174
1eab9b56
JM
11175 /* See the comment for the TREE_LIST case, above. */
11176 if (inner_attrs)
11177 {
11178 if (! ignore_attrs)
11179 decl_attributes (type, inner_attrs, NULL_TREE);
11180 else if (attrlist)
11181 TREE_VALUE (attrlist) = chainon (inner_attrs, TREE_VALUE (attrlist));
11182 else
11183 attrlist = build_decl_list (NULL_TREE, inner_attrs);
11184 }
11185
419c6212
JM
11186 /* Now TYPE has the actual type. */
11187
34fc957d 11188 if (explicitp == 1 || (explicitp && friendp))
db5ae43f 11189 {
34fc957d
NS
11190 /* [dcl.fct.spec] The explicit specifier shall only be used in
11191 declarations of constructors within a class definition. */
11192 error ("only declarations of constructors can be `explicit'");
db5ae43f
MS
11193 explicitp = 0;
11194 }
11195
f30432d7
MS
11196 if (RIDBIT_SETP (RID_MUTABLE, specbits))
11197 {
34fc957d
NS
11198 if (current_class_name == NULL_TREE || decl_context == PARM || friendp)
11199 {
11200 error ("non-member `%s' cannot be declared `mutable'", name);
11201 RIDBIT_RESET (RID_MUTABLE, specbits);
11202 }
11203 else if (decl_context == TYPENAME || RIDBIT_SETP (RID_TYPEDEF, specbits))
f30432d7 11204 {
34fc957d 11205 error ("non-object member `%s' cannot be declared `mutable'", name);
f30432d7
MS
11206 RIDBIT_RESET (RID_MUTABLE, specbits);
11207 }
34fc957d
NS
11208 else if (TREE_CODE (type) == FUNCTION_TYPE
11209 || TREE_CODE (type) == METHOD_TYPE)
11210 {
11211 error ("function `%s' cannot be declared `mutable'", name);
11212 RIDBIT_RESET (RID_MUTABLE, specbits);
11213 }
f30432d7
MS
11214 else if (staticp)
11215 {
8251199e 11216 error ("static `%s' cannot be declared `mutable'", name);
f30432d7
MS
11217 RIDBIT_RESET (RID_MUTABLE, specbits);
11218 }
34fc957d
NS
11219 else if (type_quals & TYPE_QUAL_CONST)
11220 {
11221 error ("const `%s' cannot be declared `mutable'", name);
11222 RIDBIT_RESET (RID_MUTABLE, specbits);
11223 }
f30432d7
MS
11224 }
11225
efe38fab
JM
11226 if (declarator == NULL_TREE
11227 || TREE_CODE (declarator) == IDENTIFIER_NODE
11228 || (TREE_CODE (declarator) == TEMPLATE_ID_EXPR
11229 && (TREE_CODE (type) == FUNCTION_TYPE
11230 || TREE_CODE (type) == METHOD_TYPE)))
11231 /* OK */;
11232 else if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
11233 {
11234 cp_error ("template-id `%D' used as a declarator", declarator);
11235 declarator = dname;
11236 }
11237 else
419c6212 11238 /* Unexpected declarator format. */
efe38fab
JM
11239 my_friendly_abort (990210);
11240
419c6212
JM
11241 /* If this is declaring a typedef name, return a TYPE_DECL. */
11242
fc378698 11243 if (RIDBIT_SETP (RID_TYPEDEF, specbits) && decl_context != TYPENAME)
8d08fdba
MS
11244 {
11245 tree decl;
11246
11247 /* Note that the grammar rejects storage classes
11248 in typenames, fields or parameters. */
eff71ab0
PB
11249 if (current_lang_name == lang_name_java)
11250 TYPE_FOR_JAVA (type) = 1;
8d08fdba 11251
d2e5ee5c
MS
11252 if (decl_context == FIELD)
11253 {
094fe153 11254 if (declarator == constructor_name (current_class_type))
cb9a3ff8 11255 cp_pedwarn ("ISO C++ forbids nested type `%D' with same name as enclosing class",
d2e5ee5c
MS
11256 declarator);
11257 decl = build_lang_decl (TYPE_DECL, declarator, type);
d2e5ee5c
MS
11258 }
11259 else
6dfbb909 11260 decl = build_decl (TYPE_DECL, declarator, type);
d2e5ee5c 11261
9188c363
MM
11262 /* If the user declares "typedef struct {...} foo" then the
11263 struct will have an anonymous name. Fill that name in now.
11264 Nothing can refer to it, so nothing needs know about the name
11265 change. */
8d08fdba 11266 if (type != error_mark_node
2bdb0643 11267 && declarator
8d08fdba
MS
11268 && TYPE_NAME (type)
11269 && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
b537d120
MM
11270 && ANON_AGGRNAME_P (TYPE_IDENTIFIER (type))
11271 && CP_TYPE_QUALS (type) == TYPE_UNQUALIFIED)
8d08fdba 11272 {
dcd08efc
JM
11273 tree oldname = TYPE_NAME (type);
11274 tree t;
11275
2c73f9f5 11276 /* Replace the anonymous name with the real name everywhere. */
8d08fdba 11277 lookup_tag_reverse (type, declarator);
dcd08efc
JM
11278 for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
11279 if (TYPE_NAME (t) == oldname)
11280 TYPE_NAME (t) = decl;
8d08fdba
MS
11281
11282 if (TYPE_LANG_SPECIFIC (type))
11283 TYPE_WAS_ANONYMOUS (type) = 1;
11284
33964bf4
MM
11285 /* If this is a typedef within a template class, the nested
11286 type is a (non-primary) template. The name for the
11287 template needs updating as well. */
11288 if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
68642fb6 11289 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type))
33964bf4
MM
11290 = TYPE_IDENTIFIER (type);
11291
669ec2b4
JM
11292 if (flag_new_abi)
11293 DECL_ASSEMBLER_NAME (decl) = mangle_type (type);
11294 else
11295 {
11296 /* XXX Temporarily set the scope.
11297 When returning, start_decl expects it as NULL_TREE,
11298 and will then then set it using pushdecl. */
11299 my_friendly_assert (DECL_CONTEXT (decl) == NULL_TREE, 980404);
11300 if (current_class_type)
11301 DECL_CONTEXT (decl) = current_class_type;
11302 else
11303 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
11304
11305 DECL_ASSEMBLER_NAME (decl) = DECL_NAME (decl);
11306 DECL_ASSEMBLER_NAME (decl)
11307 = get_identifier (build_overload_name (type, 1, 1));
11308 DECL_CONTEXT (decl) = NULL_TREE;
11309 }
50a6dbd7
JM
11310
11311 /* FIXME remangle member functions; member functions of a
11312 type with external linkage have external linkage. */
fc378698 11313 }
fc378698 11314
8d08fdba
MS
11315 if (TREE_CODE (type) == OFFSET_TYPE || TREE_CODE (type) == METHOD_TYPE)
11316 {
8251199e 11317 cp_error_at ("typedef name may not be class-qualified", decl);
a3203465 11318 return NULL_TREE;
8d08fdba
MS
11319 }
11320 else if (quals)
11321 {
11322 if (ctype == NULL_TREE)
11323 {
11324 if (TREE_CODE (type) != METHOD_TYPE)
cb9a3ff8 11325 cp_error_at ("invalid type qualifier for non-member function type", decl);
8d08fdba
MS
11326 else
11327 ctype = TYPE_METHOD_BASETYPE (type);
11328 }
11329 if (ctype != NULL_TREE)
11330 grok_method_quals (ctype, decl, quals);
11331 }
11332
11333 if (RIDBIT_SETP (RID_SIGNED, specbits)
11334 || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
11335 C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
11336
c91a56d2
MS
11337 bad_specifiers (decl, "type", virtualp, quals != NULL_TREE,
11338 inlinep, friendp, raises != NULL_TREE);
11339
11340 if (initialized)
8251199e 11341 error ("typedef declaration includes an initializer");
c91a56d2 11342
8d08fdba
MS
11343 return decl;
11344 }
11345
11346 /* Detect the case of an array type of unspecified size
11347 which came, as such, direct from a typedef name.
11348 We must copy the type, so that each identifier gets
11349 a distinct type, so that each identifier's size can be
11350 controlled separately by its own initializer. */
11351
11352 if (type == typedef_type && TREE_CODE (type) == ARRAY_TYPE
11353 && TYPE_DOMAIN (type) == NULL_TREE)
11354 {
11355 type = build_cplus_array_type (TREE_TYPE (type), TYPE_DOMAIN (type));
11356 }
11357
11358 /* If this is a type name (such as, in a cast or sizeof),
11359 compute the type and return it now. */
11360
11361 if (decl_context == TYPENAME)
11362 {
11363 /* Note that the grammar rejects storage classes
11364 in typenames, fields or parameters. */
91063b51 11365 if (type_quals != TYPE_UNQUALIFIED)
6eabb241 11366 type_quals = TYPE_UNQUALIFIED;
8d08fdba
MS
11367
11368 /* Special case: "friend class foo" looks like a TYPENAME context. */
11369 if (friendp)
11370 {
91063b51 11371 if (type_quals != TYPE_UNQUALIFIED)
b7484fbe 11372 {
91063b51
MM
11373 cp_error ("type qualifiers specified for friend class declaration");
11374 type_quals = TYPE_UNQUALIFIED;
b7484fbe
MS
11375 }
11376 if (inlinep)
11377 {
8251199e 11378 cp_error ("`inline' specified for friend class declaration");
b7484fbe
MS
11379 inlinep = 0;
11380 }
f2ae0c45
JM
11381
11382 /* Until core issue 180 is resolved, allow 'friend typename A::B'.
11383 But don't allow implicit typenames. */
11384 if (!current_aggr && (TREE_CODE (type) != TYPENAME_TYPE
11385 || IMPLICIT_TYPENAME_P (type)))
4b054b80
NS
11386 {
11387 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
f2ae0c45
JM
11388 cp_pedwarn ("template parameters cannot be friends");
11389 else if (TREE_CODE (type) == TYPENAME_TYPE)
11390 cp_pedwarn ("\
11391friend declaration requires class-key, i.e. `friend class %T::%T'",
11392 constructor_name (current_class_type),
11393 TYPE_IDENTIFIER (type));
4b054b80 11394 else
f2ae0c45
JM
11395 cp_pedwarn ("\
11396friend declaration requires class-key, i.e. `friend %#T'",
11397 type);
4b054b80 11398 }
b7484fbe
MS
11399
11400 /* Only try to do this stuff if we didn't already give up. */
11401 if (type != integer_type_node)
11402 {
11403 /* A friendly class? */
11404 if (current_class_type)
11405 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type));
11406 else
2ae7bada
NS
11407 cp_error ("trying to make class `%T' a friend of global scope",
11408 type);
b7484fbe
MS
11409 type = void_type_node;
11410 }
8d08fdba
MS
11411 }
11412 else if (quals)
11413 {
8d08fdba
MS
11414 if (ctype == NULL_TREE)
11415 {
41cbc04c
NS
11416 if (TREE_CODE (type) != METHOD_TYPE)
11417 cp_error ("invalid qualifiers on non-member function type");
11418 else
11419 ctype = TYPE_METHOD_BASETYPE (type);
11420 }
11421 if (ctype)
11422 {
11423 tree dummy = build_decl (TYPE_DECL, declarator, type);
11424 grok_method_quals (ctype, dummy, quals);
11425 type = TREE_TYPE (dummy);
8d08fdba 11426 }
8d08fdba
MS
11427 }
11428
11429 return type;
11430 }
11431 else if (declarator == NULL_TREE && decl_context != PARM
db5ae43f 11432 && decl_context != CATCHPARM
8d08fdba
MS
11433 && TREE_CODE (type) != UNION_TYPE
11434 && ! bitfield)
11435 {
8251199e 11436 cp_error ("abstract declarator `%T' used as declaration", type);
8d08fdba
MS
11437 declarator = make_anon_name ();
11438 }
11439
11440 /* `void' at top level (not within pointer)
11441 is allowed only in typedefs or type names.
11442 We don't complain about parms either, but that is because
11443 a better error message can be made later. */
11444
a1774733 11445 if (TREE_CODE (type) == VOID_TYPE && decl_context != PARM)
8d08fdba 11446 {
b7484fbe 11447 if (! declarator)
8251199e 11448 error ("unnamed variable or field declared void");
b7484fbe 11449 else if (TREE_CODE (declarator) == IDENTIFIER_NODE)
8d08fdba
MS
11450 {
11451 if (IDENTIFIER_OPNAME_P (declarator))
8d08fdba 11452 my_friendly_abort (356);
8d08fdba 11453 else
8251199e 11454 error ("variable or field `%s' declared void", name);
8d08fdba
MS
11455 }
11456 else
8251199e 11457 error ("variable or field declared void");
8d08fdba
MS
11458 type = integer_type_node;
11459 }
11460
11461 /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
11462 or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE. */
11463
14ae7e7d
JM
11464 if (decl_context == PARM || decl_context == CATCHPARM)
11465 {
11466 if (ctype || in_namespace)
11467 error ("cannot use `::' in parameter declaration");
11468
11469 /* A parameter declared as an array of T is really a pointer to T.
11470 One declared as a function is really a pointer to a function.
11471 One declared as a member is really a pointer to member. */
11472
11473 if (TREE_CODE (type) == ARRAY_TYPE)
11474 {
11475 /* Transfer const-ness of array into that of type pointed to. */
11476 type = build_pointer_type (TREE_TYPE (type));
91063b51 11477 type_quals = TYPE_UNQUALIFIED;
14ae7e7d
JM
11478 }
11479 else if (TREE_CODE (type) == FUNCTION_TYPE)
11480 type = build_pointer_type (type);
11481 else if (TREE_CODE (type) == OFFSET_TYPE)
11482 type = build_pointer_type (type);
11483 else if (TREE_CODE (type) == VOID_TYPE && declarator)
11484 {
11485 error ("declaration of `%s' as void", name);
11486 return NULL_TREE;
11487 }
11488 }
68642fb6 11489
8d08fdba
MS
11490 {
11491 register tree decl;
11492
11493 if (decl_context == PARM)
11494 {
ff350acd 11495 decl = build_decl (PARM_DECL, declarator, type);
8d08fdba
MS
11496
11497 bad_specifiers (decl, "parameter", virtualp, quals != NULL_TREE,
11498 inlinep, friendp, raises != NULL_TREE);
8d08fdba
MS
11499
11500 /* Compute the type actually passed in the parmlist,
11501 for the case where there is no prototype.
11502 (For example, shorts and chars are passed as ints.)
11503 When there is a prototype, this is overridden later. */
11504
39211cd5 11505 DECL_ARG_TYPE (decl) = type_promotes_to (type);
8d08fdba
MS
11506 }
11507 else if (decl_context == FIELD)
11508 {
11509 if (type == error_mark_node)
11510 {
11511 /* Happens when declaring arrays of sizes which
11512 are error_mark_node, for example. */
11513 decl = NULL_TREE;
11514 }
997a088c 11515 else if (in_namespace && !friendp)
05008fb9
MM
11516 {
11517 /* Something like struct S { int N::j; }; */
8251199e 11518 cp_error ("invalid use of `::'");
05008fb9
MM
11519 decl = NULL_TREE;
11520 }
8d08fdba
MS
11521 else if (TREE_CODE (type) == FUNCTION_TYPE)
11522 {
11523 int publicp = 0;
e1467ff2 11524 tree function_context;
8d08fdba 11525
72b7eeff
MS
11526 /* We catch the others as conflicts with the builtin
11527 typedefs. */
11528 if (friendp && declarator == ridpointers[(int) RID_SIGNED])
11529 {
8251199e 11530 cp_error ("function `%D' cannot be declared friend",
72b7eeff
MS
11531 declarator);
11532 friendp = 0;
11533 }
11534
8d08fdba
MS
11535 if (friendp == 0)
11536 {
11537 if (ctype == NULL_TREE)
11538 ctype = current_class_type;
11539
11540 if (ctype == NULL_TREE)
11541 {
8251199e 11542 cp_error ("can't make `%D' into a method -- not in a class",
8d08fdba
MS
11543 declarator);
11544 return void_type_node;
11545 }
11546
11547 /* ``A union may [ ... ] not [ have ] virtual functions.''
11548 ARM 9.5 */
11549 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
11550 {
8251199e 11551 cp_error ("function `%D' declared virtual inside a union",
8d08fdba
MS
11552 declarator);
11553 return void_type_node;
11554 }
11555
596ea4e5
AS
11556 if (declarator == ansi_opname (NEW_EXPR)
11557 || declarator == ansi_opname (VEC_NEW_EXPR)
11558 || declarator == ansi_opname (DELETE_EXPR)
11559 || declarator == ansi_opname (VEC_DELETE_EXPR))
8d08fdba
MS
11560 {
11561 if (virtualp)
11562 {
8251199e 11563 cp_error ("`%D' cannot be declared virtual, since it is always static",
8d08fdba
MS
11564 declarator);
11565 virtualp = 0;
11566 }
11567 }
11568 else if (staticp < 2)
14ae7e7d
JM
11569 type = build_cplus_method_type (ctype, TREE_TYPE (type),
11570 TYPE_ARG_TYPES (type));
8d08fdba
MS
11571 }
11572
11573 /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node. */
68642fb6 11574 function_context = (ctype != NULL_TREE) ?
4f1c5b7d 11575 decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
e1467ff2
MM
11576 publicp = (! friendp || ! staticp)
11577 && function_context == NULL_TREE;
68642fb6 11578 decl = grokfndecl (ctype, type,
386b8a85
JM
11579 TREE_CODE (declarator) != TEMPLATE_ID_EXPR
11580 ? declarator : dname,
11581 declarator,
7a8f9fa9 11582 virtualp, flags, quals, raises,
386b8a85 11583 friendp ? -1 : 0, friendp, publicp, inlinep,
2c73f9f5 11584 funcdef_flag, template_count, in_namespace);
20496fa2 11585 if (decl == NULL_TREE)
3ddfb0e6 11586 return decl;
6125f3be
DE
11587#if 0
11588 /* This clobbers the attrs stored in `decl' from `attrlist'. */
11589 /* The decl and setting of decl_machine_attr is also turned off. */
71851aaa 11590 decl = build_decl_attribute_variant (decl, decl_machine_attr);
6125f3be 11591#endif
f0e01782 11592
cc804e51
MM
11593 /* [class.conv.ctor]
11594
11595 A constructor declared without the function-specifier
11596 explicit that can be called with a single parameter
11597 specifies a conversion from the type of its first
11598 parameter to the type of its class. Such a constructor
11599 is called a converting constructor. */
db5ae43f
MS
11600 if (explicitp == 2)
11601 DECL_NONCONVERTING_P (decl) = 1;
cc804e51
MM
11602 else if (DECL_CONSTRUCTOR_P (decl))
11603 {
11604 /* The constructor can be called with exactly one
11605 parameter if there is at least one parameter, and
11606 any subsequent parameters have default arguments.
11607 We don't look at the first parameter, which is
11608 really just the `this' parameter for the new
11609 object. */
68642fb6 11610 tree arg_types =
cc804e51
MM
11611 TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)));
11612
11613 /* Skip the `in_chrg' argument too, if present. */
454fa7a7 11614 if (DECL_HAS_IN_CHARGE_PARM_P (decl))
cc804e51
MM
11615 arg_types = TREE_CHAIN (arg_types);
11616
11617 if (arg_types == void_list_node
68642fb6
UD
11618 || (arg_types
11619 && TREE_CHAIN (arg_types)
cc804e51
MM
11620 && TREE_CHAIN (arg_types) != void_list_node
11621 && !TREE_PURPOSE (TREE_CHAIN (arg_types))))
11622 DECL_NONCONVERTING_P (decl) = 1;
11623 }
8d08fdba
MS
11624 }
11625 else if (TREE_CODE (type) == METHOD_TYPE)
11626 {
faae18ab
MS
11627 /* We only get here for friend declarations of
11628 members of other classes. */
8d08fdba
MS
11629 /* All method decls are public, so tell grokfndecl to set
11630 TREE_PUBLIC, also. */
386b8a85 11631 decl = grokfndecl (ctype, type, declarator, declarator,
7a8f9fa9 11632 virtualp, flags, quals, raises,
386b8a85 11633 friendp ? -1 : 0, friendp, 1, 0, funcdef_flag,
2c73f9f5 11634 template_count, in_namespace);
f0e01782
MS
11635 if (decl == NULL_TREE)
11636 return NULL_TREE;
8d08fdba 11637 }
5566b478 11638 else if (!staticp && ! processing_template_decl
d0f062fb 11639 && !COMPLETE_TYPE_P (complete_type (type))
8d08fdba
MS
11640 && (TREE_CODE (type) != ARRAY_TYPE || initialized == 0))
11641 {
b7484fbe 11642 if (declarator)
8251199e 11643 cp_error ("field `%D' has incomplete type", declarator);
b7484fbe 11644 else
8251199e 11645 cp_error ("name `%T' has incomplete type", type);
8d08fdba
MS
11646
11647 /* If we're instantiating a template, tell them which
11648 instantiation made the field's type be incomplete. */
11649 if (current_class_type
11650 && TYPE_NAME (current_class_type)
d2e5ee5c 11651 && IDENTIFIER_TEMPLATE (TYPE_IDENTIFIER (current_class_type))
8d08fdba
MS
11652 && declspecs && TREE_VALUE (declspecs)
11653 && TREE_TYPE (TREE_VALUE (declspecs)) == type)
8251199e 11654 cp_error (" in instantiation of template `%T'",
db5ae43f
MS
11655 current_class_type);
11656
8d08fdba
MS
11657 type = error_mark_node;
11658 decl = NULL_TREE;
11659 }
11660 else
11661 {
11662 if (friendp)
11663 {
cb9a3ff8 11664 error ("`%s' is neither function nor member function; cannot be declared friend",
8d08fdba
MS
11665 IDENTIFIER_POINTER (declarator));
11666 friendp = 0;
11667 }
11668 decl = NULL_TREE;
11669 }
11670
11671 if (friendp)
11672 {
11673 /* Friends are treated specially. */
11674 if (ctype == current_class_type)
8251199e 11675 warning ("member functions are implicitly friends of their class");
8d08fdba
MS
11676 else
11677 {
11678 tree t = NULL_TREE;
11679 if (decl && DECL_NAME (decl))
36a117a5
MM
11680 {
11681 if (template_class_depth (current_class_type) == 0)
6c30752f 11682 {
68642fb6
UD
11683 decl
11684 = check_explicit_specialization
6c30752f
MM
11685 (declarator, decl,
11686 template_count, 2 * (funcdef_flag != 0) + 4);
11687 if (decl == error_mark_node)
11688 return error_mark_node;
11689 }
11690
36a117a5 11691 t = do_friend (ctype, declarator, decl,
7a8f9fa9 11692 last_function_parms, attrlist, flags, quals,
36a117a5
MM
11693 funcdef_flag);
11694 }
8d08fdba
MS
11695 if (t && funcdef_flag)
11696 return t;
68642fb6 11697
8d08fdba
MS
11698 return void_type_node;
11699 }
11700 }
11701
11702 /* Structure field. It may not be a function, except for C++ */
11703
11704 if (decl == NULL_TREE)
11705 {
8d08fdba
MS
11706 if (initialized)
11707 {
3ac3d9ea
MM
11708 if (!staticp)
11709 {
11710 /* An attempt is being made to initialize a non-static
11711 member. But, from [class.mem]:
68642fb6 11712
3ac3d9ea
MM
11713 4 A member-declarator can contain a
11714 constant-initializer only if it declares a static
11715 member (_class.static_) of integral or enumeration
68642fb6 11716 type, see _class.static.data_.
3ac3d9ea
MM
11717
11718 This used to be relatively common practice, but
11719 the rest of the compiler does not correctly
11720 handle the initialization unless the member is
11721 static so we make it static below. */
cab1f180 11722 cp_pedwarn ("ISO C++ forbids initialization of member `%D'",
3ac3d9ea 11723 declarator);
8251199e 11724 cp_pedwarn ("making `%D' static", declarator);
3ac3d9ea
MM
11725 staticp = 1;
11726 }
11727
6ba89f8e
MM
11728 if (uses_template_parms (type))
11729 /* We'll check at instantiation time. */
11730 ;
11731 else if (check_static_variable_definition (declarator,
11732 type))
11733 /* If we just return the declaration, crashes
11734 will sometimes occur. We therefore return
72a93143
JM
11735 void_type_node, as if this was a friend
11736 declaration, to cause callers to completely
11737 ignore this declaration. */
6ba89f8e 11738 return void_type_node;
8d08fdba
MS
11739 }
11740
8ebeee52 11741 /* 9.2p13 [class.mem] */
4d7614e9 11742 if (declarator == constructor_name (current_class_type)
e54930f9
JM
11743 /* The standard does not allow non-static data members
11744 here either, but we agreed at the 10/99 meeting
11745 to change that in TC 1 so that they are allowed in
11746 classes with no user-defined constructors. */
11747 && staticp)
11748 cp_pedwarn ("ISO C++ forbids static data member `%D' with same name as enclosing class",
8ebeee52
JM
11749 declarator);
11750
3ac3d9ea 11751 if (staticp)
8d08fdba 11752 {
f18a14bc
MM
11753 /* C++ allows static class members. All other work
11754 for this is done by grokfield. */
4ce3d537 11755 decl = build_lang_decl (VAR_DECL, declarator, type);
5b605f68
MS
11756 TREE_STATIC (decl) = 1;
11757 /* In class context, 'static' means public access. */
3ac3d9ea 11758 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl) = 1;
8d08fdba
MS
11759 }
11760 else
11761 {
721c3b42 11762 decl = build_decl (FIELD_DECL, declarator, type);
2bf105ab 11763 DECL_NONADDRESSABLE_P (decl) = bitfield;
8d08fdba
MS
11764 if (RIDBIT_SETP (RID_MUTABLE, specbits))
11765 {
11766 DECL_MUTABLE_P (decl) = 1;
11767 RIDBIT_RESET (RID_MUTABLE, specbits);
11768 }
11769 }
11770
11771 bad_specifiers (decl, "field", virtualp, quals != NULL_TREE,
11772 inlinep, friendp, raises != NULL_TREE);
11773 }
11774 }
11775 else if (TREE_CODE (type) == FUNCTION_TYPE || TREE_CODE (type) == METHOD_TYPE)
11776 {
386b8a85 11777 tree original_name;
8d08fdba
MS
11778 int publicp = 0;
11779
11780 if (! declarator)
11781 return NULL_TREE;
11782
386b8a85
JM
11783 if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
11784 original_name = dname;
11785 else
11786 original_name = declarator;
11787
8926095f 11788 if (RIDBIT_SETP (RID_AUTO, specbits))
8251199e 11789 error ("storage class `auto' invalid for function `%s'", name);
8926095f 11790 else if (RIDBIT_SETP (RID_REGISTER, specbits))
8251199e 11791 error ("storage class `register' invalid for function `%s'", name);
8d08fdba
MS
11792
11793 /* Function declaration not at top level.
11794 Storage classes other than `extern' are not allowed
11795 and `extern' makes no difference. */
a9aedbc2 11796 if (! toplevel_bindings_p ()
8926095f
MS
11797 && (RIDBIT_SETP (RID_STATIC, specbits)
11798 || RIDBIT_SETP (RID_INLINE, specbits))
8d08fdba 11799 && pedantic)
8926095f
MS
11800 {
11801 if (RIDBIT_SETP (RID_STATIC, specbits))
8251199e 11802 pedwarn ("storage class `static' invalid for function `%s' declared out of global scope", name);
8926095f 11803 else
8251199e 11804 pedwarn ("storage class `inline' invalid for function `%s' declared out of global scope", name);
8926095f 11805 }
68642fb6 11806
8d08fdba
MS
11807 if (ctype == NULL_TREE)
11808 {
11809 if (virtualp)
11810 {
8251199e 11811 error ("virtual non-class function `%s'", name);
8d08fdba
MS
11812 virtualp = 0;
11813 }
8d08fdba
MS
11814 }
11815 else if (TREE_CODE (type) == FUNCTION_TYPE && staticp < 2)
14ae7e7d
JM
11816 type = build_cplus_method_type (ctype, TREE_TYPE (type),
11817 TYPE_ARG_TYPES (type));
8d08fdba 11818
eb66be0e 11819 /* Record presence of `static'. */
faae18ab 11820 publicp = (ctype != NULL_TREE
a9aedbc2 11821 || RIDBIT_SETP (RID_EXTERN, specbits)
eb66be0e 11822 || !RIDBIT_SETP (RID_STATIC, specbits));
8d08fdba 11823
386b8a85 11824 decl = grokfndecl (ctype, type, original_name, declarator,
7a8f9fa9 11825 virtualp, flags, quals, raises,
75650646 11826 1, friendp,
68642fb6 11827 publicp, inlinep, funcdef_flag,
2c73f9f5 11828 template_count, in_namespace);
f0e01782
MS
11829 if (decl == NULL_TREE)
11830 return NULL_TREE;
8d08fdba 11831
8d08fdba
MS
11832 if (staticp == 1)
11833 {
11834 int illegal_static = 0;
11835
11836 /* Don't allow a static member function in a class, and forbid
11837 declaring main to be static. */
11838 if (TREE_CODE (type) == METHOD_TYPE)
11839 {
8251199e 11840 cp_pedwarn ("cannot declare member function `%D' to have static linkage", decl);
8d08fdba
MS
11841 illegal_static = 1;
11842 }
8d08fdba
MS
11843 else if (current_function_decl)
11844 {
11845 /* FIXME need arm citation */
8251199e 11846 error ("cannot declare static function inside another function");
8d08fdba
MS
11847 illegal_static = 1;
11848 }
11849
11850 if (illegal_static)
11851 {
11852 staticp = 0;
11853 RIDBIT_RESET (RID_STATIC, specbits);
11854 }
11855 }
8d08fdba
MS
11856 }
11857 else
11858 {
11859 /* It's a variable. */
11860
11861 /* An uninitialized decl with `extern' is a reference. */
68642fb6
UD
11862 decl = grokvardecl (type, declarator, &specbits,
11863 initialized,
11864 (type_quals & TYPE_QUAL_CONST) != 0,
950ad3c3 11865 in_namespace);
8d08fdba
MS
11866 bad_specifiers (decl, "variable", virtualp, quals != NULL_TREE,
11867 inlinep, friendp, raises != NULL_TREE);
11868
11869 if (ctype)
11870 {
f0e01782 11871 DECL_CONTEXT (decl) = ctype;
8d08fdba
MS
11872 if (staticp == 1)
11873 {
8251199e 11874 cp_pedwarn ("static member `%D' re-declared as static", decl);
8d08fdba
MS
11875 staticp = 0;
11876 RIDBIT_RESET (RID_STATIC, specbits);
11877 }
b7484fbe
MS
11878 if (RIDBIT_SETP (RID_REGISTER, specbits) && TREE_STATIC (decl))
11879 {
8251199e 11880 cp_error ("static member `%D' declared `register'", decl);
b7484fbe
MS
11881 RIDBIT_RESET (RID_REGISTER, specbits);
11882 }
f30432d7 11883 if (RIDBIT_SETP (RID_EXTERN, specbits) && pedantic)
8d08fdba 11884 {
8251199e 11885 cp_pedwarn ("cannot explicitly declare member `%#D' to have extern linkage",
f30432d7 11886 decl);
8d08fdba
MS
11887 RIDBIT_RESET (RID_EXTERN, specbits);
11888 }
11889 }
11890 }
11891
34fc957d 11892 my_friendly_assert (!RIDBIT_SETP (RID_MUTABLE, specbits), 19990927);
8d08fdba
MS
11893
11894 /* Record `register' declaration for warnings on &
11895 and in case doing stupid register allocation. */
11896
11897 if (RIDBIT_SETP (RID_REGISTER, specbits))
11898 DECL_REGISTER (decl) = 1;
11899
8926095f
MS
11900 if (RIDBIT_SETP (RID_EXTERN, specbits))
11901 DECL_THIS_EXTERN (decl) = 1;
11902
faae18ab
MS
11903 if (RIDBIT_SETP (RID_STATIC, specbits))
11904 DECL_THIS_STATIC (decl) = 1;
11905
adecb3f4
MM
11906 /* Record constancy and volatility. There's no need to do this
11907 when processing a template; we'll do this for the instantiated
11908 declaration based on the type of DECL. */
11909 if (!processing_template_decl)
11910 c_apply_type_quals_to_decl (type_quals, decl);
8d08fdba
MS
11911
11912 return decl;
11913 }
11914}
11915\f
11916/* Tell if a parmlist/exprlist looks like an exprlist or a parmlist.
11917 An empty exprlist is a parmlist. An exprlist which
11918 contains only identifiers at the global level
11919 is a parmlist. Otherwise, it is an exprlist. */
e92cc029 11920
8d08fdba
MS
11921int
11922parmlist_is_exprlist (exprs)
11923 tree exprs;
11924{
11925 if (exprs == NULL_TREE || TREE_PARMLIST (exprs))
11926 return 0;
11927
a9aedbc2 11928 if (toplevel_bindings_p ())
8d08fdba
MS
11929 {
11930 /* At the global level, if these are all identifiers,
11931 then it is a parmlist. */
11932 while (exprs)
11933 {
11934 if (TREE_CODE (TREE_VALUE (exprs)) != IDENTIFIER_NODE)
11935 return 1;
11936 exprs = TREE_CHAIN (exprs);
11937 }
11938 return 0;
11939 }
11940 return 1;
11941}
11942
f181d4ae
MM
11943/* Subroutine of start_function. Ensure that each of the parameter
11944 types (as listed in PARMS) is complete, as is required for a
11945 function definition. */
e92cc029 11946
8d08fdba
MS
11947static void
11948require_complete_types_for_parms (parms)
11949 tree parms;
11950{
07c88314 11951 for (; parms; parms = TREE_CHAIN (parms))
8d08fdba
MS
11952 {
11953 tree type = TREE_TYPE (parms);
07c88314
MM
11954
11955 /* Try to complete the TYPE. */
11956 type = complete_type (type);
11957
11958 if (type == error_mark_node)
11959 continue;
11960
d0f062fb 11961 if (!COMPLETE_TYPE_P (type))
8d08fdba
MS
11962 {
11963 if (DECL_NAME (parms))
8251199e 11964 error ("parameter `%s' has incomplete type",
8d08fdba
MS
11965 IDENTIFIER_POINTER (DECL_NAME (parms)));
11966 else
8251199e 11967 error ("parameter has incomplete type");
8d08fdba
MS
11968 TREE_TYPE (parms) = error_mark_node;
11969 }
42f989ff
JM
11970 else
11971 layout_decl (parms, 0);
8d08fdba
MS
11972 }
11973}
11974
46e8c075 11975/* Returns non-zero if T is a local variable. */
297e73d8 11976
46e8c075
MM
11977int
11978local_variable_p (t)
11979 tree t;
297e73d8 11980{
68642fb6 11981 if ((TREE_CODE (t) == VAR_DECL
297e73d8
MM
11982 /* A VAR_DECL with a context that is a _TYPE is a static data
11983 member. */
11984 && !TYPE_P (CP_DECL_CONTEXT (t))
11985 /* Any other non-local variable must be at namespace scope. */
46e8c075 11986 && !DECL_NAMESPACE_SCOPE_P (t))
297e73d8 11987 || (TREE_CODE (t) == PARM_DECL))
46e8c075 11988 return 1;
297e73d8 11989
46e8c075
MM
11990 return 0;
11991}
11992
11993/* Returns non-zero if T is an automatic local variable or a label.
11994 (These are the declarations that need to be remapped when the code
11995 containing them is duplicated.) */
11996
11997int
11998nonstatic_local_decl_p (t)
11999 tree t;
12000{
12001 return ((local_variable_p (t) && !TREE_STATIC (t))
12002 || TREE_CODE (t) == LABEL_DECL
12003 || TREE_CODE (t) == RESULT_DECL);
12004}
12005
12006/* Like local_variable_p, but suitable for use as a tree-walking
12007 function. */
12008
12009static tree
12010local_variable_p_walkfn (tp, walk_subtrees, data)
12011 tree *tp;
12012 int *walk_subtrees ATTRIBUTE_UNUSED;
12013 void *data ATTRIBUTE_UNUSED;
12014{
68642fb6 12015 return ((local_variable_p (*tp) && !DECL_ARTIFICIAL (*tp))
46e8c075 12016 ? *tp : NULL_TREE);
297e73d8
MM
12017}
12018
12019/* Check that ARG, which is a default-argument expression for a
12020 parameter DECL, is legal. Returns ARG, or ERROR_MARK_NODE, if
12021 something goes wrong. DECL may also be a _TYPE node, rather than a
12022 DECL, if there is no DECL available. */
12023
12024tree
12025check_default_argument (decl, arg)
12026 tree decl;
12027 tree arg;
12028{
12029 tree var;
12030 tree decl_type;
12031
12032 if (TREE_CODE (arg) == DEFAULT_ARG)
12033 /* We get a DEFAULT_ARG when looking at an in-class declaration
12034 with a default argument. Ignore the argument for now; we'll
12035 deal with it after the class is complete. */
12036 return arg;
12037
12038 if (processing_template_decl || uses_template_parms (arg))
12039 /* We don't do anything checking until instantiation-time. Note
12040 that there may be uninstantiated arguments even for an
12041 instantiated function, since default arguments are not
12042 instantiated until they are needed. */
12043 return arg;
12044
12045 if (TYPE_P (decl))
12046 {
12047 decl_type = decl;
12048 decl = NULL_TREE;
12049 }
12050 else
12051 decl_type = TREE_TYPE (decl);
12052
68642fb6 12053 if (arg == error_mark_node
297e73d8
MM
12054 || decl == error_mark_node
12055 || TREE_TYPE (arg) == error_mark_node
12056 || decl_type == error_mark_node)
12057 /* Something already went wrong. There's no need to check
12058 further. */
12059 return error_mark_node;
12060
12061 /* [dcl.fct.default]
68642fb6 12062
297e73d8
MM
12063 A default argument expression is implicitly converted to the
12064 parameter type. */
12065 if (!TREE_TYPE (arg)
12066 || !can_convert_arg (decl_type, TREE_TYPE (arg), arg))
12067 {
12068 if (decl)
68642fb6 12069 cp_error ("default argument for `%#D' has type `%T'",
297e73d8
MM
12070 decl, TREE_TYPE (arg));
12071 else
8614a1d6 12072 cp_error ("default argument for parameter of type `%T' has type `%T'",
297e73d8
MM
12073 decl_type, TREE_TYPE (arg));
12074
12075 return error_mark_node;
12076 }
12077
12078 /* [dcl.fct.default]
12079
12080 Local variables shall not be used in default argument
68642fb6 12081 expressions.
297e73d8
MM
12082
12083 The keyword `this' shall not be used in a default argument of a
12084 member function. */
ee94fce6
MM
12085 var = walk_tree_without_duplicates (&arg, local_variable_p_walkfn,
12086 NULL);
297e73d8
MM
12087 if (var)
12088 {
12089 cp_error ("default argument `%E' uses local variable `%D'",
12090 arg, var);
12091 return error_mark_node;
12092 }
12093
12094 /* All is well. */
12095 return arg;
12096}
12097
8d08fdba
MS
12098/* Decode the list of parameter types for a function type.
12099 Given the list of things declared inside the parens,
12100 return a list of types.
12101
12102 The list we receive can have three kinds of elements:
12103 an IDENTIFIER_NODE for names given without types,
12104 a TREE_LIST node for arguments given as typespecs or names with typespecs,
12105 or void_type_node, to mark the end of an argument list
12106 when additional arguments are not permitted (... was not used).
12107
12108 FUNCDEF_FLAG is nonzero for a function definition, 0 for
12109 a mere declaration. A nonempty identifier-list gets an error message
12110 when FUNCDEF_FLAG is zero.
12111 If FUNCDEF_FLAG is 1, then parameter types must be complete.
12112 If FUNCDEF_FLAG is -1, then parameter types may be incomplete.
12113
12114 If all elements of the input list contain types,
12115 we return a list of the types.
12116 If all elements contain no type (except perhaps a void_type_node
12117 at the end), we return a null list.
12118 If some have types and some do not, it is an error, and we
12119 return a null list.
12120
12121 Also set last_function_parms to either
12122 a list of names (IDENTIFIER_NODEs) or a chain of PARM_DECLs.
12123 A list of names is converted to a chain of PARM_DECLs
12124 by store_parm_decls so that ultimately it is always a chain of decls.
12125
12126 Note that in C++, parameters can take default values. These default
12127 values are in the TREE_PURPOSE field of the TREE_LIST. It is
12128 an error to specify default values which are followed by parameters
12129 that have no default values, or an ELLIPSES. For simplicities sake,
12130 only parameters which are specified with their types can take on
12131 default values. */
12132
12133static tree
12134grokparms (first_parm, funcdef_flag)
12135 tree first_parm;
12136 int funcdef_flag;
12137{
12138 tree result = NULL_TREE;
12139 tree decls = NULL_TREE;
12140
12141 if (first_parm != NULL_TREE
12142 && TREE_CODE (TREE_VALUE (first_parm)) == IDENTIFIER_NODE)
12143 {
12144 if (! funcdef_flag)
8251199e 12145 pedwarn ("parameter names (without types) in function declaration");
8d08fdba
MS
12146 last_function_parms = first_parm;
12147 return NULL_TREE;
12148 }
12149 else if (first_parm != NULL_TREE
12150 && TREE_CODE (TREE_VALUE (first_parm)) != TREE_LIST
a1774733 12151 && TREE_CODE (TREE_VALUE (first_parm)) != VOID_TYPE)
8d08fdba
MS
12152 my_friendly_abort (145);
12153 else
12154 {
12155 /* Types were specified. This is a list of declarators
12156 each represented as a TREE_LIST node. */
12157 register tree parm, chain;
5566b478 12158 int any_init = 0, any_error = 0;
8d08fdba
MS
12159
12160 if (first_parm != NULL_TREE)
12161 {
12162 tree last_result = NULL_TREE;
12163 tree last_decl = NULL_TREE;
12164
12165 for (parm = first_parm; parm != NULL_TREE; parm = chain)
12166 {
a703fb38 12167 tree type = NULL_TREE, list_node = parm;
8d08fdba
MS
12168 register tree decl = TREE_VALUE (parm);
12169 tree init = TREE_PURPOSE (parm);
12170
12171 chain = TREE_CHAIN (parm);
12172 /* @@ weak defense against parse errors. */
68642fb6 12173 if (TREE_CODE (decl) != VOID_TYPE
a1774733 12174 && TREE_CODE (decl) != TREE_LIST)
8d08fdba
MS
12175 {
12176 /* Give various messages as the need arises. */
12177 if (TREE_CODE (decl) == STRING_CST)
8251199e 12178 cp_error ("invalid string constant `%E'", decl);
8d08fdba 12179 else if (TREE_CODE (decl) == INTEGER_CST)
8251199e 12180 error ("invalid integer constant in parameter list, did you forget to give parameter name?");
8d08fdba
MS
12181 continue;
12182 }
12183
a1774733 12184 if (TREE_CODE (decl) != VOID_TYPE)
8d08fdba 12185 {
8d08fdba
MS
12186 decl = grokdeclarator (TREE_VALUE (decl),
12187 TREE_PURPOSE (decl),
f30432d7 12188 PARM, init != NULL_TREE,
c11b6f21 12189 NULL_TREE);
3bfdc719 12190 if (! decl || TREE_TYPE (decl) == error_mark_node)
8d08fdba 12191 continue;
01240200
MM
12192
12193 /* Top-level qualifiers on the parameters are
12194 ignored for function types. */
12195 type = TYPE_MAIN_VARIANT (TREE_TYPE (decl));
12196
a1774733 12197 if (TREE_CODE (type) == VOID_TYPE)
8d08fdba
MS
12198 decl = void_type_node;
12199 else if (TREE_CODE (type) == METHOD_TYPE)
12200 {
12201 if (DECL_NAME (decl))
fc378698 12202 /* Cannot use the decl here because
8d08fdba 12203 we don't have DECL_CONTEXT set up yet. */
8251199e 12204 cp_error ("parameter `%D' invalidly declared method type",
fc378698 12205 DECL_NAME (decl));
8d08fdba 12206 else
8251199e 12207 error ("parameter invalidly declared method type");
8d08fdba
MS
12208 type = build_pointer_type (type);
12209 TREE_TYPE (decl) = type;
12210 }
12211 else if (TREE_CODE (type) == OFFSET_TYPE)
12212 {
12213 if (DECL_NAME (decl))
8251199e 12214 cp_error ("parameter `%D' invalidly declared offset type",
fc378698 12215 DECL_NAME (decl));
8d08fdba 12216 else
8251199e 12217 error ("parameter invalidly declared offset type");
8d08fdba
MS
12218 type = build_pointer_type (type);
12219 TREE_TYPE (decl) = type;
12220 }
a7a64a77
MM
12221 else if (abstract_virtuals_error (decl, type))
12222 any_error = 1; /* Seems like a good idea. */
482b883f
JM
12223 else if (POINTER_TYPE_P (type))
12224 {
12225 tree t = type;
12226 while (POINTER_TYPE_P (t)
12227 || (TREE_CODE (t) == ARRAY_TYPE
12228 && TYPE_DOMAIN (t) != NULL_TREE))
12229 t = TREE_TYPE (t);
12230 if (TREE_CODE (t) == ARRAY_TYPE)
57af8358
MM
12231 cp_error ("parameter type `%T' includes %s to array of unknown bound",
12232 type,
12233 TYPE_PTR_P (type) ? "pointer" : "reference");
482b883f 12234 }
8d08fdba
MS
12235 }
12236
a1774733 12237 if (TREE_CODE (decl) == VOID_TYPE)
8d08fdba
MS
12238 {
12239 if (result == NULL_TREE)
12240 {
12241 result = void_list_node;
12242 last_result = result;
12243 }
12244 else
12245 {
12246 TREE_CHAIN (last_result) = void_list_node;
12247 last_result = void_list_node;
12248 }
8d08fdba
MS
12249 if (chain
12250 && (chain != void_list_node || TREE_CHAIN (chain)))
8251199e 12251 error ("`void' in parameter list must be entire list");
8d08fdba
MS
12252 break;
12253 }
12254
12255 /* Since there is a prototype, args are passed in their own types. */
12256 DECL_ARG_TYPE (decl) = TREE_TYPE (decl);
fa56377d
JJ
12257 if (PROMOTE_PROTOTYPES
12258 && (TREE_CODE (type) == INTEGER_TYPE
12259 || TREE_CODE (type) == ENUMERAL_TYPE)
8d08fdba
MS
12260 && TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node))
12261 DECL_ARG_TYPE (decl) = integer_type_node;
297e73d8 12262 if (!any_error && init)
8d08fdba 12263 {
297e73d8
MM
12264 any_init++;
12265 init = check_default_argument (decl, init);
8d08fdba
MS
12266 }
12267 else
12268 init = NULL_TREE;
12269
12270 if (decls == NULL_TREE)
12271 {
12272 decls = decl;
12273 last_decl = decls;
12274 }
12275 else
12276 {
12277 TREE_CHAIN (last_decl) = decl;
12278 last_decl = decl;
12279 }
5868eb4e 12280 list_node = tree_cons (init, type, NULL_TREE);
8d08fdba
MS
12281 if (result == NULL_TREE)
12282 {
12283 result = list_node;
12284 last_result = result;
12285 }
12286 else
12287 {
12288 TREE_CHAIN (last_result) = list_node;
12289 last_result = list_node;
12290 }
12291 }
12292 if (last_result)
12293 TREE_CHAIN (last_result) = NULL_TREE;
12294 /* If there are no parameters, and the function does not end
12295 with `...', then last_decl will be NULL_TREE. */
12296 if (last_decl != NULL_TREE)
12297 TREE_CHAIN (last_decl) = NULL_TREE;
12298 }
12299 }
12300
12301 last_function_parms = decls;
12302
8d08fdba
MS
12303 return result;
12304}
42976354
BK
12305
12306/* Called from the parser to update an element of TYPE_ARG_TYPES for some
12307 FUNCTION_TYPE with the newly parsed version of its default argument, which
12308 was previously digested as text. See snarf_defarg et al in lex.c. */
12309
12310void
12311replace_defarg (arg, init)
12312 tree arg, init;
12313{
aa5f3bad 12314 if (! processing_template_decl
42976354 12315 && ! can_convert_arg (TREE_VALUE (arg), TREE_TYPE (init), init))
8251199e 12316 cp_pedwarn ("invalid type `%T' for default argument to `%T'",
42976354
BK
12317 TREE_TYPE (init), TREE_VALUE (arg));
12318 TREE_PURPOSE (arg) = init;
12319}
8d08fdba 12320\f
4f1c5b7d
MM
12321/* D is a constructor or overloaded `operator='. Returns non-zero if
12322 D's arguments allow it to be a copy constructor, or copy assignment
12323 operator. */
12324
c11b6f21
MS
12325int
12326copy_args_p (d)
12327 tree d;
12328{
4f1c5b7d
MM
12329 tree t;
12330
12331 if (!DECL_FUNCTION_MEMBER_P (d))
12332 return 0;
12333
12334 t = FUNCTION_ARG_CHAIN (d);
454fa7a7 12335 if (DECL_CONSTRUCTOR_P (d) && DECL_HAS_IN_CHARGE_PARM_P (d))
67437d5b 12336 t = TREE_CHAIN (t);
c11b6f21
MS
12337 if (t && TREE_CODE (TREE_VALUE (t)) == REFERENCE_TYPE
12338 && (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_VALUE (t)))
4f1c5b7d 12339 == DECL_CONTEXT (d))
c11b6f21
MS
12340 && (TREE_CHAIN (t) == NULL_TREE
12341 || TREE_CHAIN (t) == void_list_node
12342 || TREE_PURPOSE (TREE_CHAIN (t))))
12343 return 1;
12344 return 0;
12345}
12346
8d08fdba
MS
12347/* These memoizing functions keep track of special properties which
12348 a class may have. `grok_ctor_properties' notices whether a class
12349 has a constructor of the form X(X&), and also complains
12350 if the class has a constructor of the form X(X).
12351 `grok_op_properties' takes notice of the various forms of
12352 operator= which are defined, as well as what sorts of type conversion
12353 may apply. Both functions take a FUNCTION_DECL as an argument. */
e92cc029 12354
a0a33927 12355int
8d08fdba
MS
12356grok_ctor_properties (ctype, decl)
12357 tree ctype, decl;
12358{
12359 tree parmtypes = FUNCTION_ARG_CHAIN (decl);
12360 tree parmtype = parmtypes ? TREE_VALUE (parmtypes) : void_type_node;
12361
12362 /* When a type has virtual baseclasses, a magical first int argument is
12363 added to any ctor so we can tell if the class has been initialized
12364 yet. This could screw things up in this function, so we deliberately
12365 ignore the leading int if we're in that situation. */
454fa7a7 12366 if (DECL_HAS_IN_CHARGE_PARM_P (decl))
8d08fdba 12367 {
711734a9
JM
12368 my_friendly_assert (parmtypes
12369 && TREE_VALUE (parmtypes) == integer_type_node,
12370 980529);
8d08fdba
MS
12371 parmtypes = TREE_CHAIN (parmtypes);
12372 parmtype = TREE_VALUE (parmtypes);
12373 }
12374
f181d4ae
MM
12375 /* [class.copy]
12376
12377 A non-template constructor for class X is a copy constructor if
12378 its first parameter is of type X&, const X&, volatile X& or const
12379 volatile X&, and either there are no other parameters or else all
12380 other parameters have default arguments. */
8d08fdba 12381 if (TREE_CODE (parmtype) == REFERENCE_TYPE
0b41abe6
JM
12382 && TYPE_MAIN_VARIANT (TREE_TYPE (parmtype)) == ctype
12383 && (TREE_CHAIN (parmtypes) == NULL_TREE
8d08fdba 12384 || TREE_CHAIN (parmtypes) == void_list_node
f181d4ae
MM
12385 || TREE_PURPOSE (TREE_CHAIN (parmtypes)))
12386 && !(DECL_TEMPLATE_INSTANTIATION (decl)
12387 && is_member_template (DECL_TI_TEMPLATE (decl))))
0b41abe6
JM
12388 {
12389 TYPE_HAS_INIT_REF (ctype) = 1;
91063b51 12390 if (CP_TYPE_CONST_P (TREE_TYPE (parmtype)))
0b41abe6 12391 TYPE_HAS_CONST_INIT_REF (ctype) = 1;
8d08fdba 12392 }
f181d4ae
MM
12393 /* [class.copy]
12394
12395 A declaration of a constructor for a class X is ill-formed if its
12396 first parameter is of type (optionally cv-qualified) X and either
12397 there are no other parameters or else all other parameters have
68642fb6 12398 default arguments.
f181d4ae
MM
12399
12400 We *don't* complain about member template instantiations that
12401 have this form, though; they can occur as we try to decide what
12402 constructor to use during overload resolution. Since overload
12403 resolution will never prefer such a constructor to the
12404 non-template copy constructor (which is either explicitly or
12405 implicitly defined), there's no need to worry about their
12406 existence. Theoretically, they should never even be
12407 instantiated, but that's hard to forestall. */
0b41abe6 12408 else if (TYPE_MAIN_VARIANT (parmtype) == ctype
59e76fc6
JM
12409 && (TREE_CHAIN (parmtypes) == NULL_TREE
12410 || TREE_CHAIN (parmtypes) == void_list_node
f181d4ae
MM
12411 || TREE_PURPOSE (TREE_CHAIN (parmtypes)))
12412 && !(DECL_TEMPLATE_INSTANTIATION (decl)
12413 && is_member_template (DECL_TI_TEMPLATE (decl))))
8d08fdba 12414 {
8251199e 12415 cp_error ("invalid constructor; you probably meant `%T (const %T&)'",
0b41abe6
JM
12416 ctype, ctype);
12417 SET_IDENTIFIER_ERROR_LOCUS (DECL_NAME (decl), ctype);
12418 return 0;
8d08fdba
MS
12419 }
12420 else if (TREE_CODE (parmtype) == VOID_TYPE
12421 || TREE_PURPOSE (parmtypes) != NULL_TREE)
12422 TYPE_HAS_DEFAULT_CONSTRUCTOR (ctype) = 1;
a0a33927
MS
12423
12424 return 1;
8d08fdba
MS
12425}
12426
596ea4e5 12427/* An operator with this code is unary, but can also be binary. */
e92cc029 12428
a28e3c7f 12429static int
596ea4e5
AS
12430ambi_op_p (code)
12431 enum tree_code code;
8d08fdba 12432{
596ea4e5
AS
12433 return (code == INDIRECT_REF
12434 || code == ADDR_EXPR
12435 || code == CONVERT_EXPR
12436 || code == NEGATE_EXPR
12437 || code == PREINCREMENT_EXPR
12438 || code == PREDECREMENT_EXPR);
8d08fdba
MS
12439}
12440
12441/* An operator with this name can only be unary. */
e92cc029 12442
a28e3c7f 12443static int
596ea4e5
AS
12444unary_op_p (code)
12445 enum tree_code code;
8d08fdba 12446{
596ea4e5
AS
12447 return (code == TRUTH_NOT_EXPR
12448 || code == BIT_NOT_EXPR
12449 || code == COMPONENT_REF
12450 || code == TYPE_EXPR);
8d08fdba
MS
12451}
12452
12453/* Do a little sanity-checking on how they declared their operator. */
e92cc029 12454
5566b478 12455void
8d08fdba
MS
12456grok_op_properties (decl, virtualp, friendp)
12457 tree decl;
12458 int virtualp, friendp;
12459{
12460 tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
596ea4e5 12461 tree argtype;
8d08fdba
MS
12462 int methodp = (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE);
12463 tree name = DECL_NAME (decl);
596ea4e5
AS
12464 enum tree_code operator_code;
12465 int arity;
12466
12467 /* Count the number of arguments. */
12468 for (argtype = argtypes, arity = 0;
12469 argtype && argtype != void_list_node;
12470 argtype = TREE_CHAIN (argtype))
12471 ++arity;
8d08fdba 12472
a28e3c7f
MS
12473 if (current_class_type == NULL_TREE)
12474 friendp = 1;
8d08fdba 12475
596ea4e5
AS
12476 if (DECL_CONV_FN_P (decl))
12477 operator_code = TYPE_EXPR;
12478 else
12479 do
12480 {
669ec2b4
JM
12481#define DEF_OPERATOR(NAME, CODE, NEW_MANGLING, OLD_MANGING, ARITY, ASSN_P) \
12482 if (ansi_opname (CODE) == name) \
12483 { \
12484 operator_code = CODE; \
12485 break; \
12486 } \
12487 else if (ansi_assopname (CODE) == name) \
12488 { \
12489 operator_code = CODE; \
12490 DECL_ASSIGNMENT_OPERATOR_P (decl) = 1; \
12491 break; \
596ea4e5
AS
12492 }
12493
12494#include "operators.def"
12495#undef DEF_OPERATOR
12496
12497 my_friendly_abort (20000527);
12498 }
12499 while (0);
12500 my_friendly_assert (operator_code != LAST_CPLUS_TREE_CODE, 20000526);
12501 SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
12502
a28e3c7f
MS
12503 if (! friendp)
12504 {
596ea4e5
AS
12505 switch (operator_code)
12506 {
12507 case CALL_EXPR:
12508 TYPE_OVERLOADS_CALL_EXPR (current_class_type) = 1;
12509 break;
12510
12511 case ARRAY_REF:
12512 TYPE_OVERLOADS_ARRAY_REF (current_class_type) = 1;
12513 break;
f181d4ae 12514
596ea4e5
AS
12515 case COMPONENT_REF:
12516 case MEMBER_REF:
12517 TYPE_OVERLOADS_ARROW (current_class_type) = 1;
12518 break;
12519
12520 case NEW_EXPR:
12521 TYPE_HAS_NEW_OPERATOR (current_class_type) = 1;
12522 break;
12523
12524 case DELETE_EXPR:
12525 TYPE_GETS_DELETE (current_class_type) |= 1;
12526 break;
12527
12528 case VEC_NEW_EXPR:
12529 TYPE_HAS_ARRAY_NEW_OPERATOR (current_class_type) = 1;
12530 break;
12531
12532 case VEC_DELETE_EXPR:
12533 TYPE_GETS_DELETE (current_class_type) |= 2;
12534 break;
12535
12536 default:
12537 break;
12538 }
12539 }
12540
12541 if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR)
8d08fdba 12542 {
8d08fdba
MS
12543 /* When the compiler encounters the definition of A::operator new, it
12544 doesn't look at the class declaration to find out if it's static. */
a28e3c7f 12545 if (methodp)
3afb32a4 12546 revert_static_member_fn (decl);
68642fb6 12547
8d08fdba
MS
12548 /* Take care of function decl if we had syntax errors. */
12549 if (argtypes == NULL_TREE)
beb53fb8
JM
12550 TREE_TYPE (decl)
12551 = build_function_type (ptr_type_node,
12552 hash_tree_chain (integer_type_node,
12553 void_list_node));
8d08fdba 12554 else
a28e3c7f 12555 TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
8d08fdba 12556 }
596ea4e5 12557 else if (operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
8d08fdba 12558 {
a28e3c7f 12559 if (methodp)
3afb32a4 12560 revert_static_member_fn (decl);
68642fb6 12561
8d08fdba 12562 if (argtypes == NULL_TREE)
beb53fb8
JM
12563 TREE_TYPE (decl)
12564 = build_function_type (void_type_node,
12565 hash_tree_chain (ptr_type_node,
12566 void_list_node));
8d08fdba 12567 else
834c6dff 12568 TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
8d08fdba 12569 }
8d08fdba
MS
12570 else
12571 {
12572 /* An operator function must either be a non-static member function
12573 or have at least one parameter of a class, a reference to a class,
12574 an enumeration, or a reference to an enumeration. 13.4.0.6 */
700f8a87 12575 if (! methodp || DECL_STATIC_FUNCTION_P (decl))
8d08fdba 12576 {
596ea4e5
AS
12577 if (operator_code == TYPE_EXPR
12578 || operator_code == CALL_EXPR
12579 || operator_code == COMPONENT_REF
12580 || operator_code == ARRAY_REF
12581 || operator_code == NOP_EXPR)
8251199e 12582 cp_error ("`%D' must be a nonstatic member function", decl);
8d08fdba
MS
12583 else
12584 {
12585 tree p = argtypes;
12586
700f8a87 12587 if (DECL_STATIC_FUNCTION_P (decl))
8251199e 12588 cp_error ("`%D' must be either a non-static member function or a non-member function", decl);
700f8a87 12589
8d08fdba 12590 if (p)
a1774733 12591 for (; TREE_CODE (TREE_VALUE (p)) != VOID_TYPE ; p = TREE_CHAIN (p))
8d08fdba
MS
12592 {
12593 tree arg = TREE_VALUE (p);
12594 if (TREE_CODE (arg) == REFERENCE_TYPE)
12595 arg = TREE_TYPE (arg);
12596
12597 /* This lets bad template code slip through. */
12598 if (IS_AGGR_TYPE (arg)
12599 || TREE_CODE (arg) == ENUMERAL_TYPE
73b0fce8 12600 || TREE_CODE (arg) == TEMPLATE_TYPE_PARM
a1281f45 12601 || TREE_CODE (arg) == BOUND_TEMPLATE_TEMPLATE_PARM)
8d08fdba
MS
12602 goto foundaggr;
12603 }
8251199e
JM
12604 cp_error
12605 ("`%D' must have an argument of class or enumerated type",
8d08fdba
MS
12606 decl);
12607 foundaggr:
12608 ;
12609 }
12610 }
68642fb6 12611
596ea4e5 12612 if (operator_code == CALL_EXPR)
2c73f9f5 12613 return; /* No restrictions on args. */
8d08fdba 12614
9a3b49ac 12615 if (IDENTIFIER_TYPENAME_P (name) && ! DECL_TEMPLATE_INFO (decl))
a0a33927
MS
12616 {
12617 tree t = TREE_TYPE (name);
17708e90 12618 if (! friendp)
a0a33927
MS
12619 {
12620 int ref = (TREE_CODE (t) == REFERENCE_TYPE);
d8e178a0 12621 const char *what = 0;
17708e90 12622
a0a33927
MS
12623 if (ref)
12624 t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
12625
17708e90
NS
12626 if (TREE_CODE (t) == VOID_TYPE)
12627 what = "void";
12628 else if (t == current_class_type)
a0a33927 12629 what = "the same type";
9a3b49ac 12630 /* Don't force t to be complete here. */
a0a33927 12631 else if (IS_AGGR_TYPE (t)
d0f062fb 12632 && COMPLETE_TYPE_P (t)
a0a33927
MS
12633 && DERIVED_FROM_P (t, current_class_type))
12634 what = "a base class";
12635
12636 if (what)
8251199e 12637 warning ("conversion to %s%s will never use a type conversion operator",
a0a33927
MS
12638 ref ? "a reference to " : "", what);
12639 }
12640 }
12641
596ea4e5
AS
12642 if (DECL_ASSIGNMENT_OPERATOR_P (decl)
12643 && operator_code == NOP_EXPR)
8d08fdba
MS
12644 {
12645 tree parmtype;
12646
596ea4e5 12647 if (arity != 2 && methodp)
8d08fdba 12648 {
8251199e 12649 cp_error ("`%D' must take exactly one argument", decl);
8d08fdba
MS
12650 return;
12651 }
12652 parmtype = TREE_VALUE (TREE_CHAIN (argtypes));
12653
596ea4e5
AS
12654 /* [class.copy]
12655
12656 A user-declared copy assignment operator X::operator= is
12657 a non-static non-template member function of class X with
12658 exactly one parameter of type X, X&, const X&, volatile
12659 X& or const volatile X&. */
f0e01782 12660 if (copy_assignment_arg_p (parmtype, virtualp)
596ea4e5
AS
12661 && !(DECL_TEMPLATE_INSTANTIATION (decl)
12662 && is_member_template (DECL_TI_TEMPLATE (decl)))
a28e3c7f 12663 && ! friendp)
8d08fdba
MS
12664 {
12665 TYPE_HAS_ASSIGN_REF (current_class_type) = 1;
f0e01782 12666 if (TREE_CODE (parmtype) != REFERENCE_TYPE
91063b51 12667 || CP_TYPE_CONST_P (TREE_TYPE (parmtype)))
8d08fdba
MS
12668 TYPE_HAS_CONST_ASSIGN_REF (current_class_type) = 1;
12669 }
12670 }
596ea4e5 12671 else if (operator_code == COND_EXPR)
8d08fdba
MS
12672 {
12673 /* 13.4.0.3 */
cb9a3ff8 12674 cp_error ("ISO C++ prohibits overloading operator ?:");
68642fb6 12675 }
596ea4e5 12676 else if (ambi_op_p (operator_code))
8d08fdba 12677 {
596ea4e5
AS
12678 if (arity == 1)
12679 /* We pick the one-argument operator codes by default, so
12680 we don't have to change anything. */
12681 ;
12682 else if (arity == 2)
8d08fdba 12683 {
596ea4e5
AS
12684 /* If we thought this was a unary operator, we now know
12685 it to be a binary operator. */
12686 switch (operator_code)
12687 {
12688 case INDIRECT_REF:
12689 operator_code = MULT_EXPR;
12690 break;
12691
12692 case ADDR_EXPR:
12693 operator_code = BIT_AND_EXPR;
12694 break;
12695
12696 case CONVERT_EXPR:
12697 operator_code = PLUS_EXPR;
12698 break;
12699
12700 case NEGATE_EXPR:
12701 operator_code = MINUS_EXPR;
12702 break;
12703
12704 case PREINCREMENT_EXPR:
12705 operator_code = POSTINCREMENT_EXPR;
12706 break;
12707
12708 case PREDECREMENT_EXPR:
655dc6ee 12709 operator_code = POSTDECREMENT_EXPR;
596ea4e5
AS
12710 break;
12711
12712 default:
12713 my_friendly_abort (20000527);
12714 }
12715
12716 SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
12717
12718 if ((operator_code == POSTINCREMENT_EXPR
12719 || operator_code == POSTDECREMENT_EXPR)
5156628f 12720 && ! processing_template_decl
007e5fea 12721 && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)), integer_type_node))
8d08fdba
MS
12722 {
12723 if (methodp)
8251199e 12724 cp_error ("postfix `%D' must take `int' as its argument",
8d08fdba
MS
12725 decl);
12726 else
8251199e
JM
12727 cp_error
12728 ("postfix `%D' must take `int' as its second argument",
12729 decl);
8d08fdba
MS
12730 }
12731 }
12732 else
12733 {
12734 if (methodp)
8251199e 12735 cp_error ("`%D' must take either zero or one argument", decl);
8d08fdba 12736 else
8251199e 12737 cp_error ("`%D' must take either one or two arguments", decl);
8d08fdba 12738 }
824b9a4c
MS
12739
12740 /* More Effective C++ rule 6. */
eb448459 12741 if (warn_ecpp
596ea4e5
AS
12742 && (operator_code == POSTINCREMENT_EXPR
12743 || operator_code == POSTDECREMENT_EXPR
12744 || operator_code == PREINCREMENT_EXPR
12745 || operator_code == PREDECREMENT_EXPR))
824b9a4c
MS
12746 {
12747 tree arg = TREE_VALUE (argtypes);
12748 tree ret = TREE_TYPE (TREE_TYPE (decl));
12749 if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
12750 arg = TREE_TYPE (arg);
12751 arg = TYPE_MAIN_VARIANT (arg);
596ea4e5
AS
12752 if (operator_code == PREINCREMENT_EXPR
12753 || operator_code == PREDECREMENT_EXPR)
824b9a4c
MS
12754 {
12755 if (TREE_CODE (ret) != REFERENCE_TYPE
3bfdc719
MM
12756 || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)),
12757 arg))
8251199e 12758 cp_warning ("prefix `%D' should return `%T'", decl,
824b9a4c
MS
12759 build_reference_type (arg));
12760 }
12761 else
12762 {
3bfdc719 12763 if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
8251199e 12764 cp_warning ("postfix `%D' should return `%T'", decl, arg);
824b9a4c
MS
12765 }
12766 }
8d08fdba 12767 }
596ea4e5 12768 else if (unary_op_p (operator_code))
8d08fdba 12769 {
596ea4e5 12770 if (arity != 1)
8d08fdba
MS
12771 {
12772 if (methodp)
8251199e 12773 cp_error ("`%D' must take `void'", decl);
8d08fdba 12774 else
8251199e 12775 cp_error ("`%D' must take exactly one argument", decl);
8d08fdba
MS
12776 }
12777 }
596ea4e5 12778 else /* if (binary_op_p (operator_code)) */
8d08fdba 12779 {
596ea4e5 12780 if (arity != 2)
8d08fdba
MS
12781 {
12782 if (methodp)
8251199e 12783 cp_error ("`%D' must take exactly one argument", decl);
8d08fdba 12784 else
8251199e 12785 cp_error ("`%D' must take exactly two arguments", decl);
8d08fdba 12786 }
824b9a4c
MS
12787
12788 /* More Effective C++ rule 7. */
eb448459 12789 if (warn_ecpp
596ea4e5
AS
12790 && (operator_code == TRUTH_ANDIF_EXPR
12791 || operator_code == TRUTH_ORIF_EXPR
12792 || operator_code == COMPOUND_EXPR))
8251199e 12793 cp_warning ("user-defined `%D' always evaluates both arguments",
824b9a4c
MS
12794 decl);
12795 }
12796
12797 /* Effective C++ rule 23. */
eb448459 12798 if (warn_ecpp
596ea4e5
AS
12799 && arity == 2
12800 && (operator_code == PLUS_EXPR
12801 || operator_code == MINUS_EXPR
12802 || operator_code == TRUNC_DIV_EXPR
12803 || operator_code == MULT_EXPR)
824b9a4c 12804 && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
8251199e 12805 cp_warning ("`%D' should return by value", decl);
8d08fdba
MS
12806
12807 /* 13.4.0.8 */
34332678
CT
12808 for (; argtypes && argtypes != void_list_node;
12809 argtypes = TREE_CHAIN (argtypes))
12810 if (TREE_PURPOSE (argtypes))
12811 {
12812 TREE_PURPOSE (argtypes) = NULL_TREE;
596ea4e5
AS
12813 if (operator_code == POSTINCREMENT_EXPR
12814 || operator_code == POSTDECREMENT_EXPR)
34332678
CT
12815 {
12816 if (pedantic)
12817 cp_pedwarn ("`%D' cannot have default arguments", decl);
12818 }
12819 else
12820 cp_error ("`%D' cannot have default arguments", decl);
12821 }
12822
8d08fdba
MS
12823 }
12824}
12825\f
d8e178a0 12826static const char *
094fe153
JM
12827tag_name (code)
12828 enum tag_types code;
12829{
12830 switch (code)
12831 {
12832 case record_type:
12833 return "struct";
12834 case class_type:
12835 return "class";
12836 case union_type:
12837 return "union ";
12838 case enum_type:
12839 return "enum";
094fe153
JM
12840 default:
12841 my_friendly_abort (981122);
12842 }
12843}
12844
8d08fdba
MS
12845/* Get the struct, enum or union (CODE says which) with tag NAME.
12846 Define the tag as a forward-reference if it is not defined.
12847
12848 C++: If a class derivation is given, process it here, and report
12849 an error if multiple derivation declarations are not identical.
12850
12851 If this is a definition, come in through xref_tag and only look in
12852 the current frame for the name (since C++ allows new names in any
12853 scope.) */
12854
8d08fdba 12855tree
ca107ded 12856xref_tag (code_type_node, name, globalize)
8d08fdba 12857 tree code_type_node;
ca107ded 12858 tree name;
8d08fdba
MS
12859 int globalize;
12860{
12861 enum tag_types tag_code;
12862 enum tree_code code;
8d08fdba 12863 register tree ref, t;
8f032717 12864 struct binding_level *b = current_binding_level;
a80e4195 12865 int got_type = 0;
dc8263bc 12866 tree attributes = NULL_TREE;
25aab5d0 12867 tree context = NULL_TREE;
dc8263bc
JM
12868
12869 /* If we are called from the parser, code_type_node will sometimes be a
12870 TREE_LIST. This indicates that the user wrote
12871 "class __attribute__ ((foo)) bar". Extract the attributes so we can
12872 use them later. */
12873 if (TREE_CODE (code_type_node) == TREE_LIST)
12874 {
12875 attributes = TREE_PURPOSE (code_type_node);
12876 code_type_node = TREE_VALUE (code_type_node);
12877 }
8d08fdba 12878
665f2503 12879 tag_code = (enum tag_types) tree_low_cst (code_type_node, 1);
8d08fdba
MS
12880 switch (tag_code)
12881 {
12882 case record_type:
12883 case class_type:
8d08fdba 12884 code = RECORD_TYPE;
8d08fdba
MS
12885 break;
12886 case union_type:
12887 code = UNION_TYPE;
8d08fdba
MS
12888 break;
12889 case enum_type:
12890 code = ENUMERAL_TYPE;
12891 break;
12892 default:
12893 my_friendly_abort (18);
12894 }
12895
12896 /* If a cross reference is requested, look up the type
12897 already defined for this tag and return it. */
2f939d94 12898 if (TYPE_P (name))
be99da77
MS
12899 {
12900 t = name;
a80e4195
MS
12901 name = TYPE_IDENTIFIER (t);
12902 got_type = 1;
be99da77
MS
12903 }
12904 else
12905 t = IDENTIFIER_TYPE_VALUE (name);
61a127b3 12906
f2ae0c45
JM
12907 /* Warn about 'friend struct Inherited;' doing the wrong thing. */
12908 if (t && globalize && TREE_CODE (t) == TYPENAME_TYPE)
12909 {
12910 static int explained;
12911
12912 cp_warning ("`%s %T' declares a new type at namespace scope;\n\
12913to refer to the inherited type, say `%s %T::%T'%s",
12914 tag_name (tag_code), name, tag_name (tag_code),
12915 constructor_name (current_class_type), TYPE_IDENTIFIER (t),
12916 (!explained ? "\n\
12917(names from dependent base classes are not visible to unqualified name lookup)"
12918 : ""));
12919
12920 explained = 1;
12921 }
12922
73b0fce8 12923 if (t && TREE_CODE (t) != code && TREE_CODE (t) != TEMPLATE_TYPE_PARM
a1281f45 12924 && TREE_CODE (t) != BOUND_TEMPLATE_TEMPLATE_PARM)
a0a33927
MS
12925 t = NULL_TREE;
12926
8ccc31eb 12927 if (! globalize)
8d08fdba 12928 {
f3400fe2
JM
12929 /* If we know we are defining this tag, only look it up in
12930 this scope and don't try to find it as a type. */
12931 ref = lookup_tag (code, name, b, 1);
8d08fdba
MS
12932 }
12933 else
12934 {
25aab5d0 12935 if (t)
36a117a5 12936 {
25aab5d0
MM
12937 /* [dcl.type.elab] If the identifier resolves to a
12938 typedef-name or a template type-parameter, the
12939 elaborated-type-specifier is ill-formed. */
12940 if (t != TYPE_MAIN_VARIANT (t)
12941 || (CLASS_TYPE_P (t) && TYPE_WAS_ANONYMOUS (t)))
12942 cp_pedwarn ("using typedef-name `%D' after `%s'",
12943 TYPE_NAME (t), tag_name (tag_code));
12944 else if (TREE_CODE (t) == TEMPLATE_TYPE_PARM)
12945 cp_error ("using template type parameter `%T' after `%s'",
12946 t, tag_name (tag_code));
12947
12948 ref = t;
12949 }
12950 else
12951 ref = lookup_tag (code, name, b, 0);
68642fb6 12952
25aab5d0
MM
12953 if (! ref)
12954 {
12955 /* Try finding it as a type declaration. If that wins,
68642fb6 12956 use it. */
25aab5d0
MM
12957 ref = lookup_name (name, 1);
12958
12959 if (ref != NULL_TREE
12960 && processing_template_decl
12961 && DECL_CLASS_TEMPLATE_P (ref)
12962 && template_class_depth (current_class_type) == 0)
12963 /* Since GLOBALIZE is true, we're declaring a global
6757edfe 12964 template, so we want this type. */
17aec3eb 12965 ref = DECL_TEMPLATE_RESULT (ref);
6757edfe 12966
25aab5d0
MM
12967 if (ref && TREE_CODE (ref) == TYPE_DECL
12968 && TREE_CODE (TREE_TYPE (ref)) == code)
12969 ref = TREE_TYPE (ref);
12970 else
12971 ref = NULL_TREE;
12972 }
12973
68642fb6
UD
12974 if (ref && current_class_type
12975 && template_class_depth (current_class_type)
12976 && PROCESSING_REAL_TEMPLATE_DECL_P ())
25aab5d0
MM
12977 {
12978 /* Since GLOBALIZE is non-zero, we are not looking at a
12979 definition of this tag. Since, in addition, we are currently
12980 processing a (member) template declaration of a template
12981 class, we must be very careful; consider:
12982
12983 template <class X>
12984 struct S1
12985
12986 template <class U>
12987 struct S2
12988 { template <class V>
12989 friend struct S1; };
12990
12991 Here, the S2::S1 declaration should not be confused with the
12992 outer declaration. In particular, the inner version should
12993 have a template parameter of level 2, not level 1. This
12994 would be particularly important if the member declaration
12995 were instead:
12996
12997 template <class V = U> friend struct S1;
12998
12999 say, when we should tsubst into `U' when instantiating
13000 S2. On the other hand, when presented with:
13001
13002 template <class T>
13003 struct S1 {
13004 template <class U>
13005 struct S2 {};
13006 template <class U>
13007 friend struct S2;
13008 };
13009
13010 we must find the inner binding eventually. We
13011 accomplish this by making sure that the new type we
13012 create to represent this declaration has the right
13013 TYPE_CONTEXT. */
13014 context = TYPE_CONTEXT (ref);
13015 ref = NULL_TREE;
8d08fdba
MS
13016 }
13017 }
13018
8d08fdba
MS
13019 if (! ref)
13020 {
13021 /* If no such tag is yet defined, create a forward-reference node
13022 and record it as the "definition".
13023 When a real declaration of this type is found,
13024 the forward-reference will be altered into a real type. */
8d08fdba
MS
13025 if (code == ENUMERAL_TYPE)
13026 {
8251199e 13027 cp_error ("use of enum `%#D' without previous declaration", name);
fc378698 13028
8d08fdba
MS
13029 ref = make_node (ENUMERAL_TYPE);
13030
13031 /* Give the type a default layout like unsigned int
13032 to avoid crashing if it does not get defined. */
13033 TYPE_MODE (ref) = TYPE_MODE (unsigned_type_node);
13034 TYPE_ALIGN (ref) = TYPE_ALIGN (unsigned_type_node);
11cf4d18 13035 TYPE_USER_ALIGN (ref) = 0;
8d08fdba
MS
13036 TREE_UNSIGNED (ref) = 1;
13037 TYPE_PRECISION (ref) = TYPE_PRECISION (unsigned_type_node);
13038 TYPE_MIN_VALUE (ref) = TYPE_MIN_VALUE (unsigned_type_node);
13039 TYPE_MAX_VALUE (ref) = TYPE_MAX_VALUE (unsigned_type_node);
13040
13041 /* Enable us to recognize when a type is created in class context.
13042 To do nested classes correctly, this should probably be cleared
13043 out when we leave this classes scope. Currently this in only
13044 done in `start_enum'. */
13045
13046 pushtag (name, ref, globalize);
8d08fdba 13047 }
8d08fdba
MS
13048 else
13049 {
8d08fdba 13050 struct binding_level *old_b = class_binding_level;
8d08fdba 13051
33848bb0 13052 ref = make_aggr_type (code);
25aab5d0 13053 TYPE_CONTEXT (ref) = context;
8d08fdba 13054
8d08fdba
MS
13055#ifdef NONNESTED_CLASSES
13056 /* Class types don't nest the way enums do. */
13057 class_binding_level = (struct binding_level *)0;
13058#endif
13059 pushtag (name, ref, globalize);
13060 class_binding_level = old_b;
8d08fdba
MS
13061 }
13062 }
13063 else
13064 {
7fe6899f 13065 if (!globalize && processing_template_decl && IS_AGGR_TYPE (ref))
6757edfe 13066 redeclare_class_template (ref, current_template_parms);
8d08fdba
MS
13067 }
13068
8d08fdba
MS
13069 /* Until the type is defined, tentatively accept whatever
13070 structure tag the user hands us. */
d0f062fb 13071 if (!COMPLETE_TYPE_P (ref)
8d08fdba
MS
13072 && ref != current_class_type
13073 /* Have to check this, in case we have contradictory tag info. */
13074 && IS_AGGR_TYPE_CODE (TREE_CODE (ref)))
13075 {
13076 if (tag_code == class_type)
13077 CLASSTYPE_DECLARED_CLASS (ref) = 1;
6eabb241 13078 else if (tag_code == record_type)
8d08fdba
MS
13079 CLASSTYPE_DECLARED_CLASS (ref) = 0;
13080 }
13081
dc8263bc
JM
13082 TREE_TYPE (ref) = attributes;
13083
8d08fdba
MS
13084 return ref;
13085}
8ccc31eb 13086
fc378698
MS
13087tree
13088xref_tag_from_type (old, id, globalize)
13089 tree old, id;
13090 int globalize;
13091{
13092 tree code_type_node;
13093
13094 if (TREE_CODE (old) == RECORD_TYPE)
13095 code_type_node = (CLASSTYPE_DECLARED_CLASS (old)
13096 ? class_type_node : record_type_node);
13097 else
13098 code_type_node = union_type_node;
13099
13100 if (id == NULL_TREE)
13101 id = TYPE_IDENTIFIER (old);
13102
ca107ded 13103 return xref_tag (code_type_node, id, globalize);
fc378698
MS
13104}
13105
3fd71a52
MM
13106/* REF is a type (named NAME), for which we have just seen some
13107 baseclasses. BINFO is a list of those baseclasses; the
13108 TREE_PURPOSE is an access_* node, and the TREE_VALUE is the type of
13109 the base-class. CODE_TYPE_NODE indicates whether REF is a class,
13110 struct, or union. */
13111
8ccc31eb
MS
13112void
13113xref_basetypes (code_type_node, name, ref, binfo)
13114 tree code_type_node;
13115 tree name, ref;
13116 tree binfo;
13117{
13118 /* In the declaration `A : X, Y, ... Z' we mark all the types
13119 (A, X, Y, ..., Z) so we can check for duplicates. */
13120 tree binfos;
d6479fe7
MM
13121 tree base;
13122
8ccc31eb 13123 int i, len;
665f2503 13124 enum tag_types tag_code = (enum tag_types) tree_low_cst (code_type_node, 1);
8ccc31eb
MS
13125
13126 if (tag_code == union_type)
13127 {
8251199e 13128 cp_error ("derived union `%T' invalid", ref);
8ccc31eb
MS
13129 return;
13130 }
13131
13132 len = list_length (binfo);
8ccc31eb 13133
d6479fe7
MM
13134 /* First, make sure that any templates in base-classes are
13135 instantiated. This ensures that if we call ourselves recursively
13136 we do not get confused about which classes are marked and which
13137 are not. */
13138 for (base = binfo; base; base = TREE_CHAIN (base))
13139 complete_type (TREE_VALUE (base));
13140
8ccc31eb
MS
13141 SET_CLASSTYPE_MARKED (ref);
13142 BINFO_BASETYPES (TYPE_BINFO (ref)) = binfos = make_tree_vec (len);
13143
13144 for (i = 0; binfo; binfo = TREE_CHAIN (binfo))
13145 {
13146 /* The base of a derived struct is public by default. */
13147 int via_public
be99da77
MS
13148 = (TREE_PURPOSE (binfo) == access_public_node
13149 || TREE_PURPOSE (binfo) == access_public_virtual_node
8ccc31eb 13150 || (tag_code != class_type
be99da77
MS
13151 && (TREE_PURPOSE (binfo) == access_default_node
13152 || TREE_PURPOSE (binfo) == access_default_virtual_node)));
d8b55a76
JM
13153 int via_protected
13154 = (TREE_PURPOSE (binfo) == access_protected_node
13155 || TREE_PURPOSE (binfo) == access_protected_virtual_node);
8ccc31eb 13156 int via_virtual
be99da77 13157 = (TREE_PURPOSE (binfo) == access_private_virtual_node
d8b55a76 13158 || TREE_PURPOSE (binfo) == access_protected_virtual_node
be99da77
MS
13159 || TREE_PURPOSE (binfo) == access_public_virtual_node
13160 || TREE_PURPOSE (binfo) == access_default_virtual_node);
13161 tree basetype = TREE_VALUE (binfo);
8ccc31eb
MS
13162 tree base_binfo;
13163
8ccc31eb
MS
13164 if (basetype && TREE_CODE (basetype) == TYPE_DECL)
13165 basetype = TREE_TYPE (basetype);
5566b478
MS
13166 if (!basetype
13167 || (TREE_CODE (basetype) != RECORD_TYPE
a80e4195 13168 && TREE_CODE (basetype) != TYPENAME_TYPE
73b0fce8 13169 && TREE_CODE (basetype) != TEMPLATE_TYPE_PARM
a1281f45 13170 && TREE_CODE (basetype) != BOUND_TEMPLATE_TEMPLATE_PARM))
8ccc31eb 13171 {
8251199e 13172 cp_error ("base type `%T' fails to be a struct or class type",
8ccc31eb
MS
13173 TREE_VALUE (binfo));
13174 continue;
13175 }
2b9dc906 13176
11b5139c 13177 GNU_xref_hier (name, basetype, via_public, via_virtual, 0);
2b9dc906 13178
8adf5b5e
JM
13179 /* This code replaces similar code in layout_basetypes.
13180 We put the complete_type first for implicit `typename'. */
d0f062fb 13181 if (!COMPLETE_TYPE_P (basetype)
2b9dc906 13182 && ! (current_template_parms && uses_template_parms (basetype)))
8ccc31eb 13183 {
8251199e 13184 cp_error ("base class `%T' has incomplete type", basetype);
8ccc31eb
MS
13185 continue;
13186 }
8ccc31eb
MS
13187 else
13188 {
13189 if (CLASSTYPE_MARKED (basetype))
13190 {
13191 if (basetype == ref)
8251199e 13192 cp_error ("recursive type `%T' undefined", basetype);
8ccc31eb 13193 else
8251199e 13194 cp_error ("duplicate base type `%T' invalid", basetype);
8ccc31eb
MS
13195 continue;
13196 }
13197
eff71ab0 13198 if (TYPE_FOR_JAVA (basetype)
68642fb6 13199 && (current_lang_stack
9cd64686 13200 == &VARRAY_TREE (current_lang_base, 0)))
eff71ab0
PB
13201 TYPE_FOR_JAVA (ref) = 1;
13202
8ccc31eb
MS
13203 /* Note that the BINFO records which describe individual
13204 inheritances are *not* shared in the lattice! They
13205 cannot be shared because a given baseclass may be
13206 inherited with different `accessibility' by different
13207 derived classes. (Each BINFO record describing an
13208 individual inheritance contains flags which say what
13209 the `accessibility' of that particular inheritance is.) */
68642fb6
UD
13210
13211 base_binfo
fed3cef0 13212 = make_binfo (size_zero_node, basetype,
7ddedda4
MM
13213 CLASS_TYPE_P (basetype)
13214 ? TYPE_BINFO_VTABLE (basetype) : NULL_TREE,
13215 CLASS_TYPE_P (basetype)
13216 ? TYPE_BINFO_VIRTUALS (basetype) : NULL_TREE);
68642fb6 13217
8ccc31eb
MS
13218 TREE_VEC_ELT (binfos, i) = base_binfo;
13219 TREE_VIA_PUBLIC (base_binfo) = via_public;
13220 TREE_VIA_PROTECTED (base_binfo) = via_protected;
13221 TREE_VIA_VIRTUAL (base_binfo) = via_virtual;
13222 BINFO_INHERITANCE_CHAIN (base_binfo) = TYPE_BINFO (ref);
13223
dfbcd65a
JM
13224 /* We need to unshare the binfos now so that lookups during class
13225 definition work. */
13226 unshare_base_binfos (base_binfo);
13227
8ccc31eb 13228 SET_CLASSTYPE_MARKED (basetype);
9e9ff709 13229
8ccc31eb
MS
13230 /* We are free to modify these bits because they are meaningless
13231 at top level, and BASETYPE is a top-level type. */
13232 if (via_virtual || TYPE_USES_VIRTUAL_BASECLASSES (basetype))
13233 {
13234 TYPE_USES_VIRTUAL_BASECLASSES (ref) = 1;
4c6b7393
MM
13235 /* Converting to a virtual base class requires looking
13236 up the offset of the virtual base. */
13237 TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (ref) = 1;
8ccc31eb
MS
13238 }
13239
7ddedda4
MM
13240 if (CLASS_TYPE_P (basetype))
13241 {
834c6dff
MM
13242 TYPE_HAS_NEW_OPERATOR (ref)
13243 |= TYPE_HAS_NEW_OPERATOR (basetype);
13244 TYPE_HAS_ARRAY_NEW_OPERATOR (ref)
13245 |= TYPE_HAS_ARRAY_NEW_OPERATOR (basetype);
7ddedda4 13246 TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
4c6b7393 13247 /* If the base-class uses multiple inheritance, so do we. */
68642fb6 13248 TYPE_USES_MULTIPLE_INHERITANCE (ref)
4c6b7393
MM
13249 |= TYPE_USES_MULTIPLE_INHERITANCE (basetype);
13250 /* Likewise, if converting to a base of the base may require
13251 code, then we may need to generate code to convert to a
13252 base as well. */
68642fb6 13253 TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (ref)
4c6b7393 13254 |= TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (basetype);
7ddedda4
MM
13255 }
13256
8ccc31eb
MS
13257 i += 1;
13258 }
13259 }
13260 if (i)
13261 TREE_VEC_LENGTH (binfos) = i;
13262 else
13263 BINFO_BASETYPES (TYPE_BINFO (ref)) = NULL_TREE;
13264
13265 if (i > 1)
7ddedda4 13266 {
4c6b7393
MM
13267 TYPE_USES_MULTIPLE_INHERITANCE (ref) = 1;
13268 /* If there is more than one non-empty they cannot be at the same
13269 address. */
13270 TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (ref) = 1;
7ddedda4
MM
13271 }
13272
8ccc31eb
MS
13273 /* Unmark all the types. */
13274 while (--i >= 0)
13275 CLEAR_CLASSTYPE_MARKED (BINFO_TYPE (TREE_VEC_ELT (binfos, i)));
13276 CLEAR_CLASSTYPE_MARKED (ref);
13277
70c532b5
MM
13278 /* Now that we know all the base-classes, set up the list of virtual
13279 bases. */
23381155 13280 get_vbase_types (ref);
8ccc31eb 13281}
68642fb6 13282
8d08fdba 13283\f
8d08fdba
MS
13284/* Begin compiling the definition of an enumeration type.
13285 NAME is its name (or null if anonymous).
13286 Returns the type object, as yet incomplete.
13287 Also records info about it so that build_enumerator
13288 may be used to declare the individual values as they are read. */
13289
13290tree
13291start_enum (name)
13292 tree name;
13293{
13294 register tree enumtype = NULL_TREE;
8f032717 13295 struct binding_level *b = current_binding_level;
8d08fdba
MS
13296
13297 /* If this is the real definition for a previous forward reference,
13298 fill in the contents in the same object that used to be the
13299 forward reference. */
13300
13301 if (name != NULL_TREE)
13302 enumtype = lookup_tag (ENUMERAL_TYPE, name, b, 1);
13303
13304 if (enumtype != NULL_TREE && TREE_CODE (enumtype) == ENUMERAL_TYPE)
30ff8252
NS
13305 {
13306 cp_error ("multiple definition of `%#T'", enumtype);
13307 cp_error_at ("previous definition here", enumtype);
58595203
MM
13308 /* Clear out TYPE_VALUES, and start again. */
13309 TYPE_VALUES (enumtype) = NULL_TREE;
30ff8252 13310 }
8d08fdba
MS
13311 else
13312 {
13313 enumtype = make_node (ENUMERAL_TYPE);
13314 pushtag (name, enumtype, 0);
13315 }
13316
13317 if (current_class_type)
13318 TREE_ADDRESSABLE (b->tags) = 1;
c91a56d2 13319
8d08fdba
MS
13320 GNU_xref_decl (current_function_decl, enumtype);
13321 return enumtype;
13322}
13323
13324/* After processing and defining all the values of an enumeration type,
13325 install their decls in the enumeration type and finish it off.
13326 ENUMTYPE is the type object and VALUES a list of name-value pairs.
13327 Returns ENUMTYPE. */
13328
13329tree
dbfe2124
MM
13330finish_enum (enumtype)
13331 tree enumtype;
8d08fdba 13332{
a703fb38 13333 register tree minnode = NULL_TREE, maxnode = NULL_TREE;
8d08fdba
MS
13334 /* Calculate the maximum value of any enumerator in this type. */
13335
dbfe2124 13336 tree values = TYPE_VALUES (enumtype);
8d08fdba
MS
13337 if (values)
13338 {
ed44da02 13339 tree pair;
5566b478 13340
ed44da02 13341 for (pair = values; pair; pair = TREE_CHAIN (pair))
8d08fdba 13342 {
ed44da02
MM
13343 tree decl;
13344 tree value;
13345
13346 /* The TREE_VALUE is a CONST_DECL for this enumeration
13347 constant. */
13348 decl = TREE_VALUE (pair);
13349
58595203
MM
13350 /* [dcl.enum]
13351
13352 Following the closing brace of an enum-specifier, each
13353 enumerator has the type of its enumeration. Prior to the
13354 closing brace, the type of each enumerator is the type of
13355 its initializing value. */
13356 TREE_TYPE (decl) = enumtype;
13357
ed44da02
MM
13358 /* The DECL_INITIAL will be NULL if we are processing a
13359 template declaration and this enumeration constant had no
13360 explicit initializer. */
13361 value = DECL_INITIAL (decl);
079e1098 13362 if (value && !processing_template_decl)
5566b478 13363 {
079e1098
MM
13364 /* Set the TREE_TYPE for the VALUE as well. That's so
13365 that when we call decl_constant_value we get an
13366 entity of the right type (but with the constant
13367 value). Since we shouldn't ever call
13368 decl_constant_value on a template type, there's no
13369 reason to do that when processing_template_decl.
13370 And, if the expression is something like a
13371 TEMPLATE_PARM_INDEX or a CAST_EXPR doing so will
68642fb6 13372 wreak havoc on the intended type of the expression.
079e1098
MM
13373
13374 Of course, there's also no point in trying to compute
13375 minimum or maximum values if we're in a template. */
5566b478 13376 TREE_TYPE (value) = enumtype;
ed44da02 13377
079e1098
MM
13378 if (!minnode)
13379 minnode = maxnode = value;
13380 else if (tree_int_cst_lt (maxnode, value))
13381 maxnode = value;
13382 else if (tree_int_cst_lt (value, minnode))
13383 minnode = value;
5566b478 13384 }
ed44da02 13385
68642fb6 13386 if (processing_template_decl)
72f2bd78
MM
13387 /* If this is just a template, leave the CONST_DECL
13388 alone. That way tsubst_copy will find CONST_DECLs for
13389 CONST_DECLs, and not INTEGER_CSTs. */
13390 ;
13391 else
13392 /* In the list we're building up, we want the enumeration
13393 values, not the CONST_DECLs. */
13394 TREE_VALUE (pair) = value;
8d08fdba
MS
13395 }
13396 }
f376e137
MS
13397 else
13398 maxnode = minnode = integer_zero_node;
8d08fdba 13399
de22184b 13400 TYPE_VALUES (enumtype) = nreverse (values);
2986ae00 13401
5156628f 13402 if (processing_template_decl)
b87692e5 13403 {
9360ac70
MM
13404 tree scope = current_scope ();
13405 if (scope && TREE_CODE (scope) == FUNCTION_DECL)
ae499cce 13406 add_stmt (build_min (TAG_DEFN, enumtype));
b87692e5 13407 }
cbf882af
MM
13408 else
13409 {
13410 int unsignedp = tree_int_cst_sgn (minnode) >= 0;
13411 int lowprec = min_precision (minnode, unsignedp);
13412 int highprec = min_precision (maxnode, unsignedp);
13413 int precision = MAX (lowprec, highprec);
13414 tree tem;
5566b478 13415
cbf882af 13416 TYPE_SIZE (enumtype) = NULL_TREE;
8d08fdba 13417
cbf882af 13418 /* Set TYPE_MIN_VALUE and TYPE_MAX_VALUE according to `precision'. */
8ccc31eb 13419
cbf882af
MM
13420 TYPE_PRECISION (enumtype) = precision;
13421 if (unsignedp)
13422 fixup_unsigned_type (enumtype);
13423 else
13424 fixup_signed_type (enumtype);
8ccc31eb 13425
cbf882af
MM
13426 if (flag_short_enums || (precision > TYPE_PRECISION (integer_type_node)))
13427 /* Use the width of the narrowest normal C type which is wide
68642fb6 13428 enough. */
cbf882af
MM
13429 TYPE_PRECISION (enumtype) = TYPE_PRECISION (type_for_size
13430 (precision, 1));
13431 else
13432 TYPE_PRECISION (enumtype) = TYPE_PRECISION (integer_type_node);
8d08fdba 13433
cbf882af
MM
13434 TYPE_SIZE (enumtype) = 0;
13435 layout_type (enumtype);
68642fb6 13436
cbf882af
MM
13437 /* Fix up all variant types of this enum type. */
13438 for (tem = TYPE_MAIN_VARIANT (enumtype); tem;
13439 tem = TYPE_NEXT_VARIANT (tem))
13440 {
13441 TYPE_VALUES (tem) = TYPE_VALUES (enumtype);
13442 TYPE_MIN_VALUE (tem) = TYPE_MIN_VALUE (enumtype);
13443 TYPE_MAX_VALUE (tem) = TYPE_MAX_VALUE (enumtype);
13444 TYPE_SIZE (tem) = TYPE_SIZE (enumtype);
13445 TYPE_SIZE_UNIT (tem) = TYPE_SIZE_UNIT (enumtype);
13446 TYPE_MODE (tem) = TYPE_MODE (enumtype);
13447 TYPE_PRECISION (tem) = TYPE_PRECISION (enumtype);
13448 TYPE_ALIGN (tem) = TYPE_ALIGN (enumtype);
11cf4d18 13449 TYPE_USER_ALIGN (tem) = TYPE_USER_ALIGN (enumtype);
cbf882af
MM
13450 TREE_UNSIGNED (tem) = TREE_UNSIGNED (enumtype);
13451 }
8d08fdba 13452
cbf882af
MM
13453 /* Finish debugging output for this type. */
13454 rest_of_type_compilation (enumtype, namespace_bindings_p ());
13455 }
13456
8d08fdba
MS
13457 return enumtype;
13458}
13459
079e1098 13460/* Build and install a CONST_DECL for an enumeration constant of the
58595203 13461 enumeration type ENUMTYPE whose NAME and VALUE (if any) are provided.
8d08fdba
MS
13462 Assignment of sequential values by default is handled here. */
13463
58595203
MM
13464void
13465build_enumerator (name, value, enumtype)
079e1098
MM
13466 tree name;
13467 tree value;
58595203 13468 tree enumtype;
8d08fdba 13469{
58595203 13470 tree decl;
e8bd800e 13471 tree context;
58595203
MM
13472 tree type;
13473 tree values;
8d08fdba
MS
13474
13475 /* Remove no-op casts from the value. */
13476 if (value)
13477 STRIP_TYPE_NOPS (value);
13478
58595203
MM
13479 if (! processing_template_decl)
13480 {
13481 /* Validate and default VALUE. */
13482 if (value != NULL_TREE)
13483 {
fc611ce0 13484 value = decl_constant_value (value);
58595203
MM
13485
13486 if (TREE_CODE (value) == INTEGER_CST)
13487 {
13488 value = default_conversion (value);
13489 constant_expression_warning (value);
13490 }
13491 else
13492 {
13493 cp_error ("enumerator value for `%D' not integer constant", name);
13494 value = NULL_TREE;
13495 }
13496 }
13497
13498 /* Default based on previous value. */
13499 if (value == NULL_TREE && ! processing_template_decl)
13500 {
13501 tree prev_value;
13502
13503 if (TYPE_VALUES (enumtype))
13504 {
13505 /* The next value is the previous value ... */
13506 prev_value = DECL_INITIAL (TREE_VALUE (TYPE_VALUES (enumtype)));
13507 /* ... plus one. */
ab76ca54
MM
13508 value = cp_build_binary_op (PLUS_EXPR,
13509 prev_value,
13510 integer_one_node);
68642fb6 13511
58595203
MM
13512 if (tree_int_cst_lt (value, prev_value))
13513 cp_error ("overflow in enumeration values at `%D'", name);
13514 }
13515 else
13516 value = integer_zero_node;
13517 }
13518
13519 /* Remove no-op casts from the value. */
13520 if (value)
13521 STRIP_TYPE_NOPS (value);
013bc8af 13522#if 0
58595203
MM
13523 /* To fix MAX_VAL enum consts. (bkoz) */
13524 TREE_TYPE (value) = integer_type_node;
013bc8af 13525#endif
58595203 13526 }
8d08fdba 13527
58595203
MM
13528 /* We always have to copy here; not all INTEGER_CSTs are unshared.
13529 Even in other cases, we will later (in finish_enum) be setting
13530 the type of VALUE. But, we don't need to make a copy if this
13531 VALUE is one of the enumeration constants for this same
13532 enumeration type. */
13533 for (values = TYPE_VALUES (enumtype); values; values = TREE_CHAIN (values))
13534 if (TREE_VALUE (values) == value)
13535 break;
13536 /* If we didn't break out of the loop, then we do need a copy. */
13537 if (!values && value)
13538 value = copy_node (value);
ed44da02 13539
8d08fdba 13540 /* C++ associates enums with global, function, or class declarations. */
58595203
MM
13541 context = current_scope ();
13542
13543 /* Build the actual enumeration constant. Note that the enumeration
13544 constants have the type of their initializers until the
13545 enumeration is complete:
13546
13547 [ dcl.enum ]
13548
13549 Following the closing brace of an enum-specifier, each enumer-
13550 ator has the type of its enumeration. Prior to the closing
13551 brace, the type of each enumerator is the type of its
13552 initializing value.
13553
13554 In finish_enum we will reset the type. Of course, if we're
13555 processing a template, there may be no value. */
13556 type = value ? TREE_TYPE (value) : NULL_TREE;
13557
13558 if (context && context == current_class_type)
13559 /* This enum declaration is local to the class. We need the full
13560 lang_decl so that we can record DECL_CLASS_CONTEXT, for example. */
13561 decl = build_lang_decl (CONST_DECL, name, type);
13562 else
13563 /* It's a global enum, or it's local to a function. (Note local to
e8bd800e 13564 a function could mean local to a class method. */
58595203 13565 decl = build_decl (CONST_DECL, name, type);
e8bd800e 13566
58595203
MM
13567 DECL_CONTEXT (decl) = FROB_CONTEXT (context);
13568 DECL_INITIAL (decl) = value;
13569 TREE_READONLY (decl) = 1;
e8bd800e 13570
58595203
MM
13571 if (context && context == current_class_type)
13572 /* In something like `struct S { enum E { i = 7 }; };' we put `i'
8f032717
MM
13573 on the TYPE_FIELDS list for `S'. (That's so that you can say
13574 things like `S::i' later.) */
58595203
MM
13575 finish_member_declaration (decl);
13576 else
13577 {
13578 pushdecl (decl);
13579 GNU_xref_decl (current_function_decl, decl);
13580 }
13581
13582 /* Add this enumeration constant to the list for this type. */
13583 TYPE_VALUES (enumtype) = tree_cons (name, decl, TYPE_VALUES (enumtype));
8d08fdba
MS
13584}
13585
8d08fdba 13586\f
a8f73d4b
MM
13587/* We're defining DECL. Make sure that it's type is OK. */
13588
13589static void
f444e36b 13590check_function_type (decl, current_function_parms)
a8f73d4b 13591 tree decl;
f444e36b 13592 tree current_function_parms;
a8f73d4b
MM
13593{
13594 tree fntype = TREE_TYPE (decl);
d0f062fb 13595 tree return_type = complete_type (TREE_TYPE (fntype));
a8f73d4b
MM
13596
13597 /* In a function definition, arg types must be complete. */
13598 require_complete_types_for_parms (current_function_parms);
13599
d0f062fb 13600 if (!COMPLETE_OR_VOID_TYPE_P (return_type))
a8f73d4b
MM
13601 {
13602 cp_error ("return type `%#T' is incomplete", TREE_TYPE (fntype));
13603
13604 /* Make it return void instead, but don't change the
13605 type of the DECL_RESULT, in case we have a named return value. */
13606 if (TREE_CODE (fntype) == METHOD_TYPE)
13607 {
13608 tree ctype = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (fntype)));
13609 TREE_TYPE (decl)
13610 = build_cplus_method_type (ctype,
13611 void_type_node,
13612 FUNCTION_ARG_CHAIN (decl));
13613 }
13614 else
13615 TREE_TYPE (decl)
13616 = build_function_type (void_type_node,
13617 TYPE_ARG_TYPES (TREE_TYPE (decl)));
68642fb6 13618 TREE_TYPE (decl)
a8f73d4b
MM
13619 = build_exception_variant (fntype,
13620 TYPE_RAISES_EXCEPTIONS (fntype));
13621 }
13622 else
13623 abstract_virtuals_error (decl, TREE_TYPE (fntype));
13624}
13625
8d08fdba
MS
13626/* Create the FUNCTION_DECL for a function definition.
13627 DECLSPECS and DECLARATOR are the parts of the declaration;
13628 they describe the function's name and the type it returns,
13629 but twisted together in a fashion that parallels the syntax of C.
13630
a8f73d4b
MM
13631 FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
13632 DECLARATOR is really the DECL for the function we are about to
13633 process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
f444e36b 13634 indicating that the function is an inline defined in-class.
68642fb6 13635
8d08fdba
MS
13636 This function creates a binding context for the function body
13637 as well as setting up the FUNCTION_DECL in current_function_decl.
13638
13639 Returns 1 on success. If the DECLARATOR is not suitable for a function
13640 (it defines a datum instead), we return 0, which tells
13641 yyparse to report a parse error.
13642
13643 For C++, we must first check whether that datum makes any sense.
13644 For example, "class A local_a(1,2);" means that variable local_a
13645 is an aggregate of type A, which should have a constructor
87e3dbc9 13646 applied to it with the argument list [1, 2]. */
8d08fdba
MS
13647
13648int
a8f73d4b 13649start_function (declspecs, declarator, attrs, flags)
c11b6f21 13650 tree declspecs, declarator, attrs;
a8f73d4b 13651 int flags;
8d08fdba 13652{
5566b478 13653 tree decl1;
8d08fdba
MS
13654 tree ctype = NULL_TREE;
13655 tree fntype;
13656 tree restype;
13657 extern int have_extern_spec;
13658 extern int used_extern_spec;
13659 int doing_friend = 0;
a8f73d4b 13660 struct binding_level *bl;
f444e36b 13661 tree current_function_parms;
8d08fdba 13662
8d08fdba 13663 /* Sanity check. */
a1774733 13664 my_friendly_assert (TREE_CODE (TREE_VALUE (void_list_node)) == VOID_TYPE, 160);
8d08fdba
MS
13665 my_friendly_assert (TREE_CHAIN (void_list_node) == NULL_TREE, 161);
13666
e92cc029 13667 /* This should only be done once on the top most decl. */
8d08fdba
MS
13668 if (have_extern_spec && !used_extern_spec)
13669 {
13670 declspecs = decl_tree_cons (NULL_TREE, get_identifier ("extern"), declspecs);
13671 used_extern_spec = 1;
13672 }
13673
a8f73d4b 13674 if (flags & SF_PRE_PARSED)
8d08fdba
MS
13675 {
13676 decl1 = declarator;
13677
8d08fdba
MS
13678 fntype = TREE_TYPE (decl1);
13679 if (TREE_CODE (fntype) == METHOD_TYPE)
13680 ctype = TYPE_METHOD_BASETYPE (fntype);
13681
cab1f180
ML
13682 /* ISO C++ 11.4/5. A friend function defined in a class is in
13683 the (lexical) scope of the class in which it is defined. */
8d08fdba
MS
13684 if (!ctype && DECL_FRIEND_P (decl1))
13685 {
4f1c5b7d 13686 ctype = DECL_FRIEND_CONTEXT (decl1);
8d08fdba
MS
13687
13688 /* CTYPE could be null here if we're dealing with a template;
13689 for example, `inline friend float foo()' inside a template
13690 will have no CTYPE set. */
13691 if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
13692 ctype = NULL_TREE;
13693 else
13694 doing_friend = 1;
13695 }
13696
5566b478
MS
13697 last_function_parms = DECL_ARGUMENTS (decl1);
13698 last_function_parm_tags = NULL_TREE;
8d08fdba
MS
13699 }
13700 else
13701 {
c11b6f21 13702 decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, NULL_TREE);
8d08fdba
MS
13703 /* If the declarator is not suitable for a function definition,
13704 cause a syntax error. */
13705 if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL) return 0;
13706
13707 fntype = TREE_TYPE (decl1);
13708
13709 restype = TREE_TYPE (fntype);
7ddedda4 13710 if (CLASS_TYPE_P (restype) && !CLASSTYPE_GOT_SEMICOLON (restype))
8d08fdba 13711 {
8251199e 13712 cp_error ("semicolon missing after declaration of `%#T'", restype);
051e6fd7 13713 shadow_tag (build_tree_list (NULL_TREE, restype));
8d08fdba
MS
13714 CLASSTYPE_GOT_SEMICOLON (restype) = 1;
13715 if (TREE_CODE (fntype) == FUNCTION_TYPE)
13716 fntype = build_function_type (integer_type_node,
13717 TYPE_ARG_TYPES (fntype));
13718 else
13719 fntype = build_cplus_method_type (build_type_variant (TYPE_METHOD_BASETYPE (fntype), TREE_READONLY (decl1), TREE_SIDE_EFFECTS (decl1)),
13720 integer_type_node,
13721 TYPE_ARG_TYPES (fntype));
13722 TREE_TYPE (decl1) = fntype;
13723 }
13724
13725 if (TREE_CODE (fntype) == METHOD_TYPE)
13726 ctype = TYPE_METHOD_BASETYPE (fntype);
35680744 13727 else if (DECL_MAIN_P (decl1))
8d08fdba
MS
13728 {
13729 /* If this doesn't return integer_type, complain. */
13730 if (TREE_TYPE (TREE_TYPE (decl1)) != integer_type_node)
13731 {
a28e3c7f 13732 if (pedantic || warn_return_type)
8251199e 13733 pedwarn ("return type for `main' changed to `int'");
8d08fdba
MS
13734 TREE_TYPE (decl1) = fntype = default_function_type;
13735 }
8d08fdba
MS
13736 }
13737 }
68642fb6 13738
b35d4555
MM
13739 /* Sometimes we don't notice that a function is a static member, and
13740 build a METHOD_TYPE for it. Fix that up now. */
13741 if (ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1)
13742 && TREE_CODE (TREE_TYPE (decl1)) == METHOD_TYPE)
13743 {
3afb32a4 13744 revert_static_member_fn (decl1);
b35d4555
MM
13745 last_function_parms = TREE_CHAIN (last_function_parms);
13746 ctype = NULL_TREE;
13747 }
8d08fdba
MS
13748
13749 /* Warn if function was previously implicitly declared
13750 (but not if we warned then). */
13751 if (! warn_implicit
13752 && IDENTIFIER_IMPLICIT_DECL (DECL_NAME (decl1)) != NULL_TREE)
8251199e 13753 cp_warning_at ("`%D' implicitly declared before its definition", IDENTIFIER_IMPLICIT_DECL (DECL_NAME (decl1)));
8d08fdba 13754
f181d4ae
MM
13755 /* Set up current_class_type, and enter the scope of the class, if
13756 appropriate. */
13757 if (ctype)
13758 push_nested_class (ctype, 1);
13759 else if (DECL_STATIC_FUNCTION_P (decl1))
13760 push_nested_class (DECL_CONTEXT (decl1), 2);
13761
13762 /* Now that we have entered the scope of the class, we must restore
13763 the bindings for any template parameters surrounding DECL1, if it
13764 is an inline member template. (Order is important; consider the
13765 case where a template parameter has the same name as a field of
13766 the class.) It is not until after this point that
13767 PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly. */
a8f73d4b 13768 if (flags & SF_INCLASS_INLINE)
f181d4ae
MM
13769 maybe_begin_member_template_processing (decl1);
13770
56cb9733 13771 /* Effective C++ rule 15. */
9188c363 13772 if (warn_ecpp
596ea4e5 13773 && DECL_OVERLOADED_OPERATOR_P (decl1) == NOP_EXPR
9188c363
MM
13774 && TREE_CODE (TREE_TYPE (fntype)) == VOID_TYPE)
13775 cp_warning ("`operator=' should return a reference to `*this'");
13776
13777 /* Make the init_value nonzero so pushdecl knows this is not tentative.
13778 error_mark_node is replaced below (in poplevel) with the BLOCK. */
b35d4555
MM
13779 if (!DECL_INITIAL (decl1))
13780 DECL_INITIAL (decl1) = error_mark_node;
9188c363
MM
13781
13782#ifdef SET_DEFAULT_DECL_ATTRIBUTES
13783 SET_DEFAULT_DECL_ATTRIBUTES (decl1, attrs);
13784#endif
68642fb6 13785
9188c363
MM
13786 /* This function exists in static storage.
13787 (This does not mean `static' in the C sense!) */
13788 TREE_STATIC (decl1) = 1;
13789
13790 /* We must call push_template_decl after current_class_type is set
13791 up. (If we are processing inline definitions after exiting a
13792 class scope, current_class_type will be NULL_TREE until set above
13793 by push_nested_class.) */
13794 if (processing_template_decl)
13795 decl1 = push_template_decl (decl1);
13796
f181d4ae 13797 /* We are now in the scope of the function being defined. */
8d08fdba 13798 current_function_decl = decl1;
f181d4ae 13799
5566b478
MS
13800 /* Save the parm names or decls from this function's declarator
13801 where store_parm_decls will find them. */
13802 current_function_parms = last_function_parms;
13803 current_function_parm_tags = last_function_parm_tags;
8d08fdba 13804
a8f73d4b
MM
13805 /* Make sure the parameter and return types are reasonable. When
13806 you declare a function, these types can be incomplete, but they
13807 must be complete when you define the function. */
5156628f 13808 if (! processing_template_decl)
f444e36b 13809 check_function_type (decl1, current_function_parms);
f181d4ae 13810
a8f73d4b
MM
13811 /* Build the return declaration for the function. */
13812 restype = TREE_TYPE (fntype);
13813 if (!processing_template_decl)
13814 {
13815 if (!DECL_RESULT (decl1))
5566b478 13816 {
5566b478 13817 DECL_RESULT (decl1)
a8f73d4b 13818 = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (restype));
68642fb6
UD
13819 c_apply_type_quals_to_decl (CP_TYPE_QUALS (restype),
13820 DECL_RESULT (decl1));
5566b478 13821 }
5566b478 13822 }
a8f73d4b
MM
13823 else
13824 /* Just use `void'. Nobody will ever look at this anyhow. */
13825 DECL_RESULT (decl1) = build_decl (RESULT_DECL, 0, void_type_node);
13826
13827 /* Initialize RTL machinery. We cannot do this until
13828 CURRENT_FUNCTION_DECL and DECL_RESULT are set up. We do this
13829 even when processing a template; this is how we get
01d939e8 13830 CFUN set up, and our per-function variables initialized. */
a8f73d4b
MM
13831 bl = current_binding_level;
13832 init_function_start (decl1, input_filename, lineno);
13833 current_binding_level = bl;
a8f73d4b
MM
13834
13835 /* Even though we're inside a function body, we still don't want to
13836 call expand_expr to calculate the size of a variable-sized array.
13837 We haven't necessarily assigned RTL to all variables yet, so it's
13838 not safe to try to expand expressions involving them. */
13839 immediate_size_expand = 0;
01d939e8 13840 cfun->x_dont_save_pending_sizes_p = 1;
a8f73d4b 13841
f444e36b
MM
13842 /* Start the statement-tree, start the tree now. */
13843 begin_stmt_tree (&DECL_SAVED_TREE (decl1));
6f80451c 13844
a8f73d4b 13845 /* Let the user know we're compiling this function. */
ea11ca7e 13846 announce_function (decl1);
b7484fbe 13847
878cd289
MS
13848 /* Record the decl so that the function name is defined.
13849 If we already have a decl for this name, and it is a FUNCTION_DECL,
13850 use the old decl. */
a8f73d4b 13851 if (!processing_template_decl && !(flags & SF_PRE_PARSED))
878cd289 13852 {
75650646 13853 /* A specialization is not used to guide overload resolution. */
2228d450 13854 if (!DECL_TEMPLATE_SPECIALIZATION (decl1)
959d8796 13855 && ! DECL_FUNCTION_MEMBER_P (decl1))
75650646 13856 decl1 = pushdecl (decl1);
2c73f9f5 13857 else
b7698cf0
JM
13858 {
13859 /* We need to set the DECL_CONTEXT. */
13860 if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
13861 DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
13862 /* And make sure we have enough default args. */
13863 check_default_args (decl1);
13864 }
878cd289
MS
13865 fntype = TREE_TYPE (decl1);
13866 }
5566b478 13867
a8f73d4b 13868 /* Reset these in case the call to pushdecl changed them. */
5566b478 13869 current_function_decl = decl1;
01d939e8 13870 cfun->decl = decl1;
878cd289 13871
f444e36b
MM
13872 my_friendly_assert ((DECL_PENDING_INLINE_P (decl1)
13873 || !DECL_SAVED_FUNCTION_DATA (decl1)),
13874 20000911);
b35d4555 13875
f444e36b 13876 if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1))
b35d4555
MM
13877 {
13878 /* We know that this was set up by `grokclassfn'. We do not
13879 wait until `store_parm_decls', since evil parse errors may
13880 never get us to that point. Here we keep the consistency
13881 between `current_class_type' and `current_class_ptr'. */
13882 tree t = DECL_ARGUMENTS (decl1);
68642fb6
UD
13883
13884 my_friendly_assert (t != NULL_TREE && TREE_CODE (t) == PARM_DECL,
b35d4555
MM
13885 162);
13886 my_friendly_assert (TREE_CODE (TREE_TYPE (t)) == POINTER_TYPE,
13887 19990811);
68642fb6
UD
13888
13889 cp_function_chain->x_current_class_ref
b35d4555
MM
13890 = build_indirect_ref (t, NULL_PTR);
13891 cp_function_chain->x_current_class_ptr = t;
13892
018fc244
MM
13893 /* Constructors and destructors need to know whether they're "in
13894 charge" of initializing virtual base classes. */
454fa7a7 13895 if (DECL_HAS_IN_CHARGE_PARM_P (decl1))
018fc244 13896 current_in_charge_parm = TREE_CHAIN (t);
b35d4555
MM
13897 }
13898
db5ae43f 13899 if (DECL_INTERFACE_KNOWN (decl1))
faae18ab 13900 {
4f1c5b7d 13901 tree ctx = decl_function_context (decl1);
86052cc3 13902
faae18ab
MS
13903 if (DECL_NOT_REALLY_EXTERN (decl1))
13904 DECL_EXTERNAL (decl1) = 0;
86052cc3 13905
68642fb6 13906 if (ctx != NULL_TREE && DECL_THIS_INLINE (ctx)
86052cc3
JM
13907 && TREE_PUBLIC (ctx))
13908 /* This is a function in a local class in an extern inline
13909 function. */
13910 comdat_linkage (decl1);
faae18ab 13911 }
8d08fdba
MS
13912 /* If this function belongs to an interface, it is public.
13913 If it belongs to someone else's interface, it is also external.
1f901793 13914 This only affects inlines and template instantiations. */
5566b478
MS
13915 else if (interface_unknown == 0
13916 && (! DECL_TEMPLATE_INSTANTIATION (decl1)
d11ad92e 13917 || flag_alt_external_templates))
8d08fdba 13918 {
5566b478 13919 if (DECL_THIS_INLINE (decl1) || DECL_TEMPLATE_INSTANTIATION (decl1)
5156628f 13920 || processing_template_decl)
1f901793
JM
13921 {
13922 DECL_EXTERNAL (decl1)
13923 = (interface_only
9c73ec84
MS
13924 || (DECL_THIS_INLINE (decl1) && ! flag_implement_inlines
13925 && !DECL_VINDEX (decl1)));
1f901793
JM
13926
13927 /* For WIN32 we also want to put these in linkonce sections. */
13928 maybe_make_one_only (decl1);
13929 }
db5ae43f 13930 else
893de33c 13931 DECL_EXTERNAL (decl1) = 0;
e8abc66f 13932 DECL_NOT_REALLY_EXTERN (decl1) = 0;
db5ae43f 13933 DECL_INTERFACE_KNOWN (decl1) = 1;
8d08fdba 13934 }
c16c47fb
JM
13935 else if (interface_unknown && interface_only
13936 && (! DECL_TEMPLATE_INSTANTIATION (decl1)
13937 || flag_alt_external_templates))
13938 {
13939 /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
13940 interface, we will have interface_only set but not
13941 interface_known. In that case, we don't want to use the normal
13942 heuristics because someone will supply a #pragma implementation
13943 elsewhere, and deducing it here would produce a conflict. */
13944 comdat_linkage (decl1);
13945 DECL_EXTERNAL (decl1) = 0;
13946 DECL_INTERFACE_KNOWN (decl1) = 1;
13947 DECL_DEFER_OUTPUT (decl1) = 1;
13948 }
8d08fdba 13949 else
a0a33927
MS
13950 {
13951 /* This is a definition, not a reference.
b7484fbe
MS
13952 So clear DECL_EXTERNAL. */
13953 DECL_EXTERNAL (decl1) = 0;
faae18ab 13954
5566b478
MS
13955 if ((DECL_THIS_INLINE (decl1) || DECL_TEMPLATE_INSTANTIATION (decl1))
13956 && ! DECL_INTERFACE_KNOWN (decl1)
13957 /* Don't try to defer nested functions for now. */
4f1c5b7d 13958 && ! decl_function_context (decl1))
878cd289
MS
13959 DECL_DEFER_OUTPUT (decl1) = 1;
13960 else
893de33c 13961 DECL_INTERFACE_KNOWN (decl1) = 1;
db5ae43f 13962 }
a9aedbc2 13963
f444e36b
MM
13964 pushlevel (0);
13965 current_binding_level->parm_flag = 1;
8d08fdba 13966
f30432d7
MS
13967 if (attrs)
13968 cplus_decl_attributes (decl1, NULL_TREE, attrs);
68642fb6 13969
495d26d6
JM
13970 /* We need to do this even if we aren't expanding yet so that
13971 assemble_external works. */
13972 make_function_rtl (decl1);
db5ae43f 13973
8d08fdba
MS
13974 /* Promote the value to int before returning it. */
13975 if (C_PROMOTING_INTEGER_TYPE_P (restype))
5566b478
MS
13976 restype = type_promotes_to (restype);
13977
13978 /* If this fcn was already referenced via a block-scope `extern' decl
13979 (or an implicit decl), propagate certain information about the usage. */
13980 if (TREE_ADDRESSABLE (DECL_ASSEMBLER_NAME (decl1)))
13981 TREE_ADDRESSABLE (decl1) = 1;
13982
8d08fdba 13983 if (DECL_RESULT (decl1) == NULL_TREE)
f30432d7
MS
13984 {
13985 DECL_RESULT (decl1)
13986 = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (restype));
91063b51
MM
13987 TREE_READONLY (DECL_RESULT (decl1)) = CP_TYPE_CONST_P (restype);
13988 TREE_THIS_VOLATILE (DECL_RESULT (decl1)) = CP_TYPE_VOLATILE_P (restype);
f30432d7 13989 }
8d08fdba 13990
5566b478
MS
13991 ++function_depth;
13992
0d9eb3ba 13993 if (DECL_DESTRUCTOR_P (decl1))
46e8c075
MM
13994 {
13995 dtor_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
13996 DECL_CONTEXT (dtor_label) = current_function_decl;
13997 }
3dbc07b6
MM
13998 /* Under the old ABI we return `this' from constructors, so we make
13999 ordinary `return' statements in constructors jump to CTOR_LABEL;
14000 from there we return `this'. Under the new ABI, we don't bother
14001 with any of this. By not setting CTOR_LABEL the remainder of the
14002 machinery is automatically disabled. */
14003 else if (!flag_new_abi && DECL_CONSTRUCTOR_P (decl1))
46e8c075
MM
14004 {
14005 ctor_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
14006 DECL_CONTEXT (ctor_label) = current_function_decl;
14007 }
8d08fdba 14008
f444e36b
MM
14009 store_parm_decls (current_function_parms);
14010
8d08fdba
MS
14011 return 1;
14012}
14013\f
14014/* Store the parameter declarations into the current function declaration.
14015 This is called after parsing the parameter declarations, before
14016 digesting the body of the function.
14017
14018 Also install to binding contour return value identifier, if any. */
14019
f444e36b
MM
14020static void
14021store_parm_decls (current_function_parms)
14022 tree current_function_parms;
8d08fdba
MS
14023{
14024 register tree fndecl = current_function_decl;
14025 register tree parm;
14026 int parms_have_cleanups = 0;
eb66be0e 14027 tree cleanups = NULL_TREE;
8d08fdba 14028
8d08fdba
MS
14029 /* This is a list of types declared among parms in a prototype. */
14030 tree parmtags = current_function_parm_tags;
14031
14032 /* This is a chain of any other decls that came in among the parm
14033 declarations. If a parm is declared with enum {foo, bar} x;
14034 then CONST_DECLs for foo and bar are put here. */
14035 tree nonparms = NULL_TREE;
14036
b35d4555 14037 if (current_function_parms)
8d08fdba
MS
14038 {
14039 /* This case is when the function was defined with an ANSI prototype.
14040 The parms already have decls, so we need not do anything here
14041 except record them as in effect
14042 and complain if any redundant old-style parm decls were written. */
14043
b35d4555
MM
14044 tree specparms = current_function_parms;
14045 tree next;
14046
f444e36b 14047 /* Must clear this because it might contain TYPE_DECLs declared
b35d4555 14048 at class level. */
f444e36b 14049 storedecls (NULL_TREE);
8d08fdba 14050
f444e36b 14051 /* If we're doing semantic analysis, then we'll call pushdecl
b35d4555
MM
14052 for each of these. We must do them in reverse order so that
14053 they end in the correct forward order. */
f444e36b 14054 specparms = nreverse (specparms);
5566b478 14055
b35d4555 14056 for (parm = specparms; parm; parm = next)
8d08fdba
MS
14057 {
14058 next = TREE_CHAIN (parm);
14059 if (TREE_CODE (parm) == PARM_DECL)
14060 {
f444e36b 14061 tree cleanup;
fe1b3b96 14062
f444e36b
MM
14063 if (DECL_NAME (parm) == NULL_TREE
14064 || TREE_CODE (parm) != VOID_TYPE)
14065 pushdecl (parm);
14066 else
14067 cp_error ("parameter `%D' declared void", parm);
eb66be0e 14068
f444e36b
MM
14069 cleanup = (processing_template_decl
14070 ? NULL_TREE
14071 : maybe_build_cleanup (parm));
68642fb6 14072
f444e36b
MM
14073 if (cleanup)
14074 cleanups = tree_cons (parm, cleanup, cleanups);
8d08fdba
MS
14075 }
14076 else
14077 {
14078 /* If we find an enum constant or a type tag,
14079 put it aside for the moment. */
14080 TREE_CHAIN (parm) = NULL_TREE;
14081 nonparms = chainon (nonparms, parm);
14082 }
14083 }
14084
f444e36b
MM
14085 /* Get the decls in their original chain order and record in the
14086 function. This is all and only the PARM_DECLs that were
14087 pushed into scope by the loop above. */
14088 DECL_ARGUMENTS (fndecl) = getdecls ();
14089 storetags (chainon (parmtags, gettags ()));
8d08fdba
MS
14090 }
14091 else
14092 DECL_ARGUMENTS (fndecl) = NULL_TREE;
14093
14094 /* Now store the final chain of decls for the arguments
14095 as the decl-chain of the current lexical scope.
14096 Put the enumerators in as well, at the front so that
14097 DECL_ARGUMENTS is not modified. */
f444e36b 14098 storedecls (chainon (nonparms, DECL_ARGUMENTS (fndecl)));
eb448459 14099
eb66be0e
MS
14100 /* Now that we have initialized the parms, we can start their
14101 cleanups. We cannot do this before, since expand_decl_cleanup
14102 should not be called before the parm can be used. */
fe1b3b96
MM
14103 while (cleanups)
14104 {
68642fb6 14105 finish_decl_cleanup (TREE_PURPOSE (cleanups),
fe1b3b96
MM
14106 TREE_VALUE (cleanups));
14107 cleanups = TREE_CHAIN (cleanups);
14108 }
eb66be0e 14109
8d08fdba 14110 /* Create a binding contour which can be used to catch
f444e36b 14111 cleanup-generated temporaries. */
8d08fdba 14112 if (parms_have_cleanups)
f444e36b 14113 pushlevel (0);
8d08fdba 14114
b35d4555 14115 /* Do the starting of the exception specifications, if we have any. */
68642fb6 14116 if (flag_exceptions && !processing_template_decl
1660cb3a 14117 && flag_enforce_eh_specs
b35d4555
MM
14118 && TYPE_RAISES_EXCEPTIONS (TREE_TYPE (current_function_decl)))
14119 current_eh_spec_try_block = expand_start_eh_spec ();
8d08fdba
MS
14120}
14121
8d08fdba 14122\f
59026e79
MM
14123/* We have finished doing semantic analysis on DECL, but have not yet
14124 generated RTL for its body. Save away our current state, so that
14125 when we want to generate RTL later we know what to do. */
14126
14127static void
14128save_function_data (decl)
14129 tree decl;
14130{
ae499cce 14131 struct cp_language_function *f;
59026e79
MM
14132
14133 /* Save the language-specific per-function data so that we can
14134 get it back when we really expand this function. */
14135 my_friendly_assert (!DECL_PENDING_INLINE_P (decl),
14136 19990908);
68642fb6 14137
59026e79 14138 /* Make a copy. */
ae499cce
MM
14139 f = ((struct cp_language_function *)
14140 xmalloc (sizeof (struct cp_language_function)));
59026e79 14141 bcopy ((char *) cp_function_chain, (char *) f,
ae499cce 14142 sizeof (struct cp_language_function));
59026e79
MM
14143 DECL_SAVED_FUNCTION_DATA (decl) = f;
14144
14145 /* Clear out the bits we don't need. */
ae499cce
MM
14146 f->base.x_stmt_tree.x_last_stmt = NULL_TREE;
14147 f->base.x_stmt_tree.x_last_expr_type = NULL_TREE;
59026e79
MM
14148 f->x_result_rtx = NULL_RTX;
14149 f->x_named_label_uses = NULL;
14150 f->bindings = NULL;
14151
14152 /* When we get back here again, we will be expanding. */
14153 f->x_expanding_p = 1;
914653a2
MM
14154
14155 /* If we've already decided that we cannot inline this function, we
14156 must remember that fact when we actually go to expand the
14157 function. */
14158 f->cannot_inline = current_function_cannot_inline;
59026e79
MM
14159}
14160
efee38a9
MM
14161/* At the end of every constructor we generate to code to return
14162 `this'. Do that now. */
14163
14164static void
14165finish_constructor_body ()
14166{
14167 /* Any return from a constructor will end up here. */
3dbc07b6 14168 if (ctor_label)
ae499cce 14169 add_stmt (build_stmt (LABEL_STMT, ctor_label));
efee38a9
MM
14170
14171 /* Clear CTOR_LABEL so that finish_return_stmt knows to really
14172 generate the return, rather than a goto to CTOR_LABEL. */
14173 ctor_label = NULL_TREE;
14174 /* In check_return_expr we translate an empty return from a
14175 constructor to a return of `this'. */
14176 finish_return_stmt (NULL_TREE);
46e8c075 14177 /* Mark the end of the constructor. */
ae499cce 14178 add_stmt (build_stmt (CTOR_STMT));
efee38a9
MM
14179}
14180
9bfadf57
MM
14181/* At the end of every destructor we generate code to restore virtual
14182 function tables to the values desired by base classes and to call
efee38a9 14183 to base class destructors. Do that now. */
9bfadf57
MM
14184
14185static void
14186finish_destructor_body ()
14187{
14188 tree compound_stmt;
9bfadf57
MM
14189 tree virtual_size;
14190 tree exprstmt;
298d6f60 14191 tree if_stmt;
9bfadf57
MM
14192
14193 /* Create a block to contain all the extra code. */
14194 compound_stmt = begin_compound_stmt (/*has_no_scope=*/0);
14195
efee38a9 14196 /* Any return from a destructor will end up here. */
ae499cce 14197 add_stmt (build_stmt (LABEL_STMT, dtor_label));
efee38a9 14198
9bfadf57
MM
14199 /* Generate the code to call destructor on base class. If this
14200 destructor belongs to a class with virtual functions, then set
14201 the virtual function table pointer to represent the type of our
14202 base class. */
14203
14204 /* This side-effect makes call to `build_delete' generate the code
14205 we have to have at the end of this destructor. `build_delete'
14206 will set the flag again. */
14207 TYPE_HAS_DESTRUCTOR (current_class_type) = 0;
14208
9bfadf57 14209 exprstmt = build_delete (current_class_type,
68642fb6 14210 current_class_ref,
86f45d2c 14211 sfk_base_destructor,
68642fb6 14212 LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR|LOOKUP_NORMAL,
9bfadf57
MM
14213 0);
14214
14215 if (exprstmt != error_mark_node
14216 && (TREE_CODE (exprstmt) != NOP_EXPR
14217 || TREE_OPERAND (exprstmt, 0) != integer_zero_node
14218 || TYPE_USES_VIRTUAL_BASECLASSES (current_class_type)))
14219 {
9bfadf57
MM
14220 if (exprstmt != void_zero_node)
14221 /* Don't call `expand_expr_stmt' if we're not going to do
14222 anything, since -Wall will give a diagnostic. */
14223 finish_expr_stmt (exprstmt);
14224
efee38a9 14225 /* Run destructors for all virtual baseclasses. */
9bfadf57
MM
14226 if (TYPE_USES_VIRTUAL_BASECLASSES (current_class_type))
14227 {
a55583e9
MM
14228 tree vbases;
14229 tree if_stmt;
14230
14231 if_stmt = begin_if_stmt ();
9bfadf57 14232 finish_if_stmt_cond (build (BIT_AND_EXPR, integer_type_node,
68642fb6 14233 current_in_charge_parm,
9bfadf57
MM
14234 integer_two_node),
14235 if_stmt);
14236
a55583e9
MM
14237 vbases = CLASSTYPE_VBASECLASSES (current_class_type);
14238 /* The CLASSTYPE_VBASECLASSES list is in initialization
14239 order, so we have to march through it in reverse order. */
14240 for (vbases = nreverse (copy_list (vbases));
14241 vbases;
14242 vbases = TREE_CHAIN (vbases))
9bfadf57 14243 {
a55583e9
MM
14244 tree vbase = TREE_VALUE (vbases);
14245
14246 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (BINFO_TYPE (vbase)))
9bfadf57
MM
14247 {
14248 tree vb = get_vbase
a55583e9 14249 (BINFO_TYPE (vbase),
9bfadf57
MM
14250 TYPE_BINFO (current_class_type));
14251 finish_expr_stmt
14252 (build_scoped_method_call
5724a0e6 14253 (current_class_ref, vb, base_dtor_identifier,
298d6f60 14254 NULL_TREE));
9bfadf57 14255 }
9bfadf57
MM
14256 }
14257
14258 finish_then_clause (if_stmt);
14259 finish_if_stmt ();
14260 }
14261 }
68642fb6 14262
9bfadf57
MM
14263 virtual_size = c_sizeof (current_class_type);
14264
14265 /* At the end, call delete if that's what's requested. */
68642fb6 14266
9bfadf57
MM
14267 /* FDIS sez: At the point of definition of a virtual destructor
14268 (including an implicit definition), non-placement operator delete
14269 shall be looked up in the scope of the destructor's class and if
14270 found shall be accessible and unambiguous.
68642fb6 14271
9bfadf57
MM
14272 This is somewhat unclear, but I take it to mean that if the class
14273 only defines placement deletes we don't do anything here. So we
14274 pass LOOKUP_SPECULATIVELY; delete_sanity will complain for us if
14275 they ever try to delete one of these. */
298d6f60
MM
14276 exprstmt = build_op_delete_call
14277 (DELETE_EXPR, current_class_ptr, virtual_size,
14278 LOOKUP_NORMAL | LOOKUP_SPECULATIVELY, NULL_TREE);
14279
14280 if_stmt = begin_if_stmt ();
14281 finish_if_stmt_cond (build (BIT_AND_EXPR, integer_type_node,
14282 current_in_charge_parm,
14283 integer_one_node),
14284 if_stmt);
14285 finish_expr_stmt (exprstmt);
14286 finish_then_clause (if_stmt);
14287 finish_if_stmt ();
9bfadf57
MM
14288
14289 /* Close the block we started above. */
14290 finish_compound_stmt (/*has_no_scope=*/0, compound_stmt);
14291}
14292
8d08fdba
MS
14293/* Finish up a function declaration and compile that function
14294 all the way to assembler language output. The free the storage
14295 for the function definition.
14296
68642fb6
UD
14297 FLAGS is a bitwise or of the following values:
14298 1 - CALL_POPLEVEL
f181d4ae
MM
14299 An extra call to poplevel (and expand_end_bindings) must be
14300 made to take care of the binding contour for the base
14301 initializers. This is only relevant for constructors.
14302 2 - INCLASS_INLINE
14303 We just finished processing the body of an in-class inline
14304 function definition. (This processing will have taken place
87e3dbc9 14305 after the class definition is complete.) */
8d08fdba 14306
4d6abc1c 14307tree
0acf7199 14308finish_function (flags)
f181d4ae 14309 int flags;
8d08fdba
MS
14310{
14311 register tree fndecl = current_function_decl;
14312 tree fntype, ctype = NULL_TREE;
f181d4ae
MM
14313 int call_poplevel = (flags & 1) != 0;
14314 int inclass_inline = (flags & 2) != 0;
87e3dbc9 14315 int nested;
8d08fdba
MS
14316
14317 /* When we get some parse errors, we can end up without a
14318 current_function_decl, so cope. */
14319 if (fndecl == NULL_TREE)
4d6abc1c 14320 return error_mark_node;
8d08fdba 14321
87e3dbc9 14322 nested = function_depth > 1;
8d08fdba
MS
14323 fntype = TREE_TYPE (fndecl);
14324
9bfadf57
MM
14325 /* TREE_READONLY (fndecl) = 1;
14326 This caused &foo to be of type ptr-to-const-function
14327 which then got a warning when stored in a ptr-to-function variable. */
8d08fdba 14328
f444e36b 14329 my_friendly_assert (building_stmt_tree (), 20000911);
8d08fdba 14330
db9b2174
MM
14331 /* For a cloned function, we've already got all the code we need;
14332 there's no need to add any extra bits. */
f444e36b 14333 if (!DECL_CLONED_FUNCTION_P (fndecl))
8d08fdba 14334 {
efee38a9
MM
14335 if (DECL_CONSTRUCTOR_P (fndecl))
14336 {
14337 finish_constructor_body ();
14338 if (call_poplevel)
14339 do_poplevel ();
14340 }
9bfadf57
MM
14341 else if (DECL_DESTRUCTOR_P (fndecl) && !processing_template_decl)
14342 finish_destructor_body ();
efee38a9
MM
14343 else if (DECL_MAIN_P (fndecl))
14344 {
14345 /* Make it so that `main' always returns 0 by default. */
14346#ifdef VMS
14347 finish_return_stmt (integer_one_node);
14348#else
14349 finish_return_stmt (integer_zero_node);
14350#endif
14351 }
87e3dbc9 14352
b35d4555
MM
14353 /* Finish dealing with exception specifiers. */
14354 if (flag_exceptions && !processing_template_decl
1660cb3a 14355 && flag_enforce_eh_specs
b35d4555 14356 && TYPE_RAISES_EXCEPTIONS (TREE_TYPE (current_function_decl)))
68642fb6 14357 expand_end_eh_spec (TYPE_RAISES_EXCEPTIONS
b35d4555
MM
14358 (TREE_TYPE (current_function_decl)),
14359 current_eh_spec_try_block);
5566b478 14360 }
68642fb6 14361
558475f0 14362 /* If we're saving up tree structure, tie off the function now. */
f444e36b 14363 finish_stmt_tree (&DECL_SAVED_TREE (fndecl));
8d2733ca 14364
8d08fdba
MS
14365 /* This must come after expand_function_end because cleanups might
14366 have declarations (from inline functions) that need to go into
14367 this function's blocks. */
f444e36b
MM
14368 if (current_binding_level->parm_flag != 1)
14369 my_friendly_abort (122);
14370 poplevel (1, 0, 1);
8d08fdba 14371
a8f73d4b 14372 /* Remember that we were in class scope. */
db5ae43f 14373 if (current_class_name)
a8f73d4b 14374 ctype = current_class_type;
db5ae43f 14375
1caa11d3
MM
14376 /* Must mark the RESULT_DECL as being in this function. */
14377 DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
14378
14379 /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
14380 to the FUNCTION_DECL node itself. */
14381 BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
14382
59026e79 14383 /* Save away current state, if appropriate. */
f444e36b 14384 if (!processing_template_decl)
59026e79
MM
14385 save_function_data (fndecl);
14386
95fabfd3
MM
14387 /* If this function calls `setjmp' it cannot be inlined. When
14388 `longjmp' is called it is not guaranteed to restore the value of
14389 local variables that have been modified since the call to
14390 `setjmp'. So, if were to inline this function into some caller
14391 `c', then when we `longjmp', we might not restore all variables
14392 in `c'. (It might seem, at first blush, that there's no way for
14393 this function to modify local variables in `c', but their
14394 addresses may have been stored somewhere accessible to this
14395 function.) */
f444e36b 14396 if (!processing_template_decl && calls_setjmp_p (fndecl))
95fabfd3
MM
14397 DECL_UNINLINABLE (fndecl) = 1;
14398
f444e36b
MM
14399 /* Clear out memory we no longer need. */
14400 free_after_parsing (cfun);
14401 /* Since we never call rest_of_compilation, we never clear
14402 CFUN. Do so explicitly. */
14403 free_after_compilation (cfun);
14404 cfun = NULL;
a8f73d4b
MM
14405
14406 /* If this is a in-class inline definition, we may have to pop the
14407 bindings for the template parameters that we added in
14408 maybe_begin_member_template_processing when start_function was
14409 called. */
14410 if (inclass_inline)
14411 maybe_end_member_template_processing ();
14412
14413 /* Leave the scope of the class. */
14414 if (ctype)
14415 pop_nested_class ();
5566b478
MS
14416
14417 --function_depth;
8d08fdba 14418
4d6abc1c 14419 /* Clean up. */
28cbf42c
MS
14420 if (! nested)
14421 {
14422 /* Let the error reporting routines know that we're outside a
14423 function. For a nested function, this value is used in
14424 pop_cp_function_context and then reset via pop_function_context. */
14425 current_function_decl = NULL_TREE;
a09ba2e0
MM
14426 /* We don't really care about obstacks, but the middle-end
14427 sometimes cares on what obstck things are located. */
14428 permanent_allocation (1);
28cbf42c 14429 }
4d6abc1c
MM
14430
14431 return fndecl;
8d08fdba
MS
14432}
14433\f
14434/* Create the FUNCTION_DECL for a function definition.
8d08fdba
MS
14435 DECLSPECS and DECLARATOR are the parts of the declaration;
14436 they describe the return type and the name of the function,
14437 but twisted together in a fashion that parallels the syntax of C.
14438
14439 This function creates a binding context for the function body
14440 as well as setting up the FUNCTION_DECL in current_function_decl.
14441
14442 Returns a FUNCTION_DECL on success.
14443
14444 If the DECLARATOR is not suitable for a function (it defines a datum
14445 instead), we return 0, which tells yyparse to report a parse error.
14446
14447 May return void_type_node indicating that this method is actually
14448 a friend. See grokfield for more details.
14449
14450 Came here with a `.pushlevel' .
14451
14452 DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
14453 CHANGES TO CODE IN `grokfield'. */
e92cc029 14454
8d08fdba 14455tree
acf82af2
JM
14456start_method (declspecs, declarator, attrlist)
14457 tree declarator, declspecs, attrlist;
8d08fdba 14458{
c11b6f21 14459 tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
acf82af2 14460 attrlist);
8d08fdba
MS
14461
14462 /* Something too ugly to handle. */
14463 if (fndecl == NULL_TREE)
14464 return NULL_TREE;
14465
14466 /* Pass friends other than inline friend functions back. */
a1774733 14467 if (fndecl == void_type_node)
8d08fdba
MS
14468 return fndecl;
14469
14470 if (TREE_CODE (fndecl) != FUNCTION_DECL)
14471 /* Not a function, tell parser to report parse error. */
14472 return NULL_TREE;
14473
8d08fdba
MS
14474 if (DECL_IN_AGGR_P (fndecl))
14475 {
14476 if (IDENTIFIER_ERROR_LOCUS (DECL_ASSEMBLER_NAME (fndecl)) != current_class_type)
14477 {
68642fb6 14478 if (DECL_CONTEXT (fndecl)
2c73f9f5 14479 && TREE_CODE( DECL_CONTEXT (fndecl)) != NAMESPACE_DECL)
2ae7bada
NS
14480 cp_error ("`%D' is already defined in class `%T'", fndecl,
14481 DECL_CONTEXT (fndecl));
8d08fdba
MS
14482 }
14483 return void_type_node;
14484 }
14485
f3400fe2
JM
14486 check_template_shadow (fndecl);
14487
faae18ab
MS
14488 DECL_THIS_INLINE (fndecl) = 1;
14489
8926095f 14490 if (flag_default_inline)
8d08fdba
MS
14491 DECL_INLINE (fndecl) = 1;
14492
36a117a5
MM
14493 /* We process method specializations in finish_struct_1. */
14494 if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
3ac3d9ea 14495 fndecl = push_template_decl (fndecl);
a0a33927 14496
8d08fdba
MS
14497 if (! DECL_FRIEND_P (fndecl))
14498 {
8d08fdba
MS
14499 if (TREE_CHAIN (fndecl))
14500 {
14501 fndecl = copy_node (fndecl);
14502 TREE_CHAIN (fndecl) = NULL_TREE;
14503 }
14504
14505 if (DECL_CONSTRUCTOR_P (fndecl))
a0a33927
MS
14506 {
14507 if (! grok_ctor_properties (current_class_type, fndecl))
14508 return void_type_node;
14509 }
8d08fdba
MS
14510 else if (IDENTIFIER_OPNAME_P (DECL_NAME (fndecl)))
14511 grok_op_properties (fndecl, DECL_VIRTUAL_P (fndecl), 0);
14512 }
14513
cd9f6678 14514 cp_finish_decl (fndecl, NULL_TREE, NULL_TREE, 0);
8d08fdba
MS
14515
14516 /* Make a place for the parms */
14517 pushlevel (0);
14518 current_binding_level->parm_flag = 1;
68642fb6 14519
8d08fdba
MS
14520 DECL_IN_AGGR_P (fndecl) = 1;
14521 return fndecl;
14522}
14523
14524/* Go through the motions of finishing a function definition.
14525 We don't compile this method until after the whole class has
14526 been processed.
14527
14528 FINISH_METHOD must return something that looks as though it
14529 came from GROKFIELD (since we are defining a method, after all).
14530
14531 This is called after parsing the body of the function definition.
14532 STMTS is the chain of statements that makes up the function body.
14533
14534 DECL is the ..._DECL that `start_method' provided. */
14535
14536tree
14537finish_method (decl)
14538 tree decl;
14539{
14540 register tree fndecl = decl;
14541 tree old_initial;
8d08fdba
MS
14542
14543 register tree link;
14544
a1774733 14545 if (decl == void_type_node)
8d08fdba
MS
14546 return decl;
14547
14548 old_initial = DECL_INITIAL (fndecl);
14549
14550 /* Undo the level for the parms (from start_method).
14551 This is like poplevel, but it causes nothing to be
14552 saved. Saving information here confuses symbol-table
14553 output routines. Besides, this information will
14554 be correctly output when this method is actually
14555 compiled. */
14556
14557 /* Clear out the meanings of the local variables of this level;
14558 also record in each decl which block it belongs to. */
14559
14560 for (link = current_binding_level->names; link; link = TREE_CHAIN (link))
14561 {
14562 if (DECL_NAME (link) != NULL_TREE)
d8f8dca1 14563 pop_binding (DECL_NAME (link), link);
8d08fdba
MS
14564 my_friendly_assert (TREE_CODE (link) != FUNCTION_DECL, 163);
14565 DECL_CONTEXT (link) = NULL_TREE;
14566 }
14567
8d08fdba
MS
14568 GNU_xref_end_scope ((HOST_WIDE_INT) current_binding_level,
14569 (HOST_WIDE_INT) current_binding_level->level_chain,
14570 current_binding_level->parm_flag,
5566b478 14571 current_binding_level->keep);
8d08fdba
MS
14572
14573 poplevel (0, 0, 0);
14574
14575 DECL_INITIAL (fndecl) = old_initial;
14576
14577 /* We used to check if the context of FNDECL was different from
14578 current_class_type as another way to get inside here. This didn't work
14579 for String.cc in libg++. */
14580 if (DECL_FRIEND_P (fndecl))
14581 {
14582 CLASSTYPE_INLINE_FRIENDS (current_class_type)
14583 = tree_cons (NULL_TREE, fndecl, CLASSTYPE_INLINE_FRIENDS (current_class_type));
14584 decl = void_type_node;
14585 }
14586
14587 return decl;
14588}
14589\f
14590/* Called when a new struct TYPE is defined.
14591 If this structure or union completes the type of any previous
14592 variable declaration, lay it out and output its rtl. */
14593
14594void
14595hack_incomplete_structures (type)
14596 tree type;
14597{
f30432d7 14598 tree *list;
70adf8a9 14599 struct binding_level *level;
8d08fdba
MS
14600
14601 if (!type) /* Don't do this for class templates. */
14602 return;
14603
70adf8a9
JM
14604 if (namespace_bindings_p ())
14605 {
14606 level = 0;
14607 list = &namespace_scope_incomplete;
14608 }
14609 else
14610 {
14611 level = innermost_nonclass_level ();
14612 list = &level->incomplete;
14613 }
14614
14615 while (1)
14616 {
14617 while (*list)
14618 {
14619 tree decl = TREE_VALUE (*list);
14620 if ((decl && TREE_TYPE (decl) == type)
14621 || (TREE_TYPE (decl)
14622 && TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
14623 && TREE_TYPE (TREE_TYPE (decl)) == type))
f30432d7 14624 {
70adf8a9
JM
14625 int toplevel = toplevel_bindings_p ();
14626 if (TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
14627 && TREE_TYPE (TREE_TYPE (decl)) == type)
14628 layout_type (TREE_TYPE (decl));
14629 layout_decl (decl, 0);
14630 rest_of_decl_compilation (decl, NULL_PTR, toplevel, 0);
14631 if (! toplevel)
14632 {
14633 tree cleanup;
14634 expand_decl (decl);
14635 cleanup = maybe_build_cleanup (decl);
14636 expand_decl_init (decl);
14637 if (! expand_decl_cleanup (decl, cleanup))
14638 cp_error ("parser lost in parsing declaration of `%D'",
14639 decl);
14640 }
14641 *list = TREE_CHAIN (*list);
f30432d7 14642 }
70adf8a9
JM
14643 else
14644 list = &TREE_CHAIN (*list);
14645 }
14646
14647 /* Keep looking through artificial binding levels generated
14648 for local variables. */
14649 if (level && level->keep == 2)
14650 {
14651 level = level->level_chain;
14652 list = &level->incomplete;
f30432d7
MS
14653 }
14654 else
70adf8a9 14655 break;
f30432d7 14656 }
8d08fdba
MS
14657}
14658
86f45d2c
MM
14659/* If DECL is of a type which needs a cleanup, build that cleanup
14660 here. */
e92cc029 14661
86f45d2c
MM
14662tree
14663maybe_build_cleanup (decl)
14664 tree decl;
8d08fdba
MS
14665{
14666 tree type = TREE_TYPE (decl);
86f45d2c 14667
834c6dff 14668 if (type != error_mark_node && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
8d08fdba 14669 {
80048418 14670 int flags = LOOKUP_NORMAL|LOOKUP_DESTRUCTOR;
8d08fdba 14671 tree rval;
8d08fdba 14672
8d08fdba
MS
14673 if (TREE_CODE (type) == ARRAY_TYPE)
14674 rval = decl;
14675 else
14676 {
14677 mark_addressable (decl);
14678 rval = build_unary_op (ADDR_EXPR, decl, 0);
14679 }
14680
14681 /* Optimize for space over speed here. */
14682 if (! TYPE_USES_VIRTUAL_BASECLASSES (type)
14683 || flag_expensive_optimizations)
14684 flags |= LOOKUP_NONVIRTUAL;
14685
86f45d2c
MM
14686 rval = build_delete (TREE_TYPE (rval), rval,
14687 sfk_complete_destructor, flags, 0);
8d08fdba
MS
14688
14689 if (TYPE_USES_VIRTUAL_BASECLASSES (type)
14690 && ! TYPE_HAS_DESTRUCTOR (type))
e1b3e07d 14691 rval = build_compound_expr (tree_cons (NULL_TREE, rval,
051e6fd7 14692 build_tree_list (NULL_TREE, build_vbase_delete (type, decl))));
8d08fdba 14693
8d08fdba
MS
14694 return rval;
14695 }
14696 return 0;
14697}
14698\f
14699/* Expand a C++ expression at the statement level.
14700 This is needed to ferret out nodes which have UNKNOWN_TYPE.
14701 The C++ type checker should get all of these out when
14702 expressions are combined with other, type-providing, expressions,
14703 leaving only orphan expressions, such as:
14704
e92cc029 14705 &class::bar; / / takes its address, but does nothing with it. */
8d08fdba 14706
8d08fdba
MS
14707void
14708cplus_expand_expr_stmt (exp)
14709 tree exp;
14710{
63c68bb7 14711#if 0
66543169
NS
14712 /* We should do this eventually, but right now this causes regex.o from
14713 libg++ to miscompile, and tString to core dump. */
14714 exp = build1 (CLEANUP_POINT_EXPR, TREE_TYPE (exp), exp);
63c68bb7 14715#endif
b3e401c2 14716
66543169
NS
14717 /* If we don't do this, we end up down inside expand_expr
14718 trying to do TYPE_MODE on the ERROR_MARK, and really
14719 go outside the bounds of the type. */
14720 if (exp != error_mark_node)
364460b6 14721 expand_expr_stmt (exp);
8d08fdba
MS
14722}
14723
558475f0 14724/* When a stmt has been parsed, this function is called. */
8d08fdba
MS
14725
14726void
14727finish_stmt ()
14728{
558475f0
MM
14729 /* Always assume this statement was not an expression statement. If
14730 it actually was an expression statement, its our callers
14731 responsibility to fix this up. */
14732 last_expr_type = NULL_TREE;
8d08fdba
MS
14733}
14734
3afb32a4
MM
14735/* DECL was originally constructed as a non-static member function,
14736 but turned out to be static. Update it accordingly. */
700f8a87 14737
8857f91e 14738void
3afb32a4
MM
14739revert_static_member_fn (decl)
14740 tree decl;
8d08fdba 14741{
700f8a87 14742 tree tmp;
3afb32a4
MM
14743 tree function = TREE_TYPE (decl);
14744 tree args = TYPE_ARG_TYPES (function);
8d08fdba 14745
68642fb6 14746 if (CP_TYPE_QUALS (TREE_TYPE (TREE_VALUE (args)))
91063b51 14747 != TYPE_UNQUALIFIED)
68642fb6 14748 cp_error ("static member function `%#D' declared with type qualifiers",
91063b51 14749 *decl);
f30432d7 14750
700f8a87
MS
14751 args = TREE_CHAIN (args);
14752 tmp = build_function_type (TREE_TYPE (function), args);
91063b51 14753 tmp = build_qualified_type (tmp, CP_TYPE_QUALS (function));
f30432d7 14754 tmp = build_exception_variant (tmp,
8d08fdba 14755 TYPE_RAISES_EXCEPTIONS (function));
3afb32a4
MM
14756 TREE_TYPE (decl) = tmp;
14757 if (DECL_ARGUMENTS (decl))
14758 DECL_ARGUMENTS (decl) = TREE_CHAIN (DECL_ARGUMENTS (decl));
14759 DECL_STATIC_FUNCTION_P (decl) = 1;
8d08fdba 14760}
a4443a08 14761
68642fb6
UD
14762/* Initialize the variables used during compilation of a C++
14763 function. */
db5ae43f 14764
99dccabc
MM
14765static void
14766push_cp_function_context (f)
14767 struct function *f;
14768{
ae499cce
MM
14769 struct cp_language_function *p
14770 = ((struct cp_language_function *)
14771 xcalloc (1, sizeof (struct cp_language_function)));
14772 f->language = (struct language_function *) p;
db5ae43f 14773
b35d4555
MM
14774 /* It takes an explicit call to expand_body to generate RTL for a
14775 function. */
14776 expanding_p = 0;
f1dedc31
MM
14777
14778 /* Whenever we start a new function, we destroy temporaries in the
14779 usual way. */
ae499cce 14780 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
db5ae43f
MS
14781}
14782
a8f73d4b
MM
14783/* Free the language-specific parts of F, now that we've finished
14784 compiling the function. */
db5ae43f 14785
99dccabc
MM
14786static void
14787pop_cp_function_context (f)
14788 struct function *f;
db5ae43f 14789{
d658cd4c
MM
14790 if (f->language)
14791 free (f->language);
99dccabc 14792 f->language = 0;
db5ae43f 14793}
ebfc180f 14794
59026e79 14795/* Mark P for GC. */
4519c0a8 14796
59026e79
MM
14797static void
14798mark_lang_function (p)
ae499cce 14799 struct cp_language_function *p;
59026e79 14800{
87e3dbc9
MM
14801 if (!p)
14802 return;
14803
4519c0a8
MM
14804 ggc_mark_tree (p->x_ctor_label);
14805 ggc_mark_tree (p->x_dtor_label);
4519c0a8
MM
14806 ggc_mark_tree (p->x_current_class_ptr);
14807 ggc_mark_tree (p->x_current_class_ref);
b35d4555
MM
14808 ggc_mark_tree (p->x_eh_spec_try_block);
14809 ggc_mark_tree (p->x_scope_stmt_stack);
4519c0a8 14810
4519c0a8
MM
14811 ggc_mark_rtx (p->x_result_rtx);
14812
6625cdb5 14813 mark_named_label_lists (&p->x_named_labels, &p->x_named_label_uses);
ae499cce 14814 mark_stmt_tree (&p->base.x_stmt_tree);
a8f73d4b 14815 mark_binding_level (&p->bindings);
4519c0a8
MM
14816}
14817
59026e79
MM
14818/* Mark the language-specific data in F for GC. */
14819
a09ba2e0 14820static void
59026e79
MM
14821mark_cp_function_context (f)
14822 struct function *f;
14823{
ae499cce 14824 mark_lang_function ((struct cp_language_function *) f->language);
59026e79 14825}
4519c0a8 14826
4519c0a8 14827void
b4b8bee7
MM
14828lang_mark_false_label_stack (l)
14829 struct label_node *l;
4519c0a8
MM
14830{
14831 /* C++ doesn't use false_label_stack. It better be NULL. */
87e3dbc9 14832 my_friendly_assert (l == NULL, 19990904);
4519c0a8
MM
14833}
14834
14835void
14836lang_mark_tree (t)
14837 tree t;
14838{
14839 enum tree_code code = TREE_CODE (t);
14840 if (code == IDENTIFIER_NODE)
14841 {
14842 struct lang_identifier *li = (struct lang_identifier *) t;
14843 struct lang_id2 *li2 = li->x;
14844 ggc_mark_tree (li->namespace_bindings);
a8f73d4b 14845 ggc_mark_tree (li->bindings);
4519c0a8
MM
14846 ggc_mark_tree (li->class_value);
14847 ggc_mark_tree (li->class_template_info);
14848
14849 if (li2)
14850 {
14851 ggc_mark_tree (li2->label_value);
14852 ggc_mark_tree (li2->implicit_decl);
14853 ggc_mark_tree (li2->error_locus);
14854 }
14855 }
87e3dbc9
MM
14856 else if (code == CPLUS_BINDING)
14857 {
14858 if (BINDING_HAS_LEVEL_P (t))
14859 mark_binding_level (&BINDING_LEVEL (t));
14860 else
14861 ggc_mark_tree (BINDING_SCOPE (t));
14862 ggc_mark_tree (BINDING_VALUE (t));
14863 }
14864 else if (code == OVERLOAD)
14865 ggc_mark_tree (OVL_FUNCTION (t));
14866 else if (code == TEMPLATE_PARM_INDEX)
14867 ggc_mark_tree (TEMPLATE_PARM_DECL (t));
4519c0a8
MM
14868 else if (TREE_CODE_CLASS (code) == 'd')
14869 {
14870 struct lang_decl *ld = DECL_LANG_SPECIFIC (t);
14871
14872 if (ld)
14873 {
d60f72ae 14874 ggc_mark (ld);
6462c441
MM
14875 if (!DECL_GLOBAL_CTOR_P (t)
14876 && !DECL_GLOBAL_DTOR_P (t)
14877 && !DECL_THUNK_P (t))
af3b4e59 14878 ggc_mark_tree (ld->decl_flags.u2.access);
31f8e4f3
MM
14879 else if (DECL_THUNK_P (t))
14880 ggc_mark_tree (ld->decl_flags.u2.vcall_offset);
4519c0a8
MM
14881 ggc_mark_tree (ld->decl_flags.context);
14882 if (TREE_CODE (t) != NAMESPACE_DECL)
14883 ggc_mark_tree (ld->decl_flags.u.template_info);
16bb3387
JM
14884 else
14885 mark_binding_level (&NAMESPACE_LEVEL (t));
4519c0a8
MM
14886 if (CAN_HAVE_FULL_LANG_DECL_P (t))
14887 {
4519c0a8
MM
14888 ggc_mark_tree (ld->befriending_classes);
14889 ggc_mark_tree (ld->saved_tree);
db9b2174 14890 ggc_mark_tree (ld->cloned_function);
596ea4e5
AS
14891 if (!DECL_OVERLOADED_OPERATOR_P (t))
14892 ggc_mark_tree (ld->u2.vtt_parm);
4519c0a8
MM
14893 if (TREE_CODE (t) == TYPE_DECL)
14894 ggc_mark_tree (ld->u.sorted_fields);
59026e79
MM
14895 else if (TREE_CODE (t) == FUNCTION_DECL
14896 && !DECL_PENDING_INLINE_P (t))
14897 mark_lang_function (DECL_SAVED_FUNCTION_DATA (t));
4519c0a8
MM
14898 }
14899 }
14900 }
14901 else if (TREE_CODE_CLASS (code) == 't')
14902 {
14903 struct lang_type *lt = TYPE_LANG_SPECIFIC (t);
14904
68642fb6 14905 if (lt && !(TREE_CODE (t) == POINTER_TYPE
87e3dbc9 14906 && TREE_CODE (TREE_TYPE (t)) == METHOD_TYPE))
4519c0a8 14907 {
c27db0df 14908 ggc_mark (lt);
911a71a7 14909 ggc_mark_tree (lt->primary_base);
4519c0a8
MM
14910 ggc_mark_tree (lt->vfields);
14911 ggc_mark_tree (lt->vbases);
14912 ggc_mark_tree (lt->tags);
4519c0a8 14913 ggc_mark_tree (lt->size);
fee7654e 14914 ggc_mark_tree (lt->pure_virtuals);
4519c0a8
MM
14915 ggc_mark_tree (lt->friend_classes);
14916 ggc_mark_tree (lt->rtti);
14917 ggc_mark_tree (lt->methods);
14918 ggc_mark_tree (lt->template_info);
87e3dbc9 14919 ggc_mark_tree (lt->befriending_classes);
4519c0a8 14920 }
87e3dbc9
MM
14921 else if (lt)
14922 /* In the case of pointer-to-member function types, the
14923 TYPE_LANG_SPECIFIC is really just a tree. */
14924 ggc_mark_tree ((tree) lt);
4519c0a8
MM
14925 }
14926}
This page took 4.244781 seconds and 5 git commands to generate.