]> gcc.gnu.org Git - gcc.git/blame - gcc/cp/decl.c
class.c (VTT_TOP_LEVEL_P): Uppercase macro parameter and whitespace.
[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"
25af8512 38#include "tree-inline.h"
8d08fdba
MS
39#include "decl.h"
40#include "lex.h"
49c249e1
JM
41#include "output.h"
42#include "except.h"
54f92bfb 43#include "toplev.h"
7ddedda4 44#include "../hash.h"
4519c0a8 45#include "ggc.h"
0e9295cf 46#include "tm_p.h"
672a6f42 47#include "target.h"
26f943fd 48#include "c-common.h"
8d08fdba 49
91d231cb 50extern const struct attribute_spec *lang_attribute_table;
62c154ed 51
255512c1 52#ifndef BOOL_TYPE_SIZE
3461fba7 53/* `bool' has size and alignment `1', on all platforms. */
d2e5ee5c 54#define BOOL_TYPE_SIZE CHAR_TYPE_SIZE
e1cd6e56 55#endif
255512c1 56
5cce22b6 57static tree grokparms PARAMS ((tree));
158991b7 58static const char *redeclaration_error_message PARAMS ((tree, tree));
8d08fdba 59
158991b7 60static void push_binding_level PARAMS ((struct binding_level *, int,
49c249e1 61 int));
158991b7
KG
62static void pop_binding_level PARAMS ((void));
63static void suspend_binding_level PARAMS ((void));
64static void resume_binding_level PARAMS ((struct binding_level *));
65static struct binding_level *make_binding_level PARAMS ((void));
66static void declare_namespace_level PARAMS ((void));
6625cdb5 67static int decl_jump_unsafe PARAMS ((tree));
158991b7
KG
68static void storedecls PARAMS ((tree));
69static void require_complete_types_for_parms PARAMS ((tree));
596ea4e5
AS
70static int ambi_op_p PARAMS ((enum tree_code));
71static int unary_op_p PARAMS ((enum tree_code));
158991b7
KG
72static tree store_bindings PARAMS ((tree, tree));
73static tree lookup_tag_reverse PARAMS ((tree, tree));
74static tree obscure_complex_init PARAMS ((tree, tree));
158991b7 75static tree lookup_name_real PARAMS ((tree, int, int, int));
8e4ce833 76static void push_local_name PARAMS ((tree));
158991b7 77static void warn_extern_redeclared_static PARAMS ((tree, tree));
8e4ce833 78static tree grok_reference_init PARAMS ((tree, tree, tree));
158991b7 79static tree grokfndecl PARAMS ((tree, tree, tree, tree, int,
2c73f9f5 80 enum overload_flags, tree,
7a8f9fa9 81 tree, int, int, int, int, int, int, tree));
158991b7
KG
82static tree grokvardecl PARAMS ((tree, tree, RID_BIT_TYPE *, int, int, tree));
83static tree lookup_tag PARAMS ((enum tree_code, tree,
49c249e1
JM
84 struct binding_level *, int));
85static void set_identifier_type_value_with_scope
158991b7 86 PARAMS ((tree, tree, struct binding_level *));
158991b7 87static void record_unknown_type PARAMS ((tree, const char *));
596ea4e5 88static tree build_library_fn_1 PARAMS ((tree, enum tree_code, tree));
158991b7
KG
89static int member_function_or_else PARAMS ((tree, tree, enum overload_flags));
90static void bad_specifiers PARAMS ((tree, const char *, int, int, int, int,
49c249e1 91 int));
158991b7
KG
92static tree maybe_process_template_type_declaration PARAMS ((tree, int, struct binding_level*));
93static void check_for_uninitialized_const_var PARAMS ((tree));
94static unsigned long typename_hash PARAMS ((hash_table_key));
d6edb99e 95static bool typename_compare PARAMS ((hash_table_key, hash_table_key));
158991b7
KG
96static void push_binding PARAMS ((tree, tree, struct binding_level*));
97static int add_binding PARAMS ((tree, tree));
98static void pop_binding PARAMS ((tree, tree));
99static tree local_variable_p_walkfn PARAMS ((tree *, int *, void *));
100static tree find_binding PARAMS ((tree, tree));
101static tree select_decl PARAMS ((tree, int));
102static int lookup_flags PARAMS ((int, int));
103static tree qualify_lookup PARAMS ((tree, int));
104static tree record_builtin_java_type PARAMS ((const char *, int));
105static const char *tag_name PARAMS ((enum tag_types code));
106static void find_class_binding_level PARAMS ((void));
107static struct binding_level *innermost_nonclass_level PARAMS ((void));
108static void warn_about_implicit_typename_lookup PARAMS ((tree, tree));
109static int walk_namespaces_r PARAMS ((tree, walk_namespaces_fn, void *));
110static int walk_globals_r PARAMS ((tree, void *));
111static void add_decl_to_level PARAMS ((tree, struct binding_level *));
112static tree make_label_decl PARAMS ((tree, int));
6625cdb5
JM
113static void use_label PARAMS ((tree));
114static void check_previous_goto_1 PARAMS ((tree, struct binding_level *, tree,
115 const char *, int));
116static void check_previous_goto PARAMS ((struct named_label_use_list *));
117static void check_switch_goto PARAMS ((struct binding_level *));
118static void check_previous_gotos PARAMS ((tree));
119static void pop_label PARAMS ((tree, tree));
158991b7
KG
120static void pop_labels PARAMS ((tree));
121static void maybe_deduce_size_from_array_init PARAMS ((tree, tree));
122static void layout_var_decl PARAMS ((tree));
123static void maybe_commonize_var PARAMS ((tree));
124static tree check_initializer PARAMS ((tree, tree));
125static void make_rtl_for_nonlocal_decl PARAMS ((tree, tree, const char *));
126static void push_cp_function_context PARAMS ((struct function *));
127static void pop_cp_function_context PARAMS ((struct function *));
128static void mark_binding_level PARAMS ((void *));
2f8edb39 129static void mark_named_label_lists PARAMS ((void *, void *));
158991b7
KG
130static void mark_cp_function_context PARAMS ((struct function *));
131static void mark_saved_scope PARAMS ((void *));
ae499cce 132static void mark_lang_function PARAMS ((struct cp_language_function *));
158991b7 133static void save_function_data PARAMS ((tree));
f444e36b 134static void check_function_type PARAMS ((tree, tree));
158991b7
KG
135static void destroy_local_var PARAMS ((tree));
136static void finish_constructor_body PARAMS ((void));
137static void finish_destructor_body PARAMS ((void));
138static tree create_array_type_for_decl PARAMS ((tree, tree, tree));
139static tree get_atexit_node PARAMS ((void));
140static tree get_dso_handle_node PARAMS ((void));
141static tree start_cleanup_fn PARAMS ((void));
142static void end_cleanup_fn PARAMS ((void));
0ba8a114 143static tree cp_make_fname_decl PARAMS ((tree, int));
d43829f9 144static void initialize_predefined_identifiers PARAMS ((void));
5362b086 145static tree check_special_function_return_type
1f84ec23 146 PARAMS ((special_function_kind, tree, tree));
596ea4e5
AS
147static tree push_cp_library_fn PARAMS ((enum tree_code, tree));
148static tree build_cp_library_fn PARAMS ((tree, enum tree_code, tree));
f444e36b 149static void store_parm_decls PARAMS ((tree));
d363e7bf 150static int cp_missing_noreturn_ok_p PARAMS ((tree));
8d08fdba 151
69ac77ce 152#if defined (DEBUG_CP_BINDING_LEVELS)
158991b7 153static void indent PARAMS ((void));
69ac77ce
JL
154#endif
155
8d08fdba
MS
156/* Erroneous argument lists can use this *IFF* they do not modify it. */
157tree error_mark_list;
158
7f4edbcb 159/* The following symbols are subsumed in the cp_global_trees array, and
68642fb6 160 listed here individually for documentation purposes.
8d08fdba 161
7f4edbcb
BS
162 C++ extensions
163 tree wchar_decl_node;
37c46b43 164
7f4edbcb
BS
165 tree vtable_entry_type;
166 tree delta_type_node;
7f4edbcb 167 tree __t_desc_type_node;
db1147b2 168 tree ti_desc_type_node;
1f4cb92b 169 tree bltn_desc_type_node, ptr_desc_type_node;
db1147b2
NS
170 tree ary_desc_type_node, func_desc_type_node, enum_desc_type_node;
171 tree class_desc_type_node, si_class_desc_type_node, vmi_class_desc_type_node;
387769ed 172 tree ptm_desc_type_node;
db1147b2 173 tree base_desc_type_node;
8d08fdba 174
7f4edbcb
BS
175 tree class_type_node, record_type_node, union_type_node, enum_type_node;
176 tree unknown_type_node;
8d08fdba 177
7f4edbcb 178 Array type `vtable_entry_type[]'
8d08fdba 179
7f4edbcb
BS
180 tree vtbl_type_node;
181 tree vtbl_ptr_type_node;
8d08fdba 182
2854d3c6 183 Namespaces,
8d08fdba 184
7f4edbcb 185 tree std_node;
2854d3c6 186 tree abi_node;
8d08fdba 187
7f4edbcb
BS
188 A FUNCTION_DECL which can call `abort'. Not necessarily the
189 one that the user will declare, but sufficient to be called
190 by routines that want to abort the program.
8d08fdba 191
7f4edbcb 192 tree abort_fndecl;
8d08fdba 193
7f4edbcb 194 The FUNCTION_DECL for the default `::operator delete'.
2986ae00 195
7f4edbcb 196 tree global_delete_fndecl;
8d08fdba 197
7f4edbcb 198 Used by RTTI
669ec2b4
JM
199 tree type_info_type_node, tinfo_decl_id, tinfo_decl_type;
200 tree tinfo_var_id;
201
7f4edbcb 202*/
8d08fdba 203
7f4edbcb 204tree cp_global_trees[CPTI_MAX];
8d08fdba 205
2c73f9f5 206/* Indicates that there is a type value in some namespace, although
7f4edbcb 207 that is not necessarily in scope at the moment. */
2c73f9f5
ML
208
209static tree global_type_node;
210
3e3f722c
ML
211/* Expect only namespace names now. */
212static int only_namespace_names;
213
6625cdb5
JM
214/* Used only for jumps to as-yet undefined labels, since jumps to
215 defined labels can have their validity checked immediately. */
216
217struct named_label_use_list
e349ee73
MS
218{
219 struct binding_level *binding_level;
220 tree names_in_scope;
221 tree label_decl;
9c0758dd 222 const char *filename_o_goto;
e349ee73 223 int lineno_o_goto;
6625cdb5 224 struct named_label_use_list *next;
e349ee73
MS
225};
226
ed5511d9 227#define named_label_uses cp_function_chain->x_named_label_uses
8d08fdba 228
8e4ce833
JJ
229#define local_names cp_function_chain->x_local_names
230
8d08fdba
MS
231/* A list of objects which have constructors or destructors
232 which reside in the global scope. The decl is stored in
233 the TREE_VALUE slot and the initializer is stored
234 in the TREE_PURPOSE slot. */
235tree static_aggregates;
236
8d08fdba
MS
237/* -- end of C++ */
238
81b3411c 239/* A node for the integer constants 2, and 3. */
d11ad92e 240
81b3411c 241tree integer_two_node, integer_three_node;
8d08fdba 242
8d08fdba 243/* Similar, for last_function_parm_tags. */
9cd64686 244tree last_function_parms;
8d08fdba 245
6625cdb5
JM
246/* A list of all LABEL_DECLs in the function that have names. Here so
247 we can clear out their names' definitions at the end of the
248 function, and so we can check the validity of jumps to these labels. */
249
250struct named_label_list
251{
252 struct binding_level *binding_level;
253 tree names_in_scope;
254 tree old_value;
255 tree label_decl;
256 tree bad_decls;
6625cdb5 257 struct named_label_list *next;
826840d9
RH
258 unsigned int in_try_scope : 1;
259 unsigned int in_catch_scope : 1;
6625cdb5 260};
8d08fdba 261
4519c0a8 262#define named_labels cp_function_chain->x_named_labels
8d08fdba 263
b8458e3e
JM
264/* Nonzero means use the ISO C94 dialect of C. */
265
266int flag_isoc94;
267
83309c26 268/* Nonzero means use the ISO C99 dialect of C. */
68642fb6 269
83309c26 270int flag_isoc99;
68642fb6 271
93e2382f
JM
272/* Nonzero means we are a hosted implementation for code shared with C. */
273
274int flag_hosted = 1;
275
276/* Nonzero means add default format_arg attributes for functions not
277 in ISO C. */
278
279int flag_noniso_default_format_attributes = 1;
280
8d08fdba
MS
281/* Nonzero if we want to conserve space in the .o files. We do this
282 by putting uninitialized data and runtime initialized data into
ddd5a7c1 283 .common instead of .data at the expense of not flagging multiple
8d08fdba
MS
284 definitions. */
285extern int flag_conserve_space;
8d08fdba 286\f
51c184be 287/* C and C++ flags are in decl2.c. */
8d08fdba 288
51c184be 289/* Flag used when debugging spew.c */
8d08fdba
MS
290
291extern int spew_debug;
292
e92cc029
MS
293/* A expression of value 0 with the same precision as a sizetype
294 node, but signed. */
295tree signed_size_zero_node;
296
0c8feefe
MM
297/* The name of the anonymous namespace, throughout this translation
298 unit. */
299tree anonymous_namespace_name;
300
b2244c65
MM
301/* The number of function bodies which we are currently processing.
302 (Zero if we are at namespace scope, one inside the body of a
303 function, two inside the body of a function in a local class, etc.) */
304int function_depth;
8d08fdba
MS
305\f
306/* For each binding contour we allocate a binding_level structure
e92cc029
MS
307 which records the names defined in that contour.
308 Contours include:
309 0) the global one
310 1) one for each function definition,
311 where internal declarations of the parameters appear.
312 2) one for each compound statement,
313 to record its declarations.
314
315 The current meaning of a name can be found by searching the levels
316 from the current one out to the global one.
317
318 Off to the side, may be the class_binding_level. This exists only
319 to catch class-local declarations. It is otherwise nonexistent.
320
321 Also there may be binding levels that catch cleanups that must be
d8f8dca1
MM
322 run when exceptions occur. Thus, to see whether a name is bound in
323 the current scope, it is not enough to look in the
324 CURRENT_BINDING_LEVEL. You should use lookup_name_current_level
325 instead. */
8d08fdba
MS
326
327/* Note that the information in the `names' component of the global contour
328 is duplicated in the IDENTIFIER_GLOBAL_VALUEs of all identifiers. */
329
330struct binding_level
331 {
332 /* A chain of _DECL nodes for all variables, constants, functions,
e92cc029 333 and typedef types. These are in the reverse of the order
f181d4ae
MM
334 supplied. There may be OVERLOADs on this list, too, but they
335 are wrapped in TREE_LISTs; the TREE_VALUE is the OVERLOAD. */
8d08fdba
MS
336 tree names;
337
e92cc029
MS
338 /* A list of structure, union and enum definitions, for looking up
339 tag names.
340 It is a chain of TREE_LIST nodes, each of whose TREE_PURPOSE is a name,
341 or NULL_TREE; and whose TREE_VALUE is a RECORD_TYPE, UNION_TYPE,
342 or ENUMERAL_TYPE node.
343
344 C++: the TREE_VALUE nodes can be simple types for
345 component_bindings. */
8d08fdba
MS
346 tree tags;
347
2c73f9f5
ML
348 /* A list of USING_DECL nodes. */
349 tree usings;
350
ea9635c7
ML
351 /* A list of used namespaces. PURPOSE is the namespace,
352 VALUE the common ancestor with this binding_level's namespace. */
353 tree using_directives;
354
f181d4ae
MM
355 /* If this binding level is the binding level for a class, then
356 class_shadowed is a TREE_LIST. The TREE_PURPOSE of each node
76191fdd 357 is the name of an entity bound in the class. The TREE_TYPE is
d8f8dca1 358 the DECL bound by this name in the class. */
8d08fdba
MS
359 tree class_shadowed;
360
f181d4ae 361 /* Similar to class_shadowed, but for IDENTIFIER_TYPE_VALUE, and
76191fdd
NS
362 is used for all binding levels. In addition the TREE_VALUE is the
363 IDENTIFIER_TYPE_VALUE before we entered the class. */
8d08fdba
MS
364 tree type_shadowed;
365
acef433b
MM
366 /* A TREE_LIST. Each TREE_VALUE is the LABEL_DECL for a local
367 label in this scope. The TREE_PURPOSE is the previous value of
368 the IDENTIFIER_LABEL VALUE. */
369 tree shadowed_labels;
370
8d08fdba
MS
371 /* For each level (except not the global one),
372 a chain of BLOCK nodes for all the levels
373 that were entered and exited one level down. */
374 tree blocks;
375
70adf8a9
JM
376 /* The _TYPE node for this level, if parm_flag == 2. */
377 tree this_class;
378
8d08fdba
MS
379 /* The binding level which this one is contained in (inherits from). */
380 struct binding_level *level_chain;
381
f30432d7 382 /* List of decls in `names' that have incomplete
8d08fdba 383 structure or union types. */
f30432d7 384 tree incomplete;
8d08fdba 385
8d6e462b 386 /* List of VAR_DECLS saved from a previous for statement.
cab1f180 387 These would be dead in ISO-conforming code, but might
f181d4ae
MM
388 be referenced in ARM-era code. These are stored in a
389 TREE_LIST; the TREE_VALUE is the actual declaration. */
8d6e462b
PB
390 tree dead_vars_from_for;
391
8d08fdba 392 /* 1 for the level that holds the parameters of a function.
74b846e0
MM
393 2 for the level that holds a class declaration. */
394 unsigned parm_flag : 2;
8d08fdba
MS
395
396 /* 1 means make a BLOCK for this level regardless of all else.
397 2 for temporary binding contours created by the compiler. */
74b846e0 398 unsigned keep : 2;
8d08fdba
MS
399
400 /* Nonzero if this level "doesn't exist" for tags. */
401 unsigned tag_transparent : 1;
402
403 /* Nonzero if this level can safely have additional
404 cleanup-needing variables added to it. */
405 unsigned more_cleanups_ok : 1;
406 unsigned have_cleanups : 1;
407
74b846e0 408 /* Nonzero if this scope is for storing the decls for template
5566b478
MS
409 parameters and generic decls; these decls will be discarded and
410 replaced with a TEMPLATE_DECL. */
74b846e0
MM
411 unsigned template_parms_p : 1;
412
5362b086 413 /* Nonzero if this scope corresponds to the `<>' in a
74b846e0
MM
414 `template <>' clause. Whenever this flag is set,
415 TEMPLATE_PARMS_P will be set as well. */
416 unsigned template_spec_p : 1;
8d08fdba 417
a9aedbc2
MS
418 /* This is set for a namespace binding level. */
419 unsigned namespace_p : 1;
420
2ee887f2 421 /* True if this level is that of a for-statement where we need to
cab1f180 422 worry about ambiguous (ARM or ISO) scope rules. */
8d6e462b
PB
423 unsigned is_for_scope : 1;
424
826840d9
RH
425 /* True if this level corresponds to a TRY block. Currently this
426 information is only available while building the tree structure. */
427 unsigned is_try_scope : 1;
227cf171 428
826840d9
RH
429 /* True if this level corresponds to a CATCH block. Currently this
430 information is only available while building the tree structure. */
431 unsigned is_catch_scope : 1;
432
433 /* Three bits left for this word. */
8d08fdba
MS
434
435#if defined(DEBUG_CP_BINDING_LEVELS)
436 /* Binding depth at which this level began. */
437 unsigned binding_depth;
438#endif /* defined(DEBUG_CP_BINDING_LEVELS) */
439 };
440
441#define NULL_BINDING_LEVEL ((struct binding_level *) NULL)
68642fb6 442
8f032717 443/* The binding level currently in effect. */
8d08fdba 444
a8f73d4b 445#define current_binding_level \
52a11cbf 446 (cfun && cp_function_chain->bindings \
d363e7bf 447 ? cp_function_chain->bindings \
a8f73d4b 448 : scope_chain->bindings)
8d08fdba
MS
449
450/* The binding level of the current class, if any. */
451
9cd64686 452#define class_binding_level scope_chain->class_bindings
8d08fdba 453
8d08fdba
MS
454/* A chain of binding_level structures awaiting reuse. */
455
456static struct binding_level *free_binding_level;
457
458/* The outermost binding level, for names of file scope.
459 This is created when the compiler is started and exists
460 through the entire run. */
461
462static struct binding_level *global_binding_level;
463
8d08fdba
MS
464/* Nonzero means unconditionally make a BLOCK for the next level pushed. */
465
466static int keep_next_level_flag;
467
468#if defined(DEBUG_CP_BINDING_LEVELS)
469static int binding_depth = 0;
470static int is_class_level = 0;
471
472static void
473indent ()
474{
475 register unsigned i;
476
477 for (i = 0; i < binding_depth*2; i++)
478 putc (' ', stderr);
479}
480#endif /* defined(DEBUG_CP_BINDING_LEVELS) */
481
158991b7 482static tree pushdecl_with_scope PARAMS ((tree, struct binding_level *));
8d08fdba
MS
483
484static void
485push_binding_level (newlevel, tag_transparent, keep)
486 struct binding_level *newlevel;
487 int tag_transparent, keep;
488{
489 /* Add this level to the front of the chain (stack) of levels that
490 are active. */
961192e1 491 memset ((char*) newlevel, 0, sizeof (struct binding_level));
8f032717 492 newlevel->level_chain = current_binding_level;
8d08fdba
MS
493 current_binding_level = newlevel;
494 newlevel->tag_transparent = tag_transparent;
495 newlevel->more_cleanups_ok = 1;
227cf171 496
8d08fdba
MS
497 newlevel->keep = keep;
498#if defined(DEBUG_CP_BINDING_LEVELS)
499 newlevel->binding_depth = binding_depth;
500 indent ();
501 fprintf (stderr, "push %s level 0x%08x line %d\n",
502 (is_class_level) ? "class" : "block", newlevel, lineno);
503 is_class_level = 0;
504 binding_depth++;
505#endif /* defined(DEBUG_CP_BINDING_LEVELS) */
506}
507
8f032717
MM
508/* Find the innermost enclosing class scope, and reset
509 CLASS_BINDING_LEVEL appropriately. */
510
511static void
512find_class_binding_level ()
513{
514 struct binding_level *level = current_binding_level;
515
516 while (level && level->parm_flag != 2)
517 level = level->level_chain;
518 if (level && level->parm_flag == 2)
519 class_binding_level = level;
520 else
521 class_binding_level = 0;
522}
523
8d08fdba
MS
524static void
525pop_binding_level ()
526{
8d08fdba
MS
527 if (global_binding_level)
528 {
2c73f9f5 529 /* Cannot pop a level, if there are none left to pop. */
8d08fdba
MS
530 if (current_binding_level == global_binding_level)
531 my_friendly_abort (123);
532 }
533 /* Pop the current level, and free the structure for reuse. */
534#if defined(DEBUG_CP_BINDING_LEVELS)
535 binding_depth--;
536 indent ();
537 fprintf (stderr, "pop %s level 0x%08x line %d\n",
538 (is_class_level) ? "class" : "block",
539 current_binding_level, lineno);
540 if (is_class_level != (current_binding_level == class_binding_level))
9e9ff709
MS
541 {
542 indent ();
543 fprintf (stderr, "XXX is_class_level != (current_binding_level == class_binding_level)\n");
544 }
8d08fdba
MS
545 is_class_level = 0;
546#endif /* defined(DEBUG_CP_BINDING_LEVELS) */
547 {
548 register struct binding_level *level = current_binding_level;
549 current_binding_level = current_binding_level->level_chain;
550 level->level_chain = free_binding_level;
551#if 0 /* defined(DEBUG_CP_BINDING_LEVELS) */
552 if (level->binding_depth != binding_depth)
553 abort ();
554#endif /* defined(DEBUG_CP_BINDING_LEVELS) */
8f032717
MM
555 free_binding_level = level;
556 find_class_binding_level ();
8d08fdba
MS
557 }
558}
a9aedbc2
MS
559
560static void
561suspend_binding_level ()
562{
563 if (class_binding_level)
564 current_binding_level = class_binding_level;
565
566 if (global_binding_level)
567 {
2c73f9f5 568 /* Cannot suspend a level, if there are none left to suspend. */
a9aedbc2
MS
569 if (current_binding_level == global_binding_level)
570 my_friendly_abort (123);
571 }
572 /* Suspend the current level. */
573#if defined(DEBUG_CP_BINDING_LEVELS)
574 binding_depth--;
575 indent ();
576 fprintf (stderr, "suspend %s level 0x%08x line %d\n",
577 (is_class_level) ? "class" : "block",
578 current_binding_level, lineno);
579 if (is_class_level != (current_binding_level == class_binding_level))
9e9ff709
MS
580 {
581 indent ();
582 fprintf (stderr, "XXX is_class_level != (current_binding_level == class_binding_level)\n");
583 }
a9aedbc2
MS
584 is_class_level = 0;
585#endif /* defined(DEBUG_CP_BINDING_LEVELS) */
8f032717
MM
586 current_binding_level = current_binding_level->level_chain;
587 find_class_binding_level ();
a9aedbc2
MS
588}
589
824b9a4c 590static void
a9aedbc2
MS
591resume_binding_level (b)
592 struct binding_level *b;
593{
2c73f9f5
ML
594 /* Resuming binding levels is meant only for namespaces,
595 and those cannot nest into classes. */
596 my_friendly_assert(!class_binding_level, 386);
597 /* Also, resuming a non-directly nested namespace is a no-no. */
598 my_friendly_assert(b->level_chain == current_binding_level, 386);
a9aedbc2
MS
599 current_binding_level = b;
600#if defined(DEBUG_CP_BINDING_LEVELS)
601 b->binding_depth = binding_depth;
602 indent ();
603 fprintf (stderr, "resume %s level 0x%08x line %d\n",
604 (is_class_level) ? "class" : "block", b, lineno);
605 is_class_level = 0;
606 binding_depth++;
607#endif /* defined(DEBUG_CP_BINDING_LEVELS) */
608}
8d08fdba 609\f
cffa8729
MS
610/* Create a new `struct binding_level'. */
611
612static
613struct binding_level *
614make_binding_level ()
615{
616 /* NOSTRICT */
617 return (struct binding_level *) xmalloc (sizeof (struct binding_level));
618}
619
8d08fdba
MS
620/* Nonzero if we are currently in the global binding level. */
621
622int
623global_bindings_p ()
624{
625 return current_binding_level == global_binding_level;
626}
627
8f032717
MM
628/* Return the innermost binding level that is not for a class scope. */
629
630static struct binding_level *
631innermost_nonclass_level ()
632{
633 struct binding_level *b;
634
635 b = current_binding_level;
636 while (b->parm_flag == 2)
637 b = b->level_chain;
638
639 return b;
640}
641
a9aedbc2
MS
642/* Nonzero if we are currently in a toplevel binding level. This
643 means either the global binding level or a namespace in a toplevel
8f032717 644 binding level. Since there are no non-toplevel namespace levels,
74b846e0
MM
645 this really means any namespace or template parameter level. We
646 also include a class whose context is toplevel. */
a9aedbc2
MS
647
648int
649toplevel_bindings_p ()
650{
8f032717
MM
651 struct binding_level *b = innermost_nonclass_level ();
652
74b846e0 653 return b->namespace_p || b->template_parms_p;
a9aedbc2
MS
654}
655
8f032717
MM
656/* Nonzero if this is a namespace scope, or if we are defining a class
657 which is itself at namespace scope, or whose enclosing class is
658 such a class, etc. */
a9aedbc2 659
7bdbfa05 660int
a9aedbc2
MS
661namespace_bindings_p ()
662{
8f032717
MM
663 struct binding_level *b = innermost_nonclass_level ();
664
665 return b->namespace_p;
a9aedbc2
MS
666}
667
f1dedc31
MM
668/* If KEEP is non-zero, make a BLOCK node for the next binding level,
669 unconditionally. Otherwise, use the normal logic to decide whether
670 or not to create a BLOCK. */
671
8d08fdba 672void
f1dedc31
MM
673keep_next_level (keep)
674 int keep;
8d08fdba 675{
f1dedc31 676 keep_next_level_flag = keep;
8d08fdba
MS
677}
678
679/* Nonzero if the current level needs to have a BLOCK made. */
680
681int
682kept_level_p ()
683{
684 return (current_binding_level->blocks != NULL_TREE
685 || current_binding_level->keep
686 || current_binding_level->names != NULL_TREE
687 || (current_binding_level->tags != NULL_TREE
688 && !current_binding_level->tag_transparent));
689}
690
824b9a4c 691static void
a9aedbc2
MS
692declare_namespace_level ()
693{
694 current_binding_level->namespace_p = 1;
695}
696
74b846e0
MM
697/* Returns non-zero if this scope was created to store template
698 parameters. */
699
8d08fdba 700int
74b846e0 701template_parm_scope_p ()
8d08fdba 702{
74b846e0
MM
703 return current_binding_level->template_parms_p;
704}
705
706/* Returns the kind of template specialization we are currently
707 processing, given that it's declaration contained N_CLASS_SCOPES
708 explicit scope qualifications. */
709
710tmpl_spec_kind
711current_tmpl_spec_kind (n_class_scopes)
712 int n_class_scopes;
713{
714 int n_template_parm_scopes = 0;
715 int seen_specialization_p = 0;
716 int innermost_specialization_p = 0;
717 struct binding_level *b;
718
719 /* Scan through the template parameter scopes. */
720 for (b = current_binding_level; b->template_parms_p; b = b->level_chain)
721 {
722 /* If we see a specialization scope inside a parameter scope,
723 then something is wrong. That corresponds to a declaration
724 like:
725
726 template <class T> template <> ...
727
728 which is always illegal since [temp.expl.spec] forbids the
729 specialization of a class member template if the enclosing
730 class templates are not explicitly specialized as well. */
731 if (b->template_spec_p)
732 {
733 if (n_template_parm_scopes == 0)
734 innermost_specialization_p = 1;
735 else
736 seen_specialization_p = 1;
737 }
738 else if (seen_specialization_p == 1)
739 return tsk_invalid_member_spec;
740
741 ++n_template_parm_scopes;
742 }
743
744 /* Handle explicit instantiations. */
745 if (processing_explicit_instantiation)
746 {
747 if (n_template_parm_scopes != 0)
748 /* We've seen a template parameter list during an explicit
749 instantiation. For example:
750
751 template <class T> template void f(int);
752
753 This is erroneous. */
754 return tsk_invalid_expl_inst;
755 else
756 return tsk_expl_inst;
757 }
758
759 if (n_template_parm_scopes < n_class_scopes)
760 /* We've not seen enough template headers to match all the
761 specialized classes present. For example:
762
763 template <class T> void R<T>::S<T>::f(int);
764
765 This is illegal; there needs to be one set of template
766 parameters for each class. */
767 return tsk_insufficient_parms;
768 else if (n_template_parm_scopes == n_class_scopes)
769 /* We're processing a non-template declaration (even though it may
770 be a member of a template class.) For example:
771
772 template <class T> void S<T>::f(int);
773
774 The `class T' maches the `S<T>', leaving no template headers
775 corresponding to the `f'. */
776 return tsk_none;
777 else if (n_template_parm_scopes > n_class_scopes + 1)
778 /* We've got too many template headers. For example:
779
780 template <> template <class T> void f (T);
781
782 There need to be more enclosing classes. */
783 return tsk_excessive_parms;
784 else
785 /* This must be a template. It's of the form:
786
787 template <class T> template <class U> void S<T>::f(U);
788
789 This is a specialization if the innermost level was a
790 specialization; otherwise it's just a definition of the
791 template. */
792 return innermost_specialization_p ? tsk_expl_spec : tsk_template;
8d08fdba
MS
793}
794
795void
796set_class_shadows (shadows)
797 tree shadows;
798{
799 class_binding_level->class_shadowed = shadows;
800}
801
802/* Enter a new binding level.
803 If TAG_TRANSPARENT is nonzero, do so only for the name space of variables,
804 not for that of tags. */
805
806void
807pushlevel (tag_transparent)
808 int tag_transparent;
809{
b35d4555 810 struct binding_level *newlevel;
8d08fdba 811
01d939e8 812 if (cfun && !doing_semantic_analysis_p ())
b35d4555 813 return;
8d08fdba 814
b35d4555 815 /* Reuse or create a struct for this binding level. */
8d08fdba
MS
816#if defined(DEBUG_CP_BINDING_LEVELS)
817 if (0)
818#else /* !defined(DEBUG_CP_BINDING_LEVELS) */
819 if (free_binding_level)
820#endif /* !defined(DEBUG_CP_BINDING_LEVELS) */
821 {
822 newlevel = free_binding_level;
823 free_binding_level = free_binding_level->level_chain;
824 }
825 else
acef433b 826 newlevel = make_binding_level ();
cffa8729 827
8d08fdba 828 push_binding_level (newlevel, tag_transparent, keep_next_level_flag);
1c0cc57e 829 GNU_xref_start_scope ((size_t) newlevel);
8d08fdba
MS
830 keep_next_level_flag = 0;
831}
832
bd0d5d4a
JM
833/* We're defining an object of type TYPE. If it needs a cleanup, but
834 we're not allowed to add any more objects with cleanups to the current
835 scope, create a new binding level. */
836
837void
838maybe_push_cleanup_level (type)
839 tree type;
840{
841 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
842 && current_binding_level->more_cleanups_ok == 0)
843 {
844 keep_next_level (2);
845 pushlevel (1);
846 clear_last_expr ();
847 add_scope_stmt (/*begin_p=*/1, /*partial_p=*/1);
848 }
849}
850
74b846e0
MM
851/* Enter a new scope. The KIND indicates what kind of scope is being
852 created. */
853
854void
855begin_scope (sk)
856 scope_kind sk;
857{
858 pushlevel (0);
859
860 switch (sk)
861 {
862 case sk_template_spec:
863 current_binding_level->template_spec_p = 1;
864 /* Fall through. */
865
866 case sk_template_parms:
867 current_binding_level->template_parms_p = 1;
868 break;
869
870 default:
871 my_friendly_abort (20000309);
872 }
873}
874
875/* Exit the current scope. */
876
877void
878finish_scope ()
879{
880 poplevel (0, 0, 0);
881}
882
5566b478 883void
8d6e462b
PB
884note_level_for_for ()
885{
886 current_binding_level->is_for_scope = 1;
887}
888
6625cdb5
JM
889/* Record that the current binding level represents a try block. */
890
891void
826840d9 892note_level_for_try ()
6625cdb5 893{
826840d9
RH
894 current_binding_level->is_try_scope = 1;
895}
896
897/* Record that the current binding level represents a catch block. */
898
899void
900note_level_for_catch ()
901{
902 current_binding_level->is_catch_scope = 1;
6625cdb5
JM
903}
904
f181d4ae
MM
905/* For a binding between a name and an entity at a block scope,
906 this is the `struct binding_level' for the block. */
907#define BINDING_LEVEL(NODE) \
c7a932b1 908 (((struct tree_binding*)NODE)->scope.level)
f181d4ae 909
4890c2f4
MM
910/* A free list of CPLUS_BINDING nodes, connected by their
911 TREE_CHAINs. */
912
913static tree free_bindings;
914
f181d4ae
MM
915/* Make DECL the innermost binding for ID. The LEVEL is the binding
916 level at which this declaration is being bound. */
917
918static void
919push_binding (id, decl, level)
920 tree id;
921 tree decl;
922 struct binding_level* level;
923{
924 tree binding;
925
4890c2f4
MM
926 if (free_bindings)
927 {
928 binding = free_bindings;
929 free_bindings = TREE_CHAIN (binding);
930 }
931 else
932 binding = make_node (CPLUS_BINDING);
f181d4ae
MM
933
934 /* Now, fill in the binding information. */
935 BINDING_VALUE (binding) = decl;
d8f8dca1 936 BINDING_TYPE (binding) = NULL_TREE;
f181d4ae 937 BINDING_LEVEL (binding) = level;
8f032717 938 INHERITED_VALUE_BINDING_P (binding) = 0;
f181d4ae 939 LOCAL_BINDING_P (binding) = (level != class_binding_level);
87e3dbc9 940 BINDING_HAS_LEVEL_P (binding) = 1;
f181d4ae 941
c45df9c1 942 /* And put it on the front of the list of bindings for ID. */
f181d4ae
MM
943 TREE_CHAIN (binding) = IDENTIFIER_BINDING (id);
944 IDENTIFIER_BINDING (id) = binding;
945}
946
d8f8dca1
MM
947/* ID is already bound in the current scope. But, DECL is an
948 additional binding for ID in the same scope. This is the `struct
949 stat' hack whereby a non-typedef class-name or enum-name can be
950 bound at the same level as some other kind of entity. It's the
951 responsibility of the caller to check that inserting this name is
8f032717
MM
952 legal here. Returns nonzero if the new binding was successful. */
953static int
d8f8dca1
MM
954add_binding (id, decl)
955 tree id;
956 tree decl;
957{
958 tree binding = IDENTIFIER_BINDING (id);
8f032717 959 int ok = 1;
d8f8dca1
MM
960
961 if (TREE_CODE (decl) == TYPE_DECL && DECL_ARTIFICIAL (decl))
962 /* The new name is the type name. */
963 BINDING_TYPE (binding) = decl;
8f032717
MM
964 else if (!BINDING_VALUE (binding))
965 /* This situation arises when push_class_level_binding moves an
966 inherited type-binding out of the way to make room for a new
967 value binding. */
968 BINDING_VALUE (binding) = decl;
969 else if (TREE_CODE (BINDING_VALUE (binding)) == TYPE_DECL
970 && DECL_ARTIFICIAL (BINDING_VALUE (binding)))
971 {
972 /* The old binding was a type name. It was placed in
973 BINDING_VALUE because it was thought, at the point it was
974 declared, to be the only entity with such a name. Move the
975 type name into the type slot; it is now hidden by the new
976 binding. */
d8f8dca1
MM
977 BINDING_TYPE (binding) = BINDING_VALUE (binding);
978 BINDING_VALUE (binding) = decl;
8f032717 979 INHERITED_VALUE_BINDING_P (binding) = 0;
d8f8dca1 980 }
263505af
MM
981 else if (TREE_CODE (BINDING_VALUE (binding)) == TYPE_DECL
982 && TREE_CODE (decl) == TYPE_DECL
983 && DECL_NAME (decl) == DECL_NAME (BINDING_VALUE (binding))
9aaceb4b
NS
984 && (same_type_p (TREE_TYPE (decl),
985 TREE_TYPE (BINDING_VALUE (binding)))
986 /* If either type involves template parameters, we must
987 wait until instantiation. */
988 || uses_template_parms (TREE_TYPE (decl))
989 || uses_template_parms (TREE_TYPE (BINDING_VALUE (binding)))))
263505af
MM
990 /* We have two typedef-names, both naming the same type to have
991 the same name. This is OK because of:
992
993 [dcl.typedef]
994
995 In a given scope, a typedef specifier can be used to redefine
996 the name of any type declared in that scope to refer to the
997 type to which it already refers. */
998 ok = 0;
7b176381
MM
999 /* There can be two block-scope declarations of the same variable,
1000 so long as they are `extern' declarations. */
1001 else if (TREE_CODE (decl) == VAR_DECL
1002 && TREE_CODE (BINDING_VALUE (binding)) == VAR_DECL
1003 && DECL_EXTERNAL (decl)
1004 && DECL_EXTERNAL (BINDING_VALUE (binding)))
1005 {
1006 duplicate_decls (decl, BINDING_VALUE (binding));
1007 ok = 0;
1008 }
8f032717
MM
1009 else
1010 {
33bd39a2 1011 error ("declaration of `%#D'", decl);
8f032717
MM
1012 cp_error_at ("conflicts with previous declaration `%#D'",
1013 BINDING_VALUE (binding));
1014 ok = 0;
1015 }
1016
1017 return ok;
d8f8dca1
MM
1018}
1019
cfe507be
MM
1020/* Add DECL to the list of things declared in B. */
1021
1022static void
1023add_decl_to_level (decl, b)
1024 tree decl;
1025 struct binding_level *b;
1026{
cfe507be
MM
1027 /* We build up the list in reverse order, and reverse it later if
1028 necessary. */
1029 TREE_CHAIN (decl) = b->names;
1030 b->names = decl;
1031}
1032
1033/* Bind DECL to ID in the current_binding_level, assumed to be a local
1034 binding level. If PUSH_USING is set in FLAGS, we know that DECL
1035 doesn't really belong to this binding level, that it got here
1036 through a using-declaration. */
f181d4ae
MM
1037
1038void
0034cf72 1039push_local_binding (id, decl, flags)
f181d4ae
MM
1040 tree id;
1041 tree decl;
0034cf72 1042 int flags;
f181d4ae 1043{
8f032717
MM
1044 struct binding_level *b;
1045
1046 /* Skip over any local classes. This makes sense if we call
1047 push_local_binding with a friend decl of a local class. */
1048 b = current_binding_level;
1049 while (b->parm_flag == 2)
1050 b = b->level_chain;
f181d4ae 1051
d8f8dca1 1052 if (lookup_name_current_level (id))
8f032717
MM
1053 {
1054 /* Supplement the existing binding. */
1055 if (!add_binding (id, decl))
1056 /* It didn't work. Something else must be bound at this
1057 level. Do not add DECL to the list of things to pop
1058 later. */
1059 return;
1060 }
d8f8dca1
MM
1061 else
1062 /* Create a new binding. */
8f032717 1063 push_binding (id, decl, b);
f181d4ae 1064
0034cf72 1065 if (TREE_CODE (decl) == OVERLOAD || (flags & PUSH_USING))
a06d48ef
JM
1066 /* We must put the OVERLOAD into a TREE_LIST since the
1067 TREE_CHAIN of an OVERLOAD is already used. Similarly for
1068 decls that got here through a using-declaration. */
1069 decl = build_tree_list (NULL_TREE, decl);
1070
f181d4ae
MM
1071 /* And put DECL on the list of things declared by the current
1072 binding level. */
cfe507be 1073 add_decl_to_level (decl, b);
f181d4ae
MM
1074}
1075
8f032717
MM
1076/* Bind DECL to ID in the class_binding_level. Returns nonzero if the
1077 binding was successful. */
f181d4ae 1078
8f032717 1079int
f181d4ae
MM
1080push_class_binding (id, decl)
1081 tree id;
1082 tree decl;
1083{
8f032717
MM
1084 int result = 1;
1085 tree binding = IDENTIFIER_BINDING (id);
1086 tree context;
1087
1088 /* Note that we declared this value so that we can issue an error if
1089 this an illegal redeclaration of a name already used for some
1090 other purpose. */
1091 note_name_declared_in_class (id, decl);
1092
1093 if (binding && BINDING_LEVEL (binding) == class_binding_level)
d8f8dca1 1094 /* Supplement the existing binding. */
8f032717 1095 result = add_binding (id, decl);
d8f8dca1
MM
1096 else
1097 /* Create a new binding. */
1098 push_binding (id, decl, class_binding_level);
1099
1100 /* Update the IDENTIFIER_CLASS_VALUE for this ID to be the
1101 class-level declaration. Note that we do not use DECL here
1102 because of the possibility of the `struct stat' hack; if DECL is
1103 a class-name or enum-name we might prefer a field-name, or some
1104 such. */
1105 IDENTIFIER_CLASS_VALUE (id) = BINDING_VALUE (IDENTIFIER_BINDING (id));
8f032717
MM
1106
1107 /* If this is a binding from a base class, mark it as such. */
1108 binding = IDENTIFIER_BINDING (id);
1109 if (BINDING_VALUE (binding) == decl && TREE_CODE (decl) != TREE_LIST)
1110 {
280f9385
MM
1111 /* Any implicit typename must be from a base-class. The
1112 context for an implicit typename declaration is always
1113 the derived class in which the lookup was done, so the checks
1114 based on the context of DECL below will not trigger. */
83233dca 1115 if (IMPLICIT_TYPENAME_TYPE_DECL_P (decl))
280f9385 1116 INHERITED_VALUE_BINDING_P (binding) = 1;
8f032717
MM
1117 else
1118 {
280f9385 1119 if (TREE_CODE (decl) == OVERLOAD)
4f1c5b7d 1120 context = CP_DECL_CONTEXT (OVL_CURRENT (decl));
280f9385
MM
1121 else
1122 {
2f939d94 1123 my_friendly_assert (DECL_P (decl), 0);
55de1b66 1124 context = context_for_name_lookup (decl);
280f9385 1125 }
8f032717 1126
280f9385
MM
1127 if (is_properly_derived_from (current_class_type, context))
1128 INHERITED_VALUE_BINDING_P (binding) = 1;
1129 else
1130 INHERITED_VALUE_BINDING_P (binding) = 0;
1131 }
8f032717
MM
1132 }
1133 else if (BINDING_VALUE (binding) == decl)
1134 /* We only encounter a TREE_LIST when push_class_decls detects an
1135 ambiguity. Such an ambiguity can be overridden by a definition
1136 in this class. */
1137 INHERITED_VALUE_BINDING_P (binding) = 1;
1138
1139 return result;
f181d4ae
MM
1140}
1141
d8f8dca1
MM
1142/* Remove the binding for DECL which should be the innermost binding
1143 for ID. */
f181d4ae 1144
68642fb6
UD
1145static void
1146pop_binding (id, decl)
f181d4ae 1147 tree id;
d8f8dca1 1148 tree decl;
f181d4ae
MM
1149{
1150 tree binding;
68642fb6 1151
f181d4ae
MM
1152 if (id == NULL_TREE)
1153 /* It's easiest to write the loops that call this function without
1154 checking whether or not the entities involved have names. We
1155 get here for such an entity. */
1156 return;
1157
d8f8dca1 1158 /* Get the innermost binding for ID. */
f181d4ae 1159 binding = IDENTIFIER_BINDING (id);
f181d4ae 1160
d8f8dca1
MM
1161 /* The name should be bound. */
1162 my_friendly_assert (binding != NULL_TREE, 0);
1163
1164 /* The DECL will be either the ordinary binding or the type
1165 binding for this identifier. Remove that binding. */
1166 if (BINDING_VALUE (binding) == decl)
1167 BINDING_VALUE (binding) = NULL_TREE;
1168 else if (BINDING_TYPE (binding) == decl)
1169 BINDING_TYPE (binding) = NULL_TREE;
1170 else
1171 my_friendly_abort (0);
1172
1173 if (!BINDING_VALUE (binding) && !BINDING_TYPE (binding))
4890c2f4
MM
1174 {
1175 /* We're completely done with the innermost binding for this
1176 identifier. Unhook it from the list of bindings. */
1177 IDENTIFIER_BINDING (id) = TREE_CHAIN (binding);
1178
1179 /* Add it to the free list. */
1180 TREE_CHAIN (binding) = free_bindings;
1181 free_bindings = binding;
1182
1183 /* Clear the BINDING_LEVEL so the garbage collector doesn't walk
1184 it. */
1185 BINDING_LEVEL (binding) = NULL;
1186 }
f181d4ae
MM
1187}
1188
acef433b
MM
1189/* When a label goes out of scope, check to see if that label was used
1190 in a valid manner, and issue any appropriate warnings or errors. */
1191
1192static void
6625cdb5
JM
1193pop_label (label, old_value)
1194 tree label;
1195 tree old_value;
acef433b 1196{
88848bde 1197 if (!processing_template_decl && doing_semantic_analysis_p ())
acef433b 1198 {
88848bde
MM
1199 if (DECL_INITIAL (label) == NULL_TREE)
1200 {
1201 cp_error_at ("label `%D' used but not defined", label);
1202 /* Avoid crashing later. */
1203 define_label (input_filename, 1, DECL_NAME (label));
1204 }
078721e1 1205 else if (warn_unused_label && !TREE_USED (label))
88848bde 1206 cp_warning_at ("label `%D' defined but not used", label);
acef433b 1207 }
acef433b 1208
6625cdb5 1209 SET_IDENTIFIER_LABEL_VALUE (DECL_NAME (label), old_value);
acef433b
MM
1210}
1211
0811ea8f 1212/* At the end of a function, all labels declared within the function
68642fb6 1213 go out of scope. BLOCK is the top-level block for the
acef433b
MM
1214 function. */
1215
1216static void
1217pop_labels (block)
1218 tree block;
1219{
6625cdb5 1220 struct named_label_list *link;
acef433b
MM
1221
1222 /* Clear out the definitions of all label names, since their scopes
1223 end here. */
6625cdb5 1224 for (link = named_labels; link; link = link->next)
acef433b 1225 {
6625cdb5 1226 pop_label (link->label_decl, link->old_value);
acef433b
MM
1227 /* Put the labels into the "variables" of the top-level block,
1228 so debugger can see them. */
6625cdb5
JM
1229 TREE_CHAIN (link->label_decl) = BLOCK_VARS (block);
1230 BLOCK_VARS (block) = link->label_decl;
acef433b
MM
1231 }
1232
6625cdb5 1233 named_labels = NULL;
acef433b
MM
1234}
1235
8d08fdba
MS
1236/* Exit a binding level.
1237 Pop the level off, and restore the state of the identifier-decl mappings
1238 that were in effect when this level was entered.
1239
1240 If KEEP == 1, this level had explicit declarations, so
1241 and create a "block" (a BLOCK node) for the level
1242 to record its declarations and subblocks for symbol table output.
1243
8d08fdba
MS
1244 If FUNCTIONBODY is nonzero, this level is the body of a function,
1245 so create a block as if KEEP were set and also clear out all
1246 label names.
1247
1248 If REVERSE is nonzero, reverse the order of decls before putting
1249 them into the BLOCK. */
1250
1251tree
1252poplevel (keep, reverse, functionbody)
1253 int keep;
1254 int reverse;
1255 int functionbody;
1256{
1257 register tree link;
1258 /* The chain of decls was accumulated in reverse order.
1259 Put it into forward order, just for cleanliness. */
1260 tree decls;
1261 int tmp = functionbody;
b35d4555
MM
1262 int real_functionbody;
1263 tree tags;
1264 tree subblocks;
8d08fdba
MS
1265 tree block = NULL_TREE;
1266 tree decl;
f181d4ae
MM
1267 int leaving_for_scope;
1268
01d939e8 1269 if (cfun && !doing_semantic_analysis_p ())
b35d4555
MM
1270 return NULL_TREE;
1271
273a708f
MM
1272 my_friendly_assert (current_binding_level->parm_flag != 2,
1273 19990916);
b74a0560 1274
b35d4555
MM
1275 real_functionbody = (current_binding_level->keep == 2
1276 ? ((functionbody = 0), tmp) : functionbody);
1277 tags = functionbody >= 0 ? current_binding_level->tags : 0;
1278 subblocks = functionbody >= 0 ? current_binding_level->blocks : 0;
1279
b74a0560
MM
1280 my_friendly_assert (!current_binding_level->class_shadowed,
1281 19990414);
8d08fdba 1282
536333d4
MM
1283 /* We used to use KEEP == 2 to indicate that the new block should go
1284 at the beginning of the list of blocks at this binding level,
1285 rather than the end. This hack is no longer used. */
1286 my_friendly_assert (keep == 0 || keep == 1, 0);
1287
1c0cc57e
KG
1288 GNU_xref_end_scope ((size_t) current_binding_level,
1289 (size_t) current_binding_level->level_chain,
8d08fdba 1290 current_binding_level->parm_flag,
5566b478 1291 current_binding_level->keep);
8d08fdba
MS
1292
1293 if (current_binding_level->keep == 1)
1294 keep = 1;
1295
6625cdb5
JM
1296 /* Any uses of undefined labels, and any defined labels, now operate
1297 under constraints of next binding contour. */
1298 if (cfun && !functionbody)
1299 {
1300 struct binding_level *level_chain;
1301 level_chain = current_binding_level->level_chain;
1302 if (level_chain)
1303 {
1304 struct named_label_use_list *uses;
1305 struct named_label_list *labels;
1306 for (labels = named_labels; labels; labels = labels->next)
1307 if (labels->binding_level == current_binding_level)
1308 {
1309 tree decl;
826840d9
RH
1310 if (current_binding_level->is_try_scope)
1311 labels->in_try_scope = 1;
1312 if (current_binding_level->is_catch_scope)
1313 labels->in_catch_scope = 1;
6625cdb5
JM
1314 for (decl = labels->names_in_scope; decl;
1315 decl = TREE_CHAIN (decl))
1316 if (decl_jump_unsafe (decl))
1317 labels->bad_decls = tree_cons (NULL_TREE, decl,
1318 labels->bad_decls);
1319 labels->binding_level = level_chain;
1320 labels->names_in_scope = level_chain->names;
1321 }
1322
1323 for (uses = named_label_uses; uses; uses = uses->next)
1324 if (uses->binding_level == current_binding_level)
1325 {
1326 uses->binding_level = level_chain;
1327 uses->names_in_scope = level_chain->names;
1328 }
1329 }
1330 }
1331
8d08fdba
MS
1332 /* Get the decls in the order they were written.
1333 Usually current_binding_level->names is in reverse order.
1334 But parameter decls were previously put in forward order. */
1335
1336 if (reverse)
1337 current_binding_level->names
1338 = decls = nreverse (current_binding_level->names);
1339 else
1340 decls = current_binding_level->names;
1341
1342 /* Output any nested inline functions within this block
1343 if they weren't already output. */
8d08fdba
MS
1344 for (decl = decls; decl; decl = TREE_CHAIN (decl))
1345 if (TREE_CODE (decl) == FUNCTION_DECL
1346 && ! TREE_ASM_WRITTEN (decl)
1347 && DECL_INITIAL (decl) != NULL_TREE
6060a796
MS
1348 && TREE_ADDRESSABLE (decl)
1349 && decl_function_context (decl) == current_function_decl)
8d08fdba
MS
1350 {
1351 /* If this decl was copied from a file-scope decl
1352 on account of a block-scope extern decl,
1353 propagate TREE_ADDRESSABLE to the file-scope decl. */
1354 if (DECL_ABSTRACT_ORIGIN (decl) != NULL_TREE)
1355 TREE_ADDRESSABLE (DECL_ABSTRACT_ORIGIN (decl)) = 1;
1356 else
1357 {
1358 push_function_context ();
1359 output_inline_function (decl);
1360 pop_function_context ();
1361 }
1362 }
1363
d9b2d9da
MM
1364 /* When not in function-at-a-time mode, expand_end_bindings will
1365 warn about unused variables. But, in function-at-a-time mode
1366 expand_end_bindings is not passed the list of variables in the
1367 current scope, and therefore no warning is emitted. So, we
1368 explicitly warn here. */
1369 if (!processing_template_decl)
1370 warn_about_unused_variables (getdecls ());
1371
8d08fdba
MS
1372 /* If there were any declarations or structure tags in that level,
1373 or if this level is a function body,
1374 create a BLOCK to record them for the life of this function. */
8d08fdba 1375 block = NULL_TREE;
f444e36b 1376 if (keep == 1 || functionbody)
8d08fdba
MS
1377 block = make_node (BLOCK);
1378 if (block != NULL_TREE)
1379 {
f444e36b
MM
1380 BLOCK_VARS (block) = decls;
1381 BLOCK_SUBBLOCKS (block) = subblocks;
8d08fdba
MS
1382 }
1383
1384 /* In each subblock, record that this is its superior. */
8d08fdba
MS
1385 if (keep >= 0)
1386 for (link = subblocks; link; link = TREE_CHAIN (link))
1387 BLOCK_SUPERCONTEXT (link) = block;
1388
f181d4ae
MM
1389 /* We still support the old for-scope rules, whereby the variables
1390 in a for-init statement were in scope after the for-statement
1391 ended. We only use the new rules in flag_new_for_scope is
1392 nonzero. */
68642fb6 1393 leaving_for_scope
f181d4ae
MM
1394 = current_binding_level->is_for_scope && flag_new_for_scope == 1;
1395
1396 /* Remove declarations for all the DECLs in this level. */
1397 for (link = decls; link; link = TREE_CHAIN (link))
1398 {
c3783399
NS
1399 if (leaving_for_scope && TREE_CODE (link) == VAR_DECL
1400 && DECL_NAME (link))
f181d4ae 1401 {
68642fb6 1402 tree outer_binding
f181d4ae
MM
1403 = TREE_CHAIN (IDENTIFIER_BINDING (DECL_NAME (link)));
1404 tree ns_binding;
1405
1406 if (!outer_binding)
1407 ns_binding = IDENTIFIER_NAMESPACE_VALUE (DECL_NAME (link));
c7dda1e3
MM
1408 else
1409 ns_binding = NULL_TREE;
1410
68642fb6
UD
1411 if (outer_binding
1412 && (BINDING_LEVEL (outer_binding)
f181d4ae
MM
1413 == current_binding_level->level_chain))
1414 /* We have something like:
68642fb6 1415
f181d4ae
MM
1416 int i;
1417 for (int i; ;);
68642fb6 1418
f181d4ae
MM
1419 and we are leaving the `for' scope. There's no reason to
1420 keep the binding of the inner `i' in this case. */
d8f8dca1 1421 pop_binding (DECL_NAME (link), link);
68642fb6
UD
1422 else if ((outer_binding
1423 && (TREE_CODE (BINDING_VALUE (outer_binding))
f181d4ae 1424 == TYPE_DECL))
68642fb6 1425 || (ns_binding
f181d4ae
MM
1426 && TREE_CODE (ns_binding) == TYPE_DECL))
1427 /* Here, we have something like:
1428
1429 typedef int I;
1430
1431 void f () {
1432 for (int I; ;);
1433 }
1434
1435 We must pop the for-scope binding so we know what's a
1436 type and what isn't. */
d8f8dca1 1437 pop_binding (DECL_NAME (link), link);
e76a2646 1438 else
e76a2646 1439 {
f181d4ae
MM
1440 /* Mark this VAR_DECL as dead so that we can tell we left it
1441 there only for backward compatibility. */
1442 DECL_DEAD_FOR_LOCAL (link) = 1;
68642fb6 1443
f181d4ae
MM
1444 /* Keep track of what should of have happenned when we
1445 popped the binding. */
1446 if (outer_binding && BINDING_VALUE (outer_binding))
68642fb6 1447 DECL_SHADOWED_FOR_VAR (link)
f181d4ae
MM
1448 = BINDING_VALUE (outer_binding);
1449
1450 /* Add it to the list of dead variables in the next
1451 outermost binding to that we can remove these when we
1452 leave that binding. */
1453 current_binding_level->level_chain->dead_vars_from_for
1454 = tree_cons (NULL_TREE, link,
1455 current_binding_level->level_chain->
1456 dead_vars_from_for);
1457
1458 /* Although we don't pop the CPLUS_BINDING, we do clear
1459 its BINDING_LEVEL since the level is going away now. */
1460 BINDING_LEVEL (IDENTIFIER_BINDING (DECL_NAME (link)))
1461 = 0;
e76a2646 1462 }
2ee887f2 1463 }
68642fb6 1464 else
8d6e462b 1465 {
f181d4ae 1466 /* Remove the binding. */
0034cf72
JM
1467 decl = link;
1468 if (TREE_CODE (decl) == TREE_LIST)
1469 decl = TREE_VALUE (decl);
2f939d94 1470 if (DECL_P (decl))
0034cf72
JM
1471 pop_binding (DECL_NAME (decl), decl);
1472 else if (TREE_CODE (decl) == OVERLOAD)
1473 pop_binding (DECL_NAME (OVL_FUNCTION (decl)), decl);
68642fb6 1474 else
f181d4ae 1475 my_friendly_abort (0);
8d08fdba 1476 }
f181d4ae 1477 }
8d08fdba 1478
f181d4ae
MM
1479 /* Remove declarations for any `for' variables from inner scopes
1480 that we kept around. */
1481 for (link = current_binding_level->dead_vars_from_for;
1482 link; link = TREE_CHAIN (link))
d8f8dca1 1483 pop_binding (DECL_NAME (TREE_VALUE (link)), TREE_VALUE (link));
2ee887f2 1484
f181d4ae
MM
1485 /* Restore the IDENTIFIER_TYPE_VALUEs. */
1486 for (link = current_binding_level->type_shadowed;
1487 link; link = TREE_CHAIN (link))
1488 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (link), TREE_VALUE (link));
acef433b
MM
1489
1490 /* Restore the IDENTIFIER_LABEL_VALUEs for local labels. */
1491 for (link = current_binding_level->shadowed_labels;
68642fb6 1492 link;
acef433b 1493 link = TREE_CHAIN (link))
6625cdb5 1494 pop_label (TREE_VALUE (link), TREE_PURPOSE (link));
acef433b 1495
f181d4ae
MM
1496 /* There may be OVERLOADs (wrapped in TREE_LISTs) on the BLOCK_VARs
1497 list if a `using' declaration put them there. The debugging
1498 back-ends won't understand OVERLOAD, so we remove them here.
1499 Because the BLOCK_VARS are (temporarily) shared with
1500 CURRENT_BINDING_LEVEL->NAMES we must do this fixup after we have
1501 popped all the bindings. */
1502 if (block)
1503 {
1504 tree* d;
8d6e462b 1505
a06d48ef
JM
1506 for (d = &BLOCK_VARS (block); *d; )
1507 {
1508 if (TREE_CODE (*d) == TREE_LIST)
1509 *d = TREE_CHAIN (*d);
1510 else
1511 d = &TREE_CHAIN (*d);
1512 }
8d6e462b 1513 }
8d08fdba
MS
1514
1515 /* If the level being exited is the top level of a function,
1516 check over all the labels. */
8d08fdba
MS
1517 if (functionbody)
1518 {
acef433b
MM
1519 /* Since this is the top level block of a function, the vars are
1520 the function's parameters. Don't leave them in the BLOCK
1521 because they are found in the FUNCTION_DECL instead. */
8d08fdba 1522 BLOCK_VARS (block) = 0;
acef433b 1523 pop_labels (block);
8d08fdba
MS
1524 }
1525
8d08fdba
MS
1526 tmp = current_binding_level->keep;
1527
1528 pop_binding_level ();
1529 if (functionbody)
1530 DECL_INITIAL (current_function_decl) = block;
1531 else if (block)
f444e36b
MM
1532 current_binding_level->blocks
1533 = chainon (current_binding_level->blocks, block);
1534
8d08fdba
MS
1535 /* If we did not make a block for the level just exited,
1536 any blocks made for inner levels
1537 (since they cannot be recorded as subblocks in that level)
1538 must be carried forward so they will later become subblocks
1539 of something else. */
1540 else if (subblocks)
536333d4
MM
1541 current_binding_level->blocks
1542 = chainon (current_binding_level->blocks, subblocks);
8d08fdba 1543
d9b2d9da
MM
1544 /* Each and every BLOCK node created here in `poplevel' is important
1545 (e.g. for proper debugging information) so if we created one
1546 earlier, mark it as "used". */
1547 if (block)
1548 TREE_USED (block) = 1;
1549
8d08fdba 1550 /* Take care of compiler's internal binding structures. */
a4443a08 1551 if (tmp == 2)
8d08fdba 1552 {
d9b2d9da
MM
1553 tree scope_stmts;
1554
68642fb6 1555 scope_stmts
d9b2d9da 1556 = add_scope_stmt (/*begin_p=*/0, /*partial_p=*/1);
8d08fdba 1557 if (block)
d9b2d9da
MM
1558 {
1559 SCOPE_STMT_BLOCK (TREE_PURPOSE (scope_stmts)) = block;
1560 SCOPE_STMT_BLOCK (TREE_VALUE (scope_stmts)) = block;
1561 }
1562
8f471b0d 1563 block = poplevel (keep, reverse, functionbody);
8d08fdba
MS
1564 }
1565
8d08fdba
MS
1566 return block;
1567}
1568
1569/* Delete the node BLOCK from the current binding level.
1570 This is used for the block inside a stmt expr ({...})
1571 so that the block can be reinserted where appropriate. */
1572
1573void
1574delete_block (block)
1575 tree block;
1576{
1577 tree t;
1578 if (current_binding_level->blocks == block)
1579 current_binding_level->blocks = TREE_CHAIN (block);
1580 for (t = current_binding_level->blocks; t;)
1581 {
1582 if (TREE_CHAIN (t) == block)
1583 TREE_CHAIN (t) = TREE_CHAIN (block);
1584 else
1585 t = TREE_CHAIN (t);
1586 }
1587 TREE_CHAIN (block) = NULL_TREE;
1588 /* Clear TREE_USED which is always set by poplevel.
1589 The flag is set again if insert_block is called. */
1590 TREE_USED (block) = 0;
1591}
1592
1593/* Insert BLOCK at the end of the list of subblocks of the
1594 current binding level. This is used when a BIND_EXPR is expanded,
1595 to handle the BLOCK node inside the BIND_EXPR. */
1596
1597void
1598insert_block (block)
1599 tree block;
1600{
1601 TREE_USED (block) = 1;
1602 current_binding_level->blocks
1603 = chainon (current_binding_level->blocks, block);
1604}
1605
8d08fdba
MS
1606/* Set the BLOCK node for the innermost scope
1607 (the one we are currently in). */
1608
1609void
1610set_block (block)
f444e36b 1611 tree block ATTRIBUTE_UNUSED;
8d08fdba 1612{
f444e36b
MM
1613 /* The RTL expansion machinery requires us to provide this callback,
1614 but it is not applicable in function-at-a-time mode. */
1615 my_friendly_assert (cfun && !doing_semantic_analysis_p (), 20000911);
8d08fdba
MS
1616}
1617
1618/* Do a pushlevel for class declarations. */
e92cc029 1619
8d08fdba
MS
1620void
1621pushlevel_class ()
1622{
1623 register struct binding_level *newlevel;
1624
1625 /* Reuse or create a struct for this binding level. */
1626#if defined(DEBUG_CP_BINDING_LEVELS)
1627 if (0)
1628#else /* !defined(DEBUG_CP_BINDING_LEVELS) */
1629 if (free_binding_level)
1630#endif /* !defined(DEBUG_CP_BINDING_LEVELS) */
1631 {
1632 newlevel = free_binding_level;
1633 free_binding_level = free_binding_level->level_chain;
1634 }
1635 else
f181d4ae 1636 newlevel = make_binding_level ();
8d08fdba
MS
1637
1638#if defined(DEBUG_CP_BINDING_LEVELS)
1639 is_class_level = 1;
1640#endif /* defined(DEBUG_CP_BINDING_LEVELS) */
1641
1642 push_binding_level (newlevel, 0, 0);
1643
8d08fdba
MS
1644 class_binding_level = current_binding_level;
1645 class_binding_level->parm_flag = 2;
70adf8a9 1646 class_binding_level->this_class = current_class_type;
8d08fdba
MS
1647}
1648
b74a0560 1649/* ...and a poplevel for class declarations. */
e92cc029 1650
273a708f 1651void
b74a0560 1652poplevel_class ()
8d08fdba
MS
1653{
1654 register struct binding_level *level = class_binding_level;
8d08fdba
MS
1655 tree shadowed;
1656
1657 my_friendly_assert (level != 0, 354);
68642fb6 1658
8d08fdba 1659 /* If we're leaving a toplevel class, don't bother to do the setting
ddd5a7c1 1660 of IDENTIFIER_CLASS_VALUE to NULL_TREE, since first of all this slot
8d08fdba 1661 shouldn't even be used when current_class_type isn't set, and second,
ddd5a7c1 1662 if we don't touch it here, we're able to use the cache effect if the
8d08fdba 1663 next time we're entering a class scope, it is the same class. */
b74a0560 1664 if (current_class_depth != 1)
8f032717
MM
1665 {
1666 struct binding_level* b;
1667
1668 /* Clear out our IDENTIFIER_CLASS_VALUEs. */
1669 for (shadowed = level->class_shadowed;
1670 shadowed;
1671 shadowed = TREE_CHAIN (shadowed))
1672 IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (shadowed)) = NULL_TREE;
68642fb6 1673
8f032717
MM
1674 /* Find the next enclosing class, and recreate
1675 IDENTIFIER_CLASS_VALUEs appropriate for that class. */
1676 b = level->level_chain;
1677 while (b && b->parm_flag != 2)
1678 b = b->level_chain;
1679
1680 if (b)
68642fb6
UD
1681 for (shadowed = b->class_shadowed;
1682 shadowed;
8f032717
MM
1683 shadowed = TREE_CHAIN (shadowed))
1684 {
1685 tree t;
1686
1687 t = IDENTIFIER_BINDING (TREE_PURPOSE (shadowed));
1688 while (t && BINDING_LEVEL (t) != b)
1689 t = TREE_CHAIN (t);
68642fb6 1690
8f032717 1691 if (t)
68642fb6 1692 IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (shadowed))
8f032717
MM
1693 = BINDING_VALUE (t);
1694 }
1695 }
8d08fdba
MS
1696 else
1697 /* Remember to save what IDENTIFIER's were bound in this scope so we
1698 can recover from cache misses. */
e76a2646
MS
1699 {
1700 previous_class_type = current_class_type;
1701 previous_class_values = class_binding_level->class_shadowed;
1702 }
8d08fdba
MS
1703 for (shadowed = level->type_shadowed;
1704 shadowed;
1705 shadowed = TREE_CHAIN (shadowed))
2c73f9f5 1706 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (shadowed), TREE_VALUE (shadowed));
8d08fdba 1707
f181d4ae 1708 /* Remove the bindings for all of the class-level declarations. */
68642fb6
UD
1709 for (shadowed = level->class_shadowed;
1710 shadowed;
f181d4ae 1711 shadowed = TREE_CHAIN (shadowed))
d8f8dca1 1712 pop_binding (TREE_PURPOSE (shadowed), TREE_TYPE (shadowed));
f181d4ae 1713
1c0cc57e
KG
1714 GNU_xref_end_scope ((size_t) class_binding_level,
1715 (size_t) class_binding_level->level_chain,
8d08fdba 1716 class_binding_level->parm_flag,
5566b478 1717 class_binding_level->keep);
8d08fdba 1718
38e01259 1719 /* Now, pop out of the binding level which we created up in the
8d08fdba
MS
1720 `pushlevel_class' routine. */
1721#if defined(DEBUG_CP_BINDING_LEVELS)
1722 is_class_level = 1;
1723#endif /* defined(DEBUG_CP_BINDING_LEVELS) */
1724
1725 pop_binding_level ();
8d08fdba 1726}
8f032717
MM
1727
1728/* We are entering the scope of a class. Clear IDENTIFIER_CLASS_VALUE
1729 for any names in enclosing classes. */
1730
1731void
1732clear_identifier_class_values ()
1733{
1734 tree t;
1735
1736 if (!class_binding_level)
1737 return;
1738
1739 for (t = class_binding_level->class_shadowed;
1740 t;
1741 t = TREE_CHAIN (t))
1742 IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (t)) = NULL_TREE;
1743}
1744
0aafb128
MM
1745/* Returns non-zero if T is a virtual function table. */
1746
1747int
1748vtable_decl_p (t, data)
1749 tree t;
1750 void *data ATTRIBUTE_UNUSED;
1751{
1752 return (TREE_CODE (t) == VAR_DECL && DECL_VIRTUAL_P (t));
1753}
1754
1755/* Returns non-zero if T is a TYPE_DECL for a type with virtual
1756 functions. */
1757
1758int
1759vtype_decl_p (t, data)
1760 tree t;
1761 void *data ATTRIBUTE_UNUSED;
1762{
1763 return (TREE_CODE (t) == TYPE_DECL
34249844
NS
1764 && TREE_CODE (TREE_TYPE (t)) == RECORD_TYPE
1765 && TYPE_POLYMORPHIC_P (TREE_TYPE (t)));
0aafb128
MM
1766}
1767
f71f87f9
MM
1768/* Return the declarations that are members of the namespace NS. */
1769
1770tree
1771cp_namespace_decls (ns)
1772 tree ns;
1773{
1774 return NAMESPACE_LEVEL (ns)->names;
1775}
1776
0aafb128
MM
1777/* Walk all the namespaces contained NAMESPACE, including NAMESPACE
1778 itself, calling F for each. The DATA is passed to F as well. */
1779
1780static int
1781walk_namespaces_r (namespace, f, data)
1782 tree namespace;
1783 walk_namespaces_fn f;
1784 void *data;
1785{
1786 tree current;
1787 int result = 0;
1788
1789 result |= (*f) (namespace, data);
1790
f71f87f9 1791 for (current = cp_namespace_decls (namespace);
0aafb128
MM
1792 current;
1793 current = TREE_CHAIN (current))
1794 {
1795 if (TREE_CODE (current) != NAMESPACE_DECL
1796 || DECL_NAMESPACE_ALIAS (current))
1797 continue;
0aafb128
MM
1798
1799 /* We found a namespace. */
1800 result |= walk_namespaces_r (current, f, data);
1801 }
1802
1803 return result;
1804}
1805
1806/* Walk all the namespaces, calling F for each. The DATA is passed to
1807 F as well. */
1808
1809int
1810walk_namespaces (f, data)
1811 walk_namespaces_fn f;
1812 void *data;
1813{
1814 return walk_namespaces_r (global_namespace, f, data);
1815}
1816
1817struct walk_globals_data {
1818 walk_globals_pred p;
1819 walk_globals_fn f;
1820 void *data;
1821};
1822
1823/* Walk the global declarations in NAMESPACE. Whenever one is found
1824 for which P returns non-zero, call F with its address. If any call
1825 to F returns a non-zero value, return a non-zero value. */
1826
68642fb6 1827static int
0aafb128
MM
1828walk_globals_r (namespace, data)
1829 tree namespace;
1830 void *data;
1831{
1832 struct walk_globals_data* wgd = (struct walk_globals_data *) data;
1833 walk_globals_pred p = wgd->p;
1834 walk_globals_fn f = wgd->f;
1835 void *d = wgd->data;
1836 tree *t;
1837 int result = 0;
1838
1839 t = &NAMESPACE_LEVEL (namespace)->names;
1840
1841 while (*t)
1842 {
1843 tree glbl = *t;
1844
1845 if ((*p) (glbl, d))
1846 result |= (*f) (t, d);
1847
1848 /* If F changed *T, then *T still points at the next item to
1849 examine. */
1850 if (*t == glbl)
1851 t = &TREE_CHAIN (*t);
1852 }
1853
1854 return result;
1855}
1856
1857/* Walk the global declarations. Whenever one is found for which P
1858 returns non-zero, call F with its address. If any call to F
1859 returns a non-zero value, return a non-zero value. */
1860
1861int
1862walk_globals (p, f, data)
1863 walk_globals_pred p;
1864 walk_globals_fn f;
1865 void *data;
1866{
1867 struct walk_globals_data wgd;
1868 wgd.p = p;
1869 wgd.f = f;
1870 wgd.data = data;
1871
1872 return walk_namespaces (walk_globals_r, &wgd);
1873}
1874
1875/* Call wrapup_globals_declarations for the globals in NAMESPACE. If
1876 DATA is non-NULL, this is the last time we will call
1877 wrapup_global_declarations for this NAMESPACE. */
1878
1879int
1880wrapup_globals_for_namespace (namespace, data)
1881 tree namespace;
1882 void *data;
1883{
f71f87f9 1884 tree globals = cp_namespace_decls (namespace);
0aafb128
MM
1885 int len = list_length (globals);
1886 tree *vec = (tree *) alloca (sizeof (tree) * len);
1887 int i;
0352cfc8 1888 int result;
0aafb128
MM
1889 tree decl;
1890 int last_time = (data != 0);
1891
1892 if (last_time && namespace == global_namespace)
1893 /* Let compile_file handle the global namespace. */
1894 return 0;
1895
1896 /* Process the decls in reverse order--earliest first.
1897 Put them into VEC from back to front, then take out from front. */
0aafb128 1898 for (i = 0, decl = globals; i < len; i++, decl = TREE_CHAIN (decl))
62136084 1899 vec[len - i - 1] = decl;
68642fb6 1900
0352cfc8
MM
1901 if (last_time)
1902 {
1903 check_global_declarations (vec, len);
1904 return 0;
1905 }
1906
1907 /* Temporarily mark vtables as external. That prevents
1908 wrapup_global_declarations from writing them out; we must process
1909 them ourselves in finish_vtable_vardecl. */
1910 for (i = 0; i < len; ++i)
91f2aa22 1911 if (vtable_decl_p (vec[i], /*data=*/0) && !DECL_EXTERNAL (vec[i]))
0352cfc8
MM
1912 {
1913 DECL_NOT_REALLY_EXTERN (vec[i]) = 1;
1914 DECL_EXTERNAL (vec[i]) = 1;
1915 }
0aafb128 1916
0352cfc8
MM
1917 /* Write out any globals that need to be output. */
1918 result = wrapup_global_declarations (vec, len);
1919
1920 /* Undo the hack to DECL_EXTERNAL above. */
1921 for (i = 0; i < len; ++i)
1922 if (vtable_decl_p (vec[i], /*data=*/0)
1923 && DECL_NOT_REALLY_EXTERN (vec[i]))
1924 {
1925 DECL_NOT_REALLY_EXTERN (vec[i]) = 0;
1926 DECL_EXTERNAL (vec[i]) = 0;
1927 }
1928
1929 return result;
0aafb128
MM
1930}
1931
4519c0a8 1932\f
fc6af6e3
RH
1933/* Mark ARG (which is really a struct binding_level **) for GC. */
1934
4519c0a8
MM
1935static void
1936mark_binding_level (arg)
1937 void *arg;
1938{
1939 struct binding_level *lvl = *(struct binding_level **)arg;
1940
6625cdb5 1941 for (; lvl; lvl = lvl->level_chain)
4519c0a8
MM
1942 {
1943 ggc_mark_tree (lvl->names);
1944 ggc_mark_tree (lvl->tags);
1945 ggc_mark_tree (lvl->usings);
1946 ggc_mark_tree (lvl->using_directives);
1947 ggc_mark_tree (lvl->class_shadowed);
1948 ggc_mark_tree (lvl->type_shadowed);
1949 ggc_mark_tree (lvl->shadowed_labels);
1950 ggc_mark_tree (lvl->blocks);
70adf8a9 1951 ggc_mark_tree (lvl->this_class);
4519c0a8
MM
1952 ggc_mark_tree (lvl->incomplete);
1953 ggc_mark_tree (lvl->dead_vars_from_for);
6625cdb5
JM
1954 }
1955}
1956
1957static void
1958mark_named_label_lists (labs, uses)
1959 void *labs;
1960 void *uses;
1961{
1962 struct named_label_list *l = *(struct named_label_list **)labs;
1963 struct named_label_use_list *u = *(struct named_label_use_list **)uses;
4519c0a8 1964
6625cdb5
JM
1965 for (; l; l = l->next)
1966 {
1967 ggc_mark (l);
1968 mark_binding_level (l->binding_level);
1969 ggc_mark_tree (l->old_value);
1970 ggc_mark_tree (l->label_decl);
1971 ggc_mark_tree (l->bad_decls);
4519c0a8 1972 }
6625cdb5
JM
1973
1974 for (; u; u = u->next)
1975 ggc_mark (u);
4519c0a8 1976}
8d08fdba
MS
1977\f
1978/* For debugging. */
5566b478
MS
1979static int no_print_functions = 0;
1980static int no_print_builtins = 0;
8d08fdba
MS
1981
1982void
1983print_binding_level (lvl)
1984 struct binding_level *lvl;
1985{
1986 tree t;
1987 int i = 0, len;
1988 fprintf (stderr, " blocks=");
1989 fprintf (stderr, HOST_PTR_PRINTF, lvl->blocks);
1990 fprintf (stderr, " n_incomplete=%d parm_flag=%d keep=%d",
f30432d7 1991 list_length (lvl->incomplete), lvl->parm_flag, lvl->keep);
8d08fdba
MS
1992 if (lvl->tag_transparent)
1993 fprintf (stderr, " tag-transparent");
1994 if (lvl->more_cleanups_ok)
1995 fprintf (stderr, " more-cleanups-ok");
1996 if (lvl->have_cleanups)
1997 fprintf (stderr, " have-cleanups");
8d08fdba
MS
1998 fprintf (stderr, "\n");
1999 if (lvl->names)
2000 {
2001 fprintf (stderr, " names:\t");
2002 /* We can probably fit 3 names to a line? */
2003 for (t = lvl->names; t; t = TREE_CHAIN (t))
2004 {
68642fb6 2005 if (no_print_functions && (TREE_CODE (t) == FUNCTION_DECL))
8d08fdba
MS
2006 continue;
2007 if (no_print_builtins
fc378698
MS
2008 && (TREE_CODE (t) == TYPE_DECL)
2009 && (!strcmp (DECL_SOURCE_FILE (t),"<built-in>")))
8d08fdba
MS
2010 continue;
2011
2012 /* Function decls tend to have longer names. */
2013 if (TREE_CODE (t) == FUNCTION_DECL)
2014 len = 3;
2015 else
2016 len = 2;
2017 i += len;
2018 if (i > 6)
2019 {
2020 fprintf (stderr, "\n\t");
2021 i = len;
2022 }
2023 print_node_brief (stderr, "", t, 0);
bd6dd845 2024 if (t == error_mark_node)
8d08fdba
MS
2025 break;
2026 }
2027 if (i)
2028 fprintf (stderr, "\n");
2029 }
2030 if (lvl->tags)
2031 {
2032 fprintf (stderr, " tags:\t");
2033 i = 0;
2034 for (t = lvl->tags; t; t = TREE_CHAIN (t))
2035 {
2036 if (TREE_PURPOSE (t) == NULL_TREE)
2037 len = 3;
2038 else if (TREE_PURPOSE (t) == TYPE_IDENTIFIER (TREE_VALUE (t)))
2039 len = 2;
2040 else
2041 len = 4;
2042 i += len;
2043 if (i > 5)
2044 {
2045 fprintf (stderr, "\n\t");
2046 i = len;
2047 }
2048 if (TREE_PURPOSE (t) == NULL_TREE)
2049 {
2050 print_node_brief (stderr, "<unnamed-typedef", TREE_VALUE (t), 0);
2051 fprintf (stderr, ">");
2052 }
2053 else if (TREE_PURPOSE (t) == TYPE_IDENTIFIER (TREE_VALUE (t)))
2054 print_node_brief (stderr, "", TREE_VALUE (t), 0);
2055 else
2056 {
2057 print_node_brief (stderr, "<typedef", TREE_PURPOSE (t), 0);
2058 print_node_brief (stderr, "", TREE_VALUE (t), 0);
2059 fprintf (stderr, ">");
2060 }
2061 }
2062 if (i)
2063 fprintf (stderr, "\n");
2064 }
8d08fdba
MS
2065 if (lvl->class_shadowed)
2066 {
2067 fprintf (stderr, " class-shadowed:");
2068 for (t = lvl->class_shadowed; t; t = TREE_CHAIN (t))
2069 {
2070 fprintf (stderr, " %s ", IDENTIFIER_POINTER (TREE_PURPOSE (t)));
2071 }
2072 fprintf (stderr, "\n");
2073 }
2074 if (lvl->type_shadowed)
2075 {
2076 fprintf (stderr, " type-shadowed:");
2077 for (t = lvl->type_shadowed; t; t = TREE_CHAIN (t))
2078 {
8d08fdba 2079 fprintf (stderr, " %s ", IDENTIFIER_POINTER (TREE_PURPOSE (t)));
8d08fdba
MS
2080 }
2081 fprintf (stderr, "\n");
2082 }
2083}
2084
2085void
2086print_other_binding_stack (stack)
2087 struct binding_level *stack;
2088{
2089 struct binding_level *level;
2090 for (level = stack; level != global_binding_level; level = level->level_chain)
2091 {
2092 fprintf (stderr, "binding level ");
2093 fprintf (stderr, HOST_PTR_PRINTF, level);
2094 fprintf (stderr, "\n");
2095 print_binding_level (level);
2096 }
2097}
2098
2099void
2100print_binding_stack ()
2101{
2102 struct binding_level *b;
2103 fprintf (stderr, "current_binding_level=");
2104 fprintf (stderr, HOST_PTR_PRINTF, current_binding_level);
2105 fprintf (stderr, "\nclass_binding_level=");
2106 fprintf (stderr, HOST_PTR_PRINTF, class_binding_level);
2107 fprintf (stderr, "\nglobal_binding_level=");
2108 fprintf (stderr, HOST_PTR_PRINTF, global_binding_level);
2109 fprintf (stderr, "\n");
2110 if (class_binding_level)
2111 {
2112 for (b = class_binding_level; b; b = b->level_chain)
2113 if (b == current_binding_level)
2114 break;
2115 if (b)
2116 b = class_binding_level;
2117 else
2118 b = current_binding_level;
2119 }
2120 else
2121 b = current_binding_level;
2122 print_other_binding_stack (b);
2123 fprintf (stderr, "global:\n");
2124 print_binding_level (global_binding_level);
2125}
a9aedbc2 2126
2c73f9f5
ML
2127/* Namespace binding access routines: The namespace_bindings field of
2128 the identifier is polymorphic, with three possible values:
2129 NULL_TREE, a list of CPLUS_BINDINGS, or any other tree_node
2130 indicating the BINDING_VALUE of global_namespace. */
30394414 2131
2c73f9f5
ML
2132/* Check whether the a binding for the name to scope is known.
2133 Assumes that the bindings of the name are already a list
2134 of bindings. Returns the binding found, or NULL_TREE. */
2135
2136static tree
2137find_binding (name, scope)
30394414
JM
2138 tree name;
2139 tree scope;
2140{
2c73f9f5 2141 tree iter, prev = NULL_TREE;
3e3f722c
ML
2142
2143 scope = ORIGINAL_NAMESPACE (scope);
68642fb6 2144
30394414
JM
2145 for (iter = IDENTIFIER_NAMESPACE_BINDINGS (name); iter;
2146 iter = TREE_CHAIN (iter))
2147 {
2148 my_friendly_assert (TREE_CODE (iter) == CPLUS_BINDING, 374);
2149 if (BINDING_SCOPE (iter) == scope)
2c73f9f5 2150 {
cfe507be 2151 /* Move binding found to the front of the list, so
2c73f9f5
ML
2152 subsequent lookups will find it faster. */
2153 if (prev)
2154 {
2155 TREE_CHAIN (prev) = TREE_CHAIN (iter);
2156 TREE_CHAIN (iter) = IDENTIFIER_NAMESPACE_BINDINGS (name);
2157 IDENTIFIER_NAMESPACE_BINDINGS (name) = iter;
2158 }
2159 return iter;
2160 }
2161 prev = iter;
30394414 2162 }
2c73f9f5
ML
2163 return NULL_TREE;
2164}
2165
2166/* Always returns a binding for name in scope. If the
2167 namespace_bindings is not a list, convert it to one first.
2168 If no binding is found, make a new one. */
2169
2170tree
2171binding_for_name (name, scope)
2172 tree name;
2173 tree scope;
2174{
2175 tree b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2176 tree result;
3e3f722c
ML
2177
2178 scope = ORIGINAL_NAMESPACE (scope);
68642fb6 2179
2c73f9f5
ML
2180 if (b && TREE_CODE (b) != CPLUS_BINDING)
2181 {
2182 /* Get rid of optimization for global scope. */
2183 IDENTIFIER_NAMESPACE_BINDINGS (name) = NULL_TREE;
2184 BINDING_VALUE (binding_for_name (name, global_namespace)) = b;
2185 b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2186 }
2187 if (b && (result = find_binding (name, scope)))
2188 return result;
cd9f6678 2189 /* Not found, make a new one. */
2c73f9f5
ML
2190 result = make_node (CPLUS_BINDING);
2191 TREE_CHAIN (result) = b;
2192 IDENTIFIER_NAMESPACE_BINDINGS (name) = result;
2193 BINDING_SCOPE (result) = scope;
2194 BINDING_TYPE (result) = NULL_TREE;
2195 BINDING_VALUE (result) = NULL_TREE;
2c73f9f5
ML
2196 return result;
2197}
2198
2199/* Return the binding value for name in scope, considering that
2200 namespace_binding may or may not be a list of CPLUS_BINDINGS. */
2201
2202tree
2203namespace_binding (name, scope)
2204 tree name;
2205 tree scope;
2206{
2207 tree b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2208 if (b == NULL_TREE)
2209 return NULL_TREE;
cb0dbb9a
JM
2210 if (scope == NULL_TREE)
2211 scope = global_namespace;
2c73f9f5
ML
2212 if (TREE_CODE (b) != CPLUS_BINDING)
2213 return (scope == global_namespace) ? b : NULL_TREE;
2214 name = find_binding (name,scope);
2215 if (name == NULL_TREE)
2216 return name;
2217 return BINDING_VALUE (name);
2218}
2219
2220/* Set the binding value for name in scope. If modifying the binding
2221 of global_namespace is attempted, try to optimize it. */
2222
2223void
2224set_namespace_binding (name, scope, val)
2225 tree name;
2226 tree scope;
2227 tree val;
2228{
2229 tree b;
cb0dbb9a
JM
2230
2231 if (scope == NULL_TREE)
2232 scope = global_namespace;
68642fb6 2233
2c73f9f5
ML
2234 if (scope == global_namespace)
2235 {
2236 b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2237 if (b == NULL_TREE || TREE_CODE (b) != CPLUS_BINDING)
2238 {
2239 IDENTIFIER_NAMESPACE_BINDINGS (name) = val;
2240 return;
2241 }
2242 }
2243 b = binding_for_name (name, scope);
2244 BINDING_VALUE (b) = val;
30394414
JM
2245}
2246
dff6b454
RK
2247/* Push into the scope of the NAME namespace. If NAME is NULL_TREE, then we
2248 select a name that is unique to this compilation unit. */
e92cc029 2249
a9aedbc2
MS
2250void
2251push_namespace (name)
2252 tree name;
2253{
b370501f 2254 tree d = NULL_TREE;
30394414
JM
2255 int need_new = 1;
2256 int implicit_use = 0;
2c73f9f5 2257 int global = 0;
30394414
JM
2258 if (!global_namespace)
2259 {
2c73f9f5 2260 /* This must be ::. */
30394414 2261 my_friendly_assert (name == get_identifier ("::"), 377);
2c73f9f5 2262 global = 1;
30394414
JM
2263 }
2264 else if (!name)
2265 {
3ab52652
ML
2266 /* The name of anonymous namespace is unique for the translation
2267 unit. */
0c8feefe
MM
2268 if (!anonymous_namespace_name)
2269 anonymous_namespace_name = get_file_function_name ('N');
2270 name = anonymous_namespace_name;
3ab52652
ML
2271 d = IDENTIFIER_NAMESPACE_VALUE (name);
2272 if (d)
2273 /* Reopening anonymous namespace. */
2274 need_new = 0;
30394414 2275 implicit_use = 1;
2c73f9f5 2276 }
30394414
JM
2277 else
2278 {
2c73f9f5 2279 /* Check whether this is an extended namespace definition. */
30394414
JM
2280 d = IDENTIFIER_NAMESPACE_VALUE (name);
2281 if (d != NULL_TREE && TREE_CODE (d) == NAMESPACE_DECL)
3e3f722c
ML
2282 {
2283 need_new = 0;
2284 if (DECL_NAMESPACE_ALIAS (d))
2285 {
33bd39a2 2286 error ("namespace alias `%D' not allowed here, assuming `%D'",
3e3f722c
ML
2287 d, DECL_NAMESPACE_ALIAS (d));
2288 d = DECL_NAMESPACE_ALIAS (d);
2289 }
2290 }
30394414 2291 }
68642fb6 2292
30394414
JM
2293 if (need_new)
2294 {
2c73f9f5 2295 /* Make a new namespace, binding the name to it. */
6b57ac29 2296 d = build_lang_decl (NAMESPACE_DECL, name, void_type_node);
2c73f9f5
ML
2297 /* The global namespace is not pushed, and the global binding
2298 level is set elsewhere. */
2299 if (!global)
2300 {
40f1e342 2301 DECL_CONTEXT (d) = FROB_CONTEXT (current_namespace);
2c73f9f5
ML
2302 d = pushdecl (d);
2303 pushlevel (0);
2304 declare_namespace_level ();
2305 NAMESPACE_LEVEL (d) = current_binding_level;
2306 }
30394414 2307 }
2c73f9f5
ML
2308 else
2309 resume_binding_level (NAMESPACE_LEVEL (d));
2310
30394414
JM
2311 if (implicit_use)
2312 do_using_directive (d);
2c73f9f5 2313 /* Enter the name space. */
30394414 2314 current_namespace = d;
a9aedbc2
MS
2315}
2316
2317/* Pop from the scope of the current namespace. */
e92cc029 2318
a9aedbc2
MS
2319void
2320pop_namespace ()
2321{
1dbb6023 2322 my_friendly_assert (current_namespace != global_namespace, 20010801);
cb0dbb9a 2323 current_namespace = CP_DECL_CONTEXT (current_namespace);
2c73f9f5
ML
2324 /* The binding level is not popped, as it might be re-opened later. */
2325 suspend_binding_level ();
2326}
a9aedbc2 2327
61fc8c9e
MM
2328/* Push into the scope of the namespace NS, even if it is deeply
2329 nested within another namespace. */
2330
2331void
2332push_nested_namespace (ns)
2333 tree ns;
2334{
2335 if (ns == global_namespace)
2336 push_to_top_level ();
2337 else
2338 {
2339 push_nested_namespace (CP_DECL_CONTEXT (ns));
2340 push_namespace (DECL_NAME (ns));
2341 }
2342}
2343
2344/* Pop back from the scope of the namespace NS, which was previously
2345 entered with push_nested_namespace. */
68642fb6 2346
61fc8c9e
MM
2347void
2348pop_nested_namespace (ns)
2349 tree ns;
2350{
2351 while (ns != global_namespace)
2352 {
2353 pop_namespace ();
2354 ns = CP_DECL_CONTEXT (ns);
2355 }
2356
2357 pop_from_top_level ();
2358}
2359
8d08fdba
MS
2360\f
2361/* Subroutines for reverting temporarily to top-level for instantiation
2362 of templates and such. We actually need to clear out the class- and
2363 local-value slots of all identifiers, so that only the global values
2364 are at all visible. Simply setting current_binding_level to the global
2365 scope isn't enough, because more binding levels may be pushed. */
9cd64686 2366struct saved_scope *scope_chain;
8d08fdba 2367
9cd64686 2368/* Mark ARG (which is really a struct saved_scope **) for GC. */
fc6af6e3
RH
2369
2370static void
2371mark_saved_scope (arg)
2372 void *arg;
2373{
2374 struct saved_scope *t = *(struct saved_scope **)arg;
2375 while (t)
2376 {
fc6af6e3
RH
2377 mark_binding_level (&t->class_bindings);
2378 ggc_mark_tree (t->old_bindings);
2379 ggc_mark_tree (t->old_namespace);
ee8fc32b 2380 ggc_mark_tree (t->decl_ns_list);
fc6af6e3
RH
2381 ggc_mark_tree (t->class_name);
2382 ggc_mark_tree (t->class_type);
2383 ggc_mark_tree (t->access_specifier);
a8f73d4b 2384 ggc_mark_tree (t->function_decl);
fc6af6e3 2385 if (t->lang_base)
9cd64686 2386 ggc_mark_tree_varray (t->lang_base);
fc6af6e3 2387 ggc_mark_tree (t->lang_name);
fc6af6e3 2388 ggc_mark_tree (t->template_parms);
9cd64686
MM
2389 ggc_mark_tree (t->x_previous_class_type);
2390 ggc_mark_tree (t->x_previous_class_values);
6f80451c 2391 ggc_mark_tree (t->x_saved_tree);
70adf8a9
JM
2392 ggc_mark_tree (t->incomplete);
2393 ggc_mark_tree (t->lookups);
6f80451c
MM
2394
2395 mark_stmt_tree (&t->x_stmt_tree);
a8f73d4b 2396 mark_binding_level (&t->bindings);
fc6af6e3
RH
2397 t = t->prev;
2398 }
2399}
2400
e92cc029 2401static tree
45537677
MS
2402store_bindings (names, old_bindings)
2403 tree names, old_bindings;
2404{
2405 tree t;
c00996a3
JM
2406 tree search_bindings = old_bindings;
2407
45537677
MS
2408 for (t = names; t; t = TREE_CHAIN (t))
2409 {
2410 tree binding, t1, id;
2411
2412 if (TREE_CODE (t) == TREE_LIST)
2413 id = TREE_PURPOSE (t);
2414 else
2415 id = DECL_NAME (t);
2416
68642fb6 2417 if (!id
f181d4ae
MM
2418 /* Note that we may have an IDENTIFIER_CLASS_VALUE even when
2419 we have no IDENTIFIER_BINDING if we have left the class
2420 scope, but cached the class-level declarations. */
2421 || !(IDENTIFIER_BINDING (id) || IDENTIFIER_CLASS_VALUE (id)))
45537677
MS
2422 continue;
2423
c00996a3 2424 for (t1 = search_bindings; t1; t1 = TREE_CHAIN (t1))
45537677
MS
2425 if (TREE_VEC_ELT (t1, 0) == id)
2426 goto skip_it;
78957a2a 2427
31a714f6 2428 my_friendly_assert (TREE_CODE (id) == IDENTIFIER_NODE, 135);
87e3dbc9 2429 binding = make_tree_vec (4);
31a714f6
MM
2430 TREE_VEC_ELT (binding, 0) = id;
2431 TREE_VEC_ELT (binding, 1) = REAL_IDENTIFIER_TYPE_VALUE (id);
2432 TREE_VEC_ELT (binding, 2) = IDENTIFIER_BINDING (id);
2433 TREE_VEC_ELT (binding, 3) = IDENTIFIER_CLASS_VALUE (id);
2434 IDENTIFIER_BINDING (id) = NULL_TREE;
2435 IDENTIFIER_CLASS_VALUE (id) = NULL_TREE;
45537677
MS
2436 TREE_CHAIN (binding) = old_bindings;
2437 old_bindings = binding;
2438 skip_it:
2439 ;
2440 }
2441 return old_bindings;
2442}
2443
8d08fdba 2444void
5566b478
MS
2445maybe_push_to_top_level (pseudo)
2446 int pseudo;
8d08fdba 2447{
a8f73d4b 2448 struct saved_scope *s;
9cd64686 2449 struct binding_level *b;
a8f73d4b
MM
2450 tree old_bindings;
2451 int need_pop;
2452
2453 s = (struct saved_scope *) xcalloc (1, sizeof (struct saved_scope));
8d08fdba 2454
9cd64686
MM
2455 b = scope_chain ? current_binding_level : 0;
2456
a8f73d4b 2457 /* If we're in the middle of some function, save our state. */
01d939e8 2458 if (cfun)
a8f73d4b
MM
2459 {
2460 need_pop = 1;
2461 push_function_context_to (NULL_TREE);
2462 }
2463 else
2464 need_pop = 0;
e349ee73 2465
a8f73d4b 2466 old_bindings = NULL_TREE;
9cd64686 2467 if (scope_chain && previous_class_type)
a50f0918
MS
2468 old_bindings = store_bindings (previous_class_values, old_bindings);
2469
8d08fdba
MS
2470 /* Have to include global_binding_level, because class-level decls
2471 aren't listed anywhere useful. */
2472 for (; b; b = b->level_chain)
2473 {
2474 tree t;
2475
2c73f9f5
ML
2476 /* Template IDs are inserted into the global level. If they were
2477 inserted into namespace level, finish_file wouldn't find them
2478 when doing pending instantiations. Therefore, don't stop at
2479 namespace level, but continue until :: . */
74b846e0 2480 if (b == global_binding_level || (pseudo && b->template_parms_p))
5566b478 2481 break;
8d08fdba 2482
45537677 2483 old_bindings = store_bindings (b->names, old_bindings);
cffa8729 2484 /* We also need to check class_shadowed to save class-level type
45537677
MS
2485 bindings, since pushclass doesn't fill in b->names. */
2486 if (b->parm_flag == 2)
cffa8729 2487 old_bindings = store_bindings (b->class_shadowed, old_bindings);
8d08fdba 2488
8d08fdba
MS
2489 /* Unwind type-value slots back to top level. */
2490 for (t = b->type_shadowed; t; t = TREE_CHAIN (t))
2491 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (t), TREE_VALUE (t));
2492 }
fc0e7bf5
MM
2493 s->prev = scope_chain;
2494 s->old_bindings = old_bindings;
a8f73d4b
MM
2495 s->bindings = b;
2496 s->need_pop_function_context = need_pop;
2497 s->function_decl = current_function_decl;
fc0e7bf5
MM
2498
2499 scope_chain = s;
8d08fdba 2500 current_function_decl = NULL_TREE;
9cd64686 2501 VARRAY_TREE_INIT (current_lang_base, 10, "current_lang_base");
51c184be 2502 current_lang_name = lang_name_cplusplus;
2c73f9f5 2503 current_namespace = global_namespace;
5566b478
MS
2504}
2505
2506void
2507push_to_top_level ()
2508{
2509 maybe_push_to_top_level (0);
8d08fdba
MS
2510}
2511
2512void
2513pop_from_top_level ()
2514{
9cd64686 2515 struct saved_scope *s = scope_chain;
8d08fdba
MS
2516 tree t;
2517
e76a2646 2518 /* Clear out class-level bindings cache. */
8d08fdba 2519 if (previous_class_type)
8f032717 2520 invalidate_class_lookup_cache ();
8d08fdba 2521
9cd64686
MM
2522 VARRAY_FREE (current_lang_base);
2523
2524 scope_chain = s->prev;
87e3dbc9 2525 for (t = s->old_bindings; t; t = TREE_CHAIN (t))
8d08fdba
MS
2526 {
2527 tree id = TREE_VEC_ELT (t, 0);
31a714f6
MM
2528
2529 SET_IDENTIFIER_TYPE_VALUE (id, TREE_VEC_ELT (t, 1));
2530 IDENTIFIER_BINDING (id) = TREE_VEC_ELT (t, 2);
2531 IDENTIFIER_CLASS_VALUE (id) = TREE_VEC_ELT (t, 3);
8d08fdba 2532 }
9cd64686 2533
a8f73d4b
MM
2534 /* If we were in the middle of compiling a function, restore our
2535 state. */
2536 if (s->need_pop_function_context)
2537 pop_function_context_from (NULL_TREE);
2538 current_function_decl = s->function_decl;
e349ee73 2539
a8f73d4b 2540 free (s);
8d08fdba
MS
2541}
2542\f
2543/* Push a definition of struct, union or enum tag "name".
68642fb6 2544 into binding_level "b". "type" should be the type node,
8d08fdba
MS
2545 We assume that the tag "name" is not already defined.
2546
2547 Note that the definition may really be just a forward reference.
2548 In that case, the TYPE_SIZE will be a NULL_TREE.
2549
e92cc029 2550 C++ gratuitously puts all these tags in the name space. */
8d08fdba
MS
2551
2552/* When setting the IDENTIFIER_TYPE_VALUE field of an identifier ID,
2553 record the shadowed value for this binding contour. TYPE is
2554 the type that ID maps to. */
2555
2556static void
2557set_identifier_type_value_with_scope (id, type, b)
2558 tree id;
2559 tree type;
2560 struct binding_level *b;
2561{
2c73f9f5 2562 if (!b->namespace_p)
8d08fdba 2563 {
2c73f9f5
ML
2564 /* Shadow the marker, not the real thing, so that the marker
2565 gets restored later. */
2566 tree old_type_value = REAL_IDENTIFIER_TYPE_VALUE (id);
8d08fdba
MS
2567 b->type_shadowed
2568 = tree_cons (id, old_type_value, b->type_shadowed);
2569 }
2c73f9f5
ML
2570 else
2571 {
2572 tree binding = binding_for_name (id, current_namespace);
2573 BINDING_TYPE (binding) = type;
2574 /* Store marker instead of real type. */
2575 type = global_type_node;
2576 }
8d08fdba
MS
2577 SET_IDENTIFIER_TYPE_VALUE (id, type);
2578}
2579
8f032717 2580/* As set_identifier_type_value_with_scope, but using current_binding_level. */
8d08fdba
MS
2581
2582void
2583set_identifier_type_value (id, type)
2584 tree id;
2585 tree type;
2586{
8f032717 2587 set_identifier_type_value_with_scope (id, type, current_binding_level);
8d08fdba
MS
2588}
2589
2c73f9f5
ML
2590/* Return the type associated with id. */
2591
2592tree
2593identifier_type_value (id)
2594 tree id;
2595{
2596 /* There is no type with that name, anywhere. */
2597 if (REAL_IDENTIFIER_TYPE_VALUE (id) == NULL_TREE)
2598 return NULL_TREE;
2599 /* This is not the type marker, but the real thing. */
2600 if (REAL_IDENTIFIER_TYPE_VALUE (id) != global_type_node)
2601 return REAL_IDENTIFIER_TYPE_VALUE (id);
2602 /* Have to search for it. It must be on the global level, now.
2603 Ask lookup_name not to return non-types. */
3e3f722c 2604 id = lookup_name_real (id, 2, 1, 0);
2c73f9f5
ML
2605 if (id)
2606 return TREE_TYPE (id);
2607 return NULL_TREE;
2608}
2609
a9aedbc2
MS
2610/* Pop off extraneous binding levels left over due to syntax errors.
2611
2612 We don't pop past namespaces, as they might be valid. */
e92cc029 2613
8926095f
MS
2614void
2615pop_everything ()
2616{
2617#ifdef DEBUG_CP_BINDING_LEVELS
2618 fprintf (stderr, "XXX entering pop_everything ()\n");
2619#endif
8f032717 2620 while (!toplevel_bindings_p ())
8926095f 2621 {
8f032717 2622 if (current_binding_level->parm_flag == 2)
b74a0560 2623 pop_nested_class ();
8926095f
MS
2624 else
2625 poplevel (0, 0, 0);
2626 }
2627#ifdef DEBUG_CP_BINDING_LEVELS
2628 fprintf (stderr, "XXX leaving pop_everything ()\n");
2629#endif
2630}
2631
39c01e4c
MM
2632/* The type TYPE is being declared. If it is a class template, or a
2633 specialization of a class template, do any processing required and
2634 perform error-checking. If IS_FRIEND is non-zero, this TYPE is
2635 being declared a friend. B is the binding level at which this TYPE
2636 should be bound.
2637
2638 Returns the TYPE_DECL for TYPE, which may have been altered by this
2639 processing. */
2640
68642fb6 2641static tree
39c01e4c
MM
2642maybe_process_template_type_declaration (type, globalize, b)
2643 tree type;
2644 int globalize;
2645 struct binding_level* b;
2646{
2647 tree decl = TYPE_NAME (type);
68642fb6 2648
39c01e4c
MM
2649 if (processing_template_parmlist)
2650 /* You can't declare a new template type in a template parameter
2651 list. But, you can declare a non-template type:
68642fb6 2652
39c01e4c 2653 template <class A*> struct S;
68642fb6 2654
39c01e4c
MM
2655 is a forward-declaration of `A'. */
2656 ;
68642fb6 2657 else
39c01e4c
MM
2658 {
2659 maybe_check_template_type (type);
2660
68642fb6 2661 my_friendly_assert (IS_AGGR_TYPE (type)
ed44da02 2662 || TREE_CODE (type) == ENUMERAL_TYPE, 0);
68642fb6
UD
2663
2664
3ebc5c52 2665 if (processing_template_decl)
39c01e4c
MM
2666 {
2667 /* This may change after the call to
2668 push_template_decl_real, but we want the original value. */
2669 tree name = DECL_NAME (decl);
2670
2671 decl = push_template_decl_real (decl, globalize);
2672 /* If the current binding level is the binding level for the
2673 template parameters (see the comment in
2674 begin_template_parm_list) and the enclosing level is a class
2675 scope, and we're not looking at a friend, push the
2676 declaration of the member class into the class scope. In the
2677 friend case, push_template_decl will already have put the
2678 friend into global scope, if appropriate. */
ed44da02 2679 if (TREE_CODE (type) != ENUMERAL_TYPE
74b846e0 2680 && !globalize && b->template_parms_p
39c01e4c
MM
2681 && b->level_chain->parm_flag == 2)
2682 {
61a127b3 2683 finish_member_declaration (CLASSTYPE_TI_TEMPLATE (type));
39c01e4c
MM
2684 /* Put this tag on the list of tags for the class, since
2685 that won't happen below because B is not the class
2686 binding level, but is instead the pseudo-global level. */
68642fb6 2687 b->level_chain->tags =
e1b3e07d 2688 tree_cons (name, type, b->level_chain->tags);
d0f062fb 2689 if (!COMPLETE_TYPE_P (current_class_type))
39c01e4c
MM
2690 CLASSTYPE_TAGS (current_class_type) = b->level_chain->tags;
2691 }
2692 }
2693 }
2694
2695 return decl;
2696}
2697
9188c363
MM
2698/* In C++, you don't have to write `struct S' to refer to `S'; you
2699 can just use `S'. We accomplish this by creating a TYPE_DECL as
2700 if the user had written `typedef struct S S'. Create and return
2701 the TYPE_DECL for TYPE. */
2702
2703tree
2704create_implicit_typedef (name, type)
2705 tree name;
2706 tree type;
2707{
2708 tree decl;
2709
2710 decl = build_decl (TYPE_DECL, name, type);
c727aa5e 2711 DECL_ARTIFICIAL (decl) = 1;
9188c363
MM
2712 /* There are other implicit type declarations, like the one *within*
2713 a class that allows you to write `S::S'. We must distinguish
2714 amongst these. */
2715 SET_DECL_IMPLICIT_TYPEDEF_P (decl);
2716 TYPE_NAME (type) = decl;
2717
2718 return decl;
2719}
2720
8e4ce833
JJ
2721/* Remember a local name for name-mangling purposes. */
2722
2723static void
2724push_local_name (decl)
2725 tree decl;
2726{
2727 size_t i, nelts;
2728 tree t, name;
2729
2730 if (!local_names)
2731 VARRAY_TREE_INIT (local_names, 8, "local_names");
2732
2733 name = DECL_NAME (decl);
2734
2735 nelts = VARRAY_ACTIVE_SIZE (local_names);
2736 for (i = 0; i < nelts; i++)
2737 {
2738 t = VARRAY_TREE (local_names, i);
2739 if (DECL_NAME (t) == name)
2740 {
2741 if (!DECL_LANG_SPECIFIC (decl))
2742 retrofit_lang_decl (decl);
2743 if (DECL_LANG_SPECIFIC (t))
2744 DECL_DISCRIMINATOR (decl) = DECL_DISCRIMINATOR (t) + 1;
2745 else
2746 DECL_DISCRIMINATOR (decl) = 1;
2747
2748 VARRAY_TREE (local_names, i) = decl;
2749 return;
2750 }
2751 }
2752
2753 VARRAY_PUSH_TREE (local_names, decl);
2754}
2755
8d08fdba 2756/* Push a tag name NAME for struct/class/union/enum type TYPE.
6757edfe 2757 Normally put it into the inner-most non-tag-transparent scope,
8d08fdba 2758 but if GLOBALIZE is true, put it in the inner-most non-class scope.
e92cc029 2759 The latter is needed for implicit declarations. */
8d08fdba
MS
2760
2761void
2762pushtag (name, type, globalize)
2763 tree name, type;
2764 int globalize;
2765{
2766 register struct binding_level *b;
8d08fdba 2767
8f032717 2768 b = current_binding_level;
8d08fdba 2769 while (b->tag_transparent
fcebb2dd
NS
2770 || (b->parm_flag == 2
2771 && (globalize
2772 /* We may be defining a new type in the initializer
2773 of a static member variable. We allow this when
2774 not pedantic, and it is particularly useful for
2775 type punning via an anonymous union. */
2776 || COMPLETE_TYPE_P (b->this_class))))
8d08fdba
MS
2777 b = b->level_chain;
2778
e1b3e07d 2779 b->tags = tree_cons (name, type, b->tags);
8d08fdba
MS
2780
2781 if (name)
2782 {
8d08fdba 2783 /* Do C++ gratuitous typedefing. */
db5ae43f 2784 if (IDENTIFIER_TYPE_VALUE (name) != type)
8d08fdba 2785 {
93cdc044 2786 register tree d = NULL_TREE;
848cf1e0 2787 int in_class = 0;
9188c363 2788 tree context = TYPE_CONTEXT (type);
280f9385 2789
280f9385
MM
2790 if (! context)
2791 {
2792 tree cs = current_scope ();
2793
2794 if (! globalize)
2795 context = cs;
2f939d94 2796 else if (cs != NULL_TREE && TYPE_P (cs))
280f9385
MM
2797 /* When declaring a friend class of a local class, we want
2798 to inject the newly named class into the scope
2799 containing the local class, not the namespace scope. */
4f1c5b7d 2800 context = decl_function_context (get_type_decl (cs));
280f9385 2801 }
280f9385
MM
2802 if (!context)
2803 context = current_namespace;
8d08fdba 2804
74b846e0 2805 if ((b->template_parms_p && b->level_chain->parm_flag == 2)
93cdc044
JM
2806 || b->parm_flag == 2)
2807 in_class = 1;
93cdc044 2808
848cf1e0
MM
2809 if (current_lang_name == lang_name_java)
2810 TYPE_FOR_JAVA (type) = 1;
93cdc044 2811
9188c363 2812 d = create_implicit_typedef (name, type);
cb0dbb9a 2813 DECL_CONTEXT (d) = FROB_CONTEXT (context);
9188c363
MM
2814 if (! in_class)
2815 set_identifier_type_value_with_scope (name, type, b);
e1cd6e56 2816
39c01e4c
MM
2817 d = maybe_process_template_type_declaration (type,
2818 globalize, b);
93cdc044
JM
2819
2820 if (b->parm_flag == 2)
61a127b3 2821 {
848cf1e0 2822 if (!PROCESSING_REAL_TEMPLATE_DECL_P ())
61a127b3
MM
2823 /* Put this TYPE_DECL on the TYPE_FIELDS list for the
2824 class. But if it's a member template class, we
2825 want the TEMPLATE_DECL, not the TYPE_DECL, so this
2826 is done later. */
2827 finish_member_declaration (d);
8f032717
MM
2828 else
2829 pushdecl_class_level (d);
61a127b3 2830 }
93cdc044
JM
2831 else
2832 d = pushdecl_with_scope (d, b);
2833
1951a1b6 2834 /* FIXME what if it gets a name from typedef? */
848cf1e0
MM
2835 if (ANON_AGGRNAME_P (name))
2836 DECL_IGNORED_P (d) = 1;
2837
2838 TYPE_CONTEXT (type) = DECL_CONTEXT (d);
1f6e1acc
AS
2839
2840 /* If this is a local class, keep track of it. We need this
2841 information for name-mangling, and so that it is possible to find
2842 all function definitions in a translation unit in a convenient
2843 way. (It's otherwise tricky to find a member function definition
2844 it's only pointed to from within a local class.) */
5362b086 2845 if (TYPE_CONTEXT (type)
089acd57
MM
2846 && TREE_CODE (TYPE_CONTEXT (type)) == FUNCTION_DECL
2847 && !processing_template_decl)
1f6e1acc 2848 VARRAY_PUSH_TREE (local_classes, type);
8d08fdba
MS
2849 }
2850 if (b->parm_flag == 2)
2851 {
d0f062fb 2852 if (!COMPLETE_TYPE_P (current_class_type))
8d08fdba
MS
2853 CLASSTYPE_TAGS (current_class_type) = b->tags;
2854 }
2855 }
2856
2857 if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL)
2858 /* Use the canonical TYPE_DECL for this node. */
2859 TYPE_STUB_DECL (type) = TYPE_NAME (type);
2860 else
2861 {
2862 /* Create a fake NULL-named TYPE_DECL node whose TREE_TYPE
2863 will be the tagged type we just added to the current
2864 binding level. This fake NULL-named TYPE_DECL node helps
2865 dwarfout.c to know when it needs to output a
2866 representation of a tagged type, and it also gives us a
2867 convenient place to record the "scope start" address for
2868 the tagged type. */
2869
8d08fdba 2870 tree d = build_decl (TYPE_DECL, NULL_TREE, type);
8d08fdba
MS
2871 TYPE_STUB_DECL (type) = pushdecl_with_scope (d, b);
2872 }
2873}
2874
2875/* Counter used to create anonymous type names. */
e92cc029 2876
8d08fdba
MS
2877static int anon_cnt = 0;
2878
2879/* Return an IDENTIFIER which can be used as a name for
2880 anonymous structs and unions. */
e92cc029 2881
8d08fdba
MS
2882tree
2883make_anon_name ()
2884{
2885 char buf[32];
2886
2887 sprintf (buf, ANON_AGGRNAME_FORMAT, anon_cnt++);
2888 return get_identifier (buf);
2889}
2890
2891/* Clear the TREE_PURPOSE slot of tags which have anonymous typenames.
2892 This keeps dbxout from getting confused. */
e92cc029 2893
8d08fdba
MS
2894void
2895clear_anon_tags ()
2896{
2897 register struct binding_level *b;
2898 register tree tags;
2899 static int last_cnt = 0;
2900
2901 /* Fast out if no new anon names were declared. */
2902 if (last_cnt == anon_cnt)
2903 return;
2904
2905 b = current_binding_level;
2906 while (b->tag_transparent)
2907 b = b->level_chain;
2908 tags = b->tags;
2909 while (tags)
2910 {
2911 /* A NULL purpose means we have already processed all tags
2912 from here to the end of the list. */
2913 if (TREE_PURPOSE (tags) == NULL_TREE)
2914 break;
2915 if (ANON_AGGRNAME_P (TREE_PURPOSE (tags)))
2916 TREE_PURPOSE (tags) = NULL_TREE;
2917 tags = TREE_CHAIN (tags);
2918 }
2919 last_cnt = anon_cnt;
2920}
2921\f
2922/* Subroutine of duplicate_decls: return truthvalue of whether
2923 or not types of these decls match.
2924
2925 For C++, we must compare the parameter list so that `int' can match
2926 `int&' in a parameter position, but `int&' is not confused with
2927 `const int&'. */
e92cc029 2928
6060a796 2929int
8d08fdba
MS
2930decls_match (newdecl, olddecl)
2931 tree newdecl, olddecl;
2932{
2933 int types_match;
2934
347d73d7
ML
2935 if (newdecl == olddecl)
2936 return 1;
2937
6b4b3deb
MM
2938 if (TREE_CODE (newdecl) != TREE_CODE (olddecl))
2939 /* If the two DECLs are not even the same kind of thing, we're not
2940 interested in their types. */
2941 return 0;
2942
2943 if (TREE_CODE (newdecl) == FUNCTION_DECL)
8d08fdba
MS
2944 {
2945 tree f1 = TREE_TYPE (newdecl);
2946 tree f2 = TREE_TYPE (olddecl);
2947 tree p1 = TYPE_ARG_TYPES (f1);
2948 tree p2 = TYPE_ARG_TYPES (f2);
2949
4f1c5b7d 2950 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
eb68cb58
MM
2951 && ! (DECL_EXTERN_C_P (newdecl)
2952 && DECL_EXTERN_C_P (olddecl)))
c5a6fc45
JM
2953 return 0;
2954
8d08fdba 2955 if (TREE_CODE (f1) != TREE_CODE (f2))
e867a179 2956 return 0;
8d08fdba 2957
3bfdc719 2958 if (same_type_p (TREE_TYPE (f1), TREE_TYPE (f2)))
8926095f 2959 {
8b27e9ef
NS
2960 if (p2 == NULL_TREE && DECL_EXTERN_C_P (olddecl)
2961 && (DECL_BUILT_IN (olddecl)
2962#ifndef NO_IMPLICIT_EXTERN_C
2963 || (DECL_IN_SYSTEM_HEADER (newdecl) && !DECL_CLASS_SCOPE_P (newdecl))
2964 || (DECL_IN_SYSTEM_HEADER (olddecl) && !DECL_CLASS_SCOPE_P (olddecl))
2965#endif
2966 ))
a28e3c7f
MS
2967 {
2968 types_match = self_promoting_args_p (p1);
2969 if (p1 == void_list_node)
2970 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
2971 }
8b27e9ef
NS
2972#ifndef NO_IMPLICIT_EXTERN_C
2973 else if (p1 == NULL_TREE
2974 && (DECL_EXTERN_C_P (olddecl)
2975 && DECL_IN_SYSTEM_HEADER (olddecl)
2976 && !DECL_CLASS_SCOPE_P (olddecl))
2977 && (DECL_EXTERN_C_P (newdecl)
2978 && DECL_IN_SYSTEM_HEADER (newdecl)
2979 && !DECL_CLASS_SCOPE_P (newdecl)))
a28e3c7f
MS
2980 {
2981 types_match = self_promoting_args_p (p2);
2982 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
2983 }
8b27e9ef 2984#endif
8926095f 2985 else
91063b51 2986 types_match = compparms (p1, p2);
8926095f 2987 }
8d08fdba
MS
2988 else
2989 types_match = 0;
2990 }
6b4b3deb 2991 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
51c184be 2992 {
f84b4be9
JM
2993 if (!comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
2994 DECL_TEMPLATE_PARMS (olddecl)))
2995 return 0;
68642fb6 2996
2bb5d995
JM
2997 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl))
2998 != TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)))
2999 return 0;
3000
f84b4be9
JM
3001 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
3002 types_match = 1;
3003 else
3004 types_match = decls_match (DECL_TEMPLATE_RESULT (olddecl),
3005 DECL_TEMPLATE_RESULT (newdecl));
51c184be 3006 }
8d08fdba
MS
3007 else
3008 {
3009 if (TREE_TYPE (newdecl) == error_mark_node)
3010 types_match = TREE_TYPE (olddecl) == error_mark_node;
3011 else if (TREE_TYPE (olddecl) == NULL_TREE)
3012 types_match = TREE_TYPE (newdecl) == NULL_TREE;
a0a33927
MS
3013 else if (TREE_TYPE (newdecl) == NULL_TREE)
3014 types_match = 0;
8d08fdba 3015 else
01240200 3016 types_match = comptypes (TREE_TYPE (newdecl),
3bfdc719
MM
3017 TREE_TYPE (olddecl),
3018 COMPARE_REDECLARATION);
8d08fdba
MS
3019 }
3020
3021 return types_match;
3022}
3023
3024/* If NEWDECL is `static' and an `extern' was seen previously,
24f30ed4 3025 warn about it. OLDDECL is the previous declaration.
8d08fdba
MS
3026
3027 Note that this does not apply to the C++ case of declaring
3028 a variable `extern const' and then later `const'.
3029
8d08fdba
MS
3030 Don't complain about built-in functions, since they are beyond
3031 the user's control. */
3032
3033static void
3034warn_extern_redeclared_static (newdecl, olddecl)
3035 tree newdecl, olddecl;
3036{
83182544 3037 static const char *const explicit_extern_static_warning
8251199e 3038 = "`%D' was declared `extern' and later `static'";
83182544 3039 static const char *const implicit_extern_static_warning
8251199e
JM
3040 = "`%D' was declared implicitly `extern' and later `static'";
3041
24f30ed4
MM
3042 tree name;
3043
68642fb6 3044 if (TREE_CODE (newdecl) == TYPE_DECL
655dc6ee
JM
3045 || TREE_CODE (newdecl) == TEMPLATE_DECL
3046 || TREE_CODE (newdecl) == CONST_DECL)
8d08fdba 3047 return;
68642fb6 3048
963d5758
MM
3049 /* Don't get confused by static member functions; that's a different
3050 use of `static'. */
3051 if (TREE_CODE (newdecl) == FUNCTION_DECL
3052 && DECL_STATIC_FUNCTION_P (newdecl))
3053 return;
8d08fdba 3054
24f30ed4
MM
3055 /* If the old declaration was `static', or the new one isn't, then
3056 then everything is OK. */
3057 if (DECL_THIS_STATIC (olddecl) || !DECL_THIS_STATIC (newdecl))
3058 return;
3059
3060 /* It's OK to declare a builtin function as `static'. */
3061 if (TREE_CODE (olddecl) == FUNCTION_DECL
3062 && DECL_ARTIFICIAL (olddecl))
3063 return;
3064
8d08fdba 3065 name = DECL_ASSEMBLER_NAME (newdecl);
33bd39a2 3066 pedwarn (IDENTIFIER_IMPLICIT_DECL (name)
24f30ed4
MM
3067 ? implicit_extern_static_warning
3068 : explicit_extern_static_warning, newdecl);
3069 cp_pedwarn_at ("previous declaration of `%D'", olddecl);
8d08fdba
MS
3070}
3071
3072/* Handle when a new declaration NEWDECL has the same name as an old
3073 one OLDDECL in the same binding contour. Prints an error message
3074 if appropriate.
3075
3076 If safely possible, alter OLDDECL to look like NEWDECL, and return 1.
3077 Otherwise, return 0. */
3078
51c184be 3079int
8d08fdba 3080duplicate_decls (newdecl, olddecl)
824b9a4c 3081 tree newdecl, olddecl;
8d08fdba 3082{
8d08fdba
MS
3083 unsigned olddecl_uid = DECL_UID (olddecl);
3084 int olddecl_friend = 0, types_match = 0;
0b60dfe3 3085 int new_defines_function = 0;
5566b478
MS
3086
3087 if (newdecl == olddecl)
3088 return 1;
8d08fdba 3089
8926095f 3090 types_match = decls_match (newdecl, olddecl);
8d08fdba 3091
8d08fdba
MS
3092 /* If either the type of the new decl or the type of the old decl is an
3093 error_mark_node, then that implies that we have already issued an
3094 error (earlier) for some bogus type specification, and in that case,
3095 it is rather pointless to harass the user with yet more error message
0b60dfe3 3096 about the same declaration, so just pretend the types match here. */
bd6dd845
MS
3097 if (TREE_TYPE (newdecl) == error_mark_node
3098 || TREE_TYPE (olddecl) == error_mark_node)
8d08fdba 3099 types_match = 1;
68642fb6 3100
97055d5c
AO
3101 if (DECL_P (olddecl)
3102 && TREE_CODE (newdecl) == FUNCTION_DECL
3103 && TREE_CODE (olddecl) == FUNCTION_DECL
3104 && (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl)))
3105 {
3106 if (DECL_DECLARED_INLINE_P (newdecl)
3107 && DECL_UNINLINABLE (newdecl)
3108 && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
3109 /* Already warned elsewhere. */;
3110 else if (DECL_DECLARED_INLINE_P (olddecl)
3111 && DECL_UNINLINABLE (olddecl)
3112 && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
3113 /* Already warned. */;
3114 else if (DECL_DECLARED_INLINE_P (newdecl)
3115 && DECL_UNINLINABLE (olddecl)
3116 && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
3117 {
3118 warning_with_decl (newdecl,
3119 "function `%s' redeclared as inline");
3120 warning_with_decl (olddecl,
3121 "previous declaration of function `%s' with attribute noinline");
3122 }
3123 else if (DECL_DECLARED_INLINE_P (olddecl)
3124 && DECL_UNINLINABLE (newdecl)
3125 && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
3126 {
3127 warning_with_decl (newdecl,
3128 "function `%s' redeclared with attribute noinline");
3129 warning_with_decl (olddecl,
3130 "previous declaration of function `%s' was inline");
3131 }
3132 }
3133
0b60dfe3 3134 /* Check for redeclaration and other discrepancies. */
d22c8596 3135 if (TREE_CODE (olddecl) == FUNCTION_DECL
9f33663b
JM
3136 && DECL_ARTIFICIAL (olddecl))
3137 {
3138 if (TREE_CODE (newdecl) != FUNCTION_DECL)
3139 {
3140 /* If you declare a built-in or predefined function name as static,
3141 the old definition is overridden, but optionally warn this was a
3142 bad choice of name. */
3143 if (! TREE_PUBLIC (newdecl))
3144 {
3145 if (warn_shadow)
33bd39a2 3146 warning ("shadowing %s function `%#D'",
9f33663b
JM
3147 DECL_BUILT_IN (olddecl) ? "built-in" : "library",
3148 olddecl);
3149 /* Discard the old built-in function. */
3150 return 0;
3151 }
3152 /* If the built-in is not ansi, then programs can override
3153 it even globally without an error. */
3154 else if (! DECL_BUILT_IN (olddecl))
33bd39a2 3155 warning ("library function `%#D' redeclared as non-function `%#D'",
9f33663b
JM
3156 olddecl, newdecl);
3157 else
3158 {
33bd39a2
ZW
3159 error ("declaration of `%#D'", newdecl);
3160 error ("conflicts with built-in declaration `%#D'",
a4443a08 3161 olddecl);
9f33663b 3162 }
a4443a08
MS
3163 return 0;
3164 }
9f33663b 3165 else if (!types_match)
8d08fdba 3166 {
eb68cb58
MM
3167 if ((DECL_EXTERN_C_P (newdecl)
3168 && DECL_EXTERN_C_P (olddecl))
9f33663b
JM
3169 || compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
3170 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
a4443a08 3171 {
9f33663b
JM
3172 /* A near match; override the builtin. */
3173
3174 if (TREE_PUBLIC (newdecl))
a4443a08 3175 {
33bd39a2
ZW
3176 warning ("new declaration `%#D'", newdecl);
3177 warning ("ambiguates built-in declaration `%#D'",
9f33663b 3178 olddecl);
a4443a08 3179 }
9f33663b 3180 else if (warn_shadow)
33bd39a2 3181 warning ("shadowing %s function `%#D'",
9f33663b
JM
3182 DECL_BUILT_IN (olddecl) ? "built-in" : "library",
3183 olddecl);
a4443a08 3184 }
9f33663b
JM
3185 else
3186 /* Discard the old built-in function. */
3187 return 0;
8d08fdba 3188 }
68642fb6 3189
24f30ed4
MM
3190 if (DECL_THIS_STATIC (newdecl) && !DECL_THIS_STATIC (olddecl))
3191 {
3192 /* If a builtin function is redeclared as `static', merge
3193 the declarations, but make the original one static. */
3194 DECL_THIS_STATIC (olddecl) = 1;
3195 TREE_PUBLIC (olddecl) = 0;
9bfadf57 3196
421844e7
MM
3197 /* Make the old declaration consistent with the new one so
3198 that all remnants of the builtin-ness of this function
3199 will be banished. */
5d2ed28c 3200 SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
19e7881c 3201 SET_DECL_RTL (olddecl, DECL_RTL (newdecl));
92643fea 3202 COPY_DECL_ASSEMBLER_NAME (olddecl, newdecl);
9bfadf57
MM
3203 SET_IDENTIFIER_GLOBAL_VALUE (DECL_ASSEMBLER_NAME (newdecl),
3204 newdecl);
24f30ed4 3205 }
39211cd5
MS
3206 }
3207 else if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
3208 {
9ed182dc
JM
3209 if ((TREE_CODE (olddecl) == TYPE_DECL && DECL_ARTIFICIAL (olddecl)
3210 && TREE_CODE (newdecl) != TYPE_DECL
3211 && ! (TREE_CODE (newdecl) == TEMPLATE_DECL
3212 && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL))
3213 || (TREE_CODE (newdecl) == TYPE_DECL && DECL_ARTIFICIAL (newdecl)
3214 && TREE_CODE (olddecl) != TYPE_DECL
3215 && ! (TREE_CODE (olddecl) == TEMPLATE_DECL
3216 && (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl))
3217 == TYPE_DECL))))
3218 {
3219 /* We do nothing special here, because C++ does such nasty
3220 things with TYPE_DECLs. Instead, just let the TYPE_DECL
3221 get shadowed, and know that if we need to find a TYPE_DECL
3222 for a given name, we can look in the IDENTIFIER_TYPE_VALUE
3223 slot of the identifier. */
3224 return 0;
3225 }
3226
39211cd5 3227 if ((TREE_CODE (newdecl) == FUNCTION_DECL
5566b478 3228 && DECL_FUNCTION_TEMPLATE_P (olddecl))
39211cd5 3229 || (TREE_CODE (olddecl) == FUNCTION_DECL
5566b478 3230 && DECL_FUNCTION_TEMPLATE_P (newdecl)))
39211cd5 3231 return 0;
9ed182dc 3232
33bd39a2 3233 error ("`%#D' redeclared as different kind of symbol", newdecl);
39211cd5
MS
3234 if (TREE_CODE (olddecl) == TREE_LIST)
3235 olddecl = TREE_VALUE (olddecl);
8251199e 3236 cp_error_at ("previous declaration of `%#D'", olddecl);
39211cd5
MS
3237
3238 /* New decl is completely inconsistent with the old one =>
3239 tell caller to replace the old one. */
3240
3241 return 0;
8d08fdba 3242 }
8d08fdba
MS
3243 else if (!types_match)
3244 {
4f1c5b7d 3245 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl))
7bdbfa05
MM
3246 /* These are certainly not duplicate declarations; they're
3247 from different scopes. */
3248 return 0;
3249
8926095f 3250 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
f0e01782
MS
3251 {
3252 /* The name of a class template may not be declared to refer to
3253 any other template, class, function, object, namespace, value,
e92cc029 3254 or type in the same scope. */
5566b478
MS
3255 if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == TYPE_DECL
3256 || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
f0e01782 3257 {
33bd39a2 3258 error ("declaration of template `%#D'", newdecl);
8251199e 3259 cp_error_at ("conflicts with previous declaration `%#D'",
f0e01782
MS
3260 olddecl);
3261 }
ec255269
MS
3262 else if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == FUNCTION_DECL
3263 && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
3264 && compparms (TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl))),
91063b51 3265 TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl))))
75650646
MM
3266 && comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
3267 DECL_TEMPLATE_PARMS (olddecl)))
ec255269 3268 {
33bd39a2 3269 error ("new declaration `%#D'", newdecl);
8251199e 3270 cp_error_at ("ambiguates old declaration `%#D'", olddecl);
ec255269 3271 }
f0e01782
MS
3272 return 0;
3273 }
8926095f
MS
3274 if (TREE_CODE (newdecl) == FUNCTION_DECL)
3275 {
eb68cb58 3276 if (DECL_EXTERN_C_P (newdecl) && DECL_EXTERN_C_P (olddecl))
8926095f 3277 {
33bd39a2 3278 error ("declaration of C function `%#D' conflicts with",
8926095f 3279 newdecl);
8251199e 3280 cp_error_at ("previous declaration `%#D' here", olddecl);
8926095f 3281 }
00595019 3282 else if (compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
91063b51 3283 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
700f8a87 3284 {
33bd39a2 3285 error ("new declaration `%#D'", newdecl);
8251199e 3286 cp_error_at ("ambiguates old declaration `%#D'", olddecl);
700f8a87
MS
3287 }
3288 else
3289 return 0;
8926095f 3290 }
8d08fdba
MS
3291
3292 /* Already complained about this, so don't do so again. */
a4443a08 3293 else if (current_class_type == NULL_TREE
8d08fdba
MS
3294 || IDENTIFIER_ERROR_LOCUS (DECL_ASSEMBLER_NAME (newdecl)) != current_class_type)
3295 {
33bd39a2 3296 error ("conflicting types for `%#D'", newdecl);
8251199e 3297 cp_error_at ("previous declaration as `%#D'", olddecl);
8d08fdba
MS
3298 }
3299 }
68642fb6 3300 else if (TREE_CODE (newdecl) == FUNCTION_DECL
75650646
MM
3301 && ((DECL_TEMPLATE_SPECIALIZATION (olddecl)
3302 && (!DECL_TEMPLATE_INFO (newdecl)
68642fb6 3303 || (DECL_TI_TEMPLATE (newdecl)
75650646
MM
3304 != DECL_TI_TEMPLATE (olddecl))))
3305 || (DECL_TEMPLATE_SPECIALIZATION (newdecl)
3306 && (!DECL_TEMPLATE_INFO (olddecl)
68642fb6 3307 || (DECL_TI_TEMPLATE (olddecl)
75650646 3308 != DECL_TI_TEMPLATE (newdecl))))))
386b8a85
JM
3309 /* It's OK to have a template specialization and a non-template
3310 with the same type, or to have specializations of two
75650646
MM
3311 different templates with the same type. Note that if one is a
3312 specialization, and the other is an instantiation of the same
3313 template, that we do not exit at this point. That situation
3314 can occur if we instantiate a template class, and then
3315 specialize one of its methods. This situation is legal, but
3316 the declarations must be merged in the usual way. */
3317 return 0;
68642fb6
UD
3318 else if (TREE_CODE (newdecl) == FUNCTION_DECL
3319 && ((DECL_TEMPLATE_INSTANTIATION (olddecl)
75650646
MM
3320 && !DECL_USE_TEMPLATE (newdecl))
3321 || (DECL_TEMPLATE_INSTANTIATION (newdecl)
3322 && !DECL_USE_TEMPLATE (olddecl))))
3323 /* One of the declarations is a template instantiation, and the
3324 other is not a template at all. That's OK. */
386b8a85 3325 return 0;
85c6cbaf
ML
3326 else if (TREE_CODE (newdecl) == NAMESPACE_DECL
3327 && DECL_NAMESPACE_ALIAS (newdecl)
3328 && DECL_NAMESPACE_ALIAS (newdecl) == DECL_NAMESPACE_ALIAS (olddecl))
3329 /* Redeclaration of namespace alias, ignore it. */
3330 return 1;
8d08fdba
MS
3331 else
3332 {
d8e178a0 3333 const char *errmsg = redeclaration_error_message (newdecl, olddecl);
8251199e 3334 if (errmsg)
8d08fdba 3335 {
33bd39a2 3336 error (errmsg, newdecl);
8d08fdba
MS
3337 if (DECL_NAME (olddecl) != NULL_TREE)
3338 cp_error_at ((DECL_INITIAL (olddecl)
2c73f9f5 3339 && namespace_bindings_p ())
8251199e
JM
3340 ? "`%#D' previously defined here"
3341 : "`%#D' previously declared here", olddecl);
8d08fdba
MS
3342 }
3343 else if (TREE_CODE (olddecl) == FUNCTION_DECL
3344 && DECL_INITIAL (olddecl) != NULL_TREE
3345 && TYPE_ARG_TYPES (TREE_TYPE (olddecl)) == NULL_TREE
3346 && TYPE_ARG_TYPES (TREE_TYPE (newdecl)) != NULL_TREE)
3347 {
3348 /* Prototype decl follows defn w/o prototype. */
8251199e
JM
3349 cp_warning_at ("prototype for `%#D'", newdecl);
3350 cp_warning_at ("follows non-prototype definition here", olddecl);
8d08fdba
MS
3351 }
3352 else if (TREE_CODE (olddecl) == FUNCTION_DECL
3353 && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl))
8926095f
MS
3354 {
3355 /* extern "C" int foo ();
3356 int foo () { bar (); }
3357 is OK. */
46ccf50a 3358 if (current_lang_depth () == 0)
5d2ed28c 3359 SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
8926095f
MS
3360 else
3361 {
8251199e 3362 cp_error_at ("previous declaration of `%#D' with %L linkage",
8926095f 3363 olddecl, DECL_LANGUAGE (olddecl));
33bd39a2 3364 error ("conflicts with new declaration with %L linkage",
8926095f
MS
3365 DECL_LANGUAGE (newdecl));
3366 }
3367 }
e1cd6e56 3368
a6f02587 3369 if (DECL_LANG_SPECIFIC (olddecl) && DECL_USE_TEMPLATE (olddecl))
c32381b1
JM
3370 ;
3371 else if (TREE_CODE (olddecl) == FUNCTION_DECL)
e1cd6e56
MS
3372 {
3373 tree t1 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
3374 tree t2 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
3375 int i = 1;
3376
3377 if (TREE_CODE (TREE_TYPE (newdecl)) == METHOD_TYPE)
3378 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2);
68642fb6 3379
e1cd6e56
MS
3380 for (; t1 && t1 != void_list_node;
3381 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2), i++)
3382 if (TREE_PURPOSE (t1) && TREE_PURPOSE (t2))
3383 {
2507f3b5
RK
3384 if (1 == simple_cst_equal (TREE_PURPOSE (t1),
3385 TREE_PURPOSE (t2)))
e1cd6e56
MS
3386 {
3387 if (pedantic)
3388 {
33bd39a2 3389 pedwarn ("default argument given for parameter %d of `%#D'",
e1cd6e56 3390 i, newdecl);
8251199e 3391 cp_pedwarn_at ("after previous specification in `%#D'",
e1cd6e56
MS
3392 olddecl);
3393 }
3394 }
3395 else
3396 {
33bd39a2 3397 error ("default argument given for parameter %d of `%#D'",
e1cd6e56 3398 i, newdecl);
8251199e 3399 cp_error_at ("after previous specification in `%#D'",
e1cd6e56
MS
3400 olddecl);
3401 }
3402 }
a5894242 3403
79065db2
MM
3404 if (DECL_DECLARED_INLINE_P (newdecl)
3405 && ! DECL_DECLARED_INLINE_P (olddecl)
7fcdf4c2 3406 && TREE_ADDRESSABLE (olddecl) && warn_inline)
dff6b454 3407 {
33bd39a2 3408 warning ("`%#D' was used before it was declared inline",
7fcdf4c2 3409 newdecl);
8251199e 3410 cp_warning_at ("previous non-inline declaration here",
7fcdf4c2 3411 olddecl);
dff6b454 3412 }
e1cd6e56 3413 }
8d08fdba
MS
3414 }
3415
3416 /* If new decl is `static' and an `extern' was seen previously,
3417 warn about it. */
3418 warn_extern_redeclared_static (newdecl, olddecl);
3419
e92cc029 3420 /* We have committed to returning 1 at this point. */
8d08fdba
MS
3421 if (TREE_CODE (newdecl) == FUNCTION_DECL)
3422 {
3423 /* Now that functions must hold information normally held
3424 by field decls, there is extra work to do so that
3425 declaration information does not get destroyed during
3426 definition. */
3427 if (DECL_VINDEX (olddecl))
3428 DECL_VINDEX (newdecl) = DECL_VINDEX (olddecl);
4f1c5b7d
MM
3429 if (DECL_VIRTUAL_CONTEXT (olddecl))
3430 DECL_VIRTUAL_CONTEXT (newdecl) = DECL_VIRTUAL_CONTEXT (olddecl);
8d08fdba
MS
3431 if (DECL_CONTEXT (olddecl))
3432 DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
0e5921e8 3433 if (DECL_PENDING_INLINE_INFO (newdecl) == 0)
8d08fdba 3434 DECL_PENDING_INLINE_INFO (newdecl) = DECL_PENDING_INLINE_INFO (olddecl);
e1cd6e56
MS
3435 DECL_STATIC_CONSTRUCTOR (newdecl) |= DECL_STATIC_CONSTRUCTOR (olddecl);
3436 DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
fee7654e 3437 DECL_PURE_VIRTUAL_P (newdecl) |= DECL_PURE_VIRTUAL_P (olddecl);
864b83b9 3438 DECL_VIRTUAL_P (newdecl) |= DECL_VIRTUAL_P (olddecl);
4a67c9e9 3439 DECL_NEEDS_FINAL_OVERRIDER_P (newdecl) |= DECL_NEEDS_FINAL_OVERRIDER_P (olddecl);
963d5758 3440 DECL_THIS_STATIC (newdecl) |= DECL_THIS_STATIC (olddecl);
e0fff4b3
JM
3441 if (DECL_OVERLOADED_OPERATOR_P (olddecl) != ERROR_MARK)
3442 SET_OVERLOADED_OPERATOR_CODE
3443 (newdecl, DECL_OVERLOADED_OPERATOR_P (olddecl));
0b60dfe3 3444 new_defines_function = DECL_INITIAL (newdecl) != NULL_TREE;
68642fb6 3445
0b60dfe3
BK
3446 /* Optionally warn about more than one declaration for the same
3447 name, but don't warn about a function declaration followed by a
3448 definition. */
3449 if (warn_redundant_decls && ! DECL_ARTIFICIAL (olddecl)
3450 && !(new_defines_function && DECL_INITIAL (olddecl) == NULL_TREE)
3451 /* Don't warn about extern decl followed by definition. */
3452 && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl))
3453 /* Don't warn about friends, let add_friend take care of it. */
3581fae0 3454 && ! (DECL_FRIEND_P (newdecl) || DECL_FRIEND_P (olddecl)))
0b60dfe3 3455 {
33bd39a2 3456 warning ("redundant redeclaration of `%D' in same scope", newdecl);
8251199e 3457 cp_warning_at ("previous declaration of `%D'", olddecl);
0b60dfe3 3458 }
8d08fdba
MS
3459 }
3460
3461 /* Deal with C++: must preserve virtual function table size. */
3462 if (TREE_CODE (olddecl) == TYPE_DECL)
3463 {
3464 register tree newtype = TREE_TYPE (newdecl);
3465 register tree oldtype = TREE_TYPE (olddecl);
3466
3467 if (newtype != error_mark_node && oldtype != error_mark_node
3468 && TYPE_LANG_SPECIFIC (newtype) && TYPE_LANG_SPECIFIC (oldtype))
3469 {
3470 CLASSTYPE_VSIZE (newtype) = CLASSTYPE_VSIZE (oldtype);
3471 CLASSTYPE_FRIEND_CLASSES (newtype)
3472 = CLASSTYPE_FRIEND_CLASSES (oldtype);
3473 }
970d6386
MM
3474
3475 DECL_ORIGINAL_TYPE (newdecl) = DECL_ORIGINAL_TYPE (olddecl);
8d08fdba
MS
3476 }
3477
8d08fdba
MS
3478 /* Copy all the DECL_... slots specified in the new decl
3479 except for any that we copy here from the old type. */
91d231cb 3480 DECL_ATTRIBUTES (newdecl)
f6897b10 3481 = (*targetm.merge_decl_attributes) (olddecl, newdecl);
8d08fdba 3482
5566b478
MS
3483 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
3484 {
4d85e00e 3485 TREE_TYPE (olddecl) = TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl));
68642fb6 3486 DECL_TEMPLATE_SPECIALIZATIONS (olddecl)
4d85e00e
MM
3487 = chainon (DECL_TEMPLATE_SPECIALIZATIONS (olddecl),
3488 DECL_TEMPLATE_SPECIALIZATIONS (newdecl));
68642fb6 3489
daa8df65
MM
3490 /* If the new declaration is a definition, update the file and
3491 line information on the declaration. */
06d5e633
NS
3492 if (DECL_INITIAL (DECL_TEMPLATE_RESULT (olddecl)) == NULL_TREE
3493 && DECL_INITIAL (DECL_TEMPLATE_RESULT (newdecl)) != NULL_TREE)
daa8df65
MM
3494 {
3495 DECL_SOURCE_LINE (olddecl)
06d5e633 3496 = DECL_SOURCE_LINE (DECL_TEMPLATE_RESULT (olddecl))
daa8df65
MM
3497 = DECL_SOURCE_LINE (newdecl);
3498 DECL_SOURCE_FILE (olddecl)
06d5e633 3499 = DECL_SOURCE_FILE (DECL_TEMPLATE_RESULT (olddecl))
daa8df65
MM
3500 = DECL_SOURCE_FILE (newdecl);
3501 }
3502
5566b478
MS
3503 return 1;
3504 }
68642fb6 3505
8d08fdba
MS
3506 if (types_match)
3507 {
3508 /* Automatically handles default parameters. */
3509 tree oldtype = TREE_TYPE (olddecl);
e1cd6e56 3510 tree newtype;
8d08fdba 3511
e1cd6e56
MS
3512 /* Merge the data types specified in the two decls. */
3513 newtype = common_type (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
3514
9076e292
JM
3515 /* If common_type produces a non-typedef type, just use the old type. */
3516 if (TREE_CODE (newdecl) == TYPE_DECL
3517 && newtype == DECL_ORIGINAL_TYPE (newdecl))
3518 newtype = oldtype;
3519
8d08fdba
MS
3520 if (TREE_CODE (newdecl) == VAR_DECL)
3521 DECL_THIS_EXTERN (newdecl) |= DECL_THIS_EXTERN (olddecl);
3522 /* Do this after calling `common_type' so that default
3523 parameters don't confuse us. */
3524 else if (TREE_CODE (newdecl) == FUNCTION_DECL
3525 && (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl))
3526 != TYPE_RAISES_EXCEPTIONS (TREE_TYPE (olddecl))))
3527 {
f30432d7 3528 TREE_TYPE (newdecl) = build_exception_variant (newtype,
8d08fdba 3529 TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl)));
f30432d7 3530 TREE_TYPE (olddecl) = build_exception_variant (newtype,
8d08fdba
MS
3531 TYPE_RAISES_EXCEPTIONS (oldtype));
3532
9a224b4a
JM
3533 if ((pedantic || ! DECL_IN_SYSTEM_HEADER (olddecl))
3534 && DECL_SOURCE_LINE (olddecl) != 0
da20811c 3535 && flag_exceptions
4cc1d462
NS
3536 && !comp_except_specs (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl)),
3537 TYPE_RAISES_EXCEPTIONS (TREE_TYPE (olddecl)), 1))
8d08fdba 3538 {
33bd39a2 3539 error ("declaration of `%F' throws different exceptions",
a28e3c7f 3540 newdecl);
a09ba2e0 3541 cp_error_at ("than previous declaration `%F'", olddecl);
8d08fdba
MS
3542 }
3543 }
3544 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
3545
3546 /* Lay the type out, unless already done. */
407f03b8 3547 if (! same_type_p (newtype, oldtype)
5566b478 3548 && TREE_TYPE (newdecl) != error_mark_node
5156628f 3549 && !(processing_template_decl && uses_template_parms (newdecl)))
b7484fbe
MS
3550 layout_type (TREE_TYPE (newdecl));
3551
5566b478
MS
3552 if ((TREE_CODE (newdecl) == VAR_DECL
3553 || TREE_CODE (newdecl) == PARM_DECL
3554 || TREE_CODE (newdecl) == RESULT_DECL
3555 || TREE_CODE (newdecl) == FIELD_DECL
3556 || TREE_CODE (newdecl) == TYPE_DECL)
5156628f 3557 && !(processing_template_decl && uses_template_parms (newdecl)))
b7484fbe 3558 layout_decl (newdecl, 0);
8d08fdba
MS
3559
3560 /* Merge the type qualifiers. */
3561 if (TREE_READONLY (newdecl))
3562 TREE_READONLY (olddecl) = 1;
3563 if (TREE_THIS_VOLATILE (newdecl))
3564 TREE_THIS_VOLATILE (olddecl) = 1;
3565
3566 /* Merge the initialization information. */
8926095f
MS
3567 if (DECL_INITIAL (newdecl) == NULL_TREE
3568 && DECL_INITIAL (olddecl) != NULL_TREE)
3569 {
3570 DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
3571 DECL_SOURCE_FILE (newdecl) = DECL_SOURCE_FILE (olddecl);
3572 DECL_SOURCE_LINE (newdecl) = DECL_SOURCE_LINE (olddecl);
b0d06515
MM
3573 if (CAN_HAVE_FULL_LANG_DECL_P (newdecl)
3574 && DECL_LANG_SPECIFIC (newdecl)
4d85e00e
MM
3575 && DECL_LANG_SPECIFIC (olddecl))
3576 DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
8926095f 3577 }
39211cd5
MS
3578
3579 /* Merge the section attribute.
3580 We want to issue an error if the sections conflict but that must be
3581 done later in decl_attributes since we are called before attributes
3582 are assigned. */
3583 if (DECL_SECTION_NAME (newdecl) == NULL_TREE)
3584 DECL_SECTION_NAME (newdecl) = DECL_SECTION_NAME (olddecl);
3585
5d73aa63 3586 /* Keep the old rtl since we can safely use it. */
19e7881c 3587 COPY_DECL_RTL (olddecl, newdecl);
a157febd
GK
3588
3589 if (TREE_CODE (newdecl) == FUNCTION_DECL)
3590 {
3591 DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (newdecl)
3592 |= DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (olddecl);
a157febd
GK
3593 DECL_NO_LIMIT_STACK (newdecl)
3594 |= DECL_NO_LIMIT_STACK (olddecl);
3595 }
8d08fdba
MS
3596 }
3597 /* If cannot merge, then use the new type and qualifiers,
3598 and don't preserve the old rtl. */
3599 else
3600 {
3601 /* Clean out any memory we had of the old declaration. */
3602 tree oldstatic = value_member (olddecl, static_aggregates);
3603 if (oldstatic)
3604 TREE_VALUE (oldstatic) = error_mark_node;
3605
3606 TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
3607 TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
3608 TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
3609 TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
3610 }
3611
3612 /* Merge the storage class information. */
a9aedbc2 3613 DECL_WEAK (newdecl) |= DECL_WEAK (olddecl);
e92cc029 3614 DECL_ONE_ONLY (newdecl) |= DECL_ONE_ONLY (olddecl);
794d4a61 3615 DECL_DEFER_OUTPUT (newdecl) |= DECL_DEFER_OUTPUT (olddecl);
a9aedbc2
MS
3616 TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
3617 TREE_STATIC (olddecl) = TREE_STATIC (newdecl) |= TREE_STATIC (olddecl);
3618 if (! DECL_EXTERNAL (olddecl))
3619 DECL_EXTERNAL (newdecl) = 0;
68642fb6 3620
0b60dfe3 3621 if (DECL_LANG_SPECIFIC (newdecl) && DECL_LANG_SPECIFIC (olddecl))
8d08fdba 3622 {
a9aedbc2
MS
3623 DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl);
3624 DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl);
77be6f82 3625 DECL_COMDAT (newdecl) |= DECL_COMDAT (olddecl);
68642fb6 3626 DECL_TEMPLATE_INSTANTIATED (newdecl)
2b0a63a3 3627 |= DECL_TEMPLATE_INSTANTIATED (olddecl);
0b60dfe3
BK
3628 /* Don't really know how much of the language-specific
3629 values we should copy from old to new. */
3630 DECL_IN_AGGR_P (newdecl) = DECL_IN_AGGR_P (olddecl);
3631 DECL_ACCESS (newdecl) = DECL_ACCESS (olddecl);
3632 DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl);
fbf1c34b 3633 DECL_TEMPLATE_INFO (newdecl) = DECL_TEMPLATE_INFO (olddecl);
3febd123
NS
3634 DECL_INITIALIZED_IN_CLASS_P (newdecl)
3635 |= DECL_INITIALIZED_IN_CLASS_P (olddecl);
0b60dfe3 3636 olddecl_friend = DECL_FRIEND_P (olddecl);
6a629cac
MM
3637
3638 /* Only functions have DECL_BEFRIENDING_CLASSES. */
3639 if (TREE_CODE (newdecl) == FUNCTION_DECL
3640 || DECL_FUNCTION_TEMPLATE_P (newdecl))
3641 DECL_BEFRIENDING_CLASSES (newdecl)
3642 = chainon (DECL_BEFRIENDING_CLASSES (newdecl),
3643 DECL_BEFRIENDING_CLASSES (olddecl));
8d08fdba
MS
3644 }
3645
8d08fdba
MS
3646 if (TREE_CODE (newdecl) == FUNCTION_DECL)
3647 {
68642fb6
UD
3648 if (DECL_TEMPLATE_INSTANTIATION (olddecl)
3649 && !DECL_TEMPLATE_INSTANTIATION (newdecl))
75650646
MM
3650 {
3651 /* If newdecl is not a specialization, then it is not a
3652 template-related function at all. And that means that we
3653 shoud have exited above, returning 0. */
3654 my_friendly_assert (DECL_TEMPLATE_SPECIALIZATION (newdecl),
3655 0);
3656
68642fb6 3657 if (TREE_USED (olddecl))
75650646 3658 /* From [temp.expl.spec]:
68642fb6 3659
75650646
MM
3660 If a template, a member template or the member of a class
3661 template is explicitly specialized then that
3662 specialization shall be declared before the first use of
3663 that specialization that would cause an implicit
3664 instantiation to take place, in every translation unit in
3665 which such a use occurs. */
33bd39a2 3666 error ("explicit specialization of %D after first use",
75650646
MM
3667 olddecl);
3668
3669 SET_DECL_TEMPLATE_SPECIALIZATION (olddecl);
3670 }
79065db2 3671 DECL_DECLARED_INLINE_P (newdecl) |= DECL_DECLARED_INLINE_P (olddecl);
faae18ab
MS
3672
3673 /* If either decl says `inline', this fn is inline, unless its
3674 definition was passed already. */
3675 if (DECL_INLINE (newdecl) && DECL_INITIAL (olddecl) == NULL_TREE)
3676 DECL_INLINE (olddecl) = 1;
3677 DECL_INLINE (newdecl) = DECL_INLINE (olddecl);
3678
97055d5c
AO
3679 DECL_UNINLINABLE (newdecl) = DECL_UNINLINABLE (olddecl)
3680 = (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl));
3681
5daf7c0a
JM
3682 /* Preserve abstractness on cloned [cd]tors. */
3683 DECL_ABSTRACT (newdecl) = DECL_ABSTRACT (olddecl);
3684
700f8a87
MS
3685 if (! types_match)
3686 {
5d2ed28c 3687 SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
92643fea 3688 COPY_DECL_ASSEMBLER_NAME (newdecl, olddecl);
19e7881c 3689 SET_DECL_RTL (olddecl, DECL_RTL (newdecl));
5566b478
MS
3690 }
3691 if (! types_match || new_defines_function)
3692 {
6f1b4c42
JM
3693 /* These need to be copied so that the names are available.
3694 Note that if the types do match, we'll preserve inline
3695 info and other bits, but if not, we won't. */
700f8a87
MS
3696 DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
3697 DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
700f8a87 3698 }
8d08fdba
MS
3699 if (new_defines_function)
3700 /* If defining a function declared with other language
3701 linkage, use the previously declared language linkage. */
5d2ed28c 3702 SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
6f1b4c42 3703 else if (types_match)
8d08fdba
MS
3704 {
3705 /* If redeclaring a builtin function, and not a definition,
3706 it stays built in. */
3707 if (DECL_BUILT_IN (olddecl))
3708 {
26db82d8 3709 DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
39211cd5 3710 DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
8d08fdba
MS
3711 /* If we're keeping the built-in definition, keep the rtl,
3712 regardless of declaration matches. */
19e7881c 3713 SET_DECL_RTL (newdecl, DECL_RTL (olddecl));
8d08fdba
MS
3714 }
3715 else
b850de4f 3716 DECL_NUM_STMTS (newdecl) = DECL_NUM_STMTS (olddecl);
8d08fdba
MS
3717
3718 DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
8d08fdba
MS
3719 /* Don't clear out the arguments if we're redefining a function. */
3720 if (DECL_ARGUMENTS (olddecl))
3721 DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
3722 }
3723 }
0b1161fc
MM
3724 else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
3725 NAMESPACE_LEVEL (newdecl) = NAMESPACE_LEVEL (olddecl);
a9aedbc2 3726
8d08fdba
MS
3727 /* Now preserve various other info from the definition. */
3728 TREE_ADDRESSABLE (newdecl) = TREE_ADDRESSABLE (olddecl);
3729 TREE_ASM_WRITTEN (newdecl) = TREE_ASM_WRITTEN (olddecl);
3730 DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
92643fea 3731 COPY_DECL_ASSEMBLER_NAME (olddecl, newdecl);
8d08fdba 3732
8d08fdba
MS
3733 if (TREE_CODE (newdecl) == FUNCTION_DECL)
3734 {
3735 int function_size;
8d08fdba
MS
3736
3737 function_size = sizeof (struct tree_decl);
3738
730e1556
KG
3739 memcpy ((char *) olddecl + sizeof (struct tree_common),
3740 (char *) newdecl + sizeof (struct tree_common),
3741 function_size - sizeof (struct tree_common));
8d08fdba 3742
75650646
MM
3743 if (DECL_TEMPLATE_INSTANTIATION (newdecl))
3744 {
3745 /* If newdecl is a template instantiation, it is possible that
3746 the following sequence of events has occurred:
3747
3748 o A friend function was declared in a class template. The
68642fb6 3749 class template was instantiated.
75650646 3750
68642fb6
UD
3751 o The instantiation of the friend declaration was
3752 recorded on the instantiation list, and is newdecl.
75650646
MM
3753
3754 o Later, however, instantiate_class_template called pushdecl
3755 on the newdecl to perform name injection. But, pushdecl in
3756 turn called duplicate_decls when it discovered that another
3757 declaration of a global function with the same name already
68642fb6 3758 existed.
75650646
MM
3759
3760 o Here, in duplicate_decls, we decided to clobber newdecl.
3761
3762 If we're going to do that, we'd better make sure that
3763 olddecl, and not newdecl, is on the list of
3764 instantiations so that if we try to do the instantiation
3765 again we won't get the clobbered declaration. */
3766
68642fb6
UD
3767 tree tmpl = DECL_TI_TEMPLATE (newdecl);
3768 tree decls = DECL_TEMPLATE_SPECIALIZATIONS (tmpl);
75650646
MM
3769
3770 for (; decls; decls = TREE_CHAIN (decls))
3771 if (TREE_VALUE (decls) == newdecl)
3772 TREE_VALUE (decls) = olddecl;
3773 }
8d08fdba
MS
3774 }
3775 else
3776 {
730e1556
KG
3777 memcpy ((char *) olddecl + sizeof (struct tree_common),
3778 (char *) newdecl + sizeof (struct tree_common),
3779 sizeof (struct tree_decl) - sizeof (struct tree_common)
3780 + tree_code_length [(int)TREE_CODE (newdecl)] * sizeof (char *));
8d08fdba
MS
3781 }
3782
3783 DECL_UID (olddecl) = olddecl_uid;
3784 if (olddecl_friend)
3785 DECL_FRIEND_P (olddecl) = 1;
3786
d9525bec
BK
3787 /* NEWDECL contains the merged attribute lists.
3788 Update OLDDECL to be the same. */
91d231cb 3789 DECL_ATTRIBUTES (olddecl) = DECL_ATTRIBUTES (newdecl);
d9525bec 3790
8d08fdba
MS
3791 return 1;
3792}
3793
3794/* Record a decl-node X as belonging to the current lexical scope.
3795 Check for errors (such as an incompatible declaration for the same
3796 name already seen in the same scope).
3797
3798 Returns either X or an old decl for the same name.
3799 If an old decl is returned, it may have been smashed
3800 to agree with what X says. */
3801
3802tree
3803pushdecl (x)
3804 tree x;
3805{
3806 register tree t;
b35d4555
MM
3807 register tree name;
3808 int need_new_binding;
3809
3810 /* We shouldn't be calling pushdecl when we're generating RTL for a
3811 function that we already did semantic analysis on previously. */
01d939e8 3812 my_friendly_assert (!cfun || doing_semantic_analysis_p (),
b35d4555
MM
3813 19990913);
3814
b35d4555 3815 need_new_binding = 1;
8d08fdba 3816
50714e79
MM
3817 if (DECL_TEMPLATE_PARM_P (x))
3818 /* Template parameters have no context; they are not X::T even
3819 when declared within a class or namespace. */
3820 ;
3821 else
3822 {
3823 if (current_function_decl && x != current_function_decl
3824 /* A local declaration for a function doesn't constitute
3825 nesting. */
f39ee884
MM
3826 && !(TREE_CODE (x) == FUNCTION_DECL && !DECL_INITIAL (x))
3827 /* A local declaration for an `extern' variable is in the
94dfccd1 3828 scope of the current namespace, not the current
f39ee884
MM
3829 function. */
3830 && !(TREE_CODE (x) == VAR_DECL && DECL_EXTERNAL (x))
50714e79
MM
3831 && !DECL_CONTEXT (x))
3832 DECL_CONTEXT (x) = current_function_decl;
cd9f6678
MM
3833
3834 /* If this is the declaration for a namespace-scope function,
3835 but the declaration itself is in a local scope, mark the
3836 declaration. */
68642fb6 3837 if (TREE_CODE (x) == FUNCTION_DECL
cd9f6678
MM
3838 && DECL_NAMESPACE_SCOPE_P (x)
3839 && current_function_decl
3840 && x != current_function_decl)
3841 DECL_LOCAL_FUNCTION_P (x) = 1;
50714e79 3842 }
8d08fdba 3843
fe8fadc1 3844 name = DECL_NAME (x);
8d08fdba
MS
3845 if (name)
3846 {
94dfccd1
JM
3847 int different_binding_level = 0;
3848
386b8a85
JM
3849 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
3850 name = TREE_OPERAND (name, 0);
68642fb6 3851
94dfccd1
JM
3852 /* In case this decl was explicitly namespace-qualified, look it
3853 up in its namespace context. */
3854 if (TREE_CODE (x) == VAR_DECL && DECL_NAMESPACE_SCOPE_P (x)
3855 && namespace_bindings_p ())
2c73f9f5
ML
3856 t = namespace_binding (name, DECL_CONTEXT (x));
3857 else
3858 t = lookup_name_current_level (name);
fe8fadc1 3859
94dfccd1
JM
3860 /* [basic.link] If there is a visible declaration of an entity
3861 with linkage having the same name and type, ignoring entities
3862 declared outside the innermost enclosing namespace scope, the
3863 block scope declaration declares that same entity and
3864 receives the linkage of the previous declaration. */
3865 if (! t && current_function_decl && x != current_function_decl
3866 && (TREE_CODE (x) == FUNCTION_DECL || TREE_CODE (x) == VAR_DECL)
3867 && DECL_EXTERNAL (x))
3868 {
3869 /* Look in block scope. */
3870 t = IDENTIFIER_VALUE (name);
3871 /* Or in the innermost namespace. */
3872 if (! t)
3873 t = namespace_binding (name, DECL_CONTEXT (x));
fab09a24
JM
3874 /* Does it have linkage? Note that if this isn't a DECL, it's an
3875 OVERLOAD, which is OK. */
3876 if (t && DECL_P (t) && ! (TREE_STATIC (t) || DECL_EXTERNAL (t)))
94dfccd1
JM
3877 t = NULL_TREE;
3878 if (t)
3879 different_binding_level = 1;
3880 }
3881
fe8fadc1
MM
3882 /* If we are declaring a function, and the result of name-lookup
3883 was an OVERLOAD, look for an overloaded instance that is
3884 actually the same as the function we are declaring. (If
3885 there is one, we have to merge our declaration with the
3886 previous declaration.) */
655dc6ee 3887 if (t && TREE_CODE (t) == OVERLOAD)
fe8fadc1
MM
3888 {
3889 tree match;
3890
655dc6ee
JM
3891 if (TREE_CODE (x) == FUNCTION_DECL)
3892 for (match = t; match; match = OVL_NEXT (match))
3893 {
92643fea 3894 if (decls_match (OVL_CURRENT (match), x))
655dc6ee
JM
3895 break;
3896 }
3897 else
3898 /* Just choose one. */
3899 match = t;
fe8fadc1
MM
3900
3901 if (match)
3902 t = OVL_CURRENT (match);
3903 else
3904 t = NULL_TREE;
3905 }
3906
8d08fdba
MS
3907 if (t == error_mark_node)
3908 {
3909 /* error_mark_node is 0 for a while during initialization! */
3910 t = NULL_TREE;
8251199e 3911 cp_error_at ("`%#D' used prior to declaration", x);
8d08fdba 3912 }
51c184be 3913 else if (t != NULL_TREE)
8d08fdba 3914 {
94dfccd1
JM
3915 if (different_binding_level)
3916 {
3917 if (decls_match (x, t))
3918 /* The standard only says that the local extern
3919 inherits linkage from the previous decl; in
3920 particular, default args are not shared. It would
3921 be nice to propagate inlining info, though. FIXME. */
3922 TREE_PUBLIC (x) = TREE_PUBLIC (t);
3923 }
3924 else if (TREE_CODE (t) == PARM_DECL)
8d08fdba
MS
3925 {
3926 if (DECL_CONTEXT (t) == NULL_TREE)
400500c4
RK
3927 /* This is probaby caused by too many errors, but calling
3928 abort will say that if errors have occurred. */
3929 abort ();
be99da77 3930
e92cc029 3931 /* Check for duplicate params. */
be99da77
MS
3932 if (duplicate_decls (x, t))
3933 return t;
8d08fdba 3934 }
eb68cb58 3935 else if ((DECL_EXTERN_C_FUNCTION_P (x)
5566b478
MS
3936 || DECL_FUNCTION_TEMPLATE_P (x))
3937 && is_overloaded_fn (t))
2c73f9f5 3938 /* Don't do anything just yet. */;
e1cd6e56
MS
3939 else if (t == wchar_decl_node)
3940 {
3941 if (pedantic && ! DECL_IN_SYSTEM_HEADER (x))
33bd39a2 3942 pedwarn ("redeclaration of `wchar_t' as `%T'",
2b0cbc5d 3943 TREE_TYPE (x));
e1cd6e56
MS
3944
3945 /* Throw away the redeclaration. */
3946 return t;
3947 }
8926095f 3948 else if (TREE_CODE (t) != TREE_CODE (x))
8d08fdba 3949 {
9ed182dc 3950 if (duplicate_decls (x, t))
51c184be 3951 return t;
8d08fdba
MS
3952 }
3953 else if (duplicate_decls (x, t))
51c184be 3954 {
7177d104
MS
3955 if (TREE_CODE (t) == TYPE_DECL)
3956 SET_IDENTIFIER_TYPE_VALUE (name, TREE_TYPE (t));
f30432d7
MS
3957 else if (TREE_CODE (t) == FUNCTION_DECL)
3958 check_default_args (t);
7177d104 3959
51c184be
MS
3960 return t;
3961 }
35680744
MM
3962 else if (DECL_MAIN_P (x))
3963 {
3964 /* A redeclaration of main, but not a duplicate of the
68642fb6 3965 previous one.
35680744
MM
3966
3967 [basic.start.main]
3968
3969 This function shall not be overloaded. */
8251199e 3970 cp_error_at ("invalid redeclaration of `%D'", t);
33bd39a2 3971 error ("as `%D'", x);
35680744
MM
3972 /* We don't try to push this declaration since that
3973 causes a crash. */
3974 return x;
3975 }
8d08fdba 3976 }
8926095f 3977
f3400fe2
JM
3978 check_template_shadow (x);
3979
fcfcdfc8
JM
3980 /* If this is a function conjured up by the backend, massage it
3981 so it looks friendly. */
eb68cb58 3982 if (DECL_NON_THUNK_FUNCTION_P (x) && ! DECL_LANG_SPECIFIC (x))
fcfcdfc8
JM
3983 {
3984 retrofit_lang_decl (x);
5d2ed28c 3985 SET_DECL_LANGUAGE (x, lang_c);
fcfcdfc8
JM
3986 }
3987
eb68cb58 3988 if (DECL_NON_THUNK_FUNCTION_P (x) && ! DECL_FUNCTION_MEMBER_P (x))
8926095f 3989 {
7bdbfa05 3990 t = push_overloaded_decl (x, PUSH_LOCAL);
5fdaba89 3991 if (t != x)
8926095f 3992 return t;
f181d4ae
MM
3993 if (!namespace_bindings_p ())
3994 /* We do not need to create a binding for this name;
3995 push_overloaded_decl will have already done so if
3996 necessary. */
3997 need_new_binding = 0;
8926095f 3998 }
6eb3bb27 3999 else if (DECL_FUNCTION_TEMPLATE_P (x) && DECL_NAMESPACE_SCOPE_P (x))
cfe507be
MM
4000 {
4001 t = push_overloaded_decl (x, PUSH_GLOBAL);
4002 if (t == x)
4003 add_decl_to_level (x, NAMESPACE_LEVEL (CP_DECL_CONTEXT (t)));
4004 return t;
4005 }
8d08fdba 4006
a1774733
BK
4007 /* If declaring a type as a typedef, copy the type (unless we're
4008 at line 0), and install this TYPE_DECL as the new type's typedef
4009 name. See the extensive comment in ../c-decl.c (pushdecl). */
8d08fdba
MS
4010 if (TREE_CODE (x) == TYPE_DECL)
4011 {
4012 tree type = TREE_TYPE (x);
655dc6ee 4013 if (DECL_SOURCE_LINE (x) == 0)
a1774733
BK
4014 {
4015 if (TYPE_NAME (type) == 0)
4016 TYPE_NAME (type) = x;
4017 }
1c80fb65
MM
4018 else if (type != error_mark_node && TYPE_NAME (type) != x
4019 /* We don't want to copy the type when all we're
4020 doing is making a TYPE_DECL for the purposes of
4021 inlining. */
68642fb6 4022 && (!TYPE_NAME (type)
1c80fb65 4023 || TYPE_NAME (type) != DECL_ABSTRACT_ORIGIN (x)))
a1774733
BK
4024 {
4025 DECL_ORIGINAL_TYPE (x) = type;
4026 type = build_type_copy (type);
4027 TYPE_STUB_DECL (type) = TYPE_STUB_DECL (DECL_ORIGINAL_TYPE (x));
4028 TYPE_NAME (type) = x;
4029 TREE_TYPE (x) = type;
4030 }
8d08fdba 4031
8d08fdba
MS
4032 if (type != error_mark_node
4033 && TYPE_NAME (type)
4034 && TYPE_IDENTIFIER (type))
68642fb6 4035 set_identifier_type_value_with_scope (DECL_NAME (x), type,
f181d4ae
MM
4036 current_binding_level);
4037
8d08fdba
MS
4038 }
4039
4040 /* Multiple external decls of the same identifier ought to match.
4041
4042 We get warnings about inline functions where they are defined.
39211cd5 4043 We get warnings about other functions from push_overloaded_decl.
68642fb6 4044
8d08fdba 4045 Avoid duplicate warnings where they are used. */
39211cd5 4046 if (TREE_PUBLIC (x) && TREE_CODE (x) != FUNCTION_DECL)
8d08fdba
MS
4047 {
4048 tree decl;
4049
f49fad00
JM
4050 decl = IDENTIFIER_NAMESPACE_VALUE (name);
4051 if (decl && TREE_CODE (decl) == OVERLOAD)
4052 decl = OVL_FUNCTION (decl);
8d08fdba 4053
f49fad00
JM
4054 if (decl && decl != error_mark_node
4055 && (DECL_EXTERNAL (decl) || TREE_PUBLIC (decl))
8d08fdba
MS
4056 /* If different sort of thing, we already gave an error. */
4057 && TREE_CODE (decl) == TREE_CODE (x)
3bfdc719 4058 && !same_type_p (TREE_TYPE (x), TREE_TYPE (decl)))
8d08fdba 4059 {
33bd39a2 4060 pedwarn ("type mismatch with previous external decl", x);
8251199e 4061 cp_pedwarn_at ("previous external decl of `%#D'", decl);
8d08fdba
MS
4062 }
4063 }
4064
8d08fdba
MS
4065 /* This name is new in its binding level.
4066 Install the new declaration and return it. */
2c73f9f5 4067 if (namespace_bindings_p ())
8d08fdba
MS
4068 {
4069 /* Install a global value. */
4070
8d08fdba
MS
4071 /* If the first global decl has external linkage,
4072 warn if we later see static one. */
31928556 4073 if (IDENTIFIER_GLOBAL_VALUE (name) == NULL_TREE && TREE_PUBLIC (x))
8d08fdba 4074 TREE_PUBLIC (name) = 1;
5362b086 4075
92643fea
MM
4076 /* Bind the name for the entity. */
4077 if (!(TREE_CODE (x) == TYPE_DECL && DECL_ARTIFICIAL (x)
4078 && t != NULL_TREE)
4079 && (TREE_CODE (x) == TYPE_DECL
4080 || TREE_CODE (x) == VAR_DECL
4081 || TREE_CODE (x) == NAMESPACE_DECL
4082 || TREE_CODE (x) == CONST_DECL
4083 || TREE_CODE (x) == TEMPLATE_DECL))
4084 SET_IDENTIFIER_NAMESPACE_VALUE (name, x);
8d08fdba
MS
4085
4086 /* Don't forget if the function was used via an implicit decl. */
4087 if (IDENTIFIER_IMPLICIT_DECL (name)
4088 && TREE_USED (IDENTIFIER_IMPLICIT_DECL (name)))
4089 TREE_USED (x) = 1;
4090
4091 /* Don't forget if its address was taken in that way. */
4092 if (IDENTIFIER_IMPLICIT_DECL (name)
4093 && TREE_ADDRESSABLE (IDENTIFIER_IMPLICIT_DECL (name)))
4094 TREE_ADDRESSABLE (x) = 1;
4095
4096 /* Warn about mismatches against previous implicit decl. */
4097 if (IDENTIFIER_IMPLICIT_DECL (name) != NULL_TREE
4098 /* If this real decl matches the implicit, don't complain. */
4099 && ! (TREE_CODE (x) == FUNCTION_DECL
4100 && TREE_TYPE (TREE_TYPE (x)) == integer_type_node))
33bd39a2 4101 warning
8251199e 4102 ("`%D' was previously implicitly declared to return `int'", x);
8d08fdba
MS
4103
4104 /* If new decl is `static' and an `extern' was seen previously,
4105 warn about it. */
a0a33927
MS
4106 if (x != NULL_TREE && t != NULL_TREE && decls_match (x, t))
4107 warn_extern_redeclared_static (x, t);
8d08fdba
MS
4108 }
4109 else
4110 {
4111 /* Here to install a non-global value. */
f181d4ae 4112 tree oldlocal = IDENTIFIER_VALUE (name);
31928556 4113 tree oldglobal = IDENTIFIER_NAMESPACE_VALUE (name);
8d08fdba 4114
f181d4ae
MM
4115 if (need_new_binding)
4116 {
0034cf72 4117 push_local_binding (name, x, 0);
f181d4ae
MM
4118 /* Because push_local_binding will hook X on to the
4119 current_binding_level's name list, we don't want to
4120 do that again below. */
4121 need_new_binding = 0;
4122 }
8d08fdba
MS
4123
4124 /* If this is a TYPE_DECL, push it into the type value slot. */
4125 if (TREE_CODE (x) == TYPE_DECL)
68642fb6 4126 set_identifier_type_value_with_scope (name, TREE_TYPE (x),
f181d4ae 4127 current_binding_level);
8d08fdba 4128
a9aedbc2
MS
4129 /* Clear out any TYPE_DECL shadowed by a namespace so that
4130 we won't think this is a type. The C struct hack doesn't
4131 go through namespaces. */
4132 if (TREE_CODE (x) == NAMESPACE_DECL)
68642fb6 4133 set_identifier_type_value_with_scope (name, NULL_TREE,
f181d4ae 4134 current_binding_level);
a9aedbc2 4135
e905ac8a
MS
4136 if (oldlocal)
4137 {
4138 tree d = oldlocal;
17aec3eb 4139
74dc0d8c
MS
4140 while (oldlocal
4141 && TREE_CODE (oldlocal) == VAR_DECL
4142 && DECL_DEAD_FOR_LOCAL (oldlocal))
17aec3eb
RK
4143 oldlocal = DECL_SHADOWED_FOR_VAR (oldlocal);
4144
e905ac8a
MS
4145 if (oldlocal == NULL_TREE)
4146 oldlocal = IDENTIFIER_NAMESPACE_VALUE (DECL_NAME (d));
4147 }
4148
8d08fdba
MS
4149 /* If this is an extern function declaration, see if we
4150 have a global definition or declaration for the function. */
4151 if (oldlocal == NULL_TREE
faae18ab 4152 && DECL_EXTERNAL (x)
31928556 4153 && oldglobal != NULL_TREE
8d08fdba 4154 && TREE_CODE (x) == FUNCTION_DECL
31928556 4155 && TREE_CODE (oldglobal) == FUNCTION_DECL)
8d08fdba
MS
4156 {
4157 /* We have one. Their types must agree. */
31928556 4158 if (decls_match (x, oldglobal))
6060a796
MS
4159 /* OK */;
4160 else
8d08fdba 4161 {
33bd39a2 4162 warning ("extern declaration of `%#D' doesn't match", x);
8251199e 4163 cp_warning_at ("global declaration `%#D'", oldglobal);
8d08fdba 4164 }
8d08fdba
MS
4165 }
4166 /* If we have a local external declaration,
4167 and no file-scope declaration has yet been seen,
4168 then if we later have a file-scope decl it must not be static. */
4169 if (oldlocal == NULL_TREE
31928556 4170 && oldglobal == NULL_TREE
8d08fdba
MS
4171 && DECL_EXTERNAL (x)
4172 && TREE_PUBLIC (x))
f181d4ae 4173 TREE_PUBLIC (name) = 1;
8d08fdba 4174
8d08fdba 4175 /* Warn if shadowing an argument at the top level of the body. */
e905ac8a
MS
4176 if (oldlocal != NULL_TREE && !DECL_EXTERNAL (x)
4177 /* Inline decls shadow nothing. */
4178 && !DECL_FROM_INLINE (x)
8ac9ea61 4179 && TREE_CODE (oldlocal) == PARM_DECL)
8d08fdba 4180 {
8ac9ea61 4181 bool err = false;
8d08fdba 4182
8ac9ea61
NB
4183 /* Don't complain if it's from an enclosing function. */
4184 if (DECL_CONTEXT (oldlocal) == current_function_decl
4185 && TREE_CODE (x) != PARM_DECL)
4186 {
4187 /* Go to where the parms should be and see if we find
4188 them there. */
4189 struct binding_level *b = current_binding_level->level_chain;
4190
ade3dc07
JM
4191 /* Skip the ctor/dtor cleanup level. */
4192 b = b->level_chain;
8ac9ea61
NB
4193
4194 /* ARM $8.3 */
4195 if (b->parm_flag == 1)
4196 {
33bd39a2 4197 error ("declaration of `%#D' shadows a parameter",
8ac9ea61
NB
4198 name);
4199 err = true;
4200 }
4201 }
8d08fdba 4202
8ac9ea61
NB
4203 if (warn_shadow && !err)
4204 shadow_warning ("a parameter", name, oldlocal);
8d08fdba 4205 }
e905ac8a 4206
8d08fdba 4207 /* Maybe warn if shadowing something else. */
8ac9ea61 4208 else if (warn_shadow && !DECL_EXTERNAL (x)
e905ac8a
MS
4209 /* No shadow warnings for internally generated vars. */
4210 && ! DECL_ARTIFICIAL (x)
4211 /* No shadow warnings for vars made for inlining. */
4212 && ! DECL_FROM_INLINE (x))
8d08fdba 4213 {
8ac9ea61 4214 if (IDENTIFIER_CLASS_VALUE (name) != NULL_TREE
4ac14744 4215 && current_class_ptr
8d08fdba 4216 && !TREE_STATIC (name))
33bd39a2 4217 warning ("declaration of `%s' shadows a member of `this'",
8ac9ea61
NB
4218 IDENTIFIER_POINTER (name));
4219 else if (oldlocal != NULL_TREE
4220 && TREE_CODE (oldlocal) == VAR_DECL)
4221 shadow_warning ("a previous local", name, oldlocal);
4222 else if (oldglobal != NULL_TREE
4223 && TREE_CODE (oldglobal) == VAR_DECL)
30394414 4224 /* XXX shadow warnings in outer-more namespaces */
8ac9ea61 4225 shadow_warning ("a global declaration", name, oldglobal);
8d08fdba 4226 }
e1cd6e56 4227 }
8d08fdba 4228
e1cd6e56 4229 if (TREE_CODE (x) == FUNCTION_DECL)
f30432d7 4230 check_default_args (x);
8145f082
MS
4231
4232 /* Keep count of variables in this level with incomplete type. */
8145f082 4233 if (TREE_CODE (x) == VAR_DECL
28cbf42c 4234 && TREE_TYPE (x) != error_mark_node
d0f062fb 4235 && ((!COMPLETE_TYPE_P (TREE_TYPE (x))
f30432d7
MS
4236 && PROMOTES_TO_AGGR_TYPE (TREE_TYPE (x), ARRAY_TYPE))
4237 /* RTTI TD entries are created while defining the type_info. */
4238 || (TYPE_LANG_SPECIFIC (TREE_TYPE (x))
4239 && TYPE_BEING_DEFINED (TREE_TYPE (x)))))
70adf8a9
JM
4240 {
4241 if (namespace_bindings_p ())
4242 namespace_scope_incomplete
4243 = tree_cons (NULL_TREE, x, namespace_scope_incomplete);
4244 else
4245 current_binding_level->incomplete
4246 = tree_cons (NULL_TREE, x, current_binding_level->incomplete);
4247 }
8d08fdba
MS
4248 }
4249
f181d4ae 4250 if (need_new_binding)
68642fb6 4251 add_decl_to_level (x,
efee38a9
MM
4252 DECL_NAMESPACE_SCOPE_P (x)
4253 ? NAMESPACE_LEVEL (CP_DECL_CONTEXT (x))
4254 : current_binding_level);
8d08fdba
MS
4255
4256 return x;
4257}
4258
5566b478
MS
4259/* Same as pushdecl, but define X in binding-level LEVEL. We rely on the
4260 caller to set DECL_CONTEXT properly. */
8d08fdba
MS
4261
4262static tree
4263pushdecl_with_scope (x, level)
4264 tree x;
4265 struct binding_level *level;
4266{
8d019cef 4267 register struct binding_level *b;
5566b478 4268 tree function_decl = current_function_decl;
8d08fdba 4269
5566b478 4270 current_function_decl = NULL_TREE;
8d019cef
JM
4271 if (level->parm_flag == 2)
4272 {
4273 b = class_binding_level;
4274 class_binding_level = level;
4275 pushdecl_class_level (x);
4276 class_binding_level = b;
4277 }
4278 else
4279 {
4280 b = current_binding_level;
4281 current_binding_level = level;
4282 x = pushdecl (x);
4283 current_binding_level = b;
4284 }
5566b478 4285 current_function_decl = function_decl;
8d08fdba
MS
4286 return x;
4287}
4288
2c73f9f5 4289/* Like pushdecl, only it places X in the current namespace,
8d08fdba 4290 if appropriate. */
e92cc029 4291
8d08fdba 4292tree
2c73f9f5 4293pushdecl_namespace_level (x)
8d08fdba
MS
4294 tree x;
4295{
8f032717 4296 register struct binding_level *b = current_binding_level;
2c73f9f5
ML
4297 register tree t;
4298
4299 t = pushdecl_with_scope (x, NAMESPACE_LEVEL (current_namespace));
8d08fdba
MS
4300
4301 /* Now, the type_shadowed stack may screw us. Munge it so it does
4302 what we want. */
4303 if (TREE_CODE (x) == TYPE_DECL)
4304 {
4305 tree name = DECL_NAME (x);
4306 tree newval;
4307 tree *ptr = (tree *)0;
4308 for (; b != global_binding_level; b = b->level_chain)
4309 {
4310 tree shadowed = b->type_shadowed;
4311 for (; shadowed; shadowed = TREE_CHAIN (shadowed))
4312 if (TREE_PURPOSE (shadowed) == name)
4313 {
4314 ptr = &TREE_VALUE (shadowed);
4315 /* Can't break out of the loop here because sometimes
4316 a binding level will have duplicate bindings for
4317 PT names. It's gross, but I haven't time to fix it. */
4318 }
4319 }
4320 newval = TREE_TYPE (x);
4321 if (ptr == (tree *)0)
4322 {
4323 /* @@ This shouldn't be needed. My test case "zstring.cc" trips
4324 up here if this is changed to an assertion. --KR */
4325 SET_IDENTIFIER_TYPE_VALUE (name, newval);
4326 }
4327 else
4328 {
8d08fdba
MS
4329 *ptr = newval;
4330 }
4331 }
4332 return t;
4333}
4334
2c73f9f5
ML
4335/* Like pushdecl, only it places X in GLOBAL_BINDING_LEVEL,
4336 if appropriate. */
4337
4338tree
4339pushdecl_top_level (x)
4340 tree x;
4341{
b35d4555 4342 push_to_top_level ();
2c73f9f5 4343 x = pushdecl_namespace_level (x);
b35d4555 4344 pop_from_top_level ();
2c73f9f5
ML
4345 return x;
4346}
4347
8d08fdba 4348/* Make the declaration of X appear in CLASS scope. */
e92cc029 4349
61a127b3 4350void
8d08fdba
MS
4351pushdecl_class_level (x)
4352 tree x;
4353{
4354 /* Don't use DECL_ASSEMBLER_NAME here! Everything that looks in class
4355 scope looks for the pre-mangled name. */
8f032717
MM
4356 register tree name;
4357
4358 if (TREE_CODE (x) == OVERLOAD)
4359 x = OVL_CURRENT (x);
4360 name = DECL_NAME (x);
8d08fdba
MS
4361
4362 if (name)
4363 {
4364 push_class_level_binding (name, x);
4365 if (TREE_CODE (x) == TYPE_DECL)
f181d4ae 4366 set_identifier_type_value (name, TREE_TYPE (x));
8d08fdba 4367 }
6bdb8141 4368 else if (ANON_AGGR_TYPE_P (TREE_TYPE (x)))
8f032717
MM
4369 {
4370 tree f;
4371
4372 for (f = TYPE_FIELDS (TREE_TYPE (x));
4373 f;
4374 f = TREE_CHAIN (f))
4375 pushdecl_class_level (f);
4376 }
8d08fdba
MS
4377}
4378
9188c363
MM
4379/* Enter DECL into the symbol table, if that's appropriate. Returns
4380 DECL, or a modified version thereof. */
4381
4382tree
4383maybe_push_decl (decl)
4384 tree decl;
4385{
4386 tree type = TREE_TYPE (decl);
4387
4388 /* Add this decl to the current binding level, but not if it comes
4389 from another scope, e.g. a static member variable. TEM may equal
4390 DECL or it may be a previous decl of the same name. */
07c88314
MM
4391 if (decl == error_mark_node
4392 || (TREE_CODE (decl) != PARM_DECL
4393 && DECL_CONTEXT (decl) != NULL_TREE
4394 /* Definitions of namespace members outside their namespace are
4395 possible. */
4396 && TREE_CODE (DECL_CONTEXT (decl)) != NAMESPACE_DECL)
9188c363
MM
4397 || (TREE_CODE (decl) == TEMPLATE_DECL && !namespace_bindings_p ())
4398 || TREE_CODE (type) == UNKNOWN_TYPE
558475f0 4399 /* The declaration of a template specialization does not affect
9188c363
MM
4400 the functions available for overload resolution, so we do not
4401 call pushdecl. */
4402 || (TREE_CODE (decl) == FUNCTION_DECL
4403 && DECL_TEMPLATE_SPECIALIZATION (decl)))
4404 return decl;
4405 else
4406 return pushdecl (decl);
4407}
4408
8d08fdba
MS
4409/* Make the declaration(s) of X appear in CLASS scope
4410 under the name NAME. */
e92cc029 4411
8d08fdba
MS
4412void
4413push_class_level_binding (name, x)
4414 tree name;
4415 tree x;
4416{
8f032717 4417 tree binding;
68642fb6 4418 /* The class_binding_level will be NULL if x is a template
98c1c668
JM
4419 parameter name in a member template. */
4420 if (!class_binding_level)
4421 return;
4422
908c4e83
MM
4423 /* Make sure that this new member does not have the same name
4424 as a template parameter. */
4425 if (TYPE_BEING_DEFINED (current_class_type))
4426 check_template_shadow (x);
4427
f181d4ae
MM
4428 /* If this declaration shadows a declaration from an enclosing
4429 class, then we will need to restore IDENTIFIER_CLASS_VALUE when
4430 we leave this class. Record the shadowed declaration here. */
8f032717 4431 binding = IDENTIFIER_BINDING (name);
68642fb6 4432 if (binding
8f032717
MM
4433 && ((TREE_CODE (x) == OVERLOAD
4434 && BINDING_VALUE (binding)
4435 && is_overloaded_fn (BINDING_VALUE (binding)))
4436 || INHERITED_VALUE_BINDING_P (binding)))
4437 {
4438 tree shadow;
4439 tree old_decl;
4440
4441 /* If the old binding was from a base class, and was for a tag
4442 name, slide it over to make room for the new binding. The
4443 old binding is still visible if explicitly qualified with a
4444 class-key. */
4445 if (INHERITED_VALUE_BINDING_P (binding)
4446 && BINDING_VALUE (binding)
4447 && TREE_CODE (BINDING_VALUE (binding)) == TYPE_DECL
4448 && DECL_ARTIFICIAL (BINDING_VALUE (binding))
4449 && !(TREE_CODE (x) == TYPE_DECL && DECL_ARTIFICIAL (x)))
4450 {
4451 old_decl = BINDING_TYPE (binding);
4452 BINDING_TYPE (binding) = BINDING_VALUE (binding);
4453 BINDING_VALUE (binding) = NULL_TREE;
4454 INHERITED_VALUE_BINDING_P (binding) = 0;
4455 }
4456 else
4457 old_decl = BINDING_VALUE (binding);
4458
76191fdd
NS
4459 /* Find the previous binding of name on the class-shadowed
4460 list, and update it. */
8f032717
MM
4461 for (shadow = class_binding_level->class_shadowed;
4462 shadow;
4463 shadow = TREE_CHAIN (shadow))
4464 if (TREE_PURPOSE (shadow) == name
4465 && TREE_TYPE (shadow) == old_decl)
4466 {
4467 BINDING_VALUE (binding) = x;
4468 INHERITED_VALUE_BINDING_P (binding) = 0;
4469 TREE_TYPE (shadow) = x;
76191fdd 4470 IDENTIFIER_CLASS_VALUE (name) = x;
8f032717
MM
4471 return;
4472 }
4473 }
f181d4ae 4474
8f032717 4475 /* If we didn't replace an existing binding, put the binding on the
76191fdd 4476 stack of bindings for the identifier, and update the shadowed list. */
8f032717
MM
4477 if (push_class_binding (name, x))
4478 {
8f032717 4479 class_binding_level->class_shadowed
76191fdd 4480 = tree_cons (name, NULL,
8f032717 4481 class_binding_level->class_shadowed);
8f032717
MM
4482 /* Record the value we are binding NAME to so that we can know
4483 what to pop later. */
4484 TREE_TYPE (class_binding_level->class_shadowed) = x;
4485 }
8d08fdba
MS
4486}
4487
dd4fae80
ML
4488/* Insert another USING_DECL into the current binding level, returning
4489 this declaration. If this is a redeclaration, do nothing, and
4490 return NULL_TREE if this not in namespace scope (in namespace
4491 scope, a using decl might extend any previous bindings). */
e92cc029 4492
2c73f9f5
ML
4493tree
4494push_using_decl (scope, name)
4495 tree scope;
4496 tree name;
8d08fdba 4497{
2c73f9f5 4498 tree decl;
68642fb6 4499
2c73f9f5
ML
4500 my_friendly_assert (TREE_CODE (scope) == NAMESPACE_DECL, 383);
4501 my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 384);
4502 for (decl = current_binding_level->usings; decl; decl = TREE_CHAIN (decl))
4503 if (DECL_INITIAL (decl) == scope && DECL_NAME (decl) == name)
4504 break;
4505 if (decl)
dd4fae80 4506 return namespace_bindings_p () ? decl : NULL_TREE;
4ce3d537 4507 decl = build_lang_decl (USING_DECL, name, void_type_node);
2c73f9f5
ML
4508 DECL_INITIAL (decl) = scope;
4509 TREE_CHAIN (decl) = current_binding_level->usings;
4510 current_binding_level->usings = decl;
4511 return decl;
8d08fdba
MS
4512}
4513
ea9635c7
ML
4514/* Add namespace to using_directives. Return NULL_TREE if nothing was
4515 changed (i.e. there was already a directive), or the fresh
4516 TREE_LIST otherwise. */
4517
4518tree
9ed182dc 4519push_using_directive (used)
ea9635c7 4520 tree used;
ea9635c7
ML
4521{
4522 tree ud = current_binding_level->using_directives;
9ed182dc 4523 tree iter, ancestor;
68642fb6 4524
ea9635c7
ML
4525 /* Check if we already have this. */
4526 if (purpose_member (used, ud) != NULL_TREE)
4527 return NULL_TREE;
00dc6358
JM
4528
4529 /* Recursively add all namespaces used. */
4530 for (iter = DECL_NAMESPACE_USING (used); iter; iter = TREE_CHAIN (iter))
9ed182dc 4531 push_using_directive (TREE_PURPOSE (iter));
00dc6358 4532
9ed182dc 4533 ancestor = namespace_ancestor (current_decl_namespace (), used);
00dc6358 4534 ud = current_binding_level->using_directives;
e1b3e07d 4535 ud = tree_cons (used, ancestor, ud);
ea9635c7
ML
4536 current_binding_level->using_directives = ud;
4537 return ud;
4538}
4539
f181d4ae
MM
4540/* DECL is a FUNCTION_DECL for a non-member function, which may have
4541 other definitions already in place. We get around this by making
4542 the value of the identifier point to a list of all the things that
4543 want to be referenced by that name. It is then up to the users of
4544 that name to decide what to do with that list.
8d08fdba 4545
17aec3eb
RK
4546 DECL may also be a TEMPLATE_DECL, with a FUNCTION_DECL in its
4547 DECL_TEMPLATE_RESULT. It is dealt with the same way.
8d08fdba 4548
7bdbfa05
MM
4549 FLAGS is a bitwise-or of the following values:
4550 PUSH_LOCAL: Bind DECL in the current scope, rather than at
4551 namespace scope.
4552 PUSH_USING: DECL is being pushed as the result of a using
68642fb6 4553 declaration.
7bdbfa05 4554
8d08fdba
MS
4555 The value returned may be a previous declaration if we guessed wrong
4556 about what language DECL should belong to (C or C++). Otherwise,
4557 it's always DECL (and never something that's not a _DECL). */
e92cc029 4558
7bdbfa05
MM
4559tree
4560push_overloaded_decl (decl, flags)
8d08fdba 4561 tree decl;
7bdbfa05 4562 int flags;
8d08fdba 4563{
f181d4ae 4564 tree name = DECL_NAME (decl);
700f8a87 4565 tree old;
f181d4ae 4566 tree new_binding;
7bdbfa05 4567 int doing_global = (namespace_bindings_p () || !(flags & PUSH_LOCAL));
700f8a87
MS
4568
4569 if (doing_global)
9f33663b 4570 old = namespace_binding (name, DECL_CONTEXT (decl));
700f8a87 4571 else
f181d4ae 4572 old = lookup_name_current_level (name);
8d08fdba 4573
700f8a87 4574 if (old)
8d08fdba 4575 {
e1cd6e56 4576 if (TREE_CODE (old) == TYPE_DECL && DECL_ARTIFICIAL (old))
8926095f 4577 {
700f8a87 4578 tree t = TREE_TYPE (old);
cdf5b885
MS
4579 if (IS_AGGR_TYPE (t) && warn_shadow
4580 && (! DECL_IN_SYSTEM_HEADER (decl)
4581 || ! DECL_IN_SYSTEM_HEADER (old)))
33bd39a2 4582 warning ("`%#D' hides constructor for `%#T'", decl, t);
5b605f68 4583 old = NULL_TREE;
8926095f 4584 }
700f8a87 4585 else if (is_overloaded_fn (old))
8d08fdba 4586 {
8d08fdba 4587 tree tmp;
68642fb6 4588
2c73f9f5 4589 for (tmp = old; tmp; tmp = OVL_NEXT (tmp))
7bdbfa05
MM
4590 {
4591 tree fn = OVL_CURRENT (tmp);
4592
4593 if (TREE_CODE (tmp) == OVERLOAD && OVL_USED (tmp)
4594 && !(flags & PUSH_USING)
4595 && compparms (TYPE_ARG_TYPES (TREE_TYPE (fn)),
4596 TYPE_ARG_TYPES (TREE_TYPE (decl))))
33bd39a2 4597 error ("`%#D' conflicts with previous using declaration `%#D'",
7bdbfa05 4598 decl, fn);
68642fb6 4599
7bdbfa05
MM
4600 if (duplicate_decls (decl, fn))
4601 return fn;
4602 }
8d08fdba 4603 }
655dc6ee
JM
4604 else if (old == error_mark_node)
4605 /* Ignore the undefined symbol marker. */
4606 old = NULL_TREE;
e1cd6e56
MS
4607 else
4608 {
8251199e 4609 cp_error_at ("previous non-function declaration `%#D'", old);
33bd39a2 4610 error ("conflicts with function declaration `%#D'", decl);
a9aedbc2 4611 return decl;
e1cd6e56 4612 }
8d08fdba 4613 }
7177d104 4614
700f8a87 4615 if (old || TREE_CODE (decl) == TEMPLATE_DECL)
8d08fdba 4616 {
2c73f9f5 4617 if (old && TREE_CODE (old) != OVERLOAD)
f181d4ae
MM
4618 new_binding = ovl_cons (decl, ovl_cons (old, NULL_TREE));
4619 else
4620 new_binding = ovl_cons (decl, old);
347d73d7
ML
4621 if (flags & PUSH_USING)
4622 OVL_USED (new_binding) = 1;
8d08fdba
MS
4623 }
4624 else
f181d4ae
MM
4625 /* NAME is not ambiguous. */
4626 new_binding = decl;
700f8a87
MS
4627
4628 if (doing_global)
f181d4ae 4629 set_namespace_binding (name, current_namespace, new_binding);
700f8a87 4630 else
f181d4ae
MM
4631 {
4632 /* We only create an OVERLOAD if there was a previous binding at
0580c9aa
ML
4633 this level, or if decl is a template. In the former case, we
4634 need to remove the old binding and replace it with the new
4635 binding. We must also run through the NAMES on the binding
4636 level where the name was bound to update the chain. */
4637
4638 if (TREE_CODE (new_binding) == OVERLOAD && old)
f181d4ae
MM
4639 {
4640 tree *d;
68642fb6 4641
f181d4ae
MM
4642 for (d = &BINDING_LEVEL (IDENTIFIER_BINDING (name))->names;
4643 *d;
4644 d = &TREE_CHAIN (*d))
4645 if (*d == old
4646 || (TREE_CODE (*d) == TREE_LIST
4647 && TREE_VALUE (*d) == old))
4648 {
d8f8dca1
MM
4649 if (TREE_CODE (*d) == TREE_LIST)
4650 /* Just replace the old binding with the new. */
4651 TREE_VALUE (*d) = new_binding;
4652 else
4653 /* Build a TREE_LIST to wrap the OVERLOAD. */
68642fb6 4654 *d = tree_cons (NULL_TREE, new_binding,
ed5511d9 4655 TREE_CHAIN (*d));
d8f8dca1
MM
4656
4657 /* And update the CPLUS_BINDING node. */
4658 BINDING_VALUE (IDENTIFIER_BINDING (name))
4659 = new_binding;
4660 return decl;
f181d4ae
MM
4661 }
4662
d8f8dca1
MM
4663 /* We should always find a previous binding in this case. */
4664 my_friendly_abort (0);
f181d4ae
MM
4665 }
4666
4667 /* Install the new binding. */
0034cf72 4668 push_local_binding (name, new_binding, flags);
f181d4ae 4669 }
700f8a87 4670
8d08fdba
MS
4671 return decl;
4672}
4673\f
4674/* Generate an implicit declaration for identifier FUNCTIONID
4675 as a function of type int (). Print a warning if appropriate. */
4676
4677tree
4678implicitly_declare (functionid)
4679 tree functionid;
4680{
4681 register tree decl;
8d08fdba
MS
4682
4683 /* We used to reuse an old implicit decl here,
4684 but this loses with inline functions because it can clobber
4685 the saved decl chains. */
4686 decl = build_lang_decl (FUNCTION_DECL, functionid, default_function_type);
4687
4688 DECL_EXTERNAL (decl) = 1;
4689 TREE_PUBLIC (decl) = 1;
4690
cab1f180 4691 /* ISO standard says implicit declarations are in the innermost block.
d22c8596 4692 So we record the decl in the standard fashion. */
8d08fdba 4693 pushdecl (decl);
3e411c3f 4694 rest_of_decl_compilation (decl, NULL, 0, 0);
8d08fdba
MS
4695
4696 if (warn_implicit
4697 /* Only one warning per identifier. */
4698 && IDENTIFIER_IMPLICIT_DECL (functionid) == NULL_TREE)
4699 {
33bd39a2 4700 pedwarn ("implicit declaration of function `%#D'", decl);
8d08fdba
MS
4701 }
4702
4703 SET_IDENTIFIER_IMPLICIT_DECL (functionid, decl);
4704
8d08fdba
MS
4705 return decl;
4706}
4707
8251199e 4708/* Return zero if the declaration NEWDECL is valid
8d08fdba
MS
4709 when the declaration OLDDECL (assumed to be for the same name)
4710 has already been seen.
4711 Otherwise return an error message format string with a %s
4712 where the identifier should go. */
4713
d8e178a0 4714static const char *
8d08fdba
MS
4715redeclaration_error_message (newdecl, olddecl)
4716 tree newdecl, olddecl;
4717{
4718 if (TREE_CODE (newdecl) == TYPE_DECL)
4719 {
4720 /* Because C++ can put things into name space for free,
4721 constructs like "typedef struct foo { ... } foo"
4722 would look like an erroneous redeclaration. */
3bfdc719 4723 if (same_type_p (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
8251199e 4724 return 0;
8d08fdba 4725 else
8251199e 4726 return "redefinition of `%#D'";
8d08fdba
MS
4727 }
4728 else if (TREE_CODE (newdecl) == FUNCTION_DECL)
4729 {
4730 /* If this is a pure function, its olddecl will actually be
4731 the original initialization to `0' (which we force to call
4732 abort()). Don't complain about redefinition in this case. */
fee7654e 4733 if (DECL_LANG_SPECIFIC (olddecl) && DECL_PURE_VIRTUAL_P (olddecl))
8251199e 4734 return 0;
8d08fdba 4735
2c73f9f5
ML
4736 /* If both functions come from different namespaces, this is not
4737 a redeclaration - this is a conflict with a used function. */
6eb3bb27 4738 if (DECL_NAMESPACE_SCOPE_P (olddecl)
2c73f9f5 4739 && DECL_CONTEXT (olddecl) != DECL_CONTEXT (newdecl))
8251199e 4740 return "`%D' conflicts with used function";
2c73f9f5 4741
db5ae43f
MS
4742 /* We'll complain about linkage mismatches in
4743 warn_extern_redeclared_static. */
4744
2c73f9f5 4745 /* Defining the same name twice is no good. */
8d08fdba 4746 if (DECL_INITIAL (olddecl) != NULL_TREE
faae18ab 4747 && DECL_INITIAL (newdecl) != NULL_TREE)
8d08fdba
MS
4748 {
4749 if (DECL_NAME (olddecl) == NULL_TREE)
8251199e 4750 return "`%#D' not declared in class";
8d08fdba 4751 else
8251199e 4752 return "redefinition of `%#D'";
8d08fdba 4753 }
8251199e 4754 return 0;
8d08fdba 4755 }
51c184be
MS
4756 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
4757 {
ec255269 4758 if ((TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
5362b086 4759 && (DECL_TEMPLATE_RESULT (newdecl)
f4381d62 4760 != DECL_TEMPLATE_RESULT (olddecl))
ec255269
MS
4761 && DECL_INITIAL (DECL_TEMPLATE_RESULT (newdecl))
4762 && DECL_INITIAL (DECL_TEMPLATE_RESULT (olddecl)))
4763 || (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL
d0f062fb
NS
4764 && COMPLETE_TYPE_P (TREE_TYPE (newdecl))
4765 && COMPLETE_TYPE_P (TREE_TYPE (olddecl))))
8251199e
JM
4766 return "redefinition of `%#D'";
4767 return 0;
51c184be 4768 }
1f51a992 4769 else if (toplevel_bindings_p () || DECL_NAMESPACE_SCOPE_P (newdecl))
8d08fdba
MS
4770 {
4771 /* Objects declared at top level: */
4772 /* If at least one is a reference, it's ok. */
4773 if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl))
8251199e 4774 return 0;
8926095f 4775 /* Reject two definitions. */
8251199e 4776 return "redefinition of `%#D'";
8d08fdba
MS
4777 }
4778 else
4779 {
4780 /* Objects declared with block scope: */
4781 /* Reject two definitions, and reject a definition
4782 together with an external reference. */
4783 if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl)))
8251199e
JM
4784 return "redeclaration of `%#D'";
4785 return 0;
8d08fdba
MS
4786 }
4787}
4788\f
acef433b 4789/* Create a new label, named ID. */
8d08fdba 4790
acef433b
MM
4791static tree
4792make_label_decl (id, local_p)
8d08fdba 4793 tree id;
acef433b 4794 int local_p;
8d08fdba 4795{
acef433b 4796 tree decl;
8d08fdba 4797
acef433b 4798 decl = build_decl (LABEL_DECL, id, void_type_node);
b35d4555 4799 if (expanding_p)
acef433b
MM
4800 /* Make sure every label has an rtx. */
4801 label_rtx (decl);
4802
4803 DECL_CONTEXT (decl) = current_function_decl;
4804 DECL_MODE (decl) = VOIDmode;
4805 C_DECLARED_LABEL_FLAG (decl) = local_p;
8d08fdba 4806
acef433b
MM
4807 /* Say where one reference is to the label, for the sake of the
4808 error if it is not defined. */
4809 DECL_SOURCE_LINE (decl) = lineno;
4810 DECL_SOURCE_FILE (decl) = input_filename;
4811
4812 /* Record the fact that this identifier is bound to this label. */
4813 SET_IDENTIFIER_LABEL_VALUE (id, decl);
4814
6625cdb5
JM
4815 return decl;
4816}
4817
4818/* Record this label on the list of used labels so that we can check
4819 at the end of the function to see whether or not the label was
4820 actually defined, and so we can check when the label is defined whether
4821 this use is valid. */
4822
4823static void
4824use_label (decl)
4825 tree decl;
4826{
4827 if (named_label_uses == NULL
4828 || named_label_uses->names_in_scope != current_binding_level->names
4829 || named_label_uses->label_decl != decl)
4830 {
4831 struct named_label_use_list *new_ent;
4832 new_ent = ((struct named_label_use_list *)
4833 ggc_alloc (sizeof (struct named_label_use_list)));
e349ee73
MS
4834 new_ent->label_decl = decl;
4835 new_ent->names_in_scope = current_binding_level->names;
4836 new_ent->binding_level = current_binding_level;
4837 new_ent->lineno_o_goto = lineno;
4838 new_ent->filename_o_goto = input_filename;
4839 new_ent->next = named_label_uses;
4840 named_label_uses = new_ent;
8d08fdba 4841 }
acef433b 4842}
8d08fdba 4843
acef433b
MM
4844/* Look for a label named ID in the current function. If one cannot
4845 be found, create one. (We keep track of used, but undefined,
4846 labels, and complain about them at the end of a function.) */
8d08fdba 4847
68642fb6 4848tree
acef433b
MM
4849lookup_label (id)
4850 tree id;
4851{
4852 tree decl;
6625cdb5 4853 struct named_label_list *ent;
8d08fdba 4854
acef433b
MM
4855 /* You can't use labels at global scope. */
4856 if (current_function_decl == NULL_TREE)
4857 {
4858 error ("label `%s' referenced outside of any function",
4859 IDENTIFIER_POINTER (id));
4860 return NULL_TREE;
4861 }
68642fb6 4862
acef433b
MM
4863 /* See if we've already got this label. */
4864 decl = IDENTIFIER_LABEL_VALUE (id);
4865 if (decl != NULL_TREE && DECL_CONTEXT (decl) == current_function_decl)
4866 return decl;
8d08fdba 4867
acef433b
MM
4868 /* Record this label on the list of labels used in this function.
4869 We do this before calling make_label_decl so that we get the
4870 IDENTIFIER_LABEL_VALUE before the new label is declared. */
6625cdb5 4871 ent = ((struct named_label_list *)
f8a83ee3 4872 ggc_alloc_cleared (sizeof (struct named_label_list)));
6625cdb5
JM
4873 ent->old_value = IDENTIFIER_LABEL_VALUE (id);
4874 ent->next = named_labels;
4875 named_labels = ent;
4876
acef433b
MM
4877 /* We need a new label. */
4878 decl = make_label_decl (id, /*local_p=*/0);
6625cdb5 4879
acef433b 4880 /* Now fill in the information we didn't have before. */
6625cdb5 4881 ent->label_decl = decl;
8d08fdba
MS
4882
4883 return decl;
4884}
4885
acef433b 4886/* Declare a local label named ID. */
8d08fdba
MS
4887
4888tree
acef433b
MM
4889declare_local_label (id)
4890 tree id;
8d08fdba 4891{
acef433b 4892 tree decl;
8d08fdba 4893
acef433b
MM
4894 /* Add a new entry to the SHADOWED_LABELS list so that when we leave
4895 this scope we can restore the old value of
4896 IDENTIFIER_TYPE_VALUE. */
68642fb6 4897 current_binding_level->shadowed_labels
acef433b
MM
4898 = tree_cons (IDENTIFIER_LABEL_VALUE (id), NULL_TREE,
4899 current_binding_level->shadowed_labels);
4900 /* Look for the label. */
4901 decl = make_label_decl (id, /*local_p=*/1);
4902 /* Now fill in the information we didn't have before. */
4903 TREE_VALUE (current_binding_level->shadowed_labels) = decl;
68642fb6 4904
acef433b 4905 return decl;
8d08fdba
MS
4906}
4907
6625cdb5
JM
4908/* Returns nonzero if it is ill-formed to jump past the declaration of
4909 DECL. Returns 2 if it's also a real problem. */
4910
4911static int
4912decl_jump_unsafe (decl)
4913 tree decl;
4914{
4915 if (TREE_CODE (decl) != VAR_DECL || TREE_STATIC (decl))
4916 return 0;
4917
4918 if (DECL_INITIAL (decl) == NULL_TREE
4919 && pod_type_p (TREE_TYPE (decl)))
4920 return 0;
4921
4922 /* This is really only important if we're crossing an initialization.
4923 The POD stuff is just pedantry; why should it matter if the class
4924 contains a field of pointer to member type? */
4925 if (DECL_INITIAL (decl)
4926 || (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))))
4927 return 2;
4928 return 1;
4929}
4930
4931/* Check that a single previously seen jump to a newly defined label
4932 is OK. DECL is the LABEL_DECL or 0; LEVEL is the binding_level for
4933 the jump context; NAMES are the names in scope in LEVEL at the jump
4934 context; FILE and LINE are the source position of the jump or 0. */
4935
4936static void
4937check_previous_goto_1 (decl, level, names, file, line)
4938 tree decl;
4939 struct binding_level *level;
4940 tree names;
4941 const char *file;
4942 int line;
4943{
4944 int identified = 0;
4945 int saw_eh = 0;
4946 struct binding_level *b = current_binding_level;
4947 for (; b; b = b->level_chain)
4948 {
4949 tree new_decls = b->names;
4950 tree old_decls = (b == level ? names : NULL_TREE);
4951 for (; new_decls != old_decls;
4952 new_decls = TREE_CHAIN (new_decls))
4953 {
4954 int problem = decl_jump_unsafe (new_decls);
4955 if (! problem)
4956 continue;
4957
4958 if (! identified)
4959 {
4960 if (decl)
33bd39a2 4961 pedwarn ("jump to label `%D'", decl);
6625cdb5
JM
4962 else
4963 pedwarn ("jump to case label");
4964
4965 if (file)
4966 pedwarn_with_file_and_line (file, line, " from here");
4967 identified = 1;
4968 }
4969
826840d9 4970 if (problem > 1)
6625cdb5
JM
4971 cp_error_at (" crosses initialization of `%#D'",
4972 new_decls);
4973 else
4974 cp_pedwarn_at (" enters scope of non-POD `%#D'",
4975 new_decls);
4976 }
4977
4978 if (b == level)
4979 break;
826840d9 4980 if ((b->is_try_scope || b->is_catch_scope) && ! saw_eh)
6625cdb5
JM
4981 {
4982 if (! identified)
4983 {
4984 if (decl)
33bd39a2 4985 pedwarn ("jump to label `%D'", decl);
6625cdb5
JM
4986 else
4987 pedwarn ("jump to case label");
4988
4989 if (file)
4990 pedwarn_with_file_and_line (file, line, " from here");
4991 identified = 1;
4992 }
826840d9
RH
4993 if (b->is_try_scope)
4994 error (" enters try block");
4995 else
4996 error (" enters catch block");
6625cdb5
JM
4997 saw_eh = 1;
4998 }
4999 }
5000}
5001
5002static void
5003check_previous_goto (use)
5004 struct named_label_use_list *use;
5005{
5006 check_previous_goto_1 (use->label_decl, use->binding_level,
5007 use->names_in_scope, use->filename_o_goto,
5008 use->lineno_o_goto);
5009}
5010
5011static void
5012check_switch_goto (level)
5013 struct binding_level *level;
5014{
5015 check_previous_goto_1 (NULL_TREE, level, level->names, NULL, 0);
5016}
5017
5018/* Check that any previously seen jumps to a newly defined label DECL
5019 are OK. Called by define_label. */
5020
5021static void
5022check_previous_gotos (decl)
5023 tree decl;
5024{
5025 struct named_label_use_list **usep;
5026
5027 if (! TREE_USED (decl))
5028 return;
5029
5030 for (usep = &named_label_uses; *usep; )
5031 {
5032 struct named_label_use_list *use = *usep;
5033 if (use->label_decl == decl)
5034 {
5035 check_previous_goto (use);
5036 *usep = use->next;
5037 }
5038 else
5039 usep = &(use->next);
5040 }
5041}
5042
5043/* Check that a new jump to a label DECL is OK. Called by
5044 finish_goto_stmt. */
5045
5046void
5047check_goto (decl)
5048 tree decl;
5049{
5050 int identified = 0;
5051 tree bad;
5052 struct named_label_list *lab;
5053
e3cd9945
APB
5054 /* We can't know where a computed goto is jumping. So we assume
5055 that it's OK. */
5056 if (! DECL_P (decl))
5057 return;
5058
6625cdb5
JM
5059 /* If the label hasn't been defined yet, defer checking. */
5060 if (! DECL_INITIAL (decl))
5061 {
5062 use_label (decl);
5063 return;
5064 }
5065
5066 for (lab = named_labels; lab; lab = lab->next)
5067 if (decl == lab->label_decl)
5068 break;
5069
5070 /* If the label is not on named_labels it's a gcc local label, so
5071 it must be in an outer scope, so jumping to it is always OK. */
5072 if (lab == 0)
5073 return;
5074
826840d9
RH
5075 if ((lab->in_try_scope || lab->in_catch_scope || lab->bad_decls)
5076 && !identified)
6625cdb5
JM
5077 {
5078 cp_pedwarn_at ("jump to label `%D'", decl);
5079 pedwarn (" from here");
5080 identified = 1;
5081 }
5082
5083 for (bad = lab->bad_decls; bad; bad = TREE_CHAIN (bad))
5084 {
5085 tree b = TREE_VALUE (bad);
5086 int u = decl_jump_unsafe (b);
5087
5088 if (u > 1 && DECL_ARTIFICIAL (b))
5089 /* Can't skip init of __exception_info. */
5090 cp_error_at (" enters catch block", b);
5091 else if (u > 1)
5092 cp_error_at (" skips initialization of `%#D'", b);
5093 else
5094 cp_pedwarn_at (" enters scope of non-POD `%#D'", b);
5095 }
5096
826840d9 5097 if (lab->in_try_scope)
6625cdb5 5098 error (" enters try block");
826840d9
RH
5099 else if (lab->in_catch_scope)
5100 error (" enters catch block");
6625cdb5
JM
5101}
5102
8d08fdba
MS
5103/* Define a label, specifying the location in the source file.
5104 Return the LABEL_DECL node for the label, if the definition is valid.
5105 Otherwise return 0. */
5106
5107tree
5108define_label (filename, line, name)
3b304f5b 5109 const char *filename;
8d08fdba
MS
5110 int line;
5111 tree name;
5112{
f01b0acb 5113 tree decl = lookup_label (name);
6625cdb5 5114 struct named_label_list *ent;
3dc9aec6 5115 register struct binding_level *p;
6625cdb5
JM
5116
5117 for (ent = named_labels; ent; ent = ent->next)
5118 if (ent->label_decl == decl)
5119 break;
8d08fdba 5120
3dc9aec6 5121 /* After labels, make any new cleanups in the function go into their
8d08fdba 5122 own new (temporary) binding contour. */
3dc9aec6
WC
5123 for (p = current_binding_level; !(p->parm_flag); p = p->level_chain)
5124 p->more_cleanups_ok = 0;
8d08fdba 5125
e1cd6e56 5126 if (name == get_identifier ("wchar_t"))
33bd39a2 5127 pedwarn ("label named wchar_t");
e1cd6e56 5128
8d08fdba
MS
5129 if (DECL_INITIAL (decl) != NULL_TREE)
5130 {
33bd39a2 5131 error ("duplicate label `%D'", decl);
8d08fdba
MS
5132 return 0;
5133 }
5134 else
5135 {
8d08fdba
MS
5136 /* Mark label as having been defined. */
5137 DECL_INITIAL (decl) = error_mark_node;
5138 /* Say where in the source. */
5139 DECL_SOURCE_FILE (decl) = filename;
5140 DECL_SOURCE_LINE (decl) = line;
6625cdb5
JM
5141 if (ent)
5142 {
5143 ent->names_in_scope = current_binding_level->names;
5144 ent->binding_level = current_binding_level;
5145 }
5146 check_previous_gotos (decl);
8d08fdba
MS
5147 return decl;
5148 }
5149}
5150
a5894242
MS
5151struct cp_switch
5152{
5153 struct binding_level *level;
5154 struct cp_switch *next;
56cb9733
MM
5155 /* The SWITCH_STMT being built. */
5156 tree switch_stmt;
5157 /* A splay-tree mapping the low element of a case range to the high
5158 element, or NULL_TREE if there is no high element. Used to
5159 determine whether or not a new case label duplicates an old case
5160 label. We need a tree, rather than simply a hash table, because
5161 of the GNU case range extension. */
5162 splay_tree cases;
a5894242
MS
5163};
5164
56cb9733
MM
5165/* A stack of the currently active switch statements. The innermost
5166 switch statement is on the top of the stack. There is no need to
5167 mark the stack for garbage collection because it is only active
5168 during the processing of the body of a function, and we never
5169 collect at that point. */
5362b086 5170
a5894242
MS
5171static struct cp_switch *switch_stack;
5172
56cb9733
MM
5173/* Called right after a switch-statement condition is parsed.
5174 SWITCH_STMT is the switch statement being parsed. */
5175
a5894242 5176void
56cb9733
MM
5177push_switch (switch_stmt)
5178 tree switch_stmt;
a5894242
MS
5179{
5180 struct cp_switch *p
bedda2da 5181 = (struct cp_switch *) xmalloc (sizeof (struct cp_switch));
a5894242
MS
5182 p->level = current_binding_level;
5183 p->next = switch_stack;
56cb9733
MM
5184 p->switch_stmt = switch_stmt;
5185 p->cases = splay_tree_new (case_compare, NULL, NULL);
a5894242
MS
5186 switch_stack = p;
5187}
5188
5189void
5190pop_switch ()
5191{
bedda2da 5192 struct cp_switch *cs;
5362b086 5193
bedda2da 5194 cs = switch_stack;
56cb9733 5195 splay_tree_delete (cs->cases);
a5894242 5196 switch_stack = switch_stack->next;
bedda2da 5197 free (cs);
a5894242
MS
5198}
5199
b0a1da19
JM
5200/* Note that we've seen a definition of a case label, and complain if this
5201 is a bad place for one. */
e92cc029 5202
3e4d04a1 5203tree
56cb9733
MM
5204finish_case_label (low_value, high_value)
5205 tree low_value;
5206 tree high_value;
8d08fdba 5207{
3e4d04a1 5208 tree cond, r;
3dc9aec6 5209 register struct binding_level *p;
a5894242 5210
b0a1da19 5211 if (! switch_stack)
56cb9733
MM
5212 {
5213 if (high_value)
5214 error ("case label not within a switch statement");
5215 else if (low_value)
33bd39a2 5216 error ("case label `%E' not within a switch statement",
56cb9733
MM
5217 low_value);
5218 else
5219 error ("`default' label not within a switch statement");
3e4d04a1 5220 return NULL_TREE;
56cb9733
MM
5221 }
5222
56cb9733
MM
5223 if (processing_template_decl)
5224 {
8f17b5c5
MM
5225 tree label;
5226
56cb9733
MM
5227 /* For templates, just add the case label; we'll do semantic
5228 analysis at instantiation-time. */
8f17b5c5 5229 label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
3e4d04a1 5230 return add_stmt (build_case_label (low_value, high_value, label));
56cb9733
MM
5231 }
5232
5233 /* Find the condition on which this switch statement depends. */
5234 cond = SWITCH_COND (switch_stack->switch_stmt);
5235 if (cond && TREE_CODE (cond) == TREE_LIST)
5236 cond = TREE_VALUE (cond);
56cb9733 5237
3e4d04a1
RH
5238 r = c_add_case_label (switch_stack->cases, cond, low_value, high_value);
5239 if (r == error_mark_node)
5240 r = NULL_TREE;
8d08fdba 5241
6625cdb5 5242 check_switch_goto (switch_stack->level);
a5894242 5243
3dc9aec6 5244 /* After labels, make any new cleanups in the function go into their
8d08fdba 5245 own new (temporary) binding contour. */
3dc9aec6
WC
5246 for (p = current_binding_level; !(p->parm_flag); p = p->level_chain)
5247 p->more_cleanups_ok = 0;
3e4d04a1
RH
5248
5249 return r;
8d08fdba
MS
5250}
5251\f
5252/* Return the list of declarations of the current level.
5253 Note that this list is in reverse order unless/until
5254 you nreverse it; and when you do nreverse it, you must
5255 store the result back using `storedecls' or you will lose. */
5256
5257tree
5258getdecls ()
5259{
5260 return current_binding_level->names;
5261}
5262
5263/* Return the list of type-tags (for structs, etc) of the current level. */
5264
5265tree
5266gettags ()
5267{
5268 return current_binding_level->tags;
5269}
5270
5271/* Store the list of declarations of the current level.
5272 This is done for the parameter declarations of a function being defined,
5273 after they are modified in the light of any missing parameters. */
5274
5275static void
5276storedecls (decls)
5277 tree decls;
5278{
5279 current_binding_level->names = decls;
5280}
5281
5282/* Similarly, store the list of tags of the current level. */
5283
280f9385 5284void
8d08fdba
MS
5285storetags (tags)
5286 tree tags;
5287{
5288 current_binding_level->tags = tags;
5289}
5290\f
5291/* Given NAME, an IDENTIFIER_NODE,
5292 return the structure (or union or enum) definition for that name.
5293 Searches binding levels from BINDING_LEVEL up to the global level.
5294 If THISLEVEL_ONLY is nonzero, searches only the specified context
5295 (but skips any tag-transparent contexts to find one that is
5296 meaningful for tags).
5297 FORM says which kind of type the caller wants;
5298 it is RECORD_TYPE or UNION_TYPE or ENUMERAL_TYPE.
5299 If the wrong kind of type is found, and it's not a template, an error is
5300 reported. */
5301
5302static tree
5303lookup_tag (form, name, binding_level, thislevel_only)
5304 enum tree_code form;
8d08fdba 5305 tree name;
cffa8729 5306 struct binding_level *binding_level;
8d08fdba
MS
5307 int thislevel_only;
5308{
5309 register struct binding_level *level;
74b846e0
MM
5310 /* Non-zero if, we should look past a template parameter level, even
5311 if THISLEVEL_ONLY. */
5312 int allow_template_parms_p = 1;
8d08fdba
MS
5313
5314 for (level = binding_level; level; level = level->level_chain)
5315 {
5316 register tree tail;
5317 if (ANON_AGGRNAME_P (name))
5318 for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
5319 {
5320 /* There's no need for error checking here, because
5321 anon names are unique throughout the compilation. */
5322 if (TYPE_IDENTIFIER (TREE_VALUE (tail)) == name)
5323 return TREE_VALUE (tail);
5324 }
2c73f9f5
ML
5325 else if (level->namespace_p)
5326 /* Do namespace lookup. */
6c011b01 5327 for (tail = current_namespace; 1; tail = CP_DECL_CONTEXT (tail))
2c73f9f5 5328 {
36a117a5
MM
5329 tree old = binding_for_name (name, tail);
5330
74b846e0
MM
5331 /* If we just skipped past a template parameter level,
5332 even though THISLEVEL_ONLY, and we find a template
5333 class declaration, then we use the _TYPE node for the
36a117a5 5334 template. See the example below. */
74b846e0 5335 if (thislevel_only && !allow_template_parms_p
68642fb6 5336 && old && BINDING_VALUE (old)
36a117a5
MM
5337 && DECL_CLASS_TEMPLATE_P (BINDING_VALUE (old)))
5338 old = TREE_TYPE (BINDING_VALUE (old));
68642fb6 5339 else
36a117a5
MM
5340 old = BINDING_TYPE (old);
5341
2c73f9f5
ML
5342 /* If it has an original type, it is a typedef, and we
5343 should not return it. */
5344 if (old && DECL_ORIGINAL_TYPE (TYPE_NAME (old)))
5345 old = NULL_TREE;
5346 if (old && TREE_CODE (old) != form
5347 && !(form != ENUMERAL_TYPE && TREE_CODE (old) == TEMPLATE_DECL))
5348 {
33bd39a2 5349 error ("`%#D' redeclared as %C", old, form);
2c73f9f5
ML
5350 return NULL_TREE;
5351 }
5352 if (old)
5353 return old;
5354 if (thislevel_only || tail == global_namespace)
5355 return NULL_TREE;
5356 }
8d08fdba
MS
5357 else
5358 for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
5359 {
a80e4195 5360 if (TREE_PURPOSE (tail) == name)
8d08fdba
MS
5361 {
5362 enum tree_code code = TREE_CODE (TREE_VALUE (tail));
5363 /* Should tighten this up; it'll probably permit
5364 UNION_TYPE and a struct template, for example. */
5365 if (code != form
5566b478 5366 && !(form != ENUMERAL_TYPE && code == TEMPLATE_DECL))
8d08fdba
MS
5367 {
5368 /* Definition isn't the kind we were looking for. */
33bd39a2 5369 error ("`%#D' redeclared as %C", TREE_VALUE (tail),
8d08fdba 5370 form);
72b7eeff 5371 return NULL_TREE;
8d08fdba
MS
5372 }
5373 return TREE_VALUE (tail);
5374 }
5375 }
5376 if (thislevel_only && ! level->tag_transparent)
5566b478 5377 {
74b846e0 5378 if (level->template_parms_p && allow_template_parms_p)
5566b478 5379 {
36a117a5 5380 /* We must deal with cases like this:
68642fb6 5381
36a117a5
MM
5382 template <class T> struct S;
5383 template <class T> struct S {};
68642fb6 5384
36a117a5
MM
5385 When looking up `S', for the second declaration, we
5386 would like to find the first declaration. But, we
5387 are in the pseudo-global level created for the
5388 template parameters, rather than the (surrounding)
5389 namespace level. Thus, we keep going one more level,
5390 even though THISLEVEL_ONLY is non-zero. */
74b846e0 5391 allow_template_parms_p = 0;
36a117a5 5392 continue;
5566b478 5393 }
36a117a5
MM
5394 else
5395 return NULL_TREE;
5566b478 5396 }
8d08fdba
MS
5397 }
5398 return NULL_TREE;
5399}
5400
bd6dd845 5401#if 0
8d08fdba
MS
5402void
5403set_current_level_tags_transparency (tags_transparent)
5404 int tags_transparent;
5405{
5406 current_binding_level->tag_transparent = tags_transparent;
5407}
bd6dd845 5408#endif
8d08fdba
MS
5409
5410/* Given a type, find the tag that was defined for it and return the tag name.
5411 Otherwise return 0. However, the value can never be 0
5412 in the cases in which this is used.
5413
5414 C++: If NAME is non-zero, this is the new name to install. This is
5415 done when replacing anonymous tags with real tag names. */
5416
5417static tree
5418lookup_tag_reverse (type, name)
5419 tree type;
5420 tree name;
5421{
5422 register struct binding_level *level;
5423
5424 for (level = current_binding_level; level; level = level->level_chain)
5425 {
5426 register tree tail;
5427 for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
5428 {
5429 if (TREE_VALUE (tail) == type)
5430 {
5431 if (name)
5432 TREE_PURPOSE (tail) = name;
5433 return TREE_PURPOSE (tail);
5434 }
5435 }
5436 }
5437 return NULL_TREE;
5438}
8d08fdba 5439\f
a9aedbc2 5440/* Look up NAME in the NAMESPACE. */
e92cc029 5441
a9aedbc2
MS
5442tree
5443lookup_namespace_name (namespace, name)
5444 tree namespace, name;
5445{
30394414 5446 tree val;
f30c84c9 5447 tree template_id = NULL_TREE;
2c73f9f5 5448
30394414 5449 my_friendly_assert (TREE_CODE (namespace) == NAMESPACE_DECL, 370);
1231fb96 5450
1231fb96 5451 if (TREE_CODE (name) == NAMESPACE_DECL)
d8f8dca1 5452 /* This happens for A::B<int> when B is a namespace. */
1231fb96 5453 return name;
d8f8dca1
MM
5454 else if (TREE_CODE (name) == TEMPLATE_DECL)
5455 {
5456 /* This happens for A::B where B is a template, and there are no
5457 template arguments. */
33bd39a2 5458 error ("invalid use of `%D'", name);
d8f8dca1
MM
5459 return error_mark_node;
5460 }
1231fb96 5461
b262d64c
JM
5462 namespace = ORIGINAL_NAMESPACE (namespace);
5463
f30c84c9
MM
5464 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
5465 {
5466 template_id = name;
5467 name = TREE_OPERAND (name, 0);
5468 if (TREE_CODE (name) == OVERLOAD)
5469 name = DECL_NAME (OVL_CURRENT (name));
2f939d94 5470 else if (DECL_P (name))
f30c84c9
MM
5471 name = DECL_NAME (name);
5472 }
5473
30394414 5474 my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 373);
68642fb6 5475
87e3dbc9 5476 val = make_node (CPLUS_BINDING);
52c11ef6 5477 if (!qualified_lookup_using_namespace (name, namespace, val, 0))
2c73f9f5
ML
5478 return error_mark_node;
5479
5480 if (BINDING_VALUE (val))
1c35f5b6
JM
5481 {
5482 val = BINDING_VALUE (val);
5483
f30c84c9
MM
5484 if (template_id)
5485 {
5486 if (DECL_CLASS_TEMPLATE_P (val))
68642fb6 5487 val = lookup_template_class (val,
f30c84c9
MM
5488 TREE_OPERAND (template_id, 1),
5489 /*in_decl=*/NULL_TREE,
5490 /*context=*/NULL_TREE,
f9c244b8
NS
5491 /*entering_scope=*/0,
5492 /*complain=*/1);
f30c84c9
MM
5493 else if (DECL_FUNCTION_TEMPLATE_P (val)
5494 || TREE_CODE (val) == OVERLOAD)
68642fb6 5495 val = lookup_template_function (val,
f30c84c9
MM
5496 TREE_OPERAND (template_id, 1));
5497 else
5498 {
33bd39a2 5499 error ("`%D::%D' is not a template",
f30c84c9
MM
5500 namespace, name);
5501 return error_mark_node;
5502 }
5503 }
5504
1c35f5b6
JM
5505 /* If we have a single function from a using decl, pull it out. */
5506 if (TREE_CODE (val) == OVERLOAD && ! really_overloaded_fn (val))
5507 val = OVL_FUNCTION (val);
5508 return val;
5509 }
5510
33bd39a2 5511 error ("`%D' undeclared in namespace `%D'", name, namespace);
30394414 5512 return error_mark_node;
a9aedbc2
MS
5513}
5514
7ddedda4
MM
5515/* Hash a TYPENAME_TYPE. K is really of type `tree'. */
5516
5517static unsigned long
5518typename_hash (k)
5519 hash_table_key k;
5520{
5521 unsigned long hash;
5522 tree t;
5523
5524 t = (tree) k;
5525 hash = (((unsigned long) TYPE_CONTEXT (t))
5526 ^ ((unsigned long) DECL_NAME (TYPE_NAME (t))));
5527
5528 return hash;
5529}
5530
5531/* Compare two TYPENAME_TYPEs. K1 and K2 are really of type `tree'. */
5532
d6edb99e 5533static bool
7ddedda4
MM
5534typename_compare (k1, k2)
5535 hash_table_key k1;
5536 hash_table_key k2;
5537{
5538 tree t1;
5539 tree t2;
5540 tree d1;
5541 tree d2;
5542
5543 t1 = (tree) k1;
5544 t2 = (tree) k2;
5545 d1 = TYPE_NAME (t1);
5546 d2 = TYPE_NAME (t2);
68642fb6 5547
7ddedda4
MM
5548 return (DECL_NAME (d1) == DECL_NAME (d2)
5549 && same_type_p (TYPE_CONTEXT (t1), TYPE_CONTEXT (t2))
68642fb6 5550 && ((TREE_TYPE (t1) != NULL_TREE)
7ddedda4
MM
5551 == (TREE_TYPE (t2) != NULL_TREE))
5552 && same_type_p (TREE_TYPE (t1), TREE_TYPE (t2))
5553 && TYPENAME_TYPE_FULLNAME (t1) == TYPENAME_TYPE_FULLNAME (t2));
5554}
5555
45869a6c
MM
5556/* Build a TYPENAME_TYPE. If the type is `typename T::t', CONTEXT is
5557 the type of `T', NAME is the IDENTIFIER_NODE for `t'. If BASE_TYPE
5558 is non-NULL, this type is being created by the implicit typename
5559 extension, and BASE_TYPE is a type named `t' in some base class of
68642fb6 5560 `T' which depends on template parameters.
45869a6c
MM
5561
5562 Returns the new TYPENAME_TYPE. */
5563
5564tree
5565build_typename_type (context, name, fullname, base_type)
5566 tree context;
5567 tree name;
5568 tree fullname;
5569 tree base_type;
5570{
5571 tree t;
5572 tree d;
400500c4 5573 struct hash_entry *e;
45869a6c 5574
7ddedda4
MM
5575 static struct hash_table ht;
5576
9cd64686
MM
5577 if (!ht.table)
5578 {
5579 static struct hash_table *h = &ht;
400500c4
RK
5580
5581 hash_table_init (&ht, &hash_newfunc, &typename_hash, &typename_compare);
9cd64686
MM
5582 ggc_add_tree_hash_table_root (&h, 1);
5583 }
45869a6c
MM
5584
5585 /* Build the TYPENAME_TYPE. */
33848bb0 5586 t = make_aggr_type (TYPENAME_TYPE);
45869a6c
MM
5587 TYPE_CONTEXT (t) = FROB_CONTEXT (context);
5588 TYPENAME_TYPE_FULLNAME (t) = fullname;
5589 TREE_TYPE (t) = base_type;
45869a6c
MM
5590
5591 /* Build the corresponding TYPE_DECL. */
5592 d = build_decl (TYPE_DECL, name, t);
5593 TYPE_NAME (TREE_TYPE (d)) = d;
5594 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
5595 DECL_CONTEXT (d) = FROB_CONTEXT (context);
2642b9bf 5596 DECL_ARTIFICIAL (d) = 1;
45869a6c 5597
7ddedda4
MM
5598 /* See if we already have this type. */
5599 e = hash_lookup (&ht, t, /*create=*/false, /*copy=*/0);
5600 if (e)
87e3dbc9 5601 t = (tree) e->key;
7ddedda4
MM
5602 else
5603 /* Insert the type into the table. */
5604 hash_lookup (&ht, t, /*create=*/true, /*copy=*/0);
5605
45869a6c
MM
5606 return t;
5607}
5608
3baa501d
MM
5609/* Resolve `typename CONTEXT::NAME'. Returns an appropriate type,
5610 unless an error occurs, in which case error_mark_node is returned.
5611 If COMPLAIN zero, don't complain about any errors that occur. */
5612
5566b478 5613tree
3baa501d 5614make_typename_type (context, name, complain)
5566b478 5615 tree context, name;
3baa501d 5616 int complain;
5566b478 5617{
b2b7d40a 5618 tree fullname;
a80e4195 5619
2f939d94 5620 if (TYPE_P (name))
78638e24 5621 {
68642fb6
UD
5622 if (!(TYPE_LANG_SPECIFIC (name)
5623 && (CLASSTYPE_IS_TEMPLATE (name)
78638e24
MM
5624 || CLASSTYPE_USE_TEMPLATE (name))))
5625 name = TYPE_IDENTIFIER (name);
5626 else
5627 /* Create a TEMPLATE_ID_EXPR for the type. */
5628 name = build_nt (TEMPLATE_ID_EXPR,
5629 CLASSTYPE_TI_TEMPLATE (name),
5630 CLASSTYPE_TI_ARGS (name));
5631 }
653cc74a 5632 else if (TREE_CODE (name) == TYPE_DECL)
a80e4195 5633 name = DECL_NAME (name);
b2b7d40a
JM
5634
5635 fullname = name;
5636
5637 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
11686454
JM
5638 {
5639 name = TREE_OPERAND (name, 0);
5640 if (TREE_CODE (name) == TEMPLATE_DECL)
5641 name = TREE_OPERAND (fullname, 0) = DECL_NAME (name);
5642 }
8a2b77e7
JM
5643 if (TREE_CODE (name) == TEMPLATE_DECL)
5644 {
33bd39a2 5645 error ("`%D' used without template parameters", name);
8a2b77e7
JM
5646 return error_mark_node;
5647 }
b2b7d40a 5648 if (TREE_CODE (name) != IDENTIFIER_NODE)
a80e4195 5649 my_friendly_abort (2000);
5566b478 5650
04ddee1b
BK
5651 if (TREE_CODE (context) == NAMESPACE_DECL)
5652 {
5653 /* We can get here from typename_sub0 in the explicit_template_type
5654 expansion. Just fail. */
3baa501d 5655 if (complain)
33bd39a2 5656 error ("no class template named `%#T' in `%#T'",
3baa501d 5657 name, context);
04ddee1b
BK
5658 return error_mark_node;
5659 }
5660
85b71cf2 5661 if (! uses_template_parms (context)
b77ead33 5662 || currently_open_class (context))
5566b478 5663 {
b2b7d40a
JM
5664 if (TREE_CODE (fullname) == TEMPLATE_ID_EXPR)
5665 {
ad810b22 5666 tree tmpl = NULL_TREE;
b2b7d40a 5667 if (IS_AGGR_TYPE (context))
ad810b22
MM
5668 tmpl = lookup_field (context, name, 0, 0);
5669 if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
b2b7d40a 5670 {
3baa501d 5671 if (complain)
33bd39a2 5672 error ("no class template named `%#T' in `%#T'",
3baa501d 5673 name, context);
b2b7d40a
JM
5674 return error_mark_node;
5675 }
ffb690bd 5676
68642fb6 5677 return lookup_template_class (tmpl,
ad810b22 5678 TREE_OPERAND (fullname, 1),
68642fb6 5679 NULL_TREE, context,
f9c244b8
NS
5680 /*entering_scope=*/0,
5681 /*complain=*/1);
b2b7d40a
JM
5682 }
5683 else
5566b478 5684 {
b4f70b3d 5685 tree t;
68642fb6 5686
b4f70b3d 5687 if (!IS_AGGR_TYPE (context))
b2b7d40a 5688 {
3baa501d 5689 if (complain)
33bd39a2 5690 error ("no type named `%#T' in `%#T'", name, context);
b2b7d40a
JM
5691 return error_mark_node;
5692 }
1107c4b3 5693
b4f70b3d 5694 t = lookup_field (context, name, 0, 1);
7d4bdeed
MM
5695 if (t)
5696 return TREE_TYPE (t);
5566b478 5697 }
5566b478 5698 }
11249cf0
MM
5699
5700 /* If the CONTEXT is not a template type, then either the field is
5701 there now or its never going to be. */
b4f70b3d 5702 if (!uses_template_parms (context))
11249cf0 5703 {
3baa501d 5704 if (complain)
33bd39a2 5705 error ("no type named `%#T' in `%#T'", name, context);
11249cf0
MM
5706 return error_mark_node;
5707 }
68642fb6
UD
5708
5709
45869a6c 5710 return build_typename_type (context, name, fullname, NULL_TREE);
5566b478
MS
5711}
5712
b8c6534b
KL
5713/* Resolve `CONTEXT::template NAME'. Returns an appropriate type,
5714 unless an error occurs, in which case error_mark_node is returned.
5715 If COMPLAIN zero, don't complain about any errors that occur. */
5716
5717tree
5718make_unbound_class_template (context, name, complain)
5719 tree context, name;
5720 int complain;
5721{
5722 tree t;
5723 tree d;
5724
5725 if (TYPE_P (name))
5726 name = TYPE_IDENTIFIER (name);
5727 else if (DECL_P (name))
5728 name = DECL_NAME (name);
5729 if (TREE_CODE (name) != IDENTIFIER_NODE)
5730 my_friendly_abort (20010902);
5731
5732 if (!uses_template_parms (context)
5733 || currently_open_class (context))
5734 {
5735 tree tmpl = NULL_TREE;
5736
5737 if (IS_AGGR_TYPE (context))
5738 tmpl = lookup_field (context, name, 0, 0);
5739
5740 if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
5741 {
5742 if (complain)
33bd39a2 5743 error ("no class template named `%#T' in `%#T'", name, context);
b8c6534b
KL
5744 return error_mark_node;
5745 }
5746
5747 if (!enforce_access (context, tmpl))
5748 return error_mark_node;
5749
5750 return tmpl;
5751 }
5752
5753 /* Build the UNBOUND_CLASS_TEMPLATE. */
5754 t = make_aggr_type (UNBOUND_CLASS_TEMPLATE);
5755 TYPE_CONTEXT (t) = FROB_CONTEXT (context);
5756 TREE_TYPE (t) = NULL_TREE;
5757
5758 /* Build the corresponding TEMPLATE_DECL. */
5759 d = build_decl (TEMPLATE_DECL, name, t);
5760 TYPE_NAME (TREE_TYPE (d)) = d;
5761 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
5762 DECL_CONTEXT (d) = FROB_CONTEXT (context);
5763 DECL_ARTIFICIAL (d) = 1;
5764
5765 return t;
5766}
5767
2c73f9f5
ML
5768/* Select the right _DECL from multiple choices. */
5769
5770static tree
52c11ef6 5771select_decl (binding, flags)
2c73f9f5 5772 tree binding;
52c11ef6 5773 int flags;
2c73f9f5
ML
5774{
5775 tree val;
5776 val = BINDING_VALUE (binding);
97ba1e3c
MM
5777
5778 /* When we implicitly declare some builtin entity, we mark it
5779 DECL_ANTICIPATED, so that we know to ignore it until it is
5780 really declared. */
5362b086
EC
5781 if (val && DECL_P (val)
5782 && DECL_LANG_SPECIFIC (val)
97ba1e3c
MM
5783 && DECL_ANTICIPATED (val))
5784 return NULL_TREE;
5785
52c11ef6 5786 if (LOOKUP_NAMESPACES_ONLY (flags))
3e3f722c
ML
5787 {
5788 /* We are not interested in types. */
5789 if (val && TREE_CODE (val) == NAMESPACE_DECL)
5790 return val;
5791 return NULL_TREE;
5792 }
68642fb6 5793
2c73f9f5
ML
5794 /* If we could have a type and
5795 we have nothing or we need a type and have none. */
5796 if (BINDING_TYPE (binding)
52c11ef6
JM
5797 && (!val || ((flags & LOOKUP_PREFER_TYPES)
5798 && TREE_CODE (val) != TYPE_DECL)))
2c73f9f5
ML
5799 val = TYPE_STUB_DECL (BINDING_TYPE (binding));
5800 /* Don't return non-types if we really prefer types. */
52c11ef6 5801 else if (val && LOOKUP_TYPES_ONLY (flags) && TREE_CODE (val) != TYPE_DECL
c592d5d2
ML
5802 && (TREE_CODE (val) != TEMPLATE_DECL
5803 || !DECL_CLASS_TEMPLATE_P (val)))
2c73f9f5 5804 val = NULL_TREE;
1c35f5b6 5805
2c73f9f5
ML
5806 return val;
5807}
5808
2c169bab
JM
5809/* Unscoped lookup of a global: iterate over current namespaces,
5810 considering using-directives. If SPACESP is non-NULL, store a list
5811 of the namespaces we've considered in it. */
ea9635c7 5812
2c169bab
JM
5813tree
5814unqualified_namespace_lookup (name, flags, spacesp)
ea9635c7 5815 tree name;
52c11ef6 5816 int flags;
2c169bab 5817 tree *spacesp;
ea9635c7 5818{
87e3dbc9 5819 tree b = make_node (CPLUS_BINDING);
ee8fc32b 5820 tree initial = current_decl_namespace ();
ea9635c7
ML
5821 tree scope = initial;
5822 tree siter;
5823 struct binding_level *level;
5824 tree val = NULL_TREE;
5825
2c169bab
JM
5826 if (spacesp)
5827 *spacesp = NULL_TREE;
5828
5829 for (; !val; scope = CP_DECL_CONTEXT (scope))
ea9635c7 5830 {
2c169bab 5831 if (spacesp)
e1b3e07d 5832 *spacesp = tree_cons (scope, NULL_TREE, *spacesp);
ea9635c7
ML
5833 val = binding_for_name (name, scope);
5834
5835 /* Initialize binding for this context. */
5836 BINDING_VALUE (b) = BINDING_VALUE (val);
5837 BINDING_TYPE (b) = BINDING_TYPE (val);
5838
5839 /* Add all _DECLs seen through local using-directives. */
68642fb6 5840 for (level = current_binding_level;
ea9635c7
ML
5841 !level->namespace_p;
5842 level = level->level_chain)
52c11ef6 5843 if (!lookup_using_namespace (name, b, level->using_directives,
2c169bab 5844 scope, flags, spacesp))
ea9635c7 5845 /* Give up because of error. */
5b163de4 5846 return error_mark_node;
ea9635c7
ML
5847
5848 /* Add all _DECLs seen through global using-directives. */
5849 /* XXX local and global using lists should work equally. */
5850 siter = initial;
5851 while (1)
5852 {
68642fb6 5853 if (!lookup_using_namespace (name, b, DECL_NAMESPACE_USING (siter),
2c169bab 5854 scope, flags, spacesp))
ea9635c7 5855 /* Give up because of error. */
5b163de4 5856 return error_mark_node;
ea9635c7
ML
5857 if (siter == scope) break;
5858 siter = CP_DECL_CONTEXT (siter);
5859 }
5860
52c11ef6 5861 val = select_decl (b, flags);
ea9635c7
ML
5862 if (scope == global_namespace)
5863 break;
ea9635c7
ML
5864 }
5865 return val;
5866}
5867
52c11ef6
JM
5868/* Combine prefer_type and namespaces_only into flags. */
5869
5870static int
5871lookup_flags (prefer_type, namespaces_only)
5872 int prefer_type, namespaces_only;
5873{
5874 if (namespaces_only)
5875 return LOOKUP_PREFER_NAMESPACES;
5876 if (prefer_type > 1)
5877 return LOOKUP_PREFER_TYPES;
5878 if (prefer_type > 0)
5879 return LOOKUP_PREFER_BOTH;
5880 return 0;
5881}
5882
5883/* Given a lookup that returned VAL, use FLAGS to decide if we want to
5884 ignore it or not. Subroutine of lookup_name_real. */
5885
5886static tree
5887qualify_lookup (val, flags)
5888 tree val;
5889 int flags;
5890{
5891 if (val == NULL_TREE)
5892 return val;
6b945830
JM
5893 if ((flags & LOOKUP_PREFER_NAMESPACES) && TREE_CODE (val) == NAMESPACE_DECL)
5894 return val;
5895 if ((flags & LOOKUP_PREFER_TYPES)
5896 && (TREE_CODE (val) == TYPE_DECL
5897 || ((flags & LOOKUP_TEMPLATES_EXPECTED)
5898 && DECL_CLASS_TEMPLATE_P (val))))
5899 return val;
5900 if (flags & (LOOKUP_PREFER_NAMESPACES | LOOKUP_PREFER_TYPES))
52c11ef6
JM
5901 return NULL_TREE;
5902 return val;
5903}
5904
235f734d
MM
5905/* Any other BINDING overrides an implicit TYPENAME. Warn about
5906 that. */
5907
5908static void
5909warn_about_implicit_typename_lookup (typename, binding)
5910 tree typename;
5911 tree binding;
5912{
5913 tree subtype = TREE_TYPE (TREE_TYPE (typename));
5914 tree name = DECL_NAME (typename);
5915
5916 if (! (TREE_CODE (binding) == TEMPLATE_DECL
5917 && CLASSTYPE_TEMPLATE_INFO (subtype)
5918 && CLASSTYPE_TI_TEMPLATE (subtype) == binding)
5919 && ! (TREE_CODE (binding) == TYPE_DECL
5920 && same_type_p (TREE_TYPE (binding), subtype)))
5921 {
33bd39a2 5922 warning ("lookup of `%D' finds `%#D'",
235f734d 5923 name, binding);
33bd39a2 5924 warning (" instead of `%D' from dependent base class",
235f734d 5925 typename);
33bd39a2 5926 warning (" (use `typename %T::%D' if that's what you meant)",
235f734d
MM
5927 constructor_name (current_class_type), name);
5928 }
5929}
5930
8d08fdba
MS
5931/* Look up NAME in the current binding level and its superiors in the
5932 namespace of variables, functions and typedefs. Return a ..._DECL
5933 node of some kind representing its definition if there is only one
5934 such declaration, or return a TREE_LIST with all the overloaded
5935 definitions if there are many, or return 0 if it is undefined.
5936
2c73f9f5
ML
5937 If PREFER_TYPE is > 0, we prefer TYPE_DECLs or namespaces.
5938 If PREFER_TYPE is > 1, we reject non-type decls (e.g. namespaces).
a28e3c7f 5939 If PREFER_TYPE is -2, we're being called from yylex(). (UGLY)
68642fb6 5940 Otherwise we prefer non-TYPE_DECLs.
f84b4be9
JM
5941
5942 If NONCLASS is non-zero, we don't look for the NAME in class scope,
5943 using IDENTIFIER_CLASS_VALUE. */
8d08fdba 5944
824b9a4c 5945static tree
3e3f722c 5946lookup_name_real (name, prefer_type, nonclass, namespaces_only)
8d08fdba 5947 tree name;
3e3f722c 5948 int prefer_type, nonclass, namespaces_only;
8d08fdba 5949{
235f734d
MM
5950 tree t;
5951 tree val = NULL_TREE;
a28e3c7f 5952 int yylex = 0;
e1cd6e56 5953 tree from_obj = NULL_TREE;
52c11ef6 5954 int flags;
235f734d 5955 int val_is_implicit_typename = 0;
8d08fdba 5956
3e3f722c
ML
5957 /* Hack: copy flag set by parser, if set. */
5958 if (only_namespace_names)
5959 namespaces_only = 1;
52c11ef6 5960
a28e3c7f
MS
5961 if (prefer_type == -2)
5962 {
5963 extern int looking_for_typename;
fc378698 5964 tree type = NULL_TREE;
a28e3c7f
MS
5965
5966 yylex = 1;
5967 prefer_type = looking_for_typename;
e1cd6e56 5968
52c11ef6 5969 flags = lookup_flags (prefer_type, namespaces_only);
52c11ef6
JM
5970 /* If the next thing is '<', class templates are types. */
5971 if (looking_for_template)
5972 flags |= LOOKUP_TEMPLATES_EXPECTED;
5973
e1cd6e56
MS
5974 if (got_scope)
5975 type = got_scope;
dff6b454 5976 else if (got_object != error_mark_node)
e1cd6e56 5977 type = got_object;
68642fb6 5978
e1cd6e56 5979 if (type)
a28e3c7f 5980 {
e1cd6e56 5981 if (type == error_mark_node)
f376e137 5982 return error_mark_node;
a80e4195
MS
5983 if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
5984 type = TREE_TYPE (type);
5566b478 5985
2b9dc906
JM
5986 if (TYPE_P (type))
5987 type = complete_type (type);
5566b478 5988
a1774733 5989 if (TREE_CODE (type) == VOID_TYPE)
2c73f9f5
ML
5990 type = global_namespace;
5991 if (TREE_CODE (type) == NAMESPACE_DECL)
a9aedbc2 5992 {
87e3dbc9 5993 val = make_node (CPLUS_BINDING);
6ad07332 5994 flags |= LOOKUP_COMPLAIN;
52c11ef6 5995 if (!qualified_lookup_using_namespace (name, type, val, flags))
2c73f9f5 5996 return NULL_TREE;
52c11ef6 5997 val = select_decl (val, flags);
a9aedbc2 5998 }
5566b478 5999 else if (! IS_AGGR_TYPE (type)
5156628f 6000 || TREE_CODE (type) == TEMPLATE_TYPE_PARM
a1281f45 6001 || TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM
5156628f 6002 || TREE_CODE (type) == TYPENAME_TYPE)
e92cc029 6003 /* Someone else will give an error about this if needed. */
a28e3c7f 6004 val = NULL_TREE;
e1cd6e56 6005 else if (type == current_class_type)
a28e3c7f 6006 val = IDENTIFIER_CLASS_VALUE (name);
a28e3c7f 6007 else
70adf8a9
JM
6008 {
6009 val = lookup_member (type, name, 0, prefer_type);
6010 type_access_control (type, val);
e69c8072
JM
6011
6012 /* Restore the containing TYPENAME_TYPE if we looked
6013 through it before. */
6014 if (got_scope && got_scope != type
6015 && val && TREE_CODE (val) == TYPE_DECL
6016 && TREE_CODE (TREE_TYPE (val)) == TYPENAME_TYPE)
6017 TYPE_CONTEXT (TREE_TYPE (val)) = got_scope;
70adf8a9 6018 }
a28e3c7f 6019 }
e1cd6e56
MS
6020 else
6021 val = NULL_TREE;
6022
594740f3 6023 if (got_scope)
e1cd6e56 6024 goto done;
594740f3 6025 else if (got_object && val)
aca77bd1
JM
6026 {
6027 from_obj = val;
6028 val = NULL_TREE;
6029 }
a28e3c7f 6030 }
52c11ef6 6031 else
5b163de4
JM
6032 {
6033 flags = lookup_flags (prefer_type, namespaces_only);
6034 /* If we're not parsing, we need to complain. */
6035 flags |= LOOKUP_COMPLAIN;
6036 }
e76a2646 6037
d8f8dca1 6038 /* First, look in non-namespace scopes. */
6f1b4c42
JM
6039
6040 if (current_class_type == NULL_TREE)
6041 nonclass = 1;
6042
235f734d 6043 for (t = IDENTIFIER_BINDING (name); t; t = TREE_CHAIN (t))
d8f8dca1 6044 {
235f734d
MM
6045 tree binding;
6046
6047 if (!LOCAL_BINDING_P (t) && nonclass)
d8f8dca1
MM
6048 /* We're not looking for class-scoped bindings, so keep going. */
6049 continue;
68642fb6 6050
d8f8dca1 6051 /* If this is the kind of thing we're looking for, we're done. */
235f734d
MM
6052 if (qualify_lookup (BINDING_VALUE (t), flags))
6053 binding = BINDING_VALUE (t);
68642fb6 6054 else if ((flags & LOOKUP_PREFER_TYPES)
235f734d
MM
6055 && qualify_lookup (BINDING_TYPE (t), flags))
6056 binding = BINDING_TYPE (t);
6057 else
6058 binding = NULL_TREE;
6059
70adf8a9
JM
6060 /* Handle access control on types from enclosing or base classes. */
6061 if (binding && ! yylex
6062 && BINDING_LEVEL (t) && BINDING_LEVEL (t)->parm_flag == 2)
6063 type_access_control (BINDING_LEVEL (t)->this_class, binding);
6064
235f734d 6065 if (binding
83233dca 6066 && (!val || !IMPLICIT_TYPENAME_TYPE_DECL_P (binding)))
d8f8dca1 6067 {
235f734d
MM
6068 if (val_is_implicit_typename && !yylex)
6069 warn_about_implicit_typename_lookup (val, binding);
6070 val = binding;
68642fb6 6071 val_is_implicit_typename
83233dca 6072 = IMPLICIT_TYPENAME_TYPE_DECL_P (val);
235f734d
MM
6073 if (!val_is_implicit_typename)
6074 break;
d8f8dca1
MM
6075 }
6076 }
f181d4ae 6077
235f734d
MM
6078 /* Now lookup in namespace scopes. */
6079 if (!val || val_is_implicit_typename)
e76a2646 6080 {
2c169bab 6081 t = unqualified_namespace_lookup (name, flags, 0);
235f734d 6082 if (t)
c1def683 6083 {
235f734d
MM
6084 if (val_is_implicit_typename && !yylex)
6085 warn_about_implicit_typename_lookup (val, t);
6086 val = t;
c1def683
JM
6087 }
6088 }
6089
a28e3c7f 6090 done:
8d08fdba
MS
6091 if (val)
6092 {
c91a56d2 6093 /* This should only warn about types used in qualified-ids. */
e1cd6e56 6094 if (from_obj && from_obj != val)
5566b478 6095 {
c91a56d2
MS
6096 if (looking_for_typename && TREE_CODE (from_obj) == TYPE_DECL
6097 && TREE_CODE (val) == TYPE_DECL
aca77bd1 6098 && ! same_type_p (TREE_TYPE (from_obj), TREE_TYPE (val)))
33bd39a2 6099 pedwarn ("\
bd0d5d4a
JM
6100lookup of `%D' in the scope of `%#T' (`%#D') \
6101does not match lookup in the current scope (`%#D')",
6102 name, got_object, from_obj, val);
594740f3 6103
b8b1a3c1
JM
6104 /* We don't change val to from_obj if got_object depends on
6105 template parms because that breaks implicit typename for
6106 destructor calls. */
6107 if (! uses_template_parms (got_object))
53fdbb3b 6108 val = from_obj;
5566b478 6109 }
e1cd6e56 6110
0c64a9ca
JM
6111 /* If we have a single function from a using decl, pull it out. */
6112 if (TREE_CODE (val) == OVERLOAD && ! really_overloaded_fn (val))
6113 val = OVL_FUNCTION (val);
8d08fdba 6114 }
e1cd6e56
MS
6115 else if (from_obj)
6116 val = from_obj;
8d08fdba
MS
6117
6118 return val;
6119}
6120
700f8a87
MS
6121tree
6122lookup_name_nonclass (name)
6123 tree name;
6124{
3e3f722c 6125 return lookup_name_real (name, 0, 1, 0);
700f8a87
MS
6126}
6127
2c73f9f5
ML
6128tree
6129lookup_function_nonclass (name, args)
6130 tree name;
6131 tree args;
6132{
6133 return lookup_arg_dependent (name, lookup_name_nonclass (name), args);
6134}
6135
3e3f722c
ML
6136tree
6137lookup_name_namespace_only (name)
6138 tree name;
6139{
6140 /* type-or-namespace, nonclass, namespace_only */
6141 return lookup_name_real (name, 1, 1, 1);
6142}
6143
700f8a87
MS
6144tree
6145lookup_name (name, prefer_type)
6146 tree name;
6147 int prefer_type;
6148{
3e3f722c 6149 return lookup_name_real (name, prefer_type, 0, 0);
700f8a87
MS
6150}
6151
a7d2d407
MM
6152/* Similar to `lookup_name' but look only in the innermost non-class
6153 binding level. */
8d08fdba
MS
6154
6155tree
6156lookup_name_current_level (name)
6157 tree name;
6158{
a7d2d407
MM
6159 struct binding_level *b;
6160 tree t = NULL_TREE;
8d08fdba 6161
a7d2d407
MM
6162 b = current_binding_level;
6163 while (b->parm_flag == 2)
6164 b = b->level_chain;
6165
6166 if (b->namespace_p)
8d08fdba 6167 {
5fdaba89 6168 t = IDENTIFIER_NAMESPACE_VALUE (name);
8d08fdba
MS
6169
6170 /* extern "C" function() */
6171 if (t != NULL_TREE && TREE_CODE (t) == TREE_LIST)
6172 t = TREE_VALUE (t);
6173 }
68642fb6 6174 else if (IDENTIFIER_BINDING (name)
f181d4ae 6175 && LOCAL_BINDING_P (IDENTIFIER_BINDING (name)))
8d08fdba 6176 {
a4443a08
MS
6177 while (1)
6178 {
f181d4ae
MM
6179 if (BINDING_LEVEL (IDENTIFIER_BINDING (name)) == b)
6180 return IDENTIFIER_VALUE (name);
68642fb6 6181
9ed182dc
JM
6182 if (b->keep == 2)
6183 b = b->level_chain;
6184 else
6185 break;
6186 }
6187 }
6188
6189 return t;
6190}
6191
6192/* Like lookup_name_current_level, but for types. */
6193
6194tree
6195lookup_type_current_level (name)
6196 tree name;
6197{
6198 register tree t = NULL_TREE;
6199
6200 my_friendly_assert (! current_binding_level->namespace_p, 980716);
6201
6202 if (REAL_IDENTIFIER_TYPE_VALUE (name) != NULL_TREE
6203 && REAL_IDENTIFIER_TYPE_VALUE (name) != global_type_node)
6204 {
6205 struct binding_level *b = current_binding_level;
6206 while (1)
6207 {
6208 if (purpose_member (name, b->type_shadowed))
6209 return REAL_IDENTIFIER_TYPE_VALUE (name);
a4443a08
MS
6210 if (b->keep == 2)
6211 b = b->level_chain;
6212 else
6213 break;
6214 }
8d08fdba
MS
6215 }
6216
6217 return t;
6218}
3e3f722c
ML
6219
6220void
6221begin_only_namespace_names ()
6222{
6223 only_namespace_names = 1;
6224}
6225
6226void
6227end_only_namespace_names ()
6228{
6229 only_namespace_names = 0;
6230}
8d08fdba 6231\f
8d08fdba 6232/* Push the declarations of builtin types into the namespace.
0e5921e8 6233 RID_INDEX is the index of the builtin type
8d08fdba
MS
6234 in the array RID_POINTERS. NAME is the name used when looking
6235 up the builtin type. TYPE is the _TYPE node for the builtin type. */
6236
eaa7c03f 6237void
8d08fdba
MS
6238record_builtin_type (rid_index, name, type)
6239 enum rid rid_index;
d8e178a0 6240 const char *name;
8d08fdba
MS
6241 tree type;
6242{
6243 tree rname = NULL_TREE, tname = NULL_TREE;
a703fb38 6244 tree tdecl = NULL_TREE;
8d08fdba 6245
0e5921e8 6246 if ((int) rid_index < (int) RID_MAX)
8d08fdba
MS
6247 rname = ridpointers[(int) rid_index];
6248 if (name)
6249 tname = get_identifier (name);
6250
6251 TYPE_BUILT_IN (type) = 1;
68642fb6 6252
8d08fdba
MS
6253 if (tname)
6254 {
8d08fdba 6255 tdecl = pushdecl (build_decl (TYPE_DECL, tname, type));
8d08fdba 6256 set_identifier_type_value (tname, NULL_TREE);
0e5921e8 6257 if ((int) rid_index < (int) RID_MAX)
2c73f9f5
ML
6258 /* Built-in types live in the global namespace. */
6259 SET_IDENTIFIER_GLOBAL_VALUE (tname, tdecl);
8d08fdba
MS
6260 }
6261 if (rname != NULL_TREE)
6262 {
6263 if (tname != NULL_TREE)
6264 {
6265 set_identifier_type_value (rname, NULL_TREE);
2c73f9f5 6266 SET_IDENTIFIER_GLOBAL_VALUE (rname, tdecl);
8d08fdba
MS
6267 }
6268 else
6269 {
8d08fdba 6270 tdecl = pushdecl (build_decl (TYPE_DECL, rname, type));
8d08fdba
MS
6271 set_identifier_type_value (rname, NULL_TREE);
6272 }
6273 }
8d08fdba
MS
6274}
6275
eff71ab0 6276/* Record one of the standard Java types.
4d8a1dd6
MM
6277 * Declare it as having the given NAME.
6278 * If SIZE > 0, it is the size of one of the integral types;
6279 * otherwise it is the negative of the size of one of the other types. */
eff71ab0
PB
6280
6281static tree
6282record_builtin_java_type (name, size)
d8e178a0 6283 const char *name;
eff71ab0
PB
6284 int size;
6285{
6286 tree type, decl;
6287 if (size > 0)
6288 type = make_signed_type (size);
6289 else if (size > -32)
6290 { /* "__java_char" or ""__java_boolean". */
6291 type = make_unsigned_type (-size);
6292 /*if (size == -1) TREE_SET_CODE (type, BOOLEAN_TYPE);*/
6293 }
6294 else
6295 { /* "__java_float" or ""__java_double". */
6296 type = make_node (REAL_TYPE);
6297 TYPE_PRECISION (type) = - size;
6298 layout_type (type);
6299 }
0e5921e8 6300 record_builtin_type (RID_MAX, name, type);
eff71ab0 6301 decl = TYPE_NAME (type);
e229f2cd
PB
6302
6303 /* Suppress generate debug symbol entries for these types,
6304 since for normal C++ they are just clutter.
6305 However, push_lang_context undoes this if extern "Java" is seen. */
eff71ab0 6306 DECL_IGNORED_P (decl) = 1;
e229f2cd 6307
eff71ab0
PB
6308 TYPE_FOR_JAVA (type) = 1;
6309 return type;
6310}
6311
036407f7
ML
6312/* Push a type into the namespace so that the back-ends ignore it. */
6313
6314static void
6315record_unknown_type (type, name)
6316 tree type;
d8e178a0 6317 const char *name;
036407f7
ML
6318{
6319 tree decl = pushdecl (build_decl (TYPE_DECL, get_identifier (name), type));
6320 /* Make sure the "unknown type" typedecl gets ignored for debug info. */
6321 DECL_IGNORED_P (decl) = 1;
6322 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
6323 TYPE_SIZE (type) = TYPE_SIZE (void_type_node);
6324 TYPE_ALIGN (type) = 1;
11cf4d18 6325 TYPE_USER_ALIGN (type) = 0;
036407f7 6326 TYPE_MODE (type) = TYPE_MODE (void_type_node);
68642fb6 6327}
036407f7 6328
d43829f9
MM
6329/* An string for which we should create an IDENTIFIER_NODE at
6330 startup. */
6331
6332typedef struct predefined_identifier
6333{
6334 /* The name of the identifier. */
8b60264b 6335 const char *const name;
d43829f9 6336 /* The place where the IDENTIFIER_NODE should be stored. */
8b60264b 6337 tree *const node;
298d6f60 6338 /* Non-zero if this is the name of a constructor or destructor. */
8b60264b 6339 const int ctor_or_dtor_p;
d43829f9
MM
6340} predefined_identifier;
6341
6342/* Create all the predefined identifiers. */
6343
6344static void
5362b086 6345initialize_predefined_identifiers ()
d43829f9 6346{
8b60264b 6347 const predefined_identifier *pid;
d43829f9
MM
6348
6349 /* A table of identifiers to create at startup. */
8b60264b 6350 static const predefined_identifier predefined_identifiers[] = {
298d6f60
MM
6351 { "C++", &lang_name_cplusplus, 0 },
6352 { "C", &lang_name_c, 0 },
6353 { "Java", &lang_name_java, 0 },
6354 { CTOR_NAME, &ctor_identifier, 1 },
6355 { "__base_ctor", &base_ctor_identifier, 1 },
6356 { "__comp_ctor", &complete_ctor_identifier, 1 },
6357 { DTOR_NAME, &dtor_identifier, 1 },
6358 { "__comp_dtor", &complete_dtor_identifier, 1 },
6359 { "__base_dtor", &base_dtor_identifier, 1 },
6360 { "__deleting_dtor", &deleting_dtor_identifier, 1 },
298d6f60 6361 { IN_CHARGE_NAME, &in_charge_identifier, 0 },
298d6f60
MM
6362 { "nelts", &nelts_identifier, 0 },
6363 { THIS_NAME, &this_identifier, 0 },
c4372ef4 6364 { VTABLE_DELTA_NAME, &delta_identifier, 0 },
298d6f60 6365 { VTABLE_PFN_NAME, &pfn_identifier, 0 },
298d6f60 6366 { "_vptr", &vptr_identifier, 0 },
3ec6bad3 6367 { "__vtt_parm", &vtt_parm_identifier, 0 },
1f6e1acc 6368 { "std", &std_identifier, 0 },
298d6f60 6369 { NULL, NULL, 0 }
d43829f9
MM
6370 };
6371
6372 for (pid = predefined_identifiers; pid->name; ++pid)
298d6f60
MM
6373 {
6374 *pid->node = get_identifier (pid->name);
6375 if (pid->ctor_or_dtor_p)
6376 IDENTIFIER_CTOR_OR_DTOR_P (*pid->node) = 1;
6377 }
d43829f9
MM
6378}
6379
8d08fdba
MS
6380/* Create the predefined scalar types of C,
6381 and some nodes representing standard constants (0, 1, (void *)0).
6382 Initialize the global binding level.
6383 Make definitions for built-in primitive functions. */
6384
6385void
f5e99456 6386cxx_init_decl_processing ()
8d08fdba 6387{
10841285
MM
6388 tree void_ftype;
6389 tree void_ftype_ptr;
8d08fdba 6390
d43829f9
MM
6391 /* Create all the identifiers we need. */
6392 initialize_predefined_identifiers ();
8d08fdba 6393
8f17b5c5 6394 /* Fill in back-end hooks. */
a8f73d4b
MM
6395 init_lang_status = &push_cp_function_context;
6396 free_lang_status = &pop_cp_function_context;
b4b8bee7 6397 mark_lang_status = &mark_cp_function_context;
d363e7bf 6398 lang_missing_noreturn_ok_p = &cp_missing_noreturn_ok_p;
99dccabc 6399
fc6af6e3
RH
6400 cp_parse_init ();
6401 init_decl2 ();
9cd64686 6402 init_pt ();
fc6af6e3 6403
9cd64686
MM
6404 /* Create the global variables. */
6405 push_to_top_level ();
8012c983 6406
2c73f9f5 6407 /* Enter the global namespace. */
30394414 6408 my_friendly_assert (global_namespace == NULL_TREE, 375);
30394414
JM
6409 push_namespace (get_identifier ("::"));
6410 global_namespace = current_namespace;
6411 current_lang_name = NULL_TREE;
6412
bccd95ae 6413 /* Adjust various flags based on command-line settings. */
2642b9bf
JM
6414 if (! flag_permissive && ! pedantic)
6415 flag_pedantic_errors = 1;
bccd95ae 6416 if (!flag_no_inline)
b850de4f
MM
6417 {
6418 flag_inline_trees = 1;
6419 flag_no_inline = 1;
6420 }
acc72c37
MM
6421 if (flag_inline_functions)
6422 {
6423 flag_inline_trees = 2;
6424 flag_inline_functions = 0;
6425 }
830fcda8 6426
0b1161fc
MM
6427 /* In C++, we never create builtin functions whose name does not
6428 begin with `__'. Users should be using headers to get prototypes
6429 in C++. It would be nice if we could warn when `-fbuiltin' is
6430 used explicitly, but we do not have that information. */
6431 flag_no_builtin = 1;
6432
8d08fdba
MS
6433 /* Initially, C. */
6434 current_lang_name = lang_name_c;
6435
6436 current_function_decl = NULL_TREE;
8d08fdba
MS
6437 current_binding_level = NULL_BINDING_LEVEL;
6438 free_binding_level = NULL_BINDING_LEVEL;
6439
81b3411c
BS
6440 build_common_tree_nodes (flag_signed_char);
6441
8d08fdba
MS
6442 error_mark_list = build_tree_list (error_mark_node, error_mark_node);
6443 TREE_TYPE (error_mark_list) = error_mark_node;
6444
a28e3c7f
MS
6445 /* Make the binding_level structure for global names. */
6446 pushlevel (0);
8d08fdba 6447 global_binding_level = current_binding_level;
2c73f9f5
ML
6448 /* The global level is the namespace level of ::. */
6449 NAMESPACE_LEVEL (global_namespace) = global_binding_level;
6450 declare_namespace_level ();
8d08fdba 6451
6bcedb4e 6452 /* Create the `std' namespace. */
1dbb6023
NS
6453 push_namespace (std_identifier);
6454 std_node = current_namespace;
6455 pop_namespace ();
5362b086 6456
6431177a
JM
6457 lang_attribute_table = cp_attribute_table;
6458
eaa7c03f 6459 c_common_nodes_and_builtins ();
37c46b43 6460
4d8a1dd6
MM
6461 java_byte_type_node = record_builtin_java_type ("__java_byte", 8);
6462 java_short_type_node = record_builtin_java_type ("__java_short", 16);
6463 java_int_type_node = record_builtin_java_type ("__java_int", 32);
6464 java_long_type_node = record_builtin_java_type ("__java_long", 64);
6465 java_float_type_node = record_builtin_java_type ("__java_float", -32);
6466 java_double_type_node = record_builtin_java_type ("__java_double", -64);
6467 java_char_type_node = record_builtin_java_type ("__java_char", -16);
6468 java_boolean_type_node = record_builtin_java_type ("__java_boolean", -1);
eff71ab0 6469
8d08fdba
MS
6470 integer_two_node = build_int_2 (2, 0);
6471 TREE_TYPE (integer_two_node) = integer_type_node;
6472 integer_three_node = build_int_2 (3, 0);
6473 TREE_TYPE (integer_three_node) = integer_type_node;
8d08fdba 6474
255512c1
JM
6475 boolean_type_node = make_unsigned_type (BOOL_TYPE_SIZE);
6476 TREE_SET_CODE (boolean_type_node, BOOLEAN_TYPE);
c1ea6a0b
BK
6477 TYPE_MAX_VALUE (boolean_type_node) = build_int_2 (1, 0);
6478 TREE_TYPE (TYPE_MAX_VALUE (boolean_type_node)) = boolean_type_node;
6479 TYPE_PRECISION (boolean_type_node) = 1;
255512c1
JM
6480 record_builtin_type (RID_BOOL, "bool", boolean_type_node);
6481 boolean_false_node = build_int_2 (0, 0);
6482 TREE_TYPE (boolean_false_node) = boolean_type_node;
6483 boolean_true_node = build_int_2 (1, 0);
6484 TREE_TYPE (boolean_true_node) = boolean_type_node;
2986ae00 6485
ff0bee63 6486 signed_size_zero_node = build_int_2 (0, 0);
e92cc029
MS
6487 TREE_TYPE (signed_size_zero_node) = make_signed_type (TYPE_PRECISION (sizetype));
6488
4cc1d462 6489 empty_except_spec = build_tree_list (NULL_TREE, NULL_TREE);
5fd8e536
JM
6490
6491#if 0
3e411c3f 6492 record_builtin_type (RID_MAX, NULL, string_type_node);
5fd8e536
JM
6493#endif
6494
1f84ec23
MM
6495 delta_type_node = ptrdiff_type_node;
6496 vtable_index_type = ptrdiff_type_node;
c7e266a6 6497
3ec6bad3 6498 vtt_parm_type = build_pointer_type (const_ptr_type_node);
356955cf 6499 lang_type_promotes_to = convert_type_from_ellipsis;
7f4edbcb 6500
10841285
MM
6501 void_ftype = build_function_type (void_type_node, void_list_node);
6502 void_ftype_ptr = build_function_type (void_type_node,
6503 tree_cons (NULL_TREE,
6504 ptr_type_node,
6505 void_list_node));
824b9a4c 6506 void_ftype_ptr
4cc1d462 6507 = build_exception_variant (void_ftype_ptr, empty_except_spec);
8d08fdba 6508
8d08fdba
MS
6509 /* C++ extensions */
6510
6511 unknown_type_node = make_node (UNKNOWN_TYPE);
036407f7
ML
6512 record_unknown_type (unknown_type_node, "unknown type");
6513
8d08fdba
MS
6514 /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node. */
6515 TREE_TYPE (unknown_type_node) = unknown_type_node;
a6967cc0 6516
a6967cc0
JM
6517 /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
6518 result. */
8d08fdba
MS
6519 TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
6520 TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
6521
c4372ef4
NS
6522 {
6523 /* Make sure we get a unique function type, so we can give
6524 its pointer type a name. (This wins for gdb.) */
6525 tree vfunc_type = make_node (FUNCTION_TYPE);
6526 TREE_TYPE (vfunc_type) = integer_type_node;
6527 TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
6528 layout_type (vfunc_type);
6529
6530 vtable_entry_type = build_pointer_type (vfunc_type);
6531 }
0e5921e8 6532 record_builtin_type (RID_MAX, VTBL_PTR_TYPE, vtable_entry_type);
8d08fdba 6533
8d08fdba 6534 vtbl_type_node
52bf7d5d 6535 = build_cplus_array_type (vtable_entry_type, NULL_TREE);
8d08fdba 6536 layout_type (vtbl_type_node);
91063b51 6537 vtbl_type_node = build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
3e411c3f 6538 record_builtin_type (RID_MAX, NULL, vtbl_type_node);
849da744
MM
6539 vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
6540 layout_type (vtbl_ptr_type_node);
3e411c3f 6541 record_builtin_type (RID_MAX, NULL, vtbl_ptr_type_node);
8d08fdba 6542
1f84ec23
MM
6543 push_namespace (get_identifier ("__cxxabiv1"));
6544 abi_node = current_namespace;
6545 pop_namespace ();
6633d636 6546
2c73f9f5 6547 global_type_node = make_node (LANG_TYPE);
036407f7 6548 record_unknown_type (global_type_node, "global type");
2c73f9f5 6549
db5ae43f
MS
6550 /* Now, C++. */
6551 current_lang_name = lang_name_cplusplus;
8d08fdba 6552
ced78d8b 6553 {
2c73f9f5 6554 tree bad_alloc_type_node, newtype, deltype;
10841285
MM
6555 tree ptr_ftype_sizetype;
6556
1dbb6023 6557 push_namespace (std_identifier);
2c73f9f5 6558 bad_alloc_type_node = xref_tag
ca107ded 6559 (class_type_node, get_identifier ("bad_alloc"), 1);
1dbb6023 6560 pop_namespace ();
10841285
MM
6561 ptr_ftype_sizetype
6562 = build_function_type (ptr_type_node,
6563 tree_cons (NULL_TREE,
6564 c_size_type_node,
6565 void_list_node));
2c73f9f5 6566 newtype = build_exception_variant
0ba8a114
NS
6567 (ptr_ftype_sizetype, add_exception_specifier
6568 (NULL_TREE, bad_alloc_type_node, -1));
4cc1d462 6569 deltype = build_exception_variant (void_ftype_ptr, empty_except_spec);
596ea4e5
AS
6570 push_cp_library_fn (NEW_EXPR, newtype);
6571 push_cp_library_fn (VEC_NEW_EXPR, newtype);
6572 global_delete_fndecl = push_cp_library_fn (DELETE_EXPR, deltype);
6573 push_cp_library_fn (VEC_DELETE_EXPR, deltype);
ced78d8b 6574 }
8d08fdba
MS
6575
6576 abort_fndecl
1f84ec23 6577 = build_library_fn_ptr ("__cxa_pure_virtual", void_ftype);
8d08fdba 6578
8d08fdba
MS
6579 /* Perform other language dependent initializations. */
6580 init_class_processing ();
6581 init_init_processing ();
6582 init_search_processing ();
db48b831 6583 init_rtti_processing ();
8d08fdba 6584
6467930b 6585 if (flag_exceptions)
8d2733ca 6586 init_exception_processing ();
9e9ff709 6587
7fcdf4c2 6588 if (! supports_one_only ())
72b7eeff 6589 flag_weak = 0;
8d08fdba 6590
2ce07e2d 6591 make_fname_decl = cp_make_fname_decl;
0ba8a114 6592 start_fname_decls ();
8d08fdba 6593
e9a25f70
JL
6594 /* Show we use EH for cleanups. */
6595 using_eh_for_cleanups ();
62c154ed 6596
d9cf7c82
JM
6597 /* Maintain consistency. Perhaps we should just complain if they
6598 say -fwritable-strings? */
6599 if (flag_writable_strings)
6600 flag_const_strings = 0;
fc6af6e3
RH
6601
6602 /* Add GC roots for all of our global variables. */
6603 ggc_add_tree_root (c_global_trees, sizeof c_global_trees / sizeof(tree));
6604 ggc_add_tree_root (cp_global_trees, sizeof cp_global_trees / sizeof(tree));
fc6af6e3
RH
6605 ggc_add_tree_root (&integer_three_node, 1);
6606 ggc_add_tree_root (&integer_two_node, 1);
fc6af6e3 6607 ggc_add_tree_root (&signed_size_zero_node, 1);
fc6af6e3
RH
6608 ggc_add_tree_root (&size_one_node, 1);
6609 ggc_add_tree_root (&size_zero_node, 1);
fc6af6e3
RH
6610 ggc_add_root (&global_binding_level, 1, sizeof global_binding_level,
6611 mark_binding_level);
9cd64686 6612 ggc_add_root (&scope_chain, 1, sizeof scope_chain, &mark_saved_scope);
fc6af6e3
RH
6613 ggc_add_tree_root (&static_ctors, 1);
6614 ggc_add_tree_root (&static_dtors, 1);
9cd64686 6615 ggc_add_tree_root (&lastiddecl, 1);
fc6af6e3 6616
9cd64686 6617 ggc_add_tree_root (&last_function_parms, 1);
fc6af6e3 6618 ggc_add_tree_root (&error_mark_list, 1);
9cd64686 6619
fc6af6e3 6620 ggc_add_tree_root (&global_namespace, 1);
fc6af6e3
RH
6621 ggc_add_tree_root (&global_type_node, 1);
6622 ggc_add_tree_root (&anonymous_namespace_name, 1);
9cd64686
MM
6623
6624 ggc_add_tree_root (&got_object, 1);
6625 ggc_add_tree_root (&got_scope, 1);
6626
6627 ggc_add_tree_root (&current_lang_name, 1);
6628 ggc_add_tree_root (&static_aggregates, 1);
4890c2f4 6629 ggc_add_tree_root (&free_bindings, 1);
62c154ed
JM
6630}
6631
0ba8a114
NS
6632/* Generate an initializer for a function naming variable from
6633 NAME. NAME may be NULL, in which case we generate a special
6634 ERROR_MARK node which should be replaced later. */
6635
6636tree
6637cp_fname_init (name)
6638 const char *name;
6639{
6640 tree domain = NULL_TREE;
6641 tree type;
6642 tree init = NULL_TREE;
6643 size_t length = 0;
6644
6645 if (name)
6646 {
6647 length = strlen (name);
6648 domain = build_index_type (size_int (length));
6649 init = build_string (length + 1, name);
6650 }
6651
6652 type = build_qualified_type (char_type_node, TYPE_QUAL_CONST);
6653 type = build_cplus_array_type (type, domain);
6654
6655 if (init)
6656 TREE_TYPE (init) = type;
6657 else
6658 /* We don't know the value until instantiation time. Make
6659 something which will be digested now, but replaced later. */
6660 init = build (ERROR_MARK, type);
6661
6662 return init;
6663}
6664
2ce07e2d
NS
6665/* Create the VAR_DECL for __FUNCTION__ etc. ID is the name to give the
6666 decl, NAME is the initialization string and TYPE_DEP indicates whether
6667 NAME depended on the type of the function. We make use of that to detect
0ba8a114
NS
6668 __PRETTY_FUNCTION__ inside a template fn. This is being done
6669 lazily at the point of first use, so we musn't push the decl now. */
2ce07e2d
NS
6670
6671static tree
0ba8a114 6672cp_make_fname_decl (id, type_dep)
2ce07e2d 6673 tree id;
2ce07e2d
NS
6674 int type_dep;
6675{
83182544 6676 const char *const name = (type_dep && processing_template_decl
0ba8a114
NS
6677 ? NULL : fname_as_string (type_dep));
6678 tree init = cp_fname_init (name);
6679 tree decl = build_decl (VAR_DECL, id, TREE_TYPE (init));
2ce07e2d 6680
0ba8a114
NS
6681 /* As we don't push the decl here, we must set the context. */
6682 DECL_CONTEXT (decl) = current_function_decl;
6683 DECL_PRETTY_FUNCTION_P (decl) = type_dep;
6684
2ce07e2d
NS
6685 TREE_STATIC (decl) = 1;
6686 TREE_READONLY (decl) = 1;
2ce07e2d 6687 DECL_ARTIFICIAL (decl) = 1;
2ce07e2d 6688 DECL_INITIAL (decl) = init;
0ba8a114
NS
6689
6690 TREE_USED (decl) = 1;
5362b086 6691
0ba8a114
NS
6692 cp_finish_decl (decl, init, NULL_TREE, LOOKUP_ONLYCONVERTING);
6693
2ce07e2d
NS
6694 return decl;
6695}
6696
0c11ada6
JM
6697/* Entry point for the benefit of c_common_nodes_and_builtins.
6698
6699 Make a definition for a builtin function named NAME and whose data type
8d08fdba 6700 is TYPE. TYPE should be a function type with argument types.
8d08fdba 6701
0c11ada6
JM
6702 CLASS and CODE tell later passes how to compile calls to this function.
6703 See tree.h for possible values.
6704
6705 If LIBNAME is nonzero, use that for DECL_ASSEMBLER_NAME,
8d08fdba
MS
6706 the name to be called if we can't opencode the function. */
6707
6708tree
0c11ada6 6709builtin_function (name, type, code, class, libname)
d8e178a0 6710 const char *name;
8d08fdba 6711 tree type;
0c11ada6
JM
6712 int code;
6713 enum built_in_class class;
6714 const char *libname;
8d08fdba 6715{
596ea4e5 6716 tree decl = build_library_fn_1 (get_identifier (name), ERROR_MARK, type);
0c11ada6
JM
6717 DECL_BUILT_IN_CLASS (decl) = class;
6718 DECL_FUNCTION_CODE (decl) = code;
12a22e76 6719
2c73f9f5 6720 my_friendly_assert (DECL_CONTEXT (decl) == NULL_TREE, 392);
2c73f9f5 6721
6bcedb4e
MM
6722 /* All builtins that don't begin with an `_' should go in the `std'
6723 namespace. */
1dbb6023 6724 if (name[0] != '_')
6bcedb4e
MM
6725 {
6726 push_namespace (std_identifier);
6727 DECL_CONTEXT (decl) = std_node;
6728 }
6729 pushdecl (decl);
1dbb6023 6730 if (name[0] != '_')
6bcedb4e
MM
6731 pop_namespace ();
6732
8d08fdba
MS
6733 /* Since `pushdecl' relies on DECL_ASSEMBLER_NAME instead of DECL_NAME,
6734 we cannot change DECL_ASSEMBLER_NAME until we have installed this
6735 function in the namespace. */
0c11ada6 6736 if (libname)
92643fea
MM
6737 SET_DECL_ASSEMBLER_NAME (decl, get_identifier (libname));
6738 make_decl_rtl (decl, NULL);
935d1834
ZW
6739
6740 /* Warn if a function in the namespace for users
6741 is used without an occasion to consider it declared. */
6742 if (name[0] != '_' || name[1] != '_')
6743 DECL_ANTICIPATED (decl) = 1;
6744
6431177a
JM
6745 /* Possibly apply some default attributes to this built-in function. */
6746 decl_attributes (&decl, NULL_TREE, 0);
6747
8d08fdba
MS
6748 return decl;
6749}
7f4edbcb 6750
0c11ada6
JM
6751/* Generate a FUNCTION_DECL with the typical flags for a runtime library
6752 function. Not called directly. */
6753
6754static tree
596ea4e5 6755build_library_fn_1 (name, operator_code, type)
0c11ada6 6756 tree name;
596ea4e5 6757 enum tree_code operator_code;
0c11ada6
JM
6758 tree type;
6759{
6760 tree fn = build_lang_decl (FUNCTION_DECL, name, type);
6761 DECL_EXTERNAL (fn) = 1;
6762 TREE_PUBLIC (fn) = 1;
6763 DECL_ARTIFICIAL (fn) = 1;
6764 TREE_NOTHROW (fn) = 1;
596ea4e5 6765 SET_OVERLOADED_OPERATOR_CODE (fn, operator_code);
5d2ed28c 6766 SET_DECL_LANGUAGE (fn, lang_c);
0c11ada6
JM
6767 return fn;
6768}
c2a37c55 6769
0c11ada6
JM
6770/* Returns the _DECL for a library function with C linkage.
6771 We assume that such functions never throw; if this is incorrect,
6772 callers should unset TREE_NOTHROW. */
c2a37c55 6773
7f4edbcb 6774tree
0c11ada6
JM
6775build_library_fn (name, type)
6776 tree name;
6777 tree type;
6778{
19e7881c 6779 return build_library_fn_1 (name, ERROR_MARK, type);
0c11ada6
JM
6780}
6781
6782/* Returns the _DECL for a library function with C++ linkage. */
6783
596ea4e5
AS
6784static tree
6785build_cp_library_fn (name, operator_code, type)
0c11ada6 6786 tree name;
596ea4e5 6787 enum tree_code operator_code;
0c11ada6
JM
6788 tree type;
6789{
596ea4e5 6790 tree fn = build_library_fn_1 (name, operator_code, type);
0c11ada6 6791 TREE_NOTHROW (fn) = TYPE_NOTHROW_P (type);
6bbf1598 6792 DECL_CONTEXT (fn) = FROB_CONTEXT (current_namespace);
5d2ed28c 6793 SET_DECL_LANGUAGE (fn, lang_cplusplus);
0c11ada6 6794 set_mangled_name_for_decl (fn);
0c11ada6
JM
6795 return fn;
6796}
6797
6798/* Like build_library_fn, but takes a C string instead of an
6799 IDENTIFIER_NODE. */
6800
6801tree
6802build_library_fn_ptr (name, type)
7f4edbcb
BS
6803 const char *name;
6804 tree type;
7f4edbcb 6805{
0c11ada6
JM
6806 return build_library_fn (get_identifier (name), type);
6807}
6808
6809/* Like build_cp_library_fn, but takes a C string instead of an
6810 IDENTIFIER_NODE. */
6811
6812tree
6813build_cp_library_fn_ptr (name, type)
6814 const char *name;
6815 tree type;
6816{
596ea4e5 6817 return build_cp_library_fn (get_identifier (name), ERROR_MARK, type);
0c11ada6
JM
6818}
6819
6820/* Like build_library_fn, but also pushes the function so that we will
6821 be able to find it via IDENTIFIER_GLOBAL_VALUE. */
6822
6823tree
6824push_library_fn (name, type)
6825 tree name, type;
6826{
6827 tree fn = build_library_fn (name, type);
6828 pushdecl_top_level (fn);
6829 return fn;
6830}
6831
6832/* Like build_cp_library_fn, but also pushes the function so that it
6833 will be found by normal lookup. */
6834
596ea4e5
AS
6835static tree
6836push_cp_library_fn (operator_code, type)
6837 enum tree_code operator_code;
0c11ada6
JM
6838 tree type;
6839{
5362b086 6840 tree fn = build_cp_library_fn (ansi_opname (operator_code),
596ea4e5
AS
6841 operator_code,
6842 type);
0c11ada6
JM
6843 pushdecl (fn);
6844 return fn;
6845}
6846
6847/* Like push_library_fn, but takes a TREE_LIST of parm types rather than
6848 a FUNCTION_TYPE. */
6849
6850tree
6851push_void_library_fn (name, parmtypes)
6852 tree name, parmtypes;
6853{
6854 tree type = build_function_type (void_type_node, parmtypes);
6855 return push_library_fn (name, type);
6856}
6857
cf74fb86 6858/* Like push_library_fn, but also note that this function throws
0c11ada6
JM
6859 and does not return. Used for __throw_foo and the like. */
6860
6861tree
cf74fb86
JM
6862push_throw_library_fn (name, type)
6863 tree name, type;
0c11ada6 6864{
cf74fb86 6865 tree fn = push_library_fn (name, type);
0c11ada6
JM
6866 TREE_THIS_VOLATILE (fn) = 1;
6867 TREE_NOTHROW (fn) = 0;
6868 return fn;
7f4edbcb 6869}
6431177a
JM
6870
6871/* Apply default attributes to a function, if a system function with default
6872 attributes. */
6873
6874void
6875insert_default_attributes (decl)
6876 tree decl;
6877{
6878 if (!DECL_EXTERN_C_FUNCTION_P (decl))
6879 return;
6880 if (!TREE_PUBLIC (decl))
6881 return;
6882 c_common_insert_default_attributes (decl);
6883}
8d08fdba 6884\f
61a127b3
MM
6885/* When we call finish_struct for an anonymous union, we create
6886 default copy constructors and such. But, an anonymous union
6887 shouldn't have such things; this function undoes the damage to the
6888 anonymous union type T.
6889
6890 (The reason that we create the synthesized methods is that we don't
6891 distinguish `union { int i; }' from `typedef union { int i; } U'.
6892 The first is an anonymous union; the second is just an ordinary
6893 union type.) */
6894
6895void
6bdb8141 6896fixup_anonymous_aggr (t)
61a127b3
MM
6897 tree t;
6898{
6899 tree *q;
6900
6901 /* Wipe out memory of synthesized methods */
6902 TYPE_HAS_CONSTRUCTOR (t) = 0;
6903 TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
6904 TYPE_HAS_INIT_REF (t) = 0;
6905 TYPE_HAS_CONST_INIT_REF (t) = 0;
6906 TYPE_HAS_ASSIGN_REF (t) = 0;
61a127b3
MM
6907 TYPE_HAS_CONST_ASSIGN_REF (t) = 0;
6908
6909 /* Splice the implicitly generated functions out of the TYPE_METHODS
6910 list. */
6911 q = &TYPE_METHODS (t);
6912 while (*q)
6913 {
6914 if (DECL_ARTIFICIAL (*q))
6915 *q = TREE_CHAIN (*q);
6916 else
6917 q = &TREE_CHAIN (*q);
6918 }
6919
cab1f180 6920 /* ISO C++ 9.5.3. Anonymous unions may not have function members. */
61a127b3 6921 if (TYPE_METHODS (t))
1f0d71c5 6922 cp_error_at ("an anonymous union cannot have function members", t);
a1c2b86d
JJ
6923
6924 /* Anonymous aggregates cannot have fields with ctors, dtors or complex
6925 assignment operators (because they cannot have these methods themselves).
6926 For anonymous unions this is already checked because they are not allowed
6927 in any union, otherwise we have to check it. */
6928 if (TREE_CODE (t) != UNION_TYPE)
6929 {
6930 tree field, type;
6931
6932 for (field = TYPE_FIELDS (t); field; field = TREE_CHAIN (field))
6933 if (TREE_CODE (field) == FIELD_DECL)
6934 {
6935 type = TREE_TYPE (field);
6936 if (CLASS_TYPE_P (type))
6937 {
6938 if (TYPE_NEEDS_CONSTRUCTING (type))
6939 cp_error_at ("member %#D' with constructor not allowed in anonymous aggregate",
6940 field);
6941 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
6942 cp_error_at ("member %#D' with destructor not allowed in anonymous aggregate",
6943 field);
6944 if (TYPE_HAS_COMPLEX_ASSIGN_REF (type))
6945 cp_error_at ("member %#D' with copy assignment operator not allowed in anonymous aggregate",
6946 field);
6947 }
6948 }
6949 }
61a127b3
MM
6950}
6951
72a93143
JM
6952/* Make sure that a declaration with no declarator is well-formed, i.e.
6953 just defines a tagged type or anonymous union.
8d08fdba 6954
72a93143 6955 Returns the type defined, if any. */
8d08fdba 6956
72a93143
JM
6957tree
6958check_tag_decl (declspecs)
8d08fdba
MS
6959 tree declspecs;
6960{
72a93143 6961 int found_type = 0;
2bdb0643 6962 int saw_friend = 0;
e8186ecf 6963 int saw_typedef = 0;
2986ae00 6964 tree ob_modifier = NULL_TREE;
8d08fdba 6965 register tree link;
8d08fdba
MS
6966 register tree t = NULL_TREE;
6967
6968 for (link = declspecs; link; link = TREE_CHAIN (link))
6969 {
6970 register tree value = TREE_VALUE (link);
6971
2bdb0643 6972 if (TYPE_P (value)
bd0d5d4a 6973 || TREE_CODE (value) == TYPE_DECL
2bdb0643
JM
6974 || (TREE_CODE (value) == IDENTIFIER_NODE
6975 && IDENTIFIER_GLOBAL_VALUE (value)
bd0d5d4a 6976 && TREE_CODE (IDENTIFIER_GLOBAL_VALUE (value)) == TYPE_DECL))
8d08fdba 6977 {
72a93143 6978 ++found_type;
5566b478 6979
bd0d5d4a
JM
6980 if (found_type == 2 && TREE_CODE (value) == IDENTIFIER_NODE)
6981 {
6982 if (! in_system_header)
33bd39a2 6983 pedwarn ("redeclaration of C++ built-in type `%T'", value);
bd0d5d4a
JM
6984 return NULL_TREE;
6985 }
6986
6987 if (TYPE_P (value)
6988 && ((TREE_CODE (value) != TYPENAME_TYPE && IS_AGGR_TYPE (value))
6989 || TREE_CODE (value) == ENUMERAL_TYPE))
72a93143
JM
6990 {
6991 my_friendly_assert (TYPE_MAIN_DECL (value) != NULL_TREE, 261);
6992 t = value;
6993 }
8d08fdba 6994 }
e8186ecf
GDR
6995 else if (value == ridpointers[(int) RID_TYPEDEF])
6996 saw_typedef = 1;
83f660b7
JM
6997 else if (value == ridpointers[(int) RID_FRIEND])
6998 {
83f660b7
JM
6999 if (current_class_type == NULL_TREE
7000 || current_scope () != current_class_type)
7001 ob_modifier = value;
2bdb0643
JM
7002 else
7003 saw_friend = 1;
83f660b7 7004 }
8d08fdba 7005 else if (value == ridpointers[(int) RID_STATIC]
2986ae00
MS
7006 || value == ridpointers[(int) RID_EXTERN]
7007 || value == ridpointers[(int) RID_AUTO]
28cbf42c
MS
7008 || value == ridpointers[(int) RID_REGISTER]
7009 || value == ridpointers[(int) RID_INLINE]
7010 || value == ridpointers[(int) RID_VIRTUAL]
72a93143
JM
7011 || value == ridpointers[(int) RID_CONST]
7012 || value == ridpointers[(int) RID_VOLATILE]
28cbf42c 7013 || value == ridpointers[(int) RID_EXPLICIT])
2986ae00 7014 ob_modifier = value;
8d08fdba
MS
7015 }
7016
72a93143
JM
7017 if (found_type > 1)
7018 error ("multiple types in one declaration");
7e2067ca 7019
2bdb0643 7020 if (t == NULL_TREE && ! saw_friend)
7e2067ca 7021 pedwarn ("declaration does not declare anything");
0dd3962d 7022
1951a1b6 7023 /* Check for an anonymous union. */
6bdb8141 7024 else if (t && IS_AGGR_TYPE_CODE (TREE_CODE (t))
1951a1b6 7025 && TYPE_ANONYMOUS_P (t))
0dd3962d 7026 {
e8186ecf
GDR
7027 /* 7/3 In a simple-declaration, the optional init-declarator-list
7028 can be omitted only when declaring a class (clause 9) or
7029 enumeration (7.2), that is, when the decl-specifier-seq contains
7030 either a class-specifier, an elaborated-type-specifier with
7031 a class-key (9.1), or an enum-specifier. In these cases and
7032 whenever a class-specifier or enum-specifier is present in the
7033 decl-specifier-seq, the identifiers in these specifiers are among
7034 the names being declared by the declaration (as class-name,
7035 enum-names, or enumerators, depending on the syntax). In such
7036 cases, and except for the declaration of an unnamed bit-field (9.6),
7037 the decl-specifier-seq shall introduce one or more names into the
7038 program, or shall redeclare a name introduced by a previous
7039 declaration. [Example:
7040 enum { }; // ill-formed
7041 typedef class { }; // ill-formed
7042 --end example] */
7043 if (saw_typedef)
7044 {
357351e5 7045 error ("missing type-name in typedef-declaration");
e8186ecf
GDR
7046 return NULL_TREE;
7047 }
0dd3962d 7048 /* Anonymous unions are objects, so they can have specifiers. */;
6bdb8141
JM
7049 SET_ANON_AGGR_TYPE_P (t);
7050
7051 if (TREE_CODE (t) != UNION_TYPE && pedantic && ! in_system_header)
7052 pedwarn ("ISO C++ prohibits anonymous structs");
0dd3962d
JM
7053 }
7054
83f660b7 7055 else if (ob_modifier)
8d08fdba 7056 {
83f660b7
JM
7057 if (ob_modifier == ridpointers[(int) RID_INLINE]
7058 || ob_modifier == ridpointers[(int) RID_VIRTUAL])
33bd39a2 7059 error ("`%D' can only be specified for functions", ob_modifier);
83f660b7 7060 else if (ob_modifier == ridpointers[(int) RID_FRIEND])
33bd39a2 7061 error ("`%D' can only be specified inside a class", ob_modifier);
83f660b7 7062 else if (ob_modifier == ridpointers[(int) RID_EXPLICIT])
33bd39a2 7063 error ("`%D' can only be specified for constructors",
83f660b7
JM
7064 ob_modifier);
7065 else
33bd39a2 7066 error ("`%D' can only be specified for objects and functions",
83f660b7 7067 ob_modifier);
72a93143 7068 }
8d08fdba 7069
72a93143
JM
7070 return t;
7071}
7072
7073/* Called when a declaration is seen that contains no names to declare.
7074 If its type is a reference to a structure, union or enum inherited
7075 from a containing scope, shadow that tag name for the current scope
7076 with a forward reference.
7077 If its type defines a new named structure or union
7078 or defines an enum, it is valid but we need not do anything here.
7079 Otherwise, it is an error.
7080
7081 C++: may have to grok the declspecs to learn about static,
7082 complain for anonymous unions. */
7083
7084void
7085shadow_tag (declspecs)
7086 tree declspecs;
7087{
7088 tree t = check_tag_decl (declspecs);
7089
7090 if (t)
7091 maybe_process_partial_specialization (t);
7092
7093 /* This is where the variables in an anonymous union are
7094 declared. An anonymous union declaration looks like:
7095 union { ... } ;
7096 because there is no declarator after the union, the parser
7097 sends that declaration here. */
6bdb8141 7098 if (t && ANON_AGGR_TYPE_P (t))
72a93143 7099 {
6bdb8141 7100 fixup_anonymous_aggr (t);
72a93143
JM
7101
7102 if (TYPE_FIELDS (t))
7103 {
7104 tree decl = grokdeclarator (NULL_TREE, declspecs, NORMAL, 0,
91d231cb 7105 NULL);
72a93143
JM
7106 finish_anon_union (decl);
7107 }
8d08fdba
MS
7108 }
7109}
7110\f
7111/* Decode a "typename", such as "int **", returning a ..._TYPE node. */
7112
7113tree
7114groktypename (typename)
7115 tree typename;
7116{
7117 if (TREE_CODE (typename) != TREE_LIST)
7118 return typename;
7119 return grokdeclarator (TREE_VALUE (typename),
7120 TREE_PURPOSE (typename),
91d231cb 7121 TYPENAME, 0, NULL);
8d08fdba
MS
7122}
7123
7124/* Decode a declarator in an ordinary declaration or data definition.
7125 This is called as soon as the type information and variable name
7126 have been parsed, before parsing the initializer if any.
7127 Here we create the ..._DECL node, fill in its type,
7128 and put it on the list of decls for the current context.
7129 The ..._DECL node is returned as the value.
7130
7131 Exception: for arrays where the length is not specified,
82580166 7132 the type is left null, to be filled in by `cp_finish_decl'.
8d08fdba
MS
7133
7134 Function definitions do not come here; they go to start_function
7135 instead. However, external and forward declarations of functions
7136 do go through here. Structure field declarations are done by
7137 grokfield and not through here. */
7138
8d08fdba 7139tree
a1774733 7140start_decl (declarator, declspecs, initialized, attributes, prefix_attributes)
8d08fdba
MS
7141 tree declarator, declspecs;
7142 int initialized;
a1774733 7143 tree attributes, prefix_attributes;
8d08fdba 7144{
59387d2e 7145 tree decl;
8d08fdba
MS
7146 register tree type, tem;
7147 tree context;
7148 extern int have_extern_spec;
7149 extern int used_extern_spec;
7150
5566b478
MS
7151#if 0
7152 /* See code below that used this. */
8d08fdba 7153 int init_written = initialized;
5566b478 7154#endif
8d08fdba 7155
e92cc029 7156 /* This should only be done once on the top most decl. */
8d08fdba
MS
7157 if (have_extern_spec && !used_extern_spec)
7158 {
1f8f4a0b
MM
7159 declspecs = tree_cons (NULL_TREE, get_identifier ("extern"),
7160 declspecs);
8d08fdba
MS
7161 used_extern_spec = 1;
7162 }
7163
91d231cb 7164 attributes = chainon (attributes, prefix_attributes);
b17e2870 7165
c11b6f21 7166 decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
91d231cb 7167 &attributes);
68642fb6 7168
a1774733 7169 if (decl == NULL_TREE || TREE_CODE (decl) == VOID_TYPE)
8d08fdba
MS
7170 return NULL_TREE;
7171
7172 type = TREE_TYPE (decl);
7173
44689c12
ML
7174 if (type == error_mark_node)
7175 return NULL_TREE;
7176
4f1c5b7d 7177 context = DECL_CONTEXT (decl);
8d08fdba 7178
9a68c51f
JM
7179 if (initialized && context && TREE_CODE (context) == NAMESPACE_DECL
7180 && context != current_namespace && TREE_CODE (decl) == VAR_DECL)
7181 {
7182 /* When parsing the initializer, lookup should use the object's
7183 namespace. */
7184 push_decl_namespace (context);
7185 }
7186
2c73f9f5
ML
7187 /* We are only interested in class contexts, later. */
7188 if (context && TREE_CODE (context) == NAMESPACE_DECL)
7189 context = NULL_TREE;
7190
8d08fdba
MS
7191 if (initialized)
7192 /* Is it valid for this decl to have an initializer at all?
7193 If not, set INITIALIZED to zero, which will indirectly
82580166 7194 tell `cp_finish_decl' to ignore the initializer once it is parsed. */
8d08fdba
MS
7195 switch (TREE_CODE (decl))
7196 {
7197 case TYPE_DECL:
7198 /* typedef foo = bar means give foo the same type as bar.
82580166 7199 We haven't parsed bar yet, so `cp_finish_decl' will fix that up.
8d08fdba
MS
7200 Any other case of an initialization in a TYPE_DECL is an error. */
7201 if (pedantic || list_length (declspecs) > 1)
7202 {
33bd39a2 7203 error ("typedef `%D' is initialized", decl);
8d08fdba
MS
7204 initialized = 0;
7205 }
7206 break;
7207
7208 case FUNCTION_DECL:
33bd39a2 7209 error ("function `%#D' is initialized like a variable", decl);
8d08fdba
MS
7210 initialized = 0;
7211 break;
7212
7213 default:
3e41d13b 7214 break;
8d08fdba
MS
7215 }
7216
8d08fdba
MS
7217 if (initialized)
7218 {
a9aedbc2 7219 if (! toplevel_bindings_p ()
8d08fdba 7220 && DECL_EXTERNAL (decl))
33bd39a2 7221 warning ("declaration of `%#D' has `extern' and is initialized",
8d08fdba
MS
7222 decl);
7223 DECL_EXTERNAL (decl) = 0;
5566b478 7224 if (toplevel_bindings_p ())
8d08fdba
MS
7225 TREE_STATIC (decl) = 1;
7226
7227 /* Tell `pushdecl' this is an initialized decl
7228 even though we don't yet have the initializer expression.
82580166 7229 Also tell `cp_finish_decl' it may store the real initializer. */
8d08fdba
MS
7230 DECL_INITIAL (decl) = error_mark_node;
7231 }
7232
fa20888b 7233 /* Set attributes here so if duplicate decl, will have proper attributes. */
91d231cb 7234 cplus_decl_attributes (&decl, attributes, 0);
fa20888b 7235
97055d5c
AO
7236 if (TREE_CODE (decl) == FUNCTION_DECL
7237 && DECL_DECLARED_INLINE_P (decl)
7238 && DECL_UNINLINABLE (decl)
7239 && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl)))
7240 warning_with_decl (decl,
7241 "inline function `%s' given attribute noinline");
7242
d0f062fb 7243 if (context && COMPLETE_TYPE_P (complete_type (context)))
5b605f68 7244 {
6b400b21 7245 push_nested_class (context, 2);
e97e5263 7246
5b605f68
MS
7247 if (TREE_CODE (decl) == VAR_DECL)
7248 {
7249 tree field = lookup_field (context, DECL_NAME (decl), 0, 0);
7250 if (field == NULL_TREE || TREE_CODE (field) != VAR_DECL)
33bd39a2 7251 error ("`%#D' is not a static member of `%#T'", decl, context);
e349ee73
MS
7252 else
7253 {
7254 if (DECL_CONTEXT (field) != context)
f2d773a2 7255 {
33bd39a2 7256 pedwarn ("ISO C++ does not permit `%T::%D' to be defined as `%T::%D'",
f2d773a2
JM
7257 DECL_CONTEXT (field), DECL_NAME (decl),
7258 context, DECL_NAME (decl));
7259 DECL_CONTEXT (decl) = DECL_CONTEXT (field);
7260 }
75650646
MM
7261 /* Static data member are tricky; an in-class initialization
7262 still doesn't provide a definition, so the in-class
7263 declaration will have DECL_EXTERNAL set, but will have an
7264 initialization. Thus, duplicate_decls won't warn
7265 about this situation, and so we check here. */
7266 if (DECL_INITIAL (decl) && DECL_INITIAL (field))
33bd39a2 7267 error ("duplicate initialization of %D", decl);
e349ee73
MS
7268 if (duplicate_decls (decl, field))
7269 decl = field;
7270 }
5b605f68 7271 }
f30432d7
MS
7272 else
7273 {
5566b478 7274 tree field = check_classfn (context, decl);
f30432d7
MS
7275 if (field && duplicate_decls (decl, field))
7276 decl = field;
7277 }
7278
7279 /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set. */
dff3e828 7280 DECL_IN_AGGR_P (decl) = 0;
68642fb6 7281 if ((DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl))
1f6e1acc 7282 || CLASSTYPE_TEMPLATE_INSTANTIATION (context))
84e6233f
JM
7283 {
7284 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
7285 /* [temp.expl.spec] An explicit specialization of a static data
7286 member of a template is a definition if the declaration
7287 includes an initializer; otherwise, it is a declaration.
7288
7289 We check for processing_specialization so this only applies
7290 to the new specialization syntax. */
7291 if (DECL_INITIAL (decl) == NULL_TREE && processing_specialization)
7292 DECL_EXTERNAL (decl) = 1;
7293 }
f30432d7 7294
b7698cf0 7295 if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl))
33bd39a2 7296 pedwarn ("declaration of `%#D' outside of class is not definition",
f30432d7 7297 decl);
5b605f68
MS
7298 }
7299
9188c363
MM
7300 /* Enter this declaration into the symbol table. */
7301 tem = maybe_push_decl (decl);
2ee887f2 7302
5156628f 7303 if (processing_template_decl)
cd9f6678 7304 tem = push_template_decl (tem);
5566b478 7305
2ee887f2 7306#if ! defined (ASM_OUTPUT_BSS) && ! defined (ASM_OUTPUT_ALIGNED_BSS)
a3203465 7307 /* Tell the back-end to use or not use .common as appropriate. If we say
a50f0918
MS
7308 -fconserve-space, we want this to save .data space, at the expense of
7309 wrong semantics. If we say -fno-conserve-space, we want this to
7310 produce errors about redefs; to do this we force variables into the
7311 data segment. */
a3203465 7312 DECL_COMMON (tem) = flag_conserve_space || ! TREE_PUBLIC (tem);
2ee887f2 7313#endif
68642fb6 7314
5156628f 7315 if (! processing_template_decl)
5566b478 7316 start_decl_1 (tem);
8d08fdba 7317
8d08fdba
MS
7318 return tem;
7319}
7320
5566b478
MS
7321void
7322start_decl_1 (decl)
7323 tree decl;
8d08fdba 7324{
5566b478
MS
7325 tree type = TREE_TYPE (decl);
7326 int initialized = (DECL_INITIAL (decl) != NULL_TREE);
8d08fdba 7327
44689c12
ML
7328 if (type == error_mark_node)
7329 return;
7330
bd0d5d4a 7331 maybe_push_cleanup_level (type);
5566b478
MS
7332
7333 if (initialized)
7334 /* Is it valid for this decl to have an initializer at all?
7335 If not, set INITIALIZED to zero, which will indirectly
7336 tell `cp_finish_decl' to ignore the initializer once it is parsed. */
8d08fdba 7337 {
5566b478
MS
7338 /* Don't allow initializations for incomplete types except for
7339 arrays which might be completed by the initialization. */
d0f062fb 7340 if (COMPLETE_TYPE_P (complete_type (type)))
5566b478
MS
7341 ; /* A complete type is ok. */
7342 else if (TREE_CODE (type) != ARRAY_TYPE)
8d08fdba 7343 {
33bd39a2 7344 error ("variable `%#D' has initializer but incomplete type",
5566b478
MS
7345 decl);
7346 initialized = 0;
25eb19ff 7347 type = TREE_TYPE (decl) = error_mark_node;
5566b478 7348 }
d0f062fb 7349 else if (!COMPLETE_TYPE_P (complete_type (TREE_TYPE (type))))
5566b478
MS
7350 {
7351 if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
33bd39a2 7352 error ("elements of array `%#D' have incomplete type", decl);
5566b478
MS
7353 /* else we already gave an error in start_decl. */
7354 initialized = 0;
8d08fdba 7355 }
8d08fdba
MS
7356 }
7357
5566b478
MS
7358 if (!initialized
7359 && TREE_CODE (decl) != TYPE_DECL
7360 && TREE_CODE (decl) != TEMPLATE_DECL
07c88314 7361 && type != error_mark_node
5362b086 7362 && IS_AGGR_TYPE (type)
07c88314 7363 && ! DECL_EXTERNAL (decl))
8d08fdba 7364 {
5156628f 7365 if ((! processing_template_decl || ! uses_template_parms (type))
d0f062fb 7366 && !COMPLETE_TYPE_P (complete_type (type)))
5566b478 7367 {
33bd39a2 7368 error ("aggregate `%#D' has incomplete type and cannot be initialized",
5566b478
MS
7369 decl);
7370 /* Change the type so that assemble_variable will give
7371 DECL an rtl we can live with: (mem (const_int 0)). */
25eb19ff 7372 type = TREE_TYPE (decl) = error_mark_node;
5566b478
MS
7373 }
7374 else
7375 {
7376 /* If any base type in the hierarchy of TYPE needs a constructor,
7377 then we set initialized to 1. This way any nodes which are
7378 created for the purposes of initializing this aggregate
7379 will live as long as it does. This is necessary for global
7380 aggregates which do not have their initializers processed until
7381 the end of the file. */
7382 initialized = TYPE_NEEDS_CONSTRUCTING (type);
7383 }
7384 }
7385
5566b478
MS
7386 if (! initialized)
7387 DECL_INITIAL (decl) = NULL_TREE;
7388}
7389
7390/* Handle initialization of references.
38e01259 7391 These three arguments are from `cp_finish_decl', and have the
e92cc029
MS
7392 same meaning here that they do there.
7393
7394 Quotes on semantics can be found in ARM 8.4.3. */
7395
8e4ce833 7396static tree
a703fb38 7397grok_reference_init (decl, type, init)
5566b478 7398 tree decl, type, init;
5566b478
MS
7399{
7400 tree tmp;
7401
7402 if (init == NULL_TREE)
7403 {
7404 if ((DECL_LANG_SPECIFIC (decl) == 0
7405 || DECL_IN_AGGR_P (decl) == 0)
7406 && ! DECL_THIS_EXTERN (decl))
33bd39a2 7407 error ("`%D' declared as reference but not initialized", decl);
8e4ce833 7408 return NULL_TREE;
5566b478
MS
7409 }
7410
7411 if (init == error_mark_node)
8e4ce833 7412 return NULL_TREE;
5566b478 7413
ed5511d9 7414 if (TREE_CODE (init) == CONSTRUCTOR)
5566b478 7415 {
33bd39a2 7416 error ("ISO C++ forbids use of initializer list to initialize reference `%D'", decl);
8e4ce833 7417 return NULL_TREE;
8d08fdba
MS
7418 }
7419
7420 if (TREE_CODE (init) == TREE_LIST)
7421 init = build_compound_expr (init);
8d08fdba 7422
8ccc31eb
MS
7423 if (TREE_CODE (TREE_TYPE (init)) == REFERENCE_TYPE)
7424 init = convert_from_reference (init);
7425
8d08fdba
MS
7426 if (TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE
7427 && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
7428 {
a3203465 7429 /* Note: default conversion is only called in very special cases. */
8d08fdba
MS
7430 init = default_conversion (init);
7431 }
68642fb6 7432
24bef158
MM
7433 /* Convert INIT to the reference type TYPE. This may involve the
7434 creation of a temporary, whose lifetime must be the same as that
7435 of the reference. If so, a DECL_STMT for the temporary will be
7436 added just after the DECL_STMT for DECL. That's why we don't set
7437 DECL_INITIAL for local references (instead assigning to them
7438 explicitly); we need to allow the temporary to be initialized
7439 first. */
a3203465 7440 tmp = convert_to_reference
9a3b49ac 7441 (type, init, CONV_IMPLICIT,
ce7715bd
JM
7442 LOOKUP_ONLYCONVERTING|LOOKUP_SPECULATIVELY|LOOKUP_NORMAL|DIRECT_BIND,
7443 decl);
8d08fdba 7444
a3203465 7445 if (tmp == error_mark_node)
8e4ce833
JJ
7446 return NULL_TREE;
7447 else if (tmp == NULL_TREE)
8d08fdba 7448 {
33bd39a2 7449 error ("cannot initialize `%T' from `%T'", type, TREE_TYPE (init));
8e4ce833 7450 return NULL_TREE;
8d08fdba 7451 }
8d08fdba 7452
8e4ce833
JJ
7453 if (TREE_STATIC (decl) && !TREE_CONSTANT (tmp))
7454 return tmp;
7455
08ac397c 7456 DECL_INITIAL (decl) = tmp;
8e4ce833
JJ
7457
7458 return NULL_TREE;
8d08fdba
MS
7459}
7460
6060a796
MS
7461/* Fill in DECL_INITIAL with some magical value to prevent expand_decl from
7462 mucking with forces it does not comprehend (i.e. initialization with a
7463 constructor). If we are at global scope and won't go into COMMON, fill
7464 it in with a dummy CONSTRUCTOR to force the variable into .data;
7465 otherwise we can use error_mark_node. */
7466
28cbf42c
MS
7467static tree
7468obscure_complex_init (decl, init)
7469 tree decl, init;
6060a796 7470{
28cbf42c
MS
7471 if (! flag_no_inline && TREE_STATIC (decl))
7472 {
7473 if (extract_init (decl, init))
7474 return NULL_TREE;
7475 }
7476
2ee887f2 7477#if ! defined (ASM_OUTPUT_BSS) && ! defined (ASM_OUTPUT_ALIGNED_BSS)
a9aedbc2 7478 if (toplevel_bindings_p () && ! DECL_COMMON (decl))
6060a796
MS
7479 DECL_INITIAL (decl) = build (CONSTRUCTOR, TREE_TYPE (decl), NULL_TREE,
7480 NULL_TREE);
7481 else
2ee887f2 7482#endif
6060a796 7483 DECL_INITIAL (decl) = error_mark_node;
28cbf42c
MS
7484
7485 return init;
6060a796
MS
7486}
7487
27778b73
MM
7488/* When parsing `int a[] = {1, 2};' we don't know the size of the
7489 array until we finish parsing the initializer. If that's the
7490 situation we're in, update DECL accordingly. */
7491
7492static void
7493maybe_deduce_size_from_array_init (decl, init)
7494 tree decl;
7495 tree init;
7496{
7497 tree type = TREE_TYPE (decl);
7498
7499 if (TREE_CODE (type) == ARRAY_TYPE
7500 && TYPE_DOMAIN (type) == NULL_TREE
7501 && TREE_CODE (decl) != TYPE_DECL)
7502 {
f2ae0c45
JM
7503 /* do_default is really a C-ism to deal with tentative definitions.
7504 But let's leave it here to ease the eventual merge. */
7505 int do_default = !DECL_EXTERNAL (decl);
27778b73
MM
7506 tree initializer = init ? init : DECL_INITIAL (decl);
7507 int failure = complete_array_type (type, initializer, do_default);
7508
7509 if (failure == 1)
33bd39a2 7510 error ("initializer fails to determine size of `%D'", decl);
27778b73
MM
7511
7512 if (failure == 2)
7513 {
7514 if (do_default)
33bd39a2 7515 error ("array size missing in `%D'", decl);
27778b73
MM
7516 /* If a `static' var's size isn't known, make it extern as
7517 well as static, so it does not get allocated. If it's not
7518 `static', then don't mark it extern; finish_incomplete_decl
7519 will give it a default size and it will get allocated. */
7520 else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
7521 DECL_EXTERNAL (decl) = 1;
7522 }
7523
7524 if (pedantic && TYPE_DOMAIN (type) != NULL_TREE
7525 && tree_int_cst_lt (TYPE_MAX_VALUE (TYPE_DOMAIN (type)),
7526 integer_zero_node))
33bd39a2 7527 error ("zero-size array `%D'", decl);
27778b73
MM
7528
7529 layout_decl (decl, 0);
7530 }
7531}
7532
7533/* Set DECL_SIZE, DECL_ALIGN, etc. for DECL (a VAR_DECL), and issue
57b52417 7534 any appropriate error messages regarding the layout. */
27778b73 7535
57b52417
MM
7536static void
7537layout_var_decl (decl)
27778b73 7538 tree decl;
27778b73 7539{
57b52417 7540 tree type = TREE_TYPE (decl);
c95cd22e 7541#if 0
57b52417 7542 tree ttype = target_type (type);
c95cd22e 7543#endif
57b52417
MM
7544
7545 /* If we haven't already layed out this declaration, do so now.
7546 Note that we must not call complete type for an external object
7547 because it's type might involve templates that we are not
68642fb6 7548 supposed to isntantiate yet. (And it's perfectly legal to say
57b52417
MM
7549 `extern X x' for some incomplete type `X'.) */
7550 if (!DECL_EXTERNAL (decl))
7551 complete_type (type);
d0f062fb 7552 if (!DECL_SIZE (decl) && COMPLETE_TYPE_P (type))
27778b73
MM
7553 layout_decl (decl, 0);
7554
c82dbd95 7555 if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
27778b73
MM
7556 {
7557 /* An automatic variable with an incomplete type: that is an error.
7558 Don't talk about array types here, since we took care of that
7559 message in grokdeclarator. */
33bd39a2 7560 error ("storage size of `%D' isn't known", decl);
27778b73
MM
7561 TREE_TYPE (decl) = error_mark_node;
7562 }
ae673f14
JM
7563#if 0
7564 /* Keep this code around in case we later want to control debug info
7565 based on whether a type is "used". (jason 1999-11-11) */
7566
27778b73
MM
7567 else if (!DECL_EXTERNAL (decl) && IS_AGGR_TYPE (ttype))
7568 /* Let debugger know it should output info for this type. */
7569 note_debug_info_needed (ttype);
7570
7571 if (TREE_STATIC (decl) && DECL_CLASS_SCOPE_P (decl))
7572 note_debug_info_needed (DECL_CONTEXT (decl));
ae673f14 7573#endif
27778b73
MM
7574
7575 if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
7576 && DECL_SIZE (decl) != NULL_TREE
7577 && ! TREE_CONSTANT (DECL_SIZE (decl)))
7578 {
7579 if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
7580 constant_expression_warning (DECL_SIZE (decl));
7581 else
33bd39a2 7582 error ("storage size of `%D' isn't constant", decl);
27778b73 7583 }
8e4ce833
JJ
7584
7585 if (TREE_STATIC (decl)
7586 && !DECL_ARTIFICIAL (decl)
7587 && current_function_decl
7588 && DECL_CONTEXT (decl) == current_function_decl)
7589 push_local_name (decl);
27778b73
MM
7590}
7591
27778b73
MM
7592/* If a local static variable is declared in an inline function, or if
7593 we have a weak definition, we must endeavor to create only one
7594 instance of the variable at link-time. */
7595
7596static void
7597maybe_commonize_var (decl)
7598 tree decl;
7599{
7600 /* Static data in a function with comdat linkage also has comdat
7601 linkage. */
7602 if (TREE_STATIC (decl)
7603 /* Don't mess with __FUNCTION__. */
cf74fb86 7604 && ! DECL_ARTIFICIAL (decl)
27778b73
MM
7605 && current_function_decl
7606 && DECL_CONTEXT (decl) == current_function_decl
79065db2 7607 && (DECL_DECLARED_INLINE_P (current_function_decl)
27778b73
MM
7608 || DECL_TEMPLATE_INSTANTIATION (current_function_decl))
7609 && TREE_PUBLIC (current_function_decl))
7610 {
27778b73
MM
7611 /* If flag_weak, we don't need to mess with this, as we can just
7612 make the function weak, and let it refer to its unique local
7613 copy. This works because we don't allow the function to be
7614 inlined. */
7615 if (! flag_weak)
7616 {
7617 if (DECL_INTERFACE_KNOWN (current_function_decl))
7618 {
7619 TREE_PUBLIC (decl) = 1;
7620 DECL_EXTERNAL (decl) = DECL_EXTERNAL (current_function_decl);
7621 }
7622 else if (DECL_INITIAL (decl) == NULL_TREE
7623 || DECL_INITIAL (decl) == error_mark_node)
7624 {
7625 TREE_PUBLIC (decl) = 1;
7626 DECL_COMMON (decl) = 1;
7627 }
7628 /* else we lose. We can only do this if we can use common,
7629 which we can't if it has been initialized. */
7630
92643fea 7631 if (!TREE_PUBLIC (decl))
27778b73
MM
7632 {
7633 cp_warning_at ("sorry: semantics of inline function static data `%#D' are wrong (you'll wind up with multiple copies)", decl);
7634 cp_warning_at (" you can work around this by removing the initializer", decl);
7635 }
7636 }
8e4ce833
JJ
7637 else
7638 comdat_linkage (decl);
27778b73
MM
7639 }
7640 else if (DECL_LANG_SPECIFIC (decl) && DECL_COMDAT (decl))
7641 /* Set it up again; we might have set DECL_INITIAL since the last
7642 time. */
7643 comdat_linkage (decl);
7644}
7645
91063b51
MM
7646/* Issue an error message if DECL is an uninitialized const variable. */
7647
7648static void
7649check_for_uninitialized_const_var (decl)
7650 tree decl;
7651{
7652 tree type = TREE_TYPE (decl);
7653
7654 /* ``Unless explicitly declared extern, a const object does not have
7655 external linkage and must be initialized. ($8.4; $12.1)'' ARM
7656 7.1.6 */
7657 if (TREE_CODE (decl) == VAR_DECL
7658 && TREE_CODE (type) != REFERENCE_TYPE
7659 && CP_TYPE_CONST_P (type)
7660 && !TYPE_NEEDS_CONSTRUCTING (type)
7661 && !DECL_INITIAL (decl))
33bd39a2 7662 error ("uninitialized const `%D'", decl);
91063b51
MM
7663}
7664
c82dbd95
MM
7665/* Verify INIT (the initializer for DECL), and record the
7666 initialization in DECL_INITIAL, if appropriate. Returns a new
7667 value for INIT. */
27778b73 7668
c82dbd95
MM
7669static tree
7670check_initializer (decl, init)
27778b73 7671 tree decl;
c82dbd95 7672 tree init;
27778b73 7673{
27778b73
MM
7674 tree type;
7675
7676 if (TREE_CODE (decl) == FIELD_DECL)
c82dbd95 7677 return init;
27778b73 7678
fc0e7bf5
MM
7679 type = TREE_TYPE (decl);
7680
27778b73
MM
7681 /* If `start_decl' didn't like having an initialization, ignore it now. */
7682 if (init != NULL_TREE && DECL_INITIAL (decl) == NULL_TREE)
7683 init = NULL_TREE;
27778b73 7684
c82dbd95 7685 /* Check the initializer. */
27778b73
MM
7686 if (init)
7687 {
c82dbd95
MM
7688 /* Things that are going to be initialized need to have complete
7689 type. */
7690 TREE_TYPE (decl) = type = complete_type (TREE_TYPE (decl));
7691
7692 if (type == error_mark_node)
7693 /* We will have already complained. */
7694 init = NULL_TREE;
d0f062fb 7695 else if (COMPLETE_TYPE_P (type) && !TREE_CONSTANT (TYPE_SIZE (type)))
27778b73 7696 {
33bd39a2 7697 error ("variable-sized object `%D' may not be initialized", decl);
27778b73
MM
7698 init = NULL_TREE;
7699 }
c82dbd95 7700 else if (TREE_CODE (type) == ARRAY_TYPE
fe5b6c1c 7701 && !COMPLETE_TYPE_P (complete_type (TREE_TYPE (type))))
27778b73 7702 {
33bd39a2 7703 error ("elements of array `%#D' have incomplete type", decl);
27778b73
MM
7704 init = NULL_TREE;
7705 }
fe5b6c1c 7706 else if (TREE_CODE (type) != ARRAY_TYPE && !COMPLETE_TYPE_P (type))
c82dbd95 7707 {
33bd39a2 7708 error ("`%D' has incomplete type", decl);
c82dbd95
MM
7709 TREE_TYPE (decl) = error_mark_node;
7710 init = NULL_TREE;
7711 }
27778b73
MM
7712 }
7713
7714 if (TREE_CODE (decl) == CONST_DECL)
7715 {
7716 my_friendly_assert (TREE_CODE (decl) != REFERENCE_TYPE, 148);
7717
7718 DECL_INITIAL (decl) = init;
7719
27778b73
MM
7720 my_friendly_assert (init != NULL_TREE, 149);
7721 init = NULL_TREE;
7722 }
c82dbd95
MM
7723 else if (!DECL_EXTERNAL (decl) && TREE_CODE (type) == REFERENCE_TYPE)
7724 {
8e4ce833
JJ
7725 init = grok_reference_init (decl, type, init);
7726 if (init)
7727 init = obscure_complex_init (decl, init);
c82dbd95 7728 }
27778b73
MM
7729 else if (init)
7730 {
7731 if (TYPE_HAS_CONSTRUCTOR (type) || TYPE_NEEDS_CONSTRUCTING (type))
7732 {
7733 if (TREE_CODE (type) == ARRAY_TYPE)
7734 init = digest_init (type, init, (tree *) 0);
7735 else if (TREE_CODE (init) == CONSTRUCTOR
7736 && TREE_HAS_CONSTRUCTOR (init))
7737 {
7738 if (TYPE_NON_AGGREGATE_CLASS (type))
7739 {
33bd39a2 7740 error ("`%D' must be initialized by constructor, not by `{...}'",
27778b73
MM
7741 decl);
7742 init = error_mark_node;
7743 }
7744 else
7745 goto dont_use_constructor;
7746 }
7747 }
7748 else
7749 {
7750 dont_use_constructor:
7751 if (TREE_CODE (init) != TREE_VEC)
7752 init = store_init_value (decl, init);
7753 }
7754
7755 if (init)
7756 /* We must hide the initializer so that expand_decl
7757 won't try to do something it does not understand. */
7758 init = obscure_complex_init (decl, init);
7759 }
7760 else if (DECL_EXTERNAL (decl))
7761 ;
2f939d94 7762 else if (TYPE_P (type)
27778b73
MM
7763 && (IS_AGGR_TYPE (type) || TYPE_NEEDS_CONSTRUCTING (type)))
7764 {
7765 tree core_type = strip_array_types (type);
7766
7767 if (! TYPE_NEEDS_CONSTRUCTING (core_type))
7768 {
7769 if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type))
33bd39a2 7770 error ("structure `%D' with uninitialized const members", decl);
27778b73 7771 if (CLASSTYPE_REF_FIELDS_NEED_INIT (core_type))
33bd39a2 7772 error ("structure `%D' with uninitialized reference members",
27778b73
MM
7773 decl);
7774 }
7775
7776 check_for_uninitialized_const_var (decl);
7777
d0f062fb 7778 if (COMPLETE_TYPE_P (type) && TYPE_NEEDS_CONSTRUCTING (type))
27778b73
MM
7779 init = obscure_complex_init (decl, NULL_TREE);
7780
7781 }
7782 else
7783 check_for_uninitialized_const_var (decl);
68642fb6 7784
c82dbd95 7785 return init;
27778b73
MM
7786}
7787
7788/* If DECL is not a local variable, give it RTL. */
7789
7790static void
7791make_rtl_for_nonlocal_decl (decl, init, asmspec)
7792 tree decl;
7793 tree init;
7794 const char *asmspec;
7795{
95ee998c
MM
7796 int toplev = toplevel_bindings_p ();
7797 int defer_p;
27778b73 7798
f39ee884
MM
7799 /* Handle non-variables up front. */
7800 if (TREE_CODE (decl) != VAR_DECL)
7801 {
7802 rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
7803 return;
7804 }
7805
95ee998c
MM
7806 /* If we see a class member here, it should be a static data
7807 member. */
7808 if (DECL_LANG_SPECIFIC (decl) && DECL_IN_AGGR_P (decl))
7809 {
7810 my_friendly_assert (TREE_STATIC (decl), 19990828);
7811 /* An in-class declaration of a static data member should be
7812 external; it is only a declaration, and not a definition. */
7813 if (init == NULL_TREE)
7814 my_friendly_assert (DECL_EXTERNAL (decl), 20000723);
7815 }
7816
f39ee884
MM
7817 /* Set the DECL_ASSEMBLER_NAME for the variable. */
7818 if (asmspec)
7ed47c04
MM
7819 {
7820 SET_DECL_ASSEMBLER_NAME (decl, get_identifier (asmspec));
7821 /* The `register' keyword, when used together with an
7822 asm-specification, indicates that the variable should be
7823 placed in a particular register. */
7824 if (DECL_REGISTER (decl))
7825 DECL_C_HARD_REGISTER (decl) = 1;
7826 }
f39ee884 7827
95ee998c
MM
7828 /* We don't create any RTL for local variables. */
7829 if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
7830 return;
27778b73 7831
95ee998c
MM
7832 /* We defer emission of local statics until the corresponding
7833 DECL_STMT is expanded. */
7834 defer_p = DECL_FUNCTION_SCOPE_P (decl) || DECL_VIRTUAL_P (decl);
7835
7836 /* We try to defer namespace-scope static constants so that they are
aba649ba 7837 not emitted into the object file unnecessarily. */
95ee998c
MM
7838 if (!DECL_VIRTUAL_P (decl)
7839 && TREE_READONLY (decl)
7840 && DECL_INITIAL (decl) != NULL_TREE
7841 && DECL_INITIAL (decl) != error_mark_node
7842 && ! EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl))
7843 && toplev
7844 && !TREE_PUBLIC (decl))
7845 {
7846 /* Fool with the linkage according to #pragma interface. */
7847 if (!interface_unknown)
27778b73 7848 {
95ee998c
MM
7849 TREE_PUBLIC (decl) = 1;
7850 DECL_EXTERNAL (decl) = interface_only;
27778b73 7851 }
27778b73 7852
95ee998c 7853 defer_p = 1;
27778b73 7854 }
95ee998c 7855
92643fea
MM
7856 /* If we're deferring the variable, we only need to make RTL if
7857 there's an ASMSPEC. Otherwise, we'll lazily create it later when
7858 we need it. (There's no way to lazily create RTL for things that
7859 have assembly specs because the information about the specifier
7860 isn't stored in the tree, yet) */
7861 if (defer_p && asmspec)
6c418184 7862 make_decl_rtl (decl, asmspec);
95ee998c 7863 /* If we're not deferring, go ahead and assemble the variable. */
92643fea 7864 else if (!defer_p)
27778b73 7865 rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
27778b73
MM
7866}
7867
7868/* The old ARM scoping rules injected variables declared in the
7869 initialization statement of a for-statement into the surrounding
7870 scope. We support this usage, in order to be backward-compatible.
7871 DECL is a just-declared VAR_DECL; if necessary inject its
7872 declaration into the surrounding scope. */
7873
b7b8bcd2 7874void
27778b73
MM
7875maybe_inject_for_scope_var (decl)
7876 tree decl;
7877{
c3783399
NS
7878 if (!DECL_NAME (decl))
7879 return;
5362b086 7880
27778b73
MM
7881 if (current_binding_level->is_for_scope)
7882 {
68642fb6 7883 struct binding_level *outer
27778b73
MM
7884 = current_binding_level->level_chain;
7885
7886 /* Check to see if the same name is already bound at the outer
7887 level, either because it was directly declared, or because a
7888 dead for-decl got preserved. In either case, the code would
7889 not have been valid under the ARM scope rules, so clear
7890 is_for_scope for the current_binding_level.
7891
7892 Otherwise, we need to preserve the temp slot for decl to last
7893 into the outer binding level. */
7894
68642fb6 7895 tree outer_binding
27778b73 7896 = TREE_CHAIN (IDENTIFIER_BINDING (DECL_NAME (decl)));
68642fb6 7897
27778b73 7898 if (outer_binding && BINDING_LEVEL (outer_binding) == outer
68642fb6 7899 && (TREE_CODE (BINDING_VALUE (outer_binding))
27778b73
MM
7900 == VAR_DECL)
7901 && DECL_DEAD_FOR_LOCAL (BINDING_VALUE (outer_binding)))
7902 {
7903 BINDING_VALUE (outer_binding)
7904 = DECL_SHADOWED_FOR_VAR (BINDING_VALUE (outer_binding));
7905 current_binding_level->is_for_scope = 0;
7906 }
7907 else if (DECL_IN_MEMORY_P (decl))
7908 preserve_temp_slots (DECL_RTL (decl));
7909 }
7910}
7911
ed5511d9 7912/* Generate code to initialize DECL (a local variable). */
27778b73 7913
b7b8bcd2
MM
7914void
7915initialize_local_var (decl, init, flags)
27778b73
MM
7916 tree decl;
7917 tree init;
27778b73
MM
7918 int flags;
7919{
9ed9e79a 7920 tree type = TREE_TYPE (decl);
27778b73 7921
9ed9e79a
MM
7922 /* If the type is bogus, don't bother initializing the variable. */
7923 if (type == error_mark_node)
7924 return;
b7b8bcd2 7925
b7b8bcd2
MM
7926 if (DECL_SIZE (decl) == NULL_TREE && !TREE_STATIC (decl))
7927 {
7928 /* If we used it already as memory, it must stay in memory. */
7929 DECL_INITIAL (decl) = NULL_TREE;
7930 TREE_ADDRESSABLE (decl) = TREE_USED (decl);
7931 }
7932
9ed9e79a
MM
7933 /* Local statics are handled differently from ordinary automatic
7934 variables. */
7935 if (TREE_STATIC (decl))
7936 {
7937 if (TYPE_NEEDS_CONSTRUCTING (type) || init != NULL_TREE
834c6dff 7938 || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
9ed9e79a
MM
7939 expand_static_init (decl, init);
7940 return;
7941 }
7942
27778b73
MM
7943 if (DECL_SIZE (decl) && type != error_mark_node)
7944 {
7945 int already_used;
68642fb6 7946
27778b73 7947 /* Compute and store the initial value. */
27778b73
MM
7948 already_used = TREE_USED (decl) || TREE_USED (type);
7949
7950 if (init || TYPE_NEEDS_CONSTRUCTING (type))
7951 {
24bef158
MM
7952 int saved_stmts_are_full_exprs_p;
7953
3a0d3e1e 7954 my_friendly_assert (building_stmt_tree (), 20000906);
f2c5f623 7955 saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
ae499cce 7956 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
3a0d3e1e 7957 finish_expr_stmt (build_aggr_init (decl, init, flags));
5362b086 7958 current_stmt_tree ()->stmts_are_full_exprs_p =
ae499cce 7959 saved_stmts_are_full_exprs_p;
27778b73
MM
7960 }
7961
7962 /* Set this to 0 so we can tell whether an aggregate which was
7963 initialized was ever used. Don't do this if it has a
7964 destructor, so we don't complain about the 'resource
b7b8bcd2
MM
7965 allocation is initialization' idiom. Now set
7966 attribute((unused)) on types so decls of that type will be
7967 marked used. (see TREE_USED, above.) */
27778b73
MM
7968 if (TYPE_NEEDS_CONSTRUCTING (type)
7969 && ! already_used
834c6dff 7970 && TYPE_HAS_TRIVIAL_DESTRUCTOR (type)
27778b73
MM
7971 && DECL_NAME (decl))
7972 TREE_USED (decl) = 0;
b7b8bcd2 7973 else if (already_used)
27778b73
MM
7974 TREE_USED (decl) = 1;
7975 }
24bef158 7976}
27778b73 7977
24bef158
MM
7978/* Generate code to destroy DECL (a local variable). */
7979
68642fb6 7980static void
24bef158
MM
7981destroy_local_var (decl)
7982 tree decl;
7983{
9d85d30c
MM
7984 tree type = TREE_TYPE (decl);
7985 tree cleanup;
7986
7987 /* Only variables get cleaned up. */
7988 if (TREE_CODE (decl) != VAR_DECL)
7989 return;
68642fb6 7990
9d85d30c 7991 /* And only things with destructors need cleaning up. */
655dc6ee
JM
7992 if (type == error_mark_node
7993 || TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
9d85d30c
MM
7994 return;
7995
7996 if (TREE_CODE (decl) == VAR_DECL &&
7997 (DECL_EXTERNAL (decl) || TREE_STATIC (decl)))
7998 /* We don't clean up things that aren't defined in this
7999 translation unit, or that need a static cleanup. The latter
8000 are handled by finish_file. */
8001 return;
68642fb6 8002
9d85d30c
MM
8003 /* Compute the cleanup. */
8004 cleanup = maybe_build_cleanup (decl);
27778b73 8005
b7b8bcd2 8006 /* Record the cleanup required for this declaration. */
24bef158
MM
8007 if (DECL_SIZE (decl) && TREE_TYPE (decl) != error_mark_node
8008 && cleanup)
8009 finish_decl_cleanup (decl, cleanup);
8010}
8011
8d08fdba
MS
8012/* Finish processing of a declaration;
8013 install its line number and initial value.
8014 If the length of an array type is not known before,
8015 it must be determined now, from the initial value, or it is an error.
8016
8b27e9ef 8017 INIT holds the value of an initializer that should be allowed to escape
8d08fdba
MS
8018 the normal rules.
8019
920f9474 8020 FLAGS is LOOKUP_ONLYCONVERTING if the = init syntax was used, else 0
f78c7bc6 8021 if the (init) syntax was used. */
8d08fdba
MS
8022
8023void
cd9f6678 8024cp_finish_decl (decl, init, asmspec_tree, flags)
8d08fdba
MS
8025 tree decl, init;
8026 tree asmspec_tree;
6060a796 8027 int flags;
8d08fdba
MS
8028{
8029 register tree type;
27778b73 8030 tree ttype = NULL_TREE;
9c0758dd 8031 const char *asmspec = NULL;
8d08fdba
MS
8032 int was_readonly = 0;
8033
8d08fdba
MS
8034 if (! decl)
8035 {
8036 if (init)
8251199e 8037 error ("assignment (not initialization) in declaration");
8d08fdba
MS
8038 return;
8039 }
8040
a4443a08 8041 /* If a name was specified, get the string. */
8d08fdba 8042 if (asmspec_tree)
8d08fdba 8043 asmspec = TREE_STRING_POINTER (asmspec_tree);
8d08fdba 8044
2c73f9f5
ML
8045 if (init && TREE_CODE (init) == NAMESPACE_DECL)
8046 {
33bd39a2 8047 error ("cannot initialize `%D' to namespace `%D'",
2c73f9f5
ML
8048 decl, init);
8049 init = NULL_TREE;
8050 }
8051
6ba89f8e 8052 if (current_class_type
4f1c5b7d 8053 && CP_DECL_CONTEXT (decl) == current_class_type
6ba89f8e
MM
8054 && TYPE_BEING_DEFINED (current_class_type)
8055 && (DECL_INITIAL (decl) || init))
3febd123 8056 DECL_INITIALIZED_IN_CLASS_P (decl) = 1;
6ba89f8e 8057
68642fb6 8058 if (TREE_CODE (decl) == VAR_DECL
9a68c51f
JM
8059 && DECL_CONTEXT (decl)
8060 && TREE_CODE (DECL_CONTEXT (decl)) == NAMESPACE_DECL
8061 && DECL_CONTEXT (decl) != current_namespace
8062 && init)
8063 {
8064 /* Leave the namespace of the object. */
8065 pop_decl_namespace ();
8066 }
8067
c82dbd95 8068 type = TREE_TYPE (decl);
8d08fdba 8069
f376e137 8070 if (type == error_mark_node)
cd9f6678 8071 return;
5362b086 8072
a7a7710d
NS
8073 if (TYPE_HAS_MUTABLE_P (type))
8074 TREE_READONLY (decl) = 0;
24bef158 8075
5156628f 8076 if (processing_template_decl)
5566b478 8077 {
08ac397c
JM
8078 /* Add this declaration to the statement-tree. */
8079 if (at_function_scope_p ()
8080 && TREE_CODE (decl) != RESULT_DECL)
8081 add_decl_stmt (decl);
8082
5566b478 8083 if (init && DECL_INITIAL (decl))
2a1e9fdd 8084 DECL_INITIAL (decl) = init;
5566b478
MS
8085 goto finish_end0;
8086 }
3e41d13b 8087
27778b73
MM
8088 /* Parameters are handled by store_parm_decls, not cp_finish_decl. */
8089 my_friendly_assert (TREE_CODE (decl) != PARM_DECL, 19990828);
8090
8d08fdba
MS
8091 /* Take care of TYPE_DECLs up front. */
8092 if (TREE_CODE (decl) == TYPE_DECL)
8093 {
8094 if (init && DECL_INITIAL (decl))
8095 {
8096 /* typedef foo = bar; store the type of bar as the type of foo. */
8097 TREE_TYPE (decl) = type = TREE_TYPE (init);
8098 DECL_INITIAL (decl) = init = NULL_TREE;
8099 }
a0a33927
MS
8100 if (type != error_mark_node
8101 && IS_AGGR_TYPE (type) && DECL_NAME (decl))
8d08fdba
MS
8102 {
8103 if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
33bd39a2 8104 warning ("shadowing previous type declaration of `%#D'", decl);
8d08fdba
MS
8105 set_identifier_type_value (DECL_NAME (decl), type);
8106 CLASSTYPE_GOT_SEMICOLON (type) = 1;
8107 }
8108 GNU_xref_decl (current_function_decl, decl);
cffa8729
MS
8109
8110 /* If we have installed this as the canonical typedef for this
8111 type, and that type has not been defined yet, delay emitting
956d6950 8112 the debug information for it, as we will emit it later. */
d2e5ee5c 8113 if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
d0f062fb 8114 && !COMPLETE_TYPE_P (TREE_TYPE (decl)))
cffa8729
MS
8115 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
8116
3e411c3f 8117 rest_of_decl_compilation (decl, NULL,
5566b478 8118 DECL_CONTEXT (decl) == NULL_TREE, at_eof);
8d08fdba
MS
8119 goto finish_end;
8120 }
3e41d13b 8121
8d08fdba 8122 if (TREE_CODE (decl) != FUNCTION_DECL)
3e41d13b 8123 ttype = target_type (type);
8d08fdba
MS
8124
8125 if (! DECL_EXTERNAL (decl) && TREE_READONLY (decl)
8126 && TYPE_NEEDS_CONSTRUCTING (type))
8127 {
8d08fdba
MS
8128 /* Currently, GNU C++ puts constants in text space, making them
8129 impossible to initialize. In the future, one would hope for
8130 an operating system which understood the difference between
8131 initialization and the running of a program. */
8132 was_readonly = 1;
8133 TREE_READONLY (decl) = 0;
8134 }
8135
27778b73 8136 if (TREE_CODE (decl) == FIELD_DECL && asmspec)
8d08fdba 8137 {
27778b73
MM
8138 /* This must override the asm specifier which was placed by
8139 grokclassfn. Lay this out fresh. */
19e7881c 8140 SET_DECL_RTL (TREE_TYPE (decl), NULL_RTX);
92643fea 8141 SET_DECL_ASSEMBLER_NAME (decl, get_identifier (asmspec));
6c418184 8142 make_decl_rtl (decl, asmspec);
8d08fdba
MS
8143 }
8144
c82dbd95 8145 /* Deduce size of array from initialization, if not already known. */
c82dbd95 8146 init = check_initializer (decl, init);
fe5b6c1c 8147 maybe_deduce_size_from_array_init (decl, init);
3e41d13b 8148
8d08fdba
MS
8149 GNU_xref_decl (current_function_decl, decl);
8150
57cf57fb
JM
8151 /* Add this declaration to the statement-tree. This needs to happen
8152 after the call to check_initializer so that the DECL_STMT for a
8153 reference temp is added before the DECL_STMT for the reference itself. */
08ac397c
JM
8154 if (building_stmt_tree ()
8155 && at_function_scope_p ()
8156 && TREE_CODE (decl) != RESULT_DECL)
8157 add_decl_stmt (decl);
8158
8d08fdba 8159 if (TREE_CODE (decl) == VAR_DECL)
57b52417 8160 layout_var_decl (decl);
8d08fdba
MS
8161
8162 /* Output the assembler code and/or RTL code for variables and functions,
8163 unless the type is an undefined structure or union.
8164 If not, it will get done when the type is completed. */
8d08fdba
MS
8165 if (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == FUNCTION_DECL
8166 || TREE_CODE (decl) == RESULT_DECL)
8167 {
27778b73
MM
8168 if (TREE_CODE (decl) == VAR_DECL)
8169 maybe_commonize_var (decl);
8d08fdba 8170
27778b73 8171 make_rtl_for_nonlocal_decl (decl, init, asmspec);
8d08fdba 8172
68642fb6 8173 if (TREE_CODE (type) == FUNCTION_TYPE
27778b73 8174 || TREE_CODE (type) == METHOD_TYPE)
68642fb6 8175 abstract_virtuals_error (decl,
27778b73 8176 strip_array_types (TREE_TYPE (type)));
68642fb6 8177 else
27778b73 8178 abstract_virtuals_error (decl, strip_array_types (type));
8d08fdba 8179
8d08fdba 8180 if (TREE_CODE (decl) == FUNCTION_DECL)
faae18ab 8181 ;
67d743fe
MS
8182 else if (DECL_EXTERNAL (decl)
8183 && ! (DECL_LANG_SPECIFIC (decl)
8184 && DECL_NOT_REALLY_EXTERN (decl)))
5566b478
MS
8185 {
8186 if (init)
8187 DECL_INITIAL (decl) = init;
8188 }
b35d4555 8189 else if (TREE_CODE (CP_DECL_CONTEXT (decl)) == FUNCTION_DECL)
8d08fdba 8190 {
b7b8bcd2 8191 /* This is a local declaration. */
b35d4555
MM
8192 if (doing_semantic_analysis_p ())
8193 maybe_inject_for_scope_var (decl);
b7b8bcd2
MM
8194 /* Initialize the local variable. But, if we're building a
8195 statement-tree, we'll do the initialization when we
8196 expand the tree. */
24bef158
MM
8197 if (processing_template_decl)
8198 {
8199 if (init || DECL_INITIAL (decl) == error_mark_node)
8200 DECL_INITIAL (decl) = init;
8201 }
8202 else
8203 {
b35d4555
MM
8204 /* If we're not building RTL, then we need to do so
8205 now. */
44835fdd 8206 my_friendly_assert (building_stmt_tree (), 20000906);
b35d4555 8207 /* Initialize the variable. */
24bef158
MM
8208 initialize_local_var (decl, init, flags);
8209 /* Clean up the variable. */
8210 destroy_local_var (decl);
8211 }
8d08fdba 8212 }
9ed9e79a
MM
8213 else if (TREE_STATIC (decl) && type != error_mark_node)
8214 {
8215 /* Cleanups for static variables are handled by `finish_file'. */
8216 if (TYPE_NEEDS_CONSTRUCTING (type) || init != NULL_TREE
834c6dff 8217 || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
9ed9e79a
MM
8218 expand_static_init (decl, init);
8219 }
8d08fdba
MS
8220 finish_end0:
8221
8222 /* Undo call to `pushclass' that was done in `start_decl'
8223 due to initialization of qualified member variable.
8224 I.e., Foo::x = 10; */
8225 {
4f1c5b7d 8226 tree context = CP_DECL_CONTEXT (decl);
8d08fdba 8227 if (context
2f939d94 8228 && TYPE_P (context)
8d08fdba
MS
8229 && (TREE_CODE (decl) == VAR_DECL
8230 /* We also have a pushclass done that we need to undo here
8231 if we're at top level and declare a method. */
5566b478
MS
8232 || TREE_CODE (decl) == FUNCTION_DECL)
8233 /* If size hasn't been set, we're still defining it,
8234 and therefore inside the class body; don't pop
8235 the binding level.. */
d0f062fb 8236 && COMPLETE_TYPE_P (context)
5566b478 8237 && context == current_class_type)
6b400b21 8238 pop_nested_class ();
8d08fdba
MS
8239 }
8240 }
8241
8242 finish_end:
8243
8d08fdba
MS
8244 if (was_readonly)
8245 TREE_READONLY (decl) = 1;
8d08fdba
MS
8246}
8247
82580166 8248/* This is here for a midend callback from c-common.c */
e92cc029 8249
82580166
MS
8250void
8251finish_decl (decl, init, asmspec_tree)
8252 tree decl, init;
8253 tree asmspec_tree;
8254{
cd9f6678 8255 cp_finish_decl (decl, init, asmspec_tree, 0);
82580166
MS
8256}
8257
db4283a0
MM
8258/* Returns a declaration for a VAR_DECL as if:
8259
8260 extern "C" TYPE NAME;
8261
8262 had been seen. Used to create compiler-generated global
8263 variables. */
8264
8265tree
8266declare_global_var (name, type)
8267 tree name;
8268 tree type;
8269{
8270 tree decl;
8271
8272 push_to_top_level ();
8273 decl = build_decl (VAR_DECL, name, type);
8274 TREE_PUBLIC (decl) = 1;
8275 DECL_EXTERNAL (decl) = 1;
8276 DECL_ARTIFICIAL (decl) = 1;
8277 pushdecl (decl);
8278 cp_finish_decl (decl, NULL_TREE, NULL_TREE, 0);
8279 pop_from_top_level ();
8280
8281 return decl;
8282}
8283
8284/* Returns a pointer to the `atexit' function. Note that if
8285 FLAG_USE_CXA_ATEXIT is non-zero, then this will actually be the new
8286 `__cxa_atexit' function specified in the IA64 C++ ABI. */
8287
8288static tree
8289get_atexit_node ()
8290{
8291 tree atexit_fndecl;
8292 tree arg_types;
8293 tree fn_type;
8294 tree fn_ptr_type;
8295 const char *name;
8296
8297 if (atexit_node)
8298 return atexit_node;
8299
8300 if (flag_use_cxa_atexit)
8301 {
8302 /* The declaration for `__cxa_atexit' is:
8303
8304 int __cxa_atexit (void (*)(void *), void *, void *)
8305
8306 We build up the argument types and then then function type
8307 itself. */
68642fb6 8308
db4283a0
MM
8309 /* First, build the pointer-to-function type for the first
8310 argument. */
8311 arg_types = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
8312 fn_type = build_function_type (void_type_node, arg_types);
8313 fn_ptr_type = build_pointer_type (fn_type);
8314 /* Then, build the rest of the argument types. */
8315 arg_types = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
8316 arg_types = tree_cons (NULL_TREE, ptr_type_node, arg_types);
8317 arg_types = tree_cons (NULL_TREE, fn_ptr_type, arg_types);
8318 /* And the final __cxa_atexit type. */
8319 fn_type = build_function_type (integer_type_node, arg_types);
8320 fn_ptr_type = build_pointer_type (fn_type);
8321 name = "__cxa_atexit";
8322 }
8323 else
8324 {
8325 /* The declaration for `atexit' is:
68642fb6 8326
db4283a0
MM
8327 int atexit (void (*)());
8328
8329 We build up the argument types and then then function type
8330 itself. */
8331 fn_type = build_function_type (void_type_node, void_list_node);
8332 fn_ptr_type = build_pointer_type (fn_type);
8333 arg_types = tree_cons (NULL_TREE, fn_ptr_type, void_list_node);
8334 /* Build the final atexit type. */
8335 fn_type = build_function_type (integer_type_node, arg_types);
8336 name = "atexit";
8337 }
8338
8339 /* Now, build the function declaration. */
8340 push_lang_context (lang_name_c);
0c11ada6 8341 atexit_fndecl = build_library_fn_ptr (name, fn_type);
db4283a0
MM
8342 mark_used (atexit_fndecl);
8343 pop_lang_context ();
8344 atexit_node = default_conversion (atexit_fndecl);
8345
8346 return atexit_node;
8347}
8348
8349/* Returns the __dso_handle VAR_DECL. */
8350
8351static tree
8352get_dso_handle_node ()
8353{
8354 if (dso_handle_node)
8355 return dso_handle_node;
8356
8357 /* Declare the variable. */
8358 dso_handle_node = declare_global_var (get_identifier ("__dso_handle"),
8359 ptr_type_node);
8360
8361 return dso_handle_node;
8362}
8363
8364/* Begin a new function with internal linkage whose job will be simply
8365 to destroy some particular variable. */
8366
8367static tree
8368start_cleanup_fn ()
8369{
8370 static int counter = 0;
8371 int old_interface_unknown = interface_unknown;
8372 char name[32];
8373 tree parmtypes;
8374 tree fntype;
8375 tree fndecl;
8376
8377 push_to_top_level ();
8378
8379 /* No need to mangle this. */
8380 push_lang_context (lang_name_c);
8381
8382 interface_unknown = 1;
8383
8384 /* Build the parameter-types. */
8385 parmtypes = void_list_node;
8386 /* Functions passed to __cxa_atexit take an additional parameter.
8387 We'll just ignore it. After we implement the new calling
8388 convention for destructors, we can eliminate the use of
8389 additional cleanup functions entirely in the -fnew-abi case. */
8390 if (flag_use_cxa_atexit)
8391 parmtypes = tree_cons (NULL_TREE, ptr_type_node, parmtypes);
8392 /* Build the function type itself. */
8393 fntype = build_function_type (void_type_node, parmtypes);
8394 /* Build the name of the function. */
8395 sprintf (name, "__tcf_%d", counter++);
8396 /* Build the function declaration. */
8397 fndecl = build_lang_decl (FUNCTION_DECL, get_identifier (name), fntype);
8398 /* It's a function with internal linkage, generated by the
8399 compiler. */
8400 TREE_PUBLIC (fndecl) = 0;
8401 DECL_ARTIFICIAL (fndecl) = 1;
5a728aca
MM
8402 /* Make the function `inline' so that it is only emitted if it is
8403 actually needed. It is unlikely that it will be inlined, since
aba649ba 8404 it is only called via a function pointer, but we avoid unnecessary
5a728aca
MM
8405 emissions this way. */
8406 DECL_INLINE (fndecl) = 1;
db4283a0
MM
8407 /* Build the parameter. */
8408 if (flag_use_cxa_atexit)
8409 {
8410 tree parmdecl;
8411
8412 parmdecl = build_decl (PARM_DECL, NULL_TREE, ptr_type_node);
8413 DECL_CONTEXT (parmdecl) = fndecl;
8414 DECL_ARG_TYPE (parmdecl) = ptr_type_node;
8415 TREE_USED (parmdecl) = 1;
8416 DECL_ARGUMENTS (fndecl) = parmdecl;
8417 }
8418
09ed39ad 8419 pushdecl (fndecl);
db4283a0 8420 start_function (/*specs=*/NULL_TREE, fndecl, NULL_TREE, SF_PRE_PARSED);
db4283a0
MM
8421
8422 interface_unknown = old_interface_unknown;
8423
8424 pop_lang_context ();
8425
8426 return current_function_decl;
8427}
8428
8429/* Finish the cleanup function begun by start_cleanup_fn. */
8430
8431static void
8432end_cleanup_fn ()
8433{
0acf7199 8434 expand_body (finish_function (0));
db4283a0
MM
8435
8436 pop_from_top_level ();
8437}
8438
bf419747
MM
8439/* Generate code to handle the destruction of DECL, an object with
8440 static storage duration. */
f0105ed3 8441
bf419747
MM
8442void
8443register_dtor_fn (decl)
f0105ed3
MM
8444 tree decl;
8445{
db4283a0 8446 tree cleanup;
f0105ed3 8447 tree compound_stmt;
db4283a0
MM
8448 tree args;
8449 tree fcall;
f0105ed3 8450
db4283a0 8451 int saved_flag_access_control;
f0105ed3 8452
834c6dff 8453 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
bf419747
MM
8454 return;
8455
f0105ed3
MM
8456 /* Call build_cleanup before we enter the anonymous function so that
8457 any access checks will be done relative to the current scope,
8458 rather than the scope of the anonymous function. */
8459 build_cleanup (decl);
8460
8461 /* Now start the function. */
db4283a0 8462 cleanup = start_cleanup_fn ();
f0105ed3
MM
8463
8464 /* Now, recompute the cleanup. It may contain SAVE_EXPRs that refer
8465 to the original function, rather than the anonymous one. That
8466 will make the back-end think that nested functions are in use,
8467 which causes confusion. */
8468 saved_flag_access_control = flag_access_control;
8469 flag_access_control = 0;
8470 fcall = build_cleanup (decl);
8471 flag_access_control = saved_flag_access_control;
8472
8473 /* Create the body of the anonymous function. */
8474 compound_stmt = begin_compound_stmt (/*has_no_scope=*/0);
8475 finish_expr_stmt (fcall);
8476 finish_compound_stmt (/*has_no_scope=*/0, compound_stmt);
db4283a0 8477 end_cleanup_fn ();
f0105ed3
MM
8478
8479 /* Call atexit with the cleanup function. */
8480 mark_addressable (cleanup);
8481 cleanup = build_unary_op (ADDR_EXPR, cleanup, 0);
db4283a0
MM
8482 if (flag_use_cxa_atexit)
8483 {
8484 args = tree_cons (NULL_TREE, get_dso_handle_node (), NULL_TREE);
8485 args = tree_cons (NULL_TREE, null_pointer_node, args);
8486 args = tree_cons (NULL_TREE, cleanup, args);
8487 }
8488 else
8489 args = tree_cons (NULL_TREE, cleanup, NULL_TREE);
8490 finish_expr_stmt (build_function_call (get_atexit_node (), args));
f0105ed3
MM
8491}
8492
8d08fdba
MS
8493void
8494expand_static_init (decl, init)
8495 tree decl;
8496 tree init;
8497{
8498 tree oldstatic = value_member (decl, static_aggregates);
a4443a08 8499
8d08fdba
MS
8500 if (oldstatic)
8501 {
8502 if (TREE_PURPOSE (oldstatic) && init != NULL_TREE)
33bd39a2 8503 error ("multiple initializations given for `%D'", decl);
8d08fdba 8504 }
0aafb128 8505 else if (! toplevel_bindings_p ())
8d08fdba
MS
8506 {
8507 /* Emit code to perform this initialization but once. */
b7b8bcd2 8508 tree if_stmt;
f0105ed3 8509 tree then_clause;
f1dedc31 8510 tree assignment;
c395453c
MM
8511 tree guard;
8512 tree guard_init;
8d08fdba 8513
2036a15c
MM
8514 /* Emit code to perform this initialization but once. This code
8515 looks like:
8516
c395453c
MM
8517 static int guard = 0;
8518 if (!guard) {
2036a15c 8519 // Do initialization.
c395453c 8520 guard = 1;
2036a15c
MM
8521 // Register variable for destruction at end of program.
8522 }
8523
8524 Note that the `temp' variable is only set to 1 *after* the
8525 initialization is complete. This ensures that an exception,
8526 thrown during the construction, will cause the variable to
8527 reinitialized when we pass through this code again, as per:
68642fb6 8528
2036a15c
MM
8529 [stmt.dcl]
8530
8531 If the initialization exits by throwing an exception, the
8532 initialization is not complete, so it will be tried again
8533 the next time control enters the declaration.
8534
8535 In theory, this process should be thread-safe, too; multiple
8536 threads should not be able to initialize the variable more
8537 than once. We don't yet attempt to ensure thread-safety. */
c395453c
MM
8538
8539 /* Create the guard variable. */
8540 guard = get_guard (decl);
2036a15c
MM
8541
8542 /* Begin the conditional initialization. */
b7b8bcd2 8543 if_stmt = begin_if_stmt ();
c395453c 8544 finish_if_stmt_cond (get_guard_cond (guard), if_stmt);
f0105ed3 8545 then_clause = begin_compound_stmt (/*has_no_scope=*/0);
72b7eeff 8546
2036a15c 8547 /* Do the initialization itself. */
28cbf42c 8548 if (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))
f30432d7 8549 || (init && TREE_CODE (init) == TREE_LIST))
f1dedc31 8550 assignment = build_aggr_init (decl, init, 0);
f30432d7 8551 else if (init)
c557501d
MM
8552 /* The initialization we're doing here is just a bitwise
8553 copy. */
8554 assignment = build (INIT_EXPR, TREE_TYPE (decl), decl, init);
f1dedc31
MM
8555 else
8556 assignment = NULL_TREE;
8557
8558 /* Once the assignment is complete, set TEMP to 1. Since the
8559 construction of the static object is complete at this point,
8560 we want to make sure TEMP is set to 1 even if a temporary
8561 constructed during the initialization throws an exception
8562 when it is destroyed. So, we combine the initialization and
8563 the assignment to TEMP into a single expression, ensuring
8564 that when we call finish_expr_stmt the cleanups will not be
8565 run until after TEMP is set to 1. */
c395453c 8566 guard_init = set_guard (guard);
f1dedc31
MM
8567 if (assignment)
8568 {
8569 assignment = tree_cons (NULL_TREE, assignment,
68642fb6 8570 build_tree_list (NULL_TREE,
c395453c 8571 guard_init));
f1dedc31
MM
8572 assignment = build_compound_expr (assignment);
8573 }
8574 else
c395453c 8575 assignment = guard_init;
f1dedc31 8576 finish_expr_stmt (assignment);
72b7eeff 8577
2036a15c
MM
8578 /* Use atexit to register a function for destroying this static
8579 variable. */
bf419747 8580 register_dtor_fn (decl);
72b7eeff 8581
f0105ed3 8582 finish_compound_stmt (/*has_no_scope=*/0, then_clause);
b7b8bcd2
MM
8583 finish_then_clause (if_stmt);
8584 finish_if_stmt ();
8d08fdba
MS
8585 }
8586 else
bbd15aac 8587 static_aggregates = tree_cons (init, decl, static_aggregates);
8d08fdba 8588}
3c5c0849
MM
8589
8590/* Finish the declaration of a catch-parameter. */
8591
b35d4555 8592tree
3c5c0849
MM
8593start_handler_parms (declspecs, declarator)
8594 tree declspecs;
8595 tree declarator;
8596{
8597 tree decl;
8598 if (declspecs)
8599 {
8600 decl = grokdeclarator (declarator, declspecs, CATCHPARM,
91d231cb 8601 1, NULL);
3c5c0849
MM
8602 if (decl == NULL_TREE)
8603 error ("invalid catch parameter");
8604 }
8605 else
8606 decl = NULL_TREE;
b35d4555
MM
8607
8608 return decl;
3c5c0849
MM
8609}
8610
8d08fdba
MS
8611\f
8612/* Make TYPE a complete type based on INITIAL_VALUE.
8613 Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
6ab5c740 8614 2 if there was no information (in which case assume 0 if DO_DEFAULT). */
8d08fdba
MS
8615
8616int
8617complete_array_type (type, initial_value, do_default)
8618 tree type, initial_value;
8619 int do_default;
8620{
8621 register tree maxindex = NULL_TREE;
8622 int value = 0;
68642fb6 8623
8d08fdba
MS
8624 if (initial_value)
8625 {
7b019c19
MM
8626 /* An array of character type can be initialized from a
8627 brace-enclosed string constant. */
8628 if (char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (type)))
8629 && TREE_CODE (initial_value) == CONSTRUCTOR
8630 && CONSTRUCTOR_ELTS (initial_value)
8631 && (TREE_CODE (TREE_VALUE (CONSTRUCTOR_ELTS (initial_value)))
8632 == STRING_CST)
8633 && TREE_CHAIN (CONSTRUCTOR_ELTS (initial_value)) == NULL_TREE)
8634 initial_value = TREE_VALUE (CONSTRUCTOR_ELTS (initial_value));
8635
8636 /* Note MAXINDEX is really the maximum index, one less than the
8637 size. */
8d08fdba 8638 if (TREE_CODE (initial_value) == STRING_CST)
e1cd6e56
MS
8639 {
8640 int eltsize
8641 = int_size_in_bytes (TREE_TYPE (TREE_TYPE (initial_value)));
8642 maxindex = build_int_2 ((TREE_STRING_LENGTH (initial_value)
8643 / eltsize) - 1, 0);
8644 }
8d08fdba
MS
8645 else if (TREE_CODE (initial_value) == CONSTRUCTOR)
8646 {
e1cd6e56 8647 tree elts = CONSTRUCTOR_ELTS (initial_value);
fed3cef0
RK
8648
8649 maxindex = ssize_int (-1);
e1cd6e56
MS
8650 for (; elts; elts = TREE_CHAIN (elts))
8651 {
8652 if (TREE_PURPOSE (elts))
8653 maxindex = TREE_PURPOSE (elts);
8654 else
fed3cef0 8655 maxindex = size_binop (PLUS_EXPR, maxindex, ssize_int (1));
e1cd6e56
MS
8656 }
8657 maxindex = copy_node (maxindex);
8d08fdba
MS
8658 }
8659 else
8660 {
8661 /* Make an error message unless that happened already. */
8662 if (initial_value != error_mark_node)
8663 value = 1;
0db982be
ML
8664 else
8665 initial_value = NULL_TREE;
8d08fdba
MS
8666
8667 /* Prevent further error messages. */
8668 maxindex = build_int_2 (0, 0);
8669 }
8670 }
8671
8672 if (!maxindex)
8673 {
8674 if (do_default)
8675 maxindex = build_int_2 (0, 0);
8676 value = 2;
8677 }
8678
8679 if (maxindex)
8680 {
51c184be 8681 tree itype;
6ab5c740
NS
8682 tree domain;
8683
8684 domain = build_index_type (maxindex);
8685 TYPE_DOMAIN (type) = domain;
51c184be 8686
dff6b454 8687 if (! TREE_TYPE (maxindex))
6ab5c740 8688 TREE_TYPE (maxindex) = domain;
51c184be
MS
8689 if (initial_value)
8690 itype = TREE_TYPE (initial_value);
8691 else
8692 itype = NULL;
8693 if (itype && !TYPE_DOMAIN (itype))
6ab5c740 8694 TYPE_DOMAIN (itype) = domain;
dff6b454
RK
8695 /* The type of the main variant should never be used for arrays
8696 of different sizes. It should only ever be completed with the
8697 size of the array. */
8698 if (! TYPE_DOMAIN (TYPE_MAIN_VARIANT (type)))
6ab5c740 8699 TYPE_DOMAIN (TYPE_MAIN_VARIANT (type)) = domain;
8d08fdba
MS
8700 }
8701
8702 /* Lay out the type now that we can get the real answer. */
8703
8704 layout_type (type);
8705
8706 return value;
8707}
8708\f
8709/* Return zero if something is declared to be a member of type
8710 CTYPE when in the context of CUR_TYPE. STRING is the error
8711 message to print in that case. Otherwise, quietly return 1. */
e92cc029 8712
8d08fdba 8713static int
4dacf5bd 8714member_function_or_else (ctype, cur_type, flags)
8d08fdba 8715 tree ctype, cur_type;
4dacf5bd 8716 enum overload_flags flags;
8d08fdba
MS
8717{
8718 if (ctype && ctype != cur_type)
8719 {
4dacf5bd 8720 if (flags == DTOR_FLAG)
33bd39a2 8721 error ("destructor for alien class `%T' cannot be a member",
2ae7bada 8722 ctype);
4dacf5bd 8723 else
33bd39a2 8724 error ("constructor for alien class `%T' cannot be a member",
2ae7bada 8725 ctype);
8d08fdba
MS
8726 return 0;
8727 }
8728 return 1;
8729}
8730\f
8731/* Subroutine of `grokdeclarator'. */
8732
8733/* Generate errors possibly applicable for a given set of specifiers.
8734 This is for ARM $7.1.2. */
e92cc029 8735
8d08fdba
MS
8736static void
8737bad_specifiers (object, type, virtualp, quals, inlinep, friendp, raises)
8738 tree object;
d8e178a0 8739 const char *type;
8d08fdba
MS
8740 int virtualp, quals, friendp, raises, inlinep;
8741{
8742 if (virtualp)
33bd39a2 8743 error ("`%D' declared as a `virtual' %s", object, type);
8d08fdba 8744 if (inlinep)
33bd39a2 8745 error ("`%D' declared as an `inline' %s", object, type);
8d08fdba 8746 if (quals)
33bd39a2 8747 error ("`const' and `volatile' function specifiers on `%D' invalid in %s declaration",
a28e3c7f 8748 object, type);
8d08fdba 8749 if (friendp)
f8e55f34 8750 cp_error_at ("`%D' declared as a friend", object);
e1be26f4
RS
8751 if (raises
8752 && (TREE_CODE (object) == TYPE_DECL
8753 || (!TYPE_PTRFN_P (TREE_TYPE (object))
742a37d5 8754 && !TYPE_REFFN_P (TREE_TYPE (object))
e1be26f4 8755 && !TYPE_PTRMEMFUNC_P (TREE_TYPE (object)))))
f8e55f34 8756 cp_error_at ("`%D' declared with an exception specification", object);
8d08fdba
MS
8757}
8758
8759/* CTYPE is class type, or null if non-class.
8760 TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
8761 or METHOD_TYPE.
8762 DECLARATOR is the function's name.
8763 VIRTUALP is truthvalue of whether the function is virtual or not.
8764 FLAGS are to be passed through to `grokclassfn'.
8765 QUALS are qualifiers indicating whether the function is `const'
8766 or `volatile'.
8767 RAISES is a list of exceptions that this function can raise.
8768 CHECK is 1 if we must find this method in CTYPE, 0 if we should
68642fb6 8769 not look, and -1 if we should not call `grokclassfn' at all.
3ddfb0e6 8770
20496fa2 8771 Returns `NULL_TREE' if something goes wrong, after issuing
3ddfb0e6 8772 applicable error messages. */
e92cc029 8773
8d08fdba 8774static tree
386b8a85 8775grokfndecl (ctype, type, declarator, orig_declarator, virtualp, flags, quals,
7a8f9fa9 8776 raises, check, friendp, publicp, inlinep, funcdef_flag,
2c73f9f5 8777 template_count, in_namespace)
8d08fdba
MS
8778 tree ctype, type;
8779 tree declarator;
386b8a85 8780 tree orig_declarator;
8d08fdba
MS
8781 int virtualp;
8782 enum overload_flags flags;
7a8f9fa9 8783 tree quals, raises;
386b8a85 8784 int check, friendp, publicp, inlinep, funcdef_flag, template_count;
2c73f9f5 8785 tree in_namespace;
8d08fdba 8786{
1951a1b6 8787 tree decl;
8d08fdba 8788 int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
856216bb 8789 int has_default_arg = 0;
42976354 8790 tree t;
8d08fdba 8791
8d08fdba 8792 if (raises)
271e6f02 8793 type = build_exception_variant (type, raises);
c11b6f21 8794
8d08fdba 8795 decl = build_lang_decl (FUNCTION_DECL, declarator, type);
2c73f9f5 8796 /* Propagate volatile out from type to decl. */
8d08fdba 8797 if (TYPE_VOLATILE (type))
893de33c 8798 TREE_THIS_VOLATILE (decl) = 1;
8d08fdba 8799
79c4d4b7 8800 /* If this decl has namespace scope, set that up. */
2c73f9f5 8801 if (in_namespace)
b262d64c 8802 set_decl_namespace (decl, in_namespace, friendp);
adae082f 8803 else if (!ctype)
79c4d4b7 8804 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
2c73f9f5 8805
0f8766b8
JM
8806 /* `main' and builtins have implicit 'C' linkage. */
8807 if ((MAIN_NAME_P (declarator)
8808 || (IDENTIFIER_LENGTH (declarator) > 10
8809 && IDENTIFIER_POINTER (declarator)[0] == '_'
8810 && IDENTIFIER_POINTER (declarator)[1] == '_'
8811 && strncmp (IDENTIFIER_POINTER (declarator)+2, "builtin_", 8) == 0))
8812 && current_lang_name == lang_name_cplusplus
94706a5c 8813 && ctype == NULL_TREE
79c4d4b7
JM
8814 /* NULL_TREE means global namespace. */
8815 && DECL_CONTEXT (decl) == NULL_TREE)
5d2ed28c 8816 SET_DECL_LANGUAGE (decl, lang_c);
0f8766b8 8817
8d08fdba
MS
8818 /* Should probably propagate const out from type to decl I bet (mrs). */
8819 if (staticp)
8820 {
8821 DECL_STATIC_FUNCTION_P (decl) = 1;
8822 DECL_CONTEXT (decl) = ctype;
8d08fdba
MS
8823 }
8824
e76a2646 8825 if (ctype)
4f1c5b7d 8826 DECL_CONTEXT (decl) = ctype;
e76a2646 8827
0f8766b8 8828 if (ctype == NULL_TREE && DECL_MAIN_P (decl))
faae18ab 8829 {
848b92e1 8830 if (processing_template_decl)
cb9a3ff8 8831 error ("cannot declare `::main' to be a template");
faae18ab 8832 if (inlinep)
cb9a3ff8 8833 error ("cannot declare `::main' to be inline");
f22967f3 8834 if (!publicp)
cb9a3ff8 8835 error ("cannot declare `::main' to be static");
f22967f3
MM
8836 if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
8837 integer_type_node))
8838 error ("`main' must return `int'");
faae18ab
MS
8839 inlinep = 0;
8840 publicp = 1;
8841 }
50a6dbd7 8842
59e76fc6
JM
8843 /* Members of anonymous types and local classes have no linkage; make
8844 them internal. */
1951a1b6
JM
8845 /* FIXME what if it gets a name from typedef? */
8846 if (ctype && (TYPE_ANONYMOUS_P (ctype)
4f1c5b7d 8847 || decl_function_context (TYPE_MAIN_DECL (ctype))))
50a6dbd7
JM
8848 publicp = 0;
8849
8850 if (publicp)
8851 {
8852 /* [basic.link]: A name with no linkage (notably, the name of a class
8853 or enumeration declared in a local scope) shall not be used to
8854 declare an entity with linkage.
8855
8856 Only check this for public decls for now. */
8857 t = no_linkage_check (TREE_TYPE (decl));
8858 if (t)
8859 {
1951a1b6 8860 if (TYPE_ANONYMOUS_P (t))
7f7c930e 8861 {
eb68cb58 8862 if (DECL_EXTERN_C_P (decl))
7f7c930e
JM
8863 /* Allow this; it's pretty common in C. */;
8864 else
1951a1b6 8865 {
33bd39a2 8866 pedwarn ("non-local function `%#D' uses anonymous type",
1951a1b6
JM
8867 decl);
8868 if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
8869 cp_pedwarn_at ("\
8870`%#D' does not refer to the unqualified type, so it is not used for linkage",
8871 TYPE_NAME (t));
8872 }
7f7c930e 8873 }
50a6dbd7 8874 else
33bd39a2 8875 pedwarn ("non-local function `%#D' uses local type `%T'",
cce2be43 8876 decl, t);
50a6dbd7
JM
8877 }
8878 }
8879
893de33c 8880 TREE_PUBLIC (decl) = publicp;
faae18ab 8881 if (! publicp)
893de33c
JM
8882 {
8883 DECL_INTERFACE_KNOWN (decl) = 1;
8884 DECL_NOT_REALLY_EXTERN (decl) = 1;
8885 }
faae18ab 8886
acc72c37 8887 /* If the declaration was declared inline, mark it as such. */
faae18ab 8888 if (inlinep)
acc72c37
MM
8889 DECL_DECLARED_INLINE_P (decl) = 1;
8890 /* We inline functions that are explicitly declared inline, or, when
8891 the user explicitly asks us to, all functions. */
8892 if (DECL_DECLARED_INLINE_P (decl) || flag_inline_trees == 2)
8893 DECL_INLINE (decl) = 1;
8d08fdba
MS
8894
8895 DECL_EXTERNAL (decl) = 1;
8896 if (quals != NULL_TREE && TREE_CODE (type) == FUNCTION_TYPE)
8897 {
33bd39a2 8898 error ("%smember function `%D' cannot have `%T' method qualifier",
8d08fdba
MS
8899 (ctype ? "static " : "non-"), decl, TREE_VALUE (quals));
8900 quals = NULL_TREE;
8901 }
8902
596ea4e5 8903 if (IDENTIFIER_OPNAME_P (DECL_NAME (decl)))
271e6f02 8904 grok_op_properties (decl, friendp);
8d08fdba 8905
4f1c5b7d 8906 if (ctype && decl_function_context (decl))
893de33c 8907 DECL_NO_STATIC_CHAIN (decl) = 1;
e76a2646 8908
42976354
BK
8909 for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
8910 if (TREE_PURPOSE (t)
8911 && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
8912 {
856216bb 8913 has_default_arg = 1;
42976354
BK
8914 break;
8915 }
8916
f9d94ea4
JM
8917 if (friendp
8918 && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
8919 {
8920 if (funcdef_flag)
33bd39a2 8921 error
8251199e 8922 ("defining explicit specialization `%D' in friend declaration",
f9d94ea4
JM
8923 orig_declarator);
8924 else
8925 {
76e57b45
NS
8926 tree fns = TREE_OPERAND (orig_declarator, 0);
8927 tree args = TREE_OPERAND (orig_declarator, 1);
d363e7bf 8928
7e2421f7
MM
8929 if (PROCESSING_REAL_TEMPLATE_DECL_P ())
8930 {
8931 /* Something like `template <class T> friend void f<T>()'. */
33bd39a2 8932 error ("invalid use of template-id `%D' in declaration of primary template",
7e2421f7 8933 orig_declarator);
20496fa2 8934 return NULL_TREE;
7e2421f7
MM
8935 }
8936
856216bb 8937
f9d94ea4
JM
8938 /* A friend declaration of the form friend void f<>(). Record
8939 the information in the TEMPLATE_ID_EXPR. */
8940 SET_DECL_IMPLICIT_INSTANTIATION (decl);
76e57b45
NS
8941
8942 if (TREE_CODE (fns) == COMPONENT_REF)
8943 {
8944 /* Due to bison parser ickiness, we will have already looked
8945 up an operator_name or PFUNCNAME within the current class
8946 (see template_id in parse.y). If the current class contains
8947 such a name, we'll get a COMPONENT_REF here. Undo that. */
d363e7bf 8948
76e57b45
NS
8949 my_friendly_assert (TREE_TYPE (TREE_OPERAND (fns, 0))
8950 == current_class_type, 20001120);
8951 fns = TREE_OPERAND (fns, 1);
8952 }
8953 my_friendly_assert (TREE_CODE (fns) == IDENTIFIER_NODE
8954 || TREE_CODE (fns) == LOOKUP_EXPR
8955 || TREE_CODE (fns) == OVERLOAD, 20001120);
8956 DECL_TEMPLATE_INFO (decl) = tree_cons (fns, args, NULL_TREE);
856216bb
MM
8957
8958 if (has_default_arg)
8959 {
33bd39a2 8960 error ("default arguments are not allowed in declaration of friend template specialization `%D'",
856216bb
MM
8961 decl);
8962 return NULL_TREE;
8963 }
8964
8965 if (inlinep)
8966 {
33bd39a2 8967 error ("`inline' is not allowed in declaration of friend template specialization `%D'",
856216bb
MM
8968 decl);
8969 return NULL_TREE;
8970 }
f9d94ea4 8971 }
f84b4be9 8972 }
386b8a85 8973
856216bb
MM
8974 if (has_default_arg)
8975 add_defarg_fn (decl);
8976
1eb0072d
JM
8977 if (funcdef_flag)
8978 /* Make the init_value nonzero so pushdecl knows this is not
8979 tentative. error_mark_node is replaced later with the BLOCK. */
8980 DECL_INITIAL (decl) = error_mark_node;
8981
93ca4ba7 8982 if (TYPE_NOTHROW_P (type) || nothrow_libfn_p (decl))
1660cb3a
JM
8983 TREE_NOTHROW (decl) = 1;
8984
75650646 8985 /* Caller will do the rest of this. */
8d08fdba
MS
8986 if (check < 0)
8987 return decl;
8988
1951a1b6 8989 if (flags == NO_SPECIAL && ctype && constructor_name (ctype) == declarator)
74b846e0
MM
8990 DECL_CONSTRUCTOR_P (decl) = 1;
8991
8992 /* Function gets the ugly name, field gets the nice one. This call
8993 may change the type of the function (because of default
8994 parameters)! */
8995 if (ctype != NULL_TREE)
8996 grokclassfn (ctype, decl, flags, quals);
8997
8998 decl = check_explicit_specialization (orig_declarator, decl,
8999 template_count,
9000 2 * (funcdef_flag != 0) +
9001 4 * (friendp != 0));
9002 if (decl == error_mark_node)
9003 return NULL_TREE;
98c1c668 9004
74b846e0
MM
9005 if (ctype != NULL_TREE
9006 && (! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
9007 && check)
8d08fdba 9008 {
74b846e0 9009 tree old_decl;
8d08fdba 9010
74b846e0 9011 old_decl = check_classfn (ctype, decl);
8d08fdba 9012
74b846e0
MM
9013 if (old_decl && TREE_CODE (old_decl) == TEMPLATE_DECL)
9014 /* Because grokfndecl is always supposed to return a
9015 FUNCTION_DECL, we pull out the DECL_TEMPLATE_RESULT
9016 here. We depend on our callers to figure out that its
9017 really a template that's being returned. */
9018 old_decl = DECL_TEMPLATE_RESULT (old_decl);
6c30752f 9019
74b846e0
MM
9020 if (old_decl && DECL_STATIC_FUNCTION_P (old_decl)
9021 && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
5566b478 9022 {
74b846e0
MM
9023 /* Remove the `this' parm added by grokclassfn.
9024 XXX Isn't this done in start_function, too? */
3afb32a4 9025 revert_static_member_fn (decl);
74b846e0 9026 last_function_parms = TREE_CHAIN (last_function_parms);
5566b478 9027 }
74b846e0 9028 if (old_decl && DECL_ARTIFICIAL (old_decl))
33bd39a2 9029 error ("definition of implicitly-declared `%D'", old_decl);
8d08fdba 9030
74b846e0 9031 if (old_decl)
8d08fdba 9032 {
74b846e0
MM
9033 /* Since we've smashed OLD_DECL to its
9034 DECL_TEMPLATE_RESULT, we must do the same to DECL. */
9035 if (TREE_CODE (decl) == TEMPLATE_DECL)
9036 decl = DECL_TEMPLATE_RESULT (decl);
9037
9038 /* Attempt to merge the declarations. This can fail, in
9039 the case of some illegal specialization declarations. */
9040 if (!duplicate_decls (decl, old_decl))
33bd39a2 9041 error ("no `%#D' member function declared in class `%T'",
74b846e0
MM
9042 decl, ctype);
9043 return old_decl;
8d08fdba
MS
9044 }
9045 }
74b846e0
MM
9046
9047 if (DECL_CONSTRUCTOR_P (decl) && !grok_ctor_properties (ctype, decl))
9048 return NULL_TREE;
9049
9050 if (ctype == NULL_TREE || check)
9051 return decl;
9052
9053 if (virtualp)
cbb40945 9054 DECL_VIRTUAL_P (decl) = 1;
74b846e0 9055
8d08fdba
MS
9056 return decl;
9057}
9058
9059static tree
2c73f9f5 9060grokvardecl (type, declarator, specbits_in, initialized, constp, in_namespace)
8d08fdba
MS
9061 tree type;
9062 tree declarator;
d2e5ee5c 9063 RID_BIT_TYPE *specbits_in;
8d08fdba 9064 int initialized;
a9aedbc2 9065 int constp;
2c73f9f5 9066 tree in_namespace;
8d08fdba
MS
9067{
9068 tree decl;
f7da6097
MS
9069 RID_BIT_TYPE specbits;
9070
9071 specbits = *specbits_in;
8d08fdba
MS
9072
9073 if (TREE_CODE (type) == OFFSET_TYPE)
9074 {
9075 /* If you declare a static member so that it
9076 can be initialized, the code will reach here. */
5b605f68
MS
9077 tree basetype = TYPE_OFFSET_BASETYPE (type);
9078 type = TREE_TYPE (type);
4ce3d537 9079 decl = build_lang_decl (VAR_DECL, declarator, type);
5b605f68 9080 DECL_CONTEXT (decl) = basetype;
8d08fdba
MS
9081 }
9082 else
30394414 9083 {
79c4d4b7
JM
9084 tree context;
9085
9086 if (in_namespace)
9087 context = in_namespace;
9088 else if (namespace_bindings_p () || RIDBIT_SETP (RID_EXTERN, specbits))
9089 context = current_namespace;
820fcad8
JM
9090 else
9091 context = NULL_TREE;
79c4d4b7 9092
5d2ed28c
MM
9093 /* For namespace-scope variables, declared in a template, we
9094 need the full lang_decl. The same is true for
9095 namespace-scope variables that do not have C++ language
9096 linkage. */
9097 if (context
9098 && (processing_template_decl
9099 || current_lang_name != lang_name_cplusplus))
cd9f6678 9100 decl = build_lang_decl (VAR_DECL, declarator, type);
9188c363 9101 else
c82dbd95 9102 decl = build_decl (VAR_DECL, declarator, type);
79c4d4b7
JM
9103
9104 if (context)
b262d64c 9105 set_decl_namespace (decl, context, 0);
79c4d4b7
JM
9106
9107 context = DECL_CONTEXT (decl);
5362b086 9108 if (declarator && context && current_lang_name != lang_name_c)
92643fea
MM
9109 /* We can't mangle lazily here because we don't have any
9110 way to recover whether or not a variable was `extern
9111 "C"' later. */
9112 mangle_decl (decl);
30394414 9113 }
6060a796 9114
2c73f9f5 9115 if (in_namespace)
b262d64c 9116 set_decl_namespace (decl, in_namespace, 0);
2c73f9f5 9117
8d08fdba
MS
9118 if (RIDBIT_SETP (RID_EXTERN, specbits))
9119 {
9120 DECL_THIS_EXTERN (decl) = 1;
9121 DECL_EXTERNAL (decl) = !initialized;
9122 }
9123
9124 /* In class context, static means one per class,
9125 public access, and static storage. */
2b9dc906 9126 if (DECL_CLASS_SCOPE_P (decl))
8d08fdba
MS
9127 {
9128 TREE_PUBLIC (decl) = 1;
9129 TREE_STATIC (decl) = 1;
5b605f68 9130 DECL_EXTERNAL (decl) = 0;
8d08fdba
MS
9131 }
9132 /* At top level, either `static' or no s.c. makes a definition
9133 (perhaps tentative), and absence of `static' makes it public. */
a9aedbc2 9134 else if (toplevel_bindings_p ())
8d08fdba 9135 {
a9aedbc2 9136 TREE_PUBLIC (decl) = (RIDBIT_NOTSETP (RID_STATIC, specbits)
9fffd093 9137 && (DECL_THIS_EXTERN (decl) || ! constp));
8d08fdba
MS
9138 TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
9139 }
9140 /* Not at top level, only `static' makes a static definition. */
9141 else
9142 {
9143 TREE_STATIC (decl) = !! RIDBIT_SETP (RID_STATIC, specbits);
9144 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
9145 }
50a6dbd7
JM
9146
9147 if (TREE_PUBLIC (decl))
9148 {
9149 /* [basic.link]: A name with no linkage (notably, the name of a class
9150 or enumeration declared in a local scope) shall not be used to
9151 declare an entity with linkage.
9152
9153 Only check this for public decls for now. */
9154 tree t = no_linkage_check (TREE_TYPE (decl));
9155 if (t)
9156 {
1951a1b6 9157 if (TYPE_ANONYMOUS_P (t))
50a6dbd7
JM
9158 /* Ignore for now; `enum { foo } e' is pretty common. */;
9159 else
33bd39a2 9160 pedwarn ("non-local variable `%#D' uses local type `%T'",
50a6dbd7
JM
9161 decl, t);
9162 }
9163 }
9164
8d08fdba
MS
9165 return decl;
9166}
9167
d8f8dca1
MM
9168/* Create and return a canonical pointer to member function type, for
9169 TYPE, which is a POINTER_TYPE to a METHOD_TYPE. */
8d08fdba
MS
9170
9171tree
9172build_ptrmemfunc_type (type)
9173 tree type;
9174{
9175 tree fields[4];
9176 tree t;
46cbda4a 9177 tree unqualified_variant = NULL_TREE;
8d08fdba 9178
d48ebde1
NS
9179 if (type == error_mark_node)
9180 return type;
d363e7bf 9181
8d08fdba
MS
9182 /* If a canonical type already exists for this type, use it. We use
9183 this method instead of type_hash_canon, because it only does a
9184 simple equality check on the list of field members. */
9185
9186 if ((t = TYPE_GET_PTRMEMFUNC_TYPE (type)))
9187 return t;
9188
46cbda4a
MM
9189 /* Make sure that we always have the unqualified pointer-to-member
9190 type first. */
89d684bb 9191 if (cp_type_quals (type) != TYPE_UNQUALIFIED)
68642fb6 9192 unqualified_variant
46cbda4a
MM
9193 = build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type));
9194
33848bb0 9195 t = make_aggr_type (RECORD_TYPE);
2c73f9f5 9196 /* Let the front-end know this is a pointer to member function... */
db5ae43f 9197 TYPE_PTRMEMFUNC_FLAG (t) = 1;
2c73f9f5 9198 /* ... and not really an aggregate. */
7ddedda4 9199 SET_IS_AGGR_TYPE (t, 0);
8d08fdba 9200
1f84ec23
MM
9201 fields[0] = build_decl (FIELD_DECL, pfn_identifier, type);
9202 fields[1] = build_decl (FIELD_DECL, delta_identifier,
9203 delta_type_node);
18ae7f63 9204 finish_builtin_type (t, "__ptrmemfunc_type", fields, 1, ptr_type_node);
8d08fdba 9205
8d08fdba
MS
9206 /* Zap out the name so that the back-end will give us the debugging
9207 information for this anonymous RECORD_TYPE. */
9208 TYPE_NAME (t) = NULL_TREE;
9209
46cbda4a
MM
9210 /* If this is not the unqualified form of this pointer-to-member
9211 type, set the TYPE_MAIN_VARIANT for this type to be the
9212 unqualified type. Since they are actually RECORD_TYPEs that are
9213 not variants of each other, we must do this manually. */
89d684bb 9214 if (cp_type_quals (type) != TYPE_UNQUALIFIED)
46cbda4a 9215 {
89d684bb 9216 t = build_qualified_type (t, cp_type_quals (type));
46cbda4a
MM
9217 TYPE_MAIN_VARIANT (t) = unqualified_variant;
9218 TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (unqualified_variant);
9219 TYPE_NEXT_VARIANT (unqualified_variant) = t;
9220 }
9221
9222 /* Cache this pointer-to-member type so that we can find it again
9223 later. */
8d08fdba
MS
9224 TYPE_SET_PTRMEMFUNC_TYPE (type, t);
9225
e92cc029 9226 /* Seems to be wanted. */
8d08fdba 9227 CLASSTYPE_GOT_SEMICOLON (t) = 1;
46cbda4a 9228
8d08fdba
MS
9229 return t;
9230}
9231
b17e2870
JM
9232/* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
9233 Check to see that the definition is valid. Issue appropriate error
9234 messages. Return 1 if the definition is particularly bad, or 0
9235 otherwise. */
9236
9237int
9238check_static_variable_definition (decl, type)
9239 tree decl;
9240 tree type;
9241{
9242 /* Motion 10 at San Diego: If a static const integral data member is
9243 initialized with an integral constant expression, the initializer
9244 may appear either in the declaration (within the class), or in
9245 the definition, but not both. If it appears in the class, the
9246 member is a member constant. The file-scope definition is always
9247 required. */
9248 if (CLASS_TYPE_P (type) || TREE_CODE (type) == REFERENCE_TYPE)
9249 {
33bd39a2 9250 error ("invalid in-class initialization of static data member of non-integral type `%T'",
b17e2870
JM
9251 type);
9252 /* If we just return the declaration, crashes will sometimes
9253 occur. We therefore return void_type_node, as if this was a
9254 friend declaration, to cause callers to completely ignore
9255 this declaration. */
9256 return 1;
9257 }
9258 else if (!CP_TYPE_CONST_P (type))
33bd39a2 9259 error ("ISO C++ forbids in-class initialization of non-const static member `%D'",
b17e2870
JM
9260 decl);
9261 else if (pedantic && !INTEGRAL_TYPE_P (type))
33bd39a2 9262 pedwarn ("ISO C++ forbids initialization of member constant `%D' of non-integral type `%T'", decl, type);
b17e2870
JM
9263
9264 return 0;
9265}
9266
2848ad0f
MM
9267/* Given the SIZE (i.e., number of elements) in an array, compute an
9268 appropriate index type for the array. If non-NULL, NAME is the
9269 name of the thing being declared. */
9270
c95cd22e 9271tree
2848ad0f
MM
9272compute_array_index_type (name, size)
9273 tree name;
9274 tree size;
9275{
9276 tree itype;
9277
2848ad0f
MM
9278 /* If this involves a template parameter, it will be a constant at
9279 instantiation time, but we don't know what the value is yet.
9280 Even if no template parameters are involved, we may an expression
9281 that is not a constant; we don't even simplify `1 + 2' when
9282 processing a template. */
9283 if (processing_template_decl)
9284 {
9285 /* Resolve a qualified reference to an enumerator or static
9286 const data member of ours. */
9287 if (TREE_CODE (size) == SCOPE_REF
9288 && TREE_OPERAND (size, 0) == current_class_type)
9289 {
9290 tree t = lookup_field (current_class_type,
9291 TREE_OPERAND (size, 1), 0, 0);
9292 if (t)
9293 size = t;
9294 }
9295
9296 return build_index_type (build_min (MINUS_EXPR, sizetype,
9297 size, integer_one_node));
9298 }
9299
80f5bb34
MM
9300 /* The size might be the result of a cast. */
9301 STRIP_TYPE_NOPS (size);
9302
9303 /* It might be a const variable or enumeration constant. */
9304 size = decl_constant_value (size);
9305
2848ad0f
MM
9306 /* The array bound must be an integer type. */
9307 if (TREE_CODE (TREE_TYPE (size)) != INTEGER_TYPE
9308 && TREE_CODE (TREE_TYPE (size)) != ENUMERAL_TYPE
9309 && TREE_CODE (TREE_TYPE (size)) != BOOLEAN_TYPE)
9310 {
d67cdbc3 9311 if (name)
33bd39a2 9312 error ("size of array `%D' has non-integer type", name);
d67cdbc3 9313 else
33bd39a2 9314 error ("size of array has non-integer type");
2848ad0f
MM
9315 size = integer_one_node;
9316 }
9317
9318 /* Normally, the array-bound will be a constant. */
2bb5d995 9319 if (TREE_CODE (size) == INTEGER_CST)
2848ad0f
MM
9320 {
9321 /* Check to see if the array bound overflowed. Make that an
9322 error, no matter how generous we're being. */
9323 int old_flag_pedantic_errors = flag_pedantic_errors;
9324 int old_pedantic = pedantic;
9325 pedantic = flag_pedantic_errors = 1;
9326 constant_expression_warning (size);
9327 pedantic = old_pedantic;
9328 flag_pedantic_errors = old_flag_pedantic_errors;
9329
9330 /* An array must have a positive number of elements. */
9331 if (INT_CST_LT (size, integer_zero_node))
9332 {
d67cdbc3 9333 if (name)
33bd39a2 9334 error ("size of array `%D' is negative", name);
d67cdbc3 9335 else
33bd39a2 9336 error ("size of array is negative");
2848ad0f
MM
9337 size = integer_one_node;
9338 }
9339 /* Except that an extension we allow zero-sized arrays. We
68642fb6 9340 always allow them in system headers because glibc uses
2848ad0f
MM
9341 them. */
9342 else if (integer_zerop (size) && pedantic && !in_system_header)
d67cdbc3
JM
9343 {
9344 if (name)
33bd39a2 9345 pedwarn ("ISO C++ forbids zero-size array `%D'", name);
d67cdbc3 9346 else
33bd39a2 9347 pedwarn ("ISO C++ forbids zero-size array");
d67cdbc3 9348 }
2848ad0f 9349 }
2bb5d995
JM
9350 else if (TREE_CONSTANT (size))
9351 {
9352 /* `(int) &fn' is not a valid array bound. */
9353 if (name)
33bd39a2 9354 error ("size of array `%D' is not an integral constant-expression",
2bb5d995
JM
9355 name);
9356 else
33bd39a2 9357 error ("size of array is not an integral constant-expression");
2bb5d995 9358 }
2848ad0f
MM
9359
9360 /* Compute the index of the largest element in the array. It is
9361 one less than the number of elements in the array. */
9362 itype
ab76ca54
MM
9363 = fold (cp_build_binary_op (MINUS_EXPR,
9364 cp_convert (ssizetype, size),
9365 cp_convert (ssizetype,
9366 integer_one_node)));
68642fb6 9367
2848ad0f
MM
9368 /* Check for variable-sized arrays. We allow such things as an
9369 extension, even though they are not allowed in ANSI/ISO C++. */
9370 if (!TREE_CONSTANT (itype))
9371 {
9372 if (pedantic)
9373 {
9374 if (name)
33bd39a2 9375 pedwarn ("ISO C++ forbids variable-size array `%D'",
2848ad0f
MM
9376 name);
9377 else
33bd39a2 9378 pedwarn ("ISO C++ forbids variable-size array");
2848ad0f
MM
9379 }
9380
9381 /* Create a variable-sized array index type. */
9382 itype = variable_size (itype);
9383 }
9384 /* Make sure that there was no overflow when creating to a signed
9385 index type. (For example, on a 32-bit machine, an array with
9386 size 2^32 - 1 is too big.) */
9387 else if (TREE_OVERFLOW (itype))
9388 {
9389 error ("overflow in array dimension");
9390 TREE_OVERFLOW (itype) = 0;
9391 }
68642fb6 9392
2848ad0f
MM
9393 /* Create and return the appropriate index type. */
9394 return build_index_type (itype);
9395}
9396
9397/* Returns an ARRAY_TYPE for an array with SIZE elements of the
9398 indicated TYPE. If non-NULL, NAME is the NAME of the declaration
9399 with this type. */
9400
9401static tree
9402create_array_type_for_decl (name, type, size)
9403 tree name;
9404 tree type;
9405 tree size;
9406{
9407 tree itype = NULL_TREE;
9408 const char* error_msg;
9409
9410 /* If things have already gone awry, bail now. */
9411 if (type == error_mark_node || size == error_mark_node)
9412 return error_mark_node;
9413
9414 /* Assume that everything will go OK. */
9415 error_msg = NULL;
9416
9417 /* There are some types which cannot be array elements. */
9418 switch (TREE_CODE (type))
9419 {
9420 case VOID_TYPE:
9421 error_msg = "array of void";
9422 break;
9423
9424 case FUNCTION_TYPE:
9425 error_msg = "array of functions";
9426 break;
9427
9428 case REFERENCE_TYPE:
9429 error_msg = "array of references";
9430 break;
9431
9432 case OFFSET_TYPE:
9433 error_msg = "array of data members";
9434 break;
9435
9436 case METHOD_TYPE:
9437 error_msg = "array of function members";
9438 break;
9439
9440 default:
9441 break;
9442 }
9443
9444 /* If something went wrong, issue an error-message and return. */
9445 if (error_msg)
9446 {
9447 if (name)
33bd39a2 9448 error ("declaration of `%D' as %s", name, error_msg);
2848ad0f 9449 else
33bd39a2 9450 error ("creating %s", error_msg);
2848ad0f
MM
9451
9452 return error_mark_node;
9453 }
9454
9455 /* [dcl.array]
68642fb6 9456
2848ad0f
MM
9457 The constant expressions that specify the bounds of the arrays
9458 can be omitted only for the first member of the sequence. */
9459 if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
9460 {
b3faacfd 9461 if (name)
33bd39a2 9462 error ("declaration of `%D' as multidimensional array must have bounds for all dimensions except the first",
b3faacfd
KL
9463 name);
9464 else
33bd39a2 9465 error ("multidimensional array must have bounds for all dimensions except the first");
2848ad0f
MM
9466
9467 return error_mark_node;
9468 }
9469
9470 /* Figure out the index type for the array. */
9471 if (size)
9472 itype = compute_array_index_type (name, size);
9473
9474 return build_cplus_array_type (type, itype);
9475}
9476
3dbc07b6
MM
9477/* Check that it's OK to declare a function with the indicated TYPE.
9478 SFK indicates the kind of special function (if any) that this
1f84ec23 9479 function is. OPTYPE is the type given in a conversion operator
3dbc07b6
MM
9480 declaration. Returns the actual return type of the function; that
9481 may be different than TYPE if an error occurs, or for certain
9482 special functions. */
9483
9484static tree
1f84ec23 9485check_special_function_return_type (sfk, type, optype)
3dbc07b6
MM
9486 special_function_kind sfk;
9487 tree type;
3dbc07b6
MM
9488 tree optype;
9489{
9490 switch (sfk)
9491 {
9492 case sfk_constructor:
9493 if (type)
33bd39a2 9494 error ("return type specification for constructor invalid");
5362b086 9495
1f84ec23 9496 type = void_type_node;
3dbc07b6
MM
9497 break;
9498
9499 case sfk_destructor:
9500 if (type)
33bd39a2 9501 error ("return type specification for destructor invalid");
3dbc07b6
MM
9502 type = void_type_node;
9503 break;
9504
9505 case sfk_conversion:
9506 if (type && !same_type_p (type, optype))
33bd39a2 9507 error ("operator `%T' declared to return `%T'", optype, type);
3dbc07b6 9508 else if (type)
33bd39a2 9509 pedwarn ("return type specified for `operator %T'", optype);
3dbc07b6
MM
9510 type = optype;
9511 break;
9512
9513 default:
9514 my_friendly_abort (20000408);
9515 break;
9516 }
9517
9518 return type;
9519}
9520
8d08fdba
MS
9521/* Given declspecs and a declarator,
9522 determine the name and type of the object declared
9523 and construct a ..._DECL node for it.
9524 (In one case we can return a ..._TYPE node instead.
9525 For invalid input we sometimes return 0.)
9526
9527 DECLSPECS is a chain of tree_list nodes whose value fields
9528 are the storage classes and type specifiers.
9529
9530 DECL_CONTEXT says which syntactic context this declaration is in:
9531 NORMAL for most contexts. Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
9532 FUNCDEF for a function definition. Like NORMAL but a few different
9533 error messages in each case. Return value may be zero meaning
9534 this definition is too screwy to try to parse.
9535 MEMFUNCDEF for a function definition. Like FUNCDEF but prepares to
9536 handle member functions (which have FIELD context).
9537 Return value may be zero meaning this definition is too screwy to
9538 try to parse.
9539 PARM for a parameter declaration (either within a function prototype
9540 or before a function body). Make a PARM_DECL, or return void_type_node.
db5ae43f 9541 CATCHPARM for a parameter declaration before a catch clause.
8d08fdba
MS
9542 TYPENAME if for a typename (in a cast or sizeof).
9543 Don't make a DECL node; just return the ..._TYPE node.
9544 FIELD for a struct or union field; make a FIELD_DECL.
9545 BITFIELD for a field with specified width.
9546 INITIALIZED is 1 if the decl has an initializer.
9547
91d231cb
JM
9548 ATTRLIST is a pointer to the list of attributes, which may be NULL
9549 if there are none; *ATTRLIST may be modified if attributes from inside
9550 the declarator should be applied to the declaration.
b17e2870 9551
70adf8a9 9552 In the TYPENAME case, DECLARATOR is really an abstract declarator.
8d08fdba
MS
9553 It may also be so in the PARM case, for a prototype where the
9554 argument type is specified but not the name.
9555
9556 This function is where the complicated C meanings of `static'
9557 and `extern' are interpreted.
9558
9559 For C++, if there is any monkey business to do, the function which
9560 calls this one must do it, i.e., prepending instance variables,
9561 renaming overloaded function names, etc.
9562
9563 Note that for this C++, it is an error to define a method within a class
9564 which does not belong to that class.
9565
9566 Except in the case where SCOPE_REFs are implicitly known (such as
9567 methods within a class being redundantly qualified),
9568 declarations which involve SCOPE_REFs are returned as SCOPE_REFs
9569 (class_name::decl_name). The caller must also deal with this.
9570
9571 If a constructor or destructor is seen, and the context is FIELD,
9572 then the type gains the attribute TREE_HAS_x. If such a declaration
9573 is erroneous, NULL_TREE is returned.
9574
9575 QUALS is used only for FUNCDEF and MEMFUNCDEF cases. For a member
535233a8
NS
9576 function, these are the qualifiers to give to the `this' pointer. We
9577 apply TYPE_QUAL_RESTRICT to the this ptr, not the object.
8d08fdba
MS
9578
9579 May return void_type_node if the declarator turned out to be a friend.
9580 See grokfield for details. */
9581
8d08fdba 9582tree
c11b6f21 9583grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
8d08fdba
MS
9584 tree declspecs;
9585 tree declarator;
9586 enum decl_context decl_context;
9587 int initialized;
91d231cb 9588 tree *attrlist;
8d08fdba
MS
9589{
9590 RID_BIT_TYPE specbits;
9591 int nclasses = 0;
9592 tree spec;
9593 tree type = NULL_TREE;
9594 int longlong = 0;
9595 int constp;
91063b51 9596 int restrictp;
8d08fdba 9597 int volatilep;
91063b51 9598 int type_quals;
db5ae43f 9599 int virtualp, explicitp, friendp, inlinep, staticp;
8d08fdba
MS
9600 int explicit_int = 0;
9601 int explicit_char = 0;
37c46b43 9602 int defaulted_int = 0;
270d8c65
NS
9603 int extern_langp = 0;
9604
8d08fdba 9605 tree typedef_decl = NULL_TREE;
9c0758dd 9606 const char *name;
8d08fdba
MS
9607 tree typedef_type = NULL_TREE;
9608 int funcdef_flag = 0;
9609 enum tree_code innermost_code = ERROR_MARK;
9610 int bitfield = 0;
6125f3be
DE
9611#if 0
9612 /* See the code below that used this. */
91d231cb 9613 tree decl_attr = NULL_TREE;
6125f3be 9614#endif
8d08fdba
MS
9615 /* Set this to error_mark_node for FIELD_DECLs we could not handle properly.
9616 All FIELD_DECLs we build here have `init' put into their DECL_INITIAL. */
9617 tree init = NULL_TREE;
9618
9619 /* Keep track of what sort of function is being processed
9620 so that we can warn about default return values, or explicit
9621 return values which do not match prescribed defaults. */
3dbc07b6 9622 special_function_kind sfk = sfk_none;
8d08fdba
MS
9623
9624 tree dname = NULL_TREE;
9625 tree ctype = current_class_type;
9626 tree ctor_return_type = NULL_TREE;
9627 enum overload_flags flags = NO_SPECIAL;
8d08fdba 9628 tree quals = NULL_TREE;
c11b6f21 9629 tree raises = NULL_TREE;
386b8a85 9630 int template_count = 0;
2c73f9f5 9631 tree in_namespace = NULL_TREE;
91d231cb 9632 tree returned_attrs = NULL_TREE;
8d08fdba
MS
9633
9634 RIDBIT_RESET_ALL (specbits);
9635 if (decl_context == FUNCDEF)
9636 funcdef_flag = 1, decl_context = NORMAL;
9637 else if (decl_context == MEMFUNCDEF)
9638 funcdef_flag = -1, decl_context = FIELD;
9639 else if (decl_context == BITFIELD)
9640 bitfield = 1, decl_context = FIELD;
9641
8d08fdba
MS
9642 /* Look inside a declarator for the name being declared
9643 and get it as a string, for an error message. */
9644 {
be99da77
MS
9645 tree *next = &declarator;
9646 register tree decl;
8d08fdba
MS
9647 name = NULL;
9648
be99da77
MS
9649 while (next && *next)
9650 {
9651 decl = *next;
9652 switch (TREE_CODE (decl))
8d08fdba 9653 {
52fbc847
JM
9654 case TREE_LIST:
9655 /* For attributes. */
9656 next = &TREE_VALUE (decl);
9657 break;
9658
be99da77
MS
9659 case COND_EXPR:
9660 ctype = NULL_TREE;
9661 next = &TREE_OPERAND (decl, 0);
9662 break;
8d08fdba 9663
2c73f9f5 9664 case BIT_NOT_EXPR: /* For C++ destructors! */
8d08fdba 9665 {
be99da77
MS
9666 tree name = TREE_OPERAND (decl, 0);
9667 tree rename = NULL_TREE;
9668
9669 my_friendly_assert (flags == NO_SPECIAL, 152);
9670 flags = DTOR_FLAG;
3dbc07b6 9671 sfk = sfk_destructor;
5566b478
MS
9672 if (TREE_CODE (name) == TYPE_DECL)
9673 TREE_OPERAND (decl, 0) = name = constructor_name (name);
be99da77
MS
9674 my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 153);
9675 if (ctype == NULL_TREE)
9676 {
9677 if (current_class_type == NULL_TREE)
9678 {
8251199e 9679 error ("destructors must be member functions");
be99da77
MS
9680 flags = NO_SPECIAL;
9681 }
9682 else
9683 {
9684 tree t = constructor_name (current_class_name);
9685 if (t != name)
9686 rename = t;
9687 }
9688 }
8d08fdba 9689 else
be99da77
MS
9690 {
9691 tree t = constructor_name (ctype);
9692 if (t != name)
9693 rename = t;
9694 }
51c184be 9695
be99da77 9696 if (rename)
39211cd5 9697 {
33bd39a2 9698 error ("destructor `%T' must match class name `%T'",
5566b478 9699 name, rename);
be99da77 9700 TREE_OPERAND (decl, 0) = rename;
39211cd5 9701 }
be99da77 9702 next = &name;
51c184be 9703 }
be99da77 9704 break;
8d08fdba 9705
be99da77 9706 case ADDR_EXPR: /* C++ reference declaration */
2c73f9f5 9707 /* Fall through. */
be99da77
MS
9708 case ARRAY_REF:
9709 case INDIRECT_REF:
9710 ctype = NULL_TREE;
9711 innermost_code = TREE_CODE (decl);
9712 next = &TREE_OPERAND (decl, 0);
9713 break;
8d08fdba 9714
be99da77 9715 case CALL_EXPR:
43f887f9 9716 if (parmlist_is_exprlist (CALL_DECLARATOR_PARMS (decl)))
8d08fdba 9717 {
b17e2870
JM
9718 /* This is actually a variable declaration using
9719 constructor syntax. We need to call start_decl and
9720 cp_finish_decl so we can get the variable
9721 initialized... */
9722
91d231cb 9723 tree attributes;
be99da77
MS
9724
9725 *next = TREE_OPERAND (decl, 0);
43f887f9 9726 init = CALL_DECLARATOR_PARMS (decl);
be99da77 9727
b17e2870
JM
9728 if (attrlist)
9729 {
91d231cb 9730 attributes = *attrlist;
b17e2870
JM
9731 }
9732 else
9733 {
9734 attributes = NULL_TREE;
b17e2870
JM
9735 }
9736
9737 decl = start_decl (declarator, declspecs, 1,
91d231cb 9738 attributes, NULL_TREE);
9fc336c7 9739 decl_type_access_control (decl);
1eb0072d
JM
9740 if (decl)
9741 {
9742 /* Look for __unused__ attribute */
9743 if (TREE_USED (TREE_TYPE (decl)))
9744 TREE_USED (decl) = 1;
9745 finish_decl (decl, init, NULL_TREE);
9746 }
9747 else
33bd39a2 9748 error ("invalid declarator");
be99da77 9749 return 0;
8d08fdba 9750 }
be99da77
MS
9751 innermost_code = TREE_CODE (decl);
9752 if (decl_context == FIELD && ctype == NULL_TREE)
9753 ctype = current_class_type;
45537677 9754 if (ctype
c11b6f21 9755 && TREE_OPERAND (decl, 0)
45537677
MS
9756 && (TREE_CODE (TREE_OPERAND (decl, 0)) == TYPE_DECL
9757 && ((DECL_NAME (TREE_OPERAND (decl, 0))
9758 == constructor_name_full (ctype))
9759 || (DECL_NAME (TREE_OPERAND (decl, 0))
9760 == constructor_name (ctype)))))
be99da77
MS
9761 TREE_OPERAND (decl, 0) = constructor_name (ctype);
9762 next = &TREE_OPERAND (decl, 0);
9763 decl = *next;
9764 if (ctype != NULL_TREE
9765 && decl != NULL_TREE && flags != DTOR_FLAG
9766 && decl == constructor_name (ctype))
8d08fdba 9767 {
3dbc07b6 9768 sfk = sfk_constructor;
be99da77 9769 ctor_return_type = ctype;
8d08fdba 9770 }
be99da77
MS
9771 ctype = NULL_TREE;
9772 break;
68642fb6 9773
386b8a85
JM
9774 case TEMPLATE_ID_EXPR:
9775 {
9776 tree fns = TREE_OPERAND (decl, 0);
9777
9778 if (TREE_CODE (fns) == LOOKUP_EXPR)
9779 fns = TREE_OPERAND (fns, 0);
9780
8f032717
MM
9781 dname = fns;
9782 if (TREE_CODE (dname) == COMPONENT_REF)
9783 dname = TREE_OPERAND (dname, 1);
9784 if (TREE_CODE (dname) != IDENTIFIER_NODE)
9785 {
9786 my_friendly_assert (is_overloaded_fn (dname),
9787 19990331);
9788 dname = DECL_NAME (get_first_fn (dname));
9789 }
386b8a85 9790 }
2c73f9f5 9791 /* Fall through. */
be99da77
MS
9792
9793 case IDENTIFIER_NODE:
386b8a85
JM
9794 if (TREE_CODE (decl) == IDENTIFIER_NODE)
9795 dname = decl;
9796
be99da77
MS
9797 next = 0;
9798
0e5921e8 9799 if (C_IS_RESERVED_WORD (dname))
8d08fdba 9800 {
33bd39a2 9801 error ("declarator-id missing; using reserved word `%D'",
be99da77
MS
9802 dname);
9803 name = IDENTIFIER_POINTER (dname);
8d08fdba 9804 }
596ea4e5 9805 else if (!IDENTIFIER_TYPENAME_P (dname))
be99da77 9806 name = IDENTIFIER_POINTER (dname);
8d08fdba
MS
9807 else
9808 {
596ea4e5
AS
9809 my_friendly_assert (flags == NO_SPECIAL, 154);
9810 flags = TYPENAME_FLAG;
9811 ctor_return_type = TREE_TYPE (dname);
9812 sfk = sfk_conversion;
9813 if (IDENTIFIER_GLOBAL_VALUE (dname)
5362b086 9814 && (TREE_CODE (IDENTIFIER_GLOBAL_VALUE (dname))
596ea4e5
AS
9815 == TYPE_DECL))
9816 name = IDENTIFIER_POINTER (dname);
9817 else
9818 name = "<invalid operator>";
8d08fdba 9819 }
be99da77 9820 break;
8d08fdba 9821
be99da77
MS
9822 /* C++ extension */
9823 case SCOPE_REF:
9824 {
9825 /* Perform error checking, and decide on a ctype. */
9826 tree cname = TREE_OPERAND (decl, 0);
9827 if (cname == NULL_TREE)
9828 ctype = NULL_TREE;
2c73f9f5
ML
9829 else if (TREE_CODE (cname) == NAMESPACE_DECL)
9830 {
9831 ctype = NULL_TREE;
9832 in_namespace = TREE_OPERAND (decl, 0);
9833 TREE_OPERAND (decl, 0) = NULL_TREE;
9834 }
be99da77
MS
9835 else if (! is_aggr_type (cname, 1))
9836 TREE_OPERAND (decl, 0) = NULL_TREE;
9837 /* Must test TREE_OPERAND (decl, 1), in case user gives
9838 us `typedef (class::memfunc)(int); memfunc *memfuncptr;' */
9839 else if (TREE_OPERAND (decl, 1)
9840 && TREE_CODE (TREE_OPERAND (decl, 1)) == INDIRECT_REF)
9841 ctype = cname;
73b0fce8 9842 else if (TREE_CODE (cname) == TEMPLATE_TYPE_PARM
a1281f45 9843 || TREE_CODE (cname) == BOUND_TEMPLATE_TEMPLATE_PARM)
5566b478 9844 {
33bd39a2 9845 error ("`%T::%D' is not a valid declarator", cname,
5566b478 9846 TREE_OPERAND (decl, 1));
33bd39a2 9847 error (" perhaps you want `typename %T::%D' to make it a type",
5566b478
MS
9848 cname, TREE_OPERAND (decl, 1));
9849 return void_type_node;
9850 }
be99da77
MS
9851 else if (ctype == NULL_TREE)
9852 ctype = cname;
9853 else if (TREE_COMPLEXITY (decl) == current_class_depth)
9854 TREE_OPERAND (decl, 0) = ctype;
9855 else
9856 {
9857 if (! UNIQUELY_DERIVED_FROM_P (cname, ctype))
9858 {
33bd39a2 9859 error ("type `%T' is not derived from type `%T'",
be99da77
MS
9860 cname, ctype);
9861 TREE_OPERAND (decl, 0) = NULL_TREE;
9862 }
9863 else
9864 ctype = cname;
9865 }
9866
c91a56d2
MS
9867 if (ctype && TREE_CODE (TREE_OPERAND (decl, 1)) == TYPE_DECL
9868 && ((DECL_NAME (TREE_OPERAND (decl, 1))
9869 == constructor_name_full (ctype))
9870 || (DECL_NAME (TREE_OPERAND (decl, 1))
9871 == constructor_name (ctype))))
be99da77
MS
9872 TREE_OPERAND (decl, 1) = constructor_name (ctype);
9873 next = &TREE_OPERAND (decl, 1);
9874 decl = *next;
9875 if (ctype)
9876 {
9877 if (TREE_CODE (decl) == IDENTIFIER_NODE
9878 && constructor_name (ctype) == decl)
9879 {
3dbc07b6 9880 sfk = sfk_constructor;
be99da77
MS
9881 ctor_return_type = ctype;
9882 }
9883 else if (TREE_CODE (decl) == BIT_NOT_EXPR
9884 && TREE_CODE (TREE_OPERAND (decl, 0)) == IDENTIFIER_NODE
9885 && (constructor_name (ctype) == TREE_OPERAND (decl, 0)
9886 || constructor_name_full (ctype) == TREE_OPERAND (decl, 0)))
9887 {
3dbc07b6 9888 sfk = sfk_destructor;
be99da77
MS
9889 ctor_return_type = ctype;
9890 flags = DTOR_FLAG;
9891 TREE_OPERAND (decl, 0) = constructor_name (ctype);
9892 next = &TREE_OPERAND (decl, 0);
9893 }
9894 }
9895 }
9896 break;
9897
9898 case ERROR_MARK:
9899 next = 0;
9900 break;
9901
45537677
MS
9902 case TYPE_DECL:
9903 /* Parse error puts this typespec where
9904 a declarator should go. */
33bd39a2 9905 error ("`%T' specified as declarator-id", DECL_NAME (decl));
45537677 9906 if (TREE_TYPE (decl) == current_class_type)
33bd39a2 9907 error (" perhaps you want `%T' for a constructor",
45537677
MS
9908 current_class_name);
9909 dname = DECL_NAME (decl);
9910 name = IDENTIFIER_POINTER (dname);
9911
e92cc029 9912 /* Avoid giving two errors for this. */
45537677
MS
9913 IDENTIFIER_CLASS_VALUE (dname) = NULL_TREE;
9914
58010b57 9915 declspecs = tree_cons (NULL_TREE, integer_type_node, declspecs);
45537677
MS
9916 *next = dname;
9917 next = 0;
9918 break;
9919
be99da77 9920 default:
33bd39a2 9921 internal_error ("`%D' as declarator", decl);
8d08fdba 9922 }
be99da77 9923 }
8d08fdba
MS
9924 }
9925
9926 /* A function definition's declarator must have the form of
9927 a function declarator. */
9928
9929 if (funcdef_flag && innermost_code != CALL_EXPR)
9930 return 0;
9931
e1cd6e56
MS
9932 if (((dname && IDENTIFIER_OPNAME_P (dname)) || flags == TYPENAME_FLAG)
9933 && innermost_code != CALL_EXPR
9934 && ! (ctype && declspecs == NULL_TREE))
9935 {
33bd39a2 9936 error ("declaration of `%D' as non-function", dname);
e1cd6e56
MS
9937 return void_type_node;
9938 }
9939
8d08fdba
MS
9940 /* Anything declared one level down from the top level
9941 must be one of the parameters of a function
9942 (because the body is at least two levels down). */
9943
9944 /* This heuristic cannot be applied to C++ nodes! Fixed, however,
9945 by not allowing C++ class definitions to specify their parameters
9946 with xdecls (must be spec.d in the parmlist).
9947
9948 Since we now wait to push a class scope until we are sure that
9949 we are in a legitimate method context, we must set oldcname
a9aedbc2
MS
9950 explicitly (since current_class_name is not yet alive).
9951
9952 We also want to avoid calling this a PARM if it is in a namespace. */
8d08fdba 9953
9188c363 9954 if (decl_context == NORMAL && !toplevel_bindings_p ())
a9aedbc2
MS
9955 {
9956 struct binding_level *b = current_binding_level;
9957 current_binding_level = b->level_chain;
9958 if (current_binding_level != 0 && toplevel_bindings_p ())
9959 decl_context = PARM;
9960 current_binding_level = b;
9961 }
8d08fdba 9962
34fc957d
NS
9963 if (name == NULL)
9964 name = decl_context == PARM ? "parameter" : "type name";
68642fb6 9965
8d08fdba
MS
9966 /* Look through the decl specs and record which ones appear.
9967 Some typespecs are defined as built-in typenames.
9968 Others, the ones that are modifiers of other types,
9969 are represented by bits in SPECBITS: set the bits for
9970 the modifiers that appear. Storage class keywords are also in SPECBITS.
9971
9972 If there is a typedef name or a type, store the type in TYPE.
9973 This includes builtin typedefs such as `int'.
9974
9975 Set EXPLICIT_INT if the type is `int' or `char' and did not
9976 come from a user typedef.
9977
9978 Set LONGLONG if `long' is mentioned twice.
9979
9980 For C++, constructors and destructors have their own fast treatment. */
9981
9982 for (spec = declspecs; spec; spec = TREE_CHAIN (spec))
9983 {
9984 register int i;
9985 register tree id;
9986
9987 /* Certain parse errors slip through. For example,
9988 `int class;' is not caught by the parser. Try
9989 weakly to recover here. */
9990 if (TREE_CODE (spec) != TREE_LIST)
9991 return 0;
9992
9993 id = TREE_VALUE (spec);
9994
9995 if (TREE_CODE (id) == IDENTIFIER_NODE)
9996 {
a3203465
MS
9997 if (id == ridpointers[(int) RID_INT]
9998 || id == ridpointers[(int) RID_CHAR]
9999 || id == ridpointers[(int) RID_BOOL]
10000 || id == ridpointers[(int) RID_WCHAR])
8d08fdba
MS
10001 {
10002 if (type)
8ccc31eb
MS
10003 {
10004 if (id == ridpointers[(int) RID_BOOL])
8251199e 10005 error ("`bool' is now a keyword");
8ccc31eb 10006 else
33bd39a2 10007 error ("extraneous `%T' ignored", id);
8ccc31eb 10008 }
8d08fdba
MS
10009 else
10010 {
a3203465
MS
10011 if (id == ridpointers[(int) RID_INT])
10012 explicit_int = 1;
10013 else if (id == ridpointers[(int) RID_CHAR])
10014 explicit_char = 1;
8d08fdba
MS
10015 type = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (id));
10016 }
10017 goto found;
10018 }
e92cc029 10019 /* C++ aggregate types. */
8d08fdba
MS
10020 if (IDENTIFIER_HAS_TYPE_VALUE (id))
10021 {
10022 if (type)
33bd39a2 10023 error ("multiple declarations `%T' and `%T'", type, id);
8d08fdba
MS
10024 else
10025 type = IDENTIFIER_TYPE_VALUE (id);
10026 goto found;
10027 }
10028
f376e137 10029 for (i = (int) RID_FIRST_MODIFIER; i <= (int) RID_LAST_MODIFIER; i++)
8d08fdba
MS
10030 {
10031 if (ridpointers[i] == id)
10032 {
10033 if (i == (int) RID_LONG && RIDBIT_SETP (i, specbits))
10034 {
795add94 10035 if (pedantic && ! in_system_header && warn_long_long)
cb9a3ff8 10036 pedwarn ("ISO C++ does not support `long long'");
9a3b49ac 10037 if (longlong)
8251199e 10038 error ("`long long long' is too long for GCC");
8d08fdba
MS
10039 else
10040 longlong = 1;
10041 }
10042 else if (RIDBIT_SETP (i, specbits))
8251199e 10043 pedwarn ("duplicate `%s'", IDENTIFIER_POINTER (id));
270d8c65
NS
10044 if (i == (int)RID_EXTERN
10045 && TREE_PURPOSE (spec) == error_mark_node)
10046 /* This extern was part of a language linkage. */
10047 extern_langp = 1;
8d08fdba
MS
10048 RIDBIT_SET (i, specbits);
10049 goto found;
10050 }
10051 }
10052 }
e92cc029 10053 /* C++ aggregate types. */
1899c3a4 10054 else if (TREE_CODE (id) == TYPE_DECL)
45537677
MS
10055 {
10056 if (type)
33bd39a2 10057 error ("multiple declarations `%T' and `%T'", type,
45537677
MS
10058 TREE_TYPE (id));
10059 else
5566b478
MS
10060 {
10061 type = TREE_TYPE (id);
10062 TREE_VALUE (spec) = type;
10063 }
45537677
MS
10064 goto found;
10065 }
8d08fdba 10066 if (type)
8251199e 10067 error ("two or more data types in declaration of `%s'", name);
8d08fdba
MS
10068 else if (TREE_CODE (id) == IDENTIFIER_NODE)
10069 {
10070 register tree t = lookup_name (id, 1);
10071 if (!t || TREE_CODE (t) != TYPE_DECL)
8251199e 10072 error ("`%s' fails to be a typedef or built in type",
8d08fdba
MS
10073 IDENTIFIER_POINTER (id));
10074 else
10075 {
10076 type = TREE_TYPE (t);
6125f3be
DE
10077#if 0
10078 /* See the code below that used this. */
91d231cb 10079 decl_attr = DECL_ATTRIBUTES (id);
6125f3be 10080#endif
8d08fdba
MS
10081 typedef_decl = t;
10082 }
10083 }
bd6dd845 10084 else if (id != error_mark_node)
8d08fdba
MS
10085 /* Can't change CLASS nodes into RECORD nodes here! */
10086 type = id;
10087
10088 found: ;
10089 }
10090
10091 typedef_type = type;
10092
37c46b43 10093 /* No type at all: default to `int', and set DEFAULTED_INT
6eabb241 10094 because it was not a user-defined typedef. */
8d08fdba 10095
a3203465
MS
10096 if (type == NULL_TREE
10097 && (RIDBIT_SETP (RID_SIGNED, specbits)
10098 || RIDBIT_SETP (RID_UNSIGNED, specbits)
10099 || RIDBIT_SETP (RID_LONG, specbits)
10100 || RIDBIT_SETP (RID_SHORT, specbits)))
10101 {
10102 /* These imply 'int'. */
10103 type = integer_type_node;
37c46b43 10104 defaulted_int = 1;
a3203465
MS
10105 }
10106
3dbc07b6
MM
10107 if (sfk != sfk_none)
10108 type = check_special_function_return_type (sfk, type,
3dbc07b6
MM
10109 ctor_return_type);
10110 else if (type == NULL_TREE)
8d08fdba 10111 {
3dbc07b6
MM
10112 int is_main;
10113
8d08fdba 10114 explicit_int = -1;
3dbc07b6 10115
0fd0b7ee
JM
10116 /* We handle `main' specially here, because 'main () { }' is so
10117 common. With no options, it is allowed. With -Wreturn-type,
10118 it is a warning. It is only an error with -pedantic-errors. */
3dbc07b6
MM
10119 is_main = (funcdef_flag
10120 && MAIN_NAME_P (dname)
10121 && ctype == NULL_TREE
10122 && in_namespace == NULL_TREE
10123 && current_namespace == global_namespace);
10124
10125 if (in_system_header || flag_ms_extensions)
10126 /* Allow it, sigh. */;
10127 else if (pedantic || ! is_main)
33bd39a2 10128 pedwarn ("ISO C++ forbids declaration of `%s' with no type",
3dbc07b6
MM
10129 name);
10130 else if (warn_return_type)
33bd39a2 10131 warning ("ISO C++ forbids declaration of `%s' with no type",
3dbc07b6 10132 name);
41eff652 10133
3dbc07b6 10134 type = integer_type_node;
51c184be 10135 }
ad1a6d45
NS
10136
10137 if (type && TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
10138 {
10139 /* The implicit typename extension is deprecated and will be
10140 removed. Warn about its use now. */
33bd39a2 10141 warning ("`%T' is implicitly a typename", type);
ad1a6d45
NS
10142 cp_deprecated ("implicit typename");
10143
10144 /* Now remove its implicitness, so that we don't warn again.
10145 For instance this might be a typedef, and we do not want to
10146 warn on uses of the typedef itself. Simply clearing the
10147 TREE_TYPE is insufficient. */
10148 type = copy_node (type);
10149 TREE_TYPE (type) = NULL_TREE;
10150 }
8d08fdba
MS
10151
10152 ctype = NULL_TREE;
10153
10154 /* Now process the modifiers that were specified
10155 and check for invalid combinations. */
10156
10157 /* Long double is a special combination. */
10158
10159 if (RIDBIT_SETP (RID_LONG, specbits)
10160 && TYPE_MAIN_VARIANT (type) == double_type_node)
10161 {
10162 RIDBIT_RESET (RID_LONG, specbits);
68642fb6 10163 type = build_qualified_type (long_double_type_node,
89d684bb 10164 cp_type_quals (type));
8d08fdba
MS
10165 }
10166
10167 /* Check all other uses of type modifiers. */
10168
10169 if (RIDBIT_SETP (RID_UNSIGNED, specbits)
10170 || RIDBIT_SETP (RID_SIGNED, specbits)
10171 || RIDBIT_SETP (RID_LONG, specbits)
10172 || RIDBIT_SETP (RID_SHORT, specbits))
10173 {
10174 int ok = 0;
10175
10176 if (TREE_CODE (type) == REAL_TYPE)
8251199e 10177 error ("short, signed or unsigned invalid for `%s'", name);
b7484fbe 10178 else if (TREE_CODE (type) != INTEGER_TYPE)
8251199e 10179 error ("long, short, signed or unsigned invalid for `%s'", name);
8d08fdba
MS
10180 else if (RIDBIT_SETP (RID_LONG, specbits)
10181 && RIDBIT_SETP (RID_SHORT, specbits))
8251199e 10182 error ("long and short specified together for `%s'", name);
8d08fdba
MS
10183 else if ((RIDBIT_SETP (RID_LONG, specbits)
10184 || RIDBIT_SETP (RID_SHORT, specbits))
10185 && explicit_char)
8251199e 10186 error ("long or short specified with char for `%s'", name);
8d08fdba
MS
10187 else if ((RIDBIT_SETP (RID_LONG, specbits)
10188 || RIDBIT_SETP (RID_SHORT, specbits))
10189 && TREE_CODE (type) == REAL_TYPE)
8251199e 10190 error ("long or short specified with floating type for `%s'", name);
8d08fdba
MS
10191 else if (RIDBIT_SETP (RID_SIGNED, specbits)
10192 && RIDBIT_SETP (RID_UNSIGNED, specbits))
8251199e 10193 error ("signed and unsigned given together for `%s'", name);
8d08fdba
MS
10194 else
10195 {
10196 ok = 1;
37c46b43 10197 if (!explicit_int && !defaulted_int && !explicit_char && pedantic)
8d08fdba 10198 {
8251199e 10199 pedwarn ("long, short, signed or unsigned used invalidly for `%s'",
8d08fdba
MS
10200 name);
10201 if (flag_pedantic_errors)
10202 ok = 0;
10203 }
10204 }
10205
10206 /* Discard the type modifiers if they are invalid. */
10207 if (! ok)
10208 {
10209 RIDBIT_RESET (RID_UNSIGNED, specbits);
10210 RIDBIT_RESET (RID_SIGNED, specbits);
10211 RIDBIT_RESET (RID_LONG, specbits);
10212 RIDBIT_RESET (RID_SHORT, specbits);
10213 longlong = 0;
10214 }
10215 }
10216
37c46b43
MS
10217 if (RIDBIT_SETP (RID_COMPLEX, specbits)
10218 && TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
10219 {
8251199e 10220 error ("complex invalid for `%s'", name);
37c46b43
MS
10221 RIDBIT_RESET (RID_COMPLEX, specbits);
10222 }
10223
8d08fdba
MS
10224 /* Decide whether an integer type is signed or not.
10225 Optionally treat bitfields as signed by default. */
10226 if (RIDBIT_SETP (RID_UNSIGNED, specbits)
b89c5a7b
MM
10227 /* [class.bit]
10228
10229 It is implementation-defined whether a plain (neither
10230 explicitly signed or unsigned) char, short, int, or long
10231 bit-field is signed or unsigned.
68642fb6 10232
b89c5a7b
MM
10233 Naturally, we extend this to long long as well. Note that
10234 this does not include wchar_t. */
10235 || (bitfield && !flag_signed_bitfields
10236 && RIDBIT_NOTSETP (RID_SIGNED, specbits)
10237 /* A typedef for plain `int' without `signed' can be
10238 controlled just like plain `int', but a typedef for
10239 `signed int' cannot be so controlled. */
68642fb6 10240 && !(typedef_decl
29bbeb1c 10241 && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
b89c5a7b
MM
10242 && (TREE_CODE (type) == INTEGER_TYPE
10243 || TREE_CODE (type) == CHAR_TYPE)
29bbeb1c 10244 && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
8d08fdba
MS
10245 {
10246 if (longlong)
10247 type = long_long_unsigned_type_node;
10248 else if (RIDBIT_SETP (RID_LONG, specbits))
10249 type = long_unsigned_type_node;
10250 else if (RIDBIT_SETP (RID_SHORT, specbits))
10251 type = short_unsigned_type_node;
10252 else if (type == char_type_node)
10253 type = unsigned_char_type_node;
10254 else if (typedef_decl)
10255 type = unsigned_type (type);
10256 else
10257 type = unsigned_type_node;
10258 }
10259 else if (RIDBIT_SETP (RID_SIGNED, specbits)
10260 && type == char_type_node)
10261 type = signed_char_type_node;
10262 else if (longlong)
10263 type = long_long_integer_type_node;
10264 else if (RIDBIT_SETP (RID_LONG, specbits))
10265 type = long_integer_type_node;
10266 else if (RIDBIT_SETP (RID_SHORT, specbits))
10267 type = short_integer_type_node;
10268
37c46b43
MS
10269 if (RIDBIT_SETP (RID_COMPLEX, specbits))
10270 {
10271 /* If we just have "complex", it is equivalent to
10272 "complex double", but if any modifiers at all are specified it is
10273 the complex form of TYPE. E.g, "complex short" is
10274 "complex short int". */
10275
10276 if (defaulted_int && ! longlong
10277 && ! (RIDBIT_SETP (RID_LONG, specbits)
10278 || RIDBIT_SETP (RID_SHORT, specbits)
10279 || RIDBIT_SETP (RID_SIGNED, specbits)
10280 || RIDBIT_SETP (RID_UNSIGNED, specbits)))
10281 type = complex_double_type_node;
10282 else if (type == integer_type_node)
10283 type = complex_integer_type_node;
10284 else if (type == float_type_node)
10285 type = complex_float_type_node;
10286 else if (type == double_type_node)
10287 type = complex_double_type_node;
10288 else if (type == long_double_type_node)
10289 type = complex_long_double_type_node;
10290 else
10291 type = build_complex_type (type);
10292 }
10293
3dbc07b6 10294 if (sfk == sfk_conversion
3ac3d9ea 10295 && (RIDBIT_SETP (RID_CONST, specbits)
91063b51
MM
10296 || RIDBIT_SETP (RID_VOLATILE, specbits)
10297 || RIDBIT_SETP (RID_RESTRICT, specbits)))
33bd39a2 10298 error ("qualifiers are not allowed on declaration of `operator %T'",
3ac3d9ea
MM
10299 ctor_return_type);
10300
8d08fdba
MS
10301 /* Set CONSTP if this declaration is `const', whether by
10302 explicit specification or via a typedef.
10303 Likewise for VOLATILEP. */
10304
91063b51 10305 constp = !! RIDBIT_SETP (RID_CONST, specbits) + CP_TYPE_CONST_P (type);
68642fb6 10306 restrictp =
91063b51 10307 !! RIDBIT_SETP (RID_RESTRICT, specbits) + CP_TYPE_RESTRICT_P (type);
68642fb6 10308 volatilep =
91063b51
MM
10309 !! RIDBIT_SETP (RID_VOLATILE, specbits) + CP_TYPE_VOLATILE_P (type);
10310 type_quals = ((constp ? TYPE_QUAL_CONST : 0)
10311 | (restrictp ? TYPE_QUAL_RESTRICT : 0)
10312 | (volatilep ? TYPE_QUAL_VOLATILE : 0));
10313 type = cp_build_qualified_type (type, type_quals);
8d08fdba
MS
10314 staticp = 0;
10315 inlinep = !! RIDBIT_SETP (RID_INLINE, specbits);
8d08fdba 10316 virtualp = RIDBIT_SETP (RID_VIRTUAL, specbits);
db5ae43f
MS
10317 RIDBIT_RESET (RID_VIRTUAL, specbits);
10318 explicitp = RIDBIT_SETP (RID_EXPLICIT, specbits) != 0;
10319 RIDBIT_RESET (RID_EXPLICIT, specbits);
8d08fdba 10320
8d08fdba
MS
10321 if (RIDBIT_SETP (RID_STATIC, specbits))
10322 staticp = 1 + (decl_context == FIELD);
10323
10324 if (virtualp && staticp == 2)
10325 {
33bd39a2 10326 error ("member `%D' cannot be declared both virtual and static",
8d08fdba
MS
10327 dname);
10328 staticp = 0;
10329 }
10330 friendp = RIDBIT_SETP (RID_FRIEND, specbits);
8d08fdba
MS
10331 RIDBIT_RESET (RID_FRIEND, specbits);
10332
8d08fdba
MS
10333 /* Warn if two storage classes are given. Default to `auto'. */
10334
10335 if (RIDBIT_ANY_SET (specbits))
10336 {
10337 if (RIDBIT_SETP (RID_STATIC, specbits)) nclasses++;
270d8c65 10338 if (RIDBIT_SETP (RID_EXTERN, specbits) && !extern_langp) nclasses++;
8d08fdba 10339 if (decl_context == PARM && nclasses > 0)
8251199e 10340 error ("storage class specifiers invalid in parameter declarations");
8d08fdba
MS
10341 if (RIDBIT_SETP (RID_TYPEDEF, specbits))
10342 {
10343 if (decl_context == PARM)
8251199e 10344 error ("typedef declaration invalid in parameter declaration");
8d08fdba
MS
10345 nclasses++;
10346 }
10347 if (RIDBIT_SETP (RID_AUTO, specbits)) nclasses++;
10348 if (RIDBIT_SETP (RID_REGISTER, specbits)) nclasses++;
270d8c65
NS
10349 if (!nclasses && !friendp && extern_langp)
10350 nclasses++;
8d08fdba
MS
10351 }
10352
10353 /* Give error if `virtual' is used outside of class declaration. */
b7484fbe
MS
10354 if (virtualp
10355 && (current_class_name == NULL_TREE || decl_context != FIELD))
8d08fdba 10356 {
8251199e 10357 error ("virtual outside class declaration");
8d08fdba
MS
10358 virtualp = 0;
10359 }
8d08fdba
MS
10360
10361 /* Static anonymous unions are dealt with here. */
10362 if (staticp && decl_context == TYPENAME
10363 && TREE_CODE (declspecs) == TREE_LIST
6bdb8141 10364 && ANON_AGGR_TYPE_P (TREE_VALUE (declspecs)))
8d08fdba
MS
10365 decl_context = FIELD;
10366
8d08fdba
MS
10367 /* Warn about storage classes that are invalid for certain
10368 kinds of declarations (parameters, typenames, etc.). */
10369
10370 if (nclasses > 1)
8251199e 10371 error ("multiple storage classes in declaration of `%s'", name);
8d08fdba
MS
10372 else if (decl_context != NORMAL && nclasses > 0)
10373 {
db5ae43f 10374 if ((decl_context == PARM || decl_context == CATCHPARM)
8d08fdba
MS
10375 && (RIDBIT_SETP (RID_REGISTER, specbits)
10376 || RIDBIT_SETP (RID_AUTO, specbits)))
10377 ;
fc378698
MS
10378 else if (RIDBIT_SETP (RID_TYPEDEF, specbits))
10379 ;
8d08fdba 10380 else if (decl_context == FIELD
d363e7bf
AJ
10381 /* C++ allows static class elements */
10382 && RIDBIT_SETP (RID_STATIC, specbits))
10383 /* C++ also allows inlines and signed and unsigned elements,
10384 but in those cases we don't come in here. */
8d08fdba
MS
10385 ;
10386 else
10387 {
10388 if (decl_context == FIELD)
10389 {
b7484fbe
MS
10390 tree tmp = NULL_TREE;
10391 register int op = 0;
10392
10393 if (declarator)
10394 {
68642fb6 10395 /* Avoid trying to get an operand off an identifier node. */
9e9ff709
MS
10396 if (TREE_CODE (declarator) == IDENTIFIER_NODE)
10397 tmp = declarator;
10398 else
10399 tmp = TREE_OPERAND (declarator, 0);
b7484fbe 10400 op = IDENTIFIER_OPNAME_P (tmp);
596ea4e5
AS
10401 if (IDENTIFIER_TYPENAME_P (tmp))
10402 {
10403 if (IDENTIFIER_GLOBAL_VALUE (tmp)
5362b086 10404 && (TREE_CODE (IDENTIFIER_GLOBAL_VALUE (tmp))
596ea4e5
AS
10405 == TYPE_DECL))
10406 name = IDENTIFIER_POINTER (tmp);
10407 else
10408 name = "<invalid operator>";
10409 }
b7484fbe 10410 }
8251199e 10411 error ("storage class specified for %s `%s'",
6eabb241 10412 op ? "member operator" : "field",
596ea4e5 10413 name);
8d08fdba
MS
10414 }
10415 else
b9d12519
KG
10416 {
10417 if (decl_context == PARM || decl_context == CATCHPARM)
10418 error ("storage class specified for parameter `%s'", name);
10419 else
10420 error ("storage class specified for typename");
10421 }
8d08fdba
MS
10422 RIDBIT_RESET (RID_REGISTER, specbits);
10423 RIDBIT_RESET (RID_AUTO, specbits);
10424 RIDBIT_RESET (RID_EXTERN, specbits);
8d08fdba
MS
10425 }
10426 }
10427 else if (RIDBIT_SETP (RID_EXTERN, specbits) && initialized && !funcdef_flag)
10428 {
a9aedbc2 10429 if (toplevel_bindings_p ())
8d08fdba 10430 {
59be0cdd 10431 /* It's common practice (and completely valid) to have a const
8d08fdba 10432 be initialized and declared extern. */
950ad3c3 10433 if (!(type_quals & TYPE_QUAL_CONST))
8251199e 10434 warning ("`%s' initialized and declared `extern'", name);
8d08fdba
MS
10435 }
10436 else
8251199e 10437 error ("`%s' has both `extern' and initializer", name);
8d08fdba
MS
10438 }
10439 else if (RIDBIT_SETP (RID_EXTERN, specbits) && funcdef_flag
a9aedbc2 10440 && ! toplevel_bindings_p ())
8251199e 10441 error ("nested function `%s' declared `extern'", name);
a9aedbc2 10442 else if (toplevel_bindings_p ())
8d08fdba
MS
10443 {
10444 if (RIDBIT_SETP (RID_AUTO, specbits))
8251199e 10445 error ("top-level declaration of `%s' specifies `auto'", name);
8d08fdba
MS
10446 }
10447
909e536a 10448 if (nclasses > 0 && friendp)
8251199e 10449 error ("storage class specifiers invalid in friend function declarations");
909e536a 10450
8d08fdba
MS
10451 /* Now figure out the structure of the declarator proper.
10452 Descend through it, creating more complex types, until we reach
10453 the declared identifier (or NULL_TREE, in an absolute declarator). */
10454
386b8a85
JM
10455 while (declarator && TREE_CODE (declarator) != IDENTIFIER_NODE
10456 && TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
8d08fdba
MS
10457 {
10458 /* Each level of DECLARATOR is either an ARRAY_REF (for ...[..]),
10459 an INDIRECT_REF (for *...),
10460 a CALL_EXPR (for ...(...)),
10461 an identifier (for the name being declared)
10462 or a null pointer (for the place in an absolute declarator
10463 where the name was omitted).
10464 For the last two cases, we have just exited the loop.
10465
10466 For C++ it could also be
10467 a SCOPE_REF (for class :: ...). In this case, we have converted
10468 sensible names to types, and those are the values we use to
10469 qualify the member name.
10470 an ADDR_EXPR (for &...),
10471 a BIT_NOT_EXPR (for destructors)
8d08fdba
MS
10472
10473 At this point, TYPE is the type of elements of an array,
10474 or for a function to return, or for a pointer to point to.
10475 After this sequence of ifs, TYPE is the type of the
10476 array or function or pointer, and DECLARATOR has had its
10477 outermost layer removed. */
10478
bd6dd845 10479 if (type == error_mark_node)
8d08fdba
MS
10480 {
10481 if (TREE_CODE (declarator) == SCOPE_REF)
10482 declarator = TREE_OPERAND (declarator, 1);
10483 else
10484 declarator = TREE_OPERAND (declarator, 0);
10485 continue;
10486 }
10487 if (quals != NULL_TREE
10488 && (declarator == NULL_TREE
10489 || TREE_CODE (declarator) != SCOPE_REF))
10490 {
10491 if (ctype == NULL_TREE && TREE_CODE (type) == METHOD_TYPE)
10492 ctype = TYPE_METHOD_BASETYPE (type);
10493 if (ctype != NULL_TREE)
10494 {
8d08fdba 10495 tree dummy = build_decl (TYPE_DECL, NULL_TREE, type);
535233a8 10496 grok_method_quals (ctype, dummy, quals);
8d08fdba 10497 type = TREE_TYPE (dummy);
535233a8 10498 ctype = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (type)));
8d08fdba
MS
10499 quals = NULL_TREE;
10500 }
10501 }
1eab9b56 10502
8d08fdba
MS
10503 switch (TREE_CODE (declarator))
10504 {
52fbc847
JM
10505 case TREE_LIST:
10506 {
10507 /* We encode a declarator with embedded attributes using
91d231cb
JM
10508 a TREE_LIST. */
10509 tree attrs = TREE_PURPOSE (declarator);
10510 tree inner_decl;
c9574c9f
R
10511 int attr_flags;
10512
52fbc847 10513 declarator = TREE_VALUE (declarator);
91d231cb
JM
10514 inner_decl = declarator;
10515 while (inner_decl != NULL_TREE
10516 && TREE_CODE (inner_decl) == TREE_LIST)
10517 inner_decl = TREE_VALUE (inner_decl);
c9574c9f 10518 attr_flags = 0;
91d231cb
JM
10519 if (inner_decl == NULL_TREE
10520 || TREE_CODE (inner_decl) == IDENTIFIER_NODE)
10521 attr_flags |= (int) ATTR_FLAG_DECL_NEXT;
10522 if (TREE_CODE (inner_decl) == CALL_EXPR)
10523 attr_flags |= (int) ATTR_FLAG_FUNCTION_NEXT;
10524 if (TREE_CODE (inner_decl) == ARRAY_REF)
10525 attr_flags |= (int) ATTR_FLAG_ARRAY_NEXT;
10526 returned_attrs = decl_attributes (&type,
10527 chainon (returned_attrs, attrs),
10528 attr_flags);
52fbc847
JM
10529 }
10530 break;
10531
8d08fdba
MS
10532 case ARRAY_REF:
10533 {
2848ad0f 10534 register tree size;
8d08fdba 10535
2848ad0f 10536 size = TREE_OPERAND (declarator, 1);
8d08fdba 10537
f2e2cbd4 10538 /* VC++ spells a zero-sized array with []. */
e8ea7036
MM
10539 if (size == NULL_TREE && decl_context == FIELD && ! staticp
10540 && ! RIDBIT_SETP (RID_TYPEDEF, specbits))
f2e2cbd4
JM
10541 size = integer_zero_node;
10542
2848ad0f 10543 declarator = TREE_OPERAND (declarator, 0);
8d08fdba 10544
2848ad0f 10545 type = create_array_type_for_decl (dname, type, size);
c1b177ec
ML
10546
10547 /* VLAs never work as fields. */
5362b086 10548 if (decl_context == FIELD && !processing_template_decl
c1b177ec
ML
10549 && TREE_CODE (type) == ARRAY_TYPE
10550 && TYPE_DOMAIN (type) != NULL_TREE
10551 && !TREE_CONSTANT (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))
10552 {
33bd39a2 10553 error ("size of member `%D' is not constant", dname);
c1b177ec
ML
10554 /* Proceed with arbitrary constant size, so that offset
10555 computations don't get confused. */
10556 type = create_array_type_for_decl (dname, TREE_TYPE (type),
10557 integer_one_node);
10558 }
10559
8d08fdba
MS
10560 ctype = NULL_TREE;
10561 }
10562 break;
10563
10564 case CALL_EXPR:
10565 {
10566 tree arg_types;
f376e137 10567 int funcdecl_p;
43f887f9 10568 tree inner_parms = CALL_DECLARATOR_PARMS (declarator);
f376e137 10569 tree inner_decl = TREE_OPERAND (declarator, 0);
8d08fdba
MS
10570
10571 /* Declaring a function type.
10572 Make sure we have a valid type for the function to return. */
8d08fdba 10573
91063b51 10574 /* We now know that the TYPE_QUALS don't apply to the
14ae7e7d 10575 decl, but to its return type. */
91063b51 10576 type_quals = TYPE_UNQUALIFIED;
8d08fdba
MS
10577
10578 /* Warn about some types functions can't return. */
10579
10580 if (TREE_CODE (type) == FUNCTION_TYPE)
10581 {
8251199e 10582 error ("`%s' declared as function returning a function", name);
8d08fdba
MS
10583 type = integer_type_node;
10584 }
10585 if (TREE_CODE (type) == ARRAY_TYPE)
10586 {
8251199e 10587 error ("`%s' declared as function returning an array", name);
8d08fdba
MS
10588 type = integer_type_node;
10589 }
10590
f376e137
MS
10591 if (inner_decl && TREE_CODE (inner_decl) == SCOPE_REF)
10592 inner_decl = TREE_OPERAND (inner_decl, 1);
10593
68642fb6 10594 if (inner_decl && TREE_CODE (inner_decl) == TEMPLATE_ID_EXPR)
386b8a85
JM
10595 inner_decl = dname;
10596
b7484fbe 10597 /* Pick up type qualifiers which should be applied to `this'. */
43f887f9 10598 quals = CALL_DECLARATOR_QUALS (declarator);
b7484fbe 10599
c11b6f21 10600 /* Pick up the exception specifications. */
43f887f9 10601 raises = CALL_DECLARATOR_EXCEPTION_SPEC (declarator);
c11b6f21 10602
f376e137
MS
10603 /* Say it's a definition only for the CALL_EXPR
10604 closest to the identifier. */
beb53fb8 10605 funcdecl_p
68642fb6 10606 = inner_decl
386b8a85 10607 && (TREE_CODE (inner_decl) == IDENTIFIER_NODE
68642fb6 10608 || TREE_CODE (inner_decl) == TEMPLATE_ID_EXPR
386b8a85 10609 || TREE_CODE (inner_decl) == BIT_NOT_EXPR);
68642fb6 10610
8d08fdba
MS
10611 if (ctype == NULL_TREE
10612 && decl_context == FIELD
f376e137 10613 && funcdecl_p
8d08fdba
MS
10614 && (friendp == 0 || dname == current_class_name))
10615 ctype = current_class_type;
10616
3dbc07b6 10617 if (ctype && sfk == sfk_conversion)
8d08fdba
MS
10618 TYPE_HAS_CONVERSION (ctype) = 1;
10619 if (ctype && constructor_name (ctype) == dname)
10620 {
10621 /* We are within a class's scope. If our declarator name
10622 is the same as the class name, and we are defining
10623 a function, then it is a constructor/destructor, and
10624 therefore returns a void type. */
10625
10626 if (flags == DTOR_FLAG)
10627 {
cab1f180
ML
10628 /* ISO C++ 12.4/2. A destructor may not be
10629 declared const or volatile. A destructor may
10630 not be static. */
8d08fdba 10631 if (staticp == 2)
8251199e 10632 error ("destructor cannot be static member function");
b7484fbe 10633 if (quals)
8d08fdba 10634 {
33bd39a2 10635 error ("destructors may not be `%s'",
4f70a846
MM
10636 IDENTIFIER_POINTER (TREE_VALUE (quals)));
10637 quals = NULL_TREE;
8d08fdba
MS
10638 }
10639 if (decl_context == FIELD)
10640 {
4dacf5bd
KG
10641 if (! member_function_or_else (ctype,
10642 current_class_type,
10643 flags))
8d08fdba
MS
10644 return void_type_node;
10645 }
10646 }
2c73f9f5 10647 else /* It's a constructor. */
8d08fdba 10648 {
db5ae43f
MS
10649 if (explicitp == 1)
10650 explicitp = 2;
cab1f180
ML
10651 /* ISO C++ 12.1. A constructor may not be
10652 declared const or volatile. A constructor may
10653 not be virtual. A constructor may not be
10654 static. */
8d08fdba 10655 if (staticp == 2)
8251199e 10656 error ("constructor cannot be static member function");
8d08fdba
MS
10657 if (virtualp)
10658 {
8251199e 10659 pedwarn ("constructors cannot be declared virtual");
8d08fdba
MS
10660 virtualp = 0;
10661 }
b7484fbe 10662 if (quals)
8d08fdba 10663 {
33bd39a2 10664 error ("constructors may not be `%s'",
4f70a846
MM
10665 IDENTIFIER_POINTER (TREE_VALUE (quals)));
10666 quals = NULL_TREE;
d363e7bf 10667 }
8d08fdba 10668 {
51c184be 10669 RID_BIT_TYPE tmp_bits;
4e135bdd 10670 memcpy (&tmp_bits, &specbits, sizeof (RID_BIT_TYPE));
51c184be
MS
10671 RIDBIT_RESET (RID_INLINE, tmp_bits);
10672 RIDBIT_RESET (RID_STATIC, tmp_bits);
10673 if (RIDBIT_ANY_SET (tmp_bits))
8251199e 10674 error ("return value type specifier for constructor ignored");
8d08fdba 10675 }
6eabb241 10676 if (decl_context == FIELD)
8d08fdba 10677 {
4dacf5bd
KG
10678 if (! member_function_or_else (ctype,
10679 current_class_type,
10680 flags))
8d08fdba
MS
10681 return void_type_node;
10682 TYPE_HAS_CONSTRUCTOR (ctype) = 1;
3dbc07b6 10683 if (sfk != sfk_constructor)
8d08fdba
MS
10684 return NULL_TREE;
10685 }
10686 }
10687 if (decl_context == FIELD)
10688 staticp = 0;
10689 }
b7484fbe 10690 else if (friendp)
8d08fdba 10691 {
b7484fbe 10692 if (initialized)
8251199e 10693 error ("can't initialize friend function `%s'", name);
b7484fbe
MS
10694 if (virtualp)
10695 {
10696 /* Cannot be both friend and virtual. */
8251199e 10697 error ("virtual functions cannot be friends");
b7484fbe
MS
10698 RIDBIT_RESET (RID_FRIEND, specbits);
10699 friendp = 0;
10700 }
28cbf42c 10701 if (decl_context == NORMAL)
8251199e 10702 error ("friend declaration not in class definition");
28cbf42c 10703 if (current_function_decl && funcdef_flag)
33bd39a2 10704 error ("can't define friend function `%s' in a local class definition",
28cbf42c 10705 name);
8d08fdba
MS
10706 }
10707
8d08fdba
MS
10708 /* Construct the function type and go to the next
10709 inner layer of declarator. */
10710
f376e137 10711 declarator = TREE_OPERAND (declarator, 0);
8d08fdba 10712
f376e137
MS
10713 /* FIXME: This is where default args should be fully
10714 processed. */
8d08fdba 10715
5cce22b6 10716 arg_types = grokparms (inner_parms);
8d08fdba 10717
4f70a846 10718 if (declarator && flags == DTOR_FLAG)
8d08fdba 10719 {
4f70a846
MM
10720 /* A destructor declared in the body of a class will
10721 be represented as a BIT_NOT_EXPR. But, we just
10722 want the underlying IDENTIFIER. */
8d08fdba 10723 if (TREE_CODE (declarator) == BIT_NOT_EXPR)
4f70a846 10724 declarator = TREE_OPERAND (declarator, 0);
68642fb6 10725
8b27e9ef 10726 if (arg_types != void_list_node)
8d08fdba 10727 {
33bd39a2 10728 error ("destructors may not have parameters");
4f70a846
MM
10729 arg_types = void_list_node;
10730 last_function_parms = NULL_TREE;
8d08fdba
MS
10731 }
10732 }
10733
d22c8596 10734 /* ANSI says that `const int foo ();'
8d08fdba 10735 does not make the function foo const. */
d22c8596 10736 type = build_function_type (type, arg_types);
42976354
BK
10737
10738 {
10739 tree t;
10740 for (t = arg_types; t; t = TREE_CHAIN (t))
10741 if (TREE_PURPOSE (t)
10742 && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
10743 {
10744 add_defarg_fn (type);
10745 break;
10746 }
10747 }
8d08fdba
MS
10748 }
10749 break;
10750
10751 case ADDR_EXPR:
10752 case INDIRECT_REF:
10753 /* Filter out pointers-to-references and references-to-references.
10754 We can get these if a TYPE_DECL is used. */
10755
10756 if (TREE_CODE (type) == REFERENCE_TYPE)
10757 {
8251199e 10758 error ("cannot declare %s to references",
8d08fdba
MS
10759 TREE_CODE (declarator) == ADDR_EXPR
10760 ? "references" : "pointers");
10761 declarator = TREE_OPERAND (declarator, 0);
10762 continue;
10763 }
10764
a5894242
MS
10765 if (TREE_CODE (type) == OFFSET_TYPE
10766 && (TREE_CODE (TREE_TYPE (type)) == VOID_TYPE
10767 || TREE_CODE (TREE_TYPE (type)) == REFERENCE_TYPE))
10768 {
33bd39a2 10769 error ("cannot declare pointer to `%#T' member",
a5894242
MS
10770 TREE_TYPE (type));
10771 type = TREE_TYPE (type);
10772 }
10773
61a127b3
MM
10774 /* Merge any constancy or volatility into the target type
10775 for the pointer. */
10776
91063b51
MM
10777 /* We now know that the TYPE_QUALS don't apply to the decl,
10778 but to the target of the pointer. */
10779 type_quals = TYPE_UNQUALIFIED;
8d08fdba 10780
6eabb241 10781 if (TREE_CODE (declarator) == ADDR_EXPR)
8d08fdba 10782 {
69851283
MM
10783 if (TREE_CODE (type) == VOID_TYPE)
10784 error ("invalid type: `void &'");
8d08fdba 10785 else
69851283 10786 type = build_reference_type (type);
8d08fdba
MS
10787 }
10788 else if (TREE_CODE (type) == METHOD_TYPE)
d8f8dca1 10789 type = build_ptrmemfunc_type (build_pointer_type (type));
8d08fdba
MS
10790 else
10791 type = build_pointer_type (type);
10792
10793 /* Process a list of type modifier keywords (such as
10794 const or volatile) that were given inside the `*' or `&'. */
10795
10796 if (TREE_TYPE (declarator))
10797 {
10798 register tree typemodlist;
10799 int erred = 0;
91063b51
MM
10800
10801 constp = 0;
10802 volatilep = 0;
10803 restrictp = 0;
8d08fdba
MS
10804 for (typemodlist = TREE_TYPE (declarator); typemodlist;
10805 typemodlist = TREE_CHAIN (typemodlist))
10806 {
91063b51
MM
10807 tree qualifier = TREE_VALUE (typemodlist);
10808
10809 if (qualifier == ridpointers[(int) RID_CONST])
8d08fdba 10810 constp++;
91063b51 10811 else if (qualifier == ridpointers[(int) RID_VOLATILE])
8d08fdba 10812 volatilep++;
91063b51
MM
10813 else if (qualifier == ridpointers[(int) RID_RESTRICT])
10814 restrictp++;
8d08fdba
MS
10815 else if (!erred)
10816 {
10817 erred = 1;
91063b51 10818 error ("invalid type modifier within pointer declarator");
8d08fdba
MS
10819 }
10820 }
10821 if (constp > 1)
8251199e 10822 pedwarn ("duplicate `const'");
8d08fdba 10823 if (volatilep > 1)
8251199e 10824 pedwarn ("duplicate `volatile'");
91063b51
MM
10825 if (restrictp > 1)
10826 pedwarn ("duplicate `restrict'");
10827
10828 type_quals = ((constp ? TYPE_QUAL_CONST : 0)
10829 | (restrictp ? TYPE_QUAL_RESTRICT : 0)
10830 | (volatilep ? TYPE_QUAL_VOLATILE : 0));
a0a33927
MS
10831 if (TREE_CODE (declarator) == ADDR_EXPR
10832 && (constp || volatilep))
10833 {
10834 if (constp)
8251199e 10835 pedwarn ("discarding `const' applied to a reference");
a0a33927 10836 if (volatilep)
8251199e 10837 pedwarn ("discarding `volatile' applied to a reference");
91063b51 10838 type_quals &= ~(TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE);
a0a33927 10839 }
91063b51 10840 type = cp_build_qualified_type (type, type_quals);
8d08fdba
MS
10841 }
10842 declarator = TREE_OPERAND (declarator, 0);
10843 ctype = NULL_TREE;
10844 break;
10845
10846 case SCOPE_REF:
10847 {
10848 /* We have converted type names to NULL_TREE if the
10849 name was bogus, or to a _TYPE node, if not.
10850
10851 The variable CTYPE holds the type we will ultimately
10852 resolve to. The code here just needs to build
10853 up appropriate member types. */
10854 tree sname = TREE_OPERAND (declarator, 1);
386b8a85
JM
10855 tree t;
10856
8d08fdba
MS
10857 /* Destructors can have their visibilities changed as well. */
10858 if (TREE_CODE (sname) == BIT_NOT_EXPR)
10859 sname = TREE_OPERAND (sname, 0);
10860
10861 if (TREE_COMPLEXITY (declarator) == 0)
10862 /* This needs to be here, in case we are called
10863 multiple times. */ ;
9a68c51f
JM
10864 else if (TREE_COMPLEXITY (declarator) == -1)
10865 /* Namespace member. */
10866 pop_decl_namespace ();
8d08fdba 10867 else if (friendp && (TREE_COMPLEXITY (declarator) < 2))
2c73f9f5 10868 /* Don't fall out into global scope. Hides real bug? --eichin */ ;
5566b478
MS
10869 else if (! IS_AGGR_TYPE_CODE
10870 (TREE_CODE (TREE_OPERAND (declarator, 0))))
10871 ;
8d08fdba
MS
10872 else if (TREE_COMPLEXITY (declarator) == current_class_depth)
10873 {
9a3b49ac
MS
10874 /* Resolve any TYPENAME_TYPEs from the decl-specifier-seq
10875 that refer to ctype. They couldn't be resolved earlier
10876 because we hadn't pushed into the class yet.
10877 Example: resolve 'B<T>::type' in
10878 'B<typename B<T>::type> B<T>::f () { }'. */
10879 if (current_template_parms
10880 && uses_template_parms (type)
10881 && uses_template_parms (current_class_type))
10882 {
10883 tree args = current_template_args ();
4393e105 10884 type = tsubst (type, args, /*complain=*/1, NULL_TREE);
9a3b49ac
MS
10885 }
10886
a28e3c7f
MS
10887 /* This pop_nested_class corresponds to the
10888 push_nested_class used to push into class scope for
10889 parsing the argument list of a function decl, in
10890 qualified_id. */
b74a0560 10891 pop_nested_class ();
8d08fdba
MS
10892 TREE_COMPLEXITY (declarator) = current_class_depth;
10893 }
10894 else
10895 my_friendly_abort (16);
10896
10897 if (TREE_OPERAND (declarator, 0) == NULL_TREE)
10898 {
10899 /* We had a reference to a global decl, or
10900 perhaps we were given a non-aggregate typedef,
10901 in which case we cleared this out, and should just
10902 keep going as though it wasn't there. */
10903 declarator = sname;
10904 continue;
10905 }
10906 ctype = TREE_OPERAND (declarator, 0);
10907
386b8a85 10908 t = ctype;
68642fb6 10909 while (t != NULL_TREE && CLASS_TYPE_P (t))
386b8a85 10910 {
5362b086 10911 /* You're supposed to have one `template <...>'
da8a7456
MM
10912 for every template class, but you don't need one
10913 for a full specialization. For example:
10914
10915 template <class T> struct S{};
10916 template <> struct S<int> { void f(); };
10917 void S<int>::f () {}
10918
10919 is correct; there shouldn't be a `template <>' for
10920 the definition of `S<int>::f'. */
10921 if (CLASSTYPE_TEMPLATE_INFO (t)
10922 && (CLASSTYPE_TEMPLATE_INSTANTIATION (t)
92ecdfb7
NS
10923 || uses_template_parms (CLASSTYPE_TI_ARGS (t)))
10924 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t)))
386b8a85 10925 template_count += 1;
da8a7456 10926
386b8a85 10927 t = TYPE_MAIN_DECL (t);
92ecdfb7 10928 t = DECL_CONTEXT (t);
386b8a85
JM
10929 }
10930
8d08fdba
MS
10931 if (sname == NULL_TREE)
10932 goto done_scoping;
10933
10934 if (TREE_CODE (sname) == IDENTIFIER_NODE)
10935 {
10936 /* This is the `standard' use of the scoping operator:
10937 basetype :: member . */
10938
db5ae43f 10939 if (ctype == current_class_type)
28cbf42c
MS
10940 {
10941 /* class A {
10942 void A::f ();
10943 };
10944
10945 Is this ill-formed? */
10946
10947 if (pedantic)
33bd39a2 10948 pedwarn ("extra qualification `%T::' on member `%s' ignored",
28cbf42c
MS
10949 ctype, name);
10950 }
db5ae43f 10951 else if (TREE_CODE (type) == FUNCTION_TYPE)
8d08fdba 10952 {
eeb75383 10953 if (current_class_type == NULL_TREE || friendp)
14ae7e7d
JM
10954 type = build_cplus_method_type (ctype, TREE_TYPE (type),
10955 TYPE_ARG_TYPES (type));
8d08fdba
MS
10956 else
10957 {
33bd39a2 10958 error ("cannot declare member function `%T::%s' within `%T'",
a3203465 10959 ctype, name, current_class_type);
8d08fdba
MS
10960 return void_type_node;
10961 }
10962 }
5566b478 10963 else if (RIDBIT_SETP (RID_TYPEDEF, specbits)
d0f062fb 10964 || COMPLETE_TYPE_P (complete_type (ctype)))
8d08fdba 10965 {
2c73f9f5 10966 /* Have to move this code elsewhere in this function.
db5ae43f
MS
10967 this code is used for i.e., typedef int A::M; M *pm;
10968
10969 It is? How? jason 10/2/94 */
8d08fdba 10970
8d08fdba
MS
10971 if (current_class_type)
10972 {
33bd39a2 10973 error ("cannot declare member `%T::%s' within `%T'",
db5ae43f
MS
10974 ctype, name, current_class_type);
10975 return void_type_node;
8d08fdba
MS
10976 }
10977 type = build_offset_type (ctype, type);
10978 }
8d08fdba 10979 else
eeb75383
NS
10980 {
10981 incomplete_type_error (NULL_TREE, ctype);
10982 return error_mark_node;
d363e7bf 10983 }
8d08fdba
MS
10984
10985 declarator = sname;
10986 }
8d08fdba
MS
10987 else if (TREE_CODE (sname) == SCOPE_REF)
10988 my_friendly_abort (17);
10989 else
10990 {
10991 done_scoping:
10992 declarator = TREE_OPERAND (declarator, 1);
10993 if (declarator && TREE_CODE (declarator) == CALL_EXPR)
10994 /* In this case, we will deal with it later. */
10995 ;
10996 else
10997 {
10998 if (TREE_CODE (type) == FUNCTION_TYPE)
14ae7e7d
JM
10999 type = build_cplus_method_type (ctype, TREE_TYPE (type),
11000 TYPE_ARG_TYPES (type));
8d08fdba
MS
11001 else
11002 type = build_offset_type (ctype, type);
11003 }
11004 }
11005 }
11006 break;
11007
11008 case BIT_NOT_EXPR:
11009 declarator = TREE_OPERAND (declarator, 0);
11010 break;
11011
8d08fdba
MS
11012 case RECORD_TYPE:
11013 case UNION_TYPE:
11014 case ENUMERAL_TYPE:
11015 declarator = NULL_TREE;
11016 break;
11017
11018 case ERROR_MARK:
11019 declarator = NULL_TREE;
11020 break;
11021
11022 default:
11023 my_friendly_abort (158);
11024 }
11025 }
11026
91d231cb 11027 if (returned_attrs)
1eab9b56 11028 {
91d231cb
JM
11029 if (attrlist)
11030 *attrlist = chainon (returned_attrs, *attrlist);
1eab9b56 11031 else
91d231cb 11032 attrlist = &returned_attrs;
1eab9b56
JM
11033 }
11034
419c6212
JM
11035 /* Now TYPE has the actual type. */
11036
55b3d665
JM
11037 /* Did array size calculations overflow? */
11038
11039 if (TREE_CODE (type) == ARRAY_TYPE
11040 && COMPLETE_TYPE_P (type)
11041 && TREE_OVERFLOW (TYPE_SIZE (type)))
11042 {
11043 error ("size of array `%s' is too large", name);
aba649ba 11044 /* If we proceed with the array type as it is, we'll eventually
55b3d665
JM
11045 crash in tree_low_cst(). */
11046 type = error_mark_node;
11047 }
11048
34fc957d 11049 if (explicitp == 1 || (explicitp && friendp))
db5ae43f 11050 {
34fc957d
NS
11051 /* [dcl.fct.spec] The explicit specifier shall only be used in
11052 declarations of constructors within a class definition. */
11053 error ("only declarations of constructors can be `explicit'");
db5ae43f
MS
11054 explicitp = 0;
11055 }
11056
f30432d7
MS
11057 if (RIDBIT_SETP (RID_MUTABLE, specbits))
11058 {
34fc957d
NS
11059 if (current_class_name == NULL_TREE || decl_context == PARM || friendp)
11060 {
11061 error ("non-member `%s' cannot be declared `mutable'", name);
11062 RIDBIT_RESET (RID_MUTABLE, specbits);
11063 }
11064 else if (decl_context == TYPENAME || RIDBIT_SETP (RID_TYPEDEF, specbits))
f30432d7 11065 {
34fc957d 11066 error ("non-object member `%s' cannot be declared `mutable'", name);
f30432d7
MS
11067 RIDBIT_RESET (RID_MUTABLE, specbits);
11068 }
34fc957d
NS
11069 else if (TREE_CODE (type) == FUNCTION_TYPE
11070 || TREE_CODE (type) == METHOD_TYPE)
11071 {
11072 error ("function `%s' cannot be declared `mutable'", name);
11073 RIDBIT_RESET (RID_MUTABLE, specbits);
11074 }
f30432d7
MS
11075 else if (staticp)
11076 {
8251199e 11077 error ("static `%s' cannot be declared `mutable'", name);
f30432d7
MS
11078 RIDBIT_RESET (RID_MUTABLE, specbits);
11079 }
34fc957d
NS
11080 else if (type_quals & TYPE_QUAL_CONST)
11081 {
11082 error ("const `%s' cannot be declared `mutable'", name);
11083 RIDBIT_RESET (RID_MUTABLE, specbits);
11084 }
f30432d7
MS
11085 }
11086
efe38fab
JM
11087 if (declarator == NULL_TREE
11088 || TREE_CODE (declarator) == IDENTIFIER_NODE
11089 || (TREE_CODE (declarator) == TEMPLATE_ID_EXPR
11090 && (TREE_CODE (type) == FUNCTION_TYPE
11091 || TREE_CODE (type) == METHOD_TYPE)))
11092 /* OK */;
11093 else if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
11094 {
33bd39a2 11095 error ("template-id `%D' used as a declarator", declarator);
efe38fab
JM
11096 declarator = dname;
11097 }
11098 else
419c6212 11099 /* Unexpected declarator format. */
efe38fab
JM
11100 my_friendly_abort (990210);
11101
419c6212
JM
11102 /* If this is declaring a typedef name, return a TYPE_DECL. */
11103
fc378698 11104 if (RIDBIT_SETP (RID_TYPEDEF, specbits) && decl_context != TYPENAME)
8d08fdba
MS
11105 {
11106 tree decl;
11107
11108 /* Note that the grammar rejects storage classes
11109 in typenames, fields or parameters. */
eff71ab0
PB
11110 if (current_lang_name == lang_name_java)
11111 TYPE_FOR_JAVA (type) = 1;
8d08fdba 11112
d2e5ee5c
MS
11113 if (decl_context == FIELD)
11114 {
094fe153 11115 if (declarator == constructor_name (current_class_type))
33bd39a2 11116 pedwarn ("ISO C++ forbids nested type `%D' with same name as enclosing class",
d2e5ee5c
MS
11117 declarator);
11118 decl = build_lang_decl (TYPE_DECL, declarator, type);
d2e5ee5c
MS
11119 }
11120 else
6bda7a5e
NS
11121 {
11122 decl = build_decl (TYPE_DECL, declarator, type);
11123 if (!current_function_decl)
11124 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
11125 }
11126
9188c363
MM
11127 /* If the user declares "typedef struct {...} foo" then the
11128 struct will have an anonymous name. Fill that name in now.
11129 Nothing can refer to it, so nothing needs know about the name
11130 change. */
8d08fdba 11131 if (type != error_mark_node
2bdb0643 11132 && declarator
8d08fdba
MS
11133 && TYPE_NAME (type)
11134 && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
1951a1b6 11135 && TYPE_ANONYMOUS_P (type)
89d684bb 11136 && cp_type_quals (type) == TYPE_UNQUALIFIED)
8d08fdba 11137 {
dcd08efc
JM
11138 tree oldname = TYPE_NAME (type);
11139 tree t;
11140
2c73f9f5 11141 /* Replace the anonymous name with the real name everywhere. */
8d08fdba 11142 lookup_tag_reverse (type, declarator);
dcd08efc
JM
11143 for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
11144 if (TYPE_NAME (t) == oldname)
11145 TYPE_NAME (t) = decl;
8d08fdba
MS
11146
11147 if (TYPE_LANG_SPECIFIC (type))
11148 TYPE_WAS_ANONYMOUS (type) = 1;
11149
33964bf4
MM
11150 /* If this is a typedef within a template class, the nested
11151 type is a (non-primary) template. The name for the
11152 template needs updating as well. */
11153 if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
68642fb6 11154 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type))
33964bf4
MM
11155 = TYPE_IDENTIFIER (type);
11156
50a6dbd7
JM
11157 /* FIXME remangle member functions; member functions of a
11158 type with external linkage have external linkage. */
fc378698 11159 }
fc378698 11160
8d08fdba
MS
11161 if (TREE_CODE (type) == OFFSET_TYPE || TREE_CODE (type) == METHOD_TYPE)
11162 {
8251199e 11163 cp_error_at ("typedef name may not be class-qualified", decl);
a3203465 11164 return NULL_TREE;
8d08fdba
MS
11165 }
11166 else if (quals)
11167 {
11168 if (ctype == NULL_TREE)
11169 {
11170 if (TREE_CODE (type) != METHOD_TYPE)
cb9a3ff8 11171 cp_error_at ("invalid type qualifier for non-member function type", decl);
8d08fdba
MS
11172 else
11173 ctype = TYPE_METHOD_BASETYPE (type);
11174 }
11175 if (ctype != NULL_TREE)
11176 grok_method_quals (ctype, decl, quals);
11177 }
11178
11179 if (RIDBIT_SETP (RID_SIGNED, specbits)
11180 || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
11181 C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
11182
c91a56d2
MS
11183 bad_specifiers (decl, "type", virtualp, quals != NULL_TREE,
11184 inlinep, friendp, raises != NULL_TREE);
11185
11186 if (initialized)
8251199e 11187 error ("typedef declaration includes an initializer");
c91a56d2 11188
8d08fdba
MS
11189 return decl;
11190 }
11191
11192 /* Detect the case of an array type of unspecified size
11193 which came, as such, direct from a typedef name.
11194 We must copy the type, so that each identifier gets
11195 a distinct type, so that each identifier's size can be
11196 controlled separately by its own initializer. */
11197
55b3d665
JM
11198 if (type != 0 && typedef_type != 0
11199 && TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type) == 0
11200 && TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (typedef_type))
8d08fdba
MS
11201 {
11202 type = build_cplus_array_type (TREE_TYPE (type), TYPE_DOMAIN (type));
11203 }
11204
969fd501
NS
11205 /* Detect where we're using a typedef of function type to declare a
11206 function. last_function_parms will not be set, so we must create
11207 it now. */
11208
11209 if (type == typedef_type && TREE_CODE (type) == FUNCTION_TYPE)
11210 {
11211 tree decls = NULL_TREE;
11212 tree args;
11213
11214 for (args = TYPE_ARG_TYPES (type); args; args = TREE_CHAIN (args))
11215 {
11216 tree decl = build_decl (PARM_DECL, NULL_TREE, TREE_VALUE (args));
11217
11218 TREE_CHAIN (decl) = decls;
11219 decls = decl;
11220 }
11221
11222 last_function_parms = nreverse (decls);
11223 }
11224
8d08fdba
MS
11225 /* If this is a type name (such as, in a cast or sizeof),
11226 compute the type and return it now. */
11227
11228 if (decl_context == TYPENAME)
11229 {
11230 /* Note that the grammar rejects storage classes
11231 in typenames, fields or parameters. */
91063b51 11232 if (type_quals != TYPE_UNQUALIFIED)
6eabb241 11233 type_quals = TYPE_UNQUALIFIED;
8d08fdba
MS
11234
11235 /* Special case: "friend class foo" looks like a TYPENAME context. */
11236 if (friendp)
11237 {
91063b51 11238 if (type_quals != TYPE_UNQUALIFIED)
b7484fbe 11239 {
33bd39a2 11240 error ("type qualifiers specified for friend class declaration");
91063b51 11241 type_quals = TYPE_UNQUALIFIED;
b7484fbe
MS
11242 }
11243 if (inlinep)
11244 {
33bd39a2 11245 error ("`inline' specified for friend class declaration");
b7484fbe
MS
11246 inlinep = 0;
11247 }
f2ae0c45
JM
11248
11249 /* Until core issue 180 is resolved, allow 'friend typename A::B'.
c00996a3 11250 But don't allow implicit typenames except with a class-key. */
f2ae0c45
JM
11251 if (!current_aggr && (TREE_CODE (type) != TYPENAME_TYPE
11252 || IMPLICIT_TYPENAME_P (type)))
4b054b80
NS
11253 {
11254 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
33bd39a2 11255 pedwarn ("template parameters cannot be friends");
f2ae0c45 11256 else if (TREE_CODE (type) == TYPENAME_TYPE)
33bd39a2 11257 pedwarn ("\
f2ae0c45
JM
11258friend declaration requires class-key, i.e. `friend class %T::%T'",
11259 constructor_name (current_class_type),
11260 TYPE_IDENTIFIER (type));
4b054b80 11261 else
33bd39a2 11262 pedwarn ("\
f2ae0c45
JM
11263friend declaration requires class-key, i.e. `friend %#T'",
11264 type);
4b054b80 11265 }
b7484fbe
MS
11266
11267 /* Only try to do this stuff if we didn't already give up. */
11268 if (type != integer_type_node)
11269 {
788bf0e3
NS
11270 /* DR 209. The friendly class does not need to be accessible
11271 in the scope of the class granting friendship. */
11272 skip_type_access_control ();
d363e7bf 11273
b7484fbe
MS
11274 /* A friendly class? */
11275 if (current_class_type)
11276 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type));
11277 else
33bd39a2 11278 error ("trying to make class `%T' a friend of global scope",
2ae7bada 11279 type);
d363e7bf 11280
b7484fbe
MS
11281 type = void_type_node;
11282 }
8d08fdba
MS
11283 }
11284 else if (quals)
11285 {
8d08fdba
MS
11286 if (ctype == NULL_TREE)
11287 {
41cbc04c 11288 if (TREE_CODE (type) != METHOD_TYPE)
33bd39a2 11289 error ("invalid qualifiers on non-member function type");
41cbc04c
NS
11290 else
11291 ctype = TYPE_METHOD_BASETYPE (type);
11292 }
11293 if (ctype)
11294 {
11295 tree dummy = build_decl (TYPE_DECL, declarator, type);
11296 grok_method_quals (ctype, dummy, quals);
11297 type = TREE_TYPE (dummy);
8d08fdba 11298 }
8d08fdba
MS
11299 }
11300
11301 return type;
11302 }
11303 else if (declarator == NULL_TREE && decl_context != PARM
db5ae43f 11304 && decl_context != CATCHPARM
8d08fdba
MS
11305 && TREE_CODE (type) != UNION_TYPE
11306 && ! bitfield)
11307 {
33bd39a2 11308 error ("abstract declarator `%T' used as declaration", type);
8d08fdba
MS
11309 declarator = make_anon_name ();
11310 }
11311
11312 /* `void' at top level (not within pointer)
11313 is allowed only in typedefs or type names.
11314 We don't complain about parms either, but that is because
11315 a better error message can be made later. */
11316
a1774733 11317 if (TREE_CODE (type) == VOID_TYPE && decl_context != PARM)
8d08fdba 11318 {
b7484fbe 11319 if (! declarator)
8251199e 11320 error ("unnamed variable or field declared void");
b7484fbe 11321 else if (TREE_CODE (declarator) == IDENTIFIER_NODE)
8d08fdba
MS
11322 {
11323 if (IDENTIFIER_OPNAME_P (declarator))
8d08fdba 11324 my_friendly_abort (356);
8d08fdba 11325 else
8251199e 11326 error ("variable or field `%s' declared void", name);
8d08fdba
MS
11327 }
11328 else
8251199e 11329 error ("variable or field declared void");
8d08fdba
MS
11330 type = integer_type_node;
11331 }
11332
11333 /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
11334 or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE. */
11335
14ae7e7d
JM
11336 if (decl_context == PARM || decl_context == CATCHPARM)
11337 {
11338 if (ctype || in_namespace)
11339 error ("cannot use `::' in parameter declaration");
11340
11341 /* A parameter declared as an array of T is really a pointer to T.
11342 One declared as a function is really a pointer to a function.
11343 One declared as a member is really a pointer to member. */
11344
11345 if (TREE_CODE (type) == ARRAY_TYPE)
11346 {
11347 /* Transfer const-ness of array into that of type pointed to. */
11348 type = build_pointer_type (TREE_TYPE (type));
91063b51 11349 type_quals = TYPE_UNQUALIFIED;
14ae7e7d
JM
11350 }
11351 else if (TREE_CODE (type) == FUNCTION_TYPE)
11352 type = build_pointer_type (type);
11353 else if (TREE_CODE (type) == OFFSET_TYPE)
11354 type = build_pointer_type (type);
14ae7e7d 11355 }
68642fb6 11356
8d08fdba
MS
11357 {
11358 register tree decl;
11359
11360 if (decl_context == PARM)
11361 {
ff350acd 11362 decl = build_decl (PARM_DECL, declarator, type);
8d08fdba
MS
11363
11364 bad_specifiers (decl, "parameter", virtualp, quals != NULL_TREE,
11365 inlinep, friendp, raises != NULL_TREE);
8d08fdba
MS
11366
11367 /* Compute the type actually passed in the parmlist,
11368 for the case where there is no prototype.
11369 (For example, shorts and chars are passed as ints.)
11370 When there is a prototype, this is overridden later. */
11371
39211cd5 11372 DECL_ARG_TYPE (decl) = type_promotes_to (type);
8d08fdba
MS
11373 }
11374 else if (decl_context == FIELD)
11375 {
11376 if (type == error_mark_node)
11377 {
11378 /* Happens when declaring arrays of sizes which
11379 are error_mark_node, for example. */
11380 decl = NULL_TREE;
11381 }
997a088c 11382 else if (in_namespace && !friendp)
05008fb9
MM
11383 {
11384 /* Something like struct S { int N::j; }; */
33bd39a2 11385 error ("invalid use of `::'");
05008fb9
MM
11386 decl = NULL_TREE;
11387 }
8d08fdba
MS
11388 else if (TREE_CODE (type) == FUNCTION_TYPE)
11389 {
11390 int publicp = 0;
e1467ff2 11391 tree function_context;
8d08fdba 11392
72b7eeff
MS
11393 /* We catch the others as conflicts with the builtin
11394 typedefs. */
11395 if (friendp && declarator == ridpointers[(int) RID_SIGNED])
11396 {
33bd39a2 11397 error ("function `%D' cannot be declared friend",
72b7eeff
MS
11398 declarator);
11399 friendp = 0;
11400 }
11401
8d08fdba
MS
11402 if (friendp == 0)
11403 {
11404 if (ctype == NULL_TREE)
11405 ctype = current_class_type;
11406
11407 if (ctype == NULL_TREE)
11408 {
33bd39a2 11409 error ("can't make `%D' into a method -- not in a class",
8d08fdba
MS
11410 declarator);
11411 return void_type_node;
11412 }
11413
11414 /* ``A union may [ ... ] not [ have ] virtual functions.''
11415 ARM 9.5 */
11416 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
11417 {
33bd39a2 11418 error ("function `%D' declared virtual inside a union",
8d08fdba
MS
11419 declarator);
11420 return void_type_node;
11421 }
11422
596ea4e5
AS
11423 if (declarator == ansi_opname (NEW_EXPR)
11424 || declarator == ansi_opname (VEC_NEW_EXPR)
11425 || declarator == ansi_opname (DELETE_EXPR)
11426 || declarator == ansi_opname (VEC_DELETE_EXPR))
8d08fdba
MS
11427 {
11428 if (virtualp)
11429 {
33bd39a2 11430 error ("`%D' cannot be declared virtual, since it is always static",
8d08fdba
MS
11431 declarator);
11432 virtualp = 0;
11433 }
11434 }
11435 else if (staticp < 2)
14ae7e7d
JM
11436 type = build_cplus_method_type (ctype, TREE_TYPE (type),
11437 TYPE_ARG_TYPES (type));
8d08fdba
MS
11438 }
11439
11440 /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node. */
68642fb6 11441 function_context = (ctype != NULL_TREE) ?
4f1c5b7d 11442 decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
e1467ff2
MM
11443 publicp = (! friendp || ! staticp)
11444 && function_context == NULL_TREE;
68642fb6 11445 decl = grokfndecl (ctype, type,
386b8a85
JM
11446 TREE_CODE (declarator) != TEMPLATE_ID_EXPR
11447 ? declarator : dname,
11448 declarator,
7a8f9fa9 11449 virtualp, flags, quals, raises,
386b8a85 11450 friendp ? -1 : 0, friendp, publicp, inlinep,
2c73f9f5 11451 funcdef_flag, template_count, in_namespace);
20496fa2 11452 if (decl == NULL_TREE)
3ddfb0e6 11453 return decl;
6125f3be
DE
11454#if 0
11455 /* This clobbers the attrs stored in `decl' from `attrlist'. */
91d231cb
JM
11456 /* The decl and setting of decl_attr is also turned off. */
11457 decl = build_decl_attribute_variant (decl, decl_attr);
6125f3be 11458#endif
f0e01782 11459
cc804e51
MM
11460 /* [class.conv.ctor]
11461
11462 A constructor declared without the function-specifier
11463 explicit that can be called with a single parameter
11464 specifies a conversion from the type of its first
11465 parameter to the type of its class. Such a constructor
11466 is called a converting constructor. */
db5ae43f
MS
11467 if (explicitp == 2)
11468 DECL_NONCONVERTING_P (decl) = 1;
cc804e51
MM
11469 else if (DECL_CONSTRUCTOR_P (decl))
11470 {
11471 /* The constructor can be called with exactly one
11472 parameter if there is at least one parameter, and
11473 any subsequent parameters have default arguments.
e0fff4b3
JM
11474 Ignore any compiler-added parms. */
11475 tree arg_types = FUNCTION_FIRST_USER_PARMTYPE (decl);
cc804e51
MM
11476
11477 if (arg_types == void_list_node
68642fb6
UD
11478 || (arg_types
11479 && TREE_CHAIN (arg_types)
cc804e51
MM
11480 && TREE_CHAIN (arg_types) != void_list_node
11481 && !TREE_PURPOSE (TREE_CHAIN (arg_types))))
11482 DECL_NONCONVERTING_P (decl) = 1;
11483 }
8d08fdba
MS
11484 }
11485 else if (TREE_CODE (type) == METHOD_TYPE)
11486 {
faae18ab
MS
11487 /* We only get here for friend declarations of
11488 members of other classes. */
8d08fdba
MS
11489 /* All method decls are public, so tell grokfndecl to set
11490 TREE_PUBLIC, also. */
386b8a85 11491 decl = grokfndecl (ctype, type, declarator, declarator,
7a8f9fa9 11492 virtualp, flags, quals, raises,
386b8a85 11493 friendp ? -1 : 0, friendp, 1, 0, funcdef_flag,
2c73f9f5 11494 template_count, in_namespace);
f0e01782
MS
11495 if (decl == NULL_TREE)
11496 return NULL_TREE;
8d08fdba 11497 }
5566b478 11498 else if (!staticp && ! processing_template_decl
d0f062fb 11499 && !COMPLETE_TYPE_P (complete_type (type))
8d08fdba
MS
11500 && (TREE_CODE (type) != ARRAY_TYPE || initialized == 0))
11501 {
b7484fbe 11502 if (declarator)
33bd39a2 11503 error ("field `%D' has incomplete type", declarator);
b7484fbe 11504 else
33bd39a2 11505 error ("name `%T' has incomplete type", type);
8d08fdba
MS
11506
11507 /* If we're instantiating a template, tell them which
11508 instantiation made the field's type be incomplete. */
11509 if (current_class_type
11510 && TYPE_NAME (current_class_type)
d2e5ee5c 11511 && IDENTIFIER_TEMPLATE (TYPE_IDENTIFIER (current_class_type))
8d08fdba
MS
11512 && declspecs && TREE_VALUE (declspecs)
11513 && TREE_TYPE (TREE_VALUE (declspecs)) == type)
33bd39a2 11514 error (" in instantiation of template `%T'",
db5ae43f
MS
11515 current_class_type);
11516
8d08fdba
MS
11517 type = error_mark_node;
11518 decl = NULL_TREE;
11519 }
11520 else
11521 {
11522 if (friendp)
11523 {
cb9a3ff8 11524 error ("`%s' is neither function nor member function; cannot be declared friend",
8d08fdba
MS
11525 IDENTIFIER_POINTER (declarator));
11526 friendp = 0;
11527 }
11528 decl = NULL_TREE;
11529 }
11530
11531 if (friendp)
11532 {
11533 /* Friends are treated specially. */
788bf0e3
NS
11534 tree t = NULL_TREE;
11535
11536 /* DR 209. The friend does not need to be accessible at this
11537 point. */
11538 skip_type_access_control ();
11539
8d08fdba 11540 if (ctype == current_class_type)
8251199e 11541 warning ("member functions are implicitly friends of their class");
6c30752f 11542
788bf0e3
NS
11543 if (decl && DECL_NAME (decl))
11544 {
11545 if (template_class_depth (current_class_type) == 0)
11546 {
11547 decl = check_explicit_specialization
11548 (declarator, decl,
11549 template_count, 2 * (funcdef_flag != 0) + 4);
11550 if (decl == error_mark_node)
11551 return error_mark_node;
11552 }
11553
11554 t = do_friend (ctype, declarator, decl,
91d231cb 11555 last_function_parms, *attrlist, flags, quals,
788bf0e3
NS
11556 funcdef_flag);
11557 }
11558 if (t && funcdef_flag)
11559 return t;
11560 return void_type_node;
8d08fdba
MS
11561 }
11562
11563 /* Structure field. It may not be a function, except for C++ */
11564
11565 if (decl == NULL_TREE)
11566 {
8d08fdba
MS
11567 if (initialized)
11568 {
3ac3d9ea
MM
11569 if (!staticp)
11570 {
11571 /* An attempt is being made to initialize a non-static
11572 member. But, from [class.mem]:
68642fb6 11573
3ac3d9ea
MM
11574 4 A member-declarator can contain a
11575 constant-initializer only if it declares a static
11576 member (_class.static_) of integral or enumeration
68642fb6 11577 type, see _class.static.data_.
3ac3d9ea
MM
11578
11579 This used to be relatively common practice, but
11580 the rest of the compiler does not correctly
11581 handle the initialization unless the member is
11582 static so we make it static below. */
33bd39a2 11583 pedwarn ("ISO C++ forbids initialization of member `%D'",
3ac3d9ea 11584 declarator);
33bd39a2 11585 pedwarn ("making `%D' static", declarator);
3ac3d9ea
MM
11586 staticp = 1;
11587 }
11588
6ba89f8e
MM
11589 if (uses_template_parms (type))
11590 /* We'll check at instantiation time. */
11591 ;
11592 else if (check_static_variable_definition (declarator,
11593 type))
11594 /* If we just return the declaration, crashes
11595 will sometimes occur. We therefore return
72a93143
JM
11596 void_type_node, as if this was a friend
11597 declaration, to cause callers to completely
11598 ignore this declaration. */
6ba89f8e 11599 return void_type_node;
8d08fdba
MS
11600 }
11601
8ebeee52 11602 /* 9.2p13 [class.mem] */
4d7614e9 11603 if (declarator == constructor_name (current_class_type)
e54930f9
JM
11604 /* The standard does not allow non-static data members
11605 here either, but we agreed at the 10/99 meeting
11606 to change that in TC 1 so that they are allowed in
11607 classes with no user-defined constructors. */
11608 && staticp)
33bd39a2 11609 pedwarn ("ISO C++ forbids static data member `%D' with same name as enclosing class",
8ebeee52
JM
11610 declarator);
11611
3ac3d9ea 11612 if (staticp)
8d08fdba 11613 {
f18a14bc
MM
11614 /* C++ allows static class members. All other work
11615 for this is done by grokfield. */
4ce3d537 11616 decl = build_lang_decl (VAR_DECL, declarator, type);
5b605f68
MS
11617 TREE_STATIC (decl) = 1;
11618 /* In class context, 'static' means public access. */
3ac3d9ea 11619 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl) = 1;
8d08fdba
MS
11620 }
11621 else
11622 {
721c3b42 11623 decl = build_decl (FIELD_DECL, declarator, type);
2bf105ab 11624 DECL_NONADDRESSABLE_P (decl) = bitfield;
8d08fdba
MS
11625 if (RIDBIT_SETP (RID_MUTABLE, specbits))
11626 {
11627 DECL_MUTABLE_P (decl) = 1;
11628 RIDBIT_RESET (RID_MUTABLE, specbits);
11629 }
11630 }
11631
11632 bad_specifiers (decl, "field", virtualp, quals != NULL_TREE,
11633 inlinep, friendp, raises != NULL_TREE);
11634 }
11635 }
11636 else if (TREE_CODE (type) == FUNCTION_TYPE || TREE_CODE (type) == METHOD_TYPE)
11637 {
386b8a85 11638 tree original_name;
8d08fdba
MS
11639 int publicp = 0;
11640
11641 if (! declarator)
11642 return NULL_TREE;
11643
386b8a85
JM
11644 if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
11645 original_name = dname;
11646 else
11647 original_name = declarator;
11648
8926095f 11649 if (RIDBIT_SETP (RID_AUTO, specbits))
8251199e 11650 error ("storage class `auto' invalid for function `%s'", name);
8926095f 11651 else if (RIDBIT_SETP (RID_REGISTER, specbits))
8251199e 11652 error ("storage class `register' invalid for function `%s'", name);
8d08fdba
MS
11653
11654 /* Function declaration not at top level.
11655 Storage classes other than `extern' are not allowed
11656 and `extern' makes no difference. */
a9aedbc2 11657 if (! toplevel_bindings_p ()
8926095f
MS
11658 && (RIDBIT_SETP (RID_STATIC, specbits)
11659 || RIDBIT_SETP (RID_INLINE, specbits))
8d08fdba 11660 && pedantic)
8926095f
MS
11661 {
11662 if (RIDBIT_SETP (RID_STATIC, specbits))
8251199e 11663 pedwarn ("storage class `static' invalid for function `%s' declared out of global scope", name);
8926095f 11664 else
8251199e 11665 pedwarn ("storage class `inline' invalid for function `%s' declared out of global scope", name);
8926095f 11666 }
68642fb6 11667
8d08fdba
MS
11668 if (ctype == NULL_TREE)
11669 {
11670 if (virtualp)
11671 {
8251199e 11672 error ("virtual non-class function `%s'", name);
8d08fdba
MS
11673 virtualp = 0;
11674 }
8d08fdba
MS
11675 }
11676 else if (TREE_CODE (type) == FUNCTION_TYPE && staticp < 2)
14ae7e7d
JM
11677 type = build_cplus_method_type (ctype, TREE_TYPE (type),
11678 TYPE_ARG_TYPES (type));
8d08fdba 11679
eb66be0e 11680 /* Record presence of `static'. */
faae18ab 11681 publicp = (ctype != NULL_TREE
a9aedbc2 11682 || RIDBIT_SETP (RID_EXTERN, specbits)
eb66be0e 11683 || !RIDBIT_SETP (RID_STATIC, specbits));
8d08fdba 11684
386b8a85 11685 decl = grokfndecl (ctype, type, original_name, declarator,
7a8f9fa9 11686 virtualp, flags, quals, raises,
75650646 11687 1, friendp,
68642fb6 11688 publicp, inlinep, funcdef_flag,
2c73f9f5 11689 template_count, in_namespace);
f0e01782
MS
11690 if (decl == NULL_TREE)
11691 return NULL_TREE;
8d08fdba 11692
8d08fdba
MS
11693 if (staticp == 1)
11694 {
11695 int illegal_static = 0;
11696
11697 /* Don't allow a static member function in a class, and forbid
11698 declaring main to be static. */
11699 if (TREE_CODE (type) == METHOD_TYPE)
11700 {
33bd39a2 11701 pedwarn ("cannot declare member function `%D' to have static linkage", decl);
8d08fdba
MS
11702 illegal_static = 1;
11703 }
8d08fdba
MS
11704 else if (current_function_decl)
11705 {
11706 /* FIXME need arm citation */
8251199e 11707 error ("cannot declare static function inside another function");
8d08fdba
MS
11708 illegal_static = 1;
11709 }
11710
11711 if (illegal_static)
11712 {
11713 staticp = 0;
11714 RIDBIT_RESET (RID_STATIC, specbits);
11715 }
11716 }
8d08fdba
MS
11717 }
11718 else
11719 {
11720 /* It's a variable. */
11721
11722 /* An uninitialized decl with `extern' is a reference. */
68642fb6
UD
11723 decl = grokvardecl (type, declarator, &specbits,
11724 initialized,
11725 (type_quals & TYPE_QUAL_CONST) != 0,
950ad3c3 11726 in_namespace);
8d08fdba
MS
11727 bad_specifiers (decl, "variable", virtualp, quals != NULL_TREE,
11728 inlinep, friendp, raises != NULL_TREE);
11729
11730 if (ctype)
11731 {
f0e01782 11732 DECL_CONTEXT (decl) = ctype;
8d08fdba
MS
11733 if (staticp == 1)
11734 {
33bd39a2 11735 pedwarn ("`static' may not be used when defining (as opposed to declaring) a static data member");
8d08fdba
MS
11736 staticp = 0;
11737 RIDBIT_RESET (RID_STATIC, specbits);
11738 }
b7484fbe
MS
11739 if (RIDBIT_SETP (RID_REGISTER, specbits) && TREE_STATIC (decl))
11740 {
33bd39a2 11741 error ("static member `%D' declared `register'", decl);
b7484fbe
MS
11742 RIDBIT_RESET (RID_REGISTER, specbits);
11743 }
f30432d7 11744 if (RIDBIT_SETP (RID_EXTERN, specbits) && pedantic)
8d08fdba 11745 {
33bd39a2 11746 pedwarn ("cannot explicitly declare member `%#D' to have extern linkage",
f30432d7 11747 decl);
8d08fdba
MS
11748 RIDBIT_RESET (RID_EXTERN, specbits);
11749 }
11750 }
11751 }
11752
34fc957d 11753 my_friendly_assert (!RIDBIT_SETP (RID_MUTABLE, specbits), 19990927);
8d08fdba
MS
11754
11755 /* Record `register' declaration for warnings on &
11756 and in case doing stupid register allocation. */
11757
11758 if (RIDBIT_SETP (RID_REGISTER, specbits))
11759 DECL_REGISTER (decl) = 1;
11760
8926095f
MS
11761 if (RIDBIT_SETP (RID_EXTERN, specbits))
11762 DECL_THIS_EXTERN (decl) = 1;
11763
faae18ab
MS
11764 if (RIDBIT_SETP (RID_STATIC, specbits))
11765 DECL_THIS_STATIC (decl) = 1;
11766
adecb3f4
MM
11767 /* Record constancy and volatility. There's no need to do this
11768 when processing a template; we'll do this for the instantiated
11769 declaration based on the type of DECL. */
11770 if (!processing_template_decl)
11771 c_apply_type_quals_to_decl (type_quals, decl);
8d08fdba
MS
11772
11773 return decl;
11774 }
11775}
11776\f
11777/* Tell if a parmlist/exprlist looks like an exprlist or a parmlist.
11778 An empty exprlist is a parmlist. An exprlist which
11779 contains only identifiers at the global level
11780 is a parmlist. Otherwise, it is an exprlist. */
e92cc029 11781
8d08fdba
MS
11782int
11783parmlist_is_exprlist (exprs)
11784 tree exprs;
11785{
11786 if (exprs == NULL_TREE || TREE_PARMLIST (exprs))
11787 return 0;
11788
a9aedbc2 11789 if (toplevel_bindings_p ())
8d08fdba
MS
11790 {
11791 /* At the global level, if these are all identifiers,
11792 then it is a parmlist. */
11793 while (exprs)
11794 {
11795 if (TREE_CODE (TREE_VALUE (exprs)) != IDENTIFIER_NODE)
11796 return 1;
11797 exprs = TREE_CHAIN (exprs);
11798 }
11799 return 0;
11800 }
11801 return 1;
11802}
11803
f181d4ae
MM
11804/* Subroutine of start_function. Ensure that each of the parameter
11805 types (as listed in PARMS) is complete, as is required for a
11806 function definition. */
e92cc029 11807
8d08fdba
MS
11808static void
11809require_complete_types_for_parms (parms)
11810 tree parms;
11811{
07c88314 11812 for (; parms; parms = TREE_CHAIN (parms))
8d08fdba 11813 {
5cce22b6
NS
11814 if (VOID_TYPE_P (TREE_TYPE (parms)))
11815 /* grokparms will have already issued an error */
11816 TREE_TYPE (parms) = error_mark_node;
11817 else if (complete_type_or_else (TREE_TYPE (parms), parms))
42f989ff 11818 layout_decl (parms, 0);
5cce22b6
NS
11819 else
11820 TREE_TYPE (parms) = error_mark_node;
8d08fdba
MS
11821 }
11822}
11823
46e8c075 11824/* Returns non-zero if T is a local variable. */
297e73d8 11825
46e8c075
MM
11826int
11827local_variable_p (t)
11828 tree t;
297e73d8 11829{
68642fb6 11830 if ((TREE_CODE (t) == VAR_DECL
297e73d8
MM
11831 /* A VAR_DECL with a context that is a _TYPE is a static data
11832 member. */
11833 && !TYPE_P (CP_DECL_CONTEXT (t))
11834 /* Any other non-local variable must be at namespace scope. */
46e8c075 11835 && !DECL_NAMESPACE_SCOPE_P (t))
297e73d8 11836 || (TREE_CODE (t) == PARM_DECL))
46e8c075 11837 return 1;
297e73d8 11838
46e8c075
MM
11839 return 0;
11840}
11841
11842/* Returns non-zero if T is an automatic local variable or a label.
11843 (These are the declarations that need to be remapped when the code
11844 containing them is duplicated.) */
11845
11846int
11847nonstatic_local_decl_p (t)
11848 tree t;
11849{
11850 return ((local_variable_p (t) && !TREE_STATIC (t))
11851 || TREE_CODE (t) == LABEL_DECL
11852 || TREE_CODE (t) == RESULT_DECL);
11853}
11854
11855/* Like local_variable_p, but suitable for use as a tree-walking
11856 function. */
11857
11858static tree
11859local_variable_p_walkfn (tp, walk_subtrees, data)
11860 tree *tp;
11861 int *walk_subtrees ATTRIBUTE_UNUSED;
11862 void *data ATTRIBUTE_UNUSED;
11863{
68642fb6 11864 return ((local_variable_p (*tp) && !DECL_ARTIFICIAL (*tp))
46e8c075 11865 ? *tp : NULL_TREE);
297e73d8
MM
11866}
11867
11868/* Check that ARG, which is a default-argument expression for a
11869 parameter DECL, is legal. Returns ARG, or ERROR_MARK_NODE, if
11870 something goes wrong. DECL may also be a _TYPE node, rather than a
11871 DECL, if there is no DECL available. */
11872
11873tree
11874check_default_argument (decl, arg)
11875 tree decl;
11876 tree arg;
11877{
11878 tree var;
11879 tree decl_type;
11880
11881 if (TREE_CODE (arg) == DEFAULT_ARG)
11882 /* We get a DEFAULT_ARG when looking at an in-class declaration
11883 with a default argument. Ignore the argument for now; we'll
11884 deal with it after the class is complete. */
11885 return arg;
11886
11887 if (processing_template_decl || uses_template_parms (arg))
11888 /* We don't do anything checking until instantiation-time. Note
11889 that there may be uninstantiated arguments even for an
11890 instantiated function, since default arguments are not
11891 instantiated until they are needed. */
11892 return arg;
11893
11894 if (TYPE_P (decl))
11895 {
11896 decl_type = decl;
11897 decl = NULL_TREE;
11898 }
11899 else
11900 decl_type = TREE_TYPE (decl);
11901
68642fb6 11902 if (arg == error_mark_node
297e73d8
MM
11903 || decl == error_mark_node
11904 || TREE_TYPE (arg) == error_mark_node
11905 || decl_type == error_mark_node)
11906 /* Something already went wrong. There's no need to check
11907 further. */
11908 return error_mark_node;
11909
11910 /* [dcl.fct.default]
68642fb6 11911
297e73d8
MM
11912 A default argument expression is implicitly converted to the
11913 parameter type. */
11914 if (!TREE_TYPE (arg)
11915 || !can_convert_arg (decl_type, TREE_TYPE (arg), arg))
11916 {
11917 if (decl)
33bd39a2 11918 error ("default argument for `%#D' has type `%T'",
297e73d8
MM
11919 decl, TREE_TYPE (arg));
11920 else
33bd39a2 11921 error ("default argument for parameter of type `%T' has type `%T'",
297e73d8
MM
11922 decl_type, TREE_TYPE (arg));
11923
11924 return error_mark_node;
11925 }
11926
11927 /* [dcl.fct.default]
11928
11929 Local variables shall not be used in default argument
68642fb6 11930 expressions.
297e73d8
MM
11931
11932 The keyword `this' shall not be used in a default argument of a
11933 member function. */
5362b086 11934 var = walk_tree_without_duplicates (&arg, local_variable_p_walkfn,
ee94fce6 11935 NULL);
297e73d8
MM
11936 if (var)
11937 {
33bd39a2 11938 error ("default argument `%E' uses local variable `%D'",
297e73d8
MM
11939 arg, var);
11940 return error_mark_node;
11941 }
11942
11943 /* All is well. */
11944 return arg;
11945}
11946
8d08fdba
MS
11947/* Decode the list of parameter types for a function type.
11948 Given the list of things declared inside the parens,
11949 return a list of types.
11950
5cce22b6
NS
11951 We determine whether ellipsis parms are used by PARMLIST_ELLIPSIS_P
11952 flag. If unset, we append void_list_node. A parmlist declared
11953 as `(void)' is accepted as the empty parmlist.
11954
11955 Also set last_function_parms to the chain of PARM_DECLs. */
8d08fdba
MS
11956
11957static tree
5cce22b6 11958grokparms (first_parm)
8d08fdba 11959 tree first_parm;
8d08fdba
MS
11960{
11961 tree result = NULL_TREE;
11962 tree decls = NULL_TREE;
5cce22b6
NS
11963 int ellipsis = !first_parm || PARMLIST_ELLIPSIS_P (first_parm);
11964 tree parm, chain;
11965 int any_error = 0;
8d08fdba 11966
5cce22b6
NS
11967 my_friendly_assert (!first_parm || TREE_PARMLIST (first_parm), 20001115);
11968
11969 for (parm = first_parm; parm != NULL_TREE; parm = chain)
8d08fdba 11970 {
0657c69c 11971 tree type = NULL_TREE;
5cce22b6
NS
11972 register tree decl = TREE_VALUE (parm);
11973 tree init = TREE_PURPOSE (parm);
8d08fdba 11974
5cce22b6
NS
11975 chain = TREE_CHAIN (parm);
11976 /* @@ weak defense against parse errors. */
11977 if (TREE_CODE (decl) != VOID_TYPE
11978 && TREE_CODE (decl) != TREE_LIST)
8d08fdba 11979 {
5cce22b6
NS
11980 /* Give various messages as the need arises. */
11981 if (TREE_CODE (decl) == STRING_CST)
33bd39a2 11982 error ("invalid string constant `%E'", decl);
5cce22b6
NS
11983 else if (TREE_CODE (decl) == INTEGER_CST)
11984 error ("invalid integer constant in parameter list, did you forget to give parameter name?");
11985 continue;
11986 }
8d08fdba 11987
5cce22b6
NS
11988 if (parm == void_list_node)
11989 break;
8d08fdba 11990
5cce22b6 11991 decl = grokdeclarator (TREE_VALUE (decl), TREE_PURPOSE (decl),
91d231cb 11992 PARM, init != NULL_TREE, NULL);
5cce22b6
NS
11993 if (! decl || TREE_TYPE (decl) == error_mark_node)
11994 continue;
d363e7bf 11995
5cce22b6
NS
11996 type = TREE_TYPE (decl);
11997 if (VOID_TYPE_P (type))
11998 {
11999 if (same_type_p (type, void_type_node)
12000 && !DECL_NAME (decl) && !result && !chain && !ellipsis)
12001 /* this is a parmlist of `(void)', which is ok. */
12002 break;
12003 incomplete_type_error (decl, type);
0657c69c
MM
12004 /* It's not a good idea to actually create parameters of
12005 type `void'; other parts of the compiler assume that a
12006 void type terminates the parameter list. */
04f3dc2b 12007 type = error_mark_node;
0657c69c 12008 TREE_TYPE (decl) = error_mark_node;
5cce22b6 12009 }
8d08fdba 12010
d363e7bf 12011 if (type != error_mark_node)
04f3dc2b
MM
12012 {
12013 /* Top-level qualifiers on the parameters are
12014 ignored for function types. */
12015 type = TYPE_MAIN_VARIANT (type);
12016 if (TREE_CODE (type) == METHOD_TYPE)
12017 {
33bd39a2 12018 error ("parameter `%D' invalidly declared method type", decl);
04f3dc2b
MM
12019 type = build_pointer_type (type);
12020 TREE_TYPE (decl) = type;
12021 }
12022 else if (TREE_CODE (type) == OFFSET_TYPE)
12023 {
33bd39a2 12024 error ("parameter `%D' invalidly declared offset type", decl);
04f3dc2b
MM
12025 type = build_pointer_type (type);
12026 TREE_TYPE (decl) = type;
12027 }
12028 else if (abstract_virtuals_error (decl, type))
12029 any_error = 1; /* Seems like a good idea. */
12030 else if (POINTER_TYPE_P (type))
12031 {
12032 /* [dcl.fct]/6, parameter types cannot contain pointers
12033 (references) to arrays of unknown bound. */
98979fe0
NS
12034 tree t = TREE_TYPE (type);
12035 int ptr = TYPE_PTR_P (type);
12036
12037 while (1)
12038 {
12039 if (TYPE_PTR_P (t))
12040 ptr = 1;
12041 else if (TREE_CODE (t) != ARRAY_TYPE)
12042 break;
12043 else if (!TYPE_DOMAIN (t))
12044 break;
12045 t = TREE_TYPE (t);
12046 }
04f3dc2b 12047 if (TREE_CODE (t) == ARRAY_TYPE)
33bd39a2 12048 error ("parameter `%D' includes %s to array of unknown bound `%T'",
98979fe0 12049 decl, ptr ? "pointer" : "reference", t);
04f3dc2b
MM
12050 }
12051
12052 DECL_ARG_TYPE (decl) = TREE_TYPE (decl);
12053 if (PROMOTE_PROTOTYPES
acf97e0b 12054 && INTEGRAL_TYPE_P (type)
04f3dc2b
MM
12055 && TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node))
12056 DECL_ARG_TYPE (decl) = integer_type_node;
12057 if (!any_error && init)
12058 init = check_default_argument (decl, init);
12059 else
12060 init = NULL_TREE;
12061 }
8d08fdba 12062
5cce22b6
NS
12063 TREE_CHAIN (decl) = decls;
12064 decls = decl;
0657c69c 12065 result = tree_cons (init, type, result);
8d08fdba 12066 }
5cce22b6
NS
12067 decls = nreverse (decls);
12068 result = nreverse (result);
12069 if (!ellipsis)
12070 result = chainon (result, void_list_node);
8d08fdba
MS
12071 last_function_parms = decls;
12072
8d08fdba
MS
12073 return result;
12074}
42976354 12075
8d08fdba 12076\f
271e6f02
NS
12077/* D is a constructor or overloaded `operator='.
12078
12079 Let T be the class in which D is declared. Then, this function
12080 returns:
12081
12082 -1 if D's is an ill-formed constructor or copy assignment operator
12083 whose first parameter is of type `T'.
12084 0 if D is not a copy constructor or copy assignment
12085 operator.
12086 1 if D is a copy constructor or copy assignment operator whose
12087 first parameter is a reference to const qualified T.
12088 2 if D is a copy constructor or copy assignment operator whose
12089 first parameter is a reference to non-const qualified T.
12090
12091 This function can be used as a predicate. Positive values indicate
12092 a copy constructor and non-zero values indicate a copy assignment
4f1c5b7d
MM
12093 operator. */
12094
c11b6f21 12095int
271e6f02 12096copy_fn_p (d)
c11b6f21
MS
12097 tree d;
12098{
271e6f02
NS
12099 tree args;
12100 tree arg_type;
12101 int result = 1;
12102
12103 my_friendly_assert (DECL_FUNCTION_MEMBER_P (d), 20011208);
4f1c5b7d 12104
271e6f02
NS
12105 if (DECL_TEMPLATE_INFO (d) && is_member_template (DECL_TI_TEMPLATE (d)))
12106 /* Instantiations of template member functions are never copy
12107 functions. Note that member functions of templated classes are
12108 represented as template functions internally, and we must
12109 accept those as copy functions. */
12110 return 0;
12111
12112 args = FUNCTION_FIRST_USER_PARMTYPE (d);
12113 if (!args)
4f1c5b7d
MM
12114 return 0;
12115
271e6f02
NS
12116 arg_type = TREE_VALUE (args);
12117
12118 if (TYPE_MAIN_VARIANT (arg_type) == DECL_CONTEXT (d))
12119 {
12120 /* Pass by value copy assignment operator. */
12121 result = -1;
12122 }
12123 else if (TREE_CODE (arg_type) == REFERENCE_TYPE
12124 && TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)) == DECL_CONTEXT (d))
12125 {
12126 if (CP_TYPE_CONST_P (TREE_TYPE (arg_type)))
12127 result = 2;
12128 }
12129 else
12130 return 0;
12131
12132 args = TREE_CHAIN (args);
12133
12134 if (args && args != void_list_node && !TREE_PURPOSE (args))
12135 /* There are more non-optional args. */
12136 return 0;
12137
12138 return result;
12139}
12140
12141/* Remember any special properties of member function DECL. */
12142
12143void grok_special_member_properties (decl)
12144 tree decl;
12145{
12146 if (!DECL_NONSTATIC_MEMBER_FUNCTION_P(decl))
12147 ; /* Not special. */
12148 else if (DECL_CONSTRUCTOR_P (decl))
12149 {
12150 int ctor = copy_fn_p (decl);
12151
12152 if (ctor > 0)
12153 {
12154 /* [class.copy]
12155
12156 A non-template constructor for class X is a copy
12157 constructor if its first parameter is of type X&, const
12158 X&, volatile X& or const volatile X&, and either there
12159 are no other parameters or else all other parameters have
12160 default arguments. */
12161 TYPE_HAS_INIT_REF (DECL_CONTEXT (decl)) = 1;
12162 if (ctor > 1)
12163 TYPE_HAS_CONST_INIT_REF (DECL_CONTEXT (decl)) = 1;
12164 }
12165 else if (sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (decl)))
12166 TYPE_HAS_DEFAULT_CONSTRUCTOR (DECL_CONTEXT (decl)) = 1;
12167 }
12168 else if (DECL_OVERLOADED_OPERATOR_P (decl) == NOP_EXPR)
12169 {
12170 /* [class.copy]
12171
12172 A non-template assignment operator for class X is a copy
12173 assignment operator if its parameter is of type X, X&, const
12174 X&, volatile X& or const volatile X&. */
12175
12176 int assop = copy_fn_p (decl);
12177
12178 if (assop)
12179 {
12180 TYPE_HAS_ASSIGN_REF (DECL_CONTEXT (decl)) = 1;
12181 if (assop != 1)
12182 TYPE_HAS_CONST_ASSIGN_REF (DECL_CONTEXT (decl)) = 1;
12183 if (DECL_PURE_VIRTUAL_P (decl))
12184 TYPE_HAS_ABSTRACT_ASSIGN_REF (DECL_CONTEXT (decl)) = 1;
12185 }
12186 }
c11b6f21
MS
12187}
12188
271e6f02
NS
12189/* Check a constructor DECL has the correct form. Complains
12190 if the class has a constructor of the form X(X). */
e92cc029 12191
a0a33927 12192int
8d08fdba
MS
12193grok_ctor_properties (ctype, decl)
12194 tree ctype, decl;
12195{
271e6f02
NS
12196 int ctor_parm = copy_fn_p (decl);
12197
12198 if (ctor_parm < 0)
12199 {
12200 /* [class.copy]
12201
12202 A declaration of a constructor for a class X is ill-formed if
12203 its first parameter is of type (optionally cv-qualified) X
12204 and either there are no other parameters or else all other
12205 parameters have default arguments.
12206
12207 We *don't* complain about member template instantiations that
12208 have this form, though; they can occur as we try to decide
12209 what constructor to use during overload resolution. Since
12210 overload resolution will never prefer such a constructor to
12211 the non-template copy constructor (which is either explicitly
12212 or implicitly defined), there's no need to worry about their
12213 existence. Theoretically, they should never even be
12214 instantiated, but that's hard to forestall. */
33bd39a2 12215 error ("invalid constructor; you probably meant `%T (const %T&)'",
0b41abe6
JM
12216 ctype, ctype);
12217 SET_IDENTIFIER_ERROR_LOCUS (DECL_NAME (decl), ctype);
12218 return 0;
8d08fdba 12219 }
271e6f02 12220
a0a33927 12221 return 1;
8d08fdba
MS
12222}
12223
596ea4e5 12224/* An operator with this code is unary, but can also be binary. */
e92cc029 12225
a28e3c7f 12226static int
596ea4e5
AS
12227ambi_op_p (code)
12228 enum tree_code code;
8d08fdba 12229{
596ea4e5
AS
12230 return (code == INDIRECT_REF
12231 || code == ADDR_EXPR
12232 || code == CONVERT_EXPR
12233 || code == NEGATE_EXPR
12234 || code == PREINCREMENT_EXPR
12235 || code == PREDECREMENT_EXPR);
8d08fdba
MS
12236}
12237
12238/* An operator with this name can only be unary. */
e92cc029 12239
a28e3c7f 12240static int
596ea4e5
AS
12241unary_op_p (code)
12242 enum tree_code code;
8d08fdba 12243{
596ea4e5
AS
12244 return (code == TRUTH_NOT_EXPR
12245 || code == BIT_NOT_EXPR
12246 || code == COMPONENT_REF
12247 || code == TYPE_EXPR);
8d08fdba
MS
12248}
12249
12250/* Do a little sanity-checking on how they declared their operator. */
e92cc029 12251
5566b478 12252void
271e6f02 12253grok_op_properties (decl, friendp)
8d08fdba 12254 tree decl;
271e6f02 12255 int friendp;
8d08fdba
MS
12256{
12257 tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
596ea4e5 12258 tree argtype;
8d08fdba
MS
12259 int methodp = (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE);
12260 tree name = DECL_NAME (decl);
596ea4e5
AS
12261 enum tree_code operator_code;
12262 int arity;
12263
12264 /* Count the number of arguments. */
12265 for (argtype = argtypes, arity = 0;
12266 argtype && argtype != void_list_node;
12267 argtype = TREE_CHAIN (argtype))
12268 ++arity;
8d08fdba 12269
a28e3c7f
MS
12270 if (current_class_type == NULL_TREE)
12271 friendp = 1;
8d08fdba 12272
596ea4e5
AS
12273 if (DECL_CONV_FN_P (decl))
12274 operator_code = TYPE_EXPR;
12275 else
12276 do
12277 {
0c918ce5
MM
12278#define DEF_OPERATOR(NAME, CODE, MANGLING, ARITY, ASSN_P) \
12279 if (ansi_opname (CODE) == name) \
12280 { \
12281 operator_code = CODE; \
12282 break; \
12283 } \
12284 else if (ansi_assopname (CODE) == name) \
12285 { \
12286 operator_code = CODE; \
12287 DECL_ASSIGNMENT_OPERATOR_P (decl) = 1; \
12288 break; \
596ea4e5
AS
12289 }
12290
12291#include "operators.def"
12292#undef DEF_OPERATOR
12293
12294 my_friendly_abort (20000527);
12295 }
12296 while (0);
12297 my_friendly_assert (operator_code != LAST_CPLUS_TREE_CODE, 20000526);
12298 SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
12299
a28e3c7f
MS
12300 if (! friendp)
12301 {
596ea4e5
AS
12302 switch (operator_code)
12303 {
12304 case CALL_EXPR:
12305 TYPE_OVERLOADS_CALL_EXPR (current_class_type) = 1;
12306 break;
5362b086 12307
596ea4e5
AS
12308 case ARRAY_REF:
12309 TYPE_OVERLOADS_ARRAY_REF (current_class_type) = 1;
12310 break;
f181d4ae 12311
596ea4e5
AS
12312 case COMPONENT_REF:
12313 case MEMBER_REF:
12314 TYPE_OVERLOADS_ARROW (current_class_type) = 1;
12315 break;
5362b086 12316
596ea4e5
AS
12317 case NEW_EXPR:
12318 TYPE_HAS_NEW_OPERATOR (current_class_type) = 1;
12319 break;
5362b086 12320
596ea4e5
AS
12321 case DELETE_EXPR:
12322 TYPE_GETS_DELETE (current_class_type) |= 1;
12323 break;
5362b086 12324
596ea4e5
AS
12325 case VEC_NEW_EXPR:
12326 TYPE_HAS_ARRAY_NEW_OPERATOR (current_class_type) = 1;
12327 break;
5362b086 12328
596ea4e5
AS
12329 case VEC_DELETE_EXPR:
12330 TYPE_GETS_DELETE (current_class_type) |= 2;
12331 break;
12332
12333 default:
12334 break;
12335 }
12336 }
12337
12338 if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR)
8d08fdba 12339 {
8d08fdba
MS
12340 /* When the compiler encounters the definition of A::operator new, it
12341 doesn't look at the class declaration to find out if it's static. */
a28e3c7f 12342 if (methodp)
3afb32a4 12343 revert_static_member_fn (decl);
68642fb6 12344
36791f1e 12345 TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
8d08fdba 12346 }
596ea4e5 12347 else if (operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
8d08fdba 12348 {
a28e3c7f 12349 if (methodp)
3afb32a4 12350 revert_static_member_fn (decl);
68642fb6 12351
36791f1e 12352 TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
8d08fdba 12353 }
8d08fdba
MS
12354 else
12355 {
12356 /* An operator function must either be a non-static member function
12357 or have at least one parameter of a class, a reference to a class,
12358 an enumeration, or a reference to an enumeration. 13.4.0.6 */
700f8a87 12359 if (! methodp || DECL_STATIC_FUNCTION_P (decl))
8d08fdba 12360 {
596ea4e5
AS
12361 if (operator_code == TYPE_EXPR
12362 || operator_code == CALL_EXPR
12363 || operator_code == COMPONENT_REF
12364 || operator_code == ARRAY_REF
12365 || operator_code == NOP_EXPR)
33bd39a2 12366 error ("`%D' must be a nonstatic member function", decl);
8d08fdba
MS
12367 else
12368 {
12369 tree p = argtypes;
12370
700f8a87 12371 if (DECL_STATIC_FUNCTION_P (decl))
33bd39a2 12372 error ("`%D' must be either a non-static member function or a non-member function", decl);
700f8a87 12373
8d08fdba 12374 if (p)
a1774733 12375 for (; TREE_CODE (TREE_VALUE (p)) != VOID_TYPE ; p = TREE_CHAIN (p))
8d08fdba
MS
12376 {
12377 tree arg = TREE_VALUE (p);
12378 if (TREE_CODE (arg) == REFERENCE_TYPE)
12379 arg = TREE_TYPE (arg);
12380
12381 /* This lets bad template code slip through. */
12382 if (IS_AGGR_TYPE (arg)
12383 || TREE_CODE (arg) == ENUMERAL_TYPE
73b0fce8 12384 || TREE_CODE (arg) == TEMPLATE_TYPE_PARM
a1281f45 12385 || TREE_CODE (arg) == BOUND_TEMPLATE_TEMPLATE_PARM)
8d08fdba
MS
12386 goto foundaggr;
12387 }
33bd39a2 12388 error
8251199e 12389 ("`%D' must have an argument of class or enumerated type",
8d08fdba
MS
12390 decl);
12391 foundaggr:
12392 ;
12393 }
12394 }
68642fb6 12395
596ea4e5 12396 if (operator_code == CALL_EXPR)
2c73f9f5 12397 return; /* No restrictions on args. */
8d08fdba 12398
9a3b49ac 12399 if (IDENTIFIER_TYPENAME_P (name) && ! DECL_TEMPLATE_INFO (decl))
a0a33927
MS
12400 {
12401 tree t = TREE_TYPE (name);
17708e90 12402 if (! friendp)
a0a33927
MS
12403 {
12404 int ref = (TREE_CODE (t) == REFERENCE_TYPE);
d8e178a0 12405 const char *what = 0;
5362b086 12406
a0a33927
MS
12407 if (ref)
12408 t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
12409
17708e90
NS
12410 if (TREE_CODE (t) == VOID_TYPE)
12411 what = "void";
12412 else if (t == current_class_type)
a0a33927 12413 what = "the same type";
9a3b49ac 12414 /* Don't force t to be complete here. */
a0a33927 12415 else if (IS_AGGR_TYPE (t)
d0f062fb 12416 && COMPLETE_TYPE_P (t)
a0a33927
MS
12417 && DERIVED_FROM_P (t, current_class_type))
12418 what = "a base class";
12419
12420 if (what)
8251199e 12421 warning ("conversion to %s%s will never use a type conversion operator",
a0a33927
MS
12422 ref ? "a reference to " : "", what);
12423 }
12424 }
271e6f02 12425 if (operator_code == COND_EXPR)
8d08fdba
MS
12426 {
12427 /* 13.4.0.3 */
33bd39a2 12428 error ("ISO C++ prohibits overloading operator ?:");
68642fb6 12429 }
596ea4e5 12430 else if (ambi_op_p (operator_code))
8d08fdba 12431 {
596ea4e5
AS
12432 if (arity == 1)
12433 /* We pick the one-argument operator codes by default, so
12434 we don't have to change anything. */
12435 ;
12436 else if (arity == 2)
8d08fdba 12437 {
596ea4e5
AS
12438 /* If we thought this was a unary operator, we now know
12439 it to be a binary operator. */
12440 switch (operator_code)
12441 {
12442 case INDIRECT_REF:
12443 operator_code = MULT_EXPR;
12444 break;
12445
12446 case ADDR_EXPR:
12447 operator_code = BIT_AND_EXPR;
12448 break;
12449
12450 case CONVERT_EXPR:
12451 operator_code = PLUS_EXPR;
12452 break;
12453
12454 case NEGATE_EXPR:
12455 operator_code = MINUS_EXPR;
12456 break;
12457
12458 case PREINCREMENT_EXPR:
12459 operator_code = POSTINCREMENT_EXPR;
12460 break;
12461
12462 case PREDECREMENT_EXPR:
655dc6ee 12463 operator_code = POSTDECREMENT_EXPR;
596ea4e5
AS
12464 break;
12465
12466 default:
12467 my_friendly_abort (20000527);
12468 }
12469
12470 SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
12471
12472 if ((operator_code == POSTINCREMENT_EXPR
12473 || operator_code == POSTDECREMENT_EXPR)
5156628f 12474 && ! processing_template_decl
007e5fea 12475 && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)), integer_type_node))
8d08fdba
MS
12476 {
12477 if (methodp)
33bd39a2 12478 error ("postfix `%D' must take `int' as its argument",
8d08fdba
MS
12479 decl);
12480 else
33bd39a2 12481 error
8251199e
JM
12482 ("postfix `%D' must take `int' as its second argument",
12483 decl);
8d08fdba
MS
12484 }
12485 }
12486 else
12487 {
12488 if (methodp)
33bd39a2 12489 error ("`%D' must take either zero or one argument", decl);
8d08fdba 12490 else
33bd39a2 12491 error ("`%D' must take either one or two arguments", decl);
8d08fdba 12492 }
824b9a4c
MS
12493
12494 /* More Effective C++ rule 6. */
eb448459 12495 if (warn_ecpp
596ea4e5
AS
12496 && (operator_code == POSTINCREMENT_EXPR
12497 || operator_code == POSTDECREMENT_EXPR
12498 || operator_code == PREINCREMENT_EXPR
12499 || operator_code == PREDECREMENT_EXPR))
824b9a4c
MS
12500 {
12501 tree arg = TREE_VALUE (argtypes);
12502 tree ret = TREE_TYPE (TREE_TYPE (decl));
12503 if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
12504 arg = TREE_TYPE (arg);
12505 arg = TYPE_MAIN_VARIANT (arg);
596ea4e5
AS
12506 if (operator_code == PREINCREMENT_EXPR
12507 || operator_code == PREDECREMENT_EXPR)
824b9a4c
MS
12508 {
12509 if (TREE_CODE (ret) != REFERENCE_TYPE
3bfdc719
MM
12510 || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)),
12511 arg))
33bd39a2 12512 warning ("prefix `%D' should return `%T'", decl,
824b9a4c
MS
12513 build_reference_type (arg));
12514 }
12515 else
12516 {
3bfdc719 12517 if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
33bd39a2 12518 warning ("postfix `%D' should return `%T'", decl, arg);
824b9a4c
MS
12519 }
12520 }
8d08fdba 12521 }
596ea4e5 12522 else if (unary_op_p (operator_code))
8d08fdba 12523 {
596ea4e5 12524 if (arity != 1)
8d08fdba
MS
12525 {
12526 if (methodp)
33bd39a2 12527 error ("`%D' must take `void'", decl);
8d08fdba 12528 else
33bd39a2 12529 error ("`%D' must take exactly one argument", decl);
8d08fdba
MS
12530 }
12531 }
596ea4e5 12532 else /* if (binary_op_p (operator_code)) */
8d08fdba 12533 {
596ea4e5 12534 if (arity != 2)
8d08fdba
MS
12535 {
12536 if (methodp)
33bd39a2 12537 error ("`%D' must take exactly one argument", decl);
8d08fdba 12538 else
33bd39a2 12539 error ("`%D' must take exactly two arguments", decl);
8d08fdba 12540 }
824b9a4c
MS
12541
12542 /* More Effective C++ rule 7. */
eb448459 12543 if (warn_ecpp
596ea4e5
AS
12544 && (operator_code == TRUTH_ANDIF_EXPR
12545 || operator_code == TRUTH_ORIF_EXPR
12546 || operator_code == COMPOUND_EXPR))
33bd39a2 12547 warning ("user-defined `%D' always evaluates both arguments",
824b9a4c
MS
12548 decl);
12549 }
12550
12551 /* Effective C++ rule 23. */
eb448459 12552 if (warn_ecpp
596ea4e5
AS
12553 && arity == 2
12554 && (operator_code == PLUS_EXPR
12555 || operator_code == MINUS_EXPR
12556 || operator_code == TRUNC_DIV_EXPR
12557 || operator_code == MULT_EXPR)
824b9a4c 12558 && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
33bd39a2 12559 warning ("`%D' should return by value", decl);
8d08fdba 12560
271e6f02 12561 /* [over.oper]/8 */
34332678
CT
12562 for (; argtypes && argtypes != void_list_node;
12563 argtypes = TREE_CHAIN (argtypes))
12564 if (TREE_PURPOSE (argtypes))
12565 {
12566 TREE_PURPOSE (argtypes) = NULL_TREE;
596ea4e5
AS
12567 if (operator_code == POSTINCREMENT_EXPR
12568 || operator_code == POSTDECREMENT_EXPR)
34332678
CT
12569 {
12570 if (pedantic)
33bd39a2 12571 pedwarn ("`%D' cannot have default arguments", decl);
34332678
CT
12572 }
12573 else
33bd39a2 12574 error ("`%D' cannot have default arguments", decl);
34332678
CT
12575 }
12576
8d08fdba
MS
12577 }
12578}
12579\f
d8e178a0 12580static const char *
094fe153
JM
12581tag_name (code)
12582 enum tag_types code;
12583{
12584 switch (code)
12585 {
12586 case record_type:
12587 return "struct";
12588 case class_type:
12589 return "class";
12590 case union_type:
12591 return "union ";
12592 case enum_type:
12593 return "enum";
094fe153
JM
12594 default:
12595 my_friendly_abort (981122);
12596 }
12597}
12598
8d08fdba
MS
12599/* Get the struct, enum or union (CODE says which) with tag NAME.
12600 Define the tag as a forward-reference if it is not defined.
12601
12602 C++: If a class derivation is given, process it here, and report
12603 an error if multiple derivation declarations are not identical.
12604
12605 If this is a definition, come in through xref_tag and only look in
12606 the current frame for the name (since C++ allows new names in any
12607 scope.) */
12608
8d08fdba 12609tree
ca107ded 12610xref_tag (code_type_node, name, globalize)
8d08fdba 12611 tree code_type_node;
ca107ded 12612 tree name;
8d08fdba
MS
12613 int globalize;
12614{
12615 enum tag_types tag_code;
12616 enum tree_code code;
8d08fdba 12617 register tree ref, t;
8f032717 12618 struct binding_level *b = current_binding_level;
a80e4195 12619 int got_type = 0;
dc8263bc 12620 tree attributes = NULL_TREE;
25aab5d0 12621 tree context = NULL_TREE;
dc8263bc
JM
12622
12623 /* If we are called from the parser, code_type_node will sometimes be a
12624 TREE_LIST. This indicates that the user wrote
12625 "class __attribute__ ((foo)) bar". Extract the attributes so we can
12626 use them later. */
12627 if (TREE_CODE (code_type_node) == TREE_LIST)
12628 {
12629 attributes = TREE_PURPOSE (code_type_node);
12630 code_type_node = TREE_VALUE (code_type_node);
12631 }
8d08fdba 12632
665f2503 12633 tag_code = (enum tag_types) tree_low_cst (code_type_node, 1);
8d08fdba
MS
12634 switch (tag_code)
12635 {
12636 case record_type:
12637 case class_type:
8d08fdba 12638 code = RECORD_TYPE;
8d08fdba
MS
12639 break;
12640 case union_type:
12641 code = UNION_TYPE;
8d08fdba
MS
12642 break;
12643 case enum_type:
12644 code = ENUMERAL_TYPE;
12645 break;
12646 default:
12647 my_friendly_abort (18);
12648 }
12649
12650 /* If a cross reference is requested, look up the type
12651 already defined for this tag and return it. */
2f939d94 12652 if (TYPE_P (name))
be99da77
MS
12653 {
12654 t = name;
a80e4195
MS
12655 name = TYPE_IDENTIFIER (t);
12656 got_type = 1;
be99da77
MS
12657 }
12658 else
12659 t = IDENTIFIER_TYPE_VALUE (name);
61a127b3 12660
f2ae0c45
JM
12661 /* Warn about 'friend struct Inherited;' doing the wrong thing. */
12662 if (t && globalize && TREE_CODE (t) == TYPENAME_TYPE)
12663 {
12664 static int explained;
2b0cbc5d
NS
12665 tree shadowed;
12666
33bd39a2 12667 warning ("`%s %T' declares a new type at namespace scope",
2b0cbc5d
NS
12668 tag_name (tag_code), name);
12669 if (!explained++)
33bd39a2 12670 warning (" names from dependent base classes are not visible to unqualified name lookup - to refer to the inherited type, say `%s %T::%T'",
2b0cbc5d
NS
12671 tag_name (tag_code),
12672 constructor_name (current_class_type),
12673 TYPE_IDENTIFIER (t));
12674
12675 /* We need to remove the class scope binding for the
12676 TYPENAME_TYPE as otherwise poplevel_class gets confused. */
12677 for (shadowed = b->class_shadowed;
12678 shadowed;
12679 shadowed = TREE_CHAIN (shadowed))
12680 if (TREE_TYPE (shadowed) == TYPE_NAME (t))
12681 {
12682 TREE_PURPOSE (shadowed) = NULL_TREE;
12683 break;
12684 }
f2ae0c45
JM
12685 }
12686
73b0fce8 12687 if (t && TREE_CODE (t) != code && TREE_CODE (t) != TEMPLATE_TYPE_PARM
a1281f45 12688 && TREE_CODE (t) != BOUND_TEMPLATE_TEMPLATE_PARM)
a0a33927
MS
12689 t = NULL_TREE;
12690
8ccc31eb 12691 if (! globalize)
8d08fdba 12692 {
f3400fe2
JM
12693 /* If we know we are defining this tag, only look it up in
12694 this scope and don't try to find it as a type. */
12695 ref = lookup_tag (code, name, b, 1);
8d08fdba
MS
12696 }
12697 else
12698 {
25aab5d0 12699 if (t)
36a117a5 12700 {
25aab5d0
MM
12701 /* [dcl.type.elab] If the identifier resolves to a
12702 typedef-name or a template type-parameter, the
12703 elaborated-type-specifier is ill-formed. */
12704 if (t != TYPE_MAIN_VARIANT (t)
12705 || (CLASS_TYPE_P (t) && TYPE_WAS_ANONYMOUS (t)))
33bd39a2 12706 pedwarn ("using typedef-name `%D' after `%s'",
25aab5d0
MM
12707 TYPE_NAME (t), tag_name (tag_code));
12708 else if (TREE_CODE (t) == TEMPLATE_TYPE_PARM)
33bd39a2 12709 error ("using template type parameter `%T' after `%s'",
25aab5d0
MM
12710 t, tag_name (tag_code));
12711
12712 ref = t;
12713 }
12714 else
12715 ref = lookup_tag (code, name, b, 0);
68642fb6 12716
25aab5d0
MM
12717 if (! ref)
12718 {
12719 /* Try finding it as a type declaration. If that wins,
68642fb6 12720 use it. */
25aab5d0
MM
12721 ref = lookup_name (name, 1);
12722
12723 if (ref != NULL_TREE
12724 && processing_template_decl
12725 && DECL_CLASS_TEMPLATE_P (ref)
12726 && template_class_depth (current_class_type) == 0)
12727 /* Since GLOBALIZE is true, we're declaring a global
6757edfe 12728 template, so we want this type. */
17aec3eb 12729 ref = DECL_TEMPLATE_RESULT (ref);
6757edfe 12730
25aab5d0
MM
12731 if (ref && TREE_CODE (ref) == TYPE_DECL
12732 && TREE_CODE (TREE_TYPE (ref)) == code)
12733 ref = TREE_TYPE (ref);
12734 else
12735 ref = NULL_TREE;
12736 }
12737
68642fb6
UD
12738 if (ref && current_class_type
12739 && template_class_depth (current_class_type)
12740 && PROCESSING_REAL_TEMPLATE_DECL_P ())
25aab5d0
MM
12741 {
12742 /* Since GLOBALIZE is non-zero, we are not looking at a
12743 definition of this tag. Since, in addition, we are currently
12744 processing a (member) template declaration of a template
12745 class, we must be very careful; consider:
12746
12747 template <class X>
12748 struct S1
12749
12750 template <class U>
12751 struct S2
12752 { template <class V>
12753 friend struct S1; };
12754
12755 Here, the S2::S1 declaration should not be confused with the
12756 outer declaration. In particular, the inner version should
12757 have a template parameter of level 2, not level 1. This
12758 would be particularly important if the member declaration
12759 were instead:
12760
12761 template <class V = U> friend struct S1;
12762
12763 say, when we should tsubst into `U' when instantiating
12764 S2. On the other hand, when presented with:
12765
12766 template <class T>
12767 struct S1 {
12768 template <class U>
12769 struct S2 {};
12770 template <class U>
12771 friend struct S2;
12772 };
12773
12774 we must find the inner binding eventually. We
12775 accomplish this by making sure that the new type we
12776 create to represent this declaration has the right
12777 TYPE_CONTEXT. */
12778 context = TYPE_CONTEXT (ref);
12779 ref = NULL_TREE;
8d08fdba
MS
12780 }
12781 }
12782
8d08fdba
MS
12783 if (! ref)
12784 {
12785 /* If no such tag is yet defined, create a forward-reference node
12786 and record it as the "definition".
12787 When a real declaration of this type is found,
12788 the forward-reference will be altered into a real type. */
8d08fdba
MS
12789 if (code == ENUMERAL_TYPE)
12790 {
33bd39a2 12791 error ("use of enum `%#D' without previous declaration", name);
fc378698 12792
8d08fdba
MS
12793 ref = make_node (ENUMERAL_TYPE);
12794
12795 /* Give the type a default layout like unsigned int
12796 to avoid crashing if it does not get defined. */
12797 TYPE_MODE (ref) = TYPE_MODE (unsigned_type_node);
12798 TYPE_ALIGN (ref) = TYPE_ALIGN (unsigned_type_node);
11cf4d18 12799 TYPE_USER_ALIGN (ref) = 0;
8d08fdba
MS
12800 TREE_UNSIGNED (ref) = 1;
12801 TYPE_PRECISION (ref) = TYPE_PRECISION (unsigned_type_node);
12802 TYPE_MIN_VALUE (ref) = TYPE_MIN_VALUE (unsigned_type_node);
12803 TYPE_MAX_VALUE (ref) = TYPE_MAX_VALUE (unsigned_type_node);
12804
12805 /* Enable us to recognize when a type is created in class context.
12806 To do nested classes correctly, this should probably be cleared
12807 out when we leave this classes scope. Currently this in only
12808 done in `start_enum'. */
12809
12810 pushtag (name, ref, globalize);
8d08fdba 12811 }
8d08fdba
MS
12812 else
12813 {
8d08fdba 12814 struct binding_level *old_b = class_binding_level;
8d08fdba 12815
33848bb0 12816 ref = make_aggr_type (code);
25aab5d0 12817 TYPE_CONTEXT (ref) = context;
8d08fdba 12818
8d08fdba
MS
12819#ifdef NONNESTED_CLASSES
12820 /* Class types don't nest the way enums do. */
12821 class_binding_level = (struct binding_level *)0;
12822#endif
12823 pushtag (name, ref, globalize);
12824 class_binding_level = old_b;
8d08fdba
MS
12825 }
12826 }
12827 else
12828 {
7fe6899f 12829 if (!globalize && processing_template_decl && IS_AGGR_TYPE (ref))
6757edfe 12830 redeclare_class_template (ref, current_template_parms);
8d08fdba
MS
12831 }
12832
8d08fdba
MS
12833 /* Until the type is defined, tentatively accept whatever
12834 structure tag the user hands us. */
d0f062fb 12835 if (!COMPLETE_TYPE_P (ref)
8d08fdba
MS
12836 && ref != current_class_type
12837 /* Have to check this, in case we have contradictory tag info. */
12838 && IS_AGGR_TYPE_CODE (TREE_CODE (ref)))
12839 {
12840 if (tag_code == class_type)
12841 CLASSTYPE_DECLARED_CLASS (ref) = 1;
6eabb241 12842 else if (tag_code == record_type)
8d08fdba
MS
12843 CLASSTYPE_DECLARED_CLASS (ref) = 0;
12844 }
12845
dc8263bc
JM
12846 TREE_TYPE (ref) = attributes;
12847
8d08fdba
MS
12848 return ref;
12849}
8ccc31eb 12850
fc378698
MS
12851tree
12852xref_tag_from_type (old, id, globalize)
12853 tree old, id;
12854 int globalize;
12855{
12856 tree code_type_node;
12857
12858 if (TREE_CODE (old) == RECORD_TYPE)
12859 code_type_node = (CLASSTYPE_DECLARED_CLASS (old)
12860 ? class_type_node : record_type_node);
12861 else
12862 code_type_node = union_type_node;
12863
12864 if (id == NULL_TREE)
12865 id = TYPE_IDENTIFIER (old);
12866
ca107ded 12867 return xref_tag (code_type_node, id, globalize);
fc378698
MS
12868}
12869
3fd71a52
MM
12870/* REF is a type (named NAME), for which we have just seen some
12871 baseclasses. BINFO is a list of those baseclasses; the
12872 TREE_PURPOSE is an access_* node, and the TREE_VALUE is the type of
12873 the base-class. CODE_TYPE_NODE indicates whether REF is a class,
12874 struct, or union. */
12875
8ccc31eb
MS
12876void
12877xref_basetypes (code_type_node, name, ref, binfo)
12878 tree code_type_node;
12879 tree name, ref;
12880 tree binfo;
12881{
12882 /* In the declaration `A : X, Y, ... Z' we mark all the types
12883 (A, X, Y, ..., Z) so we can check for duplicates. */
12884 tree binfos;
d6479fe7
MM
12885 tree base;
12886
8ccc31eb 12887 int i, len;
591382c4 12888 enum tag_types tag_code;
a5d7c4a3
MK
12889
12890 /* If we are called from the parser, code_type_node will sometimes be a
12891 TREE_LIST. This indicates that the user wrote
12892 "class __attribute__ ((foo)) bar". Extract the attributes so that
12893 tree_low_cst doesn't crash. */
12894 if (TREE_CODE (code_type_node) == TREE_LIST)
12895 code_type_node = TREE_VALUE (code_type_node);
12896
591382c4 12897 tag_code = (enum tag_types) tree_low_cst (code_type_node, 1);
8ccc31eb
MS
12898
12899 if (tag_code == union_type)
12900 {
33bd39a2 12901 error ("derived union `%T' invalid", ref);
8ccc31eb
MS
12902 return;
12903 }
12904
12905 len = list_length (binfo);
8ccc31eb 12906
d6479fe7
MM
12907 /* First, make sure that any templates in base-classes are
12908 instantiated. This ensures that if we call ourselves recursively
12909 we do not get confused about which classes are marked and which
12910 are not. */
12911 for (base = binfo; base; base = TREE_CHAIN (base))
12912 complete_type (TREE_VALUE (base));
12913
8ccc31eb
MS
12914 SET_CLASSTYPE_MARKED (ref);
12915 BINFO_BASETYPES (TYPE_BINFO (ref)) = binfos = make_tree_vec (len);
12916
12917 for (i = 0; binfo; binfo = TREE_CHAIN (binfo))
12918 {
12919 /* The base of a derived struct is public by default. */
12920 int via_public
be99da77
MS
12921 = (TREE_PURPOSE (binfo) == access_public_node
12922 || TREE_PURPOSE (binfo) == access_public_virtual_node
8ccc31eb 12923 || (tag_code != class_type
be99da77
MS
12924 && (TREE_PURPOSE (binfo) == access_default_node
12925 || TREE_PURPOSE (binfo) == access_default_virtual_node)));
d8b55a76
JM
12926 int via_protected
12927 = (TREE_PURPOSE (binfo) == access_protected_node
12928 || TREE_PURPOSE (binfo) == access_protected_virtual_node);
8ccc31eb 12929 int via_virtual
be99da77 12930 = (TREE_PURPOSE (binfo) == access_private_virtual_node
d8b55a76 12931 || TREE_PURPOSE (binfo) == access_protected_virtual_node
be99da77
MS
12932 || TREE_PURPOSE (binfo) == access_public_virtual_node
12933 || TREE_PURPOSE (binfo) == access_default_virtual_node);
12934 tree basetype = TREE_VALUE (binfo);
8ccc31eb
MS
12935 tree base_binfo;
12936
8ccc31eb
MS
12937 if (basetype && TREE_CODE (basetype) == TYPE_DECL)
12938 basetype = TREE_TYPE (basetype);
5566b478
MS
12939 if (!basetype
12940 || (TREE_CODE (basetype) != RECORD_TYPE
a80e4195 12941 && TREE_CODE (basetype) != TYPENAME_TYPE
73b0fce8 12942 && TREE_CODE (basetype) != TEMPLATE_TYPE_PARM
a1281f45 12943 && TREE_CODE (basetype) != BOUND_TEMPLATE_TEMPLATE_PARM))
8ccc31eb 12944 {
33bd39a2 12945 error ("base type `%T' fails to be a struct or class type",
8ccc31eb
MS
12946 TREE_VALUE (binfo));
12947 continue;
12948 }
2b9dc906 12949
11b5139c 12950 GNU_xref_hier (name, basetype, via_public, via_virtual, 0);
2b9dc906 12951
8adf5b5e
JM
12952 /* This code replaces similar code in layout_basetypes.
12953 We put the complete_type first for implicit `typename'. */
d0f062fb 12954 if (!COMPLETE_TYPE_P (basetype)
2b9dc906 12955 && ! (current_template_parms && uses_template_parms (basetype)))
8ccc31eb 12956 {
33bd39a2 12957 error ("base class `%T' has incomplete type", basetype);
8ccc31eb
MS
12958 continue;
12959 }
8ccc31eb
MS
12960 else
12961 {
12962 if (CLASSTYPE_MARKED (basetype))
12963 {
12964 if (basetype == ref)
33bd39a2 12965 error ("recursive type `%T' undefined", basetype);
8ccc31eb 12966 else
33bd39a2 12967 error ("duplicate base type `%T' invalid", basetype);
8ccc31eb
MS
12968 continue;
12969 }
12970
eff71ab0 12971 if (TYPE_FOR_JAVA (basetype)
46ccf50a 12972 && (current_lang_depth () == 0))
eff71ab0
PB
12973 TYPE_FOR_JAVA (ref) = 1;
12974
8ccc31eb
MS
12975 /* Note that the BINFO records which describe individual
12976 inheritances are *not* shared in the lattice! They
12977 cannot be shared because a given baseclass may be
12978 inherited with different `accessibility' by different
12979 derived classes. (Each BINFO record describing an
12980 individual inheritance contains flags which say what
12981 the `accessibility' of that particular inheritance is.) */
68642fb6
UD
12982
12983 base_binfo
fed3cef0 12984 = make_binfo (size_zero_node, basetype,
7ddedda4
MM
12985 CLASS_TYPE_P (basetype)
12986 ? TYPE_BINFO_VTABLE (basetype) : NULL_TREE,
12987 CLASS_TYPE_P (basetype)
12988 ? TYPE_BINFO_VIRTUALS (basetype) : NULL_TREE);
68642fb6 12989
8ccc31eb
MS
12990 TREE_VEC_ELT (binfos, i) = base_binfo;
12991 TREE_VIA_PUBLIC (base_binfo) = via_public;
12992 TREE_VIA_PROTECTED (base_binfo) = via_protected;
12993 TREE_VIA_VIRTUAL (base_binfo) = via_virtual;
12994 BINFO_INHERITANCE_CHAIN (base_binfo) = TYPE_BINFO (ref);
12995
dfbcd65a
JM
12996 /* We need to unshare the binfos now so that lookups during class
12997 definition work. */
12998 unshare_base_binfos (base_binfo);
12999
8ccc31eb 13000 SET_CLASSTYPE_MARKED (basetype);
9e9ff709 13001
8ccc31eb
MS
13002 /* We are free to modify these bits because they are meaningless
13003 at top level, and BASETYPE is a top-level type. */
13004 if (via_virtual || TYPE_USES_VIRTUAL_BASECLASSES (basetype))
13005 {
13006 TYPE_USES_VIRTUAL_BASECLASSES (ref) = 1;
4c6b7393
MM
13007 /* Converting to a virtual base class requires looking
13008 up the offset of the virtual base. */
13009 TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (ref) = 1;
8ccc31eb
MS
13010 }
13011
7ddedda4
MM
13012 if (CLASS_TYPE_P (basetype))
13013 {
5362b086 13014 TYPE_HAS_NEW_OPERATOR (ref)
834c6dff 13015 |= TYPE_HAS_NEW_OPERATOR (basetype);
5362b086 13016 TYPE_HAS_ARRAY_NEW_OPERATOR (ref)
834c6dff 13017 |= TYPE_HAS_ARRAY_NEW_OPERATOR (basetype);
7ddedda4 13018 TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
4c6b7393 13019 /* If the base-class uses multiple inheritance, so do we. */
68642fb6 13020 TYPE_USES_MULTIPLE_INHERITANCE (ref)
4c6b7393
MM
13021 |= TYPE_USES_MULTIPLE_INHERITANCE (basetype);
13022 /* Likewise, if converting to a base of the base may require
13023 code, then we may need to generate code to convert to a
13024 base as well. */
68642fb6 13025 TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (ref)
4c6b7393 13026 |= TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (basetype);
7ddedda4
MM
13027 }
13028
8ccc31eb
MS
13029 i += 1;
13030 }
13031 }
13032 if (i)
13033 TREE_VEC_LENGTH (binfos) = i;
13034 else
13035 BINFO_BASETYPES (TYPE_BINFO (ref)) = NULL_TREE;
13036
13037 if (i > 1)
7ddedda4 13038 {
4c6b7393
MM
13039 TYPE_USES_MULTIPLE_INHERITANCE (ref) = 1;
13040 /* If there is more than one non-empty they cannot be at the same
13041 address. */
13042 TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (ref) = 1;
7ddedda4
MM
13043 }
13044
8ccc31eb
MS
13045 /* Unmark all the types. */
13046 while (--i >= 0)
13047 CLEAR_CLASSTYPE_MARKED (BINFO_TYPE (TREE_VEC_ELT (binfos, i)));
13048 CLEAR_CLASSTYPE_MARKED (ref);
13049
70c532b5
MM
13050 /* Now that we know all the base-classes, set up the list of virtual
13051 bases. */
23381155 13052 get_vbase_types (ref);
8ccc31eb 13053}
68642fb6 13054
8d08fdba 13055\f
8d08fdba
MS
13056/* Begin compiling the definition of an enumeration type.
13057 NAME is its name (or null if anonymous).
13058 Returns the type object, as yet incomplete.
13059 Also records info about it so that build_enumerator
13060 may be used to declare the individual values as they are read. */
13061
13062tree
13063start_enum (name)
13064 tree name;
13065{
13066 register tree enumtype = NULL_TREE;
8f032717 13067 struct binding_level *b = current_binding_level;
8d08fdba
MS
13068
13069 /* If this is the real definition for a previous forward reference,
13070 fill in the contents in the same object that used to be the
13071 forward reference. */
13072
13073 if (name != NULL_TREE)
13074 enumtype = lookup_tag (ENUMERAL_TYPE, name, b, 1);
13075
13076 if (enumtype != NULL_TREE && TREE_CODE (enumtype) == ENUMERAL_TYPE)
30ff8252 13077 {
33bd39a2 13078 error ("multiple definition of `%#T'", enumtype);
30ff8252 13079 cp_error_at ("previous definition here", enumtype);
58595203
MM
13080 /* Clear out TYPE_VALUES, and start again. */
13081 TYPE_VALUES (enumtype) = NULL_TREE;
30ff8252 13082 }
8d08fdba
MS
13083 else
13084 {
13085 enumtype = make_node (ENUMERAL_TYPE);
13086 pushtag (name, enumtype, 0);
13087 }
13088
13089 if (current_class_type)
13090 TREE_ADDRESSABLE (b->tags) = 1;
c91a56d2 13091
8d08fdba
MS
13092 GNU_xref_decl (current_function_decl, enumtype);
13093 return enumtype;
13094}
13095
13096/* After processing and defining all the values of an enumeration type,
13097 install their decls in the enumeration type and finish it off.
968b956a 13098 ENUMTYPE is the type object and VALUES a list of name-value pairs. */
8d08fdba 13099
968b956a 13100void
219670f1 13101finish_enum (enumtype)
dbfe2124 13102 tree enumtype;
8d08fdba 13103{
968b956a
MM
13104 tree pair;
13105 tree minnode;
13106 tree maxnode;
13107 tree t;
13108 bool unsignedp;
13109 int lowprec;
13110 int highprec;
13111 int precision;
13112
13113 /* We built up the VALUES in reverse order. */
13114 TYPE_VALUES (enumtype) = nreverse (TYPE_VALUES (enumtype));
13115
13116 /* [dcl.enum]
13117
13118 Following the closing brace of an enum-specifier, each
13119 enumerator has the type of its enumeration. Prior to the
13120 closing brace, the type of each enumerator is the type of
13121 its initializing value. */
13122 for (pair = TYPE_VALUES (enumtype); pair; pair = TREE_CHAIN (pair))
13123 TREE_TYPE (TREE_VALUE (pair)) = enumtype;
13124
13125 /* For a enum defined in a template, all further processing is
13126 postponed until the template is instantiated. */
13127 if (processing_template_decl)
13128 {
13129 tree scope = current_scope ();
13130 if (scope && TREE_CODE (scope) == FUNCTION_DECL)
13131 add_stmt (build_min (TAG_DEFN, enumtype));
8d08fdba 13132
0ba8a114 13133
968b956a
MM
13134 return;
13135 }
13136
13137 /* Figure out what the minimum and maximum values of the enumerators
13138 are. */
13139 if (TYPE_VALUES (enumtype))
8d08fdba 13140 {
968b956a 13141 minnode = maxnode = NULL_TREE;
5566b478 13142
968b956a
MM
13143 for (pair = TYPE_VALUES (enumtype);
13144 pair;
13145 pair = TREE_CHAIN (pair))
8d08fdba 13146 {
ed44da02
MM
13147 tree value;
13148
968b956a 13149 value = DECL_INITIAL (TREE_VALUE (pair));
ed44da02 13150
968b956a
MM
13151 if (!minnode)
13152 minnode = maxnode = value;
13153 else if (tree_int_cst_lt (maxnode, value))
13154 maxnode = value;
13155 else if (tree_int_cst_lt (value, minnode))
13156 minnode = value;
8d08fdba
MS
13157 }
13158 }
f376e137 13159 else
968b956a
MM
13160 minnode = maxnode = integer_zero_node;
13161
13162 /* Compute the number of bits require to represent all values of the
13163 enumeration. We must do this before the type of MINNODE and
13164 MAXNODE are transformed, since min_precision relies on the
13165 TREE_TYPE of the value it is passed. */
13166 unsignedp = tree_int_cst_sgn (minnode) >= 0;
13167 lowprec = min_precision (minnode, unsignedp);
13168 highprec = min_precision (maxnode, unsignedp);
13169 precision = MAX (lowprec, highprec);
13170
13171 /* Set the TREE_TYPE for the values as well. That's so that when we
13172 call decl_constant_value we get an entity of the right type (but
13173 with the constant value). In addition, transform the TYPE_VALUES
13174 list to contain the values, rather than the CONST_DECLs for them. */
13175 for (pair = TYPE_VALUES (enumtype); pair; pair = TREE_CHAIN (pair))
13176 {
13177 tree value = DECL_INITIAL (TREE_VALUE (pair));
13178
13179 TREE_TYPE (value) = enumtype;
13180 TREE_VALUE (pair) = value;
13181 }
13182
13183 /* Set TYPE_MIN_VALUE and TYPE_MAX_VALUE according to `precision'. */
13184 TYPE_SIZE (enumtype) = NULL_TREE;
13185 TYPE_PRECISION (enumtype) = precision;
13186 if (unsignedp)
13187 fixup_unsigned_type (enumtype);
cbf882af 13188 else
968b956a 13189 fixup_signed_type (enumtype);
8d08fdba 13190
219670f1
BE
13191 if (flag_short_enums || (precision > TYPE_PRECISION (integer_type_node)))
13192 /* Use the width of the narrowest normal C type which is wide
13193 enough. */
13194 TYPE_PRECISION (enumtype) = TYPE_PRECISION (type_for_size
13195 (precision, 1));
968b956a
MM
13196 else
13197 TYPE_PRECISION (enumtype) = TYPE_PRECISION (integer_type_node);
68642fb6 13198
968b956a
MM
13199 TYPE_SIZE (enumtype) = NULL_TREE;
13200 layout_type (enumtype);
8d08fdba 13201
968b956a
MM
13202 /* Fix up all variant types of this enum type. */
13203 for (t = TYPE_MAIN_VARIANT (enumtype); t; t = TYPE_NEXT_VARIANT (t))
13204 {
13205 TYPE_VALUES (t) = TYPE_VALUES (enumtype);
13206 TYPE_MIN_VALUE (t) = TYPE_MIN_VALUE (enumtype);
13207 TYPE_MAX_VALUE (t) = TYPE_MAX_VALUE (enumtype);
13208 TYPE_SIZE (t) = TYPE_SIZE (enumtype);
13209 TYPE_SIZE_UNIT (t) = TYPE_SIZE_UNIT (enumtype);
13210 TYPE_MODE (t) = TYPE_MODE (enumtype);
13211 TYPE_PRECISION (t) = TYPE_PRECISION (enumtype);
13212 TYPE_ALIGN (t) = TYPE_ALIGN (enumtype);
13213 TYPE_USER_ALIGN (t) = TYPE_USER_ALIGN (enumtype);
13214 TREE_UNSIGNED (t) = TREE_UNSIGNED (enumtype);
cbf882af
MM
13215 }
13216
968b956a
MM
13217 /* Finish debugging output for this type. */
13218 rest_of_type_compilation (enumtype, namespace_bindings_p ());
8d08fdba
MS
13219}
13220
079e1098 13221/* Build and install a CONST_DECL for an enumeration constant of the
58595203 13222 enumeration type ENUMTYPE whose NAME and VALUE (if any) are provided.
8d08fdba
MS
13223 Assignment of sequential values by default is handled here. */
13224
58595203
MM
13225void
13226build_enumerator (name, value, enumtype)
079e1098
MM
13227 tree name;
13228 tree value;
58595203 13229 tree enumtype;
8d08fdba 13230{
58595203 13231 tree decl;
e8bd800e 13232 tree context;
58595203
MM
13233 tree type;
13234 tree values;
8d08fdba
MS
13235
13236 /* Remove no-op casts from the value. */
13237 if (value)
13238 STRIP_TYPE_NOPS (value);
13239
58595203
MM
13240 if (! processing_template_decl)
13241 {
13242 /* Validate and default VALUE. */
13243 if (value != NULL_TREE)
13244 {
fc611ce0 13245 value = decl_constant_value (value);
58595203
MM
13246
13247 if (TREE_CODE (value) == INTEGER_CST)
13248 {
13249 value = default_conversion (value);
13250 constant_expression_warning (value);
13251 }
13252 else
13253 {
33bd39a2 13254 error ("enumerator value for `%D' not integer constant", name);
58595203
MM
13255 value = NULL_TREE;
13256 }
13257 }
13258
13259 /* Default based on previous value. */
13260 if (value == NULL_TREE && ! processing_template_decl)
13261 {
13262 tree prev_value;
13263
13264 if (TYPE_VALUES (enumtype))
13265 {
13266 /* The next value is the previous value ... */
13267 prev_value = DECL_INITIAL (TREE_VALUE (TYPE_VALUES (enumtype)));
13268 /* ... plus one. */
ab76ca54
MM
13269 value = cp_build_binary_op (PLUS_EXPR,
13270 prev_value,
13271 integer_one_node);
68642fb6 13272
58595203 13273 if (tree_int_cst_lt (value, prev_value))
33bd39a2 13274 error ("overflow in enumeration values at `%D'", name);
58595203
MM
13275 }
13276 else
13277 value = integer_zero_node;
13278 }
13279
13280 /* Remove no-op casts from the value. */
13281 if (value)
13282 STRIP_TYPE_NOPS (value);
013bc8af 13283#if 0
58595203
MM
13284 /* To fix MAX_VAL enum consts. (bkoz) */
13285 TREE_TYPE (value) = integer_type_node;
013bc8af 13286#endif
58595203 13287 }
8d08fdba 13288
58595203
MM
13289 /* We always have to copy here; not all INTEGER_CSTs are unshared.
13290 Even in other cases, we will later (in finish_enum) be setting
13291 the type of VALUE. But, we don't need to make a copy if this
13292 VALUE is one of the enumeration constants for this same
13293 enumeration type. */
13294 for (values = TYPE_VALUES (enumtype); values; values = TREE_CHAIN (values))
13295 if (TREE_VALUE (values) == value)
13296 break;
13297 /* If we didn't break out of the loop, then we do need a copy. */
13298 if (!values && value)
13299 value = copy_node (value);
ed44da02 13300
8d08fdba 13301 /* C++ associates enums with global, function, or class declarations. */
58595203
MM
13302 context = current_scope ();
13303
13304 /* Build the actual enumeration constant. Note that the enumeration
13305 constants have the type of their initializers until the
13306 enumeration is complete:
13307
13308 [ dcl.enum ]
13309
13310 Following the closing brace of an enum-specifier, each enumer-
13311 ator has the type of its enumeration. Prior to the closing
13312 brace, the type of each enumerator is the type of its
13313 initializing value.
13314
13315 In finish_enum we will reset the type. Of course, if we're
13316 processing a template, there may be no value. */
13317 type = value ? TREE_TYPE (value) : NULL_TREE;
13318
13319 if (context && context == current_class_type)
13320 /* This enum declaration is local to the class. We need the full
8f17b5c5 13321 lang_decl so that we can record DECL_CLASS_CONTEXT, for example. */
58595203
MM
13322 decl = build_lang_decl (CONST_DECL, name, type);
13323 else
13324 /* It's a global enum, or it's local to a function. (Note local to
e8bd800e 13325 a function could mean local to a class method. */
58595203 13326 decl = build_decl (CONST_DECL, name, type);
e8bd800e 13327
58595203
MM
13328 DECL_CONTEXT (decl) = FROB_CONTEXT (context);
13329 DECL_INITIAL (decl) = value;
13330 TREE_READONLY (decl) = 1;
e8bd800e 13331
58595203
MM
13332 if (context && context == current_class_type)
13333 /* In something like `struct S { enum E { i = 7 }; };' we put `i'
8f032717
MM
13334 on the TYPE_FIELDS list for `S'. (That's so that you can say
13335 things like `S::i' later.) */
58595203
MM
13336 finish_member_declaration (decl);
13337 else
13338 {
13339 pushdecl (decl);
13340 GNU_xref_decl (current_function_decl, decl);
13341 }
13342
13343 /* Add this enumeration constant to the list for this type. */
13344 TYPE_VALUES (enumtype) = tree_cons (name, decl, TYPE_VALUES (enumtype));
8d08fdba
MS
13345}
13346
8d08fdba 13347\f
a8f73d4b
MM
13348/* We're defining DECL. Make sure that it's type is OK. */
13349
13350static void
f444e36b 13351check_function_type (decl, current_function_parms)
a8f73d4b 13352 tree decl;
f444e36b 13353 tree current_function_parms;
a8f73d4b
MM
13354{
13355 tree fntype = TREE_TYPE (decl);
d0f062fb 13356 tree return_type = complete_type (TREE_TYPE (fntype));
a8f73d4b
MM
13357
13358 /* In a function definition, arg types must be complete. */
13359 require_complete_types_for_parms (current_function_parms);
13360
d0f062fb 13361 if (!COMPLETE_OR_VOID_TYPE_P (return_type))
a8f73d4b 13362 {
33bd39a2 13363 error ("return type `%#T' is incomplete", TREE_TYPE (fntype));
a8f73d4b
MM
13364
13365 /* Make it return void instead, but don't change the
13366 type of the DECL_RESULT, in case we have a named return value. */
13367 if (TREE_CODE (fntype) == METHOD_TYPE)
13368 {
13369 tree ctype = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (fntype)));
13370 TREE_TYPE (decl)
13371 = build_cplus_method_type (ctype,
13372 void_type_node,
13373 FUNCTION_ARG_CHAIN (decl));
13374 }
13375 else
13376 TREE_TYPE (decl)
13377 = build_function_type (void_type_node,
13378 TYPE_ARG_TYPES (TREE_TYPE (decl)));
68642fb6 13379 TREE_TYPE (decl)
a8f73d4b
MM
13380 = build_exception_variant (fntype,
13381 TYPE_RAISES_EXCEPTIONS (fntype));
13382 }
13383 else
13384 abstract_virtuals_error (decl, TREE_TYPE (fntype));
13385}
13386
8d08fdba
MS
13387/* Create the FUNCTION_DECL for a function definition.
13388 DECLSPECS and DECLARATOR are the parts of the declaration;
13389 they describe the function's name and the type it returns,
13390 but twisted together in a fashion that parallels the syntax of C.
13391
a8f73d4b
MM
13392 FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
13393 DECLARATOR is really the DECL for the function we are about to
13394 process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
f444e36b 13395 indicating that the function is an inline defined in-class.
68642fb6 13396
8d08fdba
MS
13397 This function creates a binding context for the function body
13398 as well as setting up the FUNCTION_DECL in current_function_decl.
13399
13400 Returns 1 on success. If the DECLARATOR is not suitable for a function
13401 (it defines a datum instead), we return 0, which tells
13402 yyparse to report a parse error.
13403
13404 For C++, we must first check whether that datum makes any sense.
13405 For example, "class A local_a(1,2);" means that variable local_a
13406 is an aggregate of type A, which should have a constructor
87e3dbc9 13407 applied to it with the argument list [1, 2]. */
8d08fdba
MS
13408
13409int
a8f73d4b 13410start_function (declspecs, declarator, attrs, flags)
c11b6f21 13411 tree declspecs, declarator, attrs;
a8f73d4b 13412 int flags;
8d08fdba 13413{
5566b478 13414 tree decl1;
8d08fdba
MS
13415 tree ctype = NULL_TREE;
13416 tree fntype;
13417 tree restype;
13418 extern int have_extern_spec;
13419 extern int used_extern_spec;
13420 int doing_friend = 0;
a8f73d4b 13421 struct binding_level *bl;
f444e36b 13422 tree current_function_parms;
8d08fdba 13423
8d08fdba 13424 /* Sanity check. */
a1774733 13425 my_friendly_assert (TREE_CODE (TREE_VALUE (void_list_node)) == VOID_TYPE, 160);
8d08fdba
MS
13426 my_friendly_assert (TREE_CHAIN (void_list_node) == NULL_TREE, 161);
13427
e92cc029 13428 /* This should only be done once on the top most decl. */
8d08fdba
MS
13429 if (have_extern_spec && !used_extern_spec)
13430 {
1f8f4a0b 13431 declspecs = tree_cons (NULL_TREE, get_identifier ("extern"), declspecs);
8d08fdba
MS
13432 used_extern_spec = 1;
13433 }
13434
a8f73d4b 13435 if (flags & SF_PRE_PARSED)
8d08fdba
MS
13436 {
13437 decl1 = declarator;
13438
8d08fdba
MS
13439 fntype = TREE_TYPE (decl1);
13440 if (TREE_CODE (fntype) == METHOD_TYPE)
13441 ctype = TYPE_METHOD_BASETYPE (fntype);
13442
cab1f180
ML
13443 /* ISO C++ 11.4/5. A friend function defined in a class is in
13444 the (lexical) scope of the class in which it is defined. */
8d08fdba
MS
13445 if (!ctype && DECL_FRIEND_P (decl1))
13446 {
4f1c5b7d 13447 ctype = DECL_FRIEND_CONTEXT (decl1);
8d08fdba
MS
13448
13449 /* CTYPE could be null here if we're dealing with a template;
13450 for example, `inline friend float foo()' inside a template
13451 will have no CTYPE set. */
13452 if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
13453 ctype = NULL_TREE;
13454 else
13455 doing_friend = 1;
13456 }
13457
5566b478 13458 last_function_parms = DECL_ARGUMENTS (decl1);
8d08fdba
MS
13459 }
13460 else
13461 {
91d231cb 13462 decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, NULL);
8d08fdba
MS
13463 /* If the declarator is not suitable for a function definition,
13464 cause a syntax error. */
13465 if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL) return 0;
13466
13467 fntype = TREE_TYPE (decl1);
13468
13469 restype = TREE_TYPE (fntype);
7ddedda4 13470 if (CLASS_TYPE_P (restype) && !CLASSTYPE_GOT_SEMICOLON (restype))
8d08fdba 13471 {
33bd39a2 13472 error ("semicolon missing after declaration of `%#T'", restype);
051e6fd7 13473 shadow_tag (build_tree_list (NULL_TREE, restype));
8d08fdba
MS
13474 CLASSTYPE_GOT_SEMICOLON (restype) = 1;
13475 if (TREE_CODE (fntype) == FUNCTION_TYPE)
13476 fntype = build_function_type (integer_type_node,
13477 TYPE_ARG_TYPES (fntype));
13478 else
13479 fntype = build_cplus_method_type (build_type_variant (TYPE_METHOD_BASETYPE (fntype), TREE_READONLY (decl1), TREE_SIDE_EFFECTS (decl1)),
13480 integer_type_node,
13481 TYPE_ARG_TYPES (fntype));
13482 TREE_TYPE (decl1) = fntype;
13483 }
13484
13485 if (TREE_CODE (fntype) == METHOD_TYPE)
13486 ctype = TYPE_METHOD_BASETYPE (fntype);
35680744 13487 else if (DECL_MAIN_P (decl1))
8d08fdba
MS
13488 {
13489 /* If this doesn't return integer_type, complain. */
13490 if (TREE_TYPE (TREE_TYPE (decl1)) != integer_type_node)
13491 {
a28e3c7f 13492 if (pedantic || warn_return_type)
8251199e 13493 pedwarn ("return type for `main' changed to `int'");
8d08fdba
MS
13494 TREE_TYPE (decl1) = fntype = default_function_type;
13495 }
8d08fdba
MS
13496 }
13497 }
68642fb6 13498
97055d5c
AO
13499 if (DECL_DECLARED_INLINE_P (decl1)
13500 && lookup_attribute ("noinline", attrs))
13501 warning_with_decl (decl1,
13502 "inline function `%s' given attribute noinline");
13503
5f6eeeb3
NS
13504 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl1))
13505 /* This is a constructor, we must ensure that any default args
13506 introduced by this definition are propagated to the clones
13507 now. The clones are used directly in overload resolution. */
13508 adjust_clone_args (decl1);
13509
b35d4555
MM
13510 /* Sometimes we don't notice that a function is a static member, and
13511 build a METHOD_TYPE for it. Fix that up now. */
13512 if (ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1)
13513 && TREE_CODE (TREE_TYPE (decl1)) == METHOD_TYPE)
13514 {
3afb32a4 13515 revert_static_member_fn (decl1);
b35d4555
MM
13516 last_function_parms = TREE_CHAIN (last_function_parms);
13517 ctype = NULL_TREE;
13518 }
8d08fdba
MS
13519
13520 /* Warn if function was previously implicitly declared
13521 (but not if we warned then). */
13522 if (! warn_implicit
13523 && IDENTIFIER_IMPLICIT_DECL (DECL_NAME (decl1)) != NULL_TREE)
8251199e 13524 cp_warning_at ("`%D' implicitly declared before its definition", IDENTIFIER_IMPLICIT_DECL (DECL_NAME (decl1)));
8d08fdba 13525
f181d4ae
MM
13526 /* Set up current_class_type, and enter the scope of the class, if
13527 appropriate. */
13528 if (ctype)
13529 push_nested_class (ctype, 1);
13530 else if (DECL_STATIC_FUNCTION_P (decl1))
13531 push_nested_class (DECL_CONTEXT (decl1), 2);
13532
13533 /* Now that we have entered the scope of the class, we must restore
13534 the bindings for any template parameters surrounding DECL1, if it
13535 is an inline member template. (Order is important; consider the
13536 case where a template parameter has the same name as a field of
13537 the class.) It is not until after this point that
13538 PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly. */
a8f73d4b 13539 if (flags & SF_INCLASS_INLINE)
f181d4ae
MM
13540 maybe_begin_member_template_processing (decl1);
13541
56cb9733 13542 /* Effective C++ rule 15. */
9188c363 13543 if (warn_ecpp
596ea4e5 13544 && DECL_OVERLOADED_OPERATOR_P (decl1) == NOP_EXPR
9188c363 13545 && TREE_CODE (TREE_TYPE (fntype)) == VOID_TYPE)
33bd39a2 13546 warning ("`operator=' should return a reference to `*this'");
9188c363
MM
13547
13548 /* Make the init_value nonzero so pushdecl knows this is not tentative.
13549 error_mark_node is replaced below (in poplevel) with the BLOCK. */
b35d4555
MM
13550 if (!DECL_INITIAL (decl1))
13551 DECL_INITIAL (decl1) = error_mark_node;
9188c363 13552
9188c363
MM
13553 /* This function exists in static storage.
13554 (This does not mean `static' in the C sense!) */
13555 TREE_STATIC (decl1) = 1;
13556
13557 /* We must call push_template_decl after current_class_type is set
13558 up. (If we are processing inline definitions after exiting a
13559 class scope, current_class_type will be NULL_TREE until set above
13560 by push_nested_class.) */
13561 if (processing_template_decl)
13562 decl1 = push_template_decl (decl1);
13563
f181d4ae 13564 /* We are now in the scope of the function being defined. */
8d08fdba 13565 current_function_decl = decl1;
f181d4ae 13566
5566b478
MS
13567 /* Save the parm names or decls from this function's declarator
13568 where store_parm_decls will find them. */
13569 current_function_parms = last_function_parms;
8d08fdba 13570
a8f73d4b
MM
13571 /* Make sure the parameter and return types are reasonable. When
13572 you declare a function, these types can be incomplete, but they
13573 must be complete when you define the function. */
5156628f 13574 if (! processing_template_decl)
f444e36b 13575 check_function_type (decl1, current_function_parms);
f181d4ae 13576
a8f73d4b
MM
13577 /* Build the return declaration for the function. */
13578 restype = TREE_TYPE (fntype);
13579 if (!processing_template_decl)
13580 {
13581 if (!DECL_RESULT (decl1))
5566b478 13582 {
5566b478 13583 DECL_RESULT (decl1)
a8f73d4b 13584 = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (restype));
89d684bb 13585 c_apply_type_quals_to_decl (cp_type_quals (restype),
68642fb6 13586 DECL_RESULT (decl1));
5566b478 13587 }
5566b478 13588 }
a8f73d4b
MM
13589 else
13590 /* Just use `void'. Nobody will ever look at this anyhow. */
13591 DECL_RESULT (decl1) = build_decl (RESULT_DECL, 0, void_type_node);
13592
13593 /* Initialize RTL machinery. We cannot do this until
13594 CURRENT_FUNCTION_DECL and DECL_RESULT are set up. We do this
13595 even when processing a template; this is how we get
c00996a3
JM
13596 CFUN set up, and our per-function variables initialized.
13597 FIXME factor out the non-RTL stuff. */
a8f73d4b
MM
13598 bl = current_binding_level;
13599 init_function_start (decl1, input_filename, lineno);
13600 current_binding_level = bl;
a8f73d4b
MM
13601
13602 /* Even though we're inside a function body, we still don't want to
13603 call expand_expr to calculate the size of a variable-sized array.
13604 We haven't necessarily assigned RTL to all variables yet, so it's
13605 not safe to try to expand expressions involving them. */
13606 immediate_size_expand = 0;
01d939e8 13607 cfun->x_dont_save_pending_sizes_p = 1;
a8f73d4b 13608
f444e36b
MM
13609 /* Start the statement-tree, start the tree now. */
13610 begin_stmt_tree (&DECL_SAVED_TREE (decl1));
6f80451c 13611
a8f73d4b 13612 /* Let the user know we're compiling this function. */
ea11ca7e 13613 announce_function (decl1);
b7484fbe 13614
878cd289
MS
13615 /* Record the decl so that the function name is defined.
13616 If we already have a decl for this name, and it is a FUNCTION_DECL,
13617 use the old decl. */
a8f73d4b 13618 if (!processing_template_decl && !(flags & SF_PRE_PARSED))
878cd289 13619 {
75650646 13620 /* A specialization is not used to guide overload resolution. */
2228d450 13621 if (!DECL_TEMPLATE_SPECIALIZATION (decl1)
959d8796 13622 && ! DECL_FUNCTION_MEMBER_P (decl1))
75650646 13623 decl1 = pushdecl (decl1);
2c73f9f5 13624 else
b7698cf0
JM
13625 {
13626 /* We need to set the DECL_CONTEXT. */
13627 if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
13628 DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
13629 /* And make sure we have enough default args. */
13630 check_default_args (decl1);
13631 }
878cd289
MS
13632 fntype = TREE_TYPE (decl1);
13633 }
5566b478 13634
a8f73d4b 13635 /* Reset these in case the call to pushdecl changed them. */
5566b478 13636 current_function_decl = decl1;
01d939e8 13637 cfun->decl = decl1;
878cd289 13638
78c120b5
MM
13639 /* If we are (erroneously) defining a function that we have already
13640 defined before, wipe out what we knew before. */
5362b086 13641 if (!DECL_PENDING_INLINE_P (decl1)
78c120b5
MM
13642 && DECL_SAVED_FUNCTION_DATA (decl1))
13643 {
13644 free (DECL_SAVED_FUNCTION_DATA (decl1));
13645 DECL_SAVED_FUNCTION_DATA (decl1) = NULL;
13646 }
b35d4555 13647
f444e36b 13648 if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1))
b35d4555
MM
13649 {
13650 /* We know that this was set up by `grokclassfn'. We do not
13651 wait until `store_parm_decls', since evil parse errors may
13652 never get us to that point. Here we keep the consistency
13653 between `current_class_type' and `current_class_ptr'. */
13654 tree t = DECL_ARGUMENTS (decl1);
68642fb6
UD
13655
13656 my_friendly_assert (t != NULL_TREE && TREE_CODE (t) == PARM_DECL,
b35d4555
MM
13657 162);
13658 my_friendly_assert (TREE_CODE (TREE_TYPE (t)) == POINTER_TYPE,
13659 19990811);
68642fb6
UD
13660
13661 cp_function_chain->x_current_class_ref
3e411c3f 13662 = build_indirect_ref (t, NULL);
b35d4555
MM
13663 cp_function_chain->x_current_class_ptr = t;
13664
018fc244
MM
13665 /* Constructors and destructors need to know whether they're "in
13666 charge" of initializing virtual base classes. */
e0fff4b3 13667 t = TREE_CHAIN (t);
454fa7a7 13668 if (DECL_HAS_IN_CHARGE_PARM_P (decl1))
e0fff4b3
JM
13669 {
13670 current_in_charge_parm = t;
13671 t = TREE_CHAIN (t);
13672 }
13673 if (DECL_HAS_VTT_PARM_P (decl1))
13674 {
13675 if (DECL_NAME (t) != vtt_parm_identifier)
13676 abort ();
13677 current_vtt_parm = t;
13678 }
b35d4555
MM
13679 }
13680
db5ae43f 13681 if (DECL_INTERFACE_KNOWN (decl1))
faae18ab 13682 {
4f1c5b7d 13683 tree ctx = decl_function_context (decl1);
86052cc3 13684
faae18ab
MS
13685 if (DECL_NOT_REALLY_EXTERN (decl1))
13686 DECL_EXTERNAL (decl1) = 0;
86052cc3 13687
79065db2 13688 if (ctx != NULL_TREE && DECL_DECLARED_INLINE_P (ctx)
86052cc3
JM
13689 && TREE_PUBLIC (ctx))
13690 /* This is a function in a local class in an extern inline
13691 function. */
13692 comdat_linkage (decl1);
faae18ab 13693 }
8d08fdba
MS
13694 /* If this function belongs to an interface, it is public.
13695 If it belongs to someone else's interface, it is also external.
1f901793 13696 This only affects inlines and template instantiations. */
5566b478
MS
13697 else if (interface_unknown == 0
13698 && (! DECL_TEMPLATE_INSTANTIATION (decl1)
d11ad92e 13699 || flag_alt_external_templates))
8d08fdba 13700 {
79065db2
MM
13701 if (DECL_DECLARED_INLINE_P (decl1)
13702 || DECL_TEMPLATE_INSTANTIATION (decl1)
5156628f 13703 || processing_template_decl)
1f901793
JM
13704 {
13705 DECL_EXTERNAL (decl1)
13706 = (interface_only
79065db2
MM
13707 || (DECL_DECLARED_INLINE_P (decl1)
13708 && ! flag_implement_inlines
9c73ec84 13709 && !DECL_VINDEX (decl1)));
1f901793
JM
13710
13711 /* For WIN32 we also want to put these in linkonce sections. */
13712 maybe_make_one_only (decl1);
13713 }
db5ae43f 13714 else
893de33c 13715 DECL_EXTERNAL (decl1) = 0;
e8abc66f 13716 DECL_NOT_REALLY_EXTERN (decl1) = 0;
db5ae43f 13717 DECL_INTERFACE_KNOWN (decl1) = 1;
8d08fdba 13718 }
c16c47fb
JM
13719 else if (interface_unknown && interface_only
13720 && (! DECL_TEMPLATE_INSTANTIATION (decl1)
13721 || flag_alt_external_templates))
13722 {
13723 /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
13724 interface, we will have interface_only set but not
13725 interface_known. In that case, we don't want to use the normal
13726 heuristics because someone will supply a #pragma implementation
13727 elsewhere, and deducing it here would produce a conflict. */
13728 comdat_linkage (decl1);
13729 DECL_EXTERNAL (decl1) = 0;
13730 DECL_INTERFACE_KNOWN (decl1) = 1;
13731 DECL_DEFER_OUTPUT (decl1) = 1;
13732 }
8d08fdba 13733 else
a0a33927
MS
13734 {
13735 /* This is a definition, not a reference.
b7484fbe
MS
13736 So clear DECL_EXTERNAL. */
13737 DECL_EXTERNAL (decl1) = 0;
faae18ab 13738
79065db2
MM
13739 if ((DECL_DECLARED_INLINE_P (decl1)
13740 || DECL_TEMPLATE_INSTANTIATION (decl1))
5566b478
MS
13741 && ! DECL_INTERFACE_KNOWN (decl1)
13742 /* Don't try to defer nested functions for now. */
4f1c5b7d 13743 && ! decl_function_context (decl1))
878cd289
MS
13744 DECL_DEFER_OUTPUT (decl1) = 1;
13745 else
893de33c 13746 DECL_INTERFACE_KNOWN (decl1) = 1;
db5ae43f 13747 }
a9aedbc2 13748
f444e36b
MM
13749 pushlevel (0);
13750 current_binding_level->parm_flag = 1;
8d08fdba 13751
91d231cb 13752 cplus_decl_attributes (&decl1, attrs, 0);
68642fb6 13753
8d08fdba 13754 /* Promote the value to int before returning it. */
d72040f5 13755 if (c_promoting_integer_type_p (restype))
5566b478
MS
13756 restype = type_promotes_to (restype);
13757
8d08fdba 13758 if (DECL_RESULT (decl1) == NULL_TREE)
f30432d7
MS
13759 {
13760 DECL_RESULT (decl1)
13761 = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (restype));
91063b51
MM
13762 TREE_READONLY (DECL_RESULT (decl1)) = CP_TYPE_CONST_P (restype);
13763 TREE_THIS_VOLATILE (DECL_RESULT (decl1)) = CP_TYPE_VOLATILE_P (restype);
f30432d7 13764 }
8d08fdba 13765
5566b478
MS
13766 ++function_depth;
13767
0d9eb3ba 13768 if (DECL_DESTRUCTOR_P (decl1))
46e8c075
MM
13769 {
13770 dtor_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
13771 DECL_CONTEXT (dtor_label) = current_function_decl;
13772 }
8d08fdba 13773
0ba8a114
NS
13774 start_fname_decls ();
13775
f444e36b
MM
13776 store_parm_decls (current_function_parms);
13777
8d08fdba
MS
13778 return 1;
13779}
13780\f
13781/* Store the parameter declarations into the current function declaration.
13782 This is called after parsing the parameter declarations, before
13783 digesting the body of the function.
13784
13785 Also install to binding contour return value identifier, if any. */
13786
f444e36b
MM
13787static void
13788store_parm_decls (current_function_parms)
13789 tree current_function_parms;
8d08fdba
MS
13790{
13791 register tree fndecl = current_function_decl;
13792 register tree parm;
8d08fdba 13793
8d08fdba
MS
13794 /* This is a chain of any other decls that came in among the parm
13795 declarations. If a parm is declared with enum {foo, bar} x;
13796 then CONST_DECLs for foo and bar are put here. */
13797 tree nonparms = NULL_TREE;
13798
b35d4555 13799 if (current_function_parms)
8d08fdba
MS
13800 {
13801 /* This case is when the function was defined with an ANSI prototype.
13802 The parms already have decls, so we need not do anything here
13803 except record them as in effect
13804 and complain if any redundant old-style parm decls were written. */
13805
b35d4555
MM
13806 tree specparms = current_function_parms;
13807 tree next;
13808
f444e36b 13809 /* Must clear this because it might contain TYPE_DECLs declared
b35d4555 13810 at class level. */
f444e36b 13811 storedecls (NULL_TREE);
8d08fdba 13812
f444e36b 13813 /* If we're doing semantic analysis, then we'll call pushdecl
b35d4555
MM
13814 for each of these. We must do them in reverse order so that
13815 they end in the correct forward order. */
f444e36b 13816 specparms = nreverse (specparms);
5566b478 13817
b35d4555 13818 for (parm = specparms; parm; parm = next)
8d08fdba
MS
13819 {
13820 next = TREE_CHAIN (parm);
13821 if (TREE_CODE (parm) == PARM_DECL)
13822 {
f444e36b
MM
13823 if (DECL_NAME (parm) == NULL_TREE
13824 || TREE_CODE (parm) != VOID_TYPE)
13825 pushdecl (parm);
13826 else
33bd39a2 13827 error ("parameter `%D' declared void", parm);
8d08fdba
MS
13828 }
13829 else
13830 {
13831 /* If we find an enum constant or a type tag,
13832 put it aside for the moment. */
13833 TREE_CHAIN (parm) = NULL_TREE;
13834 nonparms = chainon (nonparms, parm);
13835 }
13836 }
13837
f444e36b
MM
13838 /* Get the decls in their original chain order and record in the
13839 function. This is all and only the PARM_DECLs that were
13840 pushed into scope by the loop above. */
13841 DECL_ARGUMENTS (fndecl) = getdecls ();
969fd501 13842 storetags (gettags ());
8d08fdba
MS
13843 }
13844 else
13845 DECL_ARGUMENTS (fndecl) = NULL_TREE;
13846
13847 /* Now store the final chain of decls for the arguments
13848 as the decl-chain of the current lexical scope.
13849 Put the enumerators in as well, at the front so that
13850 DECL_ARGUMENTS is not modified. */
f444e36b 13851 storedecls (chainon (nonparms, DECL_ARGUMENTS (fndecl)));
eb448459 13852
b35d4555 13853 /* Do the starting of the exception specifications, if we have any. */
68642fb6 13854 if (flag_exceptions && !processing_template_decl
1660cb3a 13855 && flag_enforce_eh_specs
b35d4555 13856 && TYPE_RAISES_EXCEPTIONS (TREE_TYPE (current_function_decl)))
52a11cbf 13857 current_eh_spec_block = begin_eh_spec_block ();
8d08fdba
MS
13858}
13859
8d08fdba 13860\f
59026e79
MM
13861/* We have finished doing semantic analysis on DECL, but have not yet
13862 generated RTL for its body. Save away our current state, so that
13863 when we want to generate RTL later we know what to do. */
13864
13865static void
13866save_function_data (decl)
13867 tree decl;
13868{
ae499cce 13869 struct cp_language_function *f;
59026e79
MM
13870
13871 /* Save the language-specific per-function data so that we can
13872 get it back when we really expand this function. */
13873 my_friendly_assert (!DECL_PENDING_INLINE_P (decl),
13874 19990908);
68642fb6 13875
59026e79 13876 /* Make a copy. */
ae499cce
MM
13877 f = ((struct cp_language_function *)
13878 xmalloc (sizeof (struct cp_language_function)));
4e135bdd 13879 memcpy (f, cp_function_chain, sizeof (struct cp_language_function));
59026e79
MM
13880 DECL_SAVED_FUNCTION_DATA (decl) = f;
13881
13882 /* Clear out the bits we don't need. */
ae499cce
MM
13883 f->base.x_stmt_tree.x_last_stmt = NULL_TREE;
13884 f->base.x_stmt_tree.x_last_expr_type = NULL_TREE;
59026e79
MM
13885 f->x_named_label_uses = NULL;
13886 f->bindings = NULL;
8e4ce833 13887 f->x_local_names = NULL;
59026e79
MM
13888
13889 /* When we get back here again, we will be expanding. */
13890 f->x_expanding_p = 1;
914653a2
MM
13891
13892 /* If we've already decided that we cannot inline this function, we
13893 must remember that fact when we actually go to expand the
13894 function. */
acc72c37
MM
13895 if (current_function_cannot_inline)
13896 {
13897 f->cannot_inline = current_function_cannot_inline;
13898 DECL_INLINE (decl) = 0;
13899 }
59026e79
MM
13900}
13901
ade3dc07
JM
13902/* Add a note to mark the end of the main body of the constructor. This is
13903 used to end the cleanup regions for fully-constructed bases and
13904 members. */
efee38a9
MM
13905
13906static void
13907finish_constructor_body ()
13908{
ade3dc07
JM
13909 /* Mark the end of the cleanups for a partially constructed object.
13910
13911 ??? These should really be handled automatically by closing the block,
13912 as with the destructor cleanups; the only difference is that these are
13913 only run if an exception is thrown. */
ae499cce 13914 add_stmt (build_stmt (CTOR_STMT));
efee38a9
MM
13915}
13916
ade3dc07
JM
13917/* At the end of every destructor we generate code to delete the object if
13918 necessary. Do that now. */
9bfadf57
MM
13919
13920static void
13921finish_destructor_body ()
13922{
9bfadf57
MM
13923 tree exprstmt;
13924
52682a1b
MM
13925 /* In a virtual destructor, we must call delete. */
13926 if (DECL_VIRTUAL_P (current_function_decl))
13927 {
13928 tree if_stmt;
13929 tree virtual_size = c_sizeof (current_class_type);
68642fb6 13930
52682a1b 13931 /* [class.dtor]
68642fb6 13932
ade3dc07
JM
13933 At the point of definition of a virtual destructor (including
13934 an implicit definition), non-placement operator delete shall
13935 be looked up in the scope of the destructor's class and if
13936 found shall be accessible and unambiguous. */
52682a1b
MM
13937 exprstmt = build_op_delete_call
13938 (DELETE_EXPR, current_class_ptr, virtual_size,
13939 LOOKUP_NORMAL | LOOKUP_SPECULATIVELY, NULL_TREE);
298d6f60 13940
52682a1b
MM
13941 if_stmt = begin_if_stmt ();
13942 finish_if_stmt_cond (build (BIT_AND_EXPR, integer_type_node,
13943 current_in_charge_parm,
13944 integer_one_node),
13945 if_stmt);
13946 finish_expr_stmt (exprstmt);
13947 finish_then_clause (if_stmt);
13948 finish_if_stmt ();
13949 }
ade3dc07 13950}
9bfadf57 13951
ade3dc07
JM
13952/* Do the necessary processing for the beginning of a function body, which
13953 in this case includes member-initializers, but not the catch clauses of
13954 a function-try-block. Currently, this means opening a binding level
13955 for the member-initializers (in a ctor) and member cleanups (in a dtor).
13956 In other functions, this isn't necessary, but it doesn't hurt. */
13957
13958tree
13959begin_function_body ()
13960{
13961 tree stmt = begin_compound_stmt (0);
13962 COMPOUND_STMT_BODY_BLOCK (stmt) = 1;
13963 return stmt;
9bfadf57
MM
13964}
13965
ade3dc07
JM
13966/* Do the processing for the end of a function body. Currently, this means
13967 closing out the cleanups for fully-constructed bases and members, and in
13968 the case of the destructor, deleting the object if desired. Again, this
13969 is only meaningful for [cd]tors, since they are the only functions where
13970 there is a significant distinction between the main body and any
13971 function catch clauses. Handling, say, main() return semantics here
13972 would be wrong, as flowing off the end of a function catch clause for
13973 main() would also need to return 0. */
13974
13975void
13976finish_function_body (compstmt)
13977 tree compstmt;
13978{
13979 if (processing_template_decl)
13980 /* Do nothing now. */;
13981 else if (DECL_DESTRUCTOR_P (current_function_decl))
13982 /* Any return from a destructor will end up here. Put it before the
13983 cleanups so that an explicit return doesn't duplicate them. */
13984 add_stmt (build_stmt (LABEL_STMT, dtor_label));
13985
13986 /* Close the block; in a destructor, run the member cleanups. */
13987 finish_compound_stmt (0, compstmt);
13988
13989 if (processing_template_decl)
13990 /* Do nothing now. */;
13991 else if (DECL_CONSTRUCTOR_P (current_function_decl))
13992 finish_constructor_body ();
13993 else if (DECL_DESTRUCTOR_P (current_function_decl))
13994 finish_destructor_body ();
13995}
13996
8d08fdba
MS
13997/* Finish up a function declaration and compile that function
13998 all the way to assembler language output. The free the storage
13999 for the function definition.
14000
68642fb6 14001 FLAGS is a bitwise or of the following values:
f181d4ae
MM
14002 2 - INCLASS_INLINE
14003 We just finished processing the body of an in-class inline
14004 function definition. (This processing will have taken place
87e3dbc9 14005 after the class definition is complete.) */
8d08fdba 14006
4d6abc1c 14007tree
0acf7199 14008finish_function (flags)
f181d4ae 14009 int flags;
8d08fdba
MS
14010{
14011 register tree fndecl = current_function_decl;
14012 tree fntype, ctype = NULL_TREE;
f181d4ae 14013 int inclass_inline = (flags & 2) != 0;
87e3dbc9 14014 int nested;
8d08fdba
MS
14015
14016 /* When we get some parse errors, we can end up without a
14017 current_function_decl, so cope. */
14018 if (fndecl == NULL_TREE)
4d6abc1c 14019 return error_mark_node;
8d08fdba 14020
87e3dbc9 14021 nested = function_depth > 1;
8d08fdba
MS
14022 fntype = TREE_TYPE (fndecl);
14023
9bfadf57
MM
14024 /* TREE_READONLY (fndecl) = 1;
14025 This caused &foo to be of type ptr-to-const-function
14026 which then got a warning when stored in a ptr-to-function variable. */
8d08fdba 14027
f444e36b 14028 my_friendly_assert (building_stmt_tree (), 20000911);
8d08fdba 14029
0ba8a114
NS
14030 finish_fname_decls ();
14031
db9b2174
MM
14032 /* For a cloned function, we've already got all the code we need;
14033 there's no need to add any extra bits. */
f444e36b 14034 if (!DECL_CLONED_FUNCTION_P (fndecl))
8d08fdba 14035 {
ade3dc07 14036 if (DECL_MAIN_P (current_function_decl))
efee38a9
MM
14037 {
14038 /* Make it so that `main' always returns 0 by default. */
a0de9d20 14039#ifdef VMS_TARGET
efee38a9
MM
14040 finish_return_stmt (integer_one_node);
14041#else
14042 finish_return_stmt (integer_zero_node);
14043#endif
14044 }
87e3dbc9 14045
b35d4555
MM
14046 /* Finish dealing with exception specifiers. */
14047 if (flag_exceptions && !processing_template_decl
1660cb3a 14048 && flag_enforce_eh_specs
b35d4555 14049 && TYPE_RAISES_EXCEPTIONS (TREE_TYPE (current_function_decl)))
52a11cbf
RH
14050 finish_eh_spec_block (TYPE_RAISES_EXCEPTIONS
14051 (TREE_TYPE (current_function_decl)),
14052 current_eh_spec_block);
5566b478 14053 }
68642fb6 14054
558475f0 14055 /* If we're saving up tree structure, tie off the function now. */
f444e36b 14056 finish_stmt_tree (&DECL_SAVED_TREE (fndecl));
8d2733ca 14057
8d08fdba
MS
14058 /* This must come after expand_function_end because cleanups might
14059 have declarations (from inline functions) that need to go into
14060 this function's blocks. */
f444e36b
MM
14061 if (current_binding_level->parm_flag != 1)
14062 my_friendly_abort (122);
14063 poplevel (1, 0, 1);
8d08fdba 14064
07b2f2fd
JM
14065 /* Set up the named return value optimization, if we can. Here, we
14066 eliminate the copy from the nrv into the RESULT_DECL and any cleanup
14067 for the nrv. genrtl_start_function and declare_return_variable
14068 handle making the nrv and RESULT_DECL share space. */
14069 if (current_function_return_value)
14070 {
14071 tree r = current_function_return_value;
14072 /* This is only worth doing for fns that return in memory--and
14073 simpler, since we don't have to worry about promoted modes. */
14074 if (r != error_mark_node
14075 && aggregate_value_p (TREE_TYPE (TREE_TYPE (fndecl))))
14076 {
14077 DECL_ALIGN (r) = DECL_ALIGN (DECL_RESULT (fndecl));
14078 walk_tree_without_duplicates (&DECL_SAVED_TREE (fndecl),
14079 nullify_returns_r, r);
14080 }
14081 else
14082 /* Clear it so genrtl_start_function and declare_return_variable
14083 know we're not optimizing. */
14084 current_function_return_value = NULL_TREE;
14085 }
14086
a8f73d4b 14087 /* Remember that we were in class scope. */
db5ae43f 14088 if (current_class_name)
a8f73d4b 14089 ctype = current_class_type;
db5ae43f 14090
1caa11d3
MM
14091 /* Must mark the RESULT_DECL as being in this function. */
14092 DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
14093
14094 /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
14095 to the FUNCTION_DECL node itself. */
14096 BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
14097
59026e79 14098 /* Save away current state, if appropriate. */
f444e36b 14099 if (!processing_template_decl)
59026e79
MM
14100 save_function_data (fndecl);
14101
95fabfd3
MM
14102 /* If this function calls `setjmp' it cannot be inlined. When
14103 `longjmp' is called it is not guaranteed to restore the value of
14104 local variables that have been modified since the call to
14105 `setjmp'. So, if were to inline this function into some caller
14106 `c', then when we `longjmp', we might not restore all variables
14107 in `c'. (It might seem, at first blush, that there's no way for
14108 this function to modify local variables in `c', but their
14109 addresses may have been stored somewhere accessible to this
14110 function.) */
f444e36b 14111 if (!processing_template_decl && calls_setjmp_p (fndecl))
95fabfd3
MM
14112 DECL_UNINLINABLE (fndecl) = 1;
14113
f444e36b
MM
14114 /* Clear out memory we no longer need. */
14115 free_after_parsing (cfun);
14116 /* Since we never call rest_of_compilation, we never clear
14117 CFUN. Do so explicitly. */
14118 free_after_compilation (cfun);
14119 cfun = NULL;
a8f73d4b
MM
14120
14121 /* If this is a in-class inline definition, we may have to pop the
14122 bindings for the template parameters that we added in
14123 maybe_begin_member_template_processing when start_function was
14124 called. */
14125 if (inclass_inline)
14126 maybe_end_member_template_processing ();
14127
14128 /* Leave the scope of the class. */
14129 if (ctype)
14130 pop_nested_class ();
5566b478
MS
14131
14132 --function_depth;
8d08fdba 14133
4d6abc1c 14134 /* Clean up. */
28cbf42c 14135 if (! nested)
1f8f4a0b
MM
14136 /* Let the error reporting routines know that we're outside a
14137 function. For a nested function, this value is used in
14138 pop_cp_function_context and then reset via pop_function_context. */
14139 current_function_decl = NULL_TREE;
4d6abc1c
MM
14140
14141 return fndecl;
8d08fdba
MS
14142}
14143\f
14144/* Create the FUNCTION_DECL for a function definition.
8d08fdba
MS
14145 DECLSPECS and DECLARATOR are the parts of the declaration;
14146 they describe the return type and the name of the function,
14147 but twisted together in a fashion that parallels the syntax of C.
14148
14149 This function creates a binding context for the function body
14150 as well as setting up the FUNCTION_DECL in current_function_decl.
14151
14152 Returns a FUNCTION_DECL on success.
14153
14154 If the DECLARATOR is not suitable for a function (it defines a datum
14155 instead), we return 0, which tells yyparse to report a parse error.
14156
14157 May return void_type_node indicating that this method is actually
14158 a friend. See grokfield for more details.
14159
14160 Came here with a `.pushlevel' .
14161
14162 DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
14163 CHANGES TO CODE IN `grokfield'. */
e92cc029 14164
8d08fdba 14165tree
acf82af2
JM
14166start_method (declspecs, declarator, attrlist)
14167 tree declarator, declspecs, attrlist;
8d08fdba 14168{
c11b6f21 14169 tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
91d231cb 14170 &attrlist);
8d08fdba
MS
14171
14172 /* Something too ugly to handle. */
14173 if (fndecl == NULL_TREE)
14174 return NULL_TREE;
14175
14176 /* Pass friends other than inline friend functions back. */
a1774733 14177 if (fndecl == void_type_node)
8d08fdba
MS
14178 return fndecl;
14179
14180 if (TREE_CODE (fndecl) != FUNCTION_DECL)
14181 /* Not a function, tell parser to report parse error. */
14182 return NULL_TREE;
14183
8d08fdba
MS
14184 if (DECL_IN_AGGR_P (fndecl))
14185 {
14186 if (IDENTIFIER_ERROR_LOCUS (DECL_ASSEMBLER_NAME (fndecl)) != current_class_type)
14187 {
68642fb6 14188 if (DECL_CONTEXT (fndecl)
2c73f9f5 14189 && TREE_CODE( DECL_CONTEXT (fndecl)) != NAMESPACE_DECL)
33bd39a2 14190 error ("`%D' is already defined in class `%T'", fndecl,
2ae7bada 14191 DECL_CONTEXT (fndecl));
8d08fdba
MS
14192 }
14193 return void_type_node;
14194 }
14195
f3400fe2
JM
14196 check_template_shadow (fndecl);
14197
79065db2 14198 DECL_DECLARED_INLINE_P (fndecl) = 1;
faae18ab 14199
8926095f 14200 if (flag_default_inline)
8d08fdba
MS
14201 DECL_INLINE (fndecl) = 1;
14202
36a117a5
MM
14203 /* We process method specializations in finish_struct_1. */
14204 if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
3ac3d9ea 14205 fndecl = push_template_decl (fndecl);
a0a33927 14206
8d08fdba
MS
14207 if (! DECL_FRIEND_P (fndecl))
14208 {
8d08fdba
MS
14209 if (TREE_CHAIN (fndecl))
14210 {
14211 fndecl = copy_node (fndecl);
14212 TREE_CHAIN (fndecl) = NULL_TREE;
14213 }
271e6f02 14214 grok_special_member_properties (fndecl);
8d08fdba
MS
14215 }
14216
cd9f6678 14217 cp_finish_decl (fndecl, NULL_TREE, NULL_TREE, 0);
8d08fdba
MS
14218
14219 /* Make a place for the parms */
14220 pushlevel (0);
14221 current_binding_level->parm_flag = 1;
68642fb6 14222
8d08fdba
MS
14223 DECL_IN_AGGR_P (fndecl) = 1;
14224 return fndecl;
14225}
14226
14227/* Go through the motions of finishing a function definition.
14228 We don't compile this method until after the whole class has
14229 been processed.
14230
14231 FINISH_METHOD must return something that looks as though it
14232 came from GROKFIELD (since we are defining a method, after all).
14233
14234 This is called after parsing the body of the function definition.
14235 STMTS is the chain of statements that makes up the function body.
14236
14237 DECL is the ..._DECL that `start_method' provided. */
14238
14239tree
14240finish_method (decl)
14241 tree decl;
14242{
14243 register tree fndecl = decl;
14244 tree old_initial;
8d08fdba
MS
14245
14246 register tree link;
14247
a1774733 14248 if (decl == void_type_node)
8d08fdba
MS
14249 return decl;
14250
14251 old_initial = DECL_INITIAL (fndecl);
14252
14253 /* Undo the level for the parms (from start_method).
14254 This is like poplevel, but it causes nothing to be
14255 saved. Saving information here confuses symbol-table
14256 output routines. Besides, this information will
14257 be correctly output when this method is actually
14258 compiled. */
14259
14260 /* Clear out the meanings of the local variables of this level;
14261 also record in each decl which block it belongs to. */
14262
14263 for (link = current_binding_level->names; link; link = TREE_CHAIN (link))
14264 {
14265 if (DECL_NAME (link) != NULL_TREE)
d8f8dca1 14266 pop_binding (DECL_NAME (link), link);
8d08fdba
MS
14267 my_friendly_assert (TREE_CODE (link) != FUNCTION_DECL, 163);
14268 DECL_CONTEXT (link) = NULL_TREE;
14269 }
14270
1c0cc57e
KG
14271 GNU_xref_end_scope ((size_t) current_binding_level,
14272 (size_t) current_binding_level->level_chain,
8d08fdba 14273 current_binding_level->parm_flag,
5566b478 14274 current_binding_level->keep);
8d08fdba
MS
14275
14276 poplevel (0, 0, 0);
14277
14278 DECL_INITIAL (fndecl) = old_initial;
14279
14280 /* We used to check if the context of FNDECL was different from
14281 current_class_type as another way to get inside here. This didn't work
14282 for String.cc in libg++. */
14283 if (DECL_FRIEND_P (fndecl))
14284 {
14285 CLASSTYPE_INLINE_FRIENDS (current_class_type)
14286 = tree_cons (NULL_TREE, fndecl, CLASSTYPE_INLINE_FRIENDS (current_class_type));
14287 decl = void_type_node;
14288 }
14289
14290 return decl;
14291}
14292\f
14293/* Called when a new struct TYPE is defined.
14294 If this structure or union completes the type of any previous
14295 variable declaration, lay it out and output its rtl. */
14296
14297void
14298hack_incomplete_structures (type)
14299 tree type;
14300{
f30432d7 14301 tree *list;
70adf8a9 14302 struct binding_level *level;
8d08fdba
MS
14303
14304 if (!type) /* Don't do this for class templates. */
14305 return;
14306
70adf8a9
JM
14307 if (namespace_bindings_p ())
14308 {
14309 level = 0;
14310 list = &namespace_scope_incomplete;
14311 }
14312 else
14313 {
14314 level = innermost_nonclass_level ();
14315 list = &level->incomplete;
14316 }
14317
14318 while (1)
14319 {
14320 while (*list)
14321 {
14322 tree decl = TREE_VALUE (*list);
14323 if ((decl && TREE_TYPE (decl) == type)
14324 || (TREE_TYPE (decl)
14325 && TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
14326 && TREE_TYPE (TREE_TYPE (decl)) == type))
f30432d7 14327 {
70adf8a9
JM
14328 int toplevel = toplevel_bindings_p ();
14329 if (TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
14330 && TREE_TYPE (TREE_TYPE (decl)) == type)
14331 layout_type (TREE_TYPE (decl));
14332 layout_decl (decl, 0);
3e411c3f 14333 rest_of_decl_compilation (decl, NULL, toplevel, 0);
70adf8a9
JM
14334 if (! toplevel)
14335 {
14336 tree cleanup;
14337 expand_decl (decl);
14338 cleanup = maybe_build_cleanup (decl);
14339 expand_decl_init (decl);
14340 if (! expand_decl_cleanup (decl, cleanup))
33bd39a2 14341 error ("parser lost in parsing declaration of `%D'",
70adf8a9
JM
14342 decl);
14343 }
14344 *list = TREE_CHAIN (*list);
f30432d7 14345 }
70adf8a9
JM
14346 else
14347 list = &TREE_CHAIN (*list);
14348 }
14349
14350 /* Keep looking through artificial binding levels generated
14351 for local variables. */
14352 if (level && level->keep == 2)
14353 {
14354 level = level->level_chain;
14355 list = &level->incomplete;
f30432d7
MS
14356 }
14357 else
70adf8a9 14358 break;
f30432d7 14359 }
8d08fdba
MS
14360}
14361
86f45d2c
MM
14362/* If DECL is of a type which needs a cleanup, build that cleanup
14363 here. */
e92cc029 14364
86f45d2c
MM
14365tree
14366maybe_build_cleanup (decl)
14367 tree decl;
8d08fdba
MS
14368{
14369 tree type = TREE_TYPE (decl);
86f45d2c 14370
834c6dff 14371 if (type != error_mark_node && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
8d08fdba 14372 {
80048418 14373 int flags = LOOKUP_NORMAL|LOOKUP_DESTRUCTOR;
8d08fdba 14374 tree rval;
8d08fdba 14375
8d08fdba
MS
14376 if (TREE_CODE (type) == ARRAY_TYPE)
14377 rval = decl;
14378 else
14379 {
14380 mark_addressable (decl);
14381 rval = build_unary_op (ADDR_EXPR, decl, 0);
14382 }
14383
14384 /* Optimize for space over speed here. */
14385 if (! TYPE_USES_VIRTUAL_BASECLASSES (type)
14386 || flag_expensive_optimizations)
14387 flags |= LOOKUP_NONVIRTUAL;
14388
86f45d2c
MM
14389 rval = build_delete (TREE_TYPE (rval), rval,
14390 sfk_complete_destructor, flags, 0);
8d08fdba
MS
14391
14392 if (TYPE_USES_VIRTUAL_BASECLASSES (type)
14393 && ! TYPE_HAS_DESTRUCTOR (type))
e1b3e07d 14394 rval = build_compound_expr (tree_cons (NULL_TREE, rval,
051e6fd7 14395 build_tree_list (NULL_TREE, build_vbase_delete (type, decl))));
8d08fdba 14396
8d08fdba
MS
14397 return rval;
14398 }
14399 return 0;
14400}
14401\f
558475f0 14402/* When a stmt has been parsed, this function is called. */
8d08fdba
MS
14403
14404void
14405finish_stmt ()
14406{
558475f0
MM
14407 /* Always assume this statement was not an expression statement. If
14408 it actually was an expression statement, its our callers
14409 responsibility to fix this up. */
14410 last_expr_type = NULL_TREE;
8d08fdba
MS
14411}
14412
3afb32a4
MM
14413/* DECL was originally constructed as a non-static member function,
14414 but turned out to be static. Update it accordingly. */
700f8a87 14415
8857f91e 14416void
3afb32a4
MM
14417revert_static_member_fn (decl)
14418 tree decl;
8d08fdba 14419{
700f8a87 14420 tree tmp;
3afb32a4
MM
14421 tree function = TREE_TYPE (decl);
14422 tree args = TYPE_ARG_TYPES (function);
8d08fdba 14423
89d684bb 14424 if (cp_type_quals (TREE_TYPE (TREE_VALUE (args)))
91063b51 14425 != TYPE_UNQUALIFIED)
33bd39a2 14426 error ("static member function `%#D' declared with type qualifiers",
11306230 14427 decl);
f30432d7 14428
700f8a87
MS
14429 args = TREE_CHAIN (args);
14430 tmp = build_function_type (TREE_TYPE (function), args);
89d684bb 14431 tmp = build_qualified_type (tmp, cp_type_quals (function));
f30432d7 14432 tmp = build_exception_variant (tmp,
8d08fdba 14433 TYPE_RAISES_EXCEPTIONS (function));
3afb32a4
MM
14434 TREE_TYPE (decl) = tmp;
14435 if (DECL_ARGUMENTS (decl))
14436 DECL_ARGUMENTS (decl) = TREE_CHAIN (DECL_ARGUMENTS (decl));
14437 DECL_STATIC_FUNCTION_P (decl) = 1;
8d08fdba 14438}
a4443a08 14439
68642fb6
UD
14440/* Initialize the variables used during compilation of a C++
14441 function. */
db5ae43f 14442
99dccabc
MM
14443static void
14444push_cp_function_context (f)
14445 struct function *f;
14446{
ae499cce
MM
14447 struct cp_language_function *p
14448 = ((struct cp_language_function *)
14449 xcalloc (1, sizeof (struct cp_language_function)));
14450 f->language = (struct language_function *) p;
db5ae43f 14451
b35d4555
MM
14452 /* It takes an explicit call to expand_body to generate RTL for a
14453 function. */
14454 expanding_p = 0;
f1dedc31
MM
14455
14456 /* Whenever we start a new function, we destroy temporaries in the
14457 usual way. */
ae499cce 14458 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
db5ae43f
MS
14459}
14460
a8f73d4b
MM
14461/* Free the language-specific parts of F, now that we've finished
14462 compiling the function. */
db5ae43f 14463
99dccabc
MM
14464static void
14465pop_cp_function_context (f)
14466 struct function *f;
db5ae43f 14467{
d658cd4c 14468 if (f->language)
8e4ce833
JJ
14469 {
14470 struct cp_language_function *cp =
14471 (struct cp_language_function *) f->language;
14472 if (cp->x_local_names)
14473 VARRAY_FREE (cp->x_local_names);
14474 free (f->language);
14475 }
99dccabc 14476 f->language = 0;
db5ae43f 14477}
ebfc180f 14478
59026e79 14479/* Mark P for GC. */
4519c0a8 14480
59026e79
MM
14481static void
14482mark_lang_function (p)
ae499cce 14483 struct cp_language_function *p;
59026e79 14484{
87e3dbc9
MM
14485 if (!p)
14486 return;
14487
8f17b5c5
MM
14488 mark_c_language_function (&p->base);
14489
4519c0a8 14490 ggc_mark_tree (p->x_dtor_label);
4519c0a8
MM
14491 ggc_mark_tree (p->x_current_class_ptr);
14492 ggc_mark_tree (p->x_current_class_ref);
52a11cbf 14493 ggc_mark_tree (p->x_eh_spec_block);
8e4ce833 14494 ggc_mark_tree_varray (p->x_local_names);
4519c0a8 14495
6625cdb5 14496 mark_named_label_lists (&p->x_named_labels, &p->x_named_label_uses);
a8f73d4b 14497 mark_binding_level (&p->bindings);
4519c0a8
MM
14498}
14499
59026e79
MM
14500/* Mark the language-specific data in F for GC. */
14501
a09ba2e0 14502static void
59026e79
MM
14503mark_cp_function_context (f)
14504 struct function *f;
14505{
ae499cce 14506 mark_lang_function ((struct cp_language_function *) f->language);
59026e79 14507}
4519c0a8 14508
4519c0a8
MM
14509void
14510lang_mark_tree (t)
14511 tree t;
14512{
14513 enum tree_code code = TREE_CODE (t);
14514 if (code == IDENTIFIER_NODE)
14515 {
14516 struct lang_identifier *li = (struct lang_identifier *) t;
14517 struct lang_id2 *li2 = li->x;
14518 ggc_mark_tree (li->namespace_bindings);
a8f73d4b 14519 ggc_mark_tree (li->bindings);
4519c0a8
MM
14520 ggc_mark_tree (li->class_value);
14521 ggc_mark_tree (li->class_template_info);
14522
14523 if (li2)
14524 {
14525 ggc_mark_tree (li2->label_value);
14526 ggc_mark_tree (li2->implicit_decl);
14527 ggc_mark_tree (li2->error_locus);
14528 }
14529 }
87e3dbc9
MM
14530 else if (code == CPLUS_BINDING)
14531 {
14532 if (BINDING_HAS_LEVEL_P (t))
14533 mark_binding_level (&BINDING_LEVEL (t));
14534 else
14535 ggc_mark_tree (BINDING_SCOPE (t));
14536 ggc_mark_tree (BINDING_VALUE (t));
14537 }
14538 else if (code == OVERLOAD)
14539 ggc_mark_tree (OVL_FUNCTION (t));
14540 else if (code == TEMPLATE_PARM_INDEX)
14541 ggc_mark_tree (TEMPLATE_PARM_DECL (t));
4519c0a8
MM
14542 else if (TREE_CODE_CLASS (code) == 'd')
14543 {
14544 struct lang_decl *ld = DECL_LANG_SPECIFIC (t);
14545
14546 if (ld)
14547 {
d60f72ae 14548 ggc_mark (ld);
8f17b5c5 14549 c_mark_lang_decl (&ld->decl_flags.base);
5362b086 14550 if (!DECL_GLOBAL_CTOR_P (t)
6462c441 14551 && !DECL_GLOBAL_DTOR_P (t)
8e4ce833
JJ
14552 && !DECL_THUNK_P (t)
14553 && !DECL_DISCRIMINATOR_P (t))
af3b4e59 14554 ggc_mark_tree (ld->decl_flags.u2.access);
31f8e4f3
MM
14555 else if (DECL_THUNK_P (t))
14556 ggc_mark_tree (ld->decl_flags.u2.vcall_offset);
4519c0a8
MM
14557 if (TREE_CODE (t) != NAMESPACE_DECL)
14558 ggc_mark_tree (ld->decl_flags.u.template_info);
16bb3387
JM
14559 else
14560 mark_binding_level (&NAMESPACE_LEVEL (t));
4519c0a8
MM
14561 if (CAN_HAVE_FULL_LANG_DECL_P (t))
14562 {
4519c0a8 14563 ggc_mark_tree (ld->befriending_classes);
8f17b5c5 14564 ggc_mark_tree (ld->context);
db9b2174 14565 ggc_mark_tree (ld->cloned_function);
4519c0a8
MM
14566 if (TREE_CODE (t) == TYPE_DECL)
14567 ggc_mark_tree (ld->u.sorted_fields);
59026e79
MM
14568 else if (TREE_CODE (t) == FUNCTION_DECL
14569 && !DECL_PENDING_INLINE_P (t))
14570 mark_lang_function (DECL_SAVED_FUNCTION_DATA (t));
4519c0a8
MM
14571 }
14572 }
14573 }
14574 else if (TREE_CODE_CLASS (code) == 't')
14575 {
14576 struct lang_type *lt = TYPE_LANG_SPECIFIC (t);
14577
68642fb6 14578 if (lt && !(TREE_CODE (t) == POINTER_TYPE
87e3dbc9 14579 && TREE_CODE (TREE_TYPE (t)) == METHOD_TYPE))
4519c0a8 14580 {
c27db0df 14581 ggc_mark (lt);
911a71a7 14582 ggc_mark_tree (lt->primary_base);
4519c0a8
MM
14583 ggc_mark_tree (lt->vfields);
14584 ggc_mark_tree (lt->vbases);
14585 ggc_mark_tree (lt->tags);
4519c0a8 14586 ggc_mark_tree (lt->size);
fee7654e 14587 ggc_mark_tree (lt->pure_virtuals);
4519c0a8
MM
14588 ggc_mark_tree (lt->friend_classes);
14589 ggc_mark_tree (lt->rtti);
14590 ggc_mark_tree (lt->methods);
14591 ggc_mark_tree (lt->template_info);
87e3dbc9 14592 ggc_mark_tree (lt->befriending_classes);
4519c0a8 14593 }
87e3dbc9
MM
14594 else if (lt)
14595 /* In the case of pointer-to-member function types, the
14596 TYPE_LANG_SPECIFIC is really just a tree. */
14597 ggc_mark_tree ((tree) lt);
4519c0a8
MM
14598 }
14599}
5fd8e536
JM
14600
14601/* Return the IDENTIFIER_GLOBAL_VALUE of T, for use in common code, since
14602 the definition of IDENTIFIER_GLOBAL_VALUE is different for C and C++. */
14603
14604tree
14605identifier_global_value (t)
14606 tree t;
14607{
14608 return IDENTIFIER_GLOBAL_VALUE (t);
14609}
d363e7bf 14610
eaa7c03f
JM
14611/* Build the void_list_node (void_type_node having been created). */
14612tree
14613build_void_list_node ()
14614{
14615 tree t = build_tree_list (NULL_TREE, void_type_node);
14616 TREE_PARMLIST (t) = 1;
14617 return t;
14618}
14619
d363e7bf
AJ
14620static int
14621cp_missing_noreturn_ok_p (decl)
14622 tree decl;
14623{
14624 /* A missing noreturn is ok for the `main' function. */
92643fea 14625 return DECL_MAIN_P (decl);
d363e7bf 14626}
This page took 5.013069 seconds and 5 git commands to generate.