]> 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.
d363e7bf
AJ
2 Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
3 2001 Free Software Foundation, Inc.
e5e809f4 4 Contributed by Michael Tiemann (tiemann@cygnus.com)
8d08fdba
MS
5
6This file is part of GNU CC.
7
8GNU CC is free software; you can redistribute it and/or modify
9it under the terms of the GNU General Public License as published by
10the Free Software Foundation; either version 2, or (at your option)
11any later version.
12
13GNU CC is distributed in the hope that it will be useful,
14but WITHOUT ANY WARRANTY; without even the implied warranty of
15MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16GNU General Public License for more details.
17
18You should have received a copy of the GNU General Public License
19along with GNU CC; see the file COPYING. If not, write to
e9fa0c7c
RK
20the Free Software Foundation, 59 Temple Place - Suite 330,
21Boston, MA 02111-1307, USA. */
8d08fdba
MS
22
23
24/* Process declarations and symbol lookup for C front end.
25 Also constructs types; the standard scalar types at initialization,
26 and structure, union, array and enum types when they are declared. */
27
28/* ??? not all decl nodes are given the most useful possible
29 line numbers. For example, the CONST_DECLs for enum values. */
30
8d08fdba 31#include "config.h"
8d052bc7 32#include "system.h"
8d08fdba
MS
33#include "tree.h"
34#include "rtl.h"
3bdf5ad1 35#include "expr.h"
8d08fdba
MS
36#include "flags.h"
37#include "cp-tree.h"
38#include "decl.h"
39#include "lex.h"
49c249e1
JM
40#include "output.h"
41#include "except.h"
54f92bfb 42#include "toplev.h"
7ddedda4 43#include "../hash.h"
4519c0a8 44#include "ggc.h"
0e9295cf 45#include "tm_p.h"
8d08fdba 46
8d08fdba
MS
47extern int current_class_depth;
48
30394414
JM
49extern tree global_namespace;
50
158991b7 51extern int (*valid_lang_attribute) PARAMS ((tree, tree, tree, tree));
62c154ed 52
255512c1 53#ifndef BOOL_TYPE_SIZE
2ef16140
MM
54/* In the new ABI, `bool' has size and alignment `1', on all
55 platforms. */
d2e5ee5c 56#define BOOL_TYPE_SIZE CHAR_TYPE_SIZE
e1cd6e56 57#endif
255512c1 58
5cce22b6 59static tree grokparms PARAMS ((tree));
158991b7 60static const char *redeclaration_error_message PARAMS ((tree, tree));
8d08fdba 61
158991b7 62static void push_binding_level PARAMS ((struct binding_level *, int,
49c249e1 63 int));
158991b7
KG
64static void pop_binding_level PARAMS ((void));
65static void suspend_binding_level PARAMS ((void));
66static void resume_binding_level PARAMS ((struct binding_level *));
67static struct binding_level *make_binding_level PARAMS ((void));
68static void declare_namespace_level PARAMS ((void));
6625cdb5 69static int decl_jump_unsafe PARAMS ((tree));
158991b7
KG
70static void storedecls PARAMS ((tree));
71static void require_complete_types_for_parms PARAMS ((tree));
596ea4e5
AS
72static int ambi_op_p PARAMS ((enum tree_code));
73static int unary_op_p PARAMS ((enum tree_code));
158991b7
KG
74static tree store_bindings PARAMS ((tree, tree));
75static tree lookup_tag_reverse PARAMS ((tree, tree));
76static tree obscure_complex_init PARAMS ((tree, tree));
158991b7 77static tree lookup_name_real PARAMS ((tree, int, int, int));
8e4ce833 78static void push_local_name PARAMS ((tree));
158991b7 79static void warn_extern_redeclared_static PARAMS ((tree, tree));
8e4ce833 80static tree grok_reference_init PARAMS ((tree, tree, tree));
158991b7 81static tree grokfndecl PARAMS ((tree, tree, tree, tree, int,
2c73f9f5 82 enum overload_flags, tree,
7a8f9fa9 83 tree, int, int, int, int, int, int, tree));
158991b7
KG
84static tree grokvardecl PARAMS ((tree, tree, RID_BIT_TYPE *, int, int, tree));
85static tree lookup_tag PARAMS ((enum tree_code, tree,
49c249e1
JM
86 struct binding_level *, int));
87static void set_identifier_type_value_with_scope
158991b7 88 PARAMS ((tree, tree, struct binding_level *));
158991b7 89static void record_unknown_type PARAMS ((tree, const char *));
596ea4e5 90static tree build_library_fn_1 PARAMS ((tree, enum tree_code, tree));
158991b7
KG
91static int member_function_or_else PARAMS ((tree, tree, enum overload_flags));
92static void bad_specifiers PARAMS ((tree, const char *, int, int, int, int,
49c249e1 93 int));
158991b7
KG
94static tree maybe_process_template_type_declaration PARAMS ((tree, int, struct binding_level*));
95static void check_for_uninitialized_const_var PARAMS ((tree));
96static unsigned long typename_hash PARAMS ((hash_table_key));
d6edb99e 97static bool typename_compare PARAMS ((hash_table_key, hash_table_key));
158991b7
KG
98static void push_binding PARAMS ((tree, tree, struct binding_level*));
99static int add_binding PARAMS ((tree, tree));
100static void pop_binding PARAMS ((tree, tree));
101static tree local_variable_p_walkfn PARAMS ((tree *, int *, void *));
102static tree find_binding PARAMS ((tree, tree));
103static tree select_decl PARAMS ((tree, int));
104static int lookup_flags PARAMS ((int, int));
105static tree qualify_lookup PARAMS ((tree, int));
106static tree record_builtin_java_type PARAMS ((const char *, int));
107static const char *tag_name PARAMS ((enum tag_types code));
108static void find_class_binding_level PARAMS ((void));
109static struct binding_level *innermost_nonclass_level PARAMS ((void));
110static void warn_about_implicit_typename_lookup PARAMS ((tree, tree));
111static int walk_namespaces_r PARAMS ((tree, walk_namespaces_fn, void *));
112static int walk_globals_r PARAMS ((tree, void *));
113static void add_decl_to_level PARAMS ((tree, struct binding_level *));
114static tree make_label_decl PARAMS ((tree, int));
6625cdb5
JM
115static void use_label PARAMS ((tree));
116static void check_previous_goto_1 PARAMS ((tree, struct binding_level *, tree,
117 const char *, int));
118static void check_previous_goto PARAMS ((struct named_label_use_list *));
119static void check_switch_goto PARAMS ((struct binding_level *));
120static void check_previous_gotos PARAMS ((tree));
121static void pop_label PARAMS ((tree, tree));
158991b7
KG
122static void pop_labels PARAMS ((tree));
123static void maybe_deduce_size_from_array_init PARAMS ((tree, tree));
124static void layout_var_decl PARAMS ((tree));
125static void maybe_commonize_var PARAMS ((tree));
126static tree check_initializer PARAMS ((tree, tree));
127static void make_rtl_for_nonlocal_decl PARAMS ((tree, tree, const char *));
128static void push_cp_function_context PARAMS ((struct function *));
129static void pop_cp_function_context PARAMS ((struct function *));
130static void mark_binding_level PARAMS ((void *));
2f8edb39 131static void mark_named_label_lists PARAMS ((void *, void *));
158991b7
KG
132static void mark_cp_function_context PARAMS ((struct function *));
133static void mark_saved_scope PARAMS ((void *));
ae499cce 134static void mark_lang_function PARAMS ((struct cp_language_function *));
158991b7 135static void save_function_data PARAMS ((tree));
f444e36b 136static void check_function_type PARAMS ((tree, tree));
158991b7
KG
137static void destroy_local_var PARAMS ((tree));
138static void finish_constructor_body PARAMS ((void));
139static void finish_destructor_body PARAMS ((void));
140static tree create_array_type_for_decl PARAMS ((tree, tree, tree));
141static tree get_atexit_node PARAMS ((void));
142static tree get_dso_handle_node PARAMS ((void));
143static tree start_cleanup_fn PARAMS ((void));
144static void end_cleanup_fn PARAMS ((void));
2ce07e2d 145static tree cp_make_fname_decl PARAMS ((tree, const char *, int));
d43829f9 146static void initialize_predefined_identifiers PARAMS ((void));
5362b086 147static tree check_special_function_return_type
1f84ec23 148 PARAMS ((special_function_kind, tree, tree));
596ea4e5
AS
149static tree push_cp_library_fn PARAMS ((enum tree_code, tree));
150static tree build_cp_library_fn PARAMS ((tree, enum tree_code, tree));
f444e36b 151static void store_parm_decls PARAMS ((tree));
d363e7bf 152static int cp_missing_noreturn_ok_p PARAMS ((tree));
8d08fdba 153
69ac77ce 154#if defined (DEBUG_CP_BINDING_LEVELS)
158991b7 155static void indent PARAMS ((void));
69ac77ce
JL
156#endif
157
8d08fdba
MS
158/* Erroneous argument lists can use this *IFF* they do not modify it. */
159tree error_mark_list;
160
7f4edbcb 161/* The following symbols are subsumed in the cp_global_trees array, and
68642fb6 162 listed here individually for documentation purposes.
8d08fdba 163
7f4edbcb
BS
164 C++ extensions
165 tree wchar_decl_node;
37c46b43 166
7f4edbcb
BS
167 tree vtable_entry_type;
168 tree delta_type_node;
169#if 0
170 Old rtti stuff.
171 tree __baselist_desc_type_node;
172 tree __i_desc_type_node, __m_desc_type_node;
173 tree __t_desc_array_type, __i_desc_array_type, __m_desc_array_type;
946dc1c8 174#endif
7f4edbcb
BS
175 tree __t_desc_type_node;
176#if 0
177 tree __tp_desc_type_node;
178#endif
db1147b2 179 tree ti_desc_type_node;
1f4cb92b 180 tree bltn_desc_type_node, ptr_desc_type_node;
db1147b2
NS
181 tree ary_desc_type_node, func_desc_type_node, enum_desc_type_node;
182 tree class_desc_type_node, si_class_desc_type_node, vmi_class_desc_type_node;
387769ed 183 tree ptm_desc_type_node;
db1147b2 184 tree base_desc_type_node;
7f4edbcb
BS
185#if 0
186 Not needed yet? May be needed one day?
187 tree __bltn_desc_array_type, __user_desc_array_type, __class_desc_array_type;
188 tree __ptr_desc_array_type, __attr_dec_array_type, __func_desc_array_type;
189 tree __ptmf_desc_array_type, __ptmd_desc_array_type;
946dc1c8 190#endif
8d08fdba 191
7f4edbcb
BS
192 tree class_type_node, record_type_node, union_type_node, enum_type_node;
193 tree unknown_type_node;
8d08fdba 194
7f4edbcb 195 Array type `vtable_entry_type[]'
8d08fdba 196
7f4edbcb
BS
197 tree vtbl_type_node;
198 tree vtbl_ptr_type_node;
8d08fdba 199
2854d3c6 200 Namespaces,
8d08fdba 201
7f4edbcb 202 tree std_node;
2854d3c6 203 tree abi_node;
8d08fdba 204
7f4edbcb
BS
205 A FUNCTION_DECL which can call `abort'. Not necessarily the
206 one that the user will declare, but sufficient to be called
207 by routines that want to abort the program.
8d08fdba 208
7f4edbcb 209 tree abort_fndecl;
8d08fdba 210
7f4edbcb 211 The FUNCTION_DECL for the default `::operator delete'.
2986ae00 212
7f4edbcb 213 tree global_delete_fndecl;
8d08fdba 214
7f4edbcb 215 Used by RTTI
669ec2b4
JM
216 tree type_info_type_node, tinfo_decl_id, tinfo_decl_type;
217 tree tinfo_var_id;
218
7f4edbcb 219*/
8d08fdba 220
7f4edbcb 221tree cp_global_trees[CPTI_MAX];
8d08fdba 222
2c73f9f5 223/* Indicates that there is a type value in some namespace, although
7f4edbcb 224 that is not necessarily in scope at the moment. */
2c73f9f5
ML
225
226static tree global_type_node;
227
6bcedb4e
MM
228/* If non-zero, this is the number of times we have entered the `std'
229 namespace when we are treating that namespace as an alias for the
230 global namespace. */
231static int in_fake_std;
6633d636 232
3e3f722c
ML
233/* Expect only namespace names now. */
234static int only_namespace_names;
235
6625cdb5
JM
236/* Used only for jumps to as-yet undefined labels, since jumps to
237 defined labels can have their validity checked immediately. */
238
239struct named_label_use_list
e349ee73
MS
240{
241 struct binding_level *binding_level;
242 tree names_in_scope;
243 tree label_decl;
9c0758dd 244 const char *filename_o_goto;
e349ee73 245 int lineno_o_goto;
6625cdb5 246 struct named_label_use_list *next;
e349ee73
MS
247};
248
ed5511d9 249#define named_label_uses cp_function_chain->x_named_label_uses
8d08fdba 250
8e4ce833
JJ
251#define local_names cp_function_chain->x_local_names
252
8d08fdba
MS
253/* A list of objects which have constructors or destructors
254 which reside in the global scope. The decl is stored in
255 the TREE_VALUE slot and the initializer is stored
256 in the TREE_PURPOSE slot. */
257tree static_aggregates;
258
8d08fdba
MS
259/* -- end of C++ */
260
81b3411c 261/* A node for the integer constants 2, and 3. */
d11ad92e 262
81b3411c 263tree integer_two_node, integer_three_node;
8d08fdba 264
8d08fdba
MS
265/* Parsing a function declarator leaves here a chain of structure
266 and enum types declared in the parmlist. */
267
268static tree last_function_parm_tags;
269
8d08fdba 270/* Similar, for last_function_parm_tags. */
9cd64686 271tree last_function_parms;
8d08fdba
MS
272static tree current_function_parm_tags;
273
6625cdb5
JM
274/* A list of all LABEL_DECLs in the function that have names. Here so
275 we can clear out their names' definitions at the end of the
276 function, and so we can check the validity of jumps to these labels. */
277
278struct named_label_list
279{
280 struct binding_level *binding_level;
281 tree names_in_scope;
282 tree old_value;
283 tree label_decl;
284 tree bad_decls;
285 int eh_region;
286 struct named_label_list *next;
287};
8d08fdba 288
4519c0a8 289#define named_labels cp_function_chain->x_named_labels
8d08fdba 290
8d08fdba
MS
291/* Set to 0 at beginning of a function definition, and whenever
292 a label (case or named) is defined. Set to value of expression
293 returned from function when that value can be transformed into
294 a named return value. */
295
296tree current_function_return_value;
297
b8458e3e
JM
298/* Nonzero means use the ISO C94 dialect of C. */
299
300int flag_isoc94;
301
83309c26 302/* Nonzero means use the ISO C99 dialect of C. */
68642fb6 303
83309c26 304int flag_isoc99;
68642fb6 305
93e2382f
JM
306/* Nonzero means we are a hosted implementation for code shared with C. */
307
308int flag_hosted = 1;
309
310/* Nonzero means add default format_arg attributes for functions not
311 in ISO C. */
312
313int flag_noniso_default_format_attributes = 1;
314
8d08fdba
MS
315/* Nonzero if we want to conserve space in the .o files. We do this
316 by putting uninitialized data and runtime initialized data into
ddd5a7c1 317 .common instead of .data at the expense of not flagging multiple
8d08fdba
MS
318 definitions. */
319extern int flag_conserve_space;
8d08fdba 320\f
51c184be 321/* C and C++ flags are in decl2.c. */
8d08fdba 322
51c184be 323/* Flag used when debugging spew.c */
8d08fdba
MS
324
325extern int spew_debug;
326
e92cc029
MS
327/* A expression of value 0 with the same precision as a sizetype
328 node, but signed. */
329tree signed_size_zero_node;
330
0c8feefe
MM
331/* The name of the anonymous namespace, throughout this translation
332 unit. */
333tree anonymous_namespace_name;
334
b2244c65
MM
335/* The number of function bodies which we are currently processing.
336 (Zero if we are at namespace scope, one inside the body of a
337 function, two inside the body of a function in a local class, etc.) */
338int function_depth;
8d08fdba
MS
339\f
340/* For each binding contour we allocate a binding_level structure
e92cc029
MS
341 which records the names defined in that contour.
342 Contours include:
343 0) the global one
344 1) one for each function definition,
345 where internal declarations of the parameters appear.
346 2) one for each compound statement,
347 to record its declarations.
348
349 The current meaning of a name can be found by searching the levels
350 from the current one out to the global one.
351
352 Off to the side, may be the class_binding_level. This exists only
353 to catch class-local declarations. It is otherwise nonexistent.
354
355 Also there may be binding levels that catch cleanups that must be
d8f8dca1
MM
356 run when exceptions occur. Thus, to see whether a name is bound in
357 the current scope, it is not enough to look in the
358 CURRENT_BINDING_LEVEL. You should use lookup_name_current_level
359 instead. */
8d08fdba
MS
360
361/* Note that the information in the `names' component of the global contour
362 is duplicated in the IDENTIFIER_GLOBAL_VALUEs of all identifiers. */
363
364struct binding_level
365 {
366 /* A chain of _DECL nodes for all variables, constants, functions,
e92cc029 367 and typedef types. These are in the reverse of the order
f181d4ae
MM
368 supplied. There may be OVERLOADs on this list, too, but they
369 are wrapped in TREE_LISTs; the TREE_VALUE is the OVERLOAD. */
8d08fdba
MS
370 tree names;
371
e92cc029
MS
372 /* A list of structure, union and enum definitions, for looking up
373 tag names.
374 It is a chain of TREE_LIST nodes, each of whose TREE_PURPOSE is a name,
375 or NULL_TREE; and whose TREE_VALUE is a RECORD_TYPE, UNION_TYPE,
376 or ENUMERAL_TYPE node.
377
378 C++: the TREE_VALUE nodes can be simple types for
379 component_bindings. */
8d08fdba
MS
380 tree tags;
381
2c73f9f5
ML
382 /* A list of USING_DECL nodes. */
383 tree usings;
384
ea9635c7
ML
385 /* A list of used namespaces. PURPOSE is the namespace,
386 VALUE the common ancestor with this binding_level's namespace. */
387 tree using_directives;
388
f181d4ae
MM
389 /* If this binding level is the binding level for a class, then
390 class_shadowed is a TREE_LIST. The TREE_PURPOSE of each node
76191fdd 391 is the name of an entity bound in the class. The TREE_TYPE is
d8f8dca1 392 the DECL bound by this name in the class. */
8d08fdba
MS
393 tree class_shadowed;
394
f181d4ae 395 /* Similar to class_shadowed, but for IDENTIFIER_TYPE_VALUE, and
76191fdd
NS
396 is used for all binding levels. In addition the TREE_VALUE is the
397 IDENTIFIER_TYPE_VALUE before we entered the class. */
8d08fdba
MS
398 tree type_shadowed;
399
acef433b
MM
400 /* A TREE_LIST. Each TREE_VALUE is the LABEL_DECL for a local
401 label in this scope. The TREE_PURPOSE is the previous value of
402 the IDENTIFIER_LABEL VALUE. */
403 tree shadowed_labels;
404
8d08fdba
MS
405 /* For each level (except not the global one),
406 a chain of BLOCK nodes for all the levels
407 that were entered and exited one level down. */
408 tree blocks;
409
70adf8a9
JM
410 /* The _TYPE node for this level, if parm_flag == 2. */
411 tree this_class;
412
8d08fdba
MS
413 /* The binding level which this one is contained in (inherits from). */
414 struct binding_level *level_chain;
415
f30432d7 416 /* List of decls in `names' that have incomplete
8d08fdba 417 structure or union types. */
f30432d7 418 tree incomplete;
8d08fdba 419
8d6e462b 420 /* List of VAR_DECLS saved from a previous for statement.
cab1f180 421 These would be dead in ISO-conforming code, but might
f181d4ae
MM
422 be referenced in ARM-era code. These are stored in a
423 TREE_LIST; the TREE_VALUE is the actual declaration. */
8d6e462b
PB
424 tree dead_vars_from_for;
425
8d08fdba 426 /* 1 for the level that holds the parameters of a function.
74b846e0
MM
427 2 for the level that holds a class declaration. */
428 unsigned parm_flag : 2;
8d08fdba
MS
429
430 /* 1 means make a BLOCK for this level regardless of all else.
431 2 for temporary binding contours created by the compiler. */
74b846e0 432 unsigned keep : 2;
8d08fdba
MS
433
434 /* Nonzero if this level "doesn't exist" for tags. */
435 unsigned tag_transparent : 1;
436
437 /* Nonzero if this level can safely have additional
438 cleanup-needing variables added to it. */
439 unsigned more_cleanups_ok : 1;
440 unsigned have_cleanups : 1;
441
74b846e0 442 /* Nonzero if this scope is for storing the decls for template
5566b478
MS
443 parameters and generic decls; these decls will be discarded and
444 replaced with a TEMPLATE_DECL. */
74b846e0
MM
445 unsigned template_parms_p : 1;
446
5362b086 447 /* Nonzero if this scope corresponds to the `<>' in a
74b846e0
MM
448 `template <>' clause. Whenever this flag is set,
449 TEMPLATE_PARMS_P will be set as well. */
450 unsigned template_spec_p : 1;
8d08fdba 451
a9aedbc2
MS
452 /* This is set for a namespace binding level. */
453 unsigned namespace_p : 1;
454
2ee887f2 455 /* True if this level is that of a for-statement where we need to
cab1f180 456 worry about ambiguous (ARM or ISO) scope rules. */
8d6e462b
PB
457 unsigned is_for_scope : 1;
458
6625cdb5
JM
459 /* True if this level corresponds to an EH region, as for a try block.
460 Currently this information is only available while building the
461 tree structure. */
227cf171
JM
462 unsigned eh_region : 1;
463
74b846e0 464 /* Four bits left for this word. */
8d08fdba
MS
465
466#if defined(DEBUG_CP_BINDING_LEVELS)
467 /* Binding depth at which this level began. */
468 unsigned binding_depth;
469#endif /* defined(DEBUG_CP_BINDING_LEVELS) */
470 };
471
472#define NULL_BINDING_LEVEL ((struct binding_level *) NULL)
68642fb6 473
8f032717 474/* The binding level currently in effect. */
8d08fdba 475
a8f73d4b 476#define current_binding_level \
01d939e8 477 (cfun \
d363e7bf 478 ? cp_function_chain->bindings \
a8f73d4b 479 : scope_chain->bindings)
8d08fdba
MS
480
481/* The binding level of the current class, if any. */
482
9cd64686 483#define class_binding_level scope_chain->class_bindings
8d08fdba 484
8d08fdba
MS
485/* A chain of binding_level structures awaiting reuse. */
486
487static struct binding_level *free_binding_level;
488
489/* The outermost binding level, for names of file scope.
490 This is created when the compiler is started and exists
491 through the entire run. */
492
493static struct binding_level *global_binding_level;
494
8d08fdba
MS
495/* Nonzero means unconditionally make a BLOCK for the next level pushed. */
496
497static int keep_next_level_flag;
498
499#if defined(DEBUG_CP_BINDING_LEVELS)
500static int binding_depth = 0;
501static int is_class_level = 0;
502
503static void
504indent ()
505{
506 register unsigned i;
507
508 for (i = 0; i < binding_depth*2; i++)
509 putc (' ', stderr);
510}
511#endif /* defined(DEBUG_CP_BINDING_LEVELS) */
512
158991b7 513static tree pushdecl_with_scope PARAMS ((tree, struct binding_level *));
8d08fdba
MS
514
515static void
516push_binding_level (newlevel, tag_transparent, keep)
517 struct binding_level *newlevel;
518 int tag_transparent, keep;
519{
520 /* Add this level to the front of the chain (stack) of levels that
521 are active. */
961192e1 522 memset ((char*) newlevel, 0, sizeof (struct binding_level));
8f032717 523 newlevel->level_chain = current_binding_level;
8d08fdba
MS
524 current_binding_level = newlevel;
525 newlevel->tag_transparent = tag_transparent;
526 newlevel->more_cleanups_ok = 1;
227cf171 527
8d08fdba
MS
528 newlevel->keep = keep;
529#if defined(DEBUG_CP_BINDING_LEVELS)
530 newlevel->binding_depth = binding_depth;
531 indent ();
532 fprintf (stderr, "push %s level 0x%08x line %d\n",
533 (is_class_level) ? "class" : "block", newlevel, lineno);
534 is_class_level = 0;
535 binding_depth++;
536#endif /* defined(DEBUG_CP_BINDING_LEVELS) */
537}
538
8f032717
MM
539/* Find the innermost enclosing class scope, and reset
540 CLASS_BINDING_LEVEL appropriately. */
541
542static void
543find_class_binding_level ()
544{
545 struct binding_level *level = current_binding_level;
546
547 while (level && level->parm_flag != 2)
548 level = level->level_chain;
549 if (level && level->parm_flag == 2)
550 class_binding_level = level;
551 else
552 class_binding_level = 0;
553}
554
8d08fdba
MS
555static void
556pop_binding_level ()
557{
8d08fdba
MS
558 if (global_binding_level)
559 {
2c73f9f5 560 /* Cannot pop a level, if there are none left to pop. */
8d08fdba
MS
561 if (current_binding_level == global_binding_level)
562 my_friendly_abort (123);
563 }
564 /* Pop the current level, and free the structure for reuse. */
565#if defined(DEBUG_CP_BINDING_LEVELS)
566 binding_depth--;
567 indent ();
568 fprintf (stderr, "pop %s level 0x%08x line %d\n",
569 (is_class_level) ? "class" : "block",
570 current_binding_level, lineno);
571 if (is_class_level != (current_binding_level == class_binding_level))
9e9ff709
MS
572 {
573 indent ();
574 fprintf (stderr, "XXX is_class_level != (current_binding_level == class_binding_level)\n");
575 }
8d08fdba
MS
576 is_class_level = 0;
577#endif /* defined(DEBUG_CP_BINDING_LEVELS) */
578 {
579 register struct binding_level *level = current_binding_level;
580 current_binding_level = current_binding_level->level_chain;
581 level->level_chain = free_binding_level;
582#if 0 /* defined(DEBUG_CP_BINDING_LEVELS) */
583 if (level->binding_depth != binding_depth)
584 abort ();
585#endif /* defined(DEBUG_CP_BINDING_LEVELS) */
8f032717
MM
586 free_binding_level = level;
587 find_class_binding_level ();
8d08fdba
MS
588 }
589}
a9aedbc2
MS
590
591static void
592suspend_binding_level ()
593{
594 if (class_binding_level)
595 current_binding_level = class_binding_level;
596
597 if (global_binding_level)
598 {
2c73f9f5 599 /* Cannot suspend a level, if there are none left to suspend. */
a9aedbc2
MS
600 if (current_binding_level == global_binding_level)
601 my_friendly_abort (123);
602 }
603 /* Suspend the current level. */
604#if defined(DEBUG_CP_BINDING_LEVELS)
605 binding_depth--;
606 indent ();
607 fprintf (stderr, "suspend %s level 0x%08x line %d\n",
608 (is_class_level) ? "class" : "block",
609 current_binding_level, lineno);
610 if (is_class_level != (current_binding_level == class_binding_level))
9e9ff709
MS
611 {
612 indent ();
613 fprintf (stderr, "XXX is_class_level != (current_binding_level == class_binding_level)\n");
614 }
a9aedbc2
MS
615 is_class_level = 0;
616#endif /* defined(DEBUG_CP_BINDING_LEVELS) */
8f032717
MM
617 current_binding_level = current_binding_level->level_chain;
618 find_class_binding_level ();
a9aedbc2
MS
619}
620
824b9a4c 621static void
a9aedbc2
MS
622resume_binding_level (b)
623 struct binding_level *b;
624{
2c73f9f5
ML
625 /* Resuming binding levels is meant only for namespaces,
626 and those cannot nest into classes. */
627 my_friendly_assert(!class_binding_level, 386);
628 /* Also, resuming a non-directly nested namespace is a no-no. */
629 my_friendly_assert(b->level_chain == current_binding_level, 386);
a9aedbc2
MS
630 current_binding_level = b;
631#if defined(DEBUG_CP_BINDING_LEVELS)
632 b->binding_depth = binding_depth;
633 indent ();
634 fprintf (stderr, "resume %s level 0x%08x line %d\n",
635 (is_class_level) ? "class" : "block", b, lineno);
636 is_class_level = 0;
637 binding_depth++;
638#endif /* defined(DEBUG_CP_BINDING_LEVELS) */
639}
8d08fdba 640\f
cffa8729
MS
641/* Create a new `struct binding_level'. */
642
643static
644struct binding_level *
645make_binding_level ()
646{
647 /* NOSTRICT */
648 return (struct binding_level *) xmalloc (sizeof (struct binding_level));
649}
650
8d08fdba
MS
651/* Nonzero if we are currently in the global binding level. */
652
653int
654global_bindings_p ()
655{
656 return current_binding_level == global_binding_level;
657}
658
8f032717
MM
659/* Return the innermost binding level that is not for a class scope. */
660
661static struct binding_level *
662innermost_nonclass_level ()
663{
664 struct binding_level *b;
665
666 b = current_binding_level;
667 while (b->parm_flag == 2)
668 b = b->level_chain;
669
670 return b;
671}
672
a9aedbc2
MS
673/* Nonzero if we are currently in a toplevel binding level. This
674 means either the global binding level or a namespace in a toplevel
8f032717 675 binding level. Since there are no non-toplevel namespace levels,
74b846e0
MM
676 this really means any namespace or template parameter level. We
677 also include a class whose context is toplevel. */
a9aedbc2
MS
678
679int
680toplevel_bindings_p ()
681{
8f032717
MM
682 struct binding_level *b = innermost_nonclass_level ();
683
74b846e0 684 return b->namespace_p || b->template_parms_p;
a9aedbc2
MS
685}
686
8f032717
MM
687/* Nonzero if this is a namespace scope, or if we are defining a class
688 which is itself at namespace scope, or whose enclosing class is
689 such a class, etc. */
a9aedbc2 690
7bdbfa05 691int
a9aedbc2
MS
692namespace_bindings_p ()
693{
8f032717
MM
694 struct binding_level *b = innermost_nonclass_level ();
695
696 return b->namespace_p;
a9aedbc2
MS
697}
698
f1dedc31
MM
699/* If KEEP is non-zero, make a BLOCK node for the next binding level,
700 unconditionally. Otherwise, use the normal logic to decide whether
701 or not to create a BLOCK. */
702
8d08fdba 703void
f1dedc31
MM
704keep_next_level (keep)
705 int keep;
8d08fdba 706{
f1dedc31 707 keep_next_level_flag = keep;
8d08fdba
MS
708}
709
710/* Nonzero if the current level needs to have a BLOCK made. */
711
712int
713kept_level_p ()
714{
715 return (current_binding_level->blocks != NULL_TREE
716 || current_binding_level->keep
717 || current_binding_level->names != NULL_TREE
718 || (current_binding_level->tags != NULL_TREE
719 && !current_binding_level->tag_transparent));
720}
721
824b9a4c 722static void
a9aedbc2
MS
723declare_namespace_level ()
724{
725 current_binding_level->namespace_p = 1;
726}
727
74b846e0
MM
728/* Returns non-zero if this scope was created to store template
729 parameters. */
730
8d08fdba 731int
74b846e0 732template_parm_scope_p ()
8d08fdba 733{
74b846e0
MM
734 return current_binding_level->template_parms_p;
735}
736
737/* Returns the kind of template specialization we are currently
738 processing, given that it's declaration contained N_CLASS_SCOPES
739 explicit scope qualifications. */
740
741tmpl_spec_kind
742current_tmpl_spec_kind (n_class_scopes)
743 int n_class_scopes;
744{
745 int n_template_parm_scopes = 0;
746 int seen_specialization_p = 0;
747 int innermost_specialization_p = 0;
748 struct binding_level *b;
749
750 /* Scan through the template parameter scopes. */
751 for (b = current_binding_level; b->template_parms_p; b = b->level_chain)
752 {
753 /* If we see a specialization scope inside a parameter scope,
754 then something is wrong. That corresponds to a declaration
755 like:
756
757 template <class T> template <> ...
758
759 which is always illegal since [temp.expl.spec] forbids the
760 specialization of a class member template if the enclosing
761 class templates are not explicitly specialized as well. */
762 if (b->template_spec_p)
763 {
764 if (n_template_parm_scopes == 0)
765 innermost_specialization_p = 1;
766 else
767 seen_specialization_p = 1;
768 }
769 else if (seen_specialization_p == 1)
770 return tsk_invalid_member_spec;
771
772 ++n_template_parm_scopes;
773 }
774
775 /* Handle explicit instantiations. */
776 if (processing_explicit_instantiation)
777 {
778 if (n_template_parm_scopes != 0)
779 /* We've seen a template parameter list during an explicit
780 instantiation. For example:
781
782 template <class T> template void f(int);
783
784 This is erroneous. */
785 return tsk_invalid_expl_inst;
786 else
787 return tsk_expl_inst;
788 }
789
790 if (n_template_parm_scopes < n_class_scopes)
791 /* We've not seen enough template headers to match all the
792 specialized classes present. For example:
793
794 template <class T> void R<T>::S<T>::f(int);
795
796 This is illegal; there needs to be one set of template
797 parameters for each class. */
798 return tsk_insufficient_parms;
799 else if (n_template_parm_scopes == n_class_scopes)
800 /* We're processing a non-template declaration (even though it may
801 be a member of a template class.) For example:
802
803 template <class T> void S<T>::f(int);
804
805 The `class T' maches the `S<T>', leaving no template headers
806 corresponding to the `f'. */
807 return tsk_none;
808 else if (n_template_parm_scopes > n_class_scopes + 1)
809 /* We've got too many template headers. For example:
810
811 template <> template <class T> void f (T);
812
813 There need to be more enclosing classes. */
814 return tsk_excessive_parms;
815 else
816 /* This must be a template. It's of the form:
817
818 template <class T> template <class U> void S<T>::f(U);
819
820 This is a specialization if the innermost level was a
821 specialization; otherwise it's just a definition of the
822 template. */
823 return innermost_specialization_p ? tsk_expl_spec : tsk_template;
8d08fdba
MS
824}
825
826void
827set_class_shadows (shadows)
828 tree shadows;
829{
830 class_binding_level->class_shadowed = shadows;
831}
832
833/* Enter a new binding level.
834 If TAG_TRANSPARENT is nonzero, do so only for the name space of variables,
835 not for that of tags. */
836
837void
838pushlevel (tag_transparent)
839 int tag_transparent;
840{
b35d4555 841 struct binding_level *newlevel;
8d08fdba 842
01d939e8 843 if (cfun && !doing_semantic_analysis_p ())
b35d4555 844 return;
8d08fdba 845
b35d4555 846 /* Reuse or create a struct for this binding level. */
8d08fdba
MS
847#if defined(DEBUG_CP_BINDING_LEVELS)
848 if (0)
849#else /* !defined(DEBUG_CP_BINDING_LEVELS) */
850 if (free_binding_level)
851#endif /* !defined(DEBUG_CP_BINDING_LEVELS) */
852 {
853 newlevel = free_binding_level;
854 free_binding_level = free_binding_level->level_chain;
855 }
856 else
acef433b 857 newlevel = make_binding_level ();
cffa8729 858
8d08fdba
MS
859 push_binding_level (newlevel, tag_transparent, keep_next_level_flag);
860 GNU_xref_start_scope ((HOST_WIDE_INT) newlevel);
861 keep_next_level_flag = 0;
862}
863
bd0d5d4a
JM
864/* We're defining an object of type TYPE. If it needs a cleanup, but
865 we're not allowed to add any more objects with cleanups to the current
866 scope, create a new binding level. */
867
868void
869maybe_push_cleanup_level (type)
870 tree type;
871{
872 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
873 && current_binding_level->more_cleanups_ok == 0)
874 {
875 keep_next_level (2);
876 pushlevel (1);
877 clear_last_expr ();
878 add_scope_stmt (/*begin_p=*/1, /*partial_p=*/1);
879 }
880}
881
74b846e0
MM
882/* Enter a new scope. The KIND indicates what kind of scope is being
883 created. */
884
885void
886begin_scope (sk)
887 scope_kind sk;
888{
889 pushlevel (0);
890
891 switch (sk)
892 {
893 case sk_template_spec:
894 current_binding_level->template_spec_p = 1;
895 /* Fall through. */
896
897 case sk_template_parms:
898 current_binding_level->template_parms_p = 1;
899 break;
900
901 default:
902 my_friendly_abort (20000309);
903 }
904}
905
906/* Exit the current scope. */
907
908void
909finish_scope ()
910{
911 poplevel (0, 0, 0);
912}
913
5566b478 914void
8d6e462b
PB
915note_level_for_for ()
916{
917 current_binding_level->is_for_scope = 1;
918}
919
6625cdb5
JM
920/* Record that the current binding level represents a try block. */
921
922void
923note_level_for_eh ()
924{
925 current_binding_level->eh_region = 1;
926}
927
f181d4ae
MM
928/* For a binding between a name and an entity at a block scope,
929 this is the `struct binding_level' for the block. */
930#define BINDING_LEVEL(NODE) \
c7a932b1 931 (((struct tree_binding*)NODE)->scope.level)
f181d4ae 932
4890c2f4
MM
933/* A free list of CPLUS_BINDING nodes, connected by their
934 TREE_CHAINs. */
935
936static tree free_bindings;
937
f181d4ae
MM
938/* Make DECL the innermost binding for ID. The LEVEL is the binding
939 level at which this declaration is being bound. */
940
941static void
942push_binding (id, decl, level)
943 tree id;
944 tree decl;
945 struct binding_level* level;
946{
947 tree binding;
948
4890c2f4
MM
949 if (free_bindings)
950 {
951 binding = free_bindings;
952 free_bindings = TREE_CHAIN (binding);
953 }
954 else
955 binding = make_node (CPLUS_BINDING);
f181d4ae
MM
956
957 /* Now, fill in the binding information. */
958 BINDING_VALUE (binding) = decl;
d8f8dca1 959 BINDING_TYPE (binding) = NULL_TREE;
f181d4ae 960 BINDING_LEVEL (binding) = level;
8f032717 961 INHERITED_VALUE_BINDING_P (binding) = 0;
f181d4ae 962 LOCAL_BINDING_P (binding) = (level != class_binding_level);
87e3dbc9 963 BINDING_HAS_LEVEL_P (binding) = 1;
f181d4ae 964
c45df9c1 965 /* And put it on the front of the list of bindings for ID. */
f181d4ae
MM
966 TREE_CHAIN (binding) = IDENTIFIER_BINDING (id);
967 IDENTIFIER_BINDING (id) = binding;
968}
969
d8f8dca1
MM
970/* ID is already bound in the current scope. But, DECL is an
971 additional binding for ID in the same scope. This is the `struct
972 stat' hack whereby a non-typedef class-name or enum-name can be
973 bound at the same level as some other kind of entity. It's the
974 responsibility of the caller to check that inserting this name is
8f032717
MM
975 legal here. Returns nonzero if the new binding was successful. */
976static int
d8f8dca1
MM
977add_binding (id, decl)
978 tree id;
979 tree decl;
980{
981 tree binding = IDENTIFIER_BINDING (id);
8f032717 982 int ok = 1;
d8f8dca1
MM
983
984 if (TREE_CODE (decl) == TYPE_DECL && DECL_ARTIFICIAL (decl))
985 /* The new name is the type name. */
986 BINDING_TYPE (binding) = decl;
8f032717
MM
987 else if (!BINDING_VALUE (binding))
988 /* This situation arises when push_class_level_binding moves an
989 inherited type-binding out of the way to make room for a new
990 value binding. */
991 BINDING_VALUE (binding) = decl;
992 else if (TREE_CODE (BINDING_VALUE (binding)) == TYPE_DECL
993 && DECL_ARTIFICIAL (BINDING_VALUE (binding)))
994 {
995 /* The old binding was a type name. It was placed in
996 BINDING_VALUE because it was thought, at the point it was
997 declared, to be the only entity with such a name. Move the
998 type name into the type slot; it is now hidden by the new
999 binding. */
d8f8dca1
MM
1000 BINDING_TYPE (binding) = BINDING_VALUE (binding);
1001 BINDING_VALUE (binding) = decl;
8f032717 1002 INHERITED_VALUE_BINDING_P (binding) = 0;
d8f8dca1 1003 }
263505af
MM
1004 else if (TREE_CODE (BINDING_VALUE (binding)) == TYPE_DECL
1005 && TREE_CODE (decl) == TYPE_DECL
1006 && DECL_NAME (decl) == DECL_NAME (BINDING_VALUE (binding))
1007 && same_type_p (TREE_TYPE (decl),
1008 TREE_TYPE (BINDING_VALUE (binding))))
1009 /* We have two typedef-names, both naming the same type to have
1010 the same name. This is OK because of:
1011
1012 [dcl.typedef]
1013
1014 In a given scope, a typedef specifier can be used to redefine
1015 the name of any type declared in that scope to refer to the
1016 type to which it already refers. */
1017 ok = 0;
7b176381
MM
1018 /* There can be two block-scope declarations of the same variable,
1019 so long as they are `extern' declarations. */
1020 else if (TREE_CODE (decl) == VAR_DECL
1021 && TREE_CODE (BINDING_VALUE (binding)) == VAR_DECL
1022 && DECL_EXTERNAL (decl)
1023 && DECL_EXTERNAL (BINDING_VALUE (binding)))
1024 {
1025 duplicate_decls (decl, BINDING_VALUE (binding));
1026 ok = 0;
1027 }
8f032717
MM
1028 else
1029 {
1030 cp_error ("declaration of `%#D'", decl);
1031 cp_error_at ("conflicts with previous declaration `%#D'",
1032 BINDING_VALUE (binding));
1033 ok = 0;
1034 }
1035
1036 return ok;
d8f8dca1
MM
1037}
1038
cfe507be
MM
1039/* Add DECL to the list of things declared in B. */
1040
1041static void
1042add_decl_to_level (decl, b)
1043 tree decl;
1044 struct binding_level *b;
1045{
cfe507be
MM
1046 /* We build up the list in reverse order, and reverse it later if
1047 necessary. */
1048 TREE_CHAIN (decl) = b->names;
1049 b->names = decl;
1050}
1051
1052/* Bind DECL to ID in the current_binding_level, assumed to be a local
1053 binding level. If PUSH_USING is set in FLAGS, we know that DECL
1054 doesn't really belong to this binding level, that it got here
1055 through a using-declaration. */
f181d4ae
MM
1056
1057void
0034cf72 1058push_local_binding (id, decl, flags)
f181d4ae
MM
1059 tree id;
1060 tree decl;
0034cf72 1061 int flags;
f181d4ae 1062{
8f032717
MM
1063 struct binding_level *b;
1064
1065 /* Skip over any local classes. This makes sense if we call
1066 push_local_binding with a friend decl of a local class. */
1067 b = current_binding_level;
1068 while (b->parm_flag == 2)
1069 b = b->level_chain;
f181d4ae 1070
d8f8dca1 1071 if (lookup_name_current_level (id))
8f032717
MM
1072 {
1073 /* Supplement the existing binding. */
1074 if (!add_binding (id, decl))
1075 /* It didn't work. Something else must be bound at this
1076 level. Do not add DECL to the list of things to pop
1077 later. */
1078 return;
1079 }
d8f8dca1
MM
1080 else
1081 /* Create a new binding. */
8f032717 1082 push_binding (id, decl, b);
f181d4ae 1083
0034cf72 1084 if (TREE_CODE (decl) == OVERLOAD || (flags & PUSH_USING))
a06d48ef
JM
1085 /* We must put the OVERLOAD into a TREE_LIST since the
1086 TREE_CHAIN of an OVERLOAD is already used. Similarly for
1087 decls that got here through a using-declaration. */
1088 decl = build_tree_list (NULL_TREE, decl);
1089
f181d4ae
MM
1090 /* And put DECL on the list of things declared by the current
1091 binding level. */
cfe507be 1092 add_decl_to_level (decl, b);
f181d4ae
MM
1093}
1094
8f032717
MM
1095/* Bind DECL to ID in the class_binding_level. Returns nonzero if the
1096 binding was successful. */
f181d4ae 1097
8f032717 1098int
f181d4ae
MM
1099push_class_binding (id, decl)
1100 tree id;
1101 tree decl;
1102{
8f032717
MM
1103 int result = 1;
1104 tree binding = IDENTIFIER_BINDING (id);
1105 tree context;
1106
1107 /* Note that we declared this value so that we can issue an error if
1108 this an illegal redeclaration of a name already used for some
1109 other purpose. */
1110 note_name_declared_in_class (id, decl);
1111
1112 if (binding && BINDING_LEVEL (binding) == class_binding_level)
d8f8dca1 1113 /* Supplement the existing binding. */
8f032717 1114 result = add_binding (id, decl);
d8f8dca1
MM
1115 else
1116 /* Create a new binding. */
1117 push_binding (id, decl, class_binding_level);
1118
1119 /* Update the IDENTIFIER_CLASS_VALUE for this ID to be the
1120 class-level declaration. Note that we do not use DECL here
1121 because of the possibility of the `struct stat' hack; if DECL is
1122 a class-name or enum-name we might prefer a field-name, or some
1123 such. */
1124 IDENTIFIER_CLASS_VALUE (id) = BINDING_VALUE (IDENTIFIER_BINDING (id));
8f032717
MM
1125
1126 /* If this is a binding from a base class, mark it as such. */
1127 binding = IDENTIFIER_BINDING (id);
1128 if (BINDING_VALUE (binding) == decl && TREE_CODE (decl) != TREE_LIST)
1129 {
280f9385
MM
1130 /* Any implicit typename must be from a base-class. The
1131 context for an implicit typename declaration is always
1132 the derived class in which the lookup was done, so the checks
1133 based on the context of DECL below will not trigger. */
83233dca 1134 if (IMPLICIT_TYPENAME_TYPE_DECL_P (decl))
280f9385 1135 INHERITED_VALUE_BINDING_P (binding) = 1;
8f032717
MM
1136 else
1137 {
280f9385 1138 if (TREE_CODE (decl) == OVERLOAD)
4f1c5b7d 1139 context = CP_DECL_CONTEXT (OVL_CURRENT (decl));
280f9385
MM
1140 else
1141 {
2f939d94 1142 my_friendly_assert (DECL_P (decl), 0);
55de1b66 1143 context = context_for_name_lookup (decl);
280f9385 1144 }
8f032717 1145
280f9385
MM
1146 if (is_properly_derived_from (current_class_type, context))
1147 INHERITED_VALUE_BINDING_P (binding) = 1;
1148 else
1149 INHERITED_VALUE_BINDING_P (binding) = 0;
1150 }
8f032717
MM
1151 }
1152 else if (BINDING_VALUE (binding) == decl)
1153 /* We only encounter a TREE_LIST when push_class_decls detects an
1154 ambiguity. Such an ambiguity can be overridden by a definition
1155 in this class. */
1156 INHERITED_VALUE_BINDING_P (binding) = 1;
1157
1158 return result;
f181d4ae
MM
1159}
1160
d8f8dca1
MM
1161/* Remove the binding for DECL which should be the innermost binding
1162 for ID. */
f181d4ae 1163
68642fb6
UD
1164static void
1165pop_binding (id, decl)
f181d4ae 1166 tree id;
d8f8dca1 1167 tree decl;
f181d4ae
MM
1168{
1169 tree binding;
68642fb6 1170
f181d4ae
MM
1171 if (id == NULL_TREE)
1172 /* It's easiest to write the loops that call this function without
1173 checking whether or not the entities involved have names. We
1174 get here for such an entity. */
1175 return;
1176
d8f8dca1 1177 /* Get the innermost binding for ID. */
f181d4ae 1178 binding = IDENTIFIER_BINDING (id);
f181d4ae 1179
d8f8dca1
MM
1180 /* The name should be bound. */
1181 my_friendly_assert (binding != NULL_TREE, 0);
1182
1183 /* The DECL will be either the ordinary binding or the type
1184 binding for this identifier. Remove that binding. */
1185 if (BINDING_VALUE (binding) == decl)
1186 BINDING_VALUE (binding) = NULL_TREE;
1187 else if (BINDING_TYPE (binding) == decl)
1188 BINDING_TYPE (binding) = NULL_TREE;
1189 else
1190 my_friendly_abort (0);
1191
1192 if (!BINDING_VALUE (binding) && !BINDING_TYPE (binding))
4890c2f4
MM
1193 {
1194 /* We're completely done with the innermost binding for this
1195 identifier. Unhook it from the list of bindings. */
1196 IDENTIFIER_BINDING (id) = TREE_CHAIN (binding);
1197
1198 /* Add it to the free list. */
1199 TREE_CHAIN (binding) = free_bindings;
1200 free_bindings = binding;
1201
1202 /* Clear the BINDING_LEVEL so the garbage collector doesn't walk
1203 it. */
1204 BINDING_LEVEL (binding) = NULL;
1205 }
f181d4ae
MM
1206}
1207
acef433b
MM
1208/* When a label goes out of scope, check to see if that label was used
1209 in a valid manner, and issue any appropriate warnings or errors. */
1210
1211static void
6625cdb5
JM
1212pop_label (label, old_value)
1213 tree label;
1214 tree old_value;
acef433b 1215{
88848bde 1216 if (!processing_template_decl && doing_semantic_analysis_p ())
acef433b 1217 {
88848bde
MM
1218 if (DECL_INITIAL (label) == NULL_TREE)
1219 {
1220 cp_error_at ("label `%D' used but not defined", label);
1221 /* Avoid crashing later. */
1222 define_label (input_filename, 1, DECL_NAME (label));
1223 }
078721e1 1224 else if (warn_unused_label && !TREE_USED (label))
88848bde 1225 cp_warning_at ("label `%D' defined but not used", label);
acef433b 1226 }
acef433b 1227
6625cdb5 1228 SET_IDENTIFIER_LABEL_VALUE (DECL_NAME (label), old_value);
acef433b
MM
1229}
1230
0811ea8f 1231/* At the end of a function, all labels declared within the function
68642fb6 1232 go out of scope. BLOCK is the top-level block for the
acef433b
MM
1233 function. */
1234
1235static void
1236pop_labels (block)
1237 tree block;
1238{
6625cdb5 1239 struct named_label_list *link;
acef433b
MM
1240
1241 /* Clear out the definitions of all label names, since their scopes
1242 end here. */
6625cdb5 1243 for (link = named_labels; link; link = link->next)
acef433b 1244 {
6625cdb5 1245 pop_label (link->label_decl, link->old_value);
acef433b
MM
1246 /* Put the labels into the "variables" of the top-level block,
1247 so debugger can see them. */
6625cdb5
JM
1248 TREE_CHAIN (link->label_decl) = BLOCK_VARS (block);
1249 BLOCK_VARS (block) = link->label_decl;
acef433b
MM
1250 }
1251
6625cdb5 1252 named_labels = NULL;
acef433b
MM
1253}
1254
8d08fdba
MS
1255/* Exit a binding level.
1256 Pop the level off, and restore the state of the identifier-decl mappings
1257 that were in effect when this level was entered.
1258
1259 If KEEP == 1, this level had explicit declarations, so
1260 and create a "block" (a BLOCK node) for the level
1261 to record its declarations and subblocks for symbol table output.
1262
8d08fdba
MS
1263 If FUNCTIONBODY is nonzero, this level is the body of a function,
1264 so create a block as if KEEP were set and also clear out all
1265 label names.
1266
1267 If REVERSE is nonzero, reverse the order of decls before putting
1268 them into the BLOCK. */
1269
1270tree
1271poplevel (keep, reverse, functionbody)
1272 int keep;
1273 int reverse;
1274 int functionbody;
1275{
1276 register tree link;
1277 /* The chain of decls was accumulated in reverse order.
1278 Put it into forward order, just for cleanliness. */
1279 tree decls;
1280 int tmp = functionbody;
b35d4555
MM
1281 int real_functionbody;
1282 tree tags;
1283 tree subblocks;
8d08fdba
MS
1284 tree block = NULL_TREE;
1285 tree decl;
f181d4ae
MM
1286 int leaving_for_scope;
1287
01d939e8 1288 if (cfun && !doing_semantic_analysis_p ())
b35d4555
MM
1289 return NULL_TREE;
1290
273a708f
MM
1291 my_friendly_assert (current_binding_level->parm_flag != 2,
1292 19990916);
b74a0560 1293
b35d4555
MM
1294 real_functionbody = (current_binding_level->keep == 2
1295 ? ((functionbody = 0), tmp) : functionbody);
1296 tags = functionbody >= 0 ? current_binding_level->tags : 0;
1297 subblocks = functionbody >= 0 ? current_binding_level->blocks : 0;
1298
b74a0560
MM
1299 my_friendly_assert (!current_binding_level->class_shadowed,
1300 19990414);
8d08fdba 1301
536333d4
MM
1302 /* We used to use KEEP == 2 to indicate that the new block should go
1303 at the beginning of the list of blocks at this binding level,
1304 rather than the end. This hack is no longer used. */
1305 my_friendly_assert (keep == 0 || keep == 1, 0);
1306
8d08fdba
MS
1307 GNU_xref_end_scope ((HOST_WIDE_INT) current_binding_level,
1308 (HOST_WIDE_INT) current_binding_level->level_chain,
1309 current_binding_level->parm_flag,
5566b478 1310 current_binding_level->keep);
8d08fdba
MS
1311
1312 if (current_binding_level->keep == 1)
1313 keep = 1;
1314
6625cdb5
JM
1315 /* Any uses of undefined labels, and any defined labels, now operate
1316 under constraints of next binding contour. */
1317 if (cfun && !functionbody)
1318 {
1319 struct binding_level *level_chain;
1320 level_chain = current_binding_level->level_chain;
1321 if (level_chain)
1322 {
1323 struct named_label_use_list *uses;
1324 struct named_label_list *labels;
1325 for (labels = named_labels; labels; labels = labels->next)
1326 if (labels->binding_level == current_binding_level)
1327 {
1328 tree decl;
1329 if (current_binding_level->eh_region)
1330 labels->eh_region = 1;
1331 for (decl = labels->names_in_scope; decl;
1332 decl = TREE_CHAIN (decl))
1333 if (decl_jump_unsafe (decl))
1334 labels->bad_decls = tree_cons (NULL_TREE, decl,
1335 labels->bad_decls);
1336 labels->binding_level = level_chain;
1337 labels->names_in_scope = level_chain->names;
1338 }
1339
1340 for (uses = named_label_uses; uses; uses = uses->next)
1341 if (uses->binding_level == current_binding_level)
1342 {
1343 uses->binding_level = level_chain;
1344 uses->names_in_scope = level_chain->names;
1345 }
1346 }
1347 }
1348
8d08fdba
MS
1349 /* Get the decls in the order they were written.
1350 Usually current_binding_level->names is in reverse order.
1351 But parameter decls were previously put in forward order. */
1352
1353 if (reverse)
1354 current_binding_level->names
1355 = decls = nreverse (current_binding_level->names);
1356 else
1357 decls = current_binding_level->names;
1358
1359 /* Output any nested inline functions within this block
1360 if they weren't already output. */
8d08fdba
MS
1361 for (decl = decls; decl; decl = TREE_CHAIN (decl))
1362 if (TREE_CODE (decl) == FUNCTION_DECL
1363 && ! TREE_ASM_WRITTEN (decl)
1364 && DECL_INITIAL (decl) != NULL_TREE
6060a796
MS
1365 && TREE_ADDRESSABLE (decl)
1366 && decl_function_context (decl) == current_function_decl)
8d08fdba
MS
1367 {
1368 /* If this decl was copied from a file-scope decl
1369 on account of a block-scope extern decl,
1370 propagate TREE_ADDRESSABLE to the file-scope decl. */
1371 if (DECL_ABSTRACT_ORIGIN (decl) != NULL_TREE)
1372 TREE_ADDRESSABLE (DECL_ABSTRACT_ORIGIN (decl)) = 1;
1373 else
1374 {
1375 push_function_context ();
1376 output_inline_function (decl);
1377 pop_function_context ();
1378 }
1379 }
1380
d9b2d9da
MM
1381 /* When not in function-at-a-time mode, expand_end_bindings will
1382 warn about unused variables. But, in function-at-a-time mode
1383 expand_end_bindings is not passed the list of variables in the
1384 current scope, and therefore no warning is emitted. So, we
1385 explicitly warn here. */
1386 if (!processing_template_decl)
1387 warn_about_unused_variables (getdecls ());
1388
8d08fdba
MS
1389 /* If there were any declarations or structure tags in that level,
1390 or if this level is a function body,
1391 create a BLOCK to record them for the life of this function. */
8d08fdba 1392 block = NULL_TREE;
f444e36b 1393 if (keep == 1 || functionbody)
8d08fdba
MS
1394 block = make_node (BLOCK);
1395 if (block != NULL_TREE)
1396 {
f444e36b
MM
1397 BLOCK_VARS (block) = decls;
1398 BLOCK_SUBBLOCKS (block) = subblocks;
8d08fdba
MS
1399 }
1400
1401 /* In each subblock, record that this is its superior. */
8d08fdba
MS
1402 if (keep >= 0)
1403 for (link = subblocks; link; link = TREE_CHAIN (link))
1404 BLOCK_SUPERCONTEXT (link) = block;
1405
f181d4ae
MM
1406 /* We still support the old for-scope rules, whereby the variables
1407 in a for-init statement were in scope after the for-statement
1408 ended. We only use the new rules in flag_new_for_scope is
1409 nonzero. */
68642fb6 1410 leaving_for_scope
f181d4ae
MM
1411 = current_binding_level->is_for_scope && flag_new_for_scope == 1;
1412
1413 /* Remove declarations for all the DECLs in this level. */
1414 for (link = decls; link; link = TREE_CHAIN (link))
1415 {
c3783399
NS
1416 if (leaving_for_scope && TREE_CODE (link) == VAR_DECL
1417 && DECL_NAME (link))
f181d4ae 1418 {
68642fb6 1419 tree outer_binding
f181d4ae
MM
1420 = TREE_CHAIN (IDENTIFIER_BINDING (DECL_NAME (link)));
1421 tree ns_binding;
1422
1423 if (!outer_binding)
1424 ns_binding = IDENTIFIER_NAMESPACE_VALUE (DECL_NAME (link));
c7dda1e3
MM
1425 else
1426 ns_binding = NULL_TREE;
1427
68642fb6
UD
1428 if (outer_binding
1429 && (BINDING_LEVEL (outer_binding)
f181d4ae
MM
1430 == current_binding_level->level_chain))
1431 /* We have something like:
68642fb6 1432
f181d4ae
MM
1433 int i;
1434 for (int i; ;);
68642fb6 1435
f181d4ae
MM
1436 and we are leaving the `for' scope. There's no reason to
1437 keep the binding of the inner `i' in this case. */
d8f8dca1 1438 pop_binding (DECL_NAME (link), link);
68642fb6
UD
1439 else if ((outer_binding
1440 && (TREE_CODE (BINDING_VALUE (outer_binding))
f181d4ae 1441 == TYPE_DECL))
68642fb6 1442 || (ns_binding
f181d4ae
MM
1443 && TREE_CODE (ns_binding) == TYPE_DECL))
1444 /* Here, we have something like:
1445
1446 typedef int I;
1447
1448 void f () {
1449 for (int I; ;);
1450 }
1451
1452 We must pop the for-scope binding so we know what's a
1453 type and what isn't. */
d8f8dca1 1454 pop_binding (DECL_NAME (link), link);
e76a2646 1455 else
e76a2646 1456 {
f181d4ae
MM
1457 /* Mark this VAR_DECL as dead so that we can tell we left it
1458 there only for backward compatibility. */
1459 DECL_DEAD_FOR_LOCAL (link) = 1;
68642fb6 1460
f181d4ae
MM
1461 /* Keep track of what should of have happenned when we
1462 popped the binding. */
1463 if (outer_binding && BINDING_VALUE (outer_binding))
68642fb6 1464 DECL_SHADOWED_FOR_VAR (link)
f181d4ae
MM
1465 = BINDING_VALUE (outer_binding);
1466
1467 /* Add it to the list of dead variables in the next
1468 outermost binding to that we can remove these when we
1469 leave that binding. */
1470 current_binding_level->level_chain->dead_vars_from_for
1471 = tree_cons (NULL_TREE, link,
1472 current_binding_level->level_chain->
1473 dead_vars_from_for);
1474
1475 /* Although we don't pop the CPLUS_BINDING, we do clear
1476 its BINDING_LEVEL since the level is going away now. */
1477 BINDING_LEVEL (IDENTIFIER_BINDING (DECL_NAME (link)))
1478 = 0;
e76a2646 1479 }
2ee887f2 1480 }
68642fb6 1481 else
8d6e462b 1482 {
f181d4ae 1483 /* Remove the binding. */
0034cf72
JM
1484 decl = link;
1485 if (TREE_CODE (decl) == TREE_LIST)
1486 decl = TREE_VALUE (decl);
2f939d94 1487 if (DECL_P (decl))
0034cf72
JM
1488 pop_binding (DECL_NAME (decl), decl);
1489 else if (TREE_CODE (decl) == OVERLOAD)
1490 pop_binding (DECL_NAME (OVL_FUNCTION (decl)), decl);
68642fb6 1491 else
f181d4ae 1492 my_friendly_abort (0);
8d08fdba 1493 }
f181d4ae 1494 }
8d08fdba 1495
f181d4ae
MM
1496 /* Remove declarations for any `for' variables from inner scopes
1497 that we kept around. */
1498 for (link = current_binding_level->dead_vars_from_for;
1499 link; link = TREE_CHAIN (link))
d8f8dca1 1500 pop_binding (DECL_NAME (TREE_VALUE (link)), TREE_VALUE (link));
2ee887f2 1501
f181d4ae
MM
1502 /* Restore the IDENTIFIER_TYPE_VALUEs. */
1503 for (link = current_binding_level->type_shadowed;
1504 link; link = TREE_CHAIN (link))
1505 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (link), TREE_VALUE (link));
acef433b
MM
1506
1507 /* Restore the IDENTIFIER_LABEL_VALUEs for local labels. */
1508 for (link = current_binding_level->shadowed_labels;
68642fb6 1509 link;
acef433b 1510 link = TREE_CHAIN (link))
6625cdb5 1511 pop_label (TREE_VALUE (link), TREE_PURPOSE (link));
acef433b 1512
f181d4ae
MM
1513 /* There may be OVERLOADs (wrapped in TREE_LISTs) on the BLOCK_VARs
1514 list if a `using' declaration put them there. The debugging
1515 back-ends won't understand OVERLOAD, so we remove them here.
1516 Because the BLOCK_VARS are (temporarily) shared with
1517 CURRENT_BINDING_LEVEL->NAMES we must do this fixup after we have
1518 popped all the bindings. */
1519 if (block)
1520 {
1521 tree* d;
8d6e462b 1522
a06d48ef
JM
1523 for (d = &BLOCK_VARS (block); *d; )
1524 {
1525 if (TREE_CODE (*d) == TREE_LIST)
1526 *d = TREE_CHAIN (*d);
1527 else
1528 d = &TREE_CHAIN (*d);
1529 }
8d6e462b 1530 }
8d08fdba
MS
1531
1532 /* If the level being exited is the top level of a function,
1533 check over all the labels. */
8d08fdba
MS
1534 if (functionbody)
1535 {
acef433b
MM
1536 /* Since this is the top level block of a function, the vars are
1537 the function's parameters. Don't leave them in the BLOCK
1538 because they are found in the FUNCTION_DECL instead. */
8d08fdba 1539 BLOCK_VARS (block) = 0;
acef433b 1540 pop_labels (block);
8d08fdba
MS
1541 }
1542
8d08fdba
MS
1543 tmp = current_binding_level->keep;
1544
1545 pop_binding_level ();
1546 if (functionbody)
1547 DECL_INITIAL (current_function_decl) = block;
1548 else if (block)
f444e36b
MM
1549 current_binding_level->blocks
1550 = chainon (current_binding_level->blocks, block);
1551
8d08fdba
MS
1552 /* If we did not make a block for the level just exited,
1553 any blocks made for inner levels
1554 (since they cannot be recorded as subblocks in that level)
1555 must be carried forward so they will later become subblocks
1556 of something else. */
1557 else if (subblocks)
536333d4
MM
1558 current_binding_level->blocks
1559 = chainon (current_binding_level->blocks, subblocks);
8d08fdba 1560
d9b2d9da
MM
1561 /* Each and every BLOCK node created here in `poplevel' is important
1562 (e.g. for proper debugging information) so if we created one
1563 earlier, mark it as "used". */
1564 if (block)
1565 TREE_USED (block) = 1;
1566
8d08fdba 1567 /* Take care of compiler's internal binding structures. */
a4443a08 1568 if (tmp == 2)
8d08fdba 1569 {
d9b2d9da
MM
1570 tree scope_stmts;
1571
68642fb6 1572 scope_stmts
d9b2d9da 1573 = add_scope_stmt (/*begin_p=*/0, /*partial_p=*/1);
8d08fdba 1574 if (block)
d9b2d9da
MM
1575 {
1576 SCOPE_STMT_BLOCK (TREE_PURPOSE (scope_stmts)) = block;
1577 SCOPE_STMT_BLOCK (TREE_VALUE (scope_stmts)) = block;
1578 }
1579
8f471b0d 1580 block = poplevel (keep, reverse, functionbody);
8d08fdba
MS
1581 }
1582
8d08fdba
MS
1583 return block;
1584}
1585
1586/* Delete the node BLOCK from the current binding level.
1587 This is used for the block inside a stmt expr ({...})
1588 so that the block can be reinserted where appropriate. */
1589
1590void
1591delete_block (block)
1592 tree block;
1593{
1594 tree t;
1595 if (current_binding_level->blocks == block)
1596 current_binding_level->blocks = TREE_CHAIN (block);
1597 for (t = current_binding_level->blocks; t;)
1598 {
1599 if (TREE_CHAIN (t) == block)
1600 TREE_CHAIN (t) = TREE_CHAIN (block);
1601 else
1602 t = TREE_CHAIN (t);
1603 }
1604 TREE_CHAIN (block) = NULL_TREE;
1605 /* Clear TREE_USED which is always set by poplevel.
1606 The flag is set again if insert_block is called. */
1607 TREE_USED (block) = 0;
1608}
1609
1610/* Insert BLOCK at the end of the list of subblocks of the
1611 current binding level. This is used when a BIND_EXPR is expanded,
1612 to handle the BLOCK node inside the BIND_EXPR. */
1613
1614void
1615insert_block (block)
1616 tree block;
1617{
1618 TREE_USED (block) = 1;
1619 current_binding_level->blocks
1620 = chainon (current_binding_level->blocks, block);
1621}
1622
8d08fdba
MS
1623/* Set the BLOCK node for the innermost scope
1624 (the one we are currently in). */
1625
1626void
1627set_block (block)
f444e36b 1628 tree block ATTRIBUTE_UNUSED;
8d08fdba 1629{
f444e36b
MM
1630 /* The RTL expansion machinery requires us to provide this callback,
1631 but it is not applicable in function-at-a-time mode. */
1632 my_friendly_assert (cfun && !doing_semantic_analysis_p (), 20000911);
8d08fdba
MS
1633}
1634
1635/* Do a pushlevel for class declarations. */
e92cc029 1636
8d08fdba
MS
1637void
1638pushlevel_class ()
1639{
1640 register struct binding_level *newlevel;
1641
1642 /* Reuse or create a struct for this binding level. */
1643#if defined(DEBUG_CP_BINDING_LEVELS)
1644 if (0)
1645#else /* !defined(DEBUG_CP_BINDING_LEVELS) */
1646 if (free_binding_level)
1647#endif /* !defined(DEBUG_CP_BINDING_LEVELS) */
1648 {
1649 newlevel = free_binding_level;
1650 free_binding_level = free_binding_level->level_chain;
1651 }
1652 else
f181d4ae 1653 newlevel = make_binding_level ();
8d08fdba
MS
1654
1655#if defined(DEBUG_CP_BINDING_LEVELS)
1656 is_class_level = 1;
1657#endif /* defined(DEBUG_CP_BINDING_LEVELS) */
1658
1659 push_binding_level (newlevel, 0, 0);
1660
8d08fdba
MS
1661 class_binding_level = current_binding_level;
1662 class_binding_level->parm_flag = 2;
70adf8a9 1663 class_binding_level->this_class = current_class_type;
8d08fdba
MS
1664}
1665
b74a0560 1666/* ...and a poplevel for class declarations. */
e92cc029 1667
273a708f 1668void
b74a0560 1669poplevel_class ()
8d08fdba
MS
1670{
1671 register struct binding_level *level = class_binding_level;
8d08fdba
MS
1672 tree shadowed;
1673
1674 my_friendly_assert (level != 0, 354);
68642fb6 1675
8d08fdba 1676 /* If we're leaving a toplevel class, don't bother to do the setting
ddd5a7c1 1677 of IDENTIFIER_CLASS_VALUE to NULL_TREE, since first of all this slot
8d08fdba 1678 shouldn't even be used when current_class_type isn't set, and second,
ddd5a7c1 1679 if we don't touch it here, we're able to use the cache effect if the
8d08fdba 1680 next time we're entering a class scope, it is the same class. */
b74a0560 1681 if (current_class_depth != 1)
8f032717
MM
1682 {
1683 struct binding_level* b;
1684
1685 /* Clear out our IDENTIFIER_CLASS_VALUEs. */
1686 for (shadowed = level->class_shadowed;
1687 shadowed;
1688 shadowed = TREE_CHAIN (shadowed))
1689 IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (shadowed)) = NULL_TREE;
68642fb6 1690
8f032717
MM
1691 /* Find the next enclosing class, and recreate
1692 IDENTIFIER_CLASS_VALUEs appropriate for that class. */
1693 b = level->level_chain;
1694 while (b && b->parm_flag != 2)
1695 b = b->level_chain;
1696
1697 if (b)
68642fb6
UD
1698 for (shadowed = b->class_shadowed;
1699 shadowed;
8f032717
MM
1700 shadowed = TREE_CHAIN (shadowed))
1701 {
1702 tree t;
1703
1704 t = IDENTIFIER_BINDING (TREE_PURPOSE (shadowed));
1705 while (t && BINDING_LEVEL (t) != b)
1706 t = TREE_CHAIN (t);
68642fb6 1707
8f032717 1708 if (t)
68642fb6 1709 IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (shadowed))
8f032717
MM
1710 = BINDING_VALUE (t);
1711 }
1712 }
8d08fdba
MS
1713 else
1714 /* Remember to save what IDENTIFIER's were bound in this scope so we
1715 can recover from cache misses. */
e76a2646
MS
1716 {
1717 previous_class_type = current_class_type;
1718 previous_class_values = class_binding_level->class_shadowed;
1719 }
8d08fdba
MS
1720 for (shadowed = level->type_shadowed;
1721 shadowed;
1722 shadowed = TREE_CHAIN (shadowed))
2c73f9f5 1723 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (shadowed), TREE_VALUE (shadowed));
8d08fdba 1724
f181d4ae 1725 /* Remove the bindings for all of the class-level declarations. */
68642fb6
UD
1726 for (shadowed = level->class_shadowed;
1727 shadowed;
f181d4ae 1728 shadowed = TREE_CHAIN (shadowed))
d8f8dca1 1729 pop_binding (TREE_PURPOSE (shadowed), TREE_TYPE (shadowed));
f181d4ae 1730
8d08fdba
MS
1731 GNU_xref_end_scope ((HOST_WIDE_INT) class_binding_level,
1732 (HOST_WIDE_INT) class_binding_level->level_chain,
1733 class_binding_level->parm_flag,
5566b478 1734 class_binding_level->keep);
8d08fdba 1735
38e01259 1736 /* Now, pop out of the binding level which we created up in the
8d08fdba
MS
1737 `pushlevel_class' routine. */
1738#if defined(DEBUG_CP_BINDING_LEVELS)
1739 is_class_level = 1;
1740#endif /* defined(DEBUG_CP_BINDING_LEVELS) */
1741
1742 pop_binding_level ();
8d08fdba 1743}
8f032717
MM
1744
1745/* We are entering the scope of a class. Clear IDENTIFIER_CLASS_VALUE
1746 for any names in enclosing classes. */
1747
1748void
1749clear_identifier_class_values ()
1750{
1751 tree t;
1752
1753 if (!class_binding_level)
1754 return;
1755
1756 for (t = class_binding_level->class_shadowed;
1757 t;
1758 t = TREE_CHAIN (t))
1759 IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (t)) = NULL_TREE;
1760}
1761
0aafb128
MM
1762/* Returns non-zero if T is a virtual function table. */
1763
1764int
1765vtable_decl_p (t, data)
1766 tree t;
1767 void *data ATTRIBUTE_UNUSED;
1768{
1769 return (TREE_CODE (t) == VAR_DECL && DECL_VIRTUAL_P (t));
1770}
1771
1772/* Returns non-zero if T is a TYPE_DECL for a type with virtual
1773 functions. */
1774
1775int
1776vtype_decl_p (t, data)
1777 tree t;
1778 void *data ATTRIBUTE_UNUSED;
1779{
1780 return (TREE_CODE (t) == TYPE_DECL
34249844
NS
1781 && TREE_CODE (TREE_TYPE (t)) == RECORD_TYPE
1782 && TYPE_POLYMORPHIC_P (TREE_TYPE (t)));
0aafb128
MM
1783}
1784
f71f87f9
MM
1785/* Return the declarations that are members of the namespace NS. */
1786
1787tree
1788cp_namespace_decls (ns)
1789 tree ns;
1790{
1791 return NAMESPACE_LEVEL (ns)->names;
1792}
1793
0aafb128
MM
1794/* Walk all the namespaces contained NAMESPACE, including NAMESPACE
1795 itself, calling F for each. The DATA is passed to F as well. */
1796
1797static int
1798walk_namespaces_r (namespace, f, data)
1799 tree namespace;
1800 walk_namespaces_fn f;
1801 void *data;
1802{
1803 tree current;
1804 int result = 0;
1805
1806 result |= (*f) (namespace, data);
1807
f71f87f9 1808 for (current = cp_namespace_decls (namespace);
0aafb128
MM
1809 current;
1810 current = TREE_CHAIN (current))
1811 {
1812 if (TREE_CODE (current) != NAMESPACE_DECL
1813 || DECL_NAMESPACE_ALIAS (current))
1814 continue;
1815 if (!DECL_LANG_SPECIFIC (current))
1816 {
1817 /* Hmm. std. */
6bcedb4e 1818 my_friendly_assert (current == fake_std_node, 393);
0aafb128
MM
1819 continue;
1820 }
1821
1822 /* We found a namespace. */
1823 result |= walk_namespaces_r (current, f, data);
1824 }
1825
1826 return result;
1827}
1828
1829/* Walk all the namespaces, calling F for each. The DATA is passed to
1830 F as well. */
1831
1832int
1833walk_namespaces (f, data)
1834 walk_namespaces_fn f;
1835 void *data;
1836{
1837 return walk_namespaces_r (global_namespace, f, data);
1838}
1839
1840struct walk_globals_data {
1841 walk_globals_pred p;
1842 walk_globals_fn f;
1843 void *data;
1844};
1845
1846/* Walk the global declarations in NAMESPACE. Whenever one is found
1847 for which P returns non-zero, call F with its address. If any call
1848 to F returns a non-zero value, return a non-zero value. */
1849
68642fb6 1850static int
0aafb128
MM
1851walk_globals_r (namespace, data)
1852 tree namespace;
1853 void *data;
1854{
1855 struct walk_globals_data* wgd = (struct walk_globals_data *) data;
1856 walk_globals_pred p = wgd->p;
1857 walk_globals_fn f = wgd->f;
1858 void *d = wgd->data;
1859 tree *t;
1860 int result = 0;
1861
1862 t = &NAMESPACE_LEVEL (namespace)->names;
1863
1864 while (*t)
1865 {
1866 tree glbl = *t;
1867
1868 if ((*p) (glbl, d))
1869 result |= (*f) (t, d);
1870
1871 /* If F changed *T, then *T still points at the next item to
1872 examine. */
1873 if (*t == glbl)
1874 t = &TREE_CHAIN (*t);
1875 }
1876
1877 return result;
1878}
1879
1880/* Walk the global declarations. Whenever one is found for which P
1881 returns non-zero, call F with its address. If any call to F
1882 returns a non-zero value, return a non-zero value. */
1883
1884int
1885walk_globals (p, f, data)
1886 walk_globals_pred p;
1887 walk_globals_fn f;
1888 void *data;
1889{
1890 struct walk_globals_data wgd;
1891 wgd.p = p;
1892 wgd.f = f;
1893 wgd.data = data;
1894
1895 return walk_namespaces (walk_globals_r, &wgd);
1896}
1897
1898/* Call wrapup_globals_declarations for the globals in NAMESPACE. If
1899 DATA is non-NULL, this is the last time we will call
1900 wrapup_global_declarations for this NAMESPACE. */
1901
1902int
1903wrapup_globals_for_namespace (namespace, data)
1904 tree namespace;
1905 void *data;
1906{
f71f87f9 1907 tree globals = cp_namespace_decls (namespace);
0aafb128
MM
1908 int len = list_length (globals);
1909 tree *vec = (tree *) alloca (sizeof (tree) * len);
1910 int i;
0352cfc8 1911 int result;
0aafb128
MM
1912 tree decl;
1913 int last_time = (data != 0);
1914
1915 if (last_time && namespace == global_namespace)
1916 /* Let compile_file handle the global namespace. */
1917 return 0;
1918
1919 /* Process the decls in reverse order--earliest first.
1920 Put them into VEC from back to front, then take out from front. */
0aafb128 1921 for (i = 0, decl = globals; i < len; i++, decl = TREE_CHAIN (decl))
62136084 1922 vec[len - i - 1] = decl;
68642fb6 1923
0352cfc8
MM
1924 if (last_time)
1925 {
1926 check_global_declarations (vec, len);
1927 return 0;
1928 }
1929
1930 /* Temporarily mark vtables as external. That prevents
1931 wrapup_global_declarations from writing them out; we must process
1932 them ourselves in finish_vtable_vardecl. */
1933 for (i = 0; i < len; ++i)
91f2aa22 1934 if (vtable_decl_p (vec[i], /*data=*/0) && !DECL_EXTERNAL (vec[i]))
0352cfc8
MM
1935 {
1936 DECL_NOT_REALLY_EXTERN (vec[i]) = 1;
1937 DECL_EXTERNAL (vec[i]) = 1;
1938 }
0aafb128 1939
0352cfc8
MM
1940 /* Write out any globals that need to be output. */
1941 result = wrapup_global_declarations (vec, len);
1942
1943 /* Undo the hack to DECL_EXTERNAL above. */
1944 for (i = 0; i < len; ++i)
1945 if (vtable_decl_p (vec[i], /*data=*/0)
1946 && DECL_NOT_REALLY_EXTERN (vec[i]))
1947 {
1948 DECL_NOT_REALLY_EXTERN (vec[i]) = 0;
1949 DECL_EXTERNAL (vec[i]) = 0;
1950 }
1951
1952 return result;
0aafb128
MM
1953}
1954
4519c0a8 1955\f
fc6af6e3
RH
1956/* Mark ARG (which is really a struct binding_level **) for GC. */
1957
4519c0a8
MM
1958static void
1959mark_binding_level (arg)
1960 void *arg;
1961{
1962 struct binding_level *lvl = *(struct binding_level **)arg;
1963
6625cdb5 1964 for (; lvl; lvl = lvl->level_chain)
4519c0a8
MM
1965 {
1966 ggc_mark_tree (lvl->names);
1967 ggc_mark_tree (lvl->tags);
1968 ggc_mark_tree (lvl->usings);
1969 ggc_mark_tree (lvl->using_directives);
1970 ggc_mark_tree (lvl->class_shadowed);
1971 ggc_mark_tree (lvl->type_shadowed);
1972 ggc_mark_tree (lvl->shadowed_labels);
1973 ggc_mark_tree (lvl->blocks);
70adf8a9 1974 ggc_mark_tree (lvl->this_class);
4519c0a8
MM
1975 ggc_mark_tree (lvl->incomplete);
1976 ggc_mark_tree (lvl->dead_vars_from_for);
6625cdb5
JM
1977 }
1978}
1979
1980static void
1981mark_named_label_lists (labs, uses)
1982 void *labs;
1983 void *uses;
1984{
1985 struct named_label_list *l = *(struct named_label_list **)labs;
1986 struct named_label_use_list *u = *(struct named_label_use_list **)uses;
4519c0a8 1987
6625cdb5
JM
1988 for (; l; l = l->next)
1989 {
1990 ggc_mark (l);
1991 mark_binding_level (l->binding_level);
1992 ggc_mark_tree (l->old_value);
1993 ggc_mark_tree (l->label_decl);
1994 ggc_mark_tree (l->bad_decls);
4519c0a8 1995 }
6625cdb5
JM
1996
1997 for (; u; u = u->next)
1998 ggc_mark (u);
4519c0a8 1999}
8d08fdba
MS
2000\f
2001/* For debugging. */
5566b478
MS
2002static int no_print_functions = 0;
2003static int no_print_builtins = 0;
8d08fdba
MS
2004
2005void
2006print_binding_level (lvl)
2007 struct binding_level *lvl;
2008{
2009 tree t;
2010 int i = 0, len;
2011 fprintf (stderr, " blocks=");
2012 fprintf (stderr, HOST_PTR_PRINTF, lvl->blocks);
2013 fprintf (stderr, " n_incomplete=%d parm_flag=%d keep=%d",
f30432d7 2014 list_length (lvl->incomplete), lvl->parm_flag, lvl->keep);
8d08fdba
MS
2015 if (lvl->tag_transparent)
2016 fprintf (stderr, " tag-transparent");
2017 if (lvl->more_cleanups_ok)
2018 fprintf (stderr, " more-cleanups-ok");
2019 if (lvl->have_cleanups)
2020 fprintf (stderr, " have-cleanups");
8d08fdba
MS
2021 fprintf (stderr, "\n");
2022 if (lvl->names)
2023 {
2024 fprintf (stderr, " names:\t");
2025 /* We can probably fit 3 names to a line? */
2026 for (t = lvl->names; t; t = TREE_CHAIN (t))
2027 {
68642fb6 2028 if (no_print_functions && (TREE_CODE (t) == FUNCTION_DECL))
8d08fdba
MS
2029 continue;
2030 if (no_print_builtins
fc378698
MS
2031 && (TREE_CODE (t) == TYPE_DECL)
2032 && (!strcmp (DECL_SOURCE_FILE (t),"<built-in>")))
8d08fdba
MS
2033 continue;
2034
2035 /* Function decls tend to have longer names. */
2036 if (TREE_CODE (t) == FUNCTION_DECL)
2037 len = 3;
2038 else
2039 len = 2;
2040 i += len;
2041 if (i > 6)
2042 {
2043 fprintf (stderr, "\n\t");
2044 i = len;
2045 }
2046 print_node_brief (stderr, "", t, 0);
bd6dd845 2047 if (t == error_mark_node)
8d08fdba
MS
2048 break;
2049 }
2050 if (i)
2051 fprintf (stderr, "\n");
2052 }
2053 if (lvl->tags)
2054 {
2055 fprintf (stderr, " tags:\t");
2056 i = 0;
2057 for (t = lvl->tags; t; t = TREE_CHAIN (t))
2058 {
2059 if (TREE_PURPOSE (t) == NULL_TREE)
2060 len = 3;
2061 else if (TREE_PURPOSE (t) == TYPE_IDENTIFIER (TREE_VALUE (t)))
2062 len = 2;
2063 else
2064 len = 4;
2065 i += len;
2066 if (i > 5)
2067 {
2068 fprintf (stderr, "\n\t");
2069 i = len;
2070 }
2071 if (TREE_PURPOSE (t) == NULL_TREE)
2072 {
2073 print_node_brief (stderr, "<unnamed-typedef", TREE_VALUE (t), 0);
2074 fprintf (stderr, ">");
2075 }
2076 else if (TREE_PURPOSE (t) == TYPE_IDENTIFIER (TREE_VALUE (t)))
2077 print_node_brief (stderr, "", TREE_VALUE (t), 0);
2078 else
2079 {
2080 print_node_brief (stderr, "<typedef", TREE_PURPOSE (t), 0);
2081 print_node_brief (stderr, "", TREE_VALUE (t), 0);
2082 fprintf (stderr, ">");
2083 }
2084 }
2085 if (i)
2086 fprintf (stderr, "\n");
2087 }
8d08fdba
MS
2088 if (lvl->class_shadowed)
2089 {
2090 fprintf (stderr, " class-shadowed:");
2091 for (t = lvl->class_shadowed; t; t = TREE_CHAIN (t))
2092 {
2093 fprintf (stderr, " %s ", IDENTIFIER_POINTER (TREE_PURPOSE (t)));
2094 }
2095 fprintf (stderr, "\n");
2096 }
2097 if (lvl->type_shadowed)
2098 {
2099 fprintf (stderr, " type-shadowed:");
2100 for (t = lvl->type_shadowed; t; t = TREE_CHAIN (t))
2101 {
8d08fdba 2102 fprintf (stderr, " %s ", IDENTIFIER_POINTER (TREE_PURPOSE (t)));
8d08fdba
MS
2103 }
2104 fprintf (stderr, "\n");
2105 }
2106}
2107
2108void
2109print_other_binding_stack (stack)
2110 struct binding_level *stack;
2111{
2112 struct binding_level *level;
2113 for (level = stack; level != global_binding_level; level = level->level_chain)
2114 {
2115 fprintf (stderr, "binding level ");
2116 fprintf (stderr, HOST_PTR_PRINTF, level);
2117 fprintf (stderr, "\n");
2118 print_binding_level (level);
2119 }
2120}
2121
2122void
2123print_binding_stack ()
2124{
2125 struct binding_level *b;
2126 fprintf (stderr, "current_binding_level=");
2127 fprintf (stderr, HOST_PTR_PRINTF, current_binding_level);
2128 fprintf (stderr, "\nclass_binding_level=");
2129 fprintf (stderr, HOST_PTR_PRINTF, class_binding_level);
2130 fprintf (stderr, "\nglobal_binding_level=");
2131 fprintf (stderr, HOST_PTR_PRINTF, global_binding_level);
2132 fprintf (stderr, "\n");
2133 if (class_binding_level)
2134 {
2135 for (b = class_binding_level; b; b = b->level_chain)
2136 if (b == current_binding_level)
2137 break;
2138 if (b)
2139 b = class_binding_level;
2140 else
2141 b = current_binding_level;
2142 }
2143 else
2144 b = current_binding_level;
2145 print_other_binding_stack (b);
2146 fprintf (stderr, "global:\n");
2147 print_binding_level (global_binding_level);
2148}
a9aedbc2 2149
2c73f9f5
ML
2150/* Namespace binding access routines: The namespace_bindings field of
2151 the identifier is polymorphic, with three possible values:
2152 NULL_TREE, a list of CPLUS_BINDINGS, or any other tree_node
2153 indicating the BINDING_VALUE of global_namespace. */
30394414 2154
2c73f9f5
ML
2155/* Check whether the a binding for the name to scope is known.
2156 Assumes that the bindings of the name are already a list
2157 of bindings. Returns the binding found, or NULL_TREE. */
2158
2159static tree
2160find_binding (name, scope)
30394414
JM
2161 tree name;
2162 tree scope;
2163{
2c73f9f5 2164 tree iter, prev = NULL_TREE;
3e3f722c
ML
2165
2166 scope = ORIGINAL_NAMESPACE (scope);
68642fb6 2167
30394414
JM
2168 for (iter = IDENTIFIER_NAMESPACE_BINDINGS (name); iter;
2169 iter = TREE_CHAIN (iter))
2170 {
2171 my_friendly_assert (TREE_CODE (iter) == CPLUS_BINDING, 374);
2172 if (BINDING_SCOPE (iter) == scope)
2c73f9f5 2173 {
cfe507be 2174 /* Move binding found to the front of the list, so
2c73f9f5
ML
2175 subsequent lookups will find it faster. */
2176 if (prev)
2177 {
2178 TREE_CHAIN (prev) = TREE_CHAIN (iter);
2179 TREE_CHAIN (iter) = IDENTIFIER_NAMESPACE_BINDINGS (name);
2180 IDENTIFIER_NAMESPACE_BINDINGS (name) = iter;
2181 }
2182 return iter;
2183 }
2184 prev = iter;
30394414 2185 }
2c73f9f5
ML
2186 return NULL_TREE;
2187}
2188
2189/* Always returns a binding for name in scope. If the
2190 namespace_bindings is not a list, convert it to one first.
2191 If no binding is found, make a new one. */
2192
2193tree
2194binding_for_name (name, scope)
2195 tree name;
2196 tree scope;
2197{
2198 tree b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2199 tree result;
3e3f722c
ML
2200
2201 scope = ORIGINAL_NAMESPACE (scope);
68642fb6 2202
2c73f9f5
ML
2203 if (b && TREE_CODE (b) != CPLUS_BINDING)
2204 {
2205 /* Get rid of optimization for global scope. */
2206 IDENTIFIER_NAMESPACE_BINDINGS (name) = NULL_TREE;
2207 BINDING_VALUE (binding_for_name (name, global_namespace)) = b;
2208 b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2209 }
2210 if (b && (result = find_binding (name, scope)))
2211 return result;
cd9f6678 2212 /* Not found, make a new one. */
2c73f9f5
ML
2213 result = make_node (CPLUS_BINDING);
2214 TREE_CHAIN (result) = b;
2215 IDENTIFIER_NAMESPACE_BINDINGS (name) = result;
2216 BINDING_SCOPE (result) = scope;
2217 BINDING_TYPE (result) = NULL_TREE;
2218 BINDING_VALUE (result) = NULL_TREE;
2c73f9f5
ML
2219 return result;
2220}
2221
2222/* Return the binding value for name in scope, considering that
2223 namespace_binding may or may not be a list of CPLUS_BINDINGS. */
2224
2225tree
2226namespace_binding (name, scope)
2227 tree name;
2228 tree scope;
2229{
2230 tree b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2231 if (b == NULL_TREE)
2232 return NULL_TREE;
cb0dbb9a
JM
2233 if (scope == NULL_TREE)
2234 scope = global_namespace;
2c73f9f5
ML
2235 if (TREE_CODE (b) != CPLUS_BINDING)
2236 return (scope == global_namespace) ? b : NULL_TREE;
2237 name = find_binding (name,scope);
2238 if (name == NULL_TREE)
2239 return name;
2240 return BINDING_VALUE (name);
2241}
2242
2243/* Set the binding value for name in scope. If modifying the binding
2244 of global_namespace is attempted, try to optimize it. */
2245
2246void
2247set_namespace_binding (name, scope, val)
2248 tree name;
2249 tree scope;
2250 tree val;
2251{
2252 tree b;
cb0dbb9a
JM
2253
2254 if (scope == NULL_TREE)
2255 scope = global_namespace;
68642fb6 2256
2c73f9f5
ML
2257 if (scope == global_namespace)
2258 {
2259 b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2260 if (b == NULL_TREE || TREE_CODE (b) != CPLUS_BINDING)
2261 {
2262 IDENTIFIER_NAMESPACE_BINDINGS (name) = val;
2263 return;
2264 }
2265 }
2266 b = binding_for_name (name, scope);
2267 BINDING_VALUE (b) = val;
30394414
JM
2268}
2269
dff6b454
RK
2270/* Push into the scope of the NAME namespace. If NAME is NULL_TREE, then we
2271 select a name that is unique to this compilation unit. */
e92cc029 2272
a9aedbc2
MS
2273void
2274push_namespace (name)
2275 tree name;
2276{
b370501f 2277 tree d = NULL_TREE;
30394414
JM
2278 int need_new = 1;
2279 int implicit_use = 0;
2c73f9f5 2280 int global = 0;
30394414
JM
2281 if (!global_namespace)
2282 {
2c73f9f5 2283 /* This must be ::. */
30394414 2284 my_friendly_assert (name == get_identifier ("::"), 377);
2c73f9f5 2285 global = 1;
30394414
JM
2286 }
2287 else if (!name)
2288 {
3ab52652
ML
2289 /* The name of anonymous namespace is unique for the translation
2290 unit. */
0c8feefe
MM
2291 if (!anonymous_namespace_name)
2292 anonymous_namespace_name = get_file_function_name ('N');
2293 name = anonymous_namespace_name;
3ab52652
ML
2294 d = IDENTIFIER_NAMESPACE_VALUE (name);
2295 if (d)
2296 /* Reopening anonymous namespace. */
2297 need_new = 0;
30394414 2298 implicit_use = 1;
2c73f9f5
ML
2299 }
2300 else if (current_namespace == global_namespace
6bcedb4e
MM
2301 && !flag_honor_std
2302 && name == std_identifier)
2c73f9f5 2303 {
6bcedb4e 2304 in_fake_std++;
2c73f9f5
ML
2305 return;
2306 }
30394414
JM
2307 else
2308 {
2c73f9f5 2309 /* Check whether this is an extended namespace definition. */
30394414
JM
2310 d = IDENTIFIER_NAMESPACE_VALUE (name);
2311 if (d != NULL_TREE && TREE_CODE (d) == NAMESPACE_DECL)
3e3f722c
ML
2312 {
2313 need_new = 0;
2314 if (DECL_NAMESPACE_ALIAS (d))
2315 {
8251199e 2316 cp_error ("namespace alias `%D' not allowed here, assuming `%D'",
3e3f722c
ML
2317 d, DECL_NAMESPACE_ALIAS (d));
2318 d = DECL_NAMESPACE_ALIAS (d);
2319 }
2320 }
30394414 2321 }
68642fb6 2322
30394414
JM
2323 if (need_new)
2324 {
2c73f9f5 2325 /* Make a new namespace, binding the name to it. */
6b57ac29 2326 d = build_lang_decl (NAMESPACE_DECL, name, void_type_node);
2c73f9f5
ML
2327 /* The global namespace is not pushed, and the global binding
2328 level is set elsewhere. */
2329 if (!global)
2330 {
40f1e342 2331 DECL_CONTEXT (d) = FROB_CONTEXT (current_namespace);
2c73f9f5
ML
2332 d = pushdecl (d);
2333 pushlevel (0);
2334 declare_namespace_level ();
2335 NAMESPACE_LEVEL (d) = current_binding_level;
2336 }
30394414 2337 }
2c73f9f5
ML
2338 else
2339 resume_binding_level (NAMESPACE_LEVEL (d));
2340
30394414
JM
2341 if (implicit_use)
2342 do_using_directive (d);
2c73f9f5 2343 /* Enter the name space. */
30394414 2344 current_namespace = d;
a9aedbc2
MS
2345}
2346
2347/* Pop from the scope of the current namespace. */
e92cc029 2348
a9aedbc2
MS
2349void
2350pop_namespace ()
2351{
2c73f9f5
ML
2352 if (current_namespace == global_namespace)
2353 {
6bcedb4e
MM
2354 my_friendly_assert (in_fake_std > 0, 980421);
2355 in_fake_std--;
2c73f9f5
ML
2356 return;
2357 }
cb0dbb9a 2358 current_namespace = CP_DECL_CONTEXT (current_namespace);
2c73f9f5
ML
2359 /* The binding level is not popped, as it might be re-opened later. */
2360 suspend_binding_level ();
2361}
a9aedbc2 2362
61fc8c9e
MM
2363/* Push into the scope of the namespace NS, even if it is deeply
2364 nested within another namespace. */
2365
2366void
2367push_nested_namespace (ns)
2368 tree ns;
2369{
2370 if (ns == global_namespace)
2371 push_to_top_level ();
2372 else
2373 {
2374 push_nested_namespace (CP_DECL_CONTEXT (ns));
2375 push_namespace (DECL_NAME (ns));
2376 }
2377}
2378
2379/* Pop back from the scope of the namespace NS, which was previously
2380 entered with push_nested_namespace. */
68642fb6 2381
61fc8c9e
MM
2382void
2383pop_nested_namespace (ns)
2384 tree ns;
2385{
2386 while (ns != global_namespace)
2387 {
2388 pop_namespace ();
2389 ns = CP_DECL_CONTEXT (ns);
2390 }
2391
2392 pop_from_top_level ();
2393}
2394
8d08fdba
MS
2395\f
2396/* Subroutines for reverting temporarily to top-level for instantiation
2397 of templates and such. We actually need to clear out the class- and
2398 local-value slots of all identifiers, so that only the global values
2399 are at all visible. Simply setting current_binding_level to the global
2400 scope isn't enough, because more binding levels may be pushed. */
9cd64686 2401struct saved_scope *scope_chain;
8d08fdba 2402
9cd64686 2403/* Mark ARG (which is really a struct saved_scope **) for GC. */
fc6af6e3
RH
2404
2405static void
2406mark_saved_scope (arg)
2407 void *arg;
2408{
2409 struct saved_scope *t = *(struct saved_scope **)arg;
2410 while (t)
2411 {
fc6af6e3
RH
2412 mark_binding_level (&t->class_bindings);
2413 ggc_mark_tree (t->old_bindings);
2414 ggc_mark_tree (t->old_namespace);
2415 ggc_mark_tree (t->class_name);
2416 ggc_mark_tree (t->class_type);
2417 ggc_mark_tree (t->access_specifier);
a8f73d4b 2418 ggc_mark_tree (t->function_decl);
fc6af6e3 2419 if (t->lang_base)
9cd64686 2420 ggc_mark_tree_varray (t->lang_base);
fc6af6e3 2421 ggc_mark_tree (t->lang_name);
fc6af6e3 2422 ggc_mark_tree (t->template_parms);
9cd64686
MM
2423 ggc_mark_tree (t->x_previous_class_type);
2424 ggc_mark_tree (t->x_previous_class_values);
6f80451c 2425 ggc_mark_tree (t->x_saved_tree);
70adf8a9
JM
2426 ggc_mark_tree (t->incomplete);
2427 ggc_mark_tree (t->lookups);
6f80451c
MM
2428
2429 mark_stmt_tree (&t->x_stmt_tree);
a8f73d4b 2430 mark_binding_level (&t->bindings);
fc6af6e3
RH
2431 t = t->prev;
2432 }
2433}
2434
e92cc029 2435static tree
45537677
MS
2436store_bindings (names, old_bindings)
2437 tree names, old_bindings;
2438{
2439 tree t;
c00996a3
JM
2440 tree search_bindings = old_bindings;
2441
45537677
MS
2442 for (t = names; t; t = TREE_CHAIN (t))
2443 {
2444 tree binding, t1, id;
2445
2446 if (TREE_CODE (t) == TREE_LIST)
2447 id = TREE_PURPOSE (t);
2448 else
2449 id = DECL_NAME (t);
2450
68642fb6 2451 if (!id
f181d4ae
MM
2452 /* Note that we may have an IDENTIFIER_CLASS_VALUE even when
2453 we have no IDENTIFIER_BINDING if we have left the class
2454 scope, but cached the class-level declarations. */
2455 || !(IDENTIFIER_BINDING (id) || IDENTIFIER_CLASS_VALUE (id)))
45537677
MS
2456 continue;
2457
c00996a3 2458 for (t1 = search_bindings; t1; t1 = TREE_CHAIN (t1))
45537677
MS
2459 if (TREE_VEC_ELT (t1, 0) == id)
2460 goto skip_it;
78957a2a 2461
31a714f6 2462 my_friendly_assert (TREE_CODE (id) == IDENTIFIER_NODE, 135);
87e3dbc9 2463 binding = make_tree_vec (4);
31a714f6
MM
2464 TREE_VEC_ELT (binding, 0) = id;
2465 TREE_VEC_ELT (binding, 1) = REAL_IDENTIFIER_TYPE_VALUE (id);
2466 TREE_VEC_ELT (binding, 2) = IDENTIFIER_BINDING (id);
2467 TREE_VEC_ELT (binding, 3) = IDENTIFIER_CLASS_VALUE (id);
2468 IDENTIFIER_BINDING (id) = NULL_TREE;
2469 IDENTIFIER_CLASS_VALUE (id) = NULL_TREE;
45537677
MS
2470 TREE_CHAIN (binding) = old_bindings;
2471 old_bindings = binding;
2472 skip_it:
2473 ;
2474 }
2475 return old_bindings;
2476}
2477
8d08fdba 2478void
5566b478
MS
2479maybe_push_to_top_level (pseudo)
2480 int pseudo;
8d08fdba 2481{
a8f73d4b 2482 struct saved_scope *s;
9cd64686 2483 struct binding_level *b;
a8f73d4b
MM
2484 tree old_bindings;
2485 int need_pop;
2486
2487 s = (struct saved_scope *) xcalloc (1, sizeof (struct saved_scope));
8d08fdba 2488
9cd64686
MM
2489 b = scope_chain ? current_binding_level : 0;
2490
a8f73d4b 2491 /* If we're in the middle of some function, save our state. */
01d939e8 2492 if (cfun)
a8f73d4b
MM
2493 {
2494 need_pop = 1;
2495 push_function_context_to (NULL_TREE);
2496 }
2497 else
2498 need_pop = 0;
e349ee73 2499
a8f73d4b 2500 old_bindings = NULL_TREE;
9cd64686 2501 if (scope_chain && previous_class_type)
a50f0918
MS
2502 old_bindings = store_bindings (previous_class_values, old_bindings);
2503
8d08fdba
MS
2504 /* Have to include global_binding_level, because class-level decls
2505 aren't listed anywhere useful. */
2506 for (; b; b = b->level_chain)
2507 {
2508 tree t;
2509
2c73f9f5
ML
2510 /* Template IDs are inserted into the global level. If they were
2511 inserted into namespace level, finish_file wouldn't find them
2512 when doing pending instantiations. Therefore, don't stop at
2513 namespace level, but continue until :: . */
74b846e0 2514 if (b == global_binding_level || (pseudo && b->template_parms_p))
5566b478 2515 break;
8d08fdba 2516
45537677 2517 old_bindings = store_bindings (b->names, old_bindings);
cffa8729 2518 /* We also need to check class_shadowed to save class-level type
45537677
MS
2519 bindings, since pushclass doesn't fill in b->names. */
2520 if (b->parm_flag == 2)
cffa8729 2521 old_bindings = store_bindings (b->class_shadowed, old_bindings);
8d08fdba 2522
8d08fdba
MS
2523 /* Unwind type-value slots back to top level. */
2524 for (t = b->type_shadowed; t; t = TREE_CHAIN (t))
2525 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (t), TREE_VALUE (t));
2526 }
fc0e7bf5
MM
2527 s->prev = scope_chain;
2528 s->old_bindings = old_bindings;
a8f73d4b
MM
2529 s->bindings = b;
2530 s->need_pop_function_context = need_pop;
2531 s->function_decl = current_function_decl;
fc0e7bf5
MM
2532
2533 scope_chain = s;
8d08fdba 2534 current_function_decl = NULL_TREE;
9cd64686 2535 VARRAY_TREE_INIT (current_lang_base, 10, "current_lang_base");
51c184be 2536 current_lang_name = lang_name_cplusplus;
2c73f9f5 2537 current_namespace = global_namespace;
5566b478
MS
2538}
2539
2540void
2541push_to_top_level ()
2542{
2543 maybe_push_to_top_level (0);
8d08fdba
MS
2544}
2545
2546void
2547pop_from_top_level ()
2548{
9cd64686 2549 struct saved_scope *s = scope_chain;
8d08fdba
MS
2550 tree t;
2551
e76a2646 2552 /* Clear out class-level bindings cache. */
8d08fdba 2553 if (previous_class_type)
8f032717 2554 invalidate_class_lookup_cache ();
8d08fdba 2555
9cd64686
MM
2556 VARRAY_FREE (current_lang_base);
2557
2558 scope_chain = s->prev;
87e3dbc9 2559 for (t = s->old_bindings; t; t = TREE_CHAIN (t))
8d08fdba
MS
2560 {
2561 tree id = TREE_VEC_ELT (t, 0);
31a714f6
MM
2562
2563 SET_IDENTIFIER_TYPE_VALUE (id, TREE_VEC_ELT (t, 1));
2564 IDENTIFIER_BINDING (id) = TREE_VEC_ELT (t, 2);
2565 IDENTIFIER_CLASS_VALUE (id) = TREE_VEC_ELT (t, 3);
8d08fdba 2566 }
9cd64686 2567
a8f73d4b
MM
2568 /* If we were in the middle of compiling a function, restore our
2569 state. */
2570 if (s->need_pop_function_context)
2571 pop_function_context_from (NULL_TREE);
2572 current_function_decl = s->function_decl;
e349ee73 2573
a8f73d4b 2574 free (s);
8d08fdba
MS
2575}
2576\f
2577/* Push a definition of struct, union or enum tag "name".
68642fb6 2578 into binding_level "b". "type" should be the type node,
8d08fdba
MS
2579 We assume that the tag "name" is not already defined.
2580
2581 Note that the definition may really be just a forward reference.
2582 In that case, the TYPE_SIZE will be a NULL_TREE.
2583
e92cc029 2584 C++ gratuitously puts all these tags in the name space. */
8d08fdba
MS
2585
2586/* When setting the IDENTIFIER_TYPE_VALUE field of an identifier ID,
2587 record the shadowed value for this binding contour. TYPE is
2588 the type that ID maps to. */
2589
2590static void
2591set_identifier_type_value_with_scope (id, type, b)
2592 tree id;
2593 tree type;
2594 struct binding_level *b;
2595{
2c73f9f5 2596 if (!b->namespace_p)
8d08fdba 2597 {
2c73f9f5
ML
2598 /* Shadow the marker, not the real thing, so that the marker
2599 gets restored later. */
2600 tree old_type_value = REAL_IDENTIFIER_TYPE_VALUE (id);
8d08fdba
MS
2601 b->type_shadowed
2602 = tree_cons (id, old_type_value, b->type_shadowed);
2603 }
2c73f9f5
ML
2604 else
2605 {
2606 tree binding = binding_for_name (id, current_namespace);
2607 BINDING_TYPE (binding) = type;
2608 /* Store marker instead of real type. */
2609 type = global_type_node;
2610 }
8d08fdba
MS
2611 SET_IDENTIFIER_TYPE_VALUE (id, type);
2612}
2613
8f032717 2614/* As set_identifier_type_value_with_scope, but using current_binding_level. */
8d08fdba
MS
2615
2616void
2617set_identifier_type_value (id, type)
2618 tree id;
2619 tree type;
2620{
8f032717 2621 set_identifier_type_value_with_scope (id, type, current_binding_level);
8d08fdba
MS
2622}
2623
2c73f9f5
ML
2624/* Return the type associated with id. */
2625
2626tree
2627identifier_type_value (id)
2628 tree id;
2629{
2630 /* There is no type with that name, anywhere. */
2631 if (REAL_IDENTIFIER_TYPE_VALUE (id) == NULL_TREE)
2632 return NULL_TREE;
2633 /* This is not the type marker, but the real thing. */
2634 if (REAL_IDENTIFIER_TYPE_VALUE (id) != global_type_node)
2635 return REAL_IDENTIFIER_TYPE_VALUE (id);
2636 /* Have to search for it. It must be on the global level, now.
2637 Ask lookup_name not to return non-types. */
3e3f722c 2638 id = lookup_name_real (id, 2, 1, 0);
2c73f9f5
ML
2639 if (id)
2640 return TREE_TYPE (id);
2641 return NULL_TREE;
2642}
2643
a9aedbc2
MS
2644/* Pop off extraneous binding levels left over due to syntax errors.
2645
2646 We don't pop past namespaces, as they might be valid. */
e92cc029 2647
8926095f
MS
2648void
2649pop_everything ()
2650{
2651#ifdef DEBUG_CP_BINDING_LEVELS
2652 fprintf (stderr, "XXX entering pop_everything ()\n");
2653#endif
8f032717 2654 while (!toplevel_bindings_p ())
8926095f 2655 {
8f032717 2656 if (current_binding_level->parm_flag == 2)
b74a0560 2657 pop_nested_class ();
8926095f
MS
2658 else
2659 poplevel (0, 0, 0);
2660 }
2661#ifdef DEBUG_CP_BINDING_LEVELS
2662 fprintf (stderr, "XXX leaving pop_everything ()\n");
2663#endif
2664}
2665
39c01e4c
MM
2666/* The type TYPE is being declared. If it is a class template, or a
2667 specialization of a class template, do any processing required and
2668 perform error-checking. If IS_FRIEND is non-zero, this TYPE is
2669 being declared a friend. B is the binding level at which this TYPE
2670 should be bound.
2671
2672 Returns the TYPE_DECL for TYPE, which may have been altered by this
2673 processing. */
2674
68642fb6 2675static tree
39c01e4c
MM
2676maybe_process_template_type_declaration (type, globalize, b)
2677 tree type;
2678 int globalize;
2679 struct binding_level* b;
2680{
2681 tree decl = TYPE_NAME (type);
68642fb6 2682
39c01e4c
MM
2683 if (processing_template_parmlist)
2684 /* You can't declare a new template type in a template parameter
2685 list. But, you can declare a non-template type:
68642fb6 2686
39c01e4c 2687 template <class A*> struct S;
68642fb6 2688
39c01e4c
MM
2689 is a forward-declaration of `A'. */
2690 ;
68642fb6 2691 else
39c01e4c
MM
2692 {
2693 maybe_check_template_type (type);
2694
68642fb6 2695 my_friendly_assert (IS_AGGR_TYPE (type)
ed44da02 2696 || TREE_CODE (type) == ENUMERAL_TYPE, 0);
68642fb6
UD
2697
2698
3ebc5c52 2699 if (processing_template_decl)
39c01e4c
MM
2700 {
2701 /* This may change after the call to
2702 push_template_decl_real, but we want the original value. */
2703 tree name = DECL_NAME (decl);
2704
2705 decl = push_template_decl_real (decl, globalize);
2706 /* If the current binding level is the binding level for the
2707 template parameters (see the comment in
2708 begin_template_parm_list) and the enclosing level is a class
2709 scope, and we're not looking at a friend, push the
2710 declaration of the member class into the class scope. In the
2711 friend case, push_template_decl will already have put the
2712 friend into global scope, if appropriate. */
ed44da02 2713 if (TREE_CODE (type) != ENUMERAL_TYPE
74b846e0 2714 && !globalize && b->template_parms_p
39c01e4c
MM
2715 && b->level_chain->parm_flag == 2)
2716 {
61a127b3 2717 finish_member_declaration (CLASSTYPE_TI_TEMPLATE (type));
39c01e4c
MM
2718 /* Put this tag on the list of tags for the class, since
2719 that won't happen below because B is not the class
2720 binding level, but is instead the pseudo-global level. */
68642fb6 2721 b->level_chain->tags =
e1b3e07d 2722 tree_cons (name, type, b->level_chain->tags);
d0f062fb 2723 if (!COMPLETE_TYPE_P (current_class_type))
39c01e4c
MM
2724 CLASSTYPE_TAGS (current_class_type) = b->level_chain->tags;
2725 }
2726 }
2727 }
2728
2729 return decl;
2730}
2731
9188c363
MM
2732/* In C++, you don't have to write `struct S' to refer to `S'; you
2733 can just use `S'. We accomplish this by creating a TYPE_DECL as
2734 if the user had written `typedef struct S S'. Create and return
2735 the TYPE_DECL for TYPE. */
2736
2737tree
2738create_implicit_typedef (name, type)
2739 tree name;
2740 tree type;
2741{
2742 tree decl;
2743
2744 decl = build_decl (TYPE_DECL, name, type);
c727aa5e 2745 DECL_ARTIFICIAL (decl) = 1;
9188c363
MM
2746 /* There are other implicit type declarations, like the one *within*
2747 a class that allows you to write `S::S'. We must distinguish
2748 amongst these. */
2749 SET_DECL_IMPLICIT_TYPEDEF_P (decl);
2750 TYPE_NAME (type) = decl;
2751
2752 return decl;
2753}
2754
8e4ce833
JJ
2755/* Remember a local name for name-mangling purposes. */
2756
2757static void
2758push_local_name (decl)
2759 tree decl;
2760{
2761 size_t i, nelts;
2762 tree t, name;
2763
2764 if (!local_names)
2765 VARRAY_TREE_INIT (local_names, 8, "local_names");
2766
2767 name = DECL_NAME (decl);
2768
2769 nelts = VARRAY_ACTIVE_SIZE (local_names);
2770 for (i = 0; i < nelts; i++)
2771 {
2772 t = VARRAY_TREE (local_names, i);
2773 if (DECL_NAME (t) == name)
2774 {
2775 if (!DECL_LANG_SPECIFIC (decl))
2776 retrofit_lang_decl (decl);
2777 if (DECL_LANG_SPECIFIC (t))
2778 DECL_DISCRIMINATOR (decl) = DECL_DISCRIMINATOR (t) + 1;
2779 else
2780 DECL_DISCRIMINATOR (decl) = 1;
2781
2782 VARRAY_TREE (local_names, i) = decl;
2783 return;
2784 }
2785 }
2786
2787 VARRAY_PUSH_TREE (local_names, decl);
2788}
2789
8d08fdba 2790/* Push a tag name NAME for struct/class/union/enum type TYPE.
6757edfe 2791 Normally put it into the inner-most non-tag-transparent scope,
8d08fdba 2792 but if GLOBALIZE is true, put it in the inner-most non-class scope.
e92cc029 2793 The latter is needed for implicit declarations. */
8d08fdba
MS
2794
2795void
2796pushtag (name, type, globalize)
2797 tree name, type;
2798 int globalize;
2799{
2800 register struct binding_level *b;
8d08fdba 2801
8f032717 2802 b = current_binding_level;
8d08fdba
MS
2803 while (b->tag_transparent
2804 || (globalize && b->parm_flag == 2))
2805 b = b->level_chain;
2806
e1b3e07d 2807 b->tags = tree_cons (name, type, b->tags);
8d08fdba
MS
2808
2809 if (name)
2810 {
8d08fdba 2811 /* Do C++ gratuitous typedefing. */
db5ae43f 2812 if (IDENTIFIER_TYPE_VALUE (name) != type)
8d08fdba 2813 {
93cdc044 2814 register tree d = NULL_TREE;
848cf1e0 2815 int in_class = 0;
9188c363 2816 tree context = TYPE_CONTEXT (type);
280f9385 2817
280f9385
MM
2818 if (! context)
2819 {
2820 tree cs = current_scope ();
2821
2822 if (! globalize)
2823 context = cs;
2f939d94 2824 else if (cs != NULL_TREE && TYPE_P (cs))
280f9385
MM
2825 /* When declaring a friend class of a local class, we want
2826 to inject the newly named class into the scope
2827 containing the local class, not the namespace scope. */
4f1c5b7d 2828 context = decl_function_context (get_type_decl (cs));
280f9385 2829 }
280f9385
MM
2830 if (!context)
2831 context = current_namespace;
8d08fdba 2832
74b846e0 2833 if ((b->template_parms_p && b->level_chain->parm_flag == 2)
93cdc044
JM
2834 || b->parm_flag == 2)
2835 in_class = 1;
93cdc044 2836
848cf1e0
MM
2837 if (current_lang_name == lang_name_java)
2838 TYPE_FOR_JAVA (type) = 1;
93cdc044 2839
9188c363 2840 d = create_implicit_typedef (name, type);
cb0dbb9a 2841 DECL_CONTEXT (d) = FROB_CONTEXT (context);
9188c363
MM
2842 if (! in_class)
2843 set_identifier_type_value_with_scope (name, type, b);
e1cd6e56 2844
39c01e4c
MM
2845 d = maybe_process_template_type_declaration (type,
2846 globalize, b);
93cdc044
JM
2847
2848 if (b->parm_flag == 2)
61a127b3 2849 {
848cf1e0 2850 if (!PROCESSING_REAL_TEMPLATE_DECL_P ())
61a127b3
MM
2851 /* Put this TYPE_DECL on the TYPE_FIELDS list for the
2852 class. But if it's a member template class, we
2853 want the TEMPLATE_DECL, not the TYPE_DECL, so this
2854 is done later. */
2855 finish_member_declaration (d);
8f032717
MM
2856 else
2857 pushdecl_class_level (d);
61a127b3 2858 }
93cdc044
JM
2859 else
2860 d = pushdecl_with_scope (d, b);
2861
848cf1e0
MM
2862 if (ANON_AGGRNAME_P (name))
2863 DECL_IGNORED_P (d) = 1;
2864
2865 TYPE_CONTEXT (type) = DECL_CONTEXT (d);
1f6e1acc
AS
2866
2867 /* If this is a local class, keep track of it. We need this
2868 information for name-mangling, and so that it is possible to find
2869 all function definitions in a translation unit in a convenient
2870 way. (It's otherwise tricky to find a member function definition
2871 it's only pointed to from within a local class.) */
5362b086 2872 if (TYPE_CONTEXT (type)
089acd57
MM
2873 && TREE_CODE (TYPE_CONTEXT (type)) == FUNCTION_DECL
2874 && !processing_template_decl)
1f6e1acc 2875 VARRAY_PUSH_TREE (local_classes, type);
8d08fdba
MS
2876 }
2877 if (b->parm_flag == 2)
2878 {
d0f062fb 2879 if (!COMPLETE_TYPE_P (current_class_type))
8d08fdba
MS
2880 CLASSTYPE_TAGS (current_class_type) = b->tags;
2881 }
2882 }
2883
2884 if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL)
2885 /* Use the canonical TYPE_DECL for this node. */
2886 TYPE_STUB_DECL (type) = TYPE_NAME (type);
2887 else
2888 {
2889 /* Create a fake NULL-named TYPE_DECL node whose TREE_TYPE
2890 will be the tagged type we just added to the current
2891 binding level. This fake NULL-named TYPE_DECL node helps
2892 dwarfout.c to know when it needs to output a
2893 representation of a tagged type, and it also gives us a
2894 convenient place to record the "scope start" address for
2895 the tagged type. */
2896
8d08fdba 2897 tree d = build_decl (TYPE_DECL, NULL_TREE, type);
8d08fdba
MS
2898 TYPE_STUB_DECL (type) = pushdecl_with_scope (d, b);
2899 }
2900}
2901
2902/* Counter used to create anonymous type names. */
e92cc029 2903
8d08fdba
MS
2904static int anon_cnt = 0;
2905
2906/* Return an IDENTIFIER which can be used as a name for
2907 anonymous structs and unions. */
e92cc029 2908
8d08fdba
MS
2909tree
2910make_anon_name ()
2911{
2912 char buf[32];
2913
2914 sprintf (buf, ANON_AGGRNAME_FORMAT, anon_cnt++);
2915 return get_identifier (buf);
2916}
2917
2918/* Clear the TREE_PURPOSE slot of tags which have anonymous typenames.
2919 This keeps dbxout from getting confused. */
e92cc029 2920
8d08fdba
MS
2921void
2922clear_anon_tags ()
2923{
2924 register struct binding_level *b;
2925 register tree tags;
2926 static int last_cnt = 0;
2927
2928 /* Fast out if no new anon names were declared. */
2929 if (last_cnt == anon_cnt)
2930 return;
2931
2932 b = current_binding_level;
2933 while (b->tag_transparent)
2934 b = b->level_chain;
2935 tags = b->tags;
2936 while (tags)
2937 {
2938 /* A NULL purpose means we have already processed all tags
2939 from here to the end of the list. */
2940 if (TREE_PURPOSE (tags) == NULL_TREE)
2941 break;
2942 if (ANON_AGGRNAME_P (TREE_PURPOSE (tags)))
2943 TREE_PURPOSE (tags) = NULL_TREE;
2944 tags = TREE_CHAIN (tags);
2945 }
2946 last_cnt = anon_cnt;
2947}
2948\f
2949/* Subroutine of duplicate_decls: return truthvalue of whether
2950 or not types of these decls match.
2951
2952 For C++, we must compare the parameter list so that `int' can match
2953 `int&' in a parameter position, but `int&' is not confused with
2954 `const int&'. */
e92cc029 2955
6060a796 2956int
8d08fdba
MS
2957decls_match (newdecl, olddecl)
2958 tree newdecl, olddecl;
2959{
2960 int types_match;
2961
347d73d7
ML
2962 if (newdecl == olddecl)
2963 return 1;
2964
6b4b3deb
MM
2965 if (TREE_CODE (newdecl) != TREE_CODE (olddecl))
2966 /* If the two DECLs are not even the same kind of thing, we're not
2967 interested in their types. */
2968 return 0;
2969
2970 if (TREE_CODE (newdecl) == FUNCTION_DECL)
8d08fdba
MS
2971 {
2972 tree f1 = TREE_TYPE (newdecl);
2973 tree f2 = TREE_TYPE (olddecl);
2974 tree p1 = TYPE_ARG_TYPES (f1);
2975 tree p2 = TYPE_ARG_TYPES (f2);
2976
4f1c5b7d 2977 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
eb68cb58
MM
2978 && ! (DECL_EXTERN_C_P (newdecl)
2979 && DECL_EXTERN_C_P (olddecl)))
c5a6fc45
JM
2980 return 0;
2981
8d08fdba 2982 if (TREE_CODE (f1) != TREE_CODE (f2))
e867a179 2983 return 0;
8d08fdba 2984
3bfdc719 2985 if (same_type_p (TREE_TYPE (f1), TREE_TYPE (f2)))
8926095f 2986 {
8b27e9ef
NS
2987 if (p2 == NULL_TREE && DECL_EXTERN_C_P (olddecl)
2988 && (DECL_BUILT_IN (olddecl)
2989#ifndef NO_IMPLICIT_EXTERN_C
2990 || (DECL_IN_SYSTEM_HEADER (newdecl) && !DECL_CLASS_SCOPE_P (newdecl))
2991 || (DECL_IN_SYSTEM_HEADER (olddecl) && !DECL_CLASS_SCOPE_P (olddecl))
2992#endif
2993 ))
a28e3c7f
MS
2994 {
2995 types_match = self_promoting_args_p (p1);
2996 if (p1 == void_list_node)
2997 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
2998 }
8b27e9ef
NS
2999#ifndef NO_IMPLICIT_EXTERN_C
3000 else if (p1 == NULL_TREE
3001 && (DECL_EXTERN_C_P (olddecl)
3002 && DECL_IN_SYSTEM_HEADER (olddecl)
3003 && !DECL_CLASS_SCOPE_P (olddecl))
3004 && (DECL_EXTERN_C_P (newdecl)
3005 && DECL_IN_SYSTEM_HEADER (newdecl)
3006 && !DECL_CLASS_SCOPE_P (newdecl)))
a28e3c7f
MS
3007 {
3008 types_match = self_promoting_args_p (p2);
3009 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
3010 }
8b27e9ef 3011#endif
8926095f 3012 else
91063b51 3013 types_match = compparms (p1, p2);
8926095f 3014 }
8d08fdba
MS
3015 else
3016 types_match = 0;
3017 }
6b4b3deb 3018 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
51c184be 3019 {
f84b4be9
JM
3020 if (!comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
3021 DECL_TEMPLATE_PARMS (olddecl)))
3022 return 0;
68642fb6 3023
2bb5d995
JM
3024 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl))
3025 != TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)))
3026 return 0;
3027
f84b4be9
JM
3028 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
3029 types_match = 1;
3030 else
3031 types_match = decls_match (DECL_TEMPLATE_RESULT (olddecl),
3032 DECL_TEMPLATE_RESULT (newdecl));
51c184be 3033 }
8d08fdba
MS
3034 else
3035 {
3036 if (TREE_TYPE (newdecl) == error_mark_node)
3037 types_match = TREE_TYPE (olddecl) == error_mark_node;
3038 else if (TREE_TYPE (olddecl) == NULL_TREE)
3039 types_match = TREE_TYPE (newdecl) == NULL_TREE;
a0a33927
MS
3040 else if (TREE_TYPE (newdecl) == NULL_TREE)
3041 types_match = 0;
8d08fdba 3042 else
01240200 3043 types_match = comptypes (TREE_TYPE (newdecl),
3bfdc719
MM
3044 TREE_TYPE (olddecl),
3045 COMPARE_REDECLARATION);
8d08fdba
MS
3046 }
3047
3048 return types_match;
3049}
3050
3051/* If NEWDECL is `static' and an `extern' was seen previously,
24f30ed4 3052 warn about it. OLDDECL is the previous declaration.
8d08fdba
MS
3053
3054 Note that this does not apply to the C++ case of declaring
3055 a variable `extern const' and then later `const'.
3056
8d08fdba
MS
3057 Don't complain about built-in functions, since they are beyond
3058 the user's control. */
3059
3060static void
3061warn_extern_redeclared_static (newdecl, olddecl)
3062 tree newdecl, olddecl;
3063{
d8e178a0 3064 static const char *explicit_extern_static_warning
8251199e 3065 = "`%D' was declared `extern' and later `static'";
d8e178a0 3066 static const char *implicit_extern_static_warning
8251199e
JM
3067 = "`%D' was declared implicitly `extern' and later `static'";
3068
24f30ed4
MM
3069 tree name;
3070
68642fb6 3071 if (TREE_CODE (newdecl) == TYPE_DECL
655dc6ee
JM
3072 || TREE_CODE (newdecl) == TEMPLATE_DECL
3073 || TREE_CODE (newdecl) == CONST_DECL)
8d08fdba 3074 return;
68642fb6 3075
963d5758
MM
3076 /* Don't get confused by static member functions; that's a different
3077 use of `static'. */
3078 if (TREE_CODE (newdecl) == FUNCTION_DECL
3079 && DECL_STATIC_FUNCTION_P (newdecl))
3080 return;
8d08fdba 3081
24f30ed4
MM
3082 /* If the old declaration was `static', or the new one isn't, then
3083 then everything is OK. */
3084 if (DECL_THIS_STATIC (olddecl) || !DECL_THIS_STATIC (newdecl))
3085 return;
3086
3087 /* It's OK to declare a builtin function as `static'. */
3088 if (TREE_CODE (olddecl) == FUNCTION_DECL
3089 && DECL_ARTIFICIAL (olddecl))
3090 return;
3091
8d08fdba 3092 name = DECL_ASSEMBLER_NAME (newdecl);
24f30ed4
MM
3093 cp_pedwarn (IDENTIFIER_IMPLICIT_DECL (name)
3094 ? implicit_extern_static_warning
3095 : explicit_extern_static_warning, newdecl);
3096 cp_pedwarn_at ("previous declaration of `%D'", olddecl);
8d08fdba
MS
3097}
3098
3099/* Handle when a new declaration NEWDECL has the same name as an old
3100 one OLDDECL in the same binding contour. Prints an error message
3101 if appropriate.
3102
3103 If safely possible, alter OLDDECL to look like NEWDECL, and return 1.
3104 Otherwise, return 0. */
3105
51c184be 3106int
8d08fdba 3107duplicate_decls (newdecl, olddecl)
824b9a4c 3108 tree newdecl, olddecl;
8d08fdba 3109{
8d08fdba
MS
3110 unsigned olddecl_uid = DECL_UID (olddecl);
3111 int olddecl_friend = 0, types_match = 0;
0b60dfe3 3112 int new_defines_function = 0;
5566b478
MS
3113
3114 if (newdecl == olddecl)
3115 return 1;
8d08fdba 3116
8926095f 3117 types_match = decls_match (newdecl, olddecl);
8d08fdba 3118
8d08fdba
MS
3119 /* If either the type of the new decl or the type of the old decl is an
3120 error_mark_node, then that implies that we have already issued an
3121 error (earlier) for some bogus type specification, and in that case,
3122 it is rather pointless to harass the user with yet more error message
0b60dfe3 3123 about the same declaration, so just pretend the types match here. */
bd6dd845
MS
3124 if (TREE_TYPE (newdecl) == error_mark_node
3125 || TREE_TYPE (olddecl) == error_mark_node)
8d08fdba 3126 types_match = 1;
68642fb6 3127
0b60dfe3 3128 /* Check for redeclaration and other discrepancies. */
d22c8596 3129 if (TREE_CODE (olddecl) == FUNCTION_DECL
9f33663b
JM
3130 && DECL_ARTIFICIAL (olddecl))
3131 {
3132 if (TREE_CODE (newdecl) != FUNCTION_DECL)
3133 {
3134 /* If you declare a built-in or predefined function name as static,
3135 the old definition is overridden, but optionally warn this was a
3136 bad choice of name. */
3137 if (! TREE_PUBLIC (newdecl))
3138 {
3139 if (warn_shadow)
3140 cp_warning ("shadowing %s function `%#D'",
3141 DECL_BUILT_IN (olddecl) ? "built-in" : "library",
3142 olddecl);
3143 /* Discard the old built-in function. */
3144 return 0;
3145 }
3146 /* If the built-in is not ansi, then programs can override
3147 it even globally without an error. */
3148 else if (! DECL_BUILT_IN (olddecl))
3149 cp_warning ("library function `%#D' redeclared as non-function `%#D'",
3150 olddecl, newdecl);
3151 else
3152 {
3153 cp_error ("declaration of `%#D'", newdecl);
3154 cp_error ("conflicts with built-in declaration `%#D'",
a4443a08 3155 olddecl);
9f33663b 3156 }
a4443a08
MS
3157 return 0;
3158 }
9f33663b 3159 else if (!types_match)
8d08fdba 3160 {
eb68cb58
MM
3161 if ((DECL_EXTERN_C_P (newdecl)
3162 && DECL_EXTERN_C_P (olddecl))
9f33663b
JM
3163 || compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
3164 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
a4443a08 3165 {
9f33663b
JM
3166 /* A near match; override the builtin. */
3167
3168 if (TREE_PUBLIC (newdecl))
a4443a08 3169 {
9f33663b
JM
3170 cp_warning ("new declaration `%#D'", newdecl);
3171 cp_warning ("ambiguates built-in declaration `%#D'",
3172 olddecl);
a4443a08 3173 }
9f33663b
JM
3174 else if (warn_shadow)
3175 cp_warning ("shadowing %s function `%#D'",
3176 DECL_BUILT_IN (olddecl) ? "built-in" : "library",
3177 olddecl);
a4443a08 3178 }
9f33663b
JM
3179 else
3180 /* Discard the old built-in function. */
3181 return 0;
8d08fdba 3182 }
68642fb6 3183
24f30ed4
MM
3184 if (DECL_THIS_STATIC (newdecl) && !DECL_THIS_STATIC (olddecl))
3185 {
3186 /* If a builtin function is redeclared as `static', merge
3187 the declarations, but make the original one static. */
3188 DECL_THIS_STATIC (olddecl) = 1;
3189 TREE_PUBLIC (olddecl) = 0;
9bfadf57 3190
421844e7
MM
3191 /* Make the old declaration consistent with the new one so
3192 that all remnants of the builtin-ness of this function
3193 will be banished. */
9bfadf57 3194 DECL_LANGUAGE (olddecl) = DECL_LANGUAGE (newdecl);
19e7881c 3195 SET_DECL_RTL (olddecl, DECL_RTL (newdecl));
92643fea 3196 COPY_DECL_ASSEMBLER_NAME (olddecl, newdecl);
9bfadf57
MM
3197 SET_IDENTIFIER_GLOBAL_VALUE (DECL_ASSEMBLER_NAME (newdecl),
3198 newdecl);
24f30ed4 3199 }
39211cd5
MS
3200 }
3201 else if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
3202 {
9ed182dc
JM
3203 if ((TREE_CODE (olddecl) == TYPE_DECL && DECL_ARTIFICIAL (olddecl)
3204 && TREE_CODE (newdecl) != TYPE_DECL
3205 && ! (TREE_CODE (newdecl) == TEMPLATE_DECL
3206 && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL))
3207 || (TREE_CODE (newdecl) == TYPE_DECL && DECL_ARTIFICIAL (newdecl)
3208 && TREE_CODE (olddecl) != TYPE_DECL
3209 && ! (TREE_CODE (olddecl) == TEMPLATE_DECL
3210 && (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl))
3211 == TYPE_DECL))))
3212 {
3213 /* We do nothing special here, because C++ does such nasty
3214 things with TYPE_DECLs. Instead, just let the TYPE_DECL
3215 get shadowed, and know that if we need to find a TYPE_DECL
3216 for a given name, we can look in the IDENTIFIER_TYPE_VALUE
3217 slot of the identifier. */
3218 return 0;
3219 }
3220
39211cd5 3221 if ((TREE_CODE (newdecl) == FUNCTION_DECL
5566b478 3222 && DECL_FUNCTION_TEMPLATE_P (olddecl))
39211cd5 3223 || (TREE_CODE (olddecl) == FUNCTION_DECL
5566b478 3224 && DECL_FUNCTION_TEMPLATE_P (newdecl)))
39211cd5 3225 return 0;
9ed182dc 3226
8251199e 3227 cp_error ("`%#D' redeclared as different kind of symbol", newdecl);
39211cd5
MS
3228 if (TREE_CODE (olddecl) == TREE_LIST)
3229 olddecl = TREE_VALUE (olddecl);
8251199e 3230 cp_error_at ("previous declaration of `%#D'", olddecl);
39211cd5
MS
3231
3232 /* New decl is completely inconsistent with the old one =>
3233 tell caller to replace the old one. */
3234
3235 return 0;
8d08fdba 3236 }
8d08fdba
MS
3237 else if (!types_match)
3238 {
4f1c5b7d 3239 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl))
7bdbfa05
MM
3240 /* These are certainly not duplicate declarations; they're
3241 from different scopes. */
3242 return 0;
3243
8926095f 3244 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
f0e01782
MS
3245 {
3246 /* The name of a class template may not be declared to refer to
3247 any other template, class, function, object, namespace, value,
e92cc029 3248 or type in the same scope. */
5566b478
MS
3249 if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == TYPE_DECL
3250 || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
f0e01782 3251 {
8251199e
JM
3252 cp_error ("declaration of template `%#D'", newdecl);
3253 cp_error_at ("conflicts with previous declaration `%#D'",
f0e01782
MS
3254 olddecl);
3255 }
ec255269
MS
3256 else if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == FUNCTION_DECL
3257 && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
3258 && compparms (TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl))),
91063b51 3259 TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl))))
75650646
MM
3260 && comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
3261 DECL_TEMPLATE_PARMS (olddecl)))
ec255269 3262 {
8251199e
JM
3263 cp_error ("new declaration `%#D'", newdecl);
3264 cp_error_at ("ambiguates old declaration `%#D'", olddecl);
ec255269 3265 }
f0e01782
MS
3266 return 0;
3267 }
8926095f
MS
3268 if (TREE_CODE (newdecl) == FUNCTION_DECL)
3269 {
eb68cb58 3270 if (DECL_EXTERN_C_P (newdecl) && DECL_EXTERN_C_P (olddecl))
8926095f 3271 {
8251199e 3272 cp_error ("declaration of C function `%#D' conflicts with",
8926095f 3273 newdecl);
8251199e 3274 cp_error_at ("previous declaration `%#D' here", olddecl);
8926095f 3275 }
00595019 3276 else if (compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
91063b51 3277 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
700f8a87 3278 {
8251199e
JM
3279 cp_error ("new declaration `%#D'", newdecl);
3280 cp_error_at ("ambiguates old declaration `%#D'", olddecl);
700f8a87
MS
3281 }
3282 else
3283 return 0;
8926095f 3284 }
8d08fdba
MS
3285
3286 /* Already complained about this, so don't do so again. */
a4443a08 3287 else if (current_class_type == NULL_TREE
8d08fdba
MS
3288 || IDENTIFIER_ERROR_LOCUS (DECL_ASSEMBLER_NAME (newdecl)) != current_class_type)
3289 {
8251199e
JM
3290 cp_error ("conflicting types for `%#D'", newdecl);
3291 cp_error_at ("previous declaration as `%#D'", olddecl);
8d08fdba
MS
3292 }
3293 }
68642fb6 3294 else if (TREE_CODE (newdecl) == FUNCTION_DECL
75650646
MM
3295 && ((DECL_TEMPLATE_SPECIALIZATION (olddecl)
3296 && (!DECL_TEMPLATE_INFO (newdecl)
68642fb6 3297 || (DECL_TI_TEMPLATE (newdecl)
75650646
MM
3298 != DECL_TI_TEMPLATE (olddecl))))
3299 || (DECL_TEMPLATE_SPECIALIZATION (newdecl)
3300 && (!DECL_TEMPLATE_INFO (olddecl)
68642fb6 3301 || (DECL_TI_TEMPLATE (olddecl)
75650646 3302 != DECL_TI_TEMPLATE (newdecl))))))
386b8a85
JM
3303 /* It's OK to have a template specialization and a non-template
3304 with the same type, or to have specializations of two
75650646
MM
3305 different templates with the same type. Note that if one is a
3306 specialization, and the other is an instantiation of the same
3307 template, that we do not exit at this point. That situation
3308 can occur if we instantiate a template class, and then
3309 specialize one of its methods. This situation is legal, but
3310 the declarations must be merged in the usual way. */
3311 return 0;
68642fb6
UD
3312 else if (TREE_CODE (newdecl) == FUNCTION_DECL
3313 && ((DECL_TEMPLATE_INSTANTIATION (olddecl)
75650646
MM
3314 && !DECL_USE_TEMPLATE (newdecl))
3315 || (DECL_TEMPLATE_INSTANTIATION (newdecl)
3316 && !DECL_USE_TEMPLATE (olddecl))))
3317 /* One of the declarations is a template instantiation, and the
3318 other is not a template at all. That's OK. */
386b8a85 3319 return 0;
85c6cbaf
ML
3320 else if (TREE_CODE (newdecl) == NAMESPACE_DECL
3321 && DECL_NAMESPACE_ALIAS (newdecl)
3322 && DECL_NAMESPACE_ALIAS (newdecl) == DECL_NAMESPACE_ALIAS (olddecl))
3323 /* Redeclaration of namespace alias, ignore it. */
3324 return 1;
8d08fdba
MS
3325 else
3326 {
d8e178a0 3327 const char *errmsg = redeclaration_error_message (newdecl, olddecl);
8251199e 3328 if (errmsg)
8d08fdba 3329 {
8251199e 3330 cp_error (errmsg, newdecl);
8d08fdba
MS
3331 if (DECL_NAME (olddecl) != NULL_TREE)
3332 cp_error_at ((DECL_INITIAL (olddecl)
2c73f9f5 3333 && namespace_bindings_p ())
8251199e
JM
3334 ? "`%#D' previously defined here"
3335 : "`%#D' previously declared here", olddecl);
8d08fdba
MS
3336 }
3337 else if (TREE_CODE (olddecl) == FUNCTION_DECL
3338 && DECL_INITIAL (olddecl) != NULL_TREE
3339 && TYPE_ARG_TYPES (TREE_TYPE (olddecl)) == NULL_TREE
3340 && TYPE_ARG_TYPES (TREE_TYPE (newdecl)) != NULL_TREE)
3341 {
3342 /* Prototype decl follows defn w/o prototype. */
8251199e
JM
3343 cp_warning_at ("prototype for `%#D'", newdecl);
3344 cp_warning_at ("follows non-prototype definition here", olddecl);
8d08fdba
MS
3345 }
3346 else if (TREE_CODE (olddecl) == FUNCTION_DECL
3347 && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl))
8926095f
MS
3348 {
3349 /* extern "C" int foo ();
3350 int foo () { bar (); }
3351 is OK. */
46ccf50a 3352 if (current_lang_depth () == 0)
a28e3c7f 3353 DECL_LANGUAGE (newdecl) = DECL_LANGUAGE (olddecl);
8926095f
MS
3354 else
3355 {
8251199e 3356 cp_error_at ("previous declaration of `%#D' with %L linkage",
8926095f 3357 olddecl, DECL_LANGUAGE (olddecl));
8251199e 3358 cp_error ("conflicts with new declaration with %L linkage",
8926095f
MS
3359 DECL_LANGUAGE (newdecl));
3360 }
3361 }
e1cd6e56 3362
a6f02587 3363 if (DECL_LANG_SPECIFIC (olddecl) && DECL_USE_TEMPLATE (olddecl))
c32381b1
JM
3364 ;
3365 else if (TREE_CODE (olddecl) == FUNCTION_DECL)
e1cd6e56
MS
3366 {
3367 tree t1 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
3368 tree t2 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
3369 int i = 1;
3370
3371 if (TREE_CODE (TREE_TYPE (newdecl)) == METHOD_TYPE)
3372 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2);
68642fb6 3373
e1cd6e56
MS
3374 for (; t1 && t1 != void_list_node;
3375 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2), i++)
3376 if (TREE_PURPOSE (t1) && TREE_PURPOSE (t2))
3377 {
2507f3b5
RK
3378 if (1 == simple_cst_equal (TREE_PURPOSE (t1),
3379 TREE_PURPOSE (t2)))
e1cd6e56
MS
3380 {
3381 if (pedantic)
3382 {
8251199e 3383 cp_pedwarn ("default argument given for parameter %d of `%#D'",
e1cd6e56 3384 i, newdecl);
8251199e 3385 cp_pedwarn_at ("after previous specification in `%#D'",
e1cd6e56
MS
3386 olddecl);
3387 }
3388 }
3389 else
3390 {
8251199e 3391 cp_error ("default argument given for parameter %d of `%#D'",
e1cd6e56 3392 i, newdecl);
8251199e 3393 cp_error_at ("after previous specification in `%#D'",
e1cd6e56
MS
3394 olddecl);
3395 }
3396 }
a5894242 3397
7fcdf4c2
MS
3398 if (DECL_THIS_INLINE (newdecl) && ! DECL_THIS_INLINE (olddecl)
3399 && TREE_ADDRESSABLE (olddecl) && warn_inline)
dff6b454 3400 {
8251199e 3401 cp_warning ("`%#D' was used before it was declared inline",
7fcdf4c2 3402 newdecl);
8251199e 3403 cp_warning_at ("previous non-inline declaration here",
7fcdf4c2 3404 olddecl);
dff6b454 3405 }
e1cd6e56 3406 }
8d08fdba
MS
3407 }
3408
3409 /* If new decl is `static' and an `extern' was seen previously,
3410 warn about it. */
3411 warn_extern_redeclared_static (newdecl, olddecl);
3412
e92cc029 3413 /* We have committed to returning 1 at this point. */
8d08fdba
MS
3414 if (TREE_CODE (newdecl) == FUNCTION_DECL)
3415 {
3416 /* Now that functions must hold information normally held
3417 by field decls, there is extra work to do so that
3418 declaration information does not get destroyed during
3419 definition. */
3420 if (DECL_VINDEX (olddecl))
3421 DECL_VINDEX (newdecl) = DECL_VINDEX (olddecl);
4f1c5b7d
MM
3422 if (DECL_VIRTUAL_CONTEXT (olddecl))
3423 DECL_VIRTUAL_CONTEXT (newdecl) = DECL_VIRTUAL_CONTEXT (olddecl);
8d08fdba
MS
3424 if (DECL_CONTEXT (olddecl))
3425 DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
0e5921e8 3426 if (DECL_PENDING_INLINE_INFO (newdecl) == 0)
8d08fdba 3427 DECL_PENDING_INLINE_INFO (newdecl) = DECL_PENDING_INLINE_INFO (olddecl);
e1cd6e56
MS
3428 DECL_STATIC_CONSTRUCTOR (newdecl) |= DECL_STATIC_CONSTRUCTOR (olddecl);
3429 DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
fee7654e 3430 DECL_PURE_VIRTUAL_P (newdecl) |= DECL_PURE_VIRTUAL_P (olddecl);
864b83b9 3431 DECL_VIRTUAL_P (newdecl) |= DECL_VIRTUAL_P (olddecl);
4a67c9e9 3432 DECL_NEEDS_FINAL_OVERRIDER_P (newdecl) |= DECL_NEEDS_FINAL_OVERRIDER_P (olddecl);
963d5758 3433 DECL_THIS_STATIC (newdecl) |= DECL_THIS_STATIC (olddecl);
e0fff4b3
JM
3434 if (DECL_OVERLOADED_OPERATOR_P (olddecl) != ERROR_MARK)
3435 SET_OVERLOADED_OPERATOR_CODE
3436 (newdecl, DECL_OVERLOADED_OPERATOR_P (olddecl));
0b60dfe3 3437 new_defines_function = DECL_INITIAL (newdecl) != NULL_TREE;
68642fb6 3438
0b60dfe3
BK
3439 /* Optionally warn about more than one declaration for the same
3440 name, but don't warn about a function declaration followed by a
3441 definition. */
3442 if (warn_redundant_decls && ! DECL_ARTIFICIAL (olddecl)
3443 && !(new_defines_function && DECL_INITIAL (olddecl) == NULL_TREE)
3444 /* Don't warn about extern decl followed by definition. */
3445 && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl))
3446 /* Don't warn about friends, let add_friend take care of it. */
3447 && ! DECL_FRIEND_P (newdecl))
3448 {
8251199e
JM
3449 cp_warning ("redundant redeclaration of `%D' in same scope", newdecl);
3450 cp_warning_at ("previous declaration of `%D'", olddecl);
0b60dfe3 3451 }
8d08fdba
MS
3452 }
3453
3454 /* Deal with C++: must preserve virtual function table size. */
3455 if (TREE_CODE (olddecl) == TYPE_DECL)
3456 {
3457 register tree newtype = TREE_TYPE (newdecl);
3458 register tree oldtype = TREE_TYPE (olddecl);
3459
3460 if (newtype != error_mark_node && oldtype != error_mark_node
3461 && TYPE_LANG_SPECIFIC (newtype) && TYPE_LANG_SPECIFIC (oldtype))
3462 {
3463 CLASSTYPE_VSIZE (newtype) = CLASSTYPE_VSIZE (oldtype);
3464 CLASSTYPE_FRIEND_CLASSES (newtype)
3465 = CLASSTYPE_FRIEND_CLASSES (oldtype);
3466 }
970d6386
MM
3467
3468 DECL_ORIGINAL_TYPE (newdecl) = DECL_ORIGINAL_TYPE (olddecl);
8d08fdba
MS
3469 }
3470
8d08fdba
MS
3471 /* Copy all the DECL_... slots specified in the new decl
3472 except for any that we copy here from the old type. */
68642fb6 3473 DECL_MACHINE_ATTRIBUTES (newdecl)
0b60dfe3 3474 = merge_machine_decl_attributes (olddecl, newdecl);
8d08fdba 3475
5566b478
MS
3476 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
3477 {
4d85e00e 3478 TREE_TYPE (olddecl) = TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl));
68642fb6 3479 DECL_TEMPLATE_SPECIALIZATIONS (olddecl)
4d85e00e
MM
3480 = chainon (DECL_TEMPLATE_SPECIALIZATIONS (olddecl),
3481 DECL_TEMPLATE_SPECIALIZATIONS (newdecl));
68642fb6 3482
5566b478
MS
3483 return 1;
3484 }
68642fb6 3485
8d08fdba
MS
3486 if (types_match)
3487 {
3488 /* Automatically handles default parameters. */
3489 tree oldtype = TREE_TYPE (olddecl);
e1cd6e56 3490 tree newtype;
8d08fdba 3491
e1cd6e56
MS
3492 /* Merge the data types specified in the two decls. */
3493 newtype = common_type (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
3494
9076e292
JM
3495 /* If common_type produces a non-typedef type, just use the old type. */
3496 if (TREE_CODE (newdecl) == TYPE_DECL
3497 && newtype == DECL_ORIGINAL_TYPE (newdecl))
3498 newtype = oldtype;
3499
8d08fdba
MS
3500 if (TREE_CODE (newdecl) == VAR_DECL)
3501 DECL_THIS_EXTERN (newdecl) |= DECL_THIS_EXTERN (olddecl);
3502 /* Do this after calling `common_type' so that default
3503 parameters don't confuse us. */
3504 else if (TREE_CODE (newdecl) == FUNCTION_DECL
3505 && (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl))
3506 != TYPE_RAISES_EXCEPTIONS (TREE_TYPE (olddecl))))
3507 {
f30432d7 3508 TREE_TYPE (newdecl) = build_exception_variant (newtype,
8d08fdba 3509 TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl)));
f30432d7 3510 TREE_TYPE (olddecl) = build_exception_variant (newtype,
8d08fdba
MS
3511 TYPE_RAISES_EXCEPTIONS (oldtype));
3512
9a224b4a
JM
3513 if ((pedantic || ! DECL_IN_SYSTEM_HEADER (olddecl))
3514 && DECL_SOURCE_LINE (olddecl) != 0
da20811c 3515 && flag_exceptions
4cc1d462
NS
3516 && !comp_except_specs (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl)),
3517 TYPE_RAISES_EXCEPTIONS (TREE_TYPE (olddecl)), 1))
8d08fdba 3518 {
4cc1d462 3519 cp_error ("declaration of `%F' throws different exceptions",
a28e3c7f 3520 newdecl);
a09ba2e0 3521 cp_error_at ("than previous declaration `%F'", olddecl);
8d08fdba
MS
3522 }
3523 }
3524 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
3525
3526 /* Lay the type out, unless already done. */
407f03b8 3527 if (! same_type_p (newtype, oldtype)
5566b478 3528 && TREE_TYPE (newdecl) != error_mark_node
5156628f 3529 && !(processing_template_decl && uses_template_parms (newdecl)))
b7484fbe
MS
3530 layout_type (TREE_TYPE (newdecl));
3531
5566b478
MS
3532 if ((TREE_CODE (newdecl) == VAR_DECL
3533 || TREE_CODE (newdecl) == PARM_DECL
3534 || TREE_CODE (newdecl) == RESULT_DECL
3535 || TREE_CODE (newdecl) == FIELD_DECL
3536 || TREE_CODE (newdecl) == TYPE_DECL)
5156628f 3537 && !(processing_template_decl && uses_template_parms (newdecl)))
b7484fbe 3538 layout_decl (newdecl, 0);
8d08fdba
MS
3539
3540 /* Merge the type qualifiers. */
3541 if (TREE_READONLY (newdecl))
3542 TREE_READONLY (olddecl) = 1;
3543 if (TREE_THIS_VOLATILE (newdecl))
3544 TREE_THIS_VOLATILE (olddecl) = 1;
3545
3546 /* Merge the initialization information. */
8926095f
MS
3547 if (DECL_INITIAL (newdecl) == NULL_TREE
3548 && DECL_INITIAL (olddecl) != NULL_TREE)
3549 {
3550 DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
3551 DECL_SOURCE_FILE (newdecl) = DECL_SOURCE_FILE (olddecl);
3552 DECL_SOURCE_LINE (newdecl) = DECL_SOURCE_LINE (olddecl);
b0d06515
MM
3553 if (CAN_HAVE_FULL_LANG_DECL_P (newdecl)
3554 && DECL_LANG_SPECIFIC (newdecl)
4d85e00e
MM
3555 && DECL_LANG_SPECIFIC (olddecl))
3556 DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
8926095f 3557 }
39211cd5
MS
3558
3559 /* Merge the section attribute.
3560 We want to issue an error if the sections conflict but that must be
3561 done later in decl_attributes since we are called before attributes
3562 are assigned. */
3563 if (DECL_SECTION_NAME (newdecl) == NULL_TREE)
3564 DECL_SECTION_NAME (newdecl) = DECL_SECTION_NAME (olddecl);
3565
5d73aa63 3566 /* Keep the old rtl since we can safely use it. */
19e7881c 3567 COPY_DECL_RTL (olddecl, newdecl);
a157febd
GK
3568
3569 if (TREE_CODE (newdecl) == FUNCTION_DECL)
3570 {
3571 DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (newdecl)
3572 |= DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (olddecl);
3573 DECL_NO_CHECK_MEMORY_USAGE (newdecl)
3574 |= DECL_NO_CHECK_MEMORY_USAGE (olddecl);
3575 DECL_NO_LIMIT_STACK (newdecl)
3576 |= DECL_NO_LIMIT_STACK (olddecl);
3577 }
8d08fdba
MS
3578 }
3579 /* If cannot merge, then use the new type and qualifiers,
3580 and don't preserve the old rtl. */
3581 else
3582 {
3583 /* Clean out any memory we had of the old declaration. */
3584 tree oldstatic = value_member (olddecl, static_aggregates);
3585 if (oldstatic)
3586 TREE_VALUE (oldstatic) = error_mark_node;
3587
3588 TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
3589 TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
3590 TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
3591 TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
3592 }
3593
3594 /* Merge the storage class information. */
a9aedbc2 3595 DECL_WEAK (newdecl) |= DECL_WEAK (olddecl);
e92cc029 3596 DECL_ONE_ONLY (newdecl) |= DECL_ONE_ONLY (olddecl);
794d4a61 3597 DECL_DEFER_OUTPUT (newdecl) |= DECL_DEFER_OUTPUT (olddecl);
a9aedbc2
MS
3598 TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
3599 TREE_STATIC (olddecl) = TREE_STATIC (newdecl) |= TREE_STATIC (olddecl);
3600 if (! DECL_EXTERNAL (olddecl))
3601 DECL_EXTERNAL (newdecl) = 0;
68642fb6 3602
0b60dfe3 3603 if (DECL_LANG_SPECIFIC (newdecl) && DECL_LANG_SPECIFIC (olddecl))
8d08fdba 3604 {
a9aedbc2
MS
3605 DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl);
3606 DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl);
77be6f82 3607 DECL_COMDAT (newdecl) |= DECL_COMDAT (olddecl);
68642fb6 3608 DECL_TEMPLATE_INSTANTIATED (newdecl)
2b0a63a3 3609 |= DECL_TEMPLATE_INSTANTIATED (olddecl);
0b60dfe3
BK
3610 /* Don't really know how much of the language-specific
3611 values we should copy from old to new. */
3612 DECL_IN_AGGR_P (newdecl) = DECL_IN_AGGR_P (olddecl);
3613 DECL_ACCESS (newdecl) = DECL_ACCESS (olddecl);
3614 DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl);
fbf1c34b 3615 DECL_TEMPLATE_INFO (newdecl) = DECL_TEMPLATE_INFO (olddecl);
3febd123
NS
3616 DECL_INITIALIZED_IN_CLASS_P (newdecl)
3617 |= DECL_INITIALIZED_IN_CLASS_P (olddecl);
0b60dfe3 3618 olddecl_friend = DECL_FRIEND_P (olddecl);
6a629cac
MM
3619
3620 /* Only functions have DECL_BEFRIENDING_CLASSES. */
3621 if (TREE_CODE (newdecl) == FUNCTION_DECL
3622 || DECL_FUNCTION_TEMPLATE_P (newdecl))
3623 DECL_BEFRIENDING_CLASSES (newdecl)
3624 = chainon (DECL_BEFRIENDING_CLASSES (newdecl),
3625 DECL_BEFRIENDING_CLASSES (olddecl));
8d08fdba
MS
3626 }
3627
8d08fdba
MS
3628 if (TREE_CODE (newdecl) == FUNCTION_DECL)
3629 {
68642fb6
UD
3630 if (DECL_TEMPLATE_INSTANTIATION (olddecl)
3631 && !DECL_TEMPLATE_INSTANTIATION (newdecl))
75650646
MM
3632 {
3633 /* If newdecl is not a specialization, then it is not a
3634 template-related function at all. And that means that we
3635 shoud have exited above, returning 0. */
3636 my_friendly_assert (DECL_TEMPLATE_SPECIALIZATION (newdecl),
3637 0);
3638
68642fb6 3639 if (TREE_USED (olddecl))
75650646 3640 /* From [temp.expl.spec]:
68642fb6 3641
75650646
MM
3642 If a template, a member template or the member of a class
3643 template is explicitly specialized then that
3644 specialization shall be declared before the first use of
3645 that specialization that would cause an implicit
3646 instantiation to take place, in every translation unit in
3647 which such a use occurs. */
68642fb6 3648 cp_error ("explicit specialization of %D after first use",
75650646
MM
3649 olddecl);
3650
3651 SET_DECL_TEMPLATE_SPECIALIZATION (olddecl);
3652 }
faae18ab
MS
3653 DECL_THIS_INLINE (newdecl) |= DECL_THIS_INLINE (olddecl);
3654
3655 /* If either decl says `inline', this fn is inline, unless its
3656 definition was passed already. */
3657 if (DECL_INLINE (newdecl) && DECL_INITIAL (olddecl) == NULL_TREE)
3658 DECL_INLINE (olddecl) = 1;
3659 DECL_INLINE (newdecl) = DECL_INLINE (olddecl);
3660
5daf7c0a
JM
3661 /* Preserve abstractness on cloned [cd]tors. */
3662 DECL_ABSTRACT (newdecl) = DECL_ABSTRACT (olddecl);
3663
700f8a87
MS
3664 if (! types_match)
3665 {
3666 DECL_LANGUAGE (olddecl) = DECL_LANGUAGE (newdecl);
92643fea 3667 COPY_DECL_ASSEMBLER_NAME (newdecl, olddecl);
19e7881c 3668 SET_DECL_RTL (olddecl, DECL_RTL (newdecl));
5566b478
MS
3669 }
3670 if (! types_match || new_defines_function)
3671 {
6f1b4c42
JM
3672 /* These need to be copied so that the names are available.
3673 Note that if the types do match, we'll preserve inline
3674 info and other bits, but if not, we won't. */
700f8a87
MS
3675 DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
3676 DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
700f8a87 3677 }
8d08fdba
MS
3678 if (new_defines_function)
3679 /* If defining a function declared with other language
3680 linkage, use the previously declared language linkage. */
3681 DECL_LANGUAGE (newdecl) = DECL_LANGUAGE (olddecl);
6f1b4c42 3682 else if (types_match)
8d08fdba
MS
3683 {
3684 /* If redeclaring a builtin function, and not a definition,
3685 it stays built in. */
3686 if (DECL_BUILT_IN (olddecl))
3687 {
26db82d8 3688 DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
39211cd5 3689 DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
8d08fdba
MS
3690 /* If we're keeping the built-in definition, keep the rtl,
3691 regardless of declaration matches. */
19e7881c 3692 SET_DECL_RTL (newdecl, DECL_RTL (olddecl));
8d08fdba
MS
3693 }
3694 else
b850de4f 3695 DECL_NUM_STMTS (newdecl) = DECL_NUM_STMTS (olddecl);
8d08fdba
MS
3696
3697 DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
8926095f 3698 if ((DECL_SAVED_INSNS (newdecl) = DECL_SAVED_INSNS (olddecl)))
8d08fdba
MS
3699 /* Previously saved insns go together with
3700 the function's previous definition. */
3701 DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
3702 /* Don't clear out the arguments if we're redefining a function. */
3703 if (DECL_ARGUMENTS (olddecl))
3704 DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
3705 }
3706 }
3707
a9aedbc2
MS
3708 if (TREE_CODE (newdecl) == NAMESPACE_DECL)
3709 {
3710 NAMESPACE_LEVEL (newdecl) = NAMESPACE_LEVEL (olddecl);
3711 }
3712
8d08fdba
MS
3713 /* Now preserve various other info from the definition. */
3714 TREE_ADDRESSABLE (newdecl) = TREE_ADDRESSABLE (olddecl);
3715 TREE_ASM_WRITTEN (newdecl) = TREE_ASM_WRITTEN (olddecl);
3716 DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
92643fea 3717 COPY_DECL_ASSEMBLER_NAME (olddecl, newdecl);
8d08fdba 3718
8d08fdba
MS
3719 if (TREE_CODE (newdecl) == FUNCTION_DECL)
3720 {
3721 int function_size;
8d08fdba
MS
3722
3723 function_size = sizeof (struct tree_decl);
3724
730e1556
KG
3725 memcpy ((char *) olddecl + sizeof (struct tree_common),
3726 (char *) newdecl + sizeof (struct tree_common),
3727 function_size - sizeof (struct tree_common));
8d08fdba 3728
75650646
MM
3729 if (DECL_TEMPLATE_INSTANTIATION (newdecl))
3730 {
3731 /* If newdecl is a template instantiation, it is possible that
3732 the following sequence of events has occurred:
3733
3734 o A friend function was declared in a class template. The
68642fb6 3735 class template was instantiated.
75650646 3736
68642fb6
UD
3737 o The instantiation of the friend declaration was
3738 recorded on the instantiation list, and is newdecl.
75650646
MM
3739
3740 o Later, however, instantiate_class_template called pushdecl
3741 on the newdecl to perform name injection. But, pushdecl in
3742 turn called duplicate_decls when it discovered that another
3743 declaration of a global function with the same name already
68642fb6 3744 existed.
75650646
MM
3745
3746 o Here, in duplicate_decls, we decided to clobber newdecl.
3747
3748 If we're going to do that, we'd better make sure that
3749 olddecl, and not newdecl, is on the list of
3750 instantiations so that if we try to do the instantiation
3751 again we won't get the clobbered declaration. */
3752
68642fb6
UD
3753 tree tmpl = DECL_TI_TEMPLATE (newdecl);
3754 tree decls = DECL_TEMPLATE_SPECIALIZATIONS (tmpl);
75650646
MM
3755
3756 for (; decls; decls = TREE_CHAIN (decls))
3757 if (TREE_VALUE (decls) == newdecl)
3758 TREE_VALUE (decls) = olddecl;
3759 }
8d08fdba
MS
3760 }
3761 else
3762 {
730e1556
KG
3763 memcpy ((char *) olddecl + sizeof (struct tree_common),
3764 (char *) newdecl + sizeof (struct tree_common),
3765 sizeof (struct tree_decl) - sizeof (struct tree_common)
3766 + tree_code_length [(int)TREE_CODE (newdecl)] * sizeof (char *));
8d08fdba
MS
3767 }
3768
3769 DECL_UID (olddecl) = olddecl_uid;
3770 if (olddecl_friend)
3771 DECL_FRIEND_P (olddecl) = 1;
3772
d9525bec
BK
3773 /* NEWDECL contains the merged attribute lists.
3774 Update OLDDECL to be the same. */
3775 DECL_MACHINE_ATTRIBUTES (olddecl) = DECL_MACHINE_ATTRIBUTES (newdecl);
3776
8d08fdba
MS
3777 return 1;
3778}
3779
3780/* Record a decl-node X as belonging to the current lexical scope.
3781 Check for errors (such as an incompatible declaration for the same
3782 name already seen in the same scope).
3783
3784 Returns either X or an old decl for the same name.
3785 If an old decl is returned, it may have been smashed
3786 to agree with what X says. */
3787
3788tree
3789pushdecl (x)
3790 tree x;
3791{
3792 register tree t;
b35d4555
MM
3793 register tree name;
3794 int need_new_binding;
3795
3796 /* We shouldn't be calling pushdecl when we're generating RTL for a
3797 function that we already did semantic analysis on previously. */
01d939e8 3798 my_friendly_assert (!cfun || doing_semantic_analysis_p (),
b35d4555
MM
3799 19990913);
3800
b35d4555 3801 need_new_binding = 1;
8d08fdba 3802
50714e79
MM
3803 if (DECL_TEMPLATE_PARM_P (x))
3804 /* Template parameters have no context; they are not X::T even
3805 when declared within a class or namespace. */
3806 ;
3807 else
3808 {
3809 if (current_function_decl && x != current_function_decl
3810 /* A local declaration for a function doesn't constitute
3811 nesting. */
f39ee884
MM
3812 && !(TREE_CODE (x) == FUNCTION_DECL && !DECL_INITIAL (x))
3813 /* A local declaration for an `extern' variable is in the
94dfccd1 3814 scope of the current namespace, not the current
f39ee884
MM
3815 function. */
3816 && !(TREE_CODE (x) == VAR_DECL && DECL_EXTERNAL (x))
50714e79
MM
3817 && !DECL_CONTEXT (x))
3818 DECL_CONTEXT (x) = current_function_decl;
cd9f6678
MM
3819
3820 /* If this is the declaration for a namespace-scope function,
3821 but the declaration itself is in a local scope, mark the
3822 declaration. */
68642fb6 3823 if (TREE_CODE (x) == FUNCTION_DECL
cd9f6678
MM
3824 && DECL_NAMESPACE_SCOPE_P (x)
3825 && current_function_decl
3826 && x != current_function_decl)
3827 DECL_LOCAL_FUNCTION_P (x) = 1;
50714e79 3828 }
8d08fdba 3829
fe8fadc1 3830 name = DECL_NAME (x);
8d08fdba
MS
3831 if (name)
3832 {
94dfccd1
JM
3833 int different_binding_level = 0;
3834
386b8a85
JM
3835 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
3836 name = TREE_OPERAND (name, 0);
68642fb6 3837
94dfccd1
JM
3838 /* In case this decl was explicitly namespace-qualified, look it
3839 up in its namespace context. */
3840 if (TREE_CODE (x) == VAR_DECL && DECL_NAMESPACE_SCOPE_P (x)
3841 && namespace_bindings_p ())
2c73f9f5
ML
3842 t = namespace_binding (name, DECL_CONTEXT (x));
3843 else
3844 t = lookup_name_current_level (name);
fe8fadc1 3845
94dfccd1
JM
3846 /* [basic.link] If there is a visible declaration of an entity
3847 with linkage having the same name and type, ignoring entities
3848 declared outside the innermost enclosing namespace scope, the
3849 block scope declaration declares that same entity and
3850 receives the linkage of the previous declaration. */
3851 if (! t && current_function_decl && x != current_function_decl
3852 && (TREE_CODE (x) == FUNCTION_DECL || TREE_CODE (x) == VAR_DECL)
3853 && DECL_EXTERNAL (x))
3854 {
3855 /* Look in block scope. */
3856 t = IDENTIFIER_VALUE (name);
3857 /* Or in the innermost namespace. */
3858 if (! t)
3859 t = namespace_binding (name, DECL_CONTEXT (x));
fab09a24
JM
3860 /* Does it have linkage? Note that if this isn't a DECL, it's an
3861 OVERLOAD, which is OK. */
3862 if (t && DECL_P (t) && ! (TREE_STATIC (t) || DECL_EXTERNAL (t)))
94dfccd1
JM
3863 t = NULL_TREE;
3864 if (t)
3865 different_binding_level = 1;
3866 }
3867
fe8fadc1
MM
3868 /* If we are declaring a function, and the result of name-lookup
3869 was an OVERLOAD, look for an overloaded instance that is
3870 actually the same as the function we are declaring. (If
3871 there is one, we have to merge our declaration with the
3872 previous declaration.) */
655dc6ee 3873 if (t && TREE_CODE (t) == OVERLOAD)
fe8fadc1
MM
3874 {
3875 tree match;
3876
655dc6ee
JM
3877 if (TREE_CODE (x) == FUNCTION_DECL)
3878 for (match = t; match; match = OVL_NEXT (match))
3879 {
92643fea 3880 if (decls_match (OVL_CURRENT (match), x))
655dc6ee
JM
3881 break;
3882 }
3883 else
3884 /* Just choose one. */
3885 match = t;
fe8fadc1
MM
3886
3887 if (match)
3888 t = OVL_CURRENT (match);
3889 else
3890 t = NULL_TREE;
3891 }
3892
8d08fdba
MS
3893 if (t == error_mark_node)
3894 {
3895 /* error_mark_node is 0 for a while during initialization! */
3896 t = NULL_TREE;
8251199e 3897 cp_error_at ("`%#D' used prior to declaration", x);
8d08fdba 3898 }
51c184be 3899 else if (t != NULL_TREE)
8d08fdba 3900 {
94dfccd1
JM
3901 if (different_binding_level)
3902 {
3903 if (decls_match (x, t))
3904 /* The standard only says that the local extern
3905 inherits linkage from the previous decl; in
3906 particular, default args are not shared. It would
3907 be nice to propagate inlining info, though. FIXME. */
3908 TREE_PUBLIC (x) = TREE_PUBLIC (t);
3909 }
3910 else if (TREE_CODE (t) == PARM_DECL)
8d08fdba
MS
3911 {
3912 if (DECL_CONTEXT (t) == NULL_TREE)
400500c4
RK
3913 /* This is probaby caused by too many errors, but calling
3914 abort will say that if errors have occurred. */
3915 abort ();
be99da77 3916
e92cc029 3917 /* Check for duplicate params. */
be99da77
MS
3918 if (duplicate_decls (x, t))
3919 return t;
8d08fdba 3920 }
eb68cb58 3921 else if ((DECL_EXTERN_C_FUNCTION_P (x)
5566b478
MS
3922 || DECL_FUNCTION_TEMPLATE_P (x))
3923 && is_overloaded_fn (t))
2c73f9f5 3924 /* Don't do anything just yet. */;
e1cd6e56
MS
3925 else if (t == wchar_decl_node)
3926 {
3927 if (pedantic && ! DECL_IN_SYSTEM_HEADER (x))
8251199e 3928 cp_pedwarn ("redeclaration of wchar_t as `%T'", TREE_TYPE (x));
e1cd6e56
MS
3929
3930 /* Throw away the redeclaration. */
3931 return t;
3932 }
8926095f 3933 else if (TREE_CODE (t) != TREE_CODE (x))
8d08fdba 3934 {
9ed182dc 3935 if (duplicate_decls (x, t))
51c184be 3936 return t;
8d08fdba
MS
3937 }
3938 else if (duplicate_decls (x, t))
51c184be 3939 {
7177d104
MS
3940 if (TREE_CODE (t) == TYPE_DECL)
3941 SET_IDENTIFIER_TYPE_VALUE (name, TREE_TYPE (t));
f30432d7
MS
3942 else if (TREE_CODE (t) == FUNCTION_DECL)
3943 check_default_args (t);
7177d104 3944
51c184be
MS
3945 return t;
3946 }
35680744
MM
3947 else if (DECL_MAIN_P (x))
3948 {
3949 /* A redeclaration of main, but not a duplicate of the
68642fb6 3950 previous one.
35680744
MM
3951
3952 [basic.start.main]
3953
3954 This function shall not be overloaded. */
8251199e
JM
3955 cp_error_at ("invalid redeclaration of `%D'", t);
3956 cp_error ("as `%D'", x);
35680744
MM
3957 /* We don't try to push this declaration since that
3958 causes a crash. */
3959 return x;
3960 }
8d08fdba 3961 }
8926095f 3962
f3400fe2
JM
3963 check_template_shadow (x);
3964
fcfcdfc8
JM
3965 /* If this is a function conjured up by the backend, massage it
3966 so it looks friendly. */
eb68cb58 3967 if (DECL_NON_THUNK_FUNCTION_P (x) && ! DECL_LANG_SPECIFIC (x))
fcfcdfc8
JM
3968 {
3969 retrofit_lang_decl (x);
3970 DECL_LANGUAGE (x) = lang_c;
3971 }
3972
eb68cb58 3973 if (DECL_NON_THUNK_FUNCTION_P (x) && ! DECL_FUNCTION_MEMBER_P (x))
8926095f 3974 {
7bdbfa05 3975 t = push_overloaded_decl (x, PUSH_LOCAL);
5fdaba89 3976 if (t != x)
8926095f 3977 return t;
f181d4ae
MM
3978 if (!namespace_bindings_p ())
3979 /* We do not need to create a binding for this name;
3980 push_overloaded_decl will have already done so if
3981 necessary. */
3982 need_new_binding = 0;
8926095f 3983 }
6eb3bb27 3984 else if (DECL_FUNCTION_TEMPLATE_P (x) && DECL_NAMESPACE_SCOPE_P (x))
cfe507be
MM
3985 {
3986 t = push_overloaded_decl (x, PUSH_GLOBAL);
3987 if (t == x)
3988 add_decl_to_level (x, NAMESPACE_LEVEL (CP_DECL_CONTEXT (t)));
3989 return t;
3990 }
8d08fdba 3991
a1774733
BK
3992 /* If declaring a type as a typedef, copy the type (unless we're
3993 at line 0), and install this TYPE_DECL as the new type's typedef
3994 name. See the extensive comment in ../c-decl.c (pushdecl). */
8d08fdba
MS
3995 if (TREE_CODE (x) == TYPE_DECL)
3996 {
3997 tree type = TREE_TYPE (x);
655dc6ee 3998 if (DECL_SOURCE_LINE (x) == 0)
a1774733
BK
3999 {
4000 if (TYPE_NAME (type) == 0)
4001 TYPE_NAME (type) = x;
4002 }
1c80fb65
MM
4003 else if (type != error_mark_node && TYPE_NAME (type) != x
4004 /* We don't want to copy the type when all we're
4005 doing is making a TYPE_DECL for the purposes of
4006 inlining. */
68642fb6 4007 && (!TYPE_NAME (type)
1c80fb65 4008 || TYPE_NAME (type) != DECL_ABSTRACT_ORIGIN (x)))
a1774733
BK
4009 {
4010 DECL_ORIGINAL_TYPE (x) = type;
4011 type = build_type_copy (type);
4012 TYPE_STUB_DECL (type) = TYPE_STUB_DECL (DECL_ORIGINAL_TYPE (x));
4013 TYPE_NAME (type) = x;
4014 TREE_TYPE (x) = type;
4015 }
8d08fdba 4016
8d08fdba
MS
4017 if (type != error_mark_node
4018 && TYPE_NAME (type)
4019 && TYPE_IDENTIFIER (type))
68642fb6 4020 set_identifier_type_value_with_scope (DECL_NAME (x), type,
f181d4ae
MM
4021 current_binding_level);
4022
8d08fdba
MS
4023 }
4024
4025 /* Multiple external decls of the same identifier ought to match.
4026
4027 We get warnings about inline functions where they are defined.
39211cd5 4028 We get warnings about other functions from push_overloaded_decl.
68642fb6 4029
8d08fdba 4030 Avoid duplicate warnings where they are used. */
39211cd5 4031 if (TREE_PUBLIC (x) && TREE_CODE (x) != FUNCTION_DECL)
8d08fdba
MS
4032 {
4033 tree decl;
4034
f49fad00
JM
4035 decl = IDENTIFIER_NAMESPACE_VALUE (name);
4036 if (decl && TREE_CODE (decl) == OVERLOAD)
4037 decl = OVL_FUNCTION (decl);
8d08fdba 4038
f49fad00
JM
4039 if (decl && decl != error_mark_node
4040 && (DECL_EXTERNAL (decl) || TREE_PUBLIC (decl))
8d08fdba
MS
4041 /* If different sort of thing, we already gave an error. */
4042 && TREE_CODE (decl) == TREE_CODE (x)
3bfdc719 4043 && !same_type_p (TREE_TYPE (x), TREE_TYPE (decl)))
8d08fdba 4044 {
8251199e
JM
4045 cp_pedwarn ("type mismatch with previous external decl", x);
4046 cp_pedwarn_at ("previous external decl of `%#D'", decl);
8d08fdba
MS
4047 }
4048 }
4049
8d08fdba
MS
4050 /* This name is new in its binding level.
4051 Install the new declaration and return it. */
2c73f9f5 4052 if (namespace_bindings_p ())
8d08fdba
MS
4053 {
4054 /* Install a global value. */
4055
8d08fdba
MS
4056 /* If the first global decl has external linkage,
4057 warn if we later see static one. */
31928556 4058 if (IDENTIFIER_GLOBAL_VALUE (name) == NULL_TREE && TREE_PUBLIC (x))
8d08fdba 4059 TREE_PUBLIC (name) = 1;
5362b086 4060
92643fea
MM
4061 /* Bind the name for the entity. */
4062 if (!(TREE_CODE (x) == TYPE_DECL && DECL_ARTIFICIAL (x)
4063 && t != NULL_TREE)
4064 && (TREE_CODE (x) == TYPE_DECL
4065 || TREE_CODE (x) == VAR_DECL
4066 || TREE_CODE (x) == NAMESPACE_DECL
4067 || TREE_CODE (x) == CONST_DECL
4068 || TREE_CODE (x) == TEMPLATE_DECL))
4069 SET_IDENTIFIER_NAMESPACE_VALUE (name, x);
8d08fdba
MS
4070
4071 /* Don't forget if the function was used via an implicit decl. */
4072 if (IDENTIFIER_IMPLICIT_DECL (name)
4073 && TREE_USED (IDENTIFIER_IMPLICIT_DECL (name)))
4074 TREE_USED (x) = 1;
4075
4076 /* Don't forget if its address was taken in that way. */
4077 if (IDENTIFIER_IMPLICIT_DECL (name)
4078 && TREE_ADDRESSABLE (IDENTIFIER_IMPLICIT_DECL (name)))
4079 TREE_ADDRESSABLE (x) = 1;
4080
4081 /* Warn about mismatches against previous implicit decl. */
4082 if (IDENTIFIER_IMPLICIT_DECL (name) != NULL_TREE
4083 /* If this real decl matches the implicit, don't complain. */
4084 && ! (TREE_CODE (x) == FUNCTION_DECL
4085 && TREE_TYPE (TREE_TYPE (x)) == integer_type_node))
8251199e
JM
4086 cp_warning
4087 ("`%D' was previously implicitly declared to return `int'", x);
8d08fdba
MS
4088
4089 /* If new decl is `static' and an `extern' was seen previously,
4090 warn about it. */
a0a33927
MS
4091 if (x != NULL_TREE && t != NULL_TREE && decls_match (x, t))
4092 warn_extern_redeclared_static (x, t);
8d08fdba
MS
4093 }
4094 else
4095 {
4096 /* Here to install a non-global value. */
f181d4ae 4097 tree oldlocal = IDENTIFIER_VALUE (name);
31928556 4098 tree oldglobal = IDENTIFIER_NAMESPACE_VALUE (name);
8d08fdba 4099
f181d4ae
MM
4100 if (need_new_binding)
4101 {
0034cf72 4102 push_local_binding (name, x, 0);
f181d4ae
MM
4103 /* Because push_local_binding will hook X on to the
4104 current_binding_level's name list, we don't want to
4105 do that again below. */
4106 need_new_binding = 0;
4107 }
8d08fdba
MS
4108
4109 /* If this is a TYPE_DECL, push it into the type value slot. */
4110 if (TREE_CODE (x) == TYPE_DECL)
68642fb6 4111 set_identifier_type_value_with_scope (name, TREE_TYPE (x),
f181d4ae 4112 current_binding_level);
8d08fdba 4113
a9aedbc2
MS
4114 /* Clear out any TYPE_DECL shadowed by a namespace so that
4115 we won't think this is a type. The C struct hack doesn't
4116 go through namespaces. */
4117 if (TREE_CODE (x) == NAMESPACE_DECL)
68642fb6 4118 set_identifier_type_value_with_scope (name, NULL_TREE,
f181d4ae 4119 current_binding_level);
a9aedbc2 4120
e905ac8a
MS
4121 if (oldlocal)
4122 {
4123 tree d = oldlocal;
17aec3eb 4124
74dc0d8c
MS
4125 while (oldlocal
4126 && TREE_CODE (oldlocal) == VAR_DECL
4127 && DECL_DEAD_FOR_LOCAL (oldlocal))
17aec3eb
RK
4128 oldlocal = DECL_SHADOWED_FOR_VAR (oldlocal);
4129
e905ac8a
MS
4130 if (oldlocal == NULL_TREE)
4131 oldlocal = IDENTIFIER_NAMESPACE_VALUE (DECL_NAME (d));
4132 }
4133
8d08fdba
MS
4134 /* If this is an extern function declaration, see if we
4135 have a global definition or declaration for the function. */
4136 if (oldlocal == NULL_TREE
faae18ab 4137 && DECL_EXTERNAL (x)
31928556 4138 && oldglobal != NULL_TREE
8d08fdba 4139 && TREE_CODE (x) == FUNCTION_DECL
31928556 4140 && TREE_CODE (oldglobal) == FUNCTION_DECL)
8d08fdba
MS
4141 {
4142 /* We have one. Their types must agree. */
31928556 4143 if (decls_match (x, oldglobal))
6060a796
MS
4144 /* OK */;
4145 else
8d08fdba 4146 {
8251199e
JM
4147 cp_warning ("extern declaration of `%#D' doesn't match", x);
4148 cp_warning_at ("global declaration `%#D'", oldglobal);
8d08fdba 4149 }
8d08fdba
MS
4150 }
4151 /* If we have a local external declaration,
4152 and no file-scope declaration has yet been seen,
4153 then if we later have a file-scope decl it must not be static. */
4154 if (oldlocal == NULL_TREE
31928556 4155 && oldglobal == NULL_TREE
8d08fdba
MS
4156 && DECL_EXTERNAL (x)
4157 && TREE_PUBLIC (x))
f181d4ae 4158 TREE_PUBLIC (name) = 1;
8d08fdba 4159
8d08fdba 4160 /* Warn if shadowing an argument at the top level of the body. */
e905ac8a
MS
4161 if (oldlocal != NULL_TREE && !DECL_EXTERNAL (x)
4162 /* Inline decls shadow nothing. */
4163 && !DECL_FROM_INLINE (x)
4164 && TREE_CODE (oldlocal) == PARM_DECL
4165 /* Don't complain if it's from an enclosing function. */
4166 && DECL_CONTEXT (oldlocal) == current_function_decl
4167 && TREE_CODE (x) != PARM_DECL)
8d08fdba
MS
4168 {
4169 /* Go to where the parms should be and see if we
4170 find them there. */
4171 struct binding_level *b = current_binding_level->level_chain;
4172
4173 if (cleanup_label)
4174 b = b->level_chain;
4175
4176 /* ARM $8.3 */
4177 if (b->parm_flag == 1)
8251199e 4178 cp_error ("declaration of `%#D' shadows a parameter", name);
8d08fdba 4179 }
e905ac8a 4180
8d08fdba 4181 /* Maybe warn if shadowing something else. */
e905ac8a
MS
4182 if (warn_shadow && !DECL_EXTERNAL (x)
4183 /* Inline decls shadow nothing. */
4184 && !DECL_FROM_INLINE (x)
4185 /* No shadow warnings for internally generated vars. */
4186 && ! DECL_ARTIFICIAL (x)
4187 /* No shadow warnings for vars made for inlining. */
4188 && ! DECL_FROM_INLINE (x))
8d08fdba 4189 {
8d08fdba 4190 if (oldlocal != NULL_TREE && TREE_CODE (oldlocal) == PARM_DECL)
b9d12519
KG
4191 warning ("declaration of `%s' shadows a parameter",
4192 IDENTIFIER_POINTER (name));
8d08fdba 4193 else if (IDENTIFIER_CLASS_VALUE (name) != NULL_TREE
4ac14744 4194 && current_class_ptr
8d08fdba 4195 && !TREE_STATIC (name))
b9d12519
KG
4196 warning ("declaration of `%s' shadows a member of `this'",
4197 IDENTIFIER_POINTER (name));
8d08fdba 4198 else if (oldlocal != NULL_TREE)
b9d12519
KG
4199 warning ("declaration of `%s' shadows previous local",
4200 IDENTIFIER_POINTER (name));
31928556 4201 else if (oldglobal != NULL_TREE)
30394414 4202 /* XXX shadow warnings in outer-more namespaces */
b9d12519
KG
4203 warning ("declaration of `%s' shadows global declaration",
4204 IDENTIFIER_POINTER (name));
8d08fdba 4205 }
e1cd6e56 4206 }
8d08fdba 4207
e1cd6e56 4208 if (TREE_CODE (x) == FUNCTION_DECL)
f30432d7 4209 check_default_args (x);
8145f082
MS
4210
4211 /* Keep count of variables in this level with incomplete type. */
8145f082 4212 if (TREE_CODE (x) == VAR_DECL
28cbf42c 4213 && TREE_TYPE (x) != error_mark_node
d0f062fb 4214 && ((!COMPLETE_TYPE_P (TREE_TYPE (x))
f30432d7
MS
4215 && PROMOTES_TO_AGGR_TYPE (TREE_TYPE (x), ARRAY_TYPE))
4216 /* RTTI TD entries are created while defining the type_info. */
4217 || (TYPE_LANG_SPECIFIC (TREE_TYPE (x))
4218 && TYPE_BEING_DEFINED (TREE_TYPE (x)))))
70adf8a9
JM
4219 {
4220 if (namespace_bindings_p ())
4221 namespace_scope_incomplete
4222 = tree_cons (NULL_TREE, x, namespace_scope_incomplete);
4223 else
4224 current_binding_level->incomplete
4225 = tree_cons (NULL_TREE, x, current_binding_level->incomplete);
4226 }
8d08fdba
MS
4227 }
4228
f181d4ae 4229 if (need_new_binding)
68642fb6 4230 add_decl_to_level (x,
efee38a9
MM
4231 DECL_NAMESPACE_SCOPE_P (x)
4232 ? NAMESPACE_LEVEL (CP_DECL_CONTEXT (x))
4233 : current_binding_level);
8d08fdba
MS
4234
4235 return x;
4236}
4237
5566b478
MS
4238/* Same as pushdecl, but define X in binding-level LEVEL. We rely on the
4239 caller to set DECL_CONTEXT properly. */
8d08fdba
MS
4240
4241static tree
4242pushdecl_with_scope (x, level)
4243 tree x;
4244 struct binding_level *level;
4245{
8d019cef 4246 register struct binding_level *b;
5566b478 4247 tree function_decl = current_function_decl;
8d08fdba 4248
5566b478 4249 current_function_decl = NULL_TREE;
8d019cef
JM
4250 if (level->parm_flag == 2)
4251 {
4252 b = class_binding_level;
4253 class_binding_level = level;
4254 pushdecl_class_level (x);
4255 class_binding_level = b;
4256 }
4257 else
4258 {
4259 b = current_binding_level;
4260 current_binding_level = level;
4261 x = pushdecl (x);
4262 current_binding_level = b;
4263 }
5566b478 4264 current_function_decl = function_decl;
8d08fdba
MS
4265 return x;
4266}
4267
2c73f9f5 4268/* Like pushdecl, only it places X in the current namespace,
8d08fdba 4269 if appropriate. */
e92cc029 4270
8d08fdba 4271tree
2c73f9f5 4272pushdecl_namespace_level (x)
8d08fdba
MS
4273 tree x;
4274{
8f032717 4275 register struct binding_level *b = current_binding_level;
2c73f9f5
ML
4276 register tree t;
4277
4278 t = pushdecl_with_scope (x, NAMESPACE_LEVEL (current_namespace));
8d08fdba
MS
4279
4280 /* Now, the type_shadowed stack may screw us. Munge it so it does
4281 what we want. */
4282 if (TREE_CODE (x) == TYPE_DECL)
4283 {
4284 tree name = DECL_NAME (x);
4285 tree newval;
4286 tree *ptr = (tree *)0;
4287 for (; b != global_binding_level; b = b->level_chain)
4288 {
4289 tree shadowed = b->type_shadowed;
4290 for (; shadowed; shadowed = TREE_CHAIN (shadowed))
4291 if (TREE_PURPOSE (shadowed) == name)
4292 {
4293 ptr = &TREE_VALUE (shadowed);
4294 /* Can't break out of the loop here because sometimes
4295 a binding level will have duplicate bindings for
4296 PT names. It's gross, but I haven't time to fix it. */
4297 }
4298 }
4299 newval = TREE_TYPE (x);
4300 if (ptr == (tree *)0)
4301 {
4302 /* @@ This shouldn't be needed. My test case "zstring.cc" trips
4303 up here if this is changed to an assertion. --KR */
4304 SET_IDENTIFIER_TYPE_VALUE (name, newval);
4305 }
4306 else
4307 {
8d08fdba
MS
4308 *ptr = newval;
4309 }
4310 }
4311 return t;
4312}
4313
2c73f9f5
ML
4314/* Like pushdecl, only it places X in GLOBAL_BINDING_LEVEL,
4315 if appropriate. */
4316
4317tree
4318pushdecl_top_level (x)
4319 tree x;
4320{
b35d4555 4321 push_to_top_level ();
2c73f9f5 4322 x = pushdecl_namespace_level (x);
b35d4555 4323 pop_from_top_level ();
2c73f9f5
ML
4324 return x;
4325}
4326
8d08fdba 4327/* Make the declaration of X appear in CLASS scope. */
e92cc029 4328
61a127b3 4329void
8d08fdba
MS
4330pushdecl_class_level (x)
4331 tree x;
4332{
4333 /* Don't use DECL_ASSEMBLER_NAME here! Everything that looks in class
4334 scope looks for the pre-mangled name. */
8f032717
MM
4335 register tree name;
4336
4337 if (TREE_CODE (x) == OVERLOAD)
4338 x = OVL_CURRENT (x);
4339 name = DECL_NAME (x);
8d08fdba
MS
4340
4341 if (name)
4342 {
4343 push_class_level_binding (name, x);
4344 if (TREE_CODE (x) == TYPE_DECL)
f181d4ae 4345 set_identifier_type_value (name, TREE_TYPE (x));
8d08fdba 4346 }
6bdb8141 4347 else if (ANON_AGGR_TYPE_P (TREE_TYPE (x)))
8f032717
MM
4348 {
4349 tree f;
4350
4351 for (f = TYPE_FIELDS (TREE_TYPE (x));
4352 f;
4353 f = TREE_CHAIN (f))
4354 pushdecl_class_level (f);
4355 }
8d08fdba
MS
4356}
4357
9188c363
MM
4358/* Enter DECL into the symbol table, if that's appropriate. Returns
4359 DECL, or a modified version thereof. */
4360
4361tree
4362maybe_push_decl (decl)
4363 tree decl;
4364{
4365 tree type = TREE_TYPE (decl);
4366
4367 /* Add this decl to the current binding level, but not if it comes
4368 from another scope, e.g. a static member variable. TEM may equal
4369 DECL or it may be a previous decl of the same name. */
07c88314
MM
4370 if (decl == error_mark_node
4371 || (TREE_CODE (decl) != PARM_DECL
4372 && DECL_CONTEXT (decl) != NULL_TREE
4373 /* Definitions of namespace members outside their namespace are
4374 possible. */
4375 && TREE_CODE (DECL_CONTEXT (decl)) != NAMESPACE_DECL)
9188c363
MM
4376 || (TREE_CODE (decl) == TEMPLATE_DECL && !namespace_bindings_p ())
4377 || TREE_CODE (type) == UNKNOWN_TYPE
558475f0 4378 /* The declaration of a template specialization does not affect
9188c363
MM
4379 the functions available for overload resolution, so we do not
4380 call pushdecl. */
4381 || (TREE_CODE (decl) == FUNCTION_DECL
4382 && DECL_TEMPLATE_SPECIALIZATION (decl)))
4383 return decl;
4384 else
4385 return pushdecl (decl);
4386}
4387
8d08fdba
MS
4388/* Make the declaration(s) of X appear in CLASS scope
4389 under the name NAME. */
e92cc029 4390
8d08fdba
MS
4391void
4392push_class_level_binding (name, x)
4393 tree name;
4394 tree x;
4395{
8f032717 4396 tree binding;
68642fb6 4397 /* The class_binding_level will be NULL if x is a template
98c1c668
JM
4398 parameter name in a member template. */
4399 if (!class_binding_level)
4400 return;
4401
908c4e83
MM
4402 /* Make sure that this new member does not have the same name
4403 as a template parameter. */
4404 if (TYPE_BEING_DEFINED (current_class_type))
4405 check_template_shadow (x);
4406
f181d4ae
MM
4407 /* If this declaration shadows a declaration from an enclosing
4408 class, then we will need to restore IDENTIFIER_CLASS_VALUE when
4409 we leave this class. Record the shadowed declaration here. */
8f032717 4410 binding = IDENTIFIER_BINDING (name);
68642fb6 4411 if (binding
8f032717
MM
4412 && ((TREE_CODE (x) == OVERLOAD
4413 && BINDING_VALUE (binding)
4414 && is_overloaded_fn (BINDING_VALUE (binding)))
4415 || INHERITED_VALUE_BINDING_P (binding)))
4416 {
4417 tree shadow;
4418 tree old_decl;
4419
4420 /* If the old binding was from a base class, and was for a tag
4421 name, slide it over to make room for the new binding. The
4422 old binding is still visible if explicitly qualified with a
4423 class-key. */
4424 if (INHERITED_VALUE_BINDING_P (binding)
4425 && BINDING_VALUE (binding)
4426 && TREE_CODE (BINDING_VALUE (binding)) == TYPE_DECL
4427 && DECL_ARTIFICIAL (BINDING_VALUE (binding))
4428 && !(TREE_CODE (x) == TYPE_DECL && DECL_ARTIFICIAL (x)))
4429 {
4430 old_decl = BINDING_TYPE (binding);
4431 BINDING_TYPE (binding) = BINDING_VALUE (binding);
4432 BINDING_VALUE (binding) = NULL_TREE;
4433 INHERITED_VALUE_BINDING_P (binding) = 0;
4434 }
4435 else
4436 old_decl = BINDING_VALUE (binding);
4437
76191fdd
NS
4438 /* Find the previous binding of name on the class-shadowed
4439 list, and update it. */
8f032717
MM
4440 for (shadow = class_binding_level->class_shadowed;
4441 shadow;
4442 shadow = TREE_CHAIN (shadow))
4443 if (TREE_PURPOSE (shadow) == name
4444 && TREE_TYPE (shadow) == old_decl)
4445 {
4446 BINDING_VALUE (binding) = x;
4447 INHERITED_VALUE_BINDING_P (binding) = 0;
4448 TREE_TYPE (shadow) = x;
76191fdd 4449 IDENTIFIER_CLASS_VALUE (name) = x;
8f032717
MM
4450 return;
4451 }
4452 }
f181d4ae 4453
8f032717 4454 /* If we didn't replace an existing binding, put the binding on the
76191fdd 4455 stack of bindings for the identifier, and update the shadowed list. */
8f032717
MM
4456 if (push_class_binding (name, x))
4457 {
8f032717 4458 class_binding_level->class_shadowed
76191fdd 4459 = tree_cons (name, NULL,
8f032717 4460 class_binding_level->class_shadowed);
8f032717
MM
4461 /* Record the value we are binding NAME to so that we can know
4462 what to pop later. */
4463 TREE_TYPE (class_binding_level->class_shadowed) = x;
4464 }
8d08fdba
MS
4465}
4466
dd4fae80
ML
4467/* Insert another USING_DECL into the current binding level, returning
4468 this declaration. If this is a redeclaration, do nothing, and
4469 return NULL_TREE if this not in namespace scope (in namespace
4470 scope, a using decl might extend any previous bindings). */
e92cc029 4471
2c73f9f5
ML
4472tree
4473push_using_decl (scope, name)
4474 tree scope;
4475 tree name;
8d08fdba 4476{
2c73f9f5 4477 tree decl;
68642fb6 4478
2c73f9f5
ML
4479 my_friendly_assert (TREE_CODE (scope) == NAMESPACE_DECL, 383);
4480 my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 384);
4481 for (decl = current_binding_level->usings; decl; decl = TREE_CHAIN (decl))
4482 if (DECL_INITIAL (decl) == scope && DECL_NAME (decl) == name)
4483 break;
4484 if (decl)
dd4fae80 4485 return namespace_bindings_p () ? decl : NULL_TREE;
4ce3d537 4486 decl = build_lang_decl (USING_DECL, name, void_type_node);
2c73f9f5
ML
4487 DECL_INITIAL (decl) = scope;
4488 TREE_CHAIN (decl) = current_binding_level->usings;
4489 current_binding_level->usings = decl;
4490 return decl;
8d08fdba
MS
4491}
4492
ea9635c7
ML
4493/* Add namespace to using_directives. Return NULL_TREE if nothing was
4494 changed (i.e. there was already a directive), or the fresh
4495 TREE_LIST otherwise. */
4496
4497tree
9ed182dc 4498push_using_directive (used)
ea9635c7 4499 tree used;
ea9635c7
ML
4500{
4501 tree ud = current_binding_level->using_directives;
9ed182dc 4502 tree iter, ancestor;
68642fb6 4503
ea9635c7
ML
4504 /* Check if we already have this. */
4505 if (purpose_member (used, ud) != NULL_TREE)
4506 return NULL_TREE;
00dc6358
JM
4507
4508 /* Recursively add all namespaces used. */
4509 for (iter = DECL_NAMESPACE_USING (used); iter; iter = TREE_CHAIN (iter))
9ed182dc 4510 push_using_directive (TREE_PURPOSE (iter));
00dc6358 4511
9ed182dc 4512 ancestor = namespace_ancestor (current_decl_namespace (), used);
00dc6358 4513 ud = current_binding_level->using_directives;
e1b3e07d 4514 ud = tree_cons (used, ancestor, ud);
ea9635c7
ML
4515 current_binding_level->using_directives = ud;
4516 return ud;
4517}
4518
f181d4ae
MM
4519/* DECL is a FUNCTION_DECL for a non-member function, which may have
4520 other definitions already in place. We get around this by making
4521 the value of the identifier point to a list of all the things that
4522 want to be referenced by that name. It is then up to the users of
4523 that name to decide what to do with that list.
8d08fdba 4524
17aec3eb
RK
4525 DECL may also be a TEMPLATE_DECL, with a FUNCTION_DECL in its
4526 DECL_TEMPLATE_RESULT. It is dealt with the same way.
8d08fdba 4527
7bdbfa05
MM
4528 FLAGS is a bitwise-or of the following values:
4529 PUSH_LOCAL: Bind DECL in the current scope, rather than at
4530 namespace scope.
4531 PUSH_USING: DECL is being pushed as the result of a using
68642fb6 4532 declaration.
7bdbfa05 4533
8d08fdba
MS
4534 The value returned may be a previous declaration if we guessed wrong
4535 about what language DECL should belong to (C or C++). Otherwise,
4536 it's always DECL (and never something that's not a _DECL). */
e92cc029 4537
7bdbfa05
MM
4538tree
4539push_overloaded_decl (decl, flags)
8d08fdba 4540 tree decl;
7bdbfa05 4541 int flags;
8d08fdba 4542{
f181d4ae 4543 tree name = DECL_NAME (decl);
700f8a87 4544 tree old;
f181d4ae 4545 tree new_binding;
7bdbfa05 4546 int doing_global = (namespace_bindings_p () || !(flags & PUSH_LOCAL));
700f8a87
MS
4547
4548 if (doing_global)
9f33663b 4549 old = namespace_binding (name, DECL_CONTEXT (decl));
700f8a87 4550 else
f181d4ae 4551 old = lookup_name_current_level (name);
8d08fdba 4552
700f8a87 4553 if (old)
8d08fdba 4554 {
e1cd6e56 4555 if (TREE_CODE (old) == TYPE_DECL && DECL_ARTIFICIAL (old))
8926095f 4556 {
700f8a87 4557 tree t = TREE_TYPE (old);
cdf5b885
MS
4558 if (IS_AGGR_TYPE (t) && warn_shadow
4559 && (! DECL_IN_SYSTEM_HEADER (decl)
4560 || ! DECL_IN_SYSTEM_HEADER (old)))
8251199e 4561 cp_warning ("`%#D' hides constructor for `%#T'", decl, t);
5b605f68 4562 old = NULL_TREE;
8926095f 4563 }
700f8a87 4564 else if (is_overloaded_fn (old))
8d08fdba 4565 {
8d08fdba 4566 tree tmp;
68642fb6 4567
2c73f9f5 4568 for (tmp = old; tmp; tmp = OVL_NEXT (tmp))
7bdbfa05
MM
4569 {
4570 tree fn = OVL_CURRENT (tmp);
4571
4572 if (TREE_CODE (tmp) == OVERLOAD && OVL_USED (tmp)
4573 && !(flags & PUSH_USING)
4574 && compparms (TYPE_ARG_TYPES (TREE_TYPE (fn)),
4575 TYPE_ARG_TYPES (TREE_TYPE (decl))))
4576 cp_error ("`%#D' conflicts with previous using declaration `%#D'",
4577 decl, fn);
68642fb6 4578
7bdbfa05
MM
4579 if (duplicate_decls (decl, fn))
4580 return fn;
4581 }
8d08fdba 4582 }
655dc6ee
JM
4583 else if (old == error_mark_node)
4584 /* Ignore the undefined symbol marker. */
4585 old = NULL_TREE;
e1cd6e56
MS
4586 else
4587 {
8251199e
JM
4588 cp_error_at ("previous non-function declaration `%#D'", old);
4589 cp_error ("conflicts with function declaration `%#D'", decl);
a9aedbc2 4590 return decl;
e1cd6e56 4591 }
8d08fdba 4592 }
7177d104 4593
700f8a87 4594 if (old || TREE_CODE (decl) == TEMPLATE_DECL)
8d08fdba 4595 {
2c73f9f5 4596 if (old && TREE_CODE (old) != OVERLOAD)
f181d4ae
MM
4597 new_binding = ovl_cons (decl, ovl_cons (old, NULL_TREE));
4598 else
4599 new_binding = ovl_cons (decl, old);
347d73d7
ML
4600 if (flags & PUSH_USING)
4601 OVL_USED (new_binding) = 1;
8d08fdba
MS
4602 }
4603 else
f181d4ae
MM
4604 /* NAME is not ambiguous. */
4605 new_binding = decl;
700f8a87
MS
4606
4607 if (doing_global)
f181d4ae 4608 set_namespace_binding (name, current_namespace, new_binding);
700f8a87 4609 else
f181d4ae
MM
4610 {
4611 /* We only create an OVERLOAD if there was a previous binding at
0580c9aa
ML
4612 this level, or if decl is a template. In the former case, we
4613 need to remove the old binding and replace it with the new
4614 binding. We must also run through the NAMES on the binding
4615 level where the name was bound to update the chain. */
4616
4617 if (TREE_CODE (new_binding) == OVERLOAD && old)
f181d4ae
MM
4618 {
4619 tree *d;
68642fb6 4620
f181d4ae
MM
4621 for (d = &BINDING_LEVEL (IDENTIFIER_BINDING (name))->names;
4622 *d;
4623 d = &TREE_CHAIN (*d))
4624 if (*d == old
4625 || (TREE_CODE (*d) == TREE_LIST
4626 && TREE_VALUE (*d) == old))
4627 {
d8f8dca1
MM
4628 if (TREE_CODE (*d) == TREE_LIST)
4629 /* Just replace the old binding with the new. */
4630 TREE_VALUE (*d) = new_binding;
4631 else
4632 /* Build a TREE_LIST to wrap the OVERLOAD. */
68642fb6 4633 *d = tree_cons (NULL_TREE, new_binding,
ed5511d9 4634 TREE_CHAIN (*d));
d8f8dca1
MM
4635
4636 /* And update the CPLUS_BINDING node. */
4637 BINDING_VALUE (IDENTIFIER_BINDING (name))
4638 = new_binding;
4639 return decl;
f181d4ae
MM
4640 }
4641
d8f8dca1
MM
4642 /* We should always find a previous binding in this case. */
4643 my_friendly_abort (0);
f181d4ae
MM
4644 }
4645
4646 /* Install the new binding. */
0034cf72 4647 push_local_binding (name, new_binding, flags);
f181d4ae 4648 }
700f8a87 4649
8d08fdba
MS
4650 return decl;
4651}
4652\f
4653/* Generate an implicit declaration for identifier FUNCTIONID
4654 as a function of type int (). Print a warning if appropriate. */
4655
4656tree
4657implicitly_declare (functionid)
4658 tree functionid;
4659{
4660 register tree decl;
8d08fdba
MS
4661
4662 /* We used to reuse an old implicit decl here,
4663 but this loses with inline functions because it can clobber
4664 the saved decl chains. */
4665 decl = build_lang_decl (FUNCTION_DECL, functionid, default_function_type);
4666
4667 DECL_EXTERNAL (decl) = 1;
4668 TREE_PUBLIC (decl) = 1;
4669
cab1f180 4670 /* ISO standard says implicit declarations are in the innermost block.
d22c8596 4671 So we record the decl in the standard fashion. */
8d08fdba
MS
4672 pushdecl (decl);
4673 rest_of_decl_compilation (decl, NULL_PTR, 0, 0);
4674
4675 if (warn_implicit
4676 /* Only one warning per identifier. */
4677 && IDENTIFIER_IMPLICIT_DECL (functionid) == NULL_TREE)
4678 {
8251199e 4679 cp_pedwarn ("implicit declaration of function `%#D'", decl);
8d08fdba
MS
4680 }
4681
4682 SET_IDENTIFIER_IMPLICIT_DECL (functionid, decl);
4683
8d08fdba
MS
4684 return decl;
4685}
4686
8251199e 4687/* Return zero if the declaration NEWDECL is valid
8d08fdba
MS
4688 when the declaration OLDDECL (assumed to be for the same name)
4689 has already been seen.
4690 Otherwise return an error message format string with a %s
4691 where the identifier should go. */
4692
d8e178a0 4693static const char *
8d08fdba
MS
4694redeclaration_error_message (newdecl, olddecl)
4695 tree newdecl, olddecl;
4696{
4697 if (TREE_CODE (newdecl) == TYPE_DECL)
4698 {
4699 /* Because C++ can put things into name space for free,
4700 constructs like "typedef struct foo { ... } foo"
4701 would look like an erroneous redeclaration. */
3bfdc719 4702 if (same_type_p (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
8251199e 4703 return 0;
8d08fdba 4704 else
8251199e 4705 return "redefinition of `%#D'";
8d08fdba
MS
4706 }
4707 else if (TREE_CODE (newdecl) == FUNCTION_DECL)
4708 {
4709 /* If this is a pure function, its olddecl will actually be
4710 the original initialization to `0' (which we force to call
4711 abort()). Don't complain about redefinition in this case. */
fee7654e 4712 if (DECL_LANG_SPECIFIC (olddecl) && DECL_PURE_VIRTUAL_P (olddecl))
8251199e 4713 return 0;
8d08fdba 4714
2c73f9f5
ML
4715 /* If both functions come from different namespaces, this is not
4716 a redeclaration - this is a conflict with a used function. */
6eb3bb27 4717 if (DECL_NAMESPACE_SCOPE_P (olddecl)
2c73f9f5 4718 && DECL_CONTEXT (olddecl) != DECL_CONTEXT (newdecl))
8251199e 4719 return "`%D' conflicts with used function";
2c73f9f5 4720
db5ae43f
MS
4721 /* We'll complain about linkage mismatches in
4722 warn_extern_redeclared_static. */
4723
2c73f9f5 4724 /* Defining the same name twice is no good. */
8d08fdba 4725 if (DECL_INITIAL (olddecl) != NULL_TREE
faae18ab 4726 && DECL_INITIAL (newdecl) != NULL_TREE)
8d08fdba
MS
4727 {
4728 if (DECL_NAME (olddecl) == NULL_TREE)
8251199e 4729 return "`%#D' not declared in class";
8d08fdba 4730 else
8251199e 4731 return "redefinition of `%#D'";
8d08fdba 4732 }
8251199e 4733 return 0;
8d08fdba 4734 }
51c184be
MS
4735 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
4736 {
ec255269 4737 if ((TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
5362b086 4738 && (DECL_TEMPLATE_RESULT (newdecl)
f4381d62 4739 != DECL_TEMPLATE_RESULT (olddecl))
ec255269
MS
4740 && DECL_INITIAL (DECL_TEMPLATE_RESULT (newdecl))
4741 && DECL_INITIAL (DECL_TEMPLATE_RESULT (olddecl)))
4742 || (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL
d0f062fb
NS
4743 && COMPLETE_TYPE_P (TREE_TYPE (newdecl))
4744 && COMPLETE_TYPE_P (TREE_TYPE (olddecl))))
8251199e
JM
4745 return "redefinition of `%#D'";
4746 return 0;
51c184be 4747 }
1f51a992 4748 else if (toplevel_bindings_p () || DECL_NAMESPACE_SCOPE_P (newdecl))
8d08fdba
MS
4749 {
4750 /* Objects declared at top level: */
4751 /* If at least one is a reference, it's ok. */
4752 if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl))
8251199e 4753 return 0;
8926095f 4754 /* Reject two definitions. */
8251199e 4755 return "redefinition of `%#D'";
8d08fdba
MS
4756 }
4757 else
4758 {
4759 /* Objects declared with block scope: */
4760 /* Reject two definitions, and reject a definition
4761 together with an external reference. */
4762 if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl)))
8251199e
JM
4763 return "redeclaration of `%#D'";
4764 return 0;
8d08fdba
MS
4765 }
4766}
4767\f
acef433b 4768/* Create a new label, named ID. */
8d08fdba 4769
acef433b
MM
4770static tree
4771make_label_decl (id, local_p)
8d08fdba 4772 tree id;
acef433b 4773 int local_p;
8d08fdba 4774{
acef433b 4775 tree decl;
8d08fdba 4776
acef433b 4777 decl = build_decl (LABEL_DECL, id, void_type_node);
b35d4555 4778 if (expanding_p)
acef433b
MM
4779 /* Make sure every label has an rtx. */
4780 label_rtx (decl);
4781
4782 DECL_CONTEXT (decl) = current_function_decl;
4783 DECL_MODE (decl) = VOIDmode;
4784 C_DECLARED_LABEL_FLAG (decl) = local_p;
8d08fdba 4785
acef433b
MM
4786 /* Say where one reference is to the label, for the sake of the
4787 error if it is not defined. */
4788 DECL_SOURCE_LINE (decl) = lineno;
4789 DECL_SOURCE_FILE (decl) = input_filename;
4790
4791 /* Record the fact that this identifier is bound to this label. */
4792 SET_IDENTIFIER_LABEL_VALUE (id, decl);
4793
6625cdb5
JM
4794 return decl;
4795}
4796
4797/* Record this label on the list of used labels so that we can check
4798 at the end of the function to see whether or not the label was
4799 actually defined, and so we can check when the label is defined whether
4800 this use is valid. */
4801
4802static void
4803use_label (decl)
4804 tree decl;
4805{
4806 if (named_label_uses == NULL
4807 || named_label_uses->names_in_scope != current_binding_level->names
4808 || named_label_uses->label_decl != decl)
4809 {
4810 struct named_label_use_list *new_ent;
4811 new_ent = ((struct named_label_use_list *)
4812 ggc_alloc (sizeof (struct named_label_use_list)));
e349ee73
MS
4813 new_ent->label_decl = decl;
4814 new_ent->names_in_scope = current_binding_level->names;
4815 new_ent->binding_level = current_binding_level;
4816 new_ent->lineno_o_goto = lineno;
4817 new_ent->filename_o_goto = input_filename;
4818 new_ent->next = named_label_uses;
4819 named_label_uses = new_ent;
8d08fdba 4820 }
acef433b 4821}
8d08fdba 4822
acef433b
MM
4823/* Look for a label named ID in the current function. If one cannot
4824 be found, create one. (We keep track of used, but undefined,
4825 labels, and complain about them at the end of a function.) */
8d08fdba 4826
68642fb6 4827tree
acef433b
MM
4828lookup_label (id)
4829 tree id;
4830{
4831 tree decl;
6625cdb5 4832 struct named_label_list *ent;
8d08fdba 4833
acef433b
MM
4834 /* You can't use labels at global scope. */
4835 if (current_function_decl == NULL_TREE)
4836 {
4837 error ("label `%s' referenced outside of any function",
4838 IDENTIFIER_POINTER (id));
4839 return NULL_TREE;
4840 }
68642fb6 4841
acef433b
MM
4842 /* See if we've already got this label. */
4843 decl = IDENTIFIER_LABEL_VALUE (id);
4844 if (decl != NULL_TREE && DECL_CONTEXT (decl) == current_function_decl)
4845 return decl;
8d08fdba 4846
acef433b
MM
4847 /* Record this label on the list of labels used in this function.
4848 We do this before calling make_label_decl so that we get the
4849 IDENTIFIER_LABEL_VALUE before the new label is declared. */
6625cdb5 4850 ent = ((struct named_label_list *)
f8a83ee3 4851 ggc_alloc_cleared (sizeof (struct named_label_list)));
6625cdb5
JM
4852 ent->old_value = IDENTIFIER_LABEL_VALUE (id);
4853 ent->next = named_labels;
4854 named_labels = ent;
4855
acef433b
MM
4856 /* We need a new label. */
4857 decl = make_label_decl (id, /*local_p=*/0);
6625cdb5 4858
acef433b 4859 /* Now fill in the information we didn't have before. */
6625cdb5 4860 ent->label_decl = decl;
8d08fdba
MS
4861
4862 return decl;
4863}
4864
acef433b 4865/* Declare a local label named ID. */
8d08fdba
MS
4866
4867tree
acef433b
MM
4868declare_local_label (id)
4869 tree id;
8d08fdba 4870{
acef433b 4871 tree decl;
8d08fdba 4872
acef433b
MM
4873 /* Add a new entry to the SHADOWED_LABELS list so that when we leave
4874 this scope we can restore the old value of
4875 IDENTIFIER_TYPE_VALUE. */
68642fb6 4876 current_binding_level->shadowed_labels
acef433b
MM
4877 = tree_cons (IDENTIFIER_LABEL_VALUE (id), NULL_TREE,
4878 current_binding_level->shadowed_labels);
4879 /* Look for the label. */
4880 decl = make_label_decl (id, /*local_p=*/1);
4881 /* Now fill in the information we didn't have before. */
4882 TREE_VALUE (current_binding_level->shadowed_labels) = decl;
68642fb6 4883
acef433b 4884 return decl;
8d08fdba
MS
4885}
4886
6625cdb5
JM
4887/* Returns nonzero if it is ill-formed to jump past the declaration of
4888 DECL. Returns 2 if it's also a real problem. */
4889
4890static int
4891decl_jump_unsafe (decl)
4892 tree decl;
4893{
4894 if (TREE_CODE (decl) != VAR_DECL || TREE_STATIC (decl))
4895 return 0;
4896
4897 if (DECL_INITIAL (decl) == NULL_TREE
4898 && pod_type_p (TREE_TYPE (decl)))
4899 return 0;
4900
4901 /* This is really only important if we're crossing an initialization.
4902 The POD stuff is just pedantry; why should it matter if the class
4903 contains a field of pointer to member type? */
4904 if (DECL_INITIAL (decl)
4905 || (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))))
4906 return 2;
4907 return 1;
4908}
4909
4910/* Check that a single previously seen jump to a newly defined label
4911 is OK. DECL is the LABEL_DECL or 0; LEVEL is the binding_level for
4912 the jump context; NAMES are the names in scope in LEVEL at the jump
4913 context; FILE and LINE are the source position of the jump or 0. */
4914
4915static void
4916check_previous_goto_1 (decl, level, names, file, line)
4917 tree decl;
4918 struct binding_level *level;
4919 tree names;
4920 const char *file;
4921 int line;
4922{
4923 int identified = 0;
4924 int saw_eh = 0;
4925 struct binding_level *b = current_binding_level;
4926 for (; b; b = b->level_chain)
4927 {
4928 tree new_decls = b->names;
4929 tree old_decls = (b == level ? names : NULL_TREE);
4930 for (; new_decls != old_decls;
4931 new_decls = TREE_CHAIN (new_decls))
4932 {
4933 int problem = decl_jump_unsafe (new_decls);
4934 if (! problem)
4935 continue;
4936
4937 if (! identified)
4938 {
4939 if (decl)
4940 cp_pedwarn ("jump to label `%D'", decl);
4941 else
4942 pedwarn ("jump to case label");
4943
4944 if (file)
4945 pedwarn_with_file_and_line (file, line, " from here");
4946 identified = 1;
4947 }
4948
4949 if (problem > 1 && DECL_ARTIFICIAL (new_decls))
4950 /* Can't skip init of __exception_info. */
4951 cp_error_at (" enters catch block", new_decls);
4952 else if (problem > 1)
4953 cp_error_at (" crosses initialization of `%#D'",
4954 new_decls);
4955 else
4956 cp_pedwarn_at (" enters scope of non-POD `%#D'",
4957 new_decls);
4958 }
4959
4960 if (b == level)
4961 break;
4962 if (b->eh_region && ! saw_eh)
4963 {
4964 if (! identified)
4965 {
4966 if (decl)
4967 cp_pedwarn ("jump to label `%D'", decl);
4968 else
4969 pedwarn ("jump to case label");
4970
4971 if (file)
4972 pedwarn_with_file_and_line (file, line, " from here");
4973 identified = 1;
4974 }
4975 error (" enters try block");
4976 saw_eh = 1;
4977 }
4978 }
4979}
4980
4981static void
4982check_previous_goto (use)
4983 struct named_label_use_list *use;
4984{
4985 check_previous_goto_1 (use->label_decl, use->binding_level,
4986 use->names_in_scope, use->filename_o_goto,
4987 use->lineno_o_goto);
4988}
4989
4990static void
4991check_switch_goto (level)
4992 struct binding_level *level;
4993{
4994 check_previous_goto_1 (NULL_TREE, level, level->names, NULL, 0);
4995}
4996
4997/* Check that any previously seen jumps to a newly defined label DECL
4998 are OK. Called by define_label. */
4999
5000static void
5001check_previous_gotos (decl)
5002 tree decl;
5003{
5004 struct named_label_use_list **usep;
5005
5006 if (! TREE_USED (decl))
5007 return;
5008
5009 for (usep = &named_label_uses; *usep; )
5010 {
5011 struct named_label_use_list *use = *usep;
5012 if (use->label_decl == decl)
5013 {
5014 check_previous_goto (use);
5015 *usep = use->next;
5016 }
5017 else
5018 usep = &(use->next);
5019 }
5020}
5021
5022/* Check that a new jump to a label DECL is OK. Called by
5023 finish_goto_stmt. */
5024
5025void
5026check_goto (decl)
5027 tree decl;
5028{
5029 int identified = 0;
5030 tree bad;
5031 struct named_label_list *lab;
5032
e3cd9945
APB
5033 /* We can't know where a computed goto is jumping. So we assume
5034 that it's OK. */
5035 if (! DECL_P (decl))
5036 return;
5037
6625cdb5
JM
5038 /* If the label hasn't been defined yet, defer checking. */
5039 if (! DECL_INITIAL (decl))
5040 {
5041 use_label (decl);
5042 return;
5043 }
5044
5045 for (lab = named_labels; lab; lab = lab->next)
5046 if (decl == lab->label_decl)
5047 break;
5048
5049 /* If the label is not on named_labels it's a gcc local label, so
5050 it must be in an outer scope, so jumping to it is always OK. */
5051 if (lab == 0)
5052 return;
5053
5054 if ((lab->eh_region || lab->bad_decls) && !identified)
5055 {
5056 cp_pedwarn_at ("jump to label `%D'", decl);
5057 pedwarn (" from here");
5058 identified = 1;
5059 }
5060
5061 for (bad = lab->bad_decls; bad; bad = TREE_CHAIN (bad))
5062 {
5063 tree b = TREE_VALUE (bad);
5064 int u = decl_jump_unsafe (b);
5065
5066 if (u > 1 && DECL_ARTIFICIAL (b))
5067 /* Can't skip init of __exception_info. */
5068 cp_error_at (" enters catch block", b);
5069 else if (u > 1)
5070 cp_error_at (" skips initialization of `%#D'", b);
5071 else
5072 cp_pedwarn_at (" enters scope of non-POD `%#D'", b);
5073 }
5074
5075 if (lab->eh_region)
5076 error (" enters try block");
5077}
5078
8d08fdba
MS
5079/* Define a label, specifying the location in the source file.
5080 Return the LABEL_DECL node for the label, if the definition is valid.
5081 Otherwise return 0. */
5082
5083tree
5084define_label (filename, line, name)
3b304f5b 5085 const char *filename;
8d08fdba
MS
5086 int line;
5087 tree name;
5088{
f01b0acb 5089 tree decl = lookup_label (name);
6625cdb5 5090 struct named_label_list *ent;
3dc9aec6 5091 register struct binding_level *p;
6625cdb5
JM
5092
5093 for (ent = named_labels; ent; ent = ent->next)
5094 if (ent->label_decl == decl)
5095 break;
8d08fdba 5096
3dc9aec6 5097 /* After labels, make any new cleanups in the function go into their
8d08fdba 5098 own new (temporary) binding contour. */
3dc9aec6
WC
5099 for (p = current_binding_level; !(p->parm_flag); p = p->level_chain)
5100 p->more_cleanups_ok = 0;
8d08fdba 5101
e1cd6e56 5102 if (name == get_identifier ("wchar_t"))
8251199e 5103 cp_pedwarn ("label named wchar_t");
e1cd6e56 5104
8d08fdba
MS
5105 if (DECL_INITIAL (decl) != NULL_TREE)
5106 {
8251199e 5107 cp_error ("duplicate label `%D'", decl);
8d08fdba
MS
5108 return 0;
5109 }
5110 else
5111 {
8d08fdba
MS
5112 /* Mark label as having been defined. */
5113 DECL_INITIAL (decl) = error_mark_node;
5114 /* Say where in the source. */
5115 DECL_SOURCE_FILE (decl) = filename;
5116 DECL_SOURCE_LINE (decl) = line;
6625cdb5
JM
5117 if (ent)
5118 {
5119 ent->names_in_scope = current_binding_level->names;
5120 ent->binding_level = current_binding_level;
5121 }
5122 check_previous_gotos (decl);
8d08fdba
MS
5123 current_function_return_value = NULL_TREE;
5124 return decl;
5125 }
5126}
5127
a5894242
MS
5128struct cp_switch
5129{
5130 struct binding_level *level;
5131 struct cp_switch *next;
56cb9733
MM
5132 /* The SWITCH_STMT being built. */
5133 tree switch_stmt;
5134 /* A splay-tree mapping the low element of a case range to the high
5135 element, or NULL_TREE if there is no high element. Used to
5136 determine whether or not a new case label duplicates an old case
5137 label. We need a tree, rather than simply a hash table, because
5138 of the GNU case range extension. */
5139 splay_tree cases;
a5894242
MS
5140};
5141
56cb9733
MM
5142/* A stack of the currently active switch statements. The innermost
5143 switch statement is on the top of the stack. There is no need to
5144 mark the stack for garbage collection because it is only active
5145 during the processing of the body of a function, and we never
5146 collect at that point. */
5362b086 5147
a5894242
MS
5148static struct cp_switch *switch_stack;
5149
56cb9733
MM
5150/* Called right after a switch-statement condition is parsed.
5151 SWITCH_STMT is the switch statement being parsed. */
5152
a5894242 5153void
56cb9733
MM
5154push_switch (switch_stmt)
5155 tree switch_stmt;
a5894242
MS
5156{
5157 struct cp_switch *p
bedda2da 5158 = (struct cp_switch *) xmalloc (sizeof (struct cp_switch));
a5894242
MS
5159 p->level = current_binding_level;
5160 p->next = switch_stack;
56cb9733
MM
5161 p->switch_stmt = switch_stmt;
5162 p->cases = splay_tree_new (case_compare, NULL, NULL);
a5894242
MS
5163 switch_stack = p;
5164}
5165
5166void
5167pop_switch ()
5168{
bedda2da 5169 struct cp_switch *cs;
5362b086 5170
bedda2da 5171 cs = switch_stack;
56cb9733 5172 splay_tree_delete (cs->cases);
a5894242 5173 switch_stack = switch_stack->next;
bedda2da 5174 free (cs);
a5894242
MS
5175}
5176
b0a1da19
JM
5177/* Note that we've seen a definition of a case label, and complain if this
5178 is a bad place for one. */
e92cc029 5179
3e4d04a1 5180tree
56cb9733
MM
5181finish_case_label (low_value, high_value)
5182 tree low_value;
5183 tree high_value;
8d08fdba 5184{
3e4d04a1 5185 tree cond, r;
3dc9aec6 5186 register struct binding_level *p;
a5894242 5187
b0a1da19 5188 if (! switch_stack)
56cb9733
MM
5189 {
5190 if (high_value)
5191 error ("case label not within a switch statement");
5192 else if (low_value)
5362b086 5193 cp_error ("case label `%E' not within a switch statement",
56cb9733
MM
5194 low_value);
5195 else
5196 error ("`default' label not within a switch statement");
3e4d04a1 5197 return NULL_TREE;
56cb9733
MM
5198 }
5199
56cb9733
MM
5200 if (processing_template_decl)
5201 {
8f17b5c5
MM
5202 tree label;
5203
56cb9733
MM
5204 /* For templates, just add the case label; we'll do semantic
5205 analysis at instantiation-time. */
8f17b5c5 5206 label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
3e4d04a1 5207 return add_stmt (build_case_label (low_value, high_value, label));
56cb9733
MM
5208 }
5209
5210 /* Find the condition on which this switch statement depends. */
5211 cond = SWITCH_COND (switch_stack->switch_stmt);
5212 if (cond && TREE_CODE (cond) == TREE_LIST)
5213 cond = TREE_VALUE (cond);
56cb9733 5214
3e4d04a1
RH
5215 r = c_add_case_label (switch_stack->cases, cond, low_value, high_value);
5216 if (r == error_mark_node)
5217 r = NULL_TREE;
8d08fdba 5218
6625cdb5 5219 check_switch_goto (switch_stack->level);
a5894242 5220
3dc9aec6 5221 /* After labels, make any new cleanups in the function go into their
8d08fdba 5222 own new (temporary) binding contour. */
3dc9aec6
WC
5223 for (p = current_binding_level; !(p->parm_flag); p = p->level_chain)
5224 p->more_cleanups_ok = 0;
8d08fdba 5225 current_function_return_value = NULL_TREE;
3e4d04a1
RH
5226
5227 return r;
8d08fdba
MS
5228}
5229\f
5230/* Return the list of declarations of the current level.
5231 Note that this list is in reverse order unless/until
5232 you nreverse it; and when you do nreverse it, you must
5233 store the result back using `storedecls' or you will lose. */
5234
5235tree
5236getdecls ()
5237{
5238 return current_binding_level->names;
5239}
5240
5241/* Return the list of type-tags (for structs, etc) of the current level. */
5242
5243tree
5244gettags ()
5245{
5246 return current_binding_level->tags;
5247}
5248
5249/* Store the list of declarations of the current level.
5250 This is done for the parameter declarations of a function being defined,
5251 after they are modified in the light of any missing parameters. */
5252
5253static void
5254storedecls (decls)
5255 tree decls;
5256{
5257 current_binding_level->names = decls;
5258}
5259
5260/* Similarly, store the list of tags of the current level. */
5261
280f9385 5262void
8d08fdba
MS
5263storetags (tags)
5264 tree tags;
5265{
5266 current_binding_level->tags = tags;
5267}
5268\f
5269/* Given NAME, an IDENTIFIER_NODE,
5270 return the structure (or union or enum) definition for that name.
5271 Searches binding levels from BINDING_LEVEL up to the global level.
5272 If THISLEVEL_ONLY is nonzero, searches only the specified context
5273 (but skips any tag-transparent contexts to find one that is
5274 meaningful for tags).
5275 FORM says which kind of type the caller wants;
5276 it is RECORD_TYPE or UNION_TYPE or ENUMERAL_TYPE.
5277 If the wrong kind of type is found, and it's not a template, an error is
5278 reported. */
5279
5280static tree
5281lookup_tag (form, name, binding_level, thislevel_only)
5282 enum tree_code form;
8d08fdba 5283 tree name;
cffa8729 5284 struct binding_level *binding_level;
8d08fdba
MS
5285 int thislevel_only;
5286{
5287 register struct binding_level *level;
74b846e0
MM
5288 /* Non-zero if, we should look past a template parameter level, even
5289 if THISLEVEL_ONLY. */
5290 int allow_template_parms_p = 1;
8d08fdba
MS
5291
5292 for (level = binding_level; level; level = level->level_chain)
5293 {
5294 register tree tail;
5295 if (ANON_AGGRNAME_P (name))
5296 for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
5297 {
5298 /* There's no need for error checking here, because
5299 anon names are unique throughout the compilation. */
5300 if (TYPE_IDENTIFIER (TREE_VALUE (tail)) == name)
5301 return TREE_VALUE (tail);
5302 }
2c73f9f5
ML
5303 else if (level->namespace_p)
5304 /* Do namespace lookup. */
6c011b01 5305 for (tail = current_namespace; 1; tail = CP_DECL_CONTEXT (tail))
2c73f9f5 5306 {
36a117a5
MM
5307 tree old = binding_for_name (name, tail);
5308
74b846e0
MM
5309 /* If we just skipped past a template parameter level,
5310 even though THISLEVEL_ONLY, and we find a template
5311 class declaration, then we use the _TYPE node for the
36a117a5 5312 template. See the example below. */
74b846e0 5313 if (thislevel_only && !allow_template_parms_p
68642fb6 5314 && old && BINDING_VALUE (old)
36a117a5
MM
5315 && DECL_CLASS_TEMPLATE_P (BINDING_VALUE (old)))
5316 old = TREE_TYPE (BINDING_VALUE (old));
68642fb6 5317 else
36a117a5
MM
5318 old = BINDING_TYPE (old);
5319
2c73f9f5
ML
5320 /* If it has an original type, it is a typedef, and we
5321 should not return it. */
5322 if (old && DECL_ORIGINAL_TYPE (TYPE_NAME (old)))
5323 old = NULL_TREE;
5324 if (old && TREE_CODE (old) != form
5325 && !(form != ENUMERAL_TYPE && TREE_CODE (old) == TEMPLATE_DECL))
5326 {
8251199e 5327 cp_error ("`%#D' redeclared as %C", old, form);
2c73f9f5
ML
5328 return NULL_TREE;
5329 }
5330 if (old)
5331 return old;
5332 if (thislevel_only || tail == global_namespace)
5333 return NULL_TREE;
5334 }
8d08fdba
MS
5335 else
5336 for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
5337 {
a80e4195 5338 if (TREE_PURPOSE (tail) == name)
8d08fdba
MS
5339 {
5340 enum tree_code code = TREE_CODE (TREE_VALUE (tail));
5341 /* Should tighten this up; it'll probably permit
5342 UNION_TYPE and a struct template, for example. */
5343 if (code != form
5566b478 5344 && !(form != ENUMERAL_TYPE && code == TEMPLATE_DECL))
8d08fdba
MS
5345 {
5346 /* Definition isn't the kind we were looking for. */
8251199e 5347 cp_error ("`%#D' redeclared as %C", TREE_VALUE (tail),
8d08fdba 5348 form);
72b7eeff 5349 return NULL_TREE;
8d08fdba
MS
5350 }
5351 return TREE_VALUE (tail);
5352 }
5353 }
5354 if (thislevel_only && ! level->tag_transparent)
5566b478 5355 {
74b846e0 5356 if (level->template_parms_p && allow_template_parms_p)
5566b478 5357 {
36a117a5 5358 /* We must deal with cases like this:
68642fb6 5359
36a117a5
MM
5360 template <class T> struct S;
5361 template <class T> struct S {};
68642fb6 5362
36a117a5
MM
5363 When looking up `S', for the second declaration, we
5364 would like to find the first declaration. But, we
5365 are in the pseudo-global level created for the
5366 template parameters, rather than the (surrounding)
5367 namespace level. Thus, we keep going one more level,
5368 even though THISLEVEL_ONLY is non-zero. */
74b846e0 5369 allow_template_parms_p = 0;
36a117a5 5370 continue;
5566b478 5371 }
36a117a5
MM
5372 else
5373 return NULL_TREE;
5566b478 5374 }
8d08fdba
MS
5375 }
5376 return NULL_TREE;
5377}
5378
bd6dd845 5379#if 0
8d08fdba
MS
5380void
5381set_current_level_tags_transparency (tags_transparent)
5382 int tags_transparent;
5383{
5384 current_binding_level->tag_transparent = tags_transparent;
5385}
bd6dd845 5386#endif
8d08fdba
MS
5387
5388/* Given a type, find the tag that was defined for it and return the tag name.
5389 Otherwise return 0. However, the value can never be 0
5390 in the cases in which this is used.
5391
5392 C++: If NAME is non-zero, this is the new name to install. This is
5393 done when replacing anonymous tags with real tag names. */
5394
5395static tree
5396lookup_tag_reverse (type, name)
5397 tree type;
5398 tree name;
5399{
5400 register struct binding_level *level;
5401
5402 for (level = current_binding_level; level; level = level->level_chain)
5403 {
5404 register tree tail;
5405 for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
5406 {
5407 if (TREE_VALUE (tail) == type)
5408 {
5409 if (name)
5410 TREE_PURPOSE (tail) = name;
5411 return TREE_PURPOSE (tail);
5412 }
5413 }
5414 }
5415 return NULL_TREE;
5416}
8d08fdba 5417\f
a9aedbc2 5418/* Look up NAME in the NAMESPACE. */
e92cc029 5419
a9aedbc2
MS
5420tree
5421lookup_namespace_name (namespace, name)
5422 tree namespace, name;
5423{
30394414 5424 tree val;
f30c84c9 5425 tree template_id = NULL_TREE;
2c73f9f5 5426
30394414 5427 my_friendly_assert (TREE_CODE (namespace) == NAMESPACE_DECL, 370);
1231fb96 5428
1231fb96 5429 if (TREE_CODE (name) == NAMESPACE_DECL)
d8f8dca1 5430 /* This happens for A::B<int> when B is a namespace. */
1231fb96 5431 return name;
d8f8dca1
MM
5432 else if (TREE_CODE (name) == TEMPLATE_DECL)
5433 {
5434 /* This happens for A::B where B is a template, and there are no
5435 template arguments. */
5436 cp_error ("invalid use of `%D'", name);
5437 return error_mark_node;
5438 }
1231fb96 5439
b262d64c
JM
5440 namespace = ORIGINAL_NAMESPACE (namespace);
5441
f30c84c9
MM
5442 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
5443 {
5444 template_id = name;
5445 name = TREE_OPERAND (name, 0);
5446 if (TREE_CODE (name) == OVERLOAD)
5447 name = DECL_NAME (OVL_CURRENT (name));
2f939d94 5448 else if (DECL_P (name))
f30c84c9
MM
5449 name = DECL_NAME (name);
5450 }
5451
30394414 5452 my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 373);
68642fb6 5453
87e3dbc9 5454 val = make_node (CPLUS_BINDING);
52c11ef6 5455 if (!qualified_lookup_using_namespace (name, namespace, val, 0))
2c73f9f5
ML
5456 return error_mark_node;
5457
5458 if (BINDING_VALUE (val))
1c35f5b6
JM
5459 {
5460 val = BINDING_VALUE (val);
5461
f30c84c9
MM
5462 if (template_id)
5463 {
5464 if (DECL_CLASS_TEMPLATE_P (val))
68642fb6 5465 val = lookup_template_class (val,
f30c84c9
MM
5466 TREE_OPERAND (template_id, 1),
5467 /*in_decl=*/NULL_TREE,
5468 /*context=*/NULL_TREE,
f9c244b8
NS
5469 /*entering_scope=*/0,
5470 /*complain=*/1);
f30c84c9
MM
5471 else if (DECL_FUNCTION_TEMPLATE_P (val)
5472 || TREE_CODE (val) == OVERLOAD)
68642fb6 5473 val = lookup_template_function (val,
f30c84c9
MM
5474 TREE_OPERAND (template_id, 1));
5475 else
5476 {
5477 cp_error ("`%D::%D' is not a template",
5478 namespace, name);
5479 return error_mark_node;
5480 }
5481 }
5482
1c35f5b6
JM
5483 /* If we have a single function from a using decl, pull it out. */
5484 if (TREE_CODE (val) == OVERLOAD && ! really_overloaded_fn (val))
5485 val = OVL_FUNCTION (val);
5486 return val;
5487 }
5488
8251199e 5489 cp_error ("`%D' undeclared in namespace `%D'", name, namespace);
30394414 5490 return error_mark_node;
a9aedbc2
MS
5491}
5492
7ddedda4
MM
5493/* Hash a TYPENAME_TYPE. K is really of type `tree'. */
5494
5495static unsigned long
5496typename_hash (k)
5497 hash_table_key k;
5498{
5499 unsigned long hash;
5500 tree t;
5501
5502 t = (tree) k;
5503 hash = (((unsigned long) TYPE_CONTEXT (t))
5504 ^ ((unsigned long) DECL_NAME (TYPE_NAME (t))));
5505
5506 return hash;
5507}
5508
5509/* Compare two TYPENAME_TYPEs. K1 and K2 are really of type `tree'. */
5510
d6edb99e 5511static bool
7ddedda4
MM
5512typename_compare (k1, k2)
5513 hash_table_key k1;
5514 hash_table_key k2;
5515{
5516 tree t1;
5517 tree t2;
5518 tree d1;
5519 tree d2;
5520
5521 t1 = (tree) k1;
5522 t2 = (tree) k2;
5523 d1 = TYPE_NAME (t1);
5524 d2 = TYPE_NAME (t2);
68642fb6 5525
7ddedda4
MM
5526 return (DECL_NAME (d1) == DECL_NAME (d2)
5527 && same_type_p (TYPE_CONTEXT (t1), TYPE_CONTEXT (t2))
68642fb6 5528 && ((TREE_TYPE (t1) != NULL_TREE)
7ddedda4
MM
5529 == (TREE_TYPE (t2) != NULL_TREE))
5530 && same_type_p (TREE_TYPE (t1), TREE_TYPE (t2))
5531 && TYPENAME_TYPE_FULLNAME (t1) == TYPENAME_TYPE_FULLNAME (t2));
5532}
5533
45869a6c
MM
5534/* Build a TYPENAME_TYPE. If the type is `typename T::t', CONTEXT is
5535 the type of `T', NAME is the IDENTIFIER_NODE for `t'. If BASE_TYPE
5536 is non-NULL, this type is being created by the implicit typename
5537 extension, and BASE_TYPE is a type named `t' in some base class of
68642fb6 5538 `T' which depends on template parameters.
45869a6c
MM
5539
5540 Returns the new TYPENAME_TYPE. */
5541
5542tree
5543build_typename_type (context, name, fullname, base_type)
5544 tree context;
5545 tree name;
5546 tree fullname;
5547 tree base_type;
5548{
5549 tree t;
5550 tree d;
400500c4 5551 struct hash_entry *e;
45869a6c 5552
7ddedda4
MM
5553 static struct hash_table ht;
5554
9cd64686
MM
5555 if (!ht.table)
5556 {
5557 static struct hash_table *h = &ht;
400500c4
RK
5558
5559 hash_table_init (&ht, &hash_newfunc, &typename_hash, &typename_compare);
9cd64686
MM
5560 ggc_add_tree_hash_table_root (&h, 1);
5561 }
45869a6c
MM
5562
5563 /* Build the TYPENAME_TYPE. */
33848bb0 5564 t = make_aggr_type (TYPENAME_TYPE);
45869a6c
MM
5565 TYPE_CONTEXT (t) = FROB_CONTEXT (context);
5566 TYPENAME_TYPE_FULLNAME (t) = fullname;
5567 TREE_TYPE (t) = base_type;
45869a6c
MM
5568
5569 /* Build the corresponding TYPE_DECL. */
5570 d = build_decl (TYPE_DECL, name, t);
5571 TYPE_NAME (TREE_TYPE (d)) = d;
5572 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
5573 DECL_CONTEXT (d) = FROB_CONTEXT (context);
2642b9bf 5574 DECL_ARTIFICIAL (d) = 1;
45869a6c 5575
7ddedda4
MM
5576 /* See if we already have this type. */
5577 e = hash_lookup (&ht, t, /*create=*/false, /*copy=*/0);
5578 if (e)
87e3dbc9 5579 t = (tree) e->key;
7ddedda4
MM
5580 else
5581 /* Insert the type into the table. */
5582 hash_lookup (&ht, t, /*create=*/true, /*copy=*/0);
5583
45869a6c
MM
5584 return t;
5585}
5586
3baa501d
MM
5587/* Resolve `typename CONTEXT::NAME'. Returns an appropriate type,
5588 unless an error occurs, in which case error_mark_node is returned.
5589 If COMPLAIN zero, don't complain about any errors that occur. */
5590
5566b478 5591tree
3baa501d 5592make_typename_type (context, name, complain)
5566b478 5593 tree context, name;
3baa501d 5594 int complain;
5566b478 5595{
b2b7d40a 5596 tree fullname;
a80e4195 5597
2f939d94 5598 if (TYPE_P (name))
78638e24 5599 {
68642fb6
UD
5600 if (!(TYPE_LANG_SPECIFIC (name)
5601 && (CLASSTYPE_IS_TEMPLATE (name)
78638e24
MM
5602 || CLASSTYPE_USE_TEMPLATE (name))))
5603 name = TYPE_IDENTIFIER (name);
5604 else
5605 /* Create a TEMPLATE_ID_EXPR for the type. */
5606 name = build_nt (TEMPLATE_ID_EXPR,
5607 CLASSTYPE_TI_TEMPLATE (name),
5608 CLASSTYPE_TI_ARGS (name));
5609 }
653cc74a 5610 else if (TREE_CODE (name) == TYPE_DECL)
a80e4195 5611 name = DECL_NAME (name);
b2b7d40a
JM
5612
5613 fullname = name;
5614
5615 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
11686454
JM
5616 {
5617 name = TREE_OPERAND (name, 0);
5618 if (TREE_CODE (name) == TEMPLATE_DECL)
5619 name = TREE_OPERAND (fullname, 0) = DECL_NAME (name);
5620 }
b2b7d40a 5621 if (TREE_CODE (name) != IDENTIFIER_NODE)
a80e4195 5622 my_friendly_abort (2000);
5566b478 5623
04ddee1b
BK
5624 if (TREE_CODE (context) == NAMESPACE_DECL)
5625 {
5626 /* We can get here from typename_sub0 in the explicit_template_type
5627 expansion. Just fail. */
3baa501d
MM
5628 if (complain)
5629 cp_error ("no class template named `%#T' in `%#T'",
5630 name, context);
04ddee1b
BK
5631 return error_mark_node;
5632 }
5633
85b71cf2 5634 if (! uses_template_parms (context)
b77ead33 5635 || currently_open_class (context))
5566b478 5636 {
b2b7d40a
JM
5637 if (TREE_CODE (fullname) == TEMPLATE_ID_EXPR)
5638 {
ad810b22 5639 tree tmpl = NULL_TREE;
b2b7d40a 5640 if (IS_AGGR_TYPE (context))
ad810b22
MM
5641 tmpl = lookup_field (context, name, 0, 0);
5642 if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
b2b7d40a 5643 {
3baa501d
MM
5644 if (complain)
5645 cp_error ("no class template named `%#T' in `%#T'",
5646 name, context);
b2b7d40a
JM
5647 return error_mark_node;
5648 }
ffb690bd 5649
68642fb6 5650 return lookup_template_class (tmpl,
ad810b22 5651 TREE_OPERAND (fullname, 1),
68642fb6 5652 NULL_TREE, context,
f9c244b8
NS
5653 /*entering_scope=*/0,
5654 /*complain=*/1);
b2b7d40a
JM
5655 }
5656 else
5566b478 5657 {
b4f70b3d 5658 tree t;
68642fb6 5659
b4f70b3d 5660 if (!IS_AGGR_TYPE (context))
b2b7d40a 5661 {
3baa501d
MM
5662 if (complain)
5663 cp_error ("no type named `%#T' in `%#T'", name, context);
b2b7d40a
JM
5664 return error_mark_node;
5665 }
1107c4b3 5666
b4f70b3d 5667 t = lookup_field (context, name, 0, 1);
7d4bdeed
MM
5668 if (t)
5669 return TREE_TYPE (t);
5566b478 5670 }
5566b478 5671 }
11249cf0
MM
5672
5673 /* If the CONTEXT is not a template type, then either the field is
5674 there now or its never going to be. */
b4f70b3d 5675 if (!uses_template_parms (context))
11249cf0 5676 {
3baa501d
MM
5677 if (complain)
5678 cp_error ("no type named `%#T' in `%#T'", name, context);
11249cf0
MM
5679 return error_mark_node;
5680 }
68642fb6
UD
5681
5682
45869a6c 5683 return build_typename_type (context, name, fullname, NULL_TREE);
5566b478
MS
5684}
5685
2c73f9f5
ML
5686/* Select the right _DECL from multiple choices. */
5687
5688static tree
52c11ef6 5689select_decl (binding, flags)
2c73f9f5 5690 tree binding;
52c11ef6 5691 int flags;
2c73f9f5
ML
5692{
5693 tree val;
5694 val = BINDING_VALUE (binding);
97ba1e3c
MM
5695
5696 /* When we implicitly declare some builtin entity, we mark it
5697 DECL_ANTICIPATED, so that we know to ignore it until it is
5698 really declared. */
5362b086
EC
5699 if (val && DECL_P (val)
5700 && DECL_LANG_SPECIFIC (val)
97ba1e3c
MM
5701 && DECL_ANTICIPATED (val))
5702 return NULL_TREE;
5703
52c11ef6 5704 if (LOOKUP_NAMESPACES_ONLY (flags))
3e3f722c
ML
5705 {
5706 /* We are not interested in types. */
5707 if (val && TREE_CODE (val) == NAMESPACE_DECL)
5708 return val;
5709 return NULL_TREE;
5710 }
68642fb6 5711
2c73f9f5
ML
5712 /* If we could have a type and
5713 we have nothing or we need a type and have none. */
5714 if (BINDING_TYPE (binding)
52c11ef6
JM
5715 && (!val || ((flags & LOOKUP_PREFER_TYPES)
5716 && TREE_CODE (val) != TYPE_DECL)))
2c73f9f5
ML
5717 val = TYPE_STUB_DECL (BINDING_TYPE (binding));
5718 /* Don't return non-types if we really prefer types. */
52c11ef6 5719 else if (val && LOOKUP_TYPES_ONLY (flags) && TREE_CODE (val) != TYPE_DECL
c592d5d2
ML
5720 && (TREE_CODE (val) != TEMPLATE_DECL
5721 || !DECL_CLASS_TEMPLATE_P (val)))
2c73f9f5 5722 val = NULL_TREE;
1c35f5b6 5723
2c73f9f5
ML
5724 return val;
5725}
5726
2c169bab
JM
5727/* Unscoped lookup of a global: iterate over current namespaces,
5728 considering using-directives. If SPACESP is non-NULL, store a list
5729 of the namespaces we've considered in it. */
ea9635c7 5730
2c169bab
JM
5731tree
5732unqualified_namespace_lookup (name, flags, spacesp)
ea9635c7 5733 tree name;
52c11ef6 5734 int flags;
2c169bab 5735 tree *spacesp;
ea9635c7 5736{
87e3dbc9 5737 tree b = make_node (CPLUS_BINDING);
ea9635c7
ML
5738 tree initial = current_decl_namespace();
5739 tree scope = initial;
5740 tree siter;
5741 struct binding_level *level;
5742 tree val = NULL_TREE;
5743
2c169bab
JM
5744 if (spacesp)
5745 *spacesp = NULL_TREE;
5746
5747 for (; !val; scope = CP_DECL_CONTEXT (scope))
ea9635c7 5748 {
2c169bab 5749 if (spacesp)
e1b3e07d 5750 *spacesp = tree_cons (scope, NULL_TREE, *spacesp);
ea9635c7
ML
5751 val = binding_for_name (name, scope);
5752
5753 /* Initialize binding for this context. */
5754 BINDING_VALUE (b) = BINDING_VALUE (val);
5755 BINDING_TYPE (b) = BINDING_TYPE (val);
5756
5757 /* Add all _DECLs seen through local using-directives. */
68642fb6 5758 for (level = current_binding_level;
ea9635c7
ML
5759 !level->namespace_p;
5760 level = level->level_chain)
52c11ef6 5761 if (!lookup_using_namespace (name, b, level->using_directives,
2c169bab 5762 scope, flags, spacesp))
ea9635c7 5763 /* Give up because of error. */
5b163de4 5764 return error_mark_node;
ea9635c7
ML
5765
5766 /* Add all _DECLs seen through global using-directives. */
5767 /* XXX local and global using lists should work equally. */
5768 siter = initial;
5769 while (1)
5770 {
68642fb6 5771 if (!lookup_using_namespace (name, b, DECL_NAMESPACE_USING (siter),
2c169bab 5772 scope, flags, spacesp))
ea9635c7 5773 /* Give up because of error. */
5b163de4 5774 return error_mark_node;
ea9635c7
ML
5775 if (siter == scope) break;
5776 siter = CP_DECL_CONTEXT (siter);
5777 }
5778
52c11ef6 5779 val = select_decl (b, flags);
ea9635c7
ML
5780 if (scope == global_namespace)
5781 break;
ea9635c7
ML
5782 }
5783 return val;
5784}
5785
52c11ef6
JM
5786/* Combine prefer_type and namespaces_only into flags. */
5787
5788static int
5789lookup_flags (prefer_type, namespaces_only)
5790 int prefer_type, namespaces_only;
5791{
5792 if (namespaces_only)
5793 return LOOKUP_PREFER_NAMESPACES;
5794 if (prefer_type > 1)
5795 return LOOKUP_PREFER_TYPES;
5796 if (prefer_type > 0)
5797 return LOOKUP_PREFER_BOTH;
5798 return 0;
5799}
5800
5801/* Given a lookup that returned VAL, use FLAGS to decide if we want to
5802 ignore it or not. Subroutine of lookup_name_real. */
5803
5804static tree
5805qualify_lookup (val, flags)
5806 tree val;
5807 int flags;
5808{
5809 if (val == NULL_TREE)
5810 return val;
6b945830
JM
5811 if ((flags & LOOKUP_PREFER_NAMESPACES) && TREE_CODE (val) == NAMESPACE_DECL)
5812 return val;
5813 if ((flags & LOOKUP_PREFER_TYPES)
5814 && (TREE_CODE (val) == TYPE_DECL
5815 || ((flags & LOOKUP_TEMPLATES_EXPECTED)
5816 && DECL_CLASS_TEMPLATE_P (val))))
5817 return val;
5818 if (flags & (LOOKUP_PREFER_NAMESPACES | LOOKUP_PREFER_TYPES))
52c11ef6
JM
5819 return NULL_TREE;
5820 return val;
5821}
5822
235f734d
MM
5823/* Any other BINDING overrides an implicit TYPENAME. Warn about
5824 that. */
5825
5826static void
5827warn_about_implicit_typename_lookup (typename, binding)
5828 tree typename;
5829 tree binding;
5830{
5831 tree subtype = TREE_TYPE (TREE_TYPE (typename));
5832 tree name = DECL_NAME (typename);
5833
5834 if (! (TREE_CODE (binding) == TEMPLATE_DECL
5835 && CLASSTYPE_TEMPLATE_INFO (subtype)
5836 && CLASSTYPE_TI_TEMPLATE (subtype) == binding)
5837 && ! (TREE_CODE (binding) == TYPE_DECL
5838 && same_type_p (TREE_TYPE (binding), subtype)))
5839 {
68642fb6 5840 cp_warning ("lookup of `%D' finds `%#D'",
235f734d
MM
5841 name, binding);
5842 cp_warning (" instead of `%D' from dependent base class",
5843 typename);
5844 cp_warning (" (use `typename %T::%D' if that's what you meant)",
5845 constructor_name (current_class_type), name);
5846 }
5847}
5848
8d08fdba
MS
5849/* Look up NAME in the current binding level and its superiors in the
5850 namespace of variables, functions and typedefs. Return a ..._DECL
5851 node of some kind representing its definition if there is only one
5852 such declaration, or return a TREE_LIST with all the overloaded
5853 definitions if there are many, or return 0 if it is undefined.
5854
2c73f9f5
ML
5855 If PREFER_TYPE is > 0, we prefer TYPE_DECLs or namespaces.
5856 If PREFER_TYPE is > 1, we reject non-type decls (e.g. namespaces).
a28e3c7f 5857 If PREFER_TYPE is -2, we're being called from yylex(). (UGLY)
68642fb6 5858 Otherwise we prefer non-TYPE_DECLs.
f84b4be9
JM
5859
5860 If NONCLASS is non-zero, we don't look for the NAME in class scope,
5861 using IDENTIFIER_CLASS_VALUE. */
8d08fdba 5862
824b9a4c 5863static tree
3e3f722c 5864lookup_name_real (name, prefer_type, nonclass, namespaces_only)
8d08fdba 5865 tree name;
3e3f722c 5866 int prefer_type, nonclass, namespaces_only;
8d08fdba 5867{
235f734d
MM
5868 tree t;
5869 tree val = NULL_TREE;
a28e3c7f 5870 int yylex = 0;
e1cd6e56 5871 tree from_obj = NULL_TREE;
52c11ef6 5872 int flags;
235f734d 5873 int val_is_implicit_typename = 0;
8d08fdba 5874
3e3f722c
ML
5875 /* Hack: copy flag set by parser, if set. */
5876 if (only_namespace_names)
5877 namespaces_only = 1;
52c11ef6 5878
a28e3c7f
MS
5879 if (prefer_type == -2)
5880 {
5881 extern int looking_for_typename;
fc378698 5882 tree type = NULL_TREE;
a28e3c7f
MS
5883
5884 yylex = 1;
5885 prefer_type = looking_for_typename;
e1cd6e56 5886
52c11ef6 5887 flags = lookup_flags (prefer_type, namespaces_only);
52c11ef6
JM
5888 /* If the next thing is '<', class templates are types. */
5889 if (looking_for_template)
5890 flags |= LOOKUP_TEMPLATES_EXPECTED;
5891
653cc74a 5892 /* std:: becomes :: for now. */
6bcedb4e 5893 if (got_scope && got_scope == fake_std_node)
653cc74a
JM
5894 got_scope = void_type_node;
5895
e1cd6e56
MS
5896 if (got_scope)
5897 type = got_scope;
dff6b454 5898 else if (got_object != error_mark_node)
e1cd6e56 5899 type = got_object;
68642fb6 5900
e1cd6e56 5901 if (type)
a28e3c7f 5902 {
e1cd6e56 5903 if (type == error_mark_node)
f376e137 5904 return error_mark_node;
a80e4195
MS
5905 if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
5906 type = TREE_TYPE (type);
5566b478 5907
2b9dc906
JM
5908 if (TYPE_P (type))
5909 type = complete_type (type);
5566b478 5910
a1774733 5911 if (TREE_CODE (type) == VOID_TYPE)
2c73f9f5
ML
5912 type = global_namespace;
5913 if (TREE_CODE (type) == NAMESPACE_DECL)
a9aedbc2 5914 {
87e3dbc9 5915 val = make_node (CPLUS_BINDING);
6ad07332 5916 flags |= LOOKUP_COMPLAIN;
52c11ef6 5917 if (!qualified_lookup_using_namespace (name, type, val, flags))
2c73f9f5 5918 return NULL_TREE;
52c11ef6 5919 val = select_decl (val, flags);
a9aedbc2 5920 }
5566b478 5921 else if (! IS_AGGR_TYPE (type)
5156628f 5922 || TREE_CODE (type) == TEMPLATE_TYPE_PARM
a1281f45 5923 || TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM
5156628f 5924 || TREE_CODE (type) == TYPENAME_TYPE)
e92cc029 5925 /* Someone else will give an error about this if needed. */
a28e3c7f 5926 val = NULL_TREE;
e1cd6e56 5927 else if (type == current_class_type)
a28e3c7f 5928 val = IDENTIFIER_CLASS_VALUE (name);
a28e3c7f 5929 else
70adf8a9
JM
5930 {
5931 val = lookup_member (type, name, 0, prefer_type);
5932 type_access_control (type, val);
e69c8072
JM
5933
5934 /* Restore the containing TYPENAME_TYPE if we looked
5935 through it before. */
5936 if (got_scope && got_scope != type
5937 && val && TREE_CODE (val) == TYPE_DECL
5938 && TREE_CODE (TREE_TYPE (val)) == TYPENAME_TYPE)
5939 TYPE_CONTEXT (TREE_TYPE (val)) = got_scope;
70adf8a9 5940 }
a28e3c7f 5941 }
e1cd6e56
MS
5942 else
5943 val = NULL_TREE;
5944
594740f3 5945 if (got_scope)
e1cd6e56 5946 goto done;
594740f3 5947 else if (got_object && val)
aca77bd1
JM
5948 {
5949 from_obj = val;
5950 val = NULL_TREE;
5951 }
a28e3c7f 5952 }
52c11ef6 5953 else
5b163de4
JM
5954 {
5955 flags = lookup_flags (prefer_type, namespaces_only);
5956 /* If we're not parsing, we need to complain. */
5957 flags |= LOOKUP_COMPLAIN;
5958 }
e76a2646 5959
d8f8dca1 5960 /* First, look in non-namespace scopes. */
6f1b4c42
JM
5961
5962 if (current_class_type == NULL_TREE)
5963 nonclass = 1;
5964
235f734d 5965 for (t = IDENTIFIER_BINDING (name); t; t = TREE_CHAIN (t))
d8f8dca1 5966 {
235f734d
MM
5967 tree binding;
5968
5969 if (!LOCAL_BINDING_P (t) && nonclass)
d8f8dca1
MM
5970 /* We're not looking for class-scoped bindings, so keep going. */
5971 continue;
68642fb6 5972
d8f8dca1 5973 /* If this is the kind of thing we're looking for, we're done. */
235f734d
MM
5974 if (qualify_lookup (BINDING_VALUE (t), flags))
5975 binding = BINDING_VALUE (t);
68642fb6 5976 else if ((flags & LOOKUP_PREFER_TYPES)
235f734d
MM
5977 && qualify_lookup (BINDING_TYPE (t), flags))
5978 binding = BINDING_TYPE (t);
5979 else
5980 binding = NULL_TREE;
5981
70adf8a9
JM
5982 /* Handle access control on types from enclosing or base classes. */
5983 if (binding && ! yylex
5984 && BINDING_LEVEL (t) && BINDING_LEVEL (t)->parm_flag == 2)
5985 type_access_control (BINDING_LEVEL (t)->this_class, binding);
5986
235f734d 5987 if (binding
83233dca 5988 && (!val || !IMPLICIT_TYPENAME_TYPE_DECL_P (binding)))
d8f8dca1 5989 {
235f734d
MM
5990 if (val_is_implicit_typename && !yylex)
5991 warn_about_implicit_typename_lookup (val, binding);
5992 val = binding;
68642fb6 5993 val_is_implicit_typename
83233dca 5994 = IMPLICIT_TYPENAME_TYPE_DECL_P (val);
235f734d
MM
5995 if (!val_is_implicit_typename)
5996 break;
d8f8dca1
MM
5997 }
5998 }
f181d4ae 5999
235f734d
MM
6000 /* Now lookup in namespace scopes. */
6001 if (!val || val_is_implicit_typename)
e76a2646 6002 {
2c169bab 6003 t = unqualified_namespace_lookup (name, flags, 0);
235f734d 6004 if (t)
c1def683 6005 {
235f734d
MM
6006 if (val_is_implicit_typename && !yylex)
6007 warn_about_implicit_typename_lookup (val, t);
6008 val = t;
c1def683
JM
6009 }
6010 }
6011
a28e3c7f 6012 done:
8d08fdba
MS
6013 if (val)
6014 {
c91a56d2 6015 /* This should only warn about types used in qualified-ids. */
e1cd6e56 6016 if (from_obj && from_obj != val)
5566b478 6017 {
c91a56d2
MS
6018 if (looking_for_typename && TREE_CODE (from_obj) == TYPE_DECL
6019 && TREE_CODE (val) == TYPE_DECL
aca77bd1
JM
6020 && ! same_type_p (TREE_TYPE (from_obj), TREE_TYPE (val)))
6021 cp_pedwarn ("\
bd0d5d4a
JM
6022lookup of `%D' in the scope of `%#T' (`%#D') \
6023does not match lookup in the current scope (`%#D')",
6024 name, got_object, from_obj, val);
594740f3 6025
b8b1a3c1
JM
6026 /* We don't change val to from_obj if got_object depends on
6027 template parms because that breaks implicit typename for
6028 destructor calls. */
6029 if (! uses_template_parms (got_object))
53fdbb3b 6030 val = from_obj;
5566b478 6031 }
e1cd6e56 6032
0c64a9ca
JM
6033 /* If we have a single function from a using decl, pull it out. */
6034 if (TREE_CODE (val) == OVERLOAD && ! really_overloaded_fn (val))
6035 val = OVL_FUNCTION (val);
8d08fdba 6036 }
e1cd6e56
MS
6037 else if (from_obj)
6038 val = from_obj;
8d08fdba
MS
6039
6040 return val;
6041}
6042
700f8a87
MS
6043tree
6044lookup_name_nonclass (name)
6045 tree name;
6046{
3e3f722c 6047 return lookup_name_real (name, 0, 1, 0);
700f8a87
MS
6048}
6049
2c73f9f5
ML
6050tree
6051lookup_function_nonclass (name, args)
6052 tree name;
6053 tree args;
6054{
6055 return lookup_arg_dependent (name, lookup_name_nonclass (name), args);
6056}
6057
3e3f722c
ML
6058tree
6059lookup_name_namespace_only (name)
6060 tree name;
6061{
6062 /* type-or-namespace, nonclass, namespace_only */
6063 return lookup_name_real (name, 1, 1, 1);
6064}
6065
700f8a87
MS
6066tree
6067lookup_name (name, prefer_type)
6068 tree name;
6069 int prefer_type;
6070{
3e3f722c 6071 return lookup_name_real (name, prefer_type, 0, 0);
700f8a87
MS
6072}
6073
a7d2d407
MM
6074/* Similar to `lookup_name' but look only in the innermost non-class
6075 binding level. */
8d08fdba
MS
6076
6077tree
6078lookup_name_current_level (name)
6079 tree name;
6080{
a7d2d407
MM
6081 struct binding_level *b;
6082 tree t = NULL_TREE;
8d08fdba 6083
a7d2d407
MM
6084 b = current_binding_level;
6085 while (b->parm_flag == 2)
6086 b = b->level_chain;
6087
6088 if (b->namespace_p)
8d08fdba 6089 {
5fdaba89 6090 t = IDENTIFIER_NAMESPACE_VALUE (name);
8d08fdba
MS
6091
6092 /* extern "C" function() */
6093 if (t != NULL_TREE && TREE_CODE (t) == TREE_LIST)
6094 t = TREE_VALUE (t);
6095 }
68642fb6 6096 else if (IDENTIFIER_BINDING (name)
f181d4ae 6097 && LOCAL_BINDING_P (IDENTIFIER_BINDING (name)))
8d08fdba 6098 {
a4443a08
MS
6099 while (1)
6100 {
f181d4ae
MM
6101 if (BINDING_LEVEL (IDENTIFIER_BINDING (name)) == b)
6102 return IDENTIFIER_VALUE (name);
68642fb6 6103
9ed182dc
JM
6104 if (b->keep == 2)
6105 b = b->level_chain;
6106 else
6107 break;
6108 }
6109 }
6110
6111 return t;
6112}
6113
6114/* Like lookup_name_current_level, but for types. */
6115
6116tree
6117lookup_type_current_level (name)
6118 tree name;
6119{
6120 register tree t = NULL_TREE;
6121
6122 my_friendly_assert (! current_binding_level->namespace_p, 980716);
6123
6124 if (REAL_IDENTIFIER_TYPE_VALUE (name) != NULL_TREE
6125 && REAL_IDENTIFIER_TYPE_VALUE (name) != global_type_node)
6126 {
6127 struct binding_level *b = current_binding_level;
6128 while (1)
6129 {
6130 if (purpose_member (name, b->type_shadowed))
6131 return REAL_IDENTIFIER_TYPE_VALUE (name);
a4443a08
MS
6132 if (b->keep == 2)
6133 b = b->level_chain;
6134 else
6135 break;
6136 }
8d08fdba
MS
6137 }
6138
6139 return t;
6140}
3e3f722c
ML
6141
6142void
6143begin_only_namespace_names ()
6144{
6145 only_namespace_names = 1;
6146}
6147
6148void
6149end_only_namespace_names ()
6150{
6151 only_namespace_names = 0;
6152}
8d08fdba 6153\f
8d08fdba 6154/* Push the declarations of builtin types into the namespace.
0e5921e8 6155 RID_INDEX is the index of the builtin type
8d08fdba
MS
6156 in the array RID_POINTERS. NAME is the name used when looking
6157 up the builtin type. TYPE is the _TYPE node for the builtin type. */
6158
eaa7c03f 6159void
8d08fdba
MS
6160record_builtin_type (rid_index, name, type)
6161 enum rid rid_index;
d8e178a0 6162 const char *name;
8d08fdba
MS
6163 tree type;
6164{
6165 tree rname = NULL_TREE, tname = NULL_TREE;
a703fb38 6166 tree tdecl = NULL_TREE;
8d08fdba 6167
0e5921e8 6168 if ((int) rid_index < (int) RID_MAX)
8d08fdba
MS
6169 rname = ridpointers[(int) rid_index];
6170 if (name)
6171 tname = get_identifier (name);
6172
6173 TYPE_BUILT_IN (type) = 1;
68642fb6 6174
8d08fdba
MS
6175 if (tname)
6176 {
8d08fdba 6177 tdecl = pushdecl (build_decl (TYPE_DECL, tname, type));
8d08fdba 6178 set_identifier_type_value (tname, NULL_TREE);
0e5921e8 6179 if ((int) rid_index < (int) RID_MAX)
2c73f9f5
ML
6180 /* Built-in types live in the global namespace. */
6181 SET_IDENTIFIER_GLOBAL_VALUE (tname, tdecl);
8d08fdba
MS
6182 }
6183 if (rname != NULL_TREE)
6184 {
6185 if (tname != NULL_TREE)
6186 {
6187 set_identifier_type_value (rname, NULL_TREE);
2c73f9f5 6188 SET_IDENTIFIER_GLOBAL_VALUE (rname, tdecl);
8d08fdba
MS
6189 }
6190 else
6191 {
8d08fdba 6192 tdecl = pushdecl (build_decl (TYPE_DECL, rname, type));
8d08fdba
MS
6193 set_identifier_type_value (rname, NULL_TREE);
6194 }
6195 }
8d08fdba
MS
6196}
6197
eff71ab0 6198/* Record one of the standard Java types.
4d8a1dd6
MM
6199 * Declare it as having the given NAME.
6200 * If SIZE > 0, it is the size of one of the integral types;
6201 * otherwise it is the negative of the size of one of the other types. */
eff71ab0
PB
6202
6203static tree
6204record_builtin_java_type (name, size)
d8e178a0 6205 const char *name;
eff71ab0
PB
6206 int size;
6207{
6208 tree type, decl;
6209 if (size > 0)
6210 type = make_signed_type (size);
6211 else if (size > -32)
6212 { /* "__java_char" or ""__java_boolean". */
6213 type = make_unsigned_type (-size);
6214 /*if (size == -1) TREE_SET_CODE (type, BOOLEAN_TYPE);*/
6215 }
6216 else
6217 { /* "__java_float" or ""__java_double". */
6218 type = make_node (REAL_TYPE);
6219 TYPE_PRECISION (type) = - size;
6220 layout_type (type);
6221 }
0e5921e8 6222 record_builtin_type (RID_MAX, name, type);
eff71ab0 6223 decl = TYPE_NAME (type);
e229f2cd
PB
6224
6225 /* Suppress generate debug symbol entries for these types,
6226 since for normal C++ they are just clutter.
6227 However, push_lang_context undoes this if extern "Java" is seen. */
eff71ab0 6228 DECL_IGNORED_P (decl) = 1;
e229f2cd 6229
eff71ab0
PB
6230 TYPE_FOR_JAVA (type) = 1;
6231 return type;
6232}
6233
036407f7
ML
6234/* Push a type into the namespace so that the back-ends ignore it. */
6235
6236static void
6237record_unknown_type (type, name)
6238 tree type;
d8e178a0 6239 const char *name;
036407f7
ML
6240{
6241 tree decl = pushdecl (build_decl (TYPE_DECL, get_identifier (name), type));
6242 /* Make sure the "unknown type" typedecl gets ignored for debug info. */
6243 DECL_IGNORED_P (decl) = 1;
6244 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
6245 TYPE_SIZE (type) = TYPE_SIZE (void_type_node);
6246 TYPE_ALIGN (type) = 1;
11cf4d18 6247 TYPE_USER_ALIGN (type) = 0;
036407f7 6248 TYPE_MODE (type) = TYPE_MODE (void_type_node);
68642fb6 6249}
036407f7 6250
d43829f9
MM
6251/* An string for which we should create an IDENTIFIER_NODE at
6252 startup. */
6253
6254typedef struct predefined_identifier
6255{
6256 /* The name of the identifier. */
6257 const char *name;
6258 /* The place where the IDENTIFIER_NODE should be stored. */
6259 tree *node;
298d6f60
MM
6260 /* Non-zero if this is the name of a constructor or destructor. */
6261 int ctor_or_dtor_p;
d43829f9
MM
6262} predefined_identifier;
6263
6264/* Create all the predefined identifiers. */
6265
6266static void
5362b086 6267initialize_predefined_identifiers ()
d43829f9
MM
6268{
6269 struct predefined_identifier *pid;
6270
6271 /* A table of identifiers to create at startup. */
6272 static predefined_identifier predefined_identifiers[] = {
298d6f60
MM
6273 { "C++", &lang_name_cplusplus, 0 },
6274 { "C", &lang_name_c, 0 },
6275 { "Java", &lang_name_java, 0 },
6276 { CTOR_NAME, &ctor_identifier, 1 },
6277 { "__base_ctor", &base_ctor_identifier, 1 },
6278 { "__comp_ctor", &complete_ctor_identifier, 1 },
6279 { DTOR_NAME, &dtor_identifier, 1 },
6280 { "__comp_dtor", &complete_dtor_identifier, 1 },
6281 { "__base_dtor", &base_dtor_identifier, 1 },
6282 { "__deleting_dtor", &deleting_dtor_identifier, 1 },
6283 { VTABLE_DELTA2_NAME, &delta2_identifier, 0 },
6284 { VTABLE_DELTA_NAME, &delta_identifier, 0 },
6285 { IN_CHARGE_NAME, &in_charge_identifier, 0 },
6286 { VTABLE_INDEX_NAME, &index_identifier, 0 },
6287 { "nelts", &nelts_identifier, 0 },
6288 { THIS_NAME, &this_identifier, 0 },
6289 { VTABLE_PFN_NAME, &pfn_identifier, 0 },
6290 { "__pfn_or_delta2", &pfn_or_delta2_identifier, 0 },
6291 { "_vptr", &vptr_identifier, 0 },
6292 { "__cp_push_exception", &cp_push_exception_identifier, 0 },
3ec6bad3 6293 { "__vtt_parm", &vtt_parm_identifier, 0 },
1f6e1acc 6294 { "std", &std_identifier, 0 },
298d6f60 6295 { NULL, NULL, 0 }
d43829f9
MM
6296 };
6297
6298 for (pid = predefined_identifiers; pid->name; ++pid)
298d6f60
MM
6299 {
6300 *pid->node = get_identifier (pid->name);
6301 if (pid->ctor_or_dtor_p)
6302 IDENTIFIER_CTOR_OR_DTOR_P (*pid->node) = 1;
6303 }
d43829f9
MM
6304}
6305
8d08fdba
MS
6306/* Create the predefined scalar types of C,
6307 and some nodes representing standard constants (0, 1, (void *)0).
6308 Initialize the global binding level.
6309 Make definitions for built-in primitive functions. */
6310
6311void
6312init_decl_processing ()
6313{
8d08fdba 6314 tree fields[20];
8d08fdba 6315
5bb2a292
MM
6316 /* Check to see that the user did not specify an invalid combination
6317 of command-line options. */
1f84ec23
MM
6318 if (!flag_vtable_thunks)
6319 error ("the ABI requires vtable thunks");
5bb2a292 6320
d43829f9
MM
6321 /* Create all the identifiers we need. */
6322 initialize_predefined_identifiers ();
8d08fdba 6323
8f17b5c5 6324 /* Fill in back-end hooks. */
a8f73d4b
MM
6325 init_lang_status = &push_cp_function_context;
6326 free_lang_status = &pop_cp_function_context;
b4b8bee7 6327 mark_lang_status = &mark_cp_function_context;
8f17b5c5 6328 lang_safe_from_p = &c_safe_from_p;
0a7394bc 6329 lang_dump_tree = &cp_dump_tree;
d363e7bf 6330 lang_missing_noreturn_ok_p = &cp_missing_noreturn_ok_p;
99dccabc 6331
fc6af6e3
RH
6332 cp_parse_init ();
6333 init_decl2 ();
9cd64686 6334 init_pt ();
fc6af6e3 6335
9cd64686
MM
6336 /* Create the global variables. */
6337 push_to_top_level ();
8012c983 6338
2c73f9f5 6339 /* Enter the global namespace. */
30394414 6340 my_friendly_assert (global_namespace == NULL_TREE, 375);
30394414
JM
6341 push_namespace (get_identifier ("::"));
6342 global_namespace = current_namespace;
6343 current_lang_name = NULL_TREE;
6344
bccd95ae 6345 /* Adjust various flags based on command-line settings. */
2642b9bf
JM
6346 if (! flag_permissive && ! pedantic)
6347 flag_pedantic_errors = 1;
bccd95ae 6348 if (!flag_no_inline)
b850de4f
MM
6349 {
6350 flag_inline_trees = 1;
6351 flag_no_inline = 1;
6352 }
830fcda8 6353
8d08fdba
MS
6354 /* Initially, C. */
6355 current_lang_name = lang_name_c;
6356
6357 current_function_decl = NULL_TREE;
8d08fdba
MS
6358 current_binding_level = NULL_BINDING_LEVEL;
6359 free_binding_level = NULL_BINDING_LEVEL;
6360
81b3411c
BS
6361 build_common_tree_nodes (flag_signed_char);
6362
8d08fdba
MS
6363 error_mark_list = build_tree_list (error_mark_node, error_mark_node);
6364 TREE_TYPE (error_mark_list) = error_mark_node;
6365
a28e3c7f
MS
6366 /* Make the binding_level structure for global names. */
6367 pushlevel (0);
8d08fdba 6368 global_binding_level = current_binding_level;
2c73f9f5
ML
6369 /* The global level is the namespace level of ::. */
6370 NAMESPACE_LEVEL (global_namespace) = global_binding_level;
6371 declare_namespace_level ();
8d08fdba 6372
6bcedb4e
MM
6373 /* Create the `std' namespace. */
6374 if (flag_honor_std)
6375 {
6376 push_namespace (std_identifier);
6377 std_node = current_namespace;
6378 pop_namespace ();
6379 fake_std_node = error_mark_node;
6380 }
6381 else
6382 {
6383 fake_std_node = build_decl (NAMESPACE_DECL,
6384 std_identifier,
6385 void_type_node);
6386 pushdecl (fake_std_node);
6387 }
5362b086 6388
eaa7c03f 6389 c_common_nodes_and_builtins ();
37c46b43 6390
4d8a1dd6
MM
6391 java_byte_type_node = record_builtin_java_type ("__java_byte", 8);
6392 java_short_type_node = record_builtin_java_type ("__java_short", 16);
6393 java_int_type_node = record_builtin_java_type ("__java_int", 32);
6394 java_long_type_node = record_builtin_java_type ("__java_long", 64);
6395 java_float_type_node = record_builtin_java_type ("__java_float", -32);
6396 java_double_type_node = record_builtin_java_type ("__java_double", -64);
6397 java_char_type_node = record_builtin_java_type ("__java_char", -16);
6398 java_boolean_type_node = record_builtin_java_type ("__java_boolean", -1);
eff71ab0 6399
8d08fdba
MS
6400 integer_two_node = build_int_2 (2, 0);
6401 TREE_TYPE (integer_two_node) = integer_type_node;
6402 integer_three_node = build_int_2 (3, 0);
6403 TREE_TYPE (integer_three_node) = integer_type_node;
8d08fdba 6404
255512c1
JM
6405 boolean_type_node = make_unsigned_type (BOOL_TYPE_SIZE);
6406 TREE_SET_CODE (boolean_type_node, BOOLEAN_TYPE);
c1ea6a0b
BK
6407 TYPE_MAX_VALUE (boolean_type_node) = build_int_2 (1, 0);
6408 TREE_TYPE (TYPE_MAX_VALUE (boolean_type_node)) = boolean_type_node;
6409 TYPE_PRECISION (boolean_type_node) = 1;
255512c1
JM
6410 record_builtin_type (RID_BOOL, "bool", boolean_type_node);
6411 boolean_false_node = build_int_2 (0, 0);
6412 TREE_TYPE (boolean_false_node) = boolean_type_node;
6413 boolean_true_node = build_int_2 (1, 0);
6414 TREE_TYPE (boolean_true_node) = boolean_type_node;
2986ae00 6415
ff0bee63 6416 signed_size_zero_node = build_int_2 (0, 0);
e92cc029
MS
6417 TREE_TYPE (signed_size_zero_node) = make_signed_type (TYPE_PRECISION (sizetype));
6418
4cc1d462 6419 empty_except_spec = build_tree_list (NULL_TREE, NULL_TREE);
5fd8e536
JM
6420
6421#if 0
6422 record_builtin_type (RID_MAX, NULL_PTR, string_type_node);
6423#endif
6424
1f84ec23
MM
6425 delta_type_node = ptrdiff_type_node;
6426 vtable_index_type = ptrdiff_type_node;
c7e266a6 6427
3ec6bad3 6428 vtt_parm_type = build_pointer_type (const_ptr_type_node);
356955cf 6429 lang_type_promotes_to = convert_type_from_ellipsis;
7f4edbcb 6430
824b9a4c 6431 void_ftype_ptr
4cc1d462 6432 = build_exception_variant (void_ftype_ptr, empty_except_spec);
8d08fdba 6433
8d08fdba
MS
6434 /* C++ extensions */
6435
6436 unknown_type_node = make_node (UNKNOWN_TYPE);
036407f7
ML
6437 record_unknown_type (unknown_type_node, "unknown type");
6438
8d08fdba
MS
6439 /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node. */
6440 TREE_TYPE (unknown_type_node) = unknown_type_node;
a6967cc0 6441
03d0f4af 6442 TREE_TYPE (null_node) = type_for_size (POINTER_SIZE, 0);
a6967cc0
JM
6443
6444 /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
6445 result. */
8d08fdba
MS
6446 TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
6447 TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
6448
8926095f 6449 if (flag_vtable_thunks)
700f8a87
MS
6450 {
6451 /* Make sure we get a unique function type, so we can give
6452 its pointer type a name. (This wins for gdb.) */
6453 tree vfunc_type = make_node (FUNCTION_TYPE);
6454 TREE_TYPE (vfunc_type) = integer_type_node;
6455 TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
6456 layout_type (vfunc_type);
6457
6458 vtable_entry_type = build_pointer_type (vfunc_type);
6459 }
8926095f 6460 else
700f8a87 6461 {
33848bb0 6462 vtable_entry_type = make_aggr_type (RECORD_TYPE);
721c3b42
MM
6463 fields[0] = build_decl (FIELD_DECL, delta_identifier,
6464 delta_type_node);
6465 fields[1] = build_decl (FIELD_DECL, index_identifier,
6466 delta_type_node);
6467 fields[2] = build_decl (FIELD_DECL, pfn_identifier,
6468 ptr_type_node);
700f8a87
MS
6469 finish_builtin_type (vtable_entry_type, VTBL_PTR_TYPE, fields, 2,
6470 double_type_node);
6471
6472 /* Make this part of an invisible union. */
6473 fields[3] = copy_node (fields[2]);
6474 TREE_TYPE (fields[3]) = delta_type_node;
6475 DECL_NAME (fields[3]) = delta2_identifier;
6476 DECL_MODE (fields[3]) = TYPE_MODE (delta_type_node);
6477 DECL_SIZE (fields[3]) = TYPE_SIZE (delta_type_node);
06ceef4e 6478 DECL_SIZE_UNIT (fields[3]) = TYPE_SIZE_UNIT (delta_type_node);
700f8a87
MS
6479 TREE_UNSIGNED (fields[3]) = 0;
6480 TREE_CHAIN (fields[2]) = fields[3];
91063b51
MM
6481 vtable_entry_type = build_qualified_type (vtable_entry_type,
6482 TYPE_QUAL_CONST);
700f8a87 6483 }
0e5921e8 6484 record_builtin_type (RID_MAX, VTBL_PTR_TYPE, vtable_entry_type);
8d08fdba 6485
8d08fdba 6486 vtbl_type_node
52bf7d5d 6487 = build_cplus_array_type (vtable_entry_type, NULL_TREE);
8d08fdba 6488 layout_type (vtbl_type_node);
91063b51 6489 vtbl_type_node = build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
0e5921e8 6490 record_builtin_type (RID_MAX, NULL_PTR, vtbl_type_node);
849da744
MM
6491 vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
6492 layout_type (vtbl_ptr_type_node);
0e5921e8 6493 record_builtin_type (RID_MAX, NULL_PTR, vtbl_ptr_type_node);
8d08fdba 6494
1f84ec23
MM
6495 push_namespace (get_identifier ("__cxxabiv1"));
6496 abi_node = current_namespace;
6497 pop_namespace ();
6633d636 6498
2c73f9f5 6499 global_type_node = make_node (LANG_TYPE);
036407f7 6500 record_unknown_type (global_type_node, "global type");
2c73f9f5 6501
db5ae43f
MS
6502 /* Now, C++. */
6503 current_lang_name = lang_name_cplusplus;
8d08fdba 6504
ced78d8b 6505 {
2c73f9f5
ML
6506 tree bad_alloc_type_node, newtype, deltype;
6507 if (flag_honor_std)
6bcedb4e 6508 push_namespace (std_identifier);
2c73f9f5 6509 bad_alloc_type_node = xref_tag
ca107ded 6510 (class_type_node, get_identifier ("bad_alloc"), 1);
2c73f9f5
ML
6511 if (flag_honor_std)
6512 pop_namespace ();
6513 newtype = build_exception_variant
4cc1d462
NS
6514 (ptr_ftype_sizetype, add_exception_specifier (NULL_TREE, bad_alloc_type_node, -1));
6515 deltype = build_exception_variant (void_ftype_ptr, empty_except_spec);
596ea4e5
AS
6516 push_cp_library_fn (NEW_EXPR, newtype);
6517 push_cp_library_fn (VEC_NEW_EXPR, newtype);
6518 global_delete_fndecl = push_cp_library_fn (DELETE_EXPR, deltype);
6519 push_cp_library_fn (VEC_DELETE_EXPR, deltype);
ced78d8b 6520 }
8d08fdba
MS
6521
6522 abort_fndecl
1f84ec23 6523 = build_library_fn_ptr ("__cxa_pure_virtual", void_ftype);
8d08fdba 6524
8d08fdba
MS
6525 /* Perform other language dependent initializations. */
6526 init_class_processing ();
6527 init_init_processing ();
6528 init_search_processing ();
db48b831 6529 init_rtti_processing ();
8d08fdba 6530
6467930b 6531 if (flag_exceptions)
8d2733ca 6532 init_exception_processing ();
8d08fdba
MS
6533 if (flag_no_inline)
6534 {
6535 flag_inline_functions = 0;
8d08fdba 6536 }
9e9ff709 6537
7fcdf4c2 6538 if (! supports_one_only ())
72b7eeff 6539 flag_weak = 0;
8d08fdba
MS
6540
6541 /* Create the global bindings for __FUNCTION__ and __PRETTY_FUNCTION__. */
63ad61ed
ZW
6542 function_id_node = get_identifier ("__FUNCTION__");
6543 pretty_function_id_node = get_identifier ("__PRETTY_FUNCTION__");
6544 func_id_node = get_identifier ("__func__");
6545
2ce07e2d 6546 make_fname_decl = cp_make_fname_decl;
8d08fdba
MS
6547 declare_function_name ();
6548
6549 /* Prepare to check format strings against argument lists. */
6550 init_function_format_info ();
e9a25f70
JL
6551
6552 /* Show we use EH for cleanups. */
6553 using_eh_for_cleanups ();
62c154ed 6554
e5dc5fb2 6555 valid_lang_attribute = cp_valid_lang_attribute;
d9cf7c82
JM
6556
6557 /* Maintain consistency. Perhaps we should just complain if they
6558 say -fwritable-strings? */
6559 if (flag_writable_strings)
6560 flag_const_strings = 0;
fc6af6e3
RH
6561
6562 /* Add GC roots for all of our global variables. */
6563 ggc_add_tree_root (c_global_trees, sizeof c_global_trees / sizeof(tree));
6564 ggc_add_tree_root (cp_global_trees, sizeof cp_global_trees / sizeof(tree));
fc6af6e3
RH
6565 ggc_add_tree_root (&integer_three_node, 1);
6566 ggc_add_tree_root (&integer_two_node, 1);
fc6af6e3 6567 ggc_add_tree_root (&signed_size_zero_node, 1);
fc6af6e3
RH
6568 ggc_add_tree_root (&size_one_node, 1);
6569 ggc_add_tree_root (&size_zero_node, 1);
fc6af6e3
RH
6570 ggc_add_root (&global_binding_level, 1, sizeof global_binding_level,
6571 mark_binding_level);
9cd64686 6572 ggc_add_root (&scope_chain, 1, sizeof scope_chain, &mark_saved_scope);
fc6af6e3
RH
6573 ggc_add_tree_root (&static_ctors, 1);
6574 ggc_add_tree_root (&static_dtors, 1);
9cd64686 6575 ggc_add_tree_root (&lastiddecl, 1);
fc6af6e3 6576
fc6af6e3
RH
6577 ggc_add_tree_root (&last_function_parm_tags, 1);
6578 ggc_add_tree_root (&current_function_return_value, 1);
fc6af6e3 6579 ggc_add_tree_root (&current_function_parm_tags, 1);
9cd64686 6580 ggc_add_tree_root (&last_function_parms, 1);
fc6af6e3 6581 ggc_add_tree_root (&error_mark_list, 1);
9cd64686 6582
fc6af6e3 6583 ggc_add_tree_root (&global_namespace, 1);
fc6af6e3
RH
6584 ggc_add_tree_root (&global_type_node, 1);
6585 ggc_add_tree_root (&anonymous_namespace_name, 1);
9cd64686
MM
6586
6587 ggc_add_tree_root (&got_object, 1);
6588 ggc_add_tree_root (&got_scope, 1);
6589
6590 ggc_add_tree_root (&current_lang_name, 1);
6591 ggc_add_tree_root (&static_aggregates, 1);
4890c2f4 6592 ggc_add_tree_root (&free_bindings, 1);
62c154ed
JM
6593}
6594
2ce07e2d
NS
6595/* Create the VAR_DECL for __FUNCTION__ etc. ID is the name to give the
6596 decl, NAME is the initialization string and TYPE_DEP indicates whether
6597 NAME depended on the type of the function. We make use of that to detect
6598 __PRETTY_FUNCTION__ inside a template fn. Because we build a tree for
6599 the function before emitting any of it, we don't need to treat the
6600 VAR_DECL specially. We can decide whether to emit it later, if it was
6601 used. */
6602
6603static tree
6604cp_make_fname_decl (id, name, type_dep)
6605 tree id;
6606 const char *name;
6607 int type_dep;
6608{
6609 tree decl, type, init;
6610 size_t length = strlen (name);
6611 tree domain = NULL_TREE;
5362b086 6612
2ce07e2d
NS
6613 if (!processing_template_decl)
6614 type_dep = 0;
6615 if (!type_dep)
4890c2f4 6616 domain = build_index_type (size_int (length));
2ce07e2d
NS
6617
6618 type = build_cplus_array_type
6619 (build_qualified_type (char_type_node, TYPE_QUAL_CONST),
6620 domain);
6621
6dfbb909 6622 decl = build_decl (VAR_DECL, id, type);
2ce07e2d
NS
6623 TREE_STATIC (decl) = 1;
6624 TREE_READONLY (decl) = 1;
6625 DECL_SOURCE_LINE (decl) = 0;
6626 DECL_ARTIFICIAL (decl) = 1;
6627 DECL_IN_SYSTEM_HEADER (decl) = 1;
a3eab619 6628 DECL_IGNORED_P (decl) = 1;
2ce07e2d
NS
6629 pushdecl (decl);
6630 if (processing_template_decl)
6631 decl = push_template_decl (decl);
6632 if (type_dep)
6633 {
6634 init = build (FUNCTION_NAME, type);
6635 DECL_PRETTY_FUNCTION_P (decl) = 1;
6636 }
6637 else
6638 {
6639 init = build_string (length + 1, name);
6640 TREE_TYPE (init) = type;
6641 }
6642 DECL_INITIAL (decl) = init;
6643 cp_finish_decl (decl, init, NULL_TREE, LOOKUP_ONLYCONVERTING);
5362b086 6644
2ce07e2d
NS
6645 /* We will have to make sure we only emit this, if it is actually used. */
6646 return decl;
6647}
6648
0c11ada6
JM
6649/* Entry point for the benefit of c_common_nodes_and_builtins.
6650
6651 Make a definition for a builtin function named NAME and whose data type
8d08fdba 6652 is TYPE. TYPE should be a function type with argument types.
8d08fdba 6653
0c11ada6
JM
6654 CLASS and CODE tell later passes how to compile calls to this function.
6655 See tree.h for possible values.
6656
6657 If LIBNAME is nonzero, use that for DECL_ASSEMBLER_NAME,
8d08fdba
MS
6658 the name to be called if we can't opencode the function. */
6659
6660tree
0c11ada6 6661builtin_function (name, type, code, class, libname)
d8e178a0 6662 const char *name;
8d08fdba 6663 tree type;
0c11ada6
JM
6664 int code;
6665 enum built_in_class class;
6666 const char *libname;
8d08fdba 6667{
596ea4e5 6668 tree decl = build_library_fn_1 (get_identifier (name), ERROR_MARK, type);
0c11ada6
JM
6669 DECL_BUILT_IN_CLASS (decl) = class;
6670 DECL_FUNCTION_CODE (decl) = code;
12a22e76 6671
2c73f9f5 6672 my_friendly_assert (DECL_CONTEXT (decl) == NULL_TREE, 392);
2c73f9f5 6673
6bcedb4e
MM
6674 /* All builtins that don't begin with an `_' should go in the `std'
6675 namespace. */
5362b086 6676 if (flag_honor_std && name[0] != '_')
6bcedb4e
MM
6677 {
6678 push_namespace (std_identifier);
6679 DECL_CONTEXT (decl) = std_node;
6680 }
6681 pushdecl (decl);
6682 if (flag_honor_std && name[0] != '_')
6683 pop_namespace ();
6684
8d08fdba
MS
6685 /* Since `pushdecl' relies on DECL_ASSEMBLER_NAME instead of DECL_NAME,
6686 we cannot change DECL_ASSEMBLER_NAME until we have installed this
6687 function in the namespace. */
0c11ada6 6688 if (libname)
92643fea
MM
6689 SET_DECL_ASSEMBLER_NAME (decl, get_identifier (libname));
6690 make_decl_rtl (decl, NULL);
935d1834
ZW
6691
6692 /* Warn if a function in the namespace for users
6693 is used without an occasion to consider it declared. */
6694 if (name[0] != '_' || name[1] != '_')
6695 DECL_ANTICIPATED (decl) = 1;
6696
8d08fdba
MS
6697 return decl;
6698}
7f4edbcb 6699
0c11ada6
JM
6700/* Generate a FUNCTION_DECL with the typical flags for a runtime library
6701 function. Not called directly. */
6702
6703static tree
596ea4e5 6704build_library_fn_1 (name, operator_code, type)
0c11ada6 6705 tree name;
596ea4e5 6706 enum tree_code operator_code;
0c11ada6
JM
6707 tree type;
6708{
6709 tree fn = build_lang_decl (FUNCTION_DECL, name, type);
6710 DECL_EXTERNAL (fn) = 1;
6711 TREE_PUBLIC (fn) = 1;
6712 DECL_ARTIFICIAL (fn) = 1;
6713 TREE_NOTHROW (fn) = 1;
596ea4e5 6714 SET_OVERLOADED_OPERATOR_CODE (fn, operator_code);
92643fea 6715 DECL_LANGUAGE (fn) = lang_c;
0c11ada6
JM
6716 return fn;
6717}
c2a37c55 6718
0c11ada6
JM
6719/* Returns the _DECL for a library function with C linkage.
6720 We assume that such functions never throw; if this is incorrect,
6721 callers should unset TREE_NOTHROW. */
c2a37c55 6722
7f4edbcb 6723tree
0c11ada6
JM
6724build_library_fn (name, type)
6725 tree name;
6726 tree type;
6727{
19e7881c 6728 return build_library_fn_1 (name, ERROR_MARK, type);
0c11ada6
JM
6729}
6730
6731/* Returns the _DECL for a library function with C++ linkage. */
6732
596ea4e5
AS
6733static tree
6734build_cp_library_fn (name, operator_code, type)
0c11ada6 6735 tree name;
596ea4e5 6736 enum tree_code operator_code;
0c11ada6
JM
6737 tree type;
6738{
596ea4e5 6739 tree fn = build_library_fn_1 (name, operator_code, type);
0c11ada6 6740 TREE_NOTHROW (fn) = TYPE_NOTHROW_P (type);
6bbf1598 6741 DECL_CONTEXT (fn) = FROB_CONTEXT (current_namespace);
92643fea 6742 DECL_LANGUAGE (fn) = lang_cplusplus;
0c11ada6 6743 set_mangled_name_for_decl (fn);
0c11ada6
JM
6744 return fn;
6745}
6746
6747/* Like build_library_fn, but takes a C string instead of an
6748 IDENTIFIER_NODE. */
6749
6750tree
6751build_library_fn_ptr (name, type)
7f4edbcb
BS
6752 const char *name;
6753 tree type;
7f4edbcb 6754{
0c11ada6
JM
6755 return build_library_fn (get_identifier (name), type);
6756}
6757
6758/* Like build_cp_library_fn, but takes a C string instead of an
6759 IDENTIFIER_NODE. */
6760
6761tree
6762build_cp_library_fn_ptr (name, type)
6763 const char *name;
6764 tree type;
6765{
596ea4e5 6766 return build_cp_library_fn (get_identifier (name), ERROR_MARK, type);
0c11ada6
JM
6767}
6768
6769/* Like build_library_fn, but also pushes the function so that we will
6770 be able to find it via IDENTIFIER_GLOBAL_VALUE. */
6771
6772tree
6773push_library_fn (name, type)
6774 tree name, type;
6775{
6776 tree fn = build_library_fn (name, type);
6777 pushdecl_top_level (fn);
6778 return fn;
6779}
6780
6781/* Like build_cp_library_fn, but also pushes the function so that it
6782 will be found by normal lookup. */
6783
596ea4e5
AS
6784static tree
6785push_cp_library_fn (operator_code, type)
6786 enum tree_code operator_code;
0c11ada6
JM
6787 tree type;
6788{
5362b086 6789 tree fn = build_cp_library_fn (ansi_opname (operator_code),
596ea4e5
AS
6790 operator_code,
6791 type);
0c11ada6
JM
6792 pushdecl (fn);
6793 return fn;
6794}
6795
6796/* Like push_library_fn, but takes a TREE_LIST of parm types rather than
6797 a FUNCTION_TYPE. */
6798
6799tree
6800push_void_library_fn (name, parmtypes)
6801 tree name, parmtypes;
6802{
6803 tree type = build_function_type (void_type_node, parmtypes);
6804 return push_library_fn (name, type);
6805}
6806
cf74fb86 6807/* Like push_library_fn, but also note that this function throws
0c11ada6
JM
6808 and does not return. Used for __throw_foo and the like. */
6809
6810tree
cf74fb86
JM
6811push_throw_library_fn (name, type)
6812 tree name, type;
0c11ada6 6813{
cf74fb86 6814 tree fn = push_library_fn (name, type);
0c11ada6
JM
6815 TREE_THIS_VOLATILE (fn) = 1;
6816 TREE_NOTHROW (fn) = 0;
6817 return fn;
7f4edbcb 6818}
8d08fdba 6819\f
61a127b3
MM
6820/* When we call finish_struct for an anonymous union, we create
6821 default copy constructors and such. But, an anonymous union
6822 shouldn't have such things; this function undoes the damage to the
6823 anonymous union type T.
6824
6825 (The reason that we create the synthesized methods is that we don't
6826 distinguish `union { int i; }' from `typedef union { int i; } U'.
6827 The first is an anonymous union; the second is just an ordinary
6828 union type.) */
6829
6830void
6bdb8141 6831fixup_anonymous_aggr (t)
61a127b3
MM
6832 tree t;
6833{
6834 tree *q;
6835
6836 /* Wipe out memory of synthesized methods */
6837 TYPE_HAS_CONSTRUCTOR (t) = 0;
6838 TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
6839 TYPE_HAS_INIT_REF (t) = 0;
6840 TYPE_HAS_CONST_INIT_REF (t) = 0;
6841 TYPE_HAS_ASSIGN_REF (t) = 0;
61a127b3
MM
6842 TYPE_HAS_CONST_ASSIGN_REF (t) = 0;
6843
6844 /* Splice the implicitly generated functions out of the TYPE_METHODS
6845 list. */
6846 q = &TYPE_METHODS (t);
6847 while (*q)
6848 {
6849 if (DECL_ARTIFICIAL (*q))
6850 *q = TREE_CHAIN (*q);
6851 else
6852 q = &TREE_CHAIN (*q);
6853 }
6854
cab1f180 6855 /* ISO C++ 9.5.3. Anonymous unions may not have function members. */
61a127b3 6856 if (TYPE_METHODS (t))
1f0d71c5 6857 cp_error_at ("an anonymous union cannot have function members", t);
a1c2b86d
JJ
6858
6859 /* Anonymous aggregates cannot have fields with ctors, dtors or complex
6860 assignment operators (because they cannot have these methods themselves).
6861 For anonymous unions this is already checked because they are not allowed
6862 in any union, otherwise we have to check it. */
6863 if (TREE_CODE (t) != UNION_TYPE)
6864 {
6865 tree field, type;
6866
6867 for (field = TYPE_FIELDS (t); field; field = TREE_CHAIN (field))
6868 if (TREE_CODE (field) == FIELD_DECL)
6869 {
6870 type = TREE_TYPE (field);
6871 if (CLASS_TYPE_P (type))
6872 {
6873 if (TYPE_NEEDS_CONSTRUCTING (type))
6874 cp_error_at ("member %#D' with constructor not allowed in anonymous aggregate",
6875 field);
6876 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
6877 cp_error_at ("member %#D' with destructor not allowed in anonymous aggregate",
6878 field);
6879 if (TYPE_HAS_COMPLEX_ASSIGN_REF (type))
6880 cp_error_at ("member %#D' with copy assignment operator not allowed in anonymous aggregate",
6881 field);
6882 }
6883 }
6884 }
61a127b3
MM
6885}
6886
72a93143
JM
6887/* Make sure that a declaration with no declarator is well-formed, i.e.
6888 just defines a tagged type or anonymous union.
8d08fdba 6889
72a93143 6890 Returns the type defined, if any. */
8d08fdba 6891
72a93143
JM
6892tree
6893check_tag_decl (declspecs)
8d08fdba
MS
6894 tree declspecs;
6895{
72a93143 6896 int found_type = 0;
2bdb0643 6897 int saw_friend = 0;
e8186ecf 6898 int saw_typedef = 0;
2986ae00 6899 tree ob_modifier = NULL_TREE;
8d08fdba 6900 register tree link;
8d08fdba
MS
6901 register tree t = NULL_TREE;
6902
6903 for (link = declspecs; link; link = TREE_CHAIN (link))
6904 {
6905 register tree value = TREE_VALUE (link);
6906
2bdb0643 6907 if (TYPE_P (value)
bd0d5d4a 6908 || TREE_CODE (value) == TYPE_DECL
2bdb0643
JM
6909 || (TREE_CODE (value) == IDENTIFIER_NODE
6910 && IDENTIFIER_GLOBAL_VALUE (value)
bd0d5d4a 6911 && TREE_CODE (IDENTIFIER_GLOBAL_VALUE (value)) == TYPE_DECL))
8d08fdba 6912 {
72a93143 6913 ++found_type;
5566b478 6914
bd0d5d4a
JM
6915 if (found_type == 2 && TREE_CODE (value) == IDENTIFIER_NODE)
6916 {
6917 if (! in_system_header)
6918 cp_pedwarn ("redeclaration of C++ built-in type `%T'", value);
6919 return NULL_TREE;
6920 }
6921
6922 if (TYPE_P (value)
6923 && ((TREE_CODE (value) != TYPENAME_TYPE && IS_AGGR_TYPE (value))
6924 || TREE_CODE (value) == ENUMERAL_TYPE))
72a93143
JM
6925 {
6926 my_friendly_assert (TYPE_MAIN_DECL (value) != NULL_TREE, 261);
6927 t = value;
6928 }
8d08fdba 6929 }
e8186ecf
GDR
6930 else if (value == ridpointers[(int) RID_TYPEDEF])
6931 saw_typedef = 1;
83f660b7
JM
6932 else if (value == ridpointers[(int) RID_FRIEND])
6933 {
83f660b7
JM
6934 if (current_class_type == NULL_TREE
6935 || current_scope () != current_class_type)
6936 ob_modifier = value;
2bdb0643
JM
6937 else
6938 saw_friend = 1;
83f660b7 6939 }
8d08fdba 6940 else if (value == ridpointers[(int) RID_STATIC]
2986ae00
MS
6941 || value == ridpointers[(int) RID_EXTERN]
6942 || value == ridpointers[(int) RID_AUTO]
28cbf42c
MS
6943 || value == ridpointers[(int) RID_REGISTER]
6944 || value == ridpointers[(int) RID_INLINE]
6945 || value == ridpointers[(int) RID_VIRTUAL]
72a93143
JM
6946 || value == ridpointers[(int) RID_CONST]
6947 || value == ridpointers[(int) RID_VOLATILE]
28cbf42c 6948 || value == ridpointers[(int) RID_EXPLICIT])
2986ae00 6949 ob_modifier = value;
8d08fdba
MS
6950 }
6951
72a93143
JM
6952 if (found_type > 1)
6953 error ("multiple types in one declaration");
7e2067ca 6954
2bdb0643 6955 if (t == NULL_TREE && ! saw_friend)
7e2067ca 6956 pedwarn ("declaration does not declare anything");
0dd3962d
JM
6957
6958 /* Check for an anonymous union. We're careful
6959 accessing TYPE_IDENTIFIER because some built-in types, like
6960 pointer-to-member types, do not have TYPE_NAME. */
6bdb8141 6961 else if (t && IS_AGGR_TYPE_CODE (TREE_CODE (t))
0dd3962d
JM
6962 && TYPE_NAME (t)
6963 && ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
6964 {
e8186ecf
GDR
6965 /* 7/3 In a simple-declaration, the optional init-declarator-list
6966 can be omitted only when declaring a class (clause 9) or
6967 enumeration (7.2), that is, when the decl-specifier-seq contains
6968 either a class-specifier, an elaborated-type-specifier with
6969 a class-key (9.1), or an enum-specifier. In these cases and
6970 whenever a class-specifier or enum-specifier is present in the
6971 decl-specifier-seq, the identifiers in these specifiers are among
6972 the names being declared by the declaration (as class-name,
6973 enum-names, or enumerators, depending on the syntax). In such
6974 cases, and except for the declaration of an unnamed bit-field (9.6),
6975 the decl-specifier-seq shall introduce one or more names into the
6976 program, or shall redeclare a name introduced by a previous
6977 declaration. [Example:
6978 enum { }; // ill-formed
6979 typedef class { }; // ill-formed
6980 --end example] */
6981 if (saw_typedef)
6982 {
6983 error ("Missing type-name in typedef-declaration.");
6984 return NULL_TREE;
6985 }
0dd3962d 6986 /* Anonymous unions are objects, so they can have specifiers. */;
6bdb8141
JM
6987 SET_ANON_AGGR_TYPE_P (t);
6988
6989 if (TREE_CODE (t) != UNION_TYPE && pedantic && ! in_system_header)
6990 pedwarn ("ISO C++ prohibits anonymous structs");
0dd3962d
JM
6991 }
6992
83f660b7 6993 else if (ob_modifier)
8d08fdba 6994 {
83f660b7
JM
6995 if (ob_modifier == ridpointers[(int) RID_INLINE]
6996 || ob_modifier == ridpointers[(int) RID_VIRTUAL])
6997 cp_error ("`%D' can only be specified for functions", ob_modifier);
6998 else if (ob_modifier == ridpointers[(int) RID_FRIEND])
6999 cp_error ("`%D' can only be specified inside a class", ob_modifier);
7000 else if (ob_modifier == ridpointers[(int) RID_EXPLICIT])
7001 cp_error ("`%D' can only be specified for constructors",
7002 ob_modifier);
7003 else
7004 cp_error ("`%D' can only be specified for objects and functions",
7005 ob_modifier);
72a93143 7006 }
8d08fdba 7007
72a93143
JM
7008 return t;
7009}
7010
7011/* Called when a declaration is seen that contains no names to declare.
7012 If its type is a reference to a structure, union or enum inherited
7013 from a containing scope, shadow that tag name for the current scope
7014 with a forward reference.
7015 If its type defines a new named structure or union
7016 or defines an enum, it is valid but we need not do anything here.
7017 Otherwise, it is an error.
7018
7019 C++: may have to grok the declspecs to learn about static,
7020 complain for anonymous unions. */
7021
7022void
7023shadow_tag (declspecs)
7024 tree declspecs;
7025{
7026 tree t = check_tag_decl (declspecs);
7027
7028 if (t)
7029 maybe_process_partial_specialization (t);
7030
7031 /* This is where the variables in an anonymous union are
7032 declared. An anonymous union declaration looks like:
7033 union { ... } ;
7034 because there is no declarator after the union, the parser
7035 sends that declaration here. */
6bdb8141 7036 if (t && ANON_AGGR_TYPE_P (t))
72a93143 7037 {
6bdb8141 7038 fixup_anonymous_aggr (t);
72a93143
JM
7039
7040 if (TYPE_FIELDS (t))
7041 {
7042 tree decl = grokdeclarator (NULL_TREE, declspecs, NORMAL, 0,
7043 NULL_TREE);
7044 finish_anon_union (decl);
7045 }
8d08fdba
MS
7046 }
7047}
7048\f
7049/* Decode a "typename", such as "int **", returning a ..._TYPE node. */
7050
7051tree
7052groktypename (typename)
7053 tree typename;
7054{
7055 if (TREE_CODE (typename) != TREE_LIST)
7056 return typename;
7057 return grokdeclarator (TREE_VALUE (typename),
7058 TREE_PURPOSE (typename),
c11b6f21 7059 TYPENAME, 0, NULL_TREE);
8d08fdba
MS
7060}
7061
7062/* Decode a declarator in an ordinary declaration or data definition.
7063 This is called as soon as the type information and variable name
7064 have been parsed, before parsing the initializer if any.
7065 Here we create the ..._DECL node, fill in its type,
7066 and put it on the list of decls for the current context.
7067 The ..._DECL node is returned as the value.
7068
7069 Exception: for arrays where the length is not specified,
82580166 7070 the type is left null, to be filled in by `cp_finish_decl'.
8d08fdba
MS
7071
7072 Function definitions do not come here; they go to start_function
7073 instead. However, external and forward declarations of functions
7074 do go through here. Structure field declarations are done by
7075 grokfield and not through here. */
7076
8d08fdba 7077tree
a1774733 7078start_decl (declarator, declspecs, initialized, attributes, prefix_attributes)
8d08fdba
MS
7079 tree declarator, declspecs;
7080 int initialized;
a1774733 7081 tree attributes, prefix_attributes;
8d08fdba
MS
7082{
7083 register tree decl;
7084 register tree type, tem;
7085 tree context;
7086 extern int have_extern_spec;
7087 extern int used_extern_spec;
b17e2870 7088 tree attrlist;
8d08fdba 7089
5566b478
MS
7090#if 0
7091 /* See code below that used this. */
8d08fdba 7092 int init_written = initialized;
5566b478 7093#endif
8d08fdba 7094
e92cc029 7095 /* This should only be done once on the top most decl. */
8d08fdba
MS
7096 if (have_extern_spec && !used_extern_spec)
7097 {
1f8f4a0b
MM
7098 declspecs = tree_cons (NULL_TREE, get_identifier ("extern"),
7099 declspecs);
8d08fdba
MS
7100 used_extern_spec = 1;
7101 }
7102
b17e2870 7103 if (attributes || prefix_attributes)
051e6fd7 7104 attrlist = build_tree_list (attributes, prefix_attributes);
b17e2870
JM
7105 else
7106 attrlist = NULL_TREE;
7107
c11b6f21 7108 decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
b17e2870 7109 attrlist);
68642fb6 7110
a1774733 7111 if (decl == NULL_TREE || TREE_CODE (decl) == VOID_TYPE)
8d08fdba
MS
7112 return NULL_TREE;
7113
7114 type = TREE_TYPE (decl);
7115
44689c12
ML
7116 if (type == error_mark_node)
7117 return NULL_TREE;
7118
4f1c5b7d 7119 context = DECL_CONTEXT (decl);
8d08fdba 7120
9a68c51f
JM
7121 if (initialized && context && TREE_CODE (context) == NAMESPACE_DECL
7122 && context != current_namespace && TREE_CODE (decl) == VAR_DECL)
7123 {
7124 /* When parsing the initializer, lookup should use the object's
7125 namespace. */
7126 push_decl_namespace (context);
7127 }
7128
2c73f9f5
ML
7129 /* We are only interested in class contexts, later. */
7130 if (context && TREE_CODE (context) == NAMESPACE_DECL)
7131 context = NULL_TREE;
7132
8d08fdba
MS
7133 if (initialized)
7134 /* Is it valid for this decl to have an initializer at all?
7135 If not, set INITIALIZED to zero, which will indirectly
82580166 7136 tell `cp_finish_decl' to ignore the initializer once it is parsed. */
8d08fdba
MS
7137 switch (TREE_CODE (decl))
7138 {
7139 case TYPE_DECL:
7140 /* typedef foo = bar means give foo the same type as bar.
82580166 7141 We haven't parsed bar yet, so `cp_finish_decl' will fix that up.
8d08fdba
MS
7142 Any other case of an initialization in a TYPE_DECL is an error. */
7143 if (pedantic || list_length (declspecs) > 1)
7144 {
8251199e 7145 cp_error ("typedef `%D' is initialized", decl);
8d08fdba
MS
7146 initialized = 0;
7147 }
7148 break;
7149
7150 case FUNCTION_DECL:
8251199e 7151 cp_error ("function `%#D' is initialized like a variable", decl);
8d08fdba
MS
7152 initialized = 0;
7153 break;
7154
7155 default:
3e41d13b 7156 break;
8d08fdba
MS
7157 }
7158
8d08fdba
MS
7159 if (initialized)
7160 {
a9aedbc2 7161 if (! toplevel_bindings_p ()
8d08fdba 7162 && DECL_EXTERNAL (decl))
8251199e 7163 cp_warning ("declaration of `%#D' has `extern' and is initialized",
8d08fdba
MS
7164 decl);
7165 DECL_EXTERNAL (decl) = 0;
5566b478 7166 if (toplevel_bindings_p ())
8d08fdba
MS
7167 TREE_STATIC (decl) = 1;
7168
7169 /* Tell `pushdecl' this is an initialized decl
7170 even though we don't yet have the initializer expression.
82580166 7171 Also tell `cp_finish_decl' it may store the real initializer. */
8d08fdba
MS
7172 DECL_INITIAL (decl) = error_mark_node;
7173 }
7174
fa20888b
MK
7175#ifdef SET_DEFAULT_DECL_ATTRIBUTES
7176 SET_DEFAULT_DECL_ATTRIBUTES (decl, attributes);
7177#endif
68642fb6 7178
fa20888b
MK
7179 /* Set attributes here so if duplicate decl, will have proper attributes. */
7180 cplus_decl_attributes (decl, attributes, prefix_attributes);
7181
d0f062fb 7182 if (context && COMPLETE_TYPE_P (complete_type (context)))
5b605f68 7183 {
6b400b21 7184 push_nested_class (context, 2);
e97e5263 7185
5b605f68
MS
7186 if (TREE_CODE (decl) == VAR_DECL)
7187 {
7188 tree field = lookup_field (context, DECL_NAME (decl), 0, 0);
7189 if (field == NULL_TREE || TREE_CODE (field) != VAR_DECL)
8251199e 7190 cp_error ("`%#D' is not a static member of `%#T'", decl, context);
e349ee73
MS
7191 else
7192 {
7193 if (DECL_CONTEXT (field) != context)
f2d773a2 7194 {
cb9a3ff8 7195 cp_pedwarn ("ISO C++ does not permit `%T::%D' to be defined as `%T::%D'",
f2d773a2
JM
7196 DECL_CONTEXT (field), DECL_NAME (decl),
7197 context, DECL_NAME (decl));
7198 DECL_CONTEXT (decl) = DECL_CONTEXT (field);
7199 }
75650646
MM
7200 /* Static data member are tricky; an in-class initialization
7201 still doesn't provide a definition, so the in-class
7202 declaration will have DECL_EXTERNAL set, but will have an
7203 initialization. Thus, duplicate_decls won't warn
7204 about this situation, and so we check here. */
7205 if (DECL_INITIAL (decl) && DECL_INITIAL (field))
8251199e 7206 cp_error ("duplicate initialization of %D", decl);
e349ee73
MS
7207 if (duplicate_decls (decl, field))
7208 decl = field;
7209 }
5b605f68 7210 }
f30432d7
MS
7211 else
7212 {
5566b478 7213 tree field = check_classfn (context, decl);
f30432d7
MS
7214 if (field && duplicate_decls (decl, field))
7215 decl = field;
7216 }
7217
7218 /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set. */
dff3e828 7219 DECL_IN_AGGR_P (decl) = 0;
68642fb6 7220 if ((DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl))
1f6e1acc 7221 || CLASSTYPE_TEMPLATE_INSTANTIATION (context))
84e6233f
JM
7222 {
7223 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
7224 /* [temp.expl.spec] An explicit specialization of a static data
7225 member of a template is a definition if the declaration
7226 includes an initializer; otherwise, it is a declaration.
7227
7228 We check for processing_specialization so this only applies
7229 to the new specialization syntax. */
7230 if (DECL_INITIAL (decl) == NULL_TREE && processing_specialization)
7231 DECL_EXTERNAL (decl) = 1;
7232 }
f30432d7 7233
b7698cf0 7234 if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl))
8251199e 7235 cp_pedwarn ("declaration of `%#D' outside of class is not definition",
f30432d7 7236 decl);
5b605f68
MS
7237 }
7238
9188c363
MM
7239 /* Enter this declaration into the symbol table. */
7240 tem = maybe_push_decl (decl);
2ee887f2 7241
5156628f 7242 if (processing_template_decl)
cd9f6678 7243 tem = push_template_decl (tem);
5566b478 7244
2ee887f2 7245#if ! defined (ASM_OUTPUT_BSS) && ! defined (ASM_OUTPUT_ALIGNED_BSS)
a3203465 7246 /* Tell the back-end to use or not use .common as appropriate. If we say
a50f0918
MS
7247 -fconserve-space, we want this to save .data space, at the expense of
7248 wrong semantics. If we say -fno-conserve-space, we want this to
7249 produce errors about redefs; to do this we force variables into the
7250 data segment. */
a3203465 7251 DECL_COMMON (tem) = flag_conserve_space || ! TREE_PUBLIC (tem);
2ee887f2 7252#endif
68642fb6 7253
5156628f 7254 if (! processing_template_decl)
5566b478 7255 start_decl_1 (tem);
8d08fdba 7256
8d08fdba
MS
7257 return tem;
7258}
7259
5566b478
MS
7260void
7261start_decl_1 (decl)
7262 tree decl;
8d08fdba 7263{
5566b478
MS
7264 tree type = TREE_TYPE (decl);
7265 int initialized = (DECL_INITIAL (decl) != NULL_TREE);
8d08fdba 7266
44689c12
ML
7267 if (type == error_mark_node)
7268 return;
7269
bd0d5d4a 7270 maybe_push_cleanup_level (type);
5566b478
MS
7271
7272 if (initialized)
7273 /* Is it valid for this decl to have an initializer at all?
7274 If not, set INITIALIZED to zero, which will indirectly
7275 tell `cp_finish_decl' to ignore the initializer once it is parsed. */
8d08fdba 7276 {
5566b478
MS
7277 /* Don't allow initializations for incomplete types except for
7278 arrays which might be completed by the initialization. */
d0f062fb 7279 if (COMPLETE_TYPE_P (complete_type (type)))
5566b478
MS
7280 ; /* A complete type is ok. */
7281 else if (TREE_CODE (type) != ARRAY_TYPE)
8d08fdba 7282 {
8251199e 7283 cp_error ("variable `%#D' has initializer but incomplete type",
5566b478
MS
7284 decl);
7285 initialized = 0;
25eb19ff 7286 type = TREE_TYPE (decl) = error_mark_node;
5566b478 7287 }
d0f062fb 7288 else if (!COMPLETE_TYPE_P (complete_type (TREE_TYPE (type))))
5566b478
MS
7289 {
7290 if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
8251199e 7291 cp_error ("elements of array `%#D' have incomplete type", decl);
5566b478
MS
7292 /* else we already gave an error in start_decl. */
7293 initialized = 0;
8d08fdba 7294 }
8d08fdba
MS
7295 }
7296
5566b478
MS
7297 if (!initialized
7298 && TREE_CODE (decl) != TYPE_DECL
7299 && TREE_CODE (decl) != TEMPLATE_DECL
07c88314 7300 && type != error_mark_node
5362b086 7301 && IS_AGGR_TYPE (type)
07c88314 7302 && ! DECL_EXTERNAL (decl))
8d08fdba 7303 {
5156628f 7304 if ((! processing_template_decl || ! uses_template_parms (type))
d0f062fb 7305 && !COMPLETE_TYPE_P (complete_type (type)))
5566b478 7306 {
8251199e 7307 cp_error ("aggregate `%#D' has incomplete type and cannot be initialized",
5566b478
MS
7308 decl);
7309 /* Change the type so that assemble_variable will give
7310 DECL an rtl we can live with: (mem (const_int 0)). */
25eb19ff 7311 type = TREE_TYPE (decl) = error_mark_node;
5566b478
MS
7312 }
7313 else
7314 {
7315 /* If any base type in the hierarchy of TYPE needs a constructor,
7316 then we set initialized to 1. This way any nodes which are
7317 created for the purposes of initializing this aggregate
7318 will live as long as it does. This is necessary for global
7319 aggregates which do not have their initializers processed until
7320 the end of the file. */
7321 initialized = TYPE_NEEDS_CONSTRUCTING (type);
7322 }
7323 }
7324
5566b478
MS
7325 if (! initialized)
7326 DECL_INITIAL (decl) = NULL_TREE;
7327}
7328
7329/* Handle initialization of references.
38e01259 7330 These three arguments are from `cp_finish_decl', and have the
e92cc029
MS
7331 same meaning here that they do there.
7332
7333 Quotes on semantics can be found in ARM 8.4.3. */
7334
8e4ce833 7335static tree
a703fb38 7336grok_reference_init (decl, type, init)
5566b478 7337 tree decl, type, init;
5566b478
MS
7338{
7339 tree tmp;
7340
7341 if (init == NULL_TREE)
7342 {
7343 if ((DECL_LANG_SPECIFIC (decl) == 0
7344 || DECL_IN_AGGR_P (decl) == 0)
7345 && ! DECL_THIS_EXTERN (decl))
ed5511d9 7346 cp_error ("`%D' declared as reference but not initialized", decl);
8e4ce833 7347 return NULL_TREE;
5566b478
MS
7348 }
7349
7350 if (init == error_mark_node)
8e4ce833 7351 return NULL_TREE;
5566b478 7352
ed5511d9 7353 if (TREE_CODE (init) == CONSTRUCTOR)
5566b478 7354 {
cb9a3ff8 7355 cp_error ("ISO C++ forbids use of initializer list to initialize reference `%D'", decl);
8e4ce833 7356 return NULL_TREE;
8d08fdba
MS
7357 }
7358
7359 if (TREE_CODE (init) == TREE_LIST)
7360 init = build_compound_expr (init);
8d08fdba 7361
8ccc31eb
MS
7362 if (TREE_CODE (TREE_TYPE (init)) == REFERENCE_TYPE)
7363 init = convert_from_reference (init);
7364
8d08fdba
MS
7365 if (TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE
7366 && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
7367 {
a3203465 7368 /* Note: default conversion is only called in very special cases. */
8d08fdba
MS
7369 init = default_conversion (init);
7370 }
68642fb6 7371
24bef158
MM
7372 /* Convert INIT to the reference type TYPE. This may involve the
7373 creation of a temporary, whose lifetime must be the same as that
7374 of the reference. If so, a DECL_STMT for the temporary will be
7375 added just after the DECL_STMT for DECL. That's why we don't set
7376 DECL_INITIAL for local references (instead assigning to them
7377 explicitly); we need to allow the temporary to be initialized
7378 first. */
a3203465 7379 tmp = convert_to_reference
9a3b49ac 7380 (type, init, CONV_IMPLICIT,
ce7715bd
JM
7381 LOOKUP_ONLYCONVERTING|LOOKUP_SPECULATIVELY|LOOKUP_NORMAL|DIRECT_BIND,
7382 decl);
8d08fdba 7383
a3203465 7384 if (tmp == error_mark_node)
8e4ce833
JJ
7385 return NULL_TREE;
7386 else if (tmp == NULL_TREE)
8d08fdba 7387 {
8251199e 7388 cp_error ("cannot initialize `%T' from `%T'", type, TREE_TYPE (init));
8e4ce833 7389 return NULL_TREE;
8d08fdba 7390 }
8d08fdba 7391
8e4ce833
JJ
7392 if (TREE_STATIC (decl) && !TREE_CONSTANT (tmp))
7393 return tmp;
7394
7395 if (building_stmt_tree ())
8d08fdba 7396 {
8e4ce833
JJ
7397 /* Initialize the declaration. */
7398 tmp = build (INIT_EXPR, TREE_TYPE (decl), decl, tmp);
7399 finish_expr_stmt (tmp);
8d08fdba 7400 }
8e4ce833
JJ
7401 else
7402 DECL_INITIAL (decl) = tmp;
7403
7404 return NULL_TREE;
8d08fdba
MS
7405}
7406
6060a796
MS
7407/* Fill in DECL_INITIAL with some magical value to prevent expand_decl from
7408 mucking with forces it does not comprehend (i.e. initialization with a
7409 constructor). If we are at global scope and won't go into COMMON, fill
7410 it in with a dummy CONSTRUCTOR to force the variable into .data;
7411 otherwise we can use error_mark_node. */
7412
28cbf42c
MS
7413static tree
7414obscure_complex_init (decl, init)
7415 tree decl, init;
6060a796 7416{
28cbf42c
MS
7417 if (! flag_no_inline && TREE_STATIC (decl))
7418 {
7419 if (extract_init (decl, init))
7420 return NULL_TREE;
7421 }
7422
2ee887f2 7423#if ! defined (ASM_OUTPUT_BSS) && ! defined (ASM_OUTPUT_ALIGNED_BSS)
a9aedbc2 7424 if (toplevel_bindings_p () && ! DECL_COMMON (decl))
6060a796
MS
7425 DECL_INITIAL (decl) = build (CONSTRUCTOR, TREE_TYPE (decl), NULL_TREE,
7426 NULL_TREE);
7427 else
2ee887f2 7428#endif
6060a796 7429 DECL_INITIAL (decl) = error_mark_node;
28cbf42c
MS
7430
7431 return init;
6060a796
MS
7432}
7433
27778b73
MM
7434/* When parsing `int a[] = {1, 2};' we don't know the size of the
7435 array until we finish parsing the initializer. If that's the
7436 situation we're in, update DECL accordingly. */
7437
7438static void
7439maybe_deduce_size_from_array_init (decl, init)
7440 tree decl;
7441 tree init;
7442{
7443 tree type = TREE_TYPE (decl);
7444
7445 if (TREE_CODE (type) == ARRAY_TYPE
7446 && TYPE_DOMAIN (type) == NULL_TREE
7447 && TREE_CODE (decl) != TYPE_DECL)
7448 {
f2ae0c45
JM
7449 /* do_default is really a C-ism to deal with tentative definitions.
7450 But let's leave it here to ease the eventual merge. */
7451 int do_default = !DECL_EXTERNAL (decl);
27778b73
MM
7452 tree initializer = init ? init : DECL_INITIAL (decl);
7453 int failure = complete_array_type (type, initializer, do_default);
7454
7455 if (failure == 1)
7456 cp_error ("initializer fails to determine size of `%D'", decl);
7457
7458 if (failure == 2)
7459 {
7460 if (do_default)
7461 cp_error ("array size missing in `%D'", decl);
7462 /* If a `static' var's size isn't known, make it extern as
7463 well as static, so it does not get allocated. If it's not
7464 `static', then don't mark it extern; finish_incomplete_decl
7465 will give it a default size and it will get allocated. */
7466 else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
7467 DECL_EXTERNAL (decl) = 1;
7468 }
7469
7470 if (pedantic && TYPE_DOMAIN (type) != NULL_TREE
7471 && tree_int_cst_lt (TYPE_MAX_VALUE (TYPE_DOMAIN (type)),
7472 integer_zero_node))
7473 cp_error ("zero-size array `%D'", decl);
7474
7475 layout_decl (decl, 0);
7476 }
7477}
7478
7479/* Set DECL_SIZE, DECL_ALIGN, etc. for DECL (a VAR_DECL), and issue
57b52417 7480 any appropriate error messages regarding the layout. */
27778b73 7481
57b52417
MM
7482static void
7483layout_var_decl (decl)
27778b73 7484 tree decl;
27778b73 7485{
57b52417 7486 tree type = TREE_TYPE (decl);
c95cd22e 7487#if 0
57b52417 7488 tree ttype = target_type (type);
c95cd22e 7489#endif
57b52417
MM
7490
7491 /* If we haven't already layed out this declaration, do so now.
7492 Note that we must not call complete type for an external object
7493 because it's type might involve templates that we are not
68642fb6 7494 supposed to isntantiate yet. (And it's perfectly legal to say
57b52417
MM
7495 `extern X x' for some incomplete type `X'.) */
7496 if (!DECL_EXTERNAL (decl))
7497 complete_type (type);
d0f062fb 7498 if (!DECL_SIZE (decl) && COMPLETE_TYPE_P (type))
27778b73
MM
7499 layout_decl (decl, 0);
7500
c82dbd95 7501 if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
27778b73
MM
7502 {
7503 /* An automatic variable with an incomplete type: that is an error.
7504 Don't talk about array types here, since we took care of that
7505 message in grokdeclarator. */
7506 cp_error ("storage size of `%D' isn't known", decl);
7507 TREE_TYPE (decl) = error_mark_node;
7508 }
ae673f14
JM
7509#if 0
7510 /* Keep this code around in case we later want to control debug info
7511 based on whether a type is "used". (jason 1999-11-11) */
7512
27778b73
MM
7513 else if (!DECL_EXTERNAL (decl) && IS_AGGR_TYPE (ttype))
7514 /* Let debugger know it should output info for this type. */
7515 note_debug_info_needed (ttype);
7516
7517 if (TREE_STATIC (decl) && DECL_CLASS_SCOPE_P (decl))
7518 note_debug_info_needed (DECL_CONTEXT (decl));
ae673f14 7519#endif
27778b73
MM
7520
7521 if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
7522 && DECL_SIZE (decl) != NULL_TREE
7523 && ! TREE_CONSTANT (DECL_SIZE (decl)))
7524 {
7525 if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
7526 constant_expression_warning (DECL_SIZE (decl));
7527 else
7528 cp_error ("storage size of `%D' isn't constant", decl);
7529 }
8e4ce833
JJ
7530
7531 if (TREE_STATIC (decl)
7532 && !DECL_ARTIFICIAL (decl)
7533 && current_function_decl
7534 && DECL_CONTEXT (decl) == current_function_decl)
7535 push_local_name (decl);
27778b73
MM
7536}
7537
27778b73
MM
7538/* If a local static variable is declared in an inline function, or if
7539 we have a weak definition, we must endeavor to create only one
7540 instance of the variable at link-time. */
7541
7542static void
7543maybe_commonize_var (decl)
7544 tree decl;
7545{
7546 /* Static data in a function with comdat linkage also has comdat
7547 linkage. */
7548 if (TREE_STATIC (decl)
7549 /* Don't mess with __FUNCTION__. */
cf74fb86 7550 && ! DECL_ARTIFICIAL (decl)
27778b73
MM
7551 && current_function_decl
7552 && DECL_CONTEXT (decl) == current_function_decl
7553 && (DECL_THIS_INLINE (current_function_decl)
7554 || DECL_TEMPLATE_INSTANTIATION (current_function_decl))
7555 && TREE_PUBLIC (current_function_decl))
7556 {
27778b73
MM
7557 /* If flag_weak, we don't need to mess with this, as we can just
7558 make the function weak, and let it refer to its unique local
7559 copy. This works because we don't allow the function to be
7560 inlined. */
7561 if (! flag_weak)
7562 {
7563 if (DECL_INTERFACE_KNOWN (current_function_decl))
7564 {
7565 TREE_PUBLIC (decl) = 1;
7566 DECL_EXTERNAL (decl) = DECL_EXTERNAL (current_function_decl);
7567 }
7568 else if (DECL_INITIAL (decl) == NULL_TREE
7569 || DECL_INITIAL (decl) == error_mark_node)
7570 {
7571 TREE_PUBLIC (decl) = 1;
7572 DECL_COMMON (decl) = 1;
7573 }
7574 /* else we lose. We can only do this if we can use common,
7575 which we can't if it has been initialized. */
7576
92643fea 7577 if (!TREE_PUBLIC (decl))
27778b73
MM
7578 {
7579 cp_warning_at ("sorry: semantics of inline function static data `%#D' are wrong (you'll wind up with multiple copies)", decl);
7580 cp_warning_at (" you can work around this by removing the initializer", decl);
7581 }
7582 }
8e4ce833
JJ
7583 else
7584 comdat_linkage (decl);
27778b73
MM
7585 }
7586 else if (DECL_LANG_SPECIFIC (decl) && DECL_COMDAT (decl))
7587 /* Set it up again; we might have set DECL_INITIAL since the last
7588 time. */
7589 comdat_linkage (decl);
7590}
7591
91063b51
MM
7592/* Issue an error message if DECL is an uninitialized const variable. */
7593
7594static void
7595check_for_uninitialized_const_var (decl)
7596 tree decl;
7597{
7598 tree type = TREE_TYPE (decl);
7599
7600 /* ``Unless explicitly declared extern, a const object does not have
7601 external linkage and must be initialized. ($8.4; $12.1)'' ARM
7602 7.1.6 */
7603 if (TREE_CODE (decl) == VAR_DECL
7604 && TREE_CODE (type) != REFERENCE_TYPE
7605 && CP_TYPE_CONST_P (type)
7606 && !TYPE_NEEDS_CONSTRUCTING (type)
7607 && !DECL_INITIAL (decl))
7608 cp_error ("uninitialized const `%D'", decl);
7609}
7610
c82dbd95
MM
7611/* Verify INIT (the initializer for DECL), and record the
7612 initialization in DECL_INITIAL, if appropriate. Returns a new
7613 value for INIT. */
27778b73 7614
c82dbd95
MM
7615static tree
7616check_initializer (decl, init)
27778b73 7617 tree decl;
c82dbd95 7618 tree init;
27778b73 7619{
27778b73
MM
7620 tree type;
7621
7622 if (TREE_CODE (decl) == FIELD_DECL)
c82dbd95 7623 return init;
27778b73 7624
fc0e7bf5
MM
7625 type = TREE_TYPE (decl);
7626
27778b73
MM
7627 /* If `start_decl' didn't like having an initialization, ignore it now. */
7628 if (init != NULL_TREE && DECL_INITIAL (decl) == NULL_TREE)
7629 init = NULL_TREE;
27778b73 7630
c82dbd95 7631 /* Check the initializer. */
27778b73
MM
7632 if (init)
7633 {
c82dbd95
MM
7634 /* Things that are going to be initialized need to have complete
7635 type. */
7636 TREE_TYPE (decl) = type = complete_type (TREE_TYPE (decl));
7637
7638 if (type == error_mark_node)
7639 /* We will have already complained. */
7640 init = NULL_TREE;
d0f062fb 7641 else if (COMPLETE_TYPE_P (type) && !TREE_CONSTANT (TYPE_SIZE (type)))
27778b73
MM
7642 {
7643 cp_error ("variable-sized object `%D' may not be initialized", decl);
7644 init = NULL_TREE;
7645 }
c82dbd95 7646 else if (TREE_CODE (type) == ARRAY_TYPE
d0f062fb 7647 && !COMPLETE_TYPE_P (TREE_TYPE (type)))
27778b73
MM
7648 {
7649 cp_error ("elements of array `%#D' have incomplete type", decl);
7650 init = NULL_TREE;
7651 }
d0f062fb 7652 else if (!COMPLETE_TYPE_P (type))
c82dbd95
MM
7653 {
7654 cp_error ("`%D' has incomplete type", decl);
7655 TREE_TYPE (decl) = error_mark_node;
7656 init = NULL_TREE;
7657 }
27778b73
MM
7658 }
7659
7660 if (TREE_CODE (decl) == CONST_DECL)
7661 {
7662 my_friendly_assert (TREE_CODE (decl) != REFERENCE_TYPE, 148);
7663
7664 DECL_INITIAL (decl) = init;
7665
27778b73
MM
7666 my_friendly_assert (init != NULL_TREE, 149);
7667 init = NULL_TREE;
7668 }
c82dbd95
MM
7669 else if (!DECL_EXTERNAL (decl) && TREE_CODE (type) == REFERENCE_TYPE)
7670 {
8e4ce833
JJ
7671 init = grok_reference_init (decl, type, init);
7672 if (init)
7673 init = obscure_complex_init (decl, init);
c82dbd95 7674 }
27778b73
MM
7675 else if (init)
7676 {
7677 if (TYPE_HAS_CONSTRUCTOR (type) || TYPE_NEEDS_CONSTRUCTING (type))
7678 {
7679 if (TREE_CODE (type) == ARRAY_TYPE)
7680 init = digest_init (type, init, (tree *) 0);
7681 else if (TREE_CODE (init) == CONSTRUCTOR
7682 && TREE_HAS_CONSTRUCTOR (init))
7683 {
7684 if (TYPE_NON_AGGREGATE_CLASS (type))
7685 {
7686 cp_error ("`%D' must be initialized by constructor, not by `{...}'",
7687 decl);
7688 init = error_mark_node;
7689 }
7690 else
7691 goto dont_use_constructor;
7692 }
7693 }
7694 else
7695 {
7696 dont_use_constructor:
7697 if (TREE_CODE (init) != TREE_VEC)
7698 init = store_init_value (decl, init);
7699 }
7700
7701 if (init)
7702 /* We must hide the initializer so that expand_decl
7703 won't try to do something it does not understand. */
7704 init = obscure_complex_init (decl, init);
7705 }
7706 else if (DECL_EXTERNAL (decl))
7707 ;
2f939d94 7708 else if (TYPE_P (type)
27778b73
MM
7709 && (IS_AGGR_TYPE (type) || TYPE_NEEDS_CONSTRUCTING (type)))
7710 {
7711 tree core_type = strip_array_types (type);
7712
7713 if (! TYPE_NEEDS_CONSTRUCTING (core_type))
7714 {
7715 if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type))
7716 cp_error ("structure `%D' with uninitialized const members", decl);
7717 if (CLASSTYPE_REF_FIELDS_NEED_INIT (core_type))
7718 cp_error ("structure `%D' with uninitialized reference members",
7719 decl);
7720 }
7721
7722 check_for_uninitialized_const_var (decl);
7723
d0f062fb 7724 if (COMPLETE_TYPE_P (type) && TYPE_NEEDS_CONSTRUCTING (type))
27778b73
MM
7725 init = obscure_complex_init (decl, NULL_TREE);
7726
7727 }
7728 else
7729 check_for_uninitialized_const_var (decl);
68642fb6 7730
c82dbd95 7731 return init;
27778b73
MM
7732}
7733
7734/* If DECL is not a local variable, give it RTL. */
7735
7736static void
7737make_rtl_for_nonlocal_decl (decl, init, asmspec)
7738 tree decl;
7739 tree init;
7740 const char *asmspec;
7741{
95ee998c
MM
7742 int toplev = toplevel_bindings_p ();
7743 int defer_p;
27778b73 7744
f39ee884
MM
7745 /* Handle non-variables up front. */
7746 if (TREE_CODE (decl) != VAR_DECL)
7747 {
7748 rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
7749 return;
7750 }
7751
95ee998c
MM
7752 /* If we see a class member here, it should be a static data
7753 member. */
7754 if (DECL_LANG_SPECIFIC (decl) && DECL_IN_AGGR_P (decl))
7755 {
7756 my_friendly_assert (TREE_STATIC (decl), 19990828);
7757 /* An in-class declaration of a static data member should be
7758 external; it is only a declaration, and not a definition. */
7759 if (init == NULL_TREE)
7760 my_friendly_assert (DECL_EXTERNAL (decl), 20000723);
7761 }
7762
f39ee884
MM
7763 /* Set the DECL_ASSEMBLER_NAME for the variable. */
7764 if (asmspec)
92643fea 7765 SET_DECL_ASSEMBLER_NAME (decl, get_identifier (asmspec));
f39ee884 7766
95ee998c
MM
7767 /* We don't create any RTL for local variables. */
7768 if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
7769 return;
27778b73 7770
95ee998c
MM
7771 /* We defer emission of local statics until the corresponding
7772 DECL_STMT is expanded. */
7773 defer_p = DECL_FUNCTION_SCOPE_P (decl) || DECL_VIRTUAL_P (decl);
7774
7775 /* We try to defer namespace-scope static constants so that they are
7776 not emitted into the object file unncessarily. */
7777 if (!DECL_VIRTUAL_P (decl)
7778 && TREE_READONLY (decl)
7779 && DECL_INITIAL (decl) != NULL_TREE
7780 && DECL_INITIAL (decl) != error_mark_node
7781 && ! EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl))
7782 && toplev
7783 && !TREE_PUBLIC (decl))
7784 {
7785 /* Fool with the linkage according to #pragma interface. */
7786 if (!interface_unknown)
27778b73 7787 {
95ee998c
MM
7788 TREE_PUBLIC (decl) = 1;
7789 DECL_EXTERNAL (decl) = interface_only;
27778b73 7790 }
27778b73 7791
95ee998c 7792 defer_p = 1;
27778b73 7793 }
95ee998c 7794
92643fea
MM
7795 /* If we're deferring the variable, we only need to make RTL if
7796 there's an ASMSPEC. Otherwise, we'll lazily create it later when
7797 we need it. (There's no way to lazily create RTL for things that
7798 have assembly specs because the information about the specifier
7799 isn't stored in the tree, yet) */
7800 if (defer_p && asmspec)
6c418184 7801 make_decl_rtl (decl, asmspec);
95ee998c 7802 /* If we're not deferring, go ahead and assemble the variable. */
92643fea 7803 else if (!defer_p)
27778b73 7804 rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
27778b73
MM
7805}
7806
7807/* The old ARM scoping rules injected variables declared in the
7808 initialization statement of a for-statement into the surrounding
7809 scope. We support this usage, in order to be backward-compatible.
7810 DECL is a just-declared VAR_DECL; if necessary inject its
7811 declaration into the surrounding scope. */
7812
b7b8bcd2 7813void
27778b73
MM
7814maybe_inject_for_scope_var (decl)
7815 tree decl;
7816{
c3783399
NS
7817 if (!DECL_NAME (decl))
7818 return;
5362b086 7819
27778b73
MM
7820 if (current_binding_level->is_for_scope)
7821 {
68642fb6 7822 struct binding_level *outer
27778b73
MM
7823 = current_binding_level->level_chain;
7824
7825 /* Check to see if the same name is already bound at the outer
7826 level, either because it was directly declared, or because a
7827 dead for-decl got preserved. In either case, the code would
7828 not have been valid under the ARM scope rules, so clear
7829 is_for_scope for the current_binding_level.
7830
7831 Otherwise, we need to preserve the temp slot for decl to last
7832 into the outer binding level. */
7833
68642fb6 7834 tree outer_binding
27778b73 7835 = TREE_CHAIN (IDENTIFIER_BINDING (DECL_NAME (decl)));
68642fb6 7836
27778b73 7837 if (outer_binding && BINDING_LEVEL (outer_binding) == outer
68642fb6 7838 && (TREE_CODE (BINDING_VALUE (outer_binding))
27778b73
MM
7839 == VAR_DECL)
7840 && DECL_DEAD_FOR_LOCAL (BINDING_VALUE (outer_binding)))
7841 {
7842 BINDING_VALUE (outer_binding)
7843 = DECL_SHADOWED_FOR_VAR (BINDING_VALUE (outer_binding));
7844 current_binding_level->is_for_scope = 0;
7845 }
7846 else if (DECL_IN_MEMORY_P (decl))
7847 preserve_temp_slots (DECL_RTL (decl));
7848 }
7849}
7850
ed5511d9 7851/* Generate code to initialize DECL (a local variable). */
27778b73 7852
b7b8bcd2
MM
7853void
7854initialize_local_var (decl, init, flags)
27778b73
MM
7855 tree decl;
7856 tree init;
27778b73
MM
7857 int flags;
7858{
9ed9e79a 7859 tree type = TREE_TYPE (decl);
27778b73 7860
9ed9e79a
MM
7861 /* If the type is bogus, don't bother initializing the variable. */
7862 if (type == error_mark_node)
7863 return;
b7b8bcd2 7864
b7b8bcd2
MM
7865 if (DECL_SIZE (decl) == NULL_TREE && !TREE_STATIC (decl))
7866 {
7867 /* If we used it already as memory, it must stay in memory. */
7868 DECL_INITIAL (decl) = NULL_TREE;
7869 TREE_ADDRESSABLE (decl) = TREE_USED (decl);
7870 }
7871
9ed9e79a
MM
7872 /* Local statics are handled differently from ordinary automatic
7873 variables. */
7874 if (TREE_STATIC (decl))
7875 {
7876 if (TYPE_NEEDS_CONSTRUCTING (type) || init != NULL_TREE
834c6dff 7877 || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
9ed9e79a
MM
7878 expand_static_init (decl, init);
7879 return;
7880 }
7881
27778b73
MM
7882 if (DECL_SIZE (decl) && type != error_mark_node)
7883 {
7884 int already_used;
68642fb6 7885
27778b73 7886 /* Compute and store the initial value. */
27778b73
MM
7887 already_used = TREE_USED (decl) || TREE_USED (type);
7888
7889 if (init || TYPE_NEEDS_CONSTRUCTING (type))
7890 {
24bef158
MM
7891 int saved_stmts_are_full_exprs_p;
7892
3a0d3e1e 7893 my_friendly_assert (building_stmt_tree (), 20000906);
f2c5f623 7894 saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
ae499cce 7895 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
3a0d3e1e 7896 finish_expr_stmt (build_aggr_init (decl, init, flags));
5362b086 7897 current_stmt_tree ()->stmts_are_full_exprs_p =
ae499cce 7898 saved_stmts_are_full_exprs_p;
27778b73
MM
7899 }
7900
7901 /* Set this to 0 so we can tell whether an aggregate which was
7902 initialized was ever used. Don't do this if it has a
7903 destructor, so we don't complain about the 'resource
b7b8bcd2
MM
7904 allocation is initialization' idiom. Now set
7905 attribute((unused)) on types so decls of that type will be
7906 marked used. (see TREE_USED, above.) */
27778b73
MM
7907 if (TYPE_NEEDS_CONSTRUCTING (type)
7908 && ! already_used
834c6dff 7909 && TYPE_HAS_TRIVIAL_DESTRUCTOR (type)
27778b73
MM
7910 && DECL_NAME (decl))
7911 TREE_USED (decl) = 0;
b7b8bcd2 7912 else if (already_used)
27778b73
MM
7913 TREE_USED (decl) = 1;
7914 }
24bef158 7915}
27778b73 7916
24bef158
MM
7917/* Generate code to destroy DECL (a local variable). */
7918
68642fb6 7919static void
24bef158
MM
7920destroy_local_var (decl)
7921 tree decl;
7922{
9d85d30c
MM
7923 tree type = TREE_TYPE (decl);
7924 tree cleanup;
7925
7926 /* Only variables get cleaned up. */
7927 if (TREE_CODE (decl) != VAR_DECL)
7928 return;
68642fb6 7929
9d85d30c 7930 /* And only things with destructors need cleaning up. */
655dc6ee
JM
7931 if (type == error_mark_node
7932 || TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
9d85d30c
MM
7933 return;
7934
7935 if (TREE_CODE (decl) == VAR_DECL &&
7936 (DECL_EXTERNAL (decl) || TREE_STATIC (decl)))
7937 /* We don't clean up things that aren't defined in this
7938 translation unit, or that need a static cleanup. The latter
7939 are handled by finish_file. */
7940 return;
68642fb6 7941
9d85d30c
MM
7942 /* Compute the cleanup. */
7943 cleanup = maybe_build_cleanup (decl);
27778b73 7944
b7b8bcd2 7945 /* Record the cleanup required for this declaration. */
24bef158
MM
7946 if (DECL_SIZE (decl) && TREE_TYPE (decl) != error_mark_node
7947 && cleanup)
7948 finish_decl_cleanup (decl, cleanup);
7949}
7950
8d08fdba
MS
7951/* Finish processing of a declaration;
7952 install its line number and initial value.
7953 If the length of an array type is not known before,
7954 it must be determined now, from the initial value, or it is an error.
7955
8b27e9ef 7956 INIT holds the value of an initializer that should be allowed to escape
8d08fdba
MS
7957 the normal rules.
7958
920f9474 7959 FLAGS is LOOKUP_ONLYCONVERTING if the = init syntax was used, else 0
f78c7bc6 7960 if the (init) syntax was used. */
8d08fdba
MS
7961
7962void
cd9f6678 7963cp_finish_decl (decl, init, asmspec_tree, flags)
8d08fdba
MS
7964 tree decl, init;
7965 tree asmspec_tree;
6060a796 7966 int flags;
8d08fdba
MS
7967{
7968 register tree type;
27778b73 7969 tree ttype = NULL_TREE;
9c0758dd 7970 const char *asmspec = NULL;
8d08fdba
MS
7971 int was_readonly = 0;
7972
8d08fdba
MS
7973 if (! decl)
7974 {
7975 if (init)
8251199e 7976 error ("assignment (not initialization) in declaration");
8d08fdba
MS
7977 return;
7978 }
7979
a4443a08 7980 /* If a name was specified, get the string. */
8d08fdba 7981 if (asmspec_tree)
8d08fdba 7982 asmspec = TREE_STRING_POINTER (asmspec_tree);
8d08fdba 7983
2c73f9f5
ML
7984 if (init && TREE_CODE (init) == NAMESPACE_DECL)
7985 {
920f9474 7986 cp_error ("cannot initialize `%D' to namespace `%D'",
2c73f9f5
ML
7987 decl, init);
7988 init = NULL_TREE;
7989 }
7990
6ba89f8e 7991 if (current_class_type
4f1c5b7d 7992 && CP_DECL_CONTEXT (decl) == current_class_type
6ba89f8e
MM
7993 && TYPE_BEING_DEFINED (current_class_type)
7994 && (DECL_INITIAL (decl) || init))
3febd123 7995 DECL_INITIALIZED_IN_CLASS_P (decl) = 1;
6ba89f8e 7996
68642fb6 7997 if (TREE_CODE (decl) == VAR_DECL
9a68c51f
JM
7998 && DECL_CONTEXT (decl)
7999 && TREE_CODE (DECL_CONTEXT (decl)) == NAMESPACE_DECL
8000 && DECL_CONTEXT (decl) != current_namespace
8001 && init)
8002 {
8003 /* Leave the namespace of the object. */
8004 pop_decl_namespace ();
8005 }
8006
c82dbd95 8007 type = TREE_TYPE (decl);
8d08fdba 8008
f376e137 8009 if (type == error_mark_node)
cd9f6678 8010 return;
5362b086 8011
24bef158 8012 /* Add this declaration to the statement-tree. */
5362b086 8013 if (building_stmt_tree ()
44835fdd
MM
8014 && at_function_scope_p ()
8015 && TREE_CODE (decl) != RESULT_DECL)
24bef158
MM
8016 add_decl_stmt (decl);
8017
a7a7710d
NS
8018 if (TYPE_HAS_MUTABLE_P (type))
8019 TREE_READONLY (decl) = 0;
24bef158 8020
5156628f 8021 if (processing_template_decl)
5566b478
MS
8022 {
8023 if (init && DECL_INITIAL (decl))
2a1e9fdd 8024 DECL_INITIAL (decl) = init;
5566b478
MS
8025 goto finish_end0;
8026 }
3e41d13b 8027
27778b73
MM
8028 /* Parameters are handled by store_parm_decls, not cp_finish_decl. */
8029 my_friendly_assert (TREE_CODE (decl) != PARM_DECL, 19990828);
8030
8d08fdba
MS
8031 /* Take care of TYPE_DECLs up front. */
8032 if (TREE_CODE (decl) == TYPE_DECL)
8033 {
8034 if (init && DECL_INITIAL (decl))
8035 {
8036 /* typedef foo = bar; store the type of bar as the type of foo. */
8037 TREE_TYPE (decl) = type = TREE_TYPE (init);
8038 DECL_INITIAL (decl) = init = NULL_TREE;
8039 }
a0a33927
MS
8040 if (type != error_mark_node
8041 && IS_AGGR_TYPE (type) && DECL_NAME (decl))
8d08fdba
MS
8042 {
8043 if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
8251199e 8044 cp_warning ("shadowing previous type declaration of `%#D'", decl);
8d08fdba
MS
8045 set_identifier_type_value (DECL_NAME (decl), type);
8046 CLASSTYPE_GOT_SEMICOLON (type) = 1;
8047 }
8048 GNU_xref_decl (current_function_decl, decl);
cffa8729
MS
8049
8050 /* If we have installed this as the canonical typedef for this
8051 type, and that type has not been defined yet, delay emitting
956d6950 8052 the debug information for it, as we will emit it later. */
d2e5ee5c 8053 if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
d0f062fb 8054 && !COMPLETE_TYPE_P (TREE_TYPE (decl)))
cffa8729
MS
8055 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
8056
8d08fdba 8057 rest_of_decl_compilation (decl, NULL_PTR,
5566b478 8058 DECL_CONTEXT (decl) == NULL_TREE, at_eof);
8d08fdba
MS
8059 goto finish_end;
8060 }
3e41d13b 8061
8d08fdba 8062 if (TREE_CODE (decl) != FUNCTION_DECL)
3e41d13b 8063 ttype = target_type (type);
8d08fdba
MS
8064
8065 if (! DECL_EXTERNAL (decl) && TREE_READONLY (decl)
8066 && TYPE_NEEDS_CONSTRUCTING (type))
8067 {
8d08fdba
MS
8068 /* Currently, GNU C++ puts constants in text space, making them
8069 impossible to initialize. In the future, one would hope for
8070 an operating system which understood the difference between
8071 initialization and the running of a program. */
8072 was_readonly = 1;
8073 TREE_READONLY (decl) = 0;
8074 }
8075
27778b73 8076 if (TREE_CODE (decl) == FIELD_DECL && asmspec)
8d08fdba 8077 {
27778b73
MM
8078 /* This must override the asm specifier which was placed by
8079 grokclassfn. Lay this out fresh. */
19e7881c 8080 SET_DECL_RTL (TREE_TYPE (decl), NULL_RTX);
92643fea 8081 SET_DECL_ASSEMBLER_NAME (decl, get_identifier (asmspec));
6c418184 8082 make_decl_rtl (decl, asmspec);
8d08fdba
MS
8083 }
8084
c82dbd95
MM
8085 /* Deduce size of array from initialization, if not already known. */
8086 maybe_deduce_size_from_array_init (decl, init);
8087 init = check_initializer (decl, init);
3e41d13b 8088
8d08fdba
MS
8089 GNU_xref_decl (current_function_decl, decl);
8090
8d08fdba 8091 if (TREE_CODE (decl) == VAR_DECL)
57b52417 8092 layout_var_decl (decl);
8d08fdba
MS
8093
8094 /* Output the assembler code and/or RTL code for variables and functions,
8095 unless the type is an undefined structure or union.
8096 If not, it will get done when the type is completed. */
8d08fdba
MS
8097 if (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == FUNCTION_DECL
8098 || TREE_CODE (decl) == RESULT_DECL)
8099 {
27778b73
MM
8100 if (TREE_CODE (decl) == VAR_DECL)
8101 maybe_commonize_var (decl);
8d08fdba 8102
27778b73 8103 make_rtl_for_nonlocal_decl (decl, init, asmspec);
8d08fdba 8104
68642fb6 8105 if (TREE_CODE (type) == FUNCTION_TYPE
27778b73 8106 || TREE_CODE (type) == METHOD_TYPE)
68642fb6 8107 abstract_virtuals_error (decl,
27778b73 8108 strip_array_types (TREE_TYPE (type)));
68642fb6 8109 else
27778b73 8110 abstract_virtuals_error (decl, strip_array_types (type));
8d08fdba 8111
8d08fdba 8112 if (TREE_CODE (decl) == FUNCTION_DECL)
faae18ab 8113 ;
67d743fe
MS
8114 else if (DECL_EXTERNAL (decl)
8115 && ! (DECL_LANG_SPECIFIC (decl)
8116 && DECL_NOT_REALLY_EXTERN (decl)))
5566b478
MS
8117 {
8118 if (init)
8119 DECL_INITIAL (decl) = init;
8120 }
b35d4555 8121 else if (TREE_CODE (CP_DECL_CONTEXT (decl)) == FUNCTION_DECL)
8d08fdba 8122 {
b7b8bcd2 8123 /* This is a local declaration. */
b35d4555
MM
8124 if (doing_semantic_analysis_p ())
8125 maybe_inject_for_scope_var (decl);
b7b8bcd2
MM
8126 /* Initialize the local variable. But, if we're building a
8127 statement-tree, we'll do the initialization when we
8128 expand the tree. */
24bef158
MM
8129 if (processing_template_decl)
8130 {
8131 if (init || DECL_INITIAL (decl) == error_mark_node)
8132 DECL_INITIAL (decl) = init;
8133 }
8134 else
8135 {
b35d4555
MM
8136 /* If we're not building RTL, then we need to do so
8137 now. */
44835fdd 8138 my_friendly_assert (building_stmt_tree (), 20000906);
b35d4555 8139 /* Initialize the variable. */
24bef158
MM
8140 initialize_local_var (decl, init, flags);
8141 /* Clean up the variable. */
8142 destroy_local_var (decl);
8143 }
8d08fdba 8144 }
9ed9e79a
MM
8145 else if (TREE_STATIC (decl) && type != error_mark_node)
8146 {
8147 /* Cleanups for static variables are handled by `finish_file'. */
8148 if (TYPE_NEEDS_CONSTRUCTING (type) || init != NULL_TREE
834c6dff 8149 || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
9ed9e79a
MM
8150 expand_static_init (decl, init);
8151 }
8d08fdba
MS
8152 finish_end0:
8153
8154 /* Undo call to `pushclass' that was done in `start_decl'
8155 due to initialization of qualified member variable.
8156 I.e., Foo::x = 10; */
8157 {
4f1c5b7d 8158 tree context = CP_DECL_CONTEXT (decl);
8d08fdba 8159 if (context
2f939d94 8160 && TYPE_P (context)
8d08fdba
MS
8161 && (TREE_CODE (decl) == VAR_DECL
8162 /* We also have a pushclass done that we need to undo here
8163 if we're at top level and declare a method. */
5566b478
MS
8164 || TREE_CODE (decl) == FUNCTION_DECL)
8165 /* If size hasn't been set, we're still defining it,
8166 and therefore inside the class body; don't pop
8167 the binding level.. */
d0f062fb 8168 && COMPLETE_TYPE_P (context)
5566b478 8169 && context == current_class_type)
6b400b21 8170 pop_nested_class ();
8d08fdba
MS
8171 }
8172 }
8173
8174 finish_end:
8175
8d08fdba
MS
8176 if (was_readonly)
8177 TREE_READONLY (decl) = 1;
8d08fdba
MS
8178}
8179
82580166 8180/* This is here for a midend callback from c-common.c */
e92cc029 8181
82580166
MS
8182void
8183finish_decl (decl, init, asmspec_tree)
8184 tree decl, init;
8185 tree asmspec_tree;
8186{
cd9f6678 8187 cp_finish_decl (decl, init, asmspec_tree, 0);
82580166
MS
8188}
8189
db4283a0
MM
8190/* Returns a declaration for a VAR_DECL as if:
8191
8192 extern "C" TYPE NAME;
8193
8194 had been seen. Used to create compiler-generated global
8195 variables. */
8196
8197tree
8198declare_global_var (name, type)
8199 tree name;
8200 tree type;
8201{
8202 tree decl;
8203
8204 push_to_top_level ();
8205 decl = build_decl (VAR_DECL, name, type);
8206 TREE_PUBLIC (decl) = 1;
8207 DECL_EXTERNAL (decl) = 1;
8208 DECL_ARTIFICIAL (decl) = 1;
8209 pushdecl (decl);
8210 cp_finish_decl (decl, NULL_TREE, NULL_TREE, 0);
8211 pop_from_top_level ();
8212
8213 return decl;
8214}
8215
8216/* Returns a pointer to the `atexit' function. Note that if
8217 FLAG_USE_CXA_ATEXIT is non-zero, then this will actually be the new
8218 `__cxa_atexit' function specified in the IA64 C++ ABI. */
8219
8220static tree
8221get_atexit_node ()
8222{
8223 tree atexit_fndecl;
8224 tree arg_types;
8225 tree fn_type;
8226 tree fn_ptr_type;
8227 const char *name;
8228
8229 if (atexit_node)
8230 return atexit_node;
8231
8232 if (flag_use_cxa_atexit)
8233 {
8234 /* The declaration for `__cxa_atexit' is:
8235
8236 int __cxa_atexit (void (*)(void *), void *, void *)
8237
8238 We build up the argument types and then then function type
8239 itself. */
68642fb6 8240
db4283a0
MM
8241 /* First, build the pointer-to-function type for the first
8242 argument. */
8243 arg_types = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
8244 fn_type = build_function_type (void_type_node, arg_types);
8245 fn_ptr_type = build_pointer_type (fn_type);
8246 /* Then, build the rest of the argument types. */
8247 arg_types = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
8248 arg_types = tree_cons (NULL_TREE, ptr_type_node, arg_types);
8249 arg_types = tree_cons (NULL_TREE, fn_ptr_type, arg_types);
8250 /* And the final __cxa_atexit type. */
8251 fn_type = build_function_type (integer_type_node, arg_types);
8252 fn_ptr_type = build_pointer_type (fn_type);
8253 name = "__cxa_atexit";
8254 }
8255 else
8256 {
8257 /* The declaration for `atexit' is:
68642fb6 8258
db4283a0
MM
8259 int atexit (void (*)());
8260
8261 We build up the argument types and then then function type
8262 itself. */
8263 fn_type = build_function_type (void_type_node, void_list_node);
8264 fn_ptr_type = build_pointer_type (fn_type);
8265 arg_types = tree_cons (NULL_TREE, fn_ptr_type, void_list_node);
8266 /* Build the final atexit type. */
8267 fn_type = build_function_type (integer_type_node, arg_types);
8268 name = "atexit";
8269 }
8270
8271 /* Now, build the function declaration. */
8272 push_lang_context (lang_name_c);
0c11ada6 8273 atexit_fndecl = build_library_fn_ptr (name, fn_type);
db4283a0
MM
8274 mark_used (atexit_fndecl);
8275 pop_lang_context ();
8276 atexit_node = default_conversion (atexit_fndecl);
8277
8278 return atexit_node;
8279}
8280
8281/* Returns the __dso_handle VAR_DECL. */
8282
8283static tree
8284get_dso_handle_node ()
8285{
8286 if (dso_handle_node)
8287 return dso_handle_node;
8288
8289 /* Declare the variable. */
8290 dso_handle_node = declare_global_var (get_identifier ("__dso_handle"),
8291 ptr_type_node);
8292
8293 return dso_handle_node;
8294}
8295
8296/* Begin a new function with internal linkage whose job will be simply
8297 to destroy some particular variable. */
8298
8299static tree
8300start_cleanup_fn ()
8301{
8302 static int counter = 0;
8303 int old_interface_unknown = interface_unknown;
8304 char name[32];
8305 tree parmtypes;
8306 tree fntype;
8307 tree fndecl;
8308
8309 push_to_top_level ();
8310
8311 /* No need to mangle this. */
8312 push_lang_context (lang_name_c);
8313
8314 interface_unknown = 1;
8315
8316 /* Build the parameter-types. */
8317 parmtypes = void_list_node;
8318 /* Functions passed to __cxa_atexit take an additional parameter.
8319 We'll just ignore it. After we implement the new calling
8320 convention for destructors, we can eliminate the use of
8321 additional cleanup functions entirely in the -fnew-abi case. */
8322 if (flag_use_cxa_atexit)
8323 parmtypes = tree_cons (NULL_TREE, ptr_type_node, parmtypes);
8324 /* Build the function type itself. */
8325 fntype = build_function_type (void_type_node, parmtypes);
8326 /* Build the name of the function. */
8327 sprintf (name, "__tcf_%d", counter++);
8328 /* Build the function declaration. */
8329 fndecl = build_lang_decl (FUNCTION_DECL, get_identifier (name), fntype);
8330 /* It's a function with internal linkage, generated by the
8331 compiler. */
8332 TREE_PUBLIC (fndecl) = 0;
8333 DECL_ARTIFICIAL (fndecl) = 1;
5a728aca
MM
8334 /* Make the function `inline' so that it is only emitted if it is
8335 actually needed. It is unlikely that it will be inlined, since
8336 it is only called via a function pointer, but we avoid unncessary
8337 emissions this way. */
8338 DECL_INLINE (fndecl) = 1;
db4283a0
MM
8339 /* Build the parameter. */
8340 if (flag_use_cxa_atexit)
8341 {
8342 tree parmdecl;
8343
8344 parmdecl = build_decl (PARM_DECL, NULL_TREE, ptr_type_node);
8345 DECL_CONTEXT (parmdecl) = fndecl;
8346 DECL_ARG_TYPE (parmdecl) = ptr_type_node;
8347 TREE_USED (parmdecl) = 1;
8348 DECL_ARGUMENTS (fndecl) = parmdecl;
8349 }
8350
09ed39ad 8351 pushdecl (fndecl);
db4283a0
MM
8352 start_function (/*specs=*/NULL_TREE, fndecl, NULL_TREE, SF_PRE_PARSED);
8353 do_pushlevel ();
8354
8355 interface_unknown = old_interface_unknown;
8356
8357 pop_lang_context ();
8358
8359 return current_function_decl;
8360}
8361
8362/* Finish the cleanup function begun by start_cleanup_fn. */
8363
8364static void
8365end_cleanup_fn ()
8366{
8367 do_poplevel ();
8368
0acf7199 8369 expand_body (finish_function (0));
db4283a0
MM
8370
8371 pop_from_top_level ();
8372}
8373
bf419747
MM
8374/* Generate code to handle the destruction of DECL, an object with
8375 static storage duration. */
f0105ed3 8376
bf419747
MM
8377void
8378register_dtor_fn (decl)
f0105ed3
MM
8379 tree decl;
8380{
db4283a0 8381 tree cleanup;
f0105ed3 8382 tree compound_stmt;
db4283a0
MM
8383 tree args;
8384 tree fcall;
f0105ed3 8385
db4283a0 8386 int saved_flag_access_control;
f0105ed3 8387
834c6dff 8388 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
bf419747
MM
8389 return;
8390
f0105ed3
MM
8391 /* Call build_cleanup before we enter the anonymous function so that
8392 any access checks will be done relative to the current scope,
8393 rather than the scope of the anonymous function. */
8394 build_cleanup (decl);
8395
8396 /* Now start the function. */
db4283a0 8397 cleanup = start_cleanup_fn ();
f0105ed3
MM
8398
8399 /* Now, recompute the cleanup. It may contain SAVE_EXPRs that refer
8400 to the original function, rather than the anonymous one. That
8401 will make the back-end think that nested functions are in use,
8402 which causes confusion. */
8403 saved_flag_access_control = flag_access_control;
8404 flag_access_control = 0;
8405 fcall = build_cleanup (decl);
8406 flag_access_control = saved_flag_access_control;
8407
8408 /* Create the body of the anonymous function. */
8409 compound_stmt = begin_compound_stmt (/*has_no_scope=*/0);
8410 finish_expr_stmt (fcall);
8411 finish_compound_stmt (/*has_no_scope=*/0, compound_stmt);
db4283a0 8412 end_cleanup_fn ();
f0105ed3
MM
8413
8414 /* Call atexit with the cleanup function. */
8415 mark_addressable (cleanup);
8416 cleanup = build_unary_op (ADDR_EXPR, cleanup, 0);
db4283a0
MM
8417 if (flag_use_cxa_atexit)
8418 {
8419 args = tree_cons (NULL_TREE, get_dso_handle_node (), NULL_TREE);
8420 args = tree_cons (NULL_TREE, null_pointer_node, args);
8421 args = tree_cons (NULL_TREE, cleanup, args);
8422 }
8423 else
8424 args = tree_cons (NULL_TREE, cleanup, NULL_TREE);
8425 finish_expr_stmt (build_function_call (get_atexit_node (), args));
f0105ed3
MM
8426}
8427
8d08fdba
MS
8428void
8429expand_static_init (decl, init)
8430 tree decl;
8431 tree init;
8432{
8433 tree oldstatic = value_member (decl, static_aggregates);
a4443a08 8434
8d08fdba
MS
8435 if (oldstatic)
8436 {
8437 if (TREE_PURPOSE (oldstatic) && init != NULL_TREE)
8251199e 8438 cp_error ("multiple initializations given for `%D'", decl);
8d08fdba 8439 }
0aafb128 8440 else if (! toplevel_bindings_p ())
8d08fdba
MS
8441 {
8442 /* Emit code to perform this initialization but once. */
b7b8bcd2 8443 tree if_stmt;
f0105ed3 8444 tree then_clause;
f1dedc31 8445 tree assignment;
c395453c
MM
8446 tree guard;
8447 tree guard_init;
8d08fdba 8448
2036a15c
MM
8449 /* Emit code to perform this initialization but once. This code
8450 looks like:
8451
c395453c
MM
8452 static int guard = 0;
8453 if (!guard) {
2036a15c 8454 // Do initialization.
c395453c 8455 guard = 1;
2036a15c
MM
8456 // Register variable for destruction at end of program.
8457 }
8458
8459 Note that the `temp' variable is only set to 1 *after* the
8460 initialization is complete. This ensures that an exception,
8461 thrown during the construction, will cause the variable to
8462 reinitialized when we pass through this code again, as per:
68642fb6 8463
2036a15c
MM
8464 [stmt.dcl]
8465
8466 If the initialization exits by throwing an exception, the
8467 initialization is not complete, so it will be tried again
8468 the next time control enters the declaration.
8469
8470 In theory, this process should be thread-safe, too; multiple
8471 threads should not be able to initialize the variable more
8472 than once. We don't yet attempt to ensure thread-safety. */
c395453c
MM
8473
8474 /* Create the guard variable. */
8475 guard = get_guard (decl);
2036a15c
MM
8476
8477 /* Begin the conditional initialization. */
b7b8bcd2 8478 if_stmt = begin_if_stmt ();
c395453c 8479 finish_if_stmt_cond (get_guard_cond (guard), if_stmt);
f0105ed3 8480 then_clause = begin_compound_stmt (/*has_no_scope=*/0);
72b7eeff 8481
2036a15c 8482 /* Do the initialization itself. */
28cbf42c 8483 if (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))
f30432d7 8484 || (init && TREE_CODE (init) == TREE_LIST))
f1dedc31 8485 assignment = build_aggr_init (decl, init, 0);
f30432d7 8486 else if (init)
c557501d
MM
8487 /* The initialization we're doing here is just a bitwise
8488 copy. */
8489 assignment = build (INIT_EXPR, TREE_TYPE (decl), decl, init);
f1dedc31
MM
8490 else
8491 assignment = NULL_TREE;
8492
8493 /* Once the assignment is complete, set TEMP to 1. Since the
8494 construction of the static object is complete at this point,
8495 we want to make sure TEMP is set to 1 even if a temporary
8496 constructed during the initialization throws an exception
8497 when it is destroyed. So, we combine the initialization and
8498 the assignment to TEMP into a single expression, ensuring
8499 that when we call finish_expr_stmt the cleanups will not be
8500 run until after TEMP is set to 1. */
c395453c 8501 guard_init = set_guard (guard);
f1dedc31
MM
8502 if (assignment)
8503 {
8504 assignment = tree_cons (NULL_TREE, assignment,
68642fb6 8505 build_tree_list (NULL_TREE,
c395453c 8506 guard_init));
f1dedc31
MM
8507 assignment = build_compound_expr (assignment);
8508 }
8509 else
c395453c 8510 assignment = guard_init;
f1dedc31 8511 finish_expr_stmt (assignment);
72b7eeff 8512
2036a15c
MM
8513 /* Use atexit to register a function for destroying this static
8514 variable. */
bf419747 8515 register_dtor_fn (decl);
72b7eeff 8516
f0105ed3 8517 finish_compound_stmt (/*has_no_scope=*/0, then_clause);
b7b8bcd2
MM
8518 finish_then_clause (if_stmt);
8519 finish_if_stmt ();
8d08fdba
MS
8520 }
8521 else
bbd15aac 8522 static_aggregates = tree_cons (init, decl, static_aggregates);
8d08fdba 8523}
3c5c0849
MM
8524
8525/* Finish the declaration of a catch-parameter. */
8526
b35d4555 8527tree
3c5c0849
MM
8528start_handler_parms (declspecs, declarator)
8529 tree declspecs;
8530 tree declarator;
8531{
8532 tree decl;
8533 if (declspecs)
8534 {
8535 decl = grokdeclarator (declarator, declspecs, CATCHPARM,
8536 1, NULL_TREE);
8537 if (decl == NULL_TREE)
8538 error ("invalid catch parameter");
8539 }
8540 else
8541 decl = NULL_TREE;
b35d4555
MM
8542
8543 return decl;
3c5c0849
MM
8544}
8545
8d08fdba
MS
8546\f
8547/* Make TYPE a complete type based on INITIAL_VALUE.
8548 Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
6ab5c740 8549 2 if there was no information (in which case assume 0 if DO_DEFAULT). */
8d08fdba
MS
8550
8551int
8552complete_array_type (type, initial_value, do_default)
8553 tree type, initial_value;
8554 int do_default;
8555{
8556 register tree maxindex = NULL_TREE;
8557 int value = 0;
68642fb6 8558
8d08fdba
MS
8559 if (initial_value)
8560 {
7b019c19
MM
8561 /* An array of character type can be initialized from a
8562 brace-enclosed string constant. */
8563 if (char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (type)))
8564 && TREE_CODE (initial_value) == CONSTRUCTOR
8565 && CONSTRUCTOR_ELTS (initial_value)
8566 && (TREE_CODE (TREE_VALUE (CONSTRUCTOR_ELTS (initial_value)))
8567 == STRING_CST)
8568 && TREE_CHAIN (CONSTRUCTOR_ELTS (initial_value)) == NULL_TREE)
8569 initial_value = TREE_VALUE (CONSTRUCTOR_ELTS (initial_value));
8570
8571 /* Note MAXINDEX is really the maximum index, one less than the
8572 size. */
8d08fdba 8573 if (TREE_CODE (initial_value) == STRING_CST)
e1cd6e56
MS
8574 {
8575 int eltsize
8576 = int_size_in_bytes (TREE_TYPE (TREE_TYPE (initial_value)));
8577 maxindex = build_int_2 ((TREE_STRING_LENGTH (initial_value)
8578 / eltsize) - 1, 0);
8579 }
8d08fdba
MS
8580 else if (TREE_CODE (initial_value) == CONSTRUCTOR)
8581 {
e1cd6e56 8582 tree elts = CONSTRUCTOR_ELTS (initial_value);
fed3cef0
RK
8583
8584 maxindex = ssize_int (-1);
e1cd6e56
MS
8585 for (; elts; elts = TREE_CHAIN (elts))
8586 {
8587 if (TREE_PURPOSE (elts))
8588 maxindex = TREE_PURPOSE (elts);
8589 else
fed3cef0 8590 maxindex = size_binop (PLUS_EXPR, maxindex, ssize_int (1));
e1cd6e56
MS
8591 }
8592 maxindex = copy_node (maxindex);
8d08fdba
MS
8593 }
8594 else
8595 {
8596 /* Make an error message unless that happened already. */
8597 if (initial_value != error_mark_node)
8598 value = 1;
0db982be
ML
8599 else
8600 initial_value = NULL_TREE;
8d08fdba
MS
8601
8602 /* Prevent further error messages. */
8603 maxindex = build_int_2 (0, 0);
8604 }
8605 }
8606
8607 if (!maxindex)
8608 {
8609 if (do_default)
8610 maxindex = build_int_2 (0, 0);
8611 value = 2;
8612 }
8613
8614 if (maxindex)
8615 {
51c184be 8616 tree itype;
6ab5c740
NS
8617 tree domain;
8618
8619 domain = build_index_type (maxindex);
8620 TYPE_DOMAIN (type) = domain;
51c184be 8621
dff6b454 8622 if (! TREE_TYPE (maxindex))
6ab5c740 8623 TREE_TYPE (maxindex) = domain;
51c184be
MS
8624 if (initial_value)
8625 itype = TREE_TYPE (initial_value);
8626 else
8627 itype = NULL;
8628 if (itype && !TYPE_DOMAIN (itype))
6ab5c740 8629 TYPE_DOMAIN (itype) = domain;
dff6b454
RK
8630 /* The type of the main variant should never be used for arrays
8631 of different sizes. It should only ever be completed with the
8632 size of the array. */
8633 if (! TYPE_DOMAIN (TYPE_MAIN_VARIANT (type)))
6ab5c740 8634 TYPE_DOMAIN (TYPE_MAIN_VARIANT (type)) = domain;
8d08fdba
MS
8635 }
8636
8637 /* Lay out the type now that we can get the real answer. */
8638
8639 layout_type (type);
8640
8641 return value;
8642}
8643\f
8644/* Return zero if something is declared to be a member of type
8645 CTYPE when in the context of CUR_TYPE. STRING is the error
8646 message to print in that case. Otherwise, quietly return 1. */
e92cc029 8647
8d08fdba 8648static int
4dacf5bd 8649member_function_or_else (ctype, cur_type, flags)
8d08fdba 8650 tree ctype, cur_type;
4dacf5bd 8651 enum overload_flags flags;
8d08fdba
MS
8652{
8653 if (ctype && ctype != cur_type)
8654 {
4dacf5bd 8655 if (flags == DTOR_FLAG)
2ae7bada
NS
8656 cp_error ("destructor for alien class `%T' cannot be a member",
8657 ctype);
4dacf5bd 8658 else
2ae7bada
NS
8659 cp_error ("constructor for alien class `%T' cannot be a member",
8660 ctype);
8d08fdba
MS
8661 return 0;
8662 }
8663 return 1;
8664}
8665\f
8666/* Subroutine of `grokdeclarator'. */
8667
8668/* Generate errors possibly applicable for a given set of specifiers.
8669 This is for ARM $7.1.2. */
e92cc029 8670
8d08fdba
MS
8671static void
8672bad_specifiers (object, type, virtualp, quals, inlinep, friendp, raises)
8673 tree object;
d8e178a0 8674 const char *type;
8d08fdba
MS
8675 int virtualp, quals, friendp, raises, inlinep;
8676{
8677 if (virtualp)
8251199e 8678 cp_error ("`%D' declared as a `virtual' %s", object, type);
8d08fdba 8679 if (inlinep)
8251199e 8680 cp_error ("`%D' declared as an `inline' %s", object, type);
8d08fdba 8681 if (quals)
8251199e 8682 cp_error ("`const' and `volatile' function specifiers on `%D' invalid in %s declaration",
a28e3c7f 8683 object, type);
8d08fdba 8684 if (friendp)
f8e55f34 8685 cp_error_at ("`%D' declared as a friend", object);
a714e5c5
JM
8686 if (raises && !TYPE_PTRFN_P (TREE_TYPE (object))
8687 && !TYPE_PTRMEMFUNC_P (TREE_TYPE (object)))
f8e55f34 8688 cp_error_at ("`%D' declared with an exception specification", object);
8d08fdba
MS
8689}
8690
8691/* CTYPE is class type, or null if non-class.
8692 TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
8693 or METHOD_TYPE.
8694 DECLARATOR is the function's name.
8695 VIRTUALP is truthvalue of whether the function is virtual or not.
8696 FLAGS are to be passed through to `grokclassfn'.
8697 QUALS are qualifiers indicating whether the function is `const'
8698 or `volatile'.
8699 RAISES is a list of exceptions that this function can raise.
8700 CHECK is 1 if we must find this method in CTYPE, 0 if we should
68642fb6 8701 not look, and -1 if we should not call `grokclassfn' at all.
3ddfb0e6 8702
20496fa2 8703 Returns `NULL_TREE' if something goes wrong, after issuing
3ddfb0e6 8704 applicable error messages. */
e92cc029 8705
8d08fdba 8706static tree
386b8a85 8707grokfndecl (ctype, type, declarator, orig_declarator, virtualp, flags, quals,
7a8f9fa9 8708 raises, check, friendp, publicp, inlinep, funcdef_flag,
2c73f9f5 8709 template_count, in_namespace)
8d08fdba
MS
8710 tree ctype, type;
8711 tree declarator;
386b8a85 8712 tree orig_declarator;
8d08fdba
MS
8713 int virtualp;
8714 enum overload_flags flags;
7a8f9fa9 8715 tree quals, raises;
386b8a85 8716 int check, friendp, publicp, inlinep, funcdef_flag, template_count;
2c73f9f5 8717 tree in_namespace;
8d08fdba
MS
8718{
8719 tree cname, decl;
8720 int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
856216bb 8721 int has_default_arg = 0;
42976354 8722 tree t;
8d08fdba
MS
8723
8724 if (ctype)
8725 cname = TREE_CODE (TYPE_NAME (ctype)) == TYPE_DECL
8726 ? TYPE_IDENTIFIER (ctype) : TYPE_NAME (ctype);
8727 else
8728 cname = NULL_TREE;
8729
8730 if (raises)
8731 {
f30432d7 8732 type = build_exception_variant (type, raises);
8d08fdba 8733 }
c11b6f21 8734
8d08fdba 8735 decl = build_lang_decl (FUNCTION_DECL, declarator, type);
2c73f9f5 8736 /* Propagate volatile out from type to decl. */
8d08fdba 8737 if (TYPE_VOLATILE (type))
893de33c 8738 TREE_THIS_VOLATILE (decl) = 1;
8d08fdba 8739
79c4d4b7 8740 /* If this decl has namespace scope, set that up. */
2c73f9f5 8741 if (in_namespace)
b262d64c 8742 set_decl_namespace (decl, in_namespace, friendp);
adae082f 8743 else if (!ctype)
79c4d4b7 8744 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
2c73f9f5 8745
0f8766b8
JM
8746 /* `main' and builtins have implicit 'C' linkage. */
8747 if ((MAIN_NAME_P (declarator)
8748 || (IDENTIFIER_LENGTH (declarator) > 10
8749 && IDENTIFIER_POINTER (declarator)[0] == '_'
8750 && IDENTIFIER_POINTER (declarator)[1] == '_'
8751 && strncmp (IDENTIFIER_POINTER (declarator)+2, "builtin_", 8) == 0))
8752 && current_lang_name == lang_name_cplusplus
94706a5c 8753 && ctype == NULL_TREE
79c4d4b7
JM
8754 /* NULL_TREE means global namespace. */
8755 && DECL_CONTEXT (decl) == NULL_TREE)
0f8766b8
JM
8756 DECL_LANGUAGE (decl) = lang_c;
8757
8d08fdba
MS
8758 /* Should probably propagate const out from type to decl I bet (mrs). */
8759 if (staticp)
8760 {
8761 DECL_STATIC_FUNCTION_P (decl) = 1;
8762 DECL_CONTEXT (decl) = ctype;
8d08fdba
MS
8763 }
8764
e76a2646 8765 if (ctype)
4f1c5b7d 8766 DECL_CONTEXT (decl) = ctype;
e76a2646 8767
0f8766b8 8768 if (ctype == NULL_TREE && DECL_MAIN_P (decl))
faae18ab 8769 {
848b92e1 8770 if (processing_template_decl)
cb9a3ff8 8771 error ("cannot declare `::main' to be a template");
faae18ab 8772 if (inlinep)
cb9a3ff8 8773 error ("cannot declare `::main' to be inline");
f22967f3 8774 if (!publicp)
cb9a3ff8 8775 error ("cannot declare `::main' to be static");
f22967f3
MM
8776 if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
8777 integer_type_node))
8778 error ("`main' must return `int'");
faae18ab
MS
8779 inlinep = 0;
8780 publicp = 1;
8781 }
50a6dbd7 8782
59e76fc6
JM
8783 /* Members of anonymous types and local classes have no linkage; make
8784 them internal. */
8785 if (ctype && (ANON_AGGRNAME_P (TYPE_IDENTIFIER (ctype))
4f1c5b7d 8786 || decl_function_context (TYPE_MAIN_DECL (ctype))))
50a6dbd7
JM
8787 publicp = 0;
8788
8789 if (publicp)
8790 {
8791 /* [basic.link]: A name with no linkage (notably, the name of a class
8792 or enumeration declared in a local scope) shall not be used to
8793 declare an entity with linkage.
8794
8795 Only check this for public decls for now. */
8796 t = no_linkage_check (TREE_TYPE (decl));
8797 if (t)
8798 {
7f7c930e
JM
8799 if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
8800 {
eb68cb58 8801 if (DECL_EXTERN_C_P (decl))
7f7c930e
JM
8802 /* Allow this; it's pretty common in C. */;
8803 else
8804 cp_pedwarn ("non-local function `%#D' uses anonymous type",
8805 decl);
8806 }
50a6dbd7 8807 else
8251199e 8808 cp_pedwarn ("non-local function `%#D' uses local type `%T'",
cce2be43 8809 decl, t);
50a6dbd7
JM
8810 }
8811 }
8812
893de33c 8813 TREE_PUBLIC (decl) = publicp;
faae18ab 8814 if (! publicp)
893de33c
JM
8815 {
8816 DECL_INTERFACE_KNOWN (decl) = 1;
8817 DECL_NOT_REALLY_EXTERN (decl) = 1;
8818 }
faae18ab
MS
8819
8820 if (inlinep)
8821 DECL_THIS_INLINE (decl) = DECL_INLINE (decl) = 1;
8d08fdba
MS
8822
8823 DECL_EXTERNAL (decl) = 1;
8824 if (quals != NULL_TREE && TREE_CODE (type) == FUNCTION_TYPE)
8825 {
8251199e 8826 cp_error ("%smember function `%D' cannot have `%T' method qualifier",
8d08fdba
MS
8827 (ctype ? "static " : "non-"), decl, TREE_VALUE (quals));
8828 quals = NULL_TREE;
8829 }
8830
596ea4e5 8831 if (IDENTIFIER_OPNAME_P (DECL_NAME (decl)))
8d08fdba
MS
8832 grok_op_properties (decl, virtualp, check < 0);
8833
4f1c5b7d 8834 if (ctype && decl_function_context (decl))
893de33c 8835 DECL_NO_STATIC_CHAIN (decl) = 1;
e76a2646 8836
42976354
BK
8837 for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
8838 if (TREE_PURPOSE (t)
8839 && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
8840 {
856216bb 8841 has_default_arg = 1;
42976354
BK
8842 break;
8843 }
8844
f9d94ea4
JM
8845 if (friendp
8846 && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
8847 {
8848 if (funcdef_flag)
8251199e
JM
8849 cp_error
8850 ("defining explicit specialization `%D' in friend declaration",
f9d94ea4
JM
8851 orig_declarator);
8852 else
8853 {
76e57b45
NS
8854 tree fns = TREE_OPERAND (orig_declarator, 0);
8855 tree args = TREE_OPERAND (orig_declarator, 1);
d363e7bf 8856
7e2421f7
MM
8857 if (PROCESSING_REAL_TEMPLATE_DECL_P ())
8858 {
8859 /* Something like `template <class T> friend void f<T>()'. */
cb9a3ff8 8860 cp_error ("invalid use of template-id `%D' in declaration of primary template",
7e2421f7 8861 orig_declarator);
20496fa2 8862 return NULL_TREE;
7e2421f7
MM
8863 }
8864
856216bb 8865
f9d94ea4
JM
8866 /* A friend declaration of the form friend void f<>(). Record
8867 the information in the TEMPLATE_ID_EXPR. */
8868 SET_DECL_IMPLICIT_INSTANTIATION (decl);
76e57b45
NS
8869
8870 if (TREE_CODE (fns) == COMPONENT_REF)
8871 {
8872 /* Due to bison parser ickiness, we will have already looked
8873 up an operator_name or PFUNCNAME within the current class
8874 (see template_id in parse.y). If the current class contains
8875 such a name, we'll get a COMPONENT_REF here. Undo that. */
d363e7bf 8876
76e57b45
NS
8877 my_friendly_assert (TREE_TYPE (TREE_OPERAND (fns, 0))
8878 == current_class_type, 20001120);
8879 fns = TREE_OPERAND (fns, 1);
8880 }
8881 my_friendly_assert (TREE_CODE (fns) == IDENTIFIER_NODE
8882 || TREE_CODE (fns) == LOOKUP_EXPR
8883 || TREE_CODE (fns) == OVERLOAD, 20001120);
8884 DECL_TEMPLATE_INFO (decl) = tree_cons (fns, args, NULL_TREE);
856216bb
MM
8885
8886 if (has_default_arg)
8887 {
8888 cp_error ("default arguments are not allowed in declaration of friend template specialization `%D'",
8889 decl);
8890 return NULL_TREE;
8891 }
8892
8893 if (inlinep)
8894 {
68642fb6 8895 cp_error ("`inline' is not allowed in declaration of friend template specialization `%D'",
856216bb
MM
8896 decl);
8897 return NULL_TREE;
8898 }
f9d94ea4 8899 }
f84b4be9 8900 }
386b8a85 8901
856216bb
MM
8902 if (has_default_arg)
8903 add_defarg_fn (decl);
8904
1eb0072d
JM
8905 if (funcdef_flag)
8906 /* Make the init_value nonzero so pushdecl knows this is not
8907 tentative. error_mark_node is replaced later with the BLOCK. */
8908 DECL_INITIAL (decl) = error_mark_node;
8909
93ca4ba7 8910 if (TYPE_NOTHROW_P (type) || nothrow_libfn_p (decl))
1660cb3a
JM
8911 TREE_NOTHROW (decl) = 1;
8912
75650646 8913 /* Caller will do the rest of this. */
8d08fdba
MS
8914 if (check < 0)
8915 return decl;
8916
8917 if (flags == NO_SPECIAL && ctype && constructor_name (cname) == declarator)
74b846e0
MM
8918 DECL_CONSTRUCTOR_P (decl) = 1;
8919
8920 /* Function gets the ugly name, field gets the nice one. This call
8921 may change the type of the function (because of default
8922 parameters)! */
8923 if (ctype != NULL_TREE)
8924 grokclassfn (ctype, decl, flags, quals);
8925
8926 decl = check_explicit_specialization (orig_declarator, decl,
8927 template_count,
8928 2 * (funcdef_flag != 0) +
8929 4 * (friendp != 0));
8930 if (decl == error_mark_node)
8931 return NULL_TREE;
98c1c668 8932
74b846e0
MM
8933 if (ctype != NULL_TREE
8934 && (! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
8935 && check)
8d08fdba 8936 {
74b846e0 8937 tree old_decl;
8d08fdba 8938
74b846e0 8939 old_decl = check_classfn (ctype, decl);
8d08fdba 8940
74b846e0
MM
8941 if (old_decl && TREE_CODE (old_decl) == TEMPLATE_DECL)
8942 /* Because grokfndecl is always supposed to return a
8943 FUNCTION_DECL, we pull out the DECL_TEMPLATE_RESULT
8944 here. We depend on our callers to figure out that its
8945 really a template that's being returned. */
8946 old_decl = DECL_TEMPLATE_RESULT (old_decl);
6c30752f 8947
74b846e0
MM
8948 if (old_decl && DECL_STATIC_FUNCTION_P (old_decl)
8949 && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
5566b478 8950 {
74b846e0
MM
8951 /* Remove the `this' parm added by grokclassfn.
8952 XXX Isn't this done in start_function, too? */
3afb32a4 8953 revert_static_member_fn (decl);
74b846e0 8954 last_function_parms = TREE_CHAIN (last_function_parms);
5566b478 8955 }
74b846e0
MM
8956 if (old_decl && DECL_ARTIFICIAL (old_decl))
8957 cp_error ("definition of implicitly-declared `%D'", old_decl);
8d08fdba 8958
74b846e0 8959 if (old_decl)
8d08fdba 8960 {
74b846e0
MM
8961 /* Since we've smashed OLD_DECL to its
8962 DECL_TEMPLATE_RESULT, we must do the same to DECL. */
8963 if (TREE_CODE (decl) == TEMPLATE_DECL)
8964 decl = DECL_TEMPLATE_RESULT (decl);
8965
8966 /* Attempt to merge the declarations. This can fail, in
8967 the case of some illegal specialization declarations. */
8968 if (!duplicate_decls (decl, old_decl))
8969 cp_error ("no `%#D' member function declared in class `%T'",
8970 decl, ctype);
8971 return old_decl;
8d08fdba
MS
8972 }
8973 }
74b846e0
MM
8974
8975 if (DECL_CONSTRUCTOR_P (decl) && !grok_ctor_properties (ctype, decl))
8976 return NULL_TREE;
8977
8978 if (ctype == NULL_TREE || check)
8979 return decl;
8980
8981 if (virtualp)
cbb40945 8982 DECL_VIRTUAL_P (decl) = 1;
74b846e0 8983
8d08fdba
MS
8984 return decl;
8985}
8986
8987static tree
2c73f9f5 8988grokvardecl (type, declarator, specbits_in, initialized, constp, in_namespace)
8d08fdba
MS
8989 tree type;
8990 tree declarator;
d2e5ee5c 8991 RID_BIT_TYPE *specbits_in;
8d08fdba 8992 int initialized;
a9aedbc2 8993 int constp;
2c73f9f5 8994 tree in_namespace;
8d08fdba
MS
8995{
8996 tree decl;
f7da6097
MS
8997 RID_BIT_TYPE specbits;
8998
8999 specbits = *specbits_in;
8d08fdba
MS
9000
9001 if (TREE_CODE (type) == OFFSET_TYPE)
9002 {
9003 /* If you declare a static member so that it
9004 can be initialized, the code will reach here. */
5b605f68
MS
9005 tree basetype = TYPE_OFFSET_BASETYPE (type);
9006 type = TREE_TYPE (type);
4ce3d537 9007 decl = build_lang_decl (VAR_DECL, declarator, type);
5b605f68 9008 DECL_CONTEXT (decl) = basetype;
8d08fdba
MS
9009 }
9010 else
30394414 9011 {
79c4d4b7
JM
9012 tree context;
9013
9014 if (in_namespace)
9015 context = in_namespace;
9016 else if (namespace_bindings_p () || RIDBIT_SETP (RID_EXTERN, specbits))
9017 context = current_namespace;
820fcad8
JM
9018 else
9019 context = NULL_TREE;
79c4d4b7 9020
6dfbb909
MM
9021 if (processing_template_decl && context)
9022 /* For global variables, declared in a template, we need the
9023 full lang_decl. */
cd9f6678 9024 decl = build_lang_decl (VAR_DECL, declarator, type);
9188c363 9025 else
c82dbd95 9026 decl = build_decl (VAR_DECL, declarator, type);
79c4d4b7
JM
9027
9028 if (context)
b262d64c 9029 set_decl_namespace (decl, context, 0);
79c4d4b7
JM
9030
9031 context = DECL_CONTEXT (decl);
5362b086 9032 if (declarator && context && current_lang_name != lang_name_c)
92643fea
MM
9033 /* We can't mangle lazily here because we don't have any
9034 way to recover whether or not a variable was `extern
9035 "C"' later. */
9036 mangle_decl (decl);
30394414 9037 }
6060a796 9038
2c73f9f5 9039 if (in_namespace)
b262d64c 9040 set_decl_namespace (decl, in_namespace, 0);
2c73f9f5 9041
8d08fdba
MS
9042 if (RIDBIT_SETP (RID_EXTERN, specbits))
9043 {
9044 DECL_THIS_EXTERN (decl) = 1;
9045 DECL_EXTERNAL (decl) = !initialized;
9046 }
9047
9048 /* In class context, static means one per class,
9049 public access, and static storage. */
2b9dc906 9050 if (DECL_CLASS_SCOPE_P (decl))
8d08fdba
MS
9051 {
9052 TREE_PUBLIC (decl) = 1;
9053 TREE_STATIC (decl) = 1;
5b605f68 9054 DECL_EXTERNAL (decl) = 0;
8d08fdba
MS
9055 }
9056 /* At top level, either `static' or no s.c. makes a definition
9057 (perhaps tentative), and absence of `static' makes it public. */
a9aedbc2 9058 else if (toplevel_bindings_p ())
8d08fdba 9059 {
a9aedbc2 9060 TREE_PUBLIC (decl) = (RIDBIT_NOTSETP (RID_STATIC, specbits)
9fffd093 9061 && (DECL_THIS_EXTERN (decl) || ! constp));
8d08fdba
MS
9062 TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
9063 }
9064 /* Not at top level, only `static' makes a static definition. */
9065 else
9066 {
9067 TREE_STATIC (decl) = !! RIDBIT_SETP (RID_STATIC, specbits);
9068 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
9069 }
50a6dbd7
JM
9070
9071 if (TREE_PUBLIC (decl))
9072 {
9073 /* [basic.link]: A name with no linkage (notably, the name of a class
9074 or enumeration declared in a local scope) shall not be used to
9075 declare an entity with linkage.
9076
9077 Only check this for public decls for now. */
9078 tree t = no_linkage_check (TREE_TYPE (decl));
9079 if (t)
9080 {
9081 if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
9082 /* Ignore for now; `enum { foo } e' is pretty common. */;
9083 else
8251199e 9084 cp_pedwarn ("non-local variable `%#D' uses local type `%T'",
50a6dbd7
JM
9085 decl, t);
9086 }
9087 }
9088
8d08fdba
MS
9089 return decl;
9090}
9091
d8f8dca1
MM
9092/* Create and return a canonical pointer to member function type, for
9093 TYPE, which is a POINTER_TYPE to a METHOD_TYPE. */
8d08fdba
MS
9094
9095tree
9096build_ptrmemfunc_type (type)
9097 tree type;
9098{
9099 tree fields[4];
9100 tree t;
46cbda4a 9101 tree unqualified_variant = NULL_TREE;
8d08fdba 9102
d48ebde1
NS
9103 if (type == error_mark_node)
9104 return type;
d363e7bf 9105
8d08fdba
MS
9106 /* If a canonical type already exists for this type, use it. We use
9107 this method instead of type_hash_canon, because it only does a
9108 simple equality check on the list of field members. */
9109
9110 if ((t = TYPE_GET_PTRMEMFUNC_TYPE (type)))
9111 return t;
9112
46cbda4a
MM
9113 /* Make sure that we always have the unqualified pointer-to-member
9114 type first. */
9115 if (CP_TYPE_QUALS (type) != TYPE_UNQUALIFIED)
68642fb6 9116 unqualified_variant
46cbda4a
MM
9117 = build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type));
9118
33848bb0 9119 t = make_aggr_type (RECORD_TYPE);
2c73f9f5 9120 /* Let the front-end know this is a pointer to member function... */
db5ae43f 9121 TYPE_PTRMEMFUNC_FLAG (t) = 1;
2c73f9f5 9122 /* ... and not really an aggregate. */
7ddedda4 9123 SET_IS_AGGR_TYPE (t, 0);
8d08fdba 9124
1f84ec23
MM
9125 fields[0] = build_decl (FIELD_DECL, pfn_identifier, type);
9126 fields[1] = build_decl (FIELD_DECL, delta_identifier,
9127 delta_type_node);
9128 finish_builtin_type (t, "__ptrmemfunc_type", fields, 1, ptr_type_node);
8d08fdba 9129
8d08fdba
MS
9130 /* Zap out the name so that the back-end will give us the debugging
9131 information for this anonymous RECORD_TYPE. */
9132 TYPE_NAME (t) = NULL_TREE;
9133
46cbda4a
MM
9134 /* If this is not the unqualified form of this pointer-to-member
9135 type, set the TYPE_MAIN_VARIANT for this type to be the
9136 unqualified type. Since they are actually RECORD_TYPEs that are
9137 not variants of each other, we must do this manually. */
9138 if (CP_TYPE_QUALS (type) != TYPE_UNQUALIFIED)
9139 {
9140 t = build_qualified_type (t, CP_TYPE_QUALS (type));
9141 TYPE_MAIN_VARIANT (t) = unqualified_variant;
9142 TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (unqualified_variant);
9143 TYPE_NEXT_VARIANT (unqualified_variant) = t;
9144 }
9145
9146 /* Cache this pointer-to-member type so that we can find it again
9147 later. */
8d08fdba
MS
9148 TYPE_SET_PTRMEMFUNC_TYPE (type, t);
9149
e92cc029 9150 /* Seems to be wanted. */
8d08fdba 9151 CLASSTYPE_GOT_SEMICOLON (t) = 1;
46cbda4a 9152
8d08fdba
MS
9153 return t;
9154}
9155
b17e2870
JM
9156/* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
9157 Check to see that the definition is valid. Issue appropriate error
9158 messages. Return 1 if the definition is particularly bad, or 0
9159 otherwise. */
9160
9161int
9162check_static_variable_definition (decl, type)
9163 tree decl;
9164 tree type;
9165{
9166 /* Motion 10 at San Diego: If a static const integral data member is
9167 initialized with an integral constant expression, the initializer
9168 may appear either in the declaration (within the class), or in
9169 the definition, but not both. If it appears in the class, the
9170 member is a member constant. The file-scope definition is always
9171 required. */
9172 if (CLASS_TYPE_P (type) || TREE_CODE (type) == REFERENCE_TYPE)
9173 {
cb9a3ff8 9174 cp_error ("invalid in-class initialization of static data member of non-integral type `%T'",
b17e2870
JM
9175 type);
9176 /* If we just return the declaration, crashes will sometimes
9177 occur. We therefore return void_type_node, as if this was a
9178 friend declaration, to cause callers to completely ignore
9179 this declaration. */
9180 return 1;
9181 }
9182 else if (!CP_TYPE_CONST_P (type))
cb9a3ff8 9183 cp_error ("ISO C++ forbids in-class initialization of non-const static member `%D'",
b17e2870
JM
9184 decl);
9185 else if (pedantic && !INTEGRAL_TYPE_P (type))
cb9a3ff8 9186 cp_pedwarn ("ISO C++ forbids initialization of member constant `%D' of non-integral type `%T'", decl, type);
b17e2870
JM
9187
9188 return 0;
9189}
9190
2848ad0f
MM
9191/* Given the SIZE (i.e., number of elements) in an array, compute an
9192 appropriate index type for the array. If non-NULL, NAME is the
9193 name of the thing being declared. */
9194
c95cd22e 9195tree
2848ad0f
MM
9196compute_array_index_type (name, size)
9197 tree name;
9198 tree size;
9199{
9200 tree itype;
9201
9202 /* The size might be the result of a cast. */
9203 STRIP_TYPE_NOPS (size);
9204
9205 /* It might be a const variable or enumeration constant. */
fc611ce0 9206 size = decl_constant_value (size);
2848ad0f
MM
9207
9208 /* If this involves a template parameter, it will be a constant at
9209 instantiation time, but we don't know what the value is yet.
9210 Even if no template parameters are involved, we may an expression
9211 that is not a constant; we don't even simplify `1 + 2' when
9212 processing a template. */
9213 if (processing_template_decl)
9214 {
9215 /* Resolve a qualified reference to an enumerator or static
9216 const data member of ours. */
9217 if (TREE_CODE (size) == SCOPE_REF
9218 && TREE_OPERAND (size, 0) == current_class_type)
9219 {
9220 tree t = lookup_field (current_class_type,
9221 TREE_OPERAND (size, 1), 0, 0);
9222 if (t)
9223 size = t;
9224 }
9225
9226 return build_index_type (build_min (MINUS_EXPR, sizetype,
9227 size, integer_one_node));
9228 }
9229
9230 /* The array bound must be an integer type. */
9231 if (TREE_CODE (TREE_TYPE (size)) != INTEGER_TYPE
9232 && TREE_CODE (TREE_TYPE (size)) != ENUMERAL_TYPE
9233 && TREE_CODE (TREE_TYPE (size)) != BOOLEAN_TYPE)
9234 {
d67cdbc3
JM
9235 if (name)
9236 cp_error ("size of array `%D' has non-integer type", name);
9237 else
9238 cp_error ("size of array has non-integer type");
2848ad0f
MM
9239 size = integer_one_node;
9240 }
9241
9242 /* Normally, the array-bound will be a constant. */
2bb5d995 9243 if (TREE_CODE (size) == INTEGER_CST)
2848ad0f
MM
9244 {
9245 /* Check to see if the array bound overflowed. Make that an
9246 error, no matter how generous we're being. */
9247 int old_flag_pedantic_errors = flag_pedantic_errors;
9248 int old_pedantic = pedantic;
9249 pedantic = flag_pedantic_errors = 1;
9250 constant_expression_warning (size);
9251 pedantic = old_pedantic;
9252 flag_pedantic_errors = old_flag_pedantic_errors;
9253
9254 /* An array must have a positive number of elements. */
9255 if (INT_CST_LT (size, integer_zero_node))
9256 {
d67cdbc3
JM
9257 if (name)
9258 cp_error ("size of array `%D' is negative", name);
9259 else
9260 cp_error ("size of array is negative");
2848ad0f
MM
9261 size = integer_one_node;
9262 }
9263 /* Except that an extension we allow zero-sized arrays. We
68642fb6 9264 always allow them in system headers because glibc uses
2848ad0f
MM
9265 them. */
9266 else if (integer_zerop (size) && pedantic && !in_system_header)
d67cdbc3
JM
9267 {
9268 if (name)
cb9a3ff8 9269 cp_pedwarn ("ISO C++ forbids zero-size array `%D'", name);
d67cdbc3 9270 else
cb9a3ff8 9271 cp_pedwarn ("ISO C++ forbids zero-size array");
d67cdbc3 9272 }
2848ad0f 9273 }
2bb5d995
JM
9274 else if (TREE_CONSTANT (size))
9275 {
9276 /* `(int) &fn' is not a valid array bound. */
9277 if (name)
9278 cp_error ("size of array `%D' is not an integral constant-expression",
9279 name);
9280 else
9281 cp_error ("size of array is not an integral constant-expression");
9282 }
2848ad0f
MM
9283
9284 /* Compute the index of the largest element in the array. It is
9285 one less than the number of elements in the array. */
9286 itype
ab76ca54
MM
9287 = fold (cp_build_binary_op (MINUS_EXPR,
9288 cp_convert (ssizetype, size),
9289 cp_convert (ssizetype,
9290 integer_one_node)));
68642fb6 9291
2848ad0f
MM
9292 /* Check for variable-sized arrays. We allow such things as an
9293 extension, even though they are not allowed in ANSI/ISO C++. */
9294 if (!TREE_CONSTANT (itype))
9295 {
9296 if (pedantic)
9297 {
9298 if (name)
cb9a3ff8 9299 cp_pedwarn ("ISO C++ forbids variable-size array `%D'",
2848ad0f
MM
9300 name);
9301 else
cb9a3ff8 9302 cp_pedwarn ("ISO C++ forbids variable-size array");
2848ad0f
MM
9303 }
9304
9305 /* Create a variable-sized array index type. */
9306 itype = variable_size (itype);
9307 }
9308 /* Make sure that there was no overflow when creating to a signed
9309 index type. (For example, on a 32-bit machine, an array with
9310 size 2^32 - 1 is too big.) */
9311 else if (TREE_OVERFLOW (itype))
9312 {
9313 error ("overflow in array dimension");
9314 TREE_OVERFLOW (itype) = 0;
9315 }
68642fb6 9316
2848ad0f
MM
9317 /* Create and return the appropriate index type. */
9318 return build_index_type (itype);
9319}
9320
9321/* Returns an ARRAY_TYPE for an array with SIZE elements of the
9322 indicated TYPE. If non-NULL, NAME is the NAME of the declaration
9323 with this type. */
9324
9325static tree
9326create_array_type_for_decl (name, type, size)
9327 tree name;
9328 tree type;
9329 tree size;
9330{
9331 tree itype = NULL_TREE;
9332 const char* error_msg;
9333
9334 /* If things have already gone awry, bail now. */
9335 if (type == error_mark_node || size == error_mark_node)
9336 return error_mark_node;
9337
9338 /* Assume that everything will go OK. */
9339 error_msg = NULL;
9340
9341 /* There are some types which cannot be array elements. */
9342 switch (TREE_CODE (type))
9343 {
9344 case VOID_TYPE:
9345 error_msg = "array of void";
9346 break;
9347
9348 case FUNCTION_TYPE:
9349 error_msg = "array of functions";
9350 break;
9351
9352 case REFERENCE_TYPE:
9353 error_msg = "array of references";
9354 break;
9355
9356 case OFFSET_TYPE:
9357 error_msg = "array of data members";
9358 break;
9359
9360 case METHOD_TYPE:
9361 error_msg = "array of function members";
9362 break;
9363
9364 default:
9365 break;
9366 }
9367
9368 /* If something went wrong, issue an error-message and return. */
9369 if (error_msg)
9370 {
9371 if (name)
9372 cp_error ("declaration of `%D' as %s", name, error_msg);
9373 else
9374 cp_error ("creating %s", error_msg);
9375
9376 return error_mark_node;
9377 }
9378
9379 /* [dcl.array]
68642fb6 9380
2848ad0f
MM
9381 The constant expressions that specify the bounds of the arrays
9382 can be omitted only for the first member of the sequence. */
9383 if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
9384 {
cb9a3ff8 9385 cp_error ("declaration of `%D' as multidimensional array must have bounds for all dimensions except the first",
2848ad0f 9386 name);
2848ad0f
MM
9387
9388 return error_mark_node;
9389 }
9390
9391 /* Figure out the index type for the array. */
9392 if (size)
9393 itype = compute_array_index_type (name, size);
9394
9395 return build_cplus_array_type (type, itype);
9396}
9397
3dbc07b6
MM
9398/* Check that it's OK to declare a function with the indicated TYPE.
9399 SFK indicates the kind of special function (if any) that this
1f84ec23 9400 function is. OPTYPE is the type given in a conversion operator
3dbc07b6
MM
9401 declaration. Returns the actual return type of the function; that
9402 may be different than TYPE if an error occurs, or for certain
9403 special functions. */
9404
9405static tree
1f84ec23 9406check_special_function_return_type (sfk, type, optype)
3dbc07b6
MM
9407 special_function_kind sfk;
9408 tree type;
3dbc07b6
MM
9409 tree optype;
9410{
9411 switch (sfk)
9412 {
9413 case sfk_constructor:
9414 if (type)
9415 cp_error ("return type specification for constructor invalid");
5362b086 9416
1f84ec23
MM
9417 /* In the new ABI constructors do not return a value. */
9418 type = void_type_node;
3dbc07b6
MM
9419 break;
9420
9421 case sfk_destructor:
9422 if (type)
9423 cp_error ("return type specification for destructor invalid");
9424 type = void_type_node;
9425 break;
9426
9427 case sfk_conversion:
9428 if (type && !same_type_p (type, optype))
9429 cp_error ("operator `%T' declared to return `%T'", optype, type);
9430 else if (type)
9431 cp_pedwarn ("return type specified for `operator %T'", optype);
9432 type = optype;
9433 break;
9434
9435 default:
9436 my_friendly_abort (20000408);
9437 break;
9438 }
9439
9440 return type;
9441}
9442
8d08fdba
MS
9443/* Given declspecs and a declarator,
9444 determine the name and type of the object declared
9445 and construct a ..._DECL node for it.
9446 (In one case we can return a ..._TYPE node instead.
9447 For invalid input we sometimes return 0.)
9448
9449 DECLSPECS is a chain of tree_list nodes whose value fields
9450 are the storage classes and type specifiers.
9451
9452 DECL_CONTEXT says which syntactic context this declaration is in:
9453 NORMAL for most contexts. Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
9454 FUNCDEF for a function definition. Like NORMAL but a few different
9455 error messages in each case. Return value may be zero meaning
9456 this definition is too screwy to try to parse.
9457 MEMFUNCDEF for a function definition. Like FUNCDEF but prepares to
9458 handle member functions (which have FIELD context).
9459 Return value may be zero meaning this definition is too screwy to
9460 try to parse.
9461 PARM for a parameter declaration (either within a function prototype
9462 or before a function body). Make a PARM_DECL, or return void_type_node.
db5ae43f 9463 CATCHPARM for a parameter declaration before a catch clause.
8d08fdba
MS
9464 TYPENAME if for a typename (in a cast or sizeof).
9465 Don't make a DECL node; just return the ..._TYPE node.
9466 FIELD for a struct or union field; make a FIELD_DECL.
9467 BITFIELD for a field with specified width.
9468 INITIALIZED is 1 if the decl has an initializer.
9469
b17e2870
JM
9470 ATTRLIST is a TREE_LIST node with prefix attributes in TREE_VALUE and
9471 normal attributes in TREE_PURPOSE, or NULL_TREE.
9472
70adf8a9 9473 In the TYPENAME case, DECLARATOR is really an abstract declarator.
8d08fdba
MS
9474 It may also be so in the PARM case, for a prototype where the
9475 argument type is specified but not the name.
9476
9477 This function is where the complicated C meanings of `static'
9478 and `extern' are interpreted.
9479
9480 For C++, if there is any monkey business to do, the function which
9481 calls this one must do it, i.e., prepending instance variables,
9482 renaming overloaded function names, etc.
9483
9484 Note that for this C++, it is an error to define a method within a class
9485 which does not belong to that class.
9486
9487 Except in the case where SCOPE_REFs are implicitly known (such as
9488 methods within a class being redundantly qualified),
9489 declarations which involve SCOPE_REFs are returned as SCOPE_REFs
9490 (class_name::decl_name). The caller must also deal with this.
9491
9492 If a constructor or destructor is seen, and the context is FIELD,
9493 then the type gains the attribute TREE_HAS_x. If such a declaration
9494 is erroneous, NULL_TREE is returned.
9495
9496 QUALS is used only for FUNCDEF and MEMFUNCDEF cases. For a member
535233a8
NS
9497 function, these are the qualifiers to give to the `this' pointer. We
9498 apply TYPE_QUAL_RESTRICT to the this ptr, not the object.
8d08fdba
MS
9499
9500 May return void_type_node if the declarator turned out to be a friend.
9501 See grokfield for details. */
9502
8d08fdba 9503tree
c11b6f21 9504grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
8d08fdba
MS
9505 tree declspecs;
9506 tree declarator;
9507 enum decl_context decl_context;
9508 int initialized;
c11b6f21 9509 tree attrlist;
8d08fdba
MS
9510{
9511 RID_BIT_TYPE specbits;
9512 int nclasses = 0;
9513 tree spec;
9514 tree type = NULL_TREE;
9515 int longlong = 0;
9516 int constp;
91063b51 9517 int restrictp;
8d08fdba 9518 int volatilep;
91063b51 9519 int type_quals;
db5ae43f 9520 int virtualp, explicitp, friendp, inlinep, staticp;
8d08fdba
MS
9521 int explicit_int = 0;
9522 int explicit_char = 0;
37c46b43 9523 int defaulted_int = 0;
8d08fdba 9524 tree typedef_decl = NULL_TREE;
9c0758dd 9525 const char *name;
8d08fdba
MS
9526 tree typedef_type = NULL_TREE;
9527 int funcdef_flag = 0;
9528 enum tree_code innermost_code = ERROR_MARK;
9529 int bitfield = 0;
6125f3be
DE
9530#if 0
9531 /* See the code below that used this. */
f6abb50a 9532 tree decl_machine_attr = NULL_TREE;
6125f3be 9533#endif
8d08fdba
MS
9534 /* Set this to error_mark_node for FIELD_DECLs we could not handle properly.
9535 All FIELD_DECLs we build here have `init' put into their DECL_INITIAL. */
9536 tree init = NULL_TREE;
9537
9538 /* Keep track of what sort of function is being processed
9539 so that we can warn about default return values, or explicit
9540 return values which do not match prescribed defaults. */
3dbc07b6 9541 special_function_kind sfk = sfk_none;
8d08fdba
MS
9542
9543 tree dname = NULL_TREE;
9544 tree ctype = current_class_type;
9545 tree ctor_return_type = NULL_TREE;
9546 enum overload_flags flags = NO_SPECIAL;
8d08fdba 9547 tree quals = NULL_TREE;
c11b6f21 9548 tree raises = NULL_TREE;
386b8a85 9549 int template_count = 0;
2c73f9f5 9550 tree in_namespace = NULL_TREE;
1eab9b56
JM
9551 tree inner_attrs;
9552 int ignore_attrs;
8d08fdba
MS
9553
9554 RIDBIT_RESET_ALL (specbits);
9555 if (decl_context == FUNCDEF)
9556 funcdef_flag = 1, decl_context = NORMAL;
9557 else if (decl_context == MEMFUNCDEF)
9558 funcdef_flag = -1, decl_context = FIELD;
9559 else if (decl_context == BITFIELD)
9560 bitfield = 1, decl_context = FIELD;
9561
8d08fdba
MS
9562 /* Look inside a declarator for the name being declared
9563 and get it as a string, for an error message. */
9564 {
be99da77
MS
9565 tree *next = &declarator;
9566 register tree decl;
8d08fdba
MS
9567 name = NULL;
9568
be99da77
MS
9569 while (next && *next)
9570 {
9571 decl = *next;
9572 switch (TREE_CODE (decl))
8d08fdba 9573 {
52fbc847
JM
9574 case TREE_LIST:
9575 /* For attributes. */
9576 next = &TREE_VALUE (decl);
9577 break;
9578
be99da77
MS
9579 case COND_EXPR:
9580 ctype = NULL_TREE;
9581 next = &TREE_OPERAND (decl, 0);
9582 break;
8d08fdba 9583
2c73f9f5 9584 case BIT_NOT_EXPR: /* For C++ destructors! */
8d08fdba 9585 {
be99da77
MS
9586 tree name = TREE_OPERAND (decl, 0);
9587 tree rename = NULL_TREE;
9588
9589 my_friendly_assert (flags == NO_SPECIAL, 152);
9590 flags = DTOR_FLAG;
3dbc07b6 9591 sfk = sfk_destructor;
5566b478
MS
9592 if (TREE_CODE (name) == TYPE_DECL)
9593 TREE_OPERAND (decl, 0) = name = constructor_name (name);
be99da77
MS
9594 my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 153);
9595 if (ctype == NULL_TREE)
9596 {
9597 if (current_class_type == NULL_TREE)
9598 {
8251199e 9599 error ("destructors must be member functions");
be99da77
MS
9600 flags = NO_SPECIAL;
9601 }
9602 else
9603 {
9604 tree t = constructor_name (current_class_name);
9605 if (t != name)
9606 rename = t;
9607 }
9608 }
8d08fdba 9609 else
be99da77
MS
9610 {
9611 tree t = constructor_name (ctype);
9612 if (t != name)
9613 rename = t;
9614 }
51c184be 9615
be99da77 9616 if (rename)
39211cd5 9617 {
8251199e 9618 cp_error ("destructor `%T' must match class name `%T'",
5566b478 9619 name, rename);
be99da77 9620 TREE_OPERAND (decl, 0) = rename;
39211cd5 9621 }
be99da77 9622 next = &name;
51c184be 9623 }
be99da77 9624 break;
8d08fdba 9625
be99da77 9626 case ADDR_EXPR: /* C++ reference declaration */
2c73f9f5 9627 /* Fall through. */
be99da77
MS
9628 case ARRAY_REF:
9629 case INDIRECT_REF:
9630 ctype = NULL_TREE;
9631 innermost_code = TREE_CODE (decl);
9632 next = &TREE_OPERAND (decl, 0);
9633 break;
8d08fdba 9634
be99da77 9635 case CALL_EXPR:
43f887f9 9636 if (parmlist_is_exprlist (CALL_DECLARATOR_PARMS (decl)))
8d08fdba 9637 {
b17e2870
JM
9638 /* This is actually a variable declaration using
9639 constructor syntax. We need to call start_decl and
9640 cp_finish_decl so we can get the variable
9641 initialized... */
9642
9643 tree attributes, prefix_attributes;
be99da77
MS
9644
9645 *next = TREE_OPERAND (decl, 0);
43f887f9 9646 init = CALL_DECLARATOR_PARMS (decl);
be99da77 9647
b17e2870
JM
9648 if (attrlist)
9649 {
9650 attributes = TREE_PURPOSE (attrlist);
9651 prefix_attributes = TREE_VALUE (attrlist);
9652 }
9653 else
9654 {
9655 attributes = NULL_TREE;
9656 prefix_attributes = NULL_TREE;
9657 }
9658
9659 decl = start_decl (declarator, declspecs, 1,
9660 attributes, prefix_attributes);
9fc336c7 9661 decl_type_access_control (decl);
1eb0072d
JM
9662 if (decl)
9663 {
9664 /* Look for __unused__ attribute */
9665 if (TREE_USED (TREE_TYPE (decl)))
9666 TREE_USED (decl) = 1;
9667 finish_decl (decl, init, NULL_TREE);
9668 }
9669 else
9670 cp_error ("invalid declarator");
be99da77 9671 return 0;
8d08fdba 9672 }
be99da77
MS
9673 innermost_code = TREE_CODE (decl);
9674 if (decl_context == FIELD && ctype == NULL_TREE)
9675 ctype = current_class_type;
45537677 9676 if (ctype
c11b6f21 9677 && TREE_OPERAND (decl, 0)
45537677
MS
9678 && (TREE_CODE (TREE_OPERAND (decl, 0)) == TYPE_DECL
9679 && ((DECL_NAME (TREE_OPERAND (decl, 0))
9680 == constructor_name_full (ctype))
9681 || (DECL_NAME (TREE_OPERAND (decl, 0))
9682 == constructor_name (ctype)))))
be99da77
MS
9683 TREE_OPERAND (decl, 0) = constructor_name (ctype);
9684 next = &TREE_OPERAND (decl, 0);
9685 decl = *next;
9686 if (ctype != NULL_TREE
9687 && decl != NULL_TREE && flags != DTOR_FLAG
9688 && decl == constructor_name (ctype))
8d08fdba 9689 {
3dbc07b6 9690 sfk = sfk_constructor;
be99da77 9691 ctor_return_type = ctype;
8d08fdba 9692 }
be99da77
MS
9693 ctype = NULL_TREE;
9694 break;
68642fb6 9695
386b8a85
JM
9696 case TEMPLATE_ID_EXPR:
9697 {
9698 tree fns = TREE_OPERAND (decl, 0);
9699
9700 if (TREE_CODE (fns) == LOOKUP_EXPR)
9701 fns = TREE_OPERAND (fns, 0);
9702
8f032717
MM
9703 dname = fns;
9704 if (TREE_CODE (dname) == COMPONENT_REF)
9705 dname = TREE_OPERAND (dname, 1);
9706 if (TREE_CODE (dname) != IDENTIFIER_NODE)
9707 {
9708 my_friendly_assert (is_overloaded_fn (dname),
9709 19990331);
9710 dname = DECL_NAME (get_first_fn (dname));
9711 }
386b8a85 9712 }
2c73f9f5 9713 /* Fall through. */
be99da77
MS
9714
9715 case IDENTIFIER_NODE:
386b8a85
JM
9716 if (TREE_CODE (decl) == IDENTIFIER_NODE)
9717 dname = decl;
9718
be99da77
MS
9719 next = 0;
9720
0e5921e8 9721 if (C_IS_RESERVED_WORD (dname))
8d08fdba 9722 {
8251199e 9723 cp_error ("declarator-id missing; using reserved word `%D'",
be99da77
MS
9724 dname);
9725 name = IDENTIFIER_POINTER (dname);
8d08fdba 9726 }
596ea4e5 9727 else if (!IDENTIFIER_TYPENAME_P (dname))
be99da77 9728 name = IDENTIFIER_POINTER (dname);
8d08fdba
MS
9729 else
9730 {
596ea4e5
AS
9731 my_friendly_assert (flags == NO_SPECIAL, 154);
9732 flags = TYPENAME_FLAG;
9733 ctor_return_type = TREE_TYPE (dname);
9734 sfk = sfk_conversion;
9735 if (IDENTIFIER_GLOBAL_VALUE (dname)
5362b086 9736 && (TREE_CODE (IDENTIFIER_GLOBAL_VALUE (dname))
596ea4e5
AS
9737 == TYPE_DECL))
9738 name = IDENTIFIER_POINTER (dname);
9739 else
9740 name = "<invalid operator>";
8d08fdba 9741 }
be99da77 9742 break;
8d08fdba 9743
be99da77
MS
9744 /* C++ extension */
9745 case SCOPE_REF:
9746 {
9747 /* Perform error checking, and decide on a ctype. */
9748 tree cname = TREE_OPERAND (decl, 0);
9749 if (cname == NULL_TREE)
9750 ctype = NULL_TREE;
2c73f9f5
ML
9751 else if (TREE_CODE (cname) == NAMESPACE_DECL)
9752 {
9753 ctype = NULL_TREE;
9754 in_namespace = TREE_OPERAND (decl, 0);
9755 TREE_OPERAND (decl, 0) = NULL_TREE;
9756 }
be99da77
MS
9757 else if (! is_aggr_type (cname, 1))
9758 TREE_OPERAND (decl, 0) = NULL_TREE;
9759 /* Must test TREE_OPERAND (decl, 1), in case user gives
9760 us `typedef (class::memfunc)(int); memfunc *memfuncptr;' */
9761 else if (TREE_OPERAND (decl, 1)
9762 && TREE_CODE (TREE_OPERAND (decl, 1)) == INDIRECT_REF)
9763 ctype = cname;
73b0fce8 9764 else if (TREE_CODE (cname) == TEMPLATE_TYPE_PARM
a1281f45 9765 || TREE_CODE (cname) == BOUND_TEMPLATE_TEMPLATE_PARM)
5566b478 9766 {
8251199e 9767 cp_error ("`%T::%D' is not a valid declarator", cname,
5566b478 9768 TREE_OPERAND (decl, 1));
8251199e 9769 cp_error (" perhaps you want `typename %T::%D' to make it a type",
5566b478
MS
9770 cname, TREE_OPERAND (decl, 1));
9771 return void_type_node;
9772 }
be99da77
MS
9773 else if (ctype == NULL_TREE)
9774 ctype = cname;
9775 else if (TREE_COMPLEXITY (decl) == current_class_depth)
9776 TREE_OPERAND (decl, 0) = ctype;
9777 else
9778 {
9779 if (! UNIQUELY_DERIVED_FROM_P (cname, ctype))
9780 {
8251199e 9781 cp_error ("type `%T' is not derived from type `%T'",
be99da77
MS
9782 cname, ctype);
9783 TREE_OPERAND (decl, 0) = NULL_TREE;
9784 }
9785 else
9786 ctype = cname;
9787 }
9788
c91a56d2
MS
9789 if (ctype && TREE_CODE (TREE_OPERAND (decl, 1)) == TYPE_DECL
9790 && ((DECL_NAME (TREE_OPERAND (decl, 1))
9791 == constructor_name_full (ctype))
9792 || (DECL_NAME (TREE_OPERAND (decl, 1))
9793 == constructor_name (ctype))))
be99da77
MS
9794 TREE_OPERAND (decl, 1) = constructor_name (ctype);
9795 next = &TREE_OPERAND (decl, 1);
9796 decl = *next;
9797 if (ctype)
9798 {
9799 if (TREE_CODE (decl) == IDENTIFIER_NODE
9800 && constructor_name (ctype) == decl)
9801 {
3dbc07b6 9802 sfk = sfk_constructor;
be99da77
MS
9803 ctor_return_type = ctype;
9804 }
9805 else if (TREE_CODE (decl) == BIT_NOT_EXPR
9806 && TREE_CODE (TREE_OPERAND (decl, 0)) == IDENTIFIER_NODE
9807 && (constructor_name (ctype) == TREE_OPERAND (decl, 0)
9808 || constructor_name_full (ctype) == TREE_OPERAND (decl, 0)))
9809 {
3dbc07b6 9810 sfk = sfk_destructor;
be99da77
MS
9811 ctor_return_type = ctype;
9812 flags = DTOR_FLAG;
9813 TREE_OPERAND (decl, 0) = constructor_name (ctype);
9814 next = &TREE_OPERAND (decl, 0);
9815 }
9816 }
9817 }
9818 break;
9819
9820 case ERROR_MARK:
9821 next = 0;
9822 break;
9823
45537677
MS
9824 case TYPE_DECL:
9825 /* Parse error puts this typespec where
9826 a declarator should go. */
8251199e 9827 cp_error ("`%T' specified as declarator-id", DECL_NAME (decl));
45537677 9828 if (TREE_TYPE (decl) == current_class_type)
8251199e 9829 cp_error (" perhaps you want `%T' for a constructor",
45537677
MS
9830 current_class_name);
9831 dname = DECL_NAME (decl);
9832 name = IDENTIFIER_POINTER (dname);
9833
e92cc029 9834 /* Avoid giving two errors for this. */
45537677
MS
9835 IDENTIFIER_CLASS_VALUE (dname) = NULL_TREE;
9836
58010b57 9837 declspecs = tree_cons (NULL_TREE, integer_type_node, declspecs);
45537677
MS
9838 *next = dname;
9839 next = 0;
9840 break;
9841
be99da77 9842 default:
8251199e 9843 cp_compiler_error ("`%D' as declarator", decl);
be99da77 9844 return 0; /* We used to do a 155 abort here. */
8d08fdba 9845 }
be99da77 9846 }
8d08fdba
MS
9847 }
9848
9849 /* A function definition's declarator must have the form of
9850 a function declarator. */
9851
9852 if (funcdef_flag && innermost_code != CALL_EXPR)
9853 return 0;
9854
e1cd6e56
MS
9855 if (((dname && IDENTIFIER_OPNAME_P (dname)) || flags == TYPENAME_FLAG)
9856 && innermost_code != CALL_EXPR
9857 && ! (ctype && declspecs == NULL_TREE))
9858 {
8251199e 9859 cp_error ("declaration of `%D' as non-function", dname);
e1cd6e56
MS
9860 return void_type_node;
9861 }
9862
8d08fdba
MS
9863 /* Anything declared one level down from the top level
9864 must be one of the parameters of a function
9865 (because the body is at least two levels down). */
9866
9867 /* This heuristic cannot be applied to C++ nodes! Fixed, however,
9868 by not allowing C++ class definitions to specify their parameters
9869 with xdecls (must be spec.d in the parmlist).
9870
9871 Since we now wait to push a class scope until we are sure that
9872 we are in a legitimate method context, we must set oldcname
a9aedbc2
MS
9873 explicitly (since current_class_name is not yet alive).
9874
9875 We also want to avoid calling this a PARM if it is in a namespace. */
8d08fdba 9876
9188c363 9877 if (decl_context == NORMAL && !toplevel_bindings_p ())
a9aedbc2
MS
9878 {
9879 struct binding_level *b = current_binding_level;
9880 current_binding_level = b->level_chain;
9881 if (current_binding_level != 0 && toplevel_bindings_p ())
9882 decl_context = PARM;
9883 current_binding_level = b;
9884 }
8d08fdba 9885
34fc957d
NS
9886 if (name == NULL)
9887 name = decl_context == PARM ? "parameter" : "type name";
68642fb6 9888
8d08fdba
MS
9889 /* Look through the decl specs and record which ones appear.
9890 Some typespecs are defined as built-in typenames.
9891 Others, the ones that are modifiers of other types,
9892 are represented by bits in SPECBITS: set the bits for
9893 the modifiers that appear. Storage class keywords are also in SPECBITS.
9894
9895 If there is a typedef name or a type, store the type in TYPE.
9896 This includes builtin typedefs such as `int'.
9897
9898 Set EXPLICIT_INT if the type is `int' or `char' and did not
9899 come from a user typedef.
9900
9901 Set LONGLONG if `long' is mentioned twice.
9902
9903 For C++, constructors and destructors have their own fast treatment. */
9904
9905 for (spec = declspecs; spec; spec = TREE_CHAIN (spec))
9906 {
9907 register int i;
9908 register tree id;
9909
9910 /* Certain parse errors slip through. For example,
9911 `int class;' is not caught by the parser. Try
9912 weakly to recover here. */
9913 if (TREE_CODE (spec) != TREE_LIST)
9914 return 0;
9915
9916 id = TREE_VALUE (spec);
9917
9918 if (TREE_CODE (id) == IDENTIFIER_NODE)
9919 {
a3203465
MS
9920 if (id == ridpointers[(int) RID_INT]
9921 || id == ridpointers[(int) RID_CHAR]
9922 || id == ridpointers[(int) RID_BOOL]
9923 || id == ridpointers[(int) RID_WCHAR])
8d08fdba
MS
9924 {
9925 if (type)
8ccc31eb
MS
9926 {
9927 if (id == ridpointers[(int) RID_BOOL])
8251199e 9928 error ("`bool' is now a keyword");
8ccc31eb 9929 else
8251199e 9930 cp_error ("extraneous `%T' ignored", id);
8ccc31eb 9931 }
8d08fdba
MS
9932 else
9933 {
a3203465
MS
9934 if (id == ridpointers[(int) RID_INT])
9935 explicit_int = 1;
9936 else if (id == ridpointers[(int) RID_CHAR])
9937 explicit_char = 1;
8d08fdba
MS
9938 type = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (id));
9939 }
9940 goto found;
9941 }
e92cc029 9942 /* C++ aggregate types. */
8d08fdba
MS
9943 if (IDENTIFIER_HAS_TYPE_VALUE (id))
9944 {
9945 if (type)
8251199e 9946 cp_error ("multiple declarations `%T' and `%T'", type, id);
8d08fdba
MS
9947 else
9948 type = IDENTIFIER_TYPE_VALUE (id);
9949 goto found;
9950 }
9951
f376e137 9952 for (i = (int) RID_FIRST_MODIFIER; i <= (int) RID_LAST_MODIFIER; i++)
8d08fdba
MS
9953 {
9954 if (ridpointers[i] == id)
9955 {
9956 if (i == (int) RID_LONG && RIDBIT_SETP (i, specbits))
9957 {
795add94 9958 if (pedantic && ! in_system_header && warn_long_long)
cb9a3ff8 9959 pedwarn ("ISO C++ does not support `long long'");
9a3b49ac 9960 if (longlong)
8251199e 9961 error ("`long long long' is too long for GCC");
8d08fdba
MS
9962 else
9963 longlong = 1;
9964 }
9965 else if (RIDBIT_SETP (i, specbits))
8251199e 9966 pedwarn ("duplicate `%s'", IDENTIFIER_POINTER (id));
8d08fdba
MS
9967 RIDBIT_SET (i, specbits);
9968 goto found;
9969 }
9970 }
9971 }
e92cc029 9972 /* C++ aggregate types. */
1899c3a4 9973 else if (TREE_CODE (id) == TYPE_DECL)
45537677
MS
9974 {
9975 if (type)
8251199e 9976 cp_error ("multiple declarations `%T' and `%T'", type,
45537677
MS
9977 TREE_TYPE (id));
9978 else
5566b478
MS
9979 {
9980 type = TREE_TYPE (id);
9981 TREE_VALUE (spec) = type;
9982 }
45537677
MS
9983 goto found;
9984 }
8d08fdba 9985 if (type)
8251199e 9986 error ("two or more data types in declaration of `%s'", name);
8d08fdba
MS
9987 else if (TREE_CODE (id) == IDENTIFIER_NODE)
9988 {
9989 register tree t = lookup_name (id, 1);
9990 if (!t || TREE_CODE (t) != TYPE_DECL)
8251199e 9991 error ("`%s' fails to be a typedef or built in type",
8d08fdba
MS
9992 IDENTIFIER_POINTER (id));
9993 else
9994 {
9995 type = TREE_TYPE (t);
6125f3be
DE
9996#if 0
9997 /* See the code below that used this. */
f6abb50a 9998 decl_machine_attr = DECL_MACHINE_ATTRIBUTES (id);
6125f3be 9999#endif
8d08fdba
MS
10000 typedef_decl = t;
10001 }
10002 }
bd6dd845 10003 else if (id != error_mark_node)
8d08fdba
MS
10004 /* Can't change CLASS nodes into RECORD nodes here! */
10005 type = id;
10006
10007 found: ;
10008 }
10009
10010 typedef_type = type;
10011
37c46b43 10012 /* No type at all: default to `int', and set DEFAULTED_INT
6eabb241 10013 because it was not a user-defined typedef. */
8d08fdba 10014
a3203465
MS
10015 if (type == NULL_TREE
10016 && (RIDBIT_SETP (RID_SIGNED, specbits)
10017 || RIDBIT_SETP (RID_UNSIGNED, specbits)
10018 || RIDBIT_SETP (RID_LONG, specbits)
10019 || RIDBIT_SETP (RID_SHORT, specbits)))
10020 {
10021 /* These imply 'int'. */
10022 type = integer_type_node;
37c46b43 10023 defaulted_int = 1;
a3203465
MS
10024 }
10025
3dbc07b6
MM
10026 if (sfk != sfk_none)
10027 type = check_special_function_return_type (sfk, type,
3dbc07b6
MM
10028 ctor_return_type);
10029 else if (type == NULL_TREE)
8d08fdba 10030 {
3dbc07b6
MM
10031 int is_main;
10032
8d08fdba 10033 explicit_int = -1;
3dbc07b6 10034
41eff652
JM
10035 /* We handle `main' specially here, because 'main () { }' is so
10036 common. With no options, it is allowed. With -Wreturn-type,
10037 it is a warning. It is only an error with -pedantic-errors. */
3dbc07b6
MM
10038 is_main = (funcdef_flag
10039 && MAIN_NAME_P (dname)
10040 && ctype == NULL_TREE
10041 && in_namespace == NULL_TREE
10042 && current_namespace == global_namespace);
10043
10044 if (in_system_header || flag_ms_extensions)
10045 /* Allow it, sigh. */;
10046 else if (pedantic || ! is_main)
10047 cp_pedwarn ("ISO C++ forbids declaration of `%s' with no type",
10048 name);
10049 else if (warn_return_type)
10050 cp_warning ("ISO C++ forbids declaration of `%s' with no type",
10051 name);
41eff652 10052
3dbc07b6 10053 type = integer_type_node;
51c184be 10054 }
8d08fdba
MS
10055
10056 ctype = NULL_TREE;
10057
10058 /* Now process the modifiers that were specified
10059 and check for invalid combinations. */
10060
10061 /* Long double is a special combination. */
10062
10063 if (RIDBIT_SETP (RID_LONG, specbits)
10064 && TYPE_MAIN_VARIANT (type) == double_type_node)
10065 {
10066 RIDBIT_RESET (RID_LONG, specbits);
68642fb6 10067 type = build_qualified_type (long_double_type_node,
91063b51 10068 CP_TYPE_QUALS (type));
8d08fdba
MS
10069 }
10070
10071 /* Check all other uses of type modifiers. */
10072
10073 if (RIDBIT_SETP (RID_UNSIGNED, specbits)
10074 || RIDBIT_SETP (RID_SIGNED, specbits)
10075 || RIDBIT_SETP (RID_LONG, specbits)
10076 || RIDBIT_SETP (RID_SHORT, specbits))
10077 {
10078 int ok = 0;
10079
10080 if (TREE_CODE (type) == REAL_TYPE)
8251199e 10081 error ("short, signed or unsigned invalid for `%s'", name);
b7484fbe 10082 else if (TREE_CODE (type) != INTEGER_TYPE)
8251199e 10083 error ("long, short, signed or unsigned invalid for `%s'", name);
8d08fdba
MS
10084 else if (RIDBIT_SETP (RID_LONG, specbits)
10085 && RIDBIT_SETP (RID_SHORT, specbits))
8251199e 10086 error ("long and short specified together for `%s'", name);
8d08fdba
MS
10087 else if ((RIDBIT_SETP (RID_LONG, specbits)
10088 || RIDBIT_SETP (RID_SHORT, specbits))
10089 && explicit_char)
8251199e 10090 error ("long or short specified with char for `%s'", name);
8d08fdba
MS
10091 else if ((RIDBIT_SETP (RID_LONG, specbits)
10092 || RIDBIT_SETP (RID_SHORT, specbits))
10093 && TREE_CODE (type) == REAL_TYPE)
8251199e 10094 error ("long or short specified with floating type for `%s'", name);
8d08fdba
MS
10095 else if (RIDBIT_SETP (RID_SIGNED, specbits)
10096 && RIDBIT_SETP (RID_UNSIGNED, specbits))
8251199e 10097 error ("signed and unsigned given together for `%s'", name);
8d08fdba
MS
10098 else
10099 {
10100 ok = 1;
37c46b43 10101 if (!explicit_int && !defaulted_int && !explicit_char && pedantic)
8d08fdba 10102 {
8251199e 10103 pedwarn ("long, short, signed or unsigned used invalidly for `%s'",
8d08fdba
MS
10104 name);
10105 if (flag_pedantic_errors)
10106 ok = 0;
10107 }
10108 }
10109
10110 /* Discard the type modifiers if they are invalid. */
10111 if (! ok)
10112 {
10113 RIDBIT_RESET (RID_UNSIGNED, specbits);
10114 RIDBIT_RESET (RID_SIGNED, specbits);
10115 RIDBIT_RESET (RID_LONG, specbits);
10116 RIDBIT_RESET (RID_SHORT, specbits);
10117 longlong = 0;
10118 }
10119 }
10120
37c46b43
MS
10121 if (RIDBIT_SETP (RID_COMPLEX, specbits)
10122 && TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
10123 {
8251199e 10124 error ("complex invalid for `%s'", name);
37c46b43
MS
10125 RIDBIT_RESET (RID_COMPLEX, specbits);
10126 }
10127
8d08fdba
MS
10128 /* Decide whether an integer type is signed or not.
10129 Optionally treat bitfields as signed by default. */
10130 if (RIDBIT_SETP (RID_UNSIGNED, specbits)
b89c5a7b
MM
10131 /* [class.bit]
10132
10133 It is implementation-defined whether a plain (neither
10134 explicitly signed or unsigned) char, short, int, or long
10135 bit-field is signed or unsigned.
68642fb6 10136
b89c5a7b
MM
10137 Naturally, we extend this to long long as well. Note that
10138 this does not include wchar_t. */
10139 || (bitfield && !flag_signed_bitfields
10140 && RIDBIT_NOTSETP (RID_SIGNED, specbits)
10141 /* A typedef for plain `int' without `signed' can be
10142 controlled just like plain `int', but a typedef for
10143 `signed int' cannot be so controlled. */
68642fb6 10144 && !(typedef_decl
29bbeb1c 10145 && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
b89c5a7b
MM
10146 && (TREE_CODE (type) == INTEGER_TYPE
10147 || TREE_CODE (type) == CHAR_TYPE)
29bbeb1c 10148 && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
8d08fdba
MS
10149 {
10150 if (longlong)
10151 type = long_long_unsigned_type_node;
10152 else if (RIDBIT_SETP (RID_LONG, specbits))
10153 type = long_unsigned_type_node;
10154 else if (RIDBIT_SETP (RID_SHORT, specbits))
10155 type = short_unsigned_type_node;
10156 else if (type == char_type_node)
10157 type = unsigned_char_type_node;
10158 else if (typedef_decl)
10159 type = unsigned_type (type);
10160 else
10161 type = unsigned_type_node;
10162 }
10163 else if (RIDBIT_SETP (RID_SIGNED, specbits)
10164 && type == char_type_node)
10165 type = signed_char_type_node;
10166 else if (longlong)
10167 type = long_long_integer_type_node;
10168 else if (RIDBIT_SETP (RID_LONG, specbits))
10169 type = long_integer_type_node;
10170 else if (RIDBIT_SETP (RID_SHORT, specbits))
10171 type = short_integer_type_node;
10172
37c46b43
MS
10173 if (RIDBIT_SETP (RID_COMPLEX, specbits))
10174 {
10175 /* If we just have "complex", it is equivalent to
10176 "complex double", but if any modifiers at all are specified it is
10177 the complex form of TYPE. E.g, "complex short" is
10178 "complex short int". */
10179
10180 if (defaulted_int && ! longlong
10181 && ! (RIDBIT_SETP (RID_LONG, specbits)
10182 || RIDBIT_SETP (RID_SHORT, specbits)
10183 || RIDBIT_SETP (RID_SIGNED, specbits)
10184 || RIDBIT_SETP (RID_UNSIGNED, specbits)))
10185 type = complex_double_type_node;
10186 else if (type == integer_type_node)
10187 type = complex_integer_type_node;
10188 else if (type == float_type_node)
10189 type = complex_float_type_node;
10190 else if (type == double_type_node)
10191 type = complex_double_type_node;
10192 else if (type == long_double_type_node)
10193 type = complex_long_double_type_node;
10194 else
10195 type = build_complex_type (type);
10196 }
10197
3dbc07b6 10198 if (sfk == sfk_conversion
3ac3d9ea 10199 && (RIDBIT_SETP (RID_CONST, specbits)
91063b51
MM
10200 || RIDBIT_SETP (RID_VOLATILE, specbits)
10201 || RIDBIT_SETP (RID_RESTRICT, specbits)))
10202 cp_error ("qualifiers are not allowed on declaration of `operator %T'",
3ac3d9ea
MM
10203 ctor_return_type);
10204
8d08fdba
MS
10205 /* Set CONSTP if this declaration is `const', whether by
10206 explicit specification or via a typedef.
10207 Likewise for VOLATILEP. */
10208
91063b51 10209 constp = !! RIDBIT_SETP (RID_CONST, specbits) + CP_TYPE_CONST_P (type);
68642fb6 10210 restrictp =
91063b51 10211 !! RIDBIT_SETP (RID_RESTRICT, specbits) + CP_TYPE_RESTRICT_P (type);
68642fb6 10212 volatilep =
91063b51
MM
10213 !! RIDBIT_SETP (RID_VOLATILE, specbits) + CP_TYPE_VOLATILE_P (type);
10214 type_quals = ((constp ? TYPE_QUAL_CONST : 0)
10215 | (restrictp ? TYPE_QUAL_RESTRICT : 0)
10216 | (volatilep ? TYPE_QUAL_VOLATILE : 0));
10217 type = cp_build_qualified_type (type, type_quals);
8d08fdba
MS
10218 staticp = 0;
10219 inlinep = !! RIDBIT_SETP (RID_INLINE, specbits);
8d08fdba 10220 virtualp = RIDBIT_SETP (RID_VIRTUAL, specbits);
db5ae43f
MS
10221 RIDBIT_RESET (RID_VIRTUAL, specbits);
10222 explicitp = RIDBIT_SETP (RID_EXPLICIT, specbits) != 0;
10223 RIDBIT_RESET (RID_EXPLICIT, specbits);
8d08fdba 10224
8d08fdba
MS
10225 if (RIDBIT_SETP (RID_STATIC, specbits))
10226 staticp = 1 + (decl_context == FIELD);
10227
10228 if (virtualp && staticp == 2)
10229 {
8251199e 10230 cp_error ("member `%D' cannot be declared both virtual and static",
8d08fdba
MS
10231 dname);
10232 staticp = 0;
10233 }
10234 friendp = RIDBIT_SETP (RID_FRIEND, specbits);
8d08fdba
MS
10235 RIDBIT_RESET (RID_FRIEND, specbits);
10236
8d08fdba
MS
10237 /* Warn if two storage classes are given. Default to `auto'. */
10238
10239 if (RIDBIT_ANY_SET (specbits))
10240 {
10241 if (RIDBIT_SETP (RID_STATIC, specbits)) nclasses++;
10242 if (RIDBIT_SETP (RID_EXTERN, specbits)) nclasses++;
10243 if (decl_context == PARM && nclasses > 0)
8251199e 10244 error ("storage class specifiers invalid in parameter declarations");
8d08fdba
MS
10245 if (RIDBIT_SETP (RID_TYPEDEF, specbits))
10246 {
10247 if (decl_context == PARM)
8251199e 10248 error ("typedef declaration invalid in parameter declaration");
8d08fdba
MS
10249 nclasses++;
10250 }
10251 if (RIDBIT_SETP (RID_AUTO, specbits)) nclasses++;
10252 if (RIDBIT_SETP (RID_REGISTER, specbits)) nclasses++;
10253 }
10254
10255 /* Give error if `virtual' is used outside of class declaration. */
b7484fbe
MS
10256 if (virtualp
10257 && (current_class_name == NULL_TREE || decl_context != FIELD))
8d08fdba 10258 {
8251199e 10259 error ("virtual outside class declaration");
8d08fdba
MS
10260 virtualp = 0;
10261 }
8d08fdba
MS
10262
10263 /* Static anonymous unions are dealt with here. */
10264 if (staticp && decl_context == TYPENAME
10265 && TREE_CODE (declspecs) == TREE_LIST
6bdb8141 10266 && ANON_AGGR_TYPE_P (TREE_VALUE (declspecs)))
8d08fdba
MS
10267 decl_context = FIELD;
10268
8d08fdba
MS
10269 /* Warn about storage classes that are invalid for certain
10270 kinds of declarations (parameters, typenames, etc.). */
10271
10272 if (nclasses > 1)
8251199e 10273 error ("multiple storage classes in declaration of `%s'", name);
8d08fdba
MS
10274 else if (decl_context != NORMAL && nclasses > 0)
10275 {
db5ae43f 10276 if ((decl_context == PARM || decl_context == CATCHPARM)
8d08fdba
MS
10277 && (RIDBIT_SETP (RID_REGISTER, specbits)
10278 || RIDBIT_SETP (RID_AUTO, specbits)))
10279 ;
fc378698
MS
10280 else if (RIDBIT_SETP (RID_TYPEDEF, specbits))
10281 ;
8d08fdba 10282 else if (decl_context == FIELD
d363e7bf
AJ
10283 /* C++ allows static class elements */
10284 && RIDBIT_SETP (RID_STATIC, specbits))
10285 /* C++ also allows inlines and signed and unsigned elements,
10286 but in those cases we don't come in here. */
8d08fdba
MS
10287 ;
10288 else
10289 {
10290 if (decl_context == FIELD)
10291 {
b7484fbe
MS
10292 tree tmp = NULL_TREE;
10293 register int op = 0;
10294
10295 if (declarator)
10296 {
68642fb6 10297 /* Avoid trying to get an operand off an identifier node. */
9e9ff709
MS
10298 if (TREE_CODE (declarator) == IDENTIFIER_NODE)
10299 tmp = declarator;
10300 else
10301 tmp = TREE_OPERAND (declarator, 0);
b7484fbe 10302 op = IDENTIFIER_OPNAME_P (tmp);
596ea4e5
AS
10303 if (IDENTIFIER_TYPENAME_P (tmp))
10304 {
10305 if (IDENTIFIER_GLOBAL_VALUE (tmp)
5362b086 10306 && (TREE_CODE (IDENTIFIER_GLOBAL_VALUE (tmp))
596ea4e5
AS
10307 == TYPE_DECL))
10308 name = IDENTIFIER_POINTER (tmp);
10309 else
10310 name = "<invalid operator>";
10311 }
b7484fbe 10312 }
8251199e 10313 error ("storage class specified for %s `%s'",
6eabb241 10314 op ? "member operator" : "field",
596ea4e5 10315 name);
8d08fdba
MS
10316 }
10317 else
b9d12519
KG
10318 {
10319 if (decl_context == PARM || decl_context == CATCHPARM)
10320 error ("storage class specified for parameter `%s'", name);
10321 else
10322 error ("storage class specified for typename");
10323 }
8d08fdba
MS
10324 RIDBIT_RESET (RID_REGISTER, specbits);
10325 RIDBIT_RESET (RID_AUTO, specbits);
10326 RIDBIT_RESET (RID_EXTERN, specbits);
8d08fdba
MS
10327 }
10328 }
10329 else if (RIDBIT_SETP (RID_EXTERN, specbits) && initialized && !funcdef_flag)
10330 {
a9aedbc2 10331 if (toplevel_bindings_p ())
8d08fdba 10332 {
59be0cdd 10333 /* It's common practice (and completely valid) to have a const
8d08fdba 10334 be initialized and declared extern. */
950ad3c3 10335 if (!(type_quals & TYPE_QUAL_CONST))
8251199e 10336 warning ("`%s' initialized and declared `extern'", name);
8d08fdba
MS
10337 }
10338 else
8251199e 10339 error ("`%s' has both `extern' and initializer", name);
8d08fdba
MS
10340 }
10341 else if (RIDBIT_SETP (RID_EXTERN, specbits) && funcdef_flag
a9aedbc2 10342 && ! toplevel_bindings_p ())
8251199e 10343 error ("nested function `%s' declared `extern'", name);
a9aedbc2 10344 else if (toplevel_bindings_p ())
8d08fdba
MS
10345 {
10346 if (RIDBIT_SETP (RID_AUTO, specbits))
8251199e 10347 error ("top-level declaration of `%s' specifies `auto'", name);
8d08fdba
MS
10348 }
10349
909e536a 10350 if (nclasses > 0 && friendp)
8251199e 10351 error ("storage class specifiers invalid in friend function declarations");
909e536a 10352
8d08fdba
MS
10353 /* Now figure out the structure of the declarator proper.
10354 Descend through it, creating more complex types, until we reach
10355 the declared identifier (or NULL_TREE, in an absolute declarator). */
10356
1eab9b56 10357 inner_attrs = NULL_TREE;
68642fb6 10358 ignore_attrs = 0;
1eab9b56 10359
386b8a85
JM
10360 while (declarator && TREE_CODE (declarator) != IDENTIFIER_NODE
10361 && TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
8d08fdba
MS
10362 {
10363 /* Each level of DECLARATOR is either an ARRAY_REF (for ...[..]),
10364 an INDIRECT_REF (for *...),
10365 a CALL_EXPR (for ...(...)),
10366 an identifier (for the name being declared)
10367 or a null pointer (for the place in an absolute declarator
10368 where the name was omitted).
10369 For the last two cases, we have just exited the loop.
10370
10371 For C++ it could also be
10372 a SCOPE_REF (for class :: ...). In this case, we have converted
10373 sensible names to types, and those are the values we use to
10374 qualify the member name.
10375 an ADDR_EXPR (for &...),
10376 a BIT_NOT_EXPR (for destructors)
8d08fdba
MS
10377
10378 At this point, TYPE is the type of elements of an array,
10379 or for a function to return, or for a pointer to point to.
10380 After this sequence of ifs, TYPE is the type of the
10381 array or function or pointer, and DECLARATOR has had its
10382 outermost layer removed. */
10383
bd6dd845 10384 if (type == error_mark_node)
8d08fdba
MS
10385 {
10386 if (TREE_CODE (declarator) == SCOPE_REF)
10387 declarator = TREE_OPERAND (declarator, 1);
10388 else
10389 declarator = TREE_OPERAND (declarator, 0);
10390 continue;
10391 }
10392 if (quals != NULL_TREE
10393 && (declarator == NULL_TREE
10394 || TREE_CODE (declarator) != SCOPE_REF))
10395 {
10396 if (ctype == NULL_TREE && TREE_CODE (type) == METHOD_TYPE)
10397 ctype = TYPE_METHOD_BASETYPE (type);
10398 if (ctype != NULL_TREE)
10399 {
8d08fdba 10400 tree dummy = build_decl (TYPE_DECL, NULL_TREE, type);
535233a8 10401 grok_method_quals (ctype, dummy, quals);
8d08fdba 10402 type = TREE_TYPE (dummy);
535233a8 10403 ctype = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (type)));
8d08fdba
MS
10404 quals = NULL_TREE;
10405 }
10406 }
1eab9b56
JM
10407
10408 /* See the comment for the TREE_LIST case, below. */
10409 if (ignore_attrs)
10410 ignore_attrs = 0;
10411 else if (inner_attrs)
10412 {
10413 decl_attributes (type, inner_attrs, NULL_TREE);
10414 inner_attrs = NULL_TREE;
10415 }
10416
8d08fdba
MS
10417 switch (TREE_CODE (declarator))
10418 {
52fbc847
JM
10419 case TREE_LIST:
10420 {
10421 /* We encode a declarator with embedded attributes using
1eab9b56
JM
10422 a TREE_LIST. The attributes apply to the declarator
10423 directly inside them, so we have to skip an iteration
10424 before applying them to the type. If the declarator just
10425 inside is the declarator-id, we apply the attrs to the
10426 decl itself. */
10427 inner_attrs = TREE_PURPOSE (declarator);
10428 ignore_attrs = 1;
52fbc847 10429 declarator = TREE_VALUE (declarator);
52fbc847
JM
10430 }
10431 break;
10432
8d08fdba
MS
10433 case ARRAY_REF:
10434 {
2848ad0f 10435 register tree size;
8d08fdba 10436
2848ad0f 10437 size = TREE_OPERAND (declarator, 1);
8d08fdba 10438
f2e2cbd4 10439 /* VC++ spells a zero-sized array with []. */
e8ea7036
MM
10440 if (size == NULL_TREE && decl_context == FIELD && ! staticp
10441 && ! RIDBIT_SETP (RID_TYPEDEF, specbits))
f2e2cbd4
JM
10442 size = integer_zero_node;
10443
2848ad0f 10444 declarator = TREE_OPERAND (declarator, 0);
8d08fdba 10445
2848ad0f 10446 type = create_array_type_for_decl (dname, type, size);
c1b177ec
ML
10447
10448 /* VLAs never work as fields. */
5362b086 10449 if (decl_context == FIELD && !processing_template_decl
c1b177ec
ML
10450 && TREE_CODE (type) == ARRAY_TYPE
10451 && TYPE_DOMAIN (type) != NULL_TREE
10452 && !TREE_CONSTANT (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))
10453 {
10454 cp_error ("size of member `%D' is not constant", dname);
10455 /* Proceed with arbitrary constant size, so that offset
10456 computations don't get confused. */
10457 type = create_array_type_for_decl (dname, TREE_TYPE (type),
10458 integer_one_node);
10459 }
10460
8d08fdba
MS
10461 ctype = NULL_TREE;
10462 }
10463 break;
10464
10465 case CALL_EXPR:
10466 {
10467 tree arg_types;
f376e137 10468 int funcdecl_p;
43f887f9 10469 tree inner_parms = CALL_DECLARATOR_PARMS (declarator);
f376e137 10470 tree inner_decl = TREE_OPERAND (declarator, 0);
8d08fdba
MS
10471
10472 /* Declaring a function type.
10473 Make sure we have a valid type for the function to return. */
8d08fdba 10474
91063b51 10475 /* We now know that the TYPE_QUALS don't apply to the
14ae7e7d 10476 decl, but to its return type. */
91063b51 10477 type_quals = TYPE_UNQUALIFIED;
8d08fdba
MS
10478
10479 /* Warn about some types functions can't return. */
10480
10481 if (TREE_CODE (type) == FUNCTION_TYPE)
10482 {
8251199e 10483 error ("`%s' declared as function returning a function", name);
8d08fdba
MS
10484 type = integer_type_node;
10485 }
10486 if (TREE_CODE (type) == ARRAY_TYPE)
10487 {
8251199e 10488 error ("`%s' declared as function returning an array", name);
8d08fdba
MS
10489 type = integer_type_node;
10490 }
10491
f376e137
MS
10492 if (inner_decl && TREE_CODE (inner_decl) == SCOPE_REF)
10493 inner_decl = TREE_OPERAND (inner_decl, 1);
10494
68642fb6 10495 if (inner_decl && TREE_CODE (inner_decl) == TEMPLATE_ID_EXPR)
386b8a85
JM
10496 inner_decl = dname;
10497
b7484fbe 10498 /* Pick up type qualifiers which should be applied to `this'. */
43f887f9 10499 quals = CALL_DECLARATOR_QUALS (declarator);
b7484fbe 10500
c11b6f21 10501 /* Pick up the exception specifications. */
43f887f9 10502 raises = CALL_DECLARATOR_EXCEPTION_SPEC (declarator);
c11b6f21 10503
f376e137
MS
10504 /* Say it's a definition only for the CALL_EXPR
10505 closest to the identifier. */
beb53fb8 10506 funcdecl_p
68642fb6 10507 = inner_decl
386b8a85 10508 && (TREE_CODE (inner_decl) == IDENTIFIER_NODE
68642fb6 10509 || TREE_CODE (inner_decl) == TEMPLATE_ID_EXPR
386b8a85 10510 || TREE_CODE (inner_decl) == BIT_NOT_EXPR);
68642fb6 10511
8d08fdba
MS
10512 if (ctype == NULL_TREE
10513 && decl_context == FIELD
f376e137 10514 && funcdecl_p
8d08fdba
MS
10515 && (friendp == 0 || dname == current_class_name))
10516 ctype = current_class_type;
10517
3dbc07b6 10518 if (ctype && sfk == sfk_conversion)
8d08fdba
MS
10519 TYPE_HAS_CONVERSION (ctype) = 1;
10520 if (ctype && constructor_name (ctype) == dname)
10521 {
10522 /* We are within a class's scope. If our declarator name
10523 is the same as the class name, and we are defining
10524 a function, then it is a constructor/destructor, and
10525 therefore returns a void type. */
10526
10527 if (flags == DTOR_FLAG)
10528 {
cab1f180
ML
10529 /* ISO C++ 12.4/2. A destructor may not be
10530 declared const or volatile. A destructor may
10531 not be static. */
8d08fdba 10532 if (staticp == 2)
8251199e 10533 error ("destructor cannot be static member function");
b7484fbe 10534 if (quals)
8d08fdba 10535 {
4f70a846
MM
10536 cp_error ("destructors may not be `%s'",
10537 IDENTIFIER_POINTER (TREE_VALUE (quals)));
10538 quals = NULL_TREE;
8d08fdba
MS
10539 }
10540 if (decl_context == FIELD)
10541 {
4dacf5bd
KG
10542 if (! member_function_or_else (ctype,
10543 current_class_type,
10544 flags))
8d08fdba
MS
10545 return void_type_node;
10546 }
10547 }
2c73f9f5 10548 else /* It's a constructor. */
8d08fdba 10549 {
db5ae43f
MS
10550 if (explicitp == 1)
10551 explicitp = 2;
cab1f180
ML
10552 /* ISO C++ 12.1. A constructor may not be
10553 declared const or volatile. A constructor may
10554 not be virtual. A constructor may not be
10555 static. */
8d08fdba 10556 if (staticp == 2)
8251199e 10557 error ("constructor cannot be static member function");
8d08fdba
MS
10558 if (virtualp)
10559 {
8251199e 10560 pedwarn ("constructors cannot be declared virtual");
8d08fdba
MS
10561 virtualp = 0;
10562 }
b7484fbe 10563 if (quals)
8d08fdba 10564 {
4f70a846
MM
10565 cp_error ("constructors may not be `%s'",
10566 IDENTIFIER_POINTER (TREE_VALUE (quals)));
10567 quals = NULL_TREE;
d363e7bf 10568 }
8d08fdba 10569 {
51c184be 10570 RID_BIT_TYPE tmp_bits;
4e135bdd 10571 memcpy (&tmp_bits, &specbits, sizeof (RID_BIT_TYPE));
51c184be
MS
10572 RIDBIT_RESET (RID_INLINE, tmp_bits);
10573 RIDBIT_RESET (RID_STATIC, tmp_bits);
10574 if (RIDBIT_ANY_SET (tmp_bits))
8251199e 10575 error ("return value type specifier for constructor ignored");
8d08fdba 10576 }
6eabb241 10577 if (decl_context == FIELD)
8d08fdba 10578 {
4dacf5bd
KG
10579 if (! member_function_or_else (ctype,
10580 current_class_type,
10581 flags))
8d08fdba
MS
10582 return void_type_node;
10583 TYPE_HAS_CONSTRUCTOR (ctype) = 1;
3dbc07b6 10584 if (sfk != sfk_constructor)
8d08fdba
MS
10585 return NULL_TREE;
10586 }
10587 }
10588 if (decl_context == FIELD)
10589 staticp = 0;
10590 }
b7484fbe 10591 else if (friendp)
8d08fdba 10592 {
b7484fbe 10593 if (initialized)
8251199e 10594 error ("can't initialize friend function `%s'", name);
b7484fbe
MS
10595 if (virtualp)
10596 {
10597 /* Cannot be both friend and virtual. */
8251199e 10598 error ("virtual functions cannot be friends");
b7484fbe
MS
10599 RIDBIT_RESET (RID_FRIEND, specbits);
10600 friendp = 0;
10601 }
28cbf42c 10602 if (decl_context == NORMAL)
8251199e 10603 error ("friend declaration not in class definition");
28cbf42c 10604 if (current_function_decl && funcdef_flag)
8251199e 10605 cp_error ("can't define friend function `%s' in a local class definition",
28cbf42c 10606 name);
8d08fdba
MS
10607 }
10608
8d08fdba
MS
10609 /* Construct the function type and go to the next
10610 inner layer of declarator. */
10611
f376e137 10612 declarator = TREE_OPERAND (declarator, 0);
8d08fdba 10613
f376e137
MS
10614 /* FIXME: This is where default args should be fully
10615 processed. */
8d08fdba 10616
5cce22b6 10617 arg_types = grokparms (inner_parms);
8d08fdba 10618
4f70a846 10619 if (declarator && flags == DTOR_FLAG)
8d08fdba 10620 {
4f70a846
MM
10621 /* A destructor declared in the body of a class will
10622 be represented as a BIT_NOT_EXPR. But, we just
10623 want the underlying IDENTIFIER. */
8d08fdba 10624 if (TREE_CODE (declarator) == BIT_NOT_EXPR)
4f70a846 10625 declarator = TREE_OPERAND (declarator, 0);
68642fb6 10626
8b27e9ef 10627 if (arg_types != void_list_node)
8d08fdba 10628 {
4f70a846
MM
10629 cp_error ("destructors may not have parameters");
10630 arg_types = void_list_node;
10631 last_function_parms = NULL_TREE;
8d08fdba
MS
10632 }
10633 }
10634
d22c8596 10635 /* ANSI says that `const int foo ();'
8d08fdba 10636 does not make the function foo const. */
d22c8596 10637 type = build_function_type (type, arg_types);
42976354
BK
10638
10639 {
10640 tree t;
10641 for (t = arg_types; t; t = TREE_CHAIN (t))
10642 if (TREE_PURPOSE (t)
10643 && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
10644 {
10645 add_defarg_fn (type);
10646 break;
10647 }
10648 }
8d08fdba
MS
10649 }
10650 break;
10651
10652 case ADDR_EXPR:
10653 case INDIRECT_REF:
10654 /* Filter out pointers-to-references and references-to-references.
10655 We can get these if a TYPE_DECL is used. */
10656
10657 if (TREE_CODE (type) == REFERENCE_TYPE)
10658 {
8251199e 10659 error ("cannot declare %s to references",
8d08fdba
MS
10660 TREE_CODE (declarator) == ADDR_EXPR
10661 ? "references" : "pointers");
10662 declarator = TREE_OPERAND (declarator, 0);
10663 continue;
10664 }
10665
a5894242
MS
10666 if (TREE_CODE (type) == OFFSET_TYPE
10667 && (TREE_CODE (TREE_TYPE (type)) == VOID_TYPE
10668 || TREE_CODE (TREE_TYPE (type)) == REFERENCE_TYPE))
10669 {
8251199e 10670 cp_error ("cannot declare pointer to `%#T' member",
a5894242
MS
10671 TREE_TYPE (type));
10672 type = TREE_TYPE (type);
10673 }
10674
61a127b3
MM
10675 /* Merge any constancy or volatility into the target type
10676 for the pointer. */
10677
91063b51
MM
10678 /* We now know that the TYPE_QUALS don't apply to the decl,
10679 but to the target of the pointer. */
10680 type_quals = TYPE_UNQUALIFIED;
8d08fdba 10681
6eabb241 10682 if (TREE_CODE (declarator) == ADDR_EXPR)
8d08fdba 10683 {
69851283
MM
10684 if (TREE_CODE (type) == VOID_TYPE)
10685 error ("invalid type: `void &'");
8d08fdba 10686 else
69851283 10687 type = build_reference_type (type);
8d08fdba
MS
10688 }
10689 else if (TREE_CODE (type) == METHOD_TYPE)
d8f8dca1 10690 type = build_ptrmemfunc_type (build_pointer_type (type));
8d08fdba
MS
10691 else
10692 type = build_pointer_type (type);
10693
10694 /* Process a list of type modifier keywords (such as
10695 const or volatile) that were given inside the `*' or `&'. */
10696
10697 if (TREE_TYPE (declarator))
10698 {
10699 register tree typemodlist;
10700 int erred = 0;
91063b51
MM
10701
10702 constp = 0;
10703 volatilep = 0;
10704 restrictp = 0;
8d08fdba
MS
10705 for (typemodlist = TREE_TYPE (declarator); typemodlist;
10706 typemodlist = TREE_CHAIN (typemodlist))
10707 {
91063b51
MM
10708 tree qualifier = TREE_VALUE (typemodlist);
10709
10710 if (qualifier == ridpointers[(int) RID_CONST])
8d08fdba 10711 constp++;
91063b51 10712 else if (qualifier == ridpointers[(int) RID_VOLATILE])
8d08fdba 10713 volatilep++;
91063b51
MM
10714 else if (qualifier == ridpointers[(int) RID_RESTRICT])
10715 restrictp++;
8d08fdba
MS
10716 else if (!erred)
10717 {
10718 erred = 1;
91063b51 10719 error ("invalid type modifier within pointer declarator");
8d08fdba
MS
10720 }
10721 }
10722 if (constp > 1)
8251199e 10723 pedwarn ("duplicate `const'");
8d08fdba 10724 if (volatilep > 1)
8251199e 10725 pedwarn ("duplicate `volatile'");
91063b51
MM
10726 if (restrictp > 1)
10727 pedwarn ("duplicate `restrict'");
10728
10729 type_quals = ((constp ? TYPE_QUAL_CONST : 0)
10730 | (restrictp ? TYPE_QUAL_RESTRICT : 0)
10731 | (volatilep ? TYPE_QUAL_VOLATILE : 0));
a0a33927
MS
10732 if (TREE_CODE (declarator) == ADDR_EXPR
10733 && (constp || volatilep))
10734 {
10735 if (constp)
8251199e 10736 pedwarn ("discarding `const' applied to a reference");
a0a33927 10737 if (volatilep)
8251199e 10738 pedwarn ("discarding `volatile' applied to a reference");
91063b51 10739 type_quals &= ~(TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE);
a0a33927 10740 }
91063b51 10741 type = cp_build_qualified_type (type, type_quals);
8d08fdba
MS
10742 }
10743 declarator = TREE_OPERAND (declarator, 0);
10744 ctype = NULL_TREE;
10745 break;
10746
10747 case SCOPE_REF:
10748 {
10749 /* We have converted type names to NULL_TREE if the
10750 name was bogus, or to a _TYPE node, if not.
10751
10752 The variable CTYPE holds the type we will ultimately
10753 resolve to. The code here just needs to build
10754 up appropriate member types. */
10755 tree sname = TREE_OPERAND (declarator, 1);
386b8a85
JM
10756 tree t;
10757
8d08fdba
MS
10758 /* Destructors can have their visibilities changed as well. */
10759 if (TREE_CODE (sname) == BIT_NOT_EXPR)
10760 sname = TREE_OPERAND (sname, 0);
10761
10762 if (TREE_COMPLEXITY (declarator) == 0)
10763 /* This needs to be here, in case we are called
10764 multiple times. */ ;
9a68c51f
JM
10765 else if (TREE_COMPLEXITY (declarator) == -1)
10766 /* Namespace member. */
10767 pop_decl_namespace ();
8d08fdba 10768 else if (friendp && (TREE_COMPLEXITY (declarator) < 2))
2c73f9f5 10769 /* Don't fall out into global scope. Hides real bug? --eichin */ ;
5566b478
MS
10770 else if (! IS_AGGR_TYPE_CODE
10771 (TREE_CODE (TREE_OPERAND (declarator, 0))))
10772 ;
8d08fdba
MS
10773 else if (TREE_COMPLEXITY (declarator) == current_class_depth)
10774 {
9a3b49ac
MS
10775 /* Resolve any TYPENAME_TYPEs from the decl-specifier-seq
10776 that refer to ctype. They couldn't be resolved earlier
10777 because we hadn't pushed into the class yet.
10778 Example: resolve 'B<T>::type' in
10779 'B<typename B<T>::type> B<T>::f () { }'. */
10780 if (current_template_parms
10781 && uses_template_parms (type)
10782 && uses_template_parms (current_class_type))
10783 {
10784 tree args = current_template_args ();
4393e105 10785 type = tsubst (type, args, /*complain=*/1, NULL_TREE);
9a3b49ac
MS
10786 }
10787
a28e3c7f
MS
10788 /* This pop_nested_class corresponds to the
10789 push_nested_class used to push into class scope for
10790 parsing the argument list of a function decl, in
10791 qualified_id. */
b74a0560 10792 pop_nested_class ();
8d08fdba
MS
10793 TREE_COMPLEXITY (declarator) = current_class_depth;
10794 }
10795 else
10796 my_friendly_abort (16);
10797
10798 if (TREE_OPERAND (declarator, 0) == NULL_TREE)
10799 {
10800 /* We had a reference to a global decl, or
10801 perhaps we were given a non-aggregate typedef,
10802 in which case we cleared this out, and should just
10803 keep going as though it wasn't there. */
10804 declarator = sname;
10805 continue;
10806 }
10807 ctype = TREE_OPERAND (declarator, 0);
10808
386b8a85 10809 t = ctype;
68642fb6 10810 while (t != NULL_TREE && CLASS_TYPE_P (t))
386b8a85 10811 {
5362b086 10812 /* You're supposed to have one `template <...>'
da8a7456
MM
10813 for every template class, but you don't need one
10814 for a full specialization. For example:
10815
10816 template <class T> struct S{};
10817 template <> struct S<int> { void f(); };
10818 void S<int>::f () {}
10819
10820 is correct; there shouldn't be a `template <>' for
10821 the definition of `S<int>::f'. */
10822 if (CLASSTYPE_TEMPLATE_INFO (t)
10823 && (CLASSTYPE_TEMPLATE_INSTANTIATION (t)
92ecdfb7
NS
10824 || uses_template_parms (CLASSTYPE_TI_ARGS (t)))
10825 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t)))
386b8a85 10826 template_count += 1;
da8a7456 10827
386b8a85 10828 t = TYPE_MAIN_DECL (t);
92ecdfb7 10829 t = DECL_CONTEXT (t);
386b8a85
JM
10830 }
10831
8d08fdba
MS
10832 if (sname == NULL_TREE)
10833 goto done_scoping;
10834
10835 if (TREE_CODE (sname) == IDENTIFIER_NODE)
10836 {
10837 /* This is the `standard' use of the scoping operator:
10838 basetype :: member . */
10839
db5ae43f 10840 if (ctype == current_class_type)
28cbf42c
MS
10841 {
10842 /* class A {
10843 void A::f ();
10844 };
10845
10846 Is this ill-formed? */
10847
10848 if (pedantic)
8251199e 10849 cp_pedwarn ("extra qualification `%T::' on member `%s' ignored",
28cbf42c
MS
10850 ctype, name);
10851 }
db5ae43f 10852 else if (TREE_CODE (type) == FUNCTION_TYPE)
8d08fdba 10853 {
eeb75383 10854 if (current_class_type == NULL_TREE || friendp)
14ae7e7d
JM
10855 type = build_cplus_method_type (ctype, TREE_TYPE (type),
10856 TYPE_ARG_TYPES (type));
8d08fdba
MS
10857 else
10858 {
8251199e 10859 cp_error ("cannot declare member function `%T::%s' within `%T'",
a3203465 10860 ctype, name, current_class_type);
8d08fdba
MS
10861 return void_type_node;
10862 }
10863 }
5566b478 10864 else if (RIDBIT_SETP (RID_TYPEDEF, specbits)
d0f062fb 10865 || COMPLETE_TYPE_P (complete_type (ctype)))
8d08fdba 10866 {
2c73f9f5 10867 /* Have to move this code elsewhere in this function.
db5ae43f
MS
10868 this code is used for i.e., typedef int A::M; M *pm;
10869
10870 It is? How? jason 10/2/94 */
8d08fdba 10871
8d08fdba
MS
10872 if (current_class_type)
10873 {
8251199e 10874 cp_error ("cannot declare member `%T::%s' within `%T'",
db5ae43f
MS
10875 ctype, name, current_class_type);
10876 return void_type_node;
8d08fdba
MS
10877 }
10878 type = build_offset_type (ctype, type);
10879 }
8d08fdba 10880 else
eeb75383
NS
10881 {
10882 incomplete_type_error (NULL_TREE, ctype);
10883 return error_mark_node;
d363e7bf 10884 }
8d08fdba
MS
10885
10886 declarator = sname;
10887 }
8d08fdba
MS
10888 else if (TREE_CODE (sname) == SCOPE_REF)
10889 my_friendly_abort (17);
10890 else
10891 {
10892 done_scoping:
10893 declarator = TREE_OPERAND (declarator, 1);
10894 if (declarator && TREE_CODE (declarator) == CALL_EXPR)
10895 /* In this case, we will deal with it later. */
10896 ;
10897 else
10898 {
10899 if (TREE_CODE (type) == FUNCTION_TYPE)
14ae7e7d
JM
10900 type = build_cplus_method_type (ctype, TREE_TYPE (type),
10901 TYPE_ARG_TYPES (type));
8d08fdba
MS
10902 else
10903 type = build_offset_type (ctype, type);
10904 }
10905 }
10906 }
10907 break;
10908
10909 case BIT_NOT_EXPR:
10910 declarator = TREE_OPERAND (declarator, 0);
10911 break;
10912
8d08fdba
MS
10913 case RECORD_TYPE:
10914 case UNION_TYPE:
10915 case ENUMERAL_TYPE:
10916 declarator = NULL_TREE;
10917 break;
10918
10919 case ERROR_MARK:
10920 declarator = NULL_TREE;
10921 break;
10922
10923 default:
10924 my_friendly_abort (158);
10925 }
10926 }
10927
1eab9b56
JM
10928 /* See the comment for the TREE_LIST case, above. */
10929 if (inner_attrs)
10930 {
10931 if (! ignore_attrs)
10932 decl_attributes (type, inner_attrs, NULL_TREE);
10933 else if (attrlist)
10934 TREE_VALUE (attrlist) = chainon (inner_attrs, TREE_VALUE (attrlist));
10935 else
1f8f4a0b 10936 attrlist = build_tree_list (NULL_TREE, inner_attrs);
1eab9b56
JM
10937 }
10938
419c6212
JM
10939 /* Now TYPE has the actual type. */
10940
34fc957d 10941 if (explicitp == 1 || (explicitp && friendp))
db5ae43f 10942 {
34fc957d
NS
10943 /* [dcl.fct.spec] The explicit specifier shall only be used in
10944 declarations of constructors within a class definition. */
10945 error ("only declarations of constructors can be `explicit'");
db5ae43f
MS
10946 explicitp = 0;
10947 }
10948
f30432d7
MS
10949 if (RIDBIT_SETP (RID_MUTABLE, specbits))
10950 {
34fc957d
NS
10951 if (current_class_name == NULL_TREE || decl_context == PARM || friendp)
10952 {
10953 error ("non-member `%s' cannot be declared `mutable'", name);
10954 RIDBIT_RESET (RID_MUTABLE, specbits);
10955 }
10956 else if (decl_context == TYPENAME || RIDBIT_SETP (RID_TYPEDEF, specbits))
f30432d7 10957 {
34fc957d 10958 error ("non-object member `%s' cannot be declared `mutable'", name);
f30432d7
MS
10959 RIDBIT_RESET (RID_MUTABLE, specbits);
10960 }
34fc957d
NS
10961 else if (TREE_CODE (type) == FUNCTION_TYPE
10962 || TREE_CODE (type) == METHOD_TYPE)
10963 {
10964 error ("function `%s' cannot be declared `mutable'", name);
10965 RIDBIT_RESET (RID_MUTABLE, specbits);
10966 }
f30432d7
MS
10967 else if (staticp)
10968 {
8251199e 10969 error ("static `%s' cannot be declared `mutable'", name);
f30432d7
MS
10970 RIDBIT_RESET (RID_MUTABLE, specbits);
10971 }
34fc957d
NS
10972 else if (type_quals & TYPE_QUAL_CONST)
10973 {
10974 error ("const `%s' cannot be declared `mutable'", name);
10975 RIDBIT_RESET (RID_MUTABLE, specbits);
10976 }
f30432d7
MS
10977 }
10978
efe38fab
JM
10979 if (declarator == NULL_TREE
10980 || TREE_CODE (declarator) == IDENTIFIER_NODE
10981 || (TREE_CODE (declarator) == TEMPLATE_ID_EXPR
10982 && (TREE_CODE (type) == FUNCTION_TYPE
10983 || TREE_CODE (type) == METHOD_TYPE)))
10984 /* OK */;
10985 else if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
10986 {
10987 cp_error ("template-id `%D' used as a declarator", declarator);
10988 declarator = dname;
10989 }
10990 else
419c6212 10991 /* Unexpected declarator format. */
efe38fab
JM
10992 my_friendly_abort (990210);
10993
419c6212
JM
10994 /* If this is declaring a typedef name, return a TYPE_DECL. */
10995
fc378698 10996 if (RIDBIT_SETP (RID_TYPEDEF, specbits) && decl_context != TYPENAME)
8d08fdba
MS
10997 {
10998 tree decl;
10999
11000 /* Note that the grammar rejects storage classes
11001 in typenames, fields or parameters. */
eff71ab0
PB
11002 if (current_lang_name == lang_name_java)
11003 TYPE_FOR_JAVA (type) = 1;
8d08fdba 11004
d2e5ee5c
MS
11005 if (decl_context == FIELD)
11006 {
094fe153 11007 if (declarator == constructor_name (current_class_type))
cb9a3ff8 11008 cp_pedwarn ("ISO C++ forbids nested type `%D' with same name as enclosing class",
d2e5ee5c
MS
11009 declarator);
11010 decl = build_lang_decl (TYPE_DECL, declarator, type);
d2e5ee5c
MS
11011 }
11012 else
6dfbb909 11013 decl = build_decl (TYPE_DECL, declarator, type);
d2e5ee5c 11014
9188c363
MM
11015 /* If the user declares "typedef struct {...} foo" then the
11016 struct will have an anonymous name. Fill that name in now.
11017 Nothing can refer to it, so nothing needs know about the name
11018 change. */
8d08fdba 11019 if (type != error_mark_node
2bdb0643 11020 && declarator
8d08fdba
MS
11021 && TYPE_NAME (type)
11022 && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
b537d120
MM
11023 && ANON_AGGRNAME_P (TYPE_IDENTIFIER (type))
11024 && CP_TYPE_QUALS (type) == TYPE_UNQUALIFIED)
8d08fdba 11025 {
dcd08efc
JM
11026 tree oldname = TYPE_NAME (type);
11027 tree t;
11028
2c73f9f5 11029 /* Replace the anonymous name with the real name everywhere. */
8d08fdba 11030 lookup_tag_reverse (type, declarator);
dcd08efc
JM
11031 for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
11032 if (TYPE_NAME (t) == oldname)
11033 TYPE_NAME (t) = decl;
8d08fdba
MS
11034
11035 if (TYPE_LANG_SPECIFIC (type))
11036 TYPE_WAS_ANONYMOUS (type) = 1;
11037
33964bf4
MM
11038 /* If this is a typedef within a template class, the nested
11039 type is a (non-primary) template. The name for the
11040 template needs updating as well. */
11041 if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
68642fb6 11042 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type))
33964bf4
MM
11043 = TYPE_IDENTIFIER (type);
11044
50a6dbd7
JM
11045 /* FIXME remangle member functions; member functions of a
11046 type with external linkage have external linkage. */
fc378698 11047 }
fc378698 11048
8d08fdba
MS
11049 if (TREE_CODE (type) == OFFSET_TYPE || TREE_CODE (type) == METHOD_TYPE)
11050 {
8251199e 11051 cp_error_at ("typedef name may not be class-qualified", decl);
a3203465 11052 return NULL_TREE;
8d08fdba
MS
11053 }
11054 else if (quals)
11055 {
11056 if (ctype == NULL_TREE)
11057 {
11058 if (TREE_CODE (type) != METHOD_TYPE)
cb9a3ff8 11059 cp_error_at ("invalid type qualifier for non-member function type", decl);
8d08fdba
MS
11060 else
11061 ctype = TYPE_METHOD_BASETYPE (type);
11062 }
11063 if (ctype != NULL_TREE)
11064 grok_method_quals (ctype, decl, quals);
11065 }
11066
11067 if (RIDBIT_SETP (RID_SIGNED, specbits)
11068 || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
11069 C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
11070
c91a56d2
MS
11071 bad_specifiers (decl, "type", virtualp, quals != NULL_TREE,
11072 inlinep, friendp, raises != NULL_TREE);
11073
11074 if (initialized)
8251199e 11075 error ("typedef declaration includes an initializer");
c91a56d2 11076
8d08fdba
MS
11077 return decl;
11078 }
11079
11080 /* Detect the case of an array type of unspecified size
11081 which came, as such, direct from a typedef name.
11082 We must copy the type, so that each identifier gets
11083 a distinct type, so that each identifier's size can be
11084 controlled separately by its own initializer. */
11085
11086 if (type == typedef_type && TREE_CODE (type) == ARRAY_TYPE
11087 && TYPE_DOMAIN (type) == NULL_TREE)
11088 {
11089 type = build_cplus_array_type (TREE_TYPE (type), TYPE_DOMAIN (type));
11090 }
11091
11092 /* If this is a type name (such as, in a cast or sizeof),
11093 compute the type and return it now. */
11094
11095 if (decl_context == TYPENAME)
11096 {
11097 /* Note that the grammar rejects storage classes
11098 in typenames, fields or parameters. */
91063b51 11099 if (type_quals != TYPE_UNQUALIFIED)
6eabb241 11100 type_quals = TYPE_UNQUALIFIED;
8d08fdba
MS
11101
11102 /* Special case: "friend class foo" looks like a TYPENAME context. */
11103 if (friendp)
11104 {
91063b51 11105 if (type_quals != TYPE_UNQUALIFIED)
b7484fbe 11106 {
91063b51
MM
11107 cp_error ("type qualifiers specified for friend class declaration");
11108 type_quals = TYPE_UNQUALIFIED;
b7484fbe
MS
11109 }
11110 if (inlinep)
11111 {
8251199e 11112 cp_error ("`inline' specified for friend class declaration");
b7484fbe
MS
11113 inlinep = 0;
11114 }
f2ae0c45
JM
11115
11116 /* Until core issue 180 is resolved, allow 'friend typename A::B'.
c00996a3 11117 But don't allow implicit typenames except with a class-key. */
f2ae0c45
JM
11118 if (!current_aggr && (TREE_CODE (type) != TYPENAME_TYPE
11119 || IMPLICIT_TYPENAME_P (type)))
4b054b80
NS
11120 {
11121 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
f2ae0c45
JM
11122 cp_pedwarn ("template parameters cannot be friends");
11123 else if (TREE_CODE (type) == TYPENAME_TYPE)
11124 cp_pedwarn ("\
11125friend declaration requires class-key, i.e. `friend class %T::%T'",
11126 constructor_name (current_class_type),
11127 TYPE_IDENTIFIER (type));
4b054b80 11128 else
f2ae0c45
JM
11129 cp_pedwarn ("\
11130friend declaration requires class-key, i.e. `friend %#T'",
11131 type);
4b054b80 11132 }
b7484fbe
MS
11133
11134 /* Only try to do this stuff if we didn't already give up. */
11135 if (type != integer_type_node)
11136 {
788bf0e3
NS
11137 /* DR 209. The friendly class does not need to be accessible
11138 in the scope of the class granting friendship. */
11139 skip_type_access_control ();
d363e7bf 11140
b7484fbe
MS
11141 /* A friendly class? */
11142 if (current_class_type)
11143 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type));
11144 else
2ae7bada
NS
11145 cp_error ("trying to make class `%T' a friend of global scope",
11146 type);
d363e7bf 11147
b7484fbe
MS
11148 type = void_type_node;
11149 }
8d08fdba
MS
11150 }
11151 else if (quals)
11152 {
8d08fdba
MS
11153 if (ctype == NULL_TREE)
11154 {
41cbc04c
NS
11155 if (TREE_CODE (type) != METHOD_TYPE)
11156 cp_error ("invalid qualifiers on non-member function type");
11157 else
11158 ctype = TYPE_METHOD_BASETYPE (type);
11159 }
11160 if (ctype)
11161 {
11162 tree dummy = build_decl (TYPE_DECL, declarator, type);
11163 grok_method_quals (ctype, dummy, quals);
11164 type = TREE_TYPE (dummy);
8d08fdba 11165 }
8d08fdba
MS
11166 }
11167
11168 return type;
11169 }
11170 else if (declarator == NULL_TREE && decl_context != PARM
db5ae43f 11171 && decl_context != CATCHPARM
8d08fdba
MS
11172 && TREE_CODE (type) != UNION_TYPE
11173 && ! bitfield)
11174 {
8251199e 11175 cp_error ("abstract declarator `%T' used as declaration", type);
8d08fdba
MS
11176 declarator = make_anon_name ();
11177 }
11178
11179 /* `void' at top level (not within pointer)
11180 is allowed only in typedefs or type names.
11181 We don't complain about parms either, but that is because
11182 a better error message can be made later. */
11183
a1774733 11184 if (TREE_CODE (type) == VOID_TYPE && decl_context != PARM)
8d08fdba 11185 {
b7484fbe 11186 if (! declarator)
8251199e 11187 error ("unnamed variable or field declared void");
b7484fbe 11188 else if (TREE_CODE (declarator) == IDENTIFIER_NODE)
8d08fdba
MS
11189 {
11190 if (IDENTIFIER_OPNAME_P (declarator))
8d08fdba 11191 my_friendly_abort (356);
8d08fdba 11192 else
8251199e 11193 error ("variable or field `%s' declared void", name);
8d08fdba
MS
11194 }
11195 else
8251199e 11196 error ("variable or field declared void");
8d08fdba
MS
11197 type = integer_type_node;
11198 }
11199
11200 /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
11201 or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE. */
11202
14ae7e7d
JM
11203 if (decl_context == PARM || decl_context == CATCHPARM)
11204 {
11205 if (ctype || in_namespace)
11206 error ("cannot use `::' in parameter declaration");
11207
11208 /* A parameter declared as an array of T is really a pointer to T.
11209 One declared as a function is really a pointer to a function.
11210 One declared as a member is really a pointer to member. */
11211
11212 if (TREE_CODE (type) == ARRAY_TYPE)
11213 {
11214 /* Transfer const-ness of array into that of type pointed to. */
11215 type = build_pointer_type (TREE_TYPE (type));
91063b51 11216 type_quals = TYPE_UNQUALIFIED;
14ae7e7d
JM
11217 }
11218 else if (TREE_CODE (type) == FUNCTION_TYPE)
11219 type = build_pointer_type (type);
11220 else if (TREE_CODE (type) == OFFSET_TYPE)
11221 type = build_pointer_type (type);
14ae7e7d 11222 }
68642fb6 11223
8d08fdba
MS
11224 {
11225 register tree decl;
11226
11227 if (decl_context == PARM)
11228 {
ff350acd 11229 decl = build_decl (PARM_DECL, declarator, type);
8d08fdba
MS
11230
11231 bad_specifiers (decl, "parameter", virtualp, quals != NULL_TREE,
11232 inlinep, friendp, raises != NULL_TREE);
8d08fdba
MS
11233
11234 /* Compute the type actually passed in the parmlist,
11235 for the case where there is no prototype.
11236 (For example, shorts and chars are passed as ints.)
11237 When there is a prototype, this is overridden later. */
11238
39211cd5 11239 DECL_ARG_TYPE (decl) = type_promotes_to (type);
8d08fdba
MS
11240 }
11241 else if (decl_context == FIELD)
11242 {
11243 if (type == error_mark_node)
11244 {
11245 /* Happens when declaring arrays of sizes which
11246 are error_mark_node, for example. */
11247 decl = NULL_TREE;
11248 }
997a088c 11249 else if (in_namespace && !friendp)
05008fb9
MM
11250 {
11251 /* Something like struct S { int N::j; }; */
8251199e 11252 cp_error ("invalid use of `::'");
05008fb9
MM
11253 decl = NULL_TREE;
11254 }
8d08fdba
MS
11255 else if (TREE_CODE (type) == FUNCTION_TYPE)
11256 {
11257 int publicp = 0;
e1467ff2 11258 tree function_context;
8d08fdba 11259
72b7eeff
MS
11260 /* We catch the others as conflicts with the builtin
11261 typedefs. */
11262 if (friendp && declarator == ridpointers[(int) RID_SIGNED])
11263 {
8251199e 11264 cp_error ("function `%D' cannot be declared friend",
72b7eeff
MS
11265 declarator);
11266 friendp = 0;
11267 }
11268
8d08fdba
MS
11269 if (friendp == 0)
11270 {
11271 if (ctype == NULL_TREE)
11272 ctype = current_class_type;
11273
11274 if (ctype == NULL_TREE)
11275 {
8251199e 11276 cp_error ("can't make `%D' into a method -- not in a class",
8d08fdba
MS
11277 declarator);
11278 return void_type_node;
11279 }
11280
11281 /* ``A union may [ ... ] not [ have ] virtual functions.''
11282 ARM 9.5 */
11283 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
11284 {
8251199e 11285 cp_error ("function `%D' declared virtual inside a union",
8d08fdba
MS
11286 declarator);
11287 return void_type_node;
11288 }
11289
596ea4e5
AS
11290 if (declarator == ansi_opname (NEW_EXPR)
11291 || declarator == ansi_opname (VEC_NEW_EXPR)
11292 || declarator == ansi_opname (DELETE_EXPR)
11293 || declarator == ansi_opname (VEC_DELETE_EXPR))
8d08fdba
MS
11294 {
11295 if (virtualp)
11296 {
8251199e 11297 cp_error ("`%D' cannot be declared virtual, since it is always static",
8d08fdba
MS
11298 declarator);
11299 virtualp = 0;
11300 }
11301 }
11302 else if (staticp < 2)
14ae7e7d
JM
11303 type = build_cplus_method_type (ctype, TREE_TYPE (type),
11304 TYPE_ARG_TYPES (type));
8d08fdba
MS
11305 }
11306
11307 /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node. */
68642fb6 11308 function_context = (ctype != NULL_TREE) ?
4f1c5b7d 11309 decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
e1467ff2
MM
11310 publicp = (! friendp || ! staticp)
11311 && function_context == NULL_TREE;
68642fb6 11312 decl = grokfndecl (ctype, type,
386b8a85
JM
11313 TREE_CODE (declarator) != TEMPLATE_ID_EXPR
11314 ? declarator : dname,
11315 declarator,
7a8f9fa9 11316 virtualp, flags, quals, raises,
386b8a85 11317 friendp ? -1 : 0, friendp, publicp, inlinep,
2c73f9f5 11318 funcdef_flag, template_count, in_namespace);
20496fa2 11319 if (decl == NULL_TREE)
3ddfb0e6 11320 return decl;
6125f3be
DE
11321#if 0
11322 /* This clobbers the attrs stored in `decl' from `attrlist'. */
11323 /* The decl and setting of decl_machine_attr is also turned off. */
71851aaa 11324 decl = build_decl_attribute_variant (decl, decl_machine_attr);
6125f3be 11325#endif
f0e01782 11326
cc804e51
MM
11327 /* [class.conv.ctor]
11328
11329 A constructor declared without the function-specifier
11330 explicit that can be called with a single parameter
11331 specifies a conversion from the type of its first
11332 parameter to the type of its class. Such a constructor
11333 is called a converting constructor. */
db5ae43f
MS
11334 if (explicitp == 2)
11335 DECL_NONCONVERTING_P (decl) = 1;
cc804e51
MM
11336 else if (DECL_CONSTRUCTOR_P (decl))
11337 {
11338 /* The constructor can be called with exactly one
11339 parameter if there is at least one parameter, and
11340 any subsequent parameters have default arguments.
e0fff4b3
JM
11341 Ignore any compiler-added parms. */
11342 tree arg_types = FUNCTION_FIRST_USER_PARMTYPE (decl);
cc804e51
MM
11343
11344 if (arg_types == void_list_node
68642fb6
UD
11345 || (arg_types
11346 && TREE_CHAIN (arg_types)
cc804e51
MM
11347 && TREE_CHAIN (arg_types) != void_list_node
11348 && !TREE_PURPOSE (TREE_CHAIN (arg_types))))
11349 DECL_NONCONVERTING_P (decl) = 1;
11350 }
8d08fdba
MS
11351 }
11352 else if (TREE_CODE (type) == METHOD_TYPE)
11353 {
faae18ab
MS
11354 /* We only get here for friend declarations of
11355 members of other classes. */
8d08fdba
MS
11356 /* All method decls are public, so tell grokfndecl to set
11357 TREE_PUBLIC, also. */
386b8a85 11358 decl = grokfndecl (ctype, type, declarator, declarator,
7a8f9fa9 11359 virtualp, flags, quals, raises,
386b8a85 11360 friendp ? -1 : 0, friendp, 1, 0, funcdef_flag,
2c73f9f5 11361 template_count, in_namespace);
f0e01782
MS
11362 if (decl == NULL_TREE)
11363 return NULL_TREE;
8d08fdba 11364 }
5566b478 11365 else if (!staticp && ! processing_template_decl
d0f062fb 11366 && !COMPLETE_TYPE_P (complete_type (type))
8d08fdba
MS
11367 && (TREE_CODE (type) != ARRAY_TYPE || initialized == 0))
11368 {
b7484fbe 11369 if (declarator)
8251199e 11370 cp_error ("field `%D' has incomplete type", declarator);
b7484fbe 11371 else
8251199e 11372 cp_error ("name `%T' has incomplete type", type);
8d08fdba
MS
11373
11374 /* If we're instantiating a template, tell them which
11375 instantiation made the field's type be incomplete. */
11376 if (current_class_type
11377 && TYPE_NAME (current_class_type)
d2e5ee5c 11378 && IDENTIFIER_TEMPLATE (TYPE_IDENTIFIER (current_class_type))
8d08fdba
MS
11379 && declspecs && TREE_VALUE (declspecs)
11380 && TREE_TYPE (TREE_VALUE (declspecs)) == type)
8251199e 11381 cp_error (" in instantiation of template `%T'",
db5ae43f
MS
11382 current_class_type);
11383
8d08fdba
MS
11384 type = error_mark_node;
11385 decl = NULL_TREE;
11386 }
11387 else
11388 {
11389 if (friendp)
11390 {
cb9a3ff8 11391 error ("`%s' is neither function nor member function; cannot be declared friend",
8d08fdba
MS
11392 IDENTIFIER_POINTER (declarator));
11393 friendp = 0;
11394 }
11395 decl = NULL_TREE;
11396 }
11397
11398 if (friendp)
11399 {
11400 /* Friends are treated specially. */
788bf0e3
NS
11401 tree t = NULL_TREE;
11402
11403 /* DR 209. The friend does not need to be accessible at this
11404 point. */
11405 skip_type_access_control ();
11406
8d08fdba 11407 if (ctype == current_class_type)
8251199e 11408 warning ("member functions are implicitly friends of their class");
6c30752f 11409
788bf0e3
NS
11410 if (decl && DECL_NAME (decl))
11411 {
11412 if (template_class_depth (current_class_type) == 0)
11413 {
11414 decl = check_explicit_specialization
11415 (declarator, decl,
11416 template_count, 2 * (funcdef_flag != 0) + 4);
11417 if (decl == error_mark_node)
11418 return error_mark_node;
11419 }
11420
11421 t = do_friend (ctype, declarator, decl,
11422 last_function_parms, attrlist, flags, quals,
11423 funcdef_flag);
11424 }
11425 if (t && funcdef_flag)
11426 return t;
11427 return void_type_node;
8d08fdba
MS
11428 }
11429
11430 /* Structure field. It may not be a function, except for C++ */
11431
11432 if (decl == NULL_TREE)
11433 {
8d08fdba
MS
11434 if (initialized)
11435 {
3ac3d9ea
MM
11436 if (!staticp)
11437 {
11438 /* An attempt is being made to initialize a non-static
11439 member. But, from [class.mem]:
68642fb6 11440
3ac3d9ea
MM
11441 4 A member-declarator can contain a
11442 constant-initializer only if it declares a static
11443 member (_class.static_) of integral or enumeration
68642fb6 11444 type, see _class.static.data_.
3ac3d9ea
MM
11445
11446 This used to be relatively common practice, but
11447 the rest of the compiler does not correctly
11448 handle the initialization unless the member is
11449 static so we make it static below. */
cab1f180 11450 cp_pedwarn ("ISO C++ forbids initialization of member `%D'",
3ac3d9ea 11451 declarator);
8251199e 11452 cp_pedwarn ("making `%D' static", declarator);
3ac3d9ea
MM
11453 staticp = 1;
11454 }
11455
6ba89f8e
MM
11456 if (uses_template_parms (type))
11457 /* We'll check at instantiation time. */
11458 ;
11459 else if (check_static_variable_definition (declarator,
11460 type))
11461 /* If we just return the declaration, crashes
11462 will sometimes occur. We therefore return
72a93143
JM
11463 void_type_node, as if this was a friend
11464 declaration, to cause callers to completely
11465 ignore this declaration. */
6ba89f8e 11466 return void_type_node;
8d08fdba
MS
11467 }
11468
8ebeee52 11469 /* 9.2p13 [class.mem] */
4d7614e9 11470 if (declarator == constructor_name (current_class_type)
e54930f9
JM
11471 /* The standard does not allow non-static data members
11472 here either, but we agreed at the 10/99 meeting
11473 to change that in TC 1 so that they are allowed in
11474 classes with no user-defined constructors. */
11475 && staticp)
11476 cp_pedwarn ("ISO C++ forbids static data member `%D' with same name as enclosing class",
8ebeee52
JM
11477 declarator);
11478
3ac3d9ea 11479 if (staticp)
8d08fdba 11480 {
f18a14bc
MM
11481 /* C++ allows static class members. All other work
11482 for this is done by grokfield. */
4ce3d537 11483 decl = build_lang_decl (VAR_DECL, declarator, type);
5b605f68
MS
11484 TREE_STATIC (decl) = 1;
11485 /* In class context, 'static' means public access. */
3ac3d9ea 11486 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl) = 1;
8d08fdba
MS
11487 }
11488 else
11489 {
721c3b42 11490 decl = build_decl (FIELD_DECL, declarator, type);
2bf105ab 11491 DECL_NONADDRESSABLE_P (decl) = bitfield;
8d08fdba
MS
11492 if (RIDBIT_SETP (RID_MUTABLE, specbits))
11493 {
11494 DECL_MUTABLE_P (decl) = 1;
11495 RIDBIT_RESET (RID_MUTABLE, specbits);
11496 }
11497 }
11498
11499 bad_specifiers (decl, "field", virtualp, quals != NULL_TREE,
11500 inlinep, friendp, raises != NULL_TREE);
11501 }
11502 }
11503 else if (TREE_CODE (type) == FUNCTION_TYPE || TREE_CODE (type) == METHOD_TYPE)
11504 {
386b8a85 11505 tree original_name;
8d08fdba
MS
11506 int publicp = 0;
11507
11508 if (! declarator)
11509 return NULL_TREE;
11510
386b8a85
JM
11511 if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
11512 original_name = dname;
11513 else
11514 original_name = declarator;
11515
8926095f 11516 if (RIDBIT_SETP (RID_AUTO, specbits))
8251199e 11517 error ("storage class `auto' invalid for function `%s'", name);
8926095f 11518 else if (RIDBIT_SETP (RID_REGISTER, specbits))
8251199e 11519 error ("storage class `register' invalid for function `%s'", name);
8d08fdba
MS
11520
11521 /* Function declaration not at top level.
11522 Storage classes other than `extern' are not allowed
11523 and `extern' makes no difference. */
a9aedbc2 11524 if (! toplevel_bindings_p ()
8926095f
MS
11525 && (RIDBIT_SETP (RID_STATIC, specbits)
11526 || RIDBIT_SETP (RID_INLINE, specbits))
8d08fdba 11527 && pedantic)
8926095f
MS
11528 {
11529 if (RIDBIT_SETP (RID_STATIC, specbits))
8251199e 11530 pedwarn ("storage class `static' invalid for function `%s' declared out of global scope", name);
8926095f 11531 else
8251199e 11532 pedwarn ("storage class `inline' invalid for function `%s' declared out of global scope", name);
8926095f 11533 }
68642fb6 11534
8d08fdba
MS
11535 if (ctype == NULL_TREE)
11536 {
11537 if (virtualp)
11538 {
8251199e 11539 error ("virtual non-class function `%s'", name);
8d08fdba
MS
11540 virtualp = 0;
11541 }
8d08fdba
MS
11542 }
11543 else if (TREE_CODE (type) == FUNCTION_TYPE && staticp < 2)
14ae7e7d
JM
11544 type = build_cplus_method_type (ctype, TREE_TYPE (type),
11545 TYPE_ARG_TYPES (type));
8d08fdba 11546
eb66be0e 11547 /* Record presence of `static'. */
faae18ab 11548 publicp = (ctype != NULL_TREE
a9aedbc2 11549 || RIDBIT_SETP (RID_EXTERN, specbits)
eb66be0e 11550 || !RIDBIT_SETP (RID_STATIC, specbits));
8d08fdba 11551
386b8a85 11552 decl = grokfndecl (ctype, type, original_name, declarator,
7a8f9fa9 11553 virtualp, flags, quals, raises,
75650646 11554 1, friendp,
68642fb6 11555 publicp, inlinep, funcdef_flag,
2c73f9f5 11556 template_count, in_namespace);
f0e01782
MS
11557 if (decl == NULL_TREE)
11558 return NULL_TREE;
8d08fdba 11559
8d08fdba
MS
11560 if (staticp == 1)
11561 {
11562 int illegal_static = 0;
11563
11564 /* Don't allow a static member function in a class, and forbid
11565 declaring main to be static. */
11566 if (TREE_CODE (type) == METHOD_TYPE)
11567 {
8251199e 11568 cp_pedwarn ("cannot declare member function `%D' to have static linkage", decl);
8d08fdba
MS
11569 illegal_static = 1;
11570 }
8d08fdba
MS
11571 else if (current_function_decl)
11572 {
11573 /* FIXME need arm citation */
8251199e 11574 error ("cannot declare static function inside another function");
8d08fdba
MS
11575 illegal_static = 1;
11576 }
11577
11578 if (illegal_static)
11579 {
11580 staticp = 0;
11581 RIDBIT_RESET (RID_STATIC, specbits);
11582 }
11583 }
8d08fdba
MS
11584 }
11585 else
11586 {
11587 /* It's a variable. */
11588
11589 /* An uninitialized decl with `extern' is a reference. */
68642fb6
UD
11590 decl = grokvardecl (type, declarator, &specbits,
11591 initialized,
11592 (type_quals & TYPE_QUAL_CONST) != 0,
950ad3c3 11593 in_namespace);
8d08fdba
MS
11594 bad_specifiers (decl, "variable", virtualp, quals != NULL_TREE,
11595 inlinep, friendp, raises != NULL_TREE);
11596
11597 if (ctype)
11598 {
f0e01782 11599 DECL_CONTEXT (decl) = ctype;
8d08fdba
MS
11600 if (staticp == 1)
11601 {
8251199e 11602 cp_pedwarn ("static member `%D' re-declared as static", decl);
8d08fdba
MS
11603 staticp = 0;
11604 RIDBIT_RESET (RID_STATIC, specbits);
11605 }
b7484fbe
MS
11606 if (RIDBIT_SETP (RID_REGISTER, specbits) && TREE_STATIC (decl))
11607 {
8251199e 11608 cp_error ("static member `%D' declared `register'", decl);
b7484fbe
MS
11609 RIDBIT_RESET (RID_REGISTER, specbits);
11610 }
f30432d7 11611 if (RIDBIT_SETP (RID_EXTERN, specbits) && pedantic)
8d08fdba 11612 {
8251199e 11613 cp_pedwarn ("cannot explicitly declare member `%#D' to have extern linkage",
f30432d7 11614 decl);
8d08fdba
MS
11615 RIDBIT_RESET (RID_EXTERN, specbits);
11616 }
11617 }
11618 }
11619
34fc957d 11620 my_friendly_assert (!RIDBIT_SETP (RID_MUTABLE, specbits), 19990927);
8d08fdba
MS
11621
11622 /* Record `register' declaration for warnings on &
11623 and in case doing stupid register allocation. */
11624
11625 if (RIDBIT_SETP (RID_REGISTER, specbits))
11626 DECL_REGISTER (decl) = 1;
11627
8926095f
MS
11628 if (RIDBIT_SETP (RID_EXTERN, specbits))
11629 DECL_THIS_EXTERN (decl) = 1;
11630
faae18ab
MS
11631 if (RIDBIT_SETP (RID_STATIC, specbits))
11632 DECL_THIS_STATIC (decl) = 1;
11633
adecb3f4
MM
11634 /* Record constancy and volatility. There's no need to do this
11635 when processing a template; we'll do this for the instantiated
11636 declaration based on the type of DECL. */
11637 if (!processing_template_decl)
11638 c_apply_type_quals_to_decl (type_quals, decl);
8d08fdba
MS
11639
11640 return decl;
11641 }
11642}
11643\f
11644/* Tell if a parmlist/exprlist looks like an exprlist or a parmlist.
11645 An empty exprlist is a parmlist. An exprlist which
11646 contains only identifiers at the global level
11647 is a parmlist. Otherwise, it is an exprlist. */
e92cc029 11648
8d08fdba
MS
11649int
11650parmlist_is_exprlist (exprs)
11651 tree exprs;
11652{
11653 if (exprs == NULL_TREE || TREE_PARMLIST (exprs))
11654 return 0;
11655
a9aedbc2 11656 if (toplevel_bindings_p ())
8d08fdba
MS
11657 {
11658 /* At the global level, if these are all identifiers,
11659 then it is a parmlist. */
11660 while (exprs)
11661 {
11662 if (TREE_CODE (TREE_VALUE (exprs)) != IDENTIFIER_NODE)
11663 return 1;
11664 exprs = TREE_CHAIN (exprs);
11665 }
11666 return 0;
11667 }
11668 return 1;
11669}
11670
f181d4ae
MM
11671/* Subroutine of start_function. Ensure that each of the parameter
11672 types (as listed in PARMS) is complete, as is required for a
11673 function definition. */
e92cc029 11674
8d08fdba
MS
11675static void
11676require_complete_types_for_parms (parms)
11677 tree parms;
11678{
07c88314 11679 for (; parms; parms = TREE_CHAIN (parms))
8d08fdba 11680 {
5cce22b6
NS
11681 if (VOID_TYPE_P (TREE_TYPE (parms)))
11682 /* grokparms will have already issued an error */
11683 TREE_TYPE (parms) = error_mark_node;
11684 else if (complete_type_or_else (TREE_TYPE (parms), parms))
42f989ff 11685 layout_decl (parms, 0);
5cce22b6
NS
11686 else
11687 TREE_TYPE (parms) = error_mark_node;
8d08fdba
MS
11688 }
11689}
11690
46e8c075 11691/* Returns non-zero if T is a local variable. */
297e73d8 11692
46e8c075
MM
11693int
11694local_variable_p (t)
11695 tree t;
297e73d8 11696{
68642fb6 11697 if ((TREE_CODE (t) == VAR_DECL
297e73d8
MM
11698 /* A VAR_DECL with a context that is a _TYPE is a static data
11699 member. */
11700 && !TYPE_P (CP_DECL_CONTEXT (t))
11701 /* Any other non-local variable must be at namespace scope. */
46e8c075 11702 && !DECL_NAMESPACE_SCOPE_P (t))
297e73d8 11703 || (TREE_CODE (t) == PARM_DECL))
46e8c075 11704 return 1;
297e73d8 11705
46e8c075
MM
11706 return 0;
11707}
11708
11709/* Returns non-zero if T is an automatic local variable or a label.
11710 (These are the declarations that need to be remapped when the code
11711 containing them is duplicated.) */
11712
11713int
11714nonstatic_local_decl_p (t)
11715 tree t;
11716{
11717 return ((local_variable_p (t) && !TREE_STATIC (t))
11718 || TREE_CODE (t) == LABEL_DECL
11719 || TREE_CODE (t) == RESULT_DECL);
11720}
11721
11722/* Like local_variable_p, but suitable for use as a tree-walking
11723 function. */
11724
11725static tree
11726local_variable_p_walkfn (tp, walk_subtrees, data)
11727 tree *tp;
11728 int *walk_subtrees ATTRIBUTE_UNUSED;
11729 void *data ATTRIBUTE_UNUSED;
11730{
68642fb6 11731 return ((local_variable_p (*tp) && !DECL_ARTIFICIAL (*tp))
46e8c075 11732 ? *tp : NULL_TREE);
297e73d8
MM
11733}
11734
11735/* Check that ARG, which is a default-argument expression for a
11736 parameter DECL, is legal. Returns ARG, or ERROR_MARK_NODE, if
11737 something goes wrong. DECL may also be a _TYPE node, rather than a
11738 DECL, if there is no DECL available. */
11739
11740tree
11741check_default_argument (decl, arg)
11742 tree decl;
11743 tree arg;
11744{
11745 tree var;
11746 tree decl_type;
11747
11748 if (TREE_CODE (arg) == DEFAULT_ARG)
11749 /* We get a DEFAULT_ARG when looking at an in-class declaration
11750 with a default argument. Ignore the argument for now; we'll
11751 deal with it after the class is complete. */
11752 return arg;
11753
11754 if (processing_template_decl || uses_template_parms (arg))
11755 /* We don't do anything checking until instantiation-time. Note
11756 that there may be uninstantiated arguments even for an
11757 instantiated function, since default arguments are not
11758 instantiated until they are needed. */
11759 return arg;
11760
11761 if (TYPE_P (decl))
11762 {
11763 decl_type = decl;
11764 decl = NULL_TREE;
11765 }
11766 else
11767 decl_type = TREE_TYPE (decl);
11768
68642fb6 11769 if (arg == error_mark_node
297e73d8
MM
11770 || decl == error_mark_node
11771 || TREE_TYPE (arg) == error_mark_node
11772 || decl_type == error_mark_node)
11773 /* Something already went wrong. There's no need to check
11774 further. */
11775 return error_mark_node;
11776
11777 /* [dcl.fct.default]
68642fb6 11778
297e73d8
MM
11779 A default argument expression is implicitly converted to the
11780 parameter type. */
11781 if (!TREE_TYPE (arg)
11782 || !can_convert_arg (decl_type, TREE_TYPE (arg), arg))
11783 {
11784 if (decl)
68642fb6 11785 cp_error ("default argument for `%#D' has type `%T'",
297e73d8
MM
11786 decl, TREE_TYPE (arg));
11787 else
8614a1d6 11788 cp_error ("default argument for parameter of type `%T' has type `%T'",
297e73d8
MM
11789 decl_type, TREE_TYPE (arg));
11790
11791 return error_mark_node;
11792 }
11793
11794 /* [dcl.fct.default]
11795
11796 Local variables shall not be used in default argument
68642fb6 11797 expressions.
297e73d8
MM
11798
11799 The keyword `this' shall not be used in a default argument of a
11800 member function. */
5362b086 11801 var = walk_tree_without_duplicates (&arg, local_variable_p_walkfn,
ee94fce6 11802 NULL);
297e73d8
MM
11803 if (var)
11804 {
11805 cp_error ("default argument `%E' uses local variable `%D'",
11806 arg, var);
11807 return error_mark_node;
11808 }
11809
11810 /* All is well. */
11811 return arg;
11812}
11813
8d08fdba
MS
11814/* Decode the list of parameter types for a function type.
11815 Given the list of things declared inside the parens,
11816 return a list of types.
11817
5cce22b6
NS
11818 We determine whether ellipsis parms are used by PARMLIST_ELLIPSIS_P
11819 flag. If unset, we append void_list_node. A parmlist declared
11820 as `(void)' is accepted as the empty parmlist.
11821
11822 Also set last_function_parms to the chain of PARM_DECLs. */
8d08fdba
MS
11823
11824static tree
5cce22b6 11825grokparms (first_parm)
8d08fdba 11826 tree first_parm;
8d08fdba
MS
11827{
11828 tree result = NULL_TREE;
11829 tree decls = NULL_TREE;
5cce22b6
NS
11830 int ellipsis = !first_parm || PARMLIST_ELLIPSIS_P (first_parm);
11831 tree parm, chain;
11832 int any_error = 0;
8d08fdba 11833
5cce22b6
NS
11834 my_friendly_assert (!first_parm || TREE_PARMLIST (first_parm), 20001115);
11835
11836 for (parm = first_parm; parm != NULL_TREE; parm = chain)
8d08fdba 11837 {
0657c69c 11838 tree type = NULL_TREE;
5cce22b6
NS
11839 register tree decl = TREE_VALUE (parm);
11840 tree init = TREE_PURPOSE (parm);
8d08fdba 11841
5cce22b6
NS
11842 chain = TREE_CHAIN (parm);
11843 /* @@ weak defense against parse errors. */
11844 if (TREE_CODE (decl) != VOID_TYPE
11845 && TREE_CODE (decl) != TREE_LIST)
8d08fdba 11846 {
5cce22b6
NS
11847 /* Give various messages as the need arises. */
11848 if (TREE_CODE (decl) == STRING_CST)
11849 cp_error ("invalid string constant `%E'", decl);
11850 else if (TREE_CODE (decl) == INTEGER_CST)
11851 error ("invalid integer constant in parameter list, did you forget to give parameter name?");
11852 continue;
11853 }
8d08fdba 11854
5cce22b6
NS
11855 if (parm == void_list_node)
11856 break;
8d08fdba 11857
5cce22b6 11858 decl = grokdeclarator (TREE_VALUE (decl), TREE_PURPOSE (decl),
d363e7bf 11859 PARM, init != NULL_TREE, NULL_TREE);
5cce22b6
NS
11860 if (! decl || TREE_TYPE (decl) == error_mark_node)
11861 continue;
d363e7bf 11862
5cce22b6
NS
11863 type = TREE_TYPE (decl);
11864 if (VOID_TYPE_P (type))
11865 {
11866 if (same_type_p (type, void_type_node)
11867 && !DECL_NAME (decl) && !result && !chain && !ellipsis)
11868 /* this is a parmlist of `(void)', which is ok. */
11869 break;
11870 incomplete_type_error (decl, type);
0657c69c
MM
11871 /* It's not a good idea to actually create parameters of
11872 type `void'; other parts of the compiler assume that a
11873 void type terminates the parameter list. */
04f3dc2b 11874 type = error_mark_node;
0657c69c 11875 TREE_TYPE (decl) = error_mark_node;
5cce22b6 11876 }
8d08fdba 11877
d363e7bf 11878 if (type != error_mark_node)
04f3dc2b
MM
11879 {
11880 /* Top-level qualifiers on the parameters are
11881 ignored for function types. */
11882 type = TYPE_MAIN_VARIANT (type);
11883 if (TREE_CODE (type) == METHOD_TYPE)
11884 {
11885 cp_error ("parameter `%D' invalidly declared method type", decl);
11886 type = build_pointer_type (type);
11887 TREE_TYPE (decl) = type;
11888 }
11889 else if (TREE_CODE (type) == OFFSET_TYPE)
11890 {
11891 cp_error ("parameter `%D' invalidly declared offset type", decl);
11892 type = build_pointer_type (type);
11893 TREE_TYPE (decl) = type;
11894 }
11895 else if (abstract_virtuals_error (decl, type))
11896 any_error = 1; /* Seems like a good idea. */
11897 else if (POINTER_TYPE_P (type))
11898 {
11899 /* [dcl.fct]/6, parameter types cannot contain pointers
11900 (references) to arrays of unknown bound. */
98979fe0
NS
11901 tree t = TREE_TYPE (type);
11902 int ptr = TYPE_PTR_P (type);
11903
11904 while (1)
11905 {
11906 if (TYPE_PTR_P (t))
11907 ptr = 1;
11908 else if (TREE_CODE (t) != ARRAY_TYPE)
11909 break;
11910 else if (!TYPE_DOMAIN (t))
11911 break;
11912 t = TREE_TYPE (t);
11913 }
04f3dc2b
MM
11914 if (TREE_CODE (t) == ARRAY_TYPE)
11915 cp_error ("parameter `%D' includes %s to array of unknown bound `%T'",
98979fe0 11916 decl, ptr ? "pointer" : "reference", t);
04f3dc2b
MM
11917 }
11918
11919 DECL_ARG_TYPE (decl) = TREE_TYPE (decl);
11920 if (PROMOTE_PROTOTYPES
11921 && (TREE_CODE (type) == INTEGER_TYPE
11922 || TREE_CODE (type) == ENUMERAL_TYPE)
11923 && TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node))
11924 DECL_ARG_TYPE (decl) = integer_type_node;
11925 if (!any_error && init)
11926 init = check_default_argument (decl, init);
11927 else
11928 init = NULL_TREE;
11929 }
8d08fdba 11930
5cce22b6
NS
11931 TREE_CHAIN (decl) = decls;
11932 decls = decl;
0657c69c 11933 result = tree_cons (init, type, result);
8d08fdba 11934 }
5cce22b6
NS
11935 decls = nreverse (decls);
11936 result = nreverse (result);
11937 if (!ellipsis)
11938 result = chainon (result, void_list_node);
8d08fdba
MS
11939 last_function_parms = decls;
11940
8d08fdba
MS
11941 return result;
11942}
42976354 11943
8d08fdba 11944\f
4f1c5b7d
MM
11945/* D is a constructor or overloaded `operator='. Returns non-zero if
11946 D's arguments allow it to be a copy constructor, or copy assignment
11947 operator. */
11948
c11b6f21
MS
11949int
11950copy_args_p (d)
11951 tree d;
11952{
4f1c5b7d
MM
11953 tree t;
11954
11955 if (!DECL_FUNCTION_MEMBER_P (d))
11956 return 0;
11957
e0fff4b3 11958 t = FUNCTION_FIRST_USER_PARMTYPE (d);
c11b6f21
MS
11959 if (t && TREE_CODE (TREE_VALUE (t)) == REFERENCE_TYPE
11960 && (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_VALUE (t)))
4f1c5b7d 11961 == DECL_CONTEXT (d))
c11b6f21
MS
11962 && (TREE_CHAIN (t) == NULL_TREE
11963 || TREE_CHAIN (t) == void_list_node
11964 || TREE_PURPOSE (TREE_CHAIN (t))))
11965 return 1;
11966 return 0;
11967}
11968
8d08fdba
MS
11969/* These memoizing functions keep track of special properties which
11970 a class may have. `grok_ctor_properties' notices whether a class
11971 has a constructor of the form X(X&), and also complains
11972 if the class has a constructor of the form X(X).
11973 `grok_op_properties' takes notice of the various forms of
11974 operator= which are defined, as well as what sorts of type conversion
11975 may apply. Both functions take a FUNCTION_DECL as an argument. */
e92cc029 11976
a0a33927 11977int
8d08fdba
MS
11978grok_ctor_properties (ctype, decl)
11979 tree ctype, decl;
11980{
e0fff4b3 11981 tree parmtypes = FUNCTION_FIRST_USER_PARMTYPE (decl);
8d08fdba
MS
11982 tree parmtype = parmtypes ? TREE_VALUE (parmtypes) : void_type_node;
11983
f181d4ae
MM
11984 /* [class.copy]
11985
11986 A non-template constructor for class X is a copy constructor if
11987 its first parameter is of type X&, const X&, volatile X& or const
11988 volatile X&, and either there are no other parameters or else all
11989 other parameters have default arguments. */
8d08fdba 11990 if (TREE_CODE (parmtype) == REFERENCE_TYPE
0b41abe6 11991 && TYPE_MAIN_VARIANT (TREE_TYPE (parmtype)) == ctype
a11d04b5 11992 && sufficient_parms_p (TREE_CHAIN (parmtypes))
f181d4ae
MM
11993 && !(DECL_TEMPLATE_INSTANTIATION (decl)
11994 && is_member_template (DECL_TI_TEMPLATE (decl))))
0b41abe6
JM
11995 {
11996 TYPE_HAS_INIT_REF (ctype) = 1;
91063b51 11997 if (CP_TYPE_CONST_P (TREE_TYPE (parmtype)))
0b41abe6 11998 TYPE_HAS_CONST_INIT_REF (ctype) = 1;
8d08fdba 11999 }
f181d4ae
MM
12000 /* [class.copy]
12001
12002 A declaration of a constructor for a class X is ill-formed if its
12003 first parameter is of type (optionally cv-qualified) X and either
12004 there are no other parameters or else all other parameters have
68642fb6 12005 default arguments.
f181d4ae
MM
12006
12007 We *don't* complain about member template instantiations that
12008 have this form, though; they can occur as we try to decide what
12009 constructor to use during overload resolution. Since overload
12010 resolution will never prefer such a constructor to the
12011 non-template copy constructor (which is either explicitly or
12012 implicitly defined), there's no need to worry about their
12013 existence. Theoretically, they should never even be
12014 instantiated, but that's hard to forestall. */
0b41abe6 12015 else if (TYPE_MAIN_VARIANT (parmtype) == ctype
a11d04b5 12016 && sufficient_parms_p (TREE_CHAIN (parmtypes))
f181d4ae
MM
12017 && !(DECL_TEMPLATE_INSTANTIATION (decl)
12018 && is_member_template (DECL_TI_TEMPLATE (decl))))
8d08fdba 12019 {
8251199e 12020 cp_error ("invalid constructor; you probably meant `%T (const %T&)'",
0b41abe6
JM
12021 ctype, ctype);
12022 SET_IDENTIFIER_ERROR_LOCUS (DECL_NAME (decl), ctype);
12023 return 0;
8d08fdba
MS
12024 }
12025 else if (TREE_CODE (parmtype) == VOID_TYPE
12026 || TREE_PURPOSE (parmtypes) != NULL_TREE)
12027 TYPE_HAS_DEFAULT_CONSTRUCTOR (ctype) = 1;
a0a33927
MS
12028
12029 return 1;
8d08fdba
MS
12030}
12031
596ea4e5 12032/* An operator with this code is unary, but can also be binary. */
e92cc029 12033
a28e3c7f 12034static int
596ea4e5
AS
12035ambi_op_p (code)
12036 enum tree_code code;
8d08fdba 12037{
596ea4e5
AS
12038 return (code == INDIRECT_REF
12039 || code == ADDR_EXPR
12040 || code == CONVERT_EXPR
12041 || code == NEGATE_EXPR
12042 || code == PREINCREMENT_EXPR
12043 || code == PREDECREMENT_EXPR);
8d08fdba
MS
12044}
12045
12046/* An operator with this name can only be unary. */
e92cc029 12047
a28e3c7f 12048static int
596ea4e5
AS
12049unary_op_p (code)
12050 enum tree_code code;
8d08fdba 12051{
596ea4e5
AS
12052 return (code == TRUTH_NOT_EXPR
12053 || code == BIT_NOT_EXPR
12054 || code == COMPONENT_REF
12055 || code == TYPE_EXPR);
8d08fdba
MS
12056}
12057
12058/* Do a little sanity-checking on how they declared their operator. */
e92cc029 12059
5566b478 12060void
8d08fdba
MS
12061grok_op_properties (decl, virtualp, friendp)
12062 tree decl;
12063 int virtualp, friendp;
12064{
12065 tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
596ea4e5 12066 tree argtype;
8d08fdba
MS
12067 int methodp = (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE);
12068 tree name = DECL_NAME (decl);
596ea4e5
AS
12069 enum tree_code operator_code;
12070 int arity;
12071
12072 /* Count the number of arguments. */
12073 for (argtype = argtypes, arity = 0;
12074 argtype && argtype != void_list_node;
12075 argtype = TREE_CHAIN (argtype))
12076 ++arity;
8d08fdba 12077
a28e3c7f
MS
12078 if (current_class_type == NULL_TREE)
12079 friendp = 1;
8d08fdba 12080
596ea4e5
AS
12081 if (DECL_CONV_FN_P (decl))
12082 operator_code = TYPE_EXPR;
12083 else
12084 do
12085 {
669ec2b4
JM
12086#define DEF_OPERATOR(NAME, CODE, NEW_MANGLING, OLD_MANGING, ARITY, ASSN_P) \
12087 if (ansi_opname (CODE) == name) \
12088 { \
12089 operator_code = CODE; \
12090 break; \
12091 } \
12092 else if (ansi_assopname (CODE) == name) \
12093 { \
12094 operator_code = CODE; \
12095 DECL_ASSIGNMENT_OPERATOR_P (decl) = 1; \
12096 break; \
596ea4e5
AS
12097 }
12098
12099#include "operators.def"
12100#undef DEF_OPERATOR
12101
12102 my_friendly_abort (20000527);
12103 }
12104 while (0);
12105 my_friendly_assert (operator_code != LAST_CPLUS_TREE_CODE, 20000526);
12106 SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
12107
a28e3c7f
MS
12108 if (! friendp)
12109 {
596ea4e5
AS
12110 switch (operator_code)
12111 {
12112 case CALL_EXPR:
12113 TYPE_OVERLOADS_CALL_EXPR (current_class_type) = 1;
12114 break;
5362b086 12115
596ea4e5
AS
12116 case ARRAY_REF:
12117 TYPE_OVERLOADS_ARRAY_REF (current_class_type) = 1;
12118 break;
f181d4ae 12119
596ea4e5
AS
12120 case COMPONENT_REF:
12121 case MEMBER_REF:
12122 TYPE_OVERLOADS_ARROW (current_class_type) = 1;
12123 break;
5362b086 12124
596ea4e5
AS
12125 case NEW_EXPR:
12126 TYPE_HAS_NEW_OPERATOR (current_class_type) = 1;
12127 break;
5362b086 12128
596ea4e5
AS
12129 case DELETE_EXPR:
12130 TYPE_GETS_DELETE (current_class_type) |= 1;
12131 break;
5362b086 12132
596ea4e5
AS
12133 case VEC_NEW_EXPR:
12134 TYPE_HAS_ARRAY_NEW_OPERATOR (current_class_type) = 1;
12135 break;
5362b086 12136
596ea4e5
AS
12137 case VEC_DELETE_EXPR:
12138 TYPE_GETS_DELETE (current_class_type) |= 2;
12139 break;
12140
12141 default:
12142 break;
12143 }
12144 }
12145
12146 if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR)
8d08fdba 12147 {
8d08fdba
MS
12148 /* When the compiler encounters the definition of A::operator new, it
12149 doesn't look at the class declaration to find out if it's static. */
a28e3c7f 12150 if (methodp)
3afb32a4 12151 revert_static_member_fn (decl);
68642fb6 12152
36791f1e 12153 TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
8d08fdba 12154 }
596ea4e5 12155 else if (operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
8d08fdba 12156 {
a28e3c7f 12157 if (methodp)
3afb32a4 12158 revert_static_member_fn (decl);
68642fb6 12159
36791f1e 12160 TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
8d08fdba 12161 }
8d08fdba
MS
12162 else
12163 {
12164 /* An operator function must either be a non-static member function
12165 or have at least one parameter of a class, a reference to a class,
12166 an enumeration, or a reference to an enumeration. 13.4.0.6 */
700f8a87 12167 if (! methodp || DECL_STATIC_FUNCTION_P (decl))
8d08fdba 12168 {
596ea4e5
AS
12169 if (operator_code == TYPE_EXPR
12170 || operator_code == CALL_EXPR
12171 || operator_code == COMPONENT_REF
12172 || operator_code == ARRAY_REF
12173 || operator_code == NOP_EXPR)
8251199e 12174 cp_error ("`%D' must be a nonstatic member function", decl);
8d08fdba
MS
12175 else
12176 {
12177 tree p = argtypes;
12178
700f8a87 12179 if (DECL_STATIC_FUNCTION_P (decl))
8251199e 12180 cp_error ("`%D' must be either a non-static member function or a non-member function", decl);
700f8a87 12181
8d08fdba 12182 if (p)
a1774733 12183 for (; TREE_CODE (TREE_VALUE (p)) != VOID_TYPE ; p = TREE_CHAIN (p))
8d08fdba
MS
12184 {
12185 tree arg = TREE_VALUE (p);
12186 if (TREE_CODE (arg) == REFERENCE_TYPE)
12187 arg = TREE_TYPE (arg);
12188
12189 /* This lets bad template code slip through. */
12190 if (IS_AGGR_TYPE (arg)
12191 || TREE_CODE (arg) == ENUMERAL_TYPE
73b0fce8 12192 || TREE_CODE (arg) == TEMPLATE_TYPE_PARM
a1281f45 12193 || TREE_CODE (arg) == BOUND_TEMPLATE_TEMPLATE_PARM)
8d08fdba
MS
12194 goto foundaggr;
12195 }
8251199e
JM
12196 cp_error
12197 ("`%D' must have an argument of class or enumerated type",
8d08fdba
MS
12198 decl);
12199 foundaggr:
12200 ;
12201 }
12202 }
68642fb6 12203
596ea4e5 12204 if (operator_code == CALL_EXPR)
2c73f9f5 12205 return; /* No restrictions on args. */
8d08fdba 12206
9a3b49ac 12207 if (IDENTIFIER_TYPENAME_P (name) && ! DECL_TEMPLATE_INFO (decl))
a0a33927
MS
12208 {
12209 tree t = TREE_TYPE (name);
17708e90 12210 if (! friendp)
a0a33927
MS
12211 {
12212 int ref = (TREE_CODE (t) == REFERENCE_TYPE);
d8e178a0 12213 const char *what = 0;
5362b086 12214
a0a33927
MS
12215 if (ref)
12216 t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
12217
17708e90
NS
12218 if (TREE_CODE (t) == VOID_TYPE)
12219 what = "void";
12220 else if (t == current_class_type)
a0a33927 12221 what = "the same type";
9a3b49ac 12222 /* Don't force t to be complete here. */
a0a33927 12223 else if (IS_AGGR_TYPE (t)
d0f062fb 12224 && COMPLETE_TYPE_P (t)
a0a33927
MS
12225 && DERIVED_FROM_P (t, current_class_type))
12226 what = "a base class";
12227
12228 if (what)
8251199e 12229 warning ("conversion to %s%s will never use a type conversion operator",
a0a33927
MS
12230 ref ? "a reference to " : "", what);
12231 }
12232 }
12233
5362b086 12234 if (DECL_ASSIGNMENT_OPERATOR_P (decl)
596ea4e5 12235 && operator_code == NOP_EXPR)
8d08fdba
MS
12236 {
12237 tree parmtype;
12238
596ea4e5 12239 if (arity != 2 && methodp)
8d08fdba 12240 {
8251199e 12241 cp_error ("`%D' must take exactly one argument", decl);
8d08fdba
MS
12242 return;
12243 }
12244 parmtype = TREE_VALUE (TREE_CHAIN (argtypes));
12245
596ea4e5
AS
12246 /* [class.copy]
12247
12248 A user-declared copy assignment operator X::operator= is
12249 a non-static non-template member function of class X with
12250 exactly one parameter of type X, X&, const X&, volatile
12251 X& or const volatile X&. */
f0e01782 12252 if (copy_assignment_arg_p (parmtype, virtualp)
596ea4e5
AS
12253 && !(DECL_TEMPLATE_INSTANTIATION (decl)
12254 && is_member_template (DECL_TI_TEMPLATE (decl)))
a28e3c7f 12255 && ! friendp)
8d08fdba
MS
12256 {
12257 TYPE_HAS_ASSIGN_REF (current_class_type) = 1;
f0e01782 12258 if (TREE_CODE (parmtype) != REFERENCE_TYPE
91063b51 12259 || CP_TYPE_CONST_P (TREE_TYPE (parmtype)))
8d08fdba
MS
12260 TYPE_HAS_CONST_ASSIGN_REF (current_class_type) = 1;
12261 }
12262 }
596ea4e5 12263 else if (operator_code == COND_EXPR)
8d08fdba
MS
12264 {
12265 /* 13.4.0.3 */
cb9a3ff8 12266 cp_error ("ISO C++ prohibits overloading operator ?:");
68642fb6 12267 }
596ea4e5 12268 else if (ambi_op_p (operator_code))
8d08fdba 12269 {
596ea4e5
AS
12270 if (arity == 1)
12271 /* We pick the one-argument operator codes by default, so
12272 we don't have to change anything. */
12273 ;
12274 else if (arity == 2)
8d08fdba 12275 {
596ea4e5
AS
12276 /* If we thought this was a unary operator, we now know
12277 it to be a binary operator. */
12278 switch (operator_code)
12279 {
12280 case INDIRECT_REF:
12281 operator_code = MULT_EXPR;
12282 break;
12283
12284 case ADDR_EXPR:
12285 operator_code = BIT_AND_EXPR;
12286 break;
12287
12288 case CONVERT_EXPR:
12289 operator_code = PLUS_EXPR;
12290 break;
12291
12292 case NEGATE_EXPR:
12293 operator_code = MINUS_EXPR;
12294 break;
12295
12296 case PREINCREMENT_EXPR:
12297 operator_code = POSTINCREMENT_EXPR;
12298 break;
12299
12300 case PREDECREMENT_EXPR:
655dc6ee 12301 operator_code = POSTDECREMENT_EXPR;
596ea4e5
AS
12302 break;
12303
12304 default:
12305 my_friendly_abort (20000527);
12306 }
12307
12308 SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
12309
12310 if ((operator_code == POSTINCREMENT_EXPR
12311 || operator_code == POSTDECREMENT_EXPR)
5156628f 12312 && ! processing_template_decl
007e5fea 12313 && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)), integer_type_node))
8d08fdba
MS
12314 {
12315 if (methodp)
8251199e 12316 cp_error ("postfix `%D' must take `int' as its argument",
8d08fdba
MS
12317 decl);
12318 else
8251199e
JM
12319 cp_error
12320 ("postfix `%D' must take `int' as its second argument",
12321 decl);
8d08fdba
MS
12322 }
12323 }
12324 else
12325 {
12326 if (methodp)
8251199e 12327 cp_error ("`%D' must take either zero or one argument", decl);
8d08fdba 12328 else
8251199e 12329 cp_error ("`%D' must take either one or two arguments", decl);
8d08fdba 12330 }
824b9a4c
MS
12331
12332 /* More Effective C++ rule 6. */
eb448459 12333 if (warn_ecpp
596ea4e5
AS
12334 && (operator_code == POSTINCREMENT_EXPR
12335 || operator_code == POSTDECREMENT_EXPR
12336 || operator_code == PREINCREMENT_EXPR
12337 || operator_code == PREDECREMENT_EXPR))
824b9a4c
MS
12338 {
12339 tree arg = TREE_VALUE (argtypes);
12340 tree ret = TREE_TYPE (TREE_TYPE (decl));
12341 if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
12342 arg = TREE_TYPE (arg);
12343 arg = TYPE_MAIN_VARIANT (arg);
596ea4e5
AS
12344 if (operator_code == PREINCREMENT_EXPR
12345 || operator_code == PREDECREMENT_EXPR)
824b9a4c
MS
12346 {
12347 if (TREE_CODE (ret) != REFERENCE_TYPE
3bfdc719
MM
12348 || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)),
12349 arg))
8251199e 12350 cp_warning ("prefix `%D' should return `%T'", decl,
824b9a4c
MS
12351 build_reference_type (arg));
12352 }
12353 else
12354 {
3bfdc719 12355 if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
8251199e 12356 cp_warning ("postfix `%D' should return `%T'", decl, arg);
824b9a4c
MS
12357 }
12358 }
8d08fdba 12359 }
596ea4e5 12360 else if (unary_op_p (operator_code))
8d08fdba 12361 {
596ea4e5 12362 if (arity != 1)
8d08fdba
MS
12363 {
12364 if (methodp)
8251199e 12365 cp_error ("`%D' must take `void'", decl);
8d08fdba 12366 else
8251199e 12367 cp_error ("`%D' must take exactly one argument", decl);
8d08fdba
MS
12368 }
12369 }
596ea4e5 12370 else /* if (binary_op_p (operator_code)) */
8d08fdba 12371 {
596ea4e5 12372 if (arity != 2)
8d08fdba
MS
12373 {
12374 if (methodp)
8251199e 12375 cp_error ("`%D' must take exactly one argument", decl);
8d08fdba 12376 else
8251199e 12377 cp_error ("`%D' must take exactly two arguments", decl);
8d08fdba 12378 }
824b9a4c
MS
12379
12380 /* More Effective C++ rule 7. */
eb448459 12381 if (warn_ecpp
596ea4e5
AS
12382 && (operator_code == TRUTH_ANDIF_EXPR
12383 || operator_code == TRUTH_ORIF_EXPR
12384 || operator_code == COMPOUND_EXPR))
8251199e 12385 cp_warning ("user-defined `%D' always evaluates both arguments",
824b9a4c
MS
12386 decl);
12387 }
12388
12389 /* Effective C++ rule 23. */
eb448459 12390 if (warn_ecpp
596ea4e5
AS
12391 && arity == 2
12392 && (operator_code == PLUS_EXPR
12393 || operator_code == MINUS_EXPR
12394 || operator_code == TRUNC_DIV_EXPR
12395 || operator_code == MULT_EXPR)
824b9a4c 12396 && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
8251199e 12397 cp_warning ("`%D' should return by value", decl);
8d08fdba
MS
12398
12399 /* 13.4.0.8 */
34332678
CT
12400 for (; argtypes && argtypes != void_list_node;
12401 argtypes = TREE_CHAIN (argtypes))
12402 if (TREE_PURPOSE (argtypes))
12403 {
12404 TREE_PURPOSE (argtypes) = NULL_TREE;
596ea4e5
AS
12405 if (operator_code == POSTINCREMENT_EXPR
12406 || operator_code == POSTDECREMENT_EXPR)
34332678
CT
12407 {
12408 if (pedantic)
12409 cp_pedwarn ("`%D' cannot have default arguments", decl);
12410 }
12411 else
12412 cp_error ("`%D' cannot have default arguments", decl);
12413 }
12414
8d08fdba
MS
12415 }
12416}
12417\f
d8e178a0 12418static const char *
094fe153
JM
12419tag_name (code)
12420 enum tag_types code;
12421{
12422 switch (code)
12423 {
12424 case record_type:
12425 return "struct";
12426 case class_type:
12427 return "class";
12428 case union_type:
12429 return "union ";
12430 case enum_type:
12431 return "enum";
094fe153
JM
12432 default:
12433 my_friendly_abort (981122);
12434 }
12435}
12436
8d08fdba
MS
12437/* Get the struct, enum or union (CODE says which) with tag NAME.
12438 Define the tag as a forward-reference if it is not defined.
12439
12440 C++: If a class derivation is given, process it here, and report
12441 an error if multiple derivation declarations are not identical.
12442
12443 If this is a definition, come in through xref_tag and only look in
12444 the current frame for the name (since C++ allows new names in any
12445 scope.) */
12446
8d08fdba 12447tree
ca107ded 12448xref_tag (code_type_node, name, globalize)
8d08fdba 12449 tree code_type_node;
ca107ded 12450 tree name;
8d08fdba
MS
12451 int globalize;
12452{
12453 enum tag_types tag_code;
12454 enum tree_code code;
8d08fdba 12455 register tree ref, t;
8f032717 12456 struct binding_level *b = current_binding_level;
a80e4195 12457 int got_type = 0;
dc8263bc 12458 tree attributes = NULL_TREE;
25aab5d0 12459 tree context = NULL_TREE;
dc8263bc
JM
12460
12461 /* If we are called from the parser, code_type_node will sometimes be a
12462 TREE_LIST. This indicates that the user wrote
12463 "class __attribute__ ((foo)) bar". Extract the attributes so we can
12464 use them later. */
12465 if (TREE_CODE (code_type_node) == TREE_LIST)
12466 {
12467 attributes = TREE_PURPOSE (code_type_node);
12468 code_type_node = TREE_VALUE (code_type_node);
12469 }
8d08fdba 12470
665f2503 12471 tag_code = (enum tag_types) tree_low_cst (code_type_node, 1);
8d08fdba
MS
12472 switch (tag_code)
12473 {
12474 case record_type:
12475 case class_type:
8d08fdba 12476 code = RECORD_TYPE;
8d08fdba
MS
12477 break;
12478 case union_type:
12479 code = UNION_TYPE;
8d08fdba
MS
12480 break;
12481 case enum_type:
12482 code = ENUMERAL_TYPE;
12483 break;
12484 default:
12485 my_friendly_abort (18);
12486 }
12487
12488 /* If a cross reference is requested, look up the type
12489 already defined for this tag and return it. */
2f939d94 12490 if (TYPE_P (name))
be99da77
MS
12491 {
12492 t = name;
a80e4195
MS
12493 name = TYPE_IDENTIFIER (t);
12494 got_type = 1;
be99da77
MS
12495 }
12496 else
12497 t = IDENTIFIER_TYPE_VALUE (name);
61a127b3 12498
f2ae0c45
JM
12499 /* Warn about 'friend struct Inherited;' doing the wrong thing. */
12500 if (t && globalize && TREE_CODE (t) == TYPENAME_TYPE)
12501 {
12502 static int explained;
12503
12504 cp_warning ("`%s %T' declares a new type at namespace scope;\n\
12505to refer to the inherited type, say `%s %T::%T'%s",
12506 tag_name (tag_code), name, tag_name (tag_code),
12507 constructor_name (current_class_type), TYPE_IDENTIFIER (t),
12508 (!explained ? "\n\
12509(names from dependent base classes are not visible to unqualified name lookup)"
12510 : ""));
12511
12512 explained = 1;
12513 }
12514
73b0fce8 12515 if (t && TREE_CODE (t) != code && TREE_CODE (t) != TEMPLATE_TYPE_PARM
a1281f45 12516 && TREE_CODE (t) != BOUND_TEMPLATE_TEMPLATE_PARM)
a0a33927
MS
12517 t = NULL_TREE;
12518
8ccc31eb 12519 if (! globalize)
8d08fdba 12520 {
f3400fe2
JM
12521 /* If we know we are defining this tag, only look it up in
12522 this scope and don't try to find it as a type. */
12523 ref = lookup_tag (code, name, b, 1);
8d08fdba
MS
12524 }
12525 else
12526 {
25aab5d0 12527 if (t)
36a117a5 12528 {
25aab5d0
MM
12529 /* [dcl.type.elab] If the identifier resolves to a
12530 typedef-name or a template type-parameter, the
12531 elaborated-type-specifier is ill-formed. */
12532 if (t != TYPE_MAIN_VARIANT (t)
12533 || (CLASS_TYPE_P (t) && TYPE_WAS_ANONYMOUS (t)))
12534 cp_pedwarn ("using typedef-name `%D' after `%s'",
12535 TYPE_NAME (t), tag_name (tag_code));
12536 else if (TREE_CODE (t) == TEMPLATE_TYPE_PARM)
12537 cp_error ("using template type parameter `%T' after `%s'",
12538 t, tag_name (tag_code));
12539
12540 ref = t;
12541 }
12542 else
12543 ref = lookup_tag (code, name, b, 0);
68642fb6 12544
25aab5d0
MM
12545 if (! ref)
12546 {
12547 /* Try finding it as a type declaration. If that wins,
68642fb6 12548 use it. */
25aab5d0
MM
12549 ref = lookup_name (name, 1);
12550
12551 if (ref != NULL_TREE
12552 && processing_template_decl
12553 && DECL_CLASS_TEMPLATE_P (ref)
12554 && template_class_depth (current_class_type) == 0)
12555 /* Since GLOBALIZE is true, we're declaring a global
6757edfe 12556 template, so we want this type. */
17aec3eb 12557 ref = DECL_TEMPLATE_RESULT (ref);
6757edfe 12558
25aab5d0
MM
12559 if (ref && TREE_CODE (ref) == TYPE_DECL
12560 && TREE_CODE (TREE_TYPE (ref)) == code)
12561 ref = TREE_TYPE (ref);
12562 else
12563 ref = NULL_TREE;
12564 }
12565
68642fb6
UD
12566 if (ref && current_class_type
12567 && template_class_depth (current_class_type)
12568 && PROCESSING_REAL_TEMPLATE_DECL_P ())
25aab5d0
MM
12569 {
12570 /* Since GLOBALIZE is non-zero, we are not looking at a
12571 definition of this tag. Since, in addition, we are currently
12572 processing a (member) template declaration of a template
12573 class, we must be very careful; consider:
12574
12575 template <class X>
12576 struct S1
12577
12578 template <class U>
12579 struct S2
12580 { template <class V>
12581 friend struct S1; };
12582
12583 Here, the S2::S1 declaration should not be confused with the
12584 outer declaration. In particular, the inner version should
12585 have a template parameter of level 2, not level 1. This
12586 would be particularly important if the member declaration
12587 were instead:
12588
12589 template <class V = U> friend struct S1;
12590
12591 say, when we should tsubst into `U' when instantiating
12592 S2. On the other hand, when presented with:
12593
12594 template <class T>
12595 struct S1 {
12596 template <class U>
12597 struct S2 {};
12598 template <class U>
12599 friend struct S2;
12600 };
12601
12602 we must find the inner binding eventually. We
12603 accomplish this by making sure that the new type we
12604 create to represent this declaration has the right
12605 TYPE_CONTEXT. */
12606 context = TYPE_CONTEXT (ref);
12607 ref = NULL_TREE;
8d08fdba
MS
12608 }
12609 }
12610
8d08fdba
MS
12611 if (! ref)
12612 {
12613 /* If no such tag is yet defined, create a forward-reference node
12614 and record it as the "definition".
12615 When a real declaration of this type is found,
12616 the forward-reference will be altered into a real type. */
8d08fdba
MS
12617 if (code == ENUMERAL_TYPE)
12618 {
8251199e 12619 cp_error ("use of enum `%#D' without previous declaration", name);
fc378698 12620
8d08fdba
MS
12621 ref = make_node (ENUMERAL_TYPE);
12622
12623 /* Give the type a default layout like unsigned int
12624 to avoid crashing if it does not get defined. */
12625 TYPE_MODE (ref) = TYPE_MODE (unsigned_type_node);
12626 TYPE_ALIGN (ref) = TYPE_ALIGN (unsigned_type_node);
11cf4d18 12627 TYPE_USER_ALIGN (ref) = 0;
8d08fdba
MS
12628 TREE_UNSIGNED (ref) = 1;
12629 TYPE_PRECISION (ref) = TYPE_PRECISION (unsigned_type_node);
12630 TYPE_MIN_VALUE (ref) = TYPE_MIN_VALUE (unsigned_type_node);
12631 TYPE_MAX_VALUE (ref) = TYPE_MAX_VALUE (unsigned_type_node);
12632
12633 /* Enable us to recognize when a type is created in class context.
12634 To do nested classes correctly, this should probably be cleared
12635 out when we leave this classes scope. Currently this in only
12636 done in `start_enum'. */
12637
12638 pushtag (name, ref, globalize);
8d08fdba 12639 }
8d08fdba
MS
12640 else
12641 {
8d08fdba 12642 struct binding_level *old_b = class_binding_level;
8d08fdba 12643
33848bb0 12644 ref = make_aggr_type (code);
25aab5d0 12645 TYPE_CONTEXT (ref) = context;
8d08fdba 12646
8d08fdba
MS
12647#ifdef NONNESTED_CLASSES
12648 /* Class types don't nest the way enums do. */
12649 class_binding_level = (struct binding_level *)0;
12650#endif
12651 pushtag (name, ref, globalize);
12652 class_binding_level = old_b;
8d08fdba
MS
12653 }
12654 }
12655 else
12656 {
7fe6899f 12657 if (!globalize && processing_template_decl && IS_AGGR_TYPE (ref))
6757edfe 12658 redeclare_class_template (ref, current_template_parms);
8d08fdba
MS
12659 }
12660
8d08fdba
MS
12661 /* Until the type is defined, tentatively accept whatever
12662 structure tag the user hands us. */
d0f062fb 12663 if (!COMPLETE_TYPE_P (ref)
8d08fdba
MS
12664 && ref != current_class_type
12665 /* Have to check this, in case we have contradictory tag info. */
12666 && IS_AGGR_TYPE_CODE (TREE_CODE (ref)))
12667 {
12668 if (tag_code == class_type)
12669 CLASSTYPE_DECLARED_CLASS (ref) = 1;
6eabb241 12670 else if (tag_code == record_type)
8d08fdba
MS
12671 CLASSTYPE_DECLARED_CLASS (ref) = 0;
12672 }
12673
dc8263bc
JM
12674 TREE_TYPE (ref) = attributes;
12675
8d08fdba
MS
12676 return ref;
12677}
8ccc31eb 12678
fc378698
MS
12679tree
12680xref_tag_from_type (old, id, globalize)
12681 tree old, id;
12682 int globalize;
12683{
12684 tree code_type_node;
12685
12686 if (TREE_CODE (old) == RECORD_TYPE)
12687 code_type_node = (CLASSTYPE_DECLARED_CLASS (old)
12688 ? class_type_node : record_type_node);
12689 else
12690 code_type_node = union_type_node;
12691
12692 if (id == NULL_TREE)
12693 id = TYPE_IDENTIFIER (old);
12694
ca107ded 12695 return xref_tag (code_type_node, id, globalize);
fc378698
MS
12696}
12697
3fd71a52
MM
12698/* REF is a type (named NAME), for which we have just seen some
12699 baseclasses. BINFO is a list of those baseclasses; the
12700 TREE_PURPOSE is an access_* node, and the TREE_VALUE is the type of
12701 the base-class. CODE_TYPE_NODE indicates whether REF is a class,
12702 struct, or union. */
12703
8ccc31eb
MS
12704void
12705xref_basetypes (code_type_node, name, ref, binfo)
12706 tree code_type_node;
12707 tree name, ref;
12708 tree binfo;
12709{
12710 /* In the declaration `A : X, Y, ... Z' we mark all the types
12711 (A, X, Y, ..., Z) so we can check for duplicates. */
12712 tree binfos;
d6479fe7
MM
12713 tree base;
12714
8ccc31eb 12715 int i, len;
665f2503 12716 enum tag_types tag_code = (enum tag_types) tree_low_cst (code_type_node, 1);
8ccc31eb
MS
12717
12718 if (tag_code == union_type)
12719 {
8251199e 12720 cp_error ("derived union `%T' invalid", ref);
8ccc31eb
MS
12721 return;
12722 }
12723
12724 len = list_length (binfo);
8ccc31eb 12725
d6479fe7
MM
12726 /* First, make sure that any templates in base-classes are
12727 instantiated. This ensures that if we call ourselves recursively
12728 we do not get confused about which classes are marked and which
12729 are not. */
12730 for (base = binfo; base; base = TREE_CHAIN (base))
12731 complete_type (TREE_VALUE (base));
12732
8ccc31eb
MS
12733 SET_CLASSTYPE_MARKED (ref);
12734 BINFO_BASETYPES (TYPE_BINFO (ref)) = binfos = make_tree_vec (len);
12735
12736 for (i = 0; binfo; binfo = TREE_CHAIN (binfo))
12737 {
12738 /* The base of a derived struct is public by default. */
12739 int via_public
be99da77
MS
12740 = (TREE_PURPOSE (binfo) == access_public_node
12741 || TREE_PURPOSE (binfo) == access_public_virtual_node
8ccc31eb 12742 || (tag_code != class_type
be99da77
MS
12743 && (TREE_PURPOSE (binfo) == access_default_node
12744 || TREE_PURPOSE (binfo) == access_default_virtual_node)));
d8b55a76
JM
12745 int via_protected
12746 = (TREE_PURPOSE (binfo) == access_protected_node
12747 || TREE_PURPOSE (binfo) == access_protected_virtual_node);
8ccc31eb 12748 int via_virtual
be99da77 12749 = (TREE_PURPOSE (binfo) == access_private_virtual_node
d8b55a76 12750 || TREE_PURPOSE (binfo) == access_protected_virtual_node
be99da77
MS
12751 || TREE_PURPOSE (binfo) == access_public_virtual_node
12752 || TREE_PURPOSE (binfo) == access_default_virtual_node);
12753 tree basetype = TREE_VALUE (binfo);
8ccc31eb
MS
12754 tree base_binfo;
12755
8ccc31eb
MS
12756 if (basetype && TREE_CODE (basetype) == TYPE_DECL)
12757 basetype = TREE_TYPE (basetype);
5566b478
MS
12758 if (!basetype
12759 || (TREE_CODE (basetype) != RECORD_TYPE
a80e4195 12760 && TREE_CODE (basetype) != TYPENAME_TYPE
73b0fce8 12761 && TREE_CODE (basetype) != TEMPLATE_TYPE_PARM
a1281f45 12762 && TREE_CODE (basetype) != BOUND_TEMPLATE_TEMPLATE_PARM))
8ccc31eb 12763 {
8251199e 12764 cp_error ("base type `%T' fails to be a struct or class type",
8ccc31eb
MS
12765 TREE_VALUE (binfo));
12766 continue;
12767 }
2b9dc906 12768
11b5139c 12769 GNU_xref_hier (name, basetype, via_public, via_virtual, 0);
2b9dc906 12770
8adf5b5e
JM
12771 /* This code replaces similar code in layout_basetypes.
12772 We put the complete_type first for implicit `typename'. */
d0f062fb 12773 if (!COMPLETE_TYPE_P (basetype)
2b9dc906 12774 && ! (current_template_parms && uses_template_parms (basetype)))
8ccc31eb 12775 {
8251199e 12776 cp_error ("base class `%T' has incomplete type", basetype);
8ccc31eb
MS
12777 continue;
12778 }
8ccc31eb
MS
12779 else
12780 {
12781 if (CLASSTYPE_MARKED (basetype))
12782 {
12783 if (basetype == ref)
8251199e 12784 cp_error ("recursive type `%T' undefined", basetype);
8ccc31eb 12785 else
8251199e 12786 cp_error ("duplicate base type `%T' invalid", basetype);
8ccc31eb
MS
12787 continue;
12788 }
12789
eff71ab0 12790 if (TYPE_FOR_JAVA (basetype)
46ccf50a 12791 && (current_lang_depth () == 0))
eff71ab0
PB
12792 TYPE_FOR_JAVA (ref) = 1;
12793
8ccc31eb
MS
12794 /* Note that the BINFO records which describe individual
12795 inheritances are *not* shared in the lattice! They
12796 cannot be shared because a given baseclass may be
12797 inherited with different `accessibility' by different
12798 derived classes. (Each BINFO record describing an
12799 individual inheritance contains flags which say what
12800 the `accessibility' of that particular inheritance is.) */
68642fb6
UD
12801
12802 base_binfo
fed3cef0 12803 = make_binfo (size_zero_node, basetype,
7ddedda4
MM
12804 CLASS_TYPE_P (basetype)
12805 ? TYPE_BINFO_VTABLE (basetype) : NULL_TREE,
12806 CLASS_TYPE_P (basetype)
12807 ? TYPE_BINFO_VIRTUALS (basetype) : NULL_TREE);
68642fb6 12808
8ccc31eb
MS
12809 TREE_VEC_ELT (binfos, i) = base_binfo;
12810 TREE_VIA_PUBLIC (base_binfo) = via_public;
12811 TREE_VIA_PROTECTED (base_binfo) = via_protected;
12812 TREE_VIA_VIRTUAL (base_binfo) = via_virtual;
12813 BINFO_INHERITANCE_CHAIN (base_binfo) = TYPE_BINFO (ref);
12814
dfbcd65a
JM
12815 /* We need to unshare the binfos now so that lookups during class
12816 definition work. */
12817 unshare_base_binfos (base_binfo);
12818
8ccc31eb 12819 SET_CLASSTYPE_MARKED (basetype);
9e9ff709 12820
8ccc31eb
MS
12821 /* We are free to modify these bits because they are meaningless
12822 at top level, and BASETYPE is a top-level type. */
12823 if (via_virtual || TYPE_USES_VIRTUAL_BASECLASSES (basetype))
12824 {
12825 TYPE_USES_VIRTUAL_BASECLASSES (ref) = 1;
4c6b7393
MM
12826 /* Converting to a virtual base class requires looking
12827 up the offset of the virtual base. */
12828 TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (ref) = 1;
8ccc31eb
MS
12829 }
12830
7ddedda4
MM
12831 if (CLASS_TYPE_P (basetype))
12832 {
5362b086 12833 TYPE_HAS_NEW_OPERATOR (ref)
834c6dff 12834 |= TYPE_HAS_NEW_OPERATOR (basetype);
5362b086 12835 TYPE_HAS_ARRAY_NEW_OPERATOR (ref)
834c6dff 12836 |= TYPE_HAS_ARRAY_NEW_OPERATOR (basetype);
7ddedda4 12837 TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
4c6b7393 12838 /* If the base-class uses multiple inheritance, so do we. */
68642fb6 12839 TYPE_USES_MULTIPLE_INHERITANCE (ref)
4c6b7393
MM
12840 |= TYPE_USES_MULTIPLE_INHERITANCE (basetype);
12841 /* Likewise, if converting to a base of the base may require
12842 code, then we may need to generate code to convert to a
12843 base as well. */
68642fb6 12844 TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (ref)
4c6b7393 12845 |= TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (basetype);
7ddedda4
MM
12846 }
12847
8ccc31eb
MS
12848 i += 1;
12849 }
12850 }
12851 if (i)
12852 TREE_VEC_LENGTH (binfos) = i;
12853 else
12854 BINFO_BASETYPES (TYPE_BINFO (ref)) = NULL_TREE;
12855
12856 if (i > 1)
7ddedda4 12857 {
4c6b7393
MM
12858 TYPE_USES_MULTIPLE_INHERITANCE (ref) = 1;
12859 /* If there is more than one non-empty they cannot be at the same
12860 address. */
12861 TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (ref) = 1;
7ddedda4
MM
12862 }
12863
8ccc31eb
MS
12864 /* Unmark all the types. */
12865 while (--i >= 0)
12866 CLEAR_CLASSTYPE_MARKED (BINFO_TYPE (TREE_VEC_ELT (binfos, i)));
12867 CLEAR_CLASSTYPE_MARKED (ref);
12868
70c532b5
MM
12869 /* Now that we know all the base-classes, set up the list of virtual
12870 bases. */
23381155 12871 get_vbase_types (ref);
8ccc31eb 12872}
68642fb6 12873
8d08fdba 12874\f
8d08fdba
MS
12875/* Begin compiling the definition of an enumeration type.
12876 NAME is its name (or null if anonymous).
12877 Returns the type object, as yet incomplete.
12878 Also records info about it so that build_enumerator
12879 may be used to declare the individual values as they are read. */
12880
12881tree
12882start_enum (name)
12883 tree name;
12884{
12885 register tree enumtype = NULL_TREE;
8f032717 12886 struct binding_level *b = current_binding_level;
8d08fdba
MS
12887
12888 /* If this is the real definition for a previous forward reference,
12889 fill in the contents in the same object that used to be the
12890 forward reference. */
12891
12892 if (name != NULL_TREE)
12893 enumtype = lookup_tag (ENUMERAL_TYPE, name, b, 1);
12894
12895 if (enumtype != NULL_TREE && TREE_CODE (enumtype) == ENUMERAL_TYPE)
30ff8252
NS
12896 {
12897 cp_error ("multiple definition of `%#T'", enumtype);
12898 cp_error_at ("previous definition here", enumtype);
58595203
MM
12899 /* Clear out TYPE_VALUES, and start again. */
12900 TYPE_VALUES (enumtype) = NULL_TREE;
30ff8252 12901 }
8d08fdba
MS
12902 else
12903 {
12904 enumtype = make_node (ENUMERAL_TYPE);
12905 pushtag (name, enumtype, 0);
12906 }
12907
12908 if (current_class_type)
12909 TREE_ADDRESSABLE (b->tags) = 1;
c91a56d2 12910
8d08fdba
MS
12911 GNU_xref_decl (current_function_decl, enumtype);
12912 return enumtype;
12913}
12914
12915/* After processing and defining all the values of an enumeration type,
12916 install their decls in the enumeration type and finish it off.
12917 ENUMTYPE is the type object and VALUES a list of name-value pairs.
12918 Returns ENUMTYPE. */
12919
12920tree
dbfe2124
MM
12921finish_enum (enumtype)
12922 tree enumtype;
8d08fdba 12923{
a703fb38 12924 register tree minnode = NULL_TREE, maxnode = NULL_TREE;
8d08fdba
MS
12925 /* Calculate the maximum value of any enumerator in this type. */
12926
dbfe2124 12927 tree values = TYPE_VALUES (enumtype);
8d08fdba
MS
12928 if (values)
12929 {
ed44da02 12930 tree pair;
5566b478 12931
ed44da02 12932 for (pair = values; pair; pair = TREE_CHAIN (pair))
8d08fdba 12933 {
ed44da02
MM
12934 tree decl;
12935 tree value;
12936
12937 /* The TREE_VALUE is a CONST_DECL for this enumeration
12938 constant. */
12939 decl = TREE_VALUE (pair);
12940
58595203
MM
12941 /* [dcl.enum]
12942
12943 Following the closing brace of an enum-specifier, each
12944 enumerator has the type of its enumeration. Prior to the
12945 closing brace, the type of each enumerator is the type of
12946 its initializing value. */
12947 TREE_TYPE (decl) = enumtype;
12948
ed44da02
MM
12949 /* The DECL_INITIAL will be NULL if we are processing a
12950 template declaration and this enumeration constant had no
12951 explicit initializer. */
12952 value = DECL_INITIAL (decl);
079e1098 12953 if (value && !processing_template_decl)
5566b478 12954 {
079e1098
MM
12955 /* Set the TREE_TYPE for the VALUE as well. That's so
12956 that when we call decl_constant_value we get an
12957 entity of the right type (but with the constant
12958 value). Since we shouldn't ever call
12959 decl_constant_value on a template type, there's no
12960 reason to do that when processing_template_decl.
12961 And, if the expression is something like a
12962 TEMPLATE_PARM_INDEX or a CAST_EXPR doing so will
68642fb6 12963 wreak havoc on the intended type of the expression.
079e1098
MM
12964
12965 Of course, there's also no point in trying to compute
12966 minimum or maximum values if we're in a template. */
5566b478 12967 TREE_TYPE (value) = enumtype;
ed44da02 12968
079e1098
MM
12969 if (!minnode)
12970 minnode = maxnode = value;
12971 else if (tree_int_cst_lt (maxnode, value))
12972 maxnode = value;
12973 else if (tree_int_cst_lt (value, minnode))
12974 minnode = value;
5566b478 12975 }
ed44da02 12976
68642fb6 12977 if (processing_template_decl)
72f2bd78
MM
12978 /* If this is just a template, leave the CONST_DECL
12979 alone. That way tsubst_copy will find CONST_DECLs for
12980 CONST_DECLs, and not INTEGER_CSTs. */
12981 ;
12982 else
12983 /* In the list we're building up, we want the enumeration
12984 values, not the CONST_DECLs. */
12985 TREE_VALUE (pair) = value;
8d08fdba
MS
12986 }
12987 }
f376e137
MS
12988 else
12989 maxnode = minnode = integer_zero_node;
8d08fdba 12990
de22184b 12991 TYPE_VALUES (enumtype) = nreverse (values);
2986ae00 12992
5156628f 12993 if (processing_template_decl)
b87692e5 12994 {
9360ac70
MM
12995 tree scope = current_scope ();
12996 if (scope && TREE_CODE (scope) == FUNCTION_DECL)
ae499cce 12997 add_stmt (build_min (TAG_DEFN, enumtype));
b87692e5 12998 }
cbf882af
MM
12999 else
13000 {
13001 int unsignedp = tree_int_cst_sgn (minnode) >= 0;
13002 int lowprec = min_precision (minnode, unsignedp);
13003 int highprec = min_precision (maxnode, unsignedp);
13004 int precision = MAX (lowprec, highprec);
13005 tree tem;
5566b478 13006
cbf882af 13007 TYPE_SIZE (enumtype) = NULL_TREE;
8d08fdba 13008
cbf882af 13009 /* Set TYPE_MIN_VALUE and TYPE_MAX_VALUE according to `precision'. */
8ccc31eb 13010
cbf882af
MM
13011 TYPE_PRECISION (enumtype) = precision;
13012 if (unsignedp)
13013 fixup_unsigned_type (enumtype);
13014 else
13015 fixup_signed_type (enumtype);
8ccc31eb 13016
cbf882af
MM
13017 if (flag_short_enums || (precision > TYPE_PRECISION (integer_type_node)))
13018 /* Use the width of the narrowest normal C type which is wide
68642fb6 13019 enough. */
cbf882af
MM
13020 TYPE_PRECISION (enumtype) = TYPE_PRECISION (type_for_size
13021 (precision, 1));
13022 else
13023 TYPE_PRECISION (enumtype) = TYPE_PRECISION (integer_type_node);
8d08fdba 13024
cbf882af
MM
13025 TYPE_SIZE (enumtype) = 0;
13026 layout_type (enumtype);
68642fb6 13027
cbf882af
MM
13028 /* Fix up all variant types of this enum type. */
13029 for (tem = TYPE_MAIN_VARIANT (enumtype); tem;
13030 tem = TYPE_NEXT_VARIANT (tem))
13031 {
13032 TYPE_VALUES (tem) = TYPE_VALUES (enumtype);
13033 TYPE_MIN_VALUE (tem) = TYPE_MIN_VALUE (enumtype);
13034 TYPE_MAX_VALUE (tem) = TYPE_MAX_VALUE (enumtype);
13035 TYPE_SIZE (tem) = TYPE_SIZE (enumtype);
13036 TYPE_SIZE_UNIT (tem) = TYPE_SIZE_UNIT (enumtype);
13037 TYPE_MODE (tem) = TYPE_MODE (enumtype);
13038 TYPE_PRECISION (tem) = TYPE_PRECISION (enumtype);
13039 TYPE_ALIGN (tem) = TYPE_ALIGN (enumtype);
11cf4d18 13040 TYPE_USER_ALIGN (tem) = TYPE_USER_ALIGN (enumtype);
cbf882af
MM
13041 TREE_UNSIGNED (tem) = TREE_UNSIGNED (enumtype);
13042 }
8d08fdba 13043
cbf882af
MM
13044 /* Finish debugging output for this type. */
13045 rest_of_type_compilation (enumtype, namespace_bindings_p ());
13046 }
13047
8d08fdba
MS
13048 return enumtype;
13049}
13050
079e1098 13051/* Build and install a CONST_DECL for an enumeration constant of the
58595203 13052 enumeration type ENUMTYPE whose NAME and VALUE (if any) are provided.
8d08fdba
MS
13053 Assignment of sequential values by default is handled here. */
13054
58595203
MM
13055void
13056build_enumerator (name, value, enumtype)
079e1098
MM
13057 tree name;
13058 tree value;
58595203 13059 tree enumtype;
8d08fdba 13060{
58595203 13061 tree decl;
e8bd800e 13062 tree context;
58595203
MM
13063 tree type;
13064 tree values;
8d08fdba
MS
13065
13066 /* Remove no-op casts from the value. */
13067 if (value)
13068 STRIP_TYPE_NOPS (value);
13069
58595203
MM
13070 if (! processing_template_decl)
13071 {
13072 /* Validate and default VALUE. */
13073 if (value != NULL_TREE)
13074 {
fc611ce0 13075 value = decl_constant_value (value);
58595203
MM
13076
13077 if (TREE_CODE (value) == INTEGER_CST)
13078 {
13079 value = default_conversion (value);
13080 constant_expression_warning (value);
13081 }
13082 else
13083 {
13084 cp_error ("enumerator value for `%D' not integer constant", name);
13085 value = NULL_TREE;
13086 }
13087 }
13088
13089 /* Default based on previous value. */
13090 if (value == NULL_TREE && ! processing_template_decl)
13091 {
13092 tree prev_value;
13093
13094 if (TYPE_VALUES (enumtype))
13095 {
13096 /* The next value is the previous value ... */
13097 prev_value = DECL_INITIAL (TREE_VALUE (TYPE_VALUES (enumtype)));
13098 /* ... plus one. */
ab76ca54
MM
13099 value = cp_build_binary_op (PLUS_EXPR,
13100 prev_value,
13101 integer_one_node);
68642fb6 13102
58595203
MM
13103 if (tree_int_cst_lt (value, prev_value))
13104 cp_error ("overflow in enumeration values at `%D'", name);
13105 }
13106 else
13107 value = integer_zero_node;
13108 }
13109
13110 /* Remove no-op casts from the value. */
13111 if (value)
13112 STRIP_TYPE_NOPS (value);
013bc8af 13113#if 0
58595203
MM
13114 /* To fix MAX_VAL enum consts. (bkoz) */
13115 TREE_TYPE (value) = integer_type_node;
013bc8af 13116#endif
58595203 13117 }
8d08fdba 13118
58595203
MM
13119 /* We always have to copy here; not all INTEGER_CSTs are unshared.
13120 Even in other cases, we will later (in finish_enum) be setting
13121 the type of VALUE. But, we don't need to make a copy if this
13122 VALUE is one of the enumeration constants for this same
13123 enumeration type. */
13124 for (values = TYPE_VALUES (enumtype); values; values = TREE_CHAIN (values))
13125 if (TREE_VALUE (values) == value)
13126 break;
13127 /* If we didn't break out of the loop, then we do need a copy. */
13128 if (!values && value)
13129 value = copy_node (value);
ed44da02 13130
8d08fdba 13131 /* C++ associates enums with global, function, or class declarations. */
58595203
MM
13132 context = current_scope ();
13133
13134 /* Build the actual enumeration constant. Note that the enumeration
13135 constants have the type of their initializers until the
13136 enumeration is complete:
13137
13138 [ dcl.enum ]
13139
13140 Following the closing brace of an enum-specifier, each enumer-
13141 ator has the type of its enumeration. Prior to the closing
13142 brace, the type of each enumerator is the type of its
13143 initializing value.
13144
13145 In finish_enum we will reset the type. Of course, if we're
13146 processing a template, there may be no value. */
13147 type = value ? TREE_TYPE (value) : NULL_TREE;
13148
13149 if (context && context == current_class_type)
13150 /* This enum declaration is local to the class. We need the full
8f17b5c5 13151 lang_decl so that we can record DECL_CLASS_CONTEXT, for example. */
58595203
MM
13152 decl = build_lang_decl (CONST_DECL, name, type);
13153 else
13154 /* It's a global enum, or it's local to a function. (Note local to
e8bd800e 13155 a function could mean local to a class method. */
58595203 13156 decl = build_decl (CONST_DECL, name, type);
e8bd800e 13157
58595203
MM
13158 DECL_CONTEXT (decl) = FROB_CONTEXT (context);
13159 DECL_INITIAL (decl) = value;
13160 TREE_READONLY (decl) = 1;
e8bd800e 13161
58595203
MM
13162 if (context && context == current_class_type)
13163 /* In something like `struct S { enum E { i = 7 }; };' we put `i'
8f032717
MM
13164 on the TYPE_FIELDS list for `S'. (That's so that you can say
13165 things like `S::i' later.) */
58595203
MM
13166 finish_member_declaration (decl);
13167 else
13168 {
13169 pushdecl (decl);
13170 GNU_xref_decl (current_function_decl, decl);
13171 }
13172
13173 /* Add this enumeration constant to the list for this type. */
13174 TYPE_VALUES (enumtype) = tree_cons (name, decl, TYPE_VALUES (enumtype));
8d08fdba
MS
13175}
13176
8d08fdba 13177\f
a8f73d4b
MM
13178/* We're defining DECL. Make sure that it's type is OK. */
13179
13180static void
f444e36b 13181check_function_type (decl, current_function_parms)
a8f73d4b 13182 tree decl;
f444e36b 13183 tree current_function_parms;
a8f73d4b
MM
13184{
13185 tree fntype = TREE_TYPE (decl);
d0f062fb 13186 tree return_type = complete_type (TREE_TYPE (fntype));
a8f73d4b
MM
13187
13188 /* In a function definition, arg types must be complete. */
13189 require_complete_types_for_parms (current_function_parms);
13190
d0f062fb 13191 if (!COMPLETE_OR_VOID_TYPE_P (return_type))
a8f73d4b
MM
13192 {
13193 cp_error ("return type `%#T' is incomplete", TREE_TYPE (fntype));
13194
13195 /* Make it return void instead, but don't change the
13196 type of the DECL_RESULT, in case we have a named return value. */
13197 if (TREE_CODE (fntype) == METHOD_TYPE)
13198 {
13199 tree ctype = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (fntype)));
13200 TREE_TYPE (decl)
13201 = build_cplus_method_type (ctype,
13202 void_type_node,
13203 FUNCTION_ARG_CHAIN (decl));
13204 }
13205 else
13206 TREE_TYPE (decl)
13207 = build_function_type (void_type_node,
13208 TYPE_ARG_TYPES (TREE_TYPE (decl)));
68642fb6 13209 TREE_TYPE (decl)
a8f73d4b
MM
13210 = build_exception_variant (fntype,
13211 TYPE_RAISES_EXCEPTIONS (fntype));
13212 }
13213 else
13214 abstract_virtuals_error (decl, TREE_TYPE (fntype));
13215}
13216
8d08fdba
MS
13217/* Create the FUNCTION_DECL for a function definition.
13218 DECLSPECS and DECLARATOR are the parts of the declaration;
13219 they describe the function's name and the type it returns,
13220 but twisted together in a fashion that parallels the syntax of C.
13221
a8f73d4b
MM
13222 FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
13223 DECLARATOR is really the DECL for the function we are about to
13224 process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
f444e36b 13225 indicating that the function is an inline defined in-class.
68642fb6 13226
8d08fdba
MS
13227 This function creates a binding context for the function body
13228 as well as setting up the FUNCTION_DECL in current_function_decl.
13229
13230 Returns 1 on success. If the DECLARATOR is not suitable for a function
13231 (it defines a datum instead), we return 0, which tells
13232 yyparse to report a parse error.
13233
13234 For C++, we must first check whether that datum makes any sense.
13235 For example, "class A local_a(1,2);" means that variable local_a
13236 is an aggregate of type A, which should have a constructor
87e3dbc9 13237 applied to it with the argument list [1, 2]. */
8d08fdba
MS
13238
13239int
a8f73d4b 13240start_function (declspecs, declarator, attrs, flags)
c11b6f21 13241 tree declspecs, declarator, attrs;
a8f73d4b 13242 int flags;
8d08fdba 13243{
5566b478 13244 tree decl1;
8d08fdba
MS
13245 tree ctype = NULL_TREE;
13246 tree fntype;
13247 tree restype;
13248 extern int have_extern_spec;
13249 extern int used_extern_spec;
13250 int doing_friend = 0;
a8f73d4b 13251 struct binding_level *bl;
f444e36b 13252 tree current_function_parms;
8d08fdba 13253
8d08fdba 13254 /* Sanity check. */
a1774733 13255 my_friendly_assert (TREE_CODE (TREE_VALUE (void_list_node)) == VOID_TYPE, 160);
8d08fdba
MS
13256 my_friendly_assert (TREE_CHAIN (void_list_node) == NULL_TREE, 161);
13257
e92cc029 13258 /* This should only be done once on the top most decl. */
8d08fdba
MS
13259 if (have_extern_spec && !used_extern_spec)
13260 {
1f8f4a0b 13261 declspecs = tree_cons (NULL_TREE, get_identifier ("extern"), declspecs);
8d08fdba
MS
13262 used_extern_spec = 1;
13263 }
13264
a8f73d4b 13265 if (flags & SF_PRE_PARSED)
8d08fdba
MS
13266 {
13267 decl1 = declarator;
13268
8d08fdba
MS
13269 fntype = TREE_TYPE (decl1);
13270 if (TREE_CODE (fntype) == METHOD_TYPE)
13271 ctype = TYPE_METHOD_BASETYPE (fntype);
13272
cab1f180
ML
13273 /* ISO C++ 11.4/5. A friend function defined in a class is in
13274 the (lexical) scope of the class in which it is defined. */
8d08fdba
MS
13275 if (!ctype && DECL_FRIEND_P (decl1))
13276 {
4f1c5b7d 13277 ctype = DECL_FRIEND_CONTEXT (decl1);
8d08fdba
MS
13278
13279 /* CTYPE could be null here if we're dealing with a template;
13280 for example, `inline friend float foo()' inside a template
13281 will have no CTYPE set. */
13282 if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
13283 ctype = NULL_TREE;
13284 else
13285 doing_friend = 1;
13286 }
13287
5566b478
MS
13288 last_function_parms = DECL_ARGUMENTS (decl1);
13289 last_function_parm_tags = NULL_TREE;
8d08fdba
MS
13290 }
13291 else
13292 {
c11b6f21 13293 decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, NULL_TREE);
8d08fdba
MS
13294 /* If the declarator is not suitable for a function definition,
13295 cause a syntax error. */
13296 if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL) return 0;
13297
13298 fntype = TREE_TYPE (decl1);
13299
13300 restype = TREE_TYPE (fntype);
7ddedda4 13301 if (CLASS_TYPE_P (restype) && !CLASSTYPE_GOT_SEMICOLON (restype))
8d08fdba 13302 {
8251199e 13303 cp_error ("semicolon missing after declaration of `%#T'", restype);
051e6fd7 13304 shadow_tag (build_tree_list (NULL_TREE, restype));
8d08fdba
MS
13305 CLASSTYPE_GOT_SEMICOLON (restype) = 1;
13306 if (TREE_CODE (fntype) == FUNCTION_TYPE)
13307 fntype = build_function_type (integer_type_node,
13308 TYPE_ARG_TYPES (fntype));
13309 else
13310 fntype = build_cplus_method_type (build_type_variant (TYPE_METHOD_BASETYPE (fntype), TREE_READONLY (decl1), TREE_SIDE_EFFECTS (decl1)),
13311 integer_type_node,
13312 TYPE_ARG_TYPES (fntype));
13313 TREE_TYPE (decl1) = fntype;
13314 }
13315
13316 if (TREE_CODE (fntype) == METHOD_TYPE)
13317 ctype = TYPE_METHOD_BASETYPE (fntype);
35680744 13318 else if (DECL_MAIN_P (decl1))
8d08fdba
MS
13319 {
13320 /* If this doesn't return integer_type, complain. */
13321 if (TREE_TYPE (TREE_TYPE (decl1)) != integer_type_node)
13322 {
a28e3c7f 13323 if (pedantic || warn_return_type)
8251199e 13324 pedwarn ("return type for `main' changed to `int'");
8d08fdba
MS
13325 TREE_TYPE (decl1) = fntype = default_function_type;
13326 }
8d08fdba
MS
13327 }
13328 }
68642fb6 13329
b35d4555
MM
13330 /* Sometimes we don't notice that a function is a static member, and
13331 build a METHOD_TYPE for it. Fix that up now. */
13332 if (ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1)
13333 && TREE_CODE (TREE_TYPE (decl1)) == METHOD_TYPE)
13334 {
3afb32a4 13335 revert_static_member_fn (decl1);
b35d4555
MM
13336 last_function_parms = TREE_CHAIN (last_function_parms);
13337 ctype = NULL_TREE;
13338 }
8d08fdba
MS
13339
13340 /* Warn if function was previously implicitly declared
13341 (but not if we warned then). */
13342 if (! warn_implicit
13343 && IDENTIFIER_IMPLICIT_DECL (DECL_NAME (decl1)) != NULL_TREE)
8251199e 13344 cp_warning_at ("`%D' implicitly declared before its definition", IDENTIFIER_IMPLICIT_DECL (DECL_NAME (decl1)));
8d08fdba 13345
f181d4ae
MM
13346 /* Set up current_class_type, and enter the scope of the class, if
13347 appropriate. */
13348 if (ctype)
13349 push_nested_class (ctype, 1);
13350 else if (DECL_STATIC_FUNCTION_P (decl1))
13351 push_nested_class (DECL_CONTEXT (decl1), 2);
13352
13353 /* Now that we have entered the scope of the class, we must restore
13354 the bindings for any template parameters surrounding DECL1, if it
13355 is an inline member template. (Order is important; consider the
13356 case where a template parameter has the same name as a field of
13357 the class.) It is not until after this point that
13358 PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly. */
a8f73d4b 13359 if (flags & SF_INCLASS_INLINE)
f181d4ae
MM
13360 maybe_begin_member_template_processing (decl1);
13361
56cb9733 13362 /* Effective C++ rule 15. */
9188c363 13363 if (warn_ecpp
596ea4e5 13364 && DECL_OVERLOADED_OPERATOR_P (decl1) == NOP_EXPR
9188c363
MM
13365 && TREE_CODE (TREE_TYPE (fntype)) == VOID_TYPE)
13366 cp_warning ("`operator=' should return a reference to `*this'");
13367
13368 /* Make the init_value nonzero so pushdecl knows this is not tentative.
13369 error_mark_node is replaced below (in poplevel) with the BLOCK. */
b35d4555
MM
13370 if (!DECL_INITIAL (decl1))
13371 DECL_INITIAL (decl1) = error_mark_node;
9188c363
MM
13372
13373#ifdef SET_DEFAULT_DECL_ATTRIBUTES
13374 SET_DEFAULT_DECL_ATTRIBUTES (decl1, attrs);
13375#endif
68642fb6 13376
9188c363
MM
13377 /* This function exists in static storage.
13378 (This does not mean `static' in the C sense!) */
13379 TREE_STATIC (decl1) = 1;
13380
13381 /* We must call push_template_decl after current_class_type is set
13382 up. (If we are processing inline definitions after exiting a
13383 class scope, current_class_type will be NULL_TREE until set above
13384 by push_nested_class.) */
13385 if (processing_template_decl)
13386 decl1 = push_template_decl (decl1);
13387
f181d4ae 13388 /* We are now in the scope of the function being defined. */
8d08fdba 13389 current_function_decl = decl1;
f181d4ae 13390
5566b478
MS
13391 /* Save the parm names or decls from this function's declarator
13392 where store_parm_decls will find them. */
13393 current_function_parms = last_function_parms;
13394 current_function_parm_tags = last_function_parm_tags;
8d08fdba 13395
a8f73d4b
MM
13396 /* Make sure the parameter and return types are reasonable. When
13397 you declare a function, these types can be incomplete, but they
13398 must be complete when you define the function. */
5156628f 13399 if (! processing_template_decl)
f444e36b 13400 check_function_type (decl1, current_function_parms);
f181d4ae 13401
a8f73d4b
MM
13402 /* Build the return declaration for the function. */
13403 restype = TREE_TYPE (fntype);
13404 if (!processing_template_decl)
13405 {
13406 if (!DECL_RESULT (decl1))
5566b478 13407 {
5566b478 13408 DECL_RESULT (decl1)
a8f73d4b 13409 = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (restype));
68642fb6
UD
13410 c_apply_type_quals_to_decl (CP_TYPE_QUALS (restype),
13411 DECL_RESULT (decl1));
5566b478 13412 }
5566b478 13413 }
a8f73d4b
MM
13414 else
13415 /* Just use `void'. Nobody will ever look at this anyhow. */
13416 DECL_RESULT (decl1) = build_decl (RESULT_DECL, 0, void_type_node);
13417
13418 /* Initialize RTL machinery. We cannot do this until
13419 CURRENT_FUNCTION_DECL and DECL_RESULT are set up. We do this
13420 even when processing a template; this is how we get
c00996a3
JM
13421 CFUN set up, and our per-function variables initialized.
13422 FIXME factor out the non-RTL stuff. */
a8f73d4b
MM
13423 bl = current_binding_level;
13424 init_function_start (decl1, input_filename, lineno);
13425 current_binding_level = bl;
a8f73d4b
MM
13426
13427 /* Even though we're inside a function body, we still don't want to
13428 call expand_expr to calculate the size of a variable-sized array.
13429 We haven't necessarily assigned RTL to all variables yet, so it's
13430 not safe to try to expand expressions involving them. */
13431 immediate_size_expand = 0;
01d939e8 13432 cfun->x_dont_save_pending_sizes_p = 1;
a8f73d4b 13433
f444e36b
MM
13434 /* Start the statement-tree, start the tree now. */
13435 begin_stmt_tree (&DECL_SAVED_TREE (decl1));
6f80451c 13436
a8f73d4b 13437 /* Let the user know we're compiling this function. */
ea11ca7e 13438 announce_function (decl1);
b7484fbe 13439
878cd289
MS
13440 /* Record the decl so that the function name is defined.
13441 If we already have a decl for this name, and it is a FUNCTION_DECL,
13442 use the old decl. */
a8f73d4b 13443 if (!processing_template_decl && !(flags & SF_PRE_PARSED))
878cd289 13444 {
75650646 13445 /* A specialization is not used to guide overload resolution. */
2228d450 13446 if (!DECL_TEMPLATE_SPECIALIZATION (decl1)
959d8796 13447 && ! DECL_FUNCTION_MEMBER_P (decl1))
75650646 13448 decl1 = pushdecl (decl1);
2c73f9f5 13449 else
b7698cf0
JM
13450 {
13451 /* We need to set the DECL_CONTEXT. */
13452 if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
13453 DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
13454 /* And make sure we have enough default args. */
13455 check_default_args (decl1);
13456 }
878cd289
MS
13457 fntype = TREE_TYPE (decl1);
13458 }
5566b478 13459
a8f73d4b 13460 /* Reset these in case the call to pushdecl changed them. */
5566b478 13461 current_function_decl = decl1;
01d939e8 13462 cfun->decl = decl1;
878cd289 13463
78c120b5
MM
13464 /* If we are (erroneously) defining a function that we have already
13465 defined before, wipe out what we knew before. */
5362b086 13466 if (!DECL_PENDING_INLINE_P (decl1)
78c120b5
MM
13467 && DECL_SAVED_FUNCTION_DATA (decl1))
13468 {
13469 free (DECL_SAVED_FUNCTION_DATA (decl1));
13470 DECL_SAVED_FUNCTION_DATA (decl1) = NULL;
13471 }
b35d4555 13472
f444e36b 13473 if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1))
b35d4555
MM
13474 {
13475 /* We know that this was set up by `grokclassfn'. We do not
13476 wait until `store_parm_decls', since evil parse errors may
13477 never get us to that point. Here we keep the consistency
13478 between `current_class_type' and `current_class_ptr'. */
13479 tree t = DECL_ARGUMENTS (decl1);
68642fb6
UD
13480
13481 my_friendly_assert (t != NULL_TREE && TREE_CODE (t) == PARM_DECL,
b35d4555
MM
13482 162);
13483 my_friendly_assert (TREE_CODE (TREE_TYPE (t)) == POINTER_TYPE,
13484 19990811);
68642fb6
UD
13485
13486 cp_function_chain->x_current_class_ref
b35d4555
MM
13487 = build_indirect_ref (t, NULL_PTR);
13488 cp_function_chain->x_current_class_ptr = t;
13489
018fc244
MM
13490 /* Constructors and destructors need to know whether they're "in
13491 charge" of initializing virtual base classes. */
e0fff4b3 13492 t = TREE_CHAIN (t);
454fa7a7 13493 if (DECL_HAS_IN_CHARGE_PARM_P (decl1))
e0fff4b3
JM
13494 {
13495 current_in_charge_parm = t;
13496 t = TREE_CHAIN (t);
13497 }
13498 if (DECL_HAS_VTT_PARM_P (decl1))
13499 {
13500 if (DECL_NAME (t) != vtt_parm_identifier)
13501 abort ();
13502 current_vtt_parm = t;
13503 }
b35d4555
MM
13504 }
13505
db5ae43f 13506 if (DECL_INTERFACE_KNOWN (decl1))
faae18ab 13507 {
4f1c5b7d 13508 tree ctx = decl_function_context (decl1);
86052cc3 13509
faae18ab
MS
13510 if (DECL_NOT_REALLY_EXTERN (decl1))
13511 DECL_EXTERNAL (decl1) = 0;
86052cc3 13512
68642fb6 13513 if (ctx != NULL_TREE && DECL_THIS_INLINE (ctx)
86052cc3
JM
13514 && TREE_PUBLIC (ctx))
13515 /* This is a function in a local class in an extern inline
13516 function. */
13517 comdat_linkage (decl1);
faae18ab 13518 }
8d08fdba
MS
13519 /* If this function belongs to an interface, it is public.
13520 If it belongs to someone else's interface, it is also external.
1f901793 13521 This only affects inlines and template instantiations. */
5566b478
MS
13522 else if (interface_unknown == 0
13523 && (! DECL_TEMPLATE_INSTANTIATION (decl1)
d11ad92e 13524 || flag_alt_external_templates))
8d08fdba 13525 {
5566b478 13526 if (DECL_THIS_INLINE (decl1) || DECL_TEMPLATE_INSTANTIATION (decl1)
5156628f 13527 || processing_template_decl)
1f901793
JM
13528 {
13529 DECL_EXTERNAL (decl1)
13530 = (interface_only
9c73ec84
MS
13531 || (DECL_THIS_INLINE (decl1) && ! flag_implement_inlines
13532 && !DECL_VINDEX (decl1)));
1f901793
JM
13533
13534 /* For WIN32 we also want to put these in linkonce sections. */
13535 maybe_make_one_only (decl1);
13536 }
db5ae43f 13537 else
893de33c 13538 DECL_EXTERNAL (decl1) = 0;
e8abc66f 13539 DECL_NOT_REALLY_EXTERN (decl1) = 0;
db5ae43f 13540 DECL_INTERFACE_KNOWN (decl1) = 1;
8d08fdba 13541 }
c16c47fb
JM
13542 else if (interface_unknown && interface_only
13543 && (! DECL_TEMPLATE_INSTANTIATION (decl1)
13544 || flag_alt_external_templates))
13545 {
13546 /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
13547 interface, we will have interface_only set but not
13548 interface_known. In that case, we don't want to use the normal
13549 heuristics because someone will supply a #pragma implementation
13550 elsewhere, and deducing it here would produce a conflict. */
13551 comdat_linkage (decl1);
13552 DECL_EXTERNAL (decl1) = 0;
13553 DECL_INTERFACE_KNOWN (decl1) = 1;
13554 DECL_DEFER_OUTPUT (decl1) = 1;
13555 }
8d08fdba 13556 else
a0a33927
MS
13557 {
13558 /* This is a definition, not a reference.
b7484fbe
MS
13559 So clear DECL_EXTERNAL. */
13560 DECL_EXTERNAL (decl1) = 0;
faae18ab 13561
5566b478
MS
13562 if ((DECL_THIS_INLINE (decl1) || DECL_TEMPLATE_INSTANTIATION (decl1))
13563 && ! DECL_INTERFACE_KNOWN (decl1)
13564 /* Don't try to defer nested functions for now. */
4f1c5b7d 13565 && ! decl_function_context (decl1))
878cd289
MS
13566 DECL_DEFER_OUTPUT (decl1) = 1;
13567 else
893de33c 13568 DECL_INTERFACE_KNOWN (decl1) = 1;
db5ae43f 13569 }
a9aedbc2 13570
f444e36b
MM
13571 pushlevel (0);
13572 current_binding_level->parm_flag = 1;
8d08fdba 13573
f30432d7
MS
13574 if (attrs)
13575 cplus_decl_attributes (decl1, NULL_TREE, attrs);
68642fb6 13576
8d08fdba
MS
13577 /* Promote the value to int before returning it. */
13578 if (C_PROMOTING_INTEGER_TYPE_P (restype))
5566b478
MS
13579 restype = type_promotes_to (restype);
13580
8d08fdba 13581 if (DECL_RESULT (decl1) == NULL_TREE)
f30432d7
MS
13582 {
13583 DECL_RESULT (decl1)
13584 = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (restype));
91063b51
MM
13585 TREE_READONLY (DECL_RESULT (decl1)) = CP_TYPE_CONST_P (restype);
13586 TREE_THIS_VOLATILE (DECL_RESULT (decl1)) = CP_TYPE_VOLATILE_P (restype);
f30432d7 13587 }
8d08fdba 13588
5566b478
MS
13589 ++function_depth;
13590
0d9eb3ba 13591 if (DECL_DESTRUCTOR_P (decl1))
46e8c075
MM
13592 {
13593 dtor_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
13594 DECL_CONTEXT (dtor_label) = current_function_decl;
13595 }
8d08fdba 13596
f444e36b
MM
13597 store_parm_decls (current_function_parms);
13598
8d08fdba
MS
13599 return 1;
13600}
13601\f
13602/* Store the parameter declarations into the current function declaration.
13603 This is called after parsing the parameter declarations, before
13604 digesting the body of the function.
13605
13606 Also install to binding contour return value identifier, if any. */
13607
f444e36b
MM
13608static void
13609store_parm_decls (current_function_parms)
13610 tree current_function_parms;
8d08fdba
MS
13611{
13612 register tree fndecl = current_function_decl;
13613 register tree parm;
13614 int parms_have_cleanups = 0;
eb66be0e 13615 tree cleanups = NULL_TREE;
8d08fdba 13616
8d08fdba
MS
13617 /* This is a list of types declared among parms in a prototype. */
13618 tree parmtags = current_function_parm_tags;
13619
13620 /* This is a chain of any other decls that came in among the parm
13621 declarations. If a parm is declared with enum {foo, bar} x;
13622 then CONST_DECLs for foo and bar are put here. */
13623 tree nonparms = NULL_TREE;
13624
b35d4555 13625 if (current_function_parms)
8d08fdba
MS
13626 {
13627 /* This case is when the function was defined with an ANSI prototype.
13628 The parms already have decls, so we need not do anything here
13629 except record them as in effect
13630 and complain if any redundant old-style parm decls were written. */
13631
b35d4555
MM
13632 tree specparms = current_function_parms;
13633 tree next;
13634
f444e36b 13635 /* Must clear this because it might contain TYPE_DECLs declared
b35d4555 13636 at class level. */
f444e36b 13637 storedecls (NULL_TREE);
8d08fdba 13638
f444e36b 13639 /* If we're doing semantic analysis, then we'll call pushdecl
b35d4555
MM
13640 for each of these. We must do them in reverse order so that
13641 they end in the correct forward order. */
f444e36b 13642 specparms = nreverse (specparms);
5566b478 13643
b35d4555 13644 for (parm = specparms; parm; parm = next)
8d08fdba
MS
13645 {
13646 next = TREE_CHAIN (parm);
13647 if (TREE_CODE (parm) == PARM_DECL)
13648 {
f444e36b 13649 tree cleanup;
fe1b3b96 13650
f444e36b
MM
13651 if (DECL_NAME (parm) == NULL_TREE
13652 || TREE_CODE (parm) != VOID_TYPE)
13653 pushdecl (parm);
13654 else
13655 cp_error ("parameter `%D' declared void", parm);
eb66be0e 13656
5362b086 13657 cleanup = (processing_template_decl
f444e36b
MM
13658 ? NULL_TREE
13659 : maybe_build_cleanup (parm));
68642fb6 13660
f444e36b
MM
13661 if (cleanup)
13662 cleanups = tree_cons (parm, cleanup, cleanups);
8d08fdba
MS
13663 }
13664 else
13665 {
13666 /* If we find an enum constant or a type tag,
13667 put it aside for the moment. */
13668 TREE_CHAIN (parm) = NULL_TREE;
13669 nonparms = chainon (nonparms, parm);
13670 }
13671 }
13672
f444e36b
MM
13673 /* Get the decls in their original chain order and record in the
13674 function. This is all and only the PARM_DECLs that were
13675 pushed into scope by the loop above. */
13676 DECL_ARGUMENTS (fndecl) = getdecls ();
13677 storetags (chainon (parmtags, gettags ()));
8d08fdba
MS
13678 }
13679 else
13680 DECL_ARGUMENTS (fndecl) = NULL_TREE;
13681
13682 /* Now store the final chain of decls for the arguments
13683 as the decl-chain of the current lexical scope.
13684 Put the enumerators in as well, at the front so that
13685 DECL_ARGUMENTS is not modified. */
f444e36b 13686 storedecls (chainon (nonparms, DECL_ARGUMENTS (fndecl)));
eb448459 13687
eb66be0e
MS
13688 /* Now that we have initialized the parms, we can start their
13689 cleanups. We cannot do this before, since expand_decl_cleanup
13690 should not be called before the parm can be used. */
fe1b3b96
MM
13691 while (cleanups)
13692 {
68642fb6 13693 finish_decl_cleanup (TREE_PURPOSE (cleanups),
fe1b3b96
MM
13694 TREE_VALUE (cleanups));
13695 cleanups = TREE_CHAIN (cleanups);
13696 }
eb66be0e 13697
8d08fdba 13698 /* Create a binding contour which can be used to catch
f444e36b 13699 cleanup-generated temporaries. */
8d08fdba 13700 if (parms_have_cleanups)
f444e36b 13701 pushlevel (0);
8d08fdba 13702
b35d4555 13703 /* Do the starting of the exception specifications, if we have any. */
68642fb6 13704 if (flag_exceptions && !processing_template_decl
1660cb3a 13705 && flag_enforce_eh_specs
b35d4555
MM
13706 && TYPE_RAISES_EXCEPTIONS (TREE_TYPE (current_function_decl)))
13707 current_eh_spec_try_block = expand_start_eh_spec ();
8d08fdba
MS
13708}
13709
8d08fdba 13710\f
59026e79
MM
13711/* We have finished doing semantic analysis on DECL, but have not yet
13712 generated RTL for its body. Save away our current state, so that
13713 when we want to generate RTL later we know what to do. */
13714
13715static void
13716save_function_data (decl)
13717 tree decl;
13718{
ae499cce 13719 struct cp_language_function *f;
59026e79
MM
13720
13721 /* Save the language-specific per-function data so that we can
13722 get it back when we really expand this function. */
13723 my_friendly_assert (!DECL_PENDING_INLINE_P (decl),
13724 19990908);
68642fb6 13725
59026e79 13726 /* Make a copy. */
ae499cce
MM
13727 f = ((struct cp_language_function *)
13728 xmalloc (sizeof (struct cp_language_function)));
4e135bdd 13729 memcpy (f, cp_function_chain, sizeof (struct cp_language_function));
59026e79
MM
13730 DECL_SAVED_FUNCTION_DATA (decl) = f;
13731
13732 /* Clear out the bits we don't need. */
ae499cce
MM
13733 f->base.x_stmt_tree.x_last_stmt = NULL_TREE;
13734 f->base.x_stmt_tree.x_last_expr_type = NULL_TREE;
59026e79
MM
13735 f->x_named_label_uses = NULL;
13736 f->bindings = NULL;
8e4ce833 13737 f->x_local_names = NULL;
59026e79
MM
13738
13739 /* When we get back here again, we will be expanding. */
13740 f->x_expanding_p = 1;
914653a2
MM
13741
13742 /* If we've already decided that we cannot inline this function, we
13743 must remember that fact when we actually go to expand the
13744 function. */
13745 f->cannot_inline = current_function_cannot_inline;
59026e79
MM
13746}
13747
efee38a9
MM
13748/* At the end of every constructor we generate to code to return
13749 `this'. Do that now. */
13750
13751static void
13752finish_constructor_body ()
13753{
13754 /* Any return from a constructor will end up here. */
3dbc07b6 13755 if (ctor_label)
ae499cce 13756 add_stmt (build_stmt (LABEL_STMT, ctor_label));
efee38a9
MM
13757
13758 /* Clear CTOR_LABEL so that finish_return_stmt knows to really
13759 generate the return, rather than a goto to CTOR_LABEL. */
13760 ctor_label = NULL_TREE;
13761 /* In check_return_expr we translate an empty return from a
13762 constructor to a return of `this'. */
13763 finish_return_stmt (NULL_TREE);
46e8c075 13764 /* Mark the end of the constructor. */
ae499cce 13765 add_stmt (build_stmt (CTOR_STMT));
efee38a9
MM
13766}
13767
9bfadf57
MM
13768/* At the end of every destructor we generate code to restore virtual
13769 function tables to the values desired by base classes and to call
efee38a9 13770 to base class destructors. Do that now. */
9bfadf57
MM
13771
13772static void
13773finish_destructor_body ()
13774{
13775 tree compound_stmt;
9bfadf57
MM
13776 tree exprstmt;
13777
13778 /* Create a block to contain all the extra code. */
13779 compound_stmt = begin_compound_stmt (/*has_no_scope=*/0);
13780
efee38a9 13781 /* Any return from a destructor will end up here. */
ae499cce 13782 add_stmt (build_stmt (LABEL_STMT, dtor_label));
efee38a9 13783
9bfadf57
MM
13784 /* Generate the code to call destructor on base class. If this
13785 destructor belongs to a class with virtual functions, then set
13786 the virtual function table pointer to represent the type of our
13787 base class. */
13788
13789 /* This side-effect makes call to `build_delete' generate the code
13790 we have to have at the end of this destructor. `build_delete'
13791 will set the flag again. */
13792 TYPE_HAS_DESTRUCTOR (current_class_type) = 0;
13793
9bfadf57 13794 exprstmt = build_delete (current_class_type,
68642fb6 13795 current_class_ref,
86f45d2c 13796 sfk_base_destructor,
68642fb6 13797 LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR|LOOKUP_NORMAL,
9bfadf57
MM
13798 0);
13799
13800 if (exprstmt != error_mark_node
13801 && (TREE_CODE (exprstmt) != NOP_EXPR
13802 || TREE_OPERAND (exprstmt, 0) != integer_zero_node
13803 || TYPE_USES_VIRTUAL_BASECLASSES (current_class_type)))
13804 {
9bfadf57
MM
13805 if (exprstmt != void_zero_node)
13806 /* Don't call `expand_expr_stmt' if we're not going to do
13807 anything, since -Wall will give a diagnostic. */
13808 finish_expr_stmt (exprstmt);
13809
efee38a9 13810 /* Run destructors for all virtual baseclasses. */
9bfadf57
MM
13811 if (TYPE_USES_VIRTUAL_BASECLASSES (current_class_type))
13812 {
a55583e9
MM
13813 tree vbases;
13814 tree if_stmt;
13815
13816 if_stmt = begin_if_stmt ();
9bfadf57 13817 finish_if_stmt_cond (build (BIT_AND_EXPR, integer_type_node,
68642fb6 13818 current_in_charge_parm,
9bfadf57
MM
13819 integer_two_node),
13820 if_stmt);
13821
a55583e9
MM
13822 vbases = CLASSTYPE_VBASECLASSES (current_class_type);
13823 /* The CLASSTYPE_VBASECLASSES list is in initialization
13824 order, so we have to march through it in reverse order. */
13825 for (vbases = nreverse (copy_list (vbases));
13826 vbases;
13827 vbases = TREE_CHAIN (vbases))
9bfadf57 13828 {
a55583e9 13829 tree vbase = TREE_VALUE (vbases);
9f724b6a 13830 tree base_type = BINFO_TYPE (vbase);
a55583e9 13831
9f724b6a 13832 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (base_type))
9bfadf57 13833 {
9f724b6a
NS
13834 tree base_ptr_type = build_pointer_type (base_type);
13835 tree expr = current_class_ptr;
13836
13837 /* Convert to the basetype here, as we know the layout is
13838 fixed. What is more, if we let build_method_call do it,
13839 it will use the vtable, which may have been clobbered
13840 by the deletion of our primary base. */
13841
13842 expr = build1 (NOP_EXPR, base_ptr_type, expr);
13843 expr = build (PLUS_EXPR, base_ptr_type, expr,
13844 BINFO_OFFSET (vbase));
13845 expr = build_indirect_ref (expr, NULL);
13846 expr = build_method_call (expr, base_dtor_identifier,
13847 NULL_TREE, vbase,
13848 LOOKUP_NORMAL);
13849 finish_expr_stmt (expr);
9bfadf57 13850 }
9bfadf57
MM
13851 }
13852
13853 finish_then_clause (if_stmt);
13854 finish_if_stmt ();
13855 }
13856 }
68642fb6 13857
52682a1b
MM
13858 /* In a virtual destructor, we must call delete. */
13859 if (DECL_VIRTUAL_P (current_function_decl))
13860 {
13861 tree if_stmt;
13862 tree virtual_size = c_sizeof (current_class_type);
68642fb6 13863
52682a1b 13864 /* [class.dtor]
68642fb6 13865
52682a1b
MM
13866 At the point of definition of a virtual destructor (including
13867 an implicit definition), non-placement operator delete shall
13868 be looked up in the scope of the destructor's class and if
13869 found shall be accessible and unambiguous. */
13870 exprstmt = build_op_delete_call
13871 (DELETE_EXPR, current_class_ptr, virtual_size,
13872 LOOKUP_NORMAL | LOOKUP_SPECULATIVELY, NULL_TREE);
298d6f60 13873
52682a1b
MM
13874 if_stmt = begin_if_stmt ();
13875 finish_if_stmt_cond (build (BIT_AND_EXPR, integer_type_node,
13876 current_in_charge_parm,
13877 integer_one_node),
13878 if_stmt);
13879 finish_expr_stmt (exprstmt);
13880 finish_then_clause (if_stmt);
13881 finish_if_stmt ();
13882 }
9bfadf57
MM
13883
13884 /* Close the block we started above. */
13885 finish_compound_stmt (/*has_no_scope=*/0, compound_stmt);
13886}
13887
8d08fdba
MS
13888/* Finish up a function declaration and compile that function
13889 all the way to assembler language output. The free the storage
13890 for the function definition.
13891
68642fb6
UD
13892 FLAGS is a bitwise or of the following values:
13893 1 - CALL_POPLEVEL
f181d4ae
MM
13894 An extra call to poplevel (and expand_end_bindings) must be
13895 made to take care of the binding contour for the base
13896 initializers. This is only relevant for constructors.
13897 2 - INCLASS_INLINE
13898 We just finished processing the body of an in-class inline
13899 function definition. (This processing will have taken place
87e3dbc9 13900 after the class definition is complete.) */
8d08fdba 13901
4d6abc1c 13902tree
0acf7199 13903finish_function (flags)
f181d4ae 13904 int flags;
8d08fdba
MS
13905{
13906 register tree fndecl = current_function_decl;
13907 tree fntype, ctype = NULL_TREE;
f181d4ae
MM
13908 int call_poplevel = (flags & 1) != 0;
13909 int inclass_inline = (flags & 2) != 0;
87e3dbc9 13910 int nested;
8d08fdba
MS
13911
13912 /* When we get some parse errors, we can end up without a
13913 current_function_decl, so cope. */
13914 if (fndecl == NULL_TREE)
4d6abc1c 13915 return error_mark_node;
8d08fdba 13916
87e3dbc9 13917 nested = function_depth > 1;
8d08fdba
MS
13918 fntype = TREE_TYPE (fndecl);
13919
9bfadf57
MM
13920 /* TREE_READONLY (fndecl) = 1;
13921 This caused &foo to be of type ptr-to-const-function
13922 which then got a warning when stored in a ptr-to-function variable. */
8d08fdba 13923
f444e36b 13924 my_friendly_assert (building_stmt_tree (), 20000911);
8d08fdba 13925
db9b2174
MM
13926 /* For a cloned function, we've already got all the code we need;
13927 there's no need to add any extra bits. */
f444e36b 13928 if (!DECL_CLONED_FUNCTION_P (fndecl))
8d08fdba 13929 {
efee38a9
MM
13930 if (DECL_CONSTRUCTOR_P (fndecl))
13931 {
13932 finish_constructor_body ();
13933 if (call_poplevel)
13934 do_poplevel ();
13935 }
9bfadf57
MM
13936 else if (DECL_DESTRUCTOR_P (fndecl) && !processing_template_decl)
13937 finish_destructor_body ();
efee38a9
MM
13938 else if (DECL_MAIN_P (fndecl))
13939 {
13940 /* Make it so that `main' always returns 0 by default. */
13941#ifdef VMS
13942 finish_return_stmt (integer_one_node);
13943#else
13944 finish_return_stmt (integer_zero_node);
13945#endif
13946 }
87e3dbc9 13947
b35d4555
MM
13948 /* Finish dealing with exception specifiers. */
13949 if (flag_exceptions && !processing_template_decl
1660cb3a 13950 && flag_enforce_eh_specs
b35d4555 13951 && TYPE_RAISES_EXCEPTIONS (TREE_TYPE (current_function_decl)))
68642fb6 13952 expand_end_eh_spec (TYPE_RAISES_EXCEPTIONS
b35d4555
MM
13953 (TREE_TYPE (current_function_decl)),
13954 current_eh_spec_try_block);
5566b478 13955 }
68642fb6 13956
558475f0 13957 /* If we're saving up tree structure, tie off the function now. */
f444e36b 13958 finish_stmt_tree (&DECL_SAVED_TREE (fndecl));
8d2733ca 13959
8d08fdba
MS
13960 /* This must come after expand_function_end because cleanups might
13961 have declarations (from inline functions) that need to go into
13962 this function's blocks. */
f444e36b
MM
13963 if (current_binding_level->parm_flag != 1)
13964 my_friendly_abort (122);
13965 poplevel (1, 0, 1);
8d08fdba 13966
a8f73d4b 13967 /* Remember that we were in class scope. */
db5ae43f 13968 if (current_class_name)
a8f73d4b 13969 ctype = current_class_type;
db5ae43f 13970
1caa11d3
MM
13971 /* Must mark the RESULT_DECL as being in this function. */
13972 DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
13973
13974 /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
13975 to the FUNCTION_DECL node itself. */
13976 BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
13977
59026e79 13978 /* Save away current state, if appropriate. */
f444e36b 13979 if (!processing_template_decl)
59026e79
MM
13980 save_function_data (fndecl);
13981
95fabfd3
MM
13982 /* If this function calls `setjmp' it cannot be inlined. When
13983 `longjmp' is called it is not guaranteed to restore the value of
13984 local variables that have been modified since the call to
13985 `setjmp'. So, if were to inline this function into some caller
13986 `c', then when we `longjmp', we might not restore all variables
13987 in `c'. (It might seem, at first blush, that there's no way for
13988 this function to modify local variables in `c', but their
13989 addresses may have been stored somewhere accessible to this
13990 function.) */
f444e36b 13991 if (!processing_template_decl && calls_setjmp_p (fndecl))
95fabfd3
MM
13992 DECL_UNINLINABLE (fndecl) = 1;
13993
f444e36b
MM
13994 /* Clear out memory we no longer need. */
13995 free_after_parsing (cfun);
13996 /* Since we never call rest_of_compilation, we never clear
13997 CFUN. Do so explicitly. */
13998 free_after_compilation (cfun);
13999 cfun = NULL;
a8f73d4b
MM
14000
14001 /* If this is a in-class inline definition, we may have to pop the
14002 bindings for the template parameters that we added in
14003 maybe_begin_member_template_processing when start_function was
14004 called. */
14005 if (inclass_inline)
14006 maybe_end_member_template_processing ();
14007
14008 /* Leave the scope of the class. */
14009 if (ctype)
14010 pop_nested_class ();
5566b478
MS
14011
14012 --function_depth;
8d08fdba 14013
4d6abc1c 14014 /* Clean up. */
28cbf42c 14015 if (! nested)
1f8f4a0b
MM
14016 /* Let the error reporting routines know that we're outside a
14017 function. For a nested function, this value is used in
14018 pop_cp_function_context and then reset via pop_function_context. */
14019 current_function_decl = NULL_TREE;
4d6abc1c
MM
14020
14021 return fndecl;
8d08fdba
MS
14022}
14023\f
14024/* Create the FUNCTION_DECL for a function definition.
8d08fdba
MS
14025 DECLSPECS and DECLARATOR are the parts of the declaration;
14026 they describe the return type and the name of the function,
14027 but twisted together in a fashion that parallels the syntax of C.
14028
14029 This function creates a binding context for the function body
14030 as well as setting up the FUNCTION_DECL in current_function_decl.
14031
14032 Returns a FUNCTION_DECL on success.
14033
14034 If the DECLARATOR is not suitable for a function (it defines a datum
14035 instead), we return 0, which tells yyparse to report a parse error.
14036
14037 May return void_type_node indicating that this method is actually
14038 a friend. See grokfield for more details.
14039
14040 Came here with a `.pushlevel' .
14041
14042 DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
14043 CHANGES TO CODE IN `grokfield'. */
e92cc029 14044
8d08fdba 14045tree
acf82af2
JM
14046start_method (declspecs, declarator, attrlist)
14047 tree declarator, declspecs, attrlist;
8d08fdba 14048{
c11b6f21 14049 tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
acf82af2 14050 attrlist);
8d08fdba
MS
14051
14052 /* Something too ugly to handle. */
14053 if (fndecl == NULL_TREE)
14054 return NULL_TREE;
14055
14056 /* Pass friends other than inline friend functions back. */
a1774733 14057 if (fndecl == void_type_node)
8d08fdba
MS
14058 return fndecl;
14059
14060 if (TREE_CODE (fndecl) != FUNCTION_DECL)
14061 /* Not a function, tell parser to report parse error. */
14062 return NULL_TREE;
14063
8d08fdba
MS
14064 if (DECL_IN_AGGR_P (fndecl))
14065 {
14066 if (IDENTIFIER_ERROR_LOCUS (DECL_ASSEMBLER_NAME (fndecl)) != current_class_type)
14067 {
68642fb6 14068 if (DECL_CONTEXT (fndecl)
2c73f9f5 14069 && TREE_CODE( DECL_CONTEXT (fndecl)) != NAMESPACE_DECL)
2ae7bada
NS
14070 cp_error ("`%D' is already defined in class `%T'", fndecl,
14071 DECL_CONTEXT (fndecl));
8d08fdba
MS
14072 }
14073 return void_type_node;
14074 }
14075
f3400fe2
JM
14076 check_template_shadow (fndecl);
14077
faae18ab
MS
14078 DECL_THIS_INLINE (fndecl) = 1;
14079
8926095f 14080 if (flag_default_inline)
8d08fdba
MS
14081 DECL_INLINE (fndecl) = 1;
14082
36a117a5
MM
14083 /* We process method specializations in finish_struct_1. */
14084 if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
3ac3d9ea 14085 fndecl = push_template_decl (fndecl);
a0a33927 14086
8d08fdba
MS
14087 if (! DECL_FRIEND_P (fndecl))
14088 {
8d08fdba
MS
14089 if (TREE_CHAIN (fndecl))
14090 {
14091 fndecl = copy_node (fndecl);
14092 TREE_CHAIN (fndecl) = NULL_TREE;
14093 }
14094
14095 if (DECL_CONSTRUCTOR_P (fndecl))
a0a33927
MS
14096 {
14097 if (! grok_ctor_properties (current_class_type, fndecl))
14098 return void_type_node;
14099 }
8d08fdba
MS
14100 else if (IDENTIFIER_OPNAME_P (DECL_NAME (fndecl)))
14101 grok_op_properties (fndecl, DECL_VIRTUAL_P (fndecl), 0);
14102 }
14103
cd9f6678 14104 cp_finish_decl (fndecl, NULL_TREE, NULL_TREE, 0);
8d08fdba
MS
14105
14106 /* Make a place for the parms */
14107 pushlevel (0);
14108 current_binding_level->parm_flag = 1;
68642fb6 14109
8d08fdba
MS
14110 DECL_IN_AGGR_P (fndecl) = 1;
14111 return fndecl;
14112}
14113
14114/* Go through the motions of finishing a function definition.
14115 We don't compile this method until after the whole class has
14116 been processed.
14117
14118 FINISH_METHOD must return something that looks as though it
14119 came from GROKFIELD (since we are defining a method, after all).
14120
14121 This is called after parsing the body of the function definition.
14122 STMTS is the chain of statements that makes up the function body.
14123
14124 DECL is the ..._DECL that `start_method' provided. */
14125
14126tree
14127finish_method (decl)
14128 tree decl;
14129{
14130 register tree fndecl = decl;
14131 tree old_initial;
8d08fdba
MS
14132
14133 register tree link;
14134
a1774733 14135 if (decl == void_type_node)
8d08fdba
MS
14136 return decl;
14137
14138 old_initial = DECL_INITIAL (fndecl);
14139
14140 /* Undo the level for the parms (from start_method).
14141 This is like poplevel, but it causes nothing to be
14142 saved. Saving information here confuses symbol-table
14143 output routines. Besides, this information will
14144 be correctly output when this method is actually
14145 compiled. */
14146
14147 /* Clear out the meanings of the local variables of this level;
14148 also record in each decl which block it belongs to. */
14149
14150 for (link = current_binding_level->names; link; link = TREE_CHAIN (link))
14151 {
14152 if (DECL_NAME (link) != NULL_TREE)
d8f8dca1 14153 pop_binding (DECL_NAME (link), link);
8d08fdba
MS
14154 my_friendly_assert (TREE_CODE (link) != FUNCTION_DECL, 163);
14155 DECL_CONTEXT (link) = NULL_TREE;
14156 }
14157
8d08fdba
MS
14158 GNU_xref_end_scope ((HOST_WIDE_INT) current_binding_level,
14159 (HOST_WIDE_INT) current_binding_level->level_chain,
14160 current_binding_level->parm_flag,
5566b478 14161 current_binding_level->keep);
8d08fdba
MS
14162
14163 poplevel (0, 0, 0);
14164
14165 DECL_INITIAL (fndecl) = old_initial;
14166
14167 /* We used to check if the context of FNDECL was different from
14168 current_class_type as another way to get inside here. This didn't work
14169 for String.cc in libg++. */
14170 if (DECL_FRIEND_P (fndecl))
14171 {
14172 CLASSTYPE_INLINE_FRIENDS (current_class_type)
14173 = tree_cons (NULL_TREE, fndecl, CLASSTYPE_INLINE_FRIENDS (current_class_type));
14174 decl = void_type_node;
14175 }
14176
14177 return decl;
14178}
14179\f
14180/* Called when a new struct TYPE is defined.
14181 If this structure or union completes the type of any previous
14182 variable declaration, lay it out and output its rtl. */
14183
14184void
14185hack_incomplete_structures (type)
14186 tree type;
14187{
f30432d7 14188 tree *list;
70adf8a9 14189 struct binding_level *level;
8d08fdba
MS
14190
14191 if (!type) /* Don't do this for class templates. */
14192 return;
14193
70adf8a9
JM
14194 if (namespace_bindings_p ())
14195 {
14196 level = 0;
14197 list = &namespace_scope_incomplete;
14198 }
14199 else
14200 {
14201 level = innermost_nonclass_level ();
14202 list = &level->incomplete;
14203 }
14204
14205 while (1)
14206 {
14207 while (*list)
14208 {
14209 tree decl = TREE_VALUE (*list);
14210 if ((decl && TREE_TYPE (decl) == type)
14211 || (TREE_TYPE (decl)
14212 && TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
14213 && TREE_TYPE (TREE_TYPE (decl)) == type))
f30432d7 14214 {
70adf8a9
JM
14215 int toplevel = toplevel_bindings_p ();
14216 if (TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
14217 && TREE_TYPE (TREE_TYPE (decl)) == type)
14218 layout_type (TREE_TYPE (decl));
14219 layout_decl (decl, 0);
14220 rest_of_decl_compilation (decl, NULL_PTR, toplevel, 0);
14221 if (! toplevel)
14222 {
14223 tree cleanup;
14224 expand_decl (decl);
14225 cleanup = maybe_build_cleanup (decl);
14226 expand_decl_init (decl);
14227 if (! expand_decl_cleanup (decl, cleanup))
14228 cp_error ("parser lost in parsing declaration of `%D'",
14229 decl);
14230 }
14231 *list = TREE_CHAIN (*list);
f30432d7 14232 }
70adf8a9
JM
14233 else
14234 list = &TREE_CHAIN (*list);
14235 }
14236
14237 /* Keep looking through artificial binding levels generated
14238 for local variables. */
14239 if (level && level->keep == 2)
14240 {
14241 level = level->level_chain;
14242 list = &level->incomplete;
f30432d7
MS
14243 }
14244 else
70adf8a9 14245 break;
f30432d7 14246 }
8d08fdba
MS
14247}
14248
86f45d2c
MM
14249/* If DECL is of a type which needs a cleanup, build that cleanup
14250 here. */
e92cc029 14251
86f45d2c
MM
14252tree
14253maybe_build_cleanup (decl)
14254 tree decl;
8d08fdba
MS
14255{
14256 tree type = TREE_TYPE (decl);
86f45d2c 14257
834c6dff 14258 if (type != error_mark_node && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
8d08fdba 14259 {
80048418 14260 int flags = LOOKUP_NORMAL|LOOKUP_DESTRUCTOR;
8d08fdba 14261 tree rval;
8d08fdba 14262
8d08fdba
MS
14263 if (TREE_CODE (type) == ARRAY_TYPE)
14264 rval = decl;
14265 else
14266 {
14267 mark_addressable (decl);
14268 rval = build_unary_op (ADDR_EXPR, decl, 0);
14269 }
14270
14271 /* Optimize for space over speed here. */
14272 if (! TYPE_USES_VIRTUAL_BASECLASSES (type)
14273 || flag_expensive_optimizations)
14274 flags |= LOOKUP_NONVIRTUAL;
14275
86f45d2c
MM
14276 rval = build_delete (TREE_TYPE (rval), rval,
14277 sfk_complete_destructor, flags, 0);
8d08fdba
MS
14278
14279 if (TYPE_USES_VIRTUAL_BASECLASSES (type)
14280 && ! TYPE_HAS_DESTRUCTOR (type))
e1b3e07d 14281 rval = build_compound_expr (tree_cons (NULL_TREE, rval,
051e6fd7 14282 build_tree_list (NULL_TREE, build_vbase_delete (type, decl))));
8d08fdba 14283
8d08fdba
MS
14284 return rval;
14285 }
14286 return 0;
14287}
14288\f
558475f0 14289/* When a stmt has been parsed, this function is called. */
8d08fdba
MS
14290
14291void
14292finish_stmt ()
14293{
558475f0
MM
14294 /* Always assume this statement was not an expression statement. If
14295 it actually was an expression statement, its our callers
14296 responsibility to fix this up. */
14297 last_expr_type = NULL_TREE;
8d08fdba
MS
14298}
14299
3afb32a4
MM
14300/* DECL was originally constructed as a non-static member function,
14301 but turned out to be static. Update it accordingly. */
700f8a87 14302
8857f91e 14303void
3afb32a4
MM
14304revert_static_member_fn (decl)
14305 tree decl;
8d08fdba 14306{
700f8a87 14307 tree tmp;
3afb32a4
MM
14308 tree function = TREE_TYPE (decl);
14309 tree args = TYPE_ARG_TYPES (function);
8d08fdba 14310
68642fb6 14311 if (CP_TYPE_QUALS (TREE_TYPE (TREE_VALUE (args)))
91063b51 14312 != TYPE_UNQUALIFIED)
68642fb6 14313 cp_error ("static member function `%#D' declared with type qualifiers",
11306230 14314 decl);
f30432d7 14315
700f8a87
MS
14316 args = TREE_CHAIN (args);
14317 tmp = build_function_type (TREE_TYPE (function), args);
91063b51 14318 tmp = build_qualified_type (tmp, CP_TYPE_QUALS (function));
f30432d7 14319 tmp = build_exception_variant (tmp,
8d08fdba 14320 TYPE_RAISES_EXCEPTIONS (function));
3afb32a4
MM
14321 TREE_TYPE (decl) = tmp;
14322 if (DECL_ARGUMENTS (decl))
14323 DECL_ARGUMENTS (decl) = TREE_CHAIN (DECL_ARGUMENTS (decl));
14324 DECL_STATIC_FUNCTION_P (decl) = 1;
8d08fdba 14325}
a4443a08 14326
68642fb6
UD
14327/* Initialize the variables used during compilation of a C++
14328 function. */
db5ae43f 14329
99dccabc
MM
14330static void
14331push_cp_function_context (f)
14332 struct function *f;
14333{
ae499cce
MM
14334 struct cp_language_function *p
14335 = ((struct cp_language_function *)
14336 xcalloc (1, sizeof (struct cp_language_function)));
14337 f->language = (struct language_function *) p;
db5ae43f 14338
b35d4555
MM
14339 /* It takes an explicit call to expand_body to generate RTL for a
14340 function. */
14341 expanding_p = 0;
f1dedc31
MM
14342
14343 /* Whenever we start a new function, we destroy temporaries in the
14344 usual way. */
ae499cce 14345 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
db5ae43f
MS
14346}
14347
a8f73d4b
MM
14348/* Free the language-specific parts of F, now that we've finished
14349 compiling the function. */
db5ae43f 14350
99dccabc
MM
14351static void
14352pop_cp_function_context (f)
14353 struct function *f;
db5ae43f 14354{
d658cd4c 14355 if (f->language)
8e4ce833
JJ
14356 {
14357 struct cp_language_function *cp =
14358 (struct cp_language_function *) f->language;
14359 if (cp->x_local_names)
14360 VARRAY_FREE (cp->x_local_names);
14361 free (f->language);
14362 }
99dccabc 14363 f->language = 0;
db5ae43f 14364}
ebfc180f 14365
59026e79 14366/* Mark P for GC. */
4519c0a8 14367
59026e79
MM
14368static void
14369mark_lang_function (p)
ae499cce 14370 struct cp_language_function *p;
59026e79 14371{
87e3dbc9
MM
14372 if (!p)
14373 return;
14374
8f17b5c5
MM
14375 mark_c_language_function (&p->base);
14376
4519c0a8
MM
14377 ggc_mark_tree (p->x_ctor_label);
14378 ggc_mark_tree (p->x_dtor_label);
4519c0a8
MM
14379 ggc_mark_tree (p->x_current_class_ptr);
14380 ggc_mark_tree (p->x_current_class_ref);
b35d4555 14381 ggc_mark_tree (p->x_eh_spec_try_block);
8e4ce833 14382 ggc_mark_tree_varray (p->x_local_names);
4519c0a8 14383
6625cdb5 14384 mark_named_label_lists (&p->x_named_labels, &p->x_named_label_uses);
a8f73d4b 14385 mark_binding_level (&p->bindings);
4519c0a8
MM
14386}
14387
59026e79
MM
14388/* Mark the language-specific data in F for GC. */
14389
a09ba2e0 14390static void
59026e79
MM
14391mark_cp_function_context (f)
14392 struct function *f;
14393{
ae499cce 14394 mark_lang_function ((struct cp_language_function *) f->language);
59026e79 14395}
4519c0a8 14396
4519c0a8
MM
14397void
14398lang_mark_tree (t)
14399 tree t;
14400{
14401 enum tree_code code = TREE_CODE (t);
14402 if (code == IDENTIFIER_NODE)
14403 {
14404 struct lang_identifier *li = (struct lang_identifier *) t;
14405 struct lang_id2 *li2 = li->x;
14406 ggc_mark_tree (li->namespace_bindings);
a8f73d4b 14407 ggc_mark_tree (li->bindings);
4519c0a8
MM
14408 ggc_mark_tree (li->class_value);
14409 ggc_mark_tree (li->class_template_info);
14410
14411 if (li2)
14412 {
14413 ggc_mark_tree (li2->label_value);
14414 ggc_mark_tree (li2->implicit_decl);
14415 ggc_mark_tree (li2->error_locus);
14416 }
14417 }
87e3dbc9
MM
14418 else if (code == CPLUS_BINDING)
14419 {
14420 if (BINDING_HAS_LEVEL_P (t))
14421 mark_binding_level (&BINDING_LEVEL (t));
14422 else
14423 ggc_mark_tree (BINDING_SCOPE (t));
14424 ggc_mark_tree (BINDING_VALUE (t));
14425 }
14426 else if (code == OVERLOAD)
14427 ggc_mark_tree (OVL_FUNCTION (t));
14428 else if (code == TEMPLATE_PARM_INDEX)
14429 ggc_mark_tree (TEMPLATE_PARM_DECL (t));
4519c0a8
MM
14430 else if (TREE_CODE_CLASS (code) == 'd')
14431 {
14432 struct lang_decl *ld = DECL_LANG_SPECIFIC (t);
14433
14434 if (ld)
14435 {
d60f72ae 14436 ggc_mark (ld);
8f17b5c5 14437 c_mark_lang_decl (&ld->decl_flags.base);
5362b086 14438 if (!DECL_GLOBAL_CTOR_P (t)
6462c441 14439 && !DECL_GLOBAL_DTOR_P (t)
8e4ce833
JJ
14440 && !DECL_THUNK_P (t)
14441 && !DECL_DISCRIMINATOR_P (t))
af3b4e59 14442 ggc_mark_tree (ld->decl_flags.u2.access);
31f8e4f3
MM
14443 else if (DECL_THUNK_P (t))
14444 ggc_mark_tree (ld->decl_flags.u2.vcall_offset);
4519c0a8
MM
14445 if (TREE_CODE (t) != NAMESPACE_DECL)
14446 ggc_mark_tree (ld->decl_flags.u.template_info);
16bb3387
JM
14447 else
14448 mark_binding_level (&NAMESPACE_LEVEL (t));
4519c0a8
MM
14449 if (CAN_HAVE_FULL_LANG_DECL_P (t))
14450 {
4519c0a8 14451 ggc_mark_tree (ld->befriending_classes);
8f17b5c5 14452 ggc_mark_tree (ld->context);
db9b2174 14453 ggc_mark_tree (ld->cloned_function);
8e4ce833 14454 ggc_mark_tree (ld->inlined_fns);
4519c0a8
MM
14455 if (TREE_CODE (t) == TYPE_DECL)
14456 ggc_mark_tree (ld->u.sorted_fields);
59026e79
MM
14457 else if (TREE_CODE (t) == FUNCTION_DECL
14458 && !DECL_PENDING_INLINE_P (t))
14459 mark_lang_function (DECL_SAVED_FUNCTION_DATA (t));
4519c0a8
MM
14460 }
14461 }
14462 }
14463 else if (TREE_CODE_CLASS (code) == 't')
14464 {
14465 struct lang_type *lt = TYPE_LANG_SPECIFIC (t);
14466
68642fb6 14467 if (lt && !(TREE_CODE (t) == POINTER_TYPE
87e3dbc9 14468 && TREE_CODE (TREE_TYPE (t)) == METHOD_TYPE))
4519c0a8 14469 {
c27db0df 14470 ggc_mark (lt);
911a71a7 14471 ggc_mark_tree (lt->primary_base);
4519c0a8
MM
14472 ggc_mark_tree (lt->vfields);
14473 ggc_mark_tree (lt->vbases);
14474 ggc_mark_tree (lt->tags);
4519c0a8 14475 ggc_mark_tree (lt->size);
fee7654e 14476 ggc_mark_tree (lt->pure_virtuals);
4519c0a8
MM
14477 ggc_mark_tree (lt->friend_classes);
14478 ggc_mark_tree (lt->rtti);
14479 ggc_mark_tree (lt->methods);
14480 ggc_mark_tree (lt->template_info);
87e3dbc9 14481 ggc_mark_tree (lt->befriending_classes);
4519c0a8 14482 }
87e3dbc9
MM
14483 else if (lt)
14484 /* In the case of pointer-to-member function types, the
14485 TYPE_LANG_SPECIFIC is really just a tree. */
14486 ggc_mark_tree ((tree) lt);
4519c0a8
MM
14487 }
14488}
5fd8e536
JM
14489
14490/* Return the IDENTIFIER_GLOBAL_VALUE of T, for use in common code, since
14491 the definition of IDENTIFIER_GLOBAL_VALUE is different for C and C++. */
14492
14493tree
14494identifier_global_value (t)
14495 tree t;
14496{
14497 return IDENTIFIER_GLOBAL_VALUE (t);
14498}
d363e7bf 14499
eaa7c03f
JM
14500/* Build the void_list_node (void_type_node having been created). */
14501tree
14502build_void_list_node ()
14503{
14504 tree t = build_tree_list (NULL_TREE, void_type_node);
14505 TREE_PARMLIST (t) = 1;
14506 return t;
14507}
14508
d363e7bf
AJ
14509static int
14510cp_missing_noreturn_ok_p (decl)
14511 tree decl;
14512{
14513 /* A missing noreturn is ok for the `main' function. */
92643fea 14514 return DECL_MAIN_P (decl);
d363e7bf 14515}
This page took 4.476552 seconds and 5 git commands to generate.