]> gcc.gnu.org Git - gcc.git/blame - gcc/cp/decl.c
Daily bump.
[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"
35#include "flags.h"
36#include "cp-tree.h"
37#include "decl.h"
38#include "lex.h"
8d08fdba 39#include <signal.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"
091f9839 45#include "defaults.h"
4519c0a8 46#include "ggc.h"
8d08fdba 47
8d08fdba
MS
48extern int current_class_depth;
49
e1cd6e56
MS
50extern tree static_ctors, static_dtors;
51
30394414
JM
52extern tree global_namespace;
53
158991b7 54extern int (*valid_lang_attribute) PARAMS ((tree, tree, tree, tree));
62c154ed 55
47e19316 56/* Use garbage collection. */
fc6af6e3 57
47e19316 58int ggc_p = 1;
fc6af6e3 59
8d08fdba
MS
60#ifndef WCHAR_UNSIGNED
61#define WCHAR_UNSIGNED 0
62#endif
63
81b3411c
BS
64#ifndef CHAR_TYPE_SIZE
65#define CHAR_TYPE_SIZE BITS_PER_UNIT
8d08fdba
MS
66#endif
67
255512c1 68#ifndef BOOL_TYPE_SIZE
e1cd6e56 69#ifdef SLOW_BYTE_ACCESS
2ef16140
MM
70/* In the new ABI, `bool' has size and alignment `1', on all
71 platforms. */
72#define BOOL_TYPE_SIZE \
73 ((SLOW_BYTE_ACCESS && !flag_new_abi) ? (POINTER_SIZE) : (CHAR_TYPE_SIZE))
e1cd6e56 74#else
d2e5ee5c 75#define BOOL_TYPE_SIZE CHAR_TYPE_SIZE
e1cd6e56 76#endif
255512c1
JM
77#endif
78
8d08fdba
MS
79/* We let tm.h override the types used here, to handle trivial differences
80 such as the choice of unsigned int or long unsigned int for size_t.
81 When machines start needing nontrivial differences in the size type,
82 it would be best to do something here to figure out automatically
83 from other information what type to use. */
84
85#ifndef SIZE_TYPE
86#define SIZE_TYPE "long unsigned int"
87#endif
88
89#ifndef PTRDIFF_TYPE
90#define PTRDIFF_TYPE "long int"
91#endif
92
93#ifndef WCHAR_TYPE
94#define WCHAR_TYPE "int"
95#endif
96
158991b7
KG
97static tree grokparms PARAMS ((tree, int));
98static const char *redeclaration_error_message PARAMS ((tree, tree));
8d08fdba 99
158991b7 100static void push_binding_level PARAMS ((struct binding_level *, int,
49c249e1 101 int));
158991b7
KG
102static void pop_binding_level PARAMS ((void));
103static void suspend_binding_level PARAMS ((void));
104static void resume_binding_level PARAMS ((struct binding_level *));
105static struct binding_level *make_binding_level PARAMS ((void));
106static void declare_namespace_level PARAMS ((void));
107static void signal_catch PARAMS ((int)) ATTRIBUTE_NORETURN;
108static void storedecls PARAMS ((tree));
109static void require_complete_types_for_parms PARAMS ((tree));
158991b7
KG
110static int ambi_op_p PARAMS ((tree));
111static int unary_op_p PARAMS ((tree));
112static tree store_bindings PARAMS ((tree, tree));
113static tree lookup_tag_reverse PARAMS ((tree, tree));
114static tree obscure_complex_init PARAMS ((tree, tree));
115static tree maybe_build_cleanup_1 PARAMS ((tree, tree));
116static tree lookup_name_real PARAMS ((tree, int, int, int));
117static void warn_extern_redeclared_static PARAMS ((tree, tree));
118static void grok_reference_init PARAMS ((tree, tree, tree));
119static tree grokfndecl PARAMS ((tree, tree, tree, tree, int,
2c73f9f5 120 enum overload_flags, tree,
7a8f9fa9 121 tree, int, int, int, int, int, int, tree));
158991b7
KG
122static tree grokvardecl PARAMS ((tree, tree, RID_BIT_TYPE *, int, int, tree));
123static tree lookup_tag PARAMS ((enum tree_code, tree,
49c249e1
JM
124 struct binding_level *, int));
125static void set_identifier_type_value_with_scope
158991b7
KG
126 PARAMS ((tree, tree, struct binding_level *));
127static void record_builtin_type PARAMS ((enum rid, const char *, tree));
128static void record_unknown_type PARAMS ((tree, const char *));
0c11ada6 129static tree build_library_fn_1 PARAMS ((tree, tree));
158991b7
KG
130static int member_function_or_else PARAMS ((tree, tree, enum overload_flags));
131static void bad_specifiers PARAMS ((tree, const char *, int, int, int, int,
49c249e1 132 int));
158991b7
KG
133static void lang_print_error_function PARAMS ((const char *));
134static tree maybe_process_template_type_declaration PARAMS ((tree, int, struct binding_level*));
135static void check_for_uninitialized_const_var PARAMS ((tree));
136static unsigned long typename_hash PARAMS ((hash_table_key));
137static boolean typename_compare PARAMS ((hash_table_key, hash_table_key));
138static void push_binding PARAMS ((tree, tree, struct binding_level*));
139static int add_binding PARAMS ((tree, tree));
140static void pop_binding PARAMS ((tree, tree));
141static tree local_variable_p_walkfn PARAMS ((tree *, int *, void *));
142static tree find_binding PARAMS ((tree, tree));
143static tree select_decl PARAMS ((tree, int));
144static int lookup_flags PARAMS ((int, int));
145static tree qualify_lookup PARAMS ((tree, int));
146static tree record_builtin_java_type PARAMS ((const char *, int));
147static const char *tag_name PARAMS ((enum tag_types code));
148static void find_class_binding_level PARAMS ((void));
149static struct binding_level *innermost_nonclass_level PARAMS ((void));
150static void warn_about_implicit_typename_lookup PARAMS ((tree, tree));
151static int walk_namespaces_r PARAMS ((tree, walk_namespaces_fn, void *));
152static int walk_globals_r PARAMS ((tree, void *));
153static void add_decl_to_level PARAMS ((tree, struct binding_level *));
154static tree make_label_decl PARAMS ((tree, int));
155static void pop_label PARAMS ((tree));
156static void pop_labels PARAMS ((tree));
157static void maybe_deduce_size_from_array_init PARAMS ((tree, tree));
158static void layout_var_decl PARAMS ((tree));
159static void maybe_commonize_var PARAMS ((tree));
160static tree check_initializer PARAMS ((tree, tree));
161static void make_rtl_for_nonlocal_decl PARAMS ((tree, tree, const char *));
162static void push_cp_function_context PARAMS ((struct function *));
163static void pop_cp_function_context PARAMS ((struct function *));
164static void mark_binding_level PARAMS ((void *));
165static void mark_cp_function_context PARAMS ((struct function *));
166static void mark_saved_scope PARAMS ((void *));
167static void mark_lang_function PARAMS ((struct language_function *));
168static void mark_stmt_tree PARAMS ((struct stmt_tree *));
169static void save_function_data PARAMS ((tree));
170static void check_function_type PARAMS ((tree));
171static void destroy_local_var PARAMS ((tree));
172static void finish_constructor_body PARAMS ((void));
173static void finish_destructor_body PARAMS ((void));
174static tree create_array_type_for_decl PARAMS ((tree, tree, tree));
175static tree get_atexit_node PARAMS ((void));
176static tree get_dso_handle_node PARAMS ((void));
177static tree start_cleanup_fn PARAMS ((void));
178static void end_cleanup_fn PARAMS ((void));
2ce07e2d 179static tree cp_make_fname_decl PARAMS ((tree, const char *, int));
d43829f9 180static void initialize_predefined_identifiers PARAMS ((void));
3dbc07b6
MM
181static tree check_special_function_return_type
182 PARAMS ((special_function_kind, tree, tree, tree));
8d08fdba 183
69ac77ce 184#if defined (DEBUG_CP_BINDING_LEVELS)
158991b7 185static void indent PARAMS ((void));
69ac77ce
JL
186#endif
187
8d08fdba
MS
188/* Erroneous argument lists can use this *IFF* they do not modify it. */
189tree error_mark_list;
190
7f4edbcb 191/* The following symbols are subsumed in the cp_global_trees array, and
68642fb6 192 listed here individually for documentation purposes.
8d08fdba 193
7f4edbcb
BS
194 C++ extensions
195 tree wchar_decl_node;
196 tree void_zero_node;
37c46b43 197
7f4edbcb
BS
198 tree vtable_entry_type;
199 tree delta_type_node;
200#if 0
201 Old rtti stuff.
202 tree __baselist_desc_type_node;
203 tree __i_desc_type_node, __m_desc_type_node;
204 tree __t_desc_array_type, __i_desc_array_type, __m_desc_array_type;
946dc1c8 205#endif
7f4edbcb
BS
206 tree __t_desc_type_node;
207#if 0
208 tree __tp_desc_type_node;
209#endif
db1147b2 210 tree ti_desc_type_node;
1f4cb92b 211 tree bltn_desc_type_node, ptr_desc_type_node;
db1147b2
NS
212 tree ary_desc_type_node, func_desc_type_node, enum_desc_type_node;
213 tree class_desc_type_node, si_class_desc_type_node, vmi_class_desc_type_node;
214 tree ptmd_desc_type_node;
215 tree base_desc_type_node;
7f4edbcb
BS
216#if 0
217 Not needed yet? May be needed one day?
218 tree __bltn_desc_array_type, __user_desc_array_type, __class_desc_array_type;
219 tree __ptr_desc_array_type, __attr_dec_array_type, __func_desc_array_type;
220 tree __ptmf_desc_array_type, __ptmd_desc_array_type;
946dc1c8 221#endif
8d08fdba 222
7f4edbcb
BS
223 tree class_type_node, record_type_node, union_type_node, enum_type_node;
224 tree unknown_type_node;
8d08fdba 225
7f4edbcb 226 Array type `vtable_entry_type[]'
8d08fdba 227
7f4edbcb
BS
228 tree vtbl_type_node;
229 tree vtbl_ptr_type_node;
8d08fdba 230
2854d3c6 231 Namespaces,
8d08fdba 232
7f4edbcb 233 tree std_node;
2854d3c6 234 tree abi_node;
8d08fdba 235
7f4edbcb
BS
236 A FUNCTION_DECL which can call `abort'. Not necessarily the
237 one that the user will declare, but sufficient to be called
238 by routines that want to abort the program.
8d08fdba 239
7f4edbcb 240 tree abort_fndecl;
8d08fdba 241
7f4edbcb 242 The FUNCTION_DECL for the default `::operator delete'.
2986ae00 243
7f4edbcb 244 tree global_delete_fndecl;
8d08fdba 245
7f4edbcb 246 Used by RTTI
db1147b2
NS
247 tree type_info_type_node, tinfo_decl_id, tinfo_decl_type;
248 tree tinfo_var_id;
8d08fdba 249
7f4edbcb 250*/
8d08fdba 251
7f4edbcb 252tree cp_global_trees[CPTI_MAX];
8d08fdba 253
2c73f9f5 254/* Indicates that there is a type value in some namespace, although
7f4edbcb 255 that is not necessarily in scope at the moment. */
2c73f9f5
ML
256
257static tree global_type_node;
258
7f4edbcb 259/* Namespace std. */
0dde4175 260int in_std;
6633d636 261
3e3f722c
ML
262/* Expect only namespace names now. */
263static int only_namespace_names;
264
8d08fdba
MS
265/* If original DECL_RESULT of current function was a register,
266 but due to being an addressable named return value, would up
267 on the stack, this variable holds the named return value's
268 original location. */
8d08fdba 269
4519c0a8 270#define original_result_rtx cp_function_chain->x_result_rtx
8d08fdba 271
e349ee73
MS
272struct named_label_list
273{
274 struct binding_level *binding_level;
275 tree names_in_scope;
276 tree label_decl;
9c0758dd 277 const char *filename_o_goto;
e349ee73
MS
278 int lineno_o_goto;
279 struct named_label_list *next;
280};
281
ed5511d9
MM
282/* Used only for jumps to as-yet undefined labels, since jumps to
283 defined labels can have their validity checked by stmt.c. */
8d08fdba 284
ed5511d9 285#define named_label_uses cp_function_chain->x_named_label_uses
8d08fdba
MS
286
287/* A list of objects which have constructors or destructors
288 which reside in the global scope. The decl is stored in
289 the TREE_VALUE slot and the initializer is stored
290 in the TREE_PURPOSE slot. */
291tree static_aggregates;
292
8d08fdba
MS
293/* -- end of C++ */
294
81b3411c 295/* A node for the integer constants 2, and 3. */
d11ad92e 296
81b3411c 297tree integer_two_node, integer_three_node;
8d08fdba 298
8d08fdba
MS
299/* Parsing a function declarator leaves here a chain of structure
300 and enum types declared in the parmlist. */
301
302static tree last_function_parm_tags;
303
8d08fdba 304/* Similar, for last_function_parm_tags. */
9cd64686 305tree last_function_parms;
8d08fdba
MS
306static tree current_function_parm_tags;
307
308/* A list (chain of TREE_LIST nodes) of all LABEL_DECLs in the function
309 that have names. Here so we can clear out their names' definitions
acef433b
MM
310 at the end of the function. The TREE_VALUE is a LABEL_DECL; the
311 TREE_PURPOSE is the previous binding of the label. */
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
83309c26 322/* Nonzero means use the ISO C99 dialect of C. */
68642fb6 323
83309c26 324int flag_isoc99;
68642fb6 325
8d08fdba
MS
326/* Nonzero means give `double' the same size as `float'. */
327
328extern int flag_short_double;
329
330/* Nonzero means don't recognize any builtin functions. */
331
332extern int flag_no_builtin;
333
00595019
MS
334/* Nonzero means don't recognize the non-ANSI builtin functions.
335 -ansi sets this. */
336
337extern int flag_no_nonansi_builtin;
338
8d08fdba 339/* Nonzero if we want to support huge (> 2^(sizeof(short)*8-1) bytes)
e92cc029 340 objects. */
8d08fdba
MS
341extern int flag_huge_objects;
342
343/* Nonzero if we want to conserve space in the .o files. We do this
344 by putting uninitialized data and runtime initialized data into
ddd5a7c1 345 .common instead of .data at the expense of not flagging multiple
8d08fdba
MS
346 definitions. */
347extern int flag_conserve_space;
8d08fdba 348\f
51c184be 349/* C and C++ flags are in decl2.c. */
8d08fdba 350
51c184be 351/* Flag used when debugging spew.c */
8d08fdba
MS
352
353extern int spew_debug;
354
e92cc029
MS
355/* A expression of value 0 with the same precision as a sizetype
356 node, but signed. */
357tree signed_size_zero_node;
358
0c8feefe
MM
359/* The name of the anonymous namespace, throughout this translation
360 unit. */
361tree anonymous_namespace_name;
362
8d08fdba
MS
363\f
364/* For each binding contour we allocate a binding_level structure
e92cc029
MS
365 which records the names defined in that contour.
366 Contours include:
367 0) the global one
368 1) one for each function definition,
369 where internal declarations of the parameters appear.
370 2) one for each compound statement,
371 to record its declarations.
372
373 The current meaning of a name can be found by searching the levels
374 from the current one out to the global one.
375
376 Off to the side, may be the class_binding_level. This exists only
377 to catch class-local declarations. It is otherwise nonexistent.
378
379 Also there may be binding levels that catch cleanups that must be
d8f8dca1
MM
380 run when exceptions occur. Thus, to see whether a name is bound in
381 the current scope, it is not enough to look in the
382 CURRENT_BINDING_LEVEL. You should use lookup_name_current_level
383 instead. */
8d08fdba
MS
384
385/* Note that the information in the `names' component of the global contour
386 is duplicated in the IDENTIFIER_GLOBAL_VALUEs of all identifiers. */
387
388struct binding_level
389 {
390 /* A chain of _DECL nodes for all variables, constants, functions,
e92cc029 391 and typedef types. These are in the reverse of the order
f181d4ae
MM
392 supplied. There may be OVERLOADs on this list, too, but they
393 are wrapped in TREE_LISTs; the TREE_VALUE is the OVERLOAD. */
8d08fdba
MS
394 tree names;
395
e92cc029
MS
396 /* A list of structure, union and enum definitions, for looking up
397 tag names.
398 It is a chain of TREE_LIST nodes, each of whose TREE_PURPOSE is a name,
399 or NULL_TREE; and whose TREE_VALUE is a RECORD_TYPE, UNION_TYPE,
400 or ENUMERAL_TYPE node.
401
402 C++: the TREE_VALUE nodes can be simple types for
403 component_bindings. */
8d08fdba
MS
404 tree tags;
405
2c73f9f5
ML
406 /* A list of USING_DECL nodes. */
407 tree usings;
408
ea9635c7
ML
409 /* A list of used namespaces. PURPOSE is the namespace,
410 VALUE the common ancestor with this binding_level's namespace. */
411 tree using_directives;
412
f181d4ae
MM
413 /* If this binding level is the binding level for a class, then
414 class_shadowed is a TREE_LIST. The TREE_PURPOSE of each node
415 is the name of an entity bound in the class; the TREE_VALUE is
416 the IDENTIFIER_CLASS_VALUE before we entered the class. Thus,
417 when leaving class scope, we can restore the
d8f8dca1
MM
418 IDENTIFIER_CLASS_VALUE by walking this list. The TREE_TYPE is
419 the DECL bound by this name in the class. */
8d08fdba
MS
420 tree class_shadowed;
421
f181d4ae
MM
422 /* Similar to class_shadowed, but for IDENTIFIER_TYPE_VALUE, and
423 is used for all binding levels. */
8d08fdba
MS
424 tree type_shadowed;
425
acef433b
MM
426 /* A TREE_LIST. Each TREE_VALUE is the LABEL_DECL for a local
427 label in this scope. The TREE_PURPOSE is the previous value of
428 the IDENTIFIER_LABEL VALUE. */
429 tree shadowed_labels;
430
8d08fdba
MS
431 /* For each level (except not the global one),
432 a chain of BLOCK nodes for all the levels
433 that were entered and exited one level down. */
434 tree blocks;
435
436 /* The BLOCK node for this level, if one has been preallocated.
437 If 0, the BLOCK is allocated (if needed) when the level is popped. */
438 tree this_block;
439
70adf8a9
JM
440 /* The _TYPE node for this level, if parm_flag == 2. */
441 tree this_class;
442
8d08fdba
MS
443 /* The binding level which this one is contained in (inherits from). */
444 struct binding_level *level_chain;
445
f30432d7 446 /* List of decls in `names' that have incomplete
8d08fdba 447 structure or union types. */
f30432d7 448 tree incomplete;
8d08fdba 449
8d6e462b 450 /* List of VAR_DECLS saved from a previous for statement.
cab1f180 451 These would be dead in ISO-conforming code, but might
f181d4ae
MM
452 be referenced in ARM-era code. These are stored in a
453 TREE_LIST; the TREE_VALUE is the actual declaration. */
8d6e462b
PB
454 tree dead_vars_from_for;
455
8d08fdba 456 /* 1 for the level that holds the parameters of a function.
74b846e0
MM
457 2 for the level that holds a class declaration. */
458 unsigned parm_flag : 2;
8d08fdba
MS
459
460 /* 1 means make a BLOCK for this level regardless of all else.
461 2 for temporary binding contours created by the compiler. */
74b846e0 462 unsigned keep : 2;
8d08fdba
MS
463
464 /* Nonzero if this level "doesn't exist" for tags. */
465 unsigned tag_transparent : 1;
466
467 /* Nonzero if this level can safely have additional
468 cleanup-needing variables added to it. */
469 unsigned more_cleanups_ok : 1;
470 unsigned have_cleanups : 1;
471
74b846e0 472 /* Nonzero if this scope is for storing the decls for template
5566b478
MS
473 parameters and generic decls; these decls will be discarded and
474 replaced with a TEMPLATE_DECL. */
74b846e0
MM
475 unsigned template_parms_p : 1;
476
477 /* Nonzero if this scope corresponds to the `<>' in a
478 `template <>' clause. Whenever this flag is set,
479 TEMPLATE_PARMS_P will be set as well. */
480 unsigned template_spec_p : 1;
8d08fdba 481
a9aedbc2
MS
482 /* This is set for a namespace binding level. */
483 unsigned namespace_p : 1;
484
2ee887f2 485 /* True if this level is that of a for-statement where we need to
cab1f180 486 worry about ambiguous (ARM or ISO) scope rules. */
8d6e462b
PB
487 unsigned is_for_scope : 1;
488
227cf171
JM
489 /* True if this level corresponds to an EH region, as for a try block. */
490 unsigned eh_region : 1;
491
74b846e0 492 /* Four bits left for this word. */
8d08fdba
MS
493
494#if defined(DEBUG_CP_BINDING_LEVELS)
495 /* Binding depth at which this level began. */
496 unsigned binding_depth;
497#endif /* defined(DEBUG_CP_BINDING_LEVELS) */
498 };
499
500#define NULL_BINDING_LEVEL ((struct binding_level *) NULL)
68642fb6 501
8f032717 502/* The binding level currently in effect. */
8d08fdba 503
a8f73d4b 504#define current_binding_level \
01d939e8 505 (cfun \
a8f73d4b
MM
506 ? cp_function_chain->bindings \
507 : scope_chain->bindings)
8d08fdba
MS
508
509/* The binding level of the current class, if any. */
510
9cd64686 511#define class_binding_level scope_chain->class_bindings
8d08fdba 512
8d08fdba
MS
513/* A chain of binding_level structures awaiting reuse. */
514
515static struct binding_level *free_binding_level;
516
517/* The outermost binding level, for names of file scope.
518 This is created when the compiler is started and exists
519 through the entire run. */
520
521static struct binding_level *global_binding_level;
522
8d08fdba
MS
523/* Nonzero means unconditionally make a BLOCK for the next level pushed. */
524
525static int keep_next_level_flag;
526
527#if defined(DEBUG_CP_BINDING_LEVELS)
528static int binding_depth = 0;
529static int is_class_level = 0;
530
531static void
532indent ()
533{
534 register unsigned i;
535
536 for (i = 0; i < binding_depth*2; i++)
537 putc (' ', stderr);
538}
539#endif /* defined(DEBUG_CP_BINDING_LEVELS) */
540
158991b7 541static tree pushdecl_with_scope PARAMS ((tree, struct binding_level *));
8d08fdba
MS
542
543static void
544push_binding_level (newlevel, tag_transparent, keep)
545 struct binding_level *newlevel;
546 int tag_transparent, keep;
547{
548 /* Add this level to the front of the chain (stack) of levels that
549 are active. */
acef433b 550 bzero ((char*) newlevel, sizeof (struct binding_level));
8f032717 551 newlevel->level_chain = current_binding_level;
8d08fdba
MS
552 current_binding_level = newlevel;
553 newlevel->tag_transparent = tag_transparent;
554 newlevel->more_cleanups_ok = 1;
227cf171
JM
555
556 /* We are called before expand_start_bindings, but after
557 expand_eh_region_start for a try block; so we check this now,
558 before the EH block is covered up. */
559 newlevel->eh_region = is_eh_region ();
560
8d08fdba
MS
561 newlevel->keep = keep;
562#if defined(DEBUG_CP_BINDING_LEVELS)
563 newlevel->binding_depth = binding_depth;
564 indent ();
565 fprintf (stderr, "push %s level 0x%08x line %d\n",
566 (is_class_level) ? "class" : "block", newlevel, lineno);
567 is_class_level = 0;
568 binding_depth++;
569#endif /* defined(DEBUG_CP_BINDING_LEVELS) */
570}
571
8f032717
MM
572/* Find the innermost enclosing class scope, and reset
573 CLASS_BINDING_LEVEL appropriately. */
574
575static void
576find_class_binding_level ()
577{
578 struct binding_level *level = current_binding_level;
579
580 while (level && level->parm_flag != 2)
581 level = level->level_chain;
582 if (level && level->parm_flag == 2)
583 class_binding_level = level;
584 else
585 class_binding_level = 0;
586}
587
8d08fdba
MS
588static void
589pop_binding_level ()
590{
8d08fdba
MS
591 if (global_binding_level)
592 {
2c73f9f5 593 /* Cannot pop a level, if there are none left to pop. */
8d08fdba
MS
594 if (current_binding_level == global_binding_level)
595 my_friendly_abort (123);
596 }
597 /* Pop the current level, and free the structure for reuse. */
598#if defined(DEBUG_CP_BINDING_LEVELS)
599 binding_depth--;
600 indent ();
601 fprintf (stderr, "pop %s level 0x%08x line %d\n",
602 (is_class_level) ? "class" : "block",
603 current_binding_level, lineno);
604 if (is_class_level != (current_binding_level == class_binding_level))
9e9ff709
MS
605 {
606 indent ();
607 fprintf (stderr, "XXX is_class_level != (current_binding_level == class_binding_level)\n");
608 }
8d08fdba
MS
609 is_class_level = 0;
610#endif /* defined(DEBUG_CP_BINDING_LEVELS) */
611 {
612 register struct binding_level *level = current_binding_level;
613 current_binding_level = current_binding_level->level_chain;
614 level->level_chain = free_binding_level;
615#if 0 /* defined(DEBUG_CP_BINDING_LEVELS) */
616 if (level->binding_depth != binding_depth)
617 abort ();
618#endif /* defined(DEBUG_CP_BINDING_LEVELS) */
8f032717
MM
619 free_binding_level = level;
620 find_class_binding_level ();
8d08fdba
MS
621 }
622}
a9aedbc2
MS
623
624static void
625suspend_binding_level ()
626{
627 if (class_binding_level)
628 current_binding_level = class_binding_level;
629
630 if (global_binding_level)
631 {
2c73f9f5 632 /* Cannot suspend a level, if there are none left to suspend. */
a9aedbc2
MS
633 if (current_binding_level == global_binding_level)
634 my_friendly_abort (123);
635 }
636 /* Suspend the current level. */
637#if defined(DEBUG_CP_BINDING_LEVELS)
638 binding_depth--;
639 indent ();
640 fprintf (stderr, "suspend %s level 0x%08x line %d\n",
641 (is_class_level) ? "class" : "block",
642 current_binding_level, lineno);
643 if (is_class_level != (current_binding_level == class_binding_level))
9e9ff709
MS
644 {
645 indent ();
646 fprintf (stderr, "XXX is_class_level != (current_binding_level == class_binding_level)\n");
647 }
a9aedbc2
MS
648 is_class_level = 0;
649#endif /* defined(DEBUG_CP_BINDING_LEVELS) */
8f032717
MM
650 current_binding_level = current_binding_level->level_chain;
651 find_class_binding_level ();
a9aedbc2
MS
652}
653
824b9a4c 654static void
a9aedbc2
MS
655resume_binding_level (b)
656 struct binding_level *b;
657{
2c73f9f5
ML
658 /* Resuming binding levels is meant only for namespaces,
659 and those cannot nest into classes. */
660 my_friendly_assert(!class_binding_level, 386);
661 /* Also, resuming a non-directly nested namespace is a no-no. */
662 my_friendly_assert(b->level_chain == current_binding_level, 386);
a9aedbc2
MS
663 current_binding_level = b;
664#if defined(DEBUG_CP_BINDING_LEVELS)
665 b->binding_depth = binding_depth;
666 indent ();
667 fprintf (stderr, "resume %s level 0x%08x line %d\n",
668 (is_class_level) ? "class" : "block", b, lineno);
669 is_class_level = 0;
670 binding_depth++;
671#endif /* defined(DEBUG_CP_BINDING_LEVELS) */
672}
8d08fdba 673\f
cffa8729
MS
674/* Create a new `struct binding_level'. */
675
676static
677struct binding_level *
678make_binding_level ()
679{
680 /* NOSTRICT */
681 return (struct binding_level *) xmalloc (sizeof (struct binding_level));
682}
683
8d08fdba
MS
684/* Nonzero if we are currently in the global binding level. */
685
686int
687global_bindings_p ()
688{
689 return current_binding_level == global_binding_level;
690}
691
8f032717
MM
692/* Return the innermost binding level that is not for a class scope. */
693
694static struct binding_level *
695innermost_nonclass_level ()
696{
697 struct binding_level *b;
698
699 b = current_binding_level;
700 while (b->parm_flag == 2)
701 b = b->level_chain;
702
703 return b;
704}
705
a9aedbc2
MS
706/* Nonzero if we are currently in a toplevel binding level. This
707 means either the global binding level or a namespace in a toplevel
8f032717 708 binding level. Since there are no non-toplevel namespace levels,
74b846e0
MM
709 this really means any namespace or template parameter level. We
710 also include a class whose context is toplevel. */
a9aedbc2
MS
711
712int
713toplevel_bindings_p ()
714{
8f032717
MM
715 struct binding_level *b = innermost_nonclass_level ();
716
74b846e0 717 return b->namespace_p || b->template_parms_p;
a9aedbc2
MS
718}
719
8f032717
MM
720/* Nonzero if this is a namespace scope, or if we are defining a class
721 which is itself at namespace scope, or whose enclosing class is
722 such a class, etc. */
a9aedbc2 723
7bdbfa05 724int
a9aedbc2
MS
725namespace_bindings_p ()
726{
8f032717
MM
727 struct binding_level *b = innermost_nonclass_level ();
728
729 return b->namespace_p;
a9aedbc2
MS
730}
731
f1dedc31
MM
732/* If KEEP is non-zero, make a BLOCK node for the next binding level,
733 unconditionally. Otherwise, use the normal logic to decide whether
734 or not to create a BLOCK. */
735
8d08fdba 736void
f1dedc31
MM
737keep_next_level (keep)
738 int keep;
8d08fdba 739{
f1dedc31 740 keep_next_level_flag = keep;
8d08fdba
MS
741}
742
743/* Nonzero if the current level needs to have a BLOCK made. */
744
745int
746kept_level_p ()
747{
748 return (current_binding_level->blocks != NULL_TREE
749 || current_binding_level->keep
750 || current_binding_level->names != NULL_TREE
751 || (current_binding_level->tags != NULL_TREE
752 && !current_binding_level->tag_transparent));
753}
754
824b9a4c 755static void
a9aedbc2
MS
756declare_namespace_level ()
757{
758 current_binding_level->namespace_p = 1;
759}
760
74b846e0
MM
761/* Returns non-zero if this scope was created to store template
762 parameters. */
763
8d08fdba 764int
74b846e0 765template_parm_scope_p ()
8d08fdba 766{
74b846e0
MM
767 return current_binding_level->template_parms_p;
768}
769
770/* Returns the kind of template specialization we are currently
771 processing, given that it's declaration contained N_CLASS_SCOPES
772 explicit scope qualifications. */
773
774tmpl_spec_kind
775current_tmpl_spec_kind (n_class_scopes)
776 int n_class_scopes;
777{
778 int n_template_parm_scopes = 0;
779 int seen_specialization_p = 0;
780 int innermost_specialization_p = 0;
781 struct binding_level *b;
782
783 /* Scan through the template parameter scopes. */
784 for (b = current_binding_level; b->template_parms_p; b = b->level_chain)
785 {
786 /* If we see a specialization scope inside a parameter scope,
787 then something is wrong. That corresponds to a declaration
788 like:
789
790 template <class T> template <> ...
791
792 which is always illegal since [temp.expl.spec] forbids the
793 specialization of a class member template if the enclosing
794 class templates are not explicitly specialized as well. */
795 if (b->template_spec_p)
796 {
797 if (n_template_parm_scopes == 0)
798 innermost_specialization_p = 1;
799 else
800 seen_specialization_p = 1;
801 }
802 else if (seen_specialization_p == 1)
803 return tsk_invalid_member_spec;
804
805 ++n_template_parm_scopes;
806 }
807
808 /* Handle explicit instantiations. */
809 if (processing_explicit_instantiation)
810 {
811 if (n_template_parm_scopes != 0)
812 /* We've seen a template parameter list during an explicit
813 instantiation. For example:
814
815 template <class T> template void f(int);
816
817 This is erroneous. */
818 return tsk_invalid_expl_inst;
819 else
820 return tsk_expl_inst;
821 }
822
823 if (n_template_parm_scopes < n_class_scopes)
824 /* We've not seen enough template headers to match all the
825 specialized classes present. For example:
826
827 template <class T> void R<T>::S<T>::f(int);
828
829 This is illegal; there needs to be one set of template
830 parameters for each class. */
831 return tsk_insufficient_parms;
832 else if (n_template_parm_scopes == n_class_scopes)
833 /* We're processing a non-template declaration (even though it may
834 be a member of a template class.) For example:
835
836 template <class T> void S<T>::f(int);
837
838 The `class T' maches the `S<T>', leaving no template headers
839 corresponding to the `f'. */
840 return tsk_none;
841 else if (n_template_parm_scopes > n_class_scopes + 1)
842 /* We've got too many template headers. For example:
843
844 template <> template <class T> void f (T);
845
846 There need to be more enclosing classes. */
847 return tsk_excessive_parms;
848 else
849 /* This must be a template. It's of the form:
850
851 template <class T> template <class U> void S<T>::f(U);
852
853 This is a specialization if the innermost level was a
854 specialization; otherwise it's just a definition of the
855 template. */
856 return innermost_specialization_p ? tsk_expl_spec : tsk_template;
8d08fdba
MS
857}
858
859void
860set_class_shadows (shadows)
861 tree shadows;
862{
863 class_binding_level->class_shadowed = shadows;
864}
865
866/* Enter a new binding level.
867 If TAG_TRANSPARENT is nonzero, do so only for the name space of variables,
868 not for that of tags. */
869
870void
871pushlevel (tag_transparent)
872 int tag_transparent;
873{
b35d4555 874 struct binding_level *newlevel;
8d08fdba 875
01d939e8 876 if (cfun && !doing_semantic_analysis_p ())
b35d4555 877 return;
8d08fdba 878
b35d4555 879 /* Reuse or create a struct for this binding level. */
8d08fdba
MS
880#if defined(DEBUG_CP_BINDING_LEVELS)
881 if (0)
882#else /* !defined(DEBUG_CP_BINDING_LEVELS) */
883 if (free_binding_level)
884#endif /* !defined(DEBUG_CP_BINDING_LEVELS) */
885 {
886 newlevel = free_binding_level;
887 free_binding_level = free_binding_level->level_chain;
888 }
889 else
acef433b 890 newlevel = make_binding_level ();
cffa8729 891
8d08fdba
MS
892 push_binding_level (newlevel, tag_transparent, keep_next_level_flag);
893 GNU_xref_start_scope ((HOST_WIDE_INT) newlevel);
894 keep_next_level_flag = 0;
895}
896
74b846e0
MM
897/* Enter a new scope. The KIND indicates what kind of scope is being
898 created. */
899
900void
901begin_scope (sk)
902 scope_kind sk;
903{
904 pushlevel (0);
905
906 switch (sk)
907 {
908 case sk_template_spec:
909 current_binding_level->template_spec_p = 1;
910 /* Fall through. */
911
912 case sk_template_parms:
913 current_binding_level->template_parms_p = 1;
914 break;
915
916 default:
917 my_friendly_abort (20000309);
918 }
919}
920
921/* Exit the current scope. */
922
923void
924finish_scope ()
925{
926 poplevel (0, 0, 0);
927}
928
5566b478 929void
8d6e462b
PB
930note_level_for_for ()
931{
932 current_binding_level->is_for_scope = 1;
933}
934
f181d4ae
MM
935/* For a binding between a name and an entity at a block scope,
936 this is the `struct binding_level' for the block. */
937#define BINDING_LEVEL(NODE) \
c7a932b1 938 (((struct tree_binding*)NODE)->scope.level)
f181d4ae 939
f181d4ae
MM
940/* Make DECL the innermost binding for ID. The LEVEL is the binding
941 level at which this declaration is being bound. */
942
943static void
944push_binding (id, decl, level)
945 tree id;
946 tree decl;
947 struct binding_level* level;
948{
949 tree binding;
950
87e3dbc9 951 binding = make_node (CPLUS_BINDING);
f181d4ae
MM
952
953 /* Now, fill in the binding information. */
954 BINDING_VALUE (binding) = decl;
d8f8dca1 955 BINDING_TYPE (binding) = NULL_TREE;
f181d4ae 956 BINDING_LEVEL (binding) = level;
8f032717 957 INHERITED_VALUE_BINDING_P (binding) = 0;
f181d4ae 958 LOCAL_BINDING_P (binding) = (level != class_binding_level);
87e3dbc9 959 BINDING_HAS_LEVEL_P (binding) = 1;
f181d4ae 960
c45df9c1 961 /* And put it on the front of the list of bindings for ID. */
f181d4ae
MM
962 TREE_CHAIN (binding) = IDENTIFIER_BINDING (id);
963 IDENTIFIER_BINDING (id) = binding;
964}
965
d8f8dca1
MM
966/* ID is already bound in the current scope. But, DECL is an
967 additional binding for ID in the same scope. This is the `struct
968 stat' hack whereby a non-typedef class-name or enum-name can be
969 bound at the same level as some other kind of entity. It's the
970 responsibility of the caller to check that inserting this name is
8f032717
MM
971 legal here. Returns nonzero if the new binding was successful. */
972static int
d8f8dca1
MM
973add_binding (id, decl)
974 tree id;
975 tree decl;
976{
977 tree binding = IDENTIFIER_BINDING (id);
8f032717 978 int ok = 1;
d8f8dca1
MM
979
980 if (TREE_CODE (decl) == TYPE_DECL && DECL_ARTIFICIAL (decl))
981 /* The new name is the type name. */
982 BINDING_TYPE (binding) = decl;
8f032717
MM
983 else if (!BINDING_VALUE (binding))
984 /* This situation arises when push_class_level_binding moves an
985 inherited type-binding out of the way to make room for a new
986 value binding. */
987 BINDING_VALUE (binding) = decl;
988 else if (TREE_CODE (BINDING_VALUE (binding)) == TYPE_DECL
989 && DECL_ARTIFICIAL (BINDING_VALUE (binding)))
990 {
991 /* The old binding was a type name. It was placed in
992 BINDING_VALUE because it was thought, at the point it was
993 declared, to be the only entity with such a name. Move the
994 type name into the type slot; it is now hidden by the new
995 binding. */
d8f8dca1
MM
996 BINDING_TYPE (binding) = BINDING_VALUE (binding);
997 BINDING_VALUE (binding) = decl;
8f032717 998 INHERITED_VALUE_BINDING_P (binding) = 0;
d8f8dca1 999 }
263505af
MM
1000 else if (TREE_CODE (BINDING_VALUE (binding)) == TYPE_DECL
1001 && TREE_CODE (decl) == TYPE_DECL
1002 && DECL_NAME (decl) == DECL_NAME (BINDING_VALUE (binding))
1003 && same_type_p (TREE_TYPE (decl),
1004 TREE_TYPE (BINDING_VALUE (binding))))
1005 /* We have two typedef-names, both naming the same type to have
1006 the same name. This is OK because of:
1007
1008 [dcl.typedef]
1009
1010 In a given scope, a typedef specifier can be used to redefine
1011 the name of any type declared in that scope to refer to the
1012 type to which it already refers. */
1013 ok = 0;
8f032717
MM
1014 else
1015 {
1016 cp_error ("declaration of `%#D'", decl);
1017 cp_error_at ("conflicts with previous declaration `%#D'",
1018 BINDING_VALUE (binding));
1019 ok = 0;
1020 }
1021
1022 return ok;
d8f8dca1
MM
1023}
1024
cfe507be
MM
1025/* Add DECL to the list of things declared in B. */
1026
1027static void
1028add_decl_to_level (decl, b)
1029 tree decl;
1030 struct binding_level *b;
1031{
cfe507be
MM
1032 /* We build up the list in reverse order, and reverse it later if
1033 necessary. */
1034 TREE_CHAIN (decl) = b->names;
1035 b->names = decl;
1036}
1037
1038/* Bind DECL to ID in the current_binding_level, assumed to be a local
1039 binding level. If PUSH_USING is set in FLAGS, we know that DECL
1040 doesn't really belong to this binding level, that it got here
1041 through a using-declaration. */
f181d4ae
MM
1042
1043void
0034cf72 1044push_local_binding (id, decl, flags)
f181d4ae
MM
1045 tree id;
1046 tree decl;
0034cf72 1047 int flags;
f181d4ae 1048{
8f032717
MM
1049 struct binding_level *b;
1050
1051 /* Skip over any local classes. This makes sense if we call
1052 push_local_binding with a friend decl of a local class. */
1053 b = current_binding_level;
1054 while (b->parm_flag == 2)
1055 b = b->level_chain;
f181d4ae 1056
d8f8dca1 1057 if (lookup_name_current_level (id))
8f032717
MM
1058 {
1059 /* Supplement the existing binding. */
1060 if (!add_binding (id, decl))
1061 /* It didn't work. Something else must be bound at this
1062 level. Do not add DECL to the list of things to pop
1063 later. */
1064 return;
1065 }
d8f8dca1
MM
1066 else
1067 /* Create a new binding. */
8f032717 1068 push_binding (id, decl, b);
f181d4ae 1069
0034cf72 1070 if (TREE_CODE (decl) == OVERLOAD || (flags & PUSH_USING))
a06d48ef
JM
1071 /* We must put the OVERLOAD into a TREE_LIST since the
1072 TREE_CHAIN of an OVERLOAD is already used. Similarly for
1073 decls that got here through a using-declaration. */
1074 decl = build_tree_list (NULL_TREE, decl);
1075
f181d4ae
MM
1076 /* And put DECL on the list of things declared by the current
1077 binding level. */
cfe507be 1078 add_decl_to_level (decl, b);
f181d4ae
MM
1079}
1080
8f032717
MM
1081/* Bind DECL to ID in the class_binding_level. Returns nonzero if the
1082 binding was successful. */
f181d4ae 1083
8f032717 1084int
f181d4ae
MM
1085push_class_binding (id, decl)
1086 tree id;
1087 tree decl;
1088{
8f032717
MM
1089 int result = 1;
1090 tree binding = IDENTIFIER_BINDING (id);
1091 tree context;
1092
1093 /* Note that we declared this value so that we can issue an error if
1094 this an illegal redeclaration of a name already used for some
1095 other purpose. */
1096 note_name_declared_in_class (id, decl);
1097
1098 if (binding && BINDING_LEVEL (binding) == class_binding_level)
d8f8dca1 1099 /* Supplement the existing binding. */
8f032717 1100 result = add_binding (id, decl);
d8f8dca1
MM
1101 else
1102 /* Create a new binding. */
1103 push_binding (id, decl, class_binding_level);
1104
1105 /* Update the IDENTIFIER_CLASS_VALUE for this ID to be the
1106 class-level declaration. Note that we do not use DECL here
1107 because of the possibility of the `struct stat' hack; if DECL is
1108 a class-name or enum-name we might prefer a field-name, or some
1109 such. */
1110 IDENTIFIER_CLASS_VALUE (id) = BINDING_VALUE (IDENTIFIER_BINDING (id));
8f032717
MM
1111
1112 /* If this is a binding from a base class, mark it as such. */
1113 binding = IDENTIFIER_BINDING (id);
1114 if (BINDING_VALUE (binding) == decl && TREE_CODE (decl) != TREE_LIST)
1115 {
280f9385
MM
1116 /* Any implicit typename must be from a base-class. The
1117 context for an implicit typename declaration is always
1118 the derived class in which the lookup was done, so the checks
1119 based on the context of DECL below will not trigger. */
83233dca 1120 if (IMPLICIT_TYPENAME_TYPE_DECL_P (decl))
280f9385 1121 INHERITED_VALUE_BINDING_P (binding) = 1;
8f032717
MM
1122 else
1123 {
280f9385 1124 if (TREE_CODE (decl) == OVERLOAD)
4f1c5b7d 1125 context = CP_DECL_CONTEXT (OVL_CURRENT (decl));
280f9385
MM
1126 else
1127 {
2f939d94 1128 my_friendly_assert (DECL_P (decl), 0);
4f1c5b7d 1129 context = CP_DECL_CONTEXT (decl);
280f9385 1130 }
8f032717 1131
280f9385
MM
1132 if (is_properly_derived_from (current_class_type, context))
1133 INHERITED_VALUE_BINDING_P (binding) = 1;
1134 else
1135 INHERITED_VALUE_BINDING_P (binding) = 0;
1136 }
8f032717
MM
1137 }
1138 else if (BINDING_VALUE (binding) == decl)
1139 /* We only encounter a TREE_LIST when push_class_decls detects an
1140 ambiguity. Such an ambiguity can be overridden by a definition
1141 in this class. */
1142 INHERITED_VALUE_BINDING_P (binding) = 1;
1143
1144 return result;
f181d4ae
MM
1145}
1146
d8f8dca1
MM
1147/* Remove the binding for DECL which should be the innermost binding
1148 for ID. */
f181d4ae 1149
68642fb6
UD
1150static void
1151pop_binding (id, decl)
f181d4ae 1152 tree id;
d8f8dca1 1153 tree decl;
f181d4ae
MM
1154{
1155 tree binding;
68642fb6 1156
f181d4ae
MM
1157 if (id == NULL_TREE)
1158 /* It's easiest to write the loops that call this function without
1159 checking whether or not the entities involved have names. We
1160 get here for such an entity. */
1161 return;
1162
d8f8dca1 1163 /* Get the innermost binding for ID. */
f181d4ae 1164 binding = IDENTIFIER_BINDING (id);
f181d4ae 1165
d8f8dca1
MM
1166 /* The name should be bound. */
1167 my_friendly_assert (binding != NULL_TREE, 0);
1168
1169 /* The DECL will be either the ordinary binding or the type
1170 binding for this identifier. Remove that binding. */
1171 if (BINDING_VALUE (binding) == decl)
1172 BINDING_VALUE (binding) = NULL_TREE;
1173 else if (BINDING_TYPE (binding) == decl)
1174 BINDING_TYPE (binding) = NULL_TREE;
1175 else
1176 my_friendly_abort (0);
1177
1178 if (!BINDING_VALUE (binding) && !BINDING_TYPE (binding))
87e3dbc9
MM
1179 /* We're completely done with the innermost binding for this
1180 identifier. Unhook it from the list of bindings. */
1181 IDENTIFIER_BINDING (id) = TREE_CHAIN (binding);
f181d4ae
MM
1182}
1183
acef433b
MM
1184/* When a label goes out of scope, check to see if that label was used
1185 in a valid manner, and issue any appropriate warnings or errors. */
1186
1187static void
1188pop_label (link)
1189 tree link;
1190{
1191 tree label = TREE_VALUE (link);
1192
88848bde 1193 if (!processing_template_decl && doing_semantic_analysis_p ())
acef433b 1194 {
88848bde
MM
1195 if (DECL_INITIAL (label) == NULL_TREE)
1196 {
1197 cp_error_at ("label `%D' used but not defined", label);
1198 /* Avoid crashing later. */
1199 define_label (input_filename, 1, DECL_NAME (label));
1200 }
1201 else if (warn_unused && !TREE_USED (label))
1202 cp_warning_at ("label `%D' defined but not used", label);
acef433b 1203 }
acef433b
MM
1204
1205 SET_IDENTIFIER_LABEL_VALUE (DECL_NAME (label), TREE_PURPOSE (link));
1206}
1207
1208/* At the end of a function, all labels declared within the fucntion
68642fb6 1209 go out of scope. BLOCK is the top-level block for the
acef433b
MM
1210 function. */
1211
1212static void
1213pop_labels (block)
1214 tree block;
1215{
1216 tree link;
1217
1218 /* Clear out the definitions of all label names, since their scopes
1219 end here. */
1220 for (link = named_labels; link; link = TREE_CHAIN (link))
1221 {
1222 pop_label (link);
1223 /* Put the labels into the "variables" of the top-level block,
1224 so debugger can see them. */
1225 TREE_CHAIN (TREE_VALUE (link)) = BLOCK_VARS (block);
1226 BLOCK_VARS (block) = TREE_VALUE (link);
1227 }
1228
1229 named_labels = NULL_TREE;
1230}
1231
8d08fdba
MS
1232/* Exit a binding level.
1233 Pop the level off, and restore the state of the identifier-decl mappings
1234 that were in effect when this level was entered.
1235
1236 If KEEP == 1, this level had explicit declarations, so
1237 and create a "block" (a BLOCK node) for the level
1238 to record its declarations and subblocks for symbol table output.
1239
8d08fdba
MS
1240 If FUNCTIONBODY is nonzero, this level is the body of a function,
1241 so create a block as if KEEP were set and also clear out all
1242 label names.
1243
1244 If REVERSE is nonzero, reverse the order of decls before putting
1245 them into the BLOCK. */
1246
1247tree
1248poplevel (keep, reverse, functionbody)
1249 int keep;
1250 int reverse;
1251 int functionbody;
1252{
1253 register tree link;
1254 /* The chain of decls was accumulated in reverse order.
1255 Put it into forward order, just for cleanliness. */
1256 tree decls;
1257 int tmp = functionbody;
b35d4555
MM
1258 int real_functionbody;
1259 tree tags;
1260 tree subblocks;
8d08fdba
MS
1261 tree block = NULL_TREE;
1262 tree decl;
1263 int block_previously_created;
f181d4ae
MM
1264 int leaving_for_scope;
1265
01d939e8 1266 if (cfun && !doing_semantic_analysis_p ())
b35d4555
MM
1267 return NULL_TREE;
1268
273a708f
MM
1269 my_friendly_assert (current_binding_level->parm_flag != 2,
1270 19990916);
b74a0560 1271
b35d4555
MM
1272 real_functionbody = (current_binding_level->keep == 2
1273 ? ((functionbody = 0), tmp) : functionbody);
1274 tags = functionbody >= 0 ? current_binding_level->tags : 0;
1275 subblocks = functionbody >= 0 ? current_binding_level->blocks : 0;
1276
b74a0560
MM
1277 my_friendly_assert (!current_binding_level->class_shadowed,
1278 19990414);
8d08fdba 1279
536333d4
MM
1280 /* We used to use KEEP == 2 to indicate that the new block should go
1281 at the beginning of the list of blocks at this binding level,
1282 rather than the end. This hack is no longer used. */
1283 my_friendly_assert (keep == 0 || keep == 1, 0);
1284
8d08fdba
MS
1285 GNU_xref_end_scope ((HOST_WIDE_INT) current_binding_level,
1286 (HOST_WIDE_INT) current_binding_level->level_chain,
1287 current_binding_level->parm_flag,
5566b478 1288 current_binding_level->keep);
8d08fdba
MS
1289
1290 if (current_binding_level->keep == 1)
1291 keep = 1;
1292
8d08fdba
MS
1293 /* Get the decls in the order they were written.
1294 Usually current_binding_level->names is in reverse order.
1295 But parameter decls were previously put in forward order. */
1296
1297 if (reverse)
1298 current_binding_level->names
1299 = decls = nreverse (current_binding_level->names);
1300 else
1301 decls = current_binding_level->names;
1302
1303 /* Output any nested inline functions within this block
1304 if they weren't already output. */
8d08fdba
MS
1305 for (decl = decls; decl; decl = TREE_CHAIN (decl))
1306 if (TREE_CODE (decl) == FUNCTION_DECL
1307 && ! TREE_ASM_WRITTEN (decl)
1308 && DECL_INITIAL (decl) != NULL_TREE
6060a796
MS
1309 && TREE_ADDRESSABLE (decl)
1310 && decl_function_context (decl) == current_function_decl)
8d08fdba
MS
1311 {
1312 /* If this decl was copied from a file-scope decl
1313 on account of a block-scope extern decl,
1314 propagate TREE_ADDRESSABLE to the file-scope decl. */
1315 if (DECL_ABSTRACT_ORIGIN (decl) != NULL_TREE)
1316 TREE_ADDRESSABLE (DECL_ABSTRACT_ORIGIN (decl)) = 1;
1317 else
1318 {
1319 push_function_context ();
1320 output_inline_function (decl);
1321 pop_function_context ();
1322 }
1323 }
1324
d9b2d9da
MM
1325 /* When not in function-at-a-time mode, expand_end_bindings will
1326 warn about unused variables. But, in function-at-a-time mode
1327 expand_end_bindings is not passed the list of variables in the
1328 current scope, and therefore no warning is emitted. So, we
1329 explicitly warn here. */
1330 if (!processing_template_decl)
1331 warn_about_unused_variables (getdecls ());
1332
8d08fdba
MS
1333 /* If there were any declarations or structure tags in that level,
1334 or if this level is a function body,
1335 create a BLOCK to record them for the life of this function. */
8d08fdba
MS
1336 block = NULL_TREE;
1337 block_previously_created = (current_binding_level->this_block != NULL_TREE);
1338 if (block_previously_created)
1339 block = current_binding_level->this_block;
1340 else if (keep == 1 || functionbody)
1341 block = make_node (BLOCK);
1342 if (block != NULL_TREE)
1343 {
72b7eeff
MS
1344 if (block_previously_created)
1345 {
1346 if (decls || tags || subblocks)
1347 {
2af0ac28 1348 if (BLOCK_VARS (block))
f181d4ae
MM
1349 warning ("internal compiler error: debugging info corrupted");
1350
72b7eeff 1351 BLOCK_VARS (block) = decls;
be99da77
MS
1352
1353 /* We can have previous subblocks and new subblocks when
1354 doing fixup_gotos with complex cleanups. We chain the new
1355 subblocks onto the end of any pre-existing subblocks. */
1356 BLOCK_SUBBLOCKS (block) = chainon (BLOCK_SUBBLOCKS (block),
1357 subblocks);
72b7eeff 1358 }
72b7eeff
MS
1359 }
1360 else
1361 {
1362 BLOCK_VARS (block) = decls;
72b7eeff 1363 BLOCK_SUBBLOCKS (block) = subblocks;
72b7eeff 1364 }
8d08fdba
MS
1365 }
1366
1367 /* In each subblock, record that this is its superior. */
8d08fdba
MS
1368 if (keep >= 0)
1369 for (link = subblocks; link; link = TREE_CHAIN (link))
1370 BLOCK_SUPERCONTEXT (link) = block;
1371
f181d4ae
MM
1372 /* We still support the old for-scope rules, whereby the variables
1373 in a for-init statement were in scope after the for-statement
1374 ended. We only use the new rules in flag_new_for_scope is
1375 nonzero. */
68642fb6 1376 leaving_for_scope
f181d4ae
MM
1377 = current_binding_level->is_for_scope && flag_new_for_scope == 1;
1378
1379 /* Remove declarations for all the DECLs in this level. */
1380 for (link = decls; link; link = TREE_CHAIN (link))
1381 {
1382 if (leaving_for_scope && TREE_CODE (link) == VAR_DECL)
1383 {
68642fb6 1384 tree outer_binding
f181d4ae
MM
1385 = TREE_CHAIN (IDENTIFIER_BINDING (DECL_NAME (link)));
1386 tree ns_binding;
1387
1388 if (!outer_binding)
1389 ns_binding = IDENTIFIER_NAMESPACE_VALUE (DECL_NAME (link));
c7dda1e3
MM
1390 else
1391 ns_binding = NULL_TREE;
1392
68642fb6
UD
1393 if (outer_binding
1394 && (BINDING_LEVEL (outer_binding)
f181d4ae
MM
1395 == current_binding_level->level_chain))
1396 /* We have something like:
68642fb6 1397
f181d4ae
MM
1398 int i;
1399 for (int i; ;);
68642fb6 1400
f181d4ae
MM
1401 and we are leaving the `for' scope. There's no reason to
1402 keep the binding of the inner `i' in this case. */
d8f8dca1 1403 pop_binding (DECL_NAME (link), link);
68642fb6
UD
1404 else if ((outer_binding
1405 && (TREE_CODE (BINDING_VALUE (outer_binding))
f181d4ae 1406 == TYPE_DECL))
68642fb6 1407 || (ns_binding
f181d4ae
MM
1408 && TREE_CODE (ns_binding) == TYPE_DECL))
1409 /* Here, we have something like:
1410
1411 typedef int I;
1412
1413 void f () {
1414 for (int I; ;);
1415 }
1416
1417 We must pop the for-scope binding so we know what's a
1418 type and what isn't. */
d8f8dca1 1419 pop_binding (DECL_NAME (link), link);
e76a2646 1420 else
e76a2646 1421 {
f181d4ae
MM
1422 /* Mark this VAR_DECL as dead so that we can tell we left it
1423 there only for backward compatibility. */
1424 DECL_DEAD_FOR_LOCAL (link) = 1;
68642fb6 1425
f181d4ae
MM
1426 /* Keep track of what should of have happenned when we
1427 popped the binding. */
1428 if (outer_binding && BINDING_VALUE (outer_binding))
68642fb6 1429 DECL_SHADOWED_FOR_VAR (link)
f181d4ae
MM
1430 = BINDING_VALUE (outer_binding);
1431
1432 /* Add it to the list of dead variables in the next
1433 outermost binding to that we can remove these when we
1434 leave that binding. */
1435 current_binding_level->level_chain->dead_vars_from_for
1436 = tree_cons (NULL_TREE, link,
1437 current_binding_level->level_chain->
1438 dead_vars_from_for);
1439
1440 /* Although we don't pop the CPLUS_BINDING, we do clear
1441 its BINDING_LEVEL since the level is going away now. */
1442 BINDING_LEVEL (IDENTIFIER_BINDING (DECL_NAME (link)))
1443 = 0;
e76a2646 1444 }
2ee887f2 1445 }
68642fb6 1446 else
8d6e462b 1447 {
f181d4ae 1448 /* Remove the binding. */
0034cf72
JM
1449 decl = link;
1450 if (TREE_CODE (decl) == TREE_LIST)
1451 decl = TREE_VALUE (decl);
2f939d94 1452 if (DECL_P (decl))
0034cf72
JM
1453 pop_binding (DECL_NAME (decl), decl);
1454 else if (TREE_CODE (decl) == OVERLOAD)
1455 pop_binding (DECL_NAME (OVL_FUNCTION (decl)), decl);
68642fb6 1456 else
f181d4ae 1457 my_friendly_abort (0);
8d08fdba 1458 }
f181d4ae 1459 }
8d08fdba 1460
f181d4ae
MM
1461 /* Remove declarations for any `for' variables from inner scopes
1462 that we kept around. */
1463 for (link = current_binding_level->dead_vars_from_for;
1464 link; link = TREE_CHAIN (link))
d8f8dca1 1465 pop_binding (DECL_NAME (TREE_VALUE (link)), TREE_VALUE (link));
2ee887f2 1466
f181d4ae
MM
1467 /* Restore the IDENTIFIER_TYPE_VALUEs. */
1468 for (link = current_binding_level->type_shadowed;
1469 link; link = TREE_CHAIN (link))
1470 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (link), TREE_VALUE (link));
acef433b
MM
1471
1472 /* Restore the IDENTIFIER_LABEL_VALUEs for local labels. */
1473 for (link = current_binding_level->shadowed_labels;
68642fb6 1474 link;
acef433b
MM
1475 link = TREE_CHAIN (link))
1476 pop_label (link);
1477
f181d4ae
MM
1478 /* There may be OVERLOADs (wrapped in TREE_LISTs) on the BLOCK_VARs
1479 list if a `using' declaration put them there. The debugging
1480 back-ends won't understand OVERLOAD, so we remove them here.
1481 Because the BLOCK_VARS are (temporarily) shared with
1482 CURRENT_BINDING_LEVEL->NAMES we must do this fixup after we have
1483 popped all the bindings. */
1484 if (block)
1485 {
1486 tree* d;
8d6e462b 1487
a06d48ef
JM
1488 for (d = &BLOCK_VARS (block); *d; )
1489 {
1490 if (TREE_CODE (*d) == TREE_LIST)
1491 *d = TREE_CHAIN (*d);
1492 else
1493 d = &TREE_CHAIN (*d);
1494 }
8d6e462b 1495 }
8d08fdba
MS
1496
1497 /* If the level being exited is the top level of a function,
1498 check over all the labels. */
8d08fdba
MS
1499 if (functionbody)
1500 {
acef433b
MM
1501 /* Since this is the top level block of a function, the vars are
1502 the function's parameters. Don't leave them in the BLOCK
1503 because they are found in the FUNCTION_DECL instead. */
8d08fdba 1504 BLOCK_VARS (block) = 0;
acef433b 1505 pop_labels (block);
8d08fdba
MS
1506 }
1507
1508 /* Any uses of undefined labels now operate under constraints
1509 of next binding contour. */
01d939e8 1510 if (cfun)
a8f73d4b
MM
1511 {
1512 struct binding_level *level_chain;
1513 level_chain = current_binding_level->level_chain;
1514 if (level_chain)
1515 {
1516 struct named_label_list *labels;
1517 for (labels = named_label_uses; labels; labels = labels->next)
1518 if (labels->binding_level == current_binding_level)
1519 {
1520 labels->binding_level = level_chain;
1521 labels->names_in_scope = level_chain->names;
1522 }
1523 }
1524 }
8d08fdba
MS
1525
1526 tmp = current_binding_level->keep;
1527
1528 pop_binding_level ();
1529 if (functionbody)
1530 DECL_INITIAL (current_function_decl) = block;
1531 else if (block)
1532 {
1533 if (!block_previously_created)
1534 current_binding_level->blocks
1535 = chainon (current_binding_level->blocks, block);
1536 }
1537 /* If we did not make a block for the level just exited,
1538 any blocks made for inner levels
1539 (since they cannot be recorded as subblocks in that level)
1540 must be carried forward so they will later become subblocks
1541 of something else. */
1542 else if (subblocks)
536333d4
MM
1543 current_binding_level->blocks
1544 = chainon (current_binding_level->blocks, subblocks);
8d08fdba 1545
d9b2d9da
MM
1546 /* Each and every BLOCK node created here in `poplevel' is important
1547 (e.g. for proper debugging information) so if we created one
1548 earlier, mark it as "used". */
1549 if (block)
1550 TREE_USED (block) = 1;
1551
8d08fdba 1552 /* Take care of compiler's internal binding structures. */
a4443a08 1553 if (tmp == 2)
8d08fdba 1554 {
d9b2d9da
MM
1555 tree scope_stmts;
1556
68642fb6 1557 scope_stmts
d9b2d9da 1558 = add_scope_stmt (/*begin_p=*/0, /*partial_p=*/1);
8d08fdba 1559 if (block)
d9b2d9da
MM
1560 {
1561 SCOPE_STMT_BLOCK (TREE_PURPOSE (scope_stmts)) = block;
1562 SCOPE_STMT_BLOCK (TREE_VALUE (scope_stmts)) = block;
1563 }
1564
8f471b0d 1565 block = poplevel (keep, reverse, functionbody);
8d08fdba
MS
1566 }
1567
8d08fdba
MS
1568 return block;
1569}
1570
1571/* Delete the node BLOCK from the current binding level.
1572 This is used for the block inside a stmt expr ({...})
1573 so that the block can be reinserted where appropriate. */
1574
1575void
1576delete_block (block)
1577 tree block;
1578{
1579 tree t;
1580 if (current_binding_level->blocks == block)
1581 current_binding_level->blocks = TREE_CHAIN (block);
1582 for (t = current_binding_level->blocks; t;)
1583 {
1584 if (TREE_CHAIN (t) == block)
1585 TREE_CHAIN (t) = TREE_CHAIN (block);
1586 else
1587 t = TREE_CHAIN (t);
1588 }
1589 TREE_CHAIN (block) = NULL_TREE;
1590 /* Clear TREE_USED which is always set by poplevel.
1591 The flag is set again if insert_block is called. */
1592 TREE_USED (block) = 0;
1593}
1594
1595/* Insert BLOCK at the end of the list of subblocks of the
1596 current binding level. This is used when a BIND_EXPR is expanded,
1597 to handle the BLOCK node inside the BIND_EXPR. */
1598
1599void
1600insert_block (block)
1601 tree block;
1602{
1603 TREE_USED (block) = 1;
1604 current_binding_level->blocks
1605 = chainon (current_binding_level->blocks, block);
1606}
1607
8d08fdba
MS
1608/* Set the BLOCK node for the innermost scope
1609 (the one we are currently in). */
1610
1611void
1612set_block (block)
1613 register tree block;
1614{
1615 current_binding_level->this_block = block;
1616}
1617
1618/* Do a pushlevel for class declarations. */
e92cc029 1619
8d08fdba
MS
1620void
1621pushlevel_class ()
1622{
1623 register struct binding_level *newlevel;
1624
1625 /* Reuse or create a struct for this binding level. */
1626#if defined(DEBUG_CP_BINDING_LEVELS)
1627 if (0)
1628#else /* !defined(DEBUG_CP_BINDING_LEVELS) */
1629 if (free_binding_level)
1630#endif /* !defined(DEBUG_CP_BINDING_LEVELS) */
1631 {
1632 newlevel = free_binding_level;
1633 free_binding_level = free_binding_level->level_chain;
1634 }
1635 else
f181d4ae 1636 newlevel = make_binding_level ();
8d08fdba
MS
1637
1638#if defined(DEBUG_CP_BINDING_LEVELS)
1639 is_class_level = 1;
1640#endif /* defined(DEBUG_CP_BINDING_LEVELS) */
1641
1642 push_binding_level (newlevel, 0, 0);
1643
8d08fdba
MS
1644 class_binding_level = current_binding_level;
1645 class_binding_level->parm_flag = 2;
70adf8a9 1646 class_binding_level->this_class = current_class_type;
8d08fdba
MS
1647}
1648
b74a0560 1649/* ...and a poplevel for class declarations. */
e92cc029 1650
273a708f 1651void
b74a0560 1652poplevel_class ()
8d08fdba
MS
1653{
1654 register struct binding_level *level = class_binding_level;
8d08fdba
MS
1655 tree shadowed;
1656
1657 my_friendly_assert (level != 0, 354);
68642fb6 1658
8d08fdba 1659 /* If we're leaving a toplevel class, don't bother to do the setting
ddd5a7c1 1660 of IDENTIFIER_CLASS_VALUE to NULL_TREE, since first of all this slot
8d08fdba 1661 shouldn't even be used when current_class_type isn't set, and second,
ddd5a7c1 1662 if we don't touch it here, we're able to use the cache effect if the
8d08fdba 1663 next time we're entering a class scope, it is the same class. */
b74a0560 1664 if (current_class_depth != 1)
8f032717
MM
1665 {
1666 struct binding_level* b;
1667
1668 /* Clear out our IDENTIFIER_CLASS_VALUEs. */
1669 for (shadowed = level->class_shadowed;
1670 shadowed;
1671 shadowed = TREE_CHAIN (shadowed))
1672 IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (shadowed)) = NULL_TREE;
68642fb6 1673
8f032717
MM
1674 /* Find the next enclosing class, and recreate
1675 IDENTIFIER_CLASS_VALUEs appropriate for that class. */
1676 b = level->level_chain;
1677 while (b && b->parm_flag != 2)
1678 b = b->level_chain;
1679
1680 if (b)
68642fb6
UD
1681 for (shadowed = b->class_shadowed;
1682 shadowed;
8f032717
MM
1683 shadowed = TREE_CHAIN (shadowed))
1684 {
1685 tree t;
1686
1687 t = IDENTIFIER_BINDING (TREE_PURPOSE (shadowed));
1688 while (t && BINDING_LEVEL (t) != b)
1689 t = TREE_CHAIN (t);
68642fb6 1690
8f032717 1691 if (t)
68642fb6 1692 IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (shadowed))
8f032717
MM
1693 = BINDING_VALUE (t);
1694 }
1695 }
8d08fdba
MS
1696 else
1697 /* Remember to save what IDENTIFIER's were bound in this scope so we
1698 can recover from cache misses. */
e76a2646
MS
1699 {
1700 previous_class_type = current_class_type;
1701 previous_class_values = class_binding_level->class_shadowed;
1702 }
8d08fdba
MS
1703 for (shadowed = level->type_shadowed;
1704 shadowed;
1705 shadowed = TREE_CHAIN (shadowed))
2c73f9f5 1706 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (shadowed), TREE_VALUE (shadowed));
8d08fdba 1707
f181d4ae 1708 /* Remove the bindings for all of the class-level declarations. */
68642fb6
UD
1709 for (shadowed = level->class_shadowed;
1710 shadowed;
f181d4ae 1711 shadowed = TREE_CHAIN (shadowed))
d8f8dca1 1712 pop_binding (TREE_PURPOSE (shadowed), TREE_TYPE (shadowed));
f181d4ae 1713
8d08fdba
MS
1714 GNU_xref_end_scope ((HOST_WIDE_INT) class_binding_level,
1715 (HOST_WIDE_INT) class_binding_level->level_chain,
1716 class_binding_level->parm_flag,
5566b478 1717 class_binding_level->keep);
8d08fdba 1718
38e01259 1719 /* Now, pop out of the binding level which we created up in the
8d08fdba
MS
1720 `pushlevel_class' routine. */
1721#if defined(DEBUG_CP_BINDING_LEVELS)
1722 is_class_level = 1;
1723#endif /* defined(DEBUG_CP_BINDING_LEVELS) */
1724
1725 pop_binding_level ();
8d08fdba 1726}
8f032717
MM
1727
1728/* We are entering the scope of a class. Clear IDENTIFIER_CLASS_VALUE
1729 for any names in enclosing classes. */
1730
1731void
1732clear_identifier_class_values ()
1733{
1734 tree t;
1735
1736 if (!class_binding_level)
1737 return;
1738
1739 for (t = class_binding_level->class_shadowed;
1740 t;
1741 t = TREE_CHAIN (t))
1742 IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (t)) = NULL_TREE;
1743}
1744
0aafb128
MM
1745/* Returns non-zero if T is a virtual function table. */
1746
1747int
1748vtable_decl_p (t, data)
1749 tree t;
1750 void *data ATTRIBUTE_UNUSED;
1751{
1752 return (TREE_CODE (t) == VAR_DECL && DECL_VIRTUAL_P (t));
1753}
1754
1755/* Returns non-zero if T is a TYPE_DECL for a type with virtual
1756 functions. */
1757
1758int
1759vtype_decl_p (t, data)
1760 tree t;
1761 void *data ATTRIBUTE_UNUSED;
1762{
1763 return (TREE_CODE (t) == TYPE_DECL
34249844
NS
1764 && TREE_CODE (TREE_TYPE (t)) == RECORD_TYPE
1765 && TYPE_POLYMORPHIC_P (TREE_TYPE (t)));
0aafb128
MM
1766}
1767
f71f87f9
MM
1768/* Return the declarations that are members of the namespace NS. */
1769
1770tree
1771cp_namespace_decls (ns)
1772 tree ns;
1773{
1774 return NAMESPACE_LEVEL (ns)->names;
1775}
1776
0aafb128
MM
1777/* Walk all the namespaces contained NAMESPACE, including NAMESPACE
1778 itself, calling F for each. The DATA is passed to F as well. */
1779
1780static int
1781walk_namespaces_r (namespace, f, data)
1782 tree namespace;
1783 walk_namespaces_fn f;
1784 void *data;
1785{
1786 tree current;
1787 int result = 0;
1788
1789 result |= (*f) (namespace, data);
1790
f71f87f9 1791 for (current = cp_namespace_decls (namespace);
0aafb128
MM
1792 current;
1793 current = TREE_CHAIN (current))
1794 {
1795 if (TREE_CODE (current) != NAMESPACE_DECL
1796 || DECL_NAMESPACE_ALIAS (current))
1797 continue;
1798 if (!DECL_LANG_SPECIFIC (current))
1799 {
1800 /* Hmm. std. */
1801 my_friendly_assert (current == std_node, 393);
1802 continue;
1803 }
1804
1805 /* We found a namespace. */
1806 result |= walk_namespaces_r (current, f, data);
1807 }
1808
1809 return result;
1810}
1811
1812/* Walk all the namespaces, calling F for each. The DATA is passed to
1813 F as well. */
1814
1815int
1816walk_namespaces (f, data)
1817 walk_namespaces_fn f;
1818 void *data;
1819{
1820 return walk_namespaces_r (global_namespace, f, data);
1821}
1822
1823struct walk_globals_data {
1824 walk_globals_pred p;
1825 walk_globals_fn f;
1826 void *data;
1827};
1828
1829/* Walk the global declarations in NAMESPACE. Whenever one is found
1830 for which P returns non-zero, call F with its address. If any call
1831 to F returns a non-zero value, return a non-zero value. */
1832
68642fb6 1833static int
0aafb128
MM
1834walk_globals_r (namespace, data)
1835 tree namespace;
1836 void *data;
1837{
1838 struct walk_globals_data* wgd = (struct walk_globals_data *) data;
1839 walk_globals_pred p = wgd->p;
1840 walk_globals_fn f = wgd->f;
1841 void *d = wgd->data;
1842 tree *t;
1843 int result = 0;
1844
1845 t = &NAMESPACE_LEVEL (namespace)->names;
1846
1847 while (*t)
1848 {
1849 tree glbl = *t;
1850
1851 if ((*p) (glbl, d))
1852 result |= (*f) (t, d);
1853
1854 /* If F changed *T, then *T still points at the next item to
1855 examine. */
1856 if (*t == glbl)
1857 t = &TREE_CHAIN (*t);
1858 }
1859
1860 return result;
1861}
1862
1863/* Walk the global declarations. Whenever one is found for which P
1864 returns non-zero, call F with its address. If any call to F
1865 returns a non-zero value, return a non-zero value. */
1866
1867int
1868walk_globals (p, f, data)
1869 walk_globals_pred p;
1870 walk_globals_fn f;
1871 void *data;
1872{
1873 struct walk_globals_data wgd;
1874 wgd.p = p;
1875 wgd.f = f;
1876 wgd.data = data;
1877
1878 return walk_namespaces (walk_globals_r, &wgd);
1879}
1880
1881/* Call wrapup_globals_declarations for the globals in NAMESPACE. If
1882 DATA is non-NULL, this is the last time we will call
1883 wrapup_global_declarations for this NAMESPACE. */
1884
1885int
1886wrapup_globals_for_namespace (namespace, data)
1887 tree namespace;
1888 void *data;
1889{
f71f87f9 1890 tree globals = cp_namespace_decls (namespace);
0aafb128
MM
1891 int len = list_length (globals);
1892 tree *vec = (tree *) alloca (sizeof (tree) * len);
1893 int i;
0352cfc8 1894 int result;
0aafb128
MM
1895 tree decl;
1896 int last_time = (data != 0);
1897
1898 if (last_time && namespace == global_namespace)
1899 /* Let compile_file handle the global namespace. */
1900 return 0;
1901
1902 /* Process the decls in reverse order--earliest first.
1903 Put them into VEC from back to front, then take out from front. */
68642fb6 1904
0aafb128 1905 for (i = 0, decl = globals; i < len; i++, decl = TREE_CHAIN (decl))
2ce07e2d
NS
1906 {
1907 /* Pretend we've output an unused static variable. This ensures
1908 that the toplevel __FUNCTION__ etc won't be emitted, unless
1909 needed. */
cf74fb86
JM
1910 if (TREE_CODE (decl) == VAR_DECL && DECL_ARTIFICIAL (decl)
1911 && !TREE_PUBLIC (decl) && !TREE_USED (decl))
1912 {
1913 TREE_ASM_WRITTEN (decl) = 1;
1914 DECL_IGNORED_P (decl) = 1;
1915 }
2ce07e2d
NS
1916 vec[len - i - 1] = decl;
1917 }
68642fb6 1918
0352cfc8
MM
1919 if (last_time)
1920 {
1921 check_global_declarations (vec, len);
1922 return 0;
1923 }
1924
1925 /* Temporarily mark vtables as external. That prevents
1926 wrapup_global_declarations from writing them out; we must process
1927 them ourselves in finish_vtable_vardecl. */
1928 for (i = 0; i < len; ++i)
91f2aa22 1929 if (vtable_decl_p (vec[i], /*data=*/0) && !DECL_EXTERNAL (vec[i]))
0352cfc8
MM
1930 {
1931 DECL_NOT_REALLY_EXTERN (vec[i]) = 1;
1932 DECL_EXTERNAL (vec[i]) = 1;
1933 }
0aafb128 1934
0352cfc8
MM
1935 /* Write out any globals that need to be output. */
1936 result = wrapup_global_declarations (vec, len);
1937
1938 /* Undo the hack to DECL_EXTERNAL above. */
1939 for (i = 0; i < len; ++i)
1940 if (vtable_decl_p (vec[i], /*data=*/0)
1941 && DECL_NOT_REALLY_EXTERN (vec[i]))
1942 {
1943 DECL_NOT_REALLY_EXTERN (vec[i]) = 0;
1944 DECL_EXTERNAL (vec[i]) = 0;
1945 }
1946
1947 return result;
0aafb128
MM
1948}
1949
4519c0a8 1950\f
fc6af6e3
RH
1951/* Mark ARG (which is really a struct binding_level **) for GC. */
1952
4519c0a8
MM
1953static void
1954mark_binding_level (arg)
1955 void *arg;
1956{
1957 struct binding_level *lvl = *(struct binding_level **)arg;
1958
1959 while (lvl)
1960 {
1961 ggc_mark_tree (lvl->names);
1962 ggc_mark_tree (lvl->tags);
1963 ggc_mark_tree (lvl->usings);
1964 ggc_mark_tree (lvl->using_directives);
1965 ggc_mark_tree (lvl->class_shadowed);
1966 ggc_mark_tree (lvl->type_shadowed);
1967 ggc_mark_tree (lvl->shadowed_labels);
1968 ggc_mark_tree (lvl->blocks);
1969 ggc_mark_tree (lvl->this_block);
70adf8a9 1970 ggc_mark_tree (lvl->this_class);
4519c0a8
MM
1971 ggc_mark_tree (lvl->incomplete);
1972 ggc_mark_tree (lvl->dead_vars_from_for);
1973
1974 lvl = lvl->level_chain;
1975 }
1976}
8d08fdba
MS
1977\f
1978/* For debugging. */
5566b478
MS
1979static int no_print_functions = 0;
1980static int no_print_builtins = 0;
8d08fdba
MS
1981
1982void
1983print_binding_level (lvl)
1984 struct binding_level *lvl;
1985{
1986 tree t;
1987 int i = 0, len;
1988 fprintf (stderr, " blocks=");
1989 fprintf (stderr, HOST_PTR_PRINTF, lvl->blocks);
1990 fprintf (stderr, " n_incomplete=%d parm_flag=%d keep=%d",
f30432d7 1991 list_length (lvl->incomplete), lvl->parm_flag, lvl->keep);
8d08fdba
MS
1992 if (lvl->tag_transparent)
1993 fprintf (stderr, " tag-transparent");
1994 if (lvl->more_cleanups_ok)
1995 fprintf (stderr, " more-cleanups-ok");
1996 if (lvl->have_cleanups)
1997 fprintf (stderr, " have-cleanups");
8d08fdba
MS
1998 fprintf (stderr, "\n");
1999 if (lvl->names)
2000 {
2001 fprintf (stderr, " names:\t");
2002 /* We can probably fit 3 names to a line? */
2003 for (t = lvl->names; t; t = TREE_CHAIN (t))
2004 {
68642fb6 2005 if (no_print_functions && (TREE_CODE (t) == FUNCTION_DECL))
8d08fdba
MS
2006 continue;
2007 if (no_print_builtins
fc378698
MS
2008 && (TREE_CODE (t) == TYPE_DECL)
2009 && (!strcmp (DECL_SOURCE_FILE (t),"<built-in>")))
8d08fdba
MS
2010 continue;
2011
2012 /* Function decls tend to have longer names. */
2013 if (TREE_CODE (t) == FUNCTION_DECL)
2014 len = 3;
2015 else
2016 len = 2;
2017 i += len;
2018 if (i > 6)
2019 {
2020 fprintf (stderr, "\n\t");
2021 i = len;
2022 }
2023 print_node_brief (stderr, "", t, 0);
bd6dd845 2024 if (t == error_mark_node)
8d08fdba
MS
2025 break;
2026 }
2027 if (i)
2028 fprintf (stderr, "\n");
2029 }
2030 if (lvl->tags)
2031 {
2032 fprintf (stderr, " tags:\t");
2033 i = 0;
2034 for (t = lvl->tags; t; t = TREE_CHAIN (t))
2035 {
2036 if (TREE_PURPOSE (t) == NULL_TREE)
2037 len = 3;
2038 else if (TREE_PURPOSE (t) == TYPE_IDENTIFIER (TREE_VALUE (t)))
2039 len = 2;
2040 else
2041 len = 4;
2042 i += len;
2043 if (i > 5)
2044 {
2045 fprintf (stderr, "\n\t");
2046 i = len;
2047 }
2048 if (TREE_PURPOSE (t) == NULL_TREE)
2049 {
2050 print_node_brief (stderr, "<unnamed-typedef", TREE_VALUE (t), 0);
2051 fprintf (stderr, ">");
2052 }
2053 else if (TREE_PURPOSE (t) == TYPE_IDENTIFIER (TREE_VALUE (t)))
2054 print_node_brief (stderr, "", TREE_VALUE (t), 0);
2055 else
2056 {
2057 print_node_brief (stderr, "<typedef", TREE_PURPOSE (t), 0);
2058 print_node_brief (stderr, "", TREE_VALUE (t), 0);
2059 fprintf (stderr, ">");
2060 }
2061 }
2062 if (i)
2063 fprintf (stderr, "\n");
2064 }
8d08fdba
MS
2065 if (lvl->class_shadowed)
2066 {
2067 fprintf (stderr, " class-shadowed:");
2068 for (t = lvl->class_shadowed; t; t = TREE_CHAIN (t))
2069 {
2070 fprintf (stderr, " %s ", IDENTIFIER_POINTER (TREE_PURPOSE (t)));
2071 }
2072 fprintf (stderr, "\n");
2073 }
2074 if (lvl->type_shadowed)
2075 {
2076 fprintf (stderr, " type-shadowed:");
2077 for (t = lvl->type_shadowed; t; t = TREE_CHAIN (t))
2078 {
8d08fdba 2079 fprintf (stderr, " %s ", IDENTIFIER_POINTER (TREE_PURPOSE (t)));
8d08fdba
MS
2080 }
2081 fprintf (stderr, "\n");
2082 }
2083}
2084
2085void
2086print_other_binding_stack (stack)
2087 struct binding_level *stack;
2088{
2089 struct binding_level *level;
2090 for (level = stack; level != global_binding_level; level = level->level_chain)
2091 {
2092 fprintf (stderr, "binding level ");
2093 fprintf (stderr, HOST_PTR_PRINTF, level);
2094 fprintf (stderr, "\n");
2095 print_binding_level (level);
2096 }
2097}
2098
2099void
2100print_binding_stack ()
2101{
2102 struct binding_level *b;
2103 fprintf (stderr, "current_binding_level=");
2104 fprintf (stderr, HOST_PTR_PRINTF, current_binding_level);
2105 fprintf (stderr, "\nclass_binding_level=");
2106 fprintf (stderr, HOST_PTR_PRINTF, class_binding_level);
2107 fprintf (stderr, "\nglobal_binding_level=");
2108 fprintf (stderr, HOST_PTR_PRINTF, global_binding_level);
2109 fprintf (stderr, "\n");
2110 if (class_binding_level)
2111 {
2112 for (b = class_binding_level; b; b = b->level_chain)
2113 if (b == current_binding_level)
2114 break;
2115 if (b)
2116 b = class_binding_level;
2117 else
2118 b = current_binding_level;
2119 }
2120 else
2121 b = current_binding_level;
2122 print_other_binding_stack (b);
2123 fprintf (stderr, "global:\n");
2124 print_binding_level (global_binding_level);
2125}
a9aedbc2 2126
2c73f9f5
ML
2127/* Namespace binding access routines: The namespace_bindings field of
2128 the identifier is polymorphic, with three possible values:
2129 NULL_TREE, a list of CPLUS_BINDINGS, or any other tree_node
2130 indicating the BINDING_VALUE of global_namespace. */
30394414 2131
2c73f9f5
ML
2132/* Check whether the a binding for the name to scope is known.
2133 Assumes that the bindings of the name are already a list
2134 of bindings. Returns the binding found, or NULL_TREE. */
2135
2136static tree
2137find_binding (name, scope)
30394414
JM
2138 tree name;
2139 tree scope;
2140{
2c73f9f5 2141 tree iter, prev = NULL_TREE;
3e3f722c
ML
2142
2143 scope = ORIGINAL_NAMESPACE (scope);
68642fb6 2144
30394414
JM
2145 for (iter = IDENTIFIER_NAMESPACE_BINDINGS (name); iter;
2146 iter = TREE_CHAIN (iter))
2147 {
2148 my_friendly_assert (TREE_CODE (iter) == CPLUS_BINDING, 374);
2149 if (BINDING_SCOPE (iter) == scope)
2c73f9f5 2150 {
cfe507be 2151 /* Move binding found to the front of the list, so
2c73f9f5
ML
2152 subsequent lookups will find it faster. */
2153 if (prev)
2154 {
2155 TREE_CHAIN (prev) = TREE_CHAIN (iter);
2156 TREE_CHAIN (iter) = IDENTIFIER_NAMESPACE_BINDINGS (name);
2157 IDENTIFIER_NAMESPACE_BINDINGS (name) = iter;
2158 }
2159 return iter;
2160 }
2161 prev = iter;
30394414 2162 }
2c73f9f5
ML
2163 return NULL_TREE;
2164}
2165
2166/* Always returns a binding for name in scope. If the
2167 namespace_bindings is not a list, convert it to one first.
2168 If no binding is found, make a new one. */
2169
2170tree
2171binding_for_name (name, scope)
2172 tree name;
2173 tree scope;
2174{
2175 tree b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2176 tree result;
3e3f722c
ML
2177
2178 scope = ORIGINAL_NAMESPACE (scope);
68642fb6 2179
2c73f9f5
ML
2180 if (b && TREE_CODE (b) != CPLUS_BINDING)
2181 {
2182 /* Get rid of optimization for global scope. */
2183 IDENTIFIER_NAMESPACE_BINDINGS (name) = NULL_TREE;
2184 BINDING_VALUE (binding_for_name (name, global_namespace)) = b;
2185 b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2186 }
2187 if (b && (result = find_binding (name, scope)))
2188 return result;
cd9f6678 2189 /* Not found, make a new one. */
2c73f9f5
ML
2190 result = make_node (CPLUS_BINDING);
2191 TREE_CHAIN (result) = b;
2192 IDENTIFIER_NAMESPACE_BINDINGS (name) = result;
2193 BINDING_SCOPE (result) = scope;
2194 BINDING_TYPE (result) = NULL_TREE;
2195 BINDING_VALUE (result) = NULL_TREE;
2c73f9f5
ML
2196 return result;
2197}
2198
2199/* Return the binding value for name in scope, considering that
2200 namespace_binding may or may not be a list of CPLUS_BINDINGS. */
2201
2202tree
2203namespace_binding (name, scope)
2204 tree name;
2205 tree scope;
2206{
2207 tree b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2208 if (b == NULL_TREE)
2209 return NULL_TREE;
cb0dbb9a
JM
2210 if (scope == NULL_TREE)
2211 scope = global_namespace;
2c73f9f5
ML
2212 if (TREE_CODE (b) != CPLUS_BINDING)
2213 return (scope == global_namespace) ? b : NULL_TREE;
2214 name = find_binding (name,scope);
2215 if (name == NULL_TREE)
2216 return name;
2217 return BINDING_VALUE (name);
2218}
2219
2220/* Set the binding value for name in scope. If modifying the binding
2221 of global_namespace is attempted, try to optimize it. */
2222
2223void
2224set_namespace_binding (name, scope, val)
2225 tree name;
2226 tree scope;
2227 tree val;
2228{
2229 tree b;
cb0dbb9a
JM
2230
2231 if (scope == NULL_TREE)
2232 scope = global_namespace;
68642fb6 2233
2c73f9f5
ML
2234 if (scope == global_namespace)
2235 {
2236 b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2237 if (b == NULL_TREE || TREE_CODE (b) != CPLUS_BINDING)
2238 {
2239 IDENTIFIER_NAMESPACE_BINDINGS (name) = val;
2240 return;
2241 }
2242 }
2243 b = binding_for_name (name, scope);
2244 BINDING_VALUE (b) = val;
30394414
JM
2245}
2246
dff6b454
RK
2247/* Push into the scope of the NAME namespace. If NAME is NULL_TREE, then we
2248 select a name that is unique to this compilation unit. */
e92cc029 2249
a9aedbc2
MS
2250void
2251push_namespace (name)
2252 tree name;
2253{
b370501f 2254 tree d = NULL_TREE;
30394414
JM
2255 int need_new = 1;
2256 int implicit_use = 0;
2c73f9f5 2257 int global = 0;
30394414
JM
2258 if (!global_namespace)
2259 {
2c73f9f5 2260 /* This must be ::. */
30394414 2261 my_friendly_assert (name == get_identifier ("::"), 377);
2c73f9f5 2262 global = 1;
30394414
JM
2263 }
2264 else if (!name)
2265 {
3ab52652
ML
2266 /* The name of anonymous namespace is unique for the translation
2267 unit. */
0c8feefe
MM
2268 if (!anonymous_namespace_name)
2269 anonymous_namespace_name = get_file_function_name ('N');
2270 name = anonymous_namespace_name;
3ab52652
ML
2271 d = IDENTIFIER_NAMESPACE_VALUE (name);
2272 if (d)
2273 /* Reopening anonymous namespace. */
2274 need_new = 0;
30394414 2275 implicit_use = 1;
2c73f9f5
ML
2276 }
2277 else if (current_namespace == global_namespace
2278 && name == DECL_NAME (std_node))
2279 {
2280 in_std++;
2281 return;
2282 }
30394414
JM
2283 else
2284 {
2c73f9f5 2285 /* Check whether this is an extended namespace definition. */
30394414
JM
2286 d = IDENTIFIER_NAMESPACE_VALUE (name);
2287 if (d != NULL_TREE && TREE_CODE (d) == NAMESPACE_DECL)
3e3f722c
ML
2288 {
2289 need_new = 0;
2290 if (DECL_NAMESPACE_ALIAS (d))
2291 {
8251199e 2292 cp_error ("namespace alias `%D' not allowed here, assuming `%D'",
3e3f722c
ML
2293 d, DECL_NAMESPACE_ALIAS (d));
2294 d = DECL_NAMESPACE_ALIAS (d);
2295 }
2296 }
30394414 2297 }
68642fb6 2298
30394414
JM
2299 if (need_new)
2300 {
2c73f9f5 2301 /* Make a new namespace, binding the name to it. */
6b57ac29 2302 d = build_lang_decl (NAMESPACE_DECL, name, void_type_node);
2c73f9f5
ML
2303 /* The global namespace is not pushed, and the global binding
2304 level is set elsewhere. */
2305 if (!global)
2306 {
2307 d = pushdecl (d);
2308 pushlevel (0);
2309 declare_namespace_level ();
2310 NAMESPACE_LEVEL (d) = current_binding_level;
2311 }
30394414 2312 }
2c73f9f5
ML
2313 else
2314 resume_binding_level (NAMESPACE_LEVEL (d));
2315
30394414
JM
2316 if (implicit_use)
2317 do_using_directive (d);
2c73f9f5 2318 /* Enter the name space. */
30394414 2319 current_namespace = d;
a9aedbc2
MS
2320}
2321
2322/* Pop from the scope of the current namespace. */
e92cc029 2323
a9aedbc2
MS
2324void
2325pop_namespace ()
2326{
2c73f9f5
ML
2327 if (current_namespace == global_namespace)
2328 {
2329 my_friendly_assert (in_std>0, 980421);
2330 in_std--;
2331 return;
2332 }
cb0dbb9a 2333 current_namespace = CP_DECL_CONTEXT (current_namespace);
2c73f9f5
ML
2334 /* The binding level is not popped, as it might be re-opened later. */
2335 suspend_binding_level ();
2336}
a9aedbc2 2337
61fc8c9e
MM
2338/* Push into the scope of the namespace NS, even if it is deeply
2339 nested within another namespace. */
2340
2341void
2342push_nested_namespace (ns)
2343 tree ns;
2344{
2345 if (ns == global_namespace)
2346 push_to_top_level ();
2347 else
2348 {
2349 push_nested_namespace (CP_DECL_CONTEXT (ns));
2350 push_namespace (DECL_NAME (ns));
2351 }
2352}
2353
2354/* Pop back from the scope of the namespace NS, which was previously
2355 entered with push_nested_namespace. */
68642fb6 2356
61fc8c9e
MM
2357void
2358pop_nested_namespace (ns)
2359 tree ns;
2360{
2361 while (ns != global_namespace)
2362 {
2363 pop_namespace ();
2364 ns = CP_DECL_CONTEXT (ns);
2365 }
2366
2367 pop_from_top_level ();
2368}
2369
8d08fdba
MS
2370\f
2371/* Subroutines for reverting temporarily to top-level for instantiation
2372 of templates and such. We actually need to clear out the class- and
2373 local-value slots of all identifiers, so that only the global values
2374 are at all visible. Simply setting current_binding_level to the global
2375 scope isn't enough, because more binding levels may be pushed. */
9cd64686 2376struct saved_scope *scope_chain;
8d08fdba 2377
6f80451c
MM
2378/* Mark ST for GC. */
2379
2380static void
2381mark_stmt_tree (st)
2382 struct stmt_tree *st;
2383{
2384 ggc_mark_tree (st->x_last_stmt);
2385 ggc_mark_tree (st->x_last_expr_type);
2386}
2387
9cd64686 2388/* Mark ARG (which is really a struct saved_scope **) for GC. */
fc6af6e3
RH
2389
2390static void
2391mark_saved_scope (arg)
2392 void *arg;
2393{
2394 struct saved_scope *t = *(struct saved_scope **)arg;
2395 while (t)
2396 {
fc6af6e3
RH
2397 mark_binding_level (&t->class_bindings);
2398 ggc_mark_tree (t->old_bindings);
2399 ggc_mark_tree (t->old_namespace);
2400 ggc_mark_tree (t->class_name);
2401 ggc_mark_tree (t->class_type);
2402 ggc_mark_tree (t->access_specifier);
a8f73d4b 2403 ggc_mark_tree (t->function_decl);
fc6af6e3 2404 if (t->lang_base)
9cd64686 2405 ggc_mark_tree_varray (t->lang_base);
fc6af6e3 2406 ggc_mark_tree (t->lang_name);
9cd64686 2407 ggc_mark_tree (t->x_function_parms);
fc6af6e3 2408 ggc_mark_tree (t->template_parms);
9cd64686
MM
2409 ggc_mark_tree (t->x_previous_class_type);
2410 ggc_mark_tree (t->x_previous_class_values);
6f80451c 2411 ggc_mark_tree (t->x_saved_tree);
70adf8a9
JM
2412 ggc_mark_tree (t->incomplete);
2413 ggc_mark_tree (t->lookups);
6f80451c
MM
2414
2415 mark_stmt_tree (&t->x_stmt_tree);
a8f73d4b 2416 mark_binding_level (&t->bindings);
fc6af6e3
RH
2417 t = t->prev;
2418 }
2419}
2420
e92cc029 2421static tree
45537677
MS
2422store_bindings (names, old_bindings)
2423 tree names, old_bindings;
2424{
2425 tree t;
2426 for (t = names; t; t = TREE_CHAIN (t))
2427 {
2428 tree binding, t1, id;
2429
2430 if (TREE_CODE (t) == TREE_LIST)
2431 id = TREE_PURPOSE (t);
2432 else
2433 id = DECL_NAME (t);
2434
68642fb6 2435 if (!id
f181d4ae
MM
2436 /* Note that we may have an IDENTIFIER_CLASS_VALUE even when
2437 we have no IDENTIFIER_BINDING if we have left the class
2438 scope, but cached the class-level declarations. */
2439 || !(IDENTIFIER_BINDING (id) || IDENTIFIER_CLASS_VALUE (id)))
45537677
MS
2440 continue;
2441
2442 for (t1 = old_bindings; t1; t1 = TREE_CHAIN (t1))
2443 if (TREE_VEC_ELT (t1, 0) == id)
2444 goto skip_it;
78957a2a 2445
87e3dbc9 2446 binding = make_tree_vec (4);
78957a2a 2447
45537677
MS
2448 if (id)
2449 {
2450 my_friendly_assert (TREE_CODE (id) == IDENTIFIER_NODE, 135);
2451 TREE_VEC_ELT (binding, 0) = id;
2c73f9f5 2452 TREE_VEC_ELT (binding, 1) = REAL_IDENTIFIER_TYPE_VALUE (id);
f181d4ae 2453 TREE_VEC_ELT (binding, 2) = IDENTIFIER_BINDING (id);
45537677 2454 TREE_VEC_ELT (binding, 3) = IDENTIFIER_CLASS_VALUE (id);
f181d4ae 2455 IDENTIFIER_BINDING (id) = NULL_TREE;
45537677
MS
2456 IDENTIFIER_CLASS_VALUE (id) = NULL_TREE;
2457 }
2458 TREE_CHAIN (binding) = old_bindings;
2459 old_bindings = binding;
2460 skip_it:
2461 ;
2462 }
2463 return old_bindings;
2464}
2465
8d08fdba 2466void
5566b478
MS
2467maybe_push_to_top_level (pseudo)
2468 int pseudo;
8d08fdba 2469{
a8f73d4b 2470 struct saved_scope *s;
9cd64686 2471 struct binding_level *b;
a8f73d4b
MM
2472 tree old_bindings;
2473 int need_pop;
2474
2475 s = (struct saved_scope *) xcalloc (1, sizeof (struct saved_scope));
8d08fdba 2476
9cd64686
MM
2477 b = scope_chain ? current_binding_level : 0;
2478
a8f73d4b 2479 /* If we're in the middle of some function, save our state. */
01d939e8 2480 if (cfun)
a8f73d4b
MM
2481 {
2482 need_pop = 1;
2483 push_function_context_to (NULL_TREE);
2484 }
2485 else
2486 need_pop = 0;
e349ee73 2487
a8f73d4b 2488 old_bindings = NULL_TREE;
9cd64686 2489 if (scope_chain && previous_class_type)
a50f0918
MS
2490 old_bindings = store_bindings (previous_class_values, old_bindings);
2491
8d08fdba
MS
2492 /* Have to include global_binding_level, because class-level decls
2493 aren't listed anywhere useful. */
2494 for (; b; b = b->level_chain)
2495 {
2496 tree t;
2497
2c73f9f5
ML
2498 /* Template IDs are inserted into the global level. If they were
2499 inserted into namespace level, finish_file wouldn't find them
2500 when doing pending instantiations. Therefore, don't stop at
2501 namespace level, but continue until :: . */
74b846e0 2502 if (b == global_binding_level || (pseudo && b->template_parms_p))
5566b478 2503 break;
8d08fdba 2504
45537677 2505 old_bindings = store_bindings (b->names, old_bindings);
cffa8729 2506 /* We also need to check class_shadowed to save class-level type
45537677
MS
2507 bindings, since pushclass doesn't fill in b->names. */
2508 if (b->parm_flag == 2)
cffa8729 2509 old_bindings = store_bindings (b->class_shadowed, old_bindings);
8d08fdba 2510
8d08fdba
MS
2511 /* Unwind type-value slots back to top level. */
2512 for (t = b->type_shadowed; t; t = TREE_CHAIN (t))
2513 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (t), TREE_VALUE (t));
2514 }
fc0e7bf5
MM
2515 s->prev = scope_chain;
2516 s->old_bindings = old_bindings;
a8f73d4b
MM
2517 s->bindings = b;
2518 s->need_pop_function_context = need_pop;
2519 s->function_decl = current_function_decl;
fc0e7bf5
MM
2520
2521 scope_chain = s;
8d08fdba 2522 current_function_decl = NULL_TREE;
9cd64686
MM
2523 VARRAY_TREE_INIT (current_lang_base, 10, "current_lang_base");
2524 current_lang_stack = &VARRAY_TREE (current_lang_base, 0);
51c184be
MS
2525 current_lang_name = lang_name_cplusplus;
2526 strict_prototype = strict_prototypes_lang_cplusplus;
2c73f9f5 2527 current_namespace = global_namespace;
5566b478
MS
2528}
2529
2530void
2531push_to_top_level ()
2532{
2533 maybe_push_to_top_level (0);
8d08fdba
MS
2534}
2535
2536void
2537pop_from_top_level ()
2538{
9cd64686 2539 struct saved_scope *s = scope_chain;
8d08fdba
MS
2540 tree t;
2541
e76a2646 2542 /* Clear out class-level bindings cache. */
8d08fdba 2543 if (previous_class_type)
8f032717 2544 invalidate_class_lookup_cache ();
8d08fdba 2545
9cd64686
MM
2546 VARRAY_FREE (current_lang_base);
2547
2548 scope_chain = s->prev;
87e3dbc9 2549 for (t = s->old_bindings; t; t = TREE_CHAIN (t))
8d08fdba
MS
2550 {
2551 tree id = TREE_VEC_ELT (t, 0);
2552 if (id)
2553 {
2c73f9f5 2554 SET_IDENTIFIER_TYPE_VALUE (id, TREE_VEC_ELT (t, 1));
f181d4ae 2555 IDENTIFIER_BINDING (id) = TREE_VEC_ELT (t, 2);
8d08fdba 2556 IDENTIFIER_CLASS_VALUE (id) = TREE_VEC_ELT (t, 3);
9cd64686 2557 }
8d08fdba 2558 }
9cd64686 2559
51c184be
MS
2560 if (current_lang_name == lang_name_cplusplus)
2561 strict_prototype = strict_prototypes_lang_cplusplus;
2562 else if (current_lang_name == lang_name_c)
2563 strict_prototype = strict_prototypes_lang_c;
51c184be 2564
a8f73d4b
MM
2565 /* If we were in the middle of compiling a function, restore our
2566 state. */
2567 if (s->need_pop_function_context)
2568 pop_function_context_from (NULL_TREE);
2569 current_function_decl = s->function_decl;
e349ee73 2570
a8f73d4b 2571 free (s);
8d08fdba
MS
2572}
2573\f
2574/* Push a definition of struct, union or enum tag "name".
68642fb6 2575 into binding_level "b". "type" should be the type node,
8d08fdba
MS
2576 We assume that the tag "name" is not already defined.
2577
2578 Note that the definition may really be just a forward reference.
2579 In that case, the TYPE_SIZE will be a NULL_TREE.
2580
e92cc029 2581 C++ gratuitously puts all these tags in the name space. */
8d08fdba
MS
2582
2583/* When setting the IDENTIFIER_TYPE_VALUE field of an identifier ID,
2584 record the shadowed value for this binding contour. TYPE is
2585 the type that ID maps to. */
2586
2587static void
2588set_identifier_type_value_with_scope (id, type, b)
2589 tree id;
2590 tree type;
2591 struct binding_level *b;
2592{
2c73f9f5 2593 if (!b->namespace_p)
8d08fdba 2594 {
2c73f9f5
ML
2595 /* Shadow the marker, not the real thing, so that the marker
2596 gets restored later. */
2597 tree old_type_value = REAL_IDENTIFIER_TYPE_VALUE (id);
8d08fdba
MS
2598 b->type_shadowed
2599 = tree_cons (id, old_type_value, b->type_shadowed);
2600 }
2c73f9f5
ML
2601 else
2602 {
2603 tree binding = binding_for_name (id, current_namespace);
2604 BINDING_TYPE (binding) = type;
2605 /* Store marker instead of real type. */
2606 type = global_type_node;
2607 }
8d08fdba
MS
2608 SET_IDENTIFIER_TYPE_VALUE (id, type);
2609}
2610
8f032717 2611/* As set_identifier_type_value_with_scope, but using current_binding_level. */
8d08fdba
MS
2612
2613void
2614set_identifier_type_value (id, type)
2615 tree id;
2616 tree type;
2617{
8f032717 2618 set_identifier_type_value_with_scope (id, type, current_binding_level);
8d08fdba
MS
2619}
2620
2c73f9f5
ML
2621/* Return the type associated with id. */
2622
2623tree
2624identifier_type_value (id)
2625 tree id;
2626{
2627 /* There is no type with that name, anywhere. */
2628 if (REAL_IDENTIFIER_TYPE_VALUE (id) == NULL_TREE)
2629 return NULL_TREE;
2630 /* This is not the type marker, but the real thing. */
2631 if (REAL_IDENTIFIER_TYPE_VALUE (id) != global_type_node)
2632 return REAL_IDENTIFIER_TYPE_VALUE (id);
2633 /* Have to search for it. It must be on the global level, now.
2634 Ask lookup_name not to return non-types. */
3e3f722c 2635 id = lookup_name_real (id, 2, 1, 0);
2c73f9f5
ML
2636 if (id)
2637 return TREE_TYPE (id);
2638 return NULL_TREE;
2639}
2640
a9aedbc2
MS
2641/* Pop off extraneous binding levels left over due to syntax errors.
2642
2643 We don't pop past namespaces, as they might be valid. */
e92cc029 2644
8926095f
MS
2645void
2646pop_everything ()
2647{
2648#ifdef DEBUG_CP_BINDING_LEVELS
2649 fprintf (stderr, "XXX entering pop_everything ()\n");
2650#endif
8f032717 2651 while (!toplevel_bindings_p ())
8926095f 2652 {
8f032717 2653 if (current_binding_level->parm_flag == 2)
b74a0560 2654 pop_nested_class ();
8926095f
MS
2655 else
2656 poplevel (0, 0, 0);
2657 }
2658#ifdef DEBUG_CP_BINDING_LEVELS
2659 fprintf (stderr, "XXX leaving pop_everything ()\n");
2660#endif
2661}
2662
39c01e4c
MM
2663/* The type TYPE is being declared. If it is a class template, or a
2664 specialization of a class template, do any processing required and
2665 perform error-checking. If IS_FRIEND is non-zero, this TYPE is
2666 being declared a friend. B is the binding level at which this TYPE
2667 should be bound.
2668
2669 Returns the TYPE_DECL for TYPE, which may have been altered by this
2670 processing. */
2671
68642fb6 2672static tree
39c01e4c
MM
2673maybe_process_template_type_declaration (type, globalize, b)
2674 tree type;
2675 int globalize;
2676 struct binding_level* b;
2677{
2678 tree decl = TYPE_NAME (type);
68642fb6 2679
39c01e4c
MM
2680 if (processing_template_parmlist)
2681 /* You can't declare a new template type in a template parameter
2682 list. But, you can declare a non-template type:
68642fb6 2683
39c01e4c 2684 template <class A*> struct S;
68642fb6 2685
39c01e4c
MM
2686 is a forward-declaration of `A'. */
2687 ;
68642fb6 2688 else
39c01e4c
MM
2689 {
2690 maybe_check_template_type (type);
2691
68642fb6 2692 my_friendly_assert (IS_AGGR_TYPE (type)
ed44da02 2693 || TREE_CODE (type) == ENUMERAL_TYPE, 0);
68642fb6
UD
2694
2695
3ebc5c52 2696 if (processing_template_decl)
39c01e4c
MM
2697 {
2698 /* This may change after the call to
2699 push_template_decl_real, but we want the original value. */
2700 tree name = DECL_NAME (decl);
2701
2702 decl = push_template_decl_real (decl, globalize);
2703 /* If the current binding level is the binding level for the
2704 template parameters (see the comment in
2705 begin_template_parm_list) and the enclosing level is a class
2706 scope, and we're not looking at a friend, push the
2707 declaration of the member class into the class scope. In the
2708 friend case, push_template_decl will already have put the
2709 friend into global scope, if appropriate. */
ed44da02 2710 if (TREE_CODE (type) != ENUMERAL_TYPE
74b846e0 2711 && !globalize && b->template_parms_p
39c01e4c
MM
2712 && b->level_chain->parm_flag == 2)
2713 {
61a127b3 2714 finish_member_declaration (CLASSTYPE_TI_TEMPLATE (type));
39c01e4c
MM
2715 /* Put this tag on the list of tags for the class, since
2716 that won't happen below because B is not the class
2717 binding level, but is instead the pseudo-global level. */
68642fb6 2718 b->level_chain->tags =
e1b3e07d 2719 tree_cons (name, type, b->level_chain->tags);
d0f062fb 2720 if (!COMPLETE_TYPE_P (current_class_type))
39c01e4c
MM
2721 CLASSTYPE_TAGS (current_class_type) = b->level_chain->tags;
2722 }
2723 }
2724 }
2725
2726 return decl;
2727}
2728
9188c363
MM
2729/* In C++, you don't have to write `struct S' to refer to `S'; you
2730 can just use `S'. We accomplish this by creating a TYPE_DECL as
2731 if the user had written `typedef struct S S'. Create and return
2732 the TYPE_DECL for TYPE. */
2733
2734tree
2735create_implicit_typedef (name, type)
2736 tree name;
2737 tree type;
2738{
2739 tree decl;
2740
2741 decl = build_decl (TYPE_DECL, name, type);
2742 SET_DECL_ARTIFICIAL (decl);
2743 /* There are other implicit type declarations, like the one *within*
2744 a class that allows you to write `S::S'. We must distinguish
2745 amongst these. */
2746 SET_DECL_IMPLICIT_TYPEDEF_P (decl);
2747 TYPE_NAME (type) = decl;
2748
2749 return decl;
2750}
2751
8d08fdba 2752/* Push a tag name NAME for struct/class/union/enum type TYPE.
6757edfe 2753 Normally put it into the inner-most non-tag-transparent scope,
8d08fdba 2754 but if GLOBALIZE is true, put it in the inner-most non-class scope.
e92cc029 2755 The latter is needed for implicit declarations. */
8d08fdba
MS
2756
2757void
2758pushtag (name, type, globalize)
2759 tree name, type;
2760 int globalize;
2761{
2762 register struct binding_level *b;
8d08fdba 2763
8f032717 2764 b = current_binding_level;
8d08fdba
MS
2765 while (b->tag_transparent
2766 || (globalize && b->parm_flag == 2))
2767 b = b->level_chain;
2768
e1b3e07d 2769 b->tags = tree_cons (name, type, b->tags);
8d08fdba
MS
2770
2771 if (name)
2772 {
8d08fdba 2773 /* Do C++ gratuitous typedefing. */
db5ae43f 2774 if (IDENTIFIER_TYPE_VALUE (name) != type)
8d08fdba 2775 {
93cdc044 2776 register tree d = NULL_TREE;
848cf1e0 2777 int in_class = 0;
9188c363 2778 tree context = TYPE_CONTEXT (type);
280f9385 2779
280f9385
MM
2780 if (! context)
2781 {
2782 tree cs = current_scope ();
2783
2784 if (! globalize)
2785 context = cs;
2f939d94 2786 else if (cs != NULL_TREE && TYPE_P (cs))
280f9385
MM
2787 /* When declaring a friend class of a local class, we want
2788 to inject the newly named class into the scope
2789 containing the local class, not the namespace scope. */
4f1c5b7d 2790 context = decl_function_context (get_type_decl (cs));
280f9385 2791 }
280f9385
MM
2792 if (!context)
2793 context = current_namespace;
8d08fdba 2794
74b846e0 2795 if ((b->template_parms_p && b->level_chain->parm_flag == 2)
93cdc044
JM
2796 || b->parm_flag == 2)
2797 in_class = 1;
93cdc044 2798
848cf1e0
MM
2799 if (current_lang_name == lang_name_java)
2800 TYPE_FOR_JAVA (type) = 1;
93cdc044 2801
9188c363 2802 d = create_implicit_typedef (name, type);
cb0dbb9a 2803 DECL_CONTEXT (d) = FROB_CONTEXT (context);
9188c363
MM
2804 if (! in_class)
2805 set_identifier_type_value_with_scope (name, type, b);
e1cd6e56 2806
39c01e4c
MM
2807 d = maybe_process_template_type_declaration (type,
2808 globalize, b);
93cdc044
JM
2809
2810 if (b->parm_flag == 2)
61a127b3 2811 {
848cf1e0 2812 if (!PROCESSING_REAL_TEMPLATE_DECL_P ())
61a127b3
MM
2813 /* Put this TYPE_DECL on the TYPE_FIELDS list for the
2814 class. But if it's a member template class, we
2815 want the TEMPLATE_DECL, not the TYPE_DECL, so this
2816 is done later. */
2817 finish_member_declaration (d);
8f032717
MM
2818 else
2819 pushdecl_class_level (d);
61a127b3 2820 }
93cdc044
JM
2821 else
2822 d = pushdecl_with_scope (d, b);
2823
848cf1e0
MM
2824 if (ANON_AGGRNAME_P (name))
2825 DECL_IGNORED_P (d) = 1;
2826
2827 TYPE_CONTEXT (type) = DECL_CONTEXT (d);
2828 DECL_ASSEMBLER_NAME (d) = DECL_NAME (d);
2829 if (!uses_template_parms (type))
2830 DECL_ASSEMBLER_NAME (d)
2831 = get_identifier (build_overload_name (type, 1, 1));
8d08fdba
MS
2832 }
2833 if (b->parm_flag == 2)
2834 {
d0f062fb 2835 if (!COMPLETE_TYPE_P (current_class_type))
8d08fdba
MS
2836 CLASSTYPE_TAGS (current_class_type) = b->tags;
2837 }
2838 }
2839
2840 if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL)
2841 /* Use the canonical TYPE_DECL for this node. */
2842 TYPE_STUB_DECL (type) = TYPE_NAME (type);
2843 else
2844 {
2845 /* Create a fake NULL-named TYPE_DECL node whose TREE_TYPE
2846 will be the tagged type we just added to the current
2847 binding level. This fake NULL-named TYPE_DECL node helps
2848 dwarfout.c to know when it needs to output a
2849 representation of a tagged type, and it also gives us a
2850 convenient place to record the "scope start" address for
2851 the tagged type. */
2852
8d08fdba 2853 tree d = build_decl (TYPE_DECL, NULL_TREE, type);
8d08fdba
MS
2854 TYPE_STUB_DECL (type) = pushdecl_with_scope (d, b);
2855 }
2856}
2857
2858/* Counter used to create anonymous type names. */
e92cc029 2859
8d08fdba
MS
2860static int anon_cnt = 0;
2861
2862/* Return an IDENTIFIER which can be used as a name for
2863 anonymous structs and unions. */
e92cc029 2864
8d08fdba
MS
2865tree
2866make_anon_name ()
2867{
2868 char buf[32];
2869
2870 sprintf (buf, ANON_AGGRNAME_FORMAT, anon_cnt++);
2871 return get_identifier (buf);
2872}
2873
2874/* Clear the TREE_PURPOSE slot of tags which have anonymous typenames.
2875 This keeps dbxout from getting confused. */
e92cc029 2876
8d08fdba
MS
2877void
2878clear_anon_tags ()
2879{
2880 register struct binding_level *b;
2881 register tree tags;
2882 static int last_cnt = 0;
2883
2884 /* Fast out if no new anon names were declared. */
2885 if (last_cnt == anon_cnt)
2886 return;
2887
2888 b = current_binding_level;
2889 while (b->tag_transparent)
2890 b = b->level_chain;
2891 tags = b->tags;
2892 while (tags)
2893 {
2894 /* A NULL purpose means we have already processed all tags
2895 from here to the end of the list. */
2896 if (TREE_PURPOSE (tags) == NULL_TREE)
2897 break;
2898 if (ANON_AGGRNAME_P (TREE_PURPOSE (tags)))
2899 TREE_PURPOSE (tags) = NULL_TREE;
2900 tags = TREE_CHAIN (tags);
2901 }
2902 last_cnt = anon_cnt;
2903}
2904\f
2905/* Subroutine of duplicate_decls: return truthvalue of whether
2906 or not types of these decls match.
2907
2908 For C++, we must compare the parameter list so that `int' can match
2909 `int&' in a parameter position, but `int&' is not confused with
2910 `const int&'. */
e92cc029 2911
6060a796 2912int
8d08fdba
MS
2913decls_match (newdecl, olddecl)
2914 tree newdecl, olddecl;
2915{
2916 int types_match;
2917
347d73d7
ML
2918 if (newdecl == olddecl)
2919 return 1;
2920
6b4b3deb
MM
2921 if (TREE_CODE (newdecl) != TREE_CODE (olddecl))
2922 /* If the two DECLs are not even the same kind of thing, we're not
2923 interested in their types. */
2924 return 0;
2925
2926 if (TREE_CODE (newdecl) == FUNCTION_DECL)
8d08fdba
MS
2927 {
2928 tree f1 = TREE_TYPE (newdecl);
2929 tree f2 = TREE_TYPE (olddecl);
2930 tree p1 = TYPE_ARG_TYPES (f1);
2931 tree p2 = TYPE_ARG_TYPES (f2);
2932
4f1c5b7d 2933 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
c5a6fc45
JM
2934 && ! (DECL_LANGUAGE (newdecl) == lang_c
2935 && DECL_LANGUAGE (olddecl) == lang_c))
2936 return 0;
2937
8d08fdba 2938 if (TREE_CODE (f1) != TREE_CODE (f2))
e867a179 2939 return 0;
8d08fdba 2940
3bfdc719 2941 if (same_type_p (TREE_TYPE (f1), TREE_TYPE (f2)))
8926095f 2942 {
a28e3c7f 2943 if (! strict_prototypes_lang_c && DECL_LANGUAGE (olddecl) == lang_c
8926095f 2944 && p2 == NULL_TREE)
a28e3c7f
MS
2945 {
2946 types_match = self_promoting_args_p (p1);
2947 if (p1 == void_list_node)
2948 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
2949 }
2950 else if (!strict_prototypes_lang_c && DECL_LANGUAGE (olddecl)==lang_c
2951 && DECL_LANGUAGE (newdecl) == lang_c && p1 == NULL_TREE)
2952 {
2953 types_match = self_promoting_args_p (p2);
2954 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
2955 }
8926095f 2956 else
91063b51 2957 types_match = compparms (p1, p2);
8926095f 2958 }
8d08fdba
MS
2959 else
2960 types_match = 0;
2961 }
6b4b3deb 2962 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
51c184be 2963 {
f84b4be9
JM
2964 if (!comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
2965 DECL_TEMPLATE_PARMS (olddecl)))
2966 return 0;
68642fb6 2967
f84b4be9
JM
2968 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
2969 types_match = 1;
2970 else
2971 types_match = decls_match (DECL_TEMPLATE_RESULT (olddecl),
2972 DECL_TEMPLATE_RESULT (newdecl));
51c184be 2973 }
8d08fdba
MS
2974 else
2975 {
2976 if (TREE_TYPE (newdecl) == error_mark_node)
2977 types_match = TREE_TYPE (olddecl) == error_mark_node;
2978 else if (TREE_TYPE (olddecl) == NULL_TREE)
2979 types_match = TREE_TYPE (newdecl) == NULL_TREE;
a0a33927
MS
2980 else if (TREE_TYPE (newdecl) == NULL_TREE)
2981 types_match = 0;
8d08fdba 2982 else
01240200 2983 types_match = comptypes (TREE_TYPE (newdecl),
3bfdc719
MM
2984 TREE_TYPE (olddecl),
2985 COMPARE_REDECLARATION);
8d08fdba
MS
2986 }
2987
2988 return types_match;
2989}
2990
2991/* If NEWDECL is `static' and an `extern' was seen previously,
24f30ed4 2992 warn about it. OLDDECL is the previous declaration.
8d08fdba
MS
2993
2994 Note that this does not apply to the C++ case of declaring
2995 a variable `extern const' and then later `const'.
2996
8d08fdba
MS
2997 Don't complain about built-in functions, since they are beyond
2998 the user's control. */
2999
3000static void
3001warn_extern_redeclared_static (newdecl, olddecl)
3002 tree newdecl, olddecl;
3003{
d8e178a0 3004 static const char *explicit_extern_static_warning
8251199e 3005 = "`%D' was declared `extern' and later `static'";
d8e178a0 3006 static const char *implicit_extern_static_warning
8251199e
JM
3007 = "`%D' was declared implicitly `extern' and later `static'";
3008
24f30ed4
MM
3009 tree name;
3010
68642fb6 3011 if (TREE_CODE (newdecl) == TYPE_DECL
7c355bca 3012 || TREE_CODE (newdecl) == TEMPLATE_DECL)
8d08fdba 3013 return;
68642fb6 3014
963d5758
MM
3015 /* Don't get confused by static member functions; that's a different
3016 use of `static'. */
3017 if (TREE_CODE (newdecl) == FUNCTION_DECL
3018 && DECL_STATIC_FUNCTION_P (newdecl))
3019 return;
8d08fdba 3020
24f30ed4
MM
3021 /* If the old declaration was `static', or the new one isn't, then
3022 then everything is OK. */
3023 if (DECL_THIS_STATIC (olddecl) || !DECL_THIS_STATIC (newdecl))
3024 return;
3025
3026 /* It's OK to declare a builtin function as `static'. */
3027 if (TREE_CODE (olddecl) == FUNCTION_DECL
3028 && DECL_ARTIFICIAL (olddecl))
3029 return;
3030
8d08fdba 3031 name = DECL_ASSEMBLER_NAME (newdecl);
24f30ed4
MM
3032 cp_pedwarn (IDENTIFIER_IMPLICIT_DECL (name)
3033 ? implicit_extern_static_warning
3034 : explicit_extern_static_warning, newdecl);
3035 cp_pedwarn_at ("previous declaration of `%D'", olddecl);
8d08fdba
MS
3036}
3037
3038/* Handle when a new declaration NEWDECL has the same name as an old
3039 one OLDDECL in the same binding contour. Prints an error message
3040 if appropriate.
3041
3042 If safely possible, alter OLDDECL to look like NEWDECL, and return 1.
3043 Otherwise, return 0. */
3044
51c184be 3045int
8d08fdba 3046duplicate_decls (newdecl, olddecl)
824b9a4c 3047 tree newdecl, olddecl;
8d08fdba 3048{
8d08fdba
MS
3049 unsigned olddecl_uid = DECL_UID (olddecl);
3050 int olddecl_friend = 0, types_match = 0;
0b60dfe3 3051 int new_defines_function = 0;
5566b478
MS
3052
3053 if (newdecl == olddecl)
3054 return 1;
8d08fdba 3055
8926095f 3056 types_match = decls_match (newdecl, olddecl);
8d08fdba 3057
8d08fdba
MS
3058 /* If either the type of the new decl or the type of the old decl is an
3059 error_mark_node, then that implies that we have already issued an
3060 error (earlier) for some bogus type specification, and in that case,
3061 it is rather pointless to harass the user with yet more error message
0b60dfe3 3062 about the same declaration, so just pretend the types match here. */
bd6dd845
MS
3063 if (TREE_TYPE (newdecl) == error_mark_node
3064 || TREE_TYPE (olddecl) == error_mark_node)
8d08fdba 3065 types_match = 1;
68642fb6 3066
0b60dfe3 3067 /* Check for redeclaration and other discrepancies. */
d22c8596 3068 if (TREE_CODE (olddecl) == FUNCTION_DECL
9f33663b
JM
3069 && DECL_ARTIFICIAL (olddecl))
3070 {
3071 if (TREE_CODE (newdecl) != FUNCTION_DECL)
3072 {
3073 /* If you declare a built-in or predefined function name as static,
3074 the old definition is overridden, but optionally warn this was a
3075 bad choice of name. */
3076 if (! TREE_PUBLIC (newdecl))
3077 {
3078 if (warn_shadow)
3079 cp_warning ("shadowing %s function `%#D'",
3080 DECL_BUILT_IN (olddecl) ? "built-in" : "library",
3081 olddecl);
3082 /* Discard the old built-in function. */
3083 return 0;
3084 }
3085 /* If the built-in is not ansi, then programs can override
3086 it even globally without an error. */
3087 else if (! DECL_BUILT_IN (olddecl))
3088 cp_warning ("library function `%#D' redeclared as non-function `%#D'",
3089 olddecl, newdecl);
3090 else
3091 {
3092 cp_error ("declaration of `%#D'", newdecl);
3093 cp_error ("conflicts with built-in declaration `%#D'",
a4443a08 3094 olddecl);
9f33663b 3095 }
a4443a08
MS
3096 return 0;
3097 }
9f33663b 3098 else if (!types_match)
8d08fdba 3099 {
9f33663b
JM
3100 if ((DECL_LANGUAGE (newdecl) == lang_c
3101 && DECL_LANGUAGE (olddecl) == lang_c)
3102 || compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
3103 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
a4443a08 3104 {
9f33663b
JM
3105 /* A near match; override the builtin. */
3106
3107 if (TREE_PUBLIC (newdecl))
a4443a08 3108 {
9f33663b
JM
3109 cp_warning ("new declaration `%#D'", newdecl);
3110 cp_warning ("ambiguates built-in declaration `%#D'",
3111 olddecl);
a4443a08 3112 }
9f33663b
JM
3113 else if (warn_shadow)
3114 cp_warning ("shadowing %s function `%#D'",
3115 DECL_BUILT_IN (olddecl) ? "built-in" : "library",
3116 olddecl);
a4443a08 3117 }
9f33663b
JM
3118 else
3119 /* Discard the old built-in function. */
3120 return 0;
8d08fdba 3121 }
68642fb6 3122
24f30ed4
MM
3123 if (DECL_THIS_STATIC (newdecl) && !DECL_THIS_STATIC (olddecl))
3124 {
3125 /* If a builtin function is redeclared as `static', merge
3126 the declarations, but make the original one static. */
3127 DECL_THIS_STATIC (olddecl) = 1;
3128 TREE_PUBLIC (olddecl) = 0;
9bfadf57
MM
3129
3130 /* Make the olddeclaration consistent with the new one so that
3131 all remnants of the builtin-ness of this function will be
3132 banished. */
3133 DECL_LANGUAGE (olddecl) = DECL_LANGUAGE (newdecl);
3134 DECL_RTL (olddecl) = DECL_RTL (newdecl);
3135 DECL_ASSEMBLER_NAME (olddecl) = DECL_ASSEMBLER_NAME (newdecl);
3136 SET_IDENTIFIER_GLOBAL_VALUE (DECL_ASSEMBLER_NAME (newdecl),
3137 newdecl);
24f30ed4 3138 }
39211cd5
MS
3139 }
3140 else if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
3141 {
9ed182dc
JM
3142 if ((TREE_CODE (olddecl) == TYPE_DECL && DECL_ARTIFICIAL (olddecl)
3143 && TREE_CODE (newdecl) != TYPE_DECL
3144 && ! (TREE_CODE (newdecl) == TEMPLATE_DECL
3145 && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL))
3146 || (TREE_CODE (newdecl) == TYPE_DECL && DECL_ARTIFICIAL (newdecl)
3147 && TREE_CODE (olddecl) != TYPE_DECL
3148 && ! (TREE_CODE (olddecl) == TEMPLATE_DECL
3149 && (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl))
3150 == TYPE_DECL))))
3151 {
3152 /* We do nothing special here, because C++ does such nasty
3153 things with TYPE_DECLs. Instead, just let the TYPE_DECL
3154 get shadowed, and know that if we need to find a TYPE_DECL
3155 for a given name, we can look in the IDENTIFIER_TYPE_VALUE
3156 slot of the identifier. */
3157 return 0;
3158 }
3159
39211cd5 3160 if ((TREE_CODE (newdecl) == FUNCTION_DECL
5566b478 3161 && DECL_FUNCTION_TEMPLATE_P (olddecl))
39211cd5 3162 || (TREE_CODE (olddecl) == FUNCTION_DECL
5566b478 3163 && DECL_FUNCTION_TEMPLATE_P (newdecl)))
39211cd5 3164 return 0;
9ed182dc 3165
8251199e 3166 cp_error ("`%#D' redeclared as different kind of symbol", newdecl);
39211cd5
MS
3167 if (TREE_CODE (olddecl) == TREE_LIST)
3168 olddecl = TREE_VALUE (olddecl);
8251199e 3169 cp_error_at ("previous declaration of `%#D'", olddecl);
39211cd5
MS
3170
3171 /* New decl is completely inconsistent with the old one =>
3172 tell caller to replace the old one. */
3173
3174 return 0;
8d08fdba 3175 }
8d08fdba
MS
3176 else if (!types_match)
3177 {
4f1c5b7d 3178 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl))
7bdbfa05
MM
3179 /* These are certainly not duplicate declarations; they're
3180 from different scopes. */
3181 return 0;
3182
8926095f 3183 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
f0e01782
MS
3184 {
3185 /* The name of a class template may not be declared to refer to
3186 any other template, class, function, object, namespace, value,
e92cc029 3187 or type in the same scope. */
5566b478
MS
3188 if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == TYPE_DECL
3189 || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
f0e01782 3190 {
8251199e
JM
3191 cp_error ("declaration of template `%#D'", newdecl);
3192 cp_error_at ("conflicts with previous declaration `%#D'",
f0e01782
MS
3193 olddecl);
3194 }
ec255269
MS
3195 else if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == FUNCTION_DECL
3196 && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
3197 && compparms (TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl))),
91063b51 3198 TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl))))
75650646
MM
3199 && comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
3200 DECL_TEMPLATE_PARMS (olddecl)))
ec255269 3201 {
8251199e
JM
3202 cp_error ("new declaration `%#D'", newdecl);
3203 cp_error_at ("ambiguates old declaration `%#D'", olddecl);
ec255269 3204 }
f0e01782
MS
3205 return 0;
3206 }
8926095f
MS
3207 if (TREE_CODE (newdecl) == FUNCTION_DECL)
3208 {
3209 if (DECL_LANGUAGE (newdecl) == lang_c
3210 && DECL_LANGUAGE (olddecl) == lang_c)
3211 {
8251199e 3212 cp_error ("declaration of C function `%#D' conflicts with",
8926095f 3213 newdecl);
8251199e 3214 cp_error_at ("previous declaration `%#D' here", olddecl);
8926095f 3215 }
00595019 3216 else if (compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
91063b51 3217 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
700f8a87 3218 {
8251199e
JM
3219 cp_error ("new declaration `%#D'", newdecl);
3220 cp_error_at ("ambiguates old declaration `%#D'", olddecl);
700f8a87
MS
3221 }
3222 else
3223 return 0;
8926095f 3224 }
8d08fdba
MS
3225
3226 /* Already complained about this, so don't do so again. */
a4443a08 3227 else if (current_class_type == NULL_TREE
8d08fdba
MS
3228 || IDENTIFIER_ERROR_LOCUS (DECL_ASSEMBLER_NAME (newdecl)) != current_class_type)
3229 {
8251199e
JM
3230 cp_error ("conflicting types for `%#D'", newdecl);
3231 cp_error_at ("previous declaration as `%#D'", olddecl);
8d08fdba
MS
3232 }
3233 }
68642fb6 3234 else if (TREE_CODE (newdecl) == FUNCTION_DECL
75650646
MM
3235 && ((DECL_TEMPLATE_SPECIALIZATION (olddecl)
3236 && (!DECL_TEMPLATE_INFO (newdecl)
68642fb6 3237 || (DECL_TI_TEMPLATE (newdecl)
75650646
MM
3238 != DECL_TI_TEMPLATE (olddecl))))
3239 || (DECL_TEMPLATE_SPECIALIZATION (newdecl)
3240 && (!DECL_TEMPLATE_INFO (olddecl)
68642fb6 3241 || (DECL_TI_TEMPLATE (olddecl)
75650646 3242 != DECL_TI_TEMPLATE (newdecl))))))
386b8a85
JM
3243 /* It's OK to have a template specialization and a non-template
3244 with the same type, or to have specializations of two
75650646
MM
3245 different templates with the same type. Note that if one is a
3246 specialization, and the other is an instantiation of the same
3247 template, that we do not exit at this point. That situation
3248 can occur if we instantiate a template class, and then
3249 specialize one of its methods. This situation is legal, but
3250 the declarations must be merged in the usual way. */
3251 return 0;
68642fb6
UD
3252 else if (TREE_CODE (newdecl) == FUNCTION_DECL
3253 && ((DECL_TEMPLATE_INSTANTIATION (olddecl)
75650646
MM
3254 && !DECL_USE_TEMPLATE (newdecl))
3255 || (DECL_TEMPLATE_INSTANTIATION (newdecl)
3256 && !DECL_USE_TEMPLATE (olddecl))))
3257 /* One of the declarations is a template instantiation, and the
3258 other is not a template at all. That's OK. */
386b8a85 3259 return 0;
85c6cbaf
ML
3260 else if (TREE_CODE (newdecl) == NAMESPACE_DECL
3261 && DECL_NAMESPACE_ALIAS (newdecl)
3262 && DECL_NAMESPACE_ALIAS (newdecl) == DECL_NAMESPACE_ALIAS (olddecl))
3263 /* Redeclaration of namespace alias, ignore it. */
3264 return 1;
8d08fdba
MS
3265 else
3266 {
d8e178a0 3267 const char *errmsg = redeclaration_error_message (newdecl, olddecl);
8251199e 3268 if (errmsg)
8d08fdba 3269 {
8251199e 3270 cp_error (errmsg, newdecl);
8d08fdba
MS
3271 if (DECL_NAME (olddecl) != NULL_TREE)
3272 cp_error_at ((DECL_INITIAL (olddecl)
2c73f9f5 3273 && namespace_bindings_p ())
8251199e
JM
3274 ? "`%#D' previously defined here"
3275 : "`%#D' previously declared here", olddecl);
8d08fdba
MS
3276 }
3277 else if (TREE_CODE (olddecl) == FUNCTION_DECL
3278 && DECL_INITIAL (olddecl) != NULL_TREE
3279 && TYPE_ARG_TYPES (TREE_TYPE (olddecl)) == NULL_TREE
3280 && TYPE_ARG_TYPES (TREE_TYPE (newdecl)) != NULL_TREE)
3281 {
3282 /* Prototype decl follows defn w/o prototype. */
8251199e
JM
3283 cp_warning_at ("prototype for `%#D'", newdecl);
3284 cp_warning_at ("follows non-prototype definition here", olddecl);
8d08fdba
MS
3285 }
3286 else if (TREE_CODE (olddecl) == FUNCTION_DECL
3287 && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl))
8926095f
MS
3288 {
3289 /* extern "C" int foo ();
3290 int foo () { bar (); }
3291 is OK. */
9cd64686
MM
3292 if (current_lang_stack
3293 == &VARRAY_TREE (current_lang_base, 0))
a28e3c7f 3294 DECL_LANGUAGE (newdecl) = DECL_LANGUAGE (olddecl);
8926095f
MS
3295 else
3296 {
8251199e 3297 cp_error_at ("previous declaration of `%#D' with %L linkage",
8926095f 3298 olddecl, DECL_LANGUAGE (olddecl));
8251199e 3299 cp_error ("conflicts with new declaration with %L linkage",
8926095f
MS
3300 DECL_LANGUAGE (newdecl));
3301 }
3302 }
e1cd6e56 3303
a6f02587 3304 if (DECL_LANG_SPECIFIC (olddecl) && DECL_USE_TEMPLATE (olddecl))
c32381b1
JM
3305 ;
3306 else if (TREE_CODE (olddecl) == FUNCTION_DECL)
e1cd6e56
MS
3307 {
3308 tree t1 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
3309 tree t2 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
3310 int i = 1;
3311
3312 if (TREE_CODE (TREE_TYPE (newdecl)) == METHOD_TYPE)
3313 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2);
68642fb6 3314
e1cd6e56
MS
3315 for (; t1 && t1 != void_list_node;
3316 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2), i++)
3317 if (TREE_PURPOSE (t1) && TREE_PURPOSE (t2))
3318 {
2507f3b5
RK
3319 if (1 == simple_cst_equal (TREE_PURPOSE (t1),
3320 TREE_PURPOSE (t2)))
e1cd6e56
MS
3321 {
3322 if (pedantic)
3323 {
8251199e 3324 cp_pedwarn ("default argument given for parameter %d of `%#D'",
e1cd6e56 3325 i, newdecl);
8251199e 3326 cp_pedwarn_at ("after previous specification in `%#D'",
e1cd6e56
MS
3327 olddecl);
3328 }
3329 }
3330 else
3331 {
8251199e 3332 cp_error ("default argument given for parameter %d of `%#D'",
e1cd6e56 3333 i, newdecl);
8251199e 3334 cp_error_at ("after previous specification in `%#D'",
e1cd6e56
MS
3335 olddecl);
3336 }
3337 }
a5894242 3338
7fcdf4c2
MS
3339 if (DECL_THIS_INLINE (newdecl) && ! DECL_THIS_INLINE (olddecl)
3340 && TREE_ADDRESSABLE (olddecl) && warn_inline)
dff6b454 3341 {
8251199e 3342 cp_warning ("`%#D' was used before it was declared inline",
7fcdf4c2 3343 newdecl);
8251199e 3344 cp_warning_at ("previous non-inline declaration here",
7fcdf4c2 3345 olddecl);
dff6b454 3346 }
e1cd6e56 3347 }
8d08fdba
MS
3348 }
3349
3350 /* If new decl is `static' and an `extern' was seen previously,
3351 warn about it. */
3352 warn_extern_redeclared_static (newdecl, olddecl);
3353
e92cc029 3354 /* We have committed to returning 1 at this point. */
8d08fdba
MS
3355 if (TREE_CODE (newdecl) == FUNCTION_DECL)
3356 {
3357 /* Now that functions must hold information normally held
3358 by field decls, there is extra work to do so that
3359 declaration information does not get destroyed during
3360 definition. */
3361 if (DECL_VINDEX (olddecl))
3362 DECL_VINDEX (newdecl) = DECL_VINDEX (olddecl);
4f1c5b7d
MM
3363 if (DECL_VIRTUAL_CONTEXT (olddecl))
3364 DECL_VIRTUAL_CONTEXT (newdecl) = DECL_VIRTUAL_CONTEXT (olddecl);
8d08fdba
MS
3365 if (DECL_CONTEXT (olddecl))
3366 DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
8d08fdba
MS
3367 if (DECL_PENDING_INLINE_INFO (newdecl) == (struct pending_inline *)0)
3368 DECL_PENDING_INLINE_INFO (newdecl) = DECL_PENDING_INLINE_INFO (olddecl);
e1cd6e56
MS
3369 DECL_STATIC_CONSTRUCTOR (newdecl) |= DECL_STATIC_CONSTRUCTOR (olddecl);
3370 DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
fee7654e 3371 DECL_PURE_VIRTUAL_P (newdecl) |= DECL_PURE_VIRTUAL_P (olddecl);
864b83b9 3372 DECL_VIRTUAL_P (newdecl) |= DECL_VIRTUAL_P (olddecl);
4a67c9e9 3373 DECL_NEEDS_FINAL_OVERRIDER_P (newdecl) |= DECL_NEEDS_FINAL_OVERRIDER_P (olddecl);
963d5758 3374 DECL_THIS_STATIC (newdecl) |= DECL_THIS_STATIC (olddecl);
0b60dfe3 3375 new_defines_function = DECL_INITIAL (newdecl) != NULL_TREE;
68642fb6 3376
0b60dfe3
BK
3377 /* Optionally warn about more than one declaration for the same
3378 name, but don't warn about a function declaration followed by a
3379 definition. */
3380 if (warn_redundant_decls && ! DECL_ARTIFICIAL (olddecl)
3381 && !(new_defines_function && DECL_INITIAL (olddecl) == NULL_TREE)
3382 /* Don't warn about extern decl followed by definition. */
3383 && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl))
3384 /* Don't warn about friends, let add_friend take care of it. */
3385 && ! DECL_FRIEND_P (newdecl))
3386 {
8251199e
JM
3387 cp_warning ("redundant redeclaration of `%D' in same scope", newdecl);
3388 cp_warning_at ("previous declaration of `%D'", olddecl);
0b60dfe3 3389 }
8d08fdba
MS
3390 }
3391
3392 /* Deal with C++: must preserve virtual function table size. */
3393 if (TREE_CODE (olddecl) == TYPE_DECL)
3394 {
3395 register tree newtype = TREE_TYPE (newdecl);
3396 register tree oldtype = TREE_TYPE (olddecl);
3397
3398 if (newtype != error_mark_node && oldtype != error_mark_node
3399 && TYPE_LANG_SPECIFIC (newtype) && TYPE_LANG_SPECIFIC (oldtype))
3400 {
3401 CLASSTYPE_VSIZE (newtype) = CLASSTYPE_VSIZE (oldtype);
3402 CLASSTYPE_FRIEND_CLASSES (newtype)
3403 = CLASSTYPE_FRIEND_CLASSES (oldtype);
3404 }
8d08fdba
MS
3405 }
3406
8d08fdba
MS
3407 /* Copy all the DECL_... slots specified in the new decl
3408 except for any that we copy here from the old type. */
68642fb6 3409 DECL_MACHINE_ATTRIBUTES (newdecl)
0b60dfe3 3410 = merge_machine_decl_attributes (olddecl, newdecl);
8d08fdba 3411
5566b478
MS
3412 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
3413 {
4d85e00e
MM
3414 if (! duplicate_decls (DECL_TEMPLATE_RESULT (newdecl),
3415 DECL_TEMPLATE_RESULT (olddecl)))
8251199e 3416 cp_error ("invalid redeclaration of %D", newdecl);
4d85e00e 3417 TREE_TYPE (olddecl) = TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl));
68642fb6 3418 DECL_TEMPLATE_SPECIALIZATIONS (olddecl)
4d85e00e
MM
3419 = chainon (DECL_TEMPLATE_SPECIALIZATIONS (olddecl),
3420 DECL_TEMPLATE_SPECIALIZATIONS (newdecl));
68642fb6 3421
5566b478
MS
3422 return 1;
3423 }
68642fb6 3424
8d08fdba
MS
3425 if (types_match)
3426 {
3427 /* Automatically handles default parameters. */
3428 tree oldtype = TREE_TYPE (olddecl);
e1cd6e56 3429 tree newtype;
8d08fdba 3430
e1cd6e56
MS
3431 /* Merge the data types specified in the two decls. */
3432 newtype = common_type (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
3433
8d08fdba
MS
3434 if (TREE_CODE (newdecl) == VAR_DECL)
3435 DECL_THIS_EXTERN (newdecl) |= DECL_THIS_EXTERN (olddecl);
3436 /* Do this after calling `common_type' so that default
3437 parameters don't confuse us. */
3438 else if (TREE_CODE (newdecl) == FUNCTION_DECL
3439 && (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl))
3440 != TYPE_RAISES_EXCEPTIONS (TREE_TYPE (olddecl))))
3441 {
f30432d7 3442 TREE_TYPE (newdecl) = build_exception_variant (newtype,
8d08fdba 3443 TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl)));
f30432d7 3444 TREE_TYPE (olddecl) = build_exception_variant (newtype,
8d08fdba
MS
3445 TYPE_RAISES_EXCEPTIONS (oldtype));
3446
9a224b4a
JM
3447 if ((pedantic || ! DECL_IN_SYSTEM_HEADER (olddecl))
3448 && DECL_SOURCE_LINE (olddecl) != 0
da20811c 3449 && flag_exceptions
4cc1d462
NS
3450 && !comp_except_specs (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl)),
3451 TYPE_RAISES_EXCEPTIONS (TREE_TYPE (olddecl)), 1))
8d08fdba 3452 {
4cc1d462 3453 cp_error ("declaration of `%F' throws different exceptions",
a28e3c7f 3454 newdecl);
a09ba2e0 3455 cp_error_at ("than previous declaration `%F'", olddecl);
8d08fdba
MS
3456 }
3457 }
3458 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
3459
3460 /* Lay the type out, unless already done. */
407f03b8 3461 if (! same_type_p (newtype, oldtype)
5566b478 3462 && TREE_TYPE (newdecl) != error_mark_node
5156628f 3463 && !(processing_template_decl && uses_template_parms (newdecl)))
b7484fbe
MS
3464 layout_type (TREE_TYPE (newdecl));
3465
5566b478
MS
3466 if ((TREE_CODE (newdecl) == VAR_DECL
3467 || TREE_CODE (newdecl) == PARM_DECL
3468 || TREE_CODE (newdecl) == RESULT_DECL
3469 || TREE_CODE (newdecl) == FIELD_DECL
3470 || TREE_CODE (newdecl) == TYPE_DECL)
5156628f 3471 && !(processing_template_decl && uses_template_parms (newdecl)))
b7484fbe 3472 layout_decl (newdecl, 0);
8d08fdba
MS
3473
3474 /* Merge the type qualifiers. */
3475 if (TREE_READONLY (newdecl))
3476 TREE_READONLY (olddecl) = 1;
3477 if (TREE_THIS_VOLATILE (newdecl))
3478 TREE_THIS_VOLATILE (olddecl) = 1;
3479
3480 /* Merge the initialization information. */
8926095f
MS
3481 if (DECL_INITIAL (newdecl) == NULL_TREE
3482 && DECL_INITIAL (olddecl) != NULL_TREE)
3483 {
3484 DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
3485 DECL_SOURCE_FILE (newdecl) = DECL_SOURCE_FILE (olddecl);
3486 DECL_SOURCE_LINE (newdecl) = DECL_SOURCE_LINE (olddecl);
b0d06515
MM
3487 if (CAN_HAVE_FULL_LANG_DECL_P (newdecl)
3488 && DECL_LANG_SPECIFIC (newdecl)
4d85e00e
MM
3489 && DECL_LANG_SPECIFIC (olddecl))
3490 DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
8926095f 3491 }
39211cd5
MS
3492
3493 /* Merge the section attribute.
3494 We want to issue an error if the sections conflict but that must be
3495 done later in decl_attributes since we are called before attributes
3496 are assigned. */
3497 if (DECL_SECTION_NAME (newdecl) == NULL_TREE)
3498 DECL_SECTION_NAME (newdecl) = DECL_SECTION_NAME (olddecl);
3499
5d73aa63
MM
3500 /* Keep the old rtl since we can safely use it. */
3501 DECL_RTL (newdecl) = DECL_RTL (olddecl);
a157febd
GK
3502
3503 if (TREE_CODE (newdecl) == FUNCTION_DECL)
3504 {
3505 DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (newdecl)
3506 |= DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (olddecl);
3507 DECL_NO_CHECK_MEMORY_USAGE (newdecl)
3508 |= DECL_NO_CHECK_MEMORY_USAGE (olddecl);
3509 DECL_NO_LIMIT_STACK (newdecl)
3510 |= DECL_NO_LIMIT_STACK (olddecl);
3511 }
8d08fdba
MS
3512 }
3513 /* If cannot merge, then use the new type and qualifiers,
3514 and don't preserve the old rtl. */
3515 else
3516 {
3517 /* Clean out any memory we had of the old declaration. */
3518 tree oldstatic = value_member (olddecl, static_aggregates);
3519 if (oldstatic)
3520 TREE_VALUE (oldstatic) = error_mark_node;
3521
3522 TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
3523 TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
3524 TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
3525 TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
3526 }
3527
3528 /* Merge the storage class information. */
a9aedbc2 3529 DECL_WEAK (newdecl) |= DECL_WEAK (olddecl);
e92cc029 3530 DECL_ONE_ONLY (newdecl) |= DECL_ONE_ONLY (olddecl);
794d4a61 3531 DECL_DEFER_OUTPUT (newdecl) |= DECL_DEFER_OUTPUT (olddecl);
a9aedbc2
MS
3532 TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
3533 TREE_STATIC (olddecl) = TREE_STATIC (newdecl) |= TREE_STATIC (olddecl);
3534 if (! DECL_EXTERNAL (olddecl))
3535 DECL_EXTERNAL (newdecl) = 0;
68642fb6 3536
0b60dfe3 3537 if (DECL_LANG_SPECIFIC (newdecl) && DECL_LANG_SPECIFIC (olddecl))
8d08fdba 3538 {
a9aedbc2
MS
3539 DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl);
3540 DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl);
77be6f82 3541 DECL_COMDAT (newdecl) |= DECL_COMDAT (olddecl);
68642fb6 3542 DECL_TEMPLATE_INSTANTIATED (newdecl)
2b0a63a3 3543 |= DECL_TEMPLATE_INSTANTIATED (olddecl);
0b60dfe3
BK
3544 /* Don't really know how much of the language-specific
3545 values we should copy from old to new. */
3546 DECL_IN_AGGR_P (newdecl) = DECL_IN_AGGR_P (olddecl);
3547 DECL_ACCESS (newdecl) = DECL_ACCESS (olddecl);
3548 DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl);
fbf1c34b 3549 DECL_TEMPLATE_INFO (newdecl) = DECL_TEMPLATE_INFO (olddecl);
0b60dfe3 3550 olddecl_friend = DECL_FRIEND_P (olddecl);
6a629cac
MM
3551
3552 /* Only functions have DECL_BEFRIENDING_CLASSES. */
3553 if (TREE_CODE (newdecl) == FUNCTION_DECL
3554 || DECL_FUNCTION_TEMPLATE_P (newdecl))
3555 DECL_BEFRIENDING_CLASSES (newdecl)
3556 = chainon (DECL_BEFRIENDING_CLASSES (newdecl),
3557 DECL_BEFRIENDING_CLASSES (olddecl));
8d08fdba
MS
3558 }
3559
8d08fdba
MS
3560 if (TREE_CODE (newdecl) == FUNCTION_DECL)
3561 {
68642fb6
UD
3562 if (DECL_TEMPLATE_INSTANTIATION (olddecl)
3563 && !DECL_TEMPLATE_INSTANTIATION (newdecl))
75650646
MM
3564 {
3565 /* If newdecl is not a specialization, then it is not a
3566 template-related function at all. And that means that we
3567 shoud have exited above, returning 0. */
3568 my_friendly_assert (DECL_TEMPLATE_SPECIALIZATION (newdecl),
3569 0);
3570
68642fb6 3571 if (TREE_USED (olddecl))
75650646 3572 /* From [temp.expl.spec]:
68642fb6 3573
75650646
MM
3574 If a template, a member template or the member of a class
3575 template is explicitly specialized then that
3576 specialization shall be declared before the first use of
3577 that specialization that would cause an implicit
3578 instantiation to take place, in every translation unit in
3579 which such a use occurs. */
68642fb6 3580 cp_error ("explicit specialization of %D after first use",
75650646
MM
3581 olddecl);
3582
3583 SET_DECL_TEMPLATE_SPECIALIZATION (olddecl);
3584 }
faae18ab
MS
3585 DECL_THIS_INLINE (newdecl) |= DECL_THIS_INLINE (olddecl);
3586
3587 /* If either decl says `inline', this fn is inline, unless its
3588 definition was passed already. */
3589 if (DECL_INLINE (newdecl) && DECL_INITIAL (olddecl) == NULL_TREE)
3590 DECL_INLINE (olddecl) = 1;
3591 DECL_INLINE (newdecl) = DECL_INLINE (olddecl);
3592
700f8a87
MS
3593 if (! types_match)
3594 {
3595 DECL_LANGUAGE (olddecl) = DECL_LANGUAGE (newdecl);
3596 DECL_ASSEMBLER_NAME (olddecl) = DECL_ASSEMBLER_NAME (newdecl);
5566b478
MS
3597 DECL_RTL (olddecl) = DECL_RTL (newdecl);
3598 }
3599 if (! types_match || new_defines_function)
3600 {
6f1b4c42
JM
3601 /* These need to be copied so that the names are available.
3602 Note that if the types do match, we'll preserve inline
3603 info and other bits, but if not, we won't. */
700f8a87
MS
3604 DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
3605 DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
700f8a87 3606 }
8d08fdba
MS
3607 if (new_defines_function)
3608 /* If defining a function declared with other language
3609 linkage, use the previously declared language linkage. */
3610 DECL_LANGUAGE (newdecl) = DECL_LANGUAGE (olddecl);
6f1b4c42 3611 else if (types_match)
8d08fdba
MS
3612 {
3613 /* If redeclaring a builtin function, and not a definition,
3614 it stays built in. */
3615 if (DECL_BUILT_IN (olddecl))
3616 {
26db82d8 3617 DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
39211cd5 3618 DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
8d08fdba
MS
3619 /* If we're keeping the built-in definition, keep the rtl,
3620 regardless of declaration matches. */
3621 DECL_RTL (newdecl) = DECL_RTL (olddecl);
3622 }
3623 else
3624 DECL_FRAME_SIZE (newdecl) = DECL_FRAME_SIZE (olddecl);
3625
3626 DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
8926095f 3627 if ((DECL_SAVED_INSNS (newdecl) = DECL_SAVED_INSNS (olddecl)))
8d08fdba
MS
3628 /* Previously saved insns go together with
3629 the function's previous definition. */
3630 DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
3631 /* Don't clear out the arguments if we're redefining a function. */
3632 if (DECL_ARGUMENTS (olddecl))
3633 DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
3634 }
3635 }
3636
a9aedbc2
MS
3637 if (TREE_CODE (newdecl) == NAMESPACE_DECL)
3638 {
3639 NAMESPACE_LEVEL (newdecl) = NAMESPACE_LEVEL (olddecl);
3640 }
3641
8d08fdba
MS
3642 /* Now preserve various other info from the definition. */
3643 TREE_ADDRESSABLE (newdecl) = TREE_ADDRESSABLE (olddecl);
3644 TREE_ASM_WRITTEN (newdecl) = TREE_ASM_WRITTEN (olddecl);
3645 DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
f376e137 3646 DECL_ASSEMBLER_NAME (newdecl) = DECL_ASSEMBLER_NAME (olddecl);
8d08fdba 3647
8d08fdba
MS
3648 if (TREE_CODE (newdecl) == FUNCTION_DECL)
3649 {
3650 int function_size;
8d08fdba
MS
3651
3652 function_size = sizeof (struct tree_decl);
3653
3654 bcopy ((char *) newdecl + sizeof (struct tree_common),
3655 (char *) olddecl + sizeof (struct tree_common),
3656 function_size - sizeof (struct tree_common));
3657
75650646
MM
3658 if (DECL_TEMPLATE_INSTANTIATION (newdecl))
3659 {
3660 /* If newdecl is a template instantiation, it is possible that
3661 the following sequence of events has occurred:
3662
3663 o A friend function was declared in a class template. The
68642fb6 3664 class template was instantiated.
75650646 3665
68642fb6
UD
3666 o The instantiation of the friend declaration was
3667 recorded on the instantiation list, and is newdecl.
75650646
MM
3668
3669 o Later, however, instantiate_class_template called pushdecl
3670 on the newdecl to perform name injection. But, pushdecl in
3671 turn called duplicate_decls when it discovered that another
3672 declaration of a global function with the same name already
68642fb6 3673 existed.
75650646
MM
3674
3675 o Here, in duplicate_decls, we decided to clobber newdecl.
3676
3677 If we're going to do that, we'd better make sure that
3678 olddecl, and not newdecl, is on the list of
3679 instantiations so that if we try to do the instantiation
3680 again we won't get the clobbered declaration. */
3681
68642fb6
UD
3682 tree tmpl = DECL_TI_TEMPLATE (newdecl);
3683 tree decls = DECL_TEMPLATE_SPECIALIZATIONS (tmpl);
75650646
MM
3684
3685 for (; decls; decls = TREE_CHAIN (decls))
3686 if (TREE_VALUE (decls) == newdecl)
3687 TREE_VALUE (decls) = olddecl;
3688 }
8d08fdba
MS
3689 }
3690 else
3691 {
3692 bcopy ((char *) newdecl + sizeof (struct tree_common),
3693 (char *) olddecl + sizeof (struct tree_common),
3694 sizeof (struct tree_decl) - sizeof (struct tree_common)
3695 + tree_code_length [(int)TREE_CODE (newdecl)] * sizeof (char *));
3696 }
3697
3698 DECL_UID (olddecl) = olddecl_uid;
3699 if (olddecl_friend)
3700 DECL_FRIEND_P (olddecl) = 1;
3701
d9525bec
BK
3702 /* NEWDECL contains the merged attribute lists.
3703 Update OLDDECL to be the same. */
3704 DECL_MACHINE_ATTRIBUTES (olddecl) = DECL_MACHINE_ATTRIBUTES (newdecl);
3705
8d08fdba
MS
3706 return 1;
3707}
3708
3709/* Record a decl-node X as belonging to the current lexical scope.
3710 Check for errors (such as an incompatible declaration for the same
3711 name already seen in the same scope).
3712
3713 Returns either X or an old decl for the same name.
3714 If an old decl is returned, it may have been smashed
3715 to agree with what X says. */
3716
3717tree
3718pushdecl (x)
3719 tree x;
3720{
3721 register tree t;
b35d4555
MM
3722 register tree name;
3723 int need_new_binding;
3724
3725 /* We shouldn't be calling pushdecl when we're generating RTL for a
3726 function that we already did semantic analysis on previously. */
01d939e8 3727 my_friendly_assert (!cfun || doing_semantic_analysis_p (),
b35d4555
MM
3728 19990913);
3729
3730 name = DECL_ASSEMBLER_NAME (x);
3731 need_new_binding = 1;
8d08fdba 3732
50714e79
MM
3733 if (DECL_TEMPLATE_PARM_P (x))
3734 /* Template parameters have no context; they are not X::T even
3735 when declared within a class or namespace. */
3736 ;
3737 else
3738 {
3739 if (current_function_decl && x != current_function_decl
3740 /* A local declaration for a function doesn't constitute
3741 nesting. */
f39ee884
MM
3742 && !(TREE_CODE (x) == FUNCTION_DECL && !DECL_INITIAL (x))
3743 /* A local declaration for an `extern' variable is in the
3744 scoped of the current namespace, not the current
3745 function. */
3746 && !(TREE_CODE (x) == VAR_DECL && DECL_EXTERNAL (x))
50714e79
MM
3747 && !DECL_CONTEXT (x))
3748 DECL_CONTEXT (x) = current_function_decl;
3749 if (!DECL_CONTEXT (x))
3750 DECL_CONTEXT (x) = FROB_CONTEXT (current_namespace);
cd9f6678
MM
3751
3752 /* If this is the declaration for a namespace-scope function,
3753 but the declaration itself is in a local scope, mark the
3754 declaration. */
68642fb6 3755 if (TREE_CODE (x) == FUNCTION_DECL
cd9f6678
MM
3756 && DECL_NAMESPACE_SCOPE_P (x)
3757 && current_function_decl
3758 && x != current_function_decl)
3759 DECL_LOCAL_FUNCTION_P (x) = 1;
50714e79 3760 }
8d08fdba 3761
8d08fdba 3762 /* Type are looked up using the DECL_NAME, as that is what the rest of the
e92cc029 3763 compiler wants to use. */
a9aedbc2 3764 if (TREE_CODE (x) == TYPE_DECL || TREE_CODE (x) == VAR_DECL
0c20d3d6 3765 || TREE_CODE (x) == NAMESPACE_DECL)
8d08fdba 3766 name = DECL_NAME (x);
8d08fdba
MS
3767
3768 if (name)
3769 {
5566b478
MS
3770#if 0
3771 /* Not needed...see below. */
8d08fdba
MS
3772 char *file;
3773 int line;
5566b478 3774#endif
386b8a85
JM
3775 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
3776 name = TREE_OPERAND (name, 0);
68642fb6 3777
2c73f9f5 3778 /* Namespace-scoped variables are not found in the current level. */
6eb3bb27 3779 if (TREE_CODE (x) == VAR_DECL && DECL_NAMESPACE_SCOPE_P (x))
2c73f9f5
ML
3780 t = namespace_binding (name, DECL_CONTEXT (x));
3781 else
3782 t = lookup_name_current_level (name);
8d08fdba
MS
3783 if (t == error_mark_node)
3784 {
3785 /* error_mark_node is 0 for a while during initialization! */
3786 t = NULL_TREE;
8251199e 3787 cp_error_at ("`%#D' used prior to declaration", x);
8d08fdba
MS
3788 }
3789
51c184be 3790 else if (t != NULL_TREE)
8d08fdba 3791 {
5566b478
MS
3792#if 0
3793 /* This is turned off until I have time to do it right (bpk). */
e92cc029 3794 /* With the code below that uses it... */
8d6e462b
PB
3795 file = DECL_SOURCE_FILE (t);
3796 line = DECL_SOURCE_LINE (t);
5566b478 3797#endif
2ee887f2 3798 if (TREE_CODE (t) == PARM_DECL)
8d08fdba
MS
3799 {
3800 if (DECL_CONTEXT (t) == NULL_TREE)
3801 fatal ("parse errors have confused me too much");
be99da77 3802
e92cc029 3803 /* Check for duplicate params. */
be99da77
MS
3804 if (duplicate_decls (x, t))
3805 return t;
8d08fdba 3806 }
8d6e462b 3807 else if (((TREE_CODE (x) == FUNCTION_DECL && DECL_LANGUAGE (x) == lang_c)
5566b478
MS
3808 || DECL_FUNCTION_TEMPLATE_P (x))
3809 && is_overloaded_fn (t))
2c73f9f5 3810 /* Don't do anything just yet. */;
e1cd6e56
MS
3811 else if (t == wchar_decl_node)
3812 {
3813 if (pedantic && ! DECL_IN_SYSTEM_HEADER (x))
8251199e 3814 cp_pedwarn ("redeclaration of wchar_t as `%T'", TREE_TYPE (x));
e1cd6e56
MS
3815
3816 /* Throw away the redeclaration. */
3817 return t;
3818 }
8926095f 3819 else if (TREE_CODE (t) != TREE_CODE (x))
8d08fdba 3820 {
9ed182dc 3821 if (duplicate_decls (x, t))
51c184be 3822 return t;
8d08fdba
MS
3823 }
3824 else if (duplicate_decls (x, t))
51c184be 3825 {
8d08fdba 3826#if 0
8926095f 3827 /* This is turned off until I have time to do it right (bpk). */
8d08fdba 3828
8926095f
MS
3829 /* Also warn if they did a prototype with `static' on it, but
3830 then later left the `static' off. */
3831 if (! TREE_PUBLIC (name) && TREE_PUBLIC (x))
8d08fdba 3832 {
8926095f
MS
3833 if (DECL_LANG_SPECIFIC (t) && DECL_FRIEND_P (t))
3834 return t;
8d08fdba 3835
8926095f
MS
3836 if (extra_warnings)
3837 {
8251199e 3838 cp_warning ("`static' missing from declaration of `%D'",
a28e3c7f 3839 t);
8926095f
MS
3840 warning_with_file_and_line (file, line,
3841 "previous declaration of `%s'",
3842 decl_as_string (t, 0));
3843 }
8d08fdba 3844
8926095f
MS
3845 /* Now fix things so it'll do what they expect. */
3846 if (current_function_decl)
3847 TREE_PUBLIC (current_function_decl) = 0;
3848 }
51c184be
MS
3849 /* Due to interference in memory reclamation (X may be
3850 obstack-deallocated at this point), we must guard against
8926095f
MS
3851 one really special case. [jason: This should be handled
3852 by start_function] */
51c184be
MS
3853 if (current_function_decl == x)
3854 current_function_decl = t;
8926095f 3855#endif
7177d104
MS
3856 if (TREE_CODE (t) == TYPE_DECL)
3857 SET_IDENTIFIER_TYPE_VALUE (name, TREE_TYPE (t));
f30432d7
MS
3858 else if (TREE_CODE (t) == FUNCTION_DECL)
3859 check_default_args (t);
7177d104 3860
51c184be
MS
3861 return t;
3862 }
35680744
MM
3863 else if (DECL_MAIN_P (x))
3864 {
3865 /* A redeclaration of main, but not a duplicate of the
68642fb6 3866 previous one.
35680744
MM
3867
3868 [basic.start.main]
3869
3870 This function shall not be overloaded. */
8251199e
JM
3871 cp_error_at ("invalid redeclaration of `%D'", t);
3872 cp_error ("as `%D'", x);
35680744
MM
3873 /* We don't try to push this declaration since that
3874 causes a crash. */
3875 return x;
3876 }
8d08fdba 3877 }
8926095f 3878
f3400fe2
JM
3879 check_template_shadow (x);
3880
fcfcdfc8
JM
3881 /* If this is a function conjured up by the backend, massage it
3882 so it looks friendly. */
3883 if (TREE_CODE (x) == FUNCTION_DECL
3884 && ! DECL_LANG_SPECIFIC (x))
3885 {
3886 retrofit_lang_decl (x);
3887 DECL_LANGUAGE (x) = lang_c;
3888 }
3889
8926095f
MS
3890 if (TREE_CODE (x) == FUNCTION_DECL && ! DECL_FUNCTION_MEMBER_P (x))
3891 {
7bdbfa05 3892 t = push_overloaded_decl (x, PUSH_LOCAL);
5fdaba89 3893 if (t != x)
8926095f 3894 return t;
f181d4ae
MM
3895 if (!namespace_bindings_p ())
3896 /* We do not need to create a binding for this name;
3897 push_overloaded_decl will have already done so if
3898 necessary. */
3899 need_new_binding = 0;
8926095f 3900 }
6eb3bb27 3901 else if (DECL_FUNCTION_TEMPLATE_P (x) && DECL_NAMESPACE_SCOPE_P (x))
cfe507be
MM
3902 {
3903 t = push_overloaded_decl (x, PUSH_GLOBAL);
3904 if (t == x)
3905 add_decl_to_level (x, NAMESPACE_LEVEL (CP_DECL_CONTEXT (t)));
3906 return t;
3907 }
8d08fdba 3908
a1774733
BK
3909 /* If declaring a type as a typedef, copy the type (unless we're
3910 at line 0), and install this TYPE_DECL as the new type's typedef
3911 name. See the extensive comment in ../c-decl.c (pushdecl). */
8d08fdba
MS
3912 if (TREE_CODE (x) == TYPE_DECL)
3913 {
3914 tree type = TREE_TYPE (x);
a1774733
BK
3915 if (DECL_SOURCE_LINE (x) == 0)
3916 {
3917 if (TYPE_NAME (type) == 0)
3918 TYPE_NAME (type) = x;
3919 }
1c80fb65
MM
3920 else if (type != error_mark_node && TYPE_NAME (type) != x
3921 /* We don't want to copy the type when all we're
3922 doing is making a TYPE_DECL for the purposes of
3923 inlining. */
68642fb6 3924 && (!TYPE_NAME (type)
1c80fb65 3925 || TYPE_NAME (type) != DECL_ABSTRACT_ORIGIN (x)))
a1774733
BK
3926 {
3927 DECL_ORIGINAL_TYPE (x) = type;
3928 type = build_type_copy (type);
3929 TYPE_STUB_DECL (type) = TYPE_STUB_DECL (DECL_ORIGINAL_TYPE (x));
3930 TYPE_NAME (type) = x;
3931 TREE_TYPE (x) = type;
3932 }
8d08fdba 3933
8d08fdba
MS
3934 if (type != error_mark_node
3935 && TYPE_NAME (type)
3936 && TYPE_IDENTIFIER (type))
68642fb6 3937 set_identifier_type_value_with_scope (DECL_NAME (x), type,
f181d4ae
MM
3938 current_binding_level);
3939
8d08fdba
MS
3940 }
3941
3942 /* Multiple external decls of the same identifier ought to match.
3943
3944 We get warnings about inline functions where they are defined.
39211cd5 3945 We get warnings about other functions from push_overloaded_decl.
68642fb6 3946
8d08fdba 3947 Avoid duplicate warnings where they are used. */
39211cd5 3948 if (TREE_PUBLIC (x) && TREE_CODE (x) != FUNCTION_DECL)
8d08fdba
MS
3949 {
3950 tree decl;
3951
31928556
JM
3952 if (IDENTIFIER_NAMESPACE_VALUE (name) != NULL_TREE
3953 && (DECL_EXTERNAL (IDENTIFIER_NAMESPACE_VALUE (name))
3954 || TREE_PUBLIC (IDENTIFIER_NAMESPACE_VALUE (name))))
3955 decl = IDENTIFIER_NAMESPACE_VALUE (name);
8d08fdba
MS
3956 else
3957 decl = NULL_TREE;
3958
39211cd5 3959 if (decl
8d08fdba
MS
3960 /* If different sort of thing, we already gave an error. */
3961 && TREE_CODE (decl) == TREE_CODE (x)
3bfdc719 3962 && !same_type_p (TREE_TYPE (x), TREE_TYPE (decl)))
8d08fdba 3963 {
8251199e
JM
3964 cp_pedwarn ("type mismatch with previous external decl", x);
3965 cp_pedwarn_at ("previous external decl of `%#D'", decl);
8d08fdba
MS
3966 }
3967 }
3968
8d08fdba
MS
3969 /* This name is new in its binding level.
3970 Install the new declaration and return it. */
2c73f9f5 3971 if (namespace_bindings_p ())
8d08fdba
MS
3972 {
3973 /* Install a global value. */
3974
8d08fdba
MS
3975 /* If the first global decl has external linkage,
3976 warn if we later see static one. */
31928556 3977 if (IDENTIFIER_GLOBAL_VALUE (name) == NULL_TREE && TREE_PUBLIC (x))
8d08fdba
MS
3978 TREE_PUBLIC (name) = 1;
3979
d8f8dca1 3980 if (!(TREE_CODE (x) == TYPE_DECL && DECL_ARTIFICIAL (x)
5fdaba89
MM
3981 && t != NULL_TREE)
3982 /* For an ordinary function, we create a binding from
3983 the mangled name (i.e., NAME) to the DECL. But, for
3984 an `extern "C"' function, the mangled name and the
3985 ordinary name are the same so we need not do this. */
68642fb6 3986 && !(TREE_CODE (x) == FUNCTION_DECL &&
5fdaba89 3987 DECL_LANGUAGE (x) == lang_c))
30394414
JM
3988 {
3989 if (TREE_CODE (x) == FUNCTION_DECL)
68642fb6 3990 my_friendly_assert
31928556
JM
3991 ((IDENTIFIER_GLOBAL_VALUE (name) == NULL_TREE)
3992 || (IDENTIFIER_GLOBAL_VALUE (name) == x), 378);
3993 SET_IDENTIFIER_NAMESPACE_VALUE (name, x);
30394414 3994 }
8d08fdba
MS
3995
3996 /* Don't forget if the function was used via an implicit decl. */
3997 if (IDENTIFIER_IMPLICIT_DECL (name)
3998 && TREE_USED (IDENTIFIER_IMPLICIT_DECL (name)))
3999 TREE_USED (x) = 1;
4000
4001 /* Don't forget if its address was taken in that way. */
4002 if (IDENTIFIER_IMPLICIT_DECL (name)
4003 && TREE_ADDRESSABLE (IDENTIFIER_IMPLICIT_DECL (name)))
4004 TREE_ADDRESSABLE (x) = 1;
4005
4006 /* Warn about mismatches against previous implicit decl. */
4007 if (IDENTIFIER_IMPLICIT_DECL (name) != NULL_TREE
4008 /* If this real decl matches the implicit, don't complain. */
4009 && ! (TREE_CODE (x) == FUNCTION_DECL
4010 && TREE_TYPE (TREE_TYPE (x)) == integer_type_node))
8251199e
JM
4011 cp_warning
4012 ("`%D' was previously implicitly declared to return `int'", x);
8d08fdba
MS
4013
4014 /* If new decl is `static' and an `extern' was seen previously,
4015 warn about it. */
a0a33927
MS
4016 if (x != NULL_TREE && t != NULL_TREE && decls_match (x, t))
4017 warn_extern_redeclared_static (x, t);
8d08fdba
MS
4018 }
4019 else
4020 {
4021 /* Here to install a non-global value. */
f181d4ae 4022 tree oldlocal = IDENTIFIER_VALUE (name);
31928556 4023 tree oldglobal = IDENTIFIER_NAMESPACE_VALUE (name);
8d08fdba 4024
f181d4ae
MM
4025 if (need_new_binding)
4026 {
0034cf72 4027 push_local_binding (name, x, 0);
f181d4ae
MM
4028 /* Because push_local_binding will hook X on to the
4029 current_binding_level's name list, we don't want to
4030 do that again below. */
4031 need_new_binding = 0;
4032 }
8d08fdba
MS
4033
4034 /* If this is a TYPE_DECL, push it into the type value slot. */
4035 if (TREE_CODE (x) == TYPE_DECL)
68642fb6 4036 set_identifier_type_value_with_scope (name, TREE_TYPE (x),
f181d4ae 4037 current_binding_level);
8d08fdba 4038
a9aedbc2
MS
4039 /* Clear out any TYPE_DECL shadowed by a namespace so that
4040 we won't think this is a type. The C struct hack doesn't
4041 go through namespaces. */
4042 if (TREE_CODE (x) == NAMESPACE_DECL)
68642fb6 4043 set_identifier_type_value_with_scope (name, NULL_TREE,
f181d4ae 4044 current_binding_level);
a9aedbc2 4045
e905ac8a
MS
4046 if (oldlocal)
4047 {
4048 tree d = oldlocal;
17aec3eb 4049
74dc0d8c
MS
4050 while (oldlocal
4051 && TREE_CODE (oldlocal) == VAR_DECL
4052 && DECL_DEAD_FOR_LOCAL (oldlocal))
17aec3eb
RK
4053 oldlocal = DECL_SHADOWED_FOR_VAR (oldlocal);
4054
e905ac8a
MS
4055 if (oldlocal == NULL_TREE)
4056 oldlocal = IDENTIFIER_NAMESPACE_VALUE (DECL_NAME (d));
4057 }
4058
8d08fdba
MS
4059 /* If this is an extern function declaration, see if we
4060 have a global definition or declaration for the function. */
4061 if (oldlocal == NULL_TREE
faae18ab 4062 && DECL_EXTERNAL (x)
31928556 4063 && oldglobal != NULL_TREE
8d08fdba 4064 && TREE_CODE (x) == FUNCTION_DECL
31928556 4065 && TREE_CODE (oldglobal) == FUNCTION_DECL)
8d08fdba
MS
4066 {
4067 /* We have one. Their types must agree. */
31928556 4068 if (decls_match (x, oldglobal))
6060a796
MS
4069 /* OK */;
4070 else
8d08fdba 4071 {
8251199e
JM
4072 cp_warning ("extern declaration of `%#D' doesn't match", x);
4073 cp_warning_at ("global declaration `%#D'", oldglobal);
8d08fdba 4074 }
8d08fdba
MS
4075 }
4076 /* If we have a local external declaration,
4077 and no file-scope declaration has yet been seen,
4078 then if we later have a file-scope decl it must not be static. */
4079 if (oldlocal == NULL_TREE
31928556 4080 && oldglobal == NULL_TREE
8d08fdba
MS
4081 && DECL_EXTERNAL (x)
4082 && TREE_PUBLIC (x))
f181d4ae 4083 TREE_PUBLIC (name) = 1;
8d08fdba 4084
8d08fdba 4085 /* Warn if shadowing an argument at the top level of the body. */
e905ac8a
MS
4086 if (oldlocal != NULL_TREE && !DECL_EXTERNAL (x)
4087 /* Inline decls shadow nothing. */
4088 && !DECL_FROM_INLINE (x)
4089 && TREE_CODE (oldlocal) == PARM_DECL
4090 /* Don't complain if it's from an enclosing function. */
4091 && DECL_CONTEXT (oldlocal) == current_function_decl
4092 && TREE_CODE (x) != PARM_DECL)
8d08fdba
MS
4093 {
4094 /* Go to where the parms should be and see if we
4095 find them there. */
4096 struct binding_level *b = current_binding_level->level_chain;
4097
4098 if (cleanup_label)
4099 b = b->level_chain;
4100
4101 /* ARM $8.3 */
4102 if (b->parm_flag == 1)
8251199e 4103 cp_error ("declaration of `%#D' shadows a parameter", name);
8d08fdba 4104 }
e905ac8a 4105
8d08fdba 4106 /* Maybe warn if shadowing something else. */
e905ac8a
MS
4107 if (warn_shadow && !DECL_EXTERNAL (x)
4108 /* Inline decls shadow nothing. */
4109 && !DECL_FROM_INLINE (x)
4110 /* No shadow warnings for internally generated vars. */
4111 && ! DECL_ARTIFICIAL (x)
4112 /* No shadow warnings for vars made for inlining. */
4113 && ! DECL_FROM_INLINE (x))
8d08fdba 4114 {
8d08fdba 4115 if (oldlocal != NULL_TREE && TREE_CODE (oldlocal) == PARM_DECL)
b9d12519
KG
4116 warning ("declaration of `%s' shadows a parameter",
4117 IDENTIFIER_POINTER (name));
8d08fdba 4118 else if (IDENTIFIER_CLASS_VALUE (name) != NULL_TREE
4ac14744 4119 && current_class_ptr
8d08fdba 4120 && !TREE_STATIC (name))
b9d12519
KG
4121 warning ("declaration of `%s' shadows a member of `this'",
4122 IDENTIFIER_POINTER (name));
8d08fdba 4123 else if (oldlocal != NULL_TREE)
b9d12519
KG
4124 warning ("declaration of `%s' shadows previous local",
4125 IDENTIFIER_POINTER (name));
31928556 4126 else if (oldglobal != NULL_TREE)
30394414 4127 /* XXX shadow warnings in outer-more namespaces */
b9d12519
KG
4128 warning ("declaration of `%s' shadows global declaration",
4129 IDENTIFIER_POINTER (name));
8d08fdba 4130 }
e1cd6e56 4131 }
8d08fdba 4132
e1cd6e56 4133 if (TREE_CODE (x) == FUNCTION_DECL)
f30432d7 4134 check_default_args (x);
8145f082
MS
4135
4136 /* Keep count of variables in this level with incomplete type. */
8145f082 4137 if (TREE_CODE (x) == VAR_DECL
28cbf42c 4138 && TREE_TYPE (x) != error_mark_node
d0f062fb 4139 && ((!COMPLETE_TYPE_P (TREE_TYPE (x))
f30432d7
MS
4140 && PROMOTES_TO_AGGR_TYPE (TREE_TYPE (x), ARRAY_TYPE))
4141 /* RTTI TD entries are created while defining the type_info. */
4142 || (TYPE_LANG_SPECIFIC (TREE_TYPE (x))
4143 && TYPE_BEING_DEFINED (TREE_TYPE (x)))))
70adf8a9
JM
4144 {
4145 if (namespace_bindings_p ())
4146 namespace_scope_incomplete
4147 = tree_cons (NULL_TREE, x, namespace_scope_incomplete);
4148 else
4149 current_binding_level->incomplete
4150 = tree_cons (NULL_TREE, x, current_binding_level->incomplete);
4151 }
8d08fdba
MS
4152 }
4153
f181d4ae 4154 if (need_new_binding)
68642fb6 4155 add_decl_to_level (x,
efee38a9
MM
4156 DECL_NAMESPACE_SCOPE_P (x)
4157 ? NAMESPACE_LEVEL (CP_DECL_CONTEXT (x))
4158 : current_binding_level);
8d08fdba
MS
4159
4160 return x;
4161}
4162
5566b478
MS
4163/* Same as pushdecl, but define X in binding-level LEVEL. We rely on the
4164 caller to set DECL_CONTEXT properly. */
8d08fdba
MS
4165
4166static tree
4167pushdecl_with_scope (x, level)
4168 tree x;
4169 struct binding_level *level;
4170{
8d019cef 4171 register struct binding_level *b;
5566b478 4172 tree function_decl = current_function_decl;
8d08fdba 4173
5566b478 4174 current_function_decl = NULL_TREE;
8d019cef
JM
4175 if (level->parm_flag == 2)
4176 {
4177 b = class_binding_level;
4178 class_binding_level = level;
4179 pushdecl_class_level (x);
4180 class_binding_level = b;
4181 }
4182 else
4183 {
4184 b = current_binding_level;
4185 current_binding_level = level;
4186 x = pushdecl (x);
4187 current_binding_level = b;
4188 }
5566b478 4189 current_function_decl = function_decl;
8d08fdba
MS
4190 return x;
4191}
4192
2c73f9f5 4193/* Like pushdecl, only it places X in the current namespace,
8d08fdba 4194 if appropriate. */
e92cc029 4195
8d08fdba 4196tree
2c73f9f5 4197pushdecl_namespace_level (x)
8d08fdba
MS
4198 tree x;
4199{
8f032717 4200 register struct binding_level *b = current_binding_level;
2c73f9f5
ML
4201 register tree t;
4202
4203 t = pushdecl_with_scope (x, NAMESPACE_LEVEL (current_namespace));
8d08fdba
MS
4204
4205 /* Now, the type_shadowed stack may screw us. Munge it so it does
4206 what we want. */
4207 if (TREE_CODE (x) == TYPE_DECL)
4208 {
4209 tree name = DECL_NAME (x);
4210 tree newval;
4211 tree *ptr = (tree *)0;
4212 for (; b != global_binding_level; b = b->level_chain)
4213 {
4214 tree shadowed = b->type_shadowed;
4215 for (; shadowed; shadowed = TREE_CHAIN (shadowed))
4216 if (TREE_PURPOSE (shadowed) == name)
4217 {
4218 ptr = &TREE_VALUE (shadowed);
4219 /* Can't break out of the loop here because sometimes
4220 a binding level will have duplicate bindings for
4221 PT names. It's gross, but I haven't time to fix it. */
4222 }
4223 }
4224 newval = TREE_TYPE (x);
4225 if (ptr == (tree *)0)
4226 {
4227 /* @@ This shouldn't be needed. My test case "zstring.cc" trips
4228 up here if this is changed to an assertion. --KR */
4229 SET_IDENTIFIER_TYPE_VALUE (name, newval);
4230 }
4231 else
4232 {
8d08fdba
MS
4233 *ptr = newval;
4234 }
4235 }
4236 return t;
4237}
4238
2c73f9f5
ML
4239/* Like pushdecl, only it places X in GLOBAL_BINDING_LEVEL,
4240 if appropriate. */
4241
4242tree
4243pushdecl_top_level (x)
4244 tree x;
4245{
b35d4555 4246 push_to_top_level ();
2c73f9f5 4247 x = pushdecl_namespace_level (x);
b35d4555 4248 pop_from_top_level ();
2c73f9f5
ML
4249 return x;
4250}
4251
8d08fdba 4252/* Make the declaration of X appear in CLASS scope. */
e92cc029 4253
61a127b3 4254void
8d08fdba
MS
4255pushdecl_class_level (x)
4256 tree x;
4257{
4258 /* Don't use DECL_ASSEMBLER_NAME here! Everything that looks in class
4259 scope looks for the pre-mangled name. */
8f032717
MM
4260 register tree name;
4261
4262 if (TREE_CODE (x) == OVERLOAD)
4263 x = OVL_CURRENT (x);
4264 name = DECL_NAME (x);
8d08fdba
MS
4265
4266 if (name)
4267 {
4268 push_class_level_binding (name, x);
4269 if (TREE_CODE (x) == TYPE_DECL)
f181d4ae 4270 set_identifier_type_value (name, TREE_TYPE (x));
8d08fdba 4271 }
6bdb8141 4272 else if (ANON_AGGR_TYPE_P (TREE_TYPE (x)))
8f032717
MM
4273 {
4274 tree f;
4275
4276 for (f = TYPE_FIELDS (TREE_TYPE (x));
4277 f;
4278 f = TREE_CHAIN (f))
4279 pushdecl_class_level (f);
4280 }
8d08fdba
MS
4281}
4282
9188c363
MM
4283/* Enter DECL into the symbol table, if that's appropriate. Returns
4284 DECL, or a modified version thereof. */
4285
4286tree
4287maybe_push_decl (decl)
4288 tree decl;
4289{
4290 tree type = TREE_TYPE (decl);
4291
4292 /* Add this decl to the current binding level, but not if it comes
4293 from another scope, e.g. a static member variable. TEM may equal
4294 DECL or it may be a previous decl of the same name. */
07c88314
MM
4295 if (decl == error_mark_node
4296 || (TREE_CODE (decl) != PARM_DECL
4297 && DECL_CONTEXT (decl) != NULL_TREE
4298 /* Definitions of namespace members outside their namespace are
4299 possible. */
4300 && TREE_CODE (DECL_CONTEXT (decl)) != NAMESPACE_DECL)
9188c363
MM
4301 || (TREE_CODE (decl) == TEMPLATE_DECL && !namespace_bindings_p ())
4302 || TREE_CODE (type) == UNKNOWN_TYPE
558475f0 4303 /* The declaration of a template specialization does not affect
9188c363
MM
4304 the functions available for overload resolution, so we do not
4305 call pushdecl. */
4306 || (TREE_CODE (decl) == FUNCTION_DECL
4307 && DECL_TEMPLATE_SPECIALIZATION (decl)))
4308 return decl;
4309 else
4310 return pushdecl (decl);
4311}
4312
8d08fdba
MS
4313/* Make the declaration(s) of X appear in CLASS scope
4314 under the name NAME. */
e92cc029 4315
8d08fdba
MS
4316void
4317push_class_level_binding (name, x)
4318 tree name;
4319 tree x;
4320{
8f032717 4321 tree binding;
68642fb6 4322 /* The class_binding_level will be NULL if x is a template
98c1c668
JM
4323 parameter name in a member template. */
4324 if (!class_binding_level)
4325 return;
4326
908c4e83
MM
4327 /* Make sure that this new member does not have the same name
4328 as a template parameter. */
4329 if (TYPE_BEING_DEFINED (current_class_type))
4330 check_template_shadow (x);
4331
f181d4ae
MM
4332 /* If this declaration shadows a declaration from an enclosing
4333 class, then we will need to restore IDENTIFIER_CLASS_VALUE when
4334 we leave this class. Record the shadowed declaration here. */
8f032717 4335 binding = IDENTIFIER_BINDING (name);
68642fb6 4336 if (binding
8f032717
MM
4337 && ((TREE_CODE (x) == OVERLOAD
4338 && BINDING_VALUE (binding)
4339 && is_overloaded_fn (BINDING_VALUE (binding)))
4340 || INHERITED_VALUE_BINDING_P (binding)))
4341 {
4342 tree shadow;
4343 tree old_decl;
4344
4345 /* If the old binding was from a base class, and was for a tag
4346 name, slide it over to make room for the new binding. The
4347 old binding is still visible if explicitly qualified with a
4348 class-key. */
4349 if (INHERITED_VALUE_BINDING_P (binding)
4350 && BINDING_VALUE (binding)
4351 && TREE_CODE (BINDING_VALUE (binding)) == TYPE_DECL
4352 && DECL_ARTIFICIAL (BINDING_VALUE (binding))
4353 && !(TREE_CODE (x) == TYPE_DECL && DECL_ARTIFICIAL (x)))
4354 {
4355 old_decl = BINDING_TYPE (binding);
4356 BINDING_TYPE (binding) = BINDING_VALUE (binding);
4357 BINDING_VALUE (binding) = NULL_TREE;
4358 INHERITED_VALUE_BINDING_P (binding) = 0;
4359 }
4360 else
4361 old_decl = BINDING_VALUE (binding);
4362
4363 /* There was already a binding for X containing fewer
4364 functions than are named in X. Find the previous
4365 declaration of X on the class-shadowed list, and update it. */
4366 for (shadow = class_binding_level->class_shadowed;
4367 shadow;
4368 shadow = TREE_CHAIN (shadow))
4369 if (TREE_PURPOSE (shadow) == name
4370 && TREE_TYPE (shadow) == old_decl)
4371 {
4372 BINDING_VALUE (binding) = x;
4373 INHERITED_VALUE_BINDING_P (binding) = 0;
4374 TREE_TYPE (shadow) = x;
4375 return;
4376 }
4377 }
f181d4ae 4378
8f032717
MM
4379 /* If we didn't replace an existing binding, put the binding on the
4380 stack of bindings for the identifier, and update
4381 IDENTIFIER_CLASS_VALUE. */
4382 if (push_class_binding (name, x))
4383 {
8f032717
MM
4384 class_binding_level->class_shadowed
4385 = tree_cons (name, IDENTIFIER_CLASS_VALUE (name),
4386 class_binding_level->class_shadowed);
8f032717
MM
4387 /* Record the value we are binding NAME to so that we can know
4388 what to pop later. */
4389 TREE_TYPE (class_binding_level->class_shadowed) = x;
4390 }
8d08fdba
MS
4391}
4392
2c73f9f5
ML
4393/* Insert another USING_DECL into the current binding level,
4394 returning this declaration. If this is a redeclaration,
4395 do nothing and return NULL_TREE. */
e92cc029 4396
2c73f9f5
ML
4397tree
4398push_using_decl (scope, name)
4399 tree scope;
4400 tree name;
8d08fdba 4401{
2c73f9f5 4402 tree decl;
68642fb6 4403
2c73f9f5
ML
4404 my_friendly_assert (TREE_CODE (scope) == NAMESPACE_DECL, 383);
4405 my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 384);
4406 for (decl = current_binding_level->usings; decl; decl = TREE_CHAIN (decl))
4407 if (DECL_INITIAL (decl) == scope && DECL_NAME (decl) == name)
4408 break;
4409 if (decl)
4410 return NULL_TREE;
4ce3d537 4411 decl = build_lang_decl (USING_DECL, name, void_type_node);
2c73f9f5
ML
4412 DECL_INITIAL (decl) = scope;
4413 TREE_CHAIN (decl) = current_binding_level->usings;
4414 current_binding_level->usings = decl;
4415 return decl;
8d08fdba
MS
4416}
4417
ea9635c7
ML
4418/* Add namespace to using_directives. Return NULL_TREE if nothing was
4419 changed (i.e. there was already a directive), or the fresh
4420 TREE_LIST otherwise. */
4421
4422tree
9ed182dc 4423push_using_directive (used)
ea9635c7 4424 tree used;
ea9635c7
ML
4425{
4426 tree ud = current_binding_level->using_directives;
9ed182dc 4427 tree iter, ancestor;
68642fb6 4428
ea9635c7
ML
4429 /* Check if we already have this. */
4430 if (purpose_member (used, ud) != NULL_TREE)
4431 return NULL_TREE;
00dc6358
JM
4432
4433 /* Recursively add all namespaces used. */
4434 for (iter = DECL_NAMESPACE_USING (used); iter; iter = TREE_CHAIN (iter))
9ed182dc 4435 push_using_directive (TREE_PURPOSE (iter));
00dc6358 4436
9ed182dc 4437 ancestor = namespace_ancestor (current_decl_namespace (), used);
00dc6358 4438 ud = current_binding_level->using_directives;
e1b3e07d 4439 ud = tree_cons (used, ancestor, ud);
ea9635c7
ML
4440 current_binding_level->using_directives = ud;
4441 return ud;
4442}
4443
f181d4ae
MM
4444/* DECL is a FUNCTION_DECL for a non-member function, which may have
4445 other definitions already in place. We get around this by making
4446 the value of the identifier point to a list of all the things that
4447 want to be referenced by that name. It is then up to the users of
4448 that name to decide what to do with that list.
8d08fdba 4449
17aec3eb
RK
4450 DECL may also be a TEMPLATE_DECL, with a FUNCTION_DECL in its
4451 DECL_TEMPLATE_RESULT. It is dealt with the same way.
8d08fdba 4452
7bdbfa05
MM
4453 FLAGS is a bitwise-or of the following values:
4454 PUSH_LOCAL: Bind DECL in the current scope, rather than at
4455 namespace scope.
4456 PUSH_USING: DECL is being pushed as the result of a using
68642fb6 4457 declaration.
7bdbfa05 4458
8d08fdba
MS
4459 The value returned may be a previous declaration if we guessed wrong
4460 about what language DECL should belong to (C or C++). Otherwise,
4461 it's always DECL (and never something that's not a _DECL). */
e92cc029 4462
7bdbfa05
MM
4463tree
4464push_overloaded_decl (decl, flags)
8d08fdba 4465 tree decl;
7bdbfa05 4466 int flags;
8d08fdba 4467{
f181d4ae 4468 tree name = DECL_NAME (decl);
700f8a87 4469 tree old;
f181d4ae 4470 tree new_binding;
7bdbfa05 4471 int doing_global = (namespace_bindings_p () || !(flags & PUSH_LOCAL));
700f8a87
MS
4472
4473 if (doing_global)
9f33663b 4474 old = namespace_binding (name, DECL_CONTEXT (decl));
700f8a87 4475 else
f181d4ae 4476 old = lookup_name_current_level (name);
8d08fdba 4477
700f8a87 4478 if (old)
8d08fdba 4479 {
e1cd6e56 4480 if (TREE_CODE (old) == TYPE_DECL && DECL_ARTIFICIAL (old))
8926095f 4481 {
700f8a87 4482 tree t = TREE_TYPE (old);
cdf5b885
MS
4483 if (IS_AGGR_TYPE (t) && warn_shadow
4484 && (! DECL_IN_SYSTEM_HEADER (decl)
4485 || ! DECL_IN_SYSTEM_HEADER (old)))
8251199e 4486 cp_warning ("`%#D' hides constructor for `%#T'", decl, t);
5b605f68 4487 old = NULL_TREE;
8926095f 4488 }
700f8a87 4489 else if (is_overloaded_fn (old))
8d08fdba 4490 {
8d08fdba 4491 tree tmp;
68642fb6 4492
2c73f9f5 4493 for (tmp = old; tmp; tmp = OVL_NEXT (tmp))
7bdbfa05
MM
4494 {
4495 tree fn = OVL_CURRENT (tmp);
4496
4497 if (TREE_CODE (tmp) == OVERLOAD && OVL_USED (tmp)
4498 && !(flags & PUSH_USING)
4499 && compparms (TYPE_ARG_TYPES (TREE_TYPE (fn)),
4500 TYPE_ARG_TYPES (TREE_TYPE (decl))))
4501 cp_error ("`%#D' conflicts with previous using declaration `%#D'",
4502 decl, fn);
68642fb6 4503
7bdbfa05
MM
4504 if (duplicate_decls (decl, fn))
4505 return fn;
4506 }
8d08fdba 4507 }
e1cd6e56
MS
4508 else
4509 {
8251199e
JM
4510 cp_error_at ("previous non-function declaration `%#D'", old);
4511 cp_error ("conflicts with function declaration `%#D'", decl);
a9aedbc2 4512 return decl;
e1cd6e56 4513 }
8d08fdba 4514 }
7177d104 4515
700f8a87 4516 if (old || TREE_CODE (decl) == TEMPLATE_DECL)
8d08fdba 4517 {
2c73f9f5 4518 if (old && TREE_CODE (old) != OVERLOAD)
f181d4ae
MM
4519 new_binding = ovl_cons (decl, ovl_cons (old, NULL_TREE));
4520 else
4521 new_binding = ovl_cons (decl, old);
347d73d7
ML
4522 if (flags & PUSH_USING)
4523 OVL_USED (new_binding) = 1;
8d08fdba
MS
4524 }
4525 else
f181d4ae
MM
4526 /* NAME is not ambiguous. */
4527 new_binding = decl;
700f8a87
MS
4528
4529 if (doing_global)
f181d4ae 4530 set_namespace_binding (name, current_namespace, new_binding);
700f8a87 4531 else
f181d4ae
MM
4532 {
4533 /* We only create an OVERLOAD if there was a previous binding at
0580c9aa
ML
4534 this level, or if decl is a template. In the former case, we
4535 need to remove the old binding and replace it with the new
4536 binding. We must also run through the NAMES on the binding
4537 level where the name was bound to update the chain. */
4538
4539 if (TREE_CODE (new_binding) == OVERLOAD && old)
f181d4ae
MM
4540 {
4541 tree *d;
68642fb6 4542
f181d4ae
MM
4543 for (d = &BINDING_LEVEL (IDENTIFIER_BINDING (name))->names;
4544 *d;
4545 d = &TREE_CHAIN (*d))
4546 if (*d == old
4547 || (TREE_CODE (*d) == TREE_LIST
4548 && TREE_VALUE (*d) == old))
4549 {
d8f8dca1
MM
4550 if (TREE_CODE (*d) == TREE_LIST)
4551 /* Just replace the old binding with the new. */
4552 TREE_VALUE (*d) = new_binding;
4553 else
4554 /* Build a TREE_LIST to wrap the OVERLOAD. */
68642fb6 4555 *d = tree_cons (NULL_TREE, new_binding,
ed5511d9 4556 TREE_CHAIN (*d));
d8f8dca1
MM
4557
4558 /* And update the CPLUS_BINDING node. */
4559 BINDING_VALUE (IDENTIFIER_BINDING (name))
4560 = new_binding;
4561 return decl;
f181d4ae
MM
4562 }
4563
d8f8dca1
MM
4564 /* We should always find a previous binding in this case. */
4565 my_friendly_abort (0);
f181d4ae
MM
4566 }
4567
4568 /* Install the new binding. */
0034cf72 4569 push_local_binding (name, new_binding, flags);
f181d4ae 4570 }
700f8a87 4571
8d08fdba
MS
4572 return decl;
4573}
4574\f
4575/* Generate an implicit declaration for identifier FUNCTIONID
4576 as a function of type int (). Print a warning if appropriate. */
4577
4578tree
4579implicitly_declare (functionid)
4580 tree functionid;
4581{
4582 register tree decl;
8d08fdba
MS
4583
4584 /* We used to reuse an old implicit decl here,
4585 but this loses with inline functions because it can clobber
4586 the saved decl chains. */
4587 decl = build_lang_decl (FUNCTION_DECL, functionid, default_function_type);
4588
4589 DECL_EXTERNAL (decl) = 1;
4590 TREE_PUBLIC (decl) = 1;
4591
cab1f180 4592 /* ISO standard says implicit declarations are in the innermost block.
d22c8596 4593 So we record the decl in the standard fashion. */
8d08fdba
MS
4594 pushdecl (decl);
4595 rest_of_decl_compilation (decl, NULL_PTR, 0, 0);
4596
4597 if (warn_implicit
4598 /* Only one warning per identifier. */
4599 && IDENTIFIER_IMPLICIT_DECL (functionid) == NULL_TREE)
4600 {
8251199e 4601 cp_pedwarn ("implicit declaration of function `%#D'", decl);
8d08fdba
MS
4602 }
4603
4604 SET_IDENTIFIER_IMPLICIT_DECL (functionid, decl);
4605
8d08fdba
MS
4606 return decl;
4607}
4608
8251199e 4609/* Return zero if the declaration NEWDECL is valid
8d08fdba
MS
4610 when the declaration OLDDECL (assumed to be for the same name)
4611 has already been seen.
4612 Otherwise return an error message format string with a %s
4613 where the identifier should go. */
4614
d8e178a0 4615static const char *
8d08fdba
MS
4616redeclaration_error_message (newdecl, olddecl)
4617 tree newdecl, olddecl;
4618{
4619 if (TREE_CODE (newdecl) == TYPE_DECL)
4620 {
4621 /* Because C++ can put things into name space for free,
4622 constructs like "typedef struct foo { ... } foo"
4623 would look like an erroneous redeclaration. */
3bfdc719 4624 if (same_type_p (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
8251199e 4625 return 0;
8d08fdba 4626 else
8251199e 4627 return "redefinition of `%#D'";
8d08fdba
MS
4628 }
4629 else if (TREE_CODE (newdecl) == FUNCTION_DECL)
4630 {
4631 /* If this is a pure function, its olddecl will actually be
4632 the original initialization to `0' (which we force to call
4633 abort()). Don't complain about redefinition in this case. */
fee7654e 4634 if (DECL_LANG_SPECIFIC (olddecl) && DECL_PURE_VIRTUAL_P (olddecl))
8251199e 4635 return 0;
8d08fdba 4636
2c73f9f5
ML
4637 /* If both functions come from different namespaces, this is not
4638 a redeclaration - this is a conflict with a used function. */
6eb3bb27 4639 if (DECL_NAMESPACE_SCOPE_P (olddecl)
2c73f9f5 4640 && DECL_CONTEXT (olddecl) != DECL_CONTEXT (newdecl))
8251199e 4641 return "`%D' conflicts with used function";
2c73f9f5 4642
db5ae43f
MS
4643 /* We'll complain about linkage mismatches in
4644 warn_extern_redeclared_static. */
4645
2c73f9f5 4646 /* Defining the same name twice is no good. */
8d08fdba 4647 if (DECL_INITIAL (olddecl) != NULL_TREE
faae18ab 4648 && DECL_INITIAL (newdecl) != NULL_TREE)
8d08fdba
MS
4649 {
4650 if (DECL_NAME (olddecl) == NULL_TREE)
8251199e 4651 return "`%#D' not declared in class";
8d08fdba 4652 else
8251199e 4653 return "redefinition of `%#D'";
8d08fdba 4654 }
8251199e 4655 return 0;
8d08fdba 4656 }
51c184be
MS
4657 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
4658 {
ec255269
MS
4659 if ((TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
4660 && DECL_INITIAL (DECL_TEMPLATE_RESULT (newdecl))
4661 && DECL_INITIAL (DECL_TEMPLATE_RESULT (olddecl)))
4662 || (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL
d0f062fb
NS
4663 && COMPLETE_TYPE_P (TREE_TYPE (newdecl))
4664 && COMPLETE_TYPE_P (TREE_TYPE (olddecl))))
8251199e
JM
4665 return "redefinition of `%#D'";
4666 return 0;
51c184be 4667 }
1f51a992 4668 else if (toplevel_bindings_p () || DECL_NAMESPACE_SCOPE_P (newdecl))
8d08fdba
MS
4669 {
4670 /* Objects declared at top level: */
4671 /* If at least one is a reference, it's ok. */
4672 if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl))
8251199e 4673 return 0;
8926095f 4674 /* Reject two definitions. */
8251199e 4675 return "redefinition of `%#D'";
8d08fdba
MS
4676 }
4677 else
4678 {
4679 /* Objects declared with block scope: */
4680 /* Reject two definitions, and reject a definition
4681 together with an external reference. */
4682 if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl)))
8251199e
JM
4683 return "redeclaration of `%#D'";
4684 return 0;
8d08fdba
MS
4685 }
4686}
4687\f
acef433b 4688/* Create a new label, named ID. */
8d08fdba 4689
acef433b
MM
4690static tree
4691make_label_decl (id, local_p)
8d08fdba 4692 tree id;
acef433b 4693 int local_p;
8d08fdba 4694{
acef433b 4695 tree decl;
8d08fdba 4696
acef433b 4697 decl = build_decl (LABEL_DECL, id, void_type_node);
b35d4555 4698 if (expanding_p)
acef433b
MM
4699 /* Make sure every label has an rtx. */
4700 label_rtx (decl);
4701
4702 DECL_CONTEXT (decl) = current_function_decl;
4703 DECL_MODE (decl) = VOIDmode;
4704 C_DECLARED_LABEL_FLAG (decl) = local_p;
8d08fdba 4705
acef433b
MM
4706 /* Say where one reference is to the label, for the sake of the
4707 error if it is not defined. */
4708 DECL_SOURCE_LINE (decl) = lineno;
4709 DECL_SOURCE_FILE (decl) = input_filename;
4710
4711 /* Record the fact that this identifier is bound to this label. */
4712 SET_IDENTIFIER_LABEL_VALUE (id, decl);
4713
4714 /* Record this label on the list of used labels so that we can check
4715 at the end of the function to see whether or not the label was
4716 actually defined. */
4717 if ((named_label_uses == NULL || named_label_uses->label_decl != decl)
e349ee73
MS
4718 && (named_label_uses == NULL
4719 || named_label_uses->names_in_scope != current_binding_level->names
4720 || named_label_uses->label_decl != decl))
4721 {
4722 struct named_label_list *new_ent;
4723 new_ent
4724 = (struct named_label_list*)oballoc (sizeof (struct named_label_list));
4725 new_ent->label_decl = decl;
4726 new_ent->names_in_scope = current_binding_level->names;
4727 new_ent->binding_level = current_binding_level;
4728 new_ent->lineno_o_goto = lineno;
4729 new_ent->filename_o_goto = input_filename;
4730 new_ent->next = named_label_uses;
4731 named_label_uses = new_ent;
8d08fdba
MS
4732 }
4733
acef433b
MM
4734 return decl;
4735}
8d08fdba 4736
acef433b
MM
4737/* Look for a label named ID in the current function. If one cannot
4738 be found, create one. (We keep track of used, but undefined,
4739 labels, and complain about them at the end of a function.) */
8d08fdba 4740
68642fb6 4741tree
acef433b
MM
4742lookup_label (id)
4743 tree id;
4744{
4745 tree decl;
8d08fdba 4746
acef433b
MM
4747 /* You can't use labels at global scope. */
4748 if (current_function_decl == NULL_TREE)
4749 {
4750 error ("label `%s' referenced outside of any function",
4751 IDENTIFIER_POINTER (id));
4752 return NULL_TREE;
4753 }
68642fb6 4754
acef433b
MM
4755 /* See if we've already got this label. */
4756 decl = IDENTIFIER_LABEL_VALUE (id);
4757 if (decl != NULL_TREE && DECL_CONTEXT (decl) == current_function_decl)
4758 return decl;
8d08fdba 4759
acef433b
MM
4760 /* Record this label on the list of labels used in this function.
4761 We do this before calling make_label_decl so that we get the
4762 IDENTIFIER_LABEL_VALUE before the new label is declared. */
4763 named_labels = tree_cons (IDENTIFIER_LABEL_VALUE (id), NULL_TREE,
4764 named_labels);
4765 /* We need a new label. */
4766 decl = make_label_decl (id, /*local_p=*/0);
4767 /* Now fill in the information we didn't have before. */
4768 TREE_VALUE (named_labels) = decl;
8d08fdba
MS
4769
4770 return decl;
4771}
4772
acef433b 4773/* Declare a local label named ID. */
8d08fdba
MS
4774
4775tree
acef433b
MM
4776declare_local_label (id)
4777 tree id;
8d08fdba 4778{
acef433b 4779 tree decl;
8d08fdba 4780
acef433b
MM
4781 /* Add a new entry to the SHADOWED_LABELS list so that when we leave
4782 this scope we can restore the old value of
4783 IDENTIFIER_TYPE_VALUE. */
68642fb6 4784 current_binding_level->shadowed_labels
acef433b
MM
4785 = tree_cons (IDENTIFIER_LABEL_VALUE (id), NULL_TREE,
4786 current_binding_level->shadowed_labels);
4787 /* Look for the label. */
4788 decl = make_label_decl (id, /*local_p=*/1);
4789 /* Now fill in the information we didn't have before. */
4790 TREE_VALUE (current_binding_level->shadowed_labels) = decl;
68642fb6 4791
acef433b 4792 return decl;
8d08fdba
MS
4793}
4794
4795/* Define a label, specifying the location in the source file.
4796 Return the LABEL_DECL node for the label, if the definition is valid.
4797 Otherwise return 0. */
4798
4799tree
4800define_label (filename, line, name)
4801 char *filename;
4802 int line;
4803 tree name;
4804{
f01b0acb 4805 tree decl = lookup_label (name);
8d08fdba
MS
4806
4807 /* After labels, make any new cleanups go into their
4808 own new (temporary) binding contour. */
4809 current_binding_level->more_cleanups_ok = 0;
4810
e1cd6e56 4811 if (name == get_identifier ("wchar_t"))
8251199e 4812 cp_pedwarn ("label named wchar_t");
e1cd6e56 4813
8d08fdba
MS
4814 if (DECL_INITIAL (decl) != NULL_TREE)
4815 {
8251199e 4816 cp_error ("duplicate label `%D'", decl);
8d08fdba
MS
4817 return 0;
4818 }
4819 else
4820 {
e349ee73 4821 struct named_label_list *uses, *prev;
28cbf42c 4822 int identified = 0;
227cf171 4823 int saw_eh = 0;
8d08fdba
MS
4824
4825 /* Mark label as having been defined. */
4826 DECL_INITIAL (decl) = error_mark_node;
4827 /* Say where in the source. */
4828 DECL_SOURCE_FILE (decl) = filename;
4829 DECL_SOURCE_LINE (decl) = line;
4830
e349ee73
MS
4831 prev = NULL;
4832 uses = named_label_uses;
4833 while (uses != NULL)
4834 if (uses->label_decl == decl)
8d08fdba
MS
4835 {
4836 struct binding_level *b = current_binding_level;
4837 while (b)
4838 {
4839 tree new_decls = b->names;
e349ee73
MS
4840 tree old_decls = (b == uses->binding_level)
4841 ? uses->names_in_scope : NULL_TREE;
8d08fdba
MS
4842 while (new_decls != old_decls)
4843 {
4844 if (TREE_CODE (new_decls) == VAR_DECL
4845 /* Don't complain about crossing initialization
4846 of internal entities. They can't be accessed,
4847 and they should be cleaned up
4848 by the time we get to the label. */
700f8a87 4849 && ! DECL_ARTIFICIAL (new_decls)
5524676d
JM
4850 && !(DECL_INITIAL (new_decls) == NULL_TREE
4851 && pod_type_p (TREE_TYPE (new_decls))))
8d08fdba 4852 {
b607c87f
JM
4853 /* This is really only important if we're crossing
4854 an initialization. The POD stuff is just
4855 pedantry; why should it matter if the class
4856 contains a field of pointer to member type? */
4857 int problem = (DECL_INITIAL (new_decls)
4858 || (TYPE_NEEDS_CONSTRUCTING
4859 (TREE_TYPE (new_decls))));
4860
4861 if (! identified)
e349ee73 4862 {
b607c87f
JM
4863 if (problem)
4864 {
4865 cp_error ("jump to label `%D'", decl);
4866 error_with_file_and_line
4867 (uses->filename_o_goto,
4868 uses->lineno_o_goto, " from here");
4869 }
4870 else
4871 {
4872 cp_pedwarn ("jump to label `%D'", decl);
4873 pedwarn_with_file_and_line
4874 (uses->filename_o_goto,
4875 uses->lineno_o_goto, " from here");
4876 }
e349ee73 4877 identified = 1;
227cf171 4878 }
b607c87f
JM
4879
4880 if (problem)
5524676d
JM
4881 cp_error_at (" crosses initialization of `%#D'",
4882 new_decls);
4883 else
b607c87f 4884 cp_pedwarn_at (" enters scope of non-POD `%#D'",
5524676d 4885 new_decls);
8d08fdba
MS
4886 }
4887 new_decls = TREE_CHAIN (new_decls);
4888 }
e349ee73 4889 if (b == uses->binding_level)
8d08fdba 4890 break;
227cf171
JM
4891 if (b->eh_region && ! saw_eh)
4892 {
4893 if (! identified)
4894 {
4895 cp_error ("jump to label `%D'", decl);
4896 error_with_file_and_line
4897 (uses->filename_o_goto,
4898 uses->lineno_o_goto, " from here");
4899 identified = 1;
4900 }
4901 error (" enters exception handling block");
4902 saw_eh = 1;
4903 }
8d08fdba
MS
4904 b = b->level_chain;
4905 }
4906
e349ee73
MS
4907 if (prev != NULL)
4908 prev->next = uses->next;
8d08fdba 4909 else
e349ee73
MS
4910 named_label_uses = uses->next;
4911
4912 uses = uses->next;
4913 }
4914 else
4915 {
4916 prev = uses;
4917 uses = uses->next;
8d08fdba
MS
4918 }
4919 current_function_return_value = NULL_TREE;
4920 return decl;
4921 }
4922}
4923
a5894242
MS
4924struct cp_switch
4925{
4926 struct binding_level *level;
4927 struct cp_switch *next;
4928};
4929
4930static struct cp_switch *switch_stack;
4931
4932void
4933push_switch ()
4934{
4935 struct cp_switch *p
bedda2da 4936 = (struct cp_switch *) xmalloc (sizeof (struct cp_switch));
a5894242
MS
4937 p->level = current_binding_level;
4938 p->next = switch_stack;
4939 switch_stack = p;
4940}
4941
4942void
4943pop_switch ()
4944{
bedda2da
MM
4945 struct cp_switch *cs;
4946
4947 cs = switch_stack;
a5894242 4948 switch_stack = switch_stack->next;
bedda2da 4949 free (cs);
a5894242
MS
4950}
4951
b0a1da19
JM
4952/* Note that we've seen a definition of a case label, and complain if this
4953 is a bad place for one. */
e92cc029 4954
8d08fdba 4955void
b370501f 4956define_case_label ()
8d08fdba
MS
4957{
4958 tree cleanup = last_cleanup_this_contour ();
a5894242
MS
4959 struct binding_level *b = current_binding_level;
4960 int identified = 0;
4961
b0a1da19
JM
4962 if (! switch_stack)
4963 /* Don't crash; we'll complain in do_case. */
4964 return;
68642fb6 4965
8d08fdba
MS
4966 if (cleanup)
4967 {
4968 static int explained = 0;
8251199e
JM
4969 cp_warning_at ("destructor needed for `%#D'", TREE_PURPOSE (cleanup));
4970 warning ("where case label appears here");
8d08fdba
MS
4971 if (!explained)
4972 {
8251199e
JM
4973 warning ("(enclose actions of previous case statements requiring");
4974 warning ("destructors in their own binding contours.)");
8d08fdba
MS
4975 explained = 1;
4976 }
4977 }
4978
a5894242
MS
4979 for (; b && b != switch_stack->level; b = b->level_chain)
4980 {
4981 tree new_decls = b->names;
4982 for (; new_decls; new_decls = TREE_CHAIN (new_decls))
4983 {
4984 if (TREE_CODE (new_decls) == VAR_DECL
4985 /* Don't complain about crossing initialization
4986 of internal entities. They can't be accessed,
4987 and they should be cleaned up
4988 by the time we get to the label. */
4989 && ! DECL_ARTIFICIAL (new_decls)
4990 && ((DECL_INITIAL (new_decls) != NULL_TREE
4991 && DECL_INITIAL (new_decls) != error_mark_node)
4992 || TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (new_decls))))
4993 {
4994 if (! identified)
8251199e 4995 error ("jump to case label");
a5894242 4996 identified = 1;
8251199e 4997 cp_error_at (" crosses initialization of `%#D'",
a5894242
MS
4998 new_decls);
4999 }
5000 }
5001 }
5002
8d08fdba
MS
5003 /* After labels, make any new cleanups go into their
5004 own new (temporary) binding contour. */
5005
5006 current_binding_level->more_cleanups_ok = 0;
5007 current_function_return_value = NULL_TREE;
5008}
5009\f
5010/* Return the list of declarations of the current level.
5011 Note that this list is in reverse order unless/until
5012 you nreverse it; and when you do nreverse it, you must
5013 store the result back using `storedecls' or you will lose. */
5014
5015tree
5016getdecls ()
5017{
5018 return current_binding_level->names;
5019}
5020
5021/* Return the list of type-tags (for structs, etc) of the current level. */
5022
5023tree
5024gettags ()
5025{
5026 return current_binding_level->tags;
5027}
5028
5029/* Store the list of declarations of the current level.
5030 This is done for the parameter declarations of a function being defined,
5031 after they are modified in the light of any missing parameters. */
5032
5033static void
5034storedecls (decls)
5035 tree decls;
5036{
5037 current_binding_level->names = decls;
5038}
5039
5040/* Similarly, store the list of tags of the current level. */
5041
280f9385 5042void
8d08fdba
MS
5043storetags (tags)
5044 tree tags;
5045{
5046 current_binding_level->tags = tags;
5047}
5048\f
5049/* Given NAME, an IDENTIFIER_NODE,
5050 return the structure (or union or enum) definition for that name.
5051 Searches binding levels from BINDING_LEVEL up to the global level.
5052 If THISLEVEL_ONLY is nonzero, searches only the specified context
5053 (but skips any tag-transparent contexts to find one that is
5054 meaningful for tags).
5055 FORM says which kind of type the caller wants;
5056 it is RECORD_TYPE or UNION_TYPE or ENUMERAL_TYPE.
5057 If the wrong kind of type is found, and it's not a template, an error is
5058 reported. */
5059
5060static tree
5061lookup_tag (form, name, binding_level, thislevel_only)
5062 enum tree_code form;
8d08fdba 5063 tree name;
cffa8729 5064 struct binding_level *binding_level;
8d08fdba
MS
5065 int thislevel_only;
5066{
5067 register struct binding_level *level;
74b846e0
MM
5068 /* Non-zero if, we should look past a template parameter level, even
5069 if THISLEVEL_ONLY. */
5070 int allow_template_parms_p = 1;
8d08fdba
MS
5071
5072 for (level = binding_level; level; level = level->level_chain)
5073 {
5074 register tree tail;
5075 if (ANON_AGGRNAME_P (name))
5076 for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
5077 {
5078 /* There's no need for error checking here, because
5079 anon names are unique throughout the compilation. */
5080 if (TYPE_IDENTIFIER (TREE_VALUE (tail)) == name)
5081 return TREE_VALUE (tail);
5082 }
2c73f9f5
ML
5083 else if (level->namespace_p)
5084 /* Do namespace lookup. */
6c011b01 5085 for (tail = current_namespace; 1; tail = CP_DECL_CONTEXT (tail))
2c73f9f5 5086 {
36a117a5
MM
5087 tree old = binding_for_name (name, tail);
5088
74b846e0
MM
5089 /* If we just skipped past a template parameter level,
5090 even though THISLEVEL_ONLY, and we find a template
5091 class declaration, then we use the _TYPE node for the
36a117a5 5092 template. See the example below. */
74b846e0 5093 if (thislevel_only && !allow_template_parms_p
68642fb6 5094 && old && BINDING_VALUE (old)
36a117a5
MM
5095 && DECL_CLASS_TEMPLATE_P (BINDING_VALUE (old)))
5096 old = TREE_TYPE (BINDING_VALUE (old));
68642fb6 5097 else
36a117a5
MM
5098 old = BINDING_TYPE (old);
5099
2c73f9f5
ML
5100 /* If it has an original type, it is a typedef, and we
5101 should not return it. */
5102 if (old && DECL_ORIGINAL_TYPE (TYPE_NAME (old)))
5103 old = NULL_TREE;
5104 if (old && TREE_CODE (old) != form
5105 && !(form != ENUMERAL_TYPE && TREE_CODE (old) == TEMPLATE_DECL))
5106 {
8251199e 5107 cp_error ("`%#D' redeclared as %C", old, form);
2c73f9f5
ML
5108 return NULL_TREE;
5109 }
5110 if (old)
5111 return old;
5112 if (thislevel_only || tail == global_namespace)
5113 return NULL_TREE;
5114 }
8d08fdba
MS
5115 else
5116 for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
5117 {
a80e4195 5118 if (TREE_PURPOSE (tail) == name)
8d08fdba
MS
5119 {
5120 enum tree_code code = TREE_CODE (TREE_VALUE (tail));
5121 /* Should tighten this up; it'll probably permit
5122 UNION_TYPE and a struct template, for example. */
5123 if (code != form
5566b478 5124 && !(form != ENUMERAL_TYPE && code == TEMPLATE_DECL))
8d08fdba
MS
5125 {
5126 /* Definition isn't the kind we were looking for. */
8251199e 5127 cp_error ("`%#D' redeclared as %C", TREE_VALUE (tail),
8d08fdba 5128 form);
72b7eeff 5129 return NULL_TREE;
8d08fdba
MS
5130 }
5131 return TREE_VALUE (tail);
5132 }
5133 }
5134 if (thislevel_only && ! level->tag_transparent)
5566b478 5135 {
74b846e0 5136 if (level->template_parms_p && allow_template_parms_p)
5566b478 5137 {
36a117a5 5138 /* We must deal with cases like this:
68642fb6 5139
36a117a5
MM
5140 template <class T> struct S;
5141 template <class T> struct S {};
68642fb6 5142
36a117a5
MM
5143 When looking up `S', for the second declaration, we
5144 would like to find the first declaration. But, we
5145 are in the pseudo-global level created for the
5146 template parameters, rather than the (surrounding)
5147 namespace level. Thus, we keep going one more level,
5148 even though THISLEVEL_ONLY is non-zero. */
74b846e0 5149 allow_template_parms_p = 0;
36a117a5 5150 continue;
5566b478 5151 }
36a117a5
MM
5152 else
5153 return NULL_TREE;
5566b478 5154 }
8d08fdba
MS
5155 }
5156 return NULL_TREE;
5157}
5158
bd6dd845 5159#if 0
8d08fdba
MS
5160void
5161set_current_level_tags_transparency (tags_transparent)
5162 int tags_transparent;
5163{
5164 current_binding_level->tag_transparent = tags_transparent;
5165}
bd6dd845 5166#endif
8d08fdba
MS
5167
5168/* Given a type, find the tag that was defined for it and return the tag name.
5169 Otherwise return 0. However, the value can never be 0
5170 in the cases in which this is used.
5171
5172 C++: If NAME is non-zero, this is the new name to install. This is
5173 done when replacing anonymous tags with real tag names. */
5174
5175static tree
5176lookup_tag_reverse (type, name)
5177 tree type;
5178 tree name;
5179{
5180 register struct binding_level *level;
5181
5182 for (level = current_binding_level; level; level = level->level_chain)
5183 {
5184 register tree tail;
5185 for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
5186 {
5187 if (TREE_VALUE (tail) == type)
5188 {
5189 if (name)
5190 TREE_PURPOSE (tail) = name;
5191 return TREE_PURPOSE (tail);
5192 }
5193 }
5194 }
5195 return NULL_TREE;
5196}
8d08fdba 5197\f
a9aedbc2 5198/* Look up NAME in the NAMESPACE. */
e92cc029 5199
a9aedbc2
MS
5200tree
5201lookup_namespace_name (namespace, name)
5202 tree namespace, name;
5203{
30394414 5204 tree val;
f30c84c9 5205 tree template_id = NULL_TREE;
2c73f9f5 5206
30394414 5207 my_friendly_assert (TREE_CODE (namespace) == NAMESPACE_DECL, 370);
1231fb96 5208
1231fb96 5209 if (TREE_CODE (name) == NAMESPACE_DECL)
d8f8dca1 5210 /* This happens for A::B<int> when B is a namespace. */
1231fb96 5211 return name;
d8f8dca1
MM
5212 else if (TREE_CODE (name) == TEMPLATE_DECL)
5213 {
5214 /* This happens for A::B where B is a template, and there are no
5215 template arguments. */
5216 cp_error ("invalid use of `%D'", name);
5217 return error_mark_node;
5218 }
1231fb96 5219
b262d64c
JM
5220 namespace = ORIGINAL_NAMESPACE (namespace);
5221
f30c84c9
MM
5222 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
5223 {
5224 template_id = name;
5225 name = TREE_OPERAND (name, 0);
5226 if (TREE_CODE (name) == OVERLOAD)
5227 name = DECL_NAME (OVL_CURRENT (name));
2f939d94 5228 else if (DECL_P (name))
f30c84c9
MM
5229 name = DECL_NAME (name);
5230 }
5231
30394414 5232 my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 373);
68642fb6 5233
87e3dbc9 5234 val = make_node (CPLUS_BINDING);
52c11ef6 5235 if (!qualified_lookup_using_namespace (name, namespace, val, 0))
2c73f9f5
ML
5236 return error_mark_node;
5237
5238 if (BINDING_VALUE (val))
1c35f5b6
JM
5239 {
5240 val = BINDING_VALUE (val);
5241
f30c84c9
MM
5242 if (template_id)
5243 {
5244 if (DECL_CLASS_TEMPLATE_P (val))
68642fb6 5245 val = lookup_template_class (val,
f30c84c9
MM
5246 TREE_OPERAND (template_id, 1),
5247 /*in_decl=*/NULL_TREE,
5248 /*context=*/NULL_TREE,
5249 /*entering_scope=*/0);
5250 else if (DECL_FUNCTION_TEMPLATE_P (val)
5251 || TREE_CODE (val) == OVERLOAD)
68642fb6 5252 val = lookup_template_function (val,
f30c84c9
MM
5253 TREE_OPERAND (template_id, 1));
5254 else
5255 {
5256 cp_error ("`%D::%D' is not a template",
5257 namespace, name);
5258 return error_mark_node;
5259 }
5260 }
5261
1c35f5b6
JM
5262 /* If we have a single function from a using decl, pull it out. */
5263 if (TREE_CODE (val) == OVERLOAD && ! really_overloaded_fn (val))
5264 val = OVL_FUNCTION (val);
5265 return val;
5266 }
5267
8251199e 5268 cp_error ("`%D' undeclared in namespace `%D'", name, namespace);
30394414 5269 return error_mark_node;
a9aedbc2
MS
5270}
5271
7ddedda4
MM
5272/* Hash a TYPENAME_TYPE. K is really of type `tree'. */
5273
5274static unsigned long
5275typename_hash (k)
5276 hash_table_key k;
5277{
5278 unsigned long hash;
5279 tree t;
5280
5281 t = (tree) k;
5282 hash = (((unsigned long) TYPE_CONTEXT (t))
5283 ^ ((unsigned long) DECL_NAME (TYPE_NAME (t))));
5284
5285 return hash;
5286}
5287
5288/* Compare two TYPENAME_TYPEs. K1 and K2 are really of type `tree'. */
5289
5290static boolean
5291typename_compare (k1, k2)
5292 hash_table_key k1;
5293 hash_table_key k2;
5294{
5295 tree t1;
5296 tree t2;
5297 tree d1;
5298 tree d2;
5299
5300 t1 = (tree) k1;
5301 t2 = (tree) k2;
5302 d1 = TYPE_NAME (t1);
5303 d2 = TYPE_NAME (t2);
68642fb6 5304
7ddedda4
MM
5305 return (DECL_NAME (d1) == DECL_NAME (d2)
5306 && same_type_p (TYPE_CONTEXT (t1), TYPE_CONTEXT (t2))
68642fb6 5307 && ((TREE_TYPE (t1) != NULL_TREE)
7ddedda4
MM
5308 == (TREE_TYPE (t2) != NULL_TREE))
5309 && same_type_p (TREE_TYPE (t1), TREE_TYPE (t2))
5310 && TYPENAME_TYPE_FULLNAME (t1) == TYPENAME_TYPE_FULLNAME (t2));
5311}
5312
45869a6c
MM
5313/* Build a TYPENAME_TYPE. If the type is `typename T::t', CONTEXT is
5314 the type of `T', NAME is the IDENTIFIER_NODE for `t'. If BASE_TYPE
5315 is non-NULL, this type is being created by the implicit typename
5316 extension, and BASE_TYPE is a type named `t' in some base class of
68642fb6 5317 `T' which depends on template parameters.
45869a6c
MM
5318
5319 Returns the new TYPENAME_TYPE. */
5320
5321tree
5322build_typename_type (context, name, fullname, base_type)
5323 tree context;
5324 tree name;
5325 tree fullname;
5326 tree base_type;
5327{
5328 tree t;
5329 tree d;
7ddedda4 5330 struct hash_entry* e;
45869a6c 5331
7ddedda4
MM
5332 static struct hash_table ht;
5333
9cd64686
MM
5334 if (!ht.table)
5335 {
5336 static struct hash_table *h = &ht;
68642fb6 5337 if (!hash_table_init (&ht, &hash_newfunc, &typename_hash,
9cd64686
MM
5338 &typename_compare))
5339 fatal ("virtual memory exhausted");
5340 ggc_add_tree_hash_table_root (&h, 1);
5341 }
45869a6c
MM
5342
5343 /* Build the TYPENAME_TYPE. */
33848bb0 5344 t = make_aggr_type (TYPENAME_TYPE);
45869a6c
MM
5345 TYPE_CONTEXT (t) = FROB_CONTEXT (context);
5346 TYPENAME_TYPE_FULLNAME (t) = fullname;
5347 TREE_TYPE (t) = base_type;
45869a6c
MM
5348
5349 /* Build the corresponding TYPE_DECL. */
5350 d = build_decl (TYPE_DECL, name, t);
5351 TYPE_NAME (TREE_TYPE (d)) = d;
5352 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
5353 DECL_CONTEXT (d) = FROB_CONTEXT (context);
2642b9bf 5354 DECL_ARTIFICIAL (d) = 1;
45869a6c 5355
7ddedda4
MM
5356 /* See if we already have this type. */
5357 e = hash_lookup (&ht, t, /*create=*/false, /*copy=*/0);
5358 if (e)
87e3dbc9 5359 t = (tree) e->key;
7ddedda4
MM
5360 else
5361 /* Insert the type into the table. */
5362 hash_lookup (&ht, t, /*create=*/true, /*copy=*/0);
5363
45869a6c
MM
5364 return t;
5365}
5366
3baa501d
MM
5367/* Resolve `typename CONTEXT::NAME'. Returns an appropriate type,
5368 unless an error occurs, in which case error_mark_node is returned.
5369 If COMPLAIN zero, don't complain about any errors that occur. */
5370
5566b478 5371tree
3baa501d 5372make_typename_type (context, name, complain)
5566b478 5373 tree context, name;
3baa501d 5374 int complain;
5566b478 5375{
b2b7d40a 5376 tree fullname;
a80e4195 5377
2f939d94 5378 if (TYPE_P (name))
78638e24 5379 {
68642fb6
UD
5380 if (!(TYPE_LANG_SPECIFIC (name)
5381 && (CLASSTYPE_IS_TEMPLATE (name)
78638e24
MM
5382 || CLASSTYPE_USE_TEMPLATE (name))))
5383 name = TYPE_IDENTIFIER (name);
5384 else
5385 /* Create a TEMPLATE_ID_EXPR for the type. */
5386 name = build_nt (TEMPLATE_ID_EXPR,
5387 CLASSTYPE_TI_TEMPLATE (name),
5388 CLASSTYPE_TI_ARGS (name));
5389 }
653cc74a 5390 else if (TREE_CODE (name) == TYPE_DECL)
a80e4195 5391 name = DECL_NAME (name);
b2b7d40a
JM
5392
5393 fullname = name;
5394
5395 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
11686454
JM
5396 {
5397 name = TREE_OPERAND (name, 0);
5398 if (TREE_CODE (name) == TEMPLATE_DECL)
5399 name = TREE_OPERAND (fullname, 0) = DECL_NAME (name);
5400 }
b2b7d40a 5401 if (TREE_CODE (name) != IDENTIFIER_NODE)
a80e4195 5402 my_friendly_abort (2000);
5566b478 5403
04ddee1b
BK
5404 if (TREE_CODE (context) == NAMESPACE_DECL)
5405 {
5406 /* We can get here from typename_sub0 in the explicit_template_type
5407 expansion. Just fail. */
3baa501d
MM
5408 if (complain)
5409 cp_error ("no class template named `%#T' in `%#T'",
5410 name, context);
04ddee1b
BK
5411 return error_mark_node;
5412 }
5413
85b71cf2 5414 if (! uses_template_parms (context)
b77ead33 5415 || currently_open_class (context))
5566b478 5416 {
b2b7d40a
JM
5417 if (TREE_CODE (fullname) == TEMPLATE_ID_EXPR)
5418 {
ad810b22 5419 tree tmpl = NULL_TREE;
b2b7d40a 5420 if (IS_AGGR_TYPE (context))
ad810b22
MM
5421 tmpl = lookup_field (context, name, 0, 0);
5422 if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
b2b7d40a 5423 {
3baa501d
MM
5424 if (complain)
5425 cp_error ("no class template named `%#T' in `%#T'",
5426 name, context);
b2b7d40a
JM
5427 return error_mark_node;
5428 }
ffb690bd 5429
68642fb6 5430 return lookup_template_class (tmpl,
ad810b22 5431 TREE_OPERAND (fullname, 1),
68642fb6 5432 NULL_TREE, context,
ad810b22 5433 /*entering_scope=*/0);
b2b7d40a
JM
5434 }
5435 else
5566b478 5436 {
b4f70b3d 5437 tree t;
68642fb6 5438
b4f70b3d 5439 if (!IS_AGGR_TYPE (context))
b2b7d40a 5440 {
3baa501d
MM
5441 if (complain)
5442 cp_error ("no type named `%#T' in `%#T'", name, context);
b2b7d40a
JM
5443 return error_mark_node;
5444 }
1107c4b3 5445
b4f70b3d 5446 t = lookup_field (context, name, 0, 1);
7d4bdeed
MM
5447 if (t)
5448 return TREE_TYPE (t);
5566b478 5449 }
5566b478 5450 }
11249cf0
MM
5451
5452 /* If the CONTEXT is not a template type, then either the field is
5453 there now or its never going to be. */
b4f70b3d 5454 if (!uses_template_parms (context))
11249cf0 5455 {
3baa501d
MM
5456 if (complain)
5457 cp_error ("no type named `%#T' in `%#T'", name, context);
11249cf0
MM
5458 return error_mark_node;
5459 }
68642fb6
UD
5460
5461
45869a6c 5462 return build_typename_type (context, name, fullname, NULL_TREE);
5566b478
MS
5463}
5464
2c73f9f5
ML
5465/* Select the right _DECL from multiple choices. */
5466
5467static tree
52c11ef6 5468select_decl (binding, flags)
2c73f9f5 5469 tree binding;
52c11ef6 5470 int flags;
2c73f9f5
ML
5471{
5472 tree val;
5473 val = BINDING_VALUE (binding);
52c11ef6 5474 if (LOOKUP_NAMESPACES_ONLY (flags))
3e3f722c
ML
5475 {
5476 /* We are not interested in types. */
5477 if (val && TREE_CODE (val) == NAMESPACE_DECL)
5478 return val;
5479 return NULL_TREE;
5480 }
68642fb6 5481
2c73f9f5
ML
5482 /* If we could have a type and
5483 we have nothing or we need a type and have none. */
5484 if (BINDING_TYPE (binding)
52c11ef6
JM
5485 && (!val || ((flags & LOOKUP_PREFER_TYPES)
5486 && TREE_CODE (val) != TYPE_DECL)))
2c73f9f5
ML
5487 val = TYPE_STUB_DECL (BINDING_TYPE (binding));
5488 /* Don't return non-types if we really prefer types. */
52c11ef6 5489 else if (val && LOOKUP_TYPES_ONLY (flags) && TREE_CODE (val) != TYPE_DECL
c592d5d2
ML
5490 && (TREE_CODE (val) != TEMPLATE_DECL
5491 || !DECL_CLASS_TEMPLATE_P (val)))
2c73f9f5 5492 val = NULL_TREE;
1c35f5b6 5493
2c73f9f5
ML
5494 return val;
5495}
5496
2c169bab
JM
5497/* Unscoped lookup of a global: iterate over current namespaces,
5498 considering using-directives. If SPACESP is non-NULL, store a list
5499 of the namespaces we've considered in it. */
ea9635c7 5500
2c169bab
JM
5501tree
5502unqualified_namespace_lookup (name, flags, spacesp)
ea9635c7 5503 tree name;
52c11ef6 5504 int flags;
2c169bab 5505 tree *spacesp;
ea9635c7 5506{
87e3dbc9 5507 tree b = make_node (CPLUS_BINDING);
ea9635c7
ML
5508 tree initial = current_decl_namespace();
5509 tree scope = initial;
5510 tree siter;
5511 struct binding_level *level;
5512 tree val = NULL_TREE;
5513
2c169bab
JM
5514 if (spacesp)
5515 *spacesp = NULL_TREE;
5516
5517 for (; !val; scope = CP_DECL_CONTEXT (scope))
ea9635c7 5518 {
2c169bab 5519 if (spacesp)
e1b3e07d 5520 *spacesp = tree_cons (scope, NULL_TREE, *spacesp);
ea9635c7
ML
5521 val = binding_for_name (name, scope);
5522
5523 /* Initialize binding for this context. */
5524 BINDING_VALUE (b) = BINDING_VALUE (val);
5525 BINDING_TYPE (b) = BINDING_TYPE (val);
5526
5527 /* Add all _DECLs seen through local using-directives. */
68642fb6 5528 for (level = current_binding_level;
ea9635c7
ML
5529 !level->namespace_p;
5530 level = level->level_chain)
52c11ef6 5531 if (!lookup_using_namespace (name, b, level->using_directives,
2c169bab 5532 scope, flags, spacesp))
ea9635c7 5533 /* Give up because of error. */
5b163de4 5534 return error_mark_node;
ea9635c7
ML
5535
5536 /* Add all _DECLs seen through global using-directives. */
5537 /* XXX local and global using lists should work equally. */
5538 siter = initial;
5539 while (1)
5540 {
68642fb6 5541 if (!lookup_using_namespace (name, b, DECL_NAMESPACE_USING (siter),
2c169bab 5542 scope, flags, spacesp))
ea9635c7 5543 /* Give up because of error. */
5b163de4 5544 return error_mark_node;
ea9635c7
ML
5545 if (siter == scope) break;
5546 siter = CP_DECL_CONTEXT (siter);
5547 }
5548
52c11ef6 5549 val = select_decl (b, flags);
ea9635c7
ML
5550 if (scope == global_namespace)
5551 break;
ea9635c7
ML
5552 }
5553 return val;
5554}
5555
52c11ef6
JM
5556/* Combine prefer_type and namespaces_only into flags. */
5557
5558static int
5559lookup_flags (prefer_type, namespaces_only)
5560 int prefer_type, namespaces_only;
5561{
5562 if (namespaces_only)
5563 return LOOKUP_PREFER_NAMESPACES;
5564 if (prefer_type > 1)
5565 return LOOKUP_PREFER_TYPES;
5566 if (prefer_type > 0)
5567 return LOOKUP_PREFER_BOTH;
5568 return 0;
5569}
5570
5571/* Given a lookup that returned VAL, use FLAGS to decide if we want to
5572 ignore it or not. Subroutine of lookup_name_real. */
5573
5574static tree
5575qualify_lookup (val, flags)
5576 tree val;
5577 int flags;
5578{
5579 if (val == NULL_TREE)
5580 return val;
6b945830
JM
5581 if ((flags & LOOKUP_PREFER_NAMESPACES) && TREE_CODE (val) == NAMESPACE_DECL)
5582 return val;
5583 if ((flags & LOOKUP_PREFER_TYPES)
5584 && (TREE_CODE (val) == TYPE_DECL
5585 || ((flags & LOOKUP_TEMPLATES_EXPECTED)
5586 && DECL_CLASS_TEMPLATE_P (val))))
5587 return val;
5588 if (flags & (LOOKUP_PREFER_NAMESPACES | LOOKUP_PREFER_TYPES))
52c11ef6
JM
5589 return NULL_TREE;
5590 return val;
5591}
5592
235f734d
MM
5593/* Any other BINDING overrides an implicit TYPENAME. Warn about
5594 that. */
5595
5596static void
5597warn_about_implicit_typename_lookup (typename, binding)
5598 tree typename;
5599 tree binding;
5600{
5601 tree subtype = TREE_TYPE (TREE_TYPE (typename));
5602 tree name = DECL_NAME (typename);
5603
5604 if (! (TREE_CODE (binding) == TEMPLATE_DECL
5605 && CLASSTYPE_TEMPLATE_INFO (subtype)
5606 && CLASSTYPE_TI_TEMPLATE (subtype) == binding)
5607 && ! (TREE_CODE (binding) == TYPE_DECL
5608 && same_type_p (TREE_TYPE (binding), subtype)))
5609 {
68642fb6 5610 cp_warning ("lookup of `%D' finds `%#D'",
235f734d
MM
5611 name, binding);
5612 cp_warning (" instead of `%D' from dependent base class",
5613 typename);
5614 cp_warning (" (use `typename %T::%D' if that's what you meant)",
5615 constructor_name (current_class_type), name);
5616 }
5617}
5618
8d08fdba
MS
5619/* Look up NAME in the current binding level and its superiors in the
5620 namespace of variables, functions and typedefs. Return a ..._DECL
5621 node of some kind representing its definition if there is only one
5622 such declaration, or return a TREE_LIST with all the overloaded
5623 definitions if there are many, or return 0 if it is undefined.
5624
2c73f9f5
ML
5625 If PREFER_TYPE is > 0, we prefer TYPE_DECLs or namespaces.
5626 If PREFER_TYPE is > 1, we reject non-type decls (e.g. namespaces).
a28e3c7f 5627 If PREFER_TYPE is -2, we're being called from yylex(). (UGLY)
68642fb6 5628 Otherwise we prefer non-TYPE_DECLs.
f84b4be9
JM
5629
5630 If NONCLASS is non-zero, we don't look for the NAME in class scope,
5631 using IDENTIFIER_CLASS_VALUE. */
8d08fdba 5632
824b9a4c 5633static tree
3e3f722c 5634lookup_name_real (name, prefer_type, nonclass, namespaces_only)
8d08fdba 5635 tree name;
3e3f722c 5636 int prefer_type, nonclass, namespaces_only;
8d08fdba 5637{
235f734d
MM
5638 tree t;
5639 tree val = NULL_TREE;
a28e3c7f 5640 int yylex = 0;
e1cd6e56 5641 tree from_obj = NULL_TREE;
52c11ef6 5642 int flags;
235f734d 5643 int val_is_implicit_typename = 0;
8d08fdba 5644
3e3f722c
ML
5645 /* Hack: copy flag set by parser, if set. */
5646 if (only_namespace_names)
5647 namespaces_only = 1;
52c11ef6 5648
a28e3c7f
MS
5649 if (prefer_type == -2)
5650 {
5651 extern int looking_for_typename;
fc378698 5652 tree type = NULL_TREE;
a28e3c7f
MS
5653
5654 yylex = 1;
5655 prefer_type = looking_for_typename;
e1cd6e56 5656
52c11ef6 5657 flags = lookup_flags (prefer_type, namespaces_only);
52c11ef6
JM
5658 /* If the next thing is '<', class templates are types. */
5659 if (looking_for_template)
5660 flags |= LOOKUP_TEMPLATES_EXPECTED;
5661
653cc74a
JM
5662 /* std:: becomes :: for now. */
5663 if (got_scope == std_node)
5664 got_scope = void_type_node;
5665
e1cd6e56
MS
5666 if (got_scope)
5667 type = got_scope;
dff6b454 5668 else if (got_object != error_mark_node)
e1cd6e56 5669 type = got_object;
68642fb6 5670
e1cd6e56 5671 if (type)
a28e3c7f 5672 {
e1cd6e56 5673 if (type == error_mark_node)
f376e137 5674 return error_mark_node;
a80e4195
MS
5675 if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
5676 type = TREE_TYPE (type);
5566b478 5677
2b9dc906
JM
5678 if (TYPE_P (type))
5679 type = complete_type (type);
5566b478 5680
a1774733 5681 if (TREE_CODE (type) == VOID_TYPE)
2c73f9f5
ML
5682 type = global_namespace;
5683 if (TREE_CODE (type) == NAMESPACE_DECL)
a9aedbc2 5684 {
87e3dbc9 5685 val = make_node (CPLUS_BINDING);
6ad07332 5686 flags |= LOOKUP_COMPLAIN;
52c11ef6 5687 if (!qualified_lookup_using_namespace (name, type, val, flags))
2c73f9f5 5688 return NULL_TREE;
52c11ef6 5689 val = select_decl (val, flags);
a9aedbc2 5690 }
5566b478 5691 else if (! IS_AGGR_TYPE (type)
5156628f 5692 || TREE_CODE (type) == TEMPLATE_TYPE_PARM
73b0fce8 5693 || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM
5156628f 5694 || TREE_CODE (type) == TYPENAME_TYPE)
e92cc029 5695 /* Someone else will give an error about this if needed. */
a28e3c7f 5696 val = NULL_TREE;
e1cd6e56 5697 else if (type == current_class_type)
a28e3c7f 5698 val = IDENTIFIER_CLASS_VALUE (name);
a28e3c7f 5699 else
70adf8a9
JM
5700 {
5701 val = lookup_member (type, name, 0, prefer_type);
5702 type_access_control (type, val);
5703 }
a28e3c7f 5704 }
e1cd6e56
MS
5705 else
5706 val = NULL_TREE;
5707
594740f3 5708 if (got_scope)
e1cd6e56 5709 goto done;
594740f3 5710 else if (got_object && val)
e1cd6e56 5711 from_obj = val;
a28e3c7f 5712 }
52c11ef6 5713 else
5b163de4
JM
5714 {
5715 flags = lookup_flags (prefer_type, namespaces_only);
5716 /* If we're not parsing, we need to complain. */
5717 flags |= LOOKUP_COMPLAIN;
5718 }
e76a2646 5719
d8f8dca1 5720 /* First, look in non-namespace scopes. */
6f1b4c42
JM
5721
5722 if (current_class_type == NULL_TREE)
5723 nonclass = 1;
5724
235f734d 5725 for (t = IDENTIFIER_BINDING (name); t; t = TREE_CHAIN (t))
d8f8dca1 5726 {
235f734d
MM
5727 tree binding;
5728
5729 if (!LOCAL_BINDING_P (t) && nonclass)
d8f8dca1
MM
5730 /* We're not looking for class-scoped bindings, so keep going. */
5731 continue;
68642fb6 5732
d8f8dca1 5733 /* If this is the kind of thing we're looking for, we're done. */
235f734d
MM
5734 if (qualify_lookup (BINDING_VALUE (t), flags))
5735 binding = BINDING_VALUE (t);
68642fb6 5736 else if ((flags & LOOKUP_PREFER_TYPES)
235f734d
MM
5737 && qualify_lookup (BINDING_TYPE (t), flags))
5738 binding = BINDING_TYPE (t);
5739 else
5740 binding = NULL_TREE;
5741
70adf8a9
JM
5742 /* Handle access control on types from enclosing or base classes. */
5743 if (binding && ! yylex
5744 && BINDING_LEVEL (t) && BINDING_LEVEL (t)->parm_flag == 2)
5745 type_access_control (BINDING_LEVEL (t)->this_class, binding);
5746
235f734d 5747 if (binding
83233dca 5748 && (!val || !IMPLICIT_TYPENAME_TYPE_DECL_P (binding)))
d8f8dca1 5749 {
235f734d
MM
5750 if (val_is_implicit_typename && !yylex)
5751 warn_about_implicit_typename_lookup (val, binding);
5752 val = binding;
68642fb6 5753 val_is_implicit_typename
83233dca 5754 = IMPLICIT_TYPENAME_TYPE_DECL_P (val);
235f734d
MM
5755 if (!val_is_implicit_typename)
5756 break;
d8f8dca1
MM
5757 }
5758 }
f181d4ae 5759
235f734d
MM
5760 /* Now lookup in namespace scopes. */
5761 if (!val || val_is_implicit_typename)
e76a2646 5762 {
2c169bab 5763 t = unqualified_namespace_lookup (name, flags, 0);
235f734d 5764 if (t)
c1def683 5765 {
235f734d
MM
5766 if (val_is_implicit_typename && !yylex)
5767 warn_about_implicit_typename_lookup (val, t);
5768 val = t;
c1def683
JM
5769 }
5770 }
5771
a28e3c7f 5772 done:
8d08fdba
MS
5773 if (val)
5774 {
c91a56d2 5775 /* This should only warn about types used in qualified-ids. */
e1cd6e56 5776 if (from_obj && from_obj != val)
5566b478 5777 {
c91a56d2
MS
5778 if (looking_for_typename && TREE_CODE (from_obj) == TYPE_DECL
5779 && TREE_CODE (val) == TYPE_DECL
5780 && TREE_TYPE (from_obj) != TREE_TYPE (val))
5781 {
8251199e 5782 cp_pedwarn ("lookup of `%D' in the scope of `%#T' (`%#T')",
c91a56d2 5783 name, got_object, TREE_TYPE (from_obj));
8251199e 5784 cp_pedwarn (" does not match lookup in the current scope (`%#T')",
c91a56d2
MS
5785 TREE_TYPE (val));
5786 }
594740f3 5787
b8b1a3c1
JM
5788 /* We don't change val to from_obj if got_object depends on
5789 template parms because that breaks implicit typename for
5790 destructor calls. */
5791 if (! uses_template_parms (got_object))
53fdbb3b 5792 val = from_obj;
5566b478 5793 }
e1cd6e56 5794
0c64a9ca
JM
5795 /* If we have a single function from a using decl, pull it out. */
5796 if (TREE_CODE (val) == OVERLOAD && ! really_overloaded_fn (val))
5797 val = OVL_FUNCTION (val);
8d08fdba 5798 }
e1cd6e56
MS
5799 else if (from_obj)
5800 val = from_obj;
8d08fdba
MS
5801
5802 return val;
5803}
5804
700f8a87
MS
5805tree
5806lookup_name_nonclass (name)
5807 tree name;
5808{
3e3f722c 5809 return lookup_name_real (name, 0, 1, 0);
700f8a87
MS
5810}
5811
2c73f9f5
ML
5812tree
5813lookup_function_nonclass (name, args)
5814 tree name;
5815 tree args;
5816{
5817 return lookup_arg_dependent (name, lookup_name_nonclass (name), args);
5818}
5819
3e3f722c
ML
5820tree
5821lookup_name_namespace_only (name)
5822 tree name;
5823{
5824 /* type-or-namespace, nonclass, namespace_only */
5825 return lookup_name_real (name, 1, 1, 1);
5826}
5827
700f8a87
MS
5828tree
5829lookup_name (name, prefer_type)
5830 tree name;
5831 int prefer_type;
5832{
3e3f722c 5833 return lookup_name_real (name, prefer_type, 0, 0);
700f8a87
MS
5834}
5835
a7d2d407
MM
5836/* Similar to `lookup_name' but look only in the innermost non-class
5837 binding level. */
8d08fdba
MS
5838
5839tree
5840lookup_name_current_level (name)
5841 tree name;
5842{
a7d2d407
MM
5843 struct binding_level *b;
5844 tree t = NULL_TREE;
8d08fdba 5845
a7d2d407
MM
5846 b = current_binding_level;
5847 while (b->parm_flag == 2)
5848 b = b->level_chain;
5849
5850 if (b->namespace_p)
8d08fdba 5851 {
5fdaba89 5852 t = IDENTIFIER_NAMESPACE_VALUE (name);
8d08fdba
MS
5853
5854 /* extern "C" function() */
5855 if (t != NULL_TREE && TREE_CODE (t) == TREE_LIST)
5856 t = TREE_VALUE (t);
5857 }
68642fb6 5858 else if (IDENTIFIER_BINDING (name)
f181d4ae 5859 && LOCAL_BINDING_P (IDENTIFIER_BINDING (name)))
8d08fdba 5860 {
a4443a08
MS
5861 while (1)
5862 {
f181d4ae
MM
5863 if (BINDING_LEVEL (IDENTIFIER_BINDING (name)) == b)
5864 return IDENTIFIER_VALUE (name);
68642fb6 5865
9ed182dc
JM
5866 if (b->keep == 2)
5867 b = b->level_chain;
5868 else
5869 break;
5870 }
5871 }
5872
5873 return t;
5874}
5875
5876/* Like lookup_name_current_level, but for types. */
5877
5878tree
5879lookup_type_current_level (name)
5880 tree name;
5881{
5882 register tree t = NULL_TREE;
5883
5884 my_friendly_assert (! current_binding_level->namespace_p, 980716);
5885
5886 if (REAL_IDENTIFIER_TYPE_VALUE (name) != NULL_TREE
5887 && REAL_IDENTIFIER_TYPE_VALUE (name) != global_type_node)
5888 {
5889 struct binding_level *b = current_binding_level;
5890 while (1)
5891 {
5892 if (purpose_member (name, b->type_shadowed))
5893 return REAL_IDENTIFIER_TYPE_VALUE (name);
a4443a08
MS
5894 if (b->keep == 2)
5895 b = b->level_chain;
5896 else
5897 break;
5898 }
8d08fdba
MS
5899 }
5900
5901 return t;
5902}
3e3f722c
ML
5903
5904void
5905begin_only_namespace_names ()
5906{
5907 only_namespace_names = 1;
5908}
5909
5910void
5911end_only_namespace_names ()
5912{
5913 only_namespace_names = 0;
5914}
8d08fdba
MS
5915\f
5916/* Arrange for the user to get a source line number, even when the
5917 compiler is going down in flames, so that she at least has a
5918 chance of working around problems in the compiler. We used to
5919 call error(), but that let the segmentation fault continue
5920 through; now, it's much more passive by asking them to send the
5921 maintainers mail about the problem. */
5922
5923static void
5924signal_catch (sig)
7dee3f36 5925 int sig ATTRIBUTE_UNUSED;
8d08fdba
MS
5926{
5927 signal (SIGSEGV, SIG_DFL);
5928#ifdef SIGIOT
5929 signal (SIGIOT, SIG_DFL);
5930#endif
5931#ifdef SIGILL
5932 signal (SIGILL, SIG_DFL);
5933#endif
5934#ifdef SIGABRT
5935 signal (SIGABRT, SIG_DFL);
5936#endif
5937#ifdef SIGBUS
5938 signal (SIGBUS, SIG_DFL);
5939#endif
5940 my_friendly_abort (0);
5941}
5942
8d08fdba
MS
5943/* Push the declarations of builtin types into the namespace.
5944 RID_INDEX, if < RID_MAX is the index of the builtin type
5945 in the array RID_POINTERS. NAME is the name used when looking
5946 up the builtin type. TYPE is the _TYPE node for the builtin type. */
5947
5948static void
5949record_builtin_type (rid_index, name, type)
5950 enum rid rid_index;
d8e178a0 5951 const char *name;
8d08fdba
MS
5952 tree type;
5953{
5954 tree rname = NULL_TREE, tname = NULL_TREE;
a703fb38 5955 tree tdecl = NULL_TREE;
8d08fdba
MS
5956
5957 if ((int) rid_index < (int) RID_MAX)
5958 rname = ridpointers[(int) rid_index];
5959 if (name)
5960 tname = get_identifier (name);
5961
5962 TYPE_BUILT_IN (type) = 1;
68642fb6 5963
8d08fdba
MS
5964 if (tname)
5965 {
8d08fdba 5966 tdecl = pushdecl (build_decl (TYPE_DECL, tname, type));
8d08fdba
MS
5967 set_identifier_type_value (tname, NULL_TREE);
5968 if ((int) rid_index < (int) RID_MAX)
2c73f9f5
ML
5969 /* Built-in types live in the global namespace. */
5970 SET_IDENTIFIER_GLOBAL_VALUE (tname, tdecl);
8d08fdba
MS
5971 }
5972 if (rname != NULL_TREE)
5973 {
5974 if (tname != NULL_TREE)
5975 {
5976 set_identifier_type_value (rname, NULL_TREE);
2c73f9f5 5977 SET_IDENTIFIER_GLOBAL_VALUE (rname, tdecl);
8d08fdba
MS
5978 }
5979 else
5980 {
8d08fdba 5981 tdecl = pushdecl (build_decl (TYPE_DECL, rname, type));
8d08fdba
MS
5982 set_identifier_type_value (rname, NULL_TREE);
5983 }
5984 }
8d08fdba
MS
5985}
5986
eff71ab0
PB
5987/* Record one of the standard Java types.
5988 * Declare it as having the given NAME.
5989 * If SIZE > 0, it is the size of one of the integral types;
5990 * otherwise it is the negative of the size of one of the other types. */
5991
5992static tree
5993record_builtin_java_type (name, size)
d8e178a0 5994 const char *name;
eff71ab0
PB
5995 int size;
5996{
5997 tree type, decl;
5998 if (size > 0)
5999 type = make_signed_type (size);
6000 else if (size > -32)
6001 { /* "__java_char" or ""__java_boolean". */
6002 type = make_unsigned_type (-size);
6003 /*if (size == -1) TREE_SET_CODE (type, BOOLEAN_TYPE);*/
6004 }
6005 else
6006 { /* "__java_float" or ""__java_double". */
6007 type = make_node (REAL_TYPE);
6008 TYPE_PRECISION (type) = - size;
6009 layout_type (type);
6010 }
6011 record_builtin_type (RID_MAX, name, type);
6012 decl = TYPE_NAME (type);
e229f2cd
PB
6013
6014 /* Suppress generate debug symbol entries for these types,
6015 since for normal C++ they are just clutter.
6016 However, push_lang_context undoes this if extern "Java" is seen. */
eff71ab0 6017 DECL_IGNORED_P (decl) = 1;
e229f2cd 6018
eff71ab0
PB
6019 TYPE_FOR_JAVA (type) = 1;
6020 return type;
6021}
6022
036407f7
ML
6023/* Push a type into the namespace so that the back-ends ignore it. */
6024
6025static void
6026record_unknown_type (type, name)
6027 tree type;
d8e178a0 6028 const char *name;
036407f7
ML
6029{
6030 tree decl = pushdecl (build_decl (TYPE_DECL, get_identifier (name), type));
6031 /* Make sure the "unknown type" typedecl gets ignored for debug info. */
6032 DECL_IGNORED_P (decl) = 1;
6033 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
6034 TYPE_SIZE (type) = TYPE_SIZE (void_type_node);
6035 TYPE_ALIGN (type) = 1;
6036 TYPE_MODE (type) = TYPE_MODE (void_type_node);
68642fb6 6037}
036407f7 6038
d43829f9
MM
6039/* An string for which we should create an IDENTIFIER_NODE at
6040 startup. */
6041
6042typedef struct predefined_identifier
6043{
6044 /* The name of the identifier. */
6045 const char *name;
6046 /* The place where the IDENTIFIER_NODE should be stored. */
6047 tree *node;
6048} predefined_identifier;
6049
6050/* Create all the predefined identifiers. */
6051
6052static void
6053initialize_predefined_identifiers ()
6054{
6055 struct predefined_identifier *pid;
6056
6057 /* A table of identifiers to create at startup. */
6058 static predefined_identifier predefined_identifiers[] = {
6059 { "C++", &lang_name_cplusplus },
6060 { "C", &lang_name_c },
6061 { "Java", &lang_name_java },
6062 { CTOR_NAME, &ctor_identifier },
6063 { "__base_ctor", &base_ctor_identifier },
9eb71d8c 6064 { "__comp_ctor", &complete_ctor_identifier },
d43829f9 6065 { DTOR_NAME, &dtor_identifier },
db9b2174 6066 { "__comp_dtor", &complete_dtor_identifier },
d43829f9
MM
6067 { "__base_dtor", &base_dtor_identifier },
6068 { "__deleting_dtor", &deleting_dtor_identifier },
6069 { VTABLE_DELTA2_NAME, &delta2_identifier },
6070 { VTABLE_DELTA_NAME, &delta_identifier },
6071 { IN_CHARGE_NAME, &in_charge_identifier },
6072 { VTABLE_INDEX_NAME, &index_identifier },
6073 { "nelts", &nelts_identifier },
6074 { THIS_NAME, &this_identifier },
6075 { VTABLE_PFN_NAME, &pfn_identifier },
6076 { "__pfn_or_delta2", &pfn_or_delta2_identifier },
6077 { "_vptr", &vptr_identifier },
6078 { NULL, NULL }
6079 };
6080
6081 for (pid = predefined_identifiers; pid->name; ++pid)
6082 *pid->node = get_identifier (pid->name);
6083}
6084
8d08fdba
MS
6085/* Create the predefined scalar types of C,
6086 and some nodes representing standard constants (0, 1, (void *)0).
6087 Initialize the global binding level.
6088 Make definitions for built-in primitive functions. */
6089
6090void
6091init_decl_processing ()
6092{
8d08fdba 6093 tree fields[20];
8d08fdba 6094 int wchar_type_size;
8d08fdba
MS
6095 tree array_domain_type;
6096
5bb2a292
MM
6097 /* Check to see that the user did not specify an invalid combination
6098 of command-line options. */
6099 if (flag_new_abi && !flag_vtable_thunks)
6100 fatal ("the new ABI requires vtable thunks");
6101
d43829f9
MM
6102 /* Create all the identifiers we need. */
6103 initialize_predefined_identifiers ();
8d08fdba 6104
99dccabc
MM
6105 /* Let the back-end now how to save and restore language-specific
6106 per-function globals. */
a8f73d4b
MM
6107 init_lang_status = &push_cp_function_context;
6108 free_lang_status = &pop_cp_function_context;
b4b8bee7 6109 mark_lang_status = &mark_cp_function_context;
99dccabc 6110
fc6af6e3
RH
6111 cp_parse_init ();
6112 init_decl2 ();
9cd64686 6113 init_pt ();
fc6af6e3 6114
9cd64686
MM
6115 /* Create the global variables. */
6116 push_to_top_level ();
8012c983 6117
2c73f9f5 6118 /* Enter the global namespace. */
30394414 6119 my_friendly_assert (global_namespace == NULL_TREE, 375);
30394414
JM
6120 push_namespace (get_identifier ("::"));
6121 global_namespace = current_namespace;
6122 current_lang_name = NULL_TREE;
6123
bccd95ae 6124 /* Adjust various flags based on command-line settings. */
e1cd6e56 6125 if (flag_strict_prototype == 2)
830fcda8 6126 flag_strict_prototype = pedantic;
2642b9bf
JM
6127 if (! flag_permissive && ! pedantic)
6128 flag_pedantic_errors = 1;
bccd95ae
MM
6129 if (!flag_no_inline)
6130 flag_inline_trees = 1;
830fcda8
JM
6131
6132 strict_prototypes_lang_c = flag_strict_prototype;
8926095f 6133
8d08fdba
MS
6134 /* Initially, C. */
6135 current_lang_name = lang_name_c;
6136
6137 current_function_decl = NULL_TREE;
8d08fdba
MS
6138 current_binding_level = NULL_BINDING_LEVEL;
6139 free_binding_level = NULL_BINDING_LEVEL;
6140
6141 /* Because most segmentation signals can be traced back into user
6142 code, catch them and at least give the user a chance of working
e92cc029 6143 around compiler bugs. */
8d08fdba
MS
6144 signal (SIGSEGV, signal_catch);
6145
6146 /* We will also catch aborts in the back-end through signal_catch and
6147 give the user a chance to see where the error might be, and to defeat
6148 aborts in the back-end when there have been errors previously in their
e92cc029 6149 code. */
8d08fdba
MS
6150#ifdef SIGIOT
6151 signal (SIGIOT, signal_catch);
6152#endif
6153#ifdef SIGILL
6154 signal (SIGILL, signal_catch);
6155#endif
6156#ifdef SIGABRT
6157 signal (SIGABRT, signal_catch);
6158#endif
6159#ifdef SIGBUS
6160 signal (SIGBUS, signal_catch);
6161#endif
6162
81b3411c
BS
6163 build_common_tree_nodes (flag_signed_char);
6164
8d08fdba
MS
6165 error_mark_list = build_tree_list (error_mark_node, error_mark_node);
6166 TREE_TYPE (error_mark_list) = error_mark_node;
6167
a28e3c7f
MS
6168 /* Make the binding_level structure for global names. */
6169 pushlevel (0);
8d08fdba 6170 global_binding_level = current_binding_level;
2c73f9f5
ML
6171 /* The global level is the namespace level of ::. */
6172 NAMESPACE_LEVEL (global_namespace) = global_binding_level;
6173 declare_namespace_level ();
8d08fdba 6174
8d08fdba 6175 /* Define `int' and `char' first so that dbx will output them first. */
8d08fdba 6176 record_builtin_type (RID_INT, NULL_PTR, integer_type_node);
8d08fdba
MS
6177 record_builtin_type (RID_CHAR, "char", char_type_node);
6178
45075bf3
NS
6179 /* `signed' is the same as `int' */
6180 record_builtin_type (RID_SIGNED, NULL_PTR, integer_type_node);
8d08fdba 6181 record_builtin_type (RID_LONG, "long int", long_integer_type_node);
8d08fdba 6182 record_builtin_type (RID_UNSIGNED, "unsigned int", unsigned_type_node);
8d08fdba
MS
6183 record_builtin_type (RID_MAX, "long unsigned int", long_unsigned_type_node);
6184 record_builtin_type (RID_MAX, "unsigned long", long_unsigned_type_node);
8d08fdba 6185 record_builtin_type (RID_MAX, "long long int", long_long_integer_type_node);
8d08fdba
MS
6186 record_builtin_type (RID_MAX, "long long unsigned int",
6187 long_long_unsigned_type_node);
6188 record_builtin_type (RID_MAX, "long long unsigned",
6189 long_long_unsigned_type_node);
5156628f 6190 record_builtin_type (RID_SHORT, "short int", short_integer_type_node);
5156628f
MS
6191 record_builtin_type (RID_MAX, "short unsigned int", short_unsigned_type_node);
6192 record_builtin_type (RID_MAX, "unsigned short", short_unsigned_type_node);
6193
8d08fdba
MS
6194 ptrdiff_type_node
6195 = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (PTRDIFF_TYPE)));
6196
8d08fdba 6197 /* Define both `signed char' and `unsigned char'. */
8d08fdba 6198 record_builtin_type (RID_MAX, "signed char", signed_char_type_node);
8d08fdba
MS
6199 record_builtin_type (RID_MAX, "unsigned char", unsigned_char_type_node);
6200
81b3411c
BS
6201 /* `unsigned long' is the standard type for sizeof.
6202 Note that stddef.h uses `unsigned long',
6203 and this must agree, even if long and int are the same size. */
6204 set_sizetype
6205 (TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (SIZE_TYPE))));
6206
835f9b4d
GRK
6207 /* Create the widest literal types. */
6208 widest_integer_literal_type_node = make_signed_type (HOST_BITS_PER_WIDE_INT * 2);
68642fb6 6209 pushdecl (build_decl (TYPE_DECL, NULL_TREE,
835f9b4d
GRK
6210 widest_integer_literal_type_node));
6211
6212 widest_unsigned_literal_type_node = make_unsigned_type (HOST_BITS_PER_WIDE_INT * 2);
68642fb6 6213 pushdecl (build_decl (TYPE_DECL, NULL_TREE,
835f9b4d
GRK
6214 widest_unsigned_literal_type_node));
6215
8d08fdba 6216 /* These are types that type_for_size and type_for_mode use. */
8d08fdba 6217 pushdecl (build_decl (TYPE_DECL, NULL_TREE, intQI_type_node));
8d08fdba 6218 pushdecl (build_decl (TYPE_DECL, NULL_TREE, intHI_type_node));
8d08fdba 6219 pushdecl (build_decl (TYPE_DECL, NULL_TREE, intSI_type_node));
8d08fdba 6220 pushdecl (build_decl (TYPE_DECL, NULL_TREE, intDI_type_node));
946dc1c8 6221#if HOST_BITS_PER_WIDE_INT >= 64
5ebcdddb 6222 pushdecl (build_decl (TYPE_DECL, get_identifier ("__int128_t"), intTI_type_node));
946dc1c8 6223#endif
8d08fdba 6224 pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intQI_type_node));
8d08fdba 6225 pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intHI_type_node));
8d08fdba 6226 pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intSI_type_node));
8d08fdba 6227 pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intDI_type_node));
946dc1c8 6228#if HOST_BITS_PER_WIDE_INT >= 64
5ebcdddb 6229 pushdecl (build_decl (TYPE_DECL, get_identifier ("__uint128_t"), unsigned_intTI_type_node));
946dc1c8 6230#endif
8d08fdba 6231
81b3411c 6232 build_common_tree_nodes_2 (flag_short_double);
37c46b43 6233
eff71ab0
PB
6234 java_byte_type_node = record_builtin_java_type ("__java_byte", 8);
6235 java_short_type_node = record_builtin_java_type ("__java_short", 16);
6236 java_int_type_node = record_builtin_java_type ("__java_int", 32);
6237 java_long_type_node = record_builtin_java_type ("__java_long", 64);
6238 java_float_type_node = record_builtin_java_type ("__java_float", -32);
6239 java_double_type_node = record_builtin_java_type ("__java_double", -64);
6240 java_char_type_node = record_builtin_java_type ("__java_char", -16);
6241 java_boolean_type_node = record_builtin_java_type ("__java_boolean", -1);
6242
8d08fdba
MS
6243 integer_two_node = build_int_2 (2, 0);
6244 TREE_TYPE (integer_two_node) = integer_type_node;
6245 integer_three_node = build_int_2 (3, 0);
6246 TREE_TYPE (integer_three_node) = integer_type_node;
8d08fdba 6247
255512c1
JM
6248 boolean_type_node = make_unsigned_type (BOOL_TYPE_SIZE);
6249 TREE_SET_CODE (boolean_type_node, BOOLEAN_TYPE);
c1ea6a0b
BK
6250 TYPE_MAX_VALUE (boolean_type_node) = build_int_2 (1, 0);
6251 TREE_TYPE (TYPE_MAX_VALUE (boolean_type_node)) = boolean_type_node;
6252 TYPE_PRECISION (boolean_type_node) = 1;
255512c1
JM
6253 record_builtin_type (RID_BOOL, "bool", boolean_type_node);
6254 boolean_false_node = build_int_2 (0, 0);
6255 TREE_TYPE (boolean_false_node) = boolean_type_node;
6256 boolean_true_node = build_int_2 (1, 0);
6257 TREE_TYPE (boolean_true_node) = boolean_type_node;
2986ae00 6258
ff0bee63
JM
6259 signed_size_zero_node = build_int_2 (0, 0);
6260 record_builtin_type (RID_FLOAT, NULL_PTR, float_type_node);
81b3411c
BS
6261 record_builtin_type (RID_DOUBLE, NULL_PTR, double_type_node);
6262 record_builtin_type (RID_MAX, "long double", long_double_type_node);
6263
6264 pushdecl (build_decl (TYPE_DECL, get_identifier ("complex int"),
6265 complex_integer_type_node));
6266 pushdecl (build_decl (TYPE_DECL, get_identifier ("complex float"),
6267 complex_float_type_node));
6268 pushdecl (build_decl (TYPE_DECL, get_identifier ("complex double"),
6269 complex_double_type_node));
6270 pushdecl (build_decl (TYPE_DECL, get_identifier ("complex long double"),
6271 complex_long_double_type_node));
8d08fdba 6272
e92cc029
MS
6273 TREE_TYPE (signed_size_zero_node) = make_signed_type (TYPE_PRECISION (sizetype));
6274
8d08fdba 6275 record_builtin_type (RID_VOID, NULL_PTR, void_type_node);
8d08fdba
MS
6276 void_list_node = build_tree_list (NULL_TREE, void_type_node);
6277 TREE_PARMLIST (void_list_node) = 1;
6278
8d08fdba
MS
6279 /* Used for expressions that do nothing, but are not errors. */
6280 void_zero_node = build_int_2 (0, 0);
6281 TREE_TYPE (void_zero_node) = void_type_node;
6282
6283 string_type_node = build_pointer_type (char_type_node);
beb53fb8 6284 const_string_type_node
68642fb6 6285 = build_pointer_type (build_qualified_type (char_type_node,
91063b51 6286 TYPE_QUAL_CONST));
4cc1d462 6287 empty_except_spec = build_tree_list (NULL_TREE, NULL_TREE);
6b5fbb55 6288#if 0
8d08fdba 6289 record_builtin_type (RID_MAX, NULL_PTR, string_type_node);
6b5fbb55 6290#endif
8d08fdba
MS
6291
6292 /* Make a type to be the domain of a few array types
6293 whose domains don't really matter.
2ce07e2d 6294 200 is small enough that it always fits in size_t. */
8d08fdba
MS
6295 array_domain_type = build_index_type (build_int_2 (200, 0));
6296
2c73f9f5 6297 /* Make a type for arrays of characters.
8d08fdba
MS
6298 With luck nothing will ever really depend on the length of this
6299 array type. */
6300 char_array_type_node
6301 = build_array_type (char_type_node, array_domain_type);
6302 /* Likewise for arrays of ints. */
6303 int_array_type_node
6304 = build_array_type (integer_type_node, array_domain_type);
6305
c7e266a6
MM
6306 if (flag_new_abi)
6307 delta_type_node = ptrdiff_type_node;
6308 else if (flag_huge_objects)
7f4edbcb
BS
6309 delta_type_node = long_integer_type_node;
6310 else
6311 delta_type_node = short_integer_type_node;
6312
c7e266a6
MM
6313 if (flag_new_abi)
6314 vtable_index_type = ptrdiff_type_node;
6315 else
6316 vtable_index_type = delta_type_node;
6317
8d08fdba
MS
6318 default_function_type
6319 = build_function_type (integer_type_node, NULL_TREE);
8d08fdba
MS
6320
6321 ptr_type_node = build_pointer_type (void_type_node);
beb53fb8 6322 const_ptr_type_node
91063b51 6323 = build_pointer_type (build_qualified_type (void_type_node,
7f4edbcb
BS
6324 TYPE_QUAL_CONST));
6325 c_common_nodes_and_builtins (1, flag_no_builtin, flag_no_nonansi_builtin);
356955cf 6326 lang_type_promotes_to = convert_type_from_ellipsis;
7f4edbcb 6327
824b9a4c 6328 void_ftype_ptr
4cc1d462 6329 = build_exception_variant (void_ftype_ptr, empty_except_spec);
8d08fdba 6330
8d08fdba
MS
6331 /* C++ extensions */
6332
6333 unknown_type_node = make_node (UNKNOWN_TYPE);
036407f7
ML
6334 record_unknown_type (unknown_type_node, "unknown type");
6335
8d08fdba
MS
6336 /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node. */
6337 TREE_TYPE (unknown_type_node) = unknown_type_node;
a6967cc0 6338
03d0f4af 6339 TREE_TYPE (null_node) = type_for_size (POINTER_SIZE, 0);
a6967cc0
JM
6340
6341 /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
6342 result. */
8d08fdba
MS
6343 TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
6344 TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
6345
e92cc029 6346 /* This is special for C++ so functions can be overloaded. */
5096c664
JM
6347 wchar_type_node = get_identifier (flag_short_wchar
6348 ? "short unsigned int"
6349 : WCHAR_TYPE);
6350 wchar_type_node = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (wchar_type_node));
8d08fdba
MS
6351 wchar_type_size = TYPE_PRECISION (wchar_type_node);
6352 signed_wchar_type_node = make_signed_type (wchar_type_size);
6353 unsigned_wchar_type_node = make_unsigned_type (wchar_type_size);
6354 wchar_type_node
6355 = TREE_UNSIGNED (wchar_type_node)
6356 ? unsigned_wchar_type_node
6357 : signed_wchar_type_node;
6358 record_builtin_type (RID_WCHAR, "__wchar_t", wchar_type_node);
6359
f376e137
MS
6360 /* Artificial declaration of wchar_t -- can be bashed */
6361 wchar_decl_node = build_decl (TYPE_DECL, get_identifier ("wchar_t"),
6362 wchar_type_node);
6363 pushdecl (wchar_decl_node);
6364
8d08fdba
MS
6365 /* This is for wide string constants. */
6366 wchar_array_type_node
6367 = build_array_type (wchar_type_node, array_domain_type);
6368
8926095f 6369 if (flag_vtable_thunks)
700f8a87
MS
6370 {
6371 /* Make sure we get a unique function type, so we can give
6372 its pointer type a name. (This wins for gdb.) */
6373 tree vfunc_type = make_node (FUNCTION_TYPE);
6374 TREE_TYPE (vfunc_type) = integer_type_node;
6375 TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
6376 layout_type (vfunc_type);
6377
6378 vtable_entry_type = build_pointer_type (vfunc_type);
6379 }
8926095f 6380 else
700f8a87 6381 {
33848bb0 6382 vtable_entry_type = make_aggr_type (RECORD_TYPE);
4ce3d537
MM
6383 fields[0] = build_lang_decl (FIELD_DECL, delta_identifier,
6384 delta_type_node);
6385 fields[1] = build_lang_decl (FIELD_DECL, index_identifier,
6386 delta_type_node);
6387 fields[2] = build_lang_decl (FIELD_DECL, pfn_identifier,
6388 ptr_type_node);
700f8a87
MS
6389 finish_builtin_type (vtable_entry_type, VTBL_PTR_TYPE, fields, 2,
6390 double_type_node);
6391
6392 /* Make this part of an invisible union. */
6393 fields[3] = copy_node (fields[2]);
6394 TREE_TYPE (fields[3]) = delta_type_node;
6395 DECL_NAME (fields[3]) = delta2_identifier;
6396 DECL_MODE (fields[3]) = TYPE_MODE (delta_type_node);
6397 DECL_SIZE (fields[3]) = TYPE_SIZE (delta_type_node);
06ceef4e 6398 DECL_SIZE_UNIT (fields[3]) = TYPE_SIZE_UNIT (delta_type_node);
700f8a87
MS
6399 TREE_UNSIGNED (fields[3]) = 0;
6400 TREE_CHAIN (fields[2]) = fields[3];
91063b51
MM
6401 vtable_entry_type = build_qualified_type (vtable_entry_type,
6402 TYPE_QUAL_CONST);
700f8a87
MS
6403 }
6404 record_builtin_type (RID_MAX, VTBL_PTR_TYPE, vtable_entry_type);
8d08fdba 6405
8d08fdba 6406 vtbl_type_node
52bf7d5d 6407 = build_cplus_array_type (vtable_entry_type, NULL_TREE);
8d08fdba 6408 layout_type (vtbl_type_node);
91063b51 6409 vtbl_type_node = build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
8d08fdba 6410 record_builtin_type (RID_MAX, NULL_PTR, vtbl_type_node);
849da744
MM
6411 vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
6412 layout_type (vtbl_ptr_type_node);
6413 record_builtin_type (RID_MAX, NULL_PTR, vtbl_ptr_type_node);
8d08fdba 6414
68642fb6 6415 std_node = build_decl (NAMESPACE_DECL,
2c73f9f5 6416 get_identifier (flag_honor_std ? "fake std":"std"),
6633d636
MS
6417 void_type_node);
6418 pushdecl (std_node);
2854d3c6
NS
6419
6420 if (flag_new_abi)
6421 {
6422 push_namespace (get_identifier ("__cxxabiv1"));
6423 abi_node = current_namespace;
6424 pop_namespace ();
6425 }
6633d636 6426
2c73f9f5 6427 global_type_node = make_node (LANG_TYPE);
036407f7 6428 record_unknown_type (global_type_node, "global type");
2c73f9f5 6429
db5ae43f
MS
6430 /* Now, C++. */
6431 current_lang_name = lang_name_cplusplus;
8d08fdba 6432
ced78d8b 6433 {
2c73f9f5
ML
6434 tree bad_alloc_type_node, newtype, deltype;
6435 if (flag_honor_std)
6436 push_namespace (get_identifier ("std"));
6437 bad_alloc_type_node = xref_tag
ca107ded 6438 (class_type_node, get_identifier ("bad_alloc"), 1);
2c73f9f5
ML
6439 if (flag_honor_std)
6440 pop_namespace ();
6441 newtype = build_exception_variant
4cc1d462
NS
6442 (ptr_ftype_sizetype, add_exception_specifier (NULL_TREE, bad_alloc_type_node, -1));
6443 deltype = build_exception_variant (void_ftype_ptr, empty_except_spec);
0c11ada6
JM
6444 push_cp_library_fn (ansi_opname[(int) NEW_EXPR], newtype);
6445 push_cp_library_fn (ansi_opname[(int) VEC_NEW_EXPR], newtype);
6446 global_delete_fndecl = push_cp_library_fn (ansi_opname[(int) DELETE_EXPR],
6447 deltype);
6448 push_cp_library_fn (ansi_opname[(int) VEC_DELETE_EXPR], deltype);
ced78d8b 6449 }
8d08fdba
MS
6450
6451 abort_fndecl
0c11ada6 6452 = build_library_fn_ptr ("__pure_virtual", void_ftype);
8d08fdba 6453
8d08fdba
MS
6454 /* Perform other language dependent initializations. */
6455 init_class_processing ();
6456 init_init_processing ();
6457 init_search_processing ();
db48b831 6458 init_rtti_processing ();
8d08fdba 6459
6467930b 6460 if (flag_exceptions)
8d2733ca 6461 init_exception_processing ();
8d08fdba
MS
6462 if (flag_no_inline)
6463 {
6464 flag_inline_functions = 0;
8d08fdba 6465 }
9e9ff709 6466
7fcdf4c2 6467 if (! supports_one_only ())
72b7eeff 6468 flag_weak = 0;
8d08fdba
MS
6469
6470 /* Create the global bindings for __FUNCTION__ and __PRETTY_FUNCTION__. */
2ce07e2d 6471 make_fname_decl = cp_make_fname_decl;
8d08fdba
MS
6472 declare_function_name ();
6473
6474 /* Prepare to check format strings against argument lists. */
6475 init_function_format_info ();
e9a25f70
JL
6476
6477 /* Show we use EH for cleanups. */
6478 using_eh_for_cleanups ();
62c154ed
JM
6479
6480 print_error_function = lang_print_error_function;
501ba25a 6481 lang_get_alias_set = &c_get_alias_set;
e5dc5fb2 6482 valid_lang_attribute = cp_valid_lang_attribute;
d9cf7c82
JM
6483
6484 /* Maintain consistency. Perhaps we should just complain if they
6485 say -fwritable-strings? */
6486 if (flag_writable_strings)
6487 flag_const_strings = 0;
fc6af6e3
RH
6488
6489 /* Add GC roots for all of our global variables. */
6490 ggc_add_tree_root (c_global_trees, sizeof c_global_trees / sizeof(tree));
6491 ggc_add_tree_root (cp_global_trees, sizeof cp_global_trees / sizeof(tree));
fc6af6e3
RH
6492 ggc_add_tree_root (&integer_three_node, 1);
6493 ggc_add_tree_root (&integer_two_node, 1);
fc6af6e3 6494 ggc_add_tree_root (&signed_size_zero_node, 1);
fc6af6e3
RH
6495 ggc_add_tree_root (&size_one_node, 1);
6496 ggc_add_tree_root (&size_zero_node, 1);
fc6af6e3
RH
6497 ggc_add_root (&global_binding_level, 1, sizeof global_binding_level,
6498 mark_binding_level);
9cd64686 6499 ggc_add_root (&scope_chain, 1, sizeof scope_chain, &mark_saved_scope);
fc6af6e3
RH
6500 ggc_add_tree_root (&static_ctors, 1);
6501 ggc_add_tree_root (&static_dtors, 1);
9cd64686 6502 ggc_add_tree_root (&lastiddecl, 1);
fc6af6e3 6503
fc6af6e3
RH
6504 ggc_add_tree_root (&last_function_parm_tags, 1);
6505 ggc_add_tree_root (&current_function_return_value, 1);
6506 ggc_add_tree_root (&current_function_parms, 1);
6507 ggc_add_tree_root (&current_function_parm_tags, 1);
9cd64686 6508 ggc_add_tree_root (&last_function_parms, 1);
fc6af6e3 6509 ggc_add_tree_root (&error_mark_list, 1);
9cd64686 6510
fc6af6e3 6511 ggc_add_tree_root (&global_namespace, 1);
fc6af6e3
RH
6512 ggc_add_tree_root (&global_type_node, 1);
6513 ggc_add_tree_root (&anonymous_namespace_name, 1);
9cd64686
MM
6514
6515 ggc_add_tree_root (&got_object, 1);
6516 ggc_add_tree_root (&got_scope, 1);
6517
6518 ggc_add_tree_root (&current_lang_name, 1);
6519 ggc_add_tree_root (&static_aggregates, 1);
62c154ed
JM
6520}
6521
2ce07e2d
NS
6522/* Create the VAR_DECL for __FUNCTION__ etc. ID is the name to give the
6523 decl, NAME is the initialization string and TYPE_DEP indicates whether
6524 NAME depended on the type of the function. We make use of that to detect
6525 __PRETTY_FUNCTION__ inside a template fn. Because we build a tree for
6526 the function before emitting any of it, we don't need to treat the
6527 VAR_DECL specially. We can decide whether to emit it later, if it was
6528 used. */
6529
6530static tree
6531cp_make_fname_decl (id, name, type_dep)
6532 tree id;
6533 const char *name;
6534 int type_dep;
6535{
6536 tree decl, type, init;
6537 size_t length = strlen (name);
6538 tree domain = NULL_TREE;
6539
6540 if (!processing_template_decl)
6541 type_dep = 0;
6542 if (!type_dep)
6543 domain = build_index_type (build_int_2 (length, 0));
6544
6545 type = build_cplus_array_type
6546 (build_qualified_type (char_type_node, TYPE_QUAL_CONST),
6547 domain);
6548
6549 decl = build_lang_decl (VAR_DECL, id, type);
6550 TREE_STATIC (decl) = 1;
6551 TREE_READONLY (decl) = 1;
6552 DECL_SOURCE_LINE (decl) = 0;
6553 DECL_ARTIFICIAL (decl) = 1;
6554 DECL_IN_SYSTEM_HEADER (decl) = 1;
6555 pushdecl (decl);
6556 if (processing_template_decl)
6557 decl = push_template_decl (decl);
6558 if (type_dep)
6559 {
6560 init = build (FUNCTION_NAME, type);
6561 DECL_PRETTY_FUNCTION_P (decl) = 1;
6562 }
6563 else
6564 {
6565 init = build_string (length + 1, name);
6566 TREE_TYPE (init) = type;
6567 }
6568 DECL_INITIAL (decl) = init;
6569 cp_finish_decl (decl, init, NULL_TREE, LOOKUP_ONLYCONVERTING);
6570
6571 /* We will have to make sure we only emit this, if it is actually used. */
6572 return decl;
6573}
6574
62c154ed
JM
6575/* Function to print any language-specific context for an error message. */
6576
6577static void
6578lang_print_error_function (file)
8df4696d 6579 const char *file;
62c154ed
JM
6580{
6581 default_print_error_function (file);
6582 maybe_print_template_context ();
8d08fdba
MS
6583}
6584
0c11ada6
JM
6585/* Entry point for the benefit of c_common_nodes_and_builtins.
6586
6587 Make a definition for a builtin function named NAME and whose data type
8d08fdba 6588 is TYPE. TYPE should be a function type with argument types.
8d08fdba 6589
0c11ada6
JM
6590 CLASS and CODE tell later passes how to compile calls to this function.
6591 See tree.h for possible values.
6592
6593 If LIBNAME is nonzero, use that for DECL_ASSEMBLER_NAME,
8d08fdba
MS
6594 the name to be called if we can't opencode the function. */
6595
6596tree
0c11ada6 6597builtin_function (name, type, code, class, libname)
d8e178a0 6598 const char *name;
8d08fdba 6599 tree type;
0c11ada6
JM
6600 int code;
6601 enum built_in_class class;
6602 const char *libname;
8d08fdba 6603{
0c11ada6
JM
6604 tree decl = build_library_fn_1 (get_identifier (name), type);
6605 DECL_BUILT_IN_CLASS (decl) = class;
6606 DECL_FUNCTION_CODE (decl) = code;
12a22e76 6607
2c73f9f5 6608 my_friendly_assert (DECL_CONTEXT (decl) == NULL_TREE, 392);
2c73f9f5 6609
8d08fdba
MS
6610 /* Since `pushdecl' relies on DECL_ASSEMBLER_NAME instead of DECL_NAME,
6611 we cannot change DECL_ASSEMBLER_NAME until we have installed this
6612 function in the namespace. */
0c11ada6
JM
6613 pushdecl (decl);
6614 if (libname)
6615 DECL_ASSEMBLER_NAME (decl) = get_identifier (libname);
8d08fdba 6616 make_function_rtl (decl);
8d08fdba
MS
6617 return decl;
6618}
7f4edbcb 6619
0c11ada6
JM
6620/* Generate a FUNCTION_DECL with the typical flags for a runtime library
6621 function. Not called directly. */
6622
6623static tree
6624build_library_fn_1 (name, type)
6625 tree name;
6626 tree type;
6627{
6628 tree fn = build_lang_decl (FUNCTION_DECL, name, type);
6629 DECL_EXTERNAL (fn) = 1;
6630 TREE_PUBLIC (fn) = 1;
6631 DECL_ARTIFICIAL (fn) = 1;
6632 TREE_NOTHROW (fn) = 1;
6633 return fn;
6634}
c2a37c55 6635
0c11ada6
JM
6636/* Returns the _DECL for a library function with C linkage.
6637 We assume that such functions never throw; if this is incorrect,
6638 callers should unset TREE_NOTHROW. */
c2a37c55 6639
7f4edbcb 6640tree
0c11ada6
JM
6641build_library_fn (name, type)
6642 tree name;
6643 tree type;
6644{
6645 tree fn = build_library_fn_1 (name, type);
6646 make_function_rtl (fn);
6647 return fn;
6648}
6649
6650/* Returns the _DECL for a library function with C++ linkage. */
6651
6652tree
6653build_cp_library_fn (name, type)
6654 tree name;
6655 tree type;
6656{
6657 tree fn = build_library_fn_1 (name, type);
6658 TREE_NOTHROW (fn) = TYPE_NOTHROW_P (type);
6659 set_mangled_name_for_decl (fn);
6660 make_function_rtl (fn);
6661 return fn;
6662}
6663
6664/* Like build_library_fn, but takes a C string instead of an
6665 IDENTIFIER_NODE. */
6666
6667tree
6668build_library_fn_ptr (name, type)
7f4edbcb
BS
6669 const char *name;
6670 tree type;
7f4edbcb 6671{
0c11ada6
JM
6672 return build_library_fn (get_identifier (name), type);
6673}
6674
6675/* Like build_cp_library_fn, but takes a C string instead of an
6676 IDENTIFIER_NODE. */
6677
6678tree
6679build_cp_library_fn_ptr (name, type)
6680 const char *name;
6681 tree type;
6682{
6683 return build_cp_library_fn (get_identifier (name), type);
6684}
6685
6686/* Like build_library_fn, but also pushes the function so that we will
6687 be able to find it via IDENTIFIER_GLOBAL_VALUE. */
6688
6689tree
6690push_library_fn (name, type)
6691 tree name, type;
6692{
6693 tree fn = build_library_fn (name, type);
6694 pushdecl_top_level (fn);
6695 return fn;
6696}
6697
6698/* Like build_cp_library_fn, but also pushes the function so that it
6699 will be found by normal lookup. */
6700
6701tree
6702push_cp_library_fn (name, type)
6703 tree name;
6704 tree type;
6705{
6706 tree fn = build_cp_library_fn (name, type);
6707 pushdecl (fn);
6708 return fn;
6709}
6710
6711/* Like push_library_fn, but takes a TREE_LIST of parm types rather than
6712 a FUNCTION_TYPE. */
6713
6714tree
6715push_void_library_fn (name, parmtypes)
6716 tree name, parmtypes;
6717{
6718 tree type = build_function_type (void_type_node, parmtypes);
6719 return push_library_fn (name, type);
6720}
6721
cf74fb86 6722/* Like push_library_fn, but also note that this function throws
0c11ada6
JM
6723 and does not return. Used for __throw_foo and the like. */
6724
6725tree
cf74fb86
JM
6726push_throw_library_fn (name, type)
6727 tree name, type;
0c11ada6 6728{
cf74fb86 6729 tree fn = push_library_fn (name, type);
0c11ada6
JM
6730 TREE_THIS_VOLATILE (fn) = 1;
6731 TREE_NOTHROW (fn) = 0;
6732 return fn;
7f4edbcb 6733}
8d08fdba 6734\f
61a127b3
MM
6735/* When we call finish_struct for an anonymous union, we create
6736 default copy constructors and such. But, an anonymous union
6737 shouldn't have such things; this function undoes the damage to the
6738 anonymous union type T.
6739
6740 (The reason that we create the synthesized methods is that we don't
6741 distinguish `union { int i; }' from `typedef union { int i; } U'.
6742 The first is an anonymous union; the second is just an ordinary
6743 union type.) */
6744
6745void
6bdb8141 6746fixup_anonymous_aggr (t)
61a127b3
MM
6747 tree t;
6748{
6749 tree *q;
6750
6751 /* Wipe out memory of synthesized methods */
6752 TYPE_HAS_CONSTRUCTOR (t) = 0;
6753 TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
6754 TYPE_HAS_INIT_REF (t) = 0;
6755 TYPE_HAS_CONST_INIT_REF (t) = 0;
6756 TYPE_HAS_ASSIGN_REF (t) = 0;
61a127b3
MM
6757 TYPE_HAS_CONST_ASSIGN_REF (t) = 0;
6758
6759 /* Splice the implicitly generated functions out of the TYPE_METHODS
6760 list. */
6761 q = &TYPE_METHODS (t);
6762 while (*q)
6763 {
6764 if (DECL_ARTIFICIAL (*q))
6765 *q = TREE_CHAIN (*q);
6766 else
6767 q = &TREE_CHAIN (*q);
6768 }
6769
cab1f180 6770 /* ISO C++ 9.5.3. Anonymous unions may not have function members. */
61a127b3
MM
6771 if (TYPE_METHODS (t))
6772 error ("an anonymous union cannot have function members");
6773}
6774
72a93143
JM
6775/* Make sure that a declaration with no declarator is well-formed, i.e.
6776 just defines a tagged type or anonymous union.
8d08fdba 6777
72a93143 6778 Returns the type defined, if any. */
8d08fdba 6779
72a93143
JM
6780tree
6781check_tag_decl (declspecs)
8d08fdba
MS
6782 tree declspecs;
6783{
72a93143 6784 int found_type = 0;
2bdb0643 6785 int saw_friend = 0;
2986ae00 6786 tree ob_modifier = NULL_TREE;
8d08fdba 6787 register tree link;
8d08fdba
MS
6788 register tree t = NULL_TREE;
6789
6790 for (link = declspecs; link; link = TREE_CHAIN (link))
6791 {
6792 register tree value = TREE_VALUE (link);
6793
2bdb0643
JM
6794 if (TYPE_P (value)
6795 || (TREE_CODE (value) == IDENTIFIER_NODE
6796 && IDENTIFIER_GLOBAL_VALUE (value)
6797 && TYPE_P (IDENTIFIER_GLOBAL_VALUE (value))))
8d08fdba 6798 {
72a93143 6799 ++found_type;
5566b478 6800
72a93143
JM
6801 if (IS_AGGR_TYPE (value) || TREE_CODE (value) == ENUMERAL_TYPE)
6802 {
6803 my_friendly_assert (TYPE_MAIN_DECL (value) != NULL_TREE, 261);
6804 t = value;
6805 }
8d08fdba 6806 }
83f660b7
JM
6807 else if (value == ridpointers[(int) RID_FRIEND])
6808 {
83f660b7
JM
6809 if (current_class_type == NULL_TREE
6810 || current_scope () != current_class_type)
6811 ob_modifier = value;
2bdb0643
JM
6812 else
6813 saw_friend = 1;
83f660b7 6814 }
8d08fdba 6815 else if (value == ridpointers[(int) RID_STATIC]
2986ae00
MS
6816 || value == ridpointers[(int) RID_EXTERN]
6817 || value == ridpointers[(int) RID_AUTO]
28cbf42c
MS
6818 || value == ridpointers[(int) RID_REGISTER]
6819 || value == ridpointers[(int) RID_INLINE]
6820 || value == ridpointers[(int) RID_VIRTUAL]
72a93143
JM
6821 || value == ridpointers[(int) RID_CONST]
6822 || value == ridpointers[(int) RID_VOLATILE]
28cbf42c 6823 || value == ridpointers[(int) RID_EXPLICIT])
2986ae00 6824 ob_modifier = value;
8d08fdba
MS
6825 }
6826
72a93143
JM
6827 if (found_type > 1)
6828 error ("multiple types in one declaration");
7e2067ca 6829
2bdb0643 6830 if (t == NULL_TREE && ! saw_friend)
7e2067ca 6831 pedwarn ("declaration does not declare anything");
0dd3962d
JM
6832
6833 /* Check for an anonymous union. We're careful
6834 accessing TYPE_IDENTIFIER because some built-in types, like
6835 pointer-to-member types, do not have TYPE_NAME. */
6bdb8141 6836 else if (t && IS_AGGR_TYPE_CODE (TREE_CODE (t))
0dd3962d
JM
6837 && TYPE_NAME (t)
6838 && ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
6839 {
6840 /* Anonymous unions are objects, so they can have specifiers. */;
6bdb8141
JM
6841 SET_ANON_AGGR_TYPE_P (t);
6842
6843 if (TREE_CODE (t) != UNION_TYPE && pedantic && ! in_system_header)
6844 pedwarn ("ISO C++ prohibits anonymous structs");
0dd3962d
JM
6845 }
6846
83f660b7 6847 else if (ob_modifier)
8d08fdba 6848 {
83f660b7
JM
6849 if (ob_modifier == ridpointers[(int) RID_INLINE]
6850 || ob_modifier == ridpointers[(int) RID_VIRTUAL])
6851 cp_error ("`%D' can only be specified for functions", ob_modifier);
6852 else if (ob_modifier == ridpointers[(int) RID_FRIEND])
6853 cp_error ("`%D' can only be specified inside a class", ob_modifier);
6854 else if (ob_modifier == ridpointers[(int) RID_EXPLICIT])
6855 cp_error ("`%D' can only be specified for constructors",
6856 ob_modifier);
6857 else
6858 cp_error ("`%D' can only be specified for objects and functions",
6859 ob_modifier);
72a93143 6860 }
8d08fdba 6861
72a93143
JM
6862 return t;
6863}
6864
6865/* Called when a declaration is seen that contains no names to declare.
6866 If its type is a reference to a structure, union or enum inherited
6867 from a containing scope, shadow that tag name for the current scope
6868 with a forward reference.
6869 If its type defines a new named structure or union
6870 or defines an enum, it is valid but we need not do anything here.
6871 Otherwise, it is an error.
6872
6873 C++: may have to grok the declspecs to learn about static,
6874 complain for anonymous unions. */
6875
6876void
6877shadow_tag (declspecs)
6878 tree declspecs;
6879{
6880 tree t = check_tag_decl (declspecs);
6881
6882 if (t)
6883 maybe_process_partial_specialization (t);
6884
6885 /* This is where the variables in an anonymous union are
6886 declared. An anonymous union declaration looks like:
6887 union { ... } ;
6888 because there is no declarator after the union, the parser
6889 sends that declaration here. */
6bdb8141 6890 if (t && ANON_AGGR_TYPE_P (t))
72a93143 6891 {
6bdb8141 6892 fixup_anonymous_aggr (t);
72a93143
JM
6893
6894 if (TYPE_FIELDS (t))
6895 {
6896 tree decl = grokdeclarator (NULL_TREE, declspecs, NORMAL, 0,
6897 NULL_TREE);
6898 finish_anon_union (decl);
6899 }
8d08fdba
MS
6900 }
6901}
6902\f
6903/* Decode a "typename", such as "int **", returning a ..._TYPE node. */
6904
6905tree
6906groktypename (typename)
6907 tree typename;
6908{
6909 if (TREE_CODE (typename) != TREE_LIST)
6910 return typename;
6911 return grokdeclarator (TREE_VALUE (typename),
6912 TREE_PURPOSE (typename),
c11b6f21 6913 TYPENAME, 0, NULL_TREE);
8d08fdba
MS
6914}
6915
6916/* Decode a declarator in an ordinary declaration or data definition.
6917 This is called as soon as the type information and variable name
6918 have been parsed, before parsing the initializer if any.
6919 Here we create the ..._DECL node, fill in its type,
6920 and put it on the list of decls for the current context.
6921 The ..._DECL node is returned as the value.
6922
6923 Exception: for arrays where the length is not specified,
82580166 6924 the type is left null, to be filled in by `cp_finish_decl'.
8d08fdba
MS
6925
6926 Function definitions do not come here; they go to start_function
6927 instead. However, external and forward declarations of functions
6928 do go through here. Structure field declarations are done by
6929 grokfield and not through here. */
6930
8d08fdba 6931tree
a1774733 6932start_decl (declarator, declspecs, initialized, attributes, prefix_attributes)
8d08fdba
MS
6933 tree declarator, declspecs;
6934 int initialized;
a1774733 6935 tree attributes, prefix_attributes;
8d08fdba
MS
6936{
6937 register tree decl;
6938 register tree type, tem;
6939 tree context;
6940 extern int have_extern_spec;
6941 extern int used_extern_spec;
b17e2870 6942 tree attrlist;
8d08fdba 6943
5566b478
MS
6944#if 0
6945 /* See code below that used this. */
8d08fdba 6946 int init_written = initialized;
5566b478 6947#endif
8d08fdba 6948
e92cc029 6949 /* This should only be done once on the top most decl. */
8d08fdba
MS
6950 if (have_extern_spec && !used_extern_spec)
6951 {
a28e3c7f
MS
6952 declspecs = decl_tree_cons (NULL_TREE, get_identifier ("extern"),
6953 declspecs);
8d08fdba
MS
6954 used_extern_spec = 1;
6955 }
6956
b17e2870 6957 if (attributes || prefix_attributes)
051e6fd7 6958 attrlist = build_tree_list (attributes, prefix_attributes);
b17e2870
JM
6959 else
6960 attrlist = NULL_TREE;
6961
c11b6f21 6962 decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
b17e2870 6963 attrlist);
68642fb6 6964
a1774733 6965 if (decl == NULL_TREE || TREE_CODE (decl) == VOID_TYPE)
8d08fdba
MS
6966 return NULL_TREE;
6967
6968 type = TREE_TYPE (decl);
6969
44689c12
ML
6970 if (type == error_mark_node)
6971 return NULL_TREE;
6972
4f1c5b7d 6973 context = DECL_CONTEXT (decl);
8d08fdba 6974
9a68c51f
JM
6975 if (initialized && context && TREE_CODE (context) == NAMESPACE_DECL
6976 && context != current_namespace && TREE_CODE (decl) == VAR_DECL)
6977 {
6978 /* When parsing the initializer, lookup should use the object's
6979 namespace. */
6980 push_decl_namespace (context);
6981 }
6982
2c73f9f5
ML
6983 /* We are only interested in class contexts, later. */
6984 if (context && TREE_CODE (context) == NAMESPACE_DECL)
6985 context = NULL_TREE;
6986
8d08fdba
MS
6987 if (initialized)
6988 /* Is it valid for this decl to have an initializer at all?
6989 If not, set INITIALIZED to zero, which will indirectly
82580166 6990 tell `cp_finish_decl' to ignore the initializer once it is parsed. */
8d08fdba
MS
6991 switch (TREE_CODE (decl))
6992 {
6993 case TYPE_DECL:
6994 /* typedef foo = bar means give foo the same type as bar.
82580166 6995 We haven't parsed bar yet, so `cp_finish_decl' will fix that up.
8d08fdba
MS
6996 Any other case of an initialization in a TYPE_DECL is an error. */
6997 if (pedantic || list_length (declspecs) > 1)
6998 {
8251199e 6999 cp_error ("typedef `%D' is initialized", decl);
8d08fdba
MS
7000 initialized = 0;
7001 }
7002 break;
7003
7004 case FUNCTION_DECL:
8251199e 7005 cp_error ("function `%#D' is initialized like a variable", decl);
8d08fdba
MS
7006 initialized = 0;
7007 break;
7008
7009 default:
3e41d13b 7010 break;
8d08fdba
MS
7011 }
7012
8d08fdba
MS
7013 if (initialized)
7014 {
a9aedbc2 7015 if (! toplevel_bindings_p ()
8d08fdba 7016 && DECL_EXTERNAL (decl))
8251199e 7017 cp_warning ("declaration of `%#D' has `extern' and is initialized",
8d08fdba
MS
7018 decl);
7019 DECL_EXTERNAL (decl) = 0;
5566b478 7020 if (toplevel_bindings_p ())
8d08fdba
MS
7021 TREE_STATIC (decl) = 1;
7022
7023 /* Tell `pushdecl' this is an initialized decl
7024 even though we don't yet have the initializer expression.
82580166 7025 Also tell `cp_finish_decl' it may store the real initializer. */
8d08fdba
MS
7026 DECL_INITIAL (decl) = error_mark_node;
7027 }
7028
fa20888b
MK
7029#ifdef SET_DEFAULT_DECL_ATTRIBUTES
7030 SET_DEFAULT_DECL_ATTRIBUTES (decl, attributes);
7031#endif
68642fb6 7032
fa20888b
MK
7033 /* Set attributes here so if duplicate decl, will have proper attributes. */
7034 cplus_decl_attributes (decl, attributes, prefix_attributes);
7035
d0f062fb 7036 if (context && COMPLETE_TYPE_P (complete_type (context)))
5b605f68 7037 {
6b400b21 7038 push_nested_class (context, 2);
e97e5263 7039
5b605f68
MS
7040 if (TREE_CODE (decl) == VAR_DECL)
7041 {
7042 tree field = lookup_field (context, DECL_NAME (decl), 0, 0);
7043 if (field == NULL_TREE || TREE_CODE (field) != VAR_DECL)
8251199e 7044 cp_error ("`%#D' is not a static member of `%#T'", decl, context);
e349ee73
MS
7045 else
7046 {
7047 if (DECL_CONTEXT (field) != context)
f2d773a2 7048 {
cb9a3ff8 7049 cp_pedwarn ("ISO C++ does not permit `%T::%D' to be defined as `%T::%D'",
f2d773a2
JM
7050 DECL_CONTEXT (field), DECL_NAME (decl),
7051 context, DECL_NAME (decl));
7052 DECL_CONTEXT (decl) = DECL_CONTEXT (field);
7053 }
75650646
MM
7054 /* Static data member are tricky; an in-class initialization
7055 still doesn't provide a definition, so the in-class
7056 declaration will have DECL_EXTERNAL set, but will have an
7057 initialization. Thus, duplicate_decls won't warn
7058 about this situation, and so we check here. */
7059 if (DECL_INITIAL (decl) && DECL_INITIAL (field))
8251199e 7060 cp_error ("duplicate initialization of %D", decl);
e349ee73
MS
7061 if (duplicate_decls (decl, field))
7062 decl = field;
7063 }
5b605f68 7064 }
f30432d7
MS
7065 else
7066 {
5566b478 7067 tree field = check_classfn (context, decl);
f30432d7
MS
7068 if (field && duplicate_decls (decl, field))
7069 decl = field;
7070 }
7071
7072 /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set. */
dff3e828 7073 DECL_IN_AGGR_P (decl) = 0;
68642fb6 7074 if ((DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl))
dff3e828 7075 || CLASSTYPE_USE_TEMPLATE (context))
84e6233f
JM
7076 {
7077 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
7078 /* [temp.expl.spec] An explicit specialization of a static data
7079 member of a template is a definition if the declaration
7080 includes an initializer; otherwise, it is a declaration.
7081
7082 We check for processing_specialization so this only applies
7083 to the new specialization syntax. */
7084 if (DECL_INITIAL (decl) == NULL_TREE && processing_specialization)
7085 DECL_EXTERNAL (decl) = 1;
7086 }
f30432d7 7087
b7698cf0 7088 if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl))
8251199e 7089 cp_pedwarn ("declaration of `%#D' outside of class is not definition",
f30432d7 7090 decl);
5b605f68
MS
7091 }
7092
9188c363
MM
7093 /* Enter this declaration into the symbol table. */
7094 tem = maybe_push_decl (decl);
2ee887f2 7095
5156628f 7096 if (processing_template_decl)
cd9f6678 7097 tem = push_template_decl (tem);
5566b478 7098
2ee887f2 7099#if ! defined (ASM_OUTPUT_BSS) && ! defined (ASM_OUTPUT_ALIGNED_BSS)
a3203465 7100 /* Tell the back-end to use or not use .common as appropriate. If we say
a50f0918
MS
7101 -fconserve-space, we want this to save .data space, at the expense of
7102 wrong semantics. If we say -fno-conserve-space, we want this to
7103 produce errors about redefs; to do this we force variables into the
7104 data segment. */
a3203465 7105 DECL_COMMON (tem) = flag_conserve_space || ! TREE_PUBLIC (tem);
2ee887f2 7106#endif
68642fb6 7107
5156628f 7108 if (! processing_template_decl)
5566b478 7109 start_decl_1 (tem);
8d08fdba 7110
8d08fdba
MS
7111 return tem;
7112}
7113
5566b478
MS
7114void
7115start_decl_1 (decl)
7116 tree decl;
8d08fdba 7117{
5566b478
MS
7118 tree type = TREE_TYPE (decl);
7119 int initialized = (DECL_INITIAL (decl) != NULL_TREE);
8d08fdba 7120
44689c12
ML
7121 if (type == error_mark_node)
7122 return;
7123
8f471b0d
MM
7124 /* If this type of object needs a cleanup, but we're not allowed to
7125 add any more objects with cleanups to the current scope, create a
7126 new binding level. */
834c6dff 7127 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
5566b478 7128 && current_binding_level->more_cleanups_ok == 0)
8f471b0d
MM
7129 {
7130 keep_next_level (2);
7131 pushlevel (1);
7132 clear_last_expr ();
7133 add_scope_stmt (/*begin_p=*/1, /*partial_p=*/1);
7134 }
5566b478
MS
7135
7136 if (initialized)
7137 /* Is it valid for this decl to have an initializer at all?
7138 If not, set INITIALIZED to zero, which will indirectly
7139 tell `cp_finish_decl' to ignore the initializer once it is parsed. */
8d08fdba 7140 {
5566b478
MS
7141 /* Don't allow initializations for incomplete types except for
7142 arrays which might be completed by the initialization. */
d0f062fb 7143 if (COMPLETE_TYPE_P (complete_type (type)))
5566b478
MS
7144 ; /* A complete type is ok. */
7145 else if (TREE_CODE (type) != ARRAY_TYPE)
8d08fdba 7146 {
8251199e 7147 cp_error ("variable `%#D' has initializer but incomplete type",
5566b478
MS
7148 decl);
7149 initialized = 0;
25eb19ff 7150 type = TREE_TYPE (decl) = error_mark_node;
5566b478 7151 }
d0f062fb 7152 else if (!COMPLETE_TYPE_P (complete_type (TREE_TYPE (type))))
5566b478
MS
7153 {
7154 if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
8251199e 7155 cp_error ("elements of array `%#D' have incomplete type", decl);
5566b478
MS
7156 /* else we already gave an error in start_decl. */
7157 initialized = 0;
8d08fdba 7158 }
8d08fdba
MS
7159 }
7160
5566b478
MS
7161 if (!initialized
7162 && TREE_CODE (decl) != TYPE_DECL
7163 && TREE_CODE (decl) != TEMPLATE_DECL
07c88314
MM
7164 && type != error_mark_node
7165 && IS_AGGR_TYPE (type)
7166 && ! DECL_EXTERNAL (decl))
8d08fdba 7167 {
5156628f 7168 if ((! processing_template_decl || ! uses_template_parms (type))
d0f062fb 7169 && !COMPLETE_TYPE_P (complete_type (type)))
5566b478 7170 {
8251199e 7171 cp_error ("aggregate `%#D' has incomplete type and cannot be initialized",
5566b478
MS
7172 decl);
7173 /* Change the type so that assemble_variable will give
7174 DECL an rtl we can live with: (mem (const_int 0)). */
25eb19ff 7175 type = TREE_TYPE (decl) = error_mark_node;
5566b478
MS
7176 }
7177 else
7178 {
7179 /* If any base type in the hierarchy of TYPE needs a constructor,
7180 then we set initialized to 1. This way any nodes which are
7181 created for the purposes of initializing this aggregate
7182 will live as long as it does. This is necessary for global
7183 aggregates which do not have their initializers processed until
7184 the end of the file. */
7185 initialized = TYPE_NEEDS_CONSTRUCTING (type);
7186 }
7187 }
7188
5566b478
MS
7189 if (! initialized)
7190 DECL_INITIAL (decl) = NULL_TREE;
7191}
7192
7193/* Handle initialization of references.
38e01259 7194 These three arguments are from `cp_finish_decl', and have the
e92cc029
MS
7195 same meaning here that they do there.
7196
7197 Quotes on semantics can be found in ARM 8.4.3. */
7198
5566b478 7199static void
a703fb38 7200grok_reference_init (decl, type, init)
5566b478 7201 tree decl, type, init;
5566b478
MS
7202{
7203 tree tmp;
7204
7205 if (init == NULL_TREE)
7206 {
7207 if ((DECL_LANG_SPECIFIC (decl) == 0
7208 || DECL_IN_AGGR_P (decl) == 0)
7209 && ! DECL_THIS_EXTERN (decl))
ed5511d9 7210 cp_error ("`%D' declared as reference but not initialized", decl);
5566b478
MS
7211 return;
7212 }
7213
7214 if (init == error_mark_node)
7215 return;
7216
ed5511d9 7217 if (TREE_CODE (init) == CONSTRUCTOR)
5566b478 7218 {
cb9a3ff8 7219 cp_error ("ISO C++ forbids use of initializer list to initialize reference `%D'", decl);
8d08fdba
MS
7220 return;
7221 }
7222
7223 if (TREE_CODE (init) == TREE_LIST)
7224 init = build_compound_expr (init);
8d08fdba 7225
8ccc31eb
MS
7226 if (TREE_CODE (TREE_TYPE (init)) == REFERENCE_TYPE)
7227 init = convert_from_reference (init);
7228
8d08fdba
MS
7229 if (TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE
7230 && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
7231 {
a3203465 7232 /* Note: default conversion is only called in very special cases. */
8d08fdba
MS
7233 init = default_conversion (init);
7234 }
68642fb6 7235
24bef158
MM
7236 /* Convert INIT to the reference type TYPE. This may involve the
7237 creation of a temporary, whose lifetime must be the same as that
7238 of the reference. If so, a DECL_STMT for the temporary will be
7239 added just after the DECL_STMT for DECL. That's why we don't set
7240 DECL_INITIAL for local references (instead assigning to them
7241 explicitly); we need to allow the temporary to be initialized
7242 first. */
a3203465 7243 tmp = convert_to_reference
9a3b49ac
MS
7244 (type, init, CONV_IMPLICIT,
7245 LOOKUP_SPECULATIVELY|LOOKUP_NORMAL|DIRECT_BIND, decl);
8d08fdba 7246
a3203465 7247 if (tmp == error_mark_node)
ed5511d9 7248 return;
a3203465 7249 else if (tmp != NULL_TREE)
8d08fdba 7250 {
a3203465 7251 init = tmp;
24bef158
MM
7252 tmp = save_expr (tmp);
7253 if (building_stmt_tree ())
7254 {
7255 /* Initialize the declaration. */
7256 tmp = build (INIT_EXPR, TREE_TYPE (decl), decl, tmp);
24bef158
MM
7257 finish_expr_stmt (tmp);
7258 }
7259 else
7260 DECL_INITIAL (decl) = tmp;
8d08fdba 7261 }
a3203465 7262 else
8d08fdba 7263 {
8251199e 7264 cp_error ("cannot initialize `%T' from `%T'", type, TREE_TYPE (init));
ed5511d9 7265 return;
8d08fdba 7266 }
8d08fdba 7267
8d08fdba
MS
7268 if (TREE_STATIC (decl) && ! TREE_CONSTANT (DECL_INITIAL (decl)))
7269 {
7270 expand_static_init (decl, DECL_INITIAL (decl));
7271 DECL_INITIAL (decl) = NULL_TREE;
7272 }
7273 return;
8d08fdba
MS
7274}
7275
6060a796
MS
7276/* Fill in DECL_INITIAL with some magical value to prevent expand_decl from
7277 mucking with forces it does not comprehend (i.e. initialization with a
7278 constructor). If we are at global scope and won't go into COMMON, fill
7279 it in with a dummy CONSTRUCTOR to force the variable into .data;
7280 otherwise we can use error_mark_node. */
7281
28cbf42c
MS
7282static tree
7283obscure_complex_init (decl, init)
7284 tree decl, init;
6060a796 7285{
28cbf42c
MS
7286 if (! flag_no_inline && TREE_STATIC (decl))
7287 {
7288 if (extract_init (decl, init))
7289 return NULL_TREE;
7290 }
7291
2ee887f2 7292#if ! defined (ASM_OUTPUT_BSS) && ! defined (ASM_OUTPUT_ALIGNED_BSS)
a9aedbc2 7293 if (toplevel_bindings_p () && ! DECL_COMMON (decl))
6060a796
MS
7294 DECL_INITIAL (decl) = build (CONSTRUCTOR, TREE_TYPE (decl), NULL_TREE,
7295 NULL_TREE);
7296 else
2ee887f2 7297#endif
6060a796 7298 DECL_INITIAL (decl) = error_mark_node;
28cbf42c
MS
7299
7300 return init;
6060a796
MS
7301}
7302
27778b73
MM
7303/* When parsing `int a[] = {1, 2};' we don't know the size of the
7304 array until we finish parsing the initializer. If that's the
7305 situation we're in, update DECL accordingly. */
7306
7307static void
7308maybe_deduce_size_from_array_init (decl, init)
7309 tree decl;
7310 tree init;
7311{
7312 tree type = TREE_TYPE (decl);
7313
7314 if (TREE_CODE (type) == ARRAY_TYPE
7315 && TYPE_DOMAIN (type) == NULL_TREE
7316 && TREE_CODE (decl) != TYPE_DECL)
7317 {
7318 int do_default
7319 = (TREE_STATIC (decl)
7320 /* Even if pedantic, an external linkage array
7321 may have incomplete type at first. */
7322 ? pedantic && ! DECL_EXTERNAL (decl)
7323 : !DECL_EXTERNAL (decl));
7324 tree initializer = init ? init : DECL_INITIAL (decl);
7325 int failure = complete_array_type (type, initializer, do_default);
7326
7327 if (failure == 1)
7328 cp_error ("initializer fails to determine size of `%D'", decl);
7329
7330 if (failure == 2)
7331 {
7332 if (do_default)
7333 cp_error ("array size missing in `%D'", decl);
7334 /* If a `static' var's size isn't known, make it extern as
7335 well as static, so it does not get allocated. If it's not
7336 `static', then don't mark it extern; finish_incomplete_decl
7337 will give it a default size and it will get allocated. */
7338 else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
7339 DECL_EXTERNAL (decl) = 1;
7340 }
7341
7342 if (pedantic && TYPE_DOMAIN (type) != NULL_TREE
7343 && tree_int_cst_lt (TYPE_MAX_VALUE (TYPE_DOMAIN (type)),
7344 integer_zero_node))
7345 cp_error ("zero-size array `%D'", decl);
7346
7347 layout_decl (decl, 0);
7348 }
7349}
7350
7351/* Set DECL_SIZE, DECL_ALIGN, etc. for DECL (a VAR_DECL), and issue
57b52417 7352 any appropriate error messages regarding the layout. */
27778b73 7353
57b52417
MM
7354static void
7355layout_var_decl (decl)
27778b73 7356 tree decl;
27778b73 7357{
57b52417 7358 tree type = TREE_TYPE (decl);
c95cd22e 7359#if 0
57b52417 7360 tree ttype = target_type (type);
c95cd22e 7361#endif
57b52417
MM
7362
7363 /* If we haven't already layed out this declaration, do so now.
7364 Note that we must not call complete type for an external object
7365 because it's type might involve templates that we are not
68642fb6 7366 supposed to isntantiate yet. (And it's perfectly legal to say
57b52417
MM
7367 `extern X x' for some incomplete type `X'.) */
7368 if (!DECL_EXTERNAL (decl))
7369 complete_type (type);
d0f062fb 7370 if (!DECL_SIZE (decl) && COMPLETE_TYPE_P (type))
27778b73
MM
7371 layout_decl (decl, 0);
7372
c82dbd95 7373 if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
27778b73
MM
7374 {
7375 /* An automatic variable with an incomplete type: that is an error.
7376 Don't talk about array types here, since we took care of that
7377 message in grokdeclarator. */
7378 cp_error ("storage size of `%D' isn't known", decl);
7379 TREE_TYPE (decl) = error_mark_node;
7380 }
ae673f14
JM
7381#if 0
7382 /* Keep this code around in case we later want to control debug info
7383 based on whether a type is "used". (jason 1999-11-11) */
7384
27778b73
MM
7385 else if (!DECL_EXTERNAL (decl) && IS_AGGR_TYPE (ttype))
7386 /* Let debugger know it should output info for this type. */
7387 note_debug_info_needed (ttype);
7388
7389 if (TREE_STATIC (decl) && DECL_CLASS_SCOPE_P (decl))
7390 note_debug_info_needed (DECL_CONTEXT (decl));
ae673f14 7391#endif
27778b73
MM
7392
7393 if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
7394 && DECL_SIZE (decl) != NULL_TREE
7395 && ! TREE_CONSTANT (DECL_SIZE (decl)))
7396 {
7397 if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
7398 constant_expression_warning (DECL_SIZE (decl));
7399 else
7400 cp_error ("storage size of `%D' isn't constant", decl);
7401 }
7402}
7403
27778b73
MM
7404/* If a local static variable is declared in an inline function, or if
7405 we have a weak definition, we must endeavor to create only one
7406 instance of the variable at link-time. */
7407
7408static void
7409maybe_commonize_var (decl)
7410 tree decl;
7411{
7412 /* Static data in a function with comdat linkage also has comdat
7413 linkage. */
7414 if (TREE_STATIC (decl)
7415 /* Don't mess with __FUNCTION__. */
cf74fb86 7416 && ! DECL_ARTIFICIAL (decl)
27778b73
MM
7417 && current_function_decl
7418 && DECL_CONTEXT (decl) == current_function_decl
7419 && (DECL_THIS_INLINE (current_function_decl)
7420 || DECL_TEMPLATE_INSTANTIATION (current_function_decl))
7421 && TREE_PUBLIC (current_function_decl))
7422 {
7423 /* Rather than try to get this right with inlining, we suppress
7424 inlining of such functions. */
7425 current_function_cannot_inline
7426 = "function with static variable cannot be inline";
7427
7428 /* If flag_weak, we don't need to mess with this, as we can just
7429 make the function weak, and let it refer to its unique local
7430 copy. This works because we don't allow the function to be
7431 inlined. */
7432 if (! flag_weak)
7433 {
7434 if (DECL_INTERFACE_KNOWN (current_function_decl))
7435 {
7436 TREE_PUBLIC (decl) = 1;
7437 DECL_EXTERNAL (decl) = DECL_EXTERNAL (current_function_decl);
7438 }
7439 else if (DECL_INITIAL (decl) == NULL_TREE
7440 || DECL_INITIAL (decl) == error_mark_node)
7441 {
7442 TREE_PUBLIC (decl) = 1;
7443 DECL_COMMON (decl) = 1;
7444 }
7445 /* else we lose. We can only do this if we can use common,
7446 which we can't if it has been initialized. */
7447
7448 if (TREE_PUBLIC (decl))
7449 DECL_ASSEMBLER_NAME (decl)
7450 = build_static_name (current_function_decl, DECL_NAME (decl));
cf74fb86 7451 else
27778b73
MM
7452 {
7453 cp_warning_at ("sorry: semantics of inline function static data `%#D' are wrong (you'll wind up with multiple copies)", decl);
7454 cp_warning_at (" you can work around this by removing the initializer", decl);
7455 }
7456 }
7457 }
7458 else if (DECL_LANG_SPECIFIC (decl) && DECL_COMDAT (decl))
7459 /* Set it up again; we might have set DECL_INITIAL since the last
7460 time. */
7461 comdat_linkage (decl);
7462}
7463
91063b51
MM
7464/* Issue an error message if DECL is an uninitialized const variable. */
7465
7466static void
7467check_for_uninitialized_const_var (decl)
7468 tree decl;
7469{
7470 tree type = TREE_TYPE (decl);
7471
7472 /* ``Unless explicitly declared extern, a const object does not have
7473 external linkage and must be initialized. ($8.4; $12.1)'' ARM
7474 7.1.6 */
7475 if (TREE_CODE (decl) == VAR_DECL
7476 && TREE_CODE (type) != REFERENCE_TYPE
7477 && CP_TYPE_CONST_P (type)
7478 && !TYPE_NEEDS_CONSTRUCTING (type)
7479 && !DECL_INITIAL (decl))
7480 cp_error ("uninitialized const `%D'", decl);
7481}
7482
c82dbd95
MM
7483/* Verify INIT (the initializer for DECL), and record the
7484 initialization in DECL_INITIAL, if appropriate. Returns a new
7485 value for INIT. */
27778b73 7486
c82dbd95
MM
7487static tree
7488check_initializer (decl, init)
27778b73 7489 tree decl;
c82dbd95 7490 tree init;
27778b73 7491{
27778b73
MM
7492 tree type;
7493
7494 if (TREE_CODE (decl) == FIELD_DECL)
c82dbd95 7495 return init;
27778b73 7496
fc0e7bf5
MM
7497 type = TREE_TYPE (decl);
7498
27778b73
MM
7499 /* If `start_decl' didn't like having an initialization, ignore it now. */
7500 if (init != NULL_TREE && DECL_INITIAL (decl) == NULL_TREE)
7501 init = NULL_TREE;
27778b73 7502
c82dbd95 7503 /* Check the initializer. */
27778b73
MM
7504 if (init)
7505 {
c82dbd95
MM
7506 /* Things that are going to be initialized need to have complete
7507 type. */
7508 TREE_TYPE (decl) = type = complete_type (TREE_TYPE (decl));
7509
7510 if (type == error_mark_node)
7511 /* We will have already complained. */
7512 init = NULL_TREE;
d0f062fb 7513 else if (COMPLETE_TYPE_P (type) && !TREE_CONSTANT (TYPE_SIZE (type)))
27778b73
MM
7514 {
7515 cp_error ("variable-sized object `%D' may not be initialized", decl);
7516 init = NULL_TREE;
7517 }
c82dbd95 7518 else if (TREE_CODE (type) == ARRAY_TYPE
d0f062fb 7519 && !COMPLETE_TYPE_P (TREE_TYPE (type)))
27778b73
MM
7520 {
7521 cp_error ("elements of array `%#D' have incomplete type", decl);
7522 init = NULL_TREE;
7523 }
d0f062fb 7524 else if (!COMPLETE_TYPE_P (type))
c82dbd95
MM
7525 {
7526 cp_error ("`%D' has incomplete type", decl);
7527 TREE_TYPE (decl) = error_mark_node;
7528 init = NULL_TREE;
7529 }
27778b73
MM
7530 }
7531
7532 if (TREE_CODE (decl) == CONST_DECL)
7533 {
7534 my_friendly_assert (TREE_CODE (decl) != REFERENCE_TYPE, 148);
7535
7536 DECL_INITIAL (decl) = init;
7537
7538 /* This will keep us from needing to worry about our obstacks. */
7539 my_friendly_assert (init != NULL_TREE, 149);
7540 init = NULL_TREE;
7541 }
c82dbd95
MM
7542 else if (!DECL_EXTERNAL (decl) && TREE_CODE (type) == REFERENCE_TYPE)
7543 {
7544 if (TREE_STATIC (decl))
7545 make_decl_rtl (decl, NULL_PTR, toplevel_bindings_p ());
7546 grok_reference_init (decl, type, init);
7547 init = NULL_TREE;
7548 }
27778b73
MM
7549 else if (init)
7550 {
7551 if (TYPE_HAS_CONSTRUCTOR (type) || TYPE_NEEDS_CONSTRUCTING (type))
7552 {
7553 if (TREE_CODE (type) == ARRAY_TYPE)
7554 init = digest_init (type, init, (tree *) 0);
7555 else if (TREE_CODE (init) == CONSTRUCTOR
7556 && TREE_HAS_CONSTRUCTOR (init))
7557 {
7558 if (TYPE_NON_AGGREGATE_CLASS (type))
7559 {
7560 cp_error ("`%D' must be initialized by constructor, not by `{...}'",
7561 decl);
7562 init = error_mark_node;
7563 }
7564 else
7565 goto dont_use_constructor;
7566 }
7567 }
7568 else
7569 {
7570 dont_use_constructor:
7571 if (TREE_CODE (init) != TREE_VEC)
7572 init = store_init_value (decl, init);
7573 }
7574
7575 if (init)
7576 /* We must hide the initializer so that expand_decl
7577 won't try to do something it does not understand. */
7578 init = obscure_complex_init (decl, init);
7579 }
7580 else if (DECL_EXTERNAL (decl))
7581 ;
2f939d94 7582 else if (TYPE_P (type)
27778b73
MM
7583 && (IS_AGGR_TYPE (type) || TYPE_NEEDS_CONSTRUCTING (type)))
7584 {
7585 tree core_type = strip_array_types (type);
7586
7587 if (! TYPE_NEEDS_CONSTRUCTING (core_type))
7588 {
7589 if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type))
7590 cp_error ("structure `%D' with uninitialized const members", decl);
7591 if (CLASSTYPE_REF_FIELDS_NEED_INIT (core_type))
7592 cp_error ("structure `%D' with uninitialized reference members",
7593 decl);
7594 }
7595
7596 check_for_uninitialized_const_var (decl);
7597
d0f062fb 7598 if (COMPLETE_TYPE_P (type) && TYPE_NEEDS_CONSTRUCTING (type))
27778b73
MM
7599 init = obscure_complex_init (decl, NULL_TREE);
7600
7601 }
7602 else
7603 check_for_uninitialized_const_var (decl);
68642fb6 7604
c82dbd95 7605 return init;
27778b73
MM
7606}
7607
7608/* If DECL is not a local variable, give it RTL. */
7609
7610static void
7611make_rtl_for_nonlocal_decl (decl, init, asmspec)
7612 tree decl;
7613 tree init;
7614 const char *asmspec;
7615{
27778b73
MM
7616 int toplev;
7617 tree type;
7618
7619 type = TREE_TYPE (decl);
7620 toplev = toplevel_bindings_p ();
27778b73 7621
f39ee884
MM
7622 /* Handle non-variables up front. */
7623 if (TREE_CODE (decl) != VAR_DECL)
7624 {
7625 rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
7626 return;
7627 }
7628
7629 /* Set the DECL_ASSEMBLER_NAME for the variable. */
7630 if (asmspec)
7631 DECL_ASSEMBLER_NAME (decl) = get_identifier (asmspec);
7632
7633 if (DECL_VIRTUAL_P (decl))
27778b73 7634 make_decl_rtl (decl, NULL_PTR, toplev);
f39ee884 7635 else if (TREE_READONLY (decl)
27778b73
MM
7636 && DECL_INITIAL (decl) != NULL_TREE
7637 && DECL_INITIAL (decl) != error_mark_node
7638 && ! EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl)))
7639 {
7640 DECL_INITIAL (decl) = save_expr (DECL_INITIAL (decl));
7641
f3010146 7642 if (toplev && ! TREE_PUBLIC (decl))
27778b73
MM
7643 {
7644 /* If this is a static const, change its apparent linkage
7645 if it belongs to a #pragma interface. */
7646 if (!interface_unknown)
7647 {
7648 TREE_PUBLIC (decl) = 1;
7649 DECL_EXTERNAL (decl) = interface_only;
7650 }
7651 make_decl_rtl (decl, asmspec, toplev);
7652 }
f39ee884 7653 else if (toplev)
27778b73
MM
7654 rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
7655 }
f39ee884 7656 else if (DECL_LANG_SPECIFIC (decl) && DECL_IN_AGGR_P (decl))
27778b73
MM
7657 {
7658 my_friendly_assert (TREE_STATIC (decl), 19990828);
7659
7660 if (init == NULL_TREE
7661#ifdef DEFAULT_STATIC_DEFS
7662 /* If this code is dead, then users must
7663 explicitly declare static member variables
7664 outside the class def'n as well. */
7665 && TYPE_NEEDS_CONSTRUCTING (type)
7666#endif
7667 )
7668 {
7669 DECL_EXTERNAL (decl) = 1;
7670 make_decl_rtl (decl, asmspec, 1);
7671 }
7672 else
7673 rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
7674 }
f39ee884
MM
7675 else if (TREE_CODE (CP_DECL_CONTEXT (decl)) == NAMESPACE_DECL
7676 || (TREE_CODE (decl) == VAR_DECL && TREE_STATIC (decl)))
27778b73 7677 rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
27778b73
MM
7678}
7679
f3010146
MM
7680/* Create RTL for the local static variable DECL. */
7681
7682void
7683make_rtl_for_local_static (decl)
7684 tree decl;
7685{
f3010146
MM
7686 const char *asmspec = NULL;
7687
46e8c075
MM
7688 /* If we inlined this variable, we could see it's declaration
7689 again. */
7690 if (DECL_RTL (decl))
7691 return;
f3010146
MM
7692
7693 if (DECL_ASSEMBLER_NAME (decl) != DECL_NAME (decl))
7694 {
7695 /* The only way this situaton can occur is if the
7696 user specified a name for this DECL using the
7697 `attribute' syntax. */
7698 asmspec = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
7699 DECL_ASSEMBLER_NAME (decl) = DECL_NAME (decl);
7700 }
7701
7702 rest_of_decl_compilation (decl, asmspec, /*top_level=*/0, /*at_end=*/0);
7703}
7704
27778b73
MM
7705/* The old ARM scoping rules injected variables declared in the
7706 initialization statement of a for-statement into the surrounding
7707 scope. We support this usage, in order to be backward-compatible.
7708 DECL is a just-declared VAR_DECL; if necessary inject its
7709 declaration into the surrounding scope. */
7710
b7b8bcd2 7711void
27778b73
MM
7712maybe_inject_for_scope_var (decl)
7713 tree decl;
7714{
7715 if (current_binding_level->is_for_scope)
7716 {
68642fb6 7717 struct binding_level *outer
27778b73
MM
7718 = current_binding_level->level_chain;
7719
7720 /* Check to see if the same name is already bound at the outer
7721 level, either because it was directly declared, or because a
7722 dead for-decl got preserved. In either case, the code would
7723 not have been valid under the ARM scope rules, so clear
7724 is_for_scope for the current_binding_level.
7725
7726 Otherwise, we need to preserve the temp slot for decl to last
7727 into the outer binding level. */
7728
68642fb6 7729 tree outer_binding
27778b73 7730 = TREE_CHAIN (IDENTIFIER_BINDING (DECL_NAME (decl)));
68642fb6 7731
27778b73 7732 if (outer_binding && BINDING_LEVEL (outer_binding) == outer
68642fb6 7733 && (TREE_CODE (BINDING_VALUE (outer_binding))
27778b73
MM
7734 == VAR_DECL)
7735 && DECL_DEAD_FOR_LOCAL (BINDING_VALUE (outer_binding)))
7736 {
7737 BINDING_VALUE (outer_binding)
7738 = DECL_SHADOWED_FOR_VAR (BINDING_VALUE (outer_binding));
7739 current_binding_level->is_for_scope = 0;
7740 }
7741 else if (DECL_IN_MEMORY_P (decl))
7742 preserve_temp_slots (DECL_RTL (decl));
7743 }
7744}
7745
ed5511d9 7746/* Generate code to initialize DECL (a local variable). */
27778b73 7747
b7b8bcd2
MM
7748void
7749initialize_local_var (decl, init, flags)
27778b73
MM
7750 tree decl;
7751 tree init;
27778b73
MM
7752 int flags;
7753{
9ed9e79a 7754 tree type = TREE_TYPE (decl);
27778b73 7755
9ed9e79a
MM
7756 /* If the type is bogus, don't bother initializing the variable. */
7757 if (type == error_mark_node)
7758 return;
b7b8bcd2 7759
b7b8bcd2
MM
7760 if (DECL_SIZE (decl) == NULL_TREE && !TREE_STATIC (decl))
7761 {
7762 /* If we used it already as memory, it must stay in memory. */
7763 DECL_INITIAL (decl) = NULL_TREE;
7764 TREE_ADDRESSABLE (decl) = TREE_USED (decl);
7765 }
7766
9ed9e79a
MM
7767 /* Local statics are handled differently from ordinary automatic
7768 variables. */
7769 if (TREE_STATIC (decl))
7770 {
7771 if (TYPE_NEEDS_CONSTRUCTING (type) || init != NULL_TREE
834c6dff 7772 || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
9ed9e79a
MM
7773 expand_static_init (decl, init);
7774 return;
7775 }
7776
27778b73
MM
7777 if (DECL_SIZE (decl) && type != error_mark_node)
7778 {
7779 int already_used;
68642fb6 7780
27778b73 7781 /* Compute and store the initial value. */
27778b73
MM
7782 already_used = TREE_USED (decl) || TREE_USED (type);
7783
7784 if (init || TYPE_NEEDS_CONSTRUCTING (type))
7785 {
24bef158
MM
7786 int saved_stmts_are_full_exprs_p;
7787
27778b73
MM
7788 emit_line_note (DECL_SOURCE_FILE (decl),
7789 DECL_SOURCE_LINE (decl));
24bef158
MM
7790 saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p;
7791 stmts_are_full_exprs_p = 1;
27778b73 7792 finish_expr_stmt (build_aggr_init (decl, init, flags));
24bef158 7793 stmts_are_full_exprs_p = saved_stmts_are_full_exprs_p;
27778b73
MM
7794 }
7795
7796 /* Set this to 0 so we can tell whether an aggregate which was
7797 initialized was ever used. Don't do this if it has a
7798 destructor, so we don't complain about the 'resource
b7b8bcd2
MM
7799 allocation is initialization' idiom. Now set
7800 attribute((unused)) on types so decls of that type will be
7801 marked used. (see TREE_USED, above.) */
27778b73
MM
7802 if (TYPE_NEEDS_CONSTRUCTING (type)
7803 && ! already_used
834c6dff 7804 && TYPE_HAS_TRIVIAL_DESTRUCTOR (type)
27778b73
MM
7805 && DECL_NAME (decl))
7806 TREE_USED (decl) = 0;
b7b8bcd2 7807 else if (already_used)
27778b73
MM
7808 TREE_USED (decl) = 1;
7809 }
24bef158 7810}
27778b73 7811
24bef158
MM
7812/* Generate code to destroy DECL (a local variable). */
7813
68642fb6 7814static void
24bef158
MM
7815destroy_local_var (decl)
7816 tree decl;
7817{
9d85d30c
MM
7818 tree type = TREE_TYPE (decl);
7819 tree cleanup;
7820
7821 /* Only variables get cleaned up. */
7822 if (TREE_CODE (decl) != VAR_DECL)
7823 return;
68642fb6 7824
9d85d30c 7825 /* And only things with destructors need cleaning up. */
834c6dff 7826 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
9d85d30c
MM
7827 return;
7828
7829 if (TREE_CODE (decl) == VAR_DECL &&
7830 (DECL_EXTERNAL (decl) || TREE_STATIC (decl)))
7831 /* We don't clean up things that aren't defined in this
7832 translation unit, or that need a static cleanup. The latter
7833 are handled by finish_file. */
7834 return;
68642fb6 7835
9d85d30c
MM
7836 /* Compute the cleanup. */
7837 cleanup = maybe_build_cleanup (decl);
27778b73 7838
b7b8bcd2 7839 /* Record the cleanup required for this declaration. */
24bef158
MM
7840 if (DECL_SIZE (decl) && TREE_TYPE (decl) != error_mark_node
7841 && cleanup)
7842 finish_decl_cleanup (decl, cleanup);
7843}
7844
7845/* Let the back-end know about DECL. */
7846
7847void
7848emit_local_var (decl)
7849 tree decl;
7850{
7851 /* Create RTL for this variable. */
7852 if (DECL_RTL (decl))
46e8c075
MM
7853 /* Only a RESULT_DECL should have non-NULL RTL when arriving here.
7854 All other local variables are assigned RTL in this function. */
68642fb6 7855 my_friendly_assert (TREE_CODE (decl) == RESULT_DECL,
24bef158
MM
7856 19990828);
7857 else
f39ee884
MM
7858 {
7859 if (DECL_ASSEMBLER_NAME (decl) != DECL_NAME (decl))
7860 /* The user must have specified an assembler name for this
7861 variable. Set that up now. */
68642fb6 7862 rest_of_decl_compilation
f39ee884
MM
7863 (decl, IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)),
7864 /*top_level=*/0, /*at_end=*/0);
7865 else
7866 expand_decl (decl);
7867 }
24bef158
MM
7868
7869 /* Actually do the initialization. */
7870 expand_start_target_temps ();
7871 expand_decl_init (decl);
7872 expand_end_target_temps ();
27778b73
MM
7873}
7874
8d08fdba
MS
7875/* Finish processing of a declaration;
7876 install its line number and initial value.
7877 If the length of an array type is not known before,
7878 it must be determined now, from the initial value, or it is an error.
7879
8d08fdba
MS
7880 INIT0 holds the value of an initializer that should be allowed to escape
7881 the normal rules.
7882
920f9474 7883 FLAGS is LOOKUP_ONLYCONVERTING if the = init syntax was used, else 0
f78c7bc6 7884 if the (init) syntax was used. */
8d08fdba
MS
7885
7886void
cd9f6678 7887cp_finish_decl (decl, init, asmspec_tree, flags)
8d08fdba
MS
7888 tree decl, init;
7889 tree asmspec_tree;
6060a796 7890 int flags;
8d08fdba
MS
7891{
7892 register tree type;
27778b73 7893 tree ttype = NULL_TREE;
9c0758dd 7894 const char *asmspec = NULL;
8d08fdba
MS
7895 int was_readonly = 0;
7896
8d08fdba
MS
7897 if (! decl)
7898 {
7899 if (init)
8251199e 7900 error ("assignment (not initialization) in declaration");
8d08fdba
MS
7901 return;
7902 }
7903
a4443a08 7904 /* If a name was specified, get the string. */
8d08fdba 7905 if (asmspec_tree)
8d08fdba 7906 asmspec = TREE_STRING_POINTER (asmspec_tree);
8d08fdba 7907
2c73f9f5
ML
7908 if (init && TREE_CODE (init) == NAMESPACE_DECL)
7909 {
920f9474 7910 cp_error ("cannot initialize `%D' to namespace `%D'",
2c73f9f5
ML
7911 decl, init);
7912 init = NULL_TREE;
7913 }
7914
6ba89f8e 7915 if (current_class_type
4f1c5b7d 7916 && CP_DECL_CONTEXT (decl) == current_class_type
6ba89f8e
MM
7917 && TYPE_BEING_DEFINED (current_class_type)
7918 && (DECL_INITIAL (decl) || init))
7919 DECL_DEFINED_IN_CLASS_P (decl) = 1;
7920
68642fb6 7921 if (TREE_CODE (decl) == VAR_DECL
9a68c51f
JM
7922 && DECL_CONTEXT (decl)
7923 && TREE_CODE (DECL_CONTEXT (decl)) == NAMESPACE_DECL
7924 && DECL_CONTEXT (decl) != current_namespace
7925 && init)
7926 {
7927 /* Leave the namespace of the object. */
7928 pop_decl_namespace ();
7929 }
7930
c82dbd95 7931 type = TREE_TYPE (decl);
8d08fdba 7932
f376e137 7933 if (type == error_mark_node)
cd9f6678 7934 return;
2f939d94 7935
24bef158 7936 /* Add this declaration to the statement-tree. */
f9817201 7937 if (building_stmt_tree () && at_function_scope_p ())
24bef158
MM
7938 add_decl_stmt (decl);
7939
a7a7710d
NS
7940 if (TYPE_HAS_MUTABLE_P (type))
7941 TREE_READONLY (decl) = 0;
24bef158 7942
5156628f 7943 if (processing_template_decl)
5566b478
MS
7944 {
7945 if (init && DECL_INITIAL (decl))
2a1e9fdd 7946 DECL_INITIAL (decl) = init;
5566b478
MS
7947 goto finish_end0;
7948 }
3e41d13b 7949
27778b73
MM
7950 /* Parameters are handled by store_parm_decls, not cp_finish_decl. */
7951 my_friendly_assert (TREE_CODE (decl) != PARM_DECL, 19990828);
7952
8d08fdba
MS
7953 /* Take care of TYPE_DECLs up front. */
7954 if (TREE_CODE (decl) == TYPE_DECL)
7955 {
7956 if (init && DECL_INITIAL (decl))
7957 {
7958 /* typedef foo = bar; store the type of bar as the type of foo. */
7959 TREE_TYPE (decl) = type = TREE_TYPE (init);
7960 DECL_INITIAL (decl) = init = NULL_TREE;
7961 }
a0a33927
MS
7962 if (type != error_mark_node
7963 && IS_AGGR_TYPE (type) && DECL_NAME (decl))
8d08fdba
MS
7964 {
7965 if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
8251199e 7966 cp_warning ("shadowing previous type declaration of `%#D'", decl);
8d08fdba
MS
7967 set_identifier_type_value (DECL_NAME (decl), type);
7968 CLASSTYPE_GOT_SEMICOLON (type) = 1;
7969 }
7970 GNU_xref_decl (current_function_decl, decl);
cffa8729
MS
7971
7972 /* If we have installed this as the canonical typedef for this
7973 type, and that type has not been defined yet, delay emitting
956d6950 7974 the debug information for it, as we will emit it later. */
d2e5ee5c 7975 if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
d0f062fb 7976 && !COMPLETE_TYPE_P (TREE_TYPE (decl)))
cffa8729
MS
7977 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
7978
8d08fdba 7979 rest_of_decl_compilation (decl, NULL_PTR,
5566b478 7980 DECL_CONTEXT (decl) == NULL_TREE, at_eof);
8d08fdba
MS
7981 goto finish_end;
7982 }
3e41d13b 7983
8d08fdba 7984 if (TREE_CODE (decl) != FUNCTION_DECL)
3e41d13b 7985 ttype = target_type (type);
8d08fdba
MS
7986
7987 if (! DECL_EXTERNAL (decl) && TREE_READONLY (decl)
7988 && TYPE_NEEDS_CONSTRUCTING (type))
7989 {
8d08fdba
MS
7990 /* Currently, GNU C++ puts constants in text space, making them
7991 impossible to initialize. In the future, one would hope for
7992 an operating system which understood the difference between
7993 initialization and the running of a program. */
7994 was_readonly = 1;
7995 TREE_READONLY (decl) = 0;
7996 }
7997
27778b73 7998 if (TREE_CODE (decl) == FIELD_DECL && asmspec)
8d08fdba 7999 {
27778b73
MM
8000 /* This must override the asm specifier which was placed by
8001 grokclassfn. Lay this out fresh. */
8002 DECL_RTL (TREE_TYPE (decl)) = NULL_RTX;
8003 DECL_ASSEMBLER_NAME (decl) = get_identifier (asmspec);
8004 make_decl_rtl (decl, asmspec, 0);
8d08fdba
MS
8005 }
8006
c82dbd95
MM
8007 /* Deduce size of array from initialization, if not already known. */
8008 maybe_deduce_size_from_array_init (decl, init);
8009 init = check_initializer (decl, init);
3e41d13b 8010
8d08fdba
MS
8011 GNU_xref_decl (current_function_decl, decl);
8012
8d08fdba 8013 if (TREE_CODE (decl) == VAR_DECL)
57b52417 8014 layout_var_decl (decl);
8d08fdba
MS
8015
8016 /* Output the assembler code and/or RTL code for variables and functions,
8017 unless the type is an undefined structure or union.
8018 If not, it will get done when the type is completed. */
8d08fdba
MS
8019 if (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == FUNCTION_DECL
8020 || TREE_CODE (decl) == RESULT_DECL)
8021 {
27778b73
MM
8022 if (TREE_CODE (decl) == VAR_DECL)
8023 maybe_commonize_var (decl);
8d08fdba 8024
27778b73 8025 make_rtl_for_nonlocal_decl (decl, init, asmspec);
8d08fdba 8026
68642fb6 8027 if (TREE_CODE (type) == FUNCTION_TYPE
27778b73 8028 || TREE_CODE (type) == METHOD_TYPE)
68642fb6 8029 abstract_virtuals_error (decl,
27778b73 8030 strip_array_types (TREE_TYPE (type)));
68642fb6 8031 else
27778b73 8032 abstract_virtuals_error (decl, strip_array_types (type));
8d08fdba 8033
8d08fdba 8034 if (TREE_CODE (decl) == FUNCTION_DECL)
faae18ab 8035 ;
67d743fe
MS
8036 else if (DECL_EXTERNAL (decl)
8037 && ! (DECL_LANG_SPECIFIC (decl)
8038 && DECL_NOT_REALLY_EXTERN (decl)))
5566b478
MS
8039 {
8040 if (init)
8041 DECL_INITIAL (decl) = init;
8042 }
b35d4555 8043 else if (TREE_CODE (CP_DECL_CONTEXT (decl)) == FUNCTION_DECL)
8d08fdba 8044 {
b7b8bcd2 8045 /* This is a local declaration. */
b35d4555
MM
8046 if (doing_semantic_analysis_p ())
8047 maybe_inject_for_scope_var (decl);
b7b8bcd2
MM
8048 /* Initialize the local variable. But, if we're building a
8049 statement-tree, we'll do the initialization when we
8050 expand the tree. */
24bef158
MM
8051 if (processing_template_decl)
8052 {
8053 if (init || DECL_INITIAL (decl) == error_mark_node)
8054 DECL_INITIAL (decl) = init;
8055 }
8056 else
8057 {
b35d4555
MM
8058 /* If we're not building RTL, then we need to do so
8059 now. */
24bef158
MM
8060 if (!building_stmt_tree ())
8061 emit_local_var (decl);
b35d4555 8062 /* Initialize the variable. */
24bef158
MM
8063 initialize_local_var (decl, init, flags);
8064 /* Clean up the variable. */
8065 destroy_local_var (decl);
8066 }
8d08fdba 8067 }
9ed9e79a
MM
8068 else if (TREE_STATIC (decl) && type != error_mark_node)
8069 {
8070 /* Cleanups for static variables are handled by `finish_file'. */
8071 if (TYPE_NEEDS_CONSTRUCTING (type) || init != NULL_TREE
834c6dff 8072 || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
9ed9e79a
MM
8073 expand_static_init (decl, init);
8074 }
8d08fdba
MS
8075 finish_end0:
8076
8077 /* Undo call to `pushclass' that was done in `start_decl'
8078 due to initialization of qualified member variable.
8079 I.e., Foo::x = 10; */
8080 {
4f1c5b7d 8081 tree context = CP_DECL_CONTEXT (decl);
8d08fdba 8082 if (context
2f939d94 8083 && TYPE_P (context)
8d08fdba
MS
8084 && (TREE_CODE (decl) == VAR_DECL
8085 /* We also have a pushclass done that we need to undo here
8086 if we're at top level and declare a method. */
5566b478
MS
8087 || TREE_CODE (decl) == FUNCTION_DECL)
8088 /* If size hasn't been set, we're still defining it,
8089 and therefore inside the class body; don't pop
8090 the binding level.. */
d0f062fb 8091 && COMPLETE_TYPE_P (context)
5566b478 8092 && context == current_class_type)
6b400b21 8093 pop_nested_class ();
8d08fdba
MS
8094 }
8095 }
8096
8097 finish_end:
8098
8d08fdba
MS
8099 if (was_readonly)
8100 TREE_READONLY (decl) = 1;
8d08fdba
MS
8101}
8102
82580166 8103/* This is here for a midend callback from c-common.c */
e92cc029 8104
82580166
MS
8105void
8106finish_decl (decl, init, asmspec_tree)
8107 tree decl, init;
8108 tree asmspec_tree;
8109{
cd9f6678 8110 cp_finish_decl (decl, init, asmspec_tree, 0);
82580166
MS
8111}
8112
db4283a0
MM
8113/* Returns a declaration for a VAR_DECL as if:
8114
8115 extern "C" TYPE NAME;
8116
8117 had been seen. Used to create compiler-generated global
8118 variables. */
8119
8120tree
8121declare_global_var (name, type)
8122 tree name;
8123 tree type;
8124{
8125 tree decl;
8126
8127 push_to_top_level ();
8128 decl = build_decl (VAR_DECL, name, type);
8129 TREE_PUBLIC (decl) = 1;
8130 DECL_EXTERNAL (decl) = 1;
8131 DECL_ARTIFICIAL (decl) = 1;
8132 pushdecl (decl);
8133 cp_finish_decl (decl, NULL_TREE, NULL_TREE, 0);
8134 pop_from_top_level ();
8135
8136 return decl;
8137}
8138
8139/* Returns a pointer to the `atexit' function. Note that if
8140 FLAG_USE_CXA_ATEXIT is non-zero, then this will actually be the new
8141 `__cxa_atexit' function specified in the IA64 C++ ABI. */
8142
8143static tree
8144get_atexit_node ()
8145{
8146 tree atexit_fndecl;
8147 tree arg_types;
8148 tree fn_type;
8149 tree fn_ptr_type;
8150 const char *name;
8151
8152 if (atexit_node)
8153 return atexit_node;
8154
8155 if (flag_use_cxa_atexit)
8156 {
8157 /* The declaration for `__cxa_atexit' is:
8158
8159 int __cxa_atexit (void (*)(void *), void *, void *)
8160
8161 We build up the argument types and then then function type
8162 itself. */
68642fb6 8163
db4283a0
MM
8164 /* First, build the pointer-to-function type for the first
8165 argument. */
8166 arg_types = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
8167 fn_type = build_function_type (void_type_node, arg_types);
8168 fn_ptr_type = build_pointer_type (fn_type);
8169 /* Then, build the rest of the argument types. */
8170 arg_types = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
8171 arg_types = tree_cons (NULL_TREE, ptr_type_node, arg_types);
8172 arg_types = tree_cons (NULL_TREE, fn_ptr_type, arg_types);
8173 /* And the final __cxa_atexit type. */
8174 fn_type = build_function_type (integer_type_node, arg_types);
8175 fn_ptr_type = build_pointer_type (fn_type);
8176 name = "__cxa_atexit";
8177 }
8178 else
8179 {
8180 /* The declaration for `atexit' is:
68642fb6 8181
db4283a0
MM
8182 int atexit (void (*)());
8183
8184 We build up the argument types and then then function type
8185 itself. */
8186 fn_type = build_function_type (void_type_node, void_list_node);
8187 fn_ptr_type = build_pointer_type (fn_type);
8188 arg_types = tree_cons (NULL_TREE, fn_ptr_type, void_list_node);
8189 /* Build the final atexit type. */
8190 fn_type = build_function_type (integer_type_node, arg_types);
8191 name = "atexit";
8192 }
8193
8194 /* Now, build the function declaration. */
8195 push_lang_context (lang_name_c);
0c11ada6 8196 atexit_fndecl = build_library_fn_ptr (name, fn_type);
db4283a0
MM
8197 mark_used (atexit_fndecl);
8198 pop_lang_context ();
8199 atexit_node = default_conversion (atexit_fndecl);
8200
8201 return atexit_node;
8202}
8203
8204/* Returns the __dso_handle VAR_DECL. */
8205
8206static tree
8207get_dso_handle_node ()
8208{
8209 if (dso_handle_node)
8210 return dso_handle_node;
8211
8212 /* Declare the variable. */
8213 dso_handle_node = declare_global_var (get_identifier ("__dso_handle"),
8214 ptr_type_node);
8215
8216 return dso_handle_node;
8217}
8218
8219/* Begin a new function with internal linkage whose job will be simply
8220 to destroy some particular variable. */
8221
8222static tree
8223start_cleanup_fn ()
8224{
8225 static int counter = 0;
8226 int old_interface_unknown = interface_unknown;
8227 char name[32];
8228 tree parmtypes;
8229 tree fntype;
8230 tree fndecl;
8231
8232 push_to_top_level ();
8233
8234 /* No need to mangle this. */
8235 push_lang_context (lang_name_c);
8236
8237 interface_unknown = 1;
8238
8239 /* Build the parameter-types. */
8240 parmtypes = void_list_node;
8241 /* Functions passed to __cxa_atexit take an additional parameter.
8242 We'll just ignore it. After we implement the new calling
8243 convention for destructors, we can eliminate the use of
8244 additional cleanup functions entirely in the -fnew-abi case. */
8245 if (flag_use_cxa_atexit)
8246 parmtypes = tree_cons (NULL_TREE, ptr_type_node, parmtypes);
8247 /* Build the function type itself. */
8248 fntype = build_function_type (void_type_node, parmtypes);
8249 /* Build the name of the function. */
8250 sprintf (name, "__tcf_%d", counter++);
8251 /* Build the function declaration. */
8252 fndecl = build_lang_decl (FUNCTION_DECL, get_identifier (name), fntype);
8253 /* It's a function with internal linkage, generated by the
8254 compiler. */
8255 TREE_PUBLIC (fndecl) = 0;
8256 DECL_ARTIFICIAL (fndecl) = 1;
8257 /* Build the parameter. */
8258 if (flag_use_cxa_atexit)
8259 {
8260 tree parmdecl;
8261
8262 parmdecl = build_decl (PARM_DECL, NULL_TREE, ptr_type_node);
8263 DECL_CONTEXT (parmdecl) = fndecl;
8264 DECL_ARG_TYPE (parmdecl) = ptr_type_node;
8265 TREE_USED (parmdecl) = 1;
8266 DECL_ARGUMENTS (fndecl) = parmdecl;
8267 }
8268
09ed39ad 8269 pushdecl (fndecl);
db4283a0
MM
8270 start_function (/*specs=*/NULL_TREE, fndecl, NULL_TREE, SF_PRE_PARSED);
8271 do_pushlevel ();
8272
8273 interface_unknown = old_interface_unknown;
8274
8275 pop_lang_context ();
8276
8277 return current_function_decl;
8278}
8279
8280/* Finish the cleanup function begun by start_cleanup_fn. */
8281
8282static void
8283end_cleanup_fn ()
8284{
8285 do_poplevel ();
8286
0acf7199 8287 expand_body (finish_function (0));
db4283a0
MM
8288
8289 pop_from_top_level ();
8290}
8291
bf419747
MM
8292/* Generate code to handle the destruction of DECL, an object with
8293 static storage duration. */
f0105ed3 8294
bf419747
MM
8295void
8296register_dtor_fn (decl)
f0105ed3
MM
8297 tree decl;
8298{
db4283a0 8299 tree cleanup;
f0105ed3 8300 tree compound_stmt;
db4283a0
MM
8301 tree args;
8302 tree fcall;
f0105ed3 8303
db4283a0 8304 int saved_flag_access_control;
f0105ed3 8305
834c6dff 8306 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
bf419747
MM
8307 return;
8308
f0105ed3
MM
8309 /* Call build_cleanup before we enter the anonymous function so that
8310 any access checks will be done relative to the current scope,
8311 rather than the scope of the anonymous function. */
8312 build_cleanup (decl);
8313
8314 /* Now start the function. */
db4283a0 8315 cleanup = start_cleanup_fn ();
f0105ed3
MM
8316
8317 /* Now, recompute the cleanup. It may contain SAVE_EXPRs that refer
8318 to the original function, rather than the anonymous one. That
8319 will make the back-end think that nested functions are in use,
8320 which causes confusion. */
8321 saved_flag_access_control = flag_access_control;
8322 flag_access_control = 0;
8323 fcall = build_cleanup (decl);
8324 flag_access_control = saved_flag_access_control;
8325
8326 /* Create the body of the anonymous function. */
8327 compound_stmt = begin_compound_stmt (/*has_no_scope=*/0);
8328 finish_expr_stmt (fcall);
8329 finish_compound_stmt (/*has_no_scope=*/0, compound_stmt);
db4283a0 8330 end_cleanup_fn ();
f0105ed3
MM
8331
8332 /* Call atexit with the cleanup function. */
8333 mark_addressable (cleanup);
8334 cleanup = build_unary_op (ADDR_EXPR, cleanup, 0);
db4283a0
MM
8335 if (flag_use_cxa_atexit)
8336 {
8337 args = tree_cons (NULL_TREE, get_dso_handle_node (), NULL_TREE);
8338 args = tree_cons (NULL_TREE, null_pointer_node, args);
8339 args = tree_cons (NULL_TREE, cleanup, args);
8340 }
8341 else
8342 args = tree_cons (NULL_TREE, cleanup, NULL_TREE);
8343 finish_expr_stmt (build_function_call (get_atexit_node (), args));
f0105ed3
MM
8344}
8345
8d08fdba
MS
8346void
8347expand_static_init (decl, init)
8348 tree decl;
8349 tree init;
8350{
8351 tree oldstatic = value_member (decl, static_aggregates);
a4443a08 8352
8d08fdba
MS
8353 if (oldstatic)
8354 {
8355 if (TREE_PURPOSE (oldstatic) && init != NULL_TREE)
8251199e 8356 cp_error ("multiple initializations given for `%D'", decl);
8d08fdba 8357 }
0aafb128 8358 else if (! toplevel_bindings_p ())
8d08fdba
MS
8359 {
8360 /* Emit code to perform this initialization but once. */
8361 tree temp;
b7b8bcd2 8362 tree if_stmt;
f0105ed3 8363 tree then_clause;
f1dedc31
MM
8364 tree assignment;
8365 tree temp_init;
8d08fdba 8366
2036a15c
MM
8367 /* Emit code to perform this initialization but once. This code
8368 looks like:
8369
8370 static int temp = 0;
8371 if (!temp) {
8372 // Do initialization.
8373 temp = 1;
8374 // Register variable for destruction at end of program.
8375 }
8376
8377 Note that the `temp' variable is only set to 1 *after* the
8378 initialization is complete. This ensures that an exception,
8379 thrown during the construction, will cause the variable to
8380 reinitialized when we pass through this code again, as per:
68642fb6 8381
2036a15c
MM
8382 [stmt.dcl]
8383
8384 If the initialization exits by throwing an exception, the
8385 initialization is not complete, so it will be tried again
8386 the next time control enters the declaration.
8387
8388 In theory, this process should be thread-safe, too; multiple
8389 threads should not be able to initialize the variable more
8390 than once. We don't yet attempt to ensure thread-safety. */
8d08fdba
MS
8391 temp = get_temp_name (integer_type_node, 1);
8392 rest_of_decl_compilation (temp, NULL_PTR, 0, 0);
2036a15c
MM
8393
8394 /* Begin the conditional initialization. */
b7b8bcd2
MM
8395 if_stmt = begin_if_stmt ();
8396 finish_if_stmt_cond (build_binary_op (EQ_EXPR, temp,
68642fb6 8397 integer_zero_node),
b7b8bcd2 8398 if_stmt);
f0105ed3 8399 then_clause = begin_compound_stmt (/*has_no_scope=*/0);
72b7eeff 8400
2036a15c 8401 /* Do the initialization itself. */
28cbf42c 8402 if (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))
f30432d7 8403 || (init && TREE_CODE (init) == TREE_LIST))
f1dedc31 8404 assignment = build_aggr_init (decl, init, 0);
f30432d7 8405 else if (init)
c557501d
MM
8406 /* The initialization we're doing here is just a bitwise
8407 copy. */
8408 assignment = build (INIT_EXPR, TREE_TYPE (decl), decl, init);
f1dedc31
MM
8409 else
8410 assignment = NULL_TREE;
8411
8412 /* Once the assignment is complete, set TEMP to 1. Since the
8413 construction of the static object is complete at this point,
8414 we want to make sure TEMP is set to 1 even if a temporary
8415 constructed during the initialization throws an exception
8416 when it is destroyed. So, we combine the initialization and
8417 the assignment to TEMP into a single expression, ensuring
8418 that when we call finish_expr_stmt the cleanups will not be
8419 run until after TEMP is set to 1. */
8420 temp_init = build_modify_expr (temp, NOP_EXPR, integer_one_node);
8421 if (assignment)
8422 {
8423 assignment = tree_cons (NULL_TREE, assignment,
68642fb6 8424 build_tree_list (NULL_TREE,
f1dedc31
MM
8425 temp_init));
8426 assignment = build_compound_expr (assignment);
8427 }
8428 else
8429 assignment = temp_init;
8430 finish_expr_stmt (assignment);
72b7eeff 8431
2036a15c
MM
8432 /* Use atexit to register a function for destroying this static
8433 variable. */
bf419747 8434 register_dtor_fn (decl);
72b7eeff 8435
f0105ed3 8436 finish_compound_stmt (/*has_no_scope=*/0, then_clause);
b7b8bcd2
MM
8437 finish_then_clause (if_stmt);
8438 finish_if_stmt ();
8d08fdba
MS
8439 }
8440 else
bbd15aac 8441 static_aggregates = tree_cons (init, decl, static_aggregates);
8d08fdba 8442}
3c5c0849
MM
8443
8444/* Finish the declaration of a catch-parameter. */
8445
b35d4555 8446tree
3c5c0849
MM
8447start_handler_parms (declspecs, declarator)
8448 tree declspecs;
8449 tree declarator;
8450{
8451 tree decl;
8452 if (declspecs)
8453 {
8454 decl = grokdeclarator (declarator, declspecs, CATCHPARM,
8455 1, NULL_TREE);
8456 if (decl == NULL_TREE)
8457 error ("invalid catch parameter");
8458 }
8459 else
8460 decl = NULL_TREE;
b35d4555
MM
8461
8462 return decl;
3c5c0849
MM
8463}
8464
8d08fdba
MS
8465\f
8466/* Make TYPE a complete type based on INITIAL_VALUE.
8467 Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
6ab5c740 8468 2 if there was no information (in which case assume 0 if DO_DEFAULT). */
8d08fdba
MS
8469
8470int
8471complete_array_type (type, initial_value, do_default)
8472 tree type, initial_value;
8473 int do_default;
8474{
8475 register tree maxindex = NULL_TREE;
8476 int value = 0;
68642fb6 8477
8d08fdba
MS
8478 if (initial_value)
8479 {
8480 /* Note MAXINDEX is really the maximum index,
8481 one less than the size. */
8482 if (TREE_CODE (initial_value) == STRING_CST)
e1cd6e56
MS
8483 {
8484 int eltsize
8485 = int_size_in_bytes (TREE_TYPE (TREE_TYPE (initial_value)));
8486 maxindex = build_int_2 ((TREE_STRING_LENGTH (initial_value)
8487 / eltsize) - 1, 0);
8488 }
8d08fdba
MS
8489 else if (TREE_CODE (initial_value) == CONSTRUCTOR)
8490 {
e1cd6e56 8491 tree elts = CONSTRUCTOR_ELTS (initial_value);
fed3cef0
RK
8492
8493 maxindex = ssize_int (-1);
e1cd6e56
MS
8494 for (; elts; elts = TREE_CHAIN (elts))
8495 {
8496 if (TREE_PURPOSE (elts))
8497 maxindex = TREE_PURPOSE (elts);
8498 else
fed3cef0 8499 maxindex = size_binop (PLUS_EXPR, maxindex, ssize_int (1));
e1cd6e56
MS
8500 }
8501 maxindex = copy_node (maxindex);
8d08fdba
MS
8502 }
8503 else
8504 {
8505 /* Make an error message unless that happened already. */
8506 if (initial_value != error_mark_node)
8507 value = 1;
0db982be
ML
8508 else
8509 initial_value = NULL_TREE;
8d08fdba
MS
8510
8511 /* Prevent further error messages. */
8512 maxindex = build_int_2 (0, 0);
8513 }
8514 }
8515
8516 if (!maxindex)
8517 {
8518 if (do_default)
8519 maxindex = build_int_2 (0, 0);
8520 value = 2;
8521 }
8522
8523 if (maxindex)
8524 {
51c184be 8525 tree itype;
6ab5c740
NS
8526 tree domain;
8527
8528 domain = build_index_type (maxindex);
8529 TYPE_DOMAIN (type) = domain;
51c184be 8530
dff6b454 8531 if (! TREE_TYPE (maxindex))
6ab5c740 8532 TREE_TYPE (maxindex) = domain;
51c184be
MS
8533 if (initial_value)
8534 itype = TREE_TYPE (initial_value);
8535 else
8536 itype = NULL;
8537 if (itype && !TYPE_DOMAIN (itype))
6ab5c740 8538 TYPE_DOMAIN (itype) = domain;
dff6b454
RK
8539 /* The type of the main variant should never be used for arrays
8540 of different sizes. It should only ever be completed with the
8541 size of the array. */
8542 if (! TYPE_DOMAIN (TYPE_MAIN_VARIANT (type)))
6ab5c740 8543 TYPE_DOMAIN (TYPE_MAIN_VARIANT (type)) = domain;
8d08fdba
MS
8544 }
8545
8546 /* Lay out the type now that we can get the real answer. */
8547
8548 layout_type (type);
8549
8550 return value;
8551}
8552\f
8553/* Return zero if something is declared to be a member of type
8554 CTYPE when in the context of CUR_TYPE. STRING is the error
8555 message to print in that case. Otherwise, quietly return 1. */
e92cc029 8556
8d08fdba 8557static int
4dacf5bd 8558member_function_or_else (ctype, cur_type, flags)
8d08fdba 8559 tree ctype, cur_type;
4dacf5bd 8560 enum overload_flags flags;
8d08fdba
MS
8561{
8562 if (ctype && ctype != cur_type)
8563 {
4dacf5bd
KG
8564 if (flags == DTOR_FLAG)
8565 error ("destructor for alien class `%s' cannot be a member",
8566 TYPE_NAME_STRING (ctype));
8567 else
8568 error ("constructor for alien class `%s' cannot be a member",
8569 TYPE_NAME_STRING (ctype));
8d08fdba
MS
8570 return 0;
8571 }
8572 return 1;
8573}
8574\f
8575/* Subroutine of `grokdeclarator'. */
8576
8577/* Generate errors possibly applicable for a given set of specifiers.
8578 This is for ARM $7.1.2. */
e92cc029 8579
8d08fdba
MS
8580static void
8581bad_specifiers (object, type, virtualp, quals, inlinep, friendp, raises)
8582 tree object;
d8e178a0 8583 const char *type;
8d08fdba
MS
8584 int virtualp, quals, friendp, raises, inlinep;
8585{
8586 if (virtualp)
8251199e 8587 cp_error ("`%D' declared as a `virtual' %s", object, type);
8d08fdba 8588 if (inlinep)
8251199e 8589 cp_error ("`%D' declared as an `inline' %s", object, type);
8d08fdba 8590 if (quals)
8251199e 8591 cp_error ("`const' and `volatile' function specifiers on `%D' invalid in %s declaration",
a28e3c7f 8592 object, type);
8d08fdba 8593 if (friendp)
f8e55f34 8594 cp_error_at ("`%D' declared as a friend", object);
f3e4d63c 8595 if (raises)
f8e55f34 8596 cp_error_at ("`%D' declared with an exception specification", object);
8d08fdba
MS
8597}
8598
8599/* CTYPE is class type, or null if non-class.
8600 TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
8601 or METHOD_TYPE.
8602 DECLARATOR is the function's name.
8603 VIRTUALP is truthvalue of whether the function is virtual or not.
8604 FLAGS are to be passed through to `grokclassfn'.
8605 QUALS are qualifiers indicating whether the function is `const'
8606 or `volatile'.
8607 RAISES is a list of exceptions that this function can raise.
8608 CHECK is 1 if we must find this method in CTYPE, 0 if we should
68642fb6 8609 not look, and -1 if we should not call `grokclassfn' at all.
3ddfb0e6 8610
20496fa2 8611 Returns `NULL_TREE' if something goes wrong, after issuing
3ddfb0e6 8612 applicable error messages. */
e92cc029 8613
8d08fdba 8614static tree
386b8a85 8615grokfndecl (ctype, type, declarator, orig_declarator, virtualp, flags, quals,
7a8f9fa9 8616 raises, check, friendp, publicp, inlinep, funcdef_flag,
2c73f9f5 8617 template_count, in_namespace)
8d08fdba
MS
8618 tree ctype, type;
8619 tree declarator;
386b8a85 8620 tree orig_declarator;
8d08fdba
MS
8621 int virtualp;
8622 enum overload_flags flags;
7a8f9fa9 8623 tree quals, raises;
386b8a85 8624 int check, friendp, publicp, inlinep, funcdef_flag, template_count;
2c73f9f5 8625 tree in_namespace;
8d08fdba
MS
8626{
8627 tree cname, decl;
8628 int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
856216bb 8629 int has_default_arg = 0;
42976354 8630 tree t;
8d08fdba
MS
8631
8632 if (ctype)
8633 cname = TREE_CODE (TYPE_NAME (ctype)) == TYPE_DECL
8634 ? TYPE_IDENTIFIER (ctype) : TYPE_NAME (ctype);
8635 else
8636 cname = NULL_TREE;
8637
8638 if (raises)
8639 {
f30432d7 8640 type = build_exception_variant (type, raises);
8d08fdba 8641 }
c11b6f21 8642
8d08fdba 8643 decl = build_lang_decl (FUNCTION_DECL, declarator, type);
2c73f9f5 8644 /* Propagate volatile out from type to decl. */
8d08fdba 8645 if (TYPE_VOLATILE (type))
893de33c 8646 TREE_THIS_VOLATILE (decl) = 1;
8d08fdba 8647
79c4d4b7 8648 /* If this decl has namespace scope, set that up. */
2c73f9f5 8649 if (in_namespace)
b262d64c 8650 set_decl_namespace (decl, in_namespace, friendp);
79c4d4b7
JM
8651 else if (publicp && ! ctype)
8652 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
2c73f9f5 8653
0f8766b8
JM
8654 /* `main' and builtins have implicit 'C' linkage. */
8655 if ((MAIN_NAME_P (declarator)
8656 || (IDENTIFIER_LENGTH (declarator) > 10
8657 && IDENTIFIER_POINTER (declarator)[0] == '_'
8658 && IDENTIFIER_POINTER (declarator)[1] == '_'
8659 && strncmp (IDENTIFIER_POINTER (declarator)+2, "builtin_", 8) == 0))
8660 && current_lang_name == lang_name_cplusplus
94706a5c 8661 && ctype == NULL_TREE
79c4d4b7
JM
8662 /* NULL_TREE means global namespace. */
8663 && DECL_CONTEXT (decl) == NULL_TREE)
0f8766b8
JM
8664 DECL_LANGUAGE (decl) = lang_c;
8665
8d08fdba
MS
8666 /* Should probably propagate const out from type to decl I bet (mrs). */
8667 if (staticp)
8668 {
8669 DECL_STATIC_FUNCTION_P (decl) = 1;
8670 DECL_CONTEXT (decl) = ctype;
8d08fdba
MS
8671 }
8672
e76a2646 8673 if (ctype)
4f1c5b7d 8674 DECL_CONTEXT (decl) = ctype;
e76a2646 8675
0f8766b8 8676 if (ctype == NULL_TREE && DECL_MAIN_P (decl))
faae18ab 8677 {
848b92e1 8678 if (processing_template_decl)
cb9a3ff8 8679 error ("cannot declare `::main' to be a template");
faae18ab 8680 if (inlinep)
cb9a3ff8 8681 error ("cannot declare `::main' to be inline");
faae18ab 8682 else if (! publicp)
cb9a3ff8 8683 error ("cannot declare `::main' to be static");
faae18ab
MS
8684 inlinep = 0;
8685 publicp = 1;
8686 }
50a6dbd7 8687
59e76fc6
JM
8688 /* Members of anonymous types and local classes have no linkage; make
8689 them internal. */
8690 if (ctype && (ANON_AGGRNAME_P (TYPE_IDENTIFIER (ctype))
4f1c5b7d 8691 || decl_function_context (TYPE_MAIN_DECL (ctype))))
50a6dbd7
JM
8692 publicp = 0;
8693
8694 if (publicp)
8695 {
8696 /* [basic.link]: A name with no linkage (notably, the name of a class
8697 or enumeration declared in a local scope) shall not be used to
8698 declare an entity with linkage.
8699
8700 Only check this for public decls for now. */
8701 t = no_linkage_check (TREE_TYPE (decl));
8702 if (t)
8703 {
7f7c930e
JM
8704 if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
8705 {
8706 if (DECL_LANGUAGE (decl) == lang_c)
8707 /* Allow this; it's pretty common in C. */;
8708 else
8709 cp_pedwarn ("non-local function `%#D' uses anonymous type",
8710 decl);
8711 }
50a6dbd7 8712 else
8251199e 8713 cp_pedwarn ("non-local function `%#D' uses local type `%T'",
cce2be43 8714 decl, t);
50a6dbd7
JM
8715 }
8716 }
8717
893de33c 8718 TREE_PUBLIC (decl) = publicp;
faae18ab 8719 if (! publicp)
893de33c
JM
8720 {
8721 DECL_INTERFACE_KNOWN (decl) = 1;
8722 DECL_NOT_REALLY_EXTERN (decl) = 1;
8723 }
faae18ab
MS
8724
8725 if (inlinep)
8726 DECL_THIS_INLINE (decl) = DECL_INLINE (decl) = 1;
8d08fdba
MS
8727
8728 DECL_EXTERNAL (decl) = 1;
8729 if (quals != NULL_TREE && TREE_CODE (type) == FUNCTION_TYPE)
8730 {
8251199e 8731 cp_error ("%smember function `%D' cannot have `%T' method qualifier",
8d08fdba
MS
8732 (ctype ? "static " : "non-"), decl, TREE_VALUE (quals));
8733 quals = NULL_TREE;
8734 }
8735
8736 if (IDENTIFIER_OPNAME_P (DECL_NAME (decl)))
8737 grok_op_properties (decl, virtualp, check < 0);
8738
4f1c5b7d 8739 if (ctype && decl_function_context (decl))
893de33c 8740 DECL_NO_STATIC_CHAIN (decl) = 1;
e76a2646 8741
42976354
BK
8742 for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
8743 if (TREE_PURPOSE (t)
8744 && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
8745 {
856216bb 8746 has_default_arg = 1;
42976354
BK
8747 break;
8748 }
8749
f9d94ea4
JM
8750 if (friendp
8751 && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
8752 {
8753 if (funcdef_flag)
8251199e
JM
8754 cp_error
8755 ("defining explicit specialization `%D' in friend declaration",
f9d94ea4
JM
8756 orig_declarator);
8757 else
8758 {
7e2421f7
MM
8759 if (PROCESSING_REAL_TEMPLATE_DECL_P ())
8760 {
8761 /* Something like `template <class T> friend void f<T>()'. */
cb9a3ff8 8762 cp_error ("invalid use of template-id `%D' in declaration of primary template",
7e2421f7 8763 orig_declarator);
20496fa2 8764 return NULL_TREE;
7e2421f7
MM
8765 }
8766
856216bb 8767
f9d94ea4
JM
8768 /* A friend declaration of the form friend void f<>(). Record
8769 the information in the TEMPLATE_ID_EXPR. */
8770 SET_DECL_IMPLICIT_INSTANTIATION (decl);
8771 DECL_TEMPLATE_INFO (decl)
e1b3e07d
MM
8772 = tree_cons (TREE_OPERAND (orig_declarator, 0),
8773 TREE_OPERAND (orig_declarator, 1),
8774 NULL_TREE);
856216bb
MM
8775
8776 if (has_default_arg)
8777 {
8778 cp_error ("default arguments are not allowed in declaration of friend template specialization `%D'",
8779 decl);
8780 return NULL_TREE;
8781 }
8782
8783 if (inlinep)
8784 {
68642fb6 8785 cp_error ("`inline' is not allowed in declaration of friend template specialization `%D'",
856216bb
MM
8786 decl);
8787 return NULL_TREE;
8788 }
f9d94ea4 8789 }
f84b4be9 8790 }
386b8a85 8791
856216bb
MM
8792 if (has_default_arg)
8793 add_defarg_fn (decl);
8794
0f8766b8
JM
8795 /* Plain overloading: will not be grok'd by grokclassfn. */
8796 if (! ctype && ! processing_template_decl
8797 && DECL_LANGUAGE (decl) != lang_c
8798 && (! DECL_USE_TEMPLATE (decl) || name_mangling_version < 1))
8799 set_mangled_name_for_decl (decl);
8800
1eb0072d
JM
8801 if (funcdef_flag)
8802 /* Make the init_value nonzero so pushdecl knows this is not
8803 tentative. error_mark_node is replaced later with the BLOCK. */
8804 DECL_INITIAL (decl) = error_mark_node;
8805
93ca4ba7 8806 if (TYPE_NOTHROW_P (type) || nothrow_libfn_p (decl))
1660cb3a
JM
8807 TREE_NOTHROW (decl) = 1;
8808
75650646 8809 /* Caller will do the rest of this. */
8d08fdba
MS
8810 if (check < 0)
8811 return decl;
8812
8813 if (flags == NO_SPECIAL && ctype && constructor_name (cname) == declarator)
74b846e0
MM
8814 DECL_CONSTRUCTOR_P (decl) = 1;
8815
8816 /* Function gets the ugly name, field gets the nice one. This call
8817 may change the type of the function (because of default
8818 parameters)! */
8819 if (ctype != NULL_TREE)
8820 grokclassfn (ctype, decl, flags, quals);
8821
8822 decl = check_explicit_specialization (orig_declarator, decl,
8823 template_count,
8824 2 * (funcdef_flag != 0) +
8825 4 * (friendp != 0));
8826 if (decl == error_mark_node)
8827 return NULL_TREE;
98c1c668 8828
74b846e0
MM
8829 if (ctype != NULL_TREE
8830 && (! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
8831 && check)
8d08fdba 8832 {
74b846e0 8833 tree old_decl;
8d08fdba 8834
74b846e0 8835 old_decl = check_classfn (ctype, decl);
8d08fdba 8836
74b846e0
MM
8837 if (old_decl && TREE_CODE (old_decl) == TEMPLATE_DECL)
8838 /* Because grokfndecl is always supposed to return a
8839 FUNCTION_DECL, we pull out the DECL_TEMPLATE_RESULT
8840 here. We depend on our callers to figure out that its
8841 really a template that's being returned. */
8842 old_decl = DECL_TEMPLATE_RESULT (old_decl);
6c30752f 8843
74b846e0
MM
8844 if (old_decl && DECL_STATIC_FUNCTION_P (old_decl)
8845 && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
5566b478 8846 {
74b846e0
MM
8847 /* Remove the `this' parm added by grokclassfn.
8848 XXX Isn't this done in start_function, too? */
3afb32a4 8849 revert_static_member_fn (decl);
74b846e0 8850 last_function_parms = TREE_CHAIN (last_function_parms);
5566b478 8851 }
74b846e0
MM
8852 if (old_decl && DECL_ARTIFICIAL (old_decl))
8853 cp_error ("definition of implicitly-declared `%D'", old_decl);
8d08fdba 8854
74b846e0 8855 if (old_decl)
8d08fdba 8856 {
74b846e0
MM
8857 /* Since we've smashed OLD_DECL to its
8858 DECL_TEMPLATE_RESULT, we must do the same to DECL. */
8859 if (TREE_CODE (decl) == TEMPLATE_DECL)
8860 decl = DECL_TEMPLATE_RESULT (decl);
8861
8862 /* Attempt to merge the declarations. This can fail, in
8863 the case of some illegal specialization declarations. */
8864 if (!duplicate_decls (decl, old_decl))
8865 cp_error ("no `%#D' member function declared in class `%T'",
8866 decl, ctype);
8867 return old_decl;
8d08fdba
MS
8868 }
8869 }
74b846e0
MM
8870
8871 if (DECL_CONSTRUCTOR_P (decl) && !grok_ctor_properties (ctype, decl))
8872 return NULL_TREE;
8873
8874 if (ctype == NULL_TREE || check)
8875 return decl;
8876
8877 if (virtualp)
8878 {
8879 DECL_VIRTUAL_P (decl) = 1;
8880 if (DECL_VINDEX (decl) == NULL_TREE)
8881 DECL_VINDEX (decl) = error_mark_node;
8882 IDENTIFIER_VIRTUAL_P (DECL_NAME (decl)) = 1;
8883 }
8884
8d08fdba
MS
8885 return decl;
8886}
8887
8888static tree
2c73f9f5 8889grokvardecl (type, declarator, specbits_in, initialized, constp, in_namespace)
8d08fdba
MS
8890 tree type;
8891 tree declarator;
d2e5ee5c 8892 RID_BIT_TYPE *specbits_in;
8d08fdba 8893 int initialized;
a9aedbc2 8894 int constp;
2c73f9f5 8895 tree in_namespace;
8d08fdba
MS
8896{
8897 tree decl;
f7da6097
MS
8898 RID_BIT_TYPE specbits;
8899
8900 specbits = *specbits_in;
8d08fdba
MS
8901
8902 if (TREE_CODE (type) == OFFSET_TYPE)
8903 {
8904 /* If you declare a static member so that it
8905 can be initialized, the code will reach here. */
5b605f68
MS
8906 tree basetype = TYPE_OFFSET_BASETYPE (type);
8907 type = TREE_TYPE (type);
4ce3d537 8908 decl = build_lang_decl (VAR_DECL, declarator, type);
5b605f68 8909 DECL_CONTEXT (decl) = basetype;
f376e137 8910 DECL_ASSEMBLER_NAME (decl) = build_static_name (basetype, declarator);
8d08fdba
MS
8911 }
8912 else
30394414 8913 {
79c4d4b7
JM
8914 tree context;
8915
8916 if (in_namespace)
8917 context = in_namespace;
8918 else if (namespace_bindings_p () || RIDBIT_SETP (RID_EXTERN, specbits))
8919 context = current_namespace;
820fcad8
JM
8920 else
8921 context = NULL_TREE;
79c4d4b7 8922
68642fb6 8923 if (processing_template_decl)
cd9f6678
MM
8924 /* If we're in a template, we need DECL_LANG_SPECIFIC so that
8925 we can call push_template_decl. */
8926 decl = build_lang_decl (VAR_DECL, declarator, type);
9188c363 8927 else
c82dbd95 8928 decl = build_decl (VAR_DECL, declarator, type);
79c4d4b7
JM
8929
8930 if (context)
b262d64c 8931 set_decl_namespace (decl, context, 0);
79c4d4b7
JM
8932
8933 context = DECL_CONTEXT (decl);
8934 if (declarator && context && current_lang_name != lang_name_c)
8935 DECL_ASSEMBLER_NAME (decl) = build_static_name (context, declarator);
30394414 8936 }
6060a796 8937
2c73f9f5 8938 if (in_namespace)
b262d64c 8939 set_decl_namespace (decl, in_namespace, 0);
2c73f9f5 8940
8d08fdba
MS
8941 if (RIDBIT_SETP (RID_EXTERN, specbits))
8942 {
8943 DECL_THIS_EXTERN (decl) = 1;
8944 DECL_EXTERNAL (decl) = !initialized;
8945 }
8946
8947 /* In class context, static means one per class,
8948 public access, and static storage. */
2b9dc906 8949 if (DECL_CLASS_SCOPE_P (decl))
8d08fdba
MS
8950 {
8951 TREE_PUBLIC (decl) = 1;
8952 TREE_STATIC (decl) = 1;
5b605f68 8953 DECL_EXTERNAL (decl) = 0;
8d08fdba
MS
8954 }
8955 /* At top level, either `static' or no s.c. makes a definition
8956 (perhaps tentative), and absence of `static' makes it public. */
a9aedbc2 8957 else if (toplevel_bindings_p ())
8d08fdba 8958 {
a9aedbc2 8959 TREE_PUBLIC (decl) = (RIDBIT_NOTSETP (RID_STATIC, specbits)
9fffd093 8960 && (DECL_THIS_EXTERN (decl) || ! constp));
8d08fdba
MS
8961 TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
8962 }
8963 /* Not at top level, only `static' makes a static definition. */
8964 else
8965 {
8966 TREE_STATIC (decl) = !! RIDBIT_SETP (RID_STATIC, specbits);
8967 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
8968 }
50a6dbd7
JM
8969
8970 if (TREE_PUBLIC (decl))
8971 {
8972 /* [basic.link]: A name with no linkage (notably, the name of a class
8973 or enumeration declared in a local scope) shall not be used to
8974 declare an entity with linkage.
8975
8976 Only check this for public decls for now. */
8977 tree t = no_linkage_check (TREE_TYPE (decl));
8978 if (t)
8979 {
8980 if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
8981 /* Ignore for now; `enum { foo } e' is pretty common. */;
8982 else
8251199e 8983 cp_pedwarn ("non-local variable `%#D' uses local type `%T'",
50a6dbd7
JM
8984 decl, t);
8985 }
8986 }
8987
8d08fdba
MS
8988 return decl;
8989}
8990
d8f8dca1
MM
8991/* Create and return a canonical pointer to member function type, for
8992 TYPE, which is a POINTER_TYPE to a METHOD_TYPE. */
8d08fdba
MS
8993
8994tree
8995build_ptrmemfunc_type (type)
8996 tree type;
8997{
8998 tree fields[4];
8999 tree t;
9000 tree u;
46cbda4a 9001 tree unqualified_variant = NULL_TREE;
8d08fdba
MS
9002
9003 /* If a canonical type already exists for this type, use it. We use
9004 this method instead of type_hash_canon, because it only does a
9005 simple equality check on the list of field members. */
9006
9007 if ((t = TYPE_GET_PTRMEMFUNC_TYPE (type)))
9008 return t;
9009
46cbda4a
MM
9010 /* Make sure that we always have the unqualified pointer-to-member
9011 type first. */
9012 if (CP_TYPE_QUALS (type) != TYPE_UNQUALIFIED)
68642fb6 9013 unqualified_variant
46cbda4a
MM
9014 = build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type));
9015
33848bb0 9016 t = make_aggr_type (RECORD_TYPE);
2c73f9f5 9017 /* Let the front-end know this is a pointer to member function... */
db5ae43f 9018 TYPE_PTRMEMFUNC_FLAG (t) = 1;
2c73f9f5 9019 /* ... and not really an aggregate. */
7ddedda4 9020 SET_IS_AGGR_TYPE (t, 0);
8d08fdba 9021
c7e266a6
MM
9022 if (!flag_new_abi)
9023 {
9024 u = make_aggr_type (UNION_TYPE);
9025 SET_IS_AGGR_TYPE (u, 0);
9026 fields[0] = build_lang_decl (FIELD_DECL, pfn_identifier, type);
9027 fields[1] = build_lang_decl (FIELD_DECL, delta2_identifier,
9028 delta_type_node);
9029 finish_builtin_type (u, "__ptrmemfunc_type", fields, 1, ptr_type_node);
9030 TYPE_NAME (u) = NULL_TREE;
9031
9032 fields[0] = build_lang_decl (FIELD_DECL, delta_identifier,
9033 delta_type_node);
9034 fields[1] = build_lang_decl (FIELD_DECL, index_identifier,
9035 delta_type_node);
9036 fields[2] = build_lang_decl (FIELD_DECL, pfn_or_delta2_identifier, u);
9037 finish_builtin_type (t, "__ptrmemfunc_type", fields, 2, ptr_type_node);
9038 }
9039 else
9040 {
9041 fields[0] = build_lang_decl (FIELD_DECL, pfn_identifier, type);
9042 fields[1] = build_lang_decl (FIELD_DECL, delta_identifier,
9043 delta_type_node);
9044 finish_builtin_type (t, "__ptrmemfunc_type", fields, 1, ptr_type_node);
9045 }
8d08fdba 9046
8d08fdba
MS
9047 /* Zap out the name so that the back-end will give us the debugging
9048 information for this anonymous RECORD_TYPE. */
9049 TYPE_NAME (t) = NULL_TREE;
9050
46cbda4a
MM
9051 /* If this is not the unqualified form of this pointer-to-member
9052 type, set the TYPE_MAIN_VARIANT for this type to be the
9053 unqualified type. Since they are actually RECORD_TYPEs that are
9054 not variants of each other, we must do this manually. */
9055 if (CP_TYPE_QUALS (type) != TYPE_UNQUALIFIED)
9056 {
9057 t = build_qualified_type (t, CP_TYPE_QUALS (type));
9058 TYPE_MAIN_VARIANT (t) = unqualified_variant;
9059 TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (unqualified_variant);
9060 TYPE_NEXT_VARIANT (unqualified_variant) = t;
9061 }
9062
9063 /* Cache this pointer-to-member type so that we can find it again
9064 later. */
8d08fdba
MS
9065 TYPE_SET_PTRMEMFUNC_TYPE (type, t);
9066
e92cc029 9067 /* Seems to be wanted. */
8d08fdba 9068 CLASSTYPE_GOT_SEMICOLON (t) = 1;
46cbda4a 9069
8d08fdba
MS
9070 return t;
9071}
9072
b17e2870
JM
9073/* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
9074 Check to see that the definition is valid. Issue appropriate error
9075 messages. Return 1 if the definition is particularly bad, or 0
9076 otherwise. */
9077
9078int
9079check_static_variable_definition (decl, type)
9080 tree decl;
9081 tree type;
9082{
9083 /* Motion 10 at San Diego: If a static const integral data member is
9084 initialized with an integral constant expression, the initializer
9085 may appear either in the declaration (within the class), or in
9086 the definition, but not both. If it appears in the class, the
9087 member is a member constant. The file-scope definition is always
9088 required. */
9089 if (CLASS_TYPE_P (type) || TREE_CODE (type) == REFERENCE_TYPE)
9090 {
cb9a3ff8 9091 cp_error ("invalid in-class initialization of static data member of non-integral type `%T'",
b17e2870
JM
9092 type);
9093 /* If we just return the declaration, crashes will sometimes
9094 occur. We therefore return void_type_node, as if this was a
9095 friend declaration, to cause callers to completely ignore
9096 this declaration. */
9097 return 1;
9098 }
9099 else if (!CP_TYPE_CONST_P (type))
cb9a3ff8 9100 cp_error ("ISO C++ forbids in-class initialization of non-const static member `%D'",
b17e2870
JM
9101 decl);
9102 else if (pedantic && !INTEGRAL_TYPE_P (type))
cb9a3ff8 9103 cp_pedwarn ("ISO C++ forbids initialization of member constant `%D' of non-integral type `%T'", decl, type);
b17e2870
JM
9104
9105 return 0;
9106}
9107
2848ad0f
MM
9108/* Given the SIZE (i.e., number of elements) in an array, compute an
9109 appropriate index type for the array. If non-NULL, NAME is the
9110 name of the thing being declared. */
9111
c95cd22e 9112tree
2848ad0f
MM
9113compute_array_index_type (name, size)
9114 tree name;
9115 tree size;
9116{
9117 tree itype;
9118
9119 /* The size might be the result of a cast. */
9120 STRIP_TYPE_NOPS (size);
9121
9122 /* It might be a const variable or enumeration constant. */
9123 if (TREE_READONLY_DECL_P (size))
9124 size = decl_constant_value (size);
9125
9126 /* If this involves a template parameter, it will be a constant at
9127 instantiation time, but we don't know what the value is yet.
9128 Even if no template parameters are involved, we may an expression
9129 that is not a constant; we don't even simplify `1 + 2' when
9130 processing a template. */
9131 if (processing_template_decl)
9132 {
9133 /* Resolve a qualified reference to an enumerator or static
9134 const data member of ours. */
9135 if (TREE_CODE (size) == SCOPE_REF
9136 && TREE_OPERAND (size, 0) == current_class_type)
9137 {
9138 tree t = lookup_field (current_class_type,
9139 TREE_OPERAND (size, 1), 0, 0);
9140 if (t)
9141 size = t;
9142 }
9143
9144 return build_index_type (build_min (MINUS_EXPR, sizetype,
9145 size, integer_one_node));
9146 }
9147
9148 /* The array bound must be an integer type. */
9149 if (TREE_CODE (TREE_TYPE (size)) != INTEGER_TYPE
9150 && TREE_CODE (TREE_TYPE (size)) != ENUMERAL_TYPE
9151 && TREE_CODE (TREE_TYPE (size)) != BOOLEAN_TYPE)
9152 {
d67cdbc3
JM
9153 if (name)
9154 cp_error ("size of array `%D' has non-integer type", name);
9155 else
9156 cp_error ("size of array has non-integer type");
2848ad0f
MM
9157 size = integer_one_node;
9158 }
9159
9160 /* Normally, the array-bound will be a constant. */
9161 if (TREE_CONSTANT (size))
9162 {
9163 /* Check to see if the array bound overflowed. Make that an
9164 error, no matter how generous we're being. */
9165 int old_flag_pedantic_errors = flag_pedantic_errors;
9166 int old_pedantic = pedantic;
9167 pedantic = flag_pedantic_errors = 1;
9168 constant_expression_warning (size);
9169 pedantic = old_pedantic;
9170 flag_pedantic_errors = old_flag_pedantic_errors;
9171
9172 /* An array must have a positive number of elements. */
9173 if (INT_CST_LT (size, integer_zero_node))
9174 {
d67cdbc3
JM
9175 if (name)
9176 cp_error ("size of array `%D' is negative", name);
9177 else
9178 cp_error ("size of array is negative");
2848ad0f
MM
9179 size = integer_one_node;
9180 }
9181 /* Except that an extension we allow zero-sized arrays. We
68642fb6 9182 always allow them in system headers because glibc uses
2848ad0f
MM
9183 them. */
9184 else if (integer_zerop (size) && pedantic && !in_system_header)
d67cdbc3
JM
9185 {
9186 if (name)
cb9a3ff8 9187 cp_pedwarn ("ISO C++ forbids zero-size array `%D'", name);
d67cdbc3 9188 else
cb9a3ff8 9189 cp_pedwarn ("ISO C++ forbids zero-size array");
d67cdbc3 9190 }
2848ad0f
MM
9191 }
9192
9193 /* Compute the index of the largest element in the array. It is
9194 one less than the number of elements in the array. */
9195 itype
9196 = fold (build_binary_op (MINUS_EXPR,
9197 cp_convert (ssizetype, size),
9198 cp_convert (ssizetype,
9199 integer_one_node)));
68642fb6 9200
2848ad0f
MM
9201 /* Check for variable-sized arrays. We allow such things as an
9202 extension, even though they are not allowed in ANSI/ISO C++. */
9203 if (!TREE_CONSTANT (itype))
9204 {
9205 if (pedantic)
9206 {
9207 if (name)
cb9a3ff8 9208 cp_pedwarn ("ISO C++ forbids variable-size array `%D'",
2848ad0f
MM
9209 name);
9210 else
cb9a3ff8 9211 cp_pedwarn ("ISO C++ forbids variable-size array");
2848ad0f
MM
9212 }
9213
9214 /* Create a variable-sized array index type. */
9215 itype = variable_size (itype);
9216 }
9217 /* Make sure that there was no overflow when creating to a signed
9218 index type. (For example, on a 32-bit machine, an array with
9219 size 2^32 - 1 is too big.) */
9220 else if (TREE_OVERFLOW (itype))
9221 {
9222 error ("overflow in array dimension");
9223 TREE_OVERFLOW (itype) = 0;
9224 }
68642fb6 9225
2848ad0f
MM
9226 /* Create and return the appropriate index type. */
9227 return build_index_type (itype);
9228}
9229
9230/* Returns an ARRAY_TYPE for an array with SIZE elements of the
9231 indicated TYPE. If non-NULL, NAME is the NAME of the declaration
9232 with this type. */
9233
9234static tree
9235create_array_type_for_decl (name, type, size)
9236 tree name;
9237 tree type;
9238 tree size;
9239{
9240 tree itype = NULL_TREE;
9241 const char* error_msg;
9242
9243 /* If things have already gone awry, bail now. */
9244 if (type == error_mark_node || size == error_mark_node)
9245 return error_mark_node;
9246
9247 /* Assume that everything will go OK. */
9248 error_msg = NULL;
9249
9250 /* There are some types which cannot be array elements. */
9251 switch (TREE_CODE (type))
9252 {
9253 case VOID_TYPE:
9254 error_msg = "array of void";
9255 break;
9256
9257 case FUNCTION_TYPE:
9258 error_msg = "array of functions";
9259 break;
9260
9261 case REFERENCE_TYPE:
9262 error_msg = "array of references";
9263 break;
9264
9265 case OFFSET_TYPE:
9266 error_msg = "array of data members";
9267 break;
9268
9269 case METHOD_TYPE:
9270 error_msg = "array of function members";
9271 break;
9272
9273 default:
9274 break;
9275 }
9276
9277 /* If something went wrong, issue an error-message and return. */
9278 if (error_msg)
9279 {
9280 if (name)
9281 cp_error ("declaration of `%D' as %s", name, error_msg);
9282 else
9283 cp_error ("creating %s", error_msg);
9284
9285 return error_mark_node;
9286 }
9287
9288 /* [dcl.array]
68642fb6 9289
2848ad0f
MM
9290 The constant expressions that specify the bounds of the arrays
9291 can be omitted only for the first member of the sequence. */
9292 if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
9293 {
cb9a3ff8 9294 cp_error ("declaration of `%D' as multidimensional array must have bounds for all dimensions except the first",
2848ad0f 9295 name);
2848ad0f
MM
9296
9297 return error_mark_node;
9298 }
9299
9300 /* Figure out the index type for the array. */
9301 if (size)
9302 itype = compute_array_index_type (name, size);
9303
9304 return build_cplus_array_type (type, itype);
9305}
9306
3dbc07b6
MM
9307/* Check that it's OK to declare a function with the indicated TYPE.
9308 SFK indicates the kind of special function (if any) that this
9309 function is. CTYPE is the class of which this function is a
9310 member. OPTYPE is the type given in a conversion operator
9311 declaration. Returns the actual return type of the function; that
9312 may be different than TYPE if an error occurs, or for certain
9313 special functions. */
9314
9315static tree
9316check_special_function_return_type (sfk, type, ctype, optype)
9317 special_function_kind sfk;
9318 tree type;
9319 tree ctype;
9320 tree optype;
9321{
9322 switch (sfk)
9323 {
9324 case sfk_constructor:
9325 if (type)
9326 cp_error ("return type specification for constructor invalid");
9327
9328 /* In the old ABI, we return `this'; in the new ABI we don't
9329 bother. */
9330 type = flag_new_abi ? void_type_node : build_pointer_type (ctype);
9331 break;
9332
9333 case sfk_destructor:
9334 if (type)
9335 cp_error ("return type specification for destructor invalid");
9336 type = void_type_node;
9337 break;
9338
9339 case sfk_conversion:
9340 if (type && !same_type_p (type, optype))
9341 cp_error ("operator `%T' declared to return `%T'", optype, type);
9342 else if (type)
9343 cp_pedwarn ("return type specified for `operator %T'", optype);
9344 type = optype;
9345 break;
9346
9347 default:
9348 my_friendly_abort (20000408);
9349 break;
9350 }
9351
9352 return type;
9353}
9354
8d08fdba
MS
9355/* Given declspecs and a declarator,
9356 determine the name and type of the object declared
9357 and construct a ..._DECL node for it.
9358 (In one case we can return a ..._TYPE node instead.
9359 For invalid input we sometimes return 0.)
9360
9361 DECLSPECS is a chain of tree_list nodes whose value fields
9362 are the storage classes and type specifiers.
9363
9364 DECL_CONTEXT says which syntactic context this declaration is in:
9365 NORMAL for most contexts. Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
9366 FUNCDEF for a function definition. Like NORMAL but a few different
9367 error messages in each case. Return value may be zero meaning
9368 this definition is too screwy to try to parse.
9369 MEMFUNCDEF for a function definition. Like FUNCDEF but prepares to
9370 handle member functions (which have FIELD context).
9371 Return value may be zero meaning this definition is too screwy to
9372 try to parse.
9373 PARM for a parameter declaration (either within a function prototype
9374 or before a function body). Make a PARM_DECL, or return void_type_node.
db5ae43f 9375 CATCHPARM for a parameter declaration before a catch clause.
8d08fdba
MS
9376 TYPENAME if for a typename (in a cast or sizeof).
9377 Don't make a DECL node; just return the ..._TYPE node.
9378 FIELD for a struct or union field; make a FIELD_DECL.
9379 BITFIELD for a field with specified width.
9380 INITIALIZED is 1 if the decl has an initializer.
9381
b17e2870
JM
9382 ATTRLIST is a TREE_LIST node with prefix attributes in TREE_VALUE and
9383 normal attributes in TREE_PURPOSE, or NULL_TREE.
9384
70adf8a9 9385 In the TYPENAME case, DECLARATOR is really an abstract declarator.
8d08fdba
MS
9386 It may also be so in the PARM case, for a prototype where the
9387 argument type is specified but not the name.
9388
9389 This function is where the complicated C meanings of `static'
9390 and `extern' are interpreted.
9391
9392 For C++, if there is any monkey business to do, the function which
9393 calls this one must do it, i.e., prepending instance variables,
9394 renaming overloaded function names, etc.
9395
9396 Note that for this C++, it is an error to define a method within a class
9397 which does not belong to that class.
9398
9399 Except in the case where SCOPE_REFs are implicitly known (such as
9400 methods within a class being redundantly qualified),
9401 declarations which involve SCOPE_REFs are returned as SCOPE_REFs
9402 (class_name::decl_name). The caller must also deal with this.
9403
9404 If a constructor or destructor is seen, and the context is FIELD,
9405 then the type gains the attribute TREE_HAS_x. If such a declaration
9406 is erroneous, NULL_TREE is returned.
9407
9408 QUALS is used only for FUNCDEF and MEMFUNCDEF cases. For a member
535233a8
NS
9409 function, these are the qualifiers to give to the `this' pointer. We
9410 apply TYPE_QUAL_RESTRICT to the this ptr, not the object.
8d08fdba
MS
9411
9412 May return void_type_node if the declarator turned out to be a friend.
9413 See grokfield for details. */
9414
8d08fdba 9415tree
c11b6f21 9416grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
8d08fdba
MS
9417 tree declspecs;
9418 tree declarator;
9419 enum decl_context decl_context;
9420 int initialized;
c11b6f21 9421 tree attrlist;
8d08fdba
MS
9422{
9423 RID_BIT_TYPE specbits;
9424 int nclasses = 0;
9425 tree spec;
9426 tree type = NULL_TREE;
9427 int longlong = 0;
9428 int constp;
91063b51 9429 int restrictp;
8d08fdba 9430 int volatilep;
91063b51 9431 int type_quals;
db5ae43f 9432 int virtualp, explicitp, friendp, inlinep, staticp;
8d08fdba
MS
9433 int explicit_int = 0;
9434 int explicit_char = 0;
37c46b43 9435 int defaulted_int = 0;
8d08fdba 9436 tree typedef_decl = NULL_TREE;
9c0758dd 9437 const char *name;
8d08fdba
MS
9438 tree typedef_type = NULL_TREE;
9439 int funcdef_flag = 0;
9440 enum tree_code innermost_code = ERROR_MARK;
9441 int bitfield = 0;
6125f3be
DE
9442#if 0
9443 /* See the code below that used this. */
f6abb50a 9444 tree decl_machine_attr = NULL_TREE;
6125f3be 9445#endif
8d08fdba
MS
9446 /* Set this to error_mark_node for FIELD_DECLs we could not handle properly.
9447 All FIELD_DECLs we build here have `init' put into their DECL_INITIAL. */
9448 tree init = NULL_TREE;
9449
9450 /* Keep track of what sort of function is being processed
9451 so that we can warn about default return values, or explicit
9452 return values which do not match prescribed defaults. */
3dbc07b6 9453 special_function_kind sfk = sfk_none;
8d08fdba
MS
9454
9455 tree dname = NULL_TREE;
9456 tree ctype = current_class_type;
9457 tree ctor_return_type = NULL_TREE;
9458 enum overload_flags flags = NO_SPECIAL;
8d08fdba 9459 tree quals = NULL_TREE;
c11b6f21 9460 tree raises = NULL_TREE;
386b8a85 9461 int template_count = 0;
2c73f9f5 9462 tree in_namespace = NULL_TREE;
1eab9b56
JM
9463 tree inner_attrs;
9464 int ignore_attrs;
8d08fdba
MS
9465
9466 RIDBIT_RESET_ALL (specbits);
9467 if (decl_context == FUNCDEF)
9468 funcdef_flag = 1, decl_context = NORMAL;
9469 else if (decl_context == MEMFUNCDEF)
9470 funcdef_flag = -1, decl_context = FIELD;
9471 else if (decl_context == BITFIELD)
9472 bitfield = 1, decl_context = FIELD;
9473
8d08fdba
MS
9474 /* Look inside a declarator for the name being declared
9475 and get it as a string, for an error message. */
9476 {
be99da77
MS
9477 tree *next = &declarator;
9478 register tree decl;
8d08fdba
MS
9479 name = NULL;
9480
be99da77
MS
9481 while (next && *next)
9482 {
9483 decl = *next;
9484 switch (TREE_CODE (decl))
8d08fdba 9485 {
52fbc847
JM
9486 case TREE_LIST:
9487 /* For attributes. */
9488 next = &TREE_VALUE (decl);
9489 break;
9490
be99da77
MS
9491 case COND_EXPR:
9492 ctype = NULL_TREE;
9493 next = &TREE_OPERAND (decl, 0);
9494 break;
8d08fdba 9495
2c73f9f5 9496 case BIT_NOT_EXPR: /* For C++ destructors! */
8d08fdba 9497 {
be99da77
MS
9498 tree name = TREE_OPERAND (decl, 0);
9499 tree rename = NULL_TREE;
9500
9501 my_friendly_assert (flags == NO_SPECIAL, 152);
9502 flags = DTOR_FLAG;
3dbc07b6 9503 sfk = sfk_destructor;
5566b478
MS
9504 if (TREE_CODE (name) == TYPE_DECL)
9505 TREE_OPERAND (decl, 0) = name = constructor_name (name);
be99da77
MS
9506 my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 153);
9507 if (ctype == NULL_TREE)
9508 {
9509 if (current_class_type == NULL_TREE)
9510 {
8251199e 9511 error ("destructors must be member functions");
be99da77
MS
9512 flags = NO_SPECIAL;
9513 }
9514 else
9515 {
9516 tree t = constructor_name (current_class_name);
9517 if (t != name)
9518 rename = t;
9519 }
9520 }
8d08fdba 9521 else
be99da77
MS
9522 {
9523 tree t = constructor_name (ctype);
9524 if (t != name)
9525 rename = t;
9526 }
51c184be 9527
be99da77 9528 if (rename)
39211cd5 9529 {
8251199e 9530 cp_error ("destructor `%T' must match class name `%T'",
5566b478 9531 name, rename);
be99da77 9532 TREE_OPERAND (decl, 0) = rename;
39211cd5 9533 }
be99da77 9534 next = &name;
51c184be 9535 }
be99da77 9536 break;
8d08fdba 9537
be99da77 9538 case ADDR_EXPR: /* C++ reference declaration */
2c73f9f5 9539 /* Fall through. */
be99da77
MS
9540 case ARRAY_REF:
9541 case INDIRECT_REF:
9542 ctype = NULL_TREE;
9543 innermost_code = TREE_CODE (decl);
9544 next = &TREE_OPERAND (decl, 0);
9545 break;
8d08fdba 9546
be99da77 9547 case CALL_EXPR:
43f887f9 9548 if (parmlist_is_exprlist (CALL_DECLARATOR_PARMS (decl)))
8d08fdba 9549 {
b17e2870
JM
9550 /* This is actually a variable declaration using
9551 constructor syntax. We need to call start_decl and
9552 cp_finish_decl so we can get the variable
9553 initialized... */
9554
9555 tree attributes, prefix_attributes;
be99da77
MS
9556
9557 *next = TREE_OPERAND (decl, 0);
43f887f9 9558 init = CALL_DECLARATOR_PARMS (decl);
be99da77 9559
b17e2870
JM
9560 if (attrlist)
9561 {
9562 attributes = TREE_PURPOSE (attrlist);
9563 prefix_attributes = TREE_VALUE (attrlist);
9564 }
9565 else
9566 {
9567 attributes = NULL_TREE;
9568 prefix_attributes = NULL_TREE;
9569 }
9570
9571 decl = start_decl (declarator, declspecs, 1,
9572 attributes, prefix_attributes);
9fc336c7 9573 decl_type_access_control (decl);
1eb0072d
JM
9574 if (decl)
9575 {
9576 /* Look for __unused__ attribute */
9577 if (TREE_USED (TREE_TYPE (decl)))
9578 TREE_USED (decl) = 1;
9579 finish_decl (decl, init, NULL_TREE);
9580 }
9581 else
9582 cp_error ("invalid declarator");
be99da77 9583 return 0;
8d08fdba 9584 }
be99da77
MS
9585 innermost_code = TREE_CODE (decl);
9586 if (decl_context == FIELD && ctype == NULL_TREE)
9587 ctype = current_class_type;
45537677 9588 if (ctype
c11b6f21 9589 && TREE_OPERAND (decl, 0)
45537677
MS
9590 && (TREE_CODE (TREE_OPERAND (decl, 0)) == TYPE_DECL
9591 && ((DECL_NAME (TREE_OPERAND (decl, 0))
9592 == constructor_name_full (ctype))
9593 || (DECL_NAME (TREE_OPERAND (decl, 0))
9594 == constructor_name (ctype)))))
be99da77
MS
9595 TREE_OPERAND (decl, 0) = constructor_name (ctype);
9596 next = &TREE_OPERAND (decl, 0);
9597 decl = *next;
9598 if (ctype != NULL_TREE
9599 && decl != NULL_TREE && flags != DTOR_FLAG
9600 && decl == constructor_name (ctype))
8d08fdba 9601 {
3dbc07b6 9602 sfk = sfk_constructor;
be99da77 9603 ctor_return_type = ctype;
8d08fdba 9604 }
be99da77
MS
9605 ctype = NULL_TREE;
9606 break;
68642fb6 9607
386b8a85
JM
9608 case TEMPLATE_ID_EXPR:
9609 {
9610 tree fns = TREE_OPERAND (decl, 0);
9611
9612 if (TREE_CODE (fns) == LOOKUP_EXPR)
9613 fns = TREE_OPERAND (fns, 0);
9614
8f032717
MM
9615 dname = fns;
9616 if (TREE_CODE (dname) == COMPONENT_REF)
9617 dname = TREE_OPERAND (dname, 1);
9618 if (TREE_CODE (dname) != IDENTIFIER_NODE)
9619 {
9620 my_friendly_assert (is_overloaded_fn (dname),
9621 19990331);
9622 dname = DECL_NAME (get_first_fn (dname));
9623 }
386b8a85 9624 }
2c73f9f5 9625 /* Fall through. */
be99da77
MS
9626
9627 case IDENTIFIER_NODE:
386b8a85
JM
9628 if (TREE_CODE (decl) == IDENTIFIER_NODE)
9629 dname = decl;
9630
be99da77
MS
9631 next = 0;
9632
9633 if (is_rid (dname))
8d08fdba 9634 {
8251199e 9635 cp_error ("declarator-id missing; using reserved word `%D'",
be99da77
MS
9636 dname);
9637 name = IDENTIFIER_POINTER (dname);
8d08fdba 9638 }
be99da77 9639 if (! IDENTIFIER_OPNAME_P (dname)
956d6950 9640 /* GNU/Linux headers use '__op'. Arrgh. */
a703fb38 9641 || (IDENTIFIER_TYPENAME_P (dname) && ! TREE_TYPE (dname)))
be99da77 9642 name = IDENTIFIER_POINTER (dname);
8d08fdba
MS
9643 else
9644 {
be99da77 9645 if (IDENTIFIER_TYPENAME_P (dname))
8d08fdba 9646 {
be99da77
MS
9647 my_friendly_assert (flags == NO_SPECIAL, 154);
9648 flags = TYPENAME_FLAG;
9649 ctor_return_type = TREE_TYPE (dname);
3dbc07b6 9650 sfk = sfk_conversion;
8d08fdba 9651 }
be99da77 9652 name = operator_name_string (dname);
8d08fdba 9653 }
be99da77 9654 break;
8d08fdba 9655
be99da77
MS
9656 /* C++ extension */
9657 case SCOPE_REF:
9658 {
9659 /* Perform error checking, and decide on a ctype. */
9660 tree cname = TREE_OPERAND (decl, 0);
9661 if (cname == NULL_TREE)
9662 ctype = NULL_TREE;
2c73f9f5
ML
9663 else if (TREE_CODE (cname) == NAMESPACE_DECL)
9664 {
9665 ctype = NULL_TREE;
9666 in_namespace = TREE_OPERAND (decl, 0);
9667 TREE_OPERAND (decl, 0) = NULL_TREE;
9668 }
be99da77
MS
9669 else if (! is_aggr_type (cname, 1))
9670 TREE_OPERAND (decl, 0) = NULL_TREE;
9671 /* Must test TREE_OPERAND (decl, 1), in case user gives
9672 us `typedef (class::memfunc)(int); memfunc *memfuncptr;' */
9673 else if (TREE_OPERAND (decl, 1)
9674 && TREE_CODE (TREE_OPERAND (decl, 1)) == INDIRECT_REF)
9675 ctype = cname;
73b0fce8
KL
9676 else if (TREE_CODE (cname) == TEMPLATE_TYPE_PARM
9677 || TREE_CODE (cname) == TEMPLATE_TEMPLATE_PARM)
5566b478 9678 {
8251199e 9679 cp_error ("`%T::%D' is not a valid declarator", cname,
5566b478 9680 TREE_OPERAND (decl, 1));
8251199e 9681 cp_error (" perhaps you want `typename %T::%D' to make it a type",
5566b478
MS
9682 cname, TREE_OPERAND (decl, 1));
9683 return void_type_node;
9684 }
be99da77
MS
9685 else if (ctype == NULL_TREE)
9686 ctype = cname;
9687 else if (TREE_COMPLEXITY (decl) == current_class_depth)
9688 TREE_OPERAND (decl, 0) = ctype;
9689 else
9690 {
9691 if (! UNIQUELY_DERIVED_FROM_P (cname, ctype))
9692 {
8251199e 9693 cp_error ("type `%T' is not derived from type `%T'",
be99da77
MS
9694 cname, ctype);
9695 TREE_OPERAND (decl, 0) = NULL_TREE;
9696 }
9697 else
9698 ctype = cname;
9699 }
9700
c91a56d2
MS
9701 if (ctype && TREE_CODE (TREE_OPERAND (decl, 1)) == TYPE_DECL
9702 && ((DECL_NAME (TREE_OPERAND (decl, 1))
9703 == constructor_name_full (ctype))
9704 || (DECL_NAME (TREE_OPERAND (decl, 1))
9705 == constructor_name (ctype))))
be99da77
MS
9706 TREE_OPERAND (decl, 1) = constructor_name (ctype);
9707 next = &TREE_OPERAND (decl, 1);
9708 decl = *next;
9709 if (ctype)
9710 {
9711 if (TREE_CODE (decl) == IDENTIFIER_NODE
9712 && constructor_name (ctype) == decl)
9713 {
3dbc07b6 9714 sfk = sfk_constructor;
be99da77
MS
9715 ctor_return_type = ctype;
9716 }
9717 else if (TREE_CODE (decl) == BIT_NOT_EXPR
9718 && TREE_CODE (TREE_OPERAND (decl, 0)) == IDENTIFIER_NODE
9719 && (constructor_name (ctype) == TREE_OPERAND (decl, 0)
9720 || constructor_name_full (ctype) == TREE_OPERAND (decl, 0)))
9721 {
3dbc07b6 9722 sfk = sfk_destructor;
be99da77
MS
9723 ctor_return_type = ctype;
9724 flags = DTOR_FLAG;
9725 TREE_OPERAND (decl, 0) = constructor_name (ctype);
9726 next = &TREE_OPERAND (decl, 0);
9727 }
9728 }
9729 }
9730 break;
9731
9732 case ERROR_MARK:
9733 next = 0;
9734 break;
9735
45537677
MS
9736 case TYPE_DECL:
9737 /* Parse error puts this typespec where
9738 a declarator should go. */
8251199e 9739 cp_error ("`%T' specified as declarator-id", DECL_NAME (decl));
45537677 9740 if (TREE_TYPE (decl) == current_class_type)
8251199e 9741 cp_error (" perhaps you want `%T' for a constructor",
45537677
MS
9742 current_class_name);
9743 dname = DECL_NAME (decl);
9744 name = IDENTIFIER_POINTER (dname);
9745
e92cc029 9746 /* Avoid giving two errors for this. */
45537677
MS
9747 IDENTIFIER_CLASS_VALUE (dname) = NULL_TREE;
9748
58010b57 9749 declspecs = tree_cons (NULL_TREE, integer_type_node, declspecs);
45537677
MS
9750 *next = dname;
9751 next = 0;
9752 break;
9753
be99da77 9754 default:
8251199e 9755 cp_compiler_error ("`%D' as declarator", decl);
be99da77 9756 return 0; /* We used to do a 155 abort here. */
8d08fdba 9757 }
be99da77 9758 }
8d08fdba
MS
9759 }
9760
9761 /* A function definition's declarator must have the form of
9762 a function declarator. */
9763
9764 if (funcdef_flag && innermost_code != CALL_EXPR)
9765 return 0;
9766
e1cd6e56
MS
9767 if (((dname && IDENTIFIER_OPNAME_P (dname)) || flags == TYPENAME_FLAG)
9768 && innermost_code != CALL_EXPR
9769 && ! (ctype && declspecs == NULL_TREE))
9770 {
8251199e 9771 cp_error ("declaration of `%D' as non-function", dname);
e1cd6e56
MS
9772 return void_type_node;
9773 }
9774
8d08fdba
MS
9775 /* Anything declared one level down from the top level
9776 must be one of the parameters of a function
9777 (because the body is at least two levels down). */
9778
9779 /* This heuristic cannot be applied to C++ nodes! Fixed, however,
9780 by not allowing C++ class definitions to specify their parameters
9781 with xdecls (must be spec.d in the parmlist).
9782
9783 Since we now wait to push a class scope until we are sure that
9784 we are in a legitimate method context, we must set oldcname
a9aedbc2
MS
9785 explicitly (since current_class_name is not yet alive).
9786
9787 We also want to avoid calling this a PARM if it is in a namespace. */
8d08fdba 9788
9188c363 9789 if (decl_context == NORMAL && !toplevel_bindings_p ())
a9aedbc2
MS
9790 {
9791 struct binding_level *b = current_binding_level;
9792 current_binding_level = b->level_chain;
9793 if (current_binding_level != 0 && toplevel_bindings_p ())
9794 decl_context = PARM;
9795 current_binding_level = b;
9796 }
8d08fdba 9797
34fc957d
NS
9798 if (name == NULL)
9799 name = decl_context == PARM ? "parameter" : "type name";
68642fb6 9800
8d08fdba
MS
9801 /* Look through the decl specs and record which ones appear.
9802 Some typespecs are defined as built-in typenames.
9803 Others, the ones that are modifiers of other types,
9804 are represented by bits in SPECBITS: set the bits for
9805 the modifiers that appear. Storage class keywords are also in SPECBITS.
9806
9807 If there is a typedef name or a type, store the type in TYPE.
9808 This includes builtin typedefs such as `int'.
9809
9810 Set EXPLICIT_INT if the type is `int' or `char' and did not
9811 come from a user typedef.
9812
9813 Set LONGLONG if `long' is mentioned twice.
9814
9815 For C++, constructors and destructors have their own fast treatment. */
9816
9817 for (spec = declspecs; spec; spec = TREE_CHAIN (spec))
9818 {
9819 register int i;
9820 register tree id;
9821
9822 /* Certain parse errors slip through. For example,
9823 `int class;' is not caught by the parser. Try
9824 weakly to recover here. */
9825 if (TREE_CODE (spec) != TREE_LIST)
9826 return 0;
9827
9828 id = TREE_VALUE (spec);
9829
9830 if (TREE_CODE (id) == IDENTIFIER_NODE)
9831 {
a3203465
MS
9832 if (id == ridpointers[(int) RID_INT]
9833 || id == ridpointers[(int) RID_CHAR]
9834 || id == ridpointers[(int) RID_BOOL]
9835 || id == ridpointers[(int) RID_WCHAR])
8d08fdba
MS
9836 {
9837 if (type)
8ccc31eb
MS
9838 {
9839 if (id == ridpointers[(int) RID_BOOL])
8251199e 9840 error ("`bool' is now a keyword");
8ccc31eb 9841 else
8251199e 9842 cp_error ("extraneous `%T' ignored", id);
8ccc31eb 9843 }
8d08fdba
MS
9844 else
9845 {
a3203465
MS
9846 if (id == ridpointers[(int) RID_INT])
9847 explicit_int = 1;
9848 else if (id == ridpointers[(int) RID_CHAR])
9849 explicit_char = 1;
8d08fdba
MS
9850 type = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (id));
9851 }
9852 goto found;
9853 }
e92cc029 9854 /* C++ aggregate types. */
8d08fdba
MS
9855 if (IDENTIFIER_HAS_TYPE_VALUE (id))
9856 {
9857 if (type)
8251199e 9858 cp_error ("multiple declarations `%T' and `%T'", type, id);
8d08fdba
MS
9859 else
9860 type = IDENTIFIER_TYPE_VALUE (id);
9861 goto found;
9862 }
9863
f376e137 9864 for (i = (int) RID_FIRST_MODIFIER; i <= (int) RID_LAST_MODIFIER; i++)
8d08fdba
MS
9865 {
9866 if (ridpointers[i] == id)
9867 {
9868 if (i == (int) RID_LONG && RIDBIT_SETP (i, specbits))
9869 {
795add94 9870 if (pedantic && ! in_system_header && warn_long_long)
cb9a3ff8 9871 pedwarn ("ISO C++ does not support `long long'");
9a3b49ac 9872 if (longlong)
8251199e 9873 error ("`long long long' is too long for GCC");
8d08fdba
MS
9874 else
9875 longlong = 1;
9876 }
9877 else if (RIDBIT_SETP (i, specbits))
8251199e 9878 pedwarn ("duplicate `%s'", IDENTIFIER_POINTER (id));
8d08fdba
MS
9879 RIDBIT_SET (i, specbits);
9880 goto found;
9881 }
9882 }
9883 }
e92cc029 9884 /* C++ aggregate types. */
73b0fce8 9885 else if (TREE_CODE (id) == TYPE_DECL || TREE_CODE (id) == TEMPLATE_DECL)
45537677
MS
9886 {
9887 if (type)
8251199e 9888 cp_error ("multiple declarations `%T' and `%T'", type,
45537677
MS
9889 TREE_TYPE (id));
9890 else
5566b478
MS
9891 {
9892 type = TREE_TYPE (id);
9893 TREE_VALUE (spec) = type;
9894 }
45537677
MS
9895 goto found;
9896 }
8d08fdba 9897 if (type)
8251199e 9898 error ("two or more data types in declaration of `%s'", name);
8d08fdba
MS
9899 else if (TREE_CODE (id) == IDENTIFIER_NODE)
9900 {
9901 register tree t = lookup_name (id, 1);
9902 if (!t || TREE_CODE (t) != TYPE_DECL)
8251199e 9903 error ("`%s' fails to be a typedef or built in type",
8d08fdba
MS
9904 IDENTIFIER_POINTER (id));
9905 else
9906 {
9907 type = TREE_TYPE (t);
6125f3be
DE
9908#if 0
9909 /* See the code below that used this. */
f6abb50a 9910 decl_machine_attr = DECL_MACHINE_ATTRIBUTES (id);
6125f3be 9911#endif
8d08fdba
MS
9912 typedef_decl = t;
9913 }
9914 }
bd6dd845 9915 else if (id != error_mark_node)
8d08fdba
MS
9916 /* Can't change CLASS nodes into RECORD nodes here! */
9917 type = id;
9918
9919 found: ;
9920 }
9921
9922 typedef_type = type;
9923
37c46b43 9924 /* No type at all: default to `int', and set DEFAULTED_INT
6eabb241 9925 because it was not a user-defined typedef. */
8d08fdba 9926
a3203465
MS
9927 if (type == NULL_TREE
9928 && (RIDBIT_SETP (RID_SIGNED, specbits)
9929 || RIDBIT_SETP (RID_UNSIGNED, specbits)
9930 || RIDBIT_SETP (RID_LONG, specbits)
9931 || RIDBIT_SETP (RID_SHORT, specbits)))
9932 {
9933 /* These imply 'int'. */
9934 type = integer_type_node;
37c46b43 9935 defaulted_int = 1;
a3203465
MS
9936 }
9937
3dbc07b6
MM
9938 if (sfk != sfk_none)
9939 type = check_special_function_return_type (sfk, type,
9940 ctor_return_type,
9941 ctor_return_type);
9942 else if (type == NULL_TREE)
8d08fdba 9943 {
3dbc07b6
MM
9944 int is_main;
9945
8d08fdba 9946 explicit_int = -1;
3dbc07b6 9947
41eff652
JM
9948 /* We handle `main' specially here, because 'main () { }' is so
9949 common. With no options, it is allowed. With -Wreturn-type,
9950 it is a warning. It is only an error with -pedantic-errors. */
3dbc07b6
MM
9951 is_main = (funcdef_flag
9952 && MAIN_NAME_P (dname)
9953 && ctype == NULL_TREE
9954 && in_namespace == NULL_TREE
9955 && current_namespace == global_namespace);
9956
9957 if (in_system_header || flag_ms_extensions)
9958 /* Allow it, sigh. */;
9959 else if (pedantic || ! is_main)
9960 cp_pedwarn ("ISO C++ forbids declaration of `%s' with no type",
9961 name);
9962 else if (warn_return_type)
9963 cp_warning ("ISO C++ forbids declaration of `%s' with no type",
9964 name);
41eff652 9965
3dbc07b6 9966 type = integer_type_node;
51c184be 9967 }
8d08fdba
MS
9968
9969 ctype = NULL_TREE;
9970
9971 /* Now process the modifiers that were specified
9972 and check for invalid combinations. */
9973
9974 /* Long double is a special combination. */
9975
9976 if (RIDBIT_SETP (RID_LONG, specbits)
9977 && TYPE_MAIN_VARIANT (type) == double_type_node)
9978 {
9979 RIDBIT_RESET (RID_LONG, specbits);
68642fb6 9980 type = build_qualified_type (long_double_type_node,
91063b51 9981 CP_TYPE_QUALS (type));
8d08fdba
MS
9982 }
9983
9984 /* Check all other uses of type modifiers. */
9985
9986 if (RIDBIT_SETP (RID_UNSIGNED, specbits)
9987 || RIDBIT_SETP (RID_SIGNED, specbits)
9988 || RIDBIT_SETP (RID_LONG, specbits)
9989 || RIDBIT_SETP (RID_SHORT, specbits))
9990 {
9991 int ok = 0;
9992
9993 if (TREE_CODE (type) == REAL_TYPE)
8251199e 9994 error ("short, signed or unsigned invalid for `%s'", name);
b7484fbe 9995 else if (TREE_CODE (type) != INTEGER_TYPE)
8251199e 9996 error ("long, short, signed or unsigned invalid for `%s'", name);
8d08fdba
MS
9997 else if (RIDBIT_SETP (RID_LONG, specbits)
9998 && RIDBIT_SETP (RID_SHORT, specbits))
8251199e 9999 error ("long and short specified together for `%s'", name);
8d08fdba
MS
10000 else if ((RIDBIT_SETP (RID_LONG, specbits)
10001 || RIDBIT_SETP (RID_SHORT, specbits))
10002 && explicit_char)
8251199e 10003 error ("long or short specified with char for `%s'", name);
8d08fdba
MS
10004 else if ((RIDBIT_SETP (RID_LONG, specbits)
10005 || RIDBIT_SETP (RID_SHORT, specbits))
10006 && TREE_CODE (type) == REAL_TYPE)
8251199e 10007 error ("long or short specified with floating type for `%s'", name);
8d08fdba
MS
10008 else if (RIDBIT_SETP (RID_SIGNED, specbits)
10009 && RIDBIT_SETP (RID_UNSIGNED, specbits))
8251199e 10010 error ("signed and unsigned given together for `%s'", name);
8d08fdba
MS
10011 else
10012 {
10013 ok = 1;
37c46b43 10014 if (!explicit_int && !defaulted_int && !explicit_char && pedantic)
8d08fdba 10015 {
8251199e 10016 pedwarn ("long, short, signed or unsigned used invalidly for `%s'",
8d08fdba
MS
10017 name);
10018 if (flag_pedantic_errors)
10019 ok = 0;
10020 }
10021 }
10022
10023 /* Discard the type modifiers if they are invalid. */
10024 if (! ok)
10025 {
10026 RIDBIT_RESET (RID_UNSIGNED, specbits);
10027 RIDBIT_RESET (RID_SIGNED, specbits);
10028 RIDBIT_RESET (RID_LONG, specbits);
10029 RIDBIT_RESET (RID_SHORT, specbits);
10030 longlong = 0;
10031 }
10032 }
10033
37c46b43
MS
10034 if (RIDBIT_SETP (RID_COMPLEX, specbits)
10035 && TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
10036 {
8251199e 10037 error ("complex invalid for `%s'", name);
37c46b43
MS
10038 RIDBIT_RESET (RID_COMPLEX, specbits);
10039 }
10040
8d08fdba
MS
10041 /* Decide whether an integer type is signed or not.
10042 Optionally treat bitfields as signed by default. */
10043 if (RIDBIT_SETP (RID_UNSIGNED, specbits)
b89c5a7b
MM
10044 /* [class.bit]
10045
10046 It is implementation-defined whether a plain (neither
10047 explicitly signed or unsigned) char, short, int, or long
10048 bit-field is signed or unsigned.
68642fb6 10049
b89c5a7b
MM
10050 Naturally, we extend this to long long as well. Note that
10051 this does not include wchar_t. */
10052 || (bitfield && !flag_signed_bitfields
10053 && RIDBIT_NOTSETP (RID_SIGNED, specbits)
10054 /* A typedef for plain `int' without `signed' can be
10055 controlled just like plain `int', but a typedef for
10056 `signed int' cannot be so controlled. */
68642fb6 10057 && !(typedef_decl
29bbeb1c 10058 && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
b89c5a7b
MM
10059 && (TREE_CODE (type) == INTEGER_TYPE
10060 || TREE_CODE (type) == CHAR_TYPE)
29bbeb1c 10061 && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
8d08fdba
MS
10062 {
10063 if (longlong)
10064 type = long_long_unsigned_type_node;
10065 else if (RIDBIT_SETP (RID_LONG, specbits))
10066 type = long_unsigned_type_node;
10067 else if (RIDBIT_SETP (RID_SHORT, specbits))
10068 type = short_unsigned_type_node;
10069 else if (type == char_type_node)
10070 type = unsigned_char_type_node;
10071 else if (typedef_decl)
10072 type = unsigned_type (type);
10073 else
10074 type = unsigned_type_node;
10075 }
10076 else if (RIDBIT_SETP (RID_SIGNED, specbits)
10077 && type == char_type_node)
10078 type = signed_char_type_node;
10079 else if (longlong)
10080 type = long_long_integer_type_node;
10081 else if (RIDBIT_SETP (RID_LONG, specbits))
10082 type = long_integer_type_node;
10083 else if (RIDBIT_SETP (RID_SHORT, specbits))
10084 type = short_integer_type_node;
10085
37c46b43
MS
10086 if (RIDBIT_SETP (RID_COMPLEX, specbits))
10087 {
10088 /* If we just have "complex", it is equivalent to
10089 "complex double", but if any modifiers at all are specified it is
10090 the complex form of TYPE. E.g, "complex short" is
10091 "complex short int". */
10092
10093 if (defaulted_int && ! longlong
10094 && ! (RIDBIT_SETP (RID_LONG, specbits)
10095 || RIDBIT_SETP (RID_SHORT, specbits)
10096 || RIDBIT_SETP (RID_SIGNED, specbits)
10097 || RIDBIT_SETP (RID_UNSIGNED, specbits)))
10098 type = complex_double_type_node;
10099 else if (type == integer_type_node)
10100 type = complex_integer_type_node;
10101 else if (type == float_type_node)
10102 type = complex_float_type_node;
10103 else if (type == double_type_node)
10104 type = complex_double_type_node;
10105 else if (type == long_double_type_node)
10106 type = complex_long_double_type_node;
10107 else
10108 type = build_complex_type (type);
10109 }
10110
3dbc07b6 10111 if (sfk == sfk_conversion
3ac3d9ea 10112 && (RIDBIT_SETP (RID_CONST, specbits)
91063b51
MM
10113 || RIDBIT_SETP (RID_VOLATILE, specbits)
10114 || RIDBIT_SETP (RID_RESTRICT, specbits)))
10115 cp_error ("qualifiers are not allowed on declaration of `operator %T'",
3ac3d9ea
MM
10116 ctor_return_type);
10117
8d08fdba
MS
10118 /* Set CONSTP if this declaration is `const', whether by
10119 explicit specification or via a typedef.
10120 Likewise for VOLATILEP. */
10121
91063b51 10122 constp = !! RIDBIT_SETP (RID_CONST, specbits) + CP_TYPE_CONST_P (type);
68642fb6 10123 restrictp =
91063b51 10124 !! RIDBIT_SETP (RID_RESTRICT, specbits) + CP_TYPE_RESTRICT_P (type);
68642fb6 10125 volatilep =
91063b51
MM
10126 !! RIDBIT_SETP (RID_VOLATILE, specbits) + CP_TYPE_VOLATILE_P (type);
10127 type_quals = ((constp ? TYPE_QUAL_CONST : 0)
10128 | (restrictp ? TYPE_QUAL_RESTRICT : 0)
10129 | (volatilep ? TYPE_QUAL_VOLATILE : 0));
10130 type = cp_build_qualified_type (type, type_quals);
8d08fdba
MS
10131 staticp = 0;
10132 inlinep = !! RIDBIT_SETP (RID_INLINE, specbits);
8d08fdba 10133 virtualp = RIDBIT_SETP (RID_VIRTUAL, specbits);
db5ae43f
MS
10134 RIDBIT_RESET (RID_VIRTUAL, specbits);
10135 explicitp = RIDBIT_SETP (RID_EXPLICIT, specbits) != 0;
10136 RIDBIT_RESET (RID_EXPLICIT, specbits);
8d08fdba 10137
8d08fdba
MS
10138 if (RIDBIT_SETP (RID_STATIC, specbits))
10139 staticp = 1 + (decl_context == FIELD);
10140
10141 if (virtualp && staticp == 2)
10142 {
8251199e 10143 cp_error ("member `%D' cannot be declared both virtual and static",
8d08fdba
MS
10144 dname);
10145 staticp = 0;
10146 }
10147 friendp = RIDBIT_SETP (RID_FRIEND, specbits);
8d08fdba
MS
10148 RIDBIT_RESET (RID_FRIEND, specbits);
10149
8d08fdba
MS
10150 /* Warn if two storage classes are given. Default to `auto'. */
10151
10152 if (RIDBIT_ANY_SET (specbits))
10153 {
10154 if (RIDBIT_SETP (RID_STATIC, specbits)) nclasses++;
10155 if (RIDBIT_SETP (RID_EXTERN, specbits)) nclasses++;
10156 if (decl_context == PARM && nclasses > 0)
8251199e 10157 error ("storage class specifiers invalid in parameter declarations");
8d08fdba
MS
10158 if (RIDBIT_SETP (RID_TYPEDEF, specbits))
10159 {
10160 if (decl_context == PARM)
8251199e 10161 error ("typedef declaration invalid in parameter declaration");
8d08fdba
MS
10162 nclasses++;
10163 }
10164 if (RIDBIT_SETP (RID_AUTO, specbits)) nclasses++;
10165 if (RIDBIT_SETP (RID_REGISTER, specbits)) nclasses++;
10166 }
10167
10168 /* Give error if `virtual' is used outside of class declaration. */
b7484fbe
MS
10169 if (virtualp
10170 && (current_class_name == NULL_TREE || decl_context != FIELD))
8d08fdba 10171 {
8251199e 10172 error ("virtual outside class declaration");
8d08fdba
MS
10173 virtualp = 0;
10174 }
8d08fdba
MS
10175
10176 /* Static anonymous unions are dealt with here. */
10177 if (staticp && decl_context == TYPENAME
10178 && TREE_CODE (declspecs) == TREE_LIST
6bdb8141 10179 && ANON_AGGR_TYPE_P (TREE_VALUE (declspecs)))
8d08fdba
MS
10180 decl_context = FIELD;
10181
8d08fdba
MS
10182 /* Warn about storage classes that are invalid for certain
10183 kinds of declarations (parameters, typenames, etc.). */
10184
10185 if (nclasses > 1)
8251199e 10186 error ("multiple storage classes in declaration of `%s'", name);
8d08fdba
MS
10187 else if (decl_context != NORMAL && nclasses > 0)
10188 {
db5ae43f 10189 if ((decl_context == PARM || decl_context == CATCHPARM)
8d08fdba
MS
10190 && (RIDBIT_SETP (RID_REGISTER, specbits)
10191 || RIDBIT_SETP (RID_AUTO, specbits)))
10192 ;
fc378698
MS
10193 else if (RIDBIT_SETP (RID_TYPEDEF, specbits))
10194 ;
8d08fdba 10195 else if (decl_context == FIELD
8d08fdba
MS
10196 /* C++ allows static class elements */
10197 && RIDBIT_SETP (RID_STATIC, specbits))
10198 /* C++ also allows inlines and signed and unsigned elements,
10199 but in those cases we don't come in here. */
10200 ;
10201 else
10202 {
10203 if (decl_context == FIELD)
10204 {
b7484fbe
MS
10205 tree tmp = NULL_TREE;
10206 register int op = 0;
10207
10208 if (declarator)
10209 {
68642fb6 10210 /* Avoid trying to get an operand off an identifier node. */
9e9ff709
MS
10211 if (TREE_CODE (declarator) == IDENTIFIER_NODE)
10212 tmp = declarator;
10213 else
10214 tmp = TREE_OPERAND (declarator, 0);
b7484fbe
MS
10215 op = IDENTIFIER_OPNAME_P (tmp);
10216 }
8251199e 10217 error ("storage class specified for %s `%s'",
6eabb241 10218 op ? "member operator" : "field",
8d08fdba
MS
10219 op ? operator_name_string (tmp) : name);
10220 }
10221 else
b9d12519
KG
10222 {
10223 if (decl_context == PARM || decl_context == CATCHPARM)
10224 error ("storage class specified for parameter `%s'", name);
10225 else
10226 error ("storage class specified for typename");
10227 }
8d08fdba
MS
10228 RIDBIT_RESET (RID_REGISTER, specbits);
10229 RIDBIT_RESET (RID_AUTO, specbits);
10230 RIDBIT_RESET (RID_EXTERN, specbits);
8d08fdba
MS
10231 }
10232 }
10233 else if (RIDBIT_SETP (RID_EXTERN, specbits) && initialized && !funcdef_flag)
10234 {
a9aedbc2 10235 if (toplevel_bindings_p ())
8d08fdba 10236 {
59be0cdd 10237 /* It's common practice (and completely valid) to have a const
8d08fdba 10238 be initialized and declared extern. */
950ad3c3 10239 if (!(type_quals & TYPE_QUAL_CONST))
8251199e 10240 warning ("`%s' initialized and declared `extern'", name);
8d08fdba
MS
10241 }
10242 else
8251199e 10243 error ("`%s' has both `extern' and initializer", name);
8d08fdba
MS
10244 }
10245 else if (RIDBIT_SETP (RID_EXTERN, specbits) && funcdef_flag
a9aedbc2 10246 && ! toplevel_bindings_p ())
8251199e 10247 error ("nested function `%s' declared `extern'", name);
a9aedbc2 10248 else if (toplevel_bindings_p ())
8d08fdba
MS
10249 {
10250 if (RIDBIT_SETP (RID_AUTO, specbits))
8251199e 10251 error ("top-level declaration of `%s' specifies `auto'", name);
8d08fdba
MS
10252 }
10253
909e536a 10254 if (nclasses > 0 && friendp)
8251199e 10255 error ("storage class specifiers invalid in friend function declarations");
909e536a 10256
8d08fdba
MS
10257 /* Now figure out the structure of the declarator proper.
10258 Descend through it, creating more complex types, until we reach
10259 the declared identifier (or NULL_TREE, in an absolute declarator). */
10260
1eab9b56 10261 inner_attrs = NULL_TREE;
68642fb6 10262 ignore_attrs = 0;
1eab9b56 10263
386b8a85
JM
10264 while (declarator && TREE_CODE (declarator) != IDENTIFIER_NODE
10265 && TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
8d08fdba
MS
10266 {
10267 /* Each level of DECLARATOR is either an ARRAY_REF (for ...[..]),
10268 an INDIRECT_REF (for *...),
10269 a CALL_EXPR (for ...(...)),
10270 an identifier (for the name being declared)
10271 or a null pointer (for the place in an absolute declarator
10272 where the name was omitted).
10273 For the last two cases, we have just exited the loop.
10274
10275 For C++ it could also be
10276 a SCOPE_REF (for class :: ...). In this case, we have converted
10277 sensible names to types, and those are the values we use to
10278 qualify the member name.
10279 an ADDR_EXPR (for &...),
10280 a BIT_NOT_EXPR (for destructors)
8d08fdba
MS
10281
10282 At this point, TYPE is the type of elements of an array,
10283 or for a function to return, or for a pointer to point to.
10284 After this sequence of ifs, TYPE is the type of the
10285 array or function or pointer, and DECLARATOR has had its
10286 outermost layer removed. */
10287
bd6dd845 10288 if (type == error_mark_node)
8d08fdba
MS
10289 {
10290 if (TREE_CODE (declarator) == SCOPE_REF)
10291 declarator = TREE_OPERAND (declarator, 1);
10292 else
10293 declarator = TREE_OPERAND (declarator, 0);
10294 continue;
10295 }
10296 if (quals != NULL_TREE
10297 && (declarator == NULL_TREE
10298 || TREE_CODE (declarator) != SCOPE_REF))
10299 {
10300 if (ctype == NULL_TREE && TREE_CODE (type) == METHOD_TYPE)
10301 ctype = TYPE_METHOD_BASETYPE (type);
10302 if (ctype != NULL_TREE)
10303 {
8d08fdba 10304 tree dummy = build_decl (TYPE_DECL, NULL_TREE, type);
535233a8 10305 grok_method_quals (ctype, dummy, quals);
8d08fdba 10306 type = TREE_TYPE (dummy);
535233a8 10307 ctype = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (type)));
8d08fdba
MS
10308 quals = NULL_TREE;
10309 }
10310 }
1eab9b56
JM
10311
10312 /* See the comment for the TREE_LIST case, below. */
10313 if (ignore_attrs)
10314 ignore_attrs = 0;
10315 else if (inner_attrs)
10316 {
10317 decl_attributes (type, inner_attrs, NULL_TREE);
10318 inner_attrs = NULL_TREE;
10319 }
10320
8d08fdba
MS
10321 switch (TREE_CODE (declarator))
10322 {
52fbc847
JM
10323 case TREE_LIST:
10324 {
10325 /* We encode a declarator with embedded attributes using
1eab9b56
JM
10326 a TREE_LIST. The attributes apply to the declarator
10327 directly inside them, so we have to skip an iteration
10328 before applying them to the type. If the declarator just
10329 inside is the declarator-id, we apply the attrs to the
10330 decl itself. */
10331 inner_attrs = TREE_PURPOSE (declarator);
10332 ignore_attrs = 1;
52fbc847 10333 declarator = TREE_VALUE (declarator);
52fbc847
JM
10334 }
10335 break;
10336
8d08fdba
MS
10337 case ARRAY_REF:
10338 {
2848ad0f 10339 register tree size;
8d08fdba 10340
2848ad0f 10341 size = TREE_OPERAND (declarator, 1);
8d08fdba 10342
f2e2cbd4 10343 /* VC++ spells a zero-sized array with []. */
e8ea7036
MM
10344 if (size == NULL_TREE && decl_context == FIELD && ! staticp
10345 && ! RIDBIT_SETP (RID_TYPEDEF, specbits))
f2e2cbd4
JM
10346 size = integer_zero_node;
10347
2848ad0f 10348 declarator = TREE_OPERAND (declarator, 0);
8d08fdba 10349
2848ad0f 10350 type = create_array_type_for_decl (dname, type, size);
8d08fdba
MS
10351 ctype = NULL_TREE;
10352 }
10353 break;
10354
10355 case CALL_EXPR:
10356 {
10357 tree arg_types;
f376e137 10358 int funcdecl_p;
43f887f9 10359 tree inner_parms = CALL_DECLARATOR_PARMS (declarator);
f376e137 10360 tree inner_decl = TREE_OPERAND (declarator, 0);
8d08fdba
MS
10361
10362 /* Declaring a function type.
10363 Make sure we have a valid type for the function to return. */
8d08fdba 10364
91063b51 10365 /* We now know that the TYPE_QUALS don't apply to the
14ae7e7d 10366 decl, but to its return type. */
91063b51 10367 type_quals = TYPE_UNQUALIFIED;
8d08fdba
MS
10368
10369 /* Warn about some types functions can't return. */
10370
10371 if (TREE_CODE (type) == FUNCTION_TYPE)
10372 {
8251199e 10373 error ("`%s' declared as function returning a function", name);
8d08fdba
MS
10374 type = integer_type_node;
10375 }
10376 if (TREE_CODE (type) == ARRAY_TYPE)
10377 {
8251199e 10378 error ("`%s' declared as function returning an array", name);
8d08fdba
MS
10379 type = integer_type_node;
10380 }
10381
f376e137
MS
10382 if (inner_decl && TREE_CODE (inner_decl) == SCOPE_REF)
10383 inner_decl = TREE_OPERAND (inner_decl, 1);
10384
68642fb6 10385 if (inner_decl && TREE_CODE (inner_decl) == TEMPLATE_ID_EXPR)
386b8a85
JM
10386 inner_decl = dname;
10387
b7484fbe 10388 /* Pick up type qualifiers which should be applied to `this'. */
43f887f9 10389 quals = CALL_DECLARATOR_QUALS (declarator);
b7484fbe 10390
c11b6f21 10391 /* Pick up the exception specifications. */
43f887f9 10392 raises = CALL_DECLARATOR_EXCEPTION_SPEC (declarator);
c11b6f21 10393
f376e137
MS
10394 /* Say it's a definition only for the CALL_EXPR
10395 closest to the identifier. */
beb53fb8 10396 funcdecl_p
68642fb6 10397 = inner_decl
386b8a85 10398 && (TREE_CODE (inner_decl) == IDENTIFIER_NODE
68642fb6 10399 || TREE_CODE (inner_decl) == TEMPLATE_ID_EXPR
386b8a85 10400 || TREE_CODE (inner_decl) == BIT_NOT_EXPR);
68642fb6 10401
8d08fdba
MS
10402 if (ctype == NULL_TREE
10403 && decl_context == FIELD
f376e137 10404 && funcdecl_p
8d08fdba
MS
10405 && (friendp == 0 || dname == current_class_name))
10406 ctype = current_class_type;
10407
3dbc07b6 10408 if (ctype && sfk == sfk_conversion)
8d08fdba
MS
10409 TYPE_HAS_CONVERSION (ctype) = 1;
10410 if (ctype && constructor_name (ctype) == dname)
10411 {
10412 /* We are within a class's scope. If our declarator name
10413 is the same as the class name, and we are defining
10414 a function, then it is a constructor/destructor, and
10415 therefore returns a void type. */
10416
10417 if (flags == DTOR_FLAG)
10418 {
cab1f180
ML
10419 /* ISO C++ 12.4/2. A destructor may not be
10420 declared const or volatile. A destructor may
10421 not be static. */
8d08fdba 10422 if (staticp == 2)
8251199e 10423 error ("destructor cannot be static member function");
b7484fbe 10424 if (quals)
8d08fdba 10425 {
4f70a846
MM
10426 cp_error ("destructors may not be `%s'",
10427 IDENTIFIER_POINTER (TREE_VALUE (quals)));
10428 quals = NULL_TREE;
8d08fdba
MS
10429 }
10430 if (decl_context == FIELD)
10431 {
4dacf5bd
KG
10432 if (! member_function_or_else (ctype,
10433 current_class_type,
10434 flags))
8d08fdba
MS
10435 return void_type_node;
10436 }
10437 }
2c73f9f5 10438 else /* It's a constructor. */
8d08fdba 10439 {
db5ae43f
MS
10440 if (explicitp == 1)
10441 explicitp = 2;
cab1f180
ML
10442 /* ISO C++ 12.1. A constructor may not be
10443 declared const or volatile. A constructor may
10444 not be virtual. A constructor may not be
10445 static. */
8d08fdba 10446 if (staticp == 2)
8251199e 10447 error ("constructor cannot be static member function");
8d08fdba
MS
10448 if (virtualp)
10449 {
8251199e 10450 pedwarn ("constructors cannot be declared virtual");
8d08fdba
MS
10451 virtualp = 0;
10452 }
b7484fbe 10453 if (quals)
8d08fdba 10454 {
4f70a846
MM
10455 cp_error ("constructors may not be `%s'",
10456 IDENTIFIER_POINTER (TREE_VALUE (quals)));
10457 quals = NULL_TREE;
8d08fdba 10458 }
8d08fdba 10459 {
51c184be 10460 RID_BIT_TYPE tmp_bits;
fc378698 10461 bcopy ((void*)&specbits, (void*)&tmp_bits, sizeof (RID_BIT_TYPE));
51c184be
MS
10462 RIDBIT_RESET (RID_INLINE, tmp_bits);
10463 RIDBIT_RESET (RID_STATIC, tmp_bits);
10464 if (RIDBIT_ANY_SET (tmp_bits))
8251199e 10465 error ("return value type specifier for constructor ignored");
8d08fdba 10466 }
6eabb241 10467 if (decl_context == FIELD)
8d08fdba 10468 {
4dacf5bd
KG
10469 if (! member_function_or_else (ctype,
10470 current_class_type,
10471 flags))
8d08fdba
MS
10472 return void_type_node;
10473 TYPE_HAS_CONSTRUCTOR (ctype) = 1;
3dbc07b6 10474 if (sfk != sfk_constructor)
8d08fdba
MS
10475 return NULL_TREE;
10476 }
10477 }
10478 if (decl_context == FIELD)
10479 staticp = 0;
10480 }
b7484fbe 10481 else if (friendp)
8d08fdba 10482 {
b7484fbe 10483 if (initialized)
8251199e 10484 error ("can't initialize friend function `%s'", name);
b7484fbe
MS
10485 if (virtualp)
10486 {
10487 /* Cannot be both friend and virtual. */
8251199e 10488 error ("virtual functions cannot be friends");
b7484fbe
MS
10489 RIDBIT_RESET (RID_FRIEND, specbits);
10490 friendp = 0;
10491 }
28cbf42c 10492 if (decl_context == NORMAL)
8251199e 10493 error ("friend declaration not in class definition");
28cbf42c 10494 if (current_function_decl && funcdef_flag)
8251199e 10495 cp_error ("can't define friend function `%s' in a local class definition",
28cbf42c 10496 name);
8d08fdba
MS
10497 }
10498
8d08fdba
MS
10499 /* Construct the function type and go to the next
10500 inner layer of declarator. */
10501
f376e137 10502 declarator = TREE_OPERAND (declarator, 0);
8d08fdba 10503
f376e137
MS
10504 /* FIXME: This is where default args should be fully
10505 processed. */
8d08fdba 10506
f376e137 10507 arg_types = grokparms (inner_parms, funcdecl_p ? funcdef_flag : 0);
8d08fdba 10508
4f70a846 10509 if (declarator && flags == DTOR_FLAG)
8d08fdba 10510 {
4f70a846
MM
10511 /* A destructor declared in the body of a class will
10512 be represented as a BIT_NOT_EXPR. But, we just
10513 want the underlying IDENTIFIER. */
8d08fdba 10514 if (TREE_CODE (declarator) == BIT_NOT_EXPR)
4f70a846 10515 declarator = TREE_OPERAND (declarator, 0);
68642fb6 10516
4f70a846
MM
10517 if (strict_prototype == 0 && arg_types == NULL_TREE)
10518 arg_types = void_list_node;
10519 else if (arg_types == NULL_TREE
10520 || arg_types != void_list_node)
8d08fdba 10521 {
4f70a846
MM
10522 cp_error ("destructors may not have parameters");
10523 arg_types = void_list_node;
10524 last_function_parms = NULL_TREE;
8d08fdba
MS
10525 }
10526 }
10527
d22c8596 10528 /* ANSI says that `const int foo ();'
8d08fdba 10529 does not make the function foo const. */
d22c8596 10530 type = build_function_type (type, arg_types);
42976354
BK
10531
10532 {
10533 tree t;
10534 for (t = arg_types; t; t = TREE_CHAIN (t))
10535 if (TREE_PURPOSE (t)
10536 && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
10537 {
10538 add_defarg_fn (type);
10539 break;
10540 }
10541 }
8d08fdba
MS
10542 }
10543 break;
10544
10545 case ADDR_EXPR:
10546 case INDIRECT_REF:
10547 /* Filter out pointers-to-references and references-to-references.
10548 We can get these if a TYPE_DECL is used. */
10549
10550 if (TREE_CODE (type) == REFERENCE_TYPE)
10551 {
8251199e 10552 error ("cannot declare %s to references",
8d08fdba
MS
10553 TREE_CODE (declarator) == ADDR_EXPR
10554 ? "references" : "pointers");
10555 declarator = TREE_OPERAND (declarator, 0);
10556 continue;
10557 }
10558
a5894242
MS
10559 if (TREE_CODE (type) == OFFSET_TYPE
10560 && (TREE_CODE (TREE_TYPE (type)) == VOID_TYPE
10561 || TREE_CODE (TREE_TYPE (type)) == REFERENCE_TYPE))
10562 {
8251199e 10563 cp_error ("cannot declare pointer to `%#T' member",
a5894242
MS
10564 TREE_TYPE (type));
10565 type = TREE_TYPE (type);
10566 }
10567
61a127b3
MM
10568 /* Merge any constancy or volatility into the target type
10569 for the pointer. */
10570
91063b51
MM
10571 /* We now know that the TYPE_QUALS don't apply to the decl,
10572 but to the target of the pointer. */
10573 type_quals = TYPE_UNQUALIFIED;
8d08fdba 10574
6eabb241 10575 if (TREE_CODE (declarator) == ADDR_EXPR)
8d08fdba 10576 {
69851283
MM
10577 if (TREE_CODE (type) == VOID_TYPE)
10578 error ("invalid type: `void &'");
8d08fdba 10579 else
69851283 10580 type = build_reference_type (type);
8d08fdba
MS
10581 }
10582 else if (TREE_CODE (type) == METHOD_TYPE)
d8f8dca1 10583 type = build_ptrmemfunc_type (build_pointer_type (type));
8d08fdba
MS
10584 else
10585 type = build_pointer_type (type);
10586
10587 /* Process a list of type modifier keywords (such as
10588 const or volatile) that were given inside the `*' or `&'. */
10589
10590 if (TREE_TYPE (declarator))
10591 {
10592 register tree typemodlist;
10593 int erred = 0;
91063b51
MM
10594
10595 constp = 0;
10596 volatilep = 0;
10597 restrictp = 0;
8d08fdba
MS
10598 for (typemodlist = TREE_TYPE (declarator); typemodlist;
10599 typemodlist = TREE_CHAIN (typemodlist))
10600 {
91063b51
MM
10601 tree qualifier = TREE_VALUE (typemodlist);
10602
10603 if (qualifier == ridpointers[(int) RID_CONST])
8d08fdba 10604 constp++;
91063b51 10605 else if (qualifier == ridpointers[(int) RID_VOLATILE])
8d08fdba 10606 volatilep++;
91063b51
MM
10607 else if (qualifier == ridpointers[(int) RID_RESTRICT])
10608 restrictp++;
8d08fdba
MS
10609 else if (!erred)
10610 {
10611 erred = 1;
91063b51 10612 error ("invalid type modifier within pointer declarator");
8d08fdba
MS
10613 }
10614 }
10615 if (constp > 1)
8251199e 10616 pedwarn ("duplicate `const'");
8d08fdba 10617 if (volatilep > 1)
8251199e 10618 pedwarn ("duplicate `volatile'");
91063b51
MM
10619 if (restrictp > 1)
10620 pedwarn ("duplicate `restrict'");
10621
10622 type_quals = ((constp ? TYPE_QUAL_CONST : 0)
10623 | (restrictp ? TYPE_QUAL_RESTRICT : 0)
10624 | (volatilep ? TYPE_QUAL_VOLATILE : 0));
a0a33927
MS
10625 if (TREE_CODE (declarator) == ADDR_EXPR
10626 && (constp || volatilep))
10627 {
10628 if (constp)
8251199e 10629 pedwarn ("discarding `const' applied to a reference");
a0a33927 10630 if (volatilep)
8251199e 10631 pedwarn ("discarding `volatile' applied to a reference");
91063b51 10632 type_quals &= ~(TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE);
a0a33927 10633 }
91063b51 10634 type = cp_build_qualified_type (type, type_quals);
8d08fdba
MS
10635 }
10636 declarator = TREE_OPERAND (declarator, 0);
10637 ctype = NULL_TREE;
10638 break;
10639
10640 case SCOPE_REF:
10641 {
10642 /* We have converted type names to NULL_TREE if the
10643 name was bogus, or to a _TYPE node, if not.
10644
10645 The variable CTYPE holds the type we will ultimately
10646 resolve to. The code here just needs to build
10647 up appropriate member types. */
10648 tree sname = TREE_OPERAND (declarator, 1);
386b8a85
JM
10649 tree t;
10650
8d08fdba
MS
10651 /* Destructors can have their visibilities changed as well. */
10652 if (TREE_CODE (sname) == BIT_NOT_EXPR)
10653 sname = TREE_OPERAND (sname, 0);
10654
10655 if (TREE_COMPLEXITY (declarator) == 0)
10656 /* This needs to be here, in case we are called
10657 multiple times. */ ;
9a68c51f
JM
10658 else if (TREE_COMPLEXITY (declarator) == -1)
10659 /* Namespace member. */
10660 pop_decl_namespace ();
8d08fdba 10661 else if (friendp && (TREE_COMPLEXITY (declarator) < 2))
2c73f9f5 10662 /* Don't fall out into global scope. Hides real bug? --eichin */ ;
5566b478
MS
10663 else if (! IS_AGGR_TYPE_CODE
10664 (TREE_CODE (TREE_OPERAND (declarator, 0))))
10665 ;
8d08fdba
MS
10666 else if (TREE_COMPLEXITY (declarator) == current_class_depth)
10667 {
9a3b49ac
MS
10668 /* Resolve any TYPENAME_TYPEs from the decl-specifier-seq
10669 that refer to ctype. They couldn't be resolved earlier
10670 because we hadn't pushed into the class yet.
10671 Example: resolve 'B<T>::type' in
10672 'B<typename B<T>::type> B<T>::f () { }'. */
10673 if (current_template_parms
10674 && uses_template_parms (type)
10675 && uses_template_parms (current_class_type))
10676 {
10677 tree args = current_template_args ();
4393e105 10678 type = tsubst (type, args, /*complain=*/1, NULL_TREE);
9a3b49ac
MS
10679 }
10680
a28e3c7f
MS
10681 /* This pop_nested_class corresponds to the
10682 push_nested_class used to push into class scope for
10683 parsing the argument list of a function decl, in
10684 qualified_id. */
b74a0560 10685 pop_nested_class ();
8d08fdba
MS
10686 TREE_COMPLEXITY (declarator) = current_class_depth;
10687 }
10688 else
10689 my_friendly_abort (16);
10690
10691 if (TREE_OPERAND (declarator, 0) == NULL_TREE)
10692 {
10693 /* We had a reference to a global decl, or
10694 perhaps we were given a non-aggregate typedef,
10695 in which case we cleared this out, and should just
10696 keep going as though it wasn't there. */
10697 declarator = sname;
10698 continue;
10699 }
10700 ctype = TREE_OPERAND (declarator, 0);
10701
386b8a85 10702 t = ctype;
68642fb6 10703 while (t != NULL_TREE && CLASS_TYPE_P (t))
386b8a85 10704 {
da8a7456
MM
10705 /* You're supposed to have one `template <...>'
10706 for every template class, but you don't need one
10707 for a full specialization. For example:
10708
10709 template <class T> struct S{};
10710 template <> struct S<int> { void f(); };
10711 void S<int>::f () {}
10712
10713 is correct; there shouldn't be a `template <>' for
10714 the definition of `S<int>::f'. */
10715 if (CLASSTYPE_TEMPLATE_INFO (t)
10716 && (CLASSTYPE_TEMPLATE_INSTANTIATION (t)
10717 || uses_template_parms (CLASSTYPE_TI_ARGS (t))))
386b8a85 10718 template_count += 1;
da8a7456 10719
386b8a85
JM
10720 t = TYPE_MAIN_DECL (t);
10721 if (DECL_LANG_SPECIFIC (t))
4f1c5b7d 10722 t = DECL_CONTEXT (t);
386b8a85
JM
10723 else
10724 t = NULL_TREE;
10725 }
10726
8d08fdba
MS
10727 if (sname == NULL_TREE)
10728 goto done_scoping;
10729
10730 if (TREE_CODE (sname) == IDENTIFIER_NODE)
10731 {
10732 /* This is the `standard' use of the scoping operator:
10733 basetype :: member . */
10734
db5ae43f 10735 if (ctype == current_class_type)
28cbf42c
MS
10736 {
10737 /* class A {
10738 void A::f ();
10739 };
10740
10741 Is this ill-formed? */
10742
10743 if (pedantic)
8251199e 10744 cp_pedwarn ("extra qualification `%T::' on member `%s' ignored",
28cbf42c
MS
10745 ctype, name);
10746 }
db5ae43f 10747 else if (TREE_CODE (type) == FUNCTION_TYPE)
8d08fdba
MS
10748 {
10749 if (current_class_type == NULL_TREE
8d08fdba 10750 || friendp)
14ae7e7d
JM
10751 type = build_cplus_method_type (ctype, TREE_TYPE (type),
10752 TYPE_ARG_TYPES (type));
8d08fdba
MS
10753 else
10754 {
8251199e 10755 cp_error ("cannot declare member function `%T::%s' within `%T'",
a3203465 10756 ctype, name, current_class_type);
8d08fdba
MS
10757 return void_type_node;
10758 }
10759 }
5566b478 10760 else if (RIDBIT_SETP (RID_TYPEDEF, specbits)
d0f062fb 10761 || COMPLETE_TYPE_P (complete_type (ctype)))
8d08fdba 10762 {
2c73f9f5 10763 /* Have to move this code elsewhere in this function.
db5ae43f
MS
10764 this code is used for i.e., typedef int A::M; M *pm;
10765
10766 It is? How? jason 10/2/94 */
8d08fdba 10767
8d08fdba
MS
10768 if (current_class_type)
10769 {
8251199e 10770 cp_error ("cannot declare member `%T::%s' within `%T'",
db5ae43f
MS
10771 ctype, name, current_class_type);
10772 return void_type_node;
8d08fdba
MS
10773 }
10774 type = build_offset_type (ctype, type);
10775 }
10776 else if (uses_template_parms (ctype))
10777 {
8d08fdba 10778 if (TREE_CODE (type) == FUNCTION_TYPE)
beb53fb8 10779 type
14ae7e7d 10780 = build_cplus_method_type (ctype, TREE_TYPE (type),
beb53fb8 10781 TYPE_ARG_TYPES (type));
8d08fdba
MS
10782 }
10783 else
10784 {
8251199e 10785 cp_error ("structure `%T' not yet defined", ctype);
8d08fdba
MS
10786 return error_mark_node;
10787 }
10788
10789 declarator = sname;
10790 }
8d08fdba
MS
10791 else if (TREE_CODE (sname) == SCOPE_REF)
10792 my_friendly_abort (17);
10793 else
10794 {
10795 done_scoping:
10796 declarator = TREE_OPERAND (declarator, 1);
10797 if (declarator && TREE_CODE (declarator) == CALL_EXPR)
10798 /* In this case, we will deal with it later. */
10799 ;
10800 else
10801 {
10802 if (TREE_CODE (type) == FUNCTION_TYPE)
14ae7e7d
JM
10803 type = build_cplus_method_type (ctype, TREE_TYPE (type),
10804 TYPE_ARG_TYPES (type));
8d08fdba
MS
10805 else
10806 type = build_offset_type (ctype, type);
10807 }
10808 }
10809 }
10810 break;
10811
10812 case BIT_NOT_EXPR:
10813 declarator = TREE_OPERAND (declarator, 0);
10814 break;
10815
8d08fdba
MS
10816 case RECORD_TYPE:
10817 case UNION_TYPE:
10818 case ENUMERAL_TYPE:
10819 declarator = NULL_TREE;
10820 break;
10821
10822 case ERROR_MARK:
10823 declarator = NULL_TREE;
10824 break;
10825
10826 default:
10827 my_friendly_abort (158);
10828 }
10829 }
10830
1eab9b56
JM
10831 /* See the comment for the TREE_LIST case, above. */
10832 if (inner_attrs)
10833 {
10834 if (! ignore_attrs)
10835 decl_attributes (type, inner_attrs, NULL_TREE);
10836 else if (attrlist)
10837 TREE_VALUE (attrlist) = chainon (inner_attrs, TREE_VALUE (attrlist));
10838 else
10839 attrlist = build_decl_list (NULL_TREE, inner_attrs);
10840 }
10841
419c6212
JM
10842 /* Now TYPE has the actual type. */
10843
34fc957d 10844 if (explicitp == 1 || (explicitp && friendp))
db5ae43f 10845 {
34fc957d
NS
10846 /* [dcl.fct.spec] The explicit specifier shall only be used in
10847 declarations of constructors within a class definition. */
10848 error ("only declarations of constructors can be `explicit'");
db5ae43f
MS
10849 explicitp = 0;
10850 }
10851
f30432d7
MS
10852 if (RIDBIT_SETP (RID_MUTABLE, specbits))
10853 {
34fc957d
NS
10854 if (current_class_name == NULL_TREE || decl_context == PARM || friendp)
10855 {
10856 error ("non-member `%s' cannot be declared `mutable'", name);
10857 RIDBIT_RESET (RID_MUTABLE, specbits);
10858 }
10859 else if (decl_context == TYPENAME || RIDBIT_SETP (RID_TYPEDEF, specbits))
f30432d7 10860 {
34fc957d 10861 error ("non-object member `%s' cannot be declared `mutable'", name);
f30432d7
MS
10862 RIDBIT_RESET (RID_MUTABLE, specbits);
10863 }
34fc957d
NS
10864 else if (TREE_CODE (type) == FUNCTION_TYPE
10865 || TREE_CODE (type) == METHOD_TYPE)
10866 {
10867 error ("function `%s' cannot be declared `mutable'", name);
10868 RIDBIT_RESET (RID_MUTABLE, specbits);
10869 }
f30432d7
MS
10870 else if (staticp)
10871 {
8251199e 10872 error ("static `%s' cannot be declared `mutable'", name);
f30432d7
MS
10873 RIDBIT_RESET (RID_MUTABLE, specbits);
10874 }
34fc957d
NS
10875 else if (type_quals & TYPE_QUAL_CONST)
10876 {
10877 error ("const `%s' cannot be declared `mutable'", name);
10878 RIDBIT_RESET (RID_MUTABLE, specbits);
10879 }
f30432d7
MS
10880 }
10881
efe38fab
JM
10882 if (declarator == NULL_TREE
10883 || TREE_CODE (declarator) == IDENTIFIER_NODE
10884 || (TREE_CODE (declarator) == TEMPLATE_ID_EXPR
10885 && (TREE_CODE (type) == FUNCTION_TYPE
10886 || TREE_CODE (type) == METHOD_TYPE)))
10887 /* OK */;
10888 else if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
10889 {
10890 cp_error ("template-id `%D' used as a declarator", declarator);
10891 declarator = dname;
10892 }
10893 else
419c6212 10894 /* Unexpected declarator format. */
efe38fab
JM
10895 my_friendly_abort (990210);
10896
419c6212
JM
10897 /* If this is declaring a typedef name, return a TYPE_DECL. */
10898
fc378698 10899 if (RIDBIT_SETP (RID_TYPEDEF, specbits) && decl_context != TYPENAME)
8d08fdba
MS
10900 {
10901 tree decl;
10902
10903 /* Note that the grammar rejects storage classes
10904 in typenames, fields or parameters. */
eff71ab0
PB
10905 if (current_lang_name == lang_name_java)
10906 TYPE_FOR_JAVA (type) = 1;
8d08fdba 10907
d2e5ee5c
MS
10908 if (decl_context == FIELD)
10909 {
094fe153 10910 if (declarator == constructor_name (current_class_type))
cb9a3ff8 10911 cp_pedwarn ("ISO C++ forbids nested type `%D' with same name as enclosing class",
d2e5ee5c
MS
10912 declarator);
10913 decl = build_lang_decl (TYPE_DECL, declarator, type);
d2e5ee5c
MS
10914 }
10915 else
7fb4a8f7
JM
10916 {
10917 /* Make sure this typedef lives as long as its type,
10918 since it might be used as a template parameter. */
9188c363 10919 if (processing_template_decl)
b0d06515 10920 decl = build_lang_decl (TYPE_DECL, declarator, type);
9188c363
MM
10921 else
10922 decl = build_decl (TYPE_DECL, declarator, type);
7fb4a8f7 10923 }
d2e5ee5c 10924
9188c363
MM
10925 /* If the user declares "typedef struct {...} foo" then the
10926 struct will have an anonymous name. Fill that name in now.
10927 Nothing can refer to it, so nothing needs know about the name
10928 change. */
8d08fdba 10929 if (type != error_mark_node
2bdb0643 10930 && declarator
8d08fdba
MS
10931 && TYPE_NAME (type)
10932 && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
b537d120
MM
10933 && ANON_AGGRNAME_P (TYPE_IDENTIFIER (type))
10934 && CP_TYPE_QUALS (type) == TYPE_UNQUALIFIED)
8d08fdba 10935 {
dcd08efc
JM
10936 tree oldname = TYPE_NAME (type);
10937 tree t;
10938
2c73f9f5 10939 /* Replace the anonymous name with the real name everywhere. */
8d08fdba 10940 lookup_tag_reverse (type, declarator);
dcd08efc
JM
10941 for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
10942 if (TYPE_NAME (t) == oldname)
10943 TYPE_NAME (t) = decl;
8d08fdba
MS
10944
10945 if (TYPE_LANG_SPECIFIC (type))
10946 TYPE_WAS_ANONYMOUS (type) = 1;
10947
33964bf4
MM
10948 /* If this is a typedef within a template class, the nested
10949 type is a (non-primary) template. The name for the
10950 template needs updating as well. */
10951 if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
68642fb6 10952 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type))
33964bf4
MM
10953 = TYPE_IDENTIFIER (type);
10954
68642fb6 10955 /* XXX Temporarily set the scope.
2c73f9f5
ML
10956 When returning, start_decl expects it as NULL_TREE,
10957 and will then then set it using pushdecl. */
10958 my_friendly_assert (DECL_CONTEXT (decl) == NULL_TREE, 980404);
10959 if (current_class_type)
10960 DECL_CONTEXT (decl) = current_class_type;
10961 else
cb0dbb9a 10962 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
2c73f9f5 10963
d2e5ee5c
MS
10964 DECL_ASSEMBLER_NAME (decl) = DECL_NAME (decl);
10965 DECL_ASSEMBLER_NAME (decl)
10966 = get_identifier (build_overload_name (type, 1, 1));
2c73f9f5 10967 DECL_CONTEXT (decl) = NULL_TREE;
50a6dbd7
JM
10968
10969 /* FIXME remangle member functions; member functions of a
10970 type with external linkage have external linkage. */
fc378698 10971 }
fc378698 10972
8d08fdba
MS
10973 if (TREE_CODE (type) == OFFSET_TYPE || TREE_CODE (type) == METHOD_TYPE)
10974 {
8251199e 10975 cp_error_at ("typedef name may not be class-qualified", decl);
a3203465 10976 return NULL_TREE;
8d08fdba
MS
10977 }
10978 else if (quals)
10979 {
10980 if (ctype == NULL_TREE)
10981 {
10982 if (TREE_CODE (type) != METHOD_TYPE)
cb9a3ff8 10983 cp_error_at ("invalid type qualifier for non-member function type", decl);
8d08fdba
MS
10984 else
10985 ctype = TYPE_METHOD_BASETYPE (type);
10986 }
10987 if (ctype != NULL_TREE)
10988 grok_method_quals (ctype, decl, quals);
10989 }
10990
10991 if (RIDBIT_SETP (RID_SIGNED, specbits)
10992 || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
10993 C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
10994
c91a56d2
MS
10995 bad_specifiers (decl, "type", virtualp, quals != NULL_TREE,
10996 inlinep, friendp, raises != NULL_TREE);
10997
10998 if (initialized)
8251199e 10999 error ("typedef declaration includes an initializer");
c91a56d2 11000
8d08fdba
MS
11001 return decl;
11002 }
11003
11004 /* Detect the case of an array type of unspecified size
11005 which came, as such, direct from a typedef name.
11006 We must copy the type, so that each identifier gets
11007 a distinct type, so that each identifier's size can be
11008 controlled separately by its own initializer. */
11009
11010 if (type == typedef_type && TREE_CODE (type) == ARRAY_TYPE
11011 && TYPE_DOMAIN (type) == NULL_TREE)
11012 {
11013 type = build_cplus_array_type (TREE_TYPE (type), TYPE_DOMAIN (type));
11014 }
11015
11016 /* If this is a type name (such as, in a cast or sizeof),
11017 compute the type and return it now. */
11018
11019 if (decl_context == TYPENAME)
11020 {
11021 /* Note that the grammar rejects storage classes
11022 in typenames, fields or parameters. */
91063b51 11023 if (type_quals != TYPE_UNQUALIFIED)
6eabb241 11024 type_quals = TYPE_UNQUALIFIED;
8d08fdba
MS
11025
11026 /* Special case: "friend class foo" looks like a TYPENAME context. */
11027 if (friendp)
11028 {
91063b51 11029 if (type_quals != TYPE_UNQUALIFIED)
b7484fbe 11030 {
91063b51
MM
11031 cp_error ("type qualifiers specified for friend class declaration");
11032 type_quals = TYPE_UNQUALIFIED;
b7484fbe
MS
11033 }
11034 if (inlinep)
11035 {
8251199e 11036 cp_error ("`inline' specified for friend class declaration");
b7484fbe
MS
11037 inlinep = 0;
11038 }
11039
11040 /* Only try to do this stuff if we didn't already give up. */
11041 if (type != integer_type_node)
11042 {
11043 /* A friendly class? */
11044 if (current_class_type)
11045 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type));
11046 else
8251199e 11047 error ("trying to make class `%s' a friend of global scope",
b7484fbe
MS
11048 TYPE_NAME_STRING (type));
11049 type = void_type_node;
11050 }
8d08fdba
MS
11051 }
11052 else if (quals)
11053 {
8d08fdba
MS
11054 if (ctype == NULL_TREE)
11055 {
41cbc04c
NS
11056 if (TREE_CODE (type) != METHOD_TYPE)
11057 cp_error ("invalid qualifiers on non-member function type");
11058 else
11059 ctype = TYPE_METHOD_BASETYPE (type);
11060 }
11061 if (ctype)
11062 {
11063 tree dummy = build_decl (TYPE_DECL, declarator, type);
11064 grok_method_quals (ctype, dummy, quals);
11065 type = TREE_TYPE (dummy);
8d08fdba 11066 }
8d08fdba
MS
11067 }
11068
11069 return type;
11070 }
11071 else if (declarator == NULL_TREE && decl_context != PARM
db5ae43f 11072 && decl_context != CATCHPARM
8d08fdba
MS
11073 && TREE_CODE (type) != UNION_TYPE
11074 && ! bitfield)
11075 {
8251199e 11076 cp_error ("abstract declarator `%T' used as declaration", type);
8d08fdba
MS
11077 declarator = make_anon_name ();
11078 }
11079
11080 /* `void' at top level (not within pointer)
11081 is allowed only in typedefs or type names.
11082 We don't complain about parms either, but that is because
11083 a better error message can be made later. */
11084
a1774733 11085 if (TREE_CODE (type) == VOID_TYPE && decl_context != PARM)
8d08fdba 11086 {
b7484fbe 11087 if (! declarator)
8251199e 11088 error ("unnamed variable or field declared void");
b7484fbe 11089 else if (TREE_CODE (declarator) == IDENTIFIER_NODE)
8d08fdba
MS
11090 {
11091 if (IDENTIFIER_OPNAME_P (declarator))
8d08fdba 11092 my_friendly_abort (356);
8d08fdba 11093 else
8251199e 11094 error ("variable or field `%s' declared void", name);
8d08fdba
MS
11095 }
11096 else
8251199e 11097 error ("variable or field declared void");
8d08fdba
MS
11098 type = integer_type_node;
11099 }
11100
11101 /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
11102 or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE. */
11103
14ae7e7d
JM
11104 if (decl_context == PARM || decl_context == CATCHPARM)
11105 {
11106 if (ctype || in_namespace)
11107 error ("cannot use `::' in parameter declaration");
11108
11109 /* A parameter declared as an array of T is really a pointer to T.
11110 One declared as a function is really a pointer to a function.
11111 One declared as a member is really a pointer to member. */
11112
11113 if (TREE_CODE (type) == ARRAY_TYPE)
11114 {
11115 /* Transfer const-ness of array into that of type pointed to. */
11116 type = build_pointer_type (TREE_TYPE (type));
91063b51 11117 type_quals = TYPE_UNQUALIFIED;
14ae7e7d
JM
11118 }
11119 else if (TREE_CODE (type) == FUNCTION_TYPE)
11120 type = build_pointer_type (type);
11121 else if (TREE_CODE (type) == OFFSET_TYPE)
11122 type = build_pointer_type (type);
11123 else if (TREE_CODE (type) == VOID_TYPE && declarator)
11124 {
11125 error ("declaration of `%s' as void", name);
11126 return NULL_TREE;
11127 }
11128 }
68642fb6 11129
8d08fdba
MS
11130 {
11131 register tree decl;
11132
11133 if (decl_context == PARM)
11134 {
ff350acd 11135 decl = build_decl (PARM_DECL, declarator, type);
8d08fdba
MS
11136
11137 bad_specifiers (decl, "parameter", virtualp, quals != NULL_TREE,
11138 inlinep, friendp, raises != NULL_TREE);
8d08fdba
MS
11139
11140 /* Compute the type actually passed in the parmlist,
11141 for the case where there is no prototype.
11142 (For example, shorts and chars are passed as ints.)
11143 When there is a prototype, this is overridden later. */
11144
39211cd5 11145 DECL_ARG_TYPE (decl) = type_promotes_to (type);
8d08fdba
MS
11146 }
11147 else if (decl_context == FIELD)
11148 {
11149 if (type == error_mark_node)
11150 {
11151 /* Happens when declaring arrays of sizes which
11152 are error_mark_node, for example. */
11153 decl = NULL_TREE;
11154 }
997a088c 11155 else if (in_namespace && !friendp)
05008fb9
MM
11156 {
11157 /* Something like struct S { int N::j; }; */
8251199e 11158 cp_error ("invalid use of `::'");
05008fb9
MM
11159 decl = NULL_TREE;
11160 }
8d08fdba
MS
11161 else if (TREE_CODE (type) == FUNCTION_TYPE)
11162 {
11163 int publicp = 0;
e1467ff2 11164 tree function_context;
8d08fdba 11165
72b7eeff
MS
11166 /* We catch the others as conflicts with the builtin
11167 typedefs. */
11168 if (friendp && declarator == ridpointers[(int) RID_SIGNED])
11169 {
8251199e 11170 cp_error ("function `%D' cannot be declared friend",
72b7eeff
MS
11171 declarator);
11172 friendp = 0;
11173 }
11174
8d08fdba
MS
11175 if (friendp == 0)
11176 {
11177 if (ctype == NULL_TREE)
11178 ctype = current_class_type;
11179
11180 if (ctype == NULL_TREE)
11181 {
8251199e 11182 cp_error ("can't make `%D' into a method -- not in a class",
8d08fdba
MS
11183 declarator);
11184 return void_type_node;
11185 }
11186
11187 /* ``A union may [ ... ] not [ have ] virtual functions.''
11188 ARM 9.5 */
11189 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
11190 {
8251199e 11191 cp_error ("function `%D' declared virtual inside a union",
8d08fdba
MS
11192 declarator);
11193 return void_type_node;
11194 }
11195
11196 if (declarator == ansi_opname[(int) NEW_EXPR]
a28e3c7f
MS
11197 || declarator == ansi_opname[(int) VEC_NEW_EXPR]
11198 || declarator == ansi_opname[(int) DELETE_EXPR]
11199 || declarator == ansi_opname[(int) VEC_DELETE_EXPR])
8d08fdba
MS
11200 {
11201 if (virtualp)
11202 {
8251199e 11203 cp_error ("`%D' cannot be declared virtual, since it is always static",
8d08fdba
MS
11204 declarator);
11205 virtualp = 0;
11206 }
11207 }
11208 else if (staticp < 2)
14ae7e7d
JM
11209 type = build_cplus_method_type (ctype, TREE_TYPE (type),
11210 TYPE_ARG_TYPES (type));
8d08fdba
MS
11211 }
11212
11213 /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node. */
68642fb6 11214 function_context = (ctype != NULL_TREE) ?
4f1c5b7d 11215 decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
e1467ff2
MM
11216 publicp = (! friendp || ! staticp)
11217 && function_context == NULL_TREE;
68642fb6 11218 decl = grokfndecl (ctype, type,
386b8a85
JM
11219 TREE_CODE (declarator) != TEMPLATE_ID_EXPR
11220 ? declarator : dname,
11221 declarator,
7a8f9fa9 11222 virtualp, flags, quals, raises,
386b8a85 11223 friendp ? -1 : 0, friendp, publicp, inlinep,
2c73f9f5 11224 funcdef_flag, template_count, in_namespace);
20496fa2 11225 if (decl == NULL_TREE)
3ddfb0e6 11226 return decl;
6125f3be
DE
11227#if 0
11228 /* This clobbers the attrs stored in `decl' from `attrlist'. */
11229 /* The decl and setting of decl_machine_attr is also turned off. */
71851aaa 11230 decl = build_decl_attribute_variant (decl, decl_machine_attr);
6125f3be 11231#endif
f0e01782 11232
cc804e51
MM
11233 /* [class.conv.ctor]
11234
11235 A constructor declared without the function-specifier
11236 explicit that can be called with a single parameter
11237 specifies a conversion from the type of its first
11238 parameter to the type of its class. Such a constructor
11239 is called a converting constructor. */
db5ae43f
MS
11240 if (explicitp == 2)
11241 DECL_NONCONVERTING_P (decl) = 1;
cc804e51
MM
11242 else if (DECL_CONSTRUCTOR_P (decl))
11243 {
11244 /* The constructor can be called with exactly one
11245 parameter if there is at least one parameter, and
11246 any subsequent parameters have default arguments.
11247 We don't look at the first parameter, which is
11248 really just the `this' parameter for the new
11249 object. */
68642fb6 11250 tree arg_types =
cc804e51
MM
11251 TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)));
11252
11253 /* Skip the `in_chrg' argument too, if present. */
454fa7a7 11254 if (DECL_HAS_IN_CHARGE_PARM_P (decl))
cc804e51
MM
11255 arg_types = TREE_CHAIN (arg_types);
11256
11257 if (arg_types == void_list_node
68642fb6
UD
11258 || (arg_types
11259 && TREE_CHAIN (arg_types)
cc804e51
MM
11260 && TREE_CHAIN (arg_types) != void_list_node
11261 && !TREE_PURPOSE (TREE_CHAIN (arg_types))))
11262 DECL_NONCONVERTING_P (decl) = 1;
11263 }
8d08fdba
MS
11264 }
11265 else if (TREE_CODE (type) == METHOD_TYPE)
11266 {
faae18ab
MS
11267 /* We only get here for friend declarations of
11268 members of other classes. */
8d08fdba
MS
11269 /* All method decls are public, so tell grokfndecl to set
11270 TREE_PUBLIC, also. */
386b8a85 11271 decl = grokfndecl (ctype, type, declarator, declarator,
7a8f9fa9 11272 virtualp, flags, quals, raises,
386b8a85 11273 friendp ? -1 : 0, friendp, 1, 0, funcdef_flag,
2c73f9f5 11274 template_count, in_namespace);
f0e01782
MS
11275 if (decl == NULL_TREE)
11276 return NULL_TREE;
8d08fdba 11277 }
5566b478 11278 else if (!staticp && ! processing_template_decl
d0f062fb 11279 && !COMPLETE_TYPE_P (complete_type (type))
8d08fdba
MS
11280 && (TREE_CODE (type) != ARRAY_TYPE || initialized == 0))
11281 {
b7484fbe 11282 if (declarator)
8251199e 11283 cp_error ("field `%D' has incomplete type", declarator);
b7484fbe 11284 else
8251199e 11285 cp_error ("name `%T' has incomplete type", type);
8d08fdba
MS
11286
11287 /* If we're instantiating a template, tell them which
11288 instantiation made the field's type be incomplete. */
11289 if (current_class_type
11290 && TYPE_NAME (current_class_type)
d2e5ee5c 11291 && IDENTIFIER_TEMPLATE (TYPE_IDENTIFIER (current_class_type))
8d08fdba
MS
11292 && declspecs && TREE_VALUE (declspecs)
11293 && TREE_TYPE (TREE_VALUE (declspecs)) == type)
8251199e 11294 cp_error (" in instantiation of template `%T'",
db5ae43f
MS
11295 current_class_type);
11296
8d08fdba
MS
11297 type = error_mark_node;
11298 decl = NULL_TREE;
11299 }
11300 else
11301 {
11302 if (friendp)
11303 {
cb9a3ff8 11304 error ("`%s' is neither function nor member function; cannot be declared friend",
8d08fdba
MS
11305 IDENTIFIER_POINTER (declarator));
11306 friendp = 0;
11307 }
11308 decl = NULL_TREE;
11309 }
11310
11311 if (friendp)
11312 {
11313 /* Friends are treated specially. */
11314 if (ctype == current_class_type)
8251199e 11315 warning ("member functions are implicitly friends of their class");
8d08fdba
MS
11316 else
11317 {
11318 tree t = NULL_TREE;
11319 if (decl && DECL_NAME (decl))
36a117a5
MM
11320 {
11321 if (template_class_depth (current_class_type) == 0)
6c30752f 11322 {
68642fb6
UD
11323 decl
11324 = check_explicit_specialization
6c30752f
MM
11325 (declarator, decl,
11326 template_count, 2 * (funcdef_flag != 0) + 4);
11327 if (decl == error_mark_node)
11328 return error_mark_node;
11329 }
11330
36a117a5 11331 t = do_friend (ctype, declarator, decl,
7a8f9fa9 11332 last_function_parms, attrlist, flags, quals,
36a117a5
MM
11333 funcdef_flag);
11334 }
8d08fdba
MS
11335 if (t && funcdef_flag)
11336 return t;
68642fb6 11337
8d08fdba
MS
11338 return void_type_node;
11339 }
11340 }
11341
11342 /* Structure field. It may not be a function, except for C++ */
11343
11344 if (decl == NULL_TREE)
11345 {
8d08fdba
MS
11346 if (initialized)
11347 {
3ac3d9ea
MM
11348 if (!staticp)
11349 {
11350 /* An attempt is being made to initialize a non-static
11351 member. But, from [class.mem]:
68642fb6 11352
3ac3d9ea
MM
11353 4 A member-declarator can contain a
11354 constant-initializer only if it declares a static
11355 member (_class.static_) of integral or enumeration
68642fb6 11356 type, see _class.static.data_.
3ac3d9ea
MM
11357
11358 This used to be relatively common practice, but
11359 the rest of the compiler does not correctly
11360 handle the initialization unless the member is
11361 static so we make it static below. */
cab1f180 11362 cp_pedwarn ("ISO C++ forbids initialization of member `%D'",
3ac3d9ea 11363 declarator);
8251199e 11364 cp_pedwarn ("making `%D' static", declarator);
3ac3d9ea
MM
11365 staticp = 1;
11366 }
11367
6ba89f8e
MM
11368 if (uses_template_parms (type))
11369 /* We'll check at instantiation time. */
11370 ;
11371 else if (check_static_variable_definition (declarator,
11372 type))
11373 /* If we just return the declaration, crashes
11374 will sometimes occur. We therefore return
72a93143
JM
11375 void_type_node, as if this was a friend
11376 declaration, to cause callers to completely
11377 ignore this declaration. */
6ba89f8e 11378 return void_type_node;
8d08fdba
MS
11379 }
11380
8ebeee52 11381 /* 9.2p13 [class.mem] */
4d7614e9
JM
11382 if (declarator == constructor_name (current_class_type)
11383 /* Divergence from the standard: In extern "C", we
11384 allow non-static data members here, because C does
11385 and /usr/include/netinet/in.h uses that. */
1f901793 11386 && (staticp || ! in_system_header))
cb9a3ff8 11387 cp_pedwarn ("ISO C++ forbids data member `%D' with same name as enclosing class",
8ebeee52
JM
11388 declarator);
11389
3ac3d9ea 11390 if (staticp)
8d08fdba 11391 {
f18a14bc
MM
11392 /* C++ allows static class members. All other work
11393 for this is done by grokfield. */
4ce3d537 11394 decl = build_lang_decl (VAR_DECL, declarator, type);
5b605f68
MS
11395 TREE_STATIC (decl) = 1;
11396 /* In class context, 'static' means public access. */
3ac3d9ea 11397 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl) = 1;
8d08fdba
MS
11398 }
11399 else
11400 {
4ce3d537 11401 decl = build_lang_decl (FIELD_DECL, declarator, type);
8d08fdba
MS
11402 if (RIDBIT_SETP (RID_MUTABLE, specbits))
11403 {
11404 DECL_MUTABLE_P (decl) = 1;
11405 RIDBIT_RESET (RID_MUTABLE, specbits);
11406 }
11407 }
11408
11409 bad_specifiers (decl, "field", virtualp, quals != NULL_TREE,
11410 inlinep, friendp, raises != NULL_TREE);
11411 }
11412 }
11413 else if (TREE_CODE (type) == FUNCTION_TYPE || TREE_CODE (type) == METHOD_TYPE)
11414 {
386b8a85 11415 tree original_name;
8d08fdba
MS
11416 int publicp = 0;
11417
11418 if (! declarator)
11419 return NULL_TREE;
11420
386b8a85
JM
11421 if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
11422 original_name = dname;
11423 else
11424 original_name = declarator;
11425
8926095f 11426 if (RIDBIT_SETP (RID_AUTO, specbits))
8251199e 11427 error ("storage class `auto' invalid for function `%s'", name);
8926095f 11428 else if (RIDBIT_SETP (RID_REGISTER, specbits))
8251199e 11429 error ("storage class `register' invalid for function `%s'", name);
8d08fdba
MS
11430
11431 /* Function declaration not at top level.
11432 Storage classes other than `extern' are not allowed
11433 and `extern' makes no difference. */
a9aedbc2 11434 if (! toplevel_bindings_p ()
8926095f
MS
11435 && (RIDBIT_SETP (RID_STATIC, specbits)
11436 || RIDBIT_SETP (RID_INLINE, specbits))
8d08fdba 11437 && pedantic)
8926095f
MS
11438 {
11439 if (RIDBIT_SETP (RID_STATIC, specbits))
8251199e 11440 pedwarn ("storage class `static' invalid for function `%s' declared out of global scope", name);
8926095f 11441 else
8251199e 11442 pedwarn ("storage class `inline' invalid for function `%s' declared out of global scope", name);
8926095f 11443 }
68642fb6 11444
8d08fdba
MS
11445 if (ctype == NULL_TREE)
11446 {
11447 if (virtualp)
11448 {
8251199e 11449 error ("virtual non-class function `%s'", name);
8d08fdba
MS
11450 virtualp = 0;
11451 }
8d08fdba
MS
11452 }
11453 else if (TREE_CODE (type) == FUNCTION_TYPE && staticp < 2)
14ae7e7d
JM
11454 type = build_cplus_method_type (ctype, TREE_TYPE (type),
11455 TYPE_ARG_TYPES (type));
8d08fdba 11456
eb66be0e 11457 /* Record presence of `static'. */
faae18ab 11458 publicp = (ctype != NULL_TREE
a9aedbc2 11459 || RIDBIT_SETP (RID_EXTERN, specbits)
eb66be0e 11460 || !RIDBIT_SETP (RID_STATIC, specbits));
8d08fdba 11461
386b8a85 11462 decl = grokfndecl (ctype, type, original_name, declarator,
7a8f9fa9 11463 virtualp, flags, quals, raises,
75650646 11464 1, friendp,
68642fb6 11465 publicp, inlinep, funcdef_flag,
2c73f9f5 11466 template_count, in_namespace);
f0e01782
MS
11467 if (decl == NULL_TREE)
11468 return NULL_TREE;
8d08fdba 11469
8d08fdba
MS
11470 if (staticp == 1)
11471 {
11472 int illegal_static = 0;
11473
11474 /* Don't allow a static member function in a class, and forbid
11475 declaring main to be static. */
11476 if (TREE_CODE (type) == METHOD_TYPE)
11477 {
8251199e 11478 cp_pedwarn ("cannot declare member function `%D' to have static linkage", decl);
8d08fdba
MS
11479 illegal_static = 1;
11480 }
8d08fdba
MS
11481 else if (current_function_decl)
11482 {
11483 /* FIXME need arm citation */
8251199e 11484 error ("cannot declare static function inside another function");
8d08fdba
MS
11485 illegal_static = 1;
11486 }
11487
11488 if (illegal_static)
11489 {
11490 staticp = 0;
11491 RIDBIT_RESET (RID_STATIC, specbits);
11492 }
11493 }
8d08fdba
MS
11494 }
11495 else
11496 {
11497 /* It's a variable. */
11498
11499 /* An uninitialized decl with `extern' is a reference. */
68642fb6
UD
11500 decl = grokvardecl (type, declarator, &specbits,
11501 initialized,
11502 (type_quals & TYPE_QUAL_CONST) != 0,
950ad3c3 11503 in_namespace);
8d08fdba
MS
11504 bad_specifiers (decl, "variable", virtualp, quals != NULL_TREE,
11505 inlinep, friendp, raises != NULL_TREE);
11506
11507 if (ctype)
11508 {
f0e01782 11509 DECL_CONTEXT (decl) = ctype;
8d08fdba
MS
11510 if (staticp == 1)
11511 {
8251199e 11512 cp_pedwarn ("static member `%D' re-declared as static", decl);
8d08fdba
MS
11513 staticp = 0;
11514 RIDBIT_RESET (RID_STATIC, specbits);
11515 }
b7484fbe
MS
11516 if (RIDBIT_SETP (RID_REGISTER, specbits) && TREE_STATIC (decl))
11517 {
8251199e 11518 cp_error ("static member `%D' declared `register'", decl);
b7484fbe
MS
11519 RIDBIT_RESET (RID_REGISTER, specbits);
11520 }
f30432d7 11521 if (RIDBIT_SETP (RID_EXTERN, specbits) && pedantic)
8d08fdba 11522 {
8251199e 11523 cp_pedwarn ("cannot explicitly declare member `%#D' to have extern linkage",
f30432d7 11524 decl);
8d08fdba
MS
11525 RIDBIT_RESET (RID_EXTERN, specbits);
11526 }
11527 }
11528 }
11529
34fc957d 11530 my_friendly_assert (!RIDBIT_SETP (RID_MUTABLE, specbits), 19990927);
8d08fdba
MS
11531
11532 /* Record `register' declaration for warnings on &
11533 and in case doing stupid register allocation. */
11534
11535 if (RIDBIT_SETP (RID_REGISTER, specbits))
11536 DECL_REGISTER (decl) = 1;
11537
8926095f
MS
11538 if (RIDBIT_SETP (RID_EXTERN, specbits))
11539 DECL_THIS_EXTERN (decl) = 1;
11540
faae18ab
MS
11541 if (RIDBIT_SETP (RID_STATIC, specbits))
11542 DECL_THIS_STATIC (decl) = 1;
11543
adecb3f4
MM
11544 /* Record constancy and volatility. There's no need to do this
11545 when processing a template; we'll do this for the instantiated
11546 declaration based on the type of DECL. */
11547 if (!processing_template_decl)
11548 c_apply_type_quals_to_decl (type_quals, decl);
8d08fdba
MS
11549
11550 return decl;
11551 }
11552}
11553\f
11554/* Tell if a parmlist/exprlist looks like an exprlist or a parmlist.
11555 An empty exprlist is a parmlist. An exprlist which
11556 contains only identifiers at the global level
11557 is a parmlist. Otherwise, it is an exprlist. */
e92cc029 11558
8d08fdba
MS
11559int
11560parmlist_is_exprlist (exprs)
11561 tree exprs;
11562{
11563 if (exprs == NULL_TREE || TREE_PARMLIST (exprs))
11564 return 0;
11565
a9aedbc2 11566 if (toplevel_bindings_p ())
8d08fdba
MS
11567 {
11568 /* At the global level, if these are all identifiers,
11569 then it is a parmlist. */
11570 while (exprs)
11571 {
11572 if (TREE_CODE (TREE_VALUE (exprs)) != IDENTIFIER_NODE)
11573 return 1;
11574 exprs = TREE_CHAIN (exprs);
11575 }
11576 return 0;
11577 }
11578 return 1;
11579}
11580
f181d4ae
MM
11581/* Subroutine of start_function. Ensure that each of the parameter
11582 types (as listed in PARMS) is complete, as is required for a
11583 function definition. */
e92cc029 11584
8d08fdba
MS
11585static void
11586require_complete_types_for_parms (parms)
11587 tree parms;
11588{
07c88314 11589 for (; parms; parms = TREE_CHAIN (parms))
8d08fdba
MS
11590 {
11591 tree type = TREE_TYPE (parms);
07c88314
MM
11592
11593 /* Try to complete the TYPE. */
11594 type = complete_type (type);
11595
11596 if (type == error_mark_node)
11597 continue;
11598
d0f062fb 11599 if (!COMPLETE_TYPE_P (type))
8d08fdba
MS
11600 {
11601 if (DECL_NAME (parms))
8251199e 11602 error ("parameter `%s' has incomplete type",
8d08fdba
MS
11603 IDENTIFIER_POINTER (DECL_NAME (parms)));
11604 else
8251199e 11605 error ("parameter has incomplete type");
8d08fdba
MS
11606 TREE_TYPE (parms) = error_mark_node;
11607 }
42f989ff
JM
11608 else
11609 layout_decl (parms, 0);
8d08fdba
MS
11610 }
11611}
11612
46e8c075 11613/* Returns non-zero if T is a local variable. */
297e73d8 11614
46e8c075
MM
11615int
11616local_variable_p (t)
11617 tree t;
297e73d8 11618{
68642fb6 11619 if ((TREE_CODE (t) == VAR_DECL
297e73d8
MM
11620 /* A VAR_DECL with a context that is a _TYPE is a static data
11621 member. */
11622 && !TYPE_P (CP_DECL_CONTEXT (t))
11623 /* Any other non-local variable must be at namespace scope. */
46e8c075 11624 && !DECL_NAMESPACE_SCOPE_P (t))
297e73d8 11625 || (TREE_CODE (t) == PARM_DECL))
46e8c075 11626 return 1;
297e73d8 11627
46e8c075
MM
11628 return 0;
11629}
11630
11631/* Returns non-zero if T is an automatic local variable or a label.
11632 (These are the declarations that need to be remapped when the code
11633 containing them is duplicated.) */
11634
11635int
11636nonstatic_local_decl_p (t)
11637 tree t;
11638{
11639 return ((local_variable_p (t) && !TREE_STATIC (t))
11640 || TREE_CODE (t) == LABEL_DECL
11641 || TREE_CODE (t) == RESULT_DECL);
11642}
11643
11644/* Like local_variable_p, but suitable for use as a tree-walking
11645 function. */
11646
11647static tree
11648local_variable_p_walkfn (tp, walk_subtrees, data)
11649 tree *tp;
11650 int *walk_subtrees ATTRIBUTE_UNUSED;
11651 void *data ATTRIBUTE_UNUSED;
11652{
68642fb6 11653 return ((local_variable_p (*tp) && !DECL_ARTIFICIAL (*tp))
46e8c075 11654 ? *tp : NULL_TREE);
297e73d8
MM
11655}
11656
11657/* Check that ARG, which is a default-argument expression for a
11658 parameter DECL, is legal. Returns ARG, or ERROR_MARK_NODE, if
11659 something goes wrong. DECL may also be a _TYPE node, rather than a
11660 DECL, if there is no DECL available. */
11661
11662tree
11663check_default_argument (decl, arg)
11664 tree decl;
11665 tree arg;
11666{
11667 tree var;
11668 tree decl_type;
11669
11670 if (TREE_CODE (arg) == DEFAULT_ARG)
11671 /* We get a DEFAULT_ARG when looking at an in-class declaration
11672 with a default argument. Ignore the argument for now; we'll
11673 deal with it after the class is complete. */
11674 return arg;
11675
11676 if (processing_template_decl || uses_template_parms (arg))
11677 /* We don't do anything checking until instantiation-time. Note
11678 that there may be uninstantiated arguments even for an
11679 instantiated function, since default arguments are not
11680 instantiated until they are needed. */
11681 return arg;
11682
11683 if (TYPE_P (decl))
11684 {
11685 decl_type = decl;
11686 decl = NULL_TREE;
11687 }
11688 else
11689 decl_type = TREE_TYPE (decl);
11690
68642fb6 11691 if (arg == error_mark_node
297e73d8
MM
11692 || decl == error_mark_node
11693 || TREE_TYPE (arg) == error_mark_node
11694 || decl_type == error_mark_node)
11695 /* Something already went wrong. There's no need to check
11696 further. */
11697 return error_mark_node;
11698
11699 /* [dcl.fct.default]
68642fb6 11700
297e73d8
MM
11701 A default argument expression is implicitly converted to the
11702 parameter type. */
11703 if (!TREE_TYPE (arg)
11704 || !can_convert_arg (decl_type, TREE_TYPE (arg), arg))
11705 {
11706 if (decl)
68642fb6 11707 cp_error ("default argument for `%#D' has type `%T'",
297e73d8
MM
11708 decl, TREE_TYPE (arg));
11709 else
8614a1d6 11710 cp_error ("default argument for parameter of type `%T' has type `%T'",
297e73d8
MM
11711 decl_type, TREE_TYPE (arg));
11712
11713 return error_mark_node;
11714 }
11715
11716 /* [dcl.fct.default]
11717
11718 Local variables shall not be used in default argument
68642fb6 11719 expressions.
297e73d8
MM
11720
11721 The keyword `this' shall not be used in a default argument of a
11722 member function. */
46e8c075 11723 var = walk_tree (&arg, local_variable_p_walkfn, NULL);
297e73d8
MM
11724 if (var)
11725 {
11726 cp_error ("default argument `%E' uses local variable `%D'",
11727 arg, var);
11728 return error_mark_node;
11729 }
11730
11731 /* All is well. */
11732 return arg;
11733}
11734
8d08fdba
MS
11735/* Decode the list of parameter types for a function type.
11736 Given the list of things declared inside the parens,
11737 return a list of types.
11738
11739 The list we receive can have three kinds of elements:
11740 an IDENTIFIER_NODE for names given without types,
11741 a TREE_LIST node for arguments given as typespecs or names with typespecs,
11742 or void_type_node, to mark the end of an argument list
11743 when additional arguments are not permitted (... was not used).
11744
11745 FUNCDEF_FLAG is nonzero for a function definition, 0 for
11746 a mere declaration. A nonempty identifier-list gets an error message
11747 when FUNCDEF_FLAG is zero.
11748 If FUNCDEF_FLAG is 1, then parameter types must be complete.
11749 If FUNCDEF_FLAG is -1, then parameter types may be incomplete.
11750
11751 If all elements of the input list contain types,
11752 we return a list of the types.
11753 If all elements contain no type (except perhaps a void_type_node
11754 at the end), we return a null list.
11755 If some have types and some do not, it is an error, and we
11756 return a null list.
11757
11758 Also set last_function_parms to either
11759 a list of names (IDENTIFIER_NODEs) or a chain of PARM_DECLs.
11760 A list of names is converted to a chain of PARM_DECLs
11761 by store_parm_decls so that ultimately it is always a chain of decls.
11762
11763 Note that in C++, parameters can take default values. These default
11764 values are in the TREE_PURPOSE field of the TREE_LIST. It is
11765 an error to specify default values which are followed by parameters
11766 that have no default values, or an ELLIPSES. For simplicities sake,
11767 only parameters which are specified with their types can take on
11768 default values. */
11769
11770static tree
11771grokparms (first_parm, funcdef_flag)
11772 tree first_parm;
11773 int funcdef_flag;
11774{
11775 tree result = NULL_TREE;
11776 tree decls = NULL_TREE;
11777
11778 if (first_parm != NULL_TREE
11779 && TREE_CODE (TREE_VALUE (first_parm)) == IDENTIFIER_NODE)
11780 {
11781 if (! funcdef_flag)
8251199e 11782 pedwarn ("parameter names (without types) in function declaration");
8d08fdba
MS
11783 last_function_parms = first_parm;
11784 return NULL_TREE;
11785 }
11786 else if (first_parm != NULL_TREE
11787 && TREE_CODE (TREE_VALUE (first_parm)) != TREE_LIST
a1774733 11788 && TREE_CODE (TREE_VALUE (first_parm)) != VOID_TYPE)
8d08fdba
MS
11789 my_friendly_abort (145);
11790 else
11791 {
11792 /* Types were specified. This is a list of declarators
11793 each represented as a TREE_LIST node. */
11794 register tree parm, chain;
5566b478 11795 int any_init = 0, any_error = 0;
8d08fdba
MS
11796
11797 if (first_parm != NULL_TREE)
11798 {
11799 tree last_result = NULL_TREE;
11800 tree last_decl = NULL_TREE;
11801
11802 for (parm = first_parm; parm != NULL_TREE; parm = chain)
11803 {
a703fb38 11804 tree type = NULL_TREE, list_node = parm;
8d08fdba
MS
11805 register tree decl = TREE_VALUE (parm);
11806 tree init = TREE_PURPOSE (parm);
11807
11808 chain = TREE_CHAIN (parm);
11809 /* @@ weak defense against parse errors. */
68642fb6 11810 if (TREE_CODE (decl) != VOID_TYPE
a1774733 11811 && TREE_CODE (decl) != TREE_LIST)
8d08fdba
MS
11812 {
11813 /* Give various messages as the need arises. */
11814 if (TREE_CODE (decl) == STRING_CST)
8251199e 11815 cp_error ("invalid string constant `%E'", decl);
8d08fdba 11816 else if (TREE_CODE (decl) == INTEGER_CST)
8251199e 11817 error ("invalid integer constant in parameter list, did you forget to give parameter name?");
8d08fdba
MS
11818 continue;
11819 }
11820
a1774733 11821 if (TREE_CODE (decl) != VOID_TYPE)
8d08fdba 11822 {
8d08fdba
MS
11823 decl = grokdeclarator (TREE_VALUE (decl),
11824 TREE_PURPOSE (decl),
f30432d7 11825 PARM, init != NULL_TREE,
c11b6f21 11826 NULL_TREE);
3bfdc719 11827 if (! decl || TREE_TYPE (decl) == error_mark_node)
8d08fdba 11828 continue;
01240200
MM
11829
11830 /* Top-level qualifiers on the parameters are
11831 ignored for function types. */
11832 type = TYPE_MAIN_VARIANT (TREE_TYPE (decl));
11833
a1774733 11834 if (TREE_CODE (type) == VOID_TYPE)
8d08fdba
MS
11835 decl = void_type_node;
11836 else if (TREE_CODE (type) == METHOD_TYPE)
11837 {
11838 if (DECL_NAME (decl))
fc378698 11839 /* Cannot use the decl here because
8d08fdba 11840 we don't have DECL_CONTEXT set up yet. */
8251199e 11841 cp_error ("parameter `%D' invalidly declared method type",
fc378698 11842 DECL_NAME (decl));
8d08fdba 11843 else
8251199e 11844 error ("parameter invalidly declared method type");
8d08fdba
MS
11845 type = build_pointer_type (type);
11846 TREE_TYPE (decl) = type;
11847 }
11848 else if (TREE_CODE (type) == OFFSET_TYPE)
11849 {
11850 if (DECL_NAME (decl))
8251199e 11851 cp_error ("parameter `%D' invalidly declared offset type",
fc378698 11852 DECL_NAME (decl));
8d08fdba 11853 else
8251199e 11854 error ("parameter invalidly declared offset type");
8d08fdba
MS
11855 type = build_pointer_type (type);
11856 TREE_TYPE (decl) = type;
11857 }
a7a64a77
MM
11858 else if (abstract_virtuals_error (decl, type))
11859 any_error = 1; /* Seems like a good idea. */
482b883f
JM
11860 else if (POINTER_TYPE_P (type))
11861 {
11862 tree t = type;
11863 while (POINTER_TYPE_P (t)
11864 || (TREE_CODE (t) == ARRAY_TYPE
11865 && TYPE_DOMAIN (t) != NULL_TREE))
11866 t = TREE_TYPE (t);
11867 if (TREE_CODE (t) == ARRAY_TYPE)
57af8358
MM
11868 cp_error ("parameter type `%T' includes %s to array of unknown bound",
11869 type,
11870 TYPE_PTR_P (type) ? "pointer" : "reference");
482b883f 11871 }
8d08fdba
MS
11872 }
11873
a1774733 11874 if (TREE_CODE (decl) == VOID_TYPE)
8d08fdba
MS
11875 {
11876 if (result == NULL_TREE)
11877 {
11878 result = void_list_node;
11879 last_result = result;
11880 }
11881 else
11882 {
11883 TREE_CHAIN (last_result) = void_list_node;
11884 last_result = void_list_node;
11885 }
8d08fdba
MS
11886 if (chain
11887 && (chain != void_list_node || TREE_CHAIN (chain)))
8251199e 11888 error ("`void' in parameter list must be entire list");
8d08fdba
MS
11889 break;
11890 }
11891
11892 /* Since there is a prototype, args are passed in their own types. */
11893 DECL_ARG_TYPE (decl) = TREE_TYPE (decl);
fa56377d
JJ
11894 if (PROMOTE_PROTOTYPES
11895 && (TREE_CODE (type) == INTEGER_TYPE
11896 || TREE_CODE (type) == ENUMERAL_TYPE)
8d08fdba
MS
11897 && TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node))
11898 DECL_ARG_TYPE (decl) = integer_type_node;
297e73d8 11899 if (!any_error && init)
8d08fdba 11900 {
297e73d8
MM
11901 any_init++;
11902 init = check_default_argument (decl, init);
8d08fdba
MS
11903 }
11904 else
11905 init = NULL_TREE;
11906
11907 if (decls == NULL_TREE)
11908 {
11909 decls = decl;
11910 last_decl = decls;
11911 }
11912 else
11913 {
11914 TREE_CHAIN (last_decl) = decl;
11915 last_decl = decl;
11916 }
5868eb4e 11917 list_node = tree_cons (init, type, NULL_TREE);
8d08fdba
MS
11918 if (result == NULL_TREE)
11919 {
11920 result = list_node;
11921 last_result = result;
11922 }
11923 else
11924 {
11925 TREE_CHAIN (last_result) = list_node;
11926 last_result = list_node;
11927 }
11928 }
11929 if (last_result)
11930 TREE_CHAIN (last_result) = NULL_TREE;
11931 /* If there are no parameters, and the function does not end
11932 with `...', then last_decl will be NULL_TREE. */
11933 if (last_decl != NULL_TREE)
11934 TREE_CHAIN (last_decl) = NULL_TREE;
11935 }
11936 }
11937
11938 last_function_parms = decls;
11939
8d08fdba
MS
11940 return result;
11941}
42976354
BK
11942
11943/* Called from the parser to update an element of TYPE_ARG_TYPES for some
11944 FUNCTION_TYPE with the newly parsed version of its default argument, which
11945 was previously digested as text. See snarf_defarg et al in lex.c. */
11946
11947void
11948replace_defarg (arg, init)
11949 tree arg, init;
11950{
aa5f3bad 11951 if (! processing_template_decl
42976354 11952 && ! can_convert_arg (TREE_VALUE (arg), TREE_TYPE (init), init))
8251199e 11953 cp_pedwarn ("invalid type `%T' for default argument to `%T'",
42976354
BK
11954 TREE_TYPE (init), TREE_VALUE (arg));
11955 TREE_PURPOSE (arg) = init;
11956}
8d08fdba 11957\f
4f1c5b7d
MM
11958/* D is a constructor or overloaded `operator='. Returns non-zero if
11959 D's arguments allow it to be a copy constructor, or copy assignment
11960 operator. */
11961
c11b6f21
MS
11962int
11963copy_args_p (d)
11964 tree d;
11965{
4f1c5b7d
MM
11966 tree t;
11967
11968 if (!DECL_FUNCTION_MEMBER_P (d))
11969 return 0;
11970
11971 t = FUNCTION_ARG_CHAIN (d);
454fa7a7 11972 if (DECL_CONSTRUCTOR_P (d) && DECL_HAS_IN_CHARGE_PARM_P (d))
67437d5b 11973 t = TREE_CHAIN (t);
c11b6f21
MS
11974 if (t && TREE_CODE (TREE_VALUE (t)) == REFERENCE_TYPE
11975 && (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_VALUE (t)))
4f1c5b7d 11976 == DECL_CONTEXT (d))
c11b6f21
MS
11977 && (TREE_CHAIN (t) == NULL_TREE
11978 || TREE_CHAIN (t) == void_list_node
11979 || TREE_PURPOSE (TREE_CHAIN (t))))
11980 return 1;
11981 return 0;
11982}
11983
8d08fdba
MS
11984/* These memoizing functions keep track of special properties which
11985 a class may have. `grok_ctor_properties' notices whether a class
11986 has a constructor of the form X(X&), and also complains
11987 if the class has a constructor of the form X(X).
11988 `grok_op_properties' takes notice of the various forms of
11989 operator= which are defined, as well as what sorts of type conversion
11990 may apply. Both functions take a FUNCTION_DECL as an argument. */
e92cc029 11991
a0a33927 11992int
8d08fdba
MS
11993grok_ctor_properties (ctype, decl)
11994 tree ctype, decl;
11995{
11996 tree parmtypes = FUNCTION_ARG_CHAIN (decl);
11997 tree parmtype = parmtypes ? TREE_VALUE (parmtypes) : void_type_node;
11998
11999 /* When a type has virtual baseclasses, a magical first int argument is
12000 added to any ctor so we can tell if the class has been initialized
12001 yet. This could screw things up in this function, so we deliberately
12002 ignore the leading int if we're in that situation. */
454fa7a7 12003 if (DECL_HAS_IN_CHARGE_PARM_P (decl))
8d08fdba 12004 {
711734a9
JM
12005 my_friendly_assert (parmtypes
12006 && TREE_VALUE (parmtypes) == integer_type_node,
12007 980529);
8d08fdba
MS
12008 parmtypes = TREE_CHAIN (parmtypes);
12009 parmtype = TREE_VALUE (parmtypes);
12010 }
12011
f181d4ae
MM
12012 /* [class.copy]
12013
12014 A non-template constructor for class X is a copy constructor if
12015 its first parameter is of type X&, const X&, volatile X& or const
12016 volatile X&, and either there are no other parameters or else all
12017 other parameters have default arguments. */
8d08fdba 12018 if (TREE_CODE (parmtype) == REFERENCE_TYPE
0b41abe6
JM
12019 && TYPE_MAIN_VARIANT (TREE_TYPE (parmtype)) == ctype
12020 && (TREE_CHAIN (parmtypes) == NULL_TREE
8d08fdba 12021 || TREE_CHAIN (parmtypes) == void_list_node
f181d4ae
MM
12022 || TREE_PURPOSE (TREE_CHAIN (parmtypes)))
12023 && !(DECL_TEMPLATE_INSTANTIATION (decl)
12024 && is_member_template (DECL_TI_TEMPLATE (decl))))
0b41abe6
JM
12025 {
12026 TYPE_HAS_INIT_REF (ctype) = 1;
91063b51 12027 if (CP_TYPE_CONST_P (TREE_TYPE (parmtype)))
0b41abe6 12028 TYPE_HAS_CONST_INIT_REF (ctype) = 1;
8d08fdba 12029 }
f181d4ae
MM
12030 /* [class.copy]
12031
12032 A declaration of a constructor for a class X is ill-formed if its
12033 first parameter is of type (optionally cv-qualified) X and either
12034 there are no other parameters or else all other parameters have
68642fb6 12035 default arguments.
f181d4ae
MM
12036
12037 We *don't* complain about member template instantiations that
12038 have this form, though; they can occur as we try to decide what
12039 constructor to use during overload resolution. Since overload
12040 resolution will never prefer such a constructor to the
12041 non-template copy constructor (which is either explicitly or
12042 implicitly defined), there's no need to worry about their
12043 existence. Theoretically, they should never even be
12044 instantiated, but that's hard to forestall. */
0b41abe6 12045 else if (TYPE_MAIN_VARIANT (parmtype) == ctype
59e76fc6
JM
12046 && (TREE_CHAIN (parmtypes) == NULL_TREE
12047 || TREE_CHAIN (parmtypes) == void_list_node
f181d4ae
MM
12048 || TREE_PURPOSE (TREE_CHAIN (parmtypes)))
12049 && !(DECL_TEMPLATE_INSTANTIATION (decl)
12050 && is_member_template (DECL_TI_TEMPLATE (decl))))
8d08fdba 12051 {
8251199e 12052 cp_error ("invalid constructor; you probably meant `%T (const %T&)'",
0b41abe6
JM
12053 ctype, ctype);
12054 SET_IDENTIFIER_ERROR_LOCUS (DECL_NAME (decl), ctype);
12055 return 0;
8d08fdba
MS
12056 }
12057 else if (TREE_CODE (parmtype) == VOID_TYPE
12058 || TREE_PURPOSE (parmtypes) != NULL_TREE)
12059 TYPE_HAS_DEFAULT_CONSTRUCTOR (ctype) = 1;
a0a33927
MS
12060
12061 return 1;
8d08fdba
MS
12062}
12063
12064/* An operator with this name can be either unary or binary. */
e92cc029 12065
a28e3c7f
MS
12066static int
12067ambi_op_p (name)
8d08fdba
MS
12068 tree name;
12069{
12070 return (name == ansi_opname [(int) INDIRECT_REF]
12071 || name == ansi_opname [(int) ADDR_EXPR]
12072 || name == ansi_opname [(int) NEGATE_EXPR]
12073 || name == ansi_opname[(int) POSTINCREMENT_EXPR]
12074 || name == ansi_opname[(int) POSTDECREMENT_EXPR]
12075 || name == ansi_opname [(int) CONVERT_EXPR]);
12076}
12077
12078/* An operator with this name can only be unary. */
e92cc029 12079
a28e3c7f
MS
12080static int
12081unary_op_p (name)
8d08fdba
MS
12082 tree name;
12083{
12084 return (name == ansi_opname [(int) TRUTH_NOT_EXPR]
12085 || name == ansi_opname [(int) BIT_NOT_EXPR]
12086 || name == ansi_opname [(int) COMPONENT_REF]
4c571114 12087 || IDENTIFIER_TYPENAME_P (name));
8d08fdba
MS
12088}
12089
12090/* Do a little sanity-checking on how they declared their operator. */
e92cc029 12091
5566b478 12092void
8d08fdba
MS
12093grok_op_properties (decl, virtualp, friendp)
12094 tree decl;
12095 int virtualp, friendp;
12096{
12097 tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
12098 int methodp = (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE);
12099 tree name = DECL_NAME (decl);
8d08fdba 12100
a28e3c7f
MS
12101 if (current_class_type == NULL_TREE)
12102 friendp = 1;
8d08fdba 12103
a28e3c7f
MS
12104 if (! friendp)
12105 {
f181d4ae
MM
12106 /* [class.copy]
12107
12108 A user-declared copy assignment operator X::operator= is a
12109 non-static non-template member function of class X with
12110 exactly one parameter of type X, X&, const X&, volatile X& or
12111 const volatile X&. */
12112 if (name == ansi_opname[(int) MODIFY_EXPR]
12113 && !(DECL_TEMPLATE_INSTANTIATION (decl)
12114 && is_member_template (DECL_TI_TEMPLATE (decl))))
6a629cac 12115 ;
a28e3c7f
MS
12116 else if (name == ansi_opname[(int) CALL_EXPR])
12117 TYPE_OVERLOADS_CALL_EXPR (current_class_type) = 1;
12118 else if (name == ansi_opname[(int) ARRAY_REF])
12119 TYPE_OVERLOADS_ARRAY_REF (current_class_type) = 1;
12120 else if (name == ansi_opname[(int) COMPONENT_REF]
12121 || name == ansi_opname[(int) MEMBER_REF])
12122 TYPE_OVERLOADS_ARROW (current_class_type) = 1;
12123 else if (name == ansi_opname[(int) NEW_EXPR])
834c6dff 12124 TYPE_HAS_NEW_OPERATOR (current_class_type) = 1;
a28e3c7f
MS
12125 else if (name == ansi_opname[(int) DELETE_EXPR])
12126 TYPE_GETS_DELETE (current_class_type) |= 1;
12127 else if (name == ansi_opname[(int) VEC_NEW_EXPR])
834c6dff 12128 TYPE_HAS_ARRAY_NEW_OPERATOR (current_class_type) = 1;
a28e3c7f
MS
12129 else if (name == ansi_opname[(int) VEC_DELETE_EXPR])
12130 TYPE_GETS_DELETE (current_class_type) |= 2;
12131 }
12132
12133 if (name == ansi_opname[(int) NEW_EXPR]
12134 || name == ansi_opname[(int) VEC_NEW_EXPR])
8d08fdba 12135 {
8d08fdba
MS
12136 /* When the compiler encounters the definition of A::operator new, it
12137 doesn't look at the class declaration to find out if it's static. */
a28e3c7f 12138 if (methodp)
3afb32a4 12139 revert_static_member_fn (decl);
68642fb6 12140
8d08fdba
MS
12141 /* Take care of function decl if we had syntax errors. */
12142 if (argtypes == NULL_TREE)
beb53fb8
JM
12143 TREE_TYPE (decl)
12144 = build_function_type (ptr_type_node,
12145 hash_tree_chain (integer_type_node,
12146 void_list_node));
8d08fdba 12147 else
a28e3c7f 12148 TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
8d08fdba 12149 }
a28e3c7f
MS
12150 else if (name == ansi_opname[(int) DELETE_EXPR]
12151 || name == ansi_opname[(int) VEC_DELETE_EXPR])
8d08fdba 12152 {
a28e3c7f 12153 if (methodp)
3afb32a4 12154 revert_static_member_fn (decl);
68642fb6 12155
8d08fdba 12156 if (argtypes == NULL_TREE)
beb53fb8
JM
12157 TREE_TYPE (decl)
12158 = build_function_type (void_type_node,
12159 hash_tree_chain (ptr_type_node,
12160 void_list_node));
8d08fdba 12161 else
834c6dff 12162 TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
8d08fdba 12163 }
8d08fdba
MS
12164 else
12165 {
12166 /* An operator function must either be a non-static member function
12167 or have at least one parameter of a class, a reference to a class,
12168 an enumeration, or a reference to an enumeration. 13.4.0.6 */
700f8a87 12169 if (! methodp || DECL_STATIC_FUNCTION_P (decl))
8d08fdba 12170 {
4c571114 12171 if (IDENTIFIER_TYPENAME_P (name)
8d08fdba
MS
12172 || name == ansi_opname[(int) CALL_EXPR]
12173 || name == ansi_opname[(int) MODIFY_EXPR]
12174 || name == ansi_opname[(int) COMPONENT_REF]
12175 || name == ansi_opname[(int) ARRAY_REF])
8251199e 12176 cp_error ("`%D' must be a nonstatic member function", decl);
8d08fdba
MS
12177 else
12178 {
12179 tree p = argtypes;
12180
700f8a87 12181 if (DECL_STATIC_FUNCTION_P (decl))
8251199e 12182 cp_error ("`%D' must be either a non-static member function or a non-member function", decl);
700f8a87 12183
8d08fdba 12184 if (p)
a1774733 12185 for (; TREE_CODE (TREE_VALUE (p)) != VOID_TYPE ; p = TREE_CHAIN (p))
8d08fdba
MS
12186 {
12187 tree arg = TREE_VALUE (p);
12188 if (TREE_CODE (arg) == REFERENCE_TYPE)
12189 arg = TREE_TYPE (arg);
12190
12191 /* This lets bad template code slip through. */
12192 if (IS_AGGR_TYPE (arg)
12193 || TREE_CODE (arg) == ENUMERAL_TYPE
73b0fce8
KL
12194 || TREE_CODE (arg) == TEMPLATE_TYPE_PARM
12195 || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
8d08fdba
MS
12196 goto foundaggr;
12197 }
8251199e
JM
12198 cp_error
12199 ("`%D' must have an argument of class or enumerated type",
8d08fdba
MS
12200 decl);
12201 foundaggr:
12202 ;
12203 }
12204 }
68642fb6 12205
277294d7 12206 if (name == ansi_opname[(int) CALL_EXPR])
2c73f9f5 12207 return; /* No restrictions on args. */
8d08fdba 12208
9a3b49ac 12209 if (IDENTIFIER_TYPENAME_P (name) && ! DECL_TEMPLATE_INFO (decl))
a0a33927
MS
12210 {
12211 tree t = TREE_TYPE (name);
17708e90 12212 if (! friendp)
a0a33927
MS
12213 {
12214 int ref = (TREE_CODE (t) == REFERENCE_TYPE);
d8e178a0 12215 const char *what = 0;
17708e90 12216
a0a33927
MS
12217 if (ref)
12218 t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
12219
17708e90
NS
12220 if (TREE_CODE (t) == VOID_TYPE)
12221 what = "void";
12222 else if (t == current_class_type)
a0a33927 12223 what = "the same type";
9a3b49ac 12224 /* Don't force t to be complete here. */
a0a33927 12225 else if (IS_AGGR_TYPE (t)
d0f062fb 12226 && COMPLETE_TYPE_P (t)
a0a33927
MS
12227 && DERIVED_FROM_P (t, current_class_type))
12228 what = "a base class";
12229
12230 if (what)
8251199e 12231 warning ("conversion to %s%s will never use a type conversion operator",
a0a33927
MS
12232 ref ? "a reference to " : "", what);
12233 }
12234 }
12235
8d08fdba
MS
12236 if (name == ansi_opname[(int) MODIFY_EXPR])
12237 {
12238 tree parmtype;
12239
12240 if (list_length (argtypes) != 3 && methodp)
12241 {
8251199e 12242 cp_error ("`%D' must take exactly one argument", decl);
8d08fdba
MS
12243 return;
12244 }
12245 parmtype = TREE_VALUE (TREE_CHAIN (argtypes));
12246
f0e01782 12247 if (copy_assignment_arg_p (parmtype, virtualp)
a28e3c7f 12248 && ! friendp)
8d08fdba
MS
12249 {
12250 TYPE_HAS_ASSIGN_REF (current_class_type) = 1;
f0e01782 12251 if (TREE_CODE (parmtype) != REFERENCE_TYPE
91063b51 12252 || CP_TYPE_CONST_P (TREE_TYPE (parmtype)))
8d08fdba
MS
12253 TYPE_HAS_CONST_ASSIGN_REF (current_class_type) = 1;
12254 }
12255 }
12256 else if (name == ansi_opname[(int) COND_EXPR])
12257 {
12258 /* 13.4.0.3 */
cb9a3ff8 12259 cp_error ("ISO C++ prohibits overloading operator ?:");
68642fb6 12260 }
8d08fdba
MS
12261 else if (ambi_op_p (name))
12262 {
12263 if (list_length (argtypes) == 2)
12264 /* prefix */;
12265 else if (list_length (argtypes) == 3)
12266 {
12267 if ((name == ansi_opname[(int) POSTINCREMENT_EXPR]
12268 || name == ansi_opname[(int) POSTDECREMENT_EXPR])
5156628f 12269 && ! processing_template_decl
007e5fea 12270 && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)), integer_type_node))
8d08fdba
MS
12271 {
12272 if (methodp)
8251199e 12273 cp_error ("postfix `%D' must take `int' as its argument",
8d08fdba
MS
12274 decl);
12275 else
8251199e
JM
12276 cp_error
12277 ("postfix `%D' must take `int' as its second argument",
12278 decl);
8d08fdba
MS
12279 }
12280 }
12281 else
12282 {
12283 if (methodp)
8251199e 12284 cp_error ("`%D' must take either zero or one argument", decl);
8d08fdba 12285 else
8251199e 12286 cp_error ("`%D' must take either one or two arguments", decl);
8d08fdba 12287 }
824b9a4c
MS
12288
12289 /* More Effective C++ rule 6. */
eb448459 12290 if (warn_ecpp
824b9a4c
MS
12291 && (name == ansi_opname[(int) POSTINCREMENT_EXPR]
12292 || name == ansi_opname[(int) POSTDECREMENT_EXPR]))
12293 {
12294 tree arg = TREE_VALUE (argtypes);
12295 tree ret = TREE_TYPE (TREE_TYPE (decl));
12296 if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
12297 arg = TREE_TYPE (arg);
12298 arg = TYPE_MAIN_VARIANT (arg);
12299 if (list_length (argtypes) == 2)
12300 {
12301 if (TREE_CODE (ret) != REFERENCE_TYPE
3bfdc719
MM
12302 || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)),
12303 arg))
8251199e 12304 cp_warning ("prefix `%D' should return `%T'", decl,
824b9a4c
MS
12305 build_reference_type (arg));
12306 }
12307 else
12308 {
3bfdc719 12309 if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
8251199e 12310 cp_warning ("postfix `%D' should return `%T'", decl, arg);
824b9a4c
MS
12311 }
12312 }
8d08fdba
MS
12313 }
12314 else if (unary_op_p (name))
12315 {
12316 if (list_length (argtypes) != 2)
12317 {
12318 if (methodp)
8251199e 12319 cp_error ("`%D' must take `void'", decl);
8d08fdba 12320 else
8251199e 12321 cp_error ("`%D' must take exactly one argument", decl);
8d08fdba
MS
12322 }
12323 }
12324 else /* if (binary_op_p (name)) */
12325 {
12326 if (list_length (argtypes) != 3)
12327 {
12328 if (methodp)
8251199e 12329 cp_error ("`%D' must take exactly one argument", decl);
8d08fdba 12330 else
8251199e 12331 cp_error ("`%D' must take exactly two arguments", decl);
8d08fdba 12332 }
824b9a4c
MS
12333
12334 /* More Effective C++ rule 7. */
eb448459 12335 if (warn_ecpp
824b9a4c
MS
12336 && (name == ansi_opname [TRUTH_ANDIF_EXPR]
12337 || name == ansi_opname [TRUTH_ORIF_EXPR]
12338 || name == ansi_opname [COMPOUND_EXPR]))
8251199e 12339 cp_warning ("user-defined `%D' always evaluates both arguments",
824b9a4c
MS
12340 decl);
12341 }
12342
12343 /* Effective C++ rule 23. */
eb448459 12344 if (warn_ecpp
824b9a4c
MS
12345 && list_length (argtypes) == 3
12346 && (name == ansi_opname [PLUS_EXPR]
12347 || name == ansi_opname [MINUS_EXPR]
12348 || name == ansi_opname [TRUNC_DIV_EXPR]
12349 || name == ansi_opname [MULT_EXPR])
12350 && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
8251199e 12351 cp_warning ("`%D' should return by value", decl);
8d08fdba
MS
12352
12353 /* 13.4.0.8 */
12354 if (argtypes)
12355 for (; argtypes != void_list_node ; argtypes = TREE_CHAIN (argtypes))
12356 if (TREE_PURPOSE (argtypes))
12357 {
12358 TREE_PURPOSE (argtypes) = NULL_TREE;
12359 if (name == ansi_opname[(int) POSTINCREMENT_EXPR]
12360 || name == ansi_opname[(int) POSTDECREMENT_EXPR])
12361 {
12362 if (pedantic)
8251199e 12363 cp_pedwarn ("`%D' cannot have default arguments", decl);
8d08fdba
MS
12364 }
12365 else
8251199e 12366 cp_error ("`%D' cannot have default arguments", decl);
8d08fdba
MS
12367 }
12368 }
12369}
12370\f
d8e178a0 12371static const char *
094fe153
JM
12372tag_name (code)
12373 enum tag_types code;
12374{
12375 switch (code)
12376 {
12377 case record_type:
12378 return "struct";
12379 case class_type:
12380 return "class";
12381 case union_type:
12382 return "union ";
12383 case enum_type:
12384 return "enum";
094fe153
JM
12385 default:
12386 my_friendly_abort (981122);
12387 }
12388}
12389
8d08fdba
MS
12390/* Get the struct, enum or union (CODE says which) with tag NAME.
12391 Define the tag as a forward-reference if it is not defined.
12392
12393 C++: If a class derivation is given, process it here, and report
12394 an error if multiple derivation declarations are not identical.
12395
12396 If this is a definition, come in through xref_tag and only look in
12397 the current frame for the name (since C++ allows new names in any
12398 scope.) */
12399
8d08fdba 12400tree
ca107ded 12401xref_tag (code_type_node, name, globalize)
8d08fdba 12402 tree code_type_node;
ca107ded 12403 tree name;
8d08fdba
MS
12404 int globalize;
12405{
12406 enum tag_types tag_code;
12407 enum tree_code code;
8d08fdba 12408 register tree ref, t;
8f032717 12409 struct binding_level *b = current_binding_level;
a80e4195 12410 int got_type = 0;
dc8263bc 12411 tree attributes = NULL_TREE;
25aab5d0 12412 tree context = NULL_TREE;
dc8263bc
JM
12413
12414 /* If we are called from the parser, code_type_node will sometimes be a
12415 TREE_LIST. This indicates that the user wrote
12416 "class __attribute__ ((foo)) bar". Extract the attributes so we can
12417 use them later. */
12418 if (TREE_CODE (code_type_node) == TREE_LIST)
12419 {
12420 attributes = TREE_PURPOSE (code_type_node);
12421 code_type_node = TREE_VALUE (code_type_node);
12422 }
8d08fdba 12423
665f2503 12424 tag_code = (enum tag_types) tree_low_cst (code_type_node, 1);
8d08fdba
MS
12425 switch (tag_code)
12426 {
12427 case record_type:
12428 case class_type:
8d08fdba 12429 code = RECORD_TYPE;
8d08fdba
MS
12430 break;
12431 case union_type:
12432 code = UNION_TYPE;
8d08fdba
MS
12433 break;
12434 case enum_type:
12435 code = ENUMERAL_TYPE;
12436 break;
12437 default:
12438 my_friendly_abort (18);
12439 }
12440
12441 /* If a cross reference is requested, look up the type
12442 already defined for this tag and return it. */
2f939d94 12443 if (TYPE_P (name))
be99da77
MS
12444 {
12445 t = name;
a80e4195
MS
12446 name = TYPE_IDENTIFIER (t);
12447 got_type = 1;
be99da77
MS
12448 }
12449 else
12450 t = IDENTIFIER_TYPE_VALUE (name);
61a127b3 12451
73b0fce8
KL
12452 if (t && TREE_CODE (t) != code && TREE_CODE (t) != TEMPLATE_TYPE_PARM
12453 && TREE_CODE (t) != TEMPLATE_TEMPLATE_PARM)
a0a33927
MS
12454 t = NULL_TREE;
12455
8ccc31eb 12456 if (! globalize)
8d08fdba 12457 {
f3400fe2
JM
12458 /* If we know we are defining this tag, only look it up in
12459 this scope and don't try to find it as a type. */
12460 ref = lookup_tag (code, name, b, 1);
8d08fdba
MS
12461 }
12462 else
12463 {
25aab5d0 12464 if (t)
36a117a5 12465 {
25aab5d0
MM
12466 /* [dcl.type.elab] If the identifier resolves to a
12467 typedef-name or a template type-parameter, the
12468 elaborated-type-specifier is ill-formed. */
12469 if (t != TYPE_MAIN_VARIANT (t)
12470 || (CLASS_TYPE_P (t) && TYPE_WAS_ANONYMOUS (t)))
12471 cp_pedwarn ("using typedef-name `%D' after `%s'",
12472 TYPE_NAME (t), tag_name (tag_code));
12473 else if (TREE_CODE (t) == TEMPLATE_TYPE_PARM)
12474 cp_error ("using template type parameter `%T' after `%s'",
12475 t, tag_name (tag_code));
12476
12477 ref = t;
12478 }
12479 else
12480 ref = lookup_tag (code, name, b, 0);
68642fb6 12481
25aab5d0
MM
12482 if (! ref)
12483 {
12484 /* Try finding it as a type declaration. If that wins,
68642fb6 12485 use it. */
25aab5d0
MM
12486 ref = lookup_name (name, 1);
12487
12488 if (ref != NULL_TREE
12489 && processing_template_decl
12490 && DECL_CLASS_TEMPLATE_P (ref)
12491 && template_class_depth (current_class_type) == 0)
12492 /* Since GLOBALIZE is true, we're declaring a global
6757edfe 12493 template, so we want this type. */
17aec3eb 12494 ref = DECL_TEMPLATE_RESULT (ref);
6757edfe 12495
25aab5d0
MM
12496 if (ref && TREE_CODE (ref) == TYPE_DECL
12497 && TREE_CODE (TREE_TYPE (ref)) == code)
12498 ref = TREE_TYPE (ref);
12499 else
12500 ref = NULL_TREE;
12501 }
12502
68642fb6
UD
12503 if (ref && current_class_type
12504 && template_class_depth (current_class_type)
12505 && PROCESSING_REAL_TEMPLATE_DECL_P ())
25aab5d0
MM
12506 {
12507 /* Since GLOBALIZE is non-zero, we are not looking at a
12508 definition of this tag. Since, in addition, we are currently
12509 processing a (member) template declaration of a template
12510 class, we must be very careful; consider:
12511
12512 template <class X>
12513 struct S1
12514
12515 template <class U>
12516 struct S2
12517 { template <class V>
12518 friend struct S1; };
12519
12520 Here, the S2::S1 declaration should not be confused with the
12521 outer declaration. In particular, the inner version should
12522 have a template parameter of level 2, not level 1. This
12523 would be particularly important if the member declaration
12524 were instead:
12525
12526 template <class V = U> friend struct S1;
12527
12528 say, when we should tsubst into `U' when instantiating
12529 S2. On the other hand, when presented with:
12530
12531 template <class T>
12532 struct S1 {
12533 template <class U>
12534 struct S2 {};
12535 template <class U>
12536 friend struct S2;
12537 };
12538
12539 we must find the inner binding eventually. We
12540 accomplish this by making sure that the new type we
12541 create to represent this declaration has the right
12542 TYPE_CONTEXT. */
12543 context = TYPE_CONTEXT (ref);
12544 ref = NULL_TREE;
8d08fdba
MS
12545 }
12546 }
12547
8d08fdba
MS
12548 if (! ref)
12549 {
12550 /* If no such tag is yet defined, create a forward-reference node
12551 and record it as the "definition".
12552 When a real declaration of this type is found,
12553 the forward-reference will be altered into a real type. */
8d08fdba
MS
12554 if (code == ENUMERAL_TYPE)
12555 {
8251199e 12556 cp_error ("use of enum `%#D' without previous declaration", name);
fc378698 12557
8d08fdba
MS
12558 ref = make_node (ENUMERAL_TYPE);
12559
12560 /* Give the type a default layout like unsigned int
12561 to avoid crashing if it does not get defined. */
12562 TYPE_MODE (ref) = TYPE_MODE (unsigned_type_node);
12563 TYPE_ALIGN (ref) = TYPE_ALIGN (unsigned_type_node);
12564 TREE_UNSIGNED (ref) = 1;
12565 TYPE_PRECISION (ref) = TYPE_PRECISION (unsigned_type_node);
12566 TYPE_MIN_VALUE (ref) = TYPE_MIN_VALUE (unsigned_type_node);
12567 TYPE_MAX_VALUE (ref) = TYPE_MAX_VALUE (unsigned_type_node);
12568
12569 /* Enable us to recognize when a type is created in class context.
12570 To do nested classes correctly, this should probably be cleared
12571 out when we leave this classes scope. Currently this in only
12572 done in `start_enum'. */
12573
12574 pushtag (name, ref, globalize);
8d08fdba 12575 }
8d08fdba
MS
12576 else
12577 {
8d08fdba 12578 struct binding_level *old_b = class_binding_level;
8d08fdba 12579
33848bb0 12580 ref = make_aggr_type (code);
25aab5d0 12581 TYPE_CONTEXT (ref) = context;
8d08fdba 12582
8d08fdba
MS
12583#ifdef NONNESTED_CLASSES
12584 /* Class types don't nest the way enums do. */
12585 class_binding_level = (struct binding_level *)0;
12586#endif
12587 pushtag (name, ref, globalize);
12588 class_binding_level = old_b;
8d08fdba
MS
12589 }
12590 }
12591 else
12592 {
7fe6899f 12593 if (!globalize && processing_template_decl && IS_AGGR_TYPE (ref))
6757edfe 12594 redeclare_class_template (ref, current_template_parms);
8d08fdba
MS
12595 }
12596
8d08fdba
MS
12597 /* Until the type is defined, tentatively accept whatever
12598 structure tag the user hands us. */
d0f062fb 12599 if (!COMPLETE_TYPE_P (ref)
8d08fdba
MS
12600 && ref != current_class_type
12601 /* Have to check this, in case we have contradictory tag info. */
12602 && IS_AGGR_TYPE_CODE (TREE_CODE (ref)))
12603 {
12604 if (tag_code == class_type)
12605 CLASSTYPE_DECLARED_CLASS (ref) = 1;
6eabb241 12606 else if (tag_code == record_type)
8d08fdba
MS
12607 CLASSTYPE_DECLARED_CLASS (ref) = 0;
12608 }
12609
dc8263bc
JM
12610 TREE_TYPE (ref) = attributes;
12611
8d08fdba
MS
12612 return ref;
12613}
8ccc31eb 12614
fc378698
MS
12615tree
12616xref_tag_from_type (old, id, globalize)
12617 tree old, id;
12618 int globalize;
12619{
12620 tree code_type_node;
12621
12622 if (TREE_CODE (old) == RECORD_TYPE)
12623 code_type_node = (CLASSTYPE_DECLARED_CLASS (old)
12624 ? class_type_node : record_type_node);
12625 else
12626 code_type_node = union_type_node;
12627
12628 if (id == NULL_TREE)
12629 id = TYPE_IDENTIFIER (old);
12630
ca107ded 12631 return xref_tag (code_type_node, id, globalize);
fc378698
MS
12632}
12633
3fd71a52
MM
12634/* REF is a type (named NAME), for which we have just seen some
12635 baseclasses. BINFO is a list of those baseclasses; the
12636 TREE_PURPOSE is an access_* node, and the TREE_VALUE is the type of
12637 the base-class. CODE_TYPE_NODE indicates whether REF is a class,
12638 struct, or union. */
12639
8ccc31eb
MS
12640void
12641xref_basetypes (code_type_node, name, ref, binfo)
12642 tree code_type_node;
12643 tree name, ref;
12644 tree binfo;
12645{
12646 /* In the declaration `A : X, Y, ... Z' we mark all the types
12647 (A, X, Y, ..., Z) so we can check for duplicates. */
12648 tree binfos;
d6479fe7
MM
12649 tree base;
12650
8ccc31eb 12651 int i, len;
665f2503 12652 enum tag_types tag_code = (enum tag_types) tree_low_cst (code_type_node, 1);
8ccc31eb
MS
12653
12654 if (tag_code == union_type)
12655 {
8251199e 12656 cp_error ("derived union `%T' invalid", ref);
8ccc31eb
MS
12657 return;
12658 }
12659
12660 len = list_length (binfo);
8ccc31eb 12661
d6479fe7
MM
12662 /* First, make sure that any templates in base-classes are
12663 instantiated. This ensures that if we call ourselves recursively
12664 we do not get confused about which classes are marked and which
12665 are not. */
12666 for (base = binfo; base; base = TREE_CHAIN (base))
12667 complete_type (TREE_VALUE (base));
12668
8ccc31eb
MS
12669 SET_CLASSTYPE_MARKED (ref);
12670 BINFO_BASETYPES (TYPE_BINFO (ref)) = binfos = make_tree_vec (len);
12671
12672 for (i = 0; binfo; binfo = TREE_CHAIN (binfo))
12673 {
12674 /* The base of a derived struct is public by default. */
12675 int via_public
be99da77
MS
12676 = (TREE_PURPOSE (binfo) == access_public_node
12677 || TREE_PURPOSE (binfo) == access_public_virtual_node
8ccc31eb 12678 || (tag_code != class_type
be99da77
MS
12679 && (TREE_PURPOSE (binfo) == access_default_node
12680 || TREE_PURPOSE (binfo) == access_default_virtual_node)));
d8b55a76
JM
12681 int via_protected
12682 = (TREE_PURPOSE (binfo) == access_protected_node
12683 || TREE_PURPOSE (binfo) == access_protected_virtual_node);
8ccc31eb 12684 int via_virtual
be99da77 12685 = (TREE_PURPOSE (binfo) == access_private_virtual_node
d8b55a76 12686 || TREE_PURPOSE (binfo) == access_protected_virtual_node
be99da77
MS
12687 || TREE_PURPOSE (binfo) == access_public_virtual_node
12688 || TREE_PURPOSE (binfo) == access_default_virtual_node);
12689 tree basetype = TREE_VALUE (binfo);
8ccc31eb
MS
12690 tree base_binfo;
12691
8ccc31eb
MS
12692 if (basetype && TREE_CODE (basetype) == TYPE_DECL)
12693 basetype = TREE_TYPE (basetype);
5566b478
MS
12694 if (!basetype
12695 || (TREE_CODE (basetype) != RECORD_TYPE
a80e4195 12696 && TREE_CODE (basetype) != TYPENAME_TYPE
73b0fce8
KL
12697 && TREE_CODE (basetype) != TEMPLATE_TYPE_PARM
12698 && TREE_CODE (basetype) != TEMPLATE_TEMPLATE_PARM))
8ccc31eb 12699 {
8251199e 12700 cp_error ("base type `%T' fails to be a struct or class type",
8ccc31eb
MS
12701 TREE_VALUE (binfo));
12702 continue;
12703 }
2b9dc906 12704
11b5139c 12705 GNU_xref_hier (name, basetype, via_public, via_virtual, 0);
2b9dc906 12706
8adf5b5e
JM
12707 /* This code replaces similar code in layout_basetypes.
12708 We put the complete_type first for implicit `typename'. */
d0f062fb 12709 if (!COMPLETE_TYPE_P (basetype)
2b9dc906 12710 && ! (current_template_parms && uses_template_parms (basetype)))
8ccc31eb 12711 {
8251199e 12712 cp_error ("base class `%T' has incomplete type", basetype);
8ccc31eb
MS
12713 continue;
12714 }
8ccc31eb
MS
12715 else
12716 {
12717 if (CLASSTYPE_MARKED (basetype))
12718 {
12719 if (basetype == ref)
8251199e 12720 cp_error ("recursive type `%T' undefined", basetype);
8ccc31eb 12721 else
8251199e 12722 cp_error ("duplicate base type `%T' invalid", basetype);
8ccc31eb
MS
12723 continue;
12724 }
12725
eff71ab0 12726 if (TYPE_FOR_JAVA (basetype)
68642fb6 12727 && (current_lang_stack
9cd64686 12728 == &VARRAY_TREE (current_lang_base, 0)))
eff71ab0
PB
12729 TYPE_FOR_JAVA (ref) = 1;
12730
8ccc31eb
MS
12731 /* Note that the BINFO records which describe individual
12732 inheritances are *not* shared in the lattice! They
12733 cannot be shared because a given baseclass may be
12734 inherited with different `accessibility' by different
12735 derived classes. (Each BINFO record describing an
12736 individual inheritance contains flags which say what
12737 the `accessibility' of that particular inheritance is.) */
68642fb6
UD
12738
12739 base_binfo
fed3cef0 12740 = make_binfo (size_zero_node, basetype,
7ddedda4
MM
12741 CLASS_TYPE_P (basetype)
12742 ? TYPE_BINFO_VTABLE (basetype) : NULL_TREE,
12743 CLASS_TYPE_P (basetype)
12744 ? TYPE_BINFO_VIRTUALS (basetype) : NULL_TREE);
68642fb6 12745
8ccc31eb
MS
12746 TREE_VEC_ELT (binfos, i) = base_binfo;
12747 TREE_VIA_PUBLIC (base_binfo) = via_public;
12748 TREE_VIA_PROTECTED (base_binfo) = via_protected;
12749 TREE_VIA_VIRTUAL (base_binfo) = via_virtual;
12750 BINFO_INHERITANCE_CHAIN (base_binfo) = TYPE_BINFO (ref);
12751
dfbcd65a
JM
12752 /* We need to unshare the binfos now so that lookups during class
12753 definition work. */
12754 unshare_base_binfos (base_binfo);
12755
8ccc31eb 12756 SET_CLASSTYPE_MARKED (basetype);
9e9ff709 12757
8ccc31eb
MS
12758 /* We are free to modify these bits because they are meaningless
12759 at top level, and BASETYPE is a top-level type. */
12760 if (via_virtual || TYPE_USES_VIRTUAL_BASECLASSES (basetype))
12761 {
12762 TYPE_USES_VIRTUAL_BASECLASSES (ref) = 1;
4c6b7393
MM
12763 /* Converting to a virtual base class requires looking
12764 up the offset of the virtual base. */
12765 TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (ref) = 1;
8ccc31eb
MS
12766 }
12767
7ddedda4
MM
12768 if (CLASS_TYPE_P (basetype))
12769 {
834c6dff
MM
12770 TYPE_HAS_NEW_OPERATOR (ref)
12771 |= TYPE_HAS_NEW_OPERATOR (basetype);
12772 TYPE_HAS_ARRAY_NEW_OPERATOR (ref)
12773 |= TYPE_HAS_ARRAY_NEW_OPERATOR (basetype);
7ddedda4 12774 TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
4c6b7393 12775 /* If the base-class uses multiple inheritance, so do we. */
68642fb6 12776 TYPE_USES_MULTIPLE_INHERITANCE (ref)
4c6b7393
MM
12777 |= TYPE_USES_MULTIPLE_INHERITANCE (basetype);
12778 /* Likewise, if converting to a base of the base may require
12779 code, then we may need to generate code to convert to a
12780 base as well. */
68642fb6 12781 TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (ref)
4c6b7393 12782 |= TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (basetype);
7ddedda4
MM
12783 }
12784
8ccc31eb
MS
12785 i += 1;
12786 }
12787 }
12788 if (i)
12789 TREE_VEC_LENGTH (binfos) = i;
12790 else
12791 BINFO_BASETYPES (TYPE_BINFO (ref)) = NULL_TREE;
12792
12793 if (i > 1)
7ddedda4 12794 {
4c6b7393
MM
12795 TYPE_USES_MULTIPLE_INHERITANCE (ref) = 1;
12796 /* If there is more than one non-empty they cannot be at the same
12797 address. */
12798 TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (ref) = 1;
7ddedda4
MM
12799 }
12800
8ccc31eb
MS
12801 /* Unmark all the types. */
12802 while (--i >= 0)
12803 CLEAR_CLASSTYPE_MARKED (BINFO_TYPE (TREE_VEC_ELT (binfos, i)));
12804 CLEAR_CLASSTYPE_MARKED (ref);
12805
70c532b5
MM
12806 /* Now that we know all the base-classes, set up the list of virtual
12807 bases. */
23381155 12808 get_vbase_types (ref);
8ccc31eb 12809}
68642fb6 12810
8d08fdba 12811\f
8d08fdba
MS
12812/* Begin compiling the definition of an enumeration type.
12813 NAME is its name (or null if anonymous).
12814 Returns the type object, as yet incomplete.
12815 Also records info about it so that build_enumerator
12816 may be used to declare the individual values as they are read. */
12817
12818tree
12819start_enum (name)
12820 tree name;
12821{
12822 register tree enumtype = NULL_TREE;
8f032717 12823 struct binding_level *b = current_binding_level;
8d08fdba
MS
12824
12825 /* If this is the real definition for a previous forward reference,
12826 fill in the contents in the same object that used to be the
12827 forward reference. */
12828
12829 if (name != NULL_TREE)
12830 enumtype = lookup_tag (ENUMERAL_TYPE, name, b, 1);
12831
12832 if (enumtype != NULL_TREE && TREE_CODE (enumtype) == ENUMERAL_TYPE)
30ff8252
NS
12833 {
12834 cp_error ("multiple definition of `%#T'", enumtype);
12835 cp_error_at ("previous definition here", enumtype);
58595203
MM
12836 /* Clear out TYPE_VALUES, and start again. */
12837 TYPE_VALUES (enumtype) = NULL_TREE;
30ff8252 12838 }
8d08fdba
MS
12839 else
12840 {
12841 enumtype = make_node (ENUMERAL_TYPE);
12842 pushtag (name, enumtype, 0);
12843 }
12844
12845 if (current_class_type)
12846 TREE_ADDRESSABLE (b->tags) = 1;
c91a56d2 12847
8d08fdba
MS
12848 GNU_xref_decl (current_function_decl, enumtype);
12849 return enumtype;
12850}
12851
12852/* After processing and defining all the values of an enumeration type,
12853 install their decls in the enumeration type and finish it off.
12854 ENUMTYPE is the type object and VALUES a list of name-value pairs.
12855 Returns ENUMTYPE. */
12856
12857tree
dbfe2124
MM
12858finish_enum (enumtype)
12859 tree enumtype;
8d08fdba 12860{
a703fb38 12861 register tree minnode = NULL_TREE, maxnode = NULL_TREE;
8d08fdba
MS
12862 /* Calculate the maximum value of any enumerator in this type. */
12863
dbfe2124 12864 tree values = TYPE_VALUES (enumtype);
8d08fdba
MS
12865 if (values)
12866 {
ed44da02 12867 tree pair;
5566b478 12868
ed44da02 12869 for (pair = values; pair; pair = TREE_CHAIN (pair))
8d08fdba 12870 {
ed44da02
MM
12871 tree decl;
12872 tree value;
12873
12874 /* The TREE_VALUE is a CONST_DECL for this enumeration
12875 constant. */
12876 decl = TREE_VALUE (pair);
12877
58595203
MM
12878 /* [dcl.enum]
12879
12880 Following the closing brace of an enum-specifier, each
12881 enumerator has the type of its enumeration. Prior to the
12882 closing brace, the type of each enumerator is the type of
12883 its initializing value. */
12884 TREE_TYPE (decl) = enumtype;
12885
ed44da02
MM
12886 /* The DECL_INITIAL will be NULL if we are processing a
12887 template declaration and this enumeration constant had no
12888 explicit initializer. */
12889 value = DECL_INITIAL (decl);
079e1098 12890 if (value && !processing_template_decl)
5566b478 12891 {
079e1098
MM
12892 /* Set the TREE_TYPE for the VALUE as well. That's so
12893 that when we call decl_constant_value we get an
12894 entity of the right type (but with the constant
12895 value). Since we shouldn't ever call
12896 decl_constant_value on a template type, there's no
12897 reason to do that when processing_template_decl.
12898 And, if the expression is something like a
12899 TEMPLATE_PARM_INDEX or a CAST_EXPR doing so will
68642fb6 12900 wreak havoc on the intended type of the expression.
079e1098
MM
12901
12902 Of course, there's also no point in trying to compute
12903 minimum or maximum values if we're in a template. */
5566b478 12904 TREE_TYPE (value) = enumtype;
ed44da02 12905
079e1098
MM
12906 if (!minnode)
12907 minnode = maxnode = value;
12908 else if (tree_int_cst_lt (maxnode, value))
12909 maxnode = value;
12910 else if (tree_int_cst_lt (value, minnode))
12911 minnode = value;
5566b478 12912 }
ed44da02 12913
68642fb6 12914 if (processing_template_decl)
72f2bd78
MM
12915 /* If this is just a template, leave the CONST_DECL
12916 alone. That way tsubst_copy will find CONST_DECLs for
12917 CONST_DECLs, and not INTEGER_CSTs. */
12918 ;
12919 else
12920 /* In the list we're building up, we want the enumeration
12921 values, not the CONST_DECLs. */
12922 TREE_VALUE (pair) = value;
8d08fdba
MS
12923 }
12924 }
f376e137
MS
12925 else
12926 maxnode = minnode = integer_zero_node;
8d08fdba 12927
de22184b 12928 TYPE_VALUES (enumtype) = nreverse (values);
2986ae00 12929
5156628f 12930 if (processing_template_decl)
b87692e5 12931 {
9360ac70
MM
12932 tree scope = current_scope ();
12933 if (scope && TREE_CODE (scope) == FUNCTION_DECL)
cbf882af 12934 add_tree (build_min (TAG_DEFN, enumtype));
b87692e5 12935 }
cbf882af
MM
12936 else
12937 {
12938 int unsignedp = tree_int_cst_sgn (minnode) >= 0;
12939 int lowprec = min_precision (minnode, unsignedp);
12940 int highprec = min_precision (maxnode, unsignedp);
12941 int precision = MAX (lowprec, highprec);
12942 tree tem;
5566b478 12943
cbf882af 12944 TYPE_SIZE (enumtype) = NULL_TREE;
8d08fdba 12945
cbf882af 12946 /* Set TYPE_MIN_VALUE and TYPE_MAX_VALUE according to `precision'. */
8ccc31eb 12947
cbf882af
MM
12948 TYPE_PRECISION (enumtype) = precision;
12949 if (unsignedp)
12950 fixup_unsigned_type (enumtype);
12951 else
12952 fixup_signed_type (enumtype);
8ccc31eb 12953
cbf882af
MM
12954 if (flag_short_enums || (precision > TYPE_PRECISION (integer_type_node)))
12955 /* Use the width of the narrowest normal C type which is wide
68642fb6 12956 enough. */
cbf882af
MM
12957 TYPE_PRECISION (enumtype) = TYPE_PRECISION (type_for_size
12958 (precision, 1));
12959 else
12960 TYPE_PRECISION (enumtype) = TYPE_PRECISION (integer_type_node);
8d08fdba 12961
cbf882af
MM
12962 TYPE_SIZE (enumtype) = 0;
12963 layout_type (enumtype);
68642fb6 12964
cbf882af
MM
12965 /* Fix up all variant types of this enum type. */
12966 for (tem = TYPE_MAIN_VARIANT (enumtype); tem;
12967 tem = TYPE_NEXT_VARIANT (tem))
12968 {
12969 TYPE_VALUES (tem) = TYPE_VALUES (enumtype);
12970 TYPE_MIN_VALUE (tem) = TYPE_MIN_VALUE (enumtype);
12971 TYPE_MAX_VALUE (tem) = TYPE_MAX_VALUE (enumtype);
12972 TYPE_SIZE (tem) = TYPE_SIZE (enumtype);
12973 TYPE_SIZE_UNIT (tem) = TYPE_SIZE_UNIT (enumtype);
12974 TYPE_MODE (tem) = TYPE_MODE (enumtype);
12975 TYPE_PRECISION (tem) = TYPE_PRECISION (enumtype);
12976 TYPE_ALIGN (tem) = TYPE_ALIGN (enumtype);
12977 TREE_UNSIGNED (tem) = TREE_UNSIGNED (enumtype);
12978 }
8d08fdba 12979
cbf882af
MM
12980 /* Finish debugging output for this type. */
12981 rest_of_type_compilation (enumtype, namespace_bindings_p ());
12982 }
12983
8d08fdba
MS
12984 return enumtype;
12985}
12986
079e1098 12987/* Build and install a CONST_DECL for an enumeration constant of the
58595203 12988 enumeration type ENUMTYPE whose NAME and VALUE (if any) are provided.
8d08fdba
MS
12989 Assignment of sequential values by default is handled here. */
12990
58595203
MM
12991void
12992build_enumerator (name, value, enumtype)
079e1098
MM
12993 tree name;
12994 tree value;
58595203 12995 tree enumtype;
8d08fdba 12996{
58595203 12997 tree decl;
e8bd800e 12998 tree context;
58595203
MM
12999 tree type;
13000 tree values;
8d08fdba
MS
13001
13002 /* Remove no-op casts from the value. */
13003 if (value)
13004 STRIP_TYPE_NOPS (value);
13005
58595203
MM
13006 if (! processing_template_decl)
13007 {
13008 /* Validate and default VALUE. */
13009 if (value != NULL_TREE)
13010 {
13011 if (TREE_READONLY_DECL_P (value))
13012 value = decl_constant_value (value);
13013
13014 if (TREE_CODE (value) == INTEGER_CST)
13015 {
13016 value = default_conversion (value);
13017 constant_expression_warning (value);
13018 }
13019 else
13020 {
13021 cp_error ("enumerator value for `%D' not integer constant", name);
13022 value = NULL_TREE;
13023 }
13024 }
13025
13026 /* Default based on previous value. */
13027 if (value == NULL_TREE && ! processing_template_decl)
13028 {
13029 tree prev_value;
13030
13031 if (TYPE_VALUES (enumtype))
13032 {
13033 /* The next value is the previous value ... */
13034 prev_value = DECL_INITIAL (TREE_VALUE (TYPE_VALUES (enumtype)));
13035 /* ... plus one. */
c7e266a6
MM
13036 value = build_binary_op (PLUS_EXPR,
13037 prev_value,
13038 integer_one_node);
68642fb6 13039
58595203
MM
13040 if (tree_int_cst_lt (value, prev_value))
13041 cp_error ("overflow in enumeration values at `%D'", name);
13042 }
13043 else
13044 value = integer_zero_node;
13045 }
13046
13047 /* Remove no-op casts from the value. */
13048 if (value)
13049 STRIP_TYPE_NOPS (value);
013bc8af 13050#if 0
58595203
MM
13051 /* To fix MAX_VAL enum consts. (bkoz) */
13052 TREE_TYPE (value) = integer_type_node;
013bc8af 13053#endif
58595203 13054 }
8d08fdba 13055
58595203
MM
13056 /* We always have to copy here; not all INTEGER_CSTs are unshared.
13057 Even in other cases, we will later (in finish_enum) be setting
13058 the type of VALUE. But, we don't need to make a copy if this
13059 VALUE is one of the enumeration constants for this same
13060 enumeration type. */
13061 for (values = TYPE_VALUES (enumtype); values; values = TREE_CHAIN (values))
13062 if (TREE_VALUE (values) == value)
13063 break;
13064 /* If we didn't break out of the loop, then we do need a copy. */
13065 if (!values && value)
13066 value = copy_node (value);
ed44da02 13067
8d08fdba 13068 /* C++ associates enums with global, function, or class declarations. */
58595203
MM
13069 context = current_scope ();
13070
13071 /* Build the actual enumeration constant. Note that the enumeration
13072 constants have the type of their initializers until the
13073 enumeration is complete:
13074
13075 [ dcl.enum ]
13076
13077 Following the closing brace of an enum-specifier, each enumer-
13078 ator has the type of its enumeration. Prior to the closing
13079 brace, the type of each enumerator is the type of its
13080 initializing value.
13081
13082 In finish_enum we will reset the type. Of course, if we're
13083 processing a template, there may be no value. */
13084 type = value ? TREE_TYPE (value) : NULL_TREE;
13085
13086 if (context && context == current_class_type)
13087 /* This enum declaration is local to the class. We need the full
13088 lang_decl so that we can record DECL_CLASS_CONTEXT, for example. */
13089 decl = build_lang_decl (CONST_DECL, name, type);
13090 else
13091 /* It's a global enum, or it's local to a function. (Note local to
e8bd800e 13092 a function could mean local to a class method. */
58595203 13093 decl = build_decl (CONST_DECL, name, type);
e8bd800e 13094
58595203
MM
13095 DECL_CONTEXT (decl) = FROB_CONTEXT (context);
13096 DECL_INITIAL (decl) = value;
13097 TREE_READONLY (decl) = 1;
e8bd800e 13098
58595203
MM
13099 if (context && context == current_class_type)
13100 /* In something like `struct S { enum E { i = 7 }; };' we put `i'
8f032717
MM
13101 on the TYPE_FIELDS list for `S'. (That's so that you can say
13102 things like `S::i' later.) */
58595203
MM
13103 finish_member_declaration (decl);
13104 else
13105 {
13106 pushdecl (decl);
13107 GNU_xref_decl (current_function_decl, decl);
13108 }
13109
13110 /* Add this enumeration constant to the list for this type. */
13111 TYPE_VALUES (enumtype) = tree_cons (name, decl, TYPE_VALUES (enumtype));
8d08fdba
MS
13112}
13113
8d08fdba 13114\f
5566b478
MS
13115static int function_depth;
13116
a8f73d4b
MM
13117/* We're defining DECL. Make sure that it's type is OK. */
13118
13119static void
13120check_function_type (decl)
13121 tree decl;
13122{
13123 tree fntype = TREE_TYPE (decl);
d0f062fb 13124 tree return_type = complete_type (TREE_TYPE (fntype));
a8f73d4b
MM
13125
13126 /* In a function definition, arg types must be complete. */
13127 require_complete_types_for_parms (current_function_parms);
13128
d0f062fb 13129 if (!COMPLETE_OR_VOID_TYPE_P (return_type))
a8f73d4b
MM
13130 {
13131 cp_error ("return type `%#T' is incomplete", TREE_TYPE (fntype));
13132
13133 /* Make it return void instead, but don't change the
13134 type of the DECL_RESULT, in case we have a named return value. */
13135 if (TREE_CODE (fntype) == METHOD_TYPE)
13136 {
13137 tree ctype = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (fntype)));
13138 TREE_TYPE (decl)
13139 = build_cplus_method_type (ctype,
13140 void_type_node,
13141 FUNCTION_ARG_CHAIN (decl));
13142 }
13143 else
13144 TREE_TYPE (decl)
13145 = build_function_type (void_type_node,
13146 TYPE_ARG_TYPES (TREE_TYPE (decl)));
68642fb6 13147 TREE_TYPE (decl)
a8f73d4b
MM
13148 = build_exception_variant (fntype,
13149 TYPE_RAISES_EXCEPTIONS (fntype));
13150 }
13151 else
13152 abstract_virtuals_error (decl, TREE_TYPE (fntype));
13153}
13154
8d08fdba
MS
13155/* Create the FUNCTION_DECL for a function definition.
13156 DECLSPECS and DECLARATOR are the parts of the declaration;
13157 they describe the function's name and the type it returns,
13158 but twisted together in a fashion that parallels the syntax of C.
13159
a8f73d4b
MM
13160 FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
13161 DECLARATOR is really the DECL for the function we are about to
13162 process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
13163 indicating that the function is an inline defined in-class, and
13164 SF_EXPAND indicating that we should generate RTL for this
68642fb6
UD
13165 function.
13166
8d08fdba
MS
13167 This function creates a binding context for the function body
13168 as well as setting up the FUNCTION_DECL in current_function_decl.
13169
13170 Returns 1 on success. If the DECLARATOR is not suitable for a function
13171 (it defines a datum instead), we return 0, which tells
13172 yyparse to report a parse error.
13173
13174 For C++, we must first check whether that datum makes any sense.
13175 For example, "class A local_a(1,2);" means that variable local_a
13176 is an aggregate of type A, which should have a constructor
87e3dbc9 13177 applied to it with the argument list [1, 2]. */
8d08fdba
MS
13178
13179int
a8f73d4b 13180start_function (declspecs, declarator, attrs, flags)
c11b6f21 13181 tree declspecs, declarator, attrs;
a8f73d4b 13182 int flags;
8d08fdba 13183{
5566b478 13184 tree decl1;
8d08fdba
MS
13185 tree ctype = NULL_TREE;
13186 tree fntype;
13187 tree restype;
13188 extern int have_extern_spec;
13189 extern int used_extern_spec;
13190 int doing_friend = 0;
a8f73d4b 13191 struct binding_level *bl;
8d08fdba 13192
8d08fdba 13193 /* Sanity check. */
a1774733 13194 my_friendly_assert (TREE_CODE (TREE_VALUE (void_list_node)) == VOID_TYPE, 160);
8d08fdba
MS
13195 my_friendly_assert (TREE_CHAIN (void_list_node) == NULL_TREE, 161);
13196
e92cc029 13197 /* This should only be done once on the top most decl. */
8d08fdba
MS
13198 if (have_extern_spec && !used_extern_spec)
13199 {
13200 declspecs = decl_tree_cons (NULL_TREE, get_identifier ("extern"), declspecs);
13201 used_extern_spec = 1;
13202 }
13203
a8f73d4b 13204 if (flags & SF_PRE_PARSED)
8d08fdba
MS
13205 {
13206 decl1 = declarator;
13207
8d08fdba
MS
13208 fntype = TREE_TYPE (decl1);
13209 if (TREE_CODE (fntype) == METHOD_TYPE)
13210 ctype = TYPE_METHOD_BASETYPE (fntype);
13211
cab1f180
ML
13212 /* ISO C++ 11.4/5. A friend function defined in a class is in
13213 the (lexical) scope of the class in which it is defined. */
8d08fdba
MS
13214 if (!ctype && DECL_FRIEND_P (decl1))
13215 {
4f1c5b7d 13216 ctype = DECL_FRIEND_CONTEXT (decl1);
8d08fdba
MS
13217
13218 /* CTYPE could be null here if we're dealing with a template;
13219 for example, `inline friend float foo()' inside a template
13220 will have no CTYPE set. */
13221 if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
13222 ctype = NULL_TREE;
13223 else
13224 doing_friend = 1;
13225 }
13226
5566b478
MS
13227 last_function_parms = DECL_ARGUMENTS (decl1);
13228 last_function_parm_tags = NULL_TREE;
8d08fdba
MS
13229 }
13230 else
13231 {
c11b6f21 13232 decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, NULL_TREE);
8d08fdba
MS
13233 /* If the declarator is not suitable for a function definition,
13234 cause a syntax error. */
13235 if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL) return 0;
13236
13237 fntype = TREE_TYPE (decl1);
13238
13239 restype = TREE_TYPE (fntype);
7ddedda4 13240 if (CLASS_TYPE_P (restype) && !CLASSTYPE_GOT_SEMICOLON (restype))
8d08fdba 13241 {
8251199e 13242 cp_error ("semicolon missing after declaration of `%#T'", restype);
051e6fd7 13243 shadow_tag (build_tree_list (NULL_TREE, restype));
8d08fdba
MS
13244 CLASSTYPE_GOT_SEMICOLON (restype) = 1;
13245 if (TREE_CODE (fntype) == FUNCTION_TYPE)
13246 fntype = build_function_type (integer_type_node,
13247 TYPE_ARG_TYPES (fntype));
13248 else
13249 fntype = build_cplus_method_type (build_type_variant (TYPE_METHOD_BASETYPE (fntype), TREE_READONLY (decl1), TREE_SIDE_EFFECTS (decl1)),
13250 integer_type_node,
13251 TYPE_ARG_TYPES (fntype));
13252 TREE_TYPE (decl1) = fntype;
13253 }
13254
13255 if (TREE_CODE (fntype) == METHOD_TYPE)
13256 ctype = TYPE_METHOD_BASETYPE (fntype);
35680744 13257 else if (DECL_MAIN_P (decl1))
8d08fdba
MS
13258 {
13259 /* If this doesn't return integer_type, complain. */
13260 if (TREE_TYPE (TREE_TYPE (decl1)) != integer_type_node)
13261 {
a28e3c7f 13262 if (pedantic || warn_return_type)
8251199e 13263 pedwarn ("return type for `main' changed to `int'");
8d08fdba
MS
13264 TREE_TYPE (decl1) = fntype = default_function_type;
13265 }
8d08fdba
MS
13266 }
13267 }
68642fb6 13268
b35d4555
MM
13269 /* Sometimes we don't notice that a function is a static member, and
13270 build a METHOD_TYPE for it. Fix that up now. */
13271 if (ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1)
13272 && TREE_CODE (TREE_TYPE (decl1)) == METHOD_TYPE)
13273 {
3afb32a4 13274 revert_static_member_fn (decl1);
b35d4555
MM
13275 last_function_parms = TREE_CHAIN (last_function_parms);
13276 ctype = NULL_TREE;
13277 }
8d08fdba
MS
13278
13279 /* Warn if function was previously implicitly declared
13280 (but not if we warned then). */
13281 if (! warn_implicit
13282 && IDENTIFIER_IMPLICIT_DECL (DECL_NAME (decl1)) != NULL_TREE)
8251199e 13283 cp_warning_at ("`%D' implicitly declared before its definition", IDENTIFIER_IMPLICIT_DECL (DECL_NAME (decl1)));
8d08fdba 13284
f181d4ae
MM
13285 /* Set up current_class_type, and enter the scope of the class, if
13286 appropriate. */
13287 if (ctype)
13288 push_nested_class (ctype, 1);
13289 else if (DECL_STATIC_FUNCTION_P (decl1))
13290 push_nested_class (DECL_CONTEXT (decl1), 2);
13291
13292 /* Now that we have entered the scope of the class, we must restore
13293 the bindings for any template parameters surrounding DECL1, if it
13294 is an inline member template. (Order is important; consider the
13295 case where a template parameter has the same name as a field of
13296 the class.) It is not until after this point that
13297 PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly. */
a8f73d4b 13298 if (flags & SF_INCLASS_INLINE)
f181d4ae
MM
13299 maybe_begin_member_template_processing (decl1);
13300
9188c363
MM
13301 /* Effective C++ rule 15. See also c_expand_return. */
13302 if (warn_ecpp
13303 && DECL_NAME (decl1) == ansi_opname[(int) MODIFY_EXPR]
13304 && TREE_CODE (TREE_TYPE (fntype)) == VOID_TYPE)
13305 cp_warning ("`operator=' should return a reference to `*this'");
13306
13307 /* Make the init_value nonzero so pushdecl knows this is not tentative.
13308 error_mark_node is replaced below (in poplevel) with the BLOCK. */
b35d4555
MM
13309 if (!DECL_INITIAL (decl1))
13310 DECL_INITIAL (decl1) = error_mark_node;
9188c363
MM
13311
13312#ifdef SET_DEFAULT_DECL_ATTRIBUTES
13313 SET_DEFAULT_DECL_ATTRIBUTES (decl1, attrs);
13314#endif
68642fb6 13315
9188c363
MM
13316 /* This function exists in static storage.
13317 (This does not mean `static' in the C sense!) */
13318 TREE_STATIC (decl1) = 1;
13319
13320 /* We must call push_template_decl after current_class_type is set
13321 up. (If we are processing inline definitions after exiting a
13322 class scope, current_class_type will be NULL_TREE until set above
13323 by push_nested_class.) */
13324 if (processing_template_decl)
13325 decl1 = push_template_decl (decl1);
13326
f181d4ae 13327 /* We are now in the scope of the function being defined. */
8d08fdba 13328 current_function_decl = decl1;
f181d4ae 13329
5566b478
MS
13330 /* Save the parm names or decls from this function's declarator
13331 where store_parm_decls will find them. */
13332 current_function_parms = last_function_parms;
13333 current_function_parm_tags = last_function_parm_tags;
8d08fdba 13334
a8f73d4b
MM
13335 /* Make sure the parameter and return types are reasonable. When
13336 you declare a function, these types can be incomplete, but they
13337 must be complete when you define the function. */
5156628f 13338 if (! processing_template_decl)
a8f73d4b 13339 check_function_type (decl1);
f181d4ae 13340
a8f73d4b
MM
13341 /* Build the return declaration for the function. */
13342 restype = TREE_TYPE (fntype);
13343 if (!processing_template_decl)
13344 {
13345 if (!DECL_RESULT (decl1))
5566b478 13346 {
5566b478 13347 DECL_RESULT (decl1)
a8f73d4b 13348 = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (restype));
68642fb6
UD
13349 c_apply_type_quals_to_decl (CP_TYPE_QUALS (restype),
13350 DECL_RESULT (decl1));
5566b478 13351 }
5566b478 13352 }
a8f73d4b
MM
13353 else
13354 /* Just use `void'. Nobody will ever look at this anyhow. */
13355 DECL_RESULT (decl1) = build_decl (RESULT_DECL, 0, void_type_node);
13356
13357 /* Initialize RTL machinery. We cannot do this until
13358 CURRENT_FUNCTION_DECL and DECL_RESULT are set up. We do this
13359 even when processing a template; this is how we get
01d939e8 13360 CFUN set up, and our per-function variables initialized. */
a8f73d4b
MM
13361 bl = current_binding_level;
13362 init_function_start (decl1, input_filename, lineno);
13363 current_binding_level = bl;
13364 expanding_p = (flags & SF_EXPAND) != 0;
13365
13366 /* Even though we're inside a function body, we still don't want to
13367 call expand_expr to calculate the size of a variable-sized array.
13368 We haven't necessarily assigned RTL to all variables yet, so it's
13369 not safe to try to expand expressions involving them. */
13370 immediate_size_expand = 0;
01d939e8 13371 cfun->x_dont_save_pending_sizes_p = 1;
a8f73d4b 13372
6f80451c
MM
13373 /* If we're building a statement-tree, start the tree now. */
13374 if (processing_template_decl || !expanding_p)
13375 begin_stmt_tree (&DECL_SAVED_TREE (decl1));
13376
a8f73d4b 13377 /* Let the user know we're compiling this function. */
24bef158 13378 if (processing_template_decl || !building_stmt_tree ())
a8f73d4b 13379 announce_function (decl1);
b7484fbe 13380
878cd289
MS
13381 /* Record the decl so that the function name is defined.
13382 If we already have a decl for this name, and it is a FUNCTION_DECL,
13383 use the old decl. */
a8f73d4b 13384 if (!processing_template_decl && !(flags & SF_PRE_PARSED))
878cd289 13385 {
75650646 13386 /* A specialization is not used to guide overload resolution. */
68642fb6 13387 if ((flag_guiding_decls
959d8796
JM
13388 || !DECL_TEMPLATE_SPECIALIZATION (decl1))
13389 && ! DECL_FUNCTION_MEMBER_P (decl1))
75650646 13390 decl1 = pushdecl (decl1);
2c73f9f5 13391 else
b7698cf0
JM
13392 {
13393 /* We need to set the DECL_CONTEXT. */
13394 if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
13395 DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
13396 /* And make sure we have enough default args. */
13397 check_default_args (decl1);
13398 }
878cd289
MS
13399 fntype = TREE_TYPE (decl1);
13400 }
5566b478 13401
a8f73d4b 13402 /* Reset these in case the call to pushdecl changed them. */
5566b478 13403 current_function_decl = decl1;
01d939e8 13404 cfun->decl = decl1;
878cd289 13405
b35d4555
MM
13406 /* Initialize the per-function data. */
13407 if (!DECL_PENDING_INLINE_P (decl1) && DECL_SAVED_FUNCTION_DATA (decl1))
13408 {
13409 /* If we already parsed this function, and we're just expanding it
13410 now, restore saved state. */
13411 struct binding_level *bl = current_binding_level;
13412 *cp_function_chain = *DECL_SAVED_FUNCTION_DATA (decl1);
13413 current_binding_level = bl;
13414
b35d4555
MM
13415 /* This function is being processed in whole-function mode; we
13416 already did semantic analysis. */
01d939e8 13417 cfun->x_whole_function_mode_p = 1;
b35d4555 13418
914653a2
MM
13419 /* If we decided that we didn't want to inline this function,
13420 make sure the back-end knows that. */
13421 if (!current_function_cannot_inline)
13422 current_function_cannot_inline = cp_function_chain->cannot_inline;
13423
b35d4555
MM
13424 /* We don't need the saved data anymore. */
13425 free (DECL_SAVED_FUNCTION_DATA (decl1));
13426 DECL_SAVED_FUNCTION_DATA (decl1) = NULL;
13427 }
13428 else if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1))
13429 {
13430 /* We know that this was set up by `grokclassfn'. We do not
13431 wait until `store_parm_decls', since evil parse errors may
13432 never get us to that point. Here we keep the consistency
13433 between `current_class_type' and `current_class_ptr'. */
13434 tree t = DECL_ARGUMENTS (decl1);
68642fb6
UD
13435
13436 my_friendly_assert (t != NULL_TREE && TREE_CODE (t) == PARM_DECL,
b35d4555
MM
13437 162);
13438 my_friendly_assert (TREE_CODE (TREE_TYPE (t)) == POINTER_TYPE,
13439 19990811);
68642fb6
UD
13440
13441 cp_function_chain->x_current_class_ref
b35d4555
MM
13442 = build_indirect_ref (t, NULL_PTR);
13443 cp_function_chain->x_current_class_ptr = t;
13444
018fc244
MM
13445 /* Constructors and destructors need to know whether they're "in
13446 charge" of initializing virtual base classes. */
454fa7a7 13447 if (DECL_HAS_IN_CHARGE_PARM_P (decl1))
018fc244 13448 current_in_charge_parm = TREE_CHAIN (t);
b35d4555
MM
13449 }
13450
db5ae43f 13451 if (DECL_INTERFACE_KNOWN (decl1))
faae18ab 13452 {
4f1c5b7d 13453 tree ctx = decl_function_context (decl1);
86052cc3 13454
faae18ab
MS
13455 if (DECL_NOT_REALLY_EXTERN (decl1))
13456 DECL_EXTERNAL (decl1) = 0;
86052cc3 13457
68642fb6 13458 if (ctx != NULL_TREE && DECL_THIS_INLINE (ctx)
86052cc3
JM
13459 && TREE_PUBLIC (ctx))
13460 /* This is a function in a local class in an extern inline
13461 function. */
13462 comdat_linkage (decl1);
faae18ab 13463 }
8d08fdba
MS
13464 /* If this function belongs to an interface, it is public.
13465 If it belongs to someone else's interface, it is also external.
1f901793 13466 This only affects inlines and template instantiations. */
5566b478
MS
13467 else if (interface_unknown == 0
13468 && (! DECL_TEMPLATE_INSTANTIATION (decl1)
d11ad92e 13469 || flag_alt_external_templates))
8d08fdba 13470 {
5566b478 13471 if (DECL_THIS_INLINE (decl1) || DECL_TEMPLATE_INSTANTIATION (decl1)
5156628f 13472 || processing_template_decl)
1f901793
JM
13473 {
13474 DECL_EXTERNAL (decl1)
13475 = (interface_only
9c73ec84
MS
13476 || (DECL_THIS_INLINE (decl1) && ! flag_implement_inlines
13477 && !DECL_VINDEX (decl1)));
1f901793
JM
13478
13479 /* For WIN32 we also want to put these in linkonce sections. */
13480 maybe_make_one_only (decl1);
13481 }
db5ae43f 13482 else
893de33c 13483 DECL_EXTERNAL (decl1) = 0;
e8abc66f 13484 DECL_NOT_REALLY_EXTERN (decl1) = 0;
db5ae43f 13485 DECL_INTERFACE_KNOWN (decl1) = 1;
8d08fdba 13486 }
c16c47fb
JM
13487 else if (interface_unknown && interface_only
13488 && (! DECL_TEMPLATE_INSTANTIATION (decl1)
13489 || flag_alt_external_templates))
13490 {
13491 /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
13492 interface, we will have interface_only set but not
13493 interface_known. In that case, we don't want to use the normal
13494 heuristics because someone will supply a #pragma implementation
13495 elsewhere, and deducing it here would produce a conflict. */
13496 comdat_linkage (decl1);
13497 DECL_EXTERNAL (decl1) = 0;
13498 DECL_INTERFACE_KNOWN (decl1) = 1;
13499 DECL_DEFER_OUTPUT (decl1) = 1;
13500 }
8d08fdba 13501 else
a0a33927
MS
13502 {
13503 /* This is a definition, not a reference.
b7484fbe
MS
13504 So clear DECL_EXTERNAL. */
13505 DECL_EXTERNAL (decl1) = 0;
faae18ab 13506
5566b478
MS
13507 if ((DECL_THIS_INLINE (decl1) || DECL_TEMPLATE_INSTANTIATION (decl1))
13508 && ! DECL_INTERFACE_KNOWN (decl1)
13509 /* Don't try to defer nested functions for now. */
4f1c5b7d 13510 && ! decl_function_context (decl1))
878cd289
MS
13511 DECL_DEFER_OUTPUT (decl1) = 1;
13512 else
893de33c 13513 DECL_INTERFACE_KNOWN (decl1) = 1;
db5ae43f 13514 }
a9aedbc2 13515
b35d4555 13516 if (doing_semantic_analysis_p ())
8d08fdba 13517 {
b35d4555
MM
13518 pushlevel (0);
13519 current_binding_level->parm_flag = 1;
8d08fdba 13520 }
8d08fdba 13521
f30432d7
MS
13522 if (attrs)
13523 cplus_decl_attributes (decl1, NULL_TREE, attrs);
68642fb6 13524
558475f0
MM
13525 if (!building_stmt_tree ())
13526 {
13527 GNU_xref_function (decl1, current_function_parms);
13528 make_function_rtl (decl1);
13529 }
db5ae43f 13530
8d08fdba
MS
13531 /* Promote the value to int before returning it. */
13532 if (C_PROMOTING_INTEGER_TYPE_P (restype))
5566b478
MS
13533 restype = type_promotes_to (restype);
13534
13535 /* If this fcn was already referenced via a block-scope `extern' decl
13536 (or an implicit decl), propagate certain information about the usage. */
13537 if (TREE_ADDRESSABLE (DECL_ASSEMBLER_NAME (decl1)))
13538 TREE_ADDRESSABLE (decl1) = 1;
13539
8d08fdba 13540 if (DECL_RESULT (decl1) == NULL_TREE)
f30432d7
MS
13541 {
13542 DECL_RESULT (decl1)
13543 = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (restype));
91063b51
MM
13544 TREE_READONLY (DECL_RESULT (decl1)) = CP_TYPE_CONST_P (restype);
13545 TREE_THIS_VOLATILE (DECL_RESULT (decl1)) = CP_TYPE_VOLATILE_P (restype);
f30432d7 13546 }
8d08fdba 13547
5566b478
MS
13548 ++function_depth;
13549
f30432d7
MS
13550 if (DESTRUCTOR_NAME_P (DECL_ASSEMBLER_NAME (decl1))
13551 && DECL_LANGUAGE (decl1) == lang_cplusplus)
46e8c075
MM
13552 {
13553 dtor_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
13554 DECL_CONTEXT (dtor_label) = current_function_decl;
13555 }
3dbc07b6
MM
13556 /* Under the old ABI we return `this' from constructors, so we make
13557 ordinary `return' statements in constructors jump to CTOR_LABEL;
13558 from there we return `this'. Under the new ABI, we don't bother
13559 with any of this. By not setting CTOR_LABEL the remainder of the
13560 machinery is automatically disabled. */
13561 else if (!flag_new_abi && DECL_CONSTRUCTOR_P (decl1))
46e8c075
MM
13562 {
13563 ctor_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
13564 DECL_CONTEXT (ctor_label) = current_function_decl;
13565 }
8d08fdba 13566
8d08fdba
MS
13567 return 1;
13568}
13569\f
3e4010c4 13570/* Called after store_parm_decls for a function-try-block. */
6467930b
MS
13571
13572void
13573expand_start_early_try_stmts ()
13574{
6467930b 13575 expand_start_try_stmts ();
f30432d7
MS
13576}
13577
8d08fdba
MS
13578/* Store the parameter declarations into the current function declaration.
13579 This is called after parsing the parameter declarations, before
13580 digesting the body of the function.
13581
13582 Also install to binding contour return value identifier, if any. */
13583
13584void
13585store_parm_decls ()
13586{
13587 register tree fndecl = current_function_decl;
13588 register tree parm;
13589 int parms_have_cleanups = 0;
eb66be0e 13590 tree cleanups = NULL_TREE;
8d08fdba 13591
8d08fdba
MS
13592 /* This is a list of types declared among parms in a prototype. */
13593 tree parmtags = current_function_parm_tags;
13594
13595 /* This is a chain of any other decls that came in among the parm
13596 declarations. If a parm is declared with enum {foo, bar} x;
13597 then CONST_DECLs for foo and bar are put here. */
13598 tree nonparms = NULL_TREE;
13599
8d08fdba 13600 /* Create a binding level for the parms. */
b35d4555
MM
13601 if (!building_stmt_tree ())
13602 expand_start_bindings (2);
8d08fdba 13603
b35d4555 13604 if (current_function_parms)
8d08fdba
MS
13605 {
13606 /* This case is when the function was defined with an ANSI prototype.
13607 The parms already have decls, so we need not do anything here
13608 except record them as in effect
13609 and complain if any redundant old-style parm decls were written. */
13610
b35d4555
MM
13611 tree specparms = current_function_parms;
13612 tree next;
13613
13614 if (doing_semantic_analysis_p ())
13615 {
13616 /* Must clear this because it might contain TYPE_DECLs declared
13617 at class level. */
13618 storedecls (NULL_TREE);
8d08fdba 13619
b35d4555
MM
13620 /* If we're doing semantic analysis, then we'll call pushdecl
13621 for each of these. We must do them in reverse order so that
13622 they end in the correct forward order. */
13623 specparms = nreverse (specparms);
13624 }
5566b478 13625
b35d4555 13626 for (parm = specparms; parm; parm = next)
8d08fdba
MS
13627 {
13628 next = TREE_CHAIN (parm);
13629 if (TREE_CODE (parm) == PARM_DECL)
13630 {
fe1b3b96
MM
13631 tree type = TREE_TYPE (parm);
13632
b35d4555 13633 if (doing_semantic_analysis_p ())
8d08fdba 13634 {
fe1b3b96 13635 tree cleanup;
68642fb6 13636
b35d4555 13637 if (DECL_NAME (parm) == NULL_TREE
fe1b3b96 13638 || TREE_CODE (parm) != VOID_TYPE)
b35d4555
MM
13639 pushdecl (parm);
13640 else
13641 cp_error ("parameter `%D' declared void", parm);
eb66be0e 13642
ff47d094
MM
13643 cleanup = (processing_template_decl
13644 ? NULL_TREE
13645 : maybe_build_cleanup (parm));
68642fb6 13646
fe1b3b96
MM
13647 if (cleanup)
13648 cleanups = tree_cons (parm, cleanup, cleanups);
8d08fdba 13649 }
fe1b3b96 13650 else if (type != error_mark_node
834c6dff 13651 && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
fe1b3b96 13652 parms_have_cleanups = 1;
8d08fdba
MS
13653 }
13654 else
13655 {
13656 /* If we find an enum constant or a type tag,
13657 put it aside for the moment. */
13658 TREE_CHAIN (parm) = NULL_TREE;
13659 nonparms = chainon (nonparms, parm);
13660 }
13661 }
13662
b35d4555
MM
13663 if (doing_semantic_analysis_p ())
13664 {
13665 /* Get the decls in their original chain order
13666 and record in the function. This is all and only the
13667 PARM_DECLs that were pushed into scope by the loop above. */
13668 DECL_ARGUMENTS (fndecl) = getdecls ();
13669 storetags (chainon (parmtags, gettags ()));
b35d4555 13670 }
8d08fdba
MS
13671 }
13672 else
13673 DECL_ARGUMENTS (fndecl) = NULL_TREE;
13674
13675 /* Now store the final chain of decls for the arguments
13676 as the decl-chain of the current lexical scope.
13677 Put the enumerators in as well, at the front so that
13678 DECL_ARGUMENTS is not modified. */
b35d4555
MM
13679 if (doing_semantic_analysis_p ())
13680 storedecls (chainon (nonparms, DECL_ARGUMENTS (fndecl)));
8d08fdba
MS
13681
13682 /* Initialize the RTL code for the function. */
49ad7cfa 13683 DECL_SAVED_INSNS (fndecl) = 0;
558475f0 13684 if (! building_stmt_tree ())
5566b478 13685 expand_function_start (fndecl, parms_have_cleanups);
8d08fdba 13686
eb448459
MS
13687 current_function_parms_stored = 1;
13688
13689 /* If this function is `main', emit a call to `__main'
13690 to run global initializers, etc. */
558475f0 13691 if (DECL_MAIN_P (fndecl) && !building_stmt_tree ())
35680744 13692 expand_main_function ();
eb448459 13693
eb66be0e
MS
13694 /* Now that we have initialized the parms, we can start their
13695 cleanups. We cannot do this before, since expand_decl_cleanup
13696 should not be called before the parm can be used. */
fe1b3b96
MM
13697 while (cleanups)
13698 {
68642fb6 13699 finish_decl_cleanup (TREE_PURPOSE (cleanups),
fe1b3b96
MM
13700 TREE_VALUE (cleanups));
13701 cleanups = TREE_CHAIN (cleanups);
13702 }
eb66be0e 13703
8d08fdba
MS
13704 /* Create a binding contour which can be used to catch
13705 cleanup-generated temporaries. Also, if the return value needs or
13706 has initialization, deal with that now. */
13707 if (parms_have_cleanups)
13708 {
13709 pushlevel (0);
558475f0 13710 if (!building_stmt_tree ())
b35d4555 13711 expand_start_bindings (2);
8d08fdba
MS
13712 }
13713
b35d4555 13714 /* Do the starting of the exception specifications, if we have any. */
68642fb6 13715 if (flag_exceptions && !processing_template_decl
1660cb3a 13716 && flag_enforce_eh_specs
68642fb6 13717 && building_stmt_tree ()
b35d4555
MM
13718 && TYPE_RAISES_EXCEPTIONS (TREE_TYPE (current_function_decl)))
13719 current_eh_spec_try_block = expand_start_eh_spec ();
8d08fdba
MS
13720}
13721
13722/* Bind a name and initialization to the return value of
13723 the current function. */
e92cc029 13724
8d08fdba 13725void
558475f0
MM
13726store_return_init (decl)
13727 tree decl;
8d08fdba 13728{
558475f0
MM
13729 /* If this named return value comes in a register, put it in a
13730 pseudo-register. */
13731 if (DECL_REGISTER (decl))
8d08fdba 13732 {
558475f0 13733 original_result_rtx = DECL_RTL (decl);
f0ad3f46
MM
13734 /* Note that the mode of the old DECL_RTL may be wider than the
13735 mode of DECL_RESULT, depending on the calling conventions for
13736 the processor. For example, on the Alpha, a 32-bit integer
13737 is returned in a DImode register -- the DECL_RESULT has
13738 SImode but the DECL_RTL for the DECL_RESULT has DImode. So,
13739 here, we use the mode the back-end has already assigned for
13740 the return value. */
13741 DECL_RTL (decl) = gen_reg_rtx (GET_MODE (original_result_rtx));
8d08fdba
MS
13742 }
13743}
13744
8d08fdba 13745\f
59026e79
MM
13746/* We have finished doing semantic analysis on DECL, but have not yet
13747 generated RTL for its body. Save away our current state, so that
13748 when we want to generate RTL later we know what to do. */
13749
13750static void
13751save_function_data (decl)
13752 tree decl;
13753{
13754 struct language_function *f;
13755
13756 /* Save the language-specific per-function data so that we can
13757 get it back when we really expand this function. */
13758 my_friendly_assert (!DECL_PENDING_INLINE_P (decl),
13759 19990908);
68642fb6 13760
59026e79 13761 /* Make a copy. */
68642fb6 13762 f = ((struct language_function *)
59026e79
MM
13763 xmalloc (sizeof (struct language_function)));
13764 bcopy ((char *) cp_function_chain, (char *) f,
13765 sizeof (struct language_function));
13766 DECL_SAVED_FUNCTION_DATA (decl) = f;
13767
13768 /* Clear out the bits we don't need. */
13769 f->x_base_init_list = NULL_TREE;
13770 f->x_member_init_list = NULL_TREE;
6f80451c
MM
13771 f->x_stmt_tree.x_last_stmt = NULL_TREE;
13772 f->x_stmt_tree.x_last_expr_type = NULL_TREE;
59026e79
MM
13773 f->x_result_rtx = NULL_RTX;
13774 f->x_named_label_uses = NULL;
13775 f->bindings = NULL;
13776
13777 /* When we get back here again, we will be expanding. */
13778 f->x_expanding_p = 1;
914653a2
MM
13779
13780 /* If we've already decided that we cannot inline this function, we
13781 must remember that fact when we actually go to expand the
13782 function. */
13783 f->cannot_inline = current_function_cannot_inline;
59026e79
MM
13784}
13785
efee38a9
MM
13786/* At the end of every constructor we generate to code to return
13787 `this'. Do that now. */
13788
13789static void
13790finish_constructor_body ()
13791{
13792 /* Any return from a constructor will end up here. */
3dbc07b6
MM
13793 if (ctor_label)
13794 add_tree (build_min_nt (LABEL_STMT, ctor_label));
efee38a9
MM
13795
13796 /* Clear CTOR_LABEL so that finish_return_stmt knows to really
13797 generate the return, rather than a goto to CTOR_LABEL. */
13798 ctor_label = NULL_TREE;
13799 /* In check_return_expr we translate an empty return from a
13800 constructor to a return of `this'. */
13801 finish_return_stmt (NULL_TREE);
46e8c075
MM
13802 /* Mark the end of the constructor. */
13803 add_tree (build_min_nt (CTOR_STMT));
efee38a9
MM
13804}
13805
9bfadf57
MM
13806/* At the end of every destructor we generate code to restore virtual
13807 function tables to the values desired by base classes and to call
efee38a9 13808 to base class destructors. Do that now. */
9bfadf57
MM
13809
13810static void
13811finish_destructor_body ()
13812{
13813 tree compound_stmt;
13814 tree in_charge;
13815 tree virtual_size;
13816 tree exprstmt;
13817
13818 /* Create a block to contain all the extra code. */
13819 compound_stmt = begin_compound_stmt (/*has_no_scope=*/0);
13820
efee38a9
MM
13821 /* Any return from a destructor will end up here. */
13822 add_tree (build_min_nt (LABEL_STMT, dtor_label));
13823
9bfadf57
MM
13824 /* Generate the code to call destructor on base class. If this
13825 destructor belongs to a class with virtual functions, then set
13826 the virtual function table pointer to represent the type of our
13827 base class. */
13828
13829 /* This side-effect makes call to `build_delete' generate the code
13830 we have to have at the end of this destructor. `build_delete'
13831 will set the flag again. */
13832 TYPE_HAS_DESTRUCTOR (current_class_type) = 0;
13833
13834 /* These are two cases where we cannot delegate deletion. */
13835 if (TYPE_USES_VIRTUAL_BASECLASSES (current_class_type)
13836 || TYPE_GETS_REG_DELETE (current_class_type))
13837 in_charge = integer_zero_node;
13838 else
13839 in_charge = current_in_charge_parm;
13840
13841 exprstmt = build_delete (current_class_type,
68642fb6 13842 current_class_ref,
9bfadf57 13843 in_charge,
68642fb6 13844 LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR|LOOKUP_NORMAL,
9bfadf57
MM
13845 0);
13846
13847 if (exprstmt != error_mark_node
13848 && (TREE_CODE (exprstmt) != NOP_EXPR
13849 || TREE_OPERAND (exprstmt, 0) != integer_zero_node
13850 || TYPE_USES_VIRTUAL_BASECLASSES (current_class_type)))
13851 {
9bfadf57
MM
13852 if (exprstmt != void_zero_node)
13853 /* Don't call `expand_expr_stmt' if we're not going to do
13854 anything, since -Wall will give a diagnostic. */
13855 finish_expr_stmt (exprstmt);
13856
efee38a9 13857 /* Run destructors for all virtual baseclasses. */
9bfadf57
MM
13858 if (TYPE_USES_VIRTUAL_BASECLASSES (current_class_type))
13859 {
13860 tree vbases = nreverse (copy_list (CLASSTYPE_VBASECLASSES (current_class_type)));
13861 tree if_stmt = begin_if_stmt ();
13862 finish_if_stmt_cond (build (BIT_AND_EXPR, integer_type_node,
68642fb6 13863 current_in_charge_parm,
9bfadf57
MM
13864 integer_two_node),
13865 if_stmt);
13866
13867 while (vbases)
13868 {
834c6dff 13869 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (BINFO_TYPE (vbases)))
9bfadf57
MM
13870 {
13871 tree vb = get_vbase
13872 (BINFO_TYPE (vbases),
13873 TYPE_BINFO (current_class_type));
13874 finish_expr_stmt
13875 (build_scoped_method_call
13876 (current_class_ref, vb, dtor_identifier,
051e6fd7 13877 build_tree_list (NULL_TREE, integer_zero_node)));
9bfadf57
MM
13878 }
13879 vbases = TREE_CHAIN (vbases);
13880 }
13881
13882 finish_then_clause (if_stmt);
13883 finish_if_stmt ();
13884 }
13885 }
68642fb6 13886
9bfadf57
MM
13887 virtual_size = c_sizeof (current_class_type);
13888
13889 /* At the end, call delete if that's what's requested. */
68642fb6 13890
9bfadf57
MM
13891 /* FDIS sez: At the point of definition of a virtual destructor
13892 (including an implicit definition), non-placement operator delete
13893 shall be looked up in the scope of the destructor's class and if
13894 found shall be accessible and unambiguous.
68642fb6 13895
9bfadf57
MM
13896 This is somewhat unclear, but I take it to mean that if the class
13897 only defines placement deletes we don't do anything here. So we
13898 pass LOOKUP_SPECULATIVELY; delete_sanity will complain for us if
13899 they ever try to delete one of these. */
13900 if (TYPE_GETS_REG_DELETE (current_class_type)
13901 || TYPE_USES_VIRTUAL_BASECLASSES (current_class_type))
13902 {
13903 tree if_stmt;
13904
13905 exprstmt = build_op_delete_call
13906 (DELETE_EXPR, current_class_ptr, virtual_size,
13907 LOOKUP_NORMAL | LOOKUP_SPECULATIVELY, NULL_TREE);
13908
13909 if_stmt = begin_if_stmt ();
13910 finish_if_stmt_cond (build (BIT_AND_EXPR, integer_type_node,
13911 current_in_charge_parm,
13912 integer_one_node),
13913 if_stmt);
13914 finish_expr_stmt (exprstmt);
13915 finish_then_clause (if_stmt);
13916 finish_if_stmt ();
13917 }
13918
13919 /* Close the block we started above. */
13920 finish_compound_stmt (/*has_no_scope=*/0, compound_stmt);
13921}
13922
8d08fdba
MS
13923/* Finish up a function declaration and compile that function
13924 all the way to assembler language output. The free the storage
13925 for the function definition.
13926
68642fb6
UD
13927 FLAGS is a bitwise or of the following values:
13928 1 - CALL_POPLEVEL
f181d4ae
MM
13929 An extra call to poplevel (and expand_end_bindings) must be
13930 made to take care of the binding contour for the base
13931 initializers. This is only relevant for constructors.
13932 2 - INCLASS_INLINE
13933 We just finished processing the body of an in-class inline
13934 function definition. (This processing will have taken place
87e3dbc9 13935 after the class definition is complete.) */
8d08fdba 13936
4d6abc1c 13937tree
0acf7199 13938finish_function (flags)
f181d4ae 13939 int flags;
8d08fdba
MS
13940{
13941 register tree fndecl = current_function_decl;
13942 tree fntype, ctype = NULL_TREE;
8d08fdba
MS
13943 /* Label to use if this function is supposed to return a value. */
13944 tree no_return_label = NULL_TREE;
f181d4ae
MM
13945 int call_poplevel = (flags & 1) != 0;
13946 int inclass_inline = (flags & 2) != 0;
558475f0 13947 int expand_p;
87e3dbc9 13948 int nested;
0acf7199 13949 int current_line = lineno;
8d08fdba
MS
13950
13951 /* When we get some parse errors, we can end up without a
13952 current_function_decl, so cope. */
13953 if (fndecl == NULL_TREE)
4d6abc1c 13954 return error_mark_node;
8d08fdba 13955
87e3dbc9 13956 nested = function_depth > 1;
8d08fdba
MS
13957 fntype = TREE_TYPE (fndecl);
13958
9bfadf57
MM
13959 /* TREE_READONLY (fndecl) = 1;
13960 This caused &foo to be of type ptr-to-const-function
13961 which then got a warning when stored in a ptr-to-function variable. */
8d08fdba
MS
13962
13963 /* This happens on strange parse errors. */
13964 if (! current_function_parms_stored)
13965 {
13966 call_poplevel = 0;
13967 store_parm_decls ();
13968 }
13969
db9b2174
MM
13970 /* For a cloned function, we've already got all the code we need;
13971 there's no need to add any extra bits. */
13972 if (building_stmt_tree () && DECL_CLONED_FUNCTION_P (fndecl))
13973 ;
13974 else if (building_stmt_tree ())
8d08fdba 13975 {
efee38a9
MM
13976 if (DECL_CONSTRUCTOR_P (fndecl))
13977 {
13978 finish_constructor_body ();
13979 if (call_poplevel)
13980 do_poplevel ();
13981 }
9bfadf57
MM
13982 else if (DECL_DESTRUCTOR_P (fndecl) && !processing_template_decl)
13983 finish_destructor_body ();
efee38a9
MM
13984 else if (DECL_MAIN_P (fndecl))
13985 {
13986 /* Make it so that `main' always returns 0 by default. */
13987#ifdef VMS
13988 finish_return_stmt (integer_one_node);
13989#else
13990 finish_return_stmt (integer_zero_node);
13991#endif
13992 }
87e3dbc9 13993
b35d4555
MM
13994 /* Finish dealing with exception specifiers. */
13995 if (flag_exceptions && !processing_template_decl
1660cb3a 13996 && flag_enforce_eh_specs
b35d4555 13997 && TYPE_RAISES_EXCEPTIONS (TREE_TYPE (current_function_decl)))
68642fb6 13998 expand_end_eh_spec (TYPE_RAISES_EXCEPTIONS
b35d4555
MM
13999 (TREE_TYPE (current_function_decl)),
14000 current_eh_spec_try_block);
5566b478
MS
14001 }
14002 else
14003 {
c95cd22e 14004#if 0
5566b478 14005 if (write_symbols != NO_DEBUG /*&& TREE_CODE (fntype) != METHOD_TYPE*/)
8d08fdba 14006 {
ae673f14
JM
14007 /* Keep this code around in case we later want to control debug info
14008 based on whether a type is "used". (jason 1999-11-11) */
14009
c95cd22e
JM
14010 tree ttype = target_type (fntype);
14011 tree parmdecl;
14012
8d08fdba
MS
14013 if (IS_AGGR_TYPE (ttype))
14014 /* Let debugger know it should output info for this type. */
14015 note_debug_info_needed (ttype);
5566b478
MS
14016
14017 for (parmdecl = DECL_ARGUMENTS (fndecl); parmdecl; parmdecl = TREE_CHAIN (parmdecl))
14018 {
14019 ttype = target_type (TREE_TYPE (parmdecl));
14020 if (IS_AGGR_TYPE (ttype))
14021 /* Let debugger know it should output info for this type. */
14022 note_debug_info_needed (ttype);
14023 }
8d08fdba 14024 }
c95cd22e 14025#endif
8d08fdba 14026
5566b478
MS
14027 /* Clean house because we will need to reorder insns here. */
14028 do_pending_stack_adjust ();
8d08fdba 14029
5566b478 14030 if (dtor_label)
9bfadf57 14031 ;
b35d4555 14032 else if (DECL_CONSTRUCTOR_P (fndecl))
8d08fdba 14033 {
8d08fdba 14034 if (call_poplevel)
b35d4555 14035 do_poplevel ();
8d08fdba 14036 }
5566b478 14037 else if (return_label != NULL_RTX
9bfadf57
MM
14038 && flag_this_is_variable <= 0
14039 && current_function_return_value == NULL_TREE
14040 && ! DECL_NAME (DECL_RESULT (current_function_decl)))
5566b478 14041 no_return_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
8d08fdba 14042
eb448459
MS
14043 if (flag_exceptions)
14044 expand_exception_blocks ();
14045
5566b478
MS
14046 /* If this function is supposed to return a value, ensure that
14047 we do not fall into the cleanups by mistake. The end of our
14048 function will look like this:
68642fb6 14049
5566b478
MS
14050 user code (may have return stmt somewhere)
14051 goto no_return_label
14052 cleanup_label:
14053 cleanups
14054 goto return_label
14055 no_return_label:
14056 NOTE_INSN_FUNCTION_END
14057 return_label:
14058 things for return
68642fb6 14059
5566b478
MS
14060 If the user omits a return stmt in the USER CODE section, we
14061 will have a control path which reaches NOTE_INSN_FUNCTION_END.
14062 Otherwise, we won't. */
14063 if (no_return_label)
8d08fdba 14064 {
5566b478
MS
14065 DECL_CONTEXT (no_return_label) = fndecl;
14066 DECL_INITIAL (no_return_label) = error_mark_node;
14067 DECL_SOURCE_FILE (no_return_label) = input_filename;
0acf7199 14068 DECL_SOURCE_LINE (no_return_label) = current_line;
5566b478 14069 expand_goto (no_return_label);
8d08fdba
MS
14070 }
14071
5566b478 14072 if (cleanup_label)
a9aedbc2 14073 {
2c73f9f5 14074 /* Remove the binding contour which is used
5566b478
MS
14075 to catch cleanup-generated temporaries. */
14076 expand_end_bindings (0, 0, 0);
14077 poplevel (0, 0, 0);
8d08fdba 14078
eb448459
MS
14079 /* Emit label at beginning of cleanup code for parameters. */
14080 emit_label (cleanup_label);
14081 }
b7484fbe 14082
a8f73d4b
MM
14083 /* Get return value into register if that's where it's supposed
14084 to be. */
5566b478
MS
14085 if (original_result_rtx)
14086 fixup_result_decl (DECL_RESULT (fndecl), original_result_rtx);
8d08fdba 14087
5566b478
MS
14088 /* Finish building code that will trigger warnings if users forget
14089 to make their functions return values. */
14090 if (no_return_label || cleanup_label)
14091 emit_jump (return_label);
14092 if (no_return_label)
8d08fdba 14093 {
5566b478
MS
14094 /* We don't need to call `expand_*_return' here because we
14095 don't need any cleanups here--this path of code is only
14096 for error checking purposes. */
14097 expand_label (no_return_label);
8d08fdba
MS
14098 }
14099
078a76c8
MM
14100 /* We hard-wired immediate_size_expand to zero in
14101 start_function. Expand_function_end will decrement this
14102 variable. So, we set the variable to one here, so that after
14103 the decrement it will remain zero. */
4ca7ba86 14104 immediate_size_expand = 1;
078a76c8 14105
5566b478 14106 /* Generate rtl for function exit. */
0acf7199 14107 expand_function_end (input_filename, current_line, 1);
8d08fdba 14108 }
558475f0
MM
14109
14110 /* We have to save this value here in case
14111 maybe_end_member_template_processing decides to pop all the
14112 template parameters. */
14113 expand_p = !building_stmt_tree ();
68642fb6 14114
558475f0
MM
14115 /* If we're saving up tree structure, tie off the function now. */
14116 if (!expand_p)
6f80451c 14117 finish_stmt_tree (&DECL_SAVED_TREE (fndecl));
8d2733ca 14118
8d08fdba
MS
14119 /* This must come after expand_function_end because cleanups might
14120 have declarations (from inline functions) that need to go into
14121 this function's blocks. */
b35d4555
MM
14122 if (doing_semantic_analysis_p ())
14123 {
14124 if (current_binding_level->parm_flag != 1)
14125 my_friendly_abort (122);
14126 poplevel (1, 0, 1);
14127 }
8d08fdba 14128
a8f73d4b 14129 /* Remember that we were in class scope. */
db5ae43f 14130 if (current_class_name)
a8f73d4b 14131 ctype = current_class_type;
db5ae43f 14132
1caa11d3
MM
14133 /* Must mark the RESULT_DECL as being in this function. */
14134 DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
14135
14136 /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
14137 to the FUNCTION_DECL node itself. */
14138 BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
14139
59026e79
MM
14140 /* Save away current state, if appropriate. */
14141 if (!expanding_p && !processing_template_decl)
14142 save_function_data (fndecl);
14143
95fabfd3
MM
14144 /* If this function calls `setjmp' it cannot be inlined. When
14145 `longjmp' is called it is not guaranteed to restore the value of
14146 local variables that have been modified since the call to
14147 `setjmp'. So, if were to inline this function into some caller
14148 `c', then when we `longjmp', we might not restore all variables
14149 in `c'. (It might seem, at first blush, that there's no way for
14150 this function to modify local variables in `c', but their
14151 addresses may have been stored somewhere accessible to this
14152 function.) */
14153 if (!expanding_p && !processing_template_decl && calls_setjmp_p (fndecl))
14154 DECL_UNINLINABLE (fndecl) = 1;
14155
558475f0 14156 if (expand_p)
5566b478 14157 {
a8f73d4b
MM
14158 int returns_null;
14159 int returns_value;
75650646 14160
5566b478
MS
14161 /* So we can tell if jump_optimize sets it to 1. */
14162 can_reach_end = 0;
8d08fdba 14163
a8f73d4b
MM
14164 /* Before we call rest_of_compilation (which will pop the
14165 CURRENT_FUNCTION), we must save these values. */
14166 returns_null = current_function_returns_null;
14167 returns_value = current_function_returns_value;
14168
87e3dbc9
MM
14169 /* If this is a nested function (like a template instantiation
14170 that we're compiling in the midst of compiling something
14171 else), push a new GC context. That will keep local variables
14172 on the stack from being collected while we're doing the
14173 compilation of this function. */
14174 if (function_depth > 1)
14175 ggc_push_context ();
14176
6633d636
MS
14177 /* Run the optimizers and output the assembler code for this
14178 function. */
6633d636
MS
14179 if (DECL_ARTIFICIAL (fndecl))
14180 {
14181 /* Do we really *want* to inline this synthesized method? */
14182
14183 int save_fif = flag_inline_functions;
14184 flag_inline_functions = 1;
14185
14186 /* Turn off DECL_INLINE for the moment so function_cannot_inline_p
14187 will check our size. */
14188 DECL_INLINE (fndecl) = 0;
14189
14190 rest_of_compilation (fndecl);
14191 flag_inline_functions = save_fif;
14192 }
14193 else
14194 rest_of_compilation (fndecl);
8d08fdba 14195
87e3dbc9
MM
14196 /* Undo the call to ggc_push_context above. */
14197 if (function_depth > 1)
14198 ggc_pop_context ();
14199
5566b478
MS
14200 if (DECL_SAVED_INSNS (fndecl) && ! TREE_ASM_WRITTEN (fndecl))
14201 {
14202 /* Set DECL_EXTERNAL so that assemble_external will be called as
14203 necessary. We'll clear it again in finish_file. */
14204 if (! DECL_EXTERNAL (fndecl))
14205 DECL_NOT_REALLY_EXTERN (fndecl) = 1;
14206 DECL_EXTERNAL (fndecl) = 1;
56e770bf 14207 defer_fn (fndecl);
5566b478 14208 }
8926095f 14209
ae673f14
JM
14210#if 0
14211 /* Keep this code around in case we later want to control debug info
14212 based on whether a type is "used". (jason 1999-11-11) */
14213
d2e5ee5c
MS
14214 if (ctype && TREE_ASM_WRITTEN (fndecl))
14215 note_debug_info_needed (ctype);
ae673f14 14216#endif
d2e5ee5c 14217
a8f73d4b 14218 returns_null |= can_reach_end;
8d08fdba 14219
5566b478
MS
14220 /* Since we don't normally go through c_expand_return for constructors,
14221 this normally gets the wrong value.
14222 Also, named return values have their return codes emitted after
14223 NOTE_INSN_FUNCTION_END, confusing jump.c. */
14224 if (DECL_CONSTRUCTOR_P (fndecl)
14225 || DECL_NAME (DECL_RESULT (fndecl)) != NULL_TREE)
a8f73d4b 14226 returns_null = 0;
8d08fdba 14227
a8f73d4b 14228 if (TREE_THIS_VOLATILE (fndecl) && returns_null)
8251199e 14229 cp_warning ("`noreturn' function `%D' does return", fndecl);
5566b478 14230 else if ((warn_return_type || pedantic)
a8f73d4b 14231 && returns_null
a1774733 14232 && TREE_CODE (TREE_TYPE (fntype)) != VOID_TYPE)
5566b478
MS
14233 {
14234 /* If this function returns non-void and control can drop through,
14235 complain. */
8251199e 14236 cp_warning ("control reaches end of non-void function `%D'", fndecl);
5566b478
MS
14237 }
14238 /* With just -W, complain only if function returns both with
14239 and without a value. */
a8f73d4b 14240 else if (extra_warnings && returns_value && returns_null)
8251199e 14241 warning ("this function may return with or without a value");
8d08fdba 14242 }
a8f73d4b
MM
14243 else
14244 {
f7faca78 14245 /* Clear out memory we no longer need. */
01d939e8 14246 free_after_parsing (cfun);
a8f73d4b 14247 /* Since we never call rest_of_compilation, we never clear
01d939e8
BS
14248 CFUN. Do so explicitly. */
14249 free_after_compilation (cfun);
14250 cfun = NULL;
a8f73d4b
MM
14251 }
14252
14253 /* If this is a in-class inline definition, we may have to pop the
14254 bindings for the template parameters that we added in
14255 maybe_begin_member_template_processing when start_function was
14256 called. */
14257 if (inclass_inline)
14258 maybe_end_member_template_processing ();
14259
14260 /* Leave the scope of the class. */
14261 if (ctype)
14262 pop_nested_class ();
5566b478
MS
14263
14264 --function_depth;
8d08fdba 14265
d9b2d9da
MM
14266 if (!DECL_SAVED_INSNS (fndecl) && !DECL_SAVED_FUNCTION_DATA (fndecl)
14267 && !(flag_inline_trees && DECL_INLINE (fndecl)))
8d08fdba 14268 {
d2e5ee5c
MS
14269 tree t;
14270
8d08fdba
MS
14271 /* Stop pointing to the local nodes about to be freed. */
14272 /* But DECL_INITIAL must remain nonzero so we know this
14273 was an actual function definition. */
14274 DECL_INITIAL (fndecl) = error_mark_node;
d2e5ee5c 14275 for (t = DECL_ARGUMENTS (fndecl); t; t = TREE_CHAIN (t))
de22184b 14276 DECL_RTL (t) = DECL_INCOMING_RTL (t) = NULL_RTX;
8d08fdba
MS
14277 }
14278
e1cd6e56 14279 if (DECL_STATIC_CONSTRUCTOR (fndecl))
e1b3e07d 14280 static_ctors = tree_cons (NULL_TREE, fndecl, static_ctors);
e1cd6e56 14281 if (DECL_STATIC_DESTRUCTOR (fndecl))
e1b3e07d 14282 static_dtors = tree_cons (NULL_TREE, fndecl, static_dtors);
e1cd6e56 14283
4d6abc1c 14284 /* Clean up. */
28cbf42c
MS
14285 if (! nested)
14286 {
14287 /* Let the error reporting routines know that we're outside a
14288 function. For a nested function, this value is used in
14289 pop_cp_function_context and then reset via pop_function_context. */
14290 current_function_decl = NULL_TREE;
a09ba2e0
MM
14291 /* We don't really care about obstacks, but the middle-end
14292 sometimes cares on what obstck things are located. */
14293 permanent_allocation (1);
28cbf42c 14294 }
4d6abc1c
MM
14295
14296 return fndecl;
8d08fdba
MS
14297}
14298\f
14299/* Create the FUNCTION_DECL for a function definition.
8d08fdba
MS
14300 DECLSPECS and DECLARATOR are the parts of the declaration;
14301 they describe the return type and the name of the function,
14302 but twisted together in a fashion that parallels the syntax of C.
14303
14304 This function creates a binding context for the function body
14305 as well as setting up the FUNCTION_DECL in current_function_decl.
14306
14307 Returns a FUNCTION_DECL on success.
14308
14309 If the DECLARATOR is not suitable for a function (it defines a datum
14310 instead), we return 0, which tells yyparse to report a parse error.
14311
14312 May return void_type_node indicating that this method is actually
14313 a friend. See grokfield for more details.
14314
14315 Came here with a `.pushlevel' .
14316
14317 DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
14318 CHANGES TO CODE IN `grokfield'. */
e92cc029 14319
8d08fdba 14320tree
acf82af2
JM
14321start_method (declspecs, declarator, attrlist)
14322 tree declarator, declspecs, attrlist;
8d08fdba 14323{
c11b6f21 14324 tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
acf82af2 14325 attrlist);
8d08fdba
MS
14326
14327 /* Something too ugly to handle. */
14328 if (fndecl == NULL_TREE)
14329 return NULL_TREE;
14330
14331 /* Pass friends other than inline friend functions back. */
a1774733 14332 if (fndecl == void_type_node)
8d08fdba
MS
14333 return fndecl;
14334
14335 if (TREE_CODE (fndecl) != FUNCTION_DECL)
14336 /* Not a function, tell parser to report parse error. */
14337 return NULL_TREE;
14338
8d08fdba
MS
14339 if (DECL_IN_AGGR_P (fndecl))
14340 {
14341 if (IDENTIFIER_ERROR_LOCUS (DECL_ASSEMBLER_NAME (fndecl)) != current_class_type)
14342 {
68642fb6 14343 if (DECL_CONTEXT (fndecl)
2c73f9f5 14344 && TREE_CODE( DECL_CONTEXT (fndecl)) != NAMESPACE_DECL)
8251199e
JM
14345 cp_error ("`%D' is already defined in class %s", fndecl,
14346 TYPE_NAME_STRING (DECL_CONTEXT (fndecl)));
8d08fdba
MS
14347 }
14348 return void_type_node;
14349 }
14350
f3400fe2
JM
14351 check_template_shadow (fndecl);
14352
faae18ab
MS
14353 DECL_THIS_INLINE (fndecl) = 1;
14354
8926095f 14355 if (flag_default_inline)
8d08fdba
MS
14356 DECL_INLINE (fndecl) = 1;
14357
36a117a5
MM
14358 /* We process method specializations in finish_struct_1. */
14359 if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
3ac3d9ea 14360 fndecl = push_template_decl (fndecl);
a0a33927 14361
8d08fdba
MS
14362 if (! DECL_FRIEND_P (fndecl))
14363 {
8d08fdba
MS
14364 if (TREE_CHAIN (fndecl))
14365 {
14366 fndecl = copy_node (fndecl);
14367 TREE_CHAIN (fndecl) = NULL_TREE;
14368 }
14369
14370 if (DECL_CONSTRUCTOR_P (fndecl))
a0a33927
MS
14371 {
14372 if (! grok_ctor_properties (current_class_type, fndecl))
14373 return void_type_node;
14374 }
8d08fdba
MS
14375 else if (IDENTIFIER_OPNAME_P (DECL_NAME (fndecl)))
14376 grok_op_properties (fndecl, DECL_VIRTUAL_P (fndecl), 0);
14377 }
14378
cd9f6678 14379 cp_finish_decl (fndecl, NULL_TREE, NULL_TREE, 0);
8d08fdba
MS
14380
14381 /* Make a place for the parms */
14382 pushlevel (0);
14383 current_binding_level->parm_flag = 1;
68642fb6 14384
8d08fdba
MS
14385 DECL_IN_AGGR_P (fndecl) = 1;
14386 return fndecl;
14387}
14388
14389/* Go through the motions of finishing a function definition.
14390 We don't compile this method until after the whole class has
14391 been processed.
14392
14393 FINISH_METHOD must return something that looks as though it
14394 came from GROKFIELD (since we are defining a method, after all).
14395
14396 This is called after parsing the body of the function definition.
14397 STMTS is the chain of statements that makes up the function body.
14398
14399 DECL is the ..._DECL that `start_method' provided. */
14400
14401tree
14402finish_method (decl)
14403 tree decl;
14404{
14405 register tree fndecl = decl;
14406 tree old_initial;
8d08fdba
MS
14407
14408 register tree link;
14409
a1774733 14410 if (decl == void_type_node)
8d08fdba
MS
14411 return decl;
14412
14413 old_initial = DECL_INITIAL (fndecl);
14414
14415 /* Undo the level for the parms (from start_method).
14416 This is like poplevel, but it causes nothing to be
14417 saved. Saving information here confuses symbol-table
14418 output routines. Besides, this information will
14419 be correctly output when this method is actually
14420 compiled. */
14421
14422 /* Clear out the meanings of the local variables of this level;
14423 also record in each decl which block it belongs to. */
14424
14425 for (link = current_binding_level->names; link; link = TREE_CHAIN (link))
14426 {
14427 if (DECL_NAME (link) != NULL_TREE)
d8f8dca1 14428 pop_binding (DECL_NAME (link), link);
8d08fdba
MS
14429 my_friendly_assert (TREE_CODE (link) != FUNCTION_DECL, 163);
14430 DECL_CONTEXT (link) = NULL_TREE;
14431 }
14432
8d08fdba
MS
14433 GNU_xref_end_scope ((HOST_WIDE_INT) current_binding_level,
14434 (HOST_WIDE_INT) current_binding_level->level_chain,
14435 current_binding_level->parm_flag,
5566b478 14436 current_binding_level->keep);
8d08fdba
MS
14437
14438 poplevel (0, 0, 0);
14439
14440 DECL_INITIAL (fndecl) = old_initial;
14441
14442 /* We used to check if the context of FNDECL was different from
14443 current_class_type as another way to get inside here. This didn't work
14444 for String.cc in libg++. */
14445 if (DECL_FRIEND_P (fndecl))
14446 {
14447 CLASSTYPE_INLINE_FRIENDS (current_class_type)
14448 = tree_cons (NULL_TREE, fndecl, CLASSTYPE_INLINE_FRIENDS (current_class_type));
14449 decl = void_type_node;
14450 }
14451
14452 return decl;
14453}
14454\f
14455/* Called when a new struct TYPE is defined.
14456 If this structure or union completes the type of any previous
14457 variable declaration, lay it out and output its rtl. */
14458
14459void
14460hack_incomplete_structures (type)
14461 tree type;
14462{
f30432d7 14463 tree *list;
70adf8a9 14464 struct binding_level *level;
8d08fdba
MS
14465
14466 if (!type) /* Don't do this for class templates. */
14467 return;
14468
70adf8a9
JM
14469 if (namespace_bindings_p ())
14470 {
14471 level = 0;
14472 list = &namespace_scope_incomplete;
14473 }
14474 else
14475 {
14476 level = innermost_nonclass_level ();
14477 list = &level->incomplete;
14478 }
14479
14480 while (1)
14481 {
14482 while (*list)
14483 {
14484 tree decl = TREE_VALUE (*list);
14485 if ((decl && TREE_TYPE (decl) == type)
14486 || (TREE_TYPE (decl)
14487 && TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
14488 && TREE_TYPE (TREE_TYPE (decl)) == type))
f30432d7 14489 {
70adf8a9
JM
14490 int toplevel = toplevel_bindings_p ();
14491 if (TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
14492 && TREE_TYPE (TREE_TYPE (decl)) == type)
14493 layout_type (TREE_TYPE (decl));
14494 layout_decl (decl, 0);
14495 rest_of_decl_compilation (decl, NULL_PTR, toplevel, 0);
14496 if (! toplevel)
14497 {
14498 tree cleanup;
14499 expand_decl (decl);
14500 cleanup = maybe_build_cleanup (decl);
14501 expand_decl_init (decl);
14502 if (! expand_decl_cleanup (decl, cleanup))
14503 cp_error ("parser lost in parsing declaration of `%D'",
14504 decl);
14505 }
14506 *list = TREE_CHAIN (*list);
f30432d7 14507 }
70adf8a9
JM
14508 else
14509 list = &TREE_CHAIN (*list);
14510 }
14511
14512 /* Keep looking through artificial binding levels generated
14513 for local variables. */
14514 if (level && level->keep == 2)
14515 {
14516 level = level->level_chain;
14517 list = &level->incomplete;
f30432d7
MS
14518 }
14519 else
70adf8a9 14520 break;
f30432d7 14521 }
8d08fdba
MS
14522}
14523
8d08fdba 14524/* If DECL is of a type which needs a cleanup, build that cleanup here.
d43829f9 14525 See build_delete for information about AUTO_DELETE. */
e92cc029 14526
c73964b2
MS
14527static tree
14528maybe_build_cleanup_1 (decl, auto_delete)
14529 tree decl, auto_delete;
8d08fdba
MS
14530{
14531 tree type = TREE_TYPE (decl);
834c6dff 14532 if (type != error_mark_node && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
8d08fdba 14533 {
80048418 14534 int flags = LOOKUP_NORMAL|LOOKUP_DESTRUCTOR;
8d08fdba 14535 tree rval;
8d08fdba 14536
8d08fdba
MS
14537 if (TREE_CODE (type) == ARRAY_TYPE)
14538 rval = decl;
14539 else
14540 {
14541 mark_addressable (decl);
14542 rval = build_unary_op (ADDR_EXPR, decl, 0);
14543 }
14544
14545 /* Optimize for space over speed here. */
14546 if (! TYPE_USES_VIRTUAL_BASECLASSES (type)
14547 || flag_expensive_optimizations)
14548 flags |= LOOKUP_NONVIRTUAL;
14549
c73964b2 14550 rval = build_delete (TREE_TYPE (rval), rval, auto_delete, flags, 0);
8d08fdba
MS
14551
14552 if (TYPE_USES_VIRTUAL_BASECLASSES (type)
14553 && ! TYPE_HAS_DESTRUCTOR (type))
e1b3e07d 14554 rval = build_compound_expr (tree_cons (NULL_TREE, rval,
051e6fd7 14555 build_tree_list (NULL_TREE, build_vbase_delete (type, decl))));
8d08fdba 14556
8d08fdba
MS
14557 return rval;
14558 }
14559 return 0;
14560}
c73964b2
MS
14561
14562/* If DECL is of a type which needs a cleanup, build that cleanup
14563 here. The cleanup does free the storage with a call to delete. */
14564
14565tree
14566maybe_build_cleanup_and_delete (decl)
14567 tree decl;
14568{
14569 return maybe_build_cleanup_1 (decl, integer_three_node);
14570}
14571
14572/* If DECL is of a type which needs a cleanup, build that cleanup
14573 here. The cleanup does not free the storage with a call a delete. */
14574
14575tree
14576maybe_build_cleanup (decl)
14577 tree decl;
14578{
14579 return maybe_build_cleanup_1 (decl, integer_two_node);
14580}
8d08fdba
MS
14581\f
14582/* Expand a C++ expression at the statement level.
14583 This is needed to ferret out nodes which have UNKNOWN_TYPE.
14584 The C++ type checker should get all of these out when
14585 expressions are combined with other, type-providing, expressions,
14586 leaving only orphan expressions, such as:
14587
e92cc029 14588 &class::bar; / / takes its address, but does nothing with it. */
8d08fdba 14589
8d08fdba
MS
14590void
14591cplus_expand_expr_stmt (exp)
14592 tree exp;
14593{
63c68bb7 14594#if 0
66543169
NS
14595 /* We should do this eventually, but right now this causes regex.o from
14596 libg++ to miscompile, and tString to core dump. */
14597 exp = build1 (CLEANUP_POINT_EXPR, TREE_TYPE (exp), exp);
63c68bb7 14598#endif
b3e401c2 14599
66543169
NS
14600 /* If we don't do this, we end up down inside expand_expr
14601 trying to do TYPE_MODE on the ERROR_MARK, and really
14602 go outside the bounds of the type. */
14603 if (exp != error_mark_node)
364460b6 14604 expand_expr_stmt (exp);
8d08fdba
MS
14605}
14606
558475f0 14607/* When a stmt has been parsed, this function is called. */
8d08fdba
MS
14608
14609void
14610finish_stmt ()
14611{
558475f0
MM
14612 /* Always assume this statement was not an expression statement. If
14613 it actually was an expression statement, its our callers
14614 responsibility to fix this up. */
14615 last_expr_type = NULL_TREE;
8d08fdba
MS
14616}
14617
3afb32a4
MM
14618/* DECL was originally constructed as a non-static member function,
14619 but turned out to be static. Update it accordingly. */
700f8a87 14620
8857f91e 14621void
3afb32a4
MM
14622revert_static_member_fn (decl)
14623 tree decl;
8d08fdba 14624{
700f8a87 14625 tree tmp;
3afb32a4
MM
14626 tree function = TREE_TYPE (decl);
14627 tree args = TYPE_ARG_TYPES (function);
8d08fdba 14628
68642fb6 14629 if (CP_TYPE_QUALS (TREE_TYPE (TREE_VALUE (args)))
91063b51 14630 != TYPE_UNQUALIFIED)
68642fb6 14631 cp_error ("static member function `%#D' declared with type qualifiers",
91063b51 14632 *decl);
f30432d7 14633
700f8a87
MS
14634 args = TREE_CHAIN (args);
14635 tmp = build_function_type (TREE_TYPE (function), args);
91063b51 14636 tmp = build_qualified_type (tmp, CP_TYPE_QUALS (function));
f30432d7 14637 tmp = build_exception_variant (tmp,
8d08fdba 14638 TYPE_RAISES_EXCEPTIONS (function));
3afb32a4
MM
14639 TREE_TYPE (decl) = tmp;
14640 if (DECL_ARGUMENTS (decl))
14641 DECL_ARGUMENTS (decl) = TREE_CHAIN (DECL_ARGUMENTS (decl));
14642 DECL_STATIC_FUNCTION_P (decl) = 1;
8d08fdba 14643}
a4443a08 14644
68642fb6
UD
14645/* Initialize the variables used during compilation of a C++
14646 function. */
db5ae43f 14647
99dccabc
MM
14648static void
14649push_cp_function_context (f)
14650 struct function *f;
14651{
68642fb6
UD
14652 struct language_function *p
14653 = ((struct language_function *)
be91309c 14654 xcalloc (1, sizeof (struct language_function)));
99dccabc 14655 f->language = p;
db5ae43f 14656
b35d4555
MM
14657 /* It takes an explicit call to expand_body to generate RTL for a
14658 function. */
14659 expanding_p = 0;
f1dedc31
MM
14660
14661 /* Whenever we start a new function, we destroy temporaries in the
14662 usual way. */
14663 stmts_are_full_exprs_p = 1;
db5ae43f
MS
14664}
14665
a8f73d4b
MM
14666/* Free the language-specific parts of F, now that we've finished
14667 compiling the function. */
db5ae43f 14668
99dccabc
MM
14669static void
14670pop_cp_function_context (f)
14671 struct function *f;
db5ae43f 14672{
d658cd4c
MM
14673 if (f->language)
14674 free (f->language);
99dccabc 14675 f->language = 0;
db5ae43f 14676}
ebfc180f 14677
59026e79 14678/* Mark P for GC. */
4519c0a8 14679
59026e79
MM
14680static void
14681mark_lang_function (p)
14682 struct language_function *p;
14683{
87e3dbc9
MM
14684 if (!p)
14685 return;
14686
4519c0a8
MM
14687 ggc_mark_tree (p->x_named_labels);
14688 ggc_mark_tree (p->x_ctor_label);
14689 ggc_mark_tree (p->x_dtor_label);
14690 ggc_mark_tree (p->x_base_init_list);
14691 ggc_mark_tree (p->x_member_init_list);
4519c0a8
MM
14692 ggc_mark_tree (p->x_current_class_ptr);
14693 ggc_mark_tree (p->x_current_class_ref);
b35d4555
MM
14694 ggc_mark_tree (p->x_eh_spec_try_block);
14695 ggc_mark_tree (p->x_scope_stmt_stack);
4519c0a8 14696
4519c0a8
MM
14697 ggc_mark_rtx (p->x_result_rtx);
14698
6f80451c 14699 mark_stmt_tree (&p->x_stmt_tree);
a8f73d4b 14700 mark_binding_level (&p->bindings);
4519c0a8
MM
14701}
14702
59026e79
MM
14703/* Mark the language-specific data in F for GC. */
14704
a09ba2e0 14705static void
59026e79
MM
14706mark_cp_function_context (f)
14707 struct function *f;
14708{
14709 mark_lang_function (f->language);
14710}
4519c0a8 14711
4519c0a8 14712void
b4b8bee7
MM
14713lang_mark_false_label_stack (l)
14714 struct label_node *l;
4519c0a8
MM
14715{
14716 /* C++ doesn't use false_label_stack. It better be NULL. */
87e3dbc9 14717 my_friendly_assert (l == NULL, 19990904);
4519c0a8
MM
14718}
14719
14720void
14721lang_mark_tree (t)
14722 tree t;
14723{
14724 enum tree_code code = TREE_CODE (t);
14725 if (code == IDENTIFIER_NODE)
14726 {
14727 struct lang_identifier *li = (struct lang_identifier *) t;
14728 struct lang_id2 *li2 = li->x;
14729 ggc_mark_tree (li->namespace_bindings);
a8f73d4b 14730 ggc_mark_tree (li->bindings);
4519c0a8
MM
14731 ggc_mark_tree (li->class_value);
14732 ggc_mark_tree (li->class_template_info);
14733
14734 if (li2)
14735 {
14736 ggc_mark_tree (li2->label_value);
14737 ggc_mark_tree (li2->implicit_decl);
14738 ggc_mark_tree (li2->error_locus);
14739 }
14740 }
87e3dbc9
MM
14741 else if (code == CPLUS_BINDING)
14742 {
14743 if (BINDING_HAS_LEVEL_P (t))
14744 mark_binding_level (&BINDING_LEVEL (t));
14745 else
14746 ggc_mark_tree (BINDING_SCOPE (t));
14747 ggc_mark_tree (BINDING_VALUE (t));
14748 }
14749 else if (code == OVERLOAD)
14750 ggc_mark_tree (OVL_FUNCTION (t));
14751 else if (code == TEMPLATE_PARM_INDEX)
14752 ggc_mark_tree (TEMPLATE_PARM_DECL (t));
4519c0a8
MM
14753 else if (TREE_CODE_CLASS (code) == 'd')
14754 {
14755 struct lang_decl *ld = DECL_LANG_SPECIFIC (t);
14756
14757 if (ld)
14758 {
d60f72ae 14759 ggc_mark (ld);
af3b4e59
MM
14760 if (!DECL_GLOBAL_CTOR_P (t) && !DECL_GLOBAL_DTOR_P (t))
14761 ggc_mark_tree (ld->decl_flags.u2.access);
4519c0a8
MM
14762 ggc_mark_tree (ld->decl_flags.context);
14763 if (TREE_CODE (t) != NAMESPACE_DECL)
14764 ggc_mark_tree (ld->decl_flags.u.template_info);
16bb3387
JM
14765 else
14766 mark_binding_level (&NAMESPACE_LEVEL (t));
4519c0a8
MM
14767 if (CAN_HAVE_FULL_LANG_DECL_P (t))
14768 {
4519c0a8
MM
14769 ggc_mark_tree (ld->befriending_classes);
14770 ggc_mark_tree (ld->saved_tree);
db9b2174 14771 ggc_mark_tree (ld->cloned_function);
4519c0a8
MM
14772 if (TREE_CODE (t) == TYPE_DECL)
14773 ggc_mark_tree (ld->u.sorted_fields);
59026e79
MM
14774 else if (TREE_CODE (t) == FUNCTION_DECL
14775 && !DECL_PENDING_INLINE_P (t))
14776 mark_lang_function (DECL_SAVED_FUNCTION_DATA (t));
4519c0a8
MM
14777 }
14778 }
14779 }
14780 else if (TREE_CODE_CLASS (code) == 't')
14781 {
14782 struct lang_type *lt = TYPE_LANG_SPECIFIC (t);
14783
68642fb6 14784 if (lt && !(TREE_CODE (t) == POINTER_TYPE
87e3dbc9 14785 && TREE_CODE (TREE_TYPE (t)) == METHOD_TYPE))
4519c0a8 14786 {
c27db0df 14787 ggc_mark (lt);
4519c0a8
MM
14788 ggc_mark_tree (lt->vfields);
14789 ggc_mark_tree (lt->vbases);
14790 ggc_mark_tree (lt->tags);
14791 ggc_mark_tree (lt->search_slot);
14792 ggc_mark_tree (lt->size);
fee7654e 14793 ggc_mark_tree (lt->pure_virtuals);
4519c0a8
MM
14794 ggc_mark_tree (lt->friend_classes);
14795 ggc_mark_tree (lt->rtti);
14796 ggc_mark_tree (lt->methods);
14797 ggc_mark_tree (lt->template_info);
87e3dbc9 14798 ggc_mark_tree (lt->befriending_classes);
4519c0a8 14799 }
87e3dbc9
MM
14800 else if (lt)
14801 /* In the case of pointer-to-member function types, the
14802 TYPE_LANG_SPECIFIC is really just a tree. */
14803 ggc_mark_tree ((tree) lt);
4519c0a8
MM
14804 }
14805}
This page took 4.444681 seconds and 5 git commands to generate.